如何在Salt SLS中捕获执行模块返回结果并复用?
捕获SaltStack SLS中模块执行结果并复用
方法1:用set_fact存储临时结果(推荐)
这种方式可以将service.getsid的执行结果存储为minion的临时事实,避免重复执行模块,后续步骤直接引用即可:
{% set testVar = pillar['ServiceName'] %} GetServiceId: module.run: - name: service.getsid - name: {{ testVar }} set_fact: - service_id: {{ salt['service.getsid'](name=testVar) }} - require: - module: GetServiceId useServiceId: cmd.script: - source: test/path/test.ps1 - args: - {{ salt['grains.get']('service_id') }} - require: - set_fact: GetServiceId
说明:
- 先通过
module.run执行service.getsid,再用set_fact把结果存入service_id临时grains useServiceId通过require确保前置步骤执行完成,再用salt['grains.get']('service_id')取出结果作为脚本参数
方法2:直接在后续步骤调用模块(会重复执行)
如果模块执行无副作用,也可以直接在args中调用模块获取结果,但这种方式会让service.getsid执行两次(一次在GetServiceId,一次在参数渲染时):
{% set testVar = pillar['ServiceName'] %} GetServiceId: module.run: - name: service.getsid - name: {{ testVar }} useServiceId: cmd.script: - source: test/path/test.ps1 - args: - {{ salt['service.getsid'](name=testVar) }} - require: - module: GetServiceId
如果不需要单独的GetServiceId步骤,也可以直接省略该步骤,直接在useServiceId中调用模块获取结果:
{% set testVar = pillar['ServiceName'] %} useServiceId: cmd.script: - source: test/path/test.ps1 - args: - {{ salt['service.getsid'](name=testVar) }}
内容的提问来源于stack exchange,提问作者cmoe
相关产品推荐
相关产品推荐

