文档章节

ansible playbook callbacks

jastme
 jastme
发布于 2015/08/10 17:23
字数 620
阅读 663
收藏 3

大家都知道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+Web
1: lo: <LOOPBACK,UP,LOWER_UP> 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 lo
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> 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.yml

2 directories, 6 files
root@ProFtp:/etc/ansible# pwd
/etc/ansible

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

#callback_plugins   = /usr/share/ansible_plugins/callback_plugins
callback_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: <LOOPBACK,UP,LOWER_UP> 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 forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> 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?这样就更白自己在做什么了。

© 著作权归作者所有

jastme
粉丝 40
博文 137
码字总数 61324
作品 0
成都
程序员
私信 提问
ansible在playbook中变量传入到执行脚本的方法

简介 这个方式用于ansible调用playbook方法实现远程服务器执行某个脚本,脚本中的某些参数需要由管理服务器传入的情况。 下面的例子是ansible实际调用script模块实现远程服务器执行一个shell...

HelloEric
2015/10/21
5.4K
0
脚本中实现Ansible的playbook的方法

脚本说明 project -- 操作的项目输入 playbook -- 远程服务器执行的规则定义 脚本

HelloEric
2015/09/21
322
0
Ansible基于服务树进行分组全量接口调用

Ansible APi 说明 Info > ansible2.0更贴近于ansible cli的常用命令执行方式,不同于上一版本只能发送单个命令或playbook;而更推荐用户在调用ansibleAPI的时候,将playbook的每个task拆分出...

煮酒品茶
2017/12/25
0
0
ansible调用callbacks插件实现结果nosql输出回调

前言: ansible的结果默认是输出到cli终端和日志里面的,用惯了saltsatck的returners数据回调后,也很是喜欢ansible也有,一开始不知道有这个功能,自己也简单实现了这样的功能。 我的实现方...

rfyiamcool
2014/07/20
0
0
java 调用python api 实现Ansible执行测试

Ansible是Agentless的轻量级批量配置管理工具,由于出现的比较晚(13年)基于Ansible进行开发的相关文档较少,因此,这里通过一些小的实验,结合现有资料以及源码,探索一下Ansible的二次开发...

lcxpx
2015/11/26
3
0

没有更多内容

加载失败,请刷新页面

加载更多

启动参数

常用启动参数,通过 -Dxx.yy=zz注入应用参数 -Deureka.instance.metadata-map.starkGroup=test3 -Dserver.port=8989 本地调试过程中,可改变端口来启动多个相同服务。修改启动的VM参数即可...

ZH-JSON
13分钟前
4
0
ES配置修改

查看配置 GET /_cluster/settings 修改配置 PUT /_cluster/settings{ "persistent" : { "xpack" : { "monitoring" : { "collection" : { "enabled" : ......

messud4312
25分钟前
3
0
Spring事务传播属性有那么难吗?看这一篇就够了

Spring事务传播属性有那么难吗?看这一篇就够了 笔者文笔功力尚浅,如有不妥,请慷慨指出,必定感激不尽 学习东西要知行合一,如果只是知道理论而没实践过,那么掌握的也不会特别扎实,估计过...

不学无数的程序员
25分钟前
4
0
VMware vSphere ESXi主机的访问控制

在vShpere中,访问ESXi主机的途径很多,如下: ESXi DCUI ESXi Shell ESXi SSH ESXi Host Client vCenter --> vSphere web client / vSphere Client VMware vSphere ESXi主机的访问控制,除了......

大别阿郎
50分钟前
5
0
大神讲解CGI、FastCGI和PHP-FPM关系图解

参考资料 概念了解:CGI,FastCGI,PHP-CGI与PHP-FPM:http://www.nowamagic.net/librarys/veda/detail/1319 php中fastcgi和php-fpm是什么东西:https://www.zybuluo.com/phper/note/50231 ......

网络小虾米
59分钟前
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部