ansible api
ansible是个好东西,但好的东西也要来折腾下,最近看了看ansible的api,于是就探究了下
简单实例
|
|
Runner类详解
|
|
ansible_playbook api
ansible_playbook api 部分在官方文档上并没有提,不过通过查看ansible模块的帮助信息可以看到其是支持的。
实例
|
|
注意
在用api的方式执行playbook的时候,playbook,stats,callbacks,runner_callbacks这几个参数是必须的。
- 执行流程1234567891011arguments = []if playbook is None:arguments.append('playbook')if callbacks is None:arguments.append('callbacks')if runner_callbacks is None:arguments.append('runner_callbacks')if stats is None:arguments.append('stats')if arguments:raise Exception('PlayBook missing required arguments: %s' % ', '.join(arguments))
playbook用来指定playbook的yaml文件
stats用来收集playbook执行期间的状态信息,最后会进行汇总
callbacks用来输出playbook执行的结果
runner_callbacks用来输出playbook执行期间的结果。但是它返回的结果太简单,我想让它详细点,如果用自定义callback的方法插入到mongo里面的话也行,或者是直接输出,但是我想所有task都执行完后,把每个task的详细信息输出到终端上,最后发现结果输出都是靠callbacks.py里的AggregateStats这个类,在每执行完一个task后,都会调用AggregateStats进行计算,汇总。
小结
- 当需要先对前一次作任务执行的结果进行处理,并将相应的结果对应的作为输入再在一次任务传入时,这里使用api 更方便;
- 需要对结果输出进行整形时,也比较api 方便;
- playbook 之间进行调用或都playbook比较复杂时,想要理清任务之间的关系势必累显麻烦,而通过api,从上一层任务到下一层任务之间的调用关系明子。而且playbook之间可以是平行的关系。方便小的功能模块的复用。
- 方便二次开发及和其他程序之间的耦合调用
后续会进行基于Tornado的ansible的二次封装