Ansible 2.0+版本api使用方法大全

Ansible这个工具在现在运维中用的越来越多,它可以方便的批量执行命令,上传文件,配置playbook初始化一些新机器非常快速方便,当然除了我们命令行使用外,我们还可以通过ansible提供的api接口编写一些自动化脚本工作,在2.0版本之前,调用ansible的api是一件非常简单容易的事,几行代码就可以搞定,而且还非常直观,但到了2.0版本后会发现调用没那么容易了,如果没有python基础,一上来肯定是懵逼的状态,不过别急,今天我们就把跟2.0版本的api调用逐一看一遍,当然很多例子我也是从网上找到,但我都做了小的改动并测试通过没问题了,先来一个简单的调用:

这是最简单的方法,它运行的结果跟用ansible-playbook 命令执行的结果显示是一样的。

我们再看一个复杂点的,运行完直接返回json结果的,这个我们都比较喜欢,可以直接解析json,这个是来源网络,我保留原创的注释和姓名,这是一个非常好的例子,从这个代码里能看到Ansible2.0 api的一些变化,首先你要定义自己的callback函数,定义完callback,定义个月任务类,这个任务类里写明然后获取数据,就是你自定义的的callback,自己要写方法把它获取出来,如果用自带的defautl回调函数,就不用,像我们第一个例子,我们没定义回调,也可以运行,但显示的格式就是默认的,这是playbook执行方式:

还有一个例子,是作者进行了一些命令封装,使用起来也非常方便,先创建一个ansible_api.py,如下:

再创建一个脚本引用它,这个脚本好处在域动态创建hosts主机:

另一个封装方式:

调用:

这个也来源网络,执行命方式:

最后一个可以执行命令也可以执行playbook,例子:

 

重要点:

  • inventory –> 由ansible.inventory模块创建,用于导入inventory文件
  • variable_manager –> 由ansible.vars模块创建,用于存储各类变量信息
  • loader –> 由ansible.parsing.dataloader模块创建,用于数据解析
  • options –> 存放各类配置信息的数据字典
  • passwords –> 登录密码,可设置加密信息
  • stdout_callback –> 回调函数

生效就是初始化下面三个对象(VariableManager、DataLoader、Namedtuple)了,看源码能知道都需要哪些参数。

最后写一下如果要自定义ansible模块,最好用python,如果非要用bash,那就要自己返回Json格式的数据,例如:

放到判断里,根据条件返回json格式的数据。

 

发表评论