在 salt 模块中获取 jid
在 salt 模块中获取任务 jid
在自定义的模块中获取 jid,以实现一些需求(客户端主动的方式,触发最新步骤的结果)
需要自定义 salt 模块,并且接收 kwargs
参数(必须),在kwargs中会有一个 __pub_jid
的参数,是当前运行 job 的 id。
监听事件命令,方便观察,主要看事件输出的 jid 和我们后面模块写入的 jid (__pub_jid
)是否一致,对比 minion 日志中我们打的日志。
1 | salt-run state.event 'salt/job/*/prog/*/0' |
自定义测试模块
console.log
用 state.sls 在 sls 中跑是无效的,kwargs 中会没有 jid
接收 **kwargs
参数,其中包含 __pub_jid
就是 jid 了,注意如果没接收参数就无了。
另外值的注意的是,在自定义模块中如果再调用其他模块(__salt__
方式),子 job 运行时,事件监听获取不到该调用的 jid,这时候需要在调用时传入 __pub_jid
,最好是把 **kwargs
传入,这样会使用当前的 jid。
模块代码如下
1 | # /srv/salt/_modules/console.py |
同步模块(修改 _modules 下的文件需要同步)
1 | salt '*' saltutil.sync_all |
调用的命令,执行 console.log
模块,输出的 kwargs 中含有 jid
(用 state.sls 在 sls 中跑是无效的,kwargs 中没有 jid)
1 | salt "*" console.log "hello world" |
无效的方式
(在 sls 中无法获取到)
测试用 state.sls 方式运行下面的状态文件 salt "*" state.sls console
,会看到 console.log
模块中是没有 jid 数据的,这点差异需要注意
1 | # /srv/states/console.sls |
pillar schedule
如果在 pillar 的 http_json 中有 schedule,也必须直接跑模块才生效,如下
1 | # http://xxxx.com/xxx/${minion_id}/ |
Comments