add_host - делить на os - PullRequest
       8

add_host - делить на os

1 голос
/ 01 апреля 2020

Я хочу создать playbook, который будет работать со всем файлом инвентаризации, и разделить серверы на 2 группы: Windows и Linux (add-host собирается только на первом сервере в inv)

Я попробовал этот код:

   - name: Linux Group
     add_host:
       name: "{{ item }}"
       group: LinuxGroup
     when:  hostvars[" {{ item }} "]['ansible_system']  == 'Linux'
     with_items: "{{ ansible_play_hosts_all }} "
  • Этот код предполагает создание группы linux, и я пытался с другими условиями, когда, но не был успешным. Я хотел бы получить вашу помощь, пожалуйста.

PS:

Я изменил код на это:

    tasks:
   - name: Create linux group
     add_host:
       name: "{{ item }}"
       group: LinuxGroup
     when: hostvars[item].ansible_system == 'Linux'
     with_items: "{{ ansible_play_hosts_all }} "
     ignore_errors: yes

   - name: ping to Linux
     ping:
     with_items: LinuxGroup

и когда я запускаю код, windows серверы пропускаются в задаче «Создать linux группу», но я использовал отладку модуля для печати элементов группы, и есть серверы windows.

1 Ответ

1 голос
/ 01 апреля 2020

Факт ansible_system - это ключ под хостом, а не список ключей. Кроме того, условные операторы не должны включать разделители шаблонов jinja2, такие как {{ }} или {% %}, используйте hostvars[item] вместо hostvars[ "{{ item }}" ].

Убедитесь, что gather_facts установлено на true.

Обратите внимание, что модуль add_host не обновляет файл инвентаризации, а обновляет инвентарь в памяти. Я включил задачу debug для печати групп из инвентаря в памяти ansible.

  gather_facts: true
  tasks:
    - name: Linux Group
      add_host:
        name: "{{ item }}"
        group: LinuxGroup
      when:  hostvars[item].ansible_system == 'Linux'
      with_items: "{{ ansible_play_hosts_all }}"
    - debug: msg="{{ groups }}"
...