通过flask框架写成http接口调用Ansible
#*******一、flask_ansible.py文件#!/usr/bin/envpython#_*_coding:utf-8_*_importjsonfromflaskimportFlask,requestfromansible_api_jobimportAnsiblesapp=Flask(__name__)@app.route('/ansible/command',methods=['GET','POST'])defcommand():ifrequest.method=='POST':jsondata=request.get_data()dictdata=json.loads(jsondata)ansible=Ansibles(dictdata['host'])#实例化Ansible对象res=ansible.shell(dictdata['command'])returnreselse:return'<h2>Accesserror</h2>'@app.route('/ansible/copyfile',methods=['GET','POST'])defcopyfile():ifrequest.method=='POST':jsondata=request.get_data()dictdata=json.loads(jsondata)ansible=Ansibles(dictdata['targethost'])#实例化Ansible对象res=ansible.copyfile(str(dictdata['srcfile']),str(dictdata['dectdir']))returnreselse:return'<h2>Accesserror</h2>'@app.route('/ansible/pullfile',methods=['GET','POST'])defpullfile():ifrequest.method=='POST':jsondata=request.get_data()dictdata=json.loads(jsondata)ansible=Ansibles(dictdata['srchost'])res=ansible.pull(dictdata['pullsrcfile'],dictdata['savelocaldir'])returnreselse:return'<h2>Accesserror</h2>'if__name__=='__main__':app.run(debug=True,host='0.0.0.0')#************二、ansible_api_job.py文件#!/user/bin/engpython#-*-coding=utf-8-*-importansible.runnerclassAnsibles(object):def__init__(self,hostname):self.hostlist="host.txt"self.user="root"self.passwd="1qaz#EDC"self.pattern="vmserver"self.hostname=hostnamehostlist=self.hostname.split(',')hostfile=open('host.txt','w+')hostfile.writelines('[vmserver]'+'\n')forlineinhostlist:hostfile.writelines(line+'\n')hostfile.close()defshell(self,command):results=ansible.runner.Runner(host_list=self.hostlist,remote_user=self.user,remote_pass=self.passwd,module_name='shell',module_args=command,pattern=self.pattern,forks=10).run()for(hostname,result)inresults['contacted'].items():ifresult['stdout']=="":return"HOST:%s,ERROR>>(%s)"%(hostname,result['stderr'])else:return"HOST:%s,RESULTS>>(%s)"%(hostname,result['stdout'])defcopyfile(self,srcfile,dectdir):results=ansible.runner.Runner(host_list=self.hostlist,remote_user=self.user,remote_pass=self.passwd,module_name='copy',module_args='src=%sdest=%s'%(srcfile,dectdir),pattern=self.pattern,forks=10).run()for(hostname,result)inresults['contacted'].items():if'failed'inresult:return"HOST:%s,ERROR>>(%s)"%(hostname,result['msg'])else:return"HOST:%s,copyok"%(hostname)#文件拉取到本地defpull(self,pullsrcfile,savelocaldir):pullfileres=ansible.runner.Runner(host_list=self.hostlist,remote_user=self.user,remote_pass=self.passwd,module_name='fetch',module_args='src=%sdest=%sflat=yes'%(pullsrcfile,savelocaldir),pattern=self.pattern,forks=10).run()for(hostname,result)inpullfileres['contacted'].items():if'msg'inresult:return"HOST:%sERROR>>(%s)"%(hostname,result['msg'])else:return'HOST:%spullok'%(hostname)if__name__=="__main__":pass#*********三、urlib2调用http接口#_*_coding:utf-8_*_importurllib2importjson#调用执行命令HTTP接口defansible_http_post_command(host,command):url='http://192.168.89.8:5000/ansible/command'data={'host':host,'command':command}headers={'Content-Type':'application/json'}req=urllib2.Request(url=url,headers=headers,data=json.dumps(data))response=urllib2.urlopen(req)returnresponse.read()#res=ansible_http_post_command('vm5',"uname-a")#printres#调用传送文件到目标主机的HTTP接口defansible_http_post_copyfile(srcfile,targethost,dectdir):url='http://192.168.89.8:5000/ansible/copyfile'data={'srcfile':srcfile,'targethost':targethost,'dectdir':dectdir}headers={'Content-Type':'application/json'}req=urllib2.Request(url=url,headers=headers,data=json.dumps(data))response=urllib2.urlopen(req)returnresponse.read()res=ansible_http_post_copyfile('/tmp/12345.txt','vm4','/root/')printres#调用从目标主机中拉取文件到本地的HTTP接口defansible_http_post_pullsend(srchost,pullsrcfile,savelocaldir):url='http://192.168.89.8:5000/ansible/pullfile'data={'srchost':srchost,'pullsrcfile':pullsrcfile,'savelocaldir':savelocaldir}headers={'Content-Type':'application/json'}req=urllib2.Request(url=url,headers=headers,data=json.dumps(data))response=urllib2.urlopen(req)returnresponse.read()#res=ansible_http_post_pullsend('vm2','/tmp/12345.txt','/tmp/')#printres
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。