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里将list中元素依次向前移动一位
Sep 12 Python
使用Python的内建模块collections的教程
Apr 28 Python
Python聚类算法之基本K均值实例详解
Nov 20 Python
Python的Flask框架应用调用Redis队列数据的方法
Jun 06 Python
简单易懂的python环境安装教程
Jul 13 Python
Python实现注册登录系统
Aug 08 Python
彻彻底底地理解Python中的编码问题
Oct 15 Python
Python自定义函数计算给定日期是该年第几天的方法示例
May 30 Python
python itchat实现调用微信接口的第三方模块方法
Jun 11 Python
在Python中使用filter去除列表中值为假及空字符串的例子
Nov 18 Python
详解Django配置JWT认证方式
May 09 Python
Python pyecharts案例超市4年数据可视化分析
Aug 14 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
php 远程关机操作的代码
2008/12/05 PHP
第三章 php操作符与控制结构代码
2011/12/30 PHP
php实现websocket实时消息推送
2018/03/30 PHP
PHP+Session防止表单重复提交的解决方法
2018/04/09 PHP
PHP创建XML接口示例
2019/07/04 PHP
最佳的addEvent事件绑定是怎样诞生的
2011/10/24 Javascript
asm.js使用示例代码
2013/11/28 Javascript
动态创建script在IE中缓存js文件时导致编码的解决方法
2014/05/04 Javascript
Express.JS使用详解
2014/07/17 Javascript
jQuery选择器源码解读(一):Sizzle方法
2015/03/31 Javascript
AngularJS 中的事件详解
2016/07/28 Javascript
three.js实现3D视野缩放效果
2017/11/16 Javascript
从零开始最小实现react服务器渲染详解
2018/01/26 Javascript
jQuery中可见性过滤器简单用法示例
2018/03/31 jQuery
JS实现的DOM插入节点操作示例
2018/04/04 Javascript
微信小程序实现城市列表选择
2018/06/05 Javascript
clipboard.js在移动端复制失败的解决方法
2018/06/13 Javascript
layui实现数据表格自定义数据项
2019/10/26 Javascript
Vue的transition-group与Virtual Dom Diff算法的使用
2019/12/09 Javascript
Python translator使用实例
2008/09/06 Python
python算法学习之桶排序算法实例(分块排序)
2013/12/18 Python
Python基于whois模块简单识别网站域名及所有者的方法
2018/04/23 Python
python游戏地图最短路径求解
2019/01/16 Python
如何通过Python实现RabbitMQ延迟队列
2020/11/28 Python
python中实现栈的三种方法
2020/12/19 Python
Css3圆角边框制作代码
2015/11/18 HTML / CSS
Clearly新西兰:购买眼镜、太阳镜和隐形眼镜
2018/04/26 全球购物
Kaufmann Mercantile官网:家居装饰、配件、户外及更多
2018/09/28 全球购物
经典c++面试题二
2015/08/14 面试题
工程造价专业大专生求职信
2013/10/06 职场文书
大专应届毕业生求职信
2014/07/15 职场文书
社区扶贫帮困工作总结
2015/05/20 职场文书
社区安置帮教工作总结2015
2015/05/20 职场文书
收入证明申请书
2015/06/12 职场文书
ThinkPHP5和ThinkPHP6的区别
2021/03/31 PHP
springboot 全局异常处理和统一响应对象的处理方式
2022/06/28 Java/Android