diff --git a/inventory.yaml b/inventory.yaml index 6d5c6ba..5aefec2 100644 --- a/inventory.yaml +++ b/inventory.yaml @@ -34,6 +34,13 @@ en1: - server - docker-swarm - datastore + skylab_direct_peers: + - hostname: pegasus.local + address: 192.168.42.10 + - hostname: saturn.local + address: 192.168.42.20 + - hostname: orion.local + address: 192.168.42.30 hosts: pegasus: # jupiter diff --git a/roles/server/tasks/hosts.yaml b/roles/server/tasks/hosts.yaml new file mode 100644 index 0000000..27823d2 --- /dev/null +++ b/roles/server/tasks/hosts.yaml @@ -0,0 +1,34 @@ +--- +- name: Retrieve current hostsfile contents + ansible.builtin.command: + cmd: cat /etc/hosts + changed_when: false + register: _existing_hostsfile_raw + +- name: Assemble hostsfile lines + vars: + _hostsfile_lines: [] + ansible.builtin.set_fact: + _hostsfile_lines: "{{ _hostsfile_lines + [item.address + ' ' + item.hostname] }}" + loop: "{{ skylab_direct_peers }}" + loop_control: + label: "{{ item.hostname }}" + +- name: Configure directly connected peers + become: true + ansible.builtin.lineinfile: + path: /etc/hosts + line: "{{ item }}" + state: present + loop: "{{ _hostsfile_lines }}" + loop_control: + label: "{{ item.partition(' ')[0] }}" + +- name: Remove unmanaged peer aliases + become: true + when: "'localhost' not in item and item not in _hostsfile_lines" + ansible.builtin.lineinfile: + path: /etc/hosts + line: "{{ item }}" + state: absent + loop: "{{ _existing_hostsfile_raw.stdout_lines }}" diff --git a/roles/server/tasks/main.yaml b/roles/server/tasks/main.yaml index bf3c474..7b4be99 100644 --- a/roles/server/tasks/main.yaml +++ b/roles/server/tasks/main.yaml @@ -8,3 +8,7 @@ - name: Configure network settings when: skylab_networking is defined ansible.builtin.include_tasks: networkd.yaml + +- name: Configure hostsfile + when: skylab_direct_peers is defined + ansible.builtin.include_tasks: hosts.yaml