1

我正在使用 ansible 使用“junos_install_config”模块将配置“.set”文件发送到 Junos OS 设备。我想根据名称将特定文件发送到特定主机。

例如。我想将文件“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 个不同的任务。有什么方法可以自动执行此操作,以便剧本检查任务的名称并为文件分配相应的名称?

主机文件看起来像这样

[vMXrouters]
vMX1 ansible_ssh_host=10.249.89.22
vMX2 ansible_ssh_host=10.249.89.190
4

1 回答 1

0

问:“有什么方法可以自动执行此操作,以便 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

(未测试)

于 2019-09-30T14:24:45.950 回答