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简单实现刷新智联简历
Mar 30 Python
python中根据字符串调用函数的实现方法
Jun 12 Python
关于Python数据结构中字典的心得
Dec 04 Python
快速解决pandas.read_csv()乱码的问题
Jun 15 Python
Python File(文件) 方法整理
Feb 18 Python
使用python的pandas为你的股票绘制趋势图
Jun 26 Python
pycharm中显示CSS提示的知识点总结
Jul 29 Python
Python pandas用法最全整理
Aug 04 Python
python实现拉普拉斯特征图降维示例
Nov 25 Python
python中如何进行连乘计算
May 28 Python
Python操作MySQL数据库的示例代码
Jul 13 Python
Python 如何定义匿名或内联函数
Aug 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创建PDF中文文档
2006/10/09 PHP
php中使用parse_url()对网址进行解析的实现代码(parse_url详解)
2012/01/03 PHP
深入解析phpCB批量转换的代码示例
2013/06/27 PHP
PHP防盗链代码实例
2014/08/27 PHP
10个超级有用的PHP代码片段果断收藏
2015/09/23 PHP
在云虚拟主机部署thinkphp5项目的步骤详解
2017/12/21 PHP
Laravel框架模型的创建及模型对数据操作示例
2019/05/07 PHP
javascript 按回车键相应按钮提交事件
2009/11/02 Javascript
jQuery实战之仿淘宝商城左侧导航效果
2011/04/12 Javascript
页面刷新时记住滚动条的位置jquery代码
2014/06/17 Javascript
node.js中的fs.rename方法使用说明
2014/12/16 Javascript
javascript巧用eval函数组装表单输入项为json对象的方法
2015/11/25 Javascript
使用jquery获取url以及jquery获取url参数的实现方法
2016/05/25 Javascript
很棒的vue弹窗组件
2017/05/24 Javascript
vue如何从接口请求数据
2017/06/22 Javascript
jQuery实现base64前台加密解密功能详解
2017/08/29 jQuery
详解angular路由高亮之RouterLinkActive
2018/04/28 Javascript
原生JS实现的简单轮播图功能【适合新手】
2018/08/17 Javascript
基于vue开发微信小程序mpvue-docs跳转页面功能
2019/04/10 Javascript
JavaScript函数式编程(Functional Programming)声明式与命令式实例分析
2019/05/21 Javascript
深入学习JavaScript中的bom
2019/05/27 Javascript
layui之table checkbox初始化时选中对应选项的方法
2019/09/02 Javascript
layui--select使用以及下拉框实现键盘选择的例子
2019/09/24 Javascript
异步任务队列Celery在Django中的使用方法
2018/06/07 Python
Python使用googletrans报错的解决方法
2018/09/25 Python
对python 调用类属性的方法详解
2019/07/02 Python
Python 使用type来定义类的实现
2019/11/19 Python
Pyinstaller加密打包应用的示例代码
2020/06/11 Python
python绘图模块之利用turtle画图
2021/02/12 Python
canvas实现烟花的示例代码
2020/01/16 HTML / CSS
坚定理想信念心得体会
2014/03/11 职场文书
春节联欢会主持词
2014/03/24 职场文书
老公保证书范文
2014/04/29 职场文书
导师工作推荐信范文
2014/05/17 职场文书
学习党的群众路线教育实践活动心得体会范文
2014/11/03 职场文书
惊天动地观后感
2015/06/10 职场文书