Как получить доступ к групповым переменным из файла инвентаря внутри ansible yaml - PullRequest
0 голосов
/ 23 октября 2018

У меня есть файл инвентаря с одной группой, как показано ниже:

[example1]
H1 ip1 username1 
H2 ip2 username2
H3 ip3 username3

, и я определил переменную группы, как показано ниже, чтобы сделать эту переменную общей для всех хостов в этой группе:

[example1:vars]
temp='H2'

Я пытаюсь получить доступ к этой переменной внутри моего ответного yml под полем hosts, как показано ниже:

---
 - name: temp playbook to practice hostvars
   hosts: "{{ hostvars['example1']['temp'] }}"
   tasks:
    .....
    .....
    ....

Но при выполнении этой книги воспроизведения я получаю неопределенную ошибку hostvars, как показано ниже:

"ERROR! The field 'hosts' has an invalid value, which includes an undefined variable. The error was: 'hostvars' is undefined"

Мои файлы и файлы инвентаризации в той же папке, может ли кто-нибудь помочь мне исправить то, что мне не хватает для доступа к переменной из файла инвентаризации?

1 Ответ

0 голосов
/ 23 октября 2018

Пожалуйста, не делай так.Это плохой способ.Используйте группы со свойством 'children' для группировки хостов.

Тем не менее, здесь есть решение вашей проблемы.Вы пытались получить доступ к hostvars для группы.В вашем инвентаре нет хоста example1.И у hostvars есть переменные для host, как вы можете видеть.

Следующий код поможет:

- hosts: localhost
  gather_facts: no
  tasks:
   - debug:
- hosts: '{{  hostvars[groups.example1[0]].temp }}'
  tasks:
     ...

Я использую groups.example1, чтобы получить список хостов в группе example1, затем я беру первого члена этой группы ([0]), затем заглядываю в ее переменные через hostvars.

Странная задача с debug в начале должна помочь Ansible инициализировать hostvars.Без него произойдет сбой с неопределенной ошибкой переменной.

Но, опять же, не делайте так.Это действительно очень запутанный способ заново изобретать группы.

...