指定saltstack的任务id

最近在看saltstack的源代码,了解里面的流程,看了下salt命令的执行流程。想想自己能不能改造下源代码,于是自己在那想需求。后来想想能不能在执行salt的时候指定jid啊。

先说下需求:

指定salt命令的jid

类似这样的:

开始动手实现。

第一步

修改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。

当当当。。。

修改成功。

为什么要加这个功能,因为后台管理系统在执行任务的时候,需要先由web页面产生一个jid。通过这个jid去查询一些信息。

时间: 2024-08-10 00:06:34

指定saltstack的任务id的相关文章

Jmeter 通过json Extracted 来获取 指定的值的id

在没有 精确或模糊查询的接口时可以使用jmeter 获取指定的值的ID 1 import java.lang.String ; 2 String getTargetName="iphone632g"; 3 //判读相应结果中是否包含指定值:iphone632g 4 boolean containsCategory=prev.getResponseDataAsString().contains(getTargetName); 5 vars.putObject("contains

Saltstack中关于ID的那些故事

今儿个来说说关于ID设置这些事儿,以及碰到问题解决过程.希望对大家有用.... 在前期主机名规划当中,我们会根据业务特定设计出一套主机名识别方法.. 有一天,一台测试机器安装完毕,但在Saltstack认证key时,会发现master和minions对接时,发现minion传过来的ID是localhost.localdomain,就奇怪了,这是为什么呢.? 默认主机操作系统安装完毕,/etc/sysconfig/network配置文件的hostname是localhost.localdomain

通过接口指定appstore 的应用id获取Bundleid

比如微信的 App Store 地址是 https://itunes.apple.com/cn/app/wei/id414478124 提取上面地址的 id 参数,即上面链接的末尾部分:414478124 请求这个地址: https://itunes.apple.com/lookup?id=414478124,就会返回包含 APP 所有信息的 json 格式的文本文件,示例如下 { "resultCount":1, "results": [{"screen

通过id查询用户,但是只返回指定的字段

使用hibernate和spring MVC 通过id查询到一个用户,但是只返回指定的字段 方式一: 拼接hql /*** * 通过数据库ID查询用户,但是只返回指定的字段 * @param id * @param propertyNames : 指定的多个成员变量 * @return */ public Object[] getPropertiesById(int id,String[] propertyNames){ if(ValueWidget.isNullOrEmpty(property

saltstack入门之一:saltstack安装

一.salt简介 saltstack是一个基于C/S架构的集中化管理平台,具备配置管理.远程执行.监控等功能.使用saltstack可以一键批量部署服务.远程执行命令,在大规模的服务集群中大大提高了运维人员的工作效率. saltstack基于python语言开发,使用轻量级消息队列(ZeroMQ)pub/sub进行通信. minion在首次时,会在/etc/salt/pki/minion/(该路径可在/etc/salt/minion中设置)下自动生成minion.pem(私钥)和minion.p

saltstack之用户管理

在集中化管理中,用户管理是重要的. 下面是我自己总结salt对用户管理的文档. 一.添加单个用户: 生成密码 openssl passwd -1 -salt 'linwangyi' user.users文件 [[email protected] salt]# cat user/useradd.sls linwangyi: user.present: -fullname: linwangyi D - shell:/bin/bash -password: '$1$linwangy$PMII.NL0i

saltstack自动化运维

一.Saltstack架构 Saltstack基于C/S架构,服务端master:192.168.179.128和客户端minions :192.168.179.129 二.Saltstack的安装配置 1.master的安装 rpm -ivhhttp://mirrors.sohu.com/fedora-epel/6/x86_64/epel-release-6-8.noarch.rpmyum install salt-master默认配置文件位于/etc/salt/master ,默认不需要更改

Saltstack 安装

Saltstack 安装应用 master 192.168.20.156 minion 192.168.20.168 一.系统准备 [[email protected] ~]# uname -r 2.6.32-504.el6.x86_64 # salt --version salt 2016.3.3 (Boron) 1.设置关闭 selinux [[email protected] ~]# cat /etc/sysconfig/selinux |grep -v ^# SELINUX=disabl

自动化运维集中式管理工具saltstack的基于各个平台的部署

集中式管理工具saltstack是兼容Linux.Windows.Unix平台,能实现服务器的批量管理,命令或脚本下发,软件部署,环境搭建,配置管理,是运维人员的提高管理效率的工具.至于更详细的功能与优势这里不再介绍,网络上有很多前辈有介绍,这里只介绍部署方法. 部署环境 saltstack版本:2015.8.7 服务端master:CentOS6.7   master 被控段minion:CentOS5.11   minion01 CentOS6.7    minion02 CentOS7.2