一:ansible命令执行过程
1. 加载自己的配置文件 默认/etc/ansible/ansible.cfg
2. 加载自己对应的模块文件,如command
3. 通过ansible将模块或命令生成对应的临时py文件, 并将该文件传输至远程服务器的对应执行用户 $HOME/.ansible/tmp/ansible-tmp-数字/XXX.PY文件
4. 给文件+x执行
5. 执行并返回结果
6. 删除临时py文件,sleep 0退出
执行状态: 绿色:执行成功并且不需要做改变的操作
黄色:执行成功并且对目标主机做变更
红色:执行失败
二:ansible常用模块:
1.command模块:command:在远程主机执行命令,默认模块,可忽略 -m 选项
但是,command模块不支持特殊符号,| > *,也不支持变量:
Shell命令是通过/bin/sh进行执行的,command命令没有shell的环境变量,因此不支持特殊符号或者变量的操作。
2.shell模块:和command模块相似,用shell执行命令
shell模块支持一些特殊符号:重定向符号,变量等的操作
调用Bash执行命令,类似于:cat /tmp/first.txt | awk -F '|' '{print $1,$2}' &> /tmp/example.txt 这些复杂命令,即使使用shell也可能会失败。解决办法:写到脚本中,copy到远程执行,再把需要的结果拉回执行命令的机器。
3.script模块:功能:在远程机器上执行本地脚本
(1)执行本地的shell脚本文件,管控机的shell脚本文件
(2)判断被控机上的文件是否存在,如果不存在,就执行,如果存在,就跳过:
情况1:被控机上 /root/ 不存在(script.sh)文件,则主控机上会在被控机上执行这个脚本
情况2:被控机上 /root/ 存在和主控机/root/一样的(script.sh)文件,则主控机不会在被控机上执行这个脚本
(3)判断被控机上的文件或目录是否存在,如果存在则不执行,如果不存在,则执行:
4.copy模块:copy:从ansible服务器主控端复制文件到远程主机
src:源文件 指定拷贝文件的本地路径(如果有,则拷贝目录内容,比拷贝目录本身)
dest:指定目录路径
mode:设置权限
backup:备份源文