У меня есть два linux сервера:
- server1: ip: 10.241.55.6, hostname: server1
- server2: ip: 10.242.55.7, hostname: server2
Я создал ansible файл инвентаризации с именами серверов с содержанием ниже:
[IC]
10.241.55.6
10.241.55.7
Теперь я создал это Файл шаблона инвентаризации jinja2: test.j2 со следующим содержимым:
[IC]
{% for hostip in groups['IC'] %}
{% if hostip == ansible_default_ipv4.address %}
{{ ansible_default_ipv4.address }} default_hostname={{ ansible_nodename }}
{{ ansible_default_ipv4.address }} default_hostname={{ ansible_nodename }}
{% endif %}
{% endfor %}
И я запускаю эту ansible playbook:
---
- name: Generate portal inventory file
hosts: all
tasks:
- name: Generate inventory
delegate_to: localhost
template:
src: inventory/test.j2
dest: inventory/test
Команда: ansible -playbook -i инвентарь / серверы generate-inventory.yml
Конечная цель заключается в том, что ansible подключается к каждому серверу из файлов инвентаризации, а затем на основе шаблона инвентаризации jinja2 создает новый файл инвентаризации с этот формат:
[IC]
10.241.55.6 default_hostname=hostname_of_the_server_with_that_ip
и так далее ...
Проблема здесь с for для l oop состоит в том, что все записи имеют один и тот же ip сервера (хотя я должен был иметь запись для каждого из серверов с соответствующими именами хостов):
[IC]
10.241.55.6 default_hostname=server1
10.241.55.6 default_hostname=server2
Что мне здесь не хватает? Также, если есть какой-то другой лучший способ добиться этого, пожалуйста, дайте мне знать.