指定saltstack的任務id

最近在看saltstack的源代碼,瞭解裏面的流程,看了下salt命令的執行流程。想想自己能不能改造下源代碼,於是自己在那想需求。後來想想能不能在執行salt的時候指定jid啊。


先說下需求:

指定salt命令的jid

類似這樣的:

wKioL1QIDsTRoHWYAADPA53FEF4308.jpg

開始動手實現。


第一步

修改salt.utils.parsers.SaltCMDOptionParser類,增加命令行選項。

self.add_option(
            '-j','--jid',
            dest='jid',
            default='',
            help=('Set the job\'s id,'
                'like 20140903143821048459')
        )


第二步

修改salt.utils.parsers.OptionParser類,用於判斷jid的合法性。

# 在parse_args方法返回前,調用這個方法
if hasattr(options,'jid'):
     self._check_jid(options.jid)
return options, args

# 檢查jid的合法性
def _check_jid(self,jid=''):
        try:
            if jid == '':
                pass
            elif len(jid) != 20:
                raise optparse.OptionValueError('jid needs 20 length and is numberic str,like "20140903143821048459"')
            else:
                import re
                if not re.match(r'\d{20}',jid):
                    raise optparse.OptionValueError('jid needs 20 length and is numberic str,like "20140903143821048459"')
        except optparse.OptionValueError,e:
            print(e)
            sys.exit(1)


第三步

修改salt.cli.SaltCMD類

try:
    local = salt.client.LocalClient(self.get_config_file_path(),self.options.jid) #修改
except SaltClientError as exc:
    self.exit(2, '{0}\n'.format(exc))
    return

if self.options.batch:
    batch = salt.cli.batch.Batch(self.config,jid=self.options.jid) # 修改


第四步

修改salt.client.LocalClient類

def __init__(self,
                 c_path=os.path.join(syspaths.CONFIG_DIR, 'master'),
                 jid='',mopts=None): # 增加jid參數
     ......
     self.jid = jid # 增加屬性
     self.serial = salt.payload.Serial(self.opts)

def run_job(self,tgt,fun,....):
    # jid = ''
    jid = self.jid


第五步

修改salt.cli.batch.Batch類

def __init__(self, opts, quiet=False,jid=''): # 增加jid
        self.opts = opts
        self.quiet = quiet
        self.local = salt.client.LocalClient(opts['conf_file'],jid) # 增加jid
        self.minions = self.__gather_minions()


所有步驟完成,重啓master和minion。

wKiom1QIFLnBc3fIAAJi78OjehQ794.jpg

噹噹噹。。。

修改成功。

爲什麼要加這個功能,因爲後臺管理系統在執行任務的時候,需要先由web頁面產生一個jid。通過這個jid去查詢一些信息。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章