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抓取京东图书评论数据
Aug 31 Python
python递归计算N!的方法
May 05 Python
Python实现登录接口的示例代码
Jul 21 Python
分享一个简单的python读写文件脚本
Nov 25 Python
Django框架教程之正则表达式URL误区详解
Jan 28 Python
python中enumerate() 与zip()函数的使用比较实例分析
Sep 03 Python
Python turtle画图库&&画姓名实例
Jan 19 Python
浅谈python中频繁的print到底能浪费多长时间
Feb 21 Python
Matplotlib自定义坐标轴刻度的实现示例
Jun 18 Python
Python基于network模块制作电影人物关系图
Jun 19 Python
Python+Xlwings 删除Excel的行和列
Dec 19 Python
用Python自动清理系统垃圾的实现
Jan 18 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
mysql 的 like 问题,超强毕杀记!!!
2007/01/18 PHP
Windows IIS PHP 5.2 安装与配置方法
2009/06/08 PHP
PHP URL参数获取方式的四种例子
2014/02/28 PHP
PHP开发中解决并发问题的几种实现方法分析
2017/11/13 PHP
laravel框架中视图的基本使用方法分析
2019/11/23 PHP
javascript下利用arguments实现string.format函数
2010/08/24 Javascript
表单提交前触发函数返回true表单才会提交
2014/03/11 Javascript
Javascript正则控制文本框只能输入整数或浮点数
2014/09/02 Javascript
javascript实现根据身份证号读取相关信息
2014/12/17 Javascript
jQuery实现瀑布流布局详解(PC和移动端)
2020/09/01 Javascript
Three.js学习之网格
2016/08/10 Javascript
JavaScript实现公历转农历功能示例
2017/02/13 Javascript
Angular4开发解决跨域问题详解
2017/08/28 Javascript
Angular2仿照微信UI实现9张图片上传和预览的示例代码
2017/10/19 Javascript
vue2实现可复用的轮播图carousel组件详解
2017/11/27 Javascript
浅谈在Vue.js中如何实现时间转换指令
2019/01/06 Javascript
微信小程序 wx:for遍历循环使用实例解析
2019/09/09 Javascript
Vue+Element实现网页版个人简历系统(推荐)
2019/12/31 Javascript
JavaScript 替换所有匹配内容及正则替换方法
2020/02/12 Javascript
Python文件操作类操作实例详解
2014/07/11 Python
Python利用Beautiful Soup模块搜索内容详解
2017/03/29 Python
深入了解Python中pop和remove的使用方法
2018/01/09 Python
使用python验证代理ip是否可用的实现方法
2018/07/25 Python
Python中捕获键盘的方式详解
2019/03/28 Python
windows下安装Python虚拟环境virtualenvwrapper-win
2019/06/14 Python
Python HTMLTestRunner可视化报告实现过程解析
2020/04/10 Python
IDLE下Python文件编辑和运行操作
2020/04/25 Python
Python暴力破解Mysql数据的示例
2020/11/09 Python
JD Sports芬兰:英国领先的运动鞋和运动服饰零售商
2018/11/16 全球购物
英国最大的在线床超市:Bed Star
2019/01/24 全球购物
祖国在我心中的演讲稿
2014/05/04 职场文书
给客户的检讨书
2014/12/21 职场文书
KTV员工管理制度
2015/08/06 职场文书
庭外和解协议书
2016/03/23 职场文书
2017年寒假社区服务活动总结
2016/04/06 职场文书
MySQL 自动填充 create_time 和 update_time
2022/05/20 MySQL