Используйте переменные хоста в ANSIBLE PlayBook - PullRequest
0 голосов
/ 12 июня 2019

Я пытаюсь ссылаться на переменные хоста в книге воспроизведения в сочетании с "with_items".

Мой инвентарь

[container]
testcontainer-01.example.org template_name="syslog" ipv4="192.168.1.101"
testcontainer-02.example.org template_name="syslog" ipv4="192.168.1.102"

Книга воспроизведения:

  tasks:
    - debug:
        var: "{{ item.ipv4 }}"
      with_items:
        - "{{ groups['container'] }}"

Всякий раз, когда я запускаю воспроизведение, я получаю следующую ошибку:

The task includes an option with an undefined variable. The error was: 'ansible.utils.unsafe_proxy.AnsibleUnsafeText object' has no attribute 'ipv4'

Когда я запрашиваю отладку только для {{ item }}, без атрибута ipv4 он просто говорит, что переменная не определена.

"testcontainer-01.example.org ": "VARIABLE IS NOT DEFINED!: Unable to look up a name or access an attribute in template string ({{testcontainer-01.example.org}}).\nMake sure your variable name does not contain invalid characters like '-': unsupported operand type(s) for -: 'StrictUndefined' and 'StrictUndefined'"

Ответы [ 2 ]

0 голосов
/ 12 июня 2019

Как сообщает Владимер Ботка, работает следующее:

- debug:
        var: "{{ hostvars[item].ipv4 }}"
      with_inventory_hostnames:
        - container

По какой-то причине Ansible все еще лает на меня, говоря, что моя переменная не определена.Тем не менее это дает тот результат, который мне нужен.Значение переменной ipv4 используется в правильных местах.

ok: [containerhost.example.org] => (item=testcontainer-02.example.org) => {
    "192.168.1.102": "VARIABLE IS NOT DEFINED!", 
    "item": "testcontainer-02.example.org"
}
ok: [containerhost.example.org] => (item=testcontainer-01.example.org) => {
    "192.168.1.101": "VARIABLE IS NOT DEFINED!", 
    "item": "testcontainer-01.example.org"
}
0 голосов
/ 12 июня 2019

Если вы хотите ipv4 хоста, на котором выполняется воспроизведение, используйте

- debug:
    var: ipv4

Если вы хотите перечислить все ipv4 в контейнере используйте

- debug:
    msg: "{{ hostvars[item].ipv4 }}"
  loop: "{{ groups['container'] }}"

(не проверено)

...