(Install) for barbatruc pve
This commit is contained in:
10
cloud-init/user-config.yml
Normal file
10
cloud-init/user-config.yml
Normal 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
|
||||||
6
cloud-init/vendor-config.yml
Normal file
6
cloud-init/vendor-config.yml
Normal 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
2
create.sh
Normal 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
91
main.tf
Normal 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
91
main_1.tf
Normal 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
91
main_2.tf
Normal 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
16
provider.tf
Normal 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
1
terraform.tfstate
Normal file
File diff suppressed because one or more lines are too long
1
terraform.tfstate.backup
Normal file
1
terraform.tfstate.backup
Normal file
File diff suppressed because one or more lines are too long
10
terraform.tfvars
Normal file
10
terraform.tfvars
Normal 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
47
variables.tf
Normal 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 = ""
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user