CI/CD场景下如何为Salt Formula传命令行参数至Jinja变量
在Salt Formula中传递命令行/API参数给Jinja变量的方法
方法1:通过API调用传递临时Pillar数据
这是CI/CD场景下最常用的动态传参方式,Salt API支持在调用时指定临时Pillar值。
API调用示例(POST请求体):
{ "client": "local", "tgt": "目标Minion", "fun": "state.apply", "arg": ["你的Formula名称"], "kwarg": { "pillar": {"download_path": "/自定义下载路径"} } }
对应的Formula SLS文件写法:
{% set path = pillar.get('download_path', '/usr/local/bin') %} echo_path: cmd.run: - name: 'echo {{ path }}'
pillar.get的第二个参数是默认值,未传递参数时会使用该值。
方法2:直接传递命令行风格参数
通过salt-call或API调用时传递键值对参数,可通过__arg__上下文变量或salt['config.get']获取。
API调用示例:
{ "client": "local", "tgt": "目标Minion", "fun": "state.apply", "arg": ["你的Formula名称"], "kwarg": { "path": "/自定义下载路径" } }
命令行调用示例:
salt-call state.apply 你的Formula名称 path=/自定义下载路径
对应的Formula SLS文件写法:
{% set path = __arg__.get('path', '/usr/local/bin') %} # 也可以用salt模块的config.get方法: # {% set path = salt['config.get']('path', '/usr/local/bin') %} echo_path: cmd.run: - name: 'echo {{ path }}'
方法3:通过环境变量传递(适配CI/CD环境)
如果CI/CD流水线已设置环境变量,可让Minion读取该变量:
{% set path = salt['environ.get']('DOWNLOAD_PATH', '/usr/local/bin') %} echo_path: cmd.run: - name: 'echo {{ path }}'
需确保Minion进程能访问到目标环境变量,或在API调用时通过env参数传递。
内容的提问来源于stack exchange,提问作者Kris
相关产品推荐
相关产品推荐

