国产99久久精品_欧美日本韩国一区二区_激情小说综合网_欧美一级二级视频_午夜av电影_日本久久精品视频

最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關鍵字專題關鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
當前位置: 首頁 - 科技 - 知識百科 - 正文

ansibleapi實現命令異步執行

來源:懂視網 責編:小采 時間:2020-11-09 13:03:28
文檔

ansibleapi實現命令異步執行

ansibleapi實現命令異步執行:代碼也可以在這里查看https://github.com/ivonlee/ansible/blob/master/ansible_api_async_run.pytornado上實現ansible api異步執行,方便php寫的運維后臺調用,當然php后臺還是要做一個類似于隊列的東西,將任務存在redis或者mongodb里面,然
推薦度:
導讀ansibleapi實現命令異步執行:代碼也可以在這里查看https://github.com/ivonlee/ansible/blob/master/ansible_api_async_run.pytornado上實現ansible api異步執行,方便php寫的運維后臺調用,當然php后臺還是要做一個類似于隊列的東西,將任務存在redis或者mongodb里面,然
代碼也可以在這里查看https://github.com/ivonlee/ansible/blob/master/ansible_api_async_run.py

tornado上實現ansible api異步執行,方便php寫的運維后臺調用,當然php后臺還是要做一個類似于隊列的東西,將任務存在redis或者mongodb里面,然后有個php進程持續監聽任務隊列。

相關mysql視頻教程推薦:《mysql教程》

下面的腳本運行后,可以用類似POSTMAN工具進行post數據測試,如果你的平臺本來就是python的,那更方便了,自己寫個簡陋的web界面,直接執行了,不用tornado做web容器了。

mongodb里面的表信息,ansible_task是收到的任務,ansible_job里面有任務執行結果

上代碼,python比較搓,求大牛帶我

import tornado.ioloop
from tornado.options import define, options
import tornado.web
import ansible.runner
from ansible.inventory import Inventory
import simplejson
import hashlib
from pymongo import MongoClient
from bson.objectid import ObjectId
import os
import sys
import time
from psutil import Process
import datetime
from threading import Thread
define("key", default='d41d8cd98f00b204e9800998ecf8427e')
mongoinfo = {"host": "127.0.0.1", "port": "27017", "user":
 "ops", "password": "ops", "dbname": "ansible_log"}
TIME_FORMAT = '%Y-%m-%d %H:%M:%S'
WORKER_TIMEOUT = 5 * 60
NUMBER_OF_TASK_PER_PAGE = 25
ANSIBLE_FORKS = 30
ANSIBLE_INVENTORY = '/etc/ansible/hosts'
def getmd5(str):
 m = hashlib.md5()
 m.update(str)
 return m.hexdigest()
def ConnMongoDB():
 global mongoinfo
 dbhost = mongoinfo['host']
 dbport = mongoinfo['port']
 dbuser = mongoinfo['user']
 dbpwd = mongoinfo['password']
 dbname = mongoinfo['dbname']
 uri = 'mongodb://%s:%s@%s/%s' % (dbuser, dbpwd, dbhost, dbname)
 return uri
class MainHandler(tornado.web.RequestHandler):
 def get(self):
 self.write("Hello, world")
class CommandHandler(tornado.web.RequestHandler):
 def post(self):
 data = simplejson.loads(self.request.body) 
 badcmd = ['reboot','rm','kill','pkill','shutdown','half','mv','dd','mkfs','>','wget']
 type = data['type']
 cmd = data['cmd']
 host = data['host']
 print host
 sign = data['sign']
 isudo = data['sudo']
 cmdinfo = cmd.split(" ",1)
 print type,host,options.key
 hotkey = type+host+options.key
 print hotkey
 result = getmd5(hotkey)
 print result
 if sign != result:
 self.write("Sign is Error")
 else:
 if cmdinfo[0] in badcmd:
 self.write("This is Danger Shell")
 else:
 if "," in host:
 inventory = host.split(",")
 for host in inventory:
 runner = ansible.runner.Runner(
 module_name=type,
 module_args=cmd,
 pattern=host,
 sudo = isudo,
 forks=ANSIBLE_FORKS
 )
 result = runner.run()
 now = datetime.datetime.now()
 true = 'True'
 result['time'] = now.strftime(TIME_FORMAT)
 result['type'] = 'ad-hoc'
 result['sudo'] = isudo
 result['cmd'] = cmd
 result['inventory'] = host
 self.write(result)
 uri = ConnMongoDB()
 client = MongoClient(uri, safe=False)
 db = client.ansible_log
 db.ad_hoc.insert(result)
 else:
 runner = ansible.runner.Runner(
 module_name=type,
 module_args=cmd,
 pattern=host,
 sudo = isudo,
 forks=ANSIBLE_FORKS
 )
 result = runner.run()
 now = datetime.datetime.now()
 true = 'True'
 result['time'] = now.strftime(TIME_FORMAT)
 result['type'] = 'ad-hoc'
 result['sudo'] = isudo
 result['cmd'] = cmd
 result['inventory'] = inventory
 self.write(result)
 uri = ConnMongoDB()
 client = MongoClient(uri, safe=False)
 db = client.ansible_log
 db.ad_hoc.insert(result)
class AsyncTaskHandler(tornado.web.RequestHandler):
 def post(self):
 data = simplejson.loads(self.request.body)
 badcmd = ['reboot', 'rm', 'kill', 'pkill',
 'shutdown', 'half', 'mv', 'dd', 'mkfs', '>', 'wget']
 type = data['type']
 cmd = data['cmd']
 inventory = data['host']
 sign = data['sign']
 isudo = data['sudo']
 cmdinfo = cmd.split(" ", 1)
 print type, inventory, options.key
 hotkey = type + inventory + options.key
 print hotkey
 result = getmd5(hotkey)
 print result
 now = datetime.datetime.now()
 taskinfo = {}
 taskinfo['mode'] = type
 taskinfo['cmd'] = cmd
 taskinfo['inventory'] = inventory
 taskinfo['type'] = 'async ad-hoc'
 taskinfo['start'] = now.strftime(TIME_FORMAT)
 taskinfo['sudo'] = isudo
 uri = ConnMongoDB()
 client = MongoClient(uri, safe=False)
 db = client.ansible_log
 id=db.ansible_task.insert(taskinfo)
 mongoid={"_id":ObjectId(id)}
 print id
 if sign != result:
 self.write("Sign is Error")
 else:
 if cmdinfo[0] in badcmd:
 self.write("This is Danger Shell")
 else:
 runner = ansible.runner.Runner(
 module_name=type,
 module_args=cmd,
 pattern=inventory,
 sudo = isudo,
 forks=ANSIBLE_FORKS
 )
 _, res = runner.run_async(time_limit = WORKER_TIMEOUT)
 now = time.time()
 while True:
 if res.completed or time.time() - now > WORKER_TIMEOUT:
 break
 results = res.poll()
 results = results.get('contacted')
 if results:
 for result in results.items():
 jobinfo = {}
 data = result[1]
 print data
 inventory = result[0]
 jobinfo['inventory']=inventory
 jobinfo['job_id']=data['ansible_job_id']
 jobinfo['cmd']=data['cmd']
 jobinfo['task_id']=id
 uri = ConnMongoDB()
 client = MongoClient(uri, safe=False)
 db = client.ansible_log
 id2 = db.ansible_job.insert(jobinfo)
 mongoid2 = {"_id":ObjectId(id2)}
 if data['rc'] == 0 :
 thisinfo2 = db.ansible_job.find_one(mongoid2)
 thisinfo2['rc']=data['rc']
 thisinfo2['stdout']=data['stdout']
 thisinfo2['stderr']=data['stderr']
 db.ansible_job.save(thisinfo2)
 thisinfo = db.ansible_task.find_one(mongoid)
 thisinfo['end'] = data['end'] 
 thisinfo['rc'] = data['rc']
 db.ansible_task.save(thisinfo)
 elif data['rc'] == 1 :
 thisinfo2 = db.ansible_job.find_one(mongoid2)
 thisinfo2['rc']=data['rc']
 thisinfo2['stderr']=data['stderr']
 db.ansible_job.save(thisinfo2)
 thisinfo = db.ansible_task.find_one(mongoid)
 thisinfo['rc'] = data['rc']
 db.ansible_task.save(thisinfo)
 else:
 thisinfo2 = db.ansible_job.find_one(mongoid2)
 thisinfo2['rc']=data['rc']
 thisinfo2['stderr']=data['msg']
 db.ansible_job.save(thisinfo2)
 thisinfo = db.ansible_task.find_one(mongoid)
 thisinfo['rc'] = data['rc']
 db.ansible_task.save(thisinfo)
 time.sleep(2)
class GetGroupHandler(tornado.web.RequestHandler):
 def get(self):
 i = Inventory()
 groups = i.list_groups()
 self.write('\n'.join(groups))
application = tornado.web.Application([
 (r"/", MainHandler),
 (r"/asynctask", AsyncTaskHandler),
 (r"/command", CommandHandler),
 (r"/getgroup", GetGroupHandler),
])
if __name__ == "__main__":
 application.listen(8888)
 tornado.ioloop.IOLoop.instance().start()

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

文檔

ansibleapi實現命令異步執行

ansibleapi實現命令異步執行:代碼也可以在這里查看https://github.com/ivonlee/ansible/blob/master/ansible_api_async_run.pytornado上實現ansible api異步執行,方便php寫的運維后臺調用,當然php后臺還是要做一個類似于隊列的東西,將任務存在redis或者mongodb里面,然
推薦度:
標簽: 實現 代碼 API
  • 熱門焦點

最新推薦

猜你喜歡

熱門推薦

專題
Top
主站蜘蛛池模板: 国产成人一区二区三区在线播放 | 任你躁欧美一级在线精品免费 | 偷拍第一页 | 亚洲视频免费观看 | 欧美在线观看视频免费 | 精品欧美日韩一区二区三区 | 可以免费观看的毛片 | 国产成人拍精品视频网 | 精品日韩二区三区精品视频 | 欧美日韩精品一区二区在线播放 | 国产亚洲精品成人婷婷久久小说 | 婷婷成人亚洲 | 一区二区三区四区免费视频 | 亚洲视频免费观看 | 国产在线高清不卡免费播放 | 久久久久久91精品色婷婷 | 欧美日韩国产亚洲一区二区三区 | 美女牲交视频一级毛片 | 国产精品毛片久久久久久久 | 欧美日本日韩aⅴ在线视频 欧美日韩91 | 欧美人禽杂交狂配 | 国产一级成人毛片 | 国产成人拍精品视频网 | 国产美女一级特黄毛片 | 国产高清在线免费观看 | 亚洲 欧美 成人日韩 | 亚洲欧美日韩激情在线观看 | 一区免费在线观看 | 久久国产精品成人免费 | 伊人伊成久久人综合网777 | 2021精品国内一区视频自线 | xxx色xxx性| 特级一级全黄毛片免费 | 欧美在线日韩 | 波多野氏免费一区 | 纯毛片| 在线亚洲欧国产精品专区 | 天堂精品高清1区2区3区 | 午夜精品一区二区三区在线视 | 亚洲视频入口 | 国产激情一级毛片久久久 |