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