(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