(Install) for barbatruc pve

This commit is contained in:
2025-11-22 01:27:53 +01:00
commit 8cea4a43a3
11 changed files with 366 additions and 0 deletions

View File

@@ -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

View File

@@ -0,0 +1,6 @@
#cloud-config
package_update: true
packages:
- qemu-guest-agent
runcmd:
- systemctl enable --now qemu-guest-agent

2
create.sh Normal file
View File

@@ -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

91
main.tf Normal file
View File

@@ -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
}

91
main_1.tf Normal file
View File

@@ -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
}

91
main_2.tf Normal file
View File

@@ -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
}

16
provider.tf Normal file
View File

@@ -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
}

1
terraform.tfstate Normal file

File diff suppressed because one or more lines are too long

1
terraform.tfstate.backup Normal file

File diff suppressed because one or more lines are too long

10
terraform.tfvars Normal file
View File

@@ -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"

47
variables.tf Normal file
View File

@@ -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 = ""
}