|
#!/usr/bin/env python
#-*-coding:utf-8-*-
# author:liumeide
import sys
import ansible.playbook
from ansible import callbacks
from ansible import utils
import ansible.inventory
import os
stats = callbacks.AggregateStats()#holds stats about per-host activity during playbook runs,储存每个host在执行任务的时候状态信息。
playbook_cb = callbacks.PlaybookCallbacks(verbose=utils.VERBOSITY)
runner_cb = callbacks.PlaybookRunnerCallbacks(stats, verbose=utils.VERBOSITY)
Base_DIr=os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
>
def __init__(self,ipAddress,task_id,commamd,password,port=22,user='root'):
self.ipAddress=ipAddress
self.inventorty=self.webInventory = ansible.inventory.Inventory(self.ipAddress)###ipaddress需要传进去是列表。
self.__check_par__()
self.task_id=task_id
self.password=password
self.port=port
self.user=user
self.command=commamd
self.play=os.path.join(Base_DIr,self.task_id+'.yml')
self.__creat_yml__()
self.__check_env__()
def __check_par__(self):
if not isinstance(self.ipAddress,list):
exit(1)
def __check_env__(self):
if os.path.exists(self.play):
os.remove(self.play)
def __creat_yml__(self):
with open(self.play,'a+') as f1:
f1.write('- name: lmd\n')
f1.write(' hosts: all\n')
f1.write(' gather_facts: no\n')
f1.write(' tasks:\n')
f1.write(' - name: %s\n'%(self.task_id))
f1.write(' shell: %s\n'%self.command)
f1.write(' async: 8\n')
f1.write(' poll: 8\n')
def execute(self):
#功能:该函数主要是playbook的python api
#:param play: yam文件位置。
#:param task_id:任务id
#:param password:执行用户的密码。
#:param username:执行用户,如果不写,默认是root
#:param port:ssh的端口
#:return:返回结果。
pb = ansible.playbook.PlayBook(
playbook=self.play,
stats=stats,
forks=40,
callbacks=playbook_cb,
inventory=self.inventorty,
remote_pass=self.password,
remote_user=self.user,
remote_port=self.port,
runner_callbacks=runner_cb,
check=False,
timeout=2,
)
pb.run()
if __name__=='__main__':
# res=execute(sys.argv[1],sys.argv[2])
# print res
playbook_obj=Play_Book(['172.17.33.21','127.0.0.1'],'58','pwd','123')
playbook_obj.execute() |
|
|