Last active
March 8, 2024 07:16
-
-
Save rothgar/8793800 to your computer and use it in GitHub Desktop.
Generate /etc/hosts with Ansible
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# Idempotent way to build a /etc/hosts file with Ansible using your Ansible hosts inventory for a source. | |
# Will include all hosts the playbook is run on. | |
# Inspired from http://xmeblog.blogspot.com/2013/06/ansible-dynamicaly-update-etchosts.html | |
- name: "Build hosts file" | |
lineinfile: dest=/etc/hosts regexp='.*{{ item }}$' line="{{ hostvars[item].ansible_default_ipv4.address }} {{item}}" state=present | |
when: hostvars[item].ansible_default_ipv4.address is defined | |
with_items: groups['all'] |
@enr0s, you can also use the tag/variable molecule-notest
that's already set by molecule, so you don't have to define your own.
tasks/main.yml
---
- name: Generate /etc/hosts file
template:
src: etc/hosts.j2
dest: /etc/hosts
owner: root
group: root
mode: 0644
tags:
- molecule-notest
or
tasks/main.yml
---
- name: Generate /etc/hosts file
template:
src: etc/hosts.j2
dest: /etc/hosts
owner: root
group: root
mode: 0644
when: molecule-notest not in ansible_skip_tags
Another solution to this issue would be to use a "dummy" hosts file with molecule, which is not a perfect solution but is better than skipping the task in my opinion because you can then confirm that the hosts file is generated correctly.
The way to achieve that would be something like:
defaults/main.yml
---
etc_hosts_file: /etc/hosts
molecule.yml
provisioner:
name: ansible
inventory:
group_vars:
all:
etc_hosts_file: /tmp/molecule_etc_hosts
tasks/main.yml
---
- name: Generate /etc/hosts file
template:
src: etc/hosts.j2
dest: "{{ etc_hosts_file }}"
owner: root
group: root
mode: 0644
@dywanik , I am not sure if that is what you are searching for... in my case, I wanted simply to add an entry to /etc/hosts.
The following worked for me:
molecule.yml:
---
...
platforms:
- name: "myplatformname"
etc_hosts:
"repo": "8.8.8.8"
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Anyway the solution proposed here works fine.
I have simply added this code in my molecule.yml
and then modified my tasks/main.yml
when you test your role remember to set the variable