ansible2.4 api调用

简介:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
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  multiprocessing
 
 
class  ResultsCollector(CallbackBase):
     def  v2_runner_on_ok( self ,result):
         host  =  result._host
         logging.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._host
         logging.warning( '===v2_runner_on_failed====host=%s===result=%s'  %  (host, result._result))
 
     def  v2_runner_on_unreachable( self ,result):
         host  =  result._host
         logging.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  =  playbooks
         self .passwords  =  None
         self .callback  =  None
         Options  =  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 ( '发布结束' )
     本文转自小白的希望 51CTO博客,原文链接http://blog.51cto.com/haoyonghui/2052084:,如需转载请自行联系原作者




相关文章
|
JSON 移动开发 Java
氚云丨开发课— 09平台 API 的调用及自定义 API 的编写与调用| 学习笔记
快速学习氚云丨开发课— 09平台 API 的调用及自定义 API 的编写与调用。
895 0
|
API 开发工具 数据安全/隐私保护
如何调用 API | 学习笔记
简介:快速学习如何调用 API
981 0
如何调用 API | 学习笔记
|
前端开发 Java 程序员
如何在SpringBoot中优雅地重试调用第三方API?
如何在SpringBoot中优雅地重试调用第三方API?
252 0
|
Java API
Java调用飞信API
Java调用飞信API
63 0
|
Java 定位技术 API
java调用百度地图API根据地理位置获取经纬度
由于我们是使用百度提供的地理API接口,所以事先我们需要创建百度账号,并创建百度应用(因为我们要用应用到的ak)~~~~ 偷偷的告诉你们…这是免费的哦不要钱的…
java调用百度地图API根据地理位置获取经纬度
|
安全 Linux API
GrayLog使用HTTP JSONPath方式调用微步在线云API识别威胁IP
GrayLog使用HTTP JSONPath方式调用微步在线云API识别威胁IP
317 0
GrayLog使用HTTP JSONPath方式调用微步在线云API识别威胁IP
|
定位技术 API Python
|
数据采集 搜索推荐 API
我做的python 中文api调用模块
可以自动调用api接口
229 1
|
Java API Maven
java调用ZooKeeper API应用
java调用ZooKeeper API应用
java调用ZooKeeper API应用
|
Java API
SAP Commerce Cloud 里的 Site API 调用方式讲解
Multiple Country Site Support 为管理包含多个内容目录并使用内容继承的站点提供原生支持。
92 0