1. 命令行参数

-v,–verbose   				详细模式,如果命令执行成功,输出详细的结果(-vv –vvv -vvvv)
-i PATH,–inventory=PATH      指定host文件的路径,默认是在/etc/ansible/hosts(生产环境经常用到)
-f NUM,–forks=NU NUM是指定一个整数,默认是5,指定fork开启同步进程的个数。
-m NAME,–module-name=NAME 指定使用的module名称,默认是command
-m DIRECTORY,–module-path=DIRECTORY 指定module的目录来加载module,默认是/usr/share/ansible,
-a,MODULE_ARGS 指定module模块的参数
-k,-ask-pass 提示输入ssh的密码,而不是使用基于ssh的密钥认证
-sudo 指定使用sudo获得root权限(生产环境经常用到)
-K,-ask-sudo-pass 提示输入sudo密码,与–sudo一起使用 (生产环境经常用到)
-u USERNAME,-user=USERNAME 指定移动端的执行用户
-C,-check 测试此命令执行会改变什么内容,不会真正的去执行

2. command模块测试环境

[root@temp01 ~]# ansible all -a "pwd"
192.168.3.70 | SUCCESS | rc=0 >>
/root 192.168.3.60 | SUCCESS | rc=0 >>
/root

 [root@temp01 ~]# ansible all -m command -a "pwd"    #-m command 原来是可以省略的,ansible 默认模块就是command
 192.168.3.70 | SUCCESS | rc=0 >>
 /root

 192.168.3.60 | SUCCESS | rc=0 >>
 /root

3. 再用ping模块

#-f 参数用法
[root@temp01 ~]# ansible all -m ping -f 1    #all 表示hosts里面所有主机 -m 调用模块 -f 指定同步进程数
192.168.3.60 | SUCCESS => {
"changed": false,
"ping": "pong"
}
192.168.3.70 | SUCCESS => {
"changed": false,
"ping": "pong"
}
#-C参数用法
[root@temp01 ~]# ansible all -m ping -f 1 -C  
192.168.3.60 | SUCCESS => {
"changed": false,
"ping": "pong"
}
192.168.3.70 | SUCCESS => {
"changed": false,
"ping": "pong"
}

4. user模块

[root@temp01 ~]# ansible db -m user -a 'name=DBA uid=505 home=/home/dba shell=/sbin/nologin'
192.168.3.70 | SUCCESS => {
"changed": true,
"comment": "",
"createhome": true,
"group": 505,
"home": "/home/dba",
"name": "DBA",
"shell": "/sbin/nologin",
"state": "present",
"system": false,
"uid": 505
}
[root@temp01 ~]# ansible db -m user -a 'name=DBA state=absent'    #state属性有:present表示添加,absend表示删除,state属性默认是present
192.168.3.70 | SUCCESS => {
"changed": true,
"force": false,
"name": "DBA",
"remove": false,
"state": "absent"
}

修改用户密码

[root@temp01 ansible_playbook]# ansible all -m shell -a 'echo "123456" | passwd  foo --stdin'
192.168.3.60 | SUCCESS | rc=0 >>
Changing password for user foo.
passwd: all authentication tokens updated successfully. 192.168.3.70 | SUCCESS | rc=0 >>
Changing password for user foo.
passwd: all authentication tokens updated successfully.

5. 看看下面这个坑

[root@temp01 ~]# ansible all -m cron -a "name=cat minute='*/1' job='ls /root'"
192.168.3.70 | FAILED! => {
"changed": false,
"failed": true,
"msg": "Aborting, target uses selinux but python bindings (libselinux-python) aren't installed!"
}
192.168.3.60 | FAILED! => {
"changed": false,
"failed": true,
"msg": "Aborting, target uses selinux but python bindings (libselinux-python) aren't installed!"
}
[root@temp01 ~]# ansible all -m copy -a "src=/etc/ansible/hosts dest=/root mode=600"
192.168.3.60 | FAILED! => {
"changed": false,
"checksum": "8add7a4e56ae6f7a1c6d0218ce757510d195bb3c",
"failed": true,
"msg": "Aborting, target uses selinux but python bindings (libselinux-python) aren't installed!"
}
192.168.3.70 | FAILED! => {
"changed": false,
"checksum": "8add7a4e56ae6f7a1c6d0218ce757510d195bb3c",
"failed": true,
"msg": "Aborting, target uses selinux but python bindings (libselinux-python) aren't installed!"
}

需要在客户端安装libselinux-python库

方法如下,随便介绍下yum模块,哈哈

[root@temp01 ~]# ansible all -m yum -a 'name=libselinux-python state=present'
192.168.3.70 | SUCCESS => {
"changed": true,
"msg": "warning: rpmts_HdrFromFdno: Header V3 RSA/SHA1 Signature, key ID c105b9de: NOKEY\nImporting GPG key 0xC105B9DE:\n Userid : CentOS-6 Key (CentOS 6 Official Signing Key) <centos-6-key@centos.org>\n Package: centos-release-6-5.el6.centos.11.1.x86_64 (@anaconda-CentOS-201311272149.x86_64/6.5)\n From : /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6\n",
"rc": 0,
"results": [
"Loaded plugins: fastestmirror, security\nLoading mirror speeds from cached hostfile\n * base: mirrors.zju.edu.cn\n * extras: centos.ustc.edu.cn\n * updates: mirrors.zju.edu.cn\nSetting up Install Process\nResolving Dependencies\n--> Running transaction check\n---> Package libselinux-python.x86_64 0:2.0.94-7.el6 will be installed\n--> Processing Dependency: libselinux = 2.0.94-7.el6 for package: libselinux-python-2.0.94-7.el6.x86_64\n--> Running transaction check\n---> Package libselinux.x86_64 0:2.0.94-5.3.el6_4.1 will be updated\n--> Processing Dependency: libselinux = 2.0.94-5.3.el6_4.1 for package: libselinux-utils-2.0.94-5.3.el6_4.1.x86_64\n---> Package libselinux.x86_64 0:2.0.94-7.el6 will be an update\n--> Running transaction check\n---> Package libselinux-utils.x86_64 0:2.0.94-5.3.el6_4.1 will be updated\n---> Package libselinux-utils.x86_64 0:2.0.94-7.el6 will be an update\n--> Finished Dependency Resolution\n\nDependencies Resolved\n\n================================================================================\n Package Arch Version Repository Size\n================================================================================\nInstalling:\n libselinux-python x86_64 2.0.94-7.el6 base 203 k\nUpdating for dependencies:\n libselinux x86_64 2.0.94-7.el6 base 109 k\n libselinux-utils x86_64 2.0.94-7.el6 base 82 k\n\nTransaction Summary\n================================================================================\nInstall 1 Package(s)\nUpgrade 2 Package(s)\n\nTotal download size: 394 k\nDownloading Packages:\n--------------------------------------------------------------------------------\nTotal 210 kB/s | 394 kB 00:01 \nRetrieving key from file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6\nRunning rpm_check_debug\nRunning Transaction Test\nTransaction Test Succeeded\nRunning Transaction\n\r Updating : libselinux-2.0.94-7.el6.x86_64 1/5 \n\r Installing : libselinux-python-2.0.94-7.el6.x86_64 2/5 \n\r Updating : libselinux-utils-2.0.94-7.el6.x86_64 3/5 \n\r Cleanup : libselinux-utils-2.0.94-5.3.el6_4.1.x86_64 4/5 \n\rCleanup : libselinux-2.0.94-5.3.el6_4.1.x86_64 5/5 \n\r Verifying : libselinux-python-2.0.94-7.el6.x86_64 1/5 \n\r Verifying : libselinux-utils-2.0.94-7.el6.x86_64 2/5 \n\r Verifying : libselinux-2.0.94-7.el6.x86_64 3/5 \n\r Verifying : libselinux-2.0.94-5.3.el6_4.1.x86_64 4/5 \n\r Verifying : libselinux-utils-2.0.94-5.3.el6_4.1.x86_64 5/5 \n\nInstalled:\n libselinux-python.x86_64 0:2.0.94-7.el6 \n\nDependency Updated:\n libselinux.x86_64 0:2.0.94-7.el6 libselinux-utils.x86_64 0:2.0.94-7.el6 \n\nComplete!\n"
]
}
192.168.3.60 | SUCCESS => {
"changed": true,
"msg": "warning: rpmts_HdrFromFdno: Header V3 RSA/SHA1 Signature, key ID c105b9de: NOKEY\nImporting GPG key 0xC105B9DE:\n Userid : CentOS-6 Key (CentOS 6 Official Signing Key) <centos-6-key@centos.org>\n Package: centos-release-6-5.el6.centos.11.1.x86_64 (@anaconda-CentOS-201311272149.x86_64/6.5)\n From : /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6\n",
"rc": 0,
"results": [
"Loaded plugins: fastestmirror, security\nLoading mirror speeds from cached hostfile\n * base: mirrors.cn99.com\n * extras: mirrors.cn99.com\n * updates: mirrors.cn99.com\nSetting up Install Process\nResolving Dependencies\n--> Running transaction check\n---> Package libselinux-python.x86_64 0:2.0.94-7.el6 will be installed\n--> Processing Dependency: libselinux = 2.0.94-7.el6 for package: libselinux-python-2.0.94-7.el6.x86_64\n--> Running transaction check\n--->Package libselinux.x86_64 0:2.0.94-5.3.el6_4.1 will be updated\n--> Processing Dependency: libselinux = 2.0.94-5.3.el6_4.1 for package: libselinux-utils-2.0.94-5.3.el6_4.1.x86_64\n---> Package libselinux.x86_64 0:2.0.94-7.el6 will be an update\n--> Running transaction check\n---> Package libselinux-utils.x86_64 0:2.0.94-5.3.el6_4.1 will be updated\n---> Package libselinux-utils.x86_64 0:2.0.94-7.el6 will be an update\n--> Finished Dependency Resolution\n\nDependencies Resolved\n\n================================================================================\n Package Arch Version Repository Size\n================================================================================\nInstalling:\n libselinux-python x86_64 2.0.94-7.el6 base 203 k\nUpdatingfor dependencies:\n libselinux x86_64 2.0.94-7.el6 base 109 k\n libselinux-utils x86_64 2.0.94-7.el6 base 82 k\n\nTransaction Summary\n================================================================================\nInstall 1 Package(s)\nUpgrade 2 Package(s)\n\nTotal download size: 394 k\nDownloading Packages:\n--------------------------------------------------------------------------------\nTotal 70 kB/s | 394 kB 00:05 \nRetrieving key from file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6\nRunning rpm_check_debug\nRunning Transaction Test\nTransaction Test Succeeded\nRunning Transaction\n\r Updating : libselinux-2.0.94-7.el6.x86_64 1/5 \n\r Installing : libselinux-python-2.0.94-7.el6.x86_64 2/5 \n\r Updating : libselinux-utils-2.0.94-7.el6.x86_64 3/5 \n\r Cleanup : libselinux-utils-2.0.94-5.3.el6_4.1.x86_64 4/5 \n\r Cleanup : libselinux-2.0.94-5.3.el6_4.1.x86_64 5/5 \n\r Verifying : libselinux-python-2.0.94-7.el6.x86_64 1/5 \n\r Verifying : libselinux-utils-2.0.94-7.el6.x86_64 2/5 \n\r Verifying : libselinux-2.0.94-7.el6.x86_64 3/5 \n\r Verifying : libselinux-2.0.94-5.3.el6_4.1.x86_64 4/5 \n\r Verifying : libselinux-utils-2.0.94-5.3.el6_4.1.x86_64 5/5 \n\nInstalled:\n libselinux-python.x86_64 0:2.0.94-7.el6 \n\nDependency Updated:\n libselinux.x86_64 0:2.0.94-7.el6 libselinux-utils.x86_64 0:2.0.94-7.el6 \n\nComplete!\n"
]
}

6. service 模块

[root@temp01 ~]# ansible all -m service -a 'name=sshd state=restarted'  #state属性有running,started,stopped,restarted,reloaded
192.168.3.60 | SUCCESS => {
"changed": true,
"name": "sshd",
"state": "started"
}
192.168.3.70 | SUCCESS => {
"changed": true,
"name": "sshd",
"state": "started"
}

7. yum模块还是介绍下

[root@temp01 ~]# ansible all -m yum -a 'name=ntp state=present'    #state属性有absent,present,installed,removed,latest
192.168.3.70 | SUCCESS => {
"changed": false,
"msg": "",
"rc": 0,
"results": [
"ntp-4.2.6p5-1.el6.centos.x86_64 providing ntp is already installed"
]
}
192.168.3.60 | SUCCESS => {
"changed": false,
"msg": "",
"rc": 0,
"results": [
"ntp-4.2.6p5-1.el6.centos.x86_64 providing ntp is already installed"
]
}

8. script模块 远程执行脚本

[root@temp01 ~]# cat ansible.sh              #脚本内容
#!/bin/bash
echo "Hello world" >>/root/ansible.log
[root@temp01 ~]# ansible all -m script -a 'ansible.sh'
192.168.3.70 | SUCCESS => {
"changed": true,
"rc": 0,
"stderr": "",
"stdout": "",
"stdout_lines": []
}
192.168.3.60 | SUCCESS => {
"changed": true,
"rc": 0,
"stderr": "",
"stdout": "",
"stdout_lines": []
} [root@example_02 ~]# pwd          #跳转到客户端验证
/root
[root@example_02 ~]# cat ansible.log
Hello world

9. 忘了一个重要的模块shell模块

shell 模块与command模块区别 ,shell支持管道符和变更,下面这个例子说明问题

[root@temp01 ~]# ansible all -m mommand -a 'cat /etc/passwd | grep root'
ERROR! this task 'mommand' has extra params, which is only allowed in the following modules: command, win_command, shell, win_shell, script, include, include_vars, add_host, group_by, set_fact, raw, meta
[root@temp01 ~]# ansible all -m shell -a 'cat /etc/passwd | grep root'
192.168.3.70 | SUCCESS | rc=0 >>
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin 192.168.3.60 | SUCCESS | rc=0 >>
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin

10. file模块  

(1)修改文件属性

[root@temp01 ~]# ansible all -m file -a 'path=/root/ansible.log owner=root mode=777 group=root'      #修改文件属性
192.168.3.60 | SUCCESS => {
"changed": true,
"gid": 0,
"group": "root",
"mode": "",
"owner": "root",
"path": "/root/ansible.log",
"secontext": "unconfined_u:object_r:admin_home_t:s0",
"size": 12,
"state": "file",
"uid": 0
}
192.168.3.70 | SUCCESS => {
"changed": true,
"gid": 0,
"group": "root",
"mode": "",
"owner": "root",
"path": "/root/ansible.log",
"secontext": "unconfined_u:object_r:admin_home_t:s0",
"size": 12,
"state": "file",
"uid": 0
}

(2)新建目录:类 mkdir -p

[root@temp01 ~]# ansible all -m file -a 'dest=/root/1/2/3/4/ mode=755 owner=root group=root state=directory'
192.168.3.60 | SUCCESS => {
"changed": true,
"gid": 0,
"group": "root",
"mode": "",
"owner": "root",
"path": "/root/1/2/3/4/",
"secontext": "unconfined_u:object_r:admin_home_t:s0",
"size": 4096,
"state": "directory",
"uid": 0
}
192.168.3.70 | SUCCESS => {
"changed": true,
"gid": 0,
"group": "root",
"mode": "",
"owner": "root",
"path": "/root/1/2/3/4/",
"secontext": "unconfined_u:object_r:admin_home_t:s0",
"size": 4096,
"state": "directory",
"uid": 0
} [root@example_02 ~]# ll
total 48
-rw-------. 1 root root 1106 Jul 11 05:26 anaconda-ks.cfg
-rwxrwxrwx. 1 root root 12 Dec 30 02:53 ansible.log
-rw-------. 1 root root 1052 Dec 30 01:09 hosts
-rw-r--r--. 1 root root 23089 Jul 11 05:26 install.log
-rw-r--r--. 1 root root 6240 Jul 11 05:24 install.log.syslog
[root@example_02 ~]# cd 1/2/3/4/                        #转到客户端验证
You have new mail in /var/spool/mail/root
[root@example_02 4]# pwd
/root/1/2/3/4

(3)删除目录文件

[root@temp01 ~]# ansible all -m file -a 'dest=/root/1/2/3/4/  state=absent'
192.168.3.60 | SUCCESS => {
"changed": true,
"path": "/root/1/2/3/4/",
"state": "absent"
}
192.168.3.70 | SUCCESS => {
"changed": true,
"path": "/root/1/2/3/4/",
"state": "absent"
} [root@example_02 ~]# cd 1/2/3/4            #跳转验证
-bash: cd: 1/2/3/4: No such file or directory
[root@example_02 ~]#

ansible 基本命令学习与踩坑的更多相关文章

  1. Unity接入九游SDK学习与踩坑

    学习之路漫漫,应修之期远兮.持之以恒,方得始终. 这几日接入九游SDK,于浑浑噩噩中成长. 下面是步骤: 一:下载九游SDK 二:打开Android Studio新建一个工程,并且新建一个Androi ...

  2. Grafana Loki 学习之踩坑记

    转发自:https://mp.weixin.qq.com/s/zfXNEkdDC9Vqd9lh1ptC1g Grafana 出品的 loki 日志框架完美地与 kubernetes 的 label 理 ...

  3. 学习git踩坑之路

    第一次使用git: 1.使用CentOS Linux release 7.3.1611 (Core),内核版本3.10.0-514.el7.x86_64 2.安装git: root权限运行:yum   ...

  4. react基础学习和react服务端渲染框架next.js踩坑

    说明 React作为Facebook 内部开发 Instagram 的项目中,是一个用来构建用户界面的优秀 JS 库,于 2013 年 5 月开源.作为前端的三大框架之一,React的应用可以说是非常 ...

  5. 踩坑学习python自动化测试第二天!

    class put_out(object): def Helloword(str): print(str) Hello,Inder,Pist ="", [],{} word= st ...

  6. react学习 | 踩坑指南

    react样式模块化的"omit -loader"坑 众所周知 react样式的模块化(css modules) 是自己模块中写自己的css,与其他模块互补影响,解决了命名冲突和全 ...

  7. linux ubuntu 学习总结(day01)基本命令学习

    个人总结,请尊重版权,转载请在显眼地方注明出处:https://www.cnblogs.com/sunshine5683/p/9948259.html day(01)基本命令学习 今天开始自学linu ...

  8. 我的微信小程序入门踩坑之旅

    前言 更好的阅读体验请:我的微信小程序入门踩坑之旅 小程序出来也有一段日子了,刚出来时也留意了一下.不过赶上生病,加上公司里也有别的事,主要是自己犯懒,就一直没做.这星期一,赶紧趁着这股热乎劲,也不是 ...

  9. vue+ vue-router + webpack 踩坑之旅

    说是踩坑之旅 其实是最近在思考一些问题 然后想实现方案的时候,就慢慢的查到这些方案   老司机可以忽略下面的内容了 1)起因  考虑到数据分离的问题  因为server是express搭的   自然少 ...

随机推荐

  1. Developing

    To work with the Android code, you will need to use both Git and Repo. In most situations, you can u ...

  2. HDU 3045 DP 斜率优化 Picnic Cows

    题意:将n个数分成若干组,每组数字的个数不少于t个,要把每组的数字减小到这组最小值,求所有数字减少的最小值. 先将这n个数从小到大排个序,可以想到一组里面的数一定是排序后相邻的. 设d(i)表示前i个 ...

  3. 【03】图解原型和原型链by魔芋

    [03]图解原型和原型链 一图胜前言             请先结合图解原型和原型链这张图. 可以分为4种情况. 情况1: Object有: constructor:是Function. __pro ...

  4. css3盒子模型及其定位

    盒子模型常见相关属性和属性取值 /*基本属性*/ padding: padding-left/right/top/bottom border: border-left/right/top/bottom ...

  5. c#笔记2018-12-27

    using System; /*2018-12-27 c#学习笔记 * 1.c#判断if /else if /switch * 2.循环while/for/do-while * 3.循环实例: for ...

  6. 【java基础 7】java内存区域分析及常见异常

    本篇博客,主要是读书笔记总结,还有就是结合培训分享的总结,没有太多的技术含量! java 的自动内存管理机制,使得程序员不用为每一个new惭怍的对象写配对的delete/ free代码(回想起C++的 ...

  7. 更新yum源导致yum不可用

    当安装和yum配置相关的包后报yum模块找不到 yum install -y yum-utils device-mapper-persistent-data lvm2 yum list|grep yu ...

  8. 08-为数组和arguments

    <!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...

  9. [kubernetes] 使用 Minikube 快速搭建本地 k8s 环境 (基于 Docker 驱动模式)

    一.实验环境 操作系统:Centos 7 x86_64 Docker:1.12.6 二.部署 k8s 步骤 2.1  安装 kubectl cat <<EOF > /etc/yum. ...

  10. CF dp 一句话解题

    wyq说刚入门oi 或是遇到瓶颈的时候就刷DP吧,虽然觉得这么刷CF题有点浪费,但是还是挺爽的,按照solved排序做的,前面的题都挺水的(忘记记录了混蛋),就不写了,从5C开始写解题 CF5 C. ...