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程序中操作文件之flush()方法的使用教程
May 24 Python
python操作字典类型的常用方法(推荐)
May 16 Python
python获取当前运行函数名称的方法实例代码
Apr 06 Python
Python django实现简单的邮件系统发送邮件功能
Jul 14 Python
Python程序员面试题 你必须提前准备!
Jan 16 Python
Python3中内置类型bytes和str用法及byte和string之间各种编码转换 问题
Sep 27 Python
Python os.access()用法实例
Feb 18 Python
python+selenium 鼠标事件操作方法
Aug 24 Python
python网络爬虫 Scrapy中selenium用法详解
Sep 28 Python
Python+OpenCV实现图像的全景拼接
Mar 05 Python
Python常见反爬虫机制解决方案
Jun 01 Python
Pytorch反向传播中的细节-计算梯度时的默认累加操作
Jun 05 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表单提交问题的解决方法
2011/04/12 PHP
PHP 数据结构 算法描述 冒泡排序 bubble sort
2011/07/10 PHP
thinkphp的CURD和查询方式介绍
2013/12/19 PHP
php stripslashes和addslashes的区别
2014/02/03 PHP
php查询相似度最高的字符串的方法
2015/03/12 PHP
PHP实现的迪科斯彻(Dijkstra)最短路径算法实例
2017/09/16 PHP
Laravel模糊查询区分大小写的实例
2019/09/29 PHP
PHP设计模式之迭代器模式Iterator实例分析【对象行为型】
2020/04/26 PHP
PHP标准库 (SPL)――Countable用法示例
2020/06/05 PHP
JavaScript TO HTML 转换
2006/06/26 Javascript
jquery 学习之二 属性(类)
2010/11/25 Javascript
读jQuery之八 包装事件对象
2011/06/21 Javascript
JavaScript插入动态样式实现代码
2012/02/22 Javascript
设置iframe的document.designMode后仅Firefox中其body.innerHTML为br
2012/02/27 Javascript
在线所见即所得HTML编辑器的实现原理浅析
2015/04/25 Javascript
在JavaScript中操作数组之map()方法的使用
2015/06/09 Javascript
JavaScript中标识符提升问题
2015/06/11 Javascript
JS基于clipBoard.js插件实现剪切、复制、粘贴
2016/05/03 Javascript
js Canvas绘制圆形时钟效果
2017/02/17 Javascript
jQuery获取table下某一行某一列的值实现代码
2017/04/07 jQuery
基于jQuery实现的Ajax 验证用户名唯一性实例代码
2017/06/28 jQuery
Vue组件之全局组件与局部组件的使用详解
2017/10/09 Javascript
基于js 各种排序方法和sort方法的区别(详解)
2018/01/03 Javascript
基于vue实现可搜索下拉框定制组件
2020/03/26 Javascript
Vue安装浏览器开发工具的步骤详解
2019/05/12 Javascript
Python爬取数据并写入MySQL数据库的实例
2018/06/21 Python
Python 读写文件的操作代码
2018/09/20 Python
Pycharm无法使用已经安装Selenium的解决方法
2018/10/13 Python
tensorflow的ckpt及pb模型持久化方式及转化详解
2020/02/12 Python
Django查询优化及ajax编码格式原理解析
2020/03/25 Python
原生canvas制作画图小工具的踩坑和爬坑
2020/06/09 HTML / CSS
中国电子产品外贸网站:MiniIntheBox
2017/02/06 全球购物
微软瑞士官方网站:Microsoft瑞士
2018/04/20 全球购物
娱乐地球:Entertainment Earth
2020/01/08 全球购物
毕业生自我鉴定范文
2013/11/08 职场文书
关于中国梦的演讲稿
2014/04/23 职场文书