--- # 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: 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 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: user-data.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