2016-12-14 6 views
0

Я пытаюсь создать роль, вдохновленную этим: ansible-cassandra.Как использовать значение значения по умолчанию через `hostvars`

В этой роли есть значение по умолчанию для переменной 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?

Примечание: Я попытался с анзиблем 2.1 и 2.2

ответ

2

Вы не можете получить доступ по умолчанию вара ролей через hostvars.

Try:

- 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 переопределяется на хост, будет использоваться значение из hostvars; иначе - значение ролей по умолчанию.

+0

Я не думал об этом, он работает, спасибо –

 Смежные вопросы

  • Нет связанных вопросов^_^