设为首页 收藏本站
查看: 1655|回复: 0

[经验分享] 指定saltstack的任务id

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2014-9-5 11:09:37 | 显示全部楼层 |阅读模式
最近在看saltstack的源代码,了解里面的流程,看了下salt命令的执行流程。想想自己能不能改造下源代码,于是自己在那想需求。后来想想能不能在执行salt的时候指定jid啊。

先说下需求:
指定salt命令的jid
类似这样的:
wKioL1QIDsTRoHWYAADPA53FEF4308.jpg
开始动手实现。

第一步
修改salt.utils.parsers.SaltCMDOptionParser类,增加命令行选项。
1
2
3
4
5
6
7
self.add_option(
            '-j','--jid',
            dest='jid',
            default='',
            help=('Set the job\'s id,'
                'like 20140903143821048459')
        )




第二步
修改salt.utils.parsers.OptionParser类,用于判断jid的合法性。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# 在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类
1
2
3
4
5
6
7
8
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类
1
2
3
4
5
6
7
8
9
10
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类
1
2
3
4
5
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去查询一些信息。


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-24532-1-1.html 上篇帖子: 实战使用saltstack源码安装配置mysql 下篇帖子: 运维自动化之:Saltstack配置管理工具安装配置使用攻略
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表