ansible作为python模块库使用的方法实例
前言
ansible是新出现的自动化运维工具,基于Python开发,集合了众多运维工具(puppet、cfengine、chef、func、fabric)的优点,实现了批量系统配置、批量程序部署、批量运行命令等功能。ansible是基于模块工作的,本身没有批量部署的能力。真正具有批量部署的是ansible所运行的模块,ansible只是提供一种框架。
主要包括:
(1)、连接插件connectionplugins:负责和被监控端实现通信;
(2)、hostinventory:指定操作的主机,是一个配置文件里面定义监控的主机;
(3)、各种模块核心模块、command模块、自定义模块;
(4)、借助于插件完成记录日志邮件等功能;
(5)、playbook:剧本执行多个任务时,非必需可以让节点一次性运行多个任务。
Asible是运维工具中算是非常好的利器,我个人比较喜欢,可以根据需求灵活配置yml文件来实现不同的业务需求,因为不需要安装客户端,上手还是非常容易的,在某些情况下你可能需要将ansible作为python的一个库组件写入到自己的脚本中,今天的脚本脚本就将展示下ansible如何跟python脚本结合,也就是如何在python脚本中使用ansible,我们逐步展开。
先看第一个例子:
#!/usr/bin/python
importansible.runner
importansible.playbook
importansible.inventory
fromansibleimportcallbacks
fromansibleimportutils
importjson
#thefastestwaytosetuptheinventory
#hostslist
hosts=["10.11.12.66"]
#setuptheinventory,ifnogroupisdefinedthen'all'groupisusedbydefault
example_inventory=ansible.inventory.Inventory(hosts)
pm=ansible.runner.Runner(
module_name='command',
module_args='uname-a',
timeout=5,
inventory=example_inventory,
subset='all'#nameofthehostsgroup
)
out=pm.run()
printjson.dumps(out,sort_keys=True,indent=4,separators=(',',':'))
这个例子展示我们如何在python脚本中运行如何通过ansible运行系统命令,我们接下来看第二个例子,跟我们的yml文件对接。
简单的yml文件内容如下:
-hosts:sample_group_name tasks: -name:justanuname command:uname-a
调用playbook的python脚本如下:
#!/usr/bin/python
importansible.runner
importansible.playbook
importansible.inventory
fromansibleimportcallbacks
fromansibleimportutils
importjson
###settinguptheinventory
##firstofall,setupahost(ormore)
example_host=ansible.inventory.host.Host(
name='10.11.12.66',
port=22
)
#withitsvariablestomodifytheplaybook
example_host.set_variable('var','foo')
##secondlysetupthegroupwherethehost(s)hastobeadded
example_group=ansible.inventory.group.Group(
name='sample_group_name'
)
example_group.add_host(example_host)
##thelaststepissetuptheinvetoryitself
example_inventory=ansible.inventory.Inventory()
example_inventory.add_group(example_group)
example_inventory.subset('sample_group_name')
#settingcallbacks
stats=callbacks.AggregateStats()
playbook_cb=callbacks.PlaybookCallbacks(verbose=utils.VERBOSITY)
runner_cb=callbacks.PlaybookRunnerCallbacks(stats,verbose=utils.VERBOSITY)
#creatingtheplaybookinstancetorun,basedon"test.yml"file
pb=ansible.playbook.PlayBook(
playbook="test.yml",
stats=stats,
callbacks=playbook_cb,
runner_callbacks=runner_cb,
inventory=example_inventory,
check=True
)
#runningtheplaybook
pr=pb.run()
#printthesummaryofresultsforeachhost
printjson.dumps(pr,sort_keys=True,indent=4,separators=(',',':'))
总结
以上就是为大家展示的2个小例子希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流。