commit 8cea4a43a3f0fd2c858adc75aa0ad568f9d84429 Author: Jules Date: Sat Nov 22 01:27:53 2025 +0100 (Install) for barbatruc pve diff --git a/cloud-init/user-config.yml b/cloud-init/user-config.yml new file mode 100644 index 0000000..cd1dd4b --- /dev/null +++ b/cloud-init/user-config.yml @@ -0,0 +1,10 @@ +#cloud-config +hostname: test-debian-13 +users: +- name: jules + gecos: jules + ssh_authorized_keys: + - ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAICQQONYcvTqY2lHU4wyVptMCajc2sc48FFxmGka/vMsF jules@jules-laptop + lock_passwd: false + sudo: ['ALL=(ALL) NOPASSWD:ALL'] + shell: /bin/bash diff --git a/cloud-init/vendor-config.yml b/cloud-init/vendor-config.yml new file mode 100644 index 0000000..f24a190 --- /dev/null +++ b/cloud-init/vendor-config.yml @@ -0,0 +1,6 @@ +#cloud-config +package_update: true +packages: + - qemu-guest-agent +runcmd: + - systemctl enable --now qemu-guest-agent diff --git a/create.sh b/create.sh new file mode 100644 index 0000000..936d574 --- /dev/null +++ b/create.sh @@ -0,0 +1,2 @@ +cp main.tf main_$number.tf +sed -i "s/debian_13_test/debian_$number/g" main_$number.tf && sed -i "s/user_config/user_config_$number/g" main_$number.tf && sed -i "s/vendor_config/vendor_config_$number/g" main_$number.tf && sed -i "s/debian_13/debian_$number/g" main_$number.tf diff --git a/main.tf b/main.tf new file mode 100644 index 0000000..86ac69b --- /dev/null +++ b/main.tf @@ -0,0 +1,91 @@ +resource "proxmox_virtual_environment_download_file" "debian_13" { + content_type = "iso" + datastore_id = "local" + file_name = "debian-13-generic-amd64.img" + node_name = var.pve_node + url = var.debian_image_url + checksum = var.debian_image_checksum + checksum_algorithm = var.debian_image_checksum_algorithm + overwrite = true + overwrite_unmanaged = true +} + +resource "proxmox_virtual_environment_file" "user_config" { + content_type = "snippets" + datastore_id = "local" + node_name = var.pve_node + + source_raw { + data = file("cloud-init/user-config.yml") + file_name = "user-config.yml" + } +} + +resource "proxmox_virtual_environment_file" "vendor_config" { + content_type = "snippets" + datastore_id = "local" + node_name = var.pve_node + + source_raw { + data = file("cloud-init/vendor-config.yml") + file_name = "vendor-config.yml" + } +} + +resource "proxmox_virtual_environment_vm" "debian_13_test" { + depends_on = [ + proxmox_virtual_environment_file.user_config, + proxmox_virtual_environment_file.vendor_config + ] + name = "debian-13" + description = "Debian 13 created with Terraform" + tags = ["terraform", "debian"] + node_name = var.pve_node + + cpu { + cores = 2 + } + memory { + dedicated = 2048 + floating = 2048 + } + + disk { + datastore_id = "local-zfs" + file_id = proxmox_virtual_environment_download_file.debian_13.id + interface = "virtio0" + iothread = true + discard = "on" + ssd = true + # disk { + # datastore_id = var.node_datastore # Datastore to hold the disk + # interface = "scsi0" # Primary disk interface + # size = 4 # Disk size in GB + } + + network_device { + bridge = "vmbr0" + model = "virtio" + } + operating_system { + type = "l26" + } + agent { + enabled = true + } + initialization { + datastore_id = var.node_datastore # Datastore to hold the disk + ip_config { + ipv4 { + address = "dhcp" + } + } + # Link cloud-init yml files + user_data_file_id = proxmox_virtual_environment_file.user_config.id + vendor_data_file_id = proxmox_virtual_environment_file.vendor_config.id + } +} + +output "debian_13_test_ip_address" { + value = proxmox_virtual_environment_vm.debian_13_test.ipv4_addresses +} diff --git a/main_1.tf b/main_1.tf new file mode 100644 index 0000000..b4f0e00 --- /dev/null +++ b/main_1.tf @@ -0,0 +1,91 @@ +resource "proxmox_virtual_environment_download_file" "debian_1" { + content_type = "iso" + datastore_id = "local" + file_name = "debian-13-generic-amd64.img" + node_name = var.pve_node + url = var.debian_image_url + checksum = var.debian_image_checksum + checksum_algorithm = var.debian_image_checksum_algorithm + overwrite = true + overwrite_unmanaged = true +} + +resource "proxmox_virtual_environment_file" "user_config_1" { + content_type = "snippets" + datastore_id = "local" + node_name = var.pve_node + + source_raw { + data = file("cloud-init/user-config.yml") + file_name = "user-config.yml" + } +} + +resource "proxmox_virtual_environment_file" "vendor_config_1" { + content_type = "snippets" + datastore_id = "local" + node_name = var.pve_node + + source_raw { + data = file("cloud-init/vendor-config.yml") + file_name = "vendor-config.yml" + } +} + +resource "proxmox_virtual_environment_vm" "debian_1" { + depends_on = [ + proxmox_virtual_environment_file.user_config_1, + proxmox_virtual_environment_file.vendor_config_1 + ] + name = "debian-13" + description = "Debian 13 created with Terraform" + tags = ["terraform", "debian"] + node_name = var.pve_node + + cpu { + cores = 2 + } + memory { + dedicated = 2048 + floating = 2048 + } + + disk { + datastore_id = "local-zfs" + file_id = proxmox_virtual_environment_download_file.debian_1.id + interface = "virtio0" + iothread = true + discard = "on" + ssd = true + # disk { + # datastore_id = var.node_datastore # Datastore to hold the disk + # interface = "scsi0" # Primary disk interface + # size = 4 # Disk size in GB + } + + network_device { + bridge = "vmbr0" + model = "virtio" + } + operating_system { + type = "l26" + } + agent { + enabled = true + } + initialization { + datastore_id = var.node_datastore # Datastore to hold the disk + ip_config { + ipv4 { + address = "dhcp" + } + } + # Link cloud-init yml files + user_data_file_id = proxmox_virtual_environment_file.user_config_1.id + vendor_data_file_id = proxmox_virtual_environment_file.vendor_config_1.id + } +} + +output "debian_1_ip_address" { + value = proxmox_virtual_environment_vm.debian_1.ipv4_addresses +} diff --git a/main_2.tf b/main_2.tf new file mode 100644 index 0000000..98fae7e --- /dev/null +++ b/main_2.tf @@ -0,0 +1,91 @@ +resource "proxmox_virtual_environment_download_file" "debian_2" { + content_type = "iso" + datastore_id = "local" + file_name = "debian-13-generic-amd64.img" + node_name = var.pve_node + url = var.debian_image_url + checksum = var.debian_image_checksum + checksum_algorithm = var.debian_image_checksum_algorithm + overwrite = true + overwrite_unmanaged = true +} + +resource "proxmox_virtual_environment_file" "user_config_2" { + content_type = "snippets" + datastore_id = "local" + node_name = var.pve_node + + source_raw { + data = file("cloud-init/user-config.yml") + file_name = "user-config.yml" + } +} + +resource "proxmox_virtual_environment_file" "vendor_config_2" { + content_type = "snippets" + datastore_id = "local" + node_name = var.pve_node + + source_raw { + data = file("cloud-init/vendor-config.yml") + file_name = "vendor-config.yml" + } +} + +resource "proxmox_virtual_environment_vm" "debian_2" { + depends_on = [ + proxmox_virtual_environment_file.user_config_2, + proxmox_virtual_environment_file.vendor_config_2 + ] + name = "debian-13" + description = "Debian 13 created with Terraform" + tags = ["terraform", "debian"] + node_name = var.pve_node + + cpu { + cores = 2 + } + memory { + dedicated = 2048 + floating = 2048 + } + + disk { + datastore_id = "local-zfs" + file_id = proxmox_virtual_environment_download_file.debian_2.id + interface = "virtio0" + iothread = true + discard = "on" + ssd = true + # disk { + # datastore_id = var.node_datastore # Datastore to hold the disk + # interface = "scsi0" # Primary disk interface + # size = 4 # Disk size in GB + } + + network_device { + bridge = "vmbr0" + model = "virtio" + } + operating_system { + type = "l26" + } + agent { + enabled = true + } + initialization { + datastore_id = var.node_datastore # Datastore to hold the disk + ip_config { + ipv4 { + address = "dhcp" + } + } + # Link cloud-init yml files + user_data_file_id = proxmox_virtual_environment_file.user_config_2.id + vendor_data_file_id = proxmox_virtual_environment_file.vendor_config_2.id + } +} + +output "debian_2_ip_address" { + value = proxmox_virtual_environment_vm.debian_2.ipv4_addresses +} diff --git a/provider.tf b/provider.tf new file mode 100644 index 0000000..a7677c0 --- /dev/null +++ b/provider.tf @@ -0,0 +1,16 @@ +terraform { + required_version = "> 1.6.0" + required_providers { + proxmox = { + source = "bpg/proxmox" + version = "~> 0.87.0" + } + } +} + +provider "proxmox" { + endpoint = var.pve_endpoint + username = var.pve_username + password = var.pve_password + insecure = var.pve_insecure +} diff --git a/terraform.tfstate b/terraform.tfstate new file mode 100644 index 0000000..929f276 --- /dev/null +++ b/terraform.tfstate @@ -0,0 +1 @@ +{"version":4,"terraform_version":"1.10.6","serial":17,"lineage":"b820483f-693f-5832-e921-dcc805ac82be","outputs":{"debian_13_test_ip_address":{"value":[["127.0.0.1"],["192.168.1.12"]],"type":["list",["list","string"]]},"debian_1_ip_address":{"value":[["127.0.0.1"],["192.168.1.10"]],"type":["list",["list","string"]]},"debian_2_ip_address":{"value":[["127.0.0.1"],["192.168.1.11"]],"type":["list",["list","string"]]}},"resources":[{"mode":"managed","type":"proxmox_virtual_environment_download_file","name":"debian_1","provider":"provider[\"registry.opentofu.org/bpg/proxmox\"]","instances":[{"schema_version":0,"attributes":{"checksum":"1882f2d0debfb52254db1b0fc850d222fa68470a644a914d181f744ac1511a6caa1835368362db6dee88504a13c726b3ee9de0e43648353f62e90e075f497026","checksum_algorithm":"sha512","content_type":"iso","datastore_id":"local","decompression_algorithm":null,"file_name":"debian-13-generic-amd64.img","id":"local:iso/debian-13-generic-amd64.img","node_name":"barbatruc","overwrite":true,"overwrite_unmanaged":true,"size":434176000,"upload_timeout":600,"url":"https://cloud.debian.org/images/cloud/trixie/20251117-2299/debian-13-generic-amd64-20251117-2299.qcow2","verify":true},"sensitive_attributes":[]}]},{"mode":"managed","type":"proxmox_virtual_environment_download_file","name":"debian_13","provider":"provider[\"registry.opentofu.org/bpg/proxmox\"]","instances":[{"schema_version":0,"attributes":{"checksum":"1882f2d0debfb52254db1b0fc850d222fa68470a644a914d181f744ac1511a6caa1835368362db6dee88504a13c726b3ee9de0e43648353f62e90e075f497026","checksum_algorithm":"sha512","content_type":"iso","datastore_id":"local","decompression_algorithm":null,"file_name":"debian-13-generic-amd64.img","id":"local:iso/debian-13-generic-amd64.img","node_name":"barbatruc","overwrite":true,"overwrite_unmanaged":true,"size":434176000,"upload_timeout":600,"url":"https://cloud.debian.org/images/cloud/trixie/20251117-2299/debian-13-generic-amd64-20251117-2299.qcow2","verify":true},"sensitive_attributes":[]}]},{"mode":"managed","type":"proxmox_virtual_environment_download_file","name":"debian_2","provider":"provider[\"registry.opentofu.org/bpg/proxmox\"]","instances":[{"schema_version":0,"attributes":{"checksum":"1882f2d0debfb52254db1b0fc850d222fa68470a644a914d181f744ac1511a6caa1835368362db6dee88504a13c726b3ee9de0e43648353f62e90e075f497026","checksum_algorithm":"sha512","content_type":"iso","datastore_id":"local","decompression_algorithm":null,"file_name":"debian-13-generic-amd64.img","id":"local:iso/debian-13-generic-amd64.img","node_name":"barbatruc","overwrite":true,"overwrite_unmanaged":true,"size":434176000,"upload_timeout":600,"url":"https://cloud.debian.org/images/cloud/trixie/20251117-2299/debian-13-generic-amd64-20251117-2299.qcow2","verify":true},"sensitive_attributes":[]}]},{"mode":"managed","type":"proxmox_virtual_environment_file","name":"user_config","provider":"provider[\"registry.opentofu.org/bpg/proxmox\"]","instances":[{"schema_version":0,"attributes":{"content_type":"snippets","datastore_id":"local","file_mode":null,"file_modification_date":null,"file_name":"user-config.yml","file_size":null,"file_tag":null,"id":"local:snippets/user-config.yml","node_name":"barbatruc","overwrite":true,"source_file":[],"source_raw":[{"data":"#cloud-config\nhostname: test-debian-13\nusers:\n- name: jules\n gecos: jules\n ssh_authorized_keys:\n - ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAICQQONYcvTqY2lHU4wyVptMCajc2sc48FFxmGka/vMsF jules@jules-laptop\n lock_passwd: false\n sudo: ['ALL=(ALL) NOPASSWD:ALL']\n shell: /bin/bash\n","file_name":"user-config.yml","resize":0}],"timeout_upload":1800},"sensitive_attributes":[],"private":"bnVsbA=="}]},{"mode":"managed","type":"proxmox_virtual_environment_file","name":"user_config_1","provider":"provider[\"registry.opentofu.org/bpg/proxmox\"]","instances":[{"schema_version":0,"attributes":{"content_type":"snippets","datastore_id":"local","file_mode":null,"file_modification_date":null,"file_name":"user-config.yml","file_size":null,"file_tag":null,"id":"local:snippets/user-config.yml","node_name":"barbatruc","overwrite":true,"source_file":[],"source_raw":[{"data":"#cloud-config\nhostname: test-debian-13\nusers:\n- name: jules\n gecos: jules\n ssh_authorized_keys:\n - ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAICQQONYcvTqY2lHU4wyVptMCajc2sc48FFxmGka/vMsF jules@jules-laptop\n lock_passwd: false\n sudo: ['ALL=(ALL) NOPASSWD:ALL']\n shell: /bin/bash\n","file_name":"user-config.yml","resize":0}],"timeout_upload":1800},"sensitive_attributes":[],"private":"bnVsbA=="}]},{"mode":"managed","type":"proxmox_virtual_environment_file","name":"user_config_2","provider":"provider[\"registry.opentofu.org/bpg/proxmox\"]","instances":[{"schema_version":0,"attributes":{"content_type":"snippets","datastore_id":"local","file_mode":null,"file_modification_date":null,"file_name":"user-config.yml","file_size":null,"file_tag":null,"id":"local:snippets/user-config.yml","node_name":"barbatruc","overwrite":true,"source_file":[],"source_raw":[{"data":"#cloud-config\nhostname: test-debian-13\nusers:\n- name: jules\n gecos: jules\n ssh_authorized_keys:\n - ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAICQQONYcvTqY2lHU4wyVptMCajc2sc48FFxmGka/vMsF jules@jules-laptop\n lock_passwd: false\n sudo: ['ALL=(ALL) NOPASSWD:ALL']\n shell: /bin/bash\n","file_name":"user-config.yml","resize":0}],"timeout_upload":1800},"sensitive_attributes":[],"private":"bnVsbA=="}]},{"mode":"managed","type":"proxmox_virtual_environment_file","name":"vendor_config","provider":"provider[\"registry.opentofu.org/bpg/proxmox\"]","instances":[{"schema_version":0,"attributes":{"content_type":"snippets","datastore_id":"local","file_mode":null,"file_modification_date":null,"file_name":"vendor-config.yml","file_size":null,"file_tag":null,"id":"local:snippets/vendor-config.yml","node_name":"barbatruc","overwrite":true,"source_file":[],"source_raw":[{"data":"#cloud-config\npackage_update: true\npackages:\n - qemu-guest-agent\nruncmd:\n - systemctl enable --now qemu-guest-agent\n","file_name":"vendor-config.yml","resize":0}],"timeout_upload":1800},"sensitive_attributes":[],"private":"bnVsbA=="}]},{"mode":"managed","type":"proxmox_virtual_environment_file","name":"vendor_config_1","provider":"provider[\"registry.opentofu.org/bpg/proxmox\"]","instances":[{"schema_version":0,"attributes":{"content_type":"snippets","datastore_id":"local","file_mode":null,"file_modification_date":null,"file_name":"vendor-config.yml","file_size":null,"file_tag":null,"id":"local:snippets/vendor-config.yml","node_name":"barbatruc","overwrite":true,"source_file":[],"source_raw":[{"data":"#cloud-config\npackage_update: true\npackages:\n - qemu-guest-agent\nruncmd:\n - systemctl enable --now qemu-guest-agent\n","file_name":"vendor-config.yml","resize":0}],"timeout_upload":1800},"sensitive_attributes":[],"private":"bnVsbA=="}]},{"mode":"managed","type":"proxmox_virtual_environment_file","name":"vendor_config_2","provider":"provider[\"registry.opentofu.org/bpg/proxmox\"]","instances":[{"schema_version":0,"attributes":{"content_type":"snippets","datastore_id":"local","file_mode":null,"file_modification_date":null,"file_name":"vendor-config.yml","file_size":null,"file_tag":null,"id":"local:snippets/vendor-config.yml","node_name":"barbatruc","overwrite":true,"source_file":[],"source_raw":[{"data":"#cloud-config\npackage_update: true\npackages:\n - qemu-guest-agent\nruncmd:\n - systemctl enable --now qemu-guest-agent\n","file_name":"vendor-config.yml","resize":0}],"timeout_upload":1800},"sensitive_attributes":[],"private":"bnVsbA=="}]},{"mode":"managed","type":"proxmox_virtual_environment_vm","name":"debian_1","provider":"provider[\"registry.opentofu.org/bpg/proxmox\"]","instances":[{"schema_version":0,"attributes":{"acpi":true,"agent":[{"enabled":true,"timeout":"15m","trim":false,"type":"virtio"}],"amd_sev":[],"audio_device":[],"bios":"seabios","boot_order":null,"cdrom":[],"clone":[],"cpu":[{"affinity":"","architecture":"","cores":2,"flags":null,"hotplugged":0,"limit":0,"numa":false,"sockets":1,"type":"qemu64","units":100}],"delete_unreferenced_disks_on_destroy":true,"description":"Debian 13 created with Terraform","disk":[{"aio":"io_uring","backup":true,"cache":"none","datastore_id":"local-zfs","discard":"on","file_format":"raw","file_id":"local:iso/debian-13-generic-amd64.img","import_from":"","interface":"virtio0","iothread":true,"path_in_datastore":"vm-101-disk-0","replicate":true,"serial":"","size":8,"speed":[],"ssd":false}],"efi_disk":[],"hook_script_file_id":null,"hostpci":[],"id":"101","initialization":[{"datastore_id":"local-zfs","dns":[],"interface":"ide2","ip_config":[{"ipv4":[{"address":"dhcp","gateway":""}],"ipv6":[]}],"meta_data_file_id":"","network_data_file_id":"","type":"","user_account":[],"user_data_file_id":"local:snippets/user-config.yml","vendor_data_file_id":"local:snippets/vendor-config.yml"}],"ipv4_addresses":[["127.0.0.1"],["192.168.1.10"]],"ipv6_addresses":[["::1"],["2a01:cb19:528:300:be24:11ff:fe6b:b346","fe80::be24:11ff:fe6b:b346"]],"keyboard_layout":"en-us","kvm_arguments":"","mac_addresses":["00:00:00:00:00:00","BC:24:11:6B:B3:46"],"machine":"","memory":[{"dedicated":2048,"floating":2048,"hugepages":"","keep_hugepages":false,"shared":0}],"migrate":false,"name":"debian-13","network_device":[{"bridge":"vmbr0","disconnected":false,"enabled":true,"firewall":false,"mac_address":"BC:24:11:6B:B3:46","model":"virtio","mtu":0,"queues":0,"rate_limit":0,"trunks":"","vlan_id":0}],"network_interface_names":["lo","eth0"],"node_name":"barbatruc","numa":[],"on_boot":true,"operating_system":[{"type":"l26"}],"pool_id":"","protection":false,"purge_on_destroy":true,"reboot":false,"reboot_after_update":true,"rng":[],"scsi_hardware":"virtio-scsi-pci","serial_device":[],"smbios":[],"started":true,"startup":[],"stop_on_destroy":false,"tablet_device":true,"tags":["debian","terraform"],"template":false,"timeout_clone":1800,"timeout_create":1800,"timeout_migrate":1800,"timeout_move_disk":1800,"timeout_reboot":1800,"timeout_shutdown_vm":1800,"timeout_start_vm":1800,"timeout_stop_vm":300,"tpm_state":[],"usb":[],"vga":[],"virtiofs":[],"vm_id":101,"watchdog":[]},"sensitive_attributes":[],"private":"bnVsbA==","dependencies":["proxmox_virtual_environment_download_file.debian_1","proxmox_virtual_environment_file.user_config_1","proxmox_virtual_environment_file.vendor_config_1"]}]},{"mode":"managed","type":"proxmox_virtual_environment_vm","name":"debian_13_test","provider":"provider[\"registry.opentofu.org/bpg/proxmox\"]","instances":[{"schema_version":0,"attributes":{"acpi":true,"agent":[{"enabled":true,"timeout":"15m","trim":false,"type":"virtio"}],"amd_sev":[],"audio_device":[],"bios":"seabios","boot_order":null,"cdrom":[],"clone":[],"cpu":[{"affinity":"","architecture":"","cores":2,"flags":null,"hotplugged":0,"limit":0,"numa":false,"sockets":1,"type":"qemu64","units":100}],"delete_unreferenced_disks_on_destroy":true,"description":"Debian 13 created with Terraform","disk":[{"aio":"io_uring","backup":true,"cache":"none","datastore_id":"local-zfs","discard":"on","file_format":"raw","file_id":"local:iso/debian-13-generic-amd64.img","import_from":"","interface":"virtio0","iothread":true,"path_in_datastore":"vm-103-disk-0","replicate":true,"serial":"","size":8,"speed":[],"ssd":false}],"efi_disk":[],"hook_script_file_id":null,"hostpci":[],"id":"103","initialization":[{"datastore_id":"local-zfs","dns":[],"interface":"ide2","ip_config":[{"ipv4":[{"address":"dhcp","gateway":""}],"ipv6":[]}],"meta_data_file_id":"","network_data_file_id":"","type":"","user_account":[],"user_data_file_id":"local:snippets/user-config.yml","vendor_data_file_id":"local:snippets/vendor-config.yml"}],"ipv4_addresses":[["127.0.0.1"],["192.168.1.12"]],"ipv6_addresses":[["::1"],["2a01:cb19:528:300:be24:11ff:fe3f:a10a","fe80::be24:11ff:fe3f:a10a"]],"keyboard_layout":"en-us","kvm_arguments":"","mac_addresses":["00:00:00:00:00:00","BC:24:11:3F:A1:0A"],"machine":"","memory":[{"dedicated":2048,"floating":2048,"hugepages":"","keep_hugepages":false,"shared":0}],"migrate":false,"name":"debian-13","network_device":[{"bridge":"vmbr0","disconnected":false,"enabled":true,"firewall":false,"mac_address":"BC:24:11:3F:A1:0A","model":"virtio","mtu":0,"queues":0,"rate_limit":0,"trunks":"","vlan_id":0}],"network_interface_names":["lo","eth0"],"node_name":"barbatruc","numa":[],"on_boot":true,"operating_system":[{"type":"l26"}],"pool_id":"","protection":false,"purge_on_destroy":true,"reboot":false,"reboot_after_update":true,"rng":[],"scsi_hardware":"virtio-scsi-pci","serial_device":[],"smbios":[],"started":true,"startup":[],"stop_on_destroy":false,"tablet_device":true,"tags":["debian","terraform"],"template":false,"timeout_clone":1800,"timeout_create":1800,"timeout_migrate":1800,"timeout_move_disk":1800,"timeout_reboot":1800,"timeout_shutdown_vm":1800,"timeout_start_vm":1800,"timeout_stop_vm":300,"tpm_state":[],"usb":[],"vga":[],"virtiofs":[],"vm_id":103,"watchdog":[]},"sensitive_attributes":[],"private":"bnVsbA==","dependencies":["proxmox_virtual_environment_download_file.debian_13","proxmox_virtual_environment_file.user_config","proxmox_virtual_environment_file.vendor_config"]}]},{"mode":"managed","type":"proxmox_virtual_environment_vm","name":"debian_2","provider":"provider[\"registry.opentofu.org/bpg/proxmox\"]","instances":[{"schema_version":0,"attributes":{"acpi":true,"agent":[{"enabled":true,"timeout":"15m","trim":false,"type":"virtio"}],"amd_sev":[],"audio_device":[],"bios":"seabios","boot_order":null,"cdrom":[],"clone":[],"cpu":[{"affinity":"","architecture":"","cores":2,"flags":null,"hotplugged":0,"limit":0,"numa":false,"sockets":1,"type":"qemu64","units":100}],"delete_unreferenced_disks_on_destroy":true,"description":"Debian 13 created with Terraform","disk":[{"aio":"io_uring","backup":true,"cache":"none","datastore_id":"local-zfs","discard":"on","file_format":"raw","file_id":"local:iso/debian-13-generic-amd64.img","import_from":"","interface":"virtio0","iothread":true,"path_in_datastore":"vm-102-disk-0","replicate":true,"serial":"","size":8,"speed":[],"ssd":false}],"efi_disk":[],"hook_script_file_id":null,"hostpci":[],"id":"102","initialization":[{"datastore_id":"local-zfs","dns":[],"interface":"ide2","ip_config":[{"ipv4":[{"address":"dhcp","gateway":""}],"ipv6":[]}],"meta_data_file_id":"","network_data_file_id":"","type":"","user_account":[],"user_data_file_id":"local:snippets/user-config.yml","vendor_data_file_id":"local:snippets/vendor-config.yml"}],"ipv4_addresses":[["127.0.0.1"],["192.168.1.11"]],"ipv6_addresses":[["::1"],["2a01:cb19:528:300:be24:11ff:fef7:4c10","fe80::be24:11ff:fef7:4c10"]],"keyboard_layout":"en-us","kvm_arguments":"","mac_addresses":["00:00:00:00:00:00","BC:24:11:F7:4C:10"],"machine":"","memory":[{"dedicated":2048,"floating":2048,"hugepages":"","keep_hugepages":false,"shared":0}],"migrate":false,"name":"debian-13","network_device":[{"bridge":"vmbr0","disconnected":false,"enabled":true,"firewall":false,"mac_address":"BC:24:11:F7:4C:10","model":"virtio","mtu":0,"queues":0,"rate_limit":0,"trunks":"","vlan_id":0}],"network_interface_names":["lo","eth0"],"node_name":"barbatruc","numa":[],"on_boot":true,"operating_system":[{"type":"l26"}],"pool_id":"","protection":false,"purge_on_destroy":true,"reboot":false,"reboot_after_update":true,"rng":[],"scsi_hardware":"virtio-scsi-pci","serial_device":[],"smbios":[],"started":true,"startup":[],"stop_on_destroy":false,"tablet_device":true,"tags":["debian","terraform"],"template":false,"timeout_clone":1800,"timeout_create":1800,"timeout_migrate":1800,"timeout_move_disk":1800,"timeout_reboot":1800,"timeout_shutdown_vm":1800,"timeout_start_vm":1800,"timeout_stop_vm":300,"tpm_state":[],"usb":[],"vga":[],"virtiofs":[],"vm_id":102,"watchdog":[]},"sensitive_attributes":[],"private":"bnVsbA==","dependencies":["proxmox_virtual_environment_download_file.debian_2","proxmox_virtual_environment_file.user_config_2","proxmox_virtual_environment_file.vendor_config_2"]}]}],"check_results":null} diff --git a/terraform.tfstate.backup b/terraform.tfstate.backup new file mode 100644 index 0000000..cdaa5d0 --- /dev/null +++ b/terraform.tfstate.backup @@ -0,0 +1 @@ +{"version":4,"terraform_version":"1.10.6","serial":14,"lineage":"b820483f-693f-5832-e921-dcc805ac82be","outputs":{"debian_13_test_ip_address":{"value":[["127.0.0.1"],["192.168.1.7"]],"type":["list",["list","string"]]}},"resources":[{"mode":"managed","type":"proxmox_virtual_environment_download_file","name":"debian_13","provider":"provider[\"registry.opentofu.org/bpg/proxmox\"]","instances":[{"schema_version":0,"attributes":{"checksum":"1882f2d0debfb52254db1b0fc850d222fa68470a644a914d181f744ac1511a6caa1835368362db6dee88504a13c726b3ee9de0e43648353f62e90e075f497026","checksum_algorithm":"sha512","content_type":"iso","datastore_id":"local","decompression_algorithm":null,"file_name":"debian-13-generic-amd64.img","id":"local:iso/debian-13-generic-amd64.img","node_name":"barbatruc","overwrite":true,"overwrite_unmanaged":true,"size":434176000,"upload_timeout":600,"url":"https://cloud.debian.org/images/cloud/trixie/20251117-2299/debian-13-generic-amd64-20251117-2299.qcow2","verify":true},"sensitive_attributes":[],"private":"eyJvcmlnaW5hbF9zdGF0ZV9zaXplIjoiTkRNME1UYzJNREF3In0="}]},{"mode":"managed","type":"proxmox_virtual_environment_file","name":"user_config","provider":"provider[\"registry.opentofu.org/bpg/proxmox\"]","instances":[{"schema_version":0,"attributes":{"content_type":"snippets","datastore_id":"local","file_mode":null,"file_modification_date":null,"file_name":"user-config.yml","file_size":null,"file_tag":null,"id":"local:snippets/user-config.yml","node_name":"barbatruc","overwrite":true,"source_file":[],"source_raw":[{"data":"#cloud-config\nhostname: test-debian-13\nusers:\n- name: jules\n gecos: jules\n ssh_authorized_keys:\n - ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAICQQONYcvTqY2lHU4wyVptMCajc2sc48FFxmGka/vMsF jules@jules-laptop\n lock_passwd: false\n sudo: ['ALL=(ALL) NOPASSWD:ALL']\n shell: /bin/bash\n","file_name":"user-config.yml","resize":0}],"timeout_upload":1800},"sensitive_attributes":[],"private":"bnVsbA=="}]},{"mode":"managed","type":"proxmox_virtual_environment_file","name":"vendor_config","provider":"provider[\"registry.opentofu.org/bpg/proxmox\"]","instances":[{"schema_version":0,"attributes":{"content_type":"snippets","datastore_id":"local","file_mode":null,"file_modification_date":null,"file_name":"vendor-config.yml","file_size":null,"file_tag":null,"id":"local:snippets/vendor-config.yml","node_name":"barbatruc","overwrite":true,"source_file":[],"source_raw":[{"data":"#cloud-config\npackage_update: true\npackages:\n - qemu-guest-agent\nruncmd:\n - systemctl enable --now qemu-guest-agent\n","file_name":"vendor-config.yml","resize":0}],"timeout_upload":1800},"sensitive_attributes":[],"private":"bnVsbA=="}]},{"mode":"managed","type":"proxmox_virtual_environment_vm","name":"debian_13_test","provider":"provider[\"registry.opentofu.org/bpg/proxmox\"]","instances":[{"schema_version":0,"attributes":{"acpi":true,"agent":[{"enabled":true,"timeout":"15m","trim":false,"type":"virtio"}],"amd_sev":[],"audio_device":[],"bios":"seabios","boot_order":null,"cdrom":[],"clone":[],"cpu":[{"affinity":"","architecture":"","cores":2,"flags":[],"hotplugged":0,"limit":0,"numa":false,"sockets":1,"type":"qemu64","units":100}],"delete_unreferenced_disks_on_destroy":true,"description":"Debian 13 created with Terraform","disk":[{"aio":"io_uring","backup":true,"cache":"none","datastore_id":"local-zfs","discard":"on","file_format":"raw","file_id":"local:iso/debian-13-generic-amd64.img","import_from":"","interface":"virtio0","iothread":true,"path_in_datastore":"vm-101-disk-0","replicate":true,"serial":"","size":8,"speed":[],"ssd":false}],"efi_disk":[],"hook_script_file_id":null,"hostpci":[],"id":"101","initialization":[{"datastore_id":"local-zfs","dns":[],"interface":"ide2","ip_config":[{"ipv4":[{"address":"dhcp","gateway":""}],"ipv6":[]}],"meta_data_file_id":"","network_data_file_id":"","type":"","user_account":[],"user_data_file_id":"local:snippets/user-config.yml","vendor_data_file_id":"local:snippets/vendor-config.yml"}],"ipv4_addresses":[["127.0.0.1"],["192.168.1.7"]],"ipv6_addresses":[["::1"],["2a01:cb19:528:300:be24:11ff:fe73:a6a7","fe80::be24:11ff:fe73:a6a7"]],"keyboard_layout":"en-us","kvm_arguments":"","mac_addresses":["00:00:00:00:00:00","BC:24:11:73:A6:A7"],"machine":"","memory":[{"dedicated":2048,"floating":2048,"hugepages":"","keep_hugepages":false,"shared":0}],"migrate":false,"name":"debian-13","network_device":[{"bridge":"vmbr0","disconnected":false,"enabled":true,"firewall":false,"mac_address":"BC:24:11:73:A6:A7","model":"virtio","mtu":0,"queues":0,"rate_limit":0,"trunks":"","vlan_id":0}],"network_interface_names":["lo","eth0"],"node_name":"barbatruc","numa":[],"on_boot":true,"operating_system":[{"type":"l26"}],"pool_id":"","protection":false,"purge_on_destroy":true,"reboot":false,"reboot_after_update":true,"rng":[],"scsi_hardware":"virtio-scsi-pci","serial_device":[],"smbios":[],"started":true,"startup":[],"stop_on_destroy":false,"tablet_device":true,"tags":["debian","terraform"],"template":false,"timeout_clone":1800,"timeout_create":1800,"timeout_migrate":1800,"timeout_move_disk":1800,"timeout_reboot":1800,"timeout_shutdown_vm":1800,"timeout_start_vm":1800,"timeout_stop_vm":300,"tpm_state":[],"usb":[],"vga":[],"virtiofs":[],"vm_id":101,"watchdog":[]},"sensitive_attributes":[],"private":"bnVsbA==","dependencies":["proxmox_virtual_environment_download_file.debian_13","proxmox_virtual_environment_file.user_config","proxmox_virtual_environment_file.vendor_config"]}]}],"check_results":null} diff --git a/terraform.tfvars b/terraform.tfvars new file mode 100644 index 0000000..b39a840 --- /dev/null +++ b/terraform.tfvars @@ -0,0 +1,10 @@ +# PVE informations +pve_endpoint = "https://192.168.1.50:8006" +pve_username = "root@pam" +pve_password = "blah" +pve_node = "barbatruc" +pve_insecure = "true" + +# Debian images +debian_image_url = "https://cloud.debian.org/images/cloud/trixie/20251117-2299/debian-13-generic-amd64-20251117-2299.qcow2" +debian_image_checksum = "1882f2d0debfb52254db1b0fc850d222fa68470a644a914d181f744ac1511a6caa1835368362db6dee88504a13c726b3ee9de0e43648353f62e90e075f497026" diff --git a/variables.tf b/variables.tf new file mode 100644 index 0000000..d1eb858 --- /dev/null +++ b/variables.tf @@ -0,0 +1,47 @@ +variable "node_datastore" { + description = "Datastore used for VM storage" + type = string + default = "local-zfs" +} + +variable "pve_insecure" { + type = bool + description = "Enable insecure connexion" + default = true +} + +variable "pve_endpoint" { + type = string + description = "API endpoint URL" +} + +variable "pve_password" { + type = string + description = "Password" +} + +variable "pve_username" { + type = string + description = "Username" +} +variable "pve_node" { + type = string + description = "Node where install elements" + default = "" +} +variable "debian_image_url" { + type = string + description = "The URL for the latest Debian 12 Bookworm qcow2 image" + default = "" +} +variable "debian_image_checksum_algorithm" { + type = string + description = "Checksum algo used by image" + default = "sha512" +} + +variable "debian_image_checksum" { + type = string + description = "SHA Digest of the image" + default = "" +}