python ansible_Python调用ansible API系列(二)执行adhoc和playbook

#!/usr/bin/env python#-*- coding: utf-8 -*-

importsysfrom collections importnamedtuple#核心类#用于读取YAML和JSON格式的文件

from ansible.parsing.dataloader importDataLoader#用于存储各类变量信息

from ansible.vars.manager importVariableManager#用于导入资产文件

from ansible.inventory.manager importInventoryManager#操作单个主机信息

from ansible.inventory.host importHost#操作单个主机组信息

from ansible.inventory.group importGroup#存储执行hosts的角色信息

from ansible.playbook.play importPlay#ansible底层用到的任务队列

from ansible.executor.task_queue_manager importTaskQueueManager#核心类执行playbook

from ansible.executor.playbook_executor importPlaybookExecutordefadhoc():"""ad-hoc 调用

资产配置信息 这个是通过 InventoryManager和VariableManager 定义

执行选项 这个是通过namedtuple来定义

执行对象和模块 通过dict()来定义

定义play 通过Play来定义

最后通过 TaskQueueManager 的实例来执行play

:return:"""

#资产配置信息

dl =DataLoader()

im= InventoryManager(loader=dl, sources=["hosts"])

vm= VariableManager(loader=dl, inventory=im)#执行选项,这个类不是ansible的类,这个的功能就是为了构造参数

Options = namedtuple("Options", ["connection", "remote_user", "ask_sudo_pass", "verbosity", "ack_pass","module_path", "forks", "become", "become_method", "become_user", "check","listhosts", "listtasks", "listtags", "syntax", "sudo_user", "sudo", "diff"])"""这里就是Options的实例,然后你就可以赋值,这个为了给ansible设置执行选项 ansibile 172.16.48.171 -m shell -a 'ls /tmp' -f 5

这里的选项就是ansible命令中 -f -C -D -m等执行选项"""options= Options(connection='smart', remote_user=None, ack_pass=None, sudo_user=None, forks=5, sudo=None, ask_sudo_pass=False,

verbosity=5, module_path=None, become=None, become_method=None, become_user=None, check=False, diff=False,

listhosts=None, listtasks=None, listtags=None, syntax=None)#play的执行对象和模块,这里设置hosts,其实是因为play把play_source和资产信息关联后,执行的play的时候它会去资产信息中设置的sources的hosts文件中

#找你在play_source中设置的hosts是否在资产管理类里面。

play_source = dict(name="Ansible Play", #任务名称

hosts="172.16.48.242", #目标主机,可以填写具体主机也可以是主机组名称

gather_facts="no", #是否收集配置信息

#tasks是具体执行的任务,列表形式,每个具体任务都是一个字典

tasks=[

dict(action=dict(module="shell", args="ls /tmp"))

])#定义play

play = Play().load(play_source, variable_manager=vm, loader=dl)

passwords= dict() #这个可以为空,因为在hosts文件中

# tqm =TaskQueueManager(

inventory=im,

variable_manager=vm,

loader=dl,

options=options,

passwords=passwords,

)

result=tqm.run(play)print(result)defmain():

adhoc()if __name__ == "__main__":try:

main()finally:

sys.exit()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值