Доступ к одной и той же группе в разных дочерних группах - PullRequest
0 голосов
/ 09 июня 2019

Я пытаюсь запустить роль, которая зацикливается на основе родительской группы (или родительской родительской группы) с двумя или более дочерними группами с определенным числом хостов.Две дочерние группы имеют одинаковые group_vars, поэтому я попытался определить group_vars отдельно для каждой дочерней группы, но выполнение роли наследует только group_vars от любой дочерней группы.Я понимаю о слиянии переменных Ansible, но в моем конкретном случае использования (хочу запустить одну и ту же роль в разных иерархиях групп хостов) необходимо загрузить group_vars для каждой дочерней группы, когда я пытаюсь запустить роль в цикле на основе родительской группы или родителяродительской группы.Пожалуйста, помогите в этом отношении.

Файл инвентаризации:

    [test1]
    server1
    server2

    [test2]
    server3
    server4

    [test:children]
    test1
    test2

    [test0:children]
    test

/ group_vars / test1.yml:

   param1: 1234
   param2: 3456

/ group_vars / test2.yml:

   param1: 7867
   param2: 0987

роль / задачи / main.yml:

- uri:
    url: http://{{ item }}:{{ hostvars[groups['test'][0]]['param1'] }}/{{ hostvars[groups['test'][0]]['param2'] }}/
    return_content: yes 
  register: response
  ignore_errors: true
  loop: "{{ groups['test'] }}"

1 Ответ

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

Измените

hostvars[groups['test'][0]]['param1']

на

hostvars[item].param1

С файлом инвентаризации и group_vars из вопроса игры ниже

- hosts: localhost
  tasks:
    - debug:
        msg: "{{ item }}: {{ hostvars[item].param1 }} {{ hostvars[item].param2 }}"
      loop: "{{ groups['test'] }}"

дает:

PLAY [localhost] *****************************************************

TASK [debug] *********************************************************
ok: [localhost] => (item=server1) => {
    "msg": "server1: 1234 3456"
}
ok: [localhost] => (item=server2) => {
    "msg": "server2: 1234 3456"
}
ok: [localhost] => (item=server3) => {
    "msg": "server3: 7867 0987"
}
ok: [localhost] => (item=server4) => {
    "msg": "server4: 7867 0987"
}

PLAY RECAP *************************************************************************
localhost                  : ok=1    changed=0    unreachable=0    failed=0   

Следующая опция - игра ниже, которая печатает те же сообщения.

- hosts: test
  tasks:
    - debug:
        msg: "{{ inventory_hostname }}: {{ param1 }} {{ param2 }}"
...