我尝试使用salt在我的服务器上构建hosts文件。在某些服务器中,eth0网络接口具有inet set,而在其他服务器中则是bond0接口。
在init.sls中我有:
/etc/hosts:
file.managed:
- source: salt://configs/etc/hosts/hostsfile
- user: root
- group: root
- mode: 644
- template: jinja
- context:
{% for host, interface in salt['mine.get']('*', 'network.interfaces').items() %}
{% if interface['bond0'].has_key('inet') %}
ip: {{ salt['network.interfaces']()['bond0']['inet'][0]['address'] }}
{% else %}
ip: {{ salt['network.interfaces']()['eth0']['inet'][0]['address'] }}
{% endif %}
{% endfor %}
hostname: {{ salt['network.get_hostname']() }}
在我上面的" - source"中设置的主机文件中,我有:
{{ ip }} {{ hostname }}
然后,当我从salt master运行state.highstate时,我收到错误说:
SaltRenderError:Jinja变量' ip'未定义;第97行
似乎检索网络接口的salt函数在jinja for循环内部(或者我做错了)时不起作用。 我说这是因为它返回主机名的最后一行,效果很好。
我在这里做错了什么?我怀疑if条件没有得到满足,因此" ip"变量永远不会被赋值。
谢谢,