From e89847e83c55563c5ac85ad7c2015fea772760fc Mon Sep 17 00:00:00 2001 From: Khue Doan Date: Mon, 14 Jun 2021 14:04:29 +0700 Subject: [PATCH] Restructure PXE boot for separation of concerns --- README.md | 2 +- metal/hosts.yml | 4 ---- metal/main.yml | 11 ++++++++--- metal/roles/pxe-boot/handlers/main.yml | 4 ---- metal/roles/pxe-boot/tasks/main.yml | 12 ------------ .../roles/{pxe-boot => pxe-server}/defaults/main.yml | 0 .../tasks/server.yml => pxe-server/tasks/main.yml} | 3 --- .../templates/dhcp/Dockerfile | 0 .../templates/dhcp/dhcpd.conf.j2 | 0 .../templates/docker-compose.yml | 0 .../templates/http/Dockerfile | 0 .../templates/http/ignition/ignition.yaml.j2 | 2 ++ .../templates/tftp/Dockerfile | 0 .../templates/tftp/tftpboot/grub.cfg.j2 | 0 .../{pxe-boot/tasks/wake.yml => wake/tasks/main.yml} | 2 +- 15 files changed, 12 insertions(+), 28 deletions(-) delete mode 100644 metal/roles/pxe-boot/handlers/main.yml delete mode 100644 metal/roles/pxe-boot/tasks/main.yml rename metal/roles/{pxe-boot => pxe-server}/defaults/main.yml (100%) rename metal/roles/{pxe-boot/tasks/server.yml => pxe-server/tasks/main.yml} (96%) rename metal/roles/{pxe-boot => pxe-server}/templates/dhcp/Dockerfile (100%) rename metal/roles/{pxe-boot => pxe-server}/templates/dhcp/dhcpd.conf.j2 (100%) rename metal/roles/{pxe-boot => pxe-server}/templates/docker-compose.yml (100%) rename metal/roles/{pxe-boot => pxe-server}/templates/http/Dockerfile (100%) rename metal/roles/{pxe-boot => pxe-server}/templates/http/ignition/ignition.yaml.j2 (95%) rename metal/roles/{pxe-boot => pxe-server}/templates/tftp/Dockerfile (100%) rename metal/roles/{pxe-boot => pxe-server}/templates/tftp/tftpboot/grub.cfg.j2 (100%) rename metal/roles/{pxe-boot/tasks/wake.yml => wake/tasks/main.yml} (91%) diff --git a/README.md b/README.md index 9e6c7d30..6172186a 100644 --- a/README.md +++ b/README.md @@ -42,7 +42,7 @@ Visit the README file for each layer to learn more. ### Prerequisite -For the controller (to run Ansible, stateless PXE server, Terraform...): +For the controller (your laptop or desktop): - SSH keys in `~/.ssh/{id_ed25519,id_ed25519.pub}` (you can generate it with `ssh-keygen -t ed25519`) - Docker with `host` networking driver (which means [only Docker on Linux hosts](https://docs.docker.com/network/host/), you can use a Linux virtual machine with bridged networking if you're on macOS or Windows) diff --git a/metal/hosts.yml b/metal/hosts.yml index 778dc1a1..92bd5a70 100644 --- a/metal/hosts.yml +++ b/metal/hosts.yml @@ -1,7 +1,3 @@ -controller: - hosts: - localhost: {ansible_connection: local} - metal: hosts: metal0: {ansible_host: 192.168.1.110, mac: '00:23:24:d1:f3:f0'} diff --git a/metal/main.yml b/metal/main.yml index b2a3574e..956bb25c 100644 --- a/metal/main.yml +++ b/metal/main.yml @@ -1,8 +1,13 @@ -- name: Install OS on bare metal machines - hosts: all +- name: Start PXE server + hosts: localhost + roles: + - pxe-server + +- name: Provision bare metal machines + hosts: metal gather_facts: no roles: - - pxe-boot + - wake - name: Create Terraform state storage hosts: metal[0] diff --git a/metal/roles/pxe-boot/handlers/main.yml b/metal/roles/pxe-boot/handlers/main.yml deleted file mode 100644 index 5aefdd77..00000000 --- a/metal/roles/pxe-boot/handlers/main.yml +++ /dev/null @@ -1,4 +0,0 @@ -- name: Stop ephemeral PXE server - docker_compose: - project_src: "{{ role_path }}/build" - state: absent diff --git a/metal/roles/pxe-boot/tasks/main.yml b/metal/roles/pxe-boot/tasks/main.yml deleted file mode 100644 index f8154dee..00000000 --- a/metal/roles/pxe-boot/tasks/main.yml +++ /dev/null @@ -1,12 +0,0 @@ -- name: Render configs and start PXE server - include_tasks: - file: server.yml - run_once: yes - when: - - "'controller' in group_names" - -- name: Wakes the nodes up and install OS on them - include_tasks: - file: wake.yml - when: - - "'metal' in group_names" diff --git a/metal/roles/pxe-boot/defaults/main.yml b/metal/roles/pxe-server/defaults/main.yml similarity index 100% rename from metal/roles/pxe-boot/defaults/main.yml rename to metal/roles/pxe-server/defaults/main.yml diff --git a/metal/roles/pxe-boot/tasks/server.yml b/metal/roles/pxe-server/tasks/main.yml similarity index 96% rename from metal/roles/pxe-boot/tasks/server.yml rename to metal/roles/pxe-server/tasks/main.yml index 42813aa7..d6ae2b2d 100644 --- a/metal/roles/pxe-boot/tasks/server.yml +++ b/metal/roles/pxe-server/tasks/main.yml @@ -17,7 +17,6 @@ url: "{{ iso_url }}" dest: "{{ role_path }}/files/images/{{ iso_file_name }}" checksum: "{{ iso_checksum }}" - delegate_to: localhost register: iso - name: Extract the ISO @@ -76,5 +75,3 @@ restarted: yes build: yes recreate: always - notify: - - Stop ephemeral PXE server diff --git a/metal/roles/pxe-boot/templates/dhcp/Dockerfile b/metal/roles/pxe-server/templates/dhcp/Dockerfile similarity index 100% rename from metal/roles/pxe-boot/templates/dhcp/Dockerfile rename to metal/roles/pxe-server/templates/dhcp/Dockerfile diff --git a/metal/roles/pxe-boot/templates/dhcp/dhcpd.conf.j2 b/metal/roles/pxe-server/templates/dhcp/dhcpd.conf.j2 similarity index 100% rename from metal/roles/pxe-boot/templates/dhcp/dhcpd.conf.j2 rename to metal/roles/pxe-server/templates/dhcp/dhcpd.conf.j2 diff --git a/metal/roles/pxe-boot/templates/docker-compose.yml b/metal/roles/pxe-server/templates/docker-compose.yml similarity index 100% rename from metal/roles/pxe-boot/templates/docker-compose.yml rename to metal/roles/pxe-server/templates/docker-compose.yml diff --git a/metal/roles/pxe-boot/templates/http/Dockerfile b/metal/roles/pxe-server/templates/http/Dockerfile similarity index 100% rename from metal/roles/pxe-boot/templates/http/Dockerfile rename to metal/roles/pxe-server/templates/http/Dockerfile diff --git a/metal/roles/pxe-boot/templates/http/ignition/ignition.yaml.j2 b/metal/roles/pxe-server/templates/http/ignition/ignition.yaml.j2 similarity index 95% rename from metal/roles/pxe-boot/templates/http/ignition/ignition.yaml.j2 rename to metal/roles/pxe-server/templates/http/ignition/ignition.yaml.j2 index 41d8df01..55b5e212 100644 --- a/metal/roles/pxe-boot/templates/http/ignition/ignition.yaml.j2 +++ b/metal/roles/pxe-server/templates/http/ignition/ignition.yaml.j2 @@ -37,9 +37,11 @@ storage: systemd: units: + # iSCSI for Longhorn distributed block storage - name: iscsid.service enabled: true {% if item == "metal0" %} + # Terraform state backend - name: tfstate.service enabled: true contents: | diff --git a/metal/roles/pxe-boot/templates/tftp/Dockerfile b/metal/roles/pxe-server/templates/tftp/Dockerfile similarity index 100% rename from metal/roles/pxe-boot/templates/tftp/Dockerfile rename to metal/roles/pxe-server/templates/tftp/Dockerfile diff --git a/metal/roles/pxe-boot/templates/tftp/tftpboot/grub.cfg.j2 b/metal/roles/pxe-server/templates/tftp/tftpboot/grub.cfg.j2 similarity index 100% rename from metal/roles/pxe-boot/templates/tftp/tftpboot/grub.cfg.j2 rename to metal/roles/pxe-server/templates/tftp/tftpboot/grub.cfg.j2 diff --git a/metal/roles/pxe-boot/tasks/wake.yml b/metal/roles/wake/tasks/main.yml similarity index 91% rename from metal/roles/pxe-boot/tasks/wake.yml rename to metal/roles/wake/tasks/main.yml index e9eaa8d7..5b497597 100644 --- a/metal/roles/pxe-boot/tasks/wake.yml +++ b/metal/roles/wake/tasks/main.yml @@ -8,4 +8,4 @@ host: '{{ ansible_host }}' port: 22 search_regex: OpenSSH - connection: local + delegate_to: localhost