Добавление хостов в файл хоста Ansible

Я пытаюсь добавить имя хоста в файл моих хостов, используя Ansible playbook. Моя игра в Ansible выглядит так, как показано ниже, а мой хост-файл находится в /etc/ansible/hosts:

- name: adding host playbook
  hosts: localhost
  connection: local
  tasks:
  - name: add host to ansible host file
    add_host:
      name: myvm.cloud.azure.com
      groups: mymasters

Playbook выполняется успешно, но новое имя хоста не добавляется в файл хостов Ansible. Кто-нибудь может мне в этом помочь?


person Vamshi    schedule 26.12.2016    source источник


Ответы (2)


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

Если вы действительно хотите добавить хост в файл инвентаря с помощью Ansible, вам нужно будет использовать обычный модуль редактирования файлов, например _ 2_ или blockinfile.


Вы также можете обмануть inifile module для обработки инвентаря Ansible, но на самом деле это взлом, так как файл инвентаризации действительно не имеет надлежащей структуры INI-файла:

- ini_file:
    dest: /etc/ansible/hosts
    section: mymasters
    option: myvm ansible_host
    value: myvm.cloud.azure.com
    no_extra_spaces: yes
person techraf    schedule 26.12.2016
comment
Вы, вероятно, тоже могли бы повеселиться, сделав свой инвентарь каталогом - таким образом, автоматические записи могут оставаться в собственном файле. - person tedder42; 27.12.2016

Вы можете использовать шаблон для создания файла hosts.

Файл задачи

---
- name: Create HostsFile
  hosts: development
  user: vagrant
  become: yes
  become_method: sudo

  tasks:
    - name: Run the Template
      template: src=hostsFile.j2 dest=/tmp/file.conf owner=root group=root

Файл шаблона: - HostsFile.j2

{{ ansible_managed }}

127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6


{% for group in groups %}
{% if groups[group] and group != 'all' %}
{% for host in groups[group] %}
{{hostvars[host].ansible_default_ipv4.address}} {{ ansible_hostname }}
{% endfor %}

{% endif %}
{% endfor %}
person SPM    schedule 28.12.2016