Python API 2.0

从2.0的事情开始更复杂一些,但是你会得到更多离散和可读的类:

#!/usr/bin/env python

import json
from collections import namedtuple
from ansible.parsing.dataloader import DataLoader
from ansible.vars import VariableManager
from ansible.inventory import Inventory
from ansible.playbook.play import Play
from ansible.executor.task_queue_manager import TaskQueueManager
from ansible.plugins.callback import CallbackBase class ResultCallback(CallbackBase):
"""用于执行结果的示例回调插件      如果要将所有结果收集到单个对象进行处理
     执行的结束,看看利用``json``回调插件
     或编写自己的自定义回调插件
"""
def v2_runner_on_ok(self, result, **kwargs):
"""打印结果的json表示          该方法可以将结果存储在实例属性中以供以后检索
"""
host = result._host
print json.dumps({host.name: result._result}, indent=4) Options = namedtuple('Options', ['connection', 'module_path', 'forks', 'become', 'become_method', 'become_user', 'check'])
# initialize needed objects
variable_manager = VariableManager()
loader = DataLoader()
options = Options(connection='local', module_path='/path/to/mymodules', forks=100, become=None, become_method=None, become_user=None, check=False)
passwords = dict(vault_pass='secret') #实例化我们的ResultCallback来处理结果进来时
results_callback = ResultCallback() #创建库存并传递给var manager
inventory = Inventory(loader=loader, variable_manager=variable_manager, host_list='localhost')
variable_manager.set_inventory(inventory) # create play with tasks
play_source = dict(
name = "Ansible Play",
hosts = 'localhost',
gather_facts = 'no',
tasks = [
dict(action=dict(module='shell', args='ls'), register='shell_out'),
dict(action=dict(module='debug', args=dict(msg='{{shell_out.stdout}}')))
]
)
play = Play().load(play_source, variable_manager=variable_manager, loader=loader) # actually run it
tqm = None
try:
tqm = TaskQueueManager(
inventory=inventory,
variable_manager=variable_manager,
loader=loader,
options=options,
passwords=passwords,
stdout_callback=results_callback, # Use our custom callback instead of the ``default`` callback plugin
)
result = tqm.run(play)
finally:
if tqm is not None:
tqm.cleanup()

Python API pre 2.0

这很简单:

import ansible.runner

runner = ansible.runner.Runner(
module_name='ping',
module_args='',
pattern='web*',
forks=10
)
datastructure = runner.run()

运行方法返回每个主机的结果,根据是否可以联系来分组。 返回类型是模块特定的,如关于模块文档中所示:

{
"dark" : {
"web1.example.com" : "failure message"
},
"contacted" : {
"web2.example.com" : 1
}
}

一个模块可以返回任何类型的JSON数据,所以Ansible可以作为框架来快速构建强大的应用程序和脚本。

详细API示例

以下脚本打印出所有主机的正常运行时间信息:

#!/usr/bin/python

import ansible.runner
import sys # construct the ansible runner and execute on all hosts
results = ansible.runner.Runner(
pattern='*', forks=10,
module_name='command', module_args='/usr/bin/uptime',
).run() if results is None:
print "No hosts found"
sys.exit(1) print "UP ***********"
for (hostname, result) in results['contacted'].items():
if not 'failed' in result:
print "%s >>> %s" % (hostname, result['stdout']) print "FAILED *******"
for (hostname, result) in results['contacted'].items():
if 'failed' in result:
print "%s >>> %s" % (hostname, result['msg']) print "DOWN *********"
for (hostname, result) in results['dark'].items():
print "%s >>> %s" % (hostname, result)

高级程序员也可能希望将源读取到ansible本身,因为它使用API(具有所有可用选项)来实现可执行的命令行工具(lib / ansible / cli /)。

更多信息请参考官网:http://docs.ansible.com/ansible/latest/dev_guide/developing_api.html  

  

  

python学习之ansible api的更多相关文章

  1. Python调用ansible API系列(五)综合使用

    如何把动态生成资产信息.执行playbook以及自定义结果结合起来用呢? #!/usr/bin/env python # -*- coding: utf-8 -*- """ ...

  2. Python调用ansible API系列(四)动态生成hosts文件

    方法一:通过最原始的操作文件的方式 #!/usr/bin/env python # -*- coding: utf-8 -*- """ 通过操作文件形式动态生成ansib ...

  3. windows下使用pycharm开发基于ansible api的python程序

    Window下python安装ansible,基于ansible api开发python程序 在windows下使用pycharm开发基于ansible api的python程序时,发现ansible ...

  4. ansible Api 2.3-2.4

    官网示例(python3) 说明: 在学习2.0 api的过程中遇到了一个坑,最新版的ansible(2.4)和2.3版本api引用时发生了变化,本文主要使用2.3 api进行操作,2.4只做分析 a ...

  5. Python之路【第二十四篇】:Python学习路径及练手项目合集

      Python学习路径及练手项目合集 Wayne Shi· 2 个月前 参照:https://zhuanlan.zhihu.com/p/23561159 更多文章欢迎关注专栏:学习编程. 本系列Py ...

  6. Python学习计划

    ---恢复内容开始--- Python学习计划   https://edu.csdn.net/topic/python2?utm_source=blog4   匠人之心,成就真正Python全栈工程师 ...

  7. python学习博客地址集合。。。

    python学习博客地址集合...   老师讲课博客目录 http://www.bootcdn.cn/bootstrap/  bootstrap cdn在线地址 http://www.cnblogs. ...

  8. python学习笔记(二)、字符串操作

    该一系列python学习笔记都是根据<Python基础教程(第3版)>内容所记录整理的 1.字符串基本操作 所有标准序列操作(索引.切片.乘法.成员资格检查.长度.最小值和最大值)都适用于 ...

  9. Deep learning with Python 学习笔记(8)

    Keras 函数式编程 利用 Keras 函数式 API,你可以构建类图(graph-like)模型.在不同的输入之间共享某一层,并且还可以像使用 Python 函数一样使用 Keras 模型.Ker ...

随机推荐

  1. vm 克隆一台新机器启动网卡报错:device eth0 does not seem to be present, delaying initialization

    解决方案: 1. vi /etc/sysconfig/network-scripts/ifcfg-eth0 ifcfg-eth0的配置文件里保存了以前的MAC地址,就把这一行删除掉在重启网卡   2. ...

  2. Python memoryview() 函数

    Python memoryview() 函数  Python 内置函数 描述 memoryview() 函数返回给定参数的内存查看对象(Momory view). 所谓内存查看对象,是指对支持缓冲区协 ...

  3. 分组背包模板题 hdu1712

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1712 第一次接触分组背包,参考博客:https://blog.csdn.net/yu121380/ar ...

  4. 中国剩余定理模板 51nod 1079

    题目链接:传送门 推荐博客:https://www.cnblogs.com/freinds/p/6388992.html (证明很好,代码有误). 1079 中国剩余定理  基准时间限制:1 秒 空间 ...

  5. stm32学习基本知识点

    1.AHB系统总线分为APB1(36MHz)和APB2(72MHz),其中2>1,意思是APB2接高速设备 2.Stm32f10x.h相当于reg52.h(里面有基本的位操作定义),另一个为st ...

  6. C#获取上传文件的扩展名

    然后在代码页中写//上传图片if (UpFile.PostedFile != null){   HttpPostedFile mFile= UpFile.PostedFile;   int fileS ...

  7. win8 IIS配置

    iis发展到win8已经到是iis8.0了.至于如何安装的,咱们接下来看.大体和iis6安装差别不大.iis8安装起来也是很方便的. 1.打开“控制面板”——“程序和功能”.如下图所示 2.点击“启用 ...

  8. Aria2GUI 导出下载 刷新界面,任务消失

    问题1. 2.勾选之后 导出下载 没了,神烦 解决方法解决方法1.点击分享, 2.创建链接 3.然后复制链接到网站,  下面是 下载 工具和 谷歌插件http://www.sdifen.com/ari ...

  9. java项目中常见的异常及处理

    Java开发中常见异常及处理方法 1.JAVA异常 异常指不期而至的各种状况,如:文件找不到.网络连接失败.非法参数等.异常是一个事件,它发生在程序运行期间,干扰了正常的指令流程.Java通 过API ...

  10. java String 中替换"\"为"\\"

    表示路径的字符串  c:\work\test\afd.out, 要形成 c:\\work\\test\\afd.out   用 String str = strBsf.replaceAll(" ...