ansible命令:
ansible all -m ping //对主机清单中的所有机器执行ping模块(命令)
ansible all --list //查看主机清单中的所有host
ansible my-test --list //查看主机清单中某个分组(my-test)下的所有host
ansible-doc -l //列出所有模块
ansible-doc -l |wc -l //统计出总共有多少个模块
ansible-doc ping //ping为模块名,表示查看某个模块的内容
ansible "gourpA:&groupB" -m ping //对同时在两个主机清单分组的机器执行某命令时使用:&来连接,并用单引号或双引号来引用组名
ansible 'gourpA:!groupB' -m ping //对在组A但不在组B的主机执行某命令,这里必须使用单引号
ansible all -m ping -u anotheruser //-u 参数:使用特定用户连接被控机器,默认是root
ansible all -u anotheruser -m command -a 'ls /usr' // -m 指定了command模块,-a是参数,指定了要在被控机器上执行的命令
[root@localhost ansible]# ansible-doc ping
> PING (/usr/lib/python2.7/site-packages/ansible/modules/system/ping.py)
返回结果中给出了该模块的路径,可以去查看具体的python代码。
ansible 命令的执行过程:
- 加载自己的配置文件,默认是/etc/ansible/ansible.cfg
- 加载自己对应的模块文件,即命令中所用到的模块对应的py文件等。
- 通过ansible将模块或命令生成相应的py文件,然后将该文件传输至被控机器上。
- 在被控机器上给该py文件加上可执行权限。
- 执行该文件并返回结果。
- 删除该py文件。(该py文件只是临时文件)
为了看命令的具体实现过程,我们可以在执行命令时加上-v/-vv/-vvv来递进式地获取更详细的执行过程。
ansible all -m ping -vvv
在执行信息中可以看到有PUT命令去将生成的py文件放到被控主机上
PUT /root/.ansible/tmp/ansible-local-50690lU4CF/tmp21cRd0 TO /root/.ansible/tmp/ansible-tmp-1628689002.4-269807041363411/AnsiballZ_ping.py
在执行信息中会有chmod u+x关键字表名给py文件加执行权限
SSH: EXEC ssh -C -o ControlMaster=auto -o ControlPersist=60s -o StrictHostKeyChecking=no -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o ConnectTimeout=10 -o ControlPath=/root/.ansible/cp/59c4b5eeac 192.168.184.129 '/bin/sh -c '"'"'chmod u+x /root/.ansible/tmp/ansible-tmp-1628689002.4-269807041363411/ /root/.ansible/tmp/ansible-tmp-1628689002.4-269807041363411/AnsiballZ_ping.py && sleep 0'"'"''
在执行信息中会有rm -f -r的关键字表名执行完成后会将该py文件删掉,所以说这个py文件是一个临时文件
SSH: EXEC ssh -C -o ControlMaster=auto -o ControlPersist=60s -o StrictHostKeyChecking=no -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o ConnectTimeout=10 -o ControlPath=/root/.ansible/cp/59c4b5eeac 192.168.184.129 '/bin/sh -c '"'"'rm -f -r /root/.ansible/tmp/ansible-tmp-1628689002.4-269807041363411/ > /dev/null 2>&1 && sleep 0'"'"''