diff --git a/terraform/projects/simple-cloudinit-vm/main.tf b/terraform/projects/simple-vm-telmate/main.tf similarity index 100% rename from terraform/projects/simple-cloudinit-vm/main.tf rename to terraform/projects/simple-vm-telmate/main.tf diff --git a/terraform/projects/simple-cloudinit-vm/provider.tf b/terraform/projects/simple-vm-telmate/provider.tf similarity index 100% rename from terraform/projects/simple-cloudinit-vm/provider.tf rename to terraform/projects/simple-vm-telmate/provider.tf diff --git a/terraform/projects/simple-cloudinit-vm/variables.tf b/terraform/projects/simple-vm-telmate/variables.tf similarity index 100% rename from terraform/projects/simple-cloudinit-vm/variables.tf rename to terraform/projects/simple-vm-telmate/variables.tf diff --git a/terraform/projects/bpg-simple-vm/main.tf b/terraform/projects/simple-vm-with-module/main.tf similarity index 100% rename from terraform/projects/bpg-simple-vm/main.tf rename to terraform/projects/simple-vm-with-module/main.tf diff --git a/terraform/projects/bpg-simple-vm/provider.tf b/terraform/projects/simple-vm-with-module/provider.tf similarity index 100% rename from terraform/projects/bpg-simple-vm/provider.tf rename to terraform/projects/simple-vm-with-module/provider.tf diff --git a/terraform/projects/bpg-simple-vm/variables.tf b/terraform/projects/simple-vm-with-module/variables.tf similarity index 100% rename from terraform/projects/bpg-simple-vm/variables.tf rename to terraform/projects/simple-vm-with-module/variables.tf diff --git a/terraform/projects/simple-vm/main.tf b/terraform/projects/simple-vm/main.tf new file mode 100644 index 0000000..8037997 --- /dev/null +++ b/terraform/projects/simple-vm/main.tf @@ -0,0 +1,88 @@ +data "proxmox_virtual_environment_vms" "template" { + filter { + name = "name" + values = ["${var.vm_template}"] + } +} + +resource "proxmox_virtual_environment_file" "cloud_config" { + content_type = "snippets" + datastore_id = "local" + node_name = var.node_name + source_raw { + file_name = "vm.cloud-config.yaml" + data = <<-EOF + #cloud-config + hostname: ${var.vm_name} + package_update: true + package_upgrade: true + packages: + - qemu-guest-agent + users: + - default + - name: ${var.vm_user} + groups: sudo + shell: /bin/bash + ssh-authorized-keys: + - "${var.vm_user_sshkey}" + sudo: ALL=(ALL) NOPASSWD:ALL + runcmd: + - systemctl enable qemu-guest-agent + - reboot + EOF + } +} + +resource "proxmox_virtual_environment_vm" "vm" { + name = var.vm_name + node_name = var.node_name + tags = var.vm_tags + agent { + enabled = true + } + stop_on_destroy = true + clone { + vm_id = data.proxmox_virtual_environment_vms.template.vms[0].vm_id + node_name = data.proxmox_virtual_environment_vms.template.vms[0].node_name + } + bios = var.vm_bios + machine = var.vm_machine + cpu { + cores = var.vm_cpu + type = "host" + } + memory { + dedicated = var.vm_ram + } + disk { + datastore_id = var.node_datastore + interface = "scsi0" + size = 4 + } + initialization { + user_data_file_id = proxmox_virtual_environment_file.cloud_config.id + datastore_id = var.node_datastore + interface = "scsi1" + ip_config { + ipv4 { + address = "dhcp" + } + } + } + network_device { + bridge = "vmbr0" + vlan_id = var.vm_vlan + } + operating_system { + type = "l26" + } + vga { + type = "std" + } +} + +output "vm_ip" { + value = proxmox_virtual_environment_vm.vm.ipv4_addresses[1][0] + description = "VM IP" +} + diff --git a/terraform/projects/simple-vm/provider.tf b/terraform/projects/simple-vm/provider.tf new file mode 100644 index 0000000..518dd4c --- /dev/null +++ b/terraform/projects/simple-vm/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/simple-vm/terraform.tfvars b/terraform/projects/simple-vm/terraform.tfvars new file mode 100644 index 0000000..05eb60c --- /dev/null +++ b/terraform/projects/simple-vm/terraform.tfvars @@ -0,0 +1,5 @@ +node_name = "zenith" +vm_name = "zenith-vm" +vm_cpu = 2 +vm_ram = 2048 +vm_vlan = 66 \ No newline at end of file diff --git a/terraform/projects/simple-vm/variables.tf b/terraform/projects/simple-vm/variables.tf new file mode 100644 index 0000000..312c311 --- /dev/null +++ b/terraform/projects/simple-vm/variables.tf @@ -0,0 +1,80 @@ +variable "proxmox_endpoint" { + description = "Proxmox URL endpoint" + type = string +} + +variable "proxmox_api_token" { + description = "Proxmox API token" + type = string + sensitive = true +} + +variable "node_name" { + description = "Proxmox host for the VM" + type = string +} + +variable "node_datastore" { + description = "Datastore used for VM storage" + type = string + default = "ceph-workload" +} + +variable "vm_template" { + description = "Template of the VM" + type = string + default = "ubuntu-cloud" +} + +variable "vm_name" { + description = "Hostname of the VM" + type = string +} + +variable "vm_user" { + description = "Admin user of the VM" + type = string + default = "vez" +} + +variable "vm_user_sshkey" { + description = "Admin user SSH key of the VM" + type = string + default = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAID62LmYRu1rDUha3timAIcA39LtcIOny1iAgFLnxoBxm vez@bastion" +} + +variable "vm_cpu" { + description = "Number of CPU cores of the VM" + type = number + default = 1 +} + +variable "vm_ram" { + description = "Number of RAM (MB) of the VM" + type = number + default = 2048 +} + +variable "vm_bios" { + description = "Type of BIOS used for the VM" + type = string + default = "ovmf" +} + +variable "vm_machine" { + description = "Type of machine used for the VM" + type = string + default = "q35" +} + +variable "vm_vlan" { + description = "VLAN of the VM" + type = number + default = 66 +} + +variable "vm_tags" { + description = "Tags for the VM" + type = list(any) + default = ["test"] +} \ No newline at end of file