You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 06:42:53