hualinux 进阶 2-1.6:ansible 剧本Playbooks(三)输出详情和调试

目录

 一、说明

二、 输出详情(-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<<EOF
---
- hosts: all
  remote_user: root
  tasks:
  - name: show system version and ip addresss
    shell: echo "你的操作系统是{{ ansible_distribution }}{{ ansible_distribution_version }},
           IP地址是 {{ ansible_all_ipv4_addresses }} "
EOF
cat myYAML/system_version_ip.yml

#执行playbook
ansible-playbook 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 /-vvv /-vvvv)

-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看一下情况对比一下有什么不同

 

三、 check模式和 pause模块

上面的verbose模式会打印出所有模块运行后的变量.这对于你要使用register功能时候很重要. 也有以下其它模式

3.1 check模式(-C, --check)

除了verbose模式外,ansible还提供了check模式和diff模式.只需要执行playbook时添加参数–check–diff.check模式运行时,ansible不会真正控制远程机器发生变更.这能够让你获得这次playbook任务中,将会发生changed事件的列表.

很重要的一点是check模式不是完美的.有一些模块是会跳过check模式的.尤其明显的限制是在运行commandshell模块

diff模式下,当文件发现更变,会打印出变更文件的变更部分.配合check模式使用效果更好

3.2 pause模块

另外一个debug技巧是使用pause模块,它可以让你需要在某个地方需要检查远程机器的配置的时候暂停playbook的执行.这样可以让先观察一下运行到这里为止的效果,再判断是否继续运行下去。

 

四、使用debug模块调试

平时我们在使用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<<EOF
---
- hosts: all
  remote_user: root
  tasks:
  - name: show system version and ip addresss
    shell: echo "你的操作系统是{{ ansible_distribution }}{{ ansible_distribution_version }},
           IP地址是 {{ ansible_all_ipv4_addresses|join(" ") }} "
    register: result
  - name: Show debug info
    debug: var=result.stdout verbosity=0
EOF
cat myYAML/system_version_ip.yml
#执行剧本,查看一下结果
ansible-playbook 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 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值