ansible playbook callbacks

大家都知道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试试呢

[email protected]:/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   

[email protected]:/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上下载这个配置文件到本地,
[email protected]:/etc/ansible# tree 
.
├── ansible.cfg
├── callbacks
│   ├── jastme.py
│   └── jastme.pyc
├── hosts
└── playbooks
    ├── boss.yml
    └── ftp.yml

2 directories, 6 files
[email protected]:/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即可

我们来看看效果

[email protected]:/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?这样就更白自己在做什么了。

时间: 2024-10-13 09:47:10

ansible playbook callbacks的相关文章

Ansible playbook API 开发 调用测试

Ansible是Agentless的轻量级批量配置管理工具,由于出现的比较晚(13年)基于Ansible进行开发的相关文档较少,因此,这里通过一些小的实验,结合现有资料以及源码,探索一下Ansible的二次开发. 随笔的内容分为三个部分 playbook编辑执行 python 调用API执行playbook java调用python程序进行playbook的执行 实验的环境是centos6,ansible版本是1.9.4,python版本是2.6.6,jdk版本是1.7U79 一.playboo

ansible调用callbacks插件实现结果nosql输出回调

前言: ansible的结果默认是输出到cli终端和日志里面的,用惯了saltsatck的returners数据回调后,也很是喜欢ansible也有,一开始不知道有这个功能,自己也简单实现了这样的功能. 我的实现方式是,在模块里面做一些输出的逻辑.当使用ansible runner api的时候,是在后面runner代码,最后加了一段往redis输出的逻辑. 这里实现数据的输出有些独特,但是只能是在模块和 api方面搞 . 如果是用playbook的话,按照我以前的思路的话,再继续改ansbil

运维自动化之ansible playbook一键化解决大量主机bash更新问题

今天发现有bash漏洞,但我这里近1000台服务器,为了方便.省时间,觉得使用ansible安装bash更新包,下面分享一下我的安装方法. 1.安装的playbook的内容 19:00:03 # cd /etc/ansible [email protected]:/etc/ansible 19:00:06 # cat update_bash.yml  --- - hosts: "{{ host }}"   remote_user: "{{ user }}"   ga

ansible playbook yummodule error

ansible playbookweb.yaml[[email protected] Desktop]# cat web.yaml- name: web servers  remote_user: root  hosts: webservers tasks:  - name: install httpd    yum: name=httpd state=present  - name: httpd service     service: name=httpd enabled=yes state

运维自动化之ansible playbook安装mysql

上次介绍了如何使用ansible playbook安装zabbix客户端(http://dl528888.blog.51cto.com/2382721/1436745),这次介绍一下如何使用playbook安装mysql. 下面是安装mysql的信息: mysql_basedir: /data/mysql/basedir                    源码目录 mysql_datadir: /data/mysql/datadir                    数据目录 mysql

运维自动化之ansible playbook安装ruby环境

本来不想打算写安装ruby的,但看几个puppet的群里有人对安装ruby比较茫然,所以这里简单介绍一下如何安装ruby. ps:话说现在也就gitlab.capistrano.puppet等软件使用ruby,最新2010年的软件好的都是python了,比如ansible.salt等. 下面是安装ruby的信息: ruby_version: 1.9.3 ruby_dir: /usr/local gem_version: 1.8.23 bundle_version: 1.6.3 可以看到ruby的

Ansible Playbook - Understanding YAML

要想用Ansible操作复杂的任务,就必须要学会YAML语法的书写,不光是Ansible,连他的竞争对手saltstack也使用了YAML,下面来学习一下YAML语法的格式,省得到要你写个Playbook的时候手忙脚乱的要好. 引用一下维基:YAML是"YAML Ain't a Markup Language"(YAML不是一种标记语言)的递回缩写.在开发的这种语言时,YAML 的意思其实是:"Yet Another Markup Language"(仍是一种标记语

自动化运维工具ansible playbook和roles的使用

ansible的结构: Inventory 用来定义被控制端 Modules 定义被控制端可用的操作 Ad Hoc Commands 定义被控制端可以执行命令的 Playbook 批量运行的方式 Tasks: 任务:由各模块所支持执行的特定操作:可以通过ansible-doc module_name来查看帮助文档,非常详细 -m  user -a 'name= password=' Variables: 变量 Templates: 模板:(如执行httpd服务时,各节点上httpd的配置文件内容

运维自动化之ansible playbook安装node环境

现在介绍如何使用ansible安装node. 下面是安装node的信息: node_dir: /data node_version: 0.10.21 node_port: 3301 可以看到node的版本是0.10.21,测试的node应用服务监听3301端口 备注:此playbook仅能对centos或者redhat的6.x版本进行安装. 下面是安装node的playbook结构 09:33:16 # tree node_* node_delete ├── files ├── handlers