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实现给文件添加内容及得到文件信息的方法
May 28 Python
Python selenium 三种等待方式解读
Sep 15 Python
django框架之cookie/session的使用示例(小结)
Oct 15 Python
Python使用pyshp库读取shapefile信息的方法
Dec 29 Python
浅谈Pycharm中的Python Console与Terminal
Jan 17 Python
Python类中的魔法方法之 __slots__原理解析
Aug 26 Python
在pycharm中关掉ipython console/PyDev操作
Jun 09 Python
实现Python3数组旋转的3种算法实例
Sep 16 Python
Python根据字典的值查询出对应的键的方法
Sep 30 Python
Python hashlib和hmac模块使用方法解析
Dec 08 Python
Python爬虫入门教程01之爬取豆瓣Top电影
Jan 24 Python
python 实现mysql自动增删分区的方法
Apr 01 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设计模式之观察者模式定义与用法经典示例
2019/09/19 PHP
PHP常量及变量区别原理详解
2020/08/14 PHP
一个不错的用JavaScript实现的UBB编码函数
2007/03/09 Javascript
JavaScript版DateAdd和DateDiff函数代码
2012/03/01 Javascript
js给onclick赋值传参数的两种方法
2013/11/25 Javascript
jquery toolbar与网页浮动工具条具体实现代码
2014/01/12 Javascript
5款JavaScript代码压缩工具推荐
2014/07/07 Javascript
jquery实现多次上传同一张图片
2017/01/09 Javascript
JS中input表单隐藏域及其使用方法
2017/02/13 Javascript
node.js入门教程之querystring模块的使用方法
2017/02/27 Javascript
JS实现简易的图片拖拽排序实例代码
2017/06/09 Javascript
JS Testing Properties 判断属性是否在对象里的方法
2017/10/01 Javascript
JavaScript函数定义方法实例详解
2019/03/05 Javascript
Vue-cli3简单使用(图文步骤)
2019/04/30 Javascript
深入了解js原型模式
2019/05/30 Javascript
vue实现路由监听和参数监听
2019/10/29 Javascript
JS中自定义事件的使用与触发操作实例分析
2019/11/01 Javascript
原生js实现下拉选项卡
2019/11/27 Javascript
bootstrap-paginator服务器端分页使用方法详解
2020/02/13 Javascript
npx create-react-app xxx创建项目报错的解决办法
2020/02/17 Javascript
浅谈es6中的元编程
2020/12/01 Javascript
[04:59]2018DOTA2亚洲邀请赛 4.7 Mineski夺冠时刻
2018/04/09 DOTA
Python和GO语言实现的消息摘要算法示例
2015/03/10 Python
使用python检测主机存活端口及检查存活主机
2015/10/12 Python
python 递归遍历文件夹,并打印满足条件的文件路径实例
2017/08/30 Python
从头学Python之编写可执行的.py文件
2017/11/28 Python
Python 使用with上下文实现计时功能
2018/03/09 Python
python3 遍历删除特定后缀名文件的方法
2018/04/23 Python
Python基于生成器迭代实现的八皇后问题示例
2018/05/23 Python
python 利用栈和队列模拟递归的过程
2018/05/29 Python
pycharm恢复默认设置或者是替换pycharm的解释器实例
2018/10/29 Python
HTML5 canvas基本绘图之绘制曲线
2016/06/27 HTML / CSS
超市端午节活动方案
2014/01/23 职场文书
采购主管岗位职责
2014/02/01 职场文书
国家领导干部党的群众路线教育实践活动批评与自我批评材料
2014/09/23 职场文书
2014年勤工助学工作总结
2014/11/24 职场文书