ansible作为python模块库使用的方法实例


Posted in Python onJanuary 17, 2017

前言

ansible是新出现的自动化运维工具,基于Python开发,集合了众多运维工具(puppet、cfengine、chef、func、fabric)的优点,实现了批量系统配置、批量程序部署、批量运行命令等功能。ansible是基于模块工作的,本身没有批量部署的能力。真正具有批量部署的是ansible所运行的模块,ansible只是提供一种框架。

主要包括:

      (1)、连接插件connection plugins:负责和被监控端实现通信;

      (2)、host inventory:指定操作的主机,是一个配置文件里面定义监控的主机;

      (3)、各种模块核心模块、command模块、自定义模块;

      (4)、借助于插件完成记录日志邮件等功能;

      (5)、playbook:剧本执行多个任务时,非必需可以让节点一次性运行多个任务。

Asible是运维工具中算是非常好的利器,我个人比较喜欢,可以根据需求灵活配置yml文件来实现不同的业务需求,因为不需要安装客户端,上手还是非常容易的,在某些情况下你可能需要将ansible作为python的一个库组件写入到自己的脚本中,今天的脚本脚本就将展示下ansible如何跟python脚本结合,也就是如何在python脚本中使用ansible,我们逐步展开。

先看第一个例子:

#!/usr/bin/python 
import ansible.runner
import ansible.playbook
import ansible.inventory
from ansible import callbacks
from ansible import utils
import json
 
# the fastest way to set up the inventory
 
# hosts list
hosts = ["10.11.12.66"]
# set up the inventory, if no group is defined then 'all' group is used by default
example_inventory = ansible.inventory.Inventory(hosts)
 
pm = ansible.runner.Runner(
 module_name = 'command',
 module_args = 'uname -a',
 timeout = 5,
 inventory = example_inventory,
 subset = 'all' # name of the hosts group 
 )
 
out = pm.run()
 
print json.dumps(out, sort_keys=True, indent=4, separators=(',', ': '))

这个例子展示我们如何在python脚本中运行如何通过ansible运行系统命令,我们接下来看第二个例子,跟我们的yml文件对接。

简单的yml文件内容如下:

- hosts: sample_group_name
 tasks:
 - name: just an uname
 command: uname -a

调用playbook的python脚本如下:

#!/usr/bin/python 
import ansible.runner
import ansible.playbook
import ansible.inventory
from ansible import callbacks
from ansible import utils
import json
 
### setting up the inventory
 
## first of all, set up a host (or more)
example_host = ansible.inventory.host.Host(
 name = '10.11.12.66',
 port = 22
 )
# with its variables to modify the playbook
example_host.set_variable( 'var', 'foo')
 
## secondly set up the group where the host(s) has to be added
example_group = ansible.inventory.group.Group(
 name = 'sample_group_name'
 )
example_group.add_host(example_host)
 
## the last step is set up the invetory itself
example_inventory = ansible.inventory.Inventory()
example_inventory.add_group(example_group)
example_inventory.subset('sample_group_name')
 
# setting callbacks
stats = callbacks.AggregateStats()
playbook_cb = callbacks.PlaybookCallbacks(verbose=utils.VERBOSITY)
runner_cb = callbacks.PlaybookRunnerCallbacks(stats, verbose=utils.VERBOSITY)
 
# creating the playbook instance to run, based on "test.yml" file
pb = ansible.playbook.PlayBook(
 playbook = "test.yml",
 stats = stats,
 callbacks = playbook_cb,
 runner_callbacks = runner_cb,
 inventory = example_inventory,
 check=True
 )
 
# running the playbook
pr = pb.run() 
 
# print the summary of results for each host
print json.dumps(pr, sort_keys=True, indent=4, separators=(',', ': '))

总结

以上就是为大家展示的2个小例子希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流。

Python 相关文章推荐
Python中zip()函数用法实例教程
Jul 31 Python
python有证书的加密解密实现方法
Nov 19 Python
Python读取mp3中ID3信息的方法
Mar 05 Python
python使用Tkinter显示网络图片的方法
Apr 24 Python
Python计算三角函数之asin()方法的使用
May 15 Python
PyQt5每天必学之滑块控件QSlider
Apr 20 Python
python Flask 装饰器顺序问题解决
Aug 08 Python
Python实现 PS 图像调整中的亮度调整
Jun 28 Python
python模拟实现分发扑克牌
Apr 22 Python
如何利用python web框架做文件流下载的实现示例
Jun 02 Python
Python爬虫小例子——爬取51job发布的工作职位
Jul 10 Python
Manjaro、pip、conda更换国内源的方法
Nov 17 Python
python 基础教程之Map使用方法
Jan 17 #Python
Python获取某一天是星期几的方法示例
Jan 17 #Python
Python正则表达式匹配中文用法示例
Jan 17 #Python
python下如何查询CS反恐精英的服务器信息
Jan 17 #Python
python基础教程之匿名函数lambda
Jan 17 #Python
python基础教程之Filter使用方法
Jan 17 #Python
python正则分析nginx的访问日志
Jan 17 #Python
You might like
wiki-shan写的php在线加密的解密程序
2008/09/07 PHP
php simplexmlElement操作xml的命名空间实现代码
2011/01/04 PHP
php实现的太平洋时间和北京时间互转的自定义函数分享
2014/08/19 PHP
WordPress开发中用于标题显示的相关函数使用解析
2016/01/07 PHP
php处理多图上传压缩代码功能
2018/06/13 PHP
基于jQuery的可用于选项卡及幻灯的切换插件
2011/03/28 Javascript
鼠标放在图片上显示大图的JS代码
2013/03/26 Javascript
js单例模式的两种方案
2013/10/22 Javascript
JavaScript日期类型的一些用法介绍
2015/03/02 Javascript
JQuery实现动态添加删除评论的方法
2015/05/18 Javascript
jquery获取当前元素索引值用法实例
2015/06/10 Javascript
详解vue-router2.0动态路由获取参数
2017/06/14 Javascript
10个最优秀的Node.js MVC框架
2017/08/24 Javascript
angularjs的单选框+ng-repeat的实现方法
2018/09/12 Javascript
vue自定义指令之面板拖拽的实现
2019/04/14 Javascript
js中比较两个对象是否相同的方法示例
2019/09/02 Javascript
微信小程序3D轮播实现代码
2019/09/19 Javascript
JavaScript实现背景自动切换小案例
2019/09/27 Javascript
Vue如何使用混合Mixins和插件开发详解
2020/02/05 Javascript
[01:25]DOTA2自定义游戏灵园鬼域等你踏足
2015/10/30 DOTA
[48:56]2018DOTA2亚洲邀请赛 3.31 小组赛 A组 VG vs KG
2018/03/31 DOTA
python 判断自定义对象类型
2009/03/21 Python
python网络编程学习笔记(一)
2014/06/09 Python
pymongo给mongodb创建索引的简单实现方法
2015/05/06 Python
python利用smtplib实现QQ邮箱发送邮件
2020/05/20 Python
python3实现网络爬虫之BeautifulSoup使用详解
2018/12/19 Python
python 对字典按照value进行排序的方法
2019/05/09 Python
Python如何实现在字符串里嵌入双引号或者单引号
2020/03/02 Python
如何将字串String转换成整数int
2015/02/21 面试题
生产助理岗位职责
2014/06/18 职场文书
2014国庆节商场促销活动策划方案
2014/09/16 职场文书
2019同学聚会主持词
2019/05/06 职场文书
redis使用不当导致应用卡死bug的过程解析
2021/07/01 Redis
Java 多态分析
2022/04/26 Java/Android
Python 匹配文本并在其上一行追加文本
2022/05/11 Python
MyBatis核心源码深度剖析SQL语句执行过程
2022/05/20 Java/Android