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

如何在saltstate的if条件中调用当前inventory名称实现条件执行?

实现SaltState仅在包含指定字符串的Inventory主机运行的方法

Salt中Inventory的主机名默认对应minion的id grain值,你可以通过以下三种方式实现过滤:

  • 方法1:Jinja全局包裹(适配全文件所有State)
    在state文件首尾添加条件判断即可,示例如下(匹配名称包含prod的主机):
{% if 'prod' in grains['id'] %}
# 以下是你原本的所有state内容
install_nginx:
  pkg.installed:
    - name: nginx
{% endif %}

如果要反向排除,把判断改为{% if 'prod' not in grains['id'] %}即可。

  • 方法2:单State规则限制(无需修改全文件结构)
    如果只需要控制单个state的运行,可以使用onlyif/unless修饰器,示例:
install_nginx:
  pkg.installed:
    - name: nginx
    - onlyif: echo {{ grains['id'] }} | grep -q "prod"
  • 方法3:Top文件分配时过滤(推荐方案)
    不需要修改state文件本身,直接在top.sls中分配state时指定匹配规则即可,示例:
base:
  '*prod*':
    - your_custom_state
SaltStack所有变量官方文档查询路径

你可以直接访问SaltStack官方文档站点,在以下分类下可以查到完整的变量说明:

  • Grains文档:包含所有系统内置采集变量的列表、取值方式、自定义方法
  • Pillar文档:包含自定义变量的注入、取值规则说明
  • Jinja in Salt文档:包含所有在State/模板中可调用的内置变量、上下文变量的说明

内容的提问来源于stack exchange,提问作者kol23

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 08:24:03