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。
学习是一种态度,坚持是质变的利器!

浙公网安备 33010602011771号