我找到了这个答案here,它告诉我如何在模板中获取另一个小兵的IP,但我无法获得 host.fqdn
或 host.ip
. 当我使用 host
时,我得到的是完整的域名,而不是IP . 当我在控制台上运行它时,它获取了ips,但在模板中它确实返回 str object
Unable to manage file: Jinja variable 'str object' has no attribute 'fqdn'
我试过这个here但是这个甚至没有显示出结果 .
我希望能够构建一个hosts文件 . 每个小兵都有一些角色设置为谷物,如下所示:
roles:
- backend
- cdn
- ...
我希望能够得到所有 roles:backend and not roles:cdn
. 但当我将这一行添加到我的 publish.publish
时,我收到此错误:
Unable to manage file: Jinja error: 'NoneType' object is not iterable
我不知道我做错了什么,我在master上添加了peer publish但是它不起作用 . 我已经阅读了文档,但它们并没有帮助我找到问题所在 .
EDIT Versions report
$ salt-minion --versions-report
Salt: 2015.5.3
Python: 2.7.6 (default, Mar 22 2014, 22:59:56)
Jinja2: 2.7.2
M2Crypto: 0.21.1
msgpack-python: 0.3.0
msgpack-pure: Not Installed
pycrypto: 2.6.1
libnacl: Not Installed
PyYAML: 3.10
ioflo: Not Installed
PyZMQ: 14.0.1
RAET: Not Installed
ZMQ: 4.0.4
Mako: Not Installed
Tornado: Not Installed
Debian source package: 2015.5.3+ds-1trusty1
EDIT 2 the sls snippet
{% for host in salt['publish.publish']('roles:backend', 'network.ip_addrs', 'eth0', 'grain') %}
server {{ host.ip }}; # {{ host.fqdn }}
{% endfor %}
2 回答
找到解决方案:
在minion配置中添加这段代码:
要匹配所有后端而不是load_balancers,我们需要一个复合匹配器
之后,只需使用
salt.mine
将所有内容放在模板中network.ip_addrs
没有给你fqdn . 它只给你一个ip地址列表 .