您好,登錄后才能下訂單哦!
一、首先要讓salt-master找到我們自定義的腳本(/etc/salt/master):
使用ext_pillar 擴展自定義腳本,gameInfo就是腳本的名字,腳本的目錄要放在/usr/lib/python2.6/site-packages/salt/pillar這個目錄下面
新版可以支持自定義目錄,使用參數extension_modules: /srv/salt/modules
二、自定義腳本需要返回字典數據,gameInfo腳本如下:
#!/usr/bin/python #coding:utf-8 import urllib2 import json import logging # Set up logging log = logging.getLogger(__name__) def __virtual__(): return True def ext_pillar(minion_id, pillar, *args, **kwargs): try: ip = minion_id.split('-')[-1] url = 'http://xxx.xxx.com/public/api/SaltPillarInfo/{ip}/'.format(ip=ip) request = urllib2.urlopen(url=url, timeout=30) response = request.read() data = json.loads(response) logging.info("From URL:{url} get data:{data}".format(url=url, data=data)) except Exception as e: logging.error(str(e)) data = {} return {'gameInfo': data}
因為我的minionid是'game-192.168.1.1' 這種用途-ip的形式命名,minion_id.split('-')[-1]獲取出minion的IP,然后請求django提供的接口,將django返回的數據轉換成python數據格式直接返回出來
三、django代碼就很簡單了
url配置
from django.conf.urls import patterns, include, url from views import * urlpatterns = patterns('', url(r'^api/SaltPillarInfo/(?P<ip>.*)/$', SaltPillarInfoApiView.as_view()), 以下省略。。。 )
views:
class SaltPillarInfoApiView(View): def get(self, request, ip): try: hostobj = GameHost.objects.using('res').get(Q(ip1=ip)|Q(ip2=ip), state=1) gamename = GameInfo.objects.using('res').get(id=hostobj.gameid).code plat = GamePlatform.objects.using('res').get(id=hostobj.platid).code serverlist = [ gsobj.serverid for gsobj in GameServer.objects.using('res').filter(hostid=hostobj.id, mergetarget__isnull=True) ] ret = { 'gamename': gamename, 'plat': plat, 'serverlist': serverlist } except Exception as e: print str(e) ret = {} return HttpResponse(json.dumps(ret))
直接請求就是這個效果啦:
四、測試:
妥妥地給機器打上游戲,平臺,區服的標志了。。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。