Skip to content

Commit

Permalink
add a single master for testing (#10)
Browse files Browse the repository at this point in the history
* add a single master for testing

* completely rework repo
  • Loading branch information
glitchcrab committed Jul 16, 2023
1 parent a458f0e commit 1395470
Show file tree
Hide file tree
Showing 5 changed files with 125 additions and 116 deletions.
157 changes: 47 additions & 110 deletions cluster/resources.tf
Original file line number Diff line number Diff line change
@@ -1,3 +1,15 @@
resource "local_file" "set_smbios_values" {
content = templatefile("${path.module}/templates/set_smbios_values.sh.tpl", {
pm_api_url = local.pm_api_url
master_sku = local.master_sku
worker_sku = local.worker_sku
family = local.family
})

filename = "scripts/set_smbios_values.sh"
file_permission = "0755"
}

resource "macaddress" "master_net0_mac" {
count = local.master_count
}
Expand All @@ -10,62 +22,9 @@ resource "random_string" "master_serial" {
upper = false
}

resource "random_uuid" "master_uuid" {
count = local.master_count
}

resource "null_resource" "master_smbios1_values" {
count = local.master_count
depends_on = [module.master_instances]

provisioner "local-exec" {
command = <<EOF
curl --silent --insecure -H \
"Authorization: PVEAPIToken=${local.pve_token_id}=${local.pve_token}" \
-X POST --data-urlencode \
smbios1="serial=${random_string.master_serial[count.index].result},family=${local.family},sku=${local.master_sku},uuid=${random_uuid.master_uuid[count.index].result}" \
${local.pm_api_url}/nodes/${local.master_placement[count.index].host}/qemu/${local.master_placement[count.index].vmid}/config
EOF
}
}

resource "null_resource" "master_stop" {
count = local.master_count
depends_on = [null_resource.master_smbios1_values]

provisioner "local-exec" {
command = <<EOF
curl --silent --insecure -H \
"Authorization: PVEAPIToken=${local.pve_token_id}=${local.pve_token}" \
-X POST \
${local.pm_api_url}/nodes/${local.master_placement[count.index].host}/qemu/${local.master_placement[count.index].vmid}/status/stop
EOF
}
}

resource "time_sleep" "master_sleep_10s" {
count = local.master_count
depends_on = [null_resource.master_stop]

create_duration = "10s"
}

resource "null_resource" "master_start" {
count = local.master_count
depends_on = [time_sleep.master_sleep_10s]

provisioner "local-exec" {
command = <<EOF
curl --silent --insecure -H \
"Authorization: PVEAPIToken=${local.pve_token_id}=${local.pve_token}" \
-X POST \
${local.pm_api_url}/nodes/${local.master_placement[count.index].host}/qemu/${local.master_placement[count.index].vmid}/status/start
EOF
}
}

module "master_instances" {
count = local.master_count
count = local.master_count
depends_on = [local_file.set_smbios_values]

source = "github.com/glitchcrab/terraform-module-proxmox-instance?ref=v1.8.0"

Expand All @@ -81,6 +40,8 @@ module "master_instances" {

pxe_boot = var.pxe_boot

# custom CPU profile
cpu = var.cpu
cores = var.resource_cpu_cores
sockets = var.resource_cpu_sockets
memory = var.resource_memory
Expand All @@ -102,74 +63,34 @@ module "master_instances" {
}]
}

resource "macaddress" "worker_net0_mac" {
count = local.worker_count
}

resource "random_string" "worker_serial" {
count = local.worker_count

length = 16
special = false
upper = false
}

resource "random_uuid" "worker_uuid" {
count = local.worker_count
}

resource "null_resource" "worker_smbios1_values" {
count = local.worker_count
depends_on = [module.worker_instances]
resource "null_resource" "set_master_smbios_values" {
count = local.master_count
depends_on = [module.master_instances]

provisioner "local-exec" {
command = <<EOF
curl --silent --insecure -H \
"Authorization: PVEAPIToken=${local.pve_token_id}=${local.pve_token}" \
-X POST --data-urlencode \
smbios1="serial=${random_string.worker_serial[count.index].result},family=${local.family},sku=${local.worker_sku},uuid=${random_uuid.worker_uuid[count.index]}" \
${local.pm_api_url}/nodes/${local.worker_placement[count.index].host}/qemu/${local.worker_placement[count.index].vmid}/config
EOF
command = "/usr/bin/env bash scripts/set_smbios_values.sh ${replace(local.pve_token_id, "!", "'!'")} ${local.pve_token} ${local.master_placement[count.index].host} ${local.master_placement[count.index].vmid} ${local.master_sku} ${random_string.master_serial[count.index].result} ${local.master_placement[count.index].uuid}"
}
}

resource "null_resource" "worker_stop" {
count = local.worker_count
depends_on = [null_resource.worker_smbios1_values]

provisioner "local-exec" {
command = <<EOF
curl --silent --insecure -H \
"Authorization: PVEAPIToken=${local.pve_token_id}=${local.pve_token}" \
-X POST \
${local.pm_api_url}/nodes/${local.worker_placement[count.index].host}/qemu/${local.worker_placement[count.index].vmid}/status/stop
EOF
lifecycle {
ignore_changes = all
}
}

resource "time_sleep" "worker_sleep_10s" {
count = local.master_count
depends_on = [null_resource.master_stop]

create_duration = "10s"
resource "macaddress" "worker_net0_mac" {
count = local.worker_count
}

resource "null_resource" "worker_start" {
count = local.worker_count
depends_on = [time_sleep.worker_sleep_10s]
resource "random_string" "worker_serial" {
count = local.worker_count

provisioner "local-exec" {
command = <<EOF
curl --silent --insecure -H \
"Authorization: PVEAPIToken=${local.pve_token_id}=${local.pve_token}" \
-X POST \
${local.pm_api_url}/nodes/${local.worker_placement[count.index].host}/qemu/${local.worker_placement[count.index].vmid}/status/start
EOF
}
length = 16
special = false
upper = false
}

module "worker_instances" {
count = local.worker_count
count = local.worker_count
depends_on = [local_file.set_smbios_values]

source = "github.com/glitchcrab/terraform-module-proxmox-instance?ref=v1.8.0"

Expand All @@ -185,6 +106,8 @@ module "worker_instances" {

pxe_boot = var.pxe_boot

# custom CPU profile
cpu = var.cpu
cores = var.resource_cpu_cores
sockets = var.resource_cpu_sockets
memory = var.resource_memory
Expand All @@ -205,3 +128,17 @@ module "worker_instances" {
type = var.worker_disk_type
}]
}

resource "null_resource" "set_worker_smbios_values" {
count = local.worker_count
depends_on = [module.worker_instances]

provisioner "local-exec" {
command = "/usr/bin/env bash scripts/set_smbios_values.sh ${replace(local.pve_token_id, "!", "'!'")} ${local.pve_token} ${local.worker_placement[count.index].host} ${local.worker_placement[count.index].vmid} ${local.worker_sku} ${random_string.worker_serial[count.index].result} ${local.worker_placement[count.index].uuid}"
}

lifecycle {
ignore_changes = all
}
}

60 changes: 60 additions & 0 deletions cluster/templates/set_smbios_values.sh.tpl
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
#!/bin/bash

set -euo pipefail

pve_token_id="$${1}"
pve_token="$${2}"
host="$${3}"
vmid="$${4}"
role="$${5}"
serial="$${6}"
uuid="$${7}"

if [[ "$${role}" == "master" ]]; then
sku=${master_sku}
else
sku=${worker_sku}
fi

curl --silent --insecure -H \
"Authorization: PVEAPIToken=$${pve_token_id}=$${pve_token}" \
-X POST \
${pm_api_url}/nodes/$${host}/qemu/$${vmid}/status/stop
_ret=$?

if [ $_ret != 0 ]; then
echo "stopping VM $${vmid} failed"
exit 1
fi

while ! curl --silent --insecure -H \
"Authorization: PVEAPIToken=$${pve_token_id}=$${pve_token}" \
${pm_api_url}/nodes/$${host}/qemu/$${vmid}/status/current \
| jq -r .data.status | grep -q "stopped"; \
do sleep 5 ;
done

curl --silent --insecure -H \
"Authorization: PVEAPIToken=$${pve_token_id}=$${pve_token}" \
-X POST --data-urlencode \
smbios1="serial=$${serial},family=${family},sku=$${sku},uuid=$${uuid}" \
${pm_api_url}/nodes/$${host}/qemu/$${vmid}/config
_ret=$?

if [ $_ret != 0 ]; then
echo "updating smbios values for VM $${vmid} failed"
exit 1
fi

sleep 5

curl --silent --insecure -H \
"Authorization: PVEAPIToken=$${pve_token_id}=$${pve_token}" \
-X POST \
${pm_api_url}/nodes/$${host}/qemu/$${vmid}/status/start
_ret=$?

if [ $_ret != 0 ]; then
echo "starting VM $${vmid} failed"
exit 1
fi
7 changes: 4 additions & 3 deletions cluster/terraform.tfvars
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,13 @@ pm_tls_insecure = true

resource_pool = "room101-a7d-mc"

cpu = "custom-talos-kvm64"
resource_cpu_cores = 2
resource_cpu_sockets = 1
resource_memory = 3072

pxe_boot = true
boot = "order=scsi0;net0"
boot = "order=virtio0;net0"

# network config
network_model = "virtio"
Expand All @@ -17,10 +18,10 @@ network_model = "virtio"
net0_network_bridge = "vmbr0"
net0_vlan_tag = 1100

master_disk_type = "scsi"
master_disk_type = "virtio"
master_disk_storage = "local-lvm"
master_disk_size = "30G"

worker_disk_type = "scsi"
worker_disk_type = "virtio"
worker_disk_storage = "local-lvm"
worker_disk_size = "30G"
5 changes: 5 additions & 0 deletions cluster/variables.tf
Original file line number Diff line number Diff line change
Expand Up @@ -83,6 +83,11 @@ variable "resource_pool" {
description = "Pool to create resources in."
}

variable "cpu" {
type = string
description = "CPU model"
}

variable "resource_cpu_cores" {
type = number
default = 1
Expand Down
12 changes: 9 additions & 3 deletions cluster/zz_locals.tf
Original file line number Diff line number Diff line change
Expand Up @@ -6,49 +6,55 @@ locals {
oncreate = false

# master config
master_count = 0
master_count = 1
master_description = "room101-a7d MC master"
master_placement = [
{
hagroup = "ha-group-1"
host = "host-01"
vmid = 410
uuid = "7eb6cf89-d07f-40a5-bfb0-c3003045e013"
},
{
hagroup = "ha-group-2"
host = "host-02"
vmid = 411
uuid = "203e63cb-a8aa-4bf8-a5b6-333090507777"
},
{
hagroup = "ha-group-3"
host = "host-03"
vmid = 412
uuid = "2d1e5620-fdbc-4487-8f43-98cc9f36c308"
}
]

# smbios1 values
family = local.name_stub
family = replace(local.name_stub, "-", "")
master_sku = "master"
worker_sku = "worker"

# worker config
worker_count = 0
worker_count = 2
worker_description = "room101-a7d MC worker"
worker_placement = [
{
hagroup = "ha-group-1"
host = "host-01"
vmid = 415
uuid = "fc25565c-e70d-4e6f-9e60-bf966ea330f3"
},
{
hagroup = "ha-group-2"
host = "host-02"
vmid = 416
uuid = "6904e125-fc6c-4614-a16f-bef7474373f4"
},
{
hagroup = "ha-group-3"
host = "host-03"
vmid = 417
uuid = "498eeb6c-76dd-4fb1-9bc4-bb940e8803ff"
}
]

Expand Down

0 comments on commit 1395470

Please sign in to comment.