ansible作为python模块库使用的方法实例

发布时间 - 2026-01-10 22:35:42    点击率:

前言

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  # 模块库  # 标准库模块  # ansible  # 入门  # python ansible自动化运维工具执行流程  # python中Ansible模块的Playbook的具体使用  # ansible-playbook实现自动部署KVM及安装python3的详细教程  # Python自动化运维之Ansible定义主机与组规则操作详解  # python自动化之Ansible的安装教程  # python ansible服务及剧本编写  # python将ansible配置转为json格式实例代码  # python开发的自动化运维工具ansible详解  # 多个  # 等功能  # 自己的  # 的是  # 是一个  # 第一个  # 如何在  # 第二个  # 自定义  # 非常好  # 就将  # 可以根据  # 来实现  # 主要包括  # 比较喜欢  # 先看  # 配置文件  # 客户端  # 实现了  # 情况下 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: HTML5空格和margin有啥区别_空格与外边距的使用场景【说明】  Android自定义listview布局实现上拉加载下拉刷新功能  如何在阿里云高效完成企业建站全流程?  Laravel如何使用Guzzle调用外部接口_Laravel发起HTTP请求与JSON数据解析【详解】  如何挑选高效建站主机与优质域名?  悟空识字怎么关闭自动续费_悟空识字取消会员自动扣费步骤  学生网站制作软件,一个12岁的学生写小说,应该去什么样的网站?  深圳网站制作设计招聘,关于服装设计的流行趋势,哪里的资料比较全面?  佐糖AI抠图怎样调整抠图精度_佐糖AI精度调整与放大细化操作【攻略】  百度浏览器网页无法复制文字怎么办 百度浏览器复制修复  HTML5打空格有哪些误区_新手常犯的空格使用错误【技巧】  iOS UIView常见属性方法小结  Linux网络带宽限制_tc配置实践解析【教程】  Laravel如何配置中间件Middleware_Laravel自定义中间件拦截请求与权限校验【步骤】  动图在线制作网站有哪些,滑动动图图集怎么做?  Python企业级消息系统教程_KafkaRabbitMQ高并发应用  Bootstrap CSS布局之列表  IOS倒计时设置UIButton标题title的抖动问题  如何在橙子建站中快速调整背景颜色?  JS实现鼠标移上去显示图片或微信二维码  如何在搬瓦工VPS快速搭建网站?  独立制作一个网站多少钱,建立网站需要花多少钱?  Laravel如何创建自定义Artisan命令?(代码示例)  logo在线制作免费网站在线制作好吗,DW网页制作时,如何在网页标题前加上logo?  大连网站制作费用,大连新青年网站,五年四班里的视频怎样下载啊?  北京企业网站设计制作公司,北京铁路集团官方网站?  Win11怎么开启自动HDR画质_Windows11显示设置HDR选项  悟空浏览器如何设置小说背景色_悟空浏览器背景色设置【方法】  大同网页,大同瑞慈医院官网?  Laravel如何优雅地处理服务层_在Laravel中使用Service层和Repository层  Laravel Blade组件怎么用_Laravel可复用视图组件的创建与使用  UC浏览器如何设置启动页 UC浏览器启动页设置方法  如何做网站制作流程,*游戏网站怎么搭建?  ,交易猫的商品怎么发布到网站上去?  Laravel怎么上传文件_Laravel图片上传及存储配置  jQuery validate插件功能与用法详解  常州企业网站制作公司,全国继续教育网怎么登录?  ChatGPT常用指令模板大全 新手快速上手的万能Prompt合集  如何快速生成ASP一键建站模板并优化安全性?  专业型网站制作公司有哪些,我设计专业的,谁给推荐几个设计师兼职类的网站?  如何实现建站之星域名转发设置?  微信小程序 闭包写法详细介绍  网站制作公司哪里好做,成都网站制作公司哪家做得比较好,更正规?  如何确保FTP站点访问权限与数据传输安全?  如何在Windows服务器上快速搭建网站?  Laravel如何使用Blade组件和插槽?(Component代码示例)  Android GridView 滑动条设置一直显示状态(推荐)  Laravel怎么生成二维码图片_Laravel集成Simple-QrCode扩展包与参数设置【实战】  原生JS获取元素集合的子元素宽度实例  谷歌浏览器下载文件时中断怎么办 Google Chrome下载管理修复