Ansible несколько фактов в шаблоне Jinja - PullRequest
0 голосов
/ 14 марта 2019

Я хочу получить все имена интерфейсов с хоста, а затем распечатать всю информацию об этом интерфейсе.

--- # Fetches network interfaces with IPs
- hosts: hta
  gather_facts: yes
  become: yes
  tasks
- debug: msg=" {{ ansible_interfaces|length }}"
  register: num
- name: moving template over to server
  template: src=templates/network.j2 dest=/root/network_info.txt

И файл network.j2

{% for int in ansible_interfaces %}
Interfaces: Interface-{{ int }}
Data: ansible_{{ int }}
{% endfor %}

До сих пор я не мог распечатать информацию, и Ansible воспринимает мои входные данные как _ {{int}} как буквальный.

Ответы [ 2 ]

0 голосов
/ 29 марта 2019

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

Применение принципа KISS: вызовите ifconfig, который вернет подробности обо всех интерфейсах и сохранит результат в файле на удаленном хосте

playbook.yml

- name: Simple interface info dump on hosts
  hosts: whatevergroup_you_need
  become: true
  gather_facts: false

  tasks:
    - name: dump ifconfig result to /root/network_interface.txt
      shell: ifconfig > /root/network_interfaces.txt

Примечания:

  • become: true требуется только потому, что вы хотите записать свой файл в домашний каталог root. Если вы записываете файл где-либо еще с надлежащими разрешениями, сам ifconfig может быть выполнен любым пользователем
  • Поскольку нет необходимости собирать какую-либо другую информацию с хоста, gather_facts: false ускорит игру для этой единственной простой задачи.
  • shell модуль обязателен для перенаправления вывода в файл. Если вас беспокоит безопасность, вы можете вместо этого использовать модуль command (без перенаправления файлов), захватить вывод с помощью register и записать содержимое в файл в следующей задаче
  • Я предполагал, что вы звоните на хост Linux, и ifconfig выводит необходимую вам информацию. Если это не так, вам нужно переписать свой вопрос и быть более точным в отношении того, чего вы пытаетесь достичь.
0 голосов
/ 14 марта 2019

Воспроизведение ниже

- command: "ifconfig {{ item }}"
  register: result
  loop: "{{ ansible_interfaces }}"
- template:
    src: template.j2
    dest: int.txt
  delegate_to: localhost

с этим шаблоном

{% for int in result.results %}
Interfaces: Interface-{{ int.item }}
Data: {{ int.stdout }}
{% endfor %}

создает в localhost файл int.txt с интерфейсами'data.

...