博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ansible playbook callbacks
阅读量:6588 次
发布时间:2019-06-24

本文共 4048 字,大约阅读时间需要 13 分钟。

  hot3.png

大家都知道ansible的playbook是不会显示标准输出的。

如何能让ansible像commands line 一样有标准输出呢?

ansible Boss+Merchant+Web -m shell -a "hostname;ip a"192.168.6.210 | success | rc=0 >>Pay-Boss+Merchant+Web1: lo: 
 mtu 16436 qdisc noqueue     link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00    inet 127.0.0.1/8 scope host lo2: eth0: 
 mtu 1500 qdisc pfifo_fast qlen 1000    link/ether 00:0c:29:96:06:4e brd ff:ff:ff:ff:ff:ff    inet 192.168.6.210/24 brd 192.168.6.255 scope global eth0

我们使用playbook试试呢

root@ProFtp:/etc/ansible# ansible-playbook playbooks/ftp.yml PLAY [Ftp] ******************************************************************** GATHERING FACTS *************************************************************** ok: [192.168.6.11]TASK: [Make Sure ProFtp is running] ******************************************* ok: [192.168.6.11]TASK: [show hostname] ********************************************************* changed: [192.168.6.11]TASK: [show ip] *************************************************************** changed: [192.168.6.11]PLAY RECAP ******************************************************************** 192.168.6.11               : ok=4    changed=2    unreachable=0    failed=0   root@ProFtp:/etc/ansible# cat playbooks/ftp.yml - hosts : Ftp  remote_user : root  tasks :  - name : Make Sure ProFtp is running    service: name=proftpd state=running  - name : show hostname    shell : cat /etc/issue || /bin/true  - name : show ip    command : ip a

通过上图明显看到只会返回OK   失败 返回FAILED

我们可以通过callbacks pulgin 来让playbook返回stdout

如何做呢?

  1. 首先确认ansible.cfg的路径,pip 安装的ansible是默认没有ansible.cfg这个文件,应该是这样,我们到github上下载这个配置文件到本地,

 

root@ProFtp:/etc/ansible# tree .├── ansible.cfg├── callbacks│   ├── jastme.py│   └── jastme.pyc├── hosts└── playbooks    ├── boss.yml    └── ftp.yml2 directories, 6 filesroot@ProFtp:/etc/ansible# pwd/etc/ansible

 修改ansible.cfg,让callbacks的路径定位到你自己的路径下

#callback_plugins   = /usr/share/ansible_plugins/callback_pluginscallback_plugins = /etc/ansible/callbacks

编写

class CallbackModule(object):    #if foo:    #    self.disabled = True    pass        def runner_on_ok(self, host, res):#        pass        if 'stdout' in res.keys():            print res['stdout']        if 'state' in res.keys():            print res['state']        if 'invocation' in res.keys():            print res['invocation']

其实这个callbacks很简单,不明白的朋友打印一下res即可

我们来看看效果

root@ProFtp:/etc/ansible# ansible-playbook playbooks/ftp.yml PLAY [Ftp] ******************************************************************** GATHERING FACTS *************************************************************** ok: [192.168.6.11]{'module_name': 'setup', 'module_args': ''}TASK: [Make Sure ProFtp is running] ******************************************* ok: [192.168.6.11]started{'module_name': u'service', 'module_args': u'name=proftpd state=running'}TASK: [show hostname] ********************************************************* changed: [192.168.6.11]Ubuntu 14.04.2 LTS \n \l{'module_name': u'shell', 'module_args': u'cat /etc/issue || /bin/true'}TASK: [show ip] *************************************************************** changed: [192.168.6.11]1: lo: 
 mtu 65536 qdisc noqueue state UNKNOWN group default     link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00    inet 127.0.0.1/8 scope host lo       valid_lft forever preferred_lft forever    inet6 ::1/128 scope host        valid_lft forever preferred_lft forever2: eth0: 
 mtu 1500 qdisc pfifo_fast state UP group default qlen 1000    link/ether 00:0c:29:75:aa:92 brd ff:ff:ff:ff:ff:ff    inet 192.168.6.11/24 brd 192.168.6.255 scope global eth0       valid_lft forever preferred_lft forever    inet6 fe80::20c:29ff:fe75:aa92/64 scope link        valid_lft forever preferred_lft forever{'module_name': u'command', 'module_args': u'ip a'}PLAY RECAP ******************************************************************** 192.168.6.11               : ok=4    changed=2    unreachable=0    failed=0

结果,调用的方法,状态 都有输出了,是不是很OK?这样就更白自己在做什么了。

转载于:https://my.oschina.net/jastme/blog/490269

你可能感兴趣的文章
看云计算时代的web1800远程服务支持系统
查看>>
SSM框架——详细整合教程(Spring+SpringMVC+MyBatis)
查看>>
堆叠3750g
查看>>
Python web爬虫
查看>>
Python捕捉命令输出、错误输出及赋值命令到变量的方法
查看>>
js解析json
查看>>
详解性能调优命令
查看>>
使用tar或dd等完成Linux系统备份恢复
查看>>
matlab的special函数用法
查看>>
函数指针和回调函数
查看>>
信号(signal)
查看>>
dns
查看>>
想打造一款成功的移动应用?你最需要关注性能指标!
查看>>
翻译 - 元编程动态方法之public_send
查看>>
浅谈数据库连接
查看>>
MyBatis学习(七)
查看>>
ES6中的高阶函数:如同 a => b => c 一样简单
查看>>
redis(版本redis-5.0.2)的安装步骤
查看>>
centos7-防火墙
查看>>
Spread for Windows Forms高级主题(4)---自定义用户交互
查看>>