Salt SLS文件Jinja条件语句报错:ESXi高级配置检查失败
Salt SLS模板调用vmware_esxi模块的错误修正
你的SLS文件报错核心是参数传递方式错误和条件判断逻辑位置错误,以下是具体问题分析和修正方案:
问题分析
- 参数传递错误:在Jinja模板中调用
salt['vmware_esxi.get_advanced_config']时,你用了CLI式的字符串参数('host_name={{ host }}'),这会导致函数收到的是字面量host_name={{ host }}而非实际主机名,因此出现"Datacenter未找到"的错误。 - 条件判断逻辑错误:你把
==0的判断嵌入到了函数参数的引号内,这会让函数误将整个字符串当作参数解析,完全偏离了原本的判断意图。
修正后的SLS代码
{% for host in salt['vmware_esxi.list_hosts']() %} {% set current_config = salt['vmware_esxi.get_advanced_config'](host_name=host, config_name='Net.BlockGuestBPDU') %} {% if current_config == 0 %} set_advanced_option_{{ host }}: module.run: - name: vmware_esxi.set_advanced_config - host_name: {{ host }} - config_name: Net.BlockGuestBPDU - config_value: 1 {% endif %} {% endfor %}
关键修改点
- 用
{% set %}单独获取当前配置值,调用模块函数时直接传递host_name=host、config_name='Net.BlockGuestBPDU'作为关键字参数,确保函数能正确识别目标主机。 - 将
==0的判断移到函数调用之后,仅当当前配置值确实为0时才触发设置操作,避免重复执行无用的配置命令。 - 统一模板缩进规范,减少潜在的解析问题。
内容的提问来源于stack exchange,提问作者Brian
相关产品推荐
相关产品推荐

