我找到了这个答案here,告诉我如何在模板中获取另一个小兵的IP,但我无法获得KeyError
或host.fqdn
。当我使用host.ip
时,我获得了完整的域名而不是IP。当我在控制台上运行它时,它获取了ips,但在模板中它确实返回host
str object
我尝试了这个here,但这个甚至没有显示结果。
我希望能够构建主机文件。每个小兵都有一些角色,如下:
Unable to manage file: Jinja variable 'str object' has no attribute 'fqdn'
我希望能够获得所有roles:
- backend
- cdn
- ...
。但当我将此行添加到roles:backend and not roles:cdn
时,我收到此错误:
publish.publish
我不知道自己做错了什么,我在主人身上添加了同行发布,但它不起作用。我已经阅读了文档,但他们并没有帮我找到问题。
编辑 版本报告
Unable to manage file: Jinja error: 'NoneType' object is not iterable
编辑2 sls片段
$ 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
答案 0 :(得分:3)
找到解决方案:
在minion config中添加这段代码:
mine_interval: 2
mine_functions:
network.ip_addrs:
- eth1 # or any other eth-n you might want
要匹配所有后端而不是load_balancers,我们需要一个复合匹配器
G@roles:backend and not G@roles:load_balancer
之后,只需使用salt.mine
{%- for server, addrs in salt['mine.get']('G@roles:backend and not G@roles:load_balancer', 'network.ip_addrs', 'compound').items() %}
# {{ server }}
server {{ addrs|last }};
{%- endfor %}
答案 1 :(得分:0)
network.ip_addrs
没有给你fqdn。它只给你一个ip地址列表。
[boucha@elsapo ~]$ sudo salt dasalt network.ip_addrs --out json
{
"dasalt": [
"10.0.3.1",
"10.4.156.81",
"172.17.42.1"
]
}