目录
一、说明
二、 输出详情(-v /-vvv /-vvvv)
三、 check模式和 pause模块
3.1 check模式(-C, --check)
3.2 pause模块
四、使用debug模块调试
上篇写了ansible条件选择,现在本章写一个剧本的输出详情和调试。
输了详细可以使用-v/-vv/-vvv
调试可以使用debug模块
用ansible-playbook命令执行剧本知道,只会显示执行结果成功或失败,如果是错误则报错。如果你们playbook中有变量,我们要显示playbook中变量的内容怎么办?
例:
我们有一个需要判断所有主机的操作系统并输入IP地址,剧本代码如下:
#编写剧本
cd /etc/ansible/
cat>myYAML/system_version_ip.yml<
#执行效果
[root@vm82 ansible]# ansible-playbook myYAML/system_version_ip.yml
PLAY [all] **************************************************************************************************************
TASK [Gathering Facts] **************************************************************************************************
ok: [192.168.3.76]
ok: [192.168.3.21]
TASK [show system version and ip addresss] ******************************************************************************
changed: [192.168.3.76]
changed: [192.168.3.21]
PLAY RECAP **************************************************************************************************************
192.168.3.21 : ok=2 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
192.168.3.76 : ok=2 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
从上面的屏幕中可以看到只有执行是否成功,可是我想看到192.168.3.21和192.168.3.76是什么操作系统及版本号呀?!!
这就要用到下面的输出详情了
-v, --verbose 详细
-vvv for more 比详细多点
-vvvv to enable connection debugging 调试模式,会输出非常多的信息,极少用,一般用debug模块调试比较多
我们现在加上“-v”再次执行一下上面的脚本看一下
#-v输出详情
[root@vm82 ansible]# ansible-playbook myYAML/system_version_ip.yml -v
Using /etc/ansible/ansible.cfg as config file
PLAY [all] **************************************************************************************************************
TASK [Gathering Facts] **************************************************************************************************
ok: [192.168.3.76]
ok: [192.168.3.21]
TASK [show system version and ip addresss] ******************************************************************************
changed: [192.168.3.76] => {"changed": true, "cmd": "echo \"你的操作系统是CentOS7.6, IP地址是 ['192.168.128.76', '192.168.3.76'] \"", "delta": "0:00:00.197109", "end": "2020-09-11 17:34:10.265334", "rc": 0, "start": "2020-09-11 17:34:10.068225", "stderr": "", "stderr_lines": [], "stdout": "你的操作系统是CentOS7.6, IP地址是 ['192.168.128.76', '192.168.3.76'] ", "stdout_lines": ["你的操作系统是CentOS7.6, IP地址是 ['192.168.128.76', '192.168.3.76'] "]}
changed: [192.168.3.21] => {"changed": true, "cmd": "echo \"你的操作系统是CentOS8.2, IP地址是 ['192.168.3.21', '192.168.128.21'] \"", "delta": "0:00:00.025029", "end": "2020-09-11 17:33:53.788056", "rc": 0, "start": "2020-09-11 17:33:53.763027", "stderr": "", "stderr_lines": [], "stdout": "你的操作系统是CentOS8.2, IP地址是 ['192.168.3.21', '192.168.128.21'] ", "stdout_lines": ["你的操作系统是CentOS8.2, IP地址是 ['192.168.3.21', '192.168.128.21'] "]}
PLAY RECAP **************************************************************************************************************
192.168.3.21 : ok=2 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
192.168.3.76 : ok=2 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
从上面看是不是有东西出来了,你也可以加-vvv看一下情况对比一下有什么不同
上面的verbose模式会打印出所有模块运行后的变量.这对于你要使用register功能时候很重要. 也有以下其它模式
除了verbose模式外,ansible还提供了check模式和diff模式.只需要执行playbook时添加参数–check和–diff.check模式运行时,ansible不会真正控制远程机器发生变更.这能够让你获得这次playbook任务中,将会发生changed事件的列表.
很重要的一点是check模式不是完美的.有一些模块是会跳过check模式的.尤其明显的限制是在运行command和shell模块
在diff模式下,当文件发现更变,会打印出变更文件的变更部分.配合check模式使用效果更好
另外一个debug技巧是使用pause模块,它可以让你需要在某个地方需要检查远程机器的配置的时候暂停playbook的执行.这样可以让先观察一下运行到这里为止的效果,再判断是否继续运行下去。
平时我们在使用ansible编写playbook时,经常会遇到错误,很多时候有不知道问题在哪里 。这个时候可以使用-vvv参数打印出来详细信息,不过很多时候-vvv参数里很多东西并不是我们想要的,这时候就可以使用官方提供的debug模块来查找问题出现在哪里
ansible playbook可以将多个命令组合来执行,但是很多时候我们需要接收服务器的反馈,所以debug模块就非常重要了。
常用参数:
msg:调试输出的消息
var:将某个任务执行的输出作为变量传递给debug模块,debug会直接将其打印输出
verbosity:debug的级别(默认是0级,全部显示)
debug模块一般和register注册变量一起使用
我们把上面的system_version_ip.yml修改成debug方式,并改为用json显示
cat>myYAML/system_version_ip.yml<
#执行效果
[root@vm82 ansible]# ansible-playbook myYAML/system_version_ip.yml
PLAY [all] **************************************************************************************************************
TASK [Gathering Facts] **************************************************************************************************
ok: [192.168.3.76]
ok: [192.168.3.21]
TASK [show system version and ip addresss] ******************************************************************************
changed: [192.168.3.76]
changed: [192.168.3.21]
TASK [Show debug info] **************************************************************************************************
ok: [192.168.3.21] => {
"result.stdout": "你的操作系统是CentOS8.2, IP地址是 192.168.3.21 192.168.128.21 "
}
ok: [192.168.3.76] => {
"result.stdout": "你的操作系统是CentOS7.6, IP地址是 192.168.128.76 192.168.3.76 "
}
PLAY RECAP **************************************************************************************************************
192.168.3.21 : ok=3 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
192.168.3.76 : ok=3 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0