Ansible-从dict条目和concat读取子键到字符串
我对Ansible很陌生,来自Puppet,我真的很喜欢它。 我正在尝试从服务器管理端口编译一个字符串 Vars文件:Ansible-从dict条目和concat读取子键到字符串,ansible,ansible-template,Ansible,Ansible Template,我对Ansible很陌生,来自Puppet,我真的很喜欢它。 我正在尝试从服务器管理端口编译一个字符串 Vars文件: webservers: ws1: listen_address: "webserver1.mydomain" admin_port: "7779" http_port: "7777" ssl_port: "4443" ws2: listen_addre
webservers:
ws1:
listen_address: "webserver1.mydomain"
admin_port: "7779"
http_port: "7777"
ssl_port: "4443"
ws2:
listen_address: "webserver2.mydomain"
admin_port: "7779"
http_port: "7777"
ssl_port: "4443"
我正在模板化一组定制的配置文件,因此我尝试将两个侦听端口转换为以下格式:
ports=7779,7779
我试过:
vars:
webserver_admin_ports: "{{lookup('subelements', webservers, 'admin_port', {'skip_missing': True})}}"
但我遇到了这个问题:
Error was a <class 'ansible.errors.AnsibleError'>, original message: the key admin_port should point to a list, got '7779'"}
错误是一条原始消息:密钥管理端口应指向列表,获得“7779”}
我相信这不会太棘手,而且数据结构足够简单,可能有1到10台服务器
在Puppet中,我会在模板中这样做,但在ansible中,传递var似乎更好
谢谢,对于有类似问题的人,这是我的解决方案。 在模板中,执行查找,可以使代码更干净:
{%- set serverNames = [] -%}
{%- set adminPorts = [] -%}
{%- set listenAddresses = [] -%}
{%- set httpPorts = [] -%}
{%- for server in webserver_meta -%}
{{- serverNames.append(server) -}}
{{- adminPorts.append(webserver_meta[server].admin_port) -}}
{{- listenAddresses.append(webserver_meta[server].listen_address) -}}
{{- httpPorts.append(webserver_meta[server].http_port) -}}
{%- endfor %}
serverNames={{ serverNames|join(',') }}
serverAdminPorts={{ adminPorts|join(',') }}
serverListenAddress={{ listenAddresses|join(',') }}
serverHttpPorts={{ httpPorts|join(',') }}