diff --git a/host_vars/alpha-worker-13.yaml b/host_vars/alpha-worker-13.yaml new file mode 100644 index 0000000..cfd4256 --- /dev/null +++ b/host_vars/alpha-worker-13.yaml @@ -0,0 +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 new file mode 100644 index 0000000..36824f2 --- /dev/null +++ b/host_vars/alpha-worker-14.yaml @@ -0,0 +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 new file mode 100644 index 0000000..65db49a --- /dev/null +++ b/host_vars/alpha-worker-15.yaml @@ -0,0 +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 new file mode 100644 index 0000000..971d73f --- /dev/null +++ b/host_vars/alpha-worker-16.yaml @@ -0,0 +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 new file mode 100644 index 0000000..79936a3 --- /dev/null +++ b/host_vars/alpha-worker-17.yaml @@ -0,0 +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 new file mode 100644 index 0000000..ed6d36b --- /dev/null +++ b/host_vars/poweredge-r720.yaml @@ -0,0 +1,17 @@ +--- +# 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 + - evm +nfs_exports: ["/data *(rw,sync,no_root_squash)"] diff --git a/inventories/eom.dev.yml b/inventories/eom.dev.yml index dfd2624..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: @@ -35,6 +38,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 +59,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 new file mode 100644 index 0000000..f1831d4 --- /dev/null +++ b/poweredge-r720.yaml @@ -0,0 +1,253 @@ +--- +# 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: 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 }}" + 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 + 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: 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: "/tmp/{{ item }}" + state: directory + loop: "{{ libvirt_guests }}" + + - name: Copy cloud-config user-data template + template: + src: user-data.j2 + dest: "/tmp/{{ domain.name }}/user-data" + force: true + loop: "{{ libvirt_guests }}" + vars: + domain: "{{ hostvars[item] }}" + + - name: Copy cloud-config meta-data template + template: + src: meta-data.j2 + dest: "/tmp/{{ domain.name }}/meta-data" + force: true + loop: "{{ libvirt_guests }}" + vars: + domain: "{{ hostvars[item] }}" + + - 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 + 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 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: + - 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 + - evm + 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-control-plane + - 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: r720-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 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