diff --git a/terraform/projects/semaphore-vms/main.tf b/terraform/projects/semaphore-vms/main.tf new file mode 100644 index 0000000..e827fb0 --- /dev/null +++ b/terraform/projects/semaphore-vms/main.tf @@ -0,0 +1,33 @@ +module "pve_vm" { + source = "../../modules/pve_vm" + for_each = local.vm_list + + node_name = each.value.node_name + vm_name = each.value.vm_name + vm_cpu = each.value.vm_cpu + vm_ram = each.value.vm_ram + vm_vlan = each.value.vm_vlan +} + +locals { + # Ordered list of VM hostnames + sem_hosts = ["sem01", "sem02", "sem03"] + + # Create a map: host -> node + vm_list = { + for idx, host in local.sem_hosts : + host => { + node_name = data.proxmox_virtual_environment_nodes.pve_nodes.names[idx] + vm_name = host + vm_cpu = 1 + vm_ram = 2048 + vm_vlan = 66 + } + } +} + +data "proxmox_virtual_environment_nodes" "pve_nodes" {} + +output "vm_ip" { + value = { for k, v in module.pve_vm : k => v.vm_ip } +} diff --git a/terraform/projects/semaphore-vms/provider.tf b/terraform/projects/semaphore-vms/provider.tf new file mode 100644 index 0000000..518dd4c --- /dev/null +++ b/terraform/projects/semaphore-vms/provider.tf @@ -0,0 +1,18 @@ +terraform { + required_providers { + proxmox = { + source = "bpg/proxmox" + } + } +} + +provider "proxmox" { + endpoint = var.proxmox_endpoint + api_token = var.proxmox_api_token + insecure = false + ssh { + agent = false + private_key = file("~/.ssh/id_ed25519") + username = "root" + } +} diff --git a/terraform/projects/semaphore-vms/variables.tf b/terraform/projects/semaphore-vms/variables.tf new file mode 100644 index 0000000..fb37c8d --- /dev/null +++ b/terraform/projects/semaphore-vms/variables.tf @@ -0,0 +1,10 @@ +variable "proxmox_endpoint" { + description = "Proxmox URL endpoint" + type = string +} + +variable "proxmox_api_token" { + description = "Proxmox API token" + type = string + sensitive = true +} \ No newline at end of file