如何在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
相关产品推荐
相关产品推荐

