diff --git a/kubernetes-kvm-terraform/common.tf b/kubernetes-kvm-terraform/common.tf index bda5a38..8ec7ac4 100644 --- a/kubernetes-kvm-terraform/common.tf +++ b/kubernetes-kvm-terraform/common.tf @@ -12,8 +12,35 @@ provider "libvirt" { uri = "qemu+ssh://novakj@192.168.0.7/system" } +provider "libvirt" { + alias = "kvm-homer" + uri = "qemu+ssh://novakj@192.168.0.7/system" +} -resource "libvirt_volume" "ubuntu_base" { +provider "libvirt" { + alias = "kvm-beelink" + uri = "qemu+ssh://novakj@192.168.0.6/system" +} + + +resource "libvirt_volume" "ubuntu_base_homer" { + provider = libvirt.kvm-homer + name = "ubuntu-24.04-base.qcow2" + pool = "default" + create = { + content = { + url = "https://cloud-images.ubuntu.com/noble/current/noble-server-cloudimg-amd64.img" + } + } + target = { + format = { + type = "qcow2" + } + } +} + +resource "libvirt_volume" "ubuntu_base_beelink" { + provider = libvirt.kvm-beelink name = "ubuntu-24.04-base.qcow2" pool = "default" create = { diff --git a/kubernetes-kvm-terraform/kubernetes-deployments/flux.md b/kubernetes-kvm-terraform/kubernetes-deployments/flux.md new file mode 100644 index 0000000..e69de29 diff --git a/kubernetes-kvm-terraform/kubernetes-deployments/kube-prometheus-values.yaml b/kubernetes-kvm-terraform/kubernetes-deployments/kube-prometheus-values.yaml new file mode 100644 index 0000000..d277e04 --- /dev/null +++ b/kubernetes-kvm-terraform/kubernetes-deployments/kube-prometheus-values.yaml @@ -0,0 +1,45 @@ +prometheus: + prometheusSpec: + retention: 60d + storageSpec: + volumeClaimTemplate: + spec: + # storageClassName: + accessModes: ["ReadWriteOnce"] + resources: + requests: + storage: 20Gi + resources: + requests: + memory: 0.5Gi + cpu: 500m + limits: + memory: 4Gi + cpu: 2 + # Critical for ServiceMonitor discovery across namespaces + serviceMonitorSelectorNilUsesHelmValues: false + podMonitorSelectorNilUsesHelmValues: false + ruleSelectorNilUsesHelmValues: false + +alertmanager: + alertmanagerSpec: + storage: + volumeClaimTemplate: + spec: + # storageClassName: + accessModes: ["ReadWriteOnce"] + resources: + requests: + storage: 3Gi + +grafana: + persistence: + enabled: true + # storageClassName: + size: 10Gi + adminPassword: admin + +prometheusOperator: + admissionWebhooks: + certManager: + enabled: false # Set true if using cert-manager diff --git a/kubernetes-kvm-terraform/kubernetes-deployments/kube-prometheus.md b/kubernetes-kvm-terraform/kubernetes-deployments/kube-prometheus.md new file mode 100644 index 0000000..7442de0 --- /dev/null +++ b/kubernetes-kvm-terraform/kubernetes-deployments/kube-prometheus.md @@ -0,0 +1,79 @@ +```bash + +# 1. Add repo +helm repo add prometheus-community https://prometheus-community.github.io/helm-charts +helm repo update + +# 2. Install CRDs separately (production best practice - avoids Helm CRD lifecycle issues) +kubectl apply --server-side -f https://raw.githubusercontent.com/prometheus-operator/prometheus-operator/v0.80.0/example/prometheus-operator-crd/monitoring.coreos.com_alertmanagerconfigs.yaml +kubectl apply --server-side -f https://raw.githubusercontent.com/prometheus-operator/prometheus-operator/v0.80.0/example/prometheus-operator-crd/monitoring.coreos.com_alertmanagers.yaml +kubectl apply --server-side -f https://raw.githubusercontent.com/prometheus-operator/prometheus-operator/v0.80.0/example/prometheus-operator-crd/monitoring.coreos.com_podmonitors.yaml +kubectl apply --server-side -f https://raw.githubusercontent.com/prometheus-operator/prometheus-operator/v0.80.0/example/prometheus-operator-crd/monitoring.coreos.com_probes.yaml +kubectl apply --server-side -f https://raw.githubusercontent.com/prometheus-operator/prometheus-operator/v0.80.0/example/prometheus-operator-crd/monitoring.coreos.com_prometheusagents.yaml +kubectl apply --server-side -f https://raw.githubusercontent.com/prometheus-operator/prometheus-operator/v0.80.0/example/prometheus-operator-crd/monitoring.coreos.com_prometheuses.yaml +kubectl apply --server-side -f https://raw.githubusercontent.com/prometheus-operator/prometheus-operator/v0.80.0/example/prometheus-operator-crd/monitoring.coreos.com_prometheusrules.yaml +kubectl apply --server-side -f https://raw.githubusercontent.com/prometheus-operator/prometheus-operator/v0.80.0/example/prometheus-operator-crd/monitoring.coreos.com_scrapeconfigs.yaml +kubectl apply --server-side -f https://raw.githubusercontent.com/prometheus-operator/prometheus-operator/v0.80.0/example/prometheus-operator-crd/monitoring.coreos.com_servicemonitors.yaml +kubectl apply --server-side -f https://raw.githubusercontent.com/prometheus-operator/prometheus-operator/v0.80.0/example/prometheus-operator-crd/monitoring.coreos.com_thanosrulers.yaml + +# 3. Create values file (production baseline) +cat < kube-prometheus-values.yaml +prometheus: + prometheusSpec: + retention: 60d + storageSpec: + volumeClaimTemplate: + spec: + # storageClassName: + accessModes: ["ReadWriteOnce"] + resources: + requests: + storage: 20Gi + resources: + requests: + memory: 0.5Gi + cpu: 500m + limits: + memory: 4Gi + cpu: 2 + # Critical for ServiceMonitor discovery across namespaces + serviceMonitorSelectorNilUsesHelmValues: false + podMonitorSelectorNilUsesHelmValues: false + ruleSelectorNilUsesHelmValues: false + +alertmanager: + alertmanagerSpec: + storage: + volumeClaimTemplate: + spec: + # storageClassName: + accessModes: ["ReadWriteOnce"] + resources: + requests: + storage: 3Gi + +grafana: + persistence: + enabled: true + # storageClassName: + size: 10Gi + adminPassword: admin + +prometheusOperator: + admissionWebhooks: + certManager: + enabled: false # Set true if using cert-manager +EOF + +# 4. Install +helm install kube-prometheus-stack prometheus-community/kube-prometheus-stack \ + -n monitoring --create-namespace \ + --set prometheusOperator.createCustomResource=false \ + -f kube-prometheus-values.yaml + +# 5. Verify +kubectl -n monitoring get pods +kubectl -n monitoring get prometheuses +kubectl -n monitoring get servicemonitors --all-namespaces + +``` \ No newline at end of file diff --git a/kubernetes-kvm-terraform/kubernetes-deployments/metrics-server b/kubernetes-kvm-terraform/kubernetes-deployments/metrics-server new file mode 100644 index 0000000..e69de29 diff --git a/kubernetes-kvm-terraform/kubernetes-deployments/pvc.yaml b/kubernetes-kvm-terraform/kubernetes-deployments/pvc.yaml new file mode 100644 index 0000000..50232fe --- /dev/null +++ b/kubernetes-kvm-terraform/kubernetes-deployments/pvc.yaml @@ -0,0 +1,11 @@ +apiVersion: v1 +kind: PersistentVolumeClaim +metadata: + name: test-pvc +spec: + accessModes: + - ReadWriteOnce + storageClassName: freenas-iscsi # your SC name + resources: + requests: + storage: 10Gi diff --git a/kubernetes-kvm-terraform/kubernetes-deployments/readme.md b/kubernetes-kvm-terraform/kubernetes-deployments/readme.md new file mode 100644 index 0000000..5b88096 --- /dev/null +++ b/kubernetes-kvm-terraform/kubernetes-deployments/readme.md @@ -0,0 +1,64 @@ +# democratic-csi + +```bash +helm repo add democratic-csi https://democratic-csi.github.io/charts/ +helm install zfs-nvmeof democratic-csi/democratic-csi -f values.yaml + +cat <<'EOF' > values.yaml +controller: + driver: + image: + registry: docker.io/democraticcsi/democratic-csi + tag: next + +node: + driver: + image: + registry: docker.io/democraticcsi/democratic-csi + tag: next + +csiDriver: + name: "org.democratic-csi.iscsi" +driver: + config: + driver: freenas-api-iscsi + httpConnection: + host: 192.168.0.40 + apiKey: 1-0uvRlu1pca3Ed5HAAsEbs7nkx7Rxr6SpsxTd1431x9yhj68hD6qkXl7ovmGTxDTh + iscsi: + targetPortal: "192.168.0.40:3260" + namePrefix: "csi-" + nameSuffix: "-k8s" + targetGroups: + - targetGroupPortalGroup: 1 + targetGroupInitiatorGroup: 1 + targetGroupAuthType: "None" + zfs: + datasetParentName: "pool-6g/tank/k8s/vols" + detachedSnapshotsDatasetParentName: "pool-6g/tank/k8s/snaps" + +storageClasses: +- name: freenas-iscsi + defaultClass: true + reclaimPolicy: Delete + volumeBindingMode: Immediate + allowVolumeExpansion: true + parameters: + fsType: ext4 +EOF + + +cat <<'EOF' > pvc.yaml +apiVersion: v1 +kind: PersistentVolumeClaim +metadata: + name: test-pvc +spec: + accessModes: + - ReadWriteOnce + storageClassName: freenas-iscsi # your SC name + resources: + requests: + storage: 10Gi +EOF +``` \ No newline at end of file diff --git a/kubernetes-kvm-terraform/kubernetes-deployments/values.yaml b/kubernetes-kvm-terraform/kubernetes-deployments/values.yaml new file mode 100644 index 0000000..9267253 --- /dev/null +++ b/kubernetes-kvm-terraform/kubernetes-deployments/values.yaml @@ -0,0 +1,40 @@ +controller: + driver: + image: + registry: docker.io/democraticcsi/democratic-csi + tag: next + +node: + driver: + image: + registry: docker.io/democraticcsi/democratic-csi + tag: next + +csiDriver: + name: "org.democratic-csi.iscsi" +driver: + config: + driver: freenas-api-iscsi + httpConnection: + host: 192.168.0.40 + apiKey: 1-0uvRlu1pca3Ed5HAAsEbs7nkx7Rxr6SpsxTd1431x9yhj68hD6qkXl7ovmGTxDTh + iscsi: + targetPortal: "192.168.0.40:3260" + namePrefix: "csi-" + nameSuffix: "-k8s" + targetGroups: + - targetGroupPortalGroup: 1 + targetGroupInitiatorGroup: 1 + targetGroupAuthType: "None" + zfs: + datasetParentName: "pool-6g/tank/k8s/vols" + detachedSnapshotsDatasetParentName: "pool-6g/tank/k8s/snaps" + +storageClasses: +- name: freenas-iscsi + defaultClass: true + reclaimPolicy: Delete + volumeBindingMode: Immediate + allowVolumeExpansion: true + parameters: + fsType: ext4 diff --git a/kubernetes-kvm-terraform/master.tf b/kubernetes-kvm-terraform/master.tf index 469ecba..fd3a951 100644 --- a/kubernetes-kvm-terraform/master.tf +++ b/kubernetes-kvm-terraform/master.tf @@ -10,10 +10,11 @@ locals { resource "libvirt_volume" "ubuntu_disk" { + provider = libvirt.kvm-homer name = "${local.master_vm_name}.qcow2" pool = "default" backing_store = { - path = libvirt_volume.ubuntu_base.path + path = libvirt_volume.ubuntu_base_homer.path format = { type = "qcow2" } @@ -123,6 +124,10 @@ locals { --- apiVersion: kubeadm.k8s.io/v1beta3 kind: ClusterConfiguration + extraArgs: + oidc-issuer-url: "https://idm.home.hrajfrisbee.cz/oauth2/openid/k8s" + oidc-client-id: "k8s" + oidc-signing-algs: "ES256" networking: podSubnet: "10.244.0.0/16" --- @@ -198,6 +203,7 @@ locals { } resource "libvirt_cloudinit_disk" "commoninit" { + provider = libvirt.kvm-homer name = "${local.master_vm_name}-cloudinit.iso" user_data = local.user_data meta_data = yamlencode({ @@ -209,6 +215,7 @@ resource "libvirt_cloudinit_disk" "commoninit" { # Create a volume from the cloud-init ISO resource "libvirt_volume" "cloudinit" { + provider = libvirt.kvm-homer name = "${local.master_vm_name}-cloudinit.iso" pool = "default" create = { @@ -220,6 +227,7 @@ resource "libvirt_volume" "cloudinit" { resource "libvirt_domain" "master" { + provider = libvirt.kvm-homer name = local.master_vm_name memory = "2048" memory_unit = "MiB" diff --git a/kubernetes-kvm-terraform/nodes-on-beelink.tf b/kubernetes-kvm-terraform/nodes-on-beelink.tf new file mode 100644 index 0000000..21b227a --- /dev/null +++ b/kubernetes-kvm-terraform/nodes-on-beelink.tf @@ -0,0 +1,314 @@ +locals { + vm_node_02_name = "kube-node-33" + vm_node_02_ip_address = "192.168.0.33" +} + + +resource "libvirt_volume" "node_02_disk" { + provider = libvirt.kvm-beelink + name = "${local.vm_node_02_name}.qcow2" + pool = "default" + backing_store = { + path = libvirt_volume.ubuntu_base_beelink.path + format = { + type = "qcow2" + } + } + target = { + format = { + type = "qcow2" + } + } + capacity = 21474836480 +} + +locals { + user_data_node_02 = <<-EOF + #cloud-config + hostname: ${local.vm_node_02_name} + users: + - name: ubuntu + sudo: ALL=(ALL) NOPASSWD:ALL + shell: /bin/bash + ssh_authorized_keys: + - ${file("~/.ssh/id_rsa.pub")} + chpasswd: + list: | + ubuntu:yourpassword + expire: false + ssh_pwauth: true + package_update: true + packages: + - qemu-guest-agent + - openssh-server + - apt-transport-https + - ca-certificates + - curl + - gnupg + - nvme-cli + + write_files: + - path: /etc/modules-load.d/k8s.conf + content: | + overlay + br_netfilter + + - path: /etc/sysctl.d/k8s.conf + content: | + net.bridge.bridge-nf-call-iptables = 1 + net.bridge.bridge-nf-call-ip6tables = 1 + net.ipv4.ip_forward = 1 + + - path: /etc/containerd/config.toml + content: | + version = 2 + [plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc] + runtime_type = "io.containerd.runc.v2" + [plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options] + SystemdCgroup = true + + # Update existing containerd config to enable registry config_path + - path: /etc/containerd/config.toml + content: | + version = 2 + [plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc] + runtime_type = "io.containerd.runc.v2" + [plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options] + SystemdCgroup = true + [plugins."io.containerd.grpc.v1.cri".registry] + config_path = "/etc/containerd/certs.d" + + # Mirror configs for each upstream registry + - path: /etc/containerd/certs.d/docker.io/hosts.toml + content: | + server = "https://registry-1.docker.io" + [host."http://${local.zot_registry_ip}:5000/v2/docker.io"] + capabilities = ["pull", "resolve"] + skip_verify = true + override_path = true + + - path: /etc/containerd/certs.d/registry.k8s.io/hosts.toml + content: | + server = "https://registry.k8s.io" + [host."http://${local.zot_registry_ip}:5000/v2/registry.k8s.io"] + capabilities = ["pull", "resolve"] + skip_verify = true + override_path = true + + - path: /etc/containerd/certs.d/ghcr.io/hosts.toml + content: | + server = "https://ghcr.io" + [host."http://${local.zot_registry_ip}:5000/v2/ghcr.io"] + capabilities = ["pull", "resolve"] + skip_verify = true + override_path = true + + - path: /etc/containerd/certs.d/quay.io/hosts.toml + content: | + server = "https://quay.io" + [host."http://${local.zot_registry_ip}:5000/v2/quay.io"] + capabilities = ["pull", "resolve"] + skip_verify = true + override_path = true + + - path: /root/kubeadm-config.yaml + content: | + apiVersion: kubeadm.k8s.io/v1beta3 + kind: InitConfiguration + nodeRegistration: + criSocket: unix:///run/containerd/containerd.sock + --- + apiVersion: kubeadm.k8s.io/v1beta3 + kind: ClusterConfiguration + networking: + podSubnet: "10.244.0.0/16" + --- + apiVersion: kubelet.config.k8s.io/v1beta1 + kind: KubeletConfiguration + cgroupDriver: systemd + + - path: /etc/profile.d/kubectl.sh + content: | + alias k='kubectl' + source <(kubectl completion bash) + complete -o default -F __start_kubectl k + + runcmd: + - systemctl enable --now qemu-guest-agent + - systemctl enable --now ssh + + # needed for nvme-tcp module + - apt install linux-modules-extra-$(uname -r) + - modprobe nvme-tcp + - echo "nvme-tcp" >> /etc/modules-load.d/nvme-tcp.conf + + # relevant to kubernetes + - modprobe overlay + - modprobe br_netfilter + - sysctl --system + + # containerd + - curl -fsSL https://download.docker.com/linux/ubuntu/gpg | gpg --dearmor -o /etc/apt/keyrings/docker.gpg + - echo "deb [arch=amd64 signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" > /etc/apt/sources.list.d/docker.list + - apt-get update && apt-get install -y containerd.io + - systemctl restart containerd + + # kubeadm/kubelet/kubectl v1.32 + - curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.32/deb/Release.key | gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg + - echo "deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/v1.32/deb/ /" > /etc/apt/sources.list.d/kubernetes.list + - apt-get update && apt-get install -y kubelet kubeadm kubectl + - apt-mark hold kubelet kubeadm kubectl + + # join cluster + - ${local.join_command} + + EOF + + network_config_node_02 = <<-EOF + version: 2 + ethernets: + eth0: + match: + driver: virtio_net + addresses: + - ${local.vm_node_02_ip_address}/${local.cidr} + routes: + - to: default + via: ${local.gateway} + nameservers: + addresses: + - ${local.dns} + EOF +} + +resource "libvirt_cloudinit_disk" "commoninit_node_02" { + provider = libvirt.kvm-beelink + name = "${local.vm_node_02_name}-cloudinit.iso" + user_data = local.user_data_node_02 + meta_data = yamlencode({ + instance-id = local.vm_node_02_name + local-hostname = local.vm_node_02_name + }) + network_config = local.network_config_node_02 +} + +# Create a volume from the cloud-init ISO +resource "libvirt_volume" "cloudinit_node_02" { + provider = libvirt.kvm-beelink + name = "${local.vm_node_02_name}-cloudinit.iso" + pool = "default" + create = { + content = { + url = libvirt_cloudinit_disk.commoninit_node_02.path + } + } +} + + +resource "libvirt_domain" "node_02" { + provider = libvirt.kvm-beelink + name = local.vm_node_02_name + memory = "8192" + memory_unit = "MiB" + vcpu = 4 + type = "kvm" + autostart = true + running = true + + os = { + type = "hvm" + type_arch = "x86_64" + type_machine = "q35" + } + + devices = { + disks = [ + { + driver = { + name = "qemu" + type = "qcow2" + } + source = { + file = { + file = libvirt_volume.node_02_disk.path + } + } + target = { + dev = "vda" + bus = "virtio" + } + }, + { + device = "cdrom" + driver = { + name = "qemu" + type = "raw" + } + source = { + file = { + file = libvirt_volume.cloudinit_node_02.path + } + } + target = { + dev = "sda" + bus = "sata" + } + } + ] + + interfaces = [ + { + type = "bridge" + model = { + type = "virtio" + } + source = { + bridge = { + bridge = local.bridge + } + } + } + ] + + serials = [ + { + type = "pty" + } + ] + + + xml = { + xslt = <<-XSLT + + + + + + + + + + + + + + + + + + + + + + + + + + + XSLT + } + } +} +output "node_02_ip" { + value = local.vm_node_02_ip_address +} \ No newline at end of file diff --git a/kubernetes-kvm-terraform/nodes.tf b/kubernetes-kvm-terraform/nodes-on-homer.tf similarity index 94% rename from kubernetes-kvm-terraform/nodes.tf rename to kubernetes-kvm-terraform/nodes-on-homer.tf index 674de0f..c3df0b6 100644 --- a/kubernetes-kvm-terraform/nodes.tf +++ b/kubernetes-kvm-terraform/nodes-on-homer.tf @@ -5,10 +5,11 @@ locals { resource "libvirt_volume" "node_01_disk" { + provider = libvirt.kvm-homer name = "${local.vm_node_01_name}.qcow2" pool = "default" backing_store = { - path = libvirt_volume.ubuntu_base.path + path = libvirt_volume.ubuntu_base_homer.path format = { type = "qcow2" } @@ -22,7 +23,7 @@ resource "libvirt_volume" "node_01_disk" { } locals { - user_data_node = <<-EOF + user_data_node_01 = <<-EOF #cloud-config hostname: ${local.vm_node_01_name} users: @@ -43,7 +44,8 @@ locals { - apt-transport-https - ca-certificates - curl - - gnupg + - gnupg + - nvme-cli write_files: - path: /etc/modules-load.d/k8s.conf @@ -135,6 +137,11 @@ locals { - systemctl enable --now qemu-guest-agent - systemctl enable --now ssh + # needed for nvme-tcp module + - apt install linux-modules-extra-$(uname -r) + - modprobe nvme-tcp + - echo "nvme-tcp" >> /etc/modules-load.d/nvme-tcp.conf + # relevant to kubernetes - modprobe overlay - modprobe br_netfilter @@ -175,8 +182,9 @@ locals { } resource "libvirt_cloudinit_disk" "commoninit_node_01" { + provider = libvirt.kvm-homer name = "${local.vm_node_01_name}-cloudinit.iso" - user_data = local.user_data_node + user_data = local.user_data_node_01 meta_data = yamlencode({ instance-id = local.vm_node_01_name local-hostname = local.vm_node_01_name @@ -186,6 +194,7 @@ resource "libvirt_cloudinit_disk" "commoninit_node_01" { # Create a volume from the cloud-init ISO resource "libvirt_volume" "cloudinit_node_01" { + provider = libvirt.kvm-homer name = "${local.vm_node_01_name}-cloudinit.iso" pool = "default" create = { @@ -197,10 +206,11 @@ resource "libvirt_volume" "cloudinit_node_01" { resource "libvirt_domain" "node_01" { + provider = libvirt.kvm-homer name = local.vm_node_01_name - memory = "4096" + memory = "8192" memory_unit = "MiB" - vcpu = 2 + vcpu = 4 type = "kvm" autostart = true running = true diff --git a/kubernetes-kvm-terraform/readme.md b/kubernetes-kvm-terraform/readme.md index e1e1c07..f874df6 100644 --- a/kubernetes-kvm-terraform/readme.md +++ b/kubernetes-kvm-terraform/readme.md @@ -12,6 +12,8 @@ ```bash # recreate specific resources tofu destroy -target=libvirt_domain.ubuntu_vm -target=libvirt_volume.cloudinit +tofu destroy -target=null_resource.kubeadm_token +tofu destroy -target=libvirt_cloudinit_disk.commoninit_node_01 -target=libvirt_cloudinit_disk.commoninit_node_02 tofu apply # taint resource to have it recreated diff --git a/kubernetes-kvm-terraform/terraform.tfstate b/kubernetes-kvm-terraform/terraform.tfstate index 44a3d16..315f6f3 100644 --- a/kubernetes-kvm-terraform/terraform.tfstate +++ b/kubernetes-kvm-terraform/terraform.tfstate @@ -1 +1 @@ -{"version":4,"terraform_version":"1.11.2","serial":66,"lineage":"69f81358-9017-b0fa-2e3d-404364b1f698","outputs":{"master_ip":{"value":"192.168.0.31","type":"string"},"node_01_ip":{"value":"192.168.0.32","type":"string"}},"resources":[{"mode":"data","type":"local_file","name":"join_command","provider":"provider[\"registry.opentofu.org/hashicorp/local\"]","instances":[{"schema_version":0,"attributes":{"content":"kubeadm join 192.168.0.31:6443 --token ps457c.7g4koxq4awqigdwy --discovery-token-ca-cert-hash sha256:bd969ebcf4c68c424a76c8fc483f194ab8b32a2fd52f1cf992e164f496907447 \n","content_base64":"a3ViZWFkbSBqb2luIDE5Mi4xNjguMC4zMTo2NDQzIC0tdG9rZW4gcHM0NTdjLjdnNGtveHE0YXdxaWdkd3kgLS1kaXNjb3ZlcnktdG9rZW4tY2EtY2VydC1oYXNoIHNoYTI1NjpiZDk2OWViY2Y0YzY4YzQyNGE3NmM4ZmM0ODNmMTk0YWI4YjMyYTJmZDUyZjFjZjk5MmUxNjRmNDk2OTA3NDQ3IAo=","content_base64sha256":"Nfe4cEuj9IcdF7E6B/NCohZAmoqEE1jkbv+5/fFg6Q4=","content_base64sha512":"/9NQ9J2SuaSzn2wG48VRTANdbi9tdr9AaVq9YLjYOGHRyJyrtntbjgJy636+fuhUvAcHXIad+t9ey4aEpOiWdg==","content_md5":"a50d45f29d7a87e59055f88ba97a6778","content_sha1":"431c014c1cef740ad9ae9e2e028d2ab426eb4f1d","content_sha256":"35f7b8704ba3f4871d17b13a07f342a216409a8a841358e46effb9fdf160e90e","content_sha512":"ffd350f49d92b9a4b39f6c06e3c5514c035d6e2f6d76bf40695abd60b8d83861d1c89cabb67b5b8e0272eb7ebe7ee854bc07075c869dfadf5ecb8684a4e89676","filename":"./join-command.txt","id":"431c014c1cef740ad9ae9e2e028d2ab426eb4f1d"},"sensitive_attributes":[]}]},{"mode":"managed","type":"libvirt_cloudinit_disk","name":"commoninit","provider":"provider[\"registry.opentofu.org/dmacvicar/libvirt\"]","instances":[{"schema_version":0,"attributes":{"id":"9b5efd668378a2cc","meta_data":"\"instance-id\": \"kube-master-31\"\n\"local-hostname\": \"kube-master-31\"\n","name":"kube-master-31-cloudinit.iso","network_config":"version: 2\nethernets:\n eth0:\n match:\n driver: virtio_net\n addresses:\n - 192.168.0.31/24\n routes:\n - to: default\n via: 192.168.0.4\n nameservers:\n addresses:\n - 8.8.8.8\n","path":"/var/folders/dq/h32yg2mx55b2m8hxmf1yh66r0000gn/T/terraform-provider-libvirt-cloudinit/cloudinit-9b5efd668378a2cc.iso","size":49152,"user_data":"#cloud-config\nhostname: kube-master-31\nusers:\n - name: ubuntu\n sudo: ALL=(ALL) NOPASSWD:ALL\n shell: /bin/bash\n ssh_authorized_keys:\n - ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDTLxDOQMsumLpjIzMXvpN/hvoMfbVFcl7TDKXTYLBJIvTOLWO/elI3PeJkXNAlaIT1lgJQB7NwQED+DciPLjCLzkG3aSxuJdZRo0Z+vHm9CEUkWnq8icLTQs0zYadK6p24VpMqT61cGNv9L/riciMRWT6l2SdRN2ZBR6MhCXMZy/XgRRlcV9iN1n9T0Q9aZjaQ2CjgG59wTLdQ0bHRlFBSt2q6erFmCIiBHUJba4avDVRvYryvMgkopayL/eK2gxaloMjcMt4z+zIokxhQONPPU2AvqMcqQIsWGQYIzIkJ0UOO8ly/PAFCpgvukWJepmZR30vVBALFCRZCUN1zMbI3 jan.novak@Jans-MacBook-Air-9.local\n\nchpasswd:\n list: |\n ubuntu:yourpassword\n expire: false\nssh_pwauth: true\npackage_update: true\npackages:\n - qemu-guest-agent\n - openssh-server\n - apt-transport-https\n - ca-certificates\n - curl\n - gnupg \n\nwrite_files:\n - path: /etc/modules-load.d/k8s.conf\n content: |\n overlay\n br_netfilter\n\n - path: /etc/sysctl.d/k8s.conf\n content: |\n net.bridge.bridge-nf-call-iptables = 1\n net.bridge.bridge-nf-call-ip6tables = 1\n net.ipv4.ip_forward = 1\n\n - path: /etc/containerd/config.toml\n content: |\n version = 2\n [plugins.\"io.containerd.grpc.v1.cri\".containerd.runtimes.runc]\n runtime_type = \"io.containerd.runc.v2\"\n [plugins.\"io.containerd.grpc.v1.cri\".containerd.runtimes.runc.options]\n SystemdCgroup = true\n\n # Update existing containerd config to enable registry config_path\n - path: /etc/containerd/config.toml\n content: |\n version = 2\n [plugins.\"io.containerd.grpc.v1.cri\".containerd.runtimes.runc]\n runtime_type = \"io.containerd.runc.v2\"\n [plugins.\"io.containerd.grpc.v1.cri\".containerd.runtimes.runc.options]\n SystemdCgroup = true\n [plugins.\"io.containerd.grpc.v1.cri\".registry]\n config_path = \"/etc/containerd/certs.d\"\n\n # Mirror configs for each upstream registry\n - path: /etc/containerd/certs.d/docker.io/hosts.toml\n content: |\n server = \"https://registry-1.docker.io\"\n [host.\"http://192.168.0.30:5000/v2/docker.io\"]\n capabilities = [\"pull\", \"resolve\"]\n skip_verify = true\n override_path = true\n\n - path: /etc/containerd/certs.d/registry.k8s.io/hosts.toml\n content: |\n server = \"https://registry.k8s.io\"\n [host.\"http://192.168.0.30:5000/v2/registry.k8s.io\"]\n capabilities = [\"pull\", \"resolve\"]\n skip_verify = true\n override_path = true\n\n - path: /etc/containerd/certs.d/ghcr.io/hosts.toml\n content: |\n server = \"https://ghcr.io\"\n [host.\"http://192.168.0.30:5000/v2/ghcr.io\"]\n capabilities = [\"pull\", \"resolve\"]\n skip_verify = true\n override_path = true\n\n - path: /etc/containerd/certs.d/quay.io/hosts.toml\n content: |\n server = \"https://quay.io\"\n [host.\"http://192.168.0.30:5000/v2/quay.io\"]\n capabilities = [\"pull\", \"resolve\"]\n skip_verify = true\n override_path = true \n\n - path: /root/kubeadm-config.yaml\n content: |\n apiVersion: kubeadm.k8s.io/v1beta3\n kind: InitConfiguration\n nodeRegistration:\n criSocket: unix:///run/containerd/containerd.sock\n ---\n apiVersion: kubeadm.k8s.io/v1beta3\n kind: ClusterConfiguration\n networking:\n podSubnet: \"10.244.0.0/16\"\n ---\n apiVersion: kubelet.config.k8s.io/v1beta1\n kind: KubeletConfiguration\n cgroupDriver: systemd\n\n - path: /etc/profile.d/kubectl.sh\n content: |\n alias k='kubectl'\n source \u003c(kubectl completion bash)\n complete -o default -F __start_kubectl k \n\nruncmd:\n - systemctl enable --now qemu-guest-agent\n - systemctl enable --now ssh\n\n # relevant to kubernetes\n - modprobe overlay\n - modprobe br_netfilter\n - sysctl --system\n\n # containerd\n - curl -fsSL https://download.docker.com/linux/ubuntu/gpg | gpg --dearmor -o /etc/apt/keyrings/docker.gpg\n - echo \"deb [arch=amd64 signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable\" \u003e /etc/apt/sources.list.d/docker.list\n - apt-get update \u0026\u0026 apt-get install -y containerd.io\n - systemctl restart containerd\n\n # kubeadm/kubelet/kubectl v1.32\n - curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.32/deb/Release.key | gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg\n - echo \"deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/v1.32/deb/ /\" \u003e /etc/apt/sources.list.d/kubernetes.list\n - apt-get update \u0026\u0026 apt-get install -y kubelet kubeadm kubectl\n - apt-mark hold kubelet kubeadm kubectl\n\n\n # init cluster\n - kubeadm init --config=/root/kubeadm-config.yaml --skip-phases=addon/kube-proxy\n \n # kubeconfig for root\n - mkdir -p /root/.kube \u0026\u0026 cp /etc/kubernetes/admin.conf /root/.kube/config\n\n # wait for API server\n - |\n echo \"Waiting for API server...\"\n until kubectl --kubeconfig=/etc/kubernetes/admin.conf get nodes ; do\n echo \"Waiting for API server...\"\n sleep 5\n done\n\n # CNI (cilium example, swap for flannel/calico as needed)\n - |\n CILIUM_CLI_VERSION=$(curl -s https://raw.githubusercontent.com/cilium/cilium-cli/main/stable.txt)\n curl -L --remote-name-all https://github.com/cilium/cilium-cli/releases/download/${CILIUM_CLI_VERSION}/cilium-linux-amd64.tar.gz\n tar xzvf cilium-linux-amd64.tar.gz -C /usr/local/bin\n cilium install --kubeconfig=/etc/kubernetes/admin.conf --set kubeProxyReplacement=true --wait \n"},"sensitive_attributes":[]}]},{"mode":"managed","type":"libvirt_cloudinit_disk","name":"commoninit_node_01","provider":"provider[\"registry.opentofu.org/dmacvicar/libvirt\"]","instances":[{"schema_version":0,"attributes":{"id":"2d6abdd2982994a2","meta_data":"\"instance-id\": \"kube-node-32\"\n\"local-hostname\": \"kube-node-32\"\n","name":"kube-node-32-cloudinit.iso","network_config":"version: 2\nethernets:\n eth0:\n match:\n driver: virtio_net\n addresses:\n - 192.168.0.32/24\n routes:\n - to: default\n via: 192.168.0.4\n nameservers:\n addresses:\n - 8.8.8.8\n","path":"/var/folders/dq/h32yg2mx55b2m8hxmf1yh66r0000gn/T/terraform-provider-libvirt-cloudinit/cloudinit-2d6abdd2982994a2.iso","size":49152,"user_data":"#cloud-config\nhostname: kube-node-32\nusers:\n - name: ubuntu\n sudo: ALL=(ALL) NOPASSWD:ALL\n shell: /bin/bash\n ssh_authorized_keys:\n - ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDTLxDOQMsumLpjIzMXvpN/hvoMfbVFcl7TDKXTYLBJIvTOLWO/elI3PeJkXNAlaIT1lgJQB7NwQED+DciPLjCLzkG3aSxuJdZRo0Z+vHm9CEUkWnq8icLTQs0zYadK6p24VpMqT61cGNv9L/riciMRWT6l2SdRN2ZBR6MhCXMZy/XgRRlcV9iN1n9T0Q9aZjaQ2CjgG59wTLdQ0bHRlFBSt2q6erFmCIiBHUJba4avDVRvYryvMgkopayL/eK2gxaloMjcMt4z+zIokxhQONPPU2AvqMcqQIsWGQYIzIkJ0UOO8ly/PAFCpgvukWJepmZR30vVBALFCRZCUN1zMbI3 jan.novak@Jans-MacBook-Air-9.local\n\nchpasswd:\n list: |\n ubuntu:yourpassword\n expire: false\nssh_pwauth: true\npackage_update: true\npackages:\n - qemu-guest-agent\n - openssh-server\n - apt-transport-https\n - ca-certificates\n - curl\n - gnupg \n\nwrite_files:\n - path: /etc/modules-load.d/k8s.conf\n content: |\n overlay\n br_netfilter\n\n - path: /etc/sysctl.d/k8s.conf\n content: |\n net.bridge.bridge-nf-call-iptables = 1\n net.bridge.bridge-nf-call-ip6tables = 1\n net.ipv4.ip_forward = 1\n\n - path: /etc/containerd/config.toml\n content: |\n version = 2\n [plugins.\"io.containerd.grpc.v1.cri\".containerd.runtimes.runc]\n runtime_type = \"io.containerd.runc.v2\"\n [plugins.\"io.containerd.grpc.v1.cri\".containerd.runtimes.runc.options]\n SystemdCgroup = true\n\n # Update existing containerd config to enable registry config_path\n - path: /etc/containerd/config.toml\n content: |\n version = 2\n [plugins.\"io.containerd.grpc.v1.cri\".containerd.runtimes.runc]\n runtime_type = \"io.containerd.runc.v2\"\n [plugins.\"io.containerd.grpc.v1.cri\".containerd.runtimes.runc.options]\n SystemdCgroup = true\n [plugins.\"io.containerd.grpc.v1.cri\".registry]\n config_path = \"/etc/containerd/certs.d\"\n\n # Mirror configs for each upstream registry\n - path: /etc/containerd/certs.d/docker.io/hosts.toml\n content: |\n server = \"https://registry-1.docker.io\"\n [host.\"http://192.168.0.30:5000/v2/docker.io\"]\n capabilities = [\"pull\", \"resolve\"]\n skip_verify = true\n override_path = true\n\n - path: /etc/containerd/certs.d/registry.k8s.io/hosts.toml\n content: |\n server = \"https://registry.k8s.io\"\n [host.\"http://192.168.0.30:5000/v2/registry.k8s.io\"]\n capabilities = [\"pull\", \"resolve\"]\n skip_verify = true\n override_path = true\n\n - path: /etc/containerd/certs.d/ghcr.io/hosts.toml\n content: |\n server = \"https://ghcr.io\"\n [host.\"http://192.168.0.30:5000/v2/ghcr.io\"]\n capabilities = [\"pull\", \"resolve\"]\n skip_verify = true\n override_path = true\n\n - path: /etc/containerd/certs.d/quay.io/hosts.toml\n content: |\n server = \"https://quay.io\"\n [host.\"http://192.168.0.30:5000/v2/quay.io\"]\n capabilities = [\"pull\", \"resolve\"]\n skip_verify = true\n override_path = true \n\n - path: /root/kubeadm-config.yaml\n content: |\n apiVersion: kubeadm.k8s.io/v1beta3\n kind: InitConfiguration\n nodeRegistration:\n criSocket: unix:///run/containerd/containerd.sock\n ---\n apiVersion: kubeadm.k8s.io/v1beta3\n kind: ClusterConfiguration\n networking:\n podSubnet: \"10.244.0.0/16\"\n ---\n apiVersion: kubelet.config.k8s.io/v1beta1\n kind: KubeletConfiguration\n cgroupDriver: systemd\n\n - path: /etc/profile.d/kubectl.sh\n content: |\n alias k='kubectl'\n source \u003c(kubectl completion bash)\n complete -o default -F __start_kubectl k \n\nruncmd:\n - systemctl enable --now qemu-guest-agent\n - systemctl enable --now ssh\n\n # relevant to kubernetes\n - modprobe overlay\n - modprobe br_netfilter\n - sysctl --system\n\n # containerd\n - curl -fsSL https://download.docker.com/linux/ubuntu/gpg | gpg --dearmor -o /etc/apt/keyrings/docker.gpg\n - echo \"deb [arch=amd64 signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable\" \u003e /etc/apt/sources.list.d/docker.list\n - apt-get update \u0026\u0026 apt-get install -y containerd.io\n - systemctl restart containerd\n\n # kubeadm/kubelet/kubectl v1.32\n - curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.32/deb/Release.key | gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg\n - echo \"deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/v1.32/deb/ /\" \u003e /etc/apt/sources.list.d/kubernetes.list\n - apt-get update \u0026\u0026 apt-get install -y kubelet kubeadm kubectl\n - apt-mark hold kubelet kubeadm kubectl\n\n # join cluster\n - kubeadm join 192.168.0.31:6443 --token ps457c.7g4koxq4awqigdwy --discovery-token-ca-cert-hash sha256:bd969ebcf4c68c424a76c8fc483f194ab8b32a2fd52f1cf992e164f496907447\n\n"},"sensitive_attributes":[],"dependencies":["data.local_file.join_command","libvirt_cloudinit_disk.commoninit","libvirt_domain.master","libvirt_volume.cloudinit","libvirt_volume.ubuntu_base","libvirt_volume.ubuntu_disk","null_resource.kubeadm_token"]}]},{"mode":"managed","type":"libvirt_domain","name":"master","provider":"provider[\"registry.opentofu.org/dmacvicar/libvirt\"]","instances":[{"schema_version":0,"attributes":{"autostart":true,"block_io_tune":null,"bootloader":null,"bootloader_args":null,"clock":null,"cpu":null,"cpu_tune":null,"create":null,"current_memory":null,"current_memory_unit":null,"default_io_thread":null,"description":null,"destroy":null,"devices":{"audios":null,"channels":null,"consoles":null,"controllers":null,"crypto":null,"disks":[{"acpi":null,"address":null,"alias":null,"auth":null,"backend_domain":null,"backing_store":null,"block_io":null,"boot":null,"device":null,"driver":{"ats":null,"cache":null,"copy_on_read":null,"detect_zeros":null,"discard":null,"discard_no_unref":null,"error_policy":null,"event_idx":null,"io":null,"io_event_fd":null,"io_thread":null,"io_threads":null,"iommu":null,"metadata_cache":null,"name":"qemu","packed":null,"page_per_vq":null,"queue_size":null,"queues":null,"rerror_policy":null,"type":"qcow2"},"encryption":null,"geometry":null,"io_tune":null,"mirror":null,"model":null,"product":null,"raw_io":null,"read_only":null,"serial":null,"sgio":null,"shareable":null,"snapshot":null,"source":{"block":null,"cookies":null,"data_store":null,"dir":null,"encryption":null,"file":{"fd_group":null,"file":"/srv/vms/kube-master-31.qcow2","sec_label":null},"index":null,"network":null,"nvme":null,"readahead":null,"reservations":null,"slices":null,"ssl":null,"startup_policy":null,"timeout":null,"vhost_user":null,"vhost_vdpa":null,"volume":null},"target":{"bus":"virtio","dev":"vda","removable":null,"rotation_rate":null,"tray":null},"throttle_filters":null,"transient":null,"vendor":null,"wwn":null},{"acpi":null,"address":null,"alias":null,"auth":null,"backend_domain":null,"backing_store":null,"block_io":null,"boot":null,"device":"cdrom","driver":{"ats":null,"cache":null,"copy_on_read":null,"detect_zeros":null,"discard":null,"discard_no_unref":null,"error_policy":null,"event_idx":null,"io":null,"io_event_fd":null,"io_thread":null,"io_threads":null,"iommu":null,"metadata_cache":null,"name":"qemu","packed":null,"page_per_vq":null,"queue_size":null,"queues":null,"rerror_policy":null,"type":"raw"},"encryption":null,"geometry":null,"io_tune":null,"mirror":null,"model":null,"product":null,"raw_io":null,"read_only":null,"serial":null,"sgio":null,"shareable":null,"snapshot":null,"source":{"block":null,"cookies":null,"data_store":null,"dir":null,"encryption":null,"file":{"fd_group":null,"file":"/srv/vms/kube-master-31-cloudinit.iso","sec_label":null},"index":null,"network":null,"nvme":null,"readahead":null,"reservations":null,"slices":null,"ssl":null,"startup_policy":null,"timeout":null,"vhost_user":null,"vhost_vdpa":null,"volume":null},"target":{"bus":"sata","dev":"sda","removable":null,"rotation_rate":null,"tray":null},"throttle_filters":null,"transient":null,"vendor":null,"wwn":null}],"emulator":null,"filesystems":null,"graphics":null,"hostdevs":null,"hubs":null,"inputs":null,"interfaces":[{"acpi":null,"address":null,"alias":null,"backend":null,"backend_domain":null,"bandwidth":null,"boot":null,"coalesce":null,"down_script":null,"driver":null,"filter_ref":null,"guest":null,"ip":null,"link":null,"mac":null,"managed":null,"model":{"type":"virtio"},"mtu":null,"port_forward":null,"port_options":null,"rom":null,"route":null,"script":null,"source":{"bridge":{"bridge":"br0"},"client":null,"direct":null,"ethernet":null,"hostdev":null,"internal":null,"mcast":null,"network":null,"null":null,"server":null,"udp":null,"user":null,"vdpa":null,"vds":null,"vhost_user":null},"target":null,"teaming":null,"trust_guest_rx_filters":null,"tune":null,"virtual_port":null,"vlan":null,"wait_for_ip":null}],"iommu":null,"leases":null,"mem_balloon":null,"memorydevs":null,"nvram":null,"panics":null,"parallels":null,"pstore":null,"redir_devs":null,"redir_filters":null,"rngs":null,"serials":[{"acpi":null,"address":null,"alias":null,"log":null,"protocol":null,"source":null,"target":null}],"shmems":null,"smartcards":null,"sounds":null,"tpms":null,"videos":null,"vsock":null,"watchdogs":null},"features":null,"gen_id":null,"hwuuid":null,"id":49,"id_map":null,"io_thread_i_ds":null,"io_threads":null,"key_wrap":null,"launch_security":null,"maximum_memory":null,"maximum_memory_slots":null,"maximum_memory_unit":null,"memory":2048,"memory_backing":null,"memory_dump_core":null,"memory_tune":null,"memory_unit":"MiB","metadata":null,"name":"kube-master-31","numa_tune":null,"on_crash":null,"on_poweroff":null,"on_reboot":null,"os":{"acpi":null,"bios":null,"boot_devices":null,"boot_menu":null,"cmdline":null,"dtb":null,"firmware":null,"firmware_info":null,"init":null,"init_args":null,"init_dir":null,"init_env":null,"init_group":null,"init_user":null,"initrd":null,"kernel":null,"loader":null,"loader_format":null,"loader_readonly":null,"loader_secure":null,"loader_stateless":null,"loader_type":null,"nv_ram":null,"shim":null,"sm_bios":null,"type":"hvm","type_arch":"x86_64","type_machine":"q35"},"perf":null,"pm":null,"resource":null,"running":true,"sec_label":null,"sys_info":null,"throttle_groups":null,"title":null,"type":"kvm","uuid":"1d3d2721-a2f0-49d0-a458-a905c4b6e5cd","vcpu":2,"vcpu_cpuset":null,"vcpu_current":null,"vcpu_placement":null,"vcpus":null},"sensitive_attributes":[],"dependencies":["libvirt_cloudinit_disk.commoninit","libvirt_volume.cloudinit","libvirt_volume.ubuntu_base","libvirt_volume.ubuntu_disk"]}]},{"mode":"managed","type":"libvirt_domain","name":"node_01","provider":"provider[\"registry.opentofu.org/dmacvicar/libvirt\"]","instances":[{"schema_version":0,"attributes":{"autostart":true,"block_io_tune":null,"bootloader":null,"bootloader_args":null,"clock":null,"cpu":null,"cpu_tune":null,"create":null,"current_memory":null,"current_memory_unit":null,"default_io_thread":null,"description":null,"destroy":null,"devices":{"audios":null,"channels":null,"consoles":null,"controllers":null,"crypto":null,"disks":[{"acpi":null,"address":null,"alias":null,"auth":null,"backend_domain":null,"backing_store":null,"block_io":null,"boot":null,"device":null,"driver":{"ats":null,"cache":null,"copy_on_read":null,"detect_zeros":null,"discard":null,"discard_no_unref":null,"error_policy":null,"event_idx":null,"io":null,"io_event_fd":null,"io_thread":null,"io_threads":null,"iommu":null,"metadata_cache":null,"name":"qemu","packed":null,"page_per_vq":null,"queue_size":null,"queues":null,"rerror_policy":null,"type":"qcow2"},"encryption":null,"geometry":null,"io_tune":null,"mirror":null,"model":null,"product":null,"raw_io":null,"read_only":null,"serial":null,"sgio":null,"shareable":null,"snapshot":null,"source":{"block":null,"cookies":null,"data_store":null,"dir":null,"encryption":null,"file":{"fd_group":null,"file":"/srv/vms/kube-node-32.qcow2","sec_label":null},"index":null,"network":null,"nvme":null,"readahead":null,"reservations":null,"slices":null,"ssl":null,"startup_policy":null,"timeout":null,"vhost_user":null,"vhost_vdpa":null,"volume":null},"target":{"bus":"virtio","dev":"vda","removable":null,"rotation_rate":null,"tray":null},"throttle_filters":null,"transient":null,"vendor":null,"wwn":null},{"acpi":null,"address":null,"alias":null,"auth":null,"backend_domain":null,"backing_store":null,"block_io":null,"boot":null,"device":"cdrom","driver":{"ats":null,"cache":null,"copy_on_read":null,"detect_zeros":null,"discard":null,"discard_no_unref":null,"error_policy":null,"event_idx":null,"io":null,"io_event_fd":null,"io_thread":null,"io_threads":null,"iommu":null,"metadata_cache":null,"name":"qemu","packed":null,"page_per_vq":null,"queue_size":null,"queues":null,"rerror_policy":null,"type":"raw"},"encryption":null,"geometry":null,"io_tune":null,"mirror":null,"model":null,"product":null,"raw_io":null,"read_only":null,"serial":null,"sgio":null,"shareable":null,"snapshot":null,"source":{"block":null,"cookies":null,"data_store":null,"dir":null,"encryption":null,"file":{"fd_group":null,"file":"/srv/vms/kube-node-32-cloudinit.iso","sec_label":null},"index":null,"network":null,"nvme":null,"readahead":null,"reservations":null,"slices":null,"ssl":null,"startup_policy":null,"timeout":null,"vhost_user":null,"vhost_vdpa":null,"volume":null},"target":{"bus":"sata","dev":"sda","removable":null,"rotation_rate":null,"tray":null},"throttle_filters":null,"transient":null,"vendor":null,"wwn":null}],"emulator":null,"filesystems":null,"graphics":null,"hostdevs":null,"hubs":null,"inputs":null,"interfaces":[{"acpi":null,"address":null,"alias":null,"backend":null,"backend_domain":null,"bandwidth":null,"boot":null,"coalesce":null,"down_script":null,"driver":null,"filter_ref":null,"guest":null,"ip":null,"link":null,"mac":null,"managed":null,"model":{"type":"virtio"},"mtu":null,"port_forward":null,"port_options":null,"rom":null,"route":null,"script":null,"source":{"bridge":{"bridge":"br0"},"client":null,"direct":null,"ethernet":null,"hostdev":null,"internal":null,"mcast":null,"network":null,"null":null,"server":null,"udp":null,"user":null,"vdpa":null,"vds":null,"vhost_user":null},"target":null,"teaming":null,"trust_guest_rx_filters":null,"tune":null,"virtual_port":null,"vlan":null,"wait_for_ip":null}],"iommu":null,"leases":null,"mem_balloon":null,"memorydevs":null,"nvram":null,"panics":null,"parallels":null,"pstore":null,"redir_devs":null,"redir_filters":null,"rngs":null,"serials":[{"acpi":null,"address":null,"alias":null,"log":null,"protocol":null,"source":null,"target":null}],"shmems":null,"smartcards":null,"sounds":null,"tpms":null,"videos":null,"vsock":null,"watchdogs":null},"features":null,"gen_id":null,"hwuuid":null,"id":50,"id_map":null,"io_thread_i_ds":null,"io_threads":null,"key_wrap":null,"launch_security":null,"maximum_memory":null,"maximum_memory_slots":null,"maximum_memory_unit":null,"memory":4096,"memory_backing":null,"memory_dump_core":null,"memory_tune":null,"memory_unit":"MiB","metadata":null,"name":"kube-node-32","numa_tune":null,"on_crash":null,"on_poweroff":null,"on_reboot":null,"os":{"acpi":null,"bios":null,"boot_devices":null,"boot_menu":null,"cmdline":null,"dtb":null,"firmware":null,"firmware_info":null,"init":null,"init_args":null,"init_dir":null,"init_env":null,"init_group":null,"init_user":null,"initrd":null,"kernel":null,"loader":null,"loader_format":null,"loader_readonly":null,"loader_secure":null,"loader_stateless":null,"loader_type":null,"nv_ram":null,"shim":null,"sm_bios":null,"type":"hvm","type_arch":"x86_64","type_machine":"q35"},"perf":null,"pm":null,"resource":null,"running":true,"sec_label":null,"sys_info":null,"throttle_groups":null,"title":null,"type":"kvm","uuid":"432c9f41-6033-4ee8-a77a-083b8cb6ef9a","vcpu":2,"vcpu_cpuset":null,"vcpu_current":null,"vcpu_placement":null,"vcpus":null},"sensitive_attributes":[],"dependencies":["data.local_file.join_command","libvirt_cloudinit_disk.commoninit","libvirt_cloudinit_disk.commoninit_node_01","libvirt_domain.master","libvirt_volume.cloudinit","libvirt_volume.cloudinit_node_01","libvirt_volume.node_01_disk","libvirt_volume.ubuntu_base","libvirt_volume.ubuntu_disk","null_resource.kubeadm_token"]}]},{"mode":"managed","type":"libvirt_volume","name":"cloudinit","provider":"provider[\"registry.opentofu.org/dmacvicar/libvirt\"]","instances":[{"schema_version":0,"attributes":{"allocation":49152,"allocation_unit":null,"backing_store":null,"capacity":49152,"capacity_unit":null,"create":{"content":{"url":"/var/folders/dq/h32yg2mx55b2m8hxmf1yh66r0000gn/T/terraform-provider-libvirt-cloudinit/cloudinit-9b5efd668378a2cc.iso"}},"id":"/srv/vms/kube-master-31-cloudinit.iso","key":"/srv/vms/kube-master-31-cloudinit.iso","name":"kube-master-31-cloudinit.iso","path":"/srv/vms/kube-master-31-cloudinit.iso","physical":49152,"physical_unit":null,"pool":"default","target":null,"type":null},"sensitive_attributes":[],"dependencies":["libvirt_cloudinit_disk.commoninit"]}]},{"mode":"managed","type":"libvirt_volume","name":"cloudinit_node_01","provider":"provider[\"registry.opentofu.org/dmacvicar/libvirt\"]","instances":[{"schema_version":0,"attributes":{"allocation":49152,"allocation_unit":null,"backing_store":null,"capacity":49152,"capacity_unit":null,"create":{"content":{"url":"/var/folders/dq/h32yg2mx55b2m8hxmf1yh66r0000gn/T/terraform-provider-libvirt-cloudinit/cloudinit-2d6abdd2982994a2.iso"}},"id":"/srv/vms/kube-node-32-cloudinit.iso","key":"/srv/vms/kube-node-32-cloudinit.iso","name":"kube-node-32-cloudinit.iso","path":"/srv/vms/kube-node-32-cloudinit.iso","physical":49152,"physical_unit":null,"pool":"default","target":null,"type":null},"sensitive_attributes":[],"dependencies":["data.local_file.join_command","libvirt_cloudinit_disk.commoninit","libvirt_cloudinit_disk.commoninit_node_01","libvirt_domain.master","libvirt_volume.cloudinit","libvirt_volume.ubuntu_base","libvirt_volume.ubuntu_disk","null_resource.kubeadm_token"]}]},{"mode":"managed","type":"libvirt_volume","name":"node_01_disk","provider":"provider[\"registry.opentofu.org/dmacvicar/libvirt\"]","instances":[{"schema_version":0,"attributes":{"allocation":503001088,"allocation_unit":null,"backing_store":{"format":{"type":"qcow2"},"path":"/srv/vms/ubuntu-24.04-base.qcow2","permissions":null},"capacity":21474836480,"capacity_unit":null,"create":null,"id":"/srv/vms/kube-node-32.qcow2","key":"/srv/vms/kube-node-32.qcow2","name":"kube-node-32.qcow2","path":"/srv/vms/kube-node-32.qcow2","physical":503054336,"physical_unit":null,"pool":"default","target":{"cluster_size":null,"cluster_size_unit":null,"compat":null,"encryption":null,"features":null,"format":{"type":"qcow2"},"path":"/srv/vms/kube-node-32.qcow2","permissions":null,"timestamps":null},"type":null},"sensitive_attributes":[],"dependencies":["libvirt_volume.ubuntu_base"]}]},{"mode":"managed","type":"libvirt_volume","name":"ubuntu_base","provider":"provider[\"registry.opentofu.org/dmacvicar/libvirt\"]","instances":[{"schema_version":0,"attributes":{"allocation":626663424,"allocation_unit":null,"backing_store":null,"capacity":3758096384,"capacity_unit":null,"create":{"content":{"url":"https://cloud-images.ubuntu.com/noble/current/noble-server-cloudimg-amd64.img"}},"id":"/srv/vms/ubuntu-24.04-base.qcow2","key":"/srv/vms/ubuntu-24.04-base.qcow2","name":"ubuntu-24.04-base.qcow2","path":"/srv/vms/ubuntu-24.04-base.qcow2","physical":626655744,"physical_unit":null,"pool":"default","target":{"cluster_size":null,"cluster_size_unit":null,"compat":null,"encryption":null,"features":null,"format":{"type":"qcow2"},"path":"/srv/vms/ubuntu-24.04-base.qcow2","permissions":null,"timestamps":null},"type":null},"sensitive_attributes":[]}]},{"mode":"managed","type":"libvirt_volume","name":"ubuntu_disk","provider":"provider[\"registry.opentofu.org/dmacvicar/libvirt\"]","instances":[{"schema_version":0,"attributes":{"allocation":577777664,"allocation_unit":null,"backing_store":{"format":{"type":"qcow2"},"path":"/srv/vms/ubuntu-24.04-base.qcow2","permissions":null},"capacity":21474836480,"capacity_unit":null,"create":null,"id":"/srv/vms/kube-master-31.qcow2","key":"/srv/vms/kube-master-31.qcow2","name":"kube-master-31.qcow2","path":"/srv/vms/kube-master-31.qcow2","physical":577830912,"physical_unit":null,"pool":"default","target":{"cluster_size":null,"cluster_size_unit":null,"compat":null,"encryption":null,"features":null,"format":{"type":"qcow2"},"path":"/srv/vms/kube-master-31.qcow2","permissions":null,"timestamps":null},"type":null},"sensitive_attributes":[],"dependencies":["libvirt_volume.ubuntu_base"]}]},{"mode":"managed","type":"null_resource","name":"kubeadm_token","provider":"provider[\"registry.opentofu.org/hashicorp/null\"]","instances":[{"schema_version":0,"attributes":{"id":"1090738715192517178","triggers":null},"sensitive_attributes":[],"dependencies":["libvirt_cloudinit_disk.commoninit","libvirt_domain.master","libvirt_volume.cloudinit","libvirt_volume.ubuntu_base","libvirt_volume.ubuntu_disk"]}]},{"mode":"managed","type":"null_resource","name":"kubeconfig","provider":"provider[\"registry.opentofu.org/hashicorp/null\"]","instances":[{"schema_version":0,"attributes":{"id":"6762014692990027276","triggers":null},"sensitive_attributes":[]}]}],"check_results":null} +{"version":4,"terraform_version":"1.11.2","serial":77,"lineage":"69f81358-9017-b0fa-2e3d-404364b1f698","outputs":{"master_ip":{"value":"192.168.0.31","type":"string"},"node_01_ip":{"value":"192.168.0.32","type":"string"},"node_02_ip":{"value":"192.168.0.33","type":"string"}},"resources":[{"mode":"data","type":"local_file","name":"join_command","provider":"provider[\"registry.opentofu.org/hashicorp/local\"]","instances":[{"schema_version":0,"attributes":{"content":"kubeadm join 192.168.0.31:6443 --token bca05l.sem12tulotxra5mk --discovery-token-ca-cert-hash sha256:c09955e09ba79882ba7766125b57030b2e87dde0ac49af351de28e1c92d0beb9 \n","content_base64":"a3ViZWFkbSBqb2luIDE5Mi4xNjguMC4zMTo2NDQzIC0tdG9rZW4gYmNhMDVsLnNlbTEydHVsb3R4cmE1bWsgLS1kaXNjb3ZlcnktdG9rZW4tY2EtY2VydC1oYXNoIHNoYTI1NjpjMDk5NTVlMDliYTc5ODgyYmE3NzY2MTI1YjU3MDMwYjJlODdkZGUwYWM0OWFmMzUxZGUyOGUxYzkyZDBiZWI5IAo=","content_base64sha256":"+t44hPRBkSVJujVj02iIjOFgh6nfbeDel4slokcBZqo=","content_base64sha512":"or3RhHLkaTpnteMqUXiqs0sBkASBMCPNMlsNMewbIDh15zag72QEfpeo2tz0FkgAkhJv1/NartBIJpVga4zlgg==","content_md5":"484b2ae9b0cc4537cf4060343640a4a0","content_sha1":"082c2f7bacba02d6e732786daed6aab3bc1af7c5","content_sha256":"fade3884f441912549ba3563d368888ce16087a9df6de0de978b25a2470166aa","content_sha512":"a2bdd18472e4693a67b5e32a5178aab34b019004813023cd325b0d31ec1b203875e736a0ef64047e97a8dadcf416480092126fd7f35aaed0482695606b8ce582","filename":"./join-command.txt","id":"082c2f7bacba02d6e732786daed6aab3bc1af7c5"},"sensitive_attributes":[]}]},{"mode":"managed","type":"libvirt_cloudinit_disk","name":"commoninit","provider":"provider[\"registry.opentofu.org/dmacvicar/libvirt\"].kvm-homer","instances":[{"schema_version":0,"attributes":{"id":"9b5efd668378a2cc","meta_data":"\"instance-id\": \"kube-master-31\"\n\"local-hostname\": \"kube-master-31\"\n","name":"kube-master-31-cloudinit.iso","network_config":"version: 2\nethernets:\n eth0:\n match:\n driver: virtio_net\n addresses:\n - 192.168.0.31/24\n routes:\n - to: default\n via: 192.168.0.4\n nameservers:\n addresses:\n - 8.8.8.8\n","path":"/var/folders/dq/h32yg2mx55b2m8hxmf1yh66r0000gn/T/terraform-provider-libvirt-cloudinit/cloudinit-9b5efd668378a2cc.iso","size":49152,"user_data":"#cloud-config\nhostname: kube-master-31\nusers:\n - name: ubuntu\n sudo: ALL=(ALL) NOPASSWD:ALL\n shell: /bin/bash\n ssh_authorized_keys:\n - ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDTLxDOQMsumLpjIzMXvpN/hvoMfbVFcl7TDKXTYLBJIvTOLWO/elI3PeJkXNAlaIT1lgJQB7NwQED+DciPLjCLzkG3aSxuJdZRo0Z+vHm9CEUkWnq8icLTQs0zYadK6p24VpMqT61cGNv9L/riciMRWT6l2SdRN2ZBR6MhCXMZy/XgRRlcV9iN1n9T0Q9aZjaQ2CjgG59wTLdQ0bHRlFBSt2q6erFmCIiBHUJba4avDVRvYryvMgkopayL/eK2gxaloMjcMt4z+zIokxhQONPPU2AvqMcqQIsWGQYIzIkJ0UOO8ly/PAFCpgvukWJepmZR30vVBALFCRZCUN1zMbI3 jan.novak@Jans-MacBook-Air-9.local\n\nchpasswd:\n list: |\n ubuntu:yourpassword\n expire: false\nssh_pwauth: true\npackage_update: true\npackages:\n - qemu-guest-agent\n - openssh-server\n - apt-transport-https\n - ca-certificates\n - curl\n - gnupg \n\nwrite_files:\n - path: /etc/modules-load.d/k8s.conf\n content: |\n overlay\n br_netfilter\n\n - path: /etc/sysctl.d/k8s.conf\n content: |\n net.bridge.bridge-nf-call-iptables = 1\n net.bridge.bridge-nf-call-ip6tables = 1\n net.ipv4.ip_forward = 1\n\n - path: /etc/containerd/config.toml\n content: |\n version = 2\n [plugins.\"io.containerd.grpc.v1.cri\".containerd.runtimes.runc]\n runtime_type = \"io.containerd.runc.v2\"\n [plugins.\"io.containerd.grpc.v1.cri\".containerd.runtimes.runc.options]\n SystemdCgroup = true\n\n # Update existing containerd config to enable registry config_path\n - path: /etc/containerd/config.toml\n content: |\n version = 2\n [plugins.\"io.containerd.grpc.v1.cri\".containerd.runtimes.runc]\n runtime_type = \"io.containerd.runc.v2\"\n [plugins.\"io.containerd.grpc.v1.cri\".containerd.runtimes.runc.options]\n SystemdCgroup = true\n [plugins.\"io.containerd.grpc.v1.cri\".registry]\n config_path = \"/etc/containerd/certs.d\"\n\n # Mirror configs for each upstream registry\n - path: /etc/containerd/certs.d/docker.io/hosts.toml\n content: |\n server = \"https://registry-1.docker.io\"\n [host.\"http://192.168.0.30:5000/v2/docker.io\"]\n capabilities = [\"pull\", \"resolve\"]\n skip_verify = true\n override_path = true\n\n - path: /etc/containerd/certs.d/registry.k8s.io/hosts.toml\n content: |\n server = \"https://registry.k8s.io\"\n [host.\"http://192.168.0.30:5000/v2/registry.k8s.io\"]\n capabilities = [\"pull\", \"resolve\"]\n skip_verify = true\n override_path = true\n\n - path: /etc/containerd/certs.d/ghcr.io/hosts.toml\n content: |\n server = \"https://ghcr.io\"\n [host.\"http://192.168.0.30:5000/v2/ghcr.io\"]\n capabilities = [\"pull\", \"resolve\"]\n skip_verify = true\n override_path = true\n\n - path: /etc/containerd/certs.d/quay.io/hosts.toml\n content: |\n server = \"https://quay.io\"\n [host.\"http://192.168.0.30:5000/v2/quay.io\"]\n capabilities = [\"pull\", \"resolve\"]\n skip_verify = true\n override_path = true \n\n - path: /root/kubeadm-config.yaml\n content: |\n apiVersion: kubeadm.k8s.io/v1beta3\n kind: InitConfiguration\n nodeRegistration:\n criSocket: unix:///run/containerd/containerd.sock\n ---\n apiVersion: kubeadm.k8s.io/v1beta3\n kind: ClusterConfiguration\n networking:\n podSubnet: \"10.244.0.0/16\"\n ---\n apiVersion: kubelet.config.k8s.io/v1beta1\n kind: KubeletConfiguration\n cgroupDriver: systemd\n\n - path: /etc/profile.d/kubectl.sh\n content: |\n alias k='kubectl'\n source \u003c(kubectl completion bash)\n complete -o default -F __start_kubectl k \n\nruncmd:\n - systemctl enable --now qemu-guest-agent\n - systemctl enable --now ssh\n\n # relevant to kubernetes\n - modprobe overlay\n - modprobe br_netfilter\n - sysctl --system\n\n # containerd\n - curl -fsSL https://download.docker.com/linux/ubuntu/gpg | gpg --dearmor -o /etc/apt/keyrings/docker.gpg\n - echo \"deb [arch=amd64 signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable\" \u003e /etc/apt/sources.list.d/docker.list\n - apt-get update \u0026\u0026 apt-get install -y containerd.io\n - systemctl restart containerd\n\n # kubeadm/kubelet/kubectl v1.32\n - curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.32/deb/Release.key | gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg\n - echo \"deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/v1.32/deb/ /\" \u003e /etc/apt/sources.list.d/kubernetes.list\n - apt-get update \u0026\u0026 apt-get install -y kubelet kubeadm kubectl\n - apt-mark hold kubelet kubeadm kubectl\n\n\n # init cluster\n - kubeadm init --config=/root/kubeadm-config.yaml --skip-phases=addon/kube-proxy\n \n # kubeconfig for root\n - mkdir -p /root/.kube \u0026\u0026 cp /etc/kubernetes/admin.conf /root/.kube/config\n\n # wait for API server\n - |\n echo \"Waiting for API server...\"\n until kubectl --kubeconfig=/etc/kubernetes/admin.conf get nodes ; do\n echo \"Waiting for API server...\"\n sleep 5\n done\n\n # CNI (cilium example, swap for flannel/calico as needed)\n - |\n CILIUM_CLI_VERSION=$(curl -s https://raw.githubusercontent.com/cilium/cilium-cli/main/stable.txt)\n curl -L --remote-name-all https://github.com/cilium/cilium-cli/releases/download/${CILIUM_CLI_VERSION}/cilium-linux-amd64.tar.gz\n tar xzvf cilium-linux-amd64.tar.gz -C /usr/local/bin\n cilium install --kubeconfig=/etc/kubernetes/admin.conf --set kubeProxyReplacement=true --wait \n"},"sensitive_attributes":[]}]},{"mode":"managed","type":"libvirt_cloudinit_disk","name":"commoninit_node_01","provider":"provider[\"registry.opentofu.org/dmacvicar/libvirt\"].kvm-homer","instances":[{"schema_version":0,"attributes":{"id":"9cda86046375ec96","meta_data":"\"instance-id\": \"kube-node-32\"\n\"local-hostname\": \"kube-node-32\"\n","name":"kube-node-32-cloudinit.iso","network_config":"version: 2\nethernets:\n eth0:\n match:\n driver: virtio_net\n addresses:\n - 192.168.0.32/24\n routes:\n - to: default\n via: 192.168.0.4\n nameservers:\n addresses:\n - 8.8.8.8\n","path":"/var/folders/dq/h32yg2mx55b2m8hxmf1yh66r0000gn/T/terraform-provider-libvirt-cloudinit/cloudinit-9cda86046375ec96.iso","size":49152,"user_data":"#cloud-config\nhostname: kube-node-32\nusers:\n - name: ubuntu\n sudo: ALL=(ALL) NOPASSWD:ALL\n shell: /bin/bash\n ssh_authorized_keys:\n - ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDTLxDOQMsumLpjIzMXvpN/hvoMfbVFcl7TDKXTYLBJIvTOLWO/elI3PeJkXNAlaIT1lgJQB7NwQED+DciPLjCLzkG3aSxuJdZRo0Z+vHm9CEUkWnq8icLTQs0zYadK6p24VpMqT61cGNv9L/riciMRWT6l2SdRN2ZBR6MhCXMZy/XgRRlcV9iN1n9T0Q9aZjaQ2CjgG59wTLdQ0bHRlFBSt2q6erFmCIiBHUJba4avDVRvYryvMgkopayL/eK2gxaloMjcMt4z+zIokxhQONPPU2AvqMcqQIsWGQYIzIkJ0UOO8ly/PAFCpgvukWJepmZR30vVBALFCRZCUN1zMbI3 jan.novak@Jans-MacBook-Air-9.local\n\nchpasswd:\n list: |\n ubuntu:yourpassword\n expire: false\nssh_pwauth: true\npackage_update: true\npackages:\n - qemu-guest-agent\n - openssh-server\n - apt-transport-https\n - ca-certificates\n - curl\n - gnupg\n - nvme-cli\n\nwrite_files:\n - path: /etc/modules-load.d/k8s.conf\n content: |\n overlay\n br_netfilter\n\n - path: /etc/sysctl.d/k8s.conf\n content: |\n net.bridge.bridge-nf-call-iptables = 1\n net.bridge.bridge-nf-call-ip6tables = 1\n net.ipv4.ip_forward = 1\n\n - path: /etc/containerd/config.toml\n content: |\n version = 2\n [plugins.\"io.containerd.grpc.v1.cri\".containerd.runtimes.runc]\n runtime_type = \"io.containerd.runc.v2\"\n [plugins.\"io.containerd.grpc.v1.cri\".containerd.runtimes.runc.options]\n SystemdCgroup = true\n\n # Update existing containerd config to enable registry config_path\n - path: /etc/containerd/config.toml\n content: |\n version = 2\n [plugins.\"io.containerd.grpc.v1.cri\".containerd.runtimes.runc]\n runtime_type = \"io.containerd.runc.v2\"\n [plugins.\"io.containerd.grpc.v1.cri\".containerd.runtimes.runc.options]\n SystemdCgroup = true\n [plugins.\"io.containerd.grpc.v1.cri\".registry]\n config_path = \"/etc/containerd/certs.d\"\n\n # Mirror configs for each upstream registry\n - path: /etc/containerd/certs.d/docker.io/hosts.toml\n content: |\n server = \"https://registry-1.docker.io\"\n [host.\"http://192.168.0.30:5000/v2/docker.io\"]\n capabilities = [\"pull\", \"resolve\"]\n skip_verify = true\n override_path = true\n\n - path: /etc/containerd/certs.d/registry.k8s.io/hosts.toml\n content: |\n server = \"https://registry.k8s.io\"\n [host.\"http://192.168.0.30:5000/v2/registry.k8s.io\"]\n capabilities = [\"pull\", \"resolve\"]\n skip_verify = true\n override_path = true\n\n - path: /etc/containerd/certs.d/ghcr.io/hosts.toml\n content: |\n server = \"https://ghcr.io\"\n [host.\"http://192.168.0.30:5000/v2/ghcr.io\"]\n capabilities = [\"pull\", \"resolve\"]\n skip_verify = true\n override_path = true\n\n - path: /etc/containerd/certs.d/quay.io/hosts.toml\n content: |\n server = \"https://quay.io\"\n [host.\"http://192.168.0.30:5000/v2/quay.io\"]\n capabilities = [\"pull\", \"resolve\"]\n skip_verify = true\n override_path = true \n\n - path: /root/kubeadm-config.yaml\n content: |\n apiVersion: kubeadm.k8s.io/v1beta3\n kind: InitConfiguration\n nodeRegistration:\n criSocket: unix:///run/containerd/containerd.sock\n ---\n apiVersion: kubeadm.k8s.io/v1beta3\n kind: ClusterConfiguration\n networking:\n podSubnet: \"10.244.0.0/16\"\n ---\n apiVersion: kubelet.config.k8s.io/v1beta1\n kind: KubeletConfiguration\n cgroupDriver: systemd\n\n - path: /etc/profile.d/kubectl.sh\n content: |\n alias k='kubectl'\n source \u003c(kubectl completion bash)\n complete -o default -F __start_kubectl k \n\nruncmd:\n - systemctl enable --now qemu-guest-agent\n - systemctl enable --now ssh\n\n # needed for nvme-tcp module\n - apt install linux-modules-extra-$(uname -r)\n - modprobe nvme-tcp\n - echo \"nvme-tcp\" \u003e\u003e /etc/modules-load.d/nvme-tcp.conf\n\n # relevant to kubernetes\n - modprobe overlay\n - modprobe br_netfilter\n - sysctl --system\n\n # containerd\n - curl -fsSL https://download.docker.com/linux/ubuntu/gpg | gpg --dearmor -o /etc/apt/keyrings/docker.gpg\n - echo \"deb [arch=amd64 signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable\" \u003e /etc/apt/sources.list.d/docker.list\n - apt-get update \u0026\u0026 apt-get install -y containerd.io\n - systemctl restart containerd\n\n # kubeadm/kubelet/kubectl v1.32\n - curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.32/deb/Release.key | gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg\n - echo \"deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/v1.32/deb/ /\" \u003e /etc/apt/sources.list.d/kubernetes.list\n - apt-get update \u0026\u0026 apt-get install -y kubelet kubeadm kubectl\n - apt-mark hold kubelet kubeadm kubectl\n\n # join cluster\n - kubeadm join 192.168.0.31:6443 --token bca05l.sem12tulotxra5mk --discovery-token-ca-cert-hash sha256:c09955e09ba79882ba7766125b57030b2e87dde0ac49af351de28e1c92d0beb9\n\n"},"sensitive_attributes":[],"dependencies":["data.local_file.join_command","libvirt_cloudinit_disk.commoninit","libvirt_domain.master","libvirt_volume.cloudinit","libvirt_volume.ubuntu_base_homer","libvirt_volume.ubuntu_disk","null_resource.kubeadm_token"]}]},{"mode":"managed","type":"libvirt_cloudinit_disk","name":"commoninit_node_02","provider":"provider[\"registry.opentofu.org/dmacvicar/libvirt\"].kvm-beelink","instances":[{"schema_version":0,"attributes":{"id":"c168c9baba7630ed","meta_data":"\"instance-id\": \"kube-node-33\"\n\"local-hostname\": \"kube-node-33\"\n","name":"kube-node-33-cloudinit.iso","network_config":"version: 2\nethernets:\n eth0:\n match:\n driver: virtio_net\n addresses:\n - 192.168.0.33/24\n routes:\n - to: default\n via: 192.168.0.4\n nameservers:\n addresses:\n - 8.8.8.8\n","path":"/var/folders/dq/h32yg2mx55b2m8hxmf1yh66r0000gn/T/terraform-provider-libvirt-cloudinit/cloudinit-c168c9baba7630ed.iso","size":49152,"user_data":"#cloud-config\nhostname: kube-node-33\nusers:\n - name: ubuntu\n sudo: ALL=(ALL) NOPASSWD:ALL\n shell: /bin/bash\n ssh_authorized_keys:\n - ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDTLxDOQMsumLpjIzMXvpN/hvoMfbVFcl7TDKXTYLBJIvTOLWO/elI3PeJkXNAlaIT1lgJQB7NwQED+DciPLjCLzkG3aSxuJdZRo0Z+vHm9CEUkWnq8icLTQs0zYadK6p24VpMqT61cGNv9L/riciMRWT6l2SdRN2ZBR6MhCXMZy/XgRRlcV9iN1n9T0Q9aZjaQ2CjgG59wTLdQ0bHRlFBSt2q6erFmCIiBHUJba4avDVRvYryvMgkopayL/eK2gxaloMjcMt4z+zIokxhQONPPU2AvqMcqQIsWGQYIzIkJ0UOO8ly/PAFCpgvukWJepmZR30vVBALFCRZCUN1zMbI3 jan.novak@Jans-MacBook-Air-9.local\n\nchpasswd:\n list: |\n ubuntu:yourpassword\n expire: false\nssh_pwauth: true\npackage_update: true\npackages:\n - qemu-guest-agent\n - openssh-server\n - apt-transport-https\n - ca-certificates\n - curl\n - gnupg\n - nvme-cli\n\nwrite_files:\n - path: /etc/modules-load.d/k8s.conf\n content: |\n overlay\n br_netfilter\n\n - path: /etc/sysctl.d/k8s.conf\n content: |\n net.bridge.bridge-nf-call-iptables = 1\n net.bridge.bridge-nf-call-ip6tables = 1\n net.ipv4.ip_forward = 1\n\n - path: /etc/containerd/config.toml\n content: |\n version = 2\n [plugins.\"io.containerd.grpc.v1.cri\".containerd.runtimes.runc]\n runtime_type = \"io.containerd.runc.v2\"\n [plugins.\"io.containerd.grpc.v1.cri\".containerd.runtimes.runc.options]\n SystemdCgroup = true\n\n # Update existing containerd config to enable registry config_path\n - path: /etc/containerd/config.toml\n content: |\n version = 2\n [plugins.\"io.containerd.grpc.v1.cri\".containerd.runtimes.runc]\n runtime_type = \"io.containerd.runc.v2\"\n [plugins.\"io.containerd.grpc.v1.cri\".containerd.runtimes.runc.options]\n SystemdCgroup = true\n [plugins.\"io.containerd.grpc.v1.cri\".registry]\n config_path = \"/etc/containerd/certs.d\"\n\n # Mirror configs for each upstream registry\n - path: /etc/containerd/certs.d/docker.io/hosts.toml\n content: |\n server = \"https://registry-1.docker.io\"\n [host.\"http://192.168.0.30:5000/v2/docker.io\"]\n capabilities = [\"pull\", \"resolve\"]\n skip_verify = true\n override_path = true\n\n - path: /etc/containerd/certs.d/registry.k8s.io/hosts.toml\n content: |\n server = \"https://registry.k8s.io\"\n [host.\"http://192.168.0.30:5000/v2/registry.k8s.io\"]\n capabilities = [\"pull\", \"resolve\"]\n skip_verify = true\n override_path = true\n\n - path: /etc/containerd/certs.d/ghcr.io/hosts.toml\n content: |\n server = \"https://ghcr.io\"\n [host.\"http://192.168.0.30:5000/v2/ghcr.io\"]\n capabilities = [\"pull\", \"resolve\"]\n skip_verify = true\n override_path = true\n\n - path: /etc/containerd/certs.d/quay.io/hosts.toml\n content: |\n server = \"https://quay.io\"\n [host.\"http://192.168.0.30:5000/v2/quay.io\"]\n capabilities = [\"pull\", \"resolve\"]\n skip_verify = true\n override_path = true \n\n - path: /root/kubeadm-config.yaml\n content: |\n apiVersion: kubeadm.k8s.io/v1beta3\n kind: InitConfiguration\n nodeRegistration:\n criSocket: unix:///run/containerd/containerd.sock\n ---\n apiVersion: kubeadm.k8s.io/v1beta3\n kind: ClusterConfiguration\n networking:\n podSubnet: \"10.244.0.0/16\"\n ---\n apiVersion: kubelet.config.k8s.io/v1beta1\n kind: KubeletConfiguration\n cgroupDriver: systemd\n\n - path: /etc/profile.d/kubectl.sh\n content: |\n alias k='kubectl'\n source \u003c(kubectl completion bash)\n complete -o default -F __start_kubectl k \n\nruncmd:\n - systemctl enable --now qemu-guest-agent\n - systemctl enable --now ssh\n\n # needed for nvme-tcp module\n - apt install linux-modules-extra-$(uname -r)\n - modprobe nvme-tcp\n - echo \"nvme-tcp\" \u003e\u003e /etc/modules-load.d/nvme-tcp.conf\n\n # relevant to kubernetes\n - modprobe overlay\n - modprobe br_netfilter\n - sysctl --system\n\n # containerd\n - curl -fsSL https://download.docker.com/linux/ubuntu/gpg | gpg --dearmor -o /etc/apt/keyrings/docker.gpg\n - echo \"deb [arch=amd64 signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable\" \u003e /etc/apt/sources.list.d/docker.list\n - apt-get update \u0026\u0026 apt-get install -y containerd.io\n - systemctl restart containerd\n\n # kubeadm/kubelet/kubectl v1.32\n - curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.32/deb/Release.key | gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg\n - echo \"deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/v1.32/deb/ /\" \u003e /etc/apt/sources.list.d/kubernetes.list\n - apt-get update \u0026\u0026 apt-get install -y kubelet kubeadm kubectl\n - apt-mark hold kubelet kubeadm kubectl\n\n # join cluster\n - kubeadm join 192.168.0.31:6443 --token bca05l.sem12tulotxra5mk --discovery-token-ca-cert-hash sha256:c09955e09ba79882ba7766125b57030b2e87dde0ac49af351de28e1c92d0beb9\n\n"},"sensitive_attributes":[],"dependencies":["data.local_file.join_command","libvirt_cloudinit_disk.commoninit","libvirt_domain.master","libvirt_volume.cloudinit","libvirt_volume.ubuntu_base_homer","libvirt_volume.ubuntu_disk","null_resource.kubeadm_token"]}]},{"mode":"managed","type":"libvirt_domain","name":"master","provider":"provider[\"registry.opentofu.org/dmacvicar/libvirt\"].kvm-homer","instances":[{"schema_version":0,"attributes":{"autostart":true,"block_io_tune":null,"bootloader":null,"bootloader_args":null,"clock":null,"cpu":null,"cpu_tune":null,"create":null,"current_memory":null,"current_memory_unit":null,"default_io_thread":null,"description":null,"destroy":null,"devices":{"audios":null,"channels":null,"consoles":null,"controllers":null,"crypto":null,"disks":[{"acpi":null,"address":null,"alias":null,"auth":null,"backend_domain":null,"backing_store":null,"block_io":null,"boot":null,"device":null,"driver":{"ats":null,"cache":null,"copy_on_read":null,"detect_zeros":null,"discard":null,"discard_no_unref":null,"error_policy":null,"event_idx":null,"io":null,"io_event_fd":null,"io_thread":null,"io_threads":null,"iommu":null,"metadata_cache":null,"name":"qemu","packed":null,"page_per_vq":null,"queue_size":null,"queues":null,"rerror_policy":null,"type":"qcow2"},"encryption":null,"geometry":null,"io_tune":null,"mirror":null,"model":null,"product":null,"raw_io":null,"read_only":null,"serial":null,"sgio":null,"shareable":null,"snapshot":null,"source":{"block":null,"cookies":null,"data_store":null,"dir":null,"encryption":null,"file":{"fd_group":null,"file":"/srv/vms/kube-master-31.qcow2","sec_label":null},"index":null,"network":null,"nvme":null,"readahead":null,"reservations":null,"slices":null,"ssl":null,"startup_policy":null,"timeout":null,"vhost_user":null,"vhost_vdpa":null,"volume":null},"target":{"bus":"virtio","dev":"vda","removable":null,"rotation_rate":null,"tray":null},"throttle_filters":null,"transient":null,"vendor":null,"wwn":null},{"acpi":null,"address":null,"alias":null,"auth":null,"backend_domain":null,"backing_store":null,"block_io":null,"boot":null,"device":"cdrom","driver":{"ats":null,"cache":null,"copy_on_read":null,"detect_zeros":null,"discard":null,"discard_no_unref":null,"error_policy":null,"event_idx":null,"io":null,"io_event_fd":null,"io_thread":null,"io_threads":null,"iommu":null,"metadata_cache":null,"name":"qemu","packed":null,"page_per_vq":null,"queue_size":null,"queues":null,"rerror_policy":null,"type":"raw"},"encryption":null,"geometry":null,"io_tune":null,"mirror":null,"model":null,"product":null,"raw_io":null,"read_only":null,"serial":null,"sgio":null,"shareable":null,"snapshot":null,"source":{"block":null,"cookies":null,"data_store":null,"dir":null,"encryption":null,"file":{"fd_group":null,"file":"/srv/vms/kube-master-31-cloudinit.iso","sec_label":null},"index":null,"network":null,"nvme":null,"readahead":null,"reservations":null,"slices":null,"ssl":null,"startup_policy":null,"timeout":null,"vhost_user":null,"vhost_vdpa":null,"volume":null},"target":{"bus":"sata","dev":"sda","removable":null,"rotation_rate":null,"tray":null},"throttle_filters":null,"transient":null,"vendor":null,"wwn":null}],"emulator":null,"filesystems":null,"graphics":null,"hostdevs":null,"hubs":null,"inputs":null,"interfaces":[{"acpi":null,"address":null,"alias":null,"backend":null,"backend_domain":null,"bandwidth":null,"boot":null,"coalesce":null,"down_script":null,"driver":null,"filter_ref":null,"guest":null,"ip":null,"link":null,"mac":null,"managed":null,"model":{"type":"virtio"},"mtu":null,"port_forward":null,"port_options":null,"rom":null,"route":null,"script":null,"source":{"bridge":{"bridge":"br0"},"client":null,"direct":null,"ethernet":null,"hostdev":null,"internal":null,"mcast":null,"network":null,"null":null,"server":null,"udp":null,"user":null,"vdpa":null,"vds":null,"vhost_user":null},"target":null,"teaming":null,"trust_guest_rx_filters":null,"tune":null,"virtual_port":null,"vlan":null,"wait_for_ip":null}],"iommu":null,"leases":null,"mem_balloon":null,"memorydevs":null,"nvram":null,"panics":null,"parallels":null,"pstore":null,"redir_devs":null,"redir_filters":null,"rngs":null,"serials":[{"acpi":null,"address":null,"alias":null,"log":null,"protocol":null,"source":null,"target":null}],"shmems":null,"smartcards":null,"sounds":null,"tpms":null,"videos":null,"vsock":null,"watchdogs":null},"features":null,"gen_id":null,"hwuuid":null,"id":49,"id_map":null,"io_thread_i_ds":null,"io_threads":null,"key_wrap":null,"launch_security":null,"maximum_memory":null,"maximum_memory_slots":null,"maximum_memory_unit":null,"memory":2048,"memory_backing":null,"memory_dump_core":null,"memory_tune":null,"memory_unit":"MiB","metadata":null,"name":"kube-master-31","numa_tune":null,"on_crash":null,"on_poweroff":null,"on_reboot":null,"os":{"acpi":null,"bios":null,"boot_devices":null,"boot_menu":null,"cmdline":null,"dtb":null,"firmware":null,"firmware_info":null,"init":null,"init_args":null,"init_dir":null,"init_env":null,"init_group":null,"init_user":null,"initrd":null,"kernel":null,"loader":null,"loader_format":null,"loader_readonly":null,"loader_secure":null,"loader_stateless":null,"loader_type":null,"nv_ram":null,"shim":null,"sm_bios":null,"type":"hvm","type_arch":"x86_64","type_machine":"q35"},"perf":null,"pm":null,"resource":null,"running":true,"sec_label":null,"sys_info":null,"throttle_groups":null,"title":null,"type":"kvm","uuid":"1d3d2721-a2f0-49d0-a458-a905c4b6e5cd","vcpu":2,"vcpu_cpuset":null,"vcpu_current":null,"vcpu_placement":null,"vcpus":null},"sensitive_attributes":[],"dependencies":["libvirt_cloudinit_disk.commoninit","libvirt_volume.cloudinit","libvirt_volume.ubuntu_base_homer","libvirt_volume.ubuntu_disk"]}]},{"mode":"managed","type":"libvirt_domain","name":"node_01","provider":"provider[\"registry.opentofu.org/dmacvicar/libvirt\"].kvm-homer","instances":[{"schema_version":0,"attributes":{"autostart":true,"block_io_tune":null,"bootloader":null,"bootloader_args":null,"clock":null,"cpu":null,"cpu_tune":null,"create":null,"current_memory":null,"current_memory_unit":null,"default_io_thread":null,"description":null,"destroy":null,"devices":{"audios":null,"channels":null,"consoles":null,"controllers":null,"crypto":null,"disks":[{"acpi":null,"address":null,"alias":null,"auth":null,"backend_domain":null,"backing_store":null,"block_io":null,"boot":null,"device":null,"driver":{"ats":null,"cache":null,"copy_on_read":null,"detect_zeros":null,"discard":null,"discard_no_unref":null,"error_policy":null,"event_idx":null,"io":null,"io_event_fd":null,"io_thread":null,"io_threads":null,"iommu":null,"metadata_cache":null,"name":"qemu","packed":null,"page_per_vq":null,"queue_size":null,"queues":null,"rerror_policy":null,"type":"qcow2"},"encryption":null,"geometry":null,"io_tune":null,"mirror":null,"model":null,"product":null,"raw_io":null,"read_only":null,"serial":null,"sgio":null,"shareable":null,"snapshot":null,"source":{"block":null,"cookies":null,"data_store":null,"dir":null,"encryption":null,"file":{"fd_group":null,"file":"/srv/vms/kube-node-32.qcow2","sec_label":null},"index":null,"network":null,"nvme":null,"readahead":null,"reservations":null,"slices":null,"ssl":null,"startup_policy":null,"timeout":null,"vhost_user":null,"vhost_vdpa":null,"volume":null},"target":{"bus":"virtio","dev":"vda","removable":null,"rotation_rate":null,"tray":null},"throttle_filters":null,"transient":null,"vendor":null,"wwn":null},{"acpi":null,"address":null,"alias":null,"auth":null,"backend_domain":null,"backing_store":null,"block_io":null,"boot":null,"device":"cdrom","driver":{"ats":null,"cache":null,"copy_on_read":null,"detect_zeros":null,"discard":null,"discard_no_unref":null,"error_policy":null,"event_idx":null,"io":null,"io_event_fd":null,"io_thread":null,"io_threads":null,"iommu":null,"metadata_cache":null,"name":"qemu","packed":null,"page_per_vq":null,"queue_size":null,"queues":null,"rerror_policy":null,"type":"raw"},"encryption":null,"geometry":null,"io_tune":null,"mirror":null,"model":null,"product":null,"raw_io":null,"read_only":null,"serial":null,"sgio":null,"shareable":null,"snapshot":null,"source":{"block":null,"cookies":null,"data_store":null,"dir":null,"encryption":null,"file":{"fd_group":null,"file":"/srv/vms/kube-node-32-cloudinit.iso","sec_label":null},"index":null,"network":null,"nvme":null,"readahead":null,"reservations":null,"slices":null,"ssl":null,"startup_policy":null,"timeout":null,"vhost_user":null,"vhost_vdpa":null,"volume":null},"target":{"bus":"sata","dev":"sda","removable":null,"rotation_rate":null,"tray":null},"throttle_filters":null,"transient":null,"vendor":null,"wwn":null}],"emulator":null,"filesystems":null,"graphics":null,"hostdevs":null,"hubs":null,"inputs":null,"interfaces":[{"acpi":null,"address":null,"alias":null,"backend":null,"backend_domain":null,"bandwidth":null,"boot":null,"coalesce":null,"down_script":null,"driver":null,"filter_ref":null,"guest":null,"ip":null,"link":null,"mac":null,"managed":null,"model":{"type":"virtio"},"mtu":null,"port_forward":null,"port_options":null,"rom":null,"route":null,"script":null,"source":{"bridge":{"bridge":"br0"},"client":null,"direct":null,"ethernet":null,"hostdev":null,"internal":null,"mcast":null,"network":null,"null":null,"server":null,"udp":null,"user":null,"vdpa":null,"vds":null,"vhost_user":null},"target":null,"teaming":null,"trust_guest_rx_filters":null,"tune":null,"virtual_port":null,"vlan":null,"wait_for_ip":null}],"iommu":null,"leases":null,"mem_balloon":null,"memorydevs":null,"nvram":null,"panics":null,"parallels":null,"pstore":null,"redir_devs":null,"redir_filters":null,"rngs":null,"serials":[{"acpi":null,"address":null,"alias":null,"log":null,"protocol":null,"source":null,"target":null}],"shmems":null,"smartcards":null,"sounds":null,"tpms":null,"videos":null,"vsock":null,"watchdogs":null},"features":null,"gen_id":null,"hwuuid":null,"id":55,"id_map":null,"io_thread_i_ds":null,"io_threads":null,"key_wrap":null,"launch_security":null,"maximum_memory":null,"maximum_memory_slots":null,"maximum_memory_unit":null,"memory":8192,"memory_backing":null,"memory_dump_core":null,"memory_tune":null,"memory_unit":"MiB","metadata":null,"name":"kube-node-32","numa_tune":null,"on_crash":null,"on_poweroff":null,"on_reboot":null,"os":{"acpi":null,"bios":null,"boot_devices":null,"boot_menu":null,"cmdline":null,"dtb":null,"firmware":null,"firmware_info":null,"init":null,"init_args":null,"init_dir":null,"init_env":null,"init_group":null,"init_user":null,"initrd":null,"kernel":null,"loader":null,"loader_format":null,"loader_readonly":null,"loader_secure":null,"loader_stateless":null,"loader_type":null,"nv_ram":null,"shim":null,"sm_bios":null,"type":"hvm","type_arch":"x86_64","type_machine":"q35"},"perf":null,"pm":null,"resource":null,"running":true,"sec_label":null,"sys_info":null,"throttle_groups":null,"title":null,"type":"kvm","uuid":"9a5c29bb-6af7-441a-ba01-143e87cf4a1c","vcpu":4,"vcpu_cpuset":null,"vcpu_current":null,"vcpu_placement":null,"vcpus":null},"sensitive_attributes":[],"dependencies":["data.local_file.join_command","libvirt_cloudinit_disk.commoninit","libvirt_cloudinit_disk.commoninit_node_01","libvirt_domain.master","libvirt_volume.cloudinit","libvirt_volume.cloudinit_node_01","libvirt_volume.node_01_disk","libvirt_volume.ubuntu_base_homer","libvirt_volume.ubuntu_disk","null_resource.kubeadm_token"]}]},{"mode":"managed","type":"libvirt_domain","name":"node_02","provider":"provider[\"registry.opentofu.org/dmacvicar/libvirt\"].kvm-beelink","instances":[{"schema_version":0,"attributes":{"autostart":true,"block_io_tune":null,"bootloader":null,"bootloader_args":null,"clock":null,"cpu":null,"cpu_tune":null,"create":null,"current_memory":null,"current_memory_unit":null,"default_io_thread":null,"description":null,"destroy":null,"devices":{"audios":null,"channels":null,"consoles":null,"controllers":null,"crypto":null,"disks":[{"acpi":null,"address":null,"alias":null,"auth":null,"backend_domain":null,"backing_store":null,"block_io":null,"boot":null,"device":null,"driver":{"ats":null,"cache":null,"copy_on_read":null,"detect_zeros":null,"discard":null,"discard_no_unref":null,"error_policy":null,"event_idx":null,"io":null,"io_event_fd":null,"io_thread":null,"io_threads":null,"iommu":null,"metadata_cache":null,"name":"qemu","packed":null,"page_per_vq":null,"queue_size":null,"queues":null,"rerror_policy":null,"type":"qcow2"},"encryption":null,"geometry":null,"io_tune":null,"mirror":null,"model":null,"product":null,"raw_io":null,"read_only":null,"serial":null,"sgio":null,"shareable":null,"snapshot":null,"source":{"block":null,"cookies":null,"data_store":null,"dir":null,"encryption":null,"file":{"fd_group":null,"file":"/var/lib/libvirt/images/kube-node-33.qcow2","sec_label":null},"index":null,"network":null,"nvme":null,"readahead":null,"reservations":null,"slices":null,"ssl":null,"startup_policy":null,"timeout":null,"vhost_user":null,"vhost_vdpa":null,"volume":null},"target":{"bus":"virtio","dev":"vda","removable":null,"rotation_rate":null,"tray":null},"throttle_filters":null,"transient":null,"vendor":null,"wwn":null},{"acpi":null,"address":null,"alias":null,"auth":null,"backend_domain":null,"backing_store":null,"block_io":null,"boot":null,"device":"cdrom","driver":{"ats":null,"cache":null,"copy_on_read":null,"detect_zeros":null,"discard":null,"discard_no_unref":null,"error_policy":null,"event_idx":null,"io":null,"io_event_fd":null,"io_thread":null,"io_threads":null,"iommu":null,"metadata_cache":null,"name":"qemu","packed":null,"page_per_vq":null,"queue_size":null,"queues":null,"rerror_policy":null,"type":"raw"},"encryption":null,"geometry":null,"io_tune":null,"mirror":null,"model":null,"product":null,"raw_io":null,"read_only":null,"serial":null,"sgio":null,"shareable":null,"snapshot":null,"source":{"block":null,"cookies":null,"data_store":null,"dir":null,"encryption":null,"file":{"fd_group":null,"file":"/var/lib/libvirt/images/kube-node-33-cloudinit.iso","sec_label":null},"index":null,"network":null,"nvme":null,"readahead":null,"reservations":null,"slices":null,"ssl":null,"startup_policy":null,"timeout":null,"vhost_user":null,"vhost_vdpa":null,"volume":null},"target":{"bus":"sata","dev":"sda","removable":null,"rotation_rate":null,"tray":null},"throttle_filters":null,"transient":null,"vendor":null,"wwn":null}],"emulator":null,"filesystems":null,"graphics":null,"hostdevs":null,"hubs":null,"inputs":null,"interfaces":[{"acpi":null,"address":null,"alias":null,"backend":null,"backend_domain":null,"bandwidth":null,"boot":null,"coalesce":null,"down_script":null,"driver":null,"filter_ref":null,"guest":null,"ip":null,"link":null,"mac":null,"managed":null,"model":{"type":"virtio"},"mtu":null,"port_forward":null,"port_options":null,"rom":null,"route":null,"script":null,"source":{"bridge":{"bridge":"br0"},"client":null,"direct":null,"ethernet":null,"hostdev":null,"internal":null,"mcast":null,"network":null,"null":null,"server":null,"udp":null,"user":null,"vdpa":null,"vds":null,"vhost_user":null},"target":null,"teaming":null,"trust_guest_rx_filters":null,"tune":null,"virtual_port":null,"vlan":null,"wait_for_ip":null}],"iommu":null,"leases":null,"mem_balloon":null,"memorydevs":null,"nvram":null,"panics":null,"parallels":null,"pstore":null,"redir_devs":null,"redir_filters":null,"rngs":null,"serials":[{"acpi":null,"address":null,"alias":null,"log":null,"protocol":null,"source":null,"target":null}],"shmems":null,"smartcards":null,"sounds":null,"tpms":null,"videos":null,"vsock":null,"watchdogs":null},"features":null,"gen_id":null,"hwuuid":null,"id":5,"id_map":null,"io_thread_i_ds":null,"io_threads":null,"key_wrap":null,"launch_security":null,"maximum_memory":null,"maximum_memory_slots":null,"maximum_memory_unit":null,"memory":8192,"memory_backing":null,"memory_dump_core":null,"memory_tune":null,"memory_unit":"MiB","metadata":null,"name":"kube-node-33","numa_tune":null,"on_crash":null,"on_poweroff":null,"on_reboot":null,"os":{"acpi":null,"bios":null,"boot_devices":null,"boot_menu":null,"cmdline":null,"dtb":null,"firmware":null,"firmware_info":null,"init":null,"init_args":null,"init_dir":null,"init_env":null,"init_group":null,"init_user":null,"initrd":null,"kernel":null,"loader":null,"loader_format":null,"loader_readonly":null,"loader_secure":null,"loader_stateless":null,"loader_type":null,"nv_ram":null,"shim":null,"sm_bios":null,"type":"hvm","type_arch":"x86_64","type_machine":"q35"},"perf":null,"pm":null,"resource":null,"running":true,"sec_label":null,"sys_info":null,"throttle_groups":null,"title":null,"type":"kvm","uuid":"cb5128ea-1dfa-4b28-b25c-fe59fd5f8da9","vcpu":4,"vcpu_cpuset":null,"vcpu_current":null,"vcpu_placement":null,"vcpus":null},"sensitive_attributes":[],"dependencies":["data.local_file.join_command","libvirt_cloudinit_disk.commoninit","libvirt_cloudinit_disk.commoninit_node_02","libvirt_domain.master","libvirt_volume.cloudinit","libvirt_volume.cloudinit_node_02","libvirt_volume.node_02_disk","libvirt_volume.ubuntu_base_beelink","libvirt_volume.ubuntu_base_homer","libvirt_volume.ubuntu_disk","null_resource.kubeadm_token"]}]},{"mode":"managed","type":"libvirt_volume","name":"cloudinit","provider":"provider[\"registry.opentofu.org/dmacvicar/libvirt\"].kvm-homer","instances":[{"schema_version":0,"attributes":{"allocation":49152,"allocation_unit":null,"backing_store":null,"capacity":49152,"capacity_unit":null,"create":{"content":{"url":"/var/folders/dq/h32yg2mx55b2m8hxmf1yh66r0000gn/T/terraform-provider-libvirt-cloudinit/cloudinit-9b5efd668378a2cc.iso"}},"id":"/srv/vms/kube-master-31-cloudinit.iso","key":"/srv/vms/kube-master-31-cloudinit.iso","name":"kube-master-31-cloudinit.iso","path":"/srv/vms/kube-master-31-cloudinit.iso","physical":49152,"physical_unit":null,"pool":"default","target":null,"type":null},"sensitive_attributes":[],"dependencies":["libvirt_cloudinit_disk.commoninit"]}]},{"mode":"managed","type":"libvirt_volume","name":"cloudinit_node_01","provider":"provider[\"registry.opentofu.org/dmacvicar/libvirt\"].kvm-homer","instances":[{"schema_version":0,"attributes":{"allocation":49152,"allocation_unit":null,"backing_store":null,"capacity":49152,"capacity_unit":null,"create":{"content":{"url":"/var/folders/dq/h32yg2mx55b2m8hxmf1yh66r0000gn/T/terraform-provider-libvirt-cloudinit/cloudinit-9cda86046375ec96.iso"}},"id":"/srv/vms/kube-node-32-cloudinit.iso","key":"/srv/vms/kube-node-32-cloudinit.iso","name":"kube-node-32-cloudinit.iso","path":"/srv/vms/kube-node-32-cloudinit.iso","physical":49152,"physical_unit":null,"pool":"default","target":null,"type":null},"sensitive_attributes":[],"dependencies":["data.local_file.join_command","libvirt_cloudinit_disk.commoninit","libvirt_cloudinit_disk.commoninit_node_01","libvirt_domain.master","libvirt_volume.cloudinit","libvirt_volume.ubuntu_base_homer","libvirt_volume.ubuntu_disk","null_resource.kubeadm_token"]}]},{"mode":"managed","type":"libvirt_volume","name":"cloudinit_node_02","provider":"provider[\"registry.opentofu.org/dmacvicar/libvirt\"].kvm-beelink","instances":[{"schema_version":0,"attributes":{"allocation":49152,"allocation_unit":null,"backing_store":null,"capacity":49152,"capacity_unit":null,"create":{"content":{"url":"/var/folders/dq/h32yg2mx55b2m8hxmf1yh66r0000gn/T/terraform-provider-libvirt-cloudinit/cloudinit-c168c9baba7630ed.iso"}},"id":"/var/lib/libvirt/images/kube-node-33-cloudinit.iso","key":"/var/lib/libvirt/images/kube-node-33-cloudinit.iso","name":"kube-node-33-cloudinit.iso","path":"/var/lib/libvirt/images/kube-node-33-cloudinit.iso","physical":49152,"physical_unit":null,"pool":"default","target":null,"type":null},"sensitive_attributes":[],"dependencies":["data.local_file.join_command","libvirt_cloudinit_disk.commoninit","libvirt_cloudinit_disk.commoninit_node_02","libvirt_domain.master","libvirt_volume.cloudinit","libvirt_volume.ubuntu_base_homer","libvirt_volume.ubuntu_disk","null_resource.kubeadm_token"]}]},{"mode":"managed","type":"libvirt_volume","name":"node_01_disk","provider":"provider[\"registry.opentofu.org/dmacvicar/libvirt\"].kvm-homer","instances":[{"schema_version":0,"attributes":{"allocation":10389749760,"allocation_unit":null,"backing_store":{"format":{"type":"qcow2"},"path":"/srv/vms/ubuntu-24.04-base.qcow2","permissions":null},"capacity":21474836480,"capacity_unit":null,"create":null,"id":"/srv/vms/kube-node-32.qcow2","key":"/srv/vms/kube-node-32.qcow2","name":"kube-node-32.qcow2","path":"/srv/vms/kube-node-32.qcow2","physical":10389684224,"physical_unit":null,"pool":"default","target":{"cluster_size":null,"cluster_size_unit":null,"compat":null,"encryption":null,"features":null,"format":{"type":"qcow2"},"path":"/srv/vms/kube-node-32.qcow2","permissions":null,"timestamps":null},"type":null},"sensitive_attributes":[],"dependencies":["libvirt_volume.ubuntu_base_homer"]}]},{"mode":"managed","type":"libvirt_volume","name":"node_02_disk","provider":"provider[\"registry.opentofu.org/dmacvicar/libvirt\"].kvm-beelink","instances":[{"schema_version":0,"attributes":{"allocation":200704,"allocation_unit":null,"backing_store":{"format":{"type":"qcow2"},"path":"/var/lib/libvirt/images/ubuntu-24.04-base.qcow2","permissions":null},"capacity":21474836480,"capacity_unit":null,"create":null,"id":"/var/lib/libvirt/images/kube-node-33.qcow2","key":"/var/lib/libvirt/images/kube-node-33.qcow2","name":"kube-node-33.qcow2","path":"/var/lib/libvirt/images/kube-node-33.qcow2","physical":196928,"physical_unit":null,"pool":"default","target":{"cluster_size":null,"cluster_size_unit":null,"compat":null,"encryption":null,"features":null,"format":{"type":"qcow2"},"path":"/var/lib/libvirt/images/kube-node-33.qcow2","permissions":null,"timestamps":null},"type":null},"sensitive_attributes":[],"dependencies":["libvirt_volume.ubuntu_base_beelink"]}]},{"mode":"managed","type":"libvirt_volume","name":"ubuntu_base_beelink","provider":"provider[\"registry.opentofu.org/dmacvicar/libvirt\"].kvm-beelink","instances":[{"schema_version":0,"attributes":{"allocation":626663424,"allocation_unit":null,"backing_store":null,"capacity":3758096384,"capacity_unit":null,"create":{"content":{"url":"https://cloud-images.ubuntu.com/noble/current/noble-server-cloudimg-amd64.img"}},"id":"/var/lib/libvirt/images/ubuntu-24.04-base.qcow2","key":"/var/lib/libvirt/images/ubuntu-24.04-base.qcow2","name":"ubuntu-24.04-base.qcow2","path":"/var/lib/libvirt/images/ubuntu-24.04-base.qcow2","physical":626655744,"physical_unit":null,"pool":"default","target":{"cluster_size":null,"cluster_size_unit":null,"compat":null,"encryption":null,"features":null,"format":{"type":"qcow2"},"path":"/var/lib/libvirt/images/ubuntu-24.04-base.qcow2","permissions":null,"timestamps":null},"type":null},"sensitive_attributes":[]}]},{"mode":"managed","type":"libvirt_volume","name":"ubuntu_base_homer","provider":"provider[\"registry.opentofu.org/dmacvicar/libvirt\"].kvm-homer","instances":[{"schema_version":0,"attributes":{"allocation":626663424,"allocation_unit":null,"backing_store":null,"capacity":3758096384,"capacity_unit":null,"create":{"content":{"url":"https://cloud-images.ubuntu.com/noble/current/noble-server-cloudimg-amd64.img"}},"id":"/srv/vms/ubuntu-24.04-base.qcow2","key":"/srv/vms/ubuntu-24.04-base.qcow2","name":"ubuntu-24.04-base.qcow2","path":"/srv/vms/ubuntu-24.04-base.qcow2","physical":626655744,"physical_unit":null,"pool":"default","target":{"cluster_size":null,"cluster_size_unit":null,"compat":null,"encryption":null,"features":null,"format":{"type":"qcow2"},"path":"/srv/vms/ubuntu-24.04-base.qcow2","permissions":null,"timestamps":null},"type":null},"sensitive_attributes":[]}]},{"mode":"managed","type":"libvirt_volume","name":"ubuntu_disk","provider":"provider[\"registry.opentofu.org/dmacvicar/libvirt\"].kvm-homer","instances":[{"schema_version":0,"attributes":{"allocation":4332130304,"allocation_unit":null,"backing_store":{"format":{"type":"qcow2"},"path":"/srv/vms/ubuntu-24.04-base.qcow2","permissions":null},"capacity":21474836480,"capacity_unit":null,"create":null,"id":"/srv/vms/kube-master-31.qcow2","key":"/srv/vms/kube-master-31.qcow2","name":"kube-master-31.qcow2","path":"/srv/vms/kube-master-31.qcow2","physical":4332060672,"physical_unit":null,"pool":"default","target":{"cluster_size":null,"cluster_size_unit":null,"compat":null,"encryption":null,"features":null,"format":{"type":"qcow2"},"path":"/srv/vms/kube-master-31.qcow2","permissions":null,"timestamps":null},"type":null},"sensitive_attributes":[],"dependencies":["libvirt_volume.ubuntu_base_homer"]}]},{"mode":"managed","type":"null_resource","name":"kubeadm_token","provider":"provider[\"registry.opentofu.org/hashicorp/null\"]","instances":[{"schema_version":0,"attributes":{"id":"1313601011663420265","triggers":null},"sensitive_attributes":[],"dependencies":["libvirt_cloudinit_disk.commoninit","libvirt_domain.master","libvirt_volume.cloudinit","libvirt_volume.ubuntu_base_homer","libvirt_volume.ubuntu_disk"]}]},{"mode":"managed","type":"null_resource","name":"kubeconfig","provider":"provider[\"registry.opentofu.org/hashicorp/null\"]","instances":[{"schema_version":0,"attributes":{"id":"8367063358226307615","triggers":null},"sensitive_attributes":[]}]}],"check_results":null} diff --git a/kubernetes-kvm-terraform/terraform.tfstate.backup b/kubernetes-kvm-terraform/terraform.tfstate.backup index 5180af4..3c3b645 100644 --- a/kubernetes-kvm-terraform/terraform.tfstate.backup +++ b/kubernetes-kvm-terraform/terraform.tfstate.backup @@ -1 +1 @@ -{"version":4,"terraform_version":"1.11.2","serial":64,"lineage":"69f81358-9017-b0fa-2e3d-404364b1f698","outputs":{"master_ip":{"value":"192.168.0.31","type":"string"},"node_01_ip":{"value":"192.168.0.32","type":"string"}},"resources":[{"mode":"data","type":"local_file","name":"join_command","provider":"provider[\"registry.opentofu.org/hashicorp/local\"]","instances":[{"schema_version":0,"attributes":{"content":"kubeadm join 192.168.0.31:6443 --token ps457c.7g4koxq4awqigdwy --discovery-token-ca-cert-hash sha256:bd969ebcf4c68c424a76c8fc483f194ab8b32a2fd52f1cf992e164f496907447 \n","content_base64":"a3ViZWFkbSBqb2luIDE5Mi4xNjguMC4zMTo2NDQzIC0tdG9rZW4gcHM0NTdjLjdnNGtveHE0YXdxaWdkd3kgLS1kaXNjb3ZlcnktdG9rZW4tY2EtY2VydC1oYXNoIHNoYTI1NjpiZDk2OWViY2Y0YzY4YzQyNGE3NmM4ZmM0ODNmMTk0YWI4YjMyYTJmZDUyZjFjZjk5MmUxNjRmNDk2OTA3NDQ3IAo=","content_base64sha256":"Nfe4cEuj9IcdF7E6B/NCohZAmoqEE1jkbv+5/fFg6Q4=","content_base64sha512":"/9NQ9J2SuaSzn2wG48VRTANdbi9tdr9AaVq9YLjYOGHRyJyrtntbjgJy636+fuhUvAcHXIad+t9ey4aEpOiWdg==","content_md5":"a50d45f29d7a87e59055f88ba97a6778","content_sha1":"431c014c1cef740ad9ae9e2e028d2ab426eb4f1d","content_sha256":"35f7b8704ba3f4871d17b13a07f342a216409a8a841358e46effb9fdf160e90e","content_sha512":"ffd350f49d92b9a4b39f6c06e3c5514c035d6e2f6d76bf40695abd60b8d83861d1c89cabb67b5b8e0272eb7ebe7ee854bc07075c869dfadf5ecb8684a4e89676","filename":"./join-command.txt","id":"431c014c1cef740ad9ae9e2e028d2ab426eb4f1d"},"sensitive_attributes":[]}]},{"mode":"managed","type":"libvirt_cloudinit_disk","name":"commoninit","provider":"provider[\"registry.opentofu.org/dmacvicar/libvirt\"]","instances":[{"schema_version":0,"attributes":{"id":"9b5efd668378a2cc","meta_data":"\"instance-id\": \"kube-master-31\"\n\"local-hostname\": \"kube-master-31\"\n","name":"kube-master-31-cloudinit.iso","network_config":"version: 2\nethernets:\n eth0:\n match:\n driver: virtio_net\n addresses:\n - 192.168.0.31/24\n routes:\n - to: default\n via: 192.168.0.4\n nameservers:\n addresses:\n - 8.8.8.8\n","path":"/var/folders/dq/h32yg2mx55b2m8hxmf1yh66r0000gn/T/terraform-provider-libvirt-cloudinit/cloudinit-9b5efd668378a2cc.iso","size":49152,"user_data":"#cloud-config\nhostname: kube-master-31\nusers:\n - name: ubuntu\n sudo: ALL=(ALL) NOPASSWD:ALL\n shell: /bin/bash\n ssh_authorized_keys:\n - ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDTLxDOQMsumLpjIzMXvpN/hvoMfbVFcl7TDKXTYLBJIvTOLWO/elI3PeJkXNAlaIT1lgJQB7NwQED+DciPLjCLzkG3aSxuJdZRo0Z+vHm9CEUkWnq8icLTQs0zYadK6p24VpMqT61cGNv9L/riciMRWT6l2SdRN2ZBR6MhCXMZy/XgRRlcV9iN1n9T0Q9aZjaQ2CjgG59wTLdQ0bHRlFBSt2q6erFmCIiBHUJba4avDVRvYryvMgkopayL/eK2gxaloMjcMt4z+zIokxhQONPPU2AvqMcqQIsWGQYIzIkJ0UOO8ly/PAFCpgvukWJepmZR30vVBALFCRZCUN1zMbI3 jan.novak@Jans-MacBook-Air-9.local\n\nchpasswd:\n list: |\n ubuntu:yourpassword\n expire: false\nssh_pwauth: true\npackage_update: true\npackages:\n - qemu-guest-agent\n - openssh-server\n - apt-transport-https\n - ca-certificates\n - curl\n - gnupg \n\nwrite_files:\n - path: /etc/modules-load.d/k8s.conf\n content: |\n overlay\n br_netfilter\n\n - path: /etc/sysctl.d/k8s.conf\n content: |\n net.bridge.bridge-nf-call-iptables = 1\n net.bridge.bridge-nf-call-ip6tables = 1\n net.ipv4.ip_forward = 1\n\n - path: /etc/containerd/config.toml\n content: |\n version = 2\n [plugins.\"io.containerd.grpc.v1.cri\".containerd.runtimes.runc]\n runtime_type = \"io.containerd.runc.v2\"\n [plugins.\"io.containerd.grpc.v1.cri\".containerd.runtimes.runc.options]\n SystemdCgroup = true\n\n # Update existing containerd config to enable registry config_path\n - path: /etc/containerd/config.toml\n content: |\n version = 2\n [plugins.\"io.containerd.grpc.v1.cri\".containerd.runtimes.runc]\n runtime_type = \"io.containerd.runc.v2\"\n [plugins.\"io.containerd.grpc.v1.cri\".containerd.runtimes.runc.options]\n SystemdCgroup = true\n [plugins.\"io.containerd.grpc.v1.cri\".registry]\n config_path = \"/etc/containerd/certs.d\"\n\n # Mirror configs for each upstream registry\n - path: /etc/containerd/certs.d/docker.io/hosts.toml\n content: |\n server = \"https://registry-1.docker.io\"\n [host.\"http://192.168.0.30:5000/v2/docker.io\"]\n capabilities = [\"pull\", \"resolve\"]\n skip_verify = true\n override_path = true\n\n - path: /etc/containerd/certs.d/registry.k8s.io/hosts.toml\n content: |\n server = \"https://registry.k8s.io\"\n [host.\"http://192.168.0.30:5000/v2/registry.k8s.io\"]\n capabilities = [\"pull\", \"resolve\"]\n skip_verify = true\n override_path = true\n\n - path: /etc/containerd/certs.d/ghcr.io/hosts.toml\n content: |\n server = \"https://ghcr.io\"\n [host.\"http://192.168.0.30:5000/v2/ghcr.io\"]\n capabilities = [\"pull\", \"resolve\"]\n skip_verify = true\n override_path = true\n\n - path: /etc/containerd/certs.d/quay.io/hosts.toml\n content: |\n server = \"https://quay.io\"\n [host.\"http://192.168.0.30:5000/v2/quay.io\"]\n capabilities = [\"pull\", \"resolve\"]\n skip_verify = true\n override_path = true \n\n - path: /root/kubeadm-config.yaml\n content: |\n apiVersion: kubeadm.k8s.io/v1beta3\n kind: InitConfiguration\n nodeRegistration:\n criSocket: unix:///run/containerd/containerd.sock\n ---\n apiVersion: kubeadm.k8s.io/v1beta3\n kind: ClusterConfiguration\n networking:\n podSubnet: \"10.244.0.0/16\"\n ---\n apiVersion: kubelet.config.k8s.io/v1beta1\n kind: KubeletConfiguration\n cgroupDriver: systemd\n\n - path: /etc/profile.d/kubectl.sh\n content: |\n alias k='kubectl'\n source \u003c(kubectl completion bash)\n complete -o default -F __start_kubectl k \n\nruncmd:\n - systemctl enable --now qemu-guest-agent\n - systemctl enable --now ssh\n\n # relevant to kubernetes\n - modprobe overlay\n - modprobe br_netfilter\n - sysctl --system\n\n # containerd\n - curl -fsSL https://download.docker.com/linux/ubuntu/gpg | gpg --dearmor -o /etc/apt/keyrings/docker.gpg\n - echo \"deb [arch=amd64 signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable\" \u003e /etc/apt/sources.list.d/docker.list\n - apt-get update \u0026\u0026 apt-get install -y containerd.io\n - systemctl restart containerd\n\n # kubeadm/kubelet/kubectl v1.32\n - curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.32/deb/Release.key | gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg\n - echo \"deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/v1.32/deb/ /\" \u003e /etc/apt/sources.list.d/kubernetes.list\n - apt-get update \u0026\u0026 apt-get install -y kubelet kubeadm kubectl\n - apt-mark hold kubelet kubeadm kubectl\n\n\n # init cluster\n - kubeadm init --config=/root/kubeadm-config.yaml --skip-phases=addon/kube-proxy\n \n # kubeconfig for root\n - mkdir -p /root/.kube \u0026\u0026 cp /etc/kubernetes/admin.conf /root/.kube/config\n\n # wait for API server\n - |\n echo \"Waiting for API server...\"\n until kubectl --kubeconfig=/etc/kubernetes/admin.conf get nodes ; do\n echo \"Waiting for API server...\"\n sleep 5\n done\n\n # CNI (cilium example, swap for flannel/calico as needed)\n - |\n CILIUM_CLI_VERSION=$(curl -s https://raw.githubusercontent.com/cilium/cilium-cli/main/stable.txt)\n curl -L --remote-name-all https://github.com/cilium/cilium-cli/releases/download/${CILIUM_CLI_VERSION}/cilium-linux-amd64.tar.gz\n tar xzvf cilium-linux-amd64.tar.gz -C /usr/local/bin\n cilium install --kubeconfig=/etc/kubernetes/admin.conf --set kubeProxyReplacement=true --wait \n"},"sensitive_attributes":[]}]},{"mode":"managed","type":"libvirt_cloudinit_disk","name":"commoninit_node_01","provider":"provider[\"registry.opentofu.org/dmacvicar/libvirt\"]","instances":[{"schema_version":0,"attributes":{"id":"2d6abdd2982994a2","meta_data":"\"instance-id\": \"kube-node-32\"\n\"local-hostname\": \"kube-node-32\"\n","name":"kube-node-32-cloudinit.iso","network_config":"version: 2\nethernets:\n eth0:\n match:\n driver: virtio_net\n addresses:\n - 192.168.0.32/24\n routes:\n - to: default\n via: 192.168.0.4\n nameservers:\n addresses:\n - 8.8.8.8\n","path":"/var/folders/dq/h32yg2mx55b2m8hxmf1yh66r0000gn/T/terraform-provider-libvirt-cloudinit/cloudinit-2d6abdd2982994a2.iso","size":49152,"user_data":"#cloud-config\nhostname: kube-node-32\nusers:\n - name: ubuntu\n sudo: ALL=(ALL) NOPASSWD:ALL\n shell: /bin/bash\n ssh_authorized_keys:\n - ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDTLxDOQMsumLpjIzMXvpN/hvoMfbVFcl7TDKXTYLBJIvTOLWO/elI3PeJkXNAlaIT1lgJQB7NwQED+DciPLjCLzkG3aSxuJdZRo0Z+vHm9CEUkWnq8icLTQs0zYadK6p24VpMqT61cGNv9L/riciMRWT6l2SdRN2ZBR6MhCXMZy/XgRRlcV9iN1n9T0Q9aZjaQ2CjgG59wTLdQ0bHRlFBSt2q6erFmCIiBHUJba4avDVRvYryvMgkopayL/eK2gxaloMjcMt4z+zIokxhQONPPU2AvqMcqQIsWGQYIzIkJ0UOO8ly/PAFCpgvukWJepmZR30vVBALFCRZCUN1zMbI3 jan.novak@Jans-MacBook-Air-9.local\n\nchpasswd:\n list: |\n ubuntu:yourpassword\n expire: false\nssh_pwauth: true\npackage_update: true\npackages:\n - qemu-guest-agent\n - openssh-server\n - apt-transport-https\n - ca-certificates\n - curl\n - gnupg \n\nwrite_files:\n - path: /etc/modules-load.d/k8s.conf\n content: |\n overlay\n br_netfilter\n\n - path: /etc/sysctl.d/k8s.conf\n content: |\n net.bridge.bridge-nf-call-iptables = 1\n net.bridge.bridge-nf-call-ip6tables = 1\n net.ipv4.ip_forward = 1\n\n - path: /etc/containerd/config.toml\n content: |\n version = 2\n [plugins.\"io.containerd.grpc.v1.cri\".containerd.runtimes.runc]\n runtime_type = \"io.containerd.runc.v2\"\n [plugins.\"io.containerd.grpc.v1.cri\".containerd.runtimes.runc.options]\n SystemdCgroup = true\n\n # Update existing containerd config to enable registry config_path\n - path: /etc/containerd/config.toml\n content: |\n version = 2\n [plugins.\"io.containerd.grpc.v1.cri\".containerd.runtimes.runc]\n runtime_type = \"io.containerd.runc.v2\"\n [plugins.\"io.containerd.grpc.v1.cri\".containerd.runtimes.runc.options]\n SystemdCgroup = true\n [plugins.\"io.containerd.grpc.v1.cri\".registry]\n config_path = \"/etc/containerd/certs.d\"\n\n # Mirror configs for each upstream registry\n - path: /etc/containerd/certs.d/docker.io/hosts.toml\n content: |\n server = \"https://registry-1.docker.io\"\n [host.\"http://192.168.0.30:5000/v2/docker.io\"]\n capabilities = [\"pull\", \"resolve\"]\n skip_verify = true\n override_path = true\n\n - path: /etc/containerd/certs.d/registry.k8s.io/hosts.toml\n content: |\n server = \"https://registry.k8s.io\"\n [host.\"http://192.168.0.30:5000/v2/registry.k8s.io\"]\n capabilities = [\"pull\", \"resolve\"]\n skip_verify = true\n override_path = true\n\n - path: /etc/containerd/certs.d/ghcr.io/hosts.toml\n content: |\n server = \"https://ghcr.io\"\n [host.\"http://192.168.0.30:5000/v2/ghcr.io\"]\n capabilities = [\"pull\", \"resolve\"]\n skip_verify = true\n override_path = true\n\n - path: /etc/containerd/certs.d/quay.io/hosts.toml\n content: |\n server = \"https://quay.io\"\n [host.\"http://192.168.0.30:5000/v2/quay.io\"]\n capabilities = [\"pull\", \"resolve\"]\n skip_verify = true\n override_path = true \n\n - path: /root/kubeadm-config.yaml\n content: |\n apiVersion: kubeadm.k8s.io/v1beta3\n kind: InitConfiguration\n nodeRegistration:\n criSocket: unix:///run/containerd/containerd.sock\n ---\n apiVersion: kubeadm.k8s.io/v1beta3\n kind: ClusterConfiguration\n networking:\n podSubnet: \"10.244.0.0/16\"\n ---\n apiVersion: kubelet.config.k8s.io/v1beta1\n kind: KubeletConfiguration\n cgroupDriver: systemd\n\n - path: /etc/profile.d/kubectl.sh\n content: |\n alias k='kubectl'\n source \u003c(kubectl completion bash)\n complete -o default -F __start_kubectl k \n\nruncmd:\n - systemctl enable --now qemu-guest-agent\n - systemctl enable --now ssh\n\n # relevant to kubernetes\n - modprobe overlay\n - modprobe br_netfilter\n - sysctl --system\n\n # containerd\n - curl -fsSL https://download.docker.com/linux/ubuntu/gpg | gpg --dearmor -o /etc/apt/keyrings/docker.gpg\n - echo \"deb [arch=amd64 signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable\" \u003e /etc/apt/sources.list.d/docker.list\n - apt-get update \u0026\u0026 apt-get install -y containerd.io\n - systemctl restart containerd\n\n # kubeadm/kubelet/kubectl v1.32\n - curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.32/deb/Release.key | gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg\n - echo \"deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/v1.32/deb/ /\" \u003e /etc/apt/sources.list.d/kubernetes.list\n - apt-get update \u0026\u0026 apt-get install -y kubelet kubeadm kubectl\n - apt-mark hold kubelet kubeadm kubectl\n\n # join cluster\n - kubeadm join 192.168.0.31:6443 --token ps457c.7g4koxq4awqigdwy --discovery-token-ca-cert-hash sha256:bd969ebcf4c68c424a76c8fc483f194ab8b32a2fd52f1cf992e164f496907447\n\n"},"sensitive_attributes":[],"dependencies":["data.local_file.join_command","libvirt_cloudinit_disk.commoninit","libvirt_domain.master","libvirt_volume.cloudinit","libvirt_volume.ubuntu_base","libvirt_volume.ubuntu_disk","null_resource.kubeadm_token"]}]},{"mode":"managed","type":"libvirt_domain","name":"master","provider":"provider[\"registry.opentofu.org/dmacvicar/libvirt\"]","instances":[{"schema_version":0,"attributes":{"autostart":true,"block_io_tune":null,"bootloader":null,"bootloader_args":null,"clock":null,"cpu":null,"cpu_tune":null,"create":null,"current_memory":null,"current_memory_unit":null,"default_io_thread":null,"description":null,"destroy":null,"devices":{"audios":null,"channels":null,"consoles":null,"controllers":null,"crypto":null,"disks":[{"acpi":null,"address":null,"alias":null,"auth":null,"backend_domain":null,"backing_store":null,"block_io":null,"boot":null,"device":null,"driver":{"ats":null,"cache":null,"copy_on_read":null,"detect_zeros":null,"discard":null,"discard_no_unref":null,"error_policy":null,"event_idx":null,"io":null,"io_event_fd":null,"io_thread":null,"io_threads":null,"iommu":null,"metadata_cache":null,"name":"qemu","packed":null,"page_per_vq":null,"queue_size":null,"queues":null,"rerror_policy":null,"type":"qcow2"},"encryption":null,"geometry":null,"io_tune":null,"mirror":null,"model":null,"product":null,"raw_io":null,"read_only":null,"serial":null,"sgio":null,"shareable":null,"snapshot":null,"source":{"block":null,"cookies":null,"data_store":null,"dir":null,"encryption":null,"file":{"fd_group":null,"file":"/srv/vms/kube-master-31.qcow2","sec_label":null},"index":null,"network":null,"nvme":null,"readahead":null,"reservations":null,"slices":null,"ssl":null,"startup_policy":null,"timeout":null,"vhost_user":null,"vhost_vdpa":null,"volume":null},"target":{"bus":"virtio","dev":"vda","removable":null,"rotation_rate":null,"tray":null},"throttle_filters":null,"transient":null,"vendor":null,"wwn":null},{"acpi":null,"address":null,"alias":null,"auth":null,"backend_domain":null,"backing_store":null,"block_io":null,"boot":null,"device":"cdrom","driver":{"ats":null,"cache":null,"copy_on_read":null,"detect_zeros":null,"discard":null,"discard_no_unref":null,"error_policy":null,"event_idx":null,"io":null,"io_event_fd":null,"io_thread":null,"io_threads":null,"iommu":null,"metadata_cache":null,"name":"qemu","packed":null,"page_per_vq":null,"queue_size":null,"queues":null,"rerror_policy":null,"type":"raw"},"encryption":null,"geometry":null,"io_tune":null,"mirror":null,"model":null,"product":null,"raw_io":null,"read_only":null,"serial":null,"sgio":null,"shareable":null,"snapshot":null,"source":{"block":null,"cookies":null,"data_store":null,"dir":null,"encryption":null,"file":{"fd_group":null,"file":"/srv/vms/kube-master-31-cloudinit.iso","sec_label":null},"index":null,"network":null,"nvme":null,"readahead":null,"reservations":null,"slices":null,"ssl":null,"startup_policy":null,"timeout":null,"vhost_user":null,"vhost_vdpa":null,"volume":null},"target":{"bus":"sata","dev":"sda","removable":null,"rotation_rate":null,"tray":null},"throttle_filters":null,"transient":null,"vendor":null,"wwn":null}],"emulator":null,"filesystems":null,"graphics":null,"hostdevs":null,"hubs":null,"inputs":null,"interfaces":[{"acpi":null,"address":null,"alias":null,"backend":null,"backend_domain":null,"bandwidth":null,"boot":null,"coalesce":null,"down_script":null,"driver":null,"filter_ref":null,"guest":null,"ip":null,"link":null,"mac":null,"managed":null,"model":{"type":"virtio"},"mtu":null,"port_forward":null,"port_options":null,"rom":null,"route":null,"script":null,"source":{"bridge":{"bridge":"br0"},"client":null,"direct":null,"ethernet":null,"hostdev":null,"internal":null,"mcast":null,"network":null,"null":null,"server":null,"udp":null,"user":null,"vdpa":null,"vds":null,"vhost_user":null},"target":null,"teaming":null,"trust_guest_rx_filters":null,"tune":null,"virtual_port":null,"vlan":null,"wait_for_ip":null}],"iommu":null,"leases":null,"mem_balloon":null,"memorydevs":null,"nvram":null,"panics":null,"parallels":null,"pstore":null,"redir_devs":null,"redir_filters":null,"rngs":null,"serials":[{"acpi":null,"address":null,"alias":null,"log":null,"protocol":null,"source":null,"target":null}],"shmems":null,"smartcards":null,"sounds":null,"tpms":null,"videos":null,"vsock":null,"watchdogs":null},"features":null,"gen_id":null,"hwuuid":null,"id":49,"id_map":null,"io_thread_i_ds":null,"io_threads":null,"key_wrap":null,"launch_security":null,"maximum_memory":null,"maximum_memory_slots":null,"maximum_memory_unit":null,"memory":2048,"memory_backing":null,"memory_dump_core":null,"memory_tune":null,"memory_unit":"MiB","metadata":null,"name":"kube-master-31","numa_tune":null,"on_crash":null,"on_poweroff":null,"on_reboot":null,"os":{"acpi":null,"bios":null,"boot_devices":null,"boot_menu":null,"cmdline":null,"dtb":null,"firmware":null,"firmware_info":null,"init":null,"init_args":null,"init_dir":null,"init_env":null,"init_group":null,"init_user":null,"initrd":null,"kernel":null,"loader":null,"loader_format":null,"loader_readonly":null,"loader_secure":null,"loader_stateless":null,"loader_type":null,"nv_ram":null,"shim":null,"sm_bios":null,"type":"hvm","type_arch":"x86_64","type_machine":"q35"},"perf":null,"pm":null,"resource":null,"running":true,"sec_label":null,"sys_info":null,"throttle_groups":null,"title":null,"type":"kvm","uuid":"1d3d2721-a2f0-49d0-a458-a905c4b6e5cd","vcpu":2,"vcpu_cpuset":null,"vcpu_current":null,"vcpu_placement":null,"vcpus":null},"sensitive_attributes":[],"dependencies":["libvirt_cloudinit_disk.commoninit","libvirt_volume.cloudinit","libvirt_volume.ubuntu_base","libvirt_volume.ubuntu_disk"]}]},{"mode":"managed","type":"libvirt_domain","name":"node_01","provider":"provider[\"registry.opentofu.org/dmacvicar/libvirt\"]","instances":[{"schema_version":0,"attributes":{"autostart":true,"block_io_tune":null,"bootloader":null,"bootloader_args":null,"clock":null,"cpu":null,"cpu_tune":null,"create":null,"current_memory":null,"current_memory_unit":null,"default_io_thread":null,"description":null,"destroy":null,"devices":{"audios":null,"channels":null,"consoles":null,"controllers":null,"crypto":null,"disks":[{"acpi":null,"address":null,"alias":null,"auth":null,"backend_domain":null,"backing_store":null,"block_io":null,"boot":null,"device":null,"driver":{"ats":null,"cache":null,"copy_on_read":null,"detect_zeros":null,"discard":null,"discard_no_unref":null,"error_policy":null,"event_idx":null,"io":null,"io_event_fd":null,"io_thread":null,"io_threads":null,"iommu":null,"metadata_cache":null,"name":"qemu","packed":null,"page_per_vq":null,"queue_size":null,"queues":null,"rerror_policy":null,"type":"qcow2"},"encryption":null,"geometry":null,"io_tune":null,"mirror":null,"model":null,"product":null,"raw_io":null,"read_only":null,"serial":null,"sgio":null,"shareable":null,"snapshot":null,"source":{"block":null,"cookies":null,"data_store":null,"dir":null,"encryption":null,"file":{"fd_group":null,"file":"/srv/vms/kube-node-32.qcow2","sec_label":null},"index":null,"network":null,"nvme":null,"readahead":null,"reservations":null,"slices":null,"ssl":null,"startup_policy":null,"timeout":null,"vhost_user":null,"vhost_vdpa":null,"volume":null},"target":{"bus":"virtio","dev":"vda","removable":null,"rotation_rate":null,"tray":null},"throttle_filters":null,"transient":null,"vendor":null,"wwn":null},{"acpi":null,"address":null,"alias":null,"auth":null,"backend_domain":null,"backing_store":null,"block_io":null,"boot":null,"device":"cdrom","driver":{"ats":null,"cache":null,"copy_on_read":null,"detect_zeros":null,"discard":null,"discard_no_unref":null,"error_policy":null,"event_idx":null,"io":null,"io_event_fd":null,"io_thread":null,"io_threads":null,"iommu":null,"metadata_cache":null,"name":"qemu","packed":null,"page_per_vq":null,"queue_size":null,"queues":null,"rerror_policy":null,"type":"raw"},"encryption":null,"geometry":null,"io_tune":null,"mirror":null,"model":null,"product":null,"raw_io":null,"read_only":null,"serial":null,"sgio":null,"shareable":null,"snapshot":null,"source":{"block":null,"cookies":null,"data_store":null,"dir":null,"encryption":null,"file":{"fd_group":null,"file":"/srv/vms/kube-node-32-cloudinit.iso","sec_label":null},"index":null,"network":null,"nvme":null,"readahead":null,"reservations":null,"slices":null,"ssl":null,"startup_policy":null,"timeout":null,"vhost_user":null,"vhost_vdpa":null,"volume":null},"target":{"bus":"sata","dev":"sda","removable":null,"rotation_rate":null,"tray":null},"throttle_filters":null,"transient":null,"vendor":null,"wwn":null}],"emulator":null,"filesystems":null,"graphics":null,"hostdevs":null,"hubs":null,"inputs":null,"interfaces":[{"acpi":null,"address":null,"alias":null,"backend":null,"backend_domain":null,"bandwidth":null,"boot":null,"coalesce":null,"down_script":null,"driver":null,"filter_ref":null,"guest":null,"ip":null,"link":null,"mac":null,"managed":null,"model":{"type":"virtio"},"mtu":null,"port_forward":null,"port_options":null,"rom":null,"route":null,"script":null,"source":{"bridge":{"bridge":"br0"},"client":null,"direct":null,"ethernet":null,"hostdev":null,"internal":null,"mcast":null,"network":null,"null":null,"server":null,"udp":null,"user":null,"vdpa":null,"vds":null,"vhost_user":null},"target":null,"teaming":null,"trust_guest_rx_filters":null,"tune":null,"virtual_port":null,"vlan":null,"wait_for_ip":null}],"iommu":null,"leases":null,"mem_balloon":null,"memorydevs":null,"nvram":null,"panics":null,"parallels":null,"pstore":null,"redir_devs":null,"redir_filters":null,"rngs":null,"serials":[{"acpi":null,"address":null,"alias":null,"log":null,"protocol":null,"source":null,"target":null}],"shmems":null,"smartcards":null,"sounds":null,"tpms":null,"videos":null,"vsock":null,"watchdogs":null},"features":null,"gen_id":null,"hwuuid":null,"id":50,"id_map":null,"io_thread_i_ds":null,"io_threads":null,"key_wrap":null,"launch_security":null,"maximum_memory":null,"maximum_memory_slots":null,"maximum_memory_unit":null,"memory":4096,"memory_backing":null,"memory_dump_core":null,"memory_tune":null,"memory_unit":"MiB","metadata":null,"name":"kube-node-32","numa_tune":null,"on_crash":null,"on_poweroff":null,"on_reboot":null,"os":{"acpi":null,"bios":null,"boot_devices":null,"boot_menu":null,"cmdline":null,"dtb":null,"firmware":null,"firmware_info":null,"init":null,"init_args":null,"init_dir":null,"init_env":null,"init_group":null,"init_user":null,"initrd":null,"kernel":null,"loader":null,"loader_format":null,"loader_readonly":null,"loader_secure":null,"loader_stateless":null,"loader_type":null,"nv_ram":null,"shim":null,"sm_bios":null,"type":"hvm","type_arch":"x86_64","type_machine":"q35"},"perf":null,"pm":null,"resource":null,"running":true,"sec_label":null,"sys_info":null,"throttle_groups":null,"title":null,"type":"kvm","uuid":"432c9f41-6033-4ee8-a77a-083b8cb6ef9a","vcpu":2,"vcpu_cpuset":null,"vcpu_current":null,"vcpu_placement":null,"vcpus":null},"sensitive_attributes":[],"dependencies":["data.local_file.join_command","libvirt_cloudinit_disk.commoninit","libvirt_cloudinit_disk.commoninit_node_01","libvirt_domain.master","libvirt_volume.cloudinit","libvirt_volume.cloudinit_node_01","libvirt_volume.node_01_disk","libvirt_volume.ubuntu_base","libvirt_volume.ubuntu_disk","null_resource.kubeadm_token"]}]},{"mode":"managed","type":"libvirt_volume","name":"cloudinit","provider":"provider[\"registry.opentofu.org/dmacvicar/libvirt\"]","instances":[{"schema_version":0,"attributes":{"allocation":49152,"allocation_unit":null,"backing_store":null,"capacity":49152,"capacity_unit":null,"create":{"content":{"url":"/var/folders/dq/h32yg2mx55b2m8hxmf1yh66r0000gn/T/terraform-provider-libvirt-cloudinit/cloudinit-9b5efd668378a2cc.iso"}},"id":"/srv/vms/kube-master-31-cloudinit.iso","key":"/srv/vms/kube-master-31-cloudinit.iso","name":"kube-master-31-cloudinit.iso","path":"/srv/vms/kube-master-31-cloudinit.iso","physical":49152,"physical_unit":null,"pool":"default","target":null,"type":null},"sensitive_attributes":[],"dependencies":["libvirt_cloudinit_disk.commoninit"]}]},{"mode":"managed","type":"libvirt_volume","name":"cloudinit_node_01","provider":"provider[\"registry.opentofu.org/dmacvicar/libvirt\"]","instances":[{"schema_version":0,"attributes":{"allocation":49152,"allocation_unit":null,"backing_store":null,"capacity":49152,"capacity_unit":null,"create":{"content":{"url":"/var/folders/dq/h32yg2mx55b2m8hxmf1yh66r0000gn/T/terraform-provider-libvirt-cloudinit/cloudinit-2d6abdd2982994a2.iso"}},"id":"/srv/vms/kube-node-32-cloudinit.iso","key":"/srv/vms/kube-node-32-cloudinit.iso","name":"kube-node-32-cloudinit.iso","path":"/srv/vms/kube-node-32-cloudinit.iso","physical":49152,"physical_unit":null,"pool":"default","target":null,"type":null},"sensitive_attributes":[],"dependencies":["data.local_file.join_command","libvirt_cloudinit_disk.commoninit","libvirt_cloudinit_disk.commoninit_node_01","libvirt_domain.master","libvirt_volume.cloudinit","libvirt_volume.ubuntu_base","libvirt_volume.ubuntu_disk","null_resource.kubeadm_token"]}]},{"mode":"managed","type":"libvirt_volume","name":"node_01_disk","provider":"provider[\"registry.opentofu.org/dmacvicar/libvirt\"]","instances":[{"schema_version":0,"attributes":{"allocation":200704,"allocation_unit":null,"backing_store":{"format":{"type":"qcow2"},"path":"/srv/vms/ubuntu-24.04-base.qcow2","permissions":null},"capacity":21474836480,"capacity_unit":null,"create":null,"id":"/srv/vms/kube-node-32.qcow2","key":"/srv/vms/kube-node-32.qcow2","name":"kube-node-32.qcow2","path":"/srv/vms/kube-node-32.qcow2","physical":196928,"physical_unit":null,"pool":"default","target":{"cluster_size":null,"cluster_size_unit":null,"compat":null,"encryption":null,"features":null,"format":{"type":"qcow2"},"path":"/srv/vms/kube-node-32.qcow2","permissions":null,"timestamps":null},"type":null},"sensitive_attributes":[],"dependencies":["libvirt_volume.ubuntu_base"]}]},{"mode":"managed","type":"libvirt_volume","name":"ubuntu_base","provider":"provider[\"registry.opentofu.org/dmacvicar/libvirt\"]","instances":[{"schema_version":0,"attributes":{"allocation":626663424,"allocation_unit":null,"backing_store":null,"capacity":3758096384,"capacity_unit":null,"create":{"content":{"url":"https://cloud-images.ubuntu.com/noble/current/noble-server-cloudimg-amd64.img"}},"id":"/srv/vms/ubuntu-24.04-base.qcow2","key":"/srv/vms/ubuntu-24.04-base.qcow2","name":"ubuntu-24.04-base.qcow2","path":"/srv/vms/ubuntu-24.04-base.qcow2","physical":626655744,"physical_unit":null,"pool":"default","target":{"cluster_size":null,"cluster_size_unit":null,"compat":null,"encryption":null,"features":null,"format":{"type":"qcow2"},"path":"/srv/vms/ubuntu-24.04-base.qcow2","permissions":null,"timestamps":null},"type":null},"sensitive_attributes":[]}]},{"mode":"managed","type":"libvirt_volume","name":"ubuntu_disk","provider":"provider[\"registry.opentofu.org/dmacvicar/libvirt\"]","instances":[{"schema_version":0,"attributes":{"allocation":200704,"allocation_unit":null,"backing_store":{"format":{"type":"qcow2"},"path":"/srv/vms/ubuntu-24.04-base.qcow2","permissions":null},"capacity":21474836480,"capacity_unit":null,"create":null,"id":"/srv/vms/kube-master-31.qcow2","key":"/srv/vms/kube-master-31.qcow2","name":"kube-master-31.qcow2","path":"/srv/vms/kube-master-31.qcow2","physical":196928,"physical_unit":null,"pool":"default","target":{"cluster_size":null,"cluster_size_unit":null,"compat":null,"encryption":null,"features":null,"format":{"type":"qcow2"},"path":"/srv/vms/kube-master-31.qcow2","permissions":null,"timestamps":null},"type":null},"sensitive_attributes":[],"dependencies":["libvirt_volume.ubuntu_base"]}]},{"mode":"managed","type":"null_resource","name":"kubeadm_token","provider":"provider[\"registry.opentofu.org/hashicorp/null\"]","instances":[{"schema_version":0,"attributes":{"id":"1090738715192517178","triggers":null},"sensitive_attributes":[],"dependencies":["libvirt_cloudinit_disk.commoninit","libvirt_domain.master","libvirt_volume.cloudinit","libvirt_volume.ubuntu_base","libvirt_volume.ubuntu_disk"]}]},{"mode":"managed","type":"null_resource","name":"kubeconfig","provider":"provider[\"registry.opentofu.org/hashicorp/null\"]","instances":[{"status":"tainted","schema_version":0,"attributes":{"id":"4322620472031734347","triggers":null},"sensitive_attributes":[]}]}],"check_results":null} +{"version":4,"terraform_version":"1.11.2","serial":76,"lineage":"69f81358-9017-b0fa-2e3d-404364b1f698","outputs":{"master_ip":{"value":"192.168.0.31","type":"string"},"node_01_ip":{"value":"192.168.0.32","type":"string"},"node_02_ip":{"value":"192.168.0.33","type":"string"}},"resources":[{"mode":"data","type":"local_file","name":"join_command","provider":"provider[\"registry.opentofu.org/hashicorp/local\"]","instances":[{"schema_version":0,"attributes":{"content":"kubeadm join 192.168.0.31:6443 --token i8sc47.w8owfnvyawzvibfr --discovery-token-ca-cert-hash sha256:c09955e09ba79882ba7766125b57030b2e87dde0ac49af351de28e1c92d0beb9 \n","content_base64":"a3ViZWFkbSBqb2luIDE5Mi4xNjguMC4zMTo2NDQzIC0tdG9rZW4gaThzYzQ3Lnc4b3dmbnZ5YXd6dmliZnIgLS1kaXNjb3ZlcnktdG9rZW4tY2EtY2VydC1oYXNoIHNoYTI1NjpjMDk5NTVlMDliYTc5ODgyYmE3NzY2MTI1YjU3MDMwYjJlODdkZGUwYWM0OWFmMzUxZGUyOGUxYzkyZDBiZWI5IAo=","content_base64sha256":"4z0aBjXMjPeB7yGR3iVOIvEEffPSeesyBacAVbgib7w=","content_base64sha512":"7pxqGceqOMNfxi90eDbDAPqH97ItEphxCTlKOuIioXE64j4v5Adt6QaH+bcrv9WAwwPcJMrgK1mglagVQp4ahw==","content_md5":"42bf34177233f04ac2089852085c9b23","content_sha1":"ffb8f5b520aeaa9521a6b6cc1244dc5167c1907b","content_sha256":"e33d1a0635cc8cf781ef2191de254e22f1047df3d279eb3205a70055b8226fbc","content_sha512":"ee9c6a19c7aa38c35fc62f747836c300fa87f7b22d12987109394a3ae222a1713ae23e2fe4076de90687f9b72bbfd580c303dc24cae02b59a095a815429e1a87","filename":"./join-command.txt","id":"ffb8f5b520aeaa9521a6b6cc1244dc5167c1907b"},"sensitive_attributes":[]}]},{"mode":"managed","type":"libvirt_cloudinit_disk","name":"commoninit","provider":"provider[\"registry.opentofu.org/dmacvicar/libvirt\"].kvm-homer","instances":[{"schema_version":0,"attributes":{"id":"9b5efd668378a2cc","meta_data":"\"instance-id\": \"kube-master-31\"\n\"local-hostname\": \"kube-master-31\"\n","name":"kube-master-31-cloudinit.iso","network_config":"version: 2\nethernets:\n eth0:\n match:\n driver: virtio_net\n addresses:\n - 192.168.0.31/24\n routes:\n - to: default\n via: 192.168.0.4\n nameservers:\n addresses:\n - 8.8.8.8\n","path":"/var/folders/dq/h32yg2mx55b2m8hxmf1yh66r0000gn/T/terraform-provider-libvirt-cloudinit/cloudinit-9b5efd668378a2cc.iso","size":49152,"user_data":"#cloud-config\nhostname: kube-master-31\nusers:\n - name: ubuntu\n sudo: ALL=(ALL) NOPASSWD:ALL\n shell: /bin/bash\n ssh_authorized_keys:\n - ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDTLxDOQMsumLpjIzMXvpN/hvoMfbVFcl7TDKXTYLBJIvTOLWO/elI3PeJkXNAlaIT1lgJQB7NwQED+DciPLjCLzkG3aSxuJdZRo0Z+vHm9CEUkWnq8icLTQs0zYadK6p24VpMqT61cGNv9L/riciMRWT6l2SdRN2ZBR6MhCXMZy/XgRRlcV9iN1n9T0Q9aZjaQ2CjgG59wTLdQ0bHRlFBSt2q6erFmCIiBHUJba4avDVRvYryvMgkopayL/eK2gxaloMjcMt4z+zIokxhQONPPU2AvqMcqQIsWGQYIzIkJ0UOO8ly/PAFCpgvukWJepmZR30vVBALFCRZCUN1zMbI3 jan.novak@Jans-MacBook-Air-9.local\n\nchpasswd:\n list: |\n ubuntu:yourpassword\n expire: false\nssh_pwauth: true\npackage_update: true\npackages:\n - qemu-guest-agent\n - openssh-server\n - apt-transport-https\n - ca-certificates\n - curl\n - gnupg \n\nwrite_files:\n - path: /etc/modules-load.d/k8s.conf\n content: |\n overlay\n br_netfilter\n\n - path: /etc/sysctl.d/k8s.conf\n content: |\n net.bridge.bridge-nf-call-iptables = 1\n net.bridge.bridge-nf-call-ip6tables = 1\n net.ipv4.ip_forward = 1\n\n - path: /etc/containerd/config.toml\n content: |\n version = 2\n [plugins.\"io.containerd.grpc.v1.cri\".containerd.runtimes.runc]\n runtime_type = \"io.containerd.runc.v2\"\n [plugins.\"io.containerd.grpc.v1.cri\".containerd.runtimes.runc.options]\n SystemdCgroup = true\n\n # Update existing containerd config to enable registry config_path\n - path: /etc/containerd/config.toml\n content: |\n version = 2\n [plugins.\"io.containerd.grpc.v1.cri\".containerd.runtimes.runc]\n runtime_type = \"io.containerd.runc.v2\"\n [plugins.\"io.containerd.grpc.v1.cri\".containerd.runtimes.runc.options]\n SystemdCgroup = true\n [plugins.\"io.containerd.grpc.v1.cri\".registry]\n config_path = \"/etc/containerd/certs.d\"\n\n # Mirror configs for each upstream registry\n - path: /etc/containerd/certs.d/docker.io/hosts.toml\n content: |\n server = \"https://registry-1.docker.io\"\n [host.\"http://192.168.0.30:5000/v2/docker.io\"]\n capabilities = [\"pull\", \"resolve\"]\n skip_verify = true\n override_path = true\n\n - path: /etc/containerd/certs.d/registry.k8s.io/hosts.toml\n content: |\n server = \"https://registry.k8s.io\"\n [host.\"http://192.168.0.30:5000/v2/registry.k8s.io\"]\n capabilities = [\"pull\", \"resolve\"]\n skip_verify = true\n override_path = true\n\n - path: /etc/containerd/certs.d/ghcr.io/hosts.toml\n content: |\n server = \"https://ghcr.io\"\n [host.\"http://192.168.0.30:5000/v2/ghcr.io\"]\n capabilities = [\"pull\", \"resolve\"]\n skip_verify = true\n override_path = true\n\n - path: /etc/containerd/certs.d/quay.io/hosts.toml\n content: |\n server = \"https://quay.io\"\n [host.\"http://192.168.0.30:5000/v2/quay.io\"]\n capabilities = [\"pull\", \"resolve\"]\n skip_verify = true\n override_path = true \n\n - path: /root/kubeadm-config.yaml\n content: |\n apiVersion: kubeadm.k8s.io/v1beta3\n kind: InitConfiguration\n nodeRegistration:\n criSocket: unix:///run/containerd/containerd.sock\n ---\n apiVersion: kubeadm.k8s.io/v1beta3\n kind: ClusterConfiguration\n networking:\n podSubnet: \"10.244.0.0/16\"\n ---\n apiVersion: kubelet.config.k8s.io/v1beta1\n kind: KubeletConfiguration\n cgroupDriver: systemd\n\n - path: /etc/profile.d/kubectl.sh\n content: |\n alias k='kubectl'\n source \u003c(kubectl completion bash)\n complete -o default -F __start_kubectl k \n\nruncmd:\n - systemctl enable --now qemu-guest-agent\n - systemctl enable --now ssh\n\n # relevant to kubernetes\n - modprobe overlay\n - modprobe br_netfilter\n - sysctl --system\n\n # containerd\n - curl -fsSL https://download.docker.com/linux/ubuntu/gpg | gpg --dearmor -o /etc/apt/keyrings/docker.gpg\n - echo \"deb [arch=amd64 signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable\" \u003e /etc/apt/sources.list.d/docker.list\n - apt-get update \u0026\u0026 apt-get install -y containerd.io\n - systemctl restart containerd\n\n # kubeadm/kubelet/kubectl v1.32\n - curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.32/deb/Release.key | gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg\n - echo \"deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/v1.32/deb/ /\" \u003e /etc/apt/sources.list.d/kubernetes.list\n - apt-get update \u0026\u0026 apt-get install -y kubelet kubeadm kubectl\n - apt-mark hold kubelet kubeadm kubectl\n\n\n # init cluster\n - kubeadm init --config=/root/kubeadm-config.yaml --skip-phases=addon/kube-proxy\n \n # kubeconfig for root\n - mkdir -p /root/.kube \u0026\u0026 cp /etc/kubernetes/admin.conf /root/.kube/config\n\n # wait for API server\n - |\n echo \"Waiting for API server...\"\n until kubectl --kubeconfig=/etc/kubernetes/admin.conf get nodes ; do\n echo \"Waiting for API server...\"\n sleep 5\n done\n\n # CNI (cilium example, swap for flannel/calico as needed)\n - |\n CILIUM_CLI_VERSION=$(curl -s https://raw.githubusercontent.com/cilium/cilium-cli/main/stable.txt)\n curl -L --remote-name-all https://github.com/cilium/cilium-cli/releases/download/${CILIUM_CLI_VERSION}/cilium-linux-amd64.tar.gz\n tar xzvf cilium-linux-amd64.tar.gz -C /usr/local/bin\n cilium install --kubeconfig=/etc/kubernetes/admin.conf --set kubeProxyReplacement=true --wait \n"},"sensitive_attributes":[]}]},{"mode":"managed","type":"libvirt_domain","name":"master","provider":"provider[\"registry.opentofu.org/dmacvicar/libvirt\"].kvm-homer","instances":[{"schema_version":0,"attributes":{"autostart":true,"block_io_tune":null,"bootloader":null,"bootloader_args":null,"clock":null,"cpu":null,"cpu_tune":null,"create":null,"current_memory":null,"current_memory_unit":null,"default_io_thread":null,"description":null,"destroy":null,"devices":{"audios":null,"channels":null,"consoles":null,"controllers":null,"crypto":null,"disks":[{"acpi":null,"address":null,"alias":null,"auth":null,"backend_domain":null,"backing_store":null,"block_io":null,"boot":null,"device":null,"driver":{"ats":null,"cache":null,"copy_on_read":null,"detect_zeros":null,"discard":null,"discard_no_unref":null,"error_policy":null,"event_idx":null,"io":null,"io_event_fd":null,"io_thread":null,"io_threads":null,"iommu":null,"metadata_cache":null,"name":"qemu","packed":null,"page_per_vq":null,"queue_size":null,"queues":null,"rerror_policy":null,"type":"qcow2"},"encryption":null,"geometry":null,"io_tune":null,"mirror":null,"model":null,"product":null,"raw_io":null,"read_only":null,"serial":null,"sgio":null,"shareable":null,"snapshot":null,"source":{"block":null,"cookies":null,"data_store":null,"dir":null,"encryption":null,"file":{"fd_group":null,"file":"/srv/vms/kube-master-31.qcow2","sec_label":null},"index":null,"network":null,"nvme":null,"readahead":null,"reservations":null,"slices":null,"ssl":null,"startup_policy":null,"timeout":null,"vhost_user":null,"vhost_vdpa":null,"volume":null},"target":{"bus":"virtio","dev":"vda","removable":null,"rotation_rate":null,"tray":null},"throttle_filters":null,"transient":null,"vendor":null,"wwn":null},{"acpi":null,"address":null,"alias":null,"auth":null,"backend_domain":null,"backing_store":null,"block_io":null,"boot":null,"device":"cdrom","driver":{"ats":null,"cache":null,"copy_on_read":null,"detect_zeros":null,"discard":null,"discard_no_unref":null,"error_policy":null,"event_idx":null,"io":null,"io_event_fd":null,"io_thread":null,"io_threads":null,"iommu":null,"metadata_cache":null,"name":"qemu","packed":null,"page_per_vq":null,"queue_size":null,"queues":null,"rerror_policy":null,"type":"raw"},"encryption":null,"geometry":null,"io_tune":null,"mirror":null,"model":null,"product":null,"raw_io":null,"read_only":null,"serial":null,"sgio":null,"shareable":null,"snapshot":null,"source":{"block":null,"cookies":null,"data_store":null,"dir":null,"encryption":null,"file":{"fd_group":null,"file":"/srv/vms/kube-master-31-cloudinit.iso","sec_label":null},"index":null,"network":null,"nvme":null,"readahead":null,"reservations":null,"slices":null,"ssl":null,"startup_policy":null,"timeout":null,"vhost_user":null,"vhost_vdpa":null,"volume":null},"target":{"bus":"sata","dev":"sda","removable":null,"rotation_rate":null,"tray":null},"throttle_filters":null,"transient":null,"vendor":null,"wwn":null}],"emulator":null,"filesystems":null,"graphics":null,"hostdevs":null,"hubs":null,"inputs":null,"interfaces":[{"acpi":null,"address":null,"alias":null,"backend":null,"backend_domain":null,"bandwidth":null,"boot":null,"coalesce":null,"down_script":null,"driver":null,"filter_ref":null,"guest":null,"ip":null,"link":null,"mac":null,"managed":null,"model":{"type":"virtio"},"mtu":null,"port_forward":null,"port_options":null,"rom":null,"route":null,"script":null,"source":{"bridge":{"bridge":"br0"},"client":null,"direct":null,"ethernet":null,"hostdev":null,"internal":null,"mcast":null,"network":null,"null":null,"server":null,"udp":null,"user":null,"vdpa":null,"vds":null,"vhost_user":null},"target":null,"teaming":null,"trust_guest_rx_filters":null,"tune":null,"virtual_port":null,"vlan":null,"wait_for_ip":null}],"iommu":null,"leases":null,"mem_balloon":null,"memorydevs":null,"nvram":null,"panics":null,"parallels":null,"pstore":null,"redir_devs":null,"redir_filters":null,"rngs":null,"serials":[{"acpi":null,"address":null,"alias":null,"log":null,"protocol":null,"source":null,"target":null}],"shmems":null,"smartcards":null,"sounds":null,"tpms":null,"videos":null,"vsock":null,"watchdogs":null},"features":null,"gen_id":null,"hwuuid":null,"id":49,"id_map":null,"io_thread_i_ds":null,"io_threads":null,"key_wrap":null,"launch_security":null,"maximum_memory":null,"maximum_memory_slots":null,"maximum_memory_unit":null,"memory":2048,"memory_backing":null,"memory_dump_core":null,"memory_tune":null,"memory_unit":"MiB","metadata":null,"name":"kube-master-31","numa_tune":null,"on_crash":null,"on_poweroff":null,"on_reboot":null,"os":{"acpi":null,"bios":null,"boot_devices":null,"boot_menu":null,"cmdline":null,"dtb":null,"firmware":null,"firmware_info":null,"init":null,"init_args":null,"init_dir":null,"init_env":null,"init_group":null,"init_user":null,"initrd":null,"kernel":null,"loader":null,"loader_format":null,"loader_readonly":null,"loader_secure":null,"loader_stateless":null,"loader_type":null,"nv_ram":null,"shim":null,"sm_bios":null,"type":"hvm","type_arch":"x86_64","type_machine":"q35"},"perf":null,"pm":null,"resource":null,"running":true,"sec_label":null,"sys_info":null,"throttle_groups":null,"title":null,"type":"kvm","uuid":"1d3d2721-a2f0-49d0-a458-a905c4b6e5cd","vcpu":2,"vcpu_cpuset":null,"vcpu_current":null,"vcpu_placement":null,"vcpus":null},"sensitive_attributes":[],"dependencies":["libvirt_cloudinit_disk.commoninit","libvirt_volume.cloudinit","libvirt_volume.ubuntu_base_homer","libvirt_volume.ubuntu_disk"]}]},{"mode":"managed","type":"libvirt_volume","name":"cloudinit","provider":"provider[\"registry.opentofu.org/dmacvicar/libvirt\"].kvm-homer","instances":[{"schema_version":0,"attributes":{"allocation":49152,"allocation_unit":null,"backing_store":null,"capacity":49152,"capacity_unit":null,"create":{"content":{"url":"/var/folders/dq/h32yg2mx55b2m8hxmf1yh66r0000gn/T/terraform-provider-libvirt-cloudinit/cloudinit-9b5efd668378a2cc.iso"}},"id":"/srv/vms/kube-master-31-cloudinit.iso","key":"/srv/vms/kube-master-31-cloudinit.iso","name":"kube-master-31-cloudinit.iso","path":"/srv/vms/kube-master-31-cloudinit.iso","physical":49152,"physical_unit":null,"pool":"default","target":null,"type":null},"sensitive_attributes":[],"dependencies":["libvirt_cloudinit_disk.commoninit"]}]},{"mode":"managed","type":"libvirt_volume","name":"node_01_disk","provider":"provider[\"registry.opentofu.org/dmacvicar/libvirt\"].kvm-homer","instances":[{"schema_version":0,"attributes":{"allocation":10389557248,"allocation_unit":null,"backing_store":{"format":{"type":"qcow2"},"path":"/srv/vms/ubuntu-24.04-base.qcow2","permissions":null},"capacity":21474836480,"capacity_unit":null,"create":null,"id":"/srv/vms/kube-node-32.qcow2","key":"/srv/vms/kube-node-32.qcow2","name":"kube-node-32.qcow2","path":"/srv/vms/kube-node-32.qcow2","physical":10389487616,"physical_unit":null,"pool":"default","target":{"cluster_size":null,"cluster_size_unit":null,"compat":null,"encryption":null,"features":null,"format":{"type":"qcow2"},"path":"/srv/vms/kube-node-32.qcow2","permissions":null,"timestamps":null},"type":null},"sensitive_attributes":[],"dependencies":["libvirt_volume.ubuntu_base_homer"]}]},{"mode":"managed","type":"libvirt_volume","name":"node_02_disk","provider":"provider[\"registry.opentofu.org/dmacvicar/libvirt\"].kvm-beelink","instances":[{"schema_version":0,"attributes":{"allocation":200704,"allocation_unit":null,"backing_store":{"format":{"type":"qcow2"},"path":"/var/lib/libvirt/images/ubuntu-24.04-base.qcow2","permissions":null},"capacity":21474836480,"capacity_unit":null,"create":null,"id":"/var/lib/libvirt/images/kube-node-33.qcow2","key":"/var/lib/libvirt/images/kube-node-33.qcow2","name":"kube-node-33.qcow2","path":"/var/lib/libvirt/images/kube-node-33.qcow2","physical":196928,"physical_unit":null,"pool":"default","target":{"cluster_size":null,"cluster_size_unit":null,"compat":null,"encryption":null,"features":null,"format":{"type":"qcow2"},"path":"/var/lib/libvirt/images/kube-node-33.qcow2","permissions":null,"timestamps":null},"type":null},"sensitive_attributes":[],"dependencies":["libvirt_volume.ubuntu_base_beelink"]}]},{"mode":"managed","type":"libvirt_volume","name":"ubuntu_base_beelink","provider":"provider[\"registry.opentofu.org/dmacvicar/libvirt\"].kvm-beelink","instances":[{"schema_version":0,"attributes":{"allocation":626663424,"allocation_unit":null,"backing_store":null,"capacity":3758096384,"capacity_unit":null,"create":{"content":{"url":"https://cloud-images.ubuntu.com/noble/current/noble-server-cloudimg-amd64.img"}},"id":"/var/lib/libvirt/images/ubuntu-24.04-base.qcow2","key":"/var/lib/libvirt/images/ubuntu-24.04-base.qcow2","name":"ubuntu-24.04-base.qcow2","path":"/var/lib/libvirt/images/ubuntu-24.04-base.qcow2","physical":626655744,"physical_unit":null,"pool":"default","target":{"cluster_size":null,"cluster_size_unit":null,"compat":null,"encryption":null,"features":null,"format":{"type":"qcow2"},"path":"/var/lib/libvirt/images/ubuntu-24.04-base.qcow2","permissions":null,"timestamps":null},"type":null},"sensitive_attributes":[]}]},{"mode":"managed","type":"libvirt_volume","name":"ubuntu_base_homer","provider":"provider[\"registry.opentofu.org/dmacvicar/libvirt\"].kvm-homer","instances":[{"schema_version":0,"attributes":{"allocation":626663424,"allocation_unit":null,"backing_store":null,"capacity":3758096384,"capacity_unit":null,"create":{"content":{"url":"https://cloud-images.ubuntu.com/noble/current/noble-server-cloudimg-amd64.img"}},"id":"/srv/vms/ubuntu-24.04-base.qcow2","key":"/srv/vms/ubuntu-24.04-base.qcow2","name":"ubuntu-24.04-base.qcow2","path":"/srv/vms/ubuntu-24.04-base.qcow2","physical":626655744,"physical_unit":null,"pool":"default","target":{"cluster_size":null,"cluster_size_unit":null,"compat":null,"encryption":null,"features":null,"format":{"type":"qcow2"},"path":"/srv/vms/ubuntu-24.04-base.qcow2","permissions":null,"timestamps":null},"type":null},"sensitive_attributes":[]}]},{"mode":"managed","type":"libvirt_volume","name":"ubuntu_disk","provider":"provider[\"registry.opentofu.org/dmacvicar/libvirt\"].kvm-homer","instances":[{"schema_version":0,"attributes":{"allocation":4331999232,"allocation_unit":null,"backing_store":{"format":{"type":"qcow2"},"path":"/srv/vms/ubuntu-24.04-base.qcow2","permissions":null},"capacity":21474836480,"capacity_unit":null,"create":null,"id":"/srv/vms/kube-master-31.qcow2","key":"/srv/vms/kube-master-31.qcow2","name":"kube-master-31.qcow2","path":"/srv/vms/kube-master-31.qcow2","physical":4331929600,"physical_unit":null,"pool":"default","target":{"cluster_size":null,"cluster_size_unit":null,"compat":null,"encryption":null,"features":null,"format":{"type":"qcow2"},"path":"/srv/vms/kube-master-31.qcow2","permissions":null,"timestamps":null},"type":null},"sensitive_attributes":[],"dependencies":["libvirt_volume.ubuntu_base_homer"]}]},{"mode":"managed","type":"null_resource","name":"kubeconfig","provider":"provider[\"registry.opentofu.org/hashicorp/null\"]","instances":[{"schema_version":0,"attributes":{"id":"8367063358226307615","triggers":null},"sensitive_attributes":[]}]}],"check_results":null}