From a4ae85a508593f94d9f31a164fe85b531f53e009 Mon Sep 17 00:00:00 2001 From: Eric Meehan Date: Wed, 30 Jul 2025 21:59:18 -0400 Subject: [PATCH 1/4] Added playbook for PowerEdge R720 --- host_vars/alpha-worker-13.yaml | 3 + host_vars/alpha-worker-14.yaml | 3 + host_vars/alpha-worker-15.yaml | 3 + host_vars/alpha-worker-16.yaml | 3 + host_vars/alpha-worker-17.yaml | 3 + host_vars/poweredge-r720.yaml | 16 +++ poweredge-r720.yaml | 228 +++++++++++++++++++++++++++++++++ 7 files changed, 259 insertions(+) create mode 100644 host_vars/alpha-worker-13.yaml create mode 100644 host_vars/alpha-worker-14.yaml create mode 100644 host_vars/alpha-worker-15.yaml create mode 100644 host_vars/alpha-worker-16.yaml create mode 100644 host_vars/alpha-worker-17.yaml create mode 100644 host_vars/poweredge-r720.yaml create mode 100644 poweredge-r720.yaml diff --git a/host_vars/alpha-worker-13.yaml b/host_vars/alpha-worker-13.yaml new file mode 100644 index 0000000..151d555 --- /dev/null +++ b/host_vars/alpha-worker-13.yaml @@ -0,0 +1,3 @@ +name: alpha-worker-13 +vcpu: + value: 2 diff --git a/host_vars/alpha-worker-14.yaml b/host_vars/alpha-worker-14.yaml new file mode 100644 index 0000000..ac76480 --- /dev/null +++ b/host_vars/alpha-worker-14.yaml @@ -0,0 +1,3 @@ +name: alpha-worker-14 +vcpu: + value: 2 diff --git a/host_vars/alpha-worker-15.yaml b/host_vars/alpha-worker-15.yaml new file mode 100644 index 0000000..31aa866 --- /dev/null +++ b/host_vars/alpha-worker-15.yaml @@ -0,0 +1,3 @@ +name: alpha-worker-15 +vcpu: + value: 2 diff --git a/host_vars/alpha-worker-16.yaml b/host_vars/alpha-worker-16.yaml new file mode 100644 index 0000000..e15b833 --- /dev/null +++ b/host_vars/alpha-worker-16.yaml @@ -0,0 +1,3 @@ +name: alpha-worker-16 +vcpu: + value: 2 diff --git a/host_vars/alpha-worker-17.yaml b/host_vars/alpha-worker-17.yaml new file mode 100644 index 0000000..416c135 --- /dev/null +++ b/host_vars/alpha-worker-17.yaml @@ -0,0 +1,3 @@ +name: alpha-worker-17 +vcpu: + value: 2 diff --git a/host_vars/poweredge-r720.yaml b/host_vars/poweredge-r720.yaml new file mode 100644 index 0000000..09a41ff --- /dev/null +++ b/host_vars/poweredge-r720.yaml @@ -0,0 +1,16 @@ +--- +# Host vars for poweredge-r720 +libvirt_networks: + - name: wan + forward: + mode: bridge + bridge: + name: wan + dev: eno1 +libvirt_guests: + - alpha-worker-13 + - alpha-worker-14 + - alpha-worker-15 + - alpha-worker-16 + - alpha-worker-17 +nfs_exports: ["/data *(rw,sync,no_root_squash)"] diff --git a/poweredge-r720.yaml b/poweredge-r720.yaml new file mode 100644 index 0000000..803c05a --- /dev/null +++ b/poweredge-r720.yaml @@ -0,0 +1,228 @@ +--- +# Playbook for eom.dev +- name: Initialize hypervisors + hosts: poweredge-r720 + become: true + vars_files: + - ../secrets.yaml + roles: + - role: ericomeehan.debian + - role: ericomeehan.ericomeehan + +- name: Initialize Network File Systems + hosts: poweredge-r720 + become: true + roles: + - role: geerlingguy.nfs + tasks: + - name: Create NFS directories + file: + path: "{{ item }}" + state: directory + loop: + - /data/alpha + - /data/beta + - /data/gamma + +- name: Deploy virtual machines + hosts: poweredge-r720 + become: true + vars_files: + - ../secrets.yaml + pre_tasks: + - name: Install packages for virtualization + apt: + update_cache: yes + name: + - bridge-utils + - genisoimage + - qemu-utils + - qemu-system-x86 + - libvirt-daemon-system + - python3-libvirt + - python3-lxml + state: present + + - name: Enable IPv4 packet forwarding + lineinfile: + path: /etc/sysctl.conf + line: 'net.ipv4.ip_forward = 1' + state: present + + - name: Enable IPv6 packet forwarding + lineinfile: + path: /etc/sysctl.conf + line: 'net.ipv6.conf.all.forwarding = 1' + state: present + + - name: Reload sysctl configuration + command: sysctl --system + + - name: Define libvirt networks + community.libvirt.virt_net: + name: "{{ item.name }}" + command: define + xml: "{{ lookup('template', 'libvirt-network.xml.j2') }}" + loop: "{{ libvirt_networks }}" + + - name: Create libvirt networks + community.libvirt.virt_net: + name: "{{ item.name }}" + command: create + loop: "{{ libvirt_networks }}" + + - name: Autostart libvirt networks + community.libvirt.virt_net: + name: "{{ item.name }}" + autostart: true + loop: "{{ libvirt_networks }}" + + - name: Download base image for guests + get_url: + url: https://cloud.debian.org/images/cloud/bookworm/latest/debian-12-generic-amd64.qcow2 + dest: "/var/lib/libvirt/images/{{ item }}.qcow2" + force: true + loop: "{{ libvirt_guests }}" + + - name: Create cloud-config directory for guests + file: + path: "/var/lib/libvirt/configs/{{ item }}" + state: directory + loop: "{{ libvirt_guests }}" + + - name: Copy cloud-config templates for guests + template: + src: eom_cloud.cfg.j2 + dest: "/var/lib/libvirt/configs/{{ domain.name }}/user-data" + force: true + loop: "{{ libvirt_guests }}" + vars: + domain: "{{ hostvars[item] }}" + + - name: Copy cloud-config templates for guests + template: + src: meta-data.j2 + dest: "/var/lib/libvirt/configs/{{ domain.name }}/meta-data" + force: true + loop: "{{ libvirt_guests }}" + vars: + domain: "{{ hostvars[item] }}" + + - name: Generate iso for guests + command: "genisoimage -output /var/lib/libvirt/images/{{ item }}.iso -volid cidata -joliet -rock /var/lib/libvirt/configs/{{ item }}/user-data /var/lib/libvirt/configs/{{ item }}/meta-data" + loop: "{{ libvirt_guests }}" + + - name: Copy logging config for guests + copy: + src: 05_logging.cfg + dest: "/var/lib/libvirt/configs/{{ item }}/05_logging.cfg" + loop: "{{ libvirt_guests }}" + + - name: Define libvirt virtual machine + community.libvirt.virt: + command: define + xml: "{{ lookup('template', 'libvirt-vm.xml.j2') }}" + loop: "{{ libvirt_guests }}" + vars: + domain: "{{ hostvars[item] }}" + + - name: Create libvirt virtual machine + community.libvirt.virt: + name: "{{ item }}" + command: create + loop: "{{ libvirt_guests }}" + + - name: Autostart libvirt virtual machine + community.libvirt.virt: + name: "{{ item }}" + autostart: true + loop: "{{ libvirt_guests }}" + +- name: Wait for manual tasks + hosts: localhost + tasks: + - name: Trust SSH identities + pause: + prompt: "Press Enter to continue..." + +- name: Initialize virtual machines + hosts: + - alpha-worker-13 + - alpha-worker-14 + - alpha-worker-15 + - alpha-worker-16 + - alpha-worker-17 + become: true + vars_files: + - ../secrets.yaml + roles: + - role: ericomeehan.ericomeehan + +- name: Initialize Kubernetes clusters + hosts: + - alpha-worker-13 + - alpha-worker-14 + - alpha-worker-15 + - alpha-worker-16 + - alpha-worker-17 + become: true + pre_tasks: + - name: Enable IPv4 packet forwarding + lineinfile: + path: /etc/sysctl.conf + line: 'net.ipv4.ip_forward = 1' + state: present + + - name: Enable IPv6 packet forwarding + lineinfile: + path: /etc/sysctl.conf + line: 'net.ipv6.conf.all.forwarding = 1' + state: present + + - name: Reload sysctl configuration + command: sysctl --system + + - name: Enable br_netfilter kernel module + command: modprobe br_netfilter + + - name: Add the module to a configuration file for persistence + lineinfile: + path: /etc/modules-load.d/modules.conf + line: "br_netfilter" + + - name: Install kubernetes library + apt: + name: python3-kubernetes + state: present + + roles: + - role: geerlingguy.containerd + +- name: Alpha Cluster + hosts: + - alpha-worker-13 + - alpha-worker-14 + - alpha-worker-15 + - alpha-worker-16 + - alpha-worker-17 + become: true + roles: + - role: geerlingguy.kubernetes + +- name: Deploy base Kubernetes resources + hosts: alpha_control_plane + become: true + tasks: + - name: Deploy NFS Provisioner + kubernetes.core.helm: + name: nfs-subdir-external-provisioner + chart_ref: nfs-subdir-external-provisioner/nfs-subdir-external-provisioner + release_namespace: r720-nfs-provisioner + create_namespace: true + values: + nfs: + server: poweredge-r720 + path: "/data/alpha" + storageClass: + defaultClass: false + name: r720-nfs-client -- 2.45.2 From ee1dd815e991f4853b70418d32921ca4733c6f99 Mon Sep 17 00:00:00 2001 From: Eric Meehan Date: Wed, 30 Jul 2025 23:01:38 -0400 Subject: [PATCH 2/4] Working through errors --- inventories/eom.dev.yml | 10 ++++++++++ poweredge-r720.yaml | 8 +++++++- 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/inventories/eom.dev.yml b/inventories/eom.dev.yml index dfd2624..a1f0848 100644 --- a/inventories/eom.dev.yml +++ b/inventories/eom.dev.yml @@ -35,6 +35,11 @@ all: alpha-worker-10: alpha-worker-11: alpha-worker-12: + alpha-worker-13: + alpha-worker-14: + alpha-worker-15: + alpha-worker-16: + alpha-worker-17: alpha: hosts: alpha-control-plane: @@ -51,3 +56,8 @@ all: alpha-worker-10: alpha-worker-11: alpha-worker-12: + alpha-worker-13: + alpha-worker-14: + alpha-worker-15: + alpha-worker-16: + alpha-worker-17: diff --git a/poweredge-r720.yaml b/poweredge-r720.yaml index 803c05a..2d44b83 100644 --- a/poweredge-r720.yaml +++ b/poweredge-r720.yaml @@ -77,6 +77,12 @@ autostart: true loop: "{{ libvirt_networks }}" + - name: Ensure that a network is active (needs to be defined and built first) + community.libvirt.virt_net: + state: active + name: "{{ item.name }}" + loop: "{{ libvirt_networks }}" + - name: Download base image for guests get_url: url: https://cloud.debian.org/images/cloud/bookworm/latest/debian-12-generic-amd64.qcow2 @@ -92,7 +98,7 @@ - name: Copy cloud-config templates for guests template: - src: eom_cloud.cfg.j2 + src: user-data.j2 dest: "/var/lib/libvirt/configs/{{ domain.name }}/user-data" force: true loop: "{{ libvirt_guests }}" -- 2.45.2 From 237e3374309534e1f2582449697c958ea659f271 Mon Sep 17 00:00:00 2001 From: Eric Meehan Date: Thu, 31 Jul 2025 10:00:20 -0400 Subject: [PATCH 3/4] Pull correct tasks definitions from v1.0.0 --- host_vars/alpha-worker-13.yaml | 1 + host_vars/alpha-worker-14.yaml | 1 + host_vars/alpha-worker-15.yaml | 1 + host_vars/alpha-worker-16.yaml | 1 + host_vars/alpha-worker-17.yaml | 1 + host_vars/evm.yaml | 1 + host_vars/poweredge-r720.yaml | 1 + inventories/eom.dev.yml | 3 ++ poweredge-r720.yaml | 64 ++++++++++++++++++++++------------ roles/ericomeehan.mastodon | 2 +- test.yaml | 4 +-- 11 files changed, 53 insertions(+), 27 deletions(-) create mode 100644 host_vars/evm.yaml diff --git a/host_vars/alpha-worker-13.yaml b/host_vars/alpha-worker-13.yaml index 151d555..cfd4256 100644 --- a/host_vars/alpha-worker-13.yaml +++ b/host_vars/alpha-worker-13.yaml @@ -1,3 +1,4 @@ name: alpha-worker-13 vcpu: + placement: static value: 2 diff --git a/host_vars/alpha-worker-14.yaml b/host_vars/alpha-worker-14.yaml index ac76480..36824f2 100644 --- a/host_vars/alpha-worker-14.yaml +++ b/host_vars/alpha-worker-14.yaml @@ -1,3 +1,4 @@ name: alpha-worker-14 vcpu: + placement: static value: 2 diff --git a/host_vars/alpha-worker-15.yaml b/host_vars/alpha-worker-15.yaml index 31aa866..65db49a 100644 --- a/host_vars/alpha-worker-15.yaml +++ b/host_vars/alpha-worker-15.yaml @@ -1,3 +1,4 @@ name: alpha-worker-15 vcpu: + placement: static value: 2 diff --git a/host_vars/alpha-worker-16.yaml b/host_vars/alpha-worker-16.yaml index e15b833..971d73f 100644 --- a/host_vars/alpha-worker-16.yaml +++ b/host_vars/alpha-worker-16.yaml @@ -1,3 +1,4 @@ name: alpha-worker-16 vcpu: + placement: static value: 2 diff --git a/host_vars/alpha-worker-17.yaml b/host_vars/alpha-worker-17.yaml index 416c135..79936a3 100644 --- a/host_vars/alpha-worker-17.yaml +++ b/host_vars/alpha-worker-17.yaml @@ -1,3 +1,4 @@ name: alpha-worker-17 vcpu: + placement: static value: 2 diff --git a/host_vars/evm.yaml b/host_vars/evm.yaml new file mode 100644 index 0000000..5077d87 --- /dev/null +++ b/host_vars/evm.yaml @@ -0,0 +1 @@ +name: evm diff --git a/host_vars/poweredge-r720.yaml b/host_vars/poweredge-r720.yaml index 09a41ff..ed6d36b 100644 --- a/host_vars/poweredge-r720.yaml +++ b/host_vars/poweredge-r720.yaml @@ -13,4 +13,5 @@ libvirt_guests: - alpha-worker-15 - alpha-worker-16 - alpha-worker-17 + - evm nfs_exports: ["/data *(rw,sync,no_root_squash)"] diff --git a/inventories/eom.dev.yml b/inventories/eom.dev.yml index a1f0848..5b20856 100644 --- a/inventories/eom.dev.yml +++ b/inventories/eom.dev.yml @@ -15,6 +15,9 @@ all: vms: children: + user: + hosts: + evm: clusters: children: control_planes: diff --git a/poweredge-r720.yaml b/poweredge-r720.yaml index 2d44b83..95d5ce7 100644 --- a/poweredge-r720.yaml +++ b/poweredge-r720.yaml @@ -55,9 +55,19 @@ line: 'net.ipv6.conf.all.forwarding = 1' state: present + - name: Copy interfaces template + template: + src: interfaces.j2 + dest: /etc/network/interfaces + - name: Reload sysctl configuration command: sysctl --system + - name: Reload network service + service: + name: networking + state: restarted + - name: Define libvirt networks community.libvirt.virt_net: name: "{{ item.name }}" @@ -77,51 +87,50 @@ autostart: true loop: "{{ libvirt_networks }}" - - name: Ensure that a network is active (needs to be defined and built first) - community.libvirt.virt_net: - state: active - name: "{{ item.name }}" - loop: "{{ libvirt_networks }}" - - - name: Download base image for guests + - name: Download base image get_url: url: https://cloud.debian.org/images/cloud/bookworm/latest/debian-12-generic-amd64.qcow2 + dest: /var/lib/libvirt/images/debian-12-generic-amd64.qcow2 + force: true + + - name: Copy base image + copy: + src: /var/lib/libvirt/images/debian-12-generic-amd64.qcow2 + remote_src: true dest: "/var/lib/libvirt/images/{{ item }}.qcow2" force: true loop: "{{ libvirt_guests }}" - - name: Create cloud-config directory for guests + - name: Resize images + command: "qemu-img resize -f qcow2 /var/lib/libvirt/images/{{ item }}.qcow2 16G" + loop: "{{ libvirt_guests }}" + + - name: Create cloud-config directory file: - path: "/var/lib/libvirt/configs/{{ item }}" + path: "/tmp/{{ item }}" state: directory loop: "{{ libvirt_guests }}" - - name: Copy cloud-config templates for guests + - name: Copy cloud-config user-data template template: src: user-data.j2 - dest: "/var/lib/libvirt/configs/{{ domain.name }}/user-data" + dest: "/tmp/{{ domain.name }}/user-data" force: true loop: "{{ libvirt_guests }}" vars: domain: "{{ hostvars[item] }}" - - name: Copy cloud-config templates for guests + - name: Copy cloud-config meta-data template template: src: meta-data.j2 - dest: "/var/lib/libvirt/configs/{{ domain.name }}/meta-data" + dest: "/tmp/{{ domain.name }}/meta-data" force: true loop: "{{ libvirt_guests }}" vars: domain: "{{ hostvars[item] }}" - - name: Generate iso for guests - command: "genisoimage -output /var/lib/libvirt/images/{{ item }}.iso -volid cidata -joliet -rock /var/lib/libvirt/configs/{{ item }}/user-data /var/lib/libvirt/configs/{{ item }}/meta-data" - loop: "{{ libvirt_guests }}" - - - name: Copy logging config for guests - copy: - src: 05_logging.cfg - dest: "/var/lib/libvirt/configs/{{ item }}/05_logging.cfg" + - name: Generate iso + command: "genisoimage -output /var/lib/libvirt/images/{{ item }}.iso -volid cidata -joliet -rock /tmp/{{ item }}/user-data /tmp/{{ item }}/meta-data" loop: "{{ libvirt_guests }}" - name: Define libvirt virtual machine @@ -138,12 +147,20 @@ command: create loop: "{{ libvirt_guests }}" - - name: Autostart libvirt virtual machine + - name: Autostart libvirt virtual machines community.libvirt.virt: name: "{{ item }}" autostart: true loop: "{{ libvirt_guests }}" + - name: Wait for guest initialization + wait_for: + timeout: 300 + + - name: Reset libvirt virtual machines for filesystem resize + command: "virsh reset {{ item }}" + loop: "{{ libvirt_guests }}" + - name: Wait for manual tasks hosts: localhost tasks: @@ -158,6 +175,7 @@ - alpha-worker-15 - alpha-worker-16 - alpha-worker-17 + - evm become: true vars_files: - ../secrets.yaml @@ -216,7 +234,7 @@ - role: geerlingguy.kubernetes - name: Deploy base Kubernetes resources - hosts: alpha_control_plane + hosts: alpha-control-plane become: true tasks: - name: Deploy NFS Provisioner diff --git a/roles/ericomeehan.mastodon b/roles/ericomeehan.mastodon index 410e87d..5de5270 160000 --- a/roles/ericomeehan.mastodon +++ b/roles/ericomeehan.mastodon @@ -1 +1 @@ -Subproject commit 410e87d127cdc942f01bbed09b6a6c1ba041d237 +Subproject commit 5de5270b7346a6b4a3c69fbea3aa56116f158547 diff --git a/test.yaml b/test.yaml index baa622e..ac66d2e 100644 --- a/test.yaml +++ b/test.yaml @@ -4,6 +4,4 @@ vars_files: - ../secrets.yaml roles: - - role: ericomeehan.matrix-stack - vars: - server_name: eom.dev + - role: ericomeehan.mastodon -- 2.45.2 From 878ddec55f69f49a04004714bbbf4d7204a3a6a4 Mon Sep 17 00:00:00 2001 From: Eric Meehan Date: Thu, 31 Jul 2025 17:31:03 -0400 Subject: [PATCH 4/4] Successful deployment --- poweredge-r720.yaml | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/poweredge-r720.yaml b/poweredge-r720.yaml index 95d5ce7..f1831d4 100644 --- a/poweredge-r720.yaml +++ b/poweredge-r720.yaml @@ -161,12 +161,12 @@ command: "virsh reset {{ item }}" loop: "{{ libvirt_guests }}" -- name: Wait for manual tasks +- name: Wait for manual tasks hosts: localhost tasks: - - name: Trust SSH identities + - name: Trust SSH identities pause: - prompt: "Press Enter to continue..." + prompt: "Press Enter to continue..." - name: Initialize virtual machines hosts: @@ -224,6 +224,7 @@ - name: Alpha Cluster hosts: + - alpha-control-plane - alpha-worker-13 - alpha-worker-14 - alpha-worker-15 @@ -239,7 +240,7 @@ tasks: - name: Deploy NFS Provisioner kubernetes.core.helm: - name: nfs-subdir-external-provisioner + name: r720-nfs-subdir-external-provisioner chart_ref: nfs-subdir-external-provisioner/nfs-subdir-external-provisioner release_namespace: r720-nfs-provisioner create_namespace: true -- 2.45.2