我正试图创建一个受此启发的角色:卡桑德拉。
在这个角色中,变量cassandra_network_iface有一个默认值。
cassandra_network_iface: eth0和一个通过cassandra.yaml.j2使用它的模板文件hostvars。
...
- seeds: "{% for host in groups[cassandra_ansible_groupname] %}{{hostvars[host]['ansible_' + hostvars[host]['cassandra_network_iface']]['ipv4']['address']}}{% if not loop.last %},{% endif %}{% endfor %}"
...当我在任务中使用此模板文件时:
- name: configure...
template: >-
src=cassandra.yaml.j2
dest=/tmp/cassandra.yaml
mode=0644我有一个错误:
fatal: [...]: FAILED! => {"changed": false, "failed": true, "msg": "AnsibleUndefinedVariable: 'dict object' has no attribute 'cassandra_network_iface'"}问题是变量cassandra_network_iface没有被定义为hostvars[host]作用域(我用调试任务检查了这个问题),否则我可以直接使用它。
我的问题是:是否有办法通过cassandra_network_iface访问变量hostvars?
注意:我尝试使用ansible 2.1和2.2
发布于 2016-12-14 11:49:00
您不能通过hostvars访问角色的默认var。
尝试:
- seeds: "{% for host in groups[cassandra_ansible_groupname] %}{{hostvars[host]['ansible_' + (hostvars[host]['cassandra_network_iface']|default(cassandra_network_iface))]['ipv4']['address']}}{% if not loop.last %},{% endif %}{% endfor %}"这样,如果每个主机都覆盖cassandra_network_iface,那么将使用主机的值;否则-默认角色的值。
https://stackoverflow.com/questions/41140638
复制相似问题