Ansible命令的一般格式:

Ansible 主机IP  -m 模块  -a 模块参数

//主机IP:可以是具体IP也可以用正则表达式匹配也可以选择主机组,主机组在ansible

hosts文件中定义,hosts默认位置是/etc/ansible/hosts

模块:调用ansible的指定模块,由于ansible是基于模块工作的,所以在使用过程中务

必要指定将要使用的ansible模块。

模块参数:不同模块有不同的参数,具体模块定义具体参数,例如:shell模块用于批

量执行命令,参数为将要执行的命令,copy模块用于批量分发文件,参数为src=源文件位置,dest=目标位置

Ansible选项:

-m指定模块

-a指定模块参数

-k提示输入ssh密码,而不是使用秘钥

-K提示输入sudo密码,与sudo一起使用

-o一个主机的执行结果在一行显示

-s-u指定用户的时候,使用sudo获得root权限

-t将输入放到制定的目录下,命名为每一个主机的名称

-T超时时长

-B在后台运行命令,在制定NUM秒后kill该任务

-P每隔NUM秒,poll一个后台任务 和-B一起使用

-u指定移动端的执行用户

-UsudoSUDO_USERNAME,代替root用户

-c指定建立连接的类型,一般有sshlocalhost FILES

 

ansible命令的用法举例

一般格式:ansible host -m 模块 -a 命令

软件安装ansible host -m apt -a ‘name=gcc state=present’

或者ansible host -m yum -a “name=ntp state=installed”

执行命令:ansible host -m shell -a ‘date

拷贝文件:ansible host -m copy -a “src=/tmp/server dest=/tmp/server”

文件拉取:ansible host -m fetch -a "src=/tmp/server dest=/tmp/"

文件属性:ansible host -m file -a “dest=/tmp/server mode=755 owner=root group=root” 

服务管理:ansible zabbix -m service -a 'name=httpd state=restarted'

批量创建用户和密码:ansible zabbix -m user -a 'name=test003 password="$1$fUuOq8NK$7h3hD4bvJTX0jmoN40S7p1"'

 附:

批量创建用户和密码时可以使用该命令

ansible host -m shell -a useradd username

ansible host -m shell -a echo password | passwd username --stdin

模块:

ansible模块可以用ansible-doc -l命令查看,截止到发稿,ansible模块个数已有将近600个,而常用的模块也就十个左右,掌握了常用模块的使用就可以完成绝大多数的自动化操作。

ommand模块 [执行远程命令(默认模块)]

不支持管道操作

ansible testservers -m command -a 'uname -n'

script模块 [在远程主机执行主控端的shell/python脚本 ]

直接指定脚本位置即可

ansible testservers -m script -a '/etc/ansible/test.sh

shell模块 [类似于command模块、支持管道传递]

比较常用的模块

ansible testservers -m shell -a 'cat /tmp/test | grep ^test'

raw模块 [类似于command模块、支持管道传递]

ansible testservers -m raw -a "ifconfig eth0 |sed -n 2p |awk '{print \$2}' |awk -F: '{print \$2}'"

yum模块[对客户端进行yum操作]

使用yum安装软件,nameyum名,state为接下来的动作,一般情况下,state后面的参数以ed结尾

ansible test -m yum -a 'name=sshpass state=installed'

copy模块[批量分发文件]

执行该命令需要给dest指定目录和文件名,执行时可能出现md5校验失败的情况,跟ansible软件有一定的关系,根据实际情况判断。

文件拷贝时可以直接给客户端的该文件定义文件属性 参数为 owner=属主 group=属组 mode=权限

Copy时可以使用backup=yes参数对复制过程进行备份,当传输的文件与原来的文件不一样时,会自动备份客户端的源文件,而不是备份服务端文件。

validate='visudo -cf %s'参数可以在文件传输完成后进行校验,默认传输是需要校验的,校验失败颜色为×××,使用该参数后校验失败颜色为红色

ansible host -m copy -a “src=/tmp/server dest=/tmp/server”

fetch模块[将远程文件拉取到本地]

将远程目标的文件拉取到本地,默认位置为/本地指定文件夹/远程主机名/tmp/文件

使用lfat=yes参数指定本地存放文件夹,启用该参数时若指定的客户端不止一个,则最传输的文件覆盖掉前面传输的文件

ansible host -m fetch -a "src=/tmp/server dest=/tmp/"

file模块[更改目录属性]

File模块用于配置文件或目录属性,destpath指定文件或目录位置 mode指定权限 owner指定属主,group指定属组

使用state=directory参数可以在客户端创建文件夹

使用state=link dest指定软连接位置 可以创建软连接

ansible host -m file -a “dest=/tmp/server mode=755 owner=root group=root”

service模块[管理服务]

Service 模块用于控制服务的状态,state指定状态

running打开服务 不支持客户端语言为中文

started 打开服务 不支持客户端语言为中文

restarted 重启服务

stopped 关闭服务

重启服务还可以用shell模块参数为控制服务命令

ansible zabbix -m service -a 'name=httpd state=restarted'