Как перебрать мой список инвентаря в jinja2 (в настоящее время использую шаблон в моей книге игр) - PullRequest
0 голосов
/ 09 мая 2019

Я пытаюсь получить выходные данные некоторых команд show на некоторых сетевых устройствах. Мой текущий код зацикливается на одном и том же хосте 4 раза вместо всех 4 хостов в моем файле инвентаря. Как мне исправить это?

Использование сервера Ubuntu 16.04, Ansible 2.7

My Jinja template:
{% for host in groups.ios_devices %}
 {% if not host==inventory_hostname %}
.......
hostname: {{device_info.ansible_facts['ansible_net_hostname']}}
Interfaces: {{int_status}}
.......
 {% endif %}
{% endfor %}
## ios_devices is my host inventory file with all ip-addresses##

Playbook:
----------
 template:
       src: ./template/temp.j2
       dest: report.txt

Я ожидал, что это будет работать по всем ip-адресам хоста инвентаря, но я вижу, что выходные данные имеют циклы по одному и тому же ip.

1 Ответ

1 голос
/ 09 мая 2019

Можно использовать ' hostvars '.См. Ниже

hostname: {{ hostvars[host].ansible_hostname }}
Interfaces: {{ hostvars[host].ansible_interfaces }}

"Чтобы сделать это, Ansible, должно быть, уже поговорил с ' ios_devices ' в текущей игре или с другой игрой выше в книге игр. Этостандартная конфигурация ansible. "См. Факты кэширования .

Например, запуск игры, как показано ниже, будет кэшировать факты о хостах в группе ' ios_devices '

- hosts: ios_devices
  gather_facts: yes

Но это запустит playbook и задачу « template » на каждом хосте в группе.Чтобы избежать этого, задача ' template ' может быть run_once .См. Ниже

- template:
    src: ./template/temp.j2
    dest: report.txt
  run_once: true

Но из-за условия в шаблоне (см. Ниже) это исключит из ' report.txt ' хост, на котором запущена книга воспроизведения.

{% if not host==inventory_hostname %}

Кэшируйте факты о ' ios_devices ' и запускайте playbook на хосте, который не является членом ' ios_devices ', если все члены ' ios_devices 'должен быть включен в' report.txt '.См. Ниже

- hosts: ios_devices
  gather_facts: yes
- hosts: localhost
  gather_facts: no
  tasks:
    - template:
        src: ./template/temp.j2
        dest: report.txt

Или удалите условие ' host == инвентарь_хост * ' из шаблона.Файл ' report.txt ' будет создан на хосте, на котором, конечно, выполняется задача ' template '.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...