2

I have been trying to add a host name to my hosts file using an Ansible playbook. My Ansible play look as below and my host file resides at /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 executes successfully, but the new host name is not added to the Ansible hosts file. Can anybody help me on this?

2 Answers 2

9

add_host module does not add a host to your inventory file, but instead creates and adds a host to an inventory existing only in memory. You can use this inventory in subsequent plays, but it won't be saved to a file.

If you really wanted to add a host to the inventory file with Ansible, you'd need to use a regular file-editing module, like lineinfile or blockinfile.


You can also trick inifile module to handle the Ansible inventory, but it's really a hack, as the inventory file does not really have a proper INI-file structure:

- ini_file:
    dest: /etc/ansible/hosts
    section: mymasters
    option: myvm ansible_host
    value: myvm.cloud.azure.com
    no_extra_spaces: yes
Sign up to request clarification or add additional context in comments.

1 Comment

You could probably have fun with making your inventory a directory too- that way automated entries could stay in their own file.
5

You can use template to create hosts file.

Task File

---
- 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

Template File :- 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 %}

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.