ansible playbook动态传入host接口实例

运行环境:python2.6   ansible版本:1.9.1

code:

 1 #!/usr/bin/env python
 2 #-*-coding:utf-8-*-
 3 # author:liumeide
 4 
 5 import sys
 6 import ansible.playbook
 7 from ansible import callbacks
 8 from ansible import utils
 9 import ansible.inventory
10 import os
11 stats = callbacks.AggregateStats()#holds stats about per-host activity during playbook runs,储存每个host在执行任务的时候状态信息。
12 playbook_cb = callbacks.PlaybookCallbacks(verbose=utils.VERBOSITY)
13 runner_cb = callbacks.PlaybookRunnerCallbacks(stats, verbose=utils.VERBOSITY)
14 Base_DIr=os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
15 
16 
17 class  Play_Book(object):
18     def __init__(self,ipAddress,task_id,commamd,password,port=22,user='root'):
19         self.ipAddress=ipAddress
20         self.inventorty=self.webInventory = ansible.inventory.Inventory(self.ipAddress)###ipaddress需要传进去是列表。
21         self.__check_par__()
22         self.task_id=task_id
23         self.password=password
24         self.port=port
25         self.user=user
26         self.command=commamd
27         self.play=os.path.join(Base_DIr,self.task_id+'.yml')
28         self.__creat_yml__()
29         self.__check_env__()
30     def __check_par__(self):
31         if not isinstance(self.ipAddress,list):
32             exit(1)
33     def __check_env__(self):
34         if os.path.exists(self.play):
35             os.remove(self.play)
36     def __creat_yml__(self):
37         with open(self.play,'a+') as f1:
38             f1.write('- name: lmd\n')
39             f1.write('  hosts: all\n')
40             f1.write('  gather_facts: no\n')
41             f1.write('  tasks:\n')
42             f1.write('     - name: %s\n'%(self.task_id))
43             f1.write('       shell: %s\n'%self.command)
44             f1.write('       async: 8\n')
45             f1.write('       poll: 8\n')
46     def execute(self):
47 
48         #功能:该函数主要是playbook的python api
49         #:param play: yam文件位置。
50         #:param task_id:任务id
51         #:param password:执行用户的密码。
52         #:param username:执行用户,如果不写,默认是root
53         #:param port:ssh的端口
54         #:return:返回结果。
55 
56         pb = ansible.playbook.PlayBook(
57 
58             playbook=self.play,
59             stats=stats,
60             forks=40,
61             callbacks=playbook_cb,
62             inventory=self.inventorty,
63             remote_pass=self.password,
64             remote_user=self.user,
65             remote_port=self.port,
66             runner_callbacks=runner_cb,
67             check=False,
68             timeout=2,
69         )
70         pb.run()
71 
72 
73 if __name__=='__main__':
74   # res=execute(sys.argv[1],sys.argv[2])
75   # print res
76   playbook_obj=Play_Book(['172.17.33.21','127.0.0.1'],'58','pwd','123')
77   playbook_obj.execute()

 需要注意的是:yaml文件中的host属性为all。

posted @ 2017-01-23 17:41  evil_liu  阅读(796)  评论(0)    收藏  举报