Конкретный таргетинг на хосты на основе имени файла

Я использую ansible для отправки файлов конфигурации ".set" на устройства с ОС Junos с помощью модуля "junos_install_config". Я хочу отправлять определенные файлы на определенные хосты на основе имен.

например. Я хочу отправить файл «vMX1.set» на хост vMX1, файл «vMX2.set» на хост vMX2 и т. Д.

На данный момент делаю так:

---
name: Configure Junos Devices
hosts: all
roles:
    - Juniper.junos
connection: local
gather_facts: no
tasks:
   - name: Send to Device 1
     when: ansible_hostname == vMX1
     junos_install_config:
         host={{ inventory_hostname }}
         file=/home/usr/resources/vMX1.set
         overwrite=false
- name: Send to Device 2
     when: ansible_hostname == vMX2
     junos_install_config:
         host={{ inventory_hostname }}
         file=/home/usr/resources/vMX2.set
         overwrite=false

Однако это работает очень долго и не очень логично. Если, например, у меня есть 50 файлов конфигурации и 50 устройств, мне пришлось бы написать 50 разных задач. Есть ли способ автоматизировать это, чтобы playbook проверял имя задачи и присваивал файлу соответствующее имя?

Хост-файл выглядит так

[vMXrouters]
vMX1 ansible_ssh_host=10.249.89.22
vMX2 ansible_ssh_host=10.249.89.190

person Maurio    schedule 30.09.2019    source источник
comment
Как выглядит инвентарь? Откуда взялось ansible_hostname?   -  person Vladimir Botka    schedule 30.09.2019
comment
Файл хоста выглядит следующим образом для 2 устройств [vMXrouters] vMX1 ansible_ssh_host = 10.249.89.22 vMX2 ansible_ssh_host = 10.249.89.190 однако я хотел бы иметь возможность добавить больше устройств!   -  person Maurio    schedule 30.09.2019


Ответы (1)


Q: "Есть ли способ автоматизировать это, чтобы playbook проверял имя задачи и присваивал файлу соответствующее имя?"

A: Приведенная ниже инструкция должна помочь

- name: Configure Junos Devices
  hosts: all
  vars:
    list_of_devices: ['vMX1', 'vMX2']
  tasks:
    - name: "Send to {{ inventory_hostname }}"
      junos_install_config:
        host="{{ inventory_hostname }}"
        file="/home/usr/resources/{{ inventory_hostname }}.set"
        overwrite=false
      when: inventory_hostname in list_of_devices
      delegate_to: localhost

Плейбук проще, если группа хостов определена

- name: Configure Junos Devices
  hosts: vMX_devices
  tasks:
    - name: "Send to {{ inventory_hostname }}"
      junos_install_config:
        host="{{ inventory_hostname }}"
        file="/home/usr/resources/{{ inventory_hostname }}.set"
        overwrite=false
      delegate_to: localhost

(не испытано)

person Vladimir Botka    schedule 30.09.2019
comment
Использование этого учебника возвращает фатальную ошибку: [vMX1]: FAILED! = ›(Ansible_facts: (found_interpreter_python: / usr / bin / python), изменено: false, msg: пропущены обязательные аргументы: host) Есть какие-нибудь советы? - person Maurio; 01.10.2019
comment
Нет, у меня нет совета. Это не связано с вопросом. - person Vladimir Botka; 01.10.2019