AnsibleAPI.py 实现多进程发布代码#!/usr/bin/python
# --*-- coding:utf-8 --*--import json
import logging
from ansible.parsing.dataloader import DataLoader
from ansible.vars.manager import VariableManager
from ansible.inventory.manager import InventoryManager
from ansible.playbook.play import Play
from ansible.executor.task_queue_manager import TaskQueueManager
from ansible.executor.playbook_executor import PlaybookExecutor
from ansible.plugins.callback import CallbackBase
from collections import namedtuple
from ansible import constants as C
import ansible.executor.task_result
import multiprocessingclass ResultsCollector(CallbackBase):def v2_runner_on_ok(self,result):host = result._hostlogging.basicConfig(level=logging.DEBUG,format='%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s',datefmt='%a, %d %b %Y %H:%M:%S',filename='/root/cmdb/script/publish.log',filemode='w')logging.warning('===v2_runner_on_ok===host=%s===result=%s' % (host, result._result))#print(json.dumps({host.name: result._result}, indent=4))def v2_runner_on_failed(self,result,ignore_errors=False):host = result._hostlogging.warning('===v2_runner_on_failed====host=%s===result=%s' % (host, result._result))def v2_runner_on_unreachable(self,result):host = result._hostlogging.warning('===v2_runner_on_unreachable====host=%s===result=%s' % (host, result._result))class AnsibleAPI(object):def __init__(self,hostlist,image_name,playbooks, *args, **kwargs):self.playbooks = playbooksself.passwords = Noneself.callback = NoneOptions = namedtuple('Options',['connection','remote_user','ask_sudo_pass','verbosity','ack_pass','module_path', 'forks', 'become', 'become_method','become_user','check', 'listhosts', 'listtasks', 'listtags','syntax','sudo_user', 'sudo', 'diff'])self.options = Options(connection='smart',remote_user='root',ack_pass=None,sudo_user='root',forks=5, sudo='yes', ask_sudo_pass=False, verbosity=5,module_path=None,become=True, become_method='sudo', become_user='root',check=None, listhosts=False,listtasks=False, listtags=None, syntax=None,diff=False)self.loader = DataLoader()self.inventory = InventoryManager(loader=self.loader,sources=['hosts'])self.variable_manager = VariableManager(loader=self.loader,inventory=self.inventory)self.variable_manager.extra_vars = {"image_name": image_name,'host':hostlist}def runplaybook(self):playbook = PlaybookExecutor(playbooks=self.playbooks,inventory=self.inventory,variable_manager=self.variable_manager,loader=self.loader,options=self.options,passwords=None)playbook._tqm._stdout_callback = ResultsCollector()playbook.run()if __name__ == '__main__':# 创建对象an1 = AnsibleAPI('192.168.194.129,192.168.194.128','common-oss-dc3a25.tar',['/etc/ansible/update.yml'])#an2 = AnsibleAPI('192.168.194.128','common-oss-dc3a25.tar',['/etc/ansible/update.yml'])#processes = []p1 = multiprocessing.Process(name='process_one',target=an1.runplaybook)#p2 = multiprocessing.Process(name='process_two',target=an1.runplaybook)#processes.append(p1)#processes.append(p2)#for p in processes:# p.start()# 等待子进程结束,主进程退出#for p in processes:#    p.join()    #可以加浮点数参数,等待多久就不等了p1.start()if p1.is_alive():print('正在发布')else:print('发布结束')

转载于:https://blog.51cto.com/haoyonghui/2052084

ansible2.4 api调用相关推荐

  1. Tensorflow C++ API调用Keras模型实现RGB图像语义分割

    我的实验是基于PSPNet模型实现二维图像的语义分割,下面的代码直接从得到的h5文件开始往下做... 也不知道是自己的检索能力出现了问题还是咋回事,搜遍全网都没有可以直接拿来用的语义分割代码,东拼西凑 ...

  2. novaclient的api调用流程与开发

    novaclient的api调用流程与开发 2015年07月05日 19:27:17 qiushanjushi 阅读数:3915 http://blog.csdn.net/tpiperatgod/ar ...

  3. Windows恶意软件API调用特征分析

    本文讲的是Windows恶意软件API调用特征分析, 1.背景 目标: 1)找到病毒调用概率高的API 2)找到病毒调用概率不高,但是当调用频次高的时候,是病毒概率高的API. 通常对病毒使用API的 ...

  4. WPF技术触屏上的应用系列(二): 嵌入百度地图、API调用及结合本地数据库在地图上进行自定义标点的实现...

    原文:WPF技术触屏上的应用系列(二): 嵌入百度地图.API调用及结合本地数据库在地图上进行自定义标点的实现 去年某客户单位要做个大屏触屏应用,要对档案资源进行展示之用.客户端是Window7操作系 ...

  5. saltstack一些常用模块和api调用方法

    研究可执行模块的时候,发现很多自带的模块已经很完善,可以帮助我们完成日常工作了,这里写入自己的记录操作: 1.使用salt.clien调用接口操作举例: >>> import sal ...

  6. 【Flutter】Dart 数据类型 字符串类型 ( 字符串定义 | 字符串拼接 | 字符串 API 调用 )

    文章目录 I . 字符串定义 I . 字符串拼接 III . 字符串 API 调用 IV . 字符串 Demo 示例 I . 字符串定义 使用单引号 ' ' 和 双引号 " " 都 ...

  7. 【阿里云API】 阿里云API调用的若干说明

    阿里云API 为了监控我们使用的一些阿里云产品,需要些一些脚本,定时调用这些脚本来获得相关阿里云产品的信息. ■ 概述 调用阿里云API大约分成两类方法,一个是直接从HTTP协议开始,自己根据阿里云的 ...

  8. Python 技术篇-20行代码实现微信机器人斗图功能实例演示!斗图啦官网API调用方法

    话不多说,看效果图: 先说下原理: 微信接收到你说的话,发给机器人来回复,用回复的话传参给斗图网,然后获得斗图网返回的图片,保存后把图片再发给跟你斗图的人. 斗图啦官网API调用文档 斗图啦官网 菜单 ...

  9. php 菜谱 源码,基于php的菜谱大全api调用代码实例

    代码描述:基于php的菜谱大全api调用代码实例 接口地址:http://www.juhe.cn/docs/api/id/46 PHP代码 // +-------------------------- ...

最新文章

  1. linux安装virtualbox命令,在Linux中从命令行查找Virtualbox Version的方法
  2. 全球及中国水牛奶市场销售份额与投资盈利前景分析报告2022版
  3. slf4j介绍以及实现原理窥探
  4. idea maven +spring mvc
  5. 谷歌大脑:探索权重无关神经网络
  6. 怎样查阅电脑最大能够扩充多大的内存
  7. 计算机导论学习综合训练及其答案
  8. 解决AD不能导入CAD文件
  9. Python Cartopy地图投影【2】
  10. c语言程序设计实验结果与分析,C语言程序设计实验报告(7)
  11. 数学通道的应用(十四)-负PWM控制下有效值的计算
  12. 3.8086/8088微处理器结构
  13. java 麻将小程序_麻将小程序麻将这么玩
  14. 5G专网大上行带宽技术设计与实现
  15. 关于IDEA的一些常用的快捷键整合,赶紧进来KK......
  16. prisma使用mongodb副本集群报错引发的一些列问题
  17. 长尾词推广系统推荐乐云seo_长尾词优化推广很好乐云seo
  18. MySQL本天早上8点到明早8点_早上8点是什么时辰
  19. 使用GCD(转自唐巧的技术博客)
  20. linux循环显示系统时间,Linux shell时间处理大全,值得收藏

热门文章

  1. oracle中判断是否为季末,Oracle中取月初,月末,季初,季末及年初,年末时间总结...
  2. 二叉排序树的实现——java
  3. Java 内存分配——Thinking in Java 4th 读书笔记
  4. css3属性box-sizing:border-box 用法解析 击败边框:带border的百分比布局
  5. python运行不了、显示警告_Python中偶尔遇到的细节疑问(二):UnicodeDecodeError,警告与忽略警告warnings...
  6. getter方法的作用 vuex_Vuex入门篇——基本使用
  7. java离群值,监视-衡量Java中单线程复杂算法的最佳宏基准测试工具/框架是什么?...
  8. java comp env 区别_加和不加java:comp/env/前缀有什么区别?
  9. mysql 怎么查询结果补0_mysql查询连续时间数据——无数据补0
  10. 2018新版正方教务 ---爬虫--- JAVA源码--课表--平时分----成绩-----排名----考试安排...