This commit is contained in:
parent
4ed9ba0d24
commit
a90630ecb6
98 changed files with 2063 additions and 729 deletions
7
proxmox-infra/.gitignore
vendored
Normal file
7
proxmox-infra/.gitignore
vendored
Normal file
|
|
@ -0,0 +1,7 @@
|
|||
# proxmox-infra/.gitignore
|
||||
.terraform/
|
||||
|
||||
*.tfstate
|
||||
.tfstate.
|
||||
crash.log
|
||||
*.tfvars
|
||||
24
proxmox-infra/.terraform.lock.hcl
generated
Normal file
24
proxmox-infra/.terraform.lock.hcl
generated
Normal file
|
|
@ -0,0 +1,24 @@
|
|||
# This file is maintained automatically by "tofu init".
|
||||
# Manual edits may be lost in future updates.
|
||||
|
||||
provider "registry.opentofu.org/telmate/proxmox" {
|
||||
version = "3.0.2-rc01"
|
||||
constraints = "3.0.2-rc01"
|
||||
hashes = [
|
||||
"h1:571ROPuTMC0w5lr9hbUXi7NVLsG3SpmZxXXZx8cAT+Q=",
|
||||
"zh:34d264243a4513f4e30c01fb37cc6a3e592d7823dfd182c5edfb170ac7b7de3a",
|
||||
"zh:544428311ad20fbb3ad2cd854e893bbf036023cb57c3acc5093d141976dac670",
|
||||
"zh:5c2396b328edee8de7ac144c15a6b7e668e81063699bc8c110d7c39fb8da70e9",
|
||||
"zh:5ca8e33476ad06a0259071120a59477e8f107f30c1178ea7b9f6cafe1a461ade",
|
||||
"zh:5ea56eb8275edc754a01a0180750e9c939cd997d3a50659617770211f4337da9",
|
||||
"zh:9dd3482df6bbe00a4a6152be3567b6c08d35c3644a327a1f5ac30fd95ccd449f",
|
||||
"zh:a76075fafadcc94a825151aff169bae4e0c05e3c7717e16dcdcf16ffa61a0780",
|
||||
"zh:b1d95f97b22f671db762f7adf428b409e6736c078bcf267d8391985b8847d6e3",
|
||||
"zh:cc94255cd1b18e6a341c15089015c457c8c639c25c426b07f278d5ea9850b3b5",
|
||||
"zh:ce991103cb69b0b3e275127e3ab92c88bb3b6b0f4e5a2cb082aeaef70a7f7d61",
|
||||
"zh:d24838bce87b38e12544a1329f5ad30e2be045968e639a3f4ddd5c84aa648e04",
|
||||
"zh:e106ebd4eea8d62d62e62f261a262febc615e17466b54ac18f7e65c7e79e0008",
|
||||
"zh:e254ca76c95e6e92da973b7bddc36bfa0a1e31d7c7e758ef4b01315db969388b",
|
||||
"zh:f1d1d5f4c39267cacebe0ab7e9e06caf9692707f3b5369685541b65bc8b840ce",
|
||||
]
|
||||
}
|
||||
52
proxmox-infra/main.tf
Normal file
52
proxmox-infra/main.tf
Normal file
|
|
@ -0,0 +1,52 @@
|
|||
# # This calls the module to define a new VM (e.g., if you were creating one)
|
||||
# resource "proxmox_vm_qemu" "sandbox" {
|
||||
# name = "sandbox"
|
||||
# desc = "OpenTofu testing"
|
||||
# target_nodes = [var.proxmox_node]
|
||||
# vmid= 100
|
||||
# full_clone = true
|
||||
# clone_id = 9100
|
||||
# agent = 1
|
||||
# scsihw = "virtio-scsi-single"
|
||||
# ciuser = "root"
|
||||
# ipconfig0 = "ip=dhcp"
|
||||
# cpu {
|
||||
# cores = 2
|
||||
# }
|
||||
# memory = 2048
|
||||
# disks {
|
||||
# virtio {
|
||||
# virtio0 {
|
||||
# disk {
|
||||
# size = "9452M"
|
||||
# storage = "local-lvm"
|
||||
# }
|
||||
# }
|
||||
# }
|
||||
# ide {
|
||||
# ide2 {
|
||||
# cloudinit {
|
||||
# storage = "local-lvm"
|
||||
# }
|
||||
# }
|
||||
# }
|
||||
# }
|
||||
# network {
|
||||
# id = 0
|
||||
# bridge = "vmbr0"
|
||||
# model = "virtio"
|
||||
# }
|
||||
# serial {
|
||||
# id = 0
|
||||
# }
|
||||
# }
|
||||
|
||||
# output "sandbox_vmid" {
|
||||
# description = "sandbox VM ID"
|
||||
# value = proxmox_vm_qemu.sandbox.id
|
||||
# }
|
||||
|
||||
# output "sandbox_ipv4" {
|
||||
# description = "sandbox public IPv4 address"
|
||||
# value = proxmox_vm_qemu.sandbox.default_ipv4_address
|
||||
# }
|
||||
0
proxmox-infra/outputs.tf
Normal file
0
proxmox-infra/outputs.tf
Normal file
9
proxmox-infra/provider.tf
Normal file
9
proxmox-infra/provider.tf
Normal file
|
|
@ -0,0 +1,9 @@
|
|||
provider "proxmox" {
|
||||
pm_tls_insecure = true
|
||||
pm_api_url = var.proxmox_api_url
|
||||
pm_user = var.proxmox_user
|
||||
pm_password = var.proxmox_password
|
||||
# Or use API token for better security:
|
||||
# pm_api_token_id = var.proxmox_api_token_id
|
||||
# pm_api_token_secret = var.proxmox_api_token_secret
|
||||
}
|
||||
106
proxmox-infra/sandbox.tf
Normal file
106
proxmox-infra/sandbox.tf
Normal file
|
|
@ -0,0 +1,106 @@
|
|||
# proxmox_vm_qemu.sandbox:
|
||||
resource "proxmox_vm_qemu" "sandbox" {
|
||||
agent = 1
|
||||
bios = "seabios"
|
||||
boot = " "
|
||||
ciuser = "root"
|
||||
cores = 0
|
||||
current_node = "proxmox-01"
|
||||
define_connection_info = false
|
||||
desc = " generated by NixOS"
|
||||
force_create = false
|
||||
full_clone = false
|
||||
hotplug = "network,disk,usb"
|
||||
id = "proxmox-01/qemu/100"
|
||||
ipconfig0 = "ip=dhcp"
|
||||
kvm = true
|
||||
linked_vmid = 0
|
||||
memory = 2048
|
||||
name = "sandbox"
|
||||
numa = false
|
||||
onboot = true
|
||||
protection = false
|
||||
qemu_os = "l26"
|
||||
reboot_required = false
|
||||
scsihw = "virtio-scsi-single"
|
||||
sockets = 0
|
||||
sshkeys = <<-EOT
|
||||
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQCljEOf8Lv7Ptgsc1+CYzXpnrctPy7LFXXOyVZTI9uN7R4HY5aEdZTKEGSsU/+p+JtXWzzI65fnrZU8pTMG/wvCK+gYyNZcEM4g/TXMVa+CWZR3y13zGky88R7dKiBl5L00U4BePDD1ci3EU3/Mjr/GVTQHtkbJfLtvhR9zkCNZzxbu+rySWDroUPWPvE3y60/iLjBsh5ZmHo59CW67lh1jgbAlZjKWZzLWo0Bc5wgbxoQPWcO4BCh17N4g8llrRxGOwJzHeaipBnXn9J1AGIm9Zls6pxT9j6MKltcCOb7tQZwc3hlPOW2ku6f7OHTrziKw37drIDM0UDublAOcnIfBjE+XuWsp5t6ojdIzIDMrzaYW2MyMA3PHuf7VESUQdP4TZ1XUwtRRzOjn5AZJi9DPoowPaxKL92apRpFG+ovaFpWZsG7s8NWXHAC79IpgMUzscEmM15OMQ36RQ5xeytGDVCmVT8DbHGrMT9HUfR5fBSWD3aDQiOOiIIhrbY35m+U65Sz/GpZMk6HlaiV3tKNB0m+xE+84MUEmm4fFzt3B/0N4kscMArnLAm/OMUblihPwbKAUAUWErGRBfP+u+zjRCi1D9/pffpl2OQ2QIuVM82g6/EPa1ZsXZP+4iHooQoJbrqVGzkfiA1EKLfcdGfkP/O4nRl+D5UgkGdqqvm20NQ== root@proxmox-01
|
||||
EOT
|
||||
tablet = true
|
||||
target_nodes = [
|
||||
"proxmox-01",
|
||||
]
|
||||
unused_disk = []
|
||||
vcpus = 0
|
||||
vm_state = "running"
|
||||
vmid = 100
|
||||
|
||||
cpu {
|
||||
cores = 2
|
||||
limit = 0
|
||||
numa = false
|
||||
sockets = 1
|
||||
type = "host"
|
||||
units = 0
|
||||
vcores = 0
|
||||
}
|
||||
|
||||
disks {
|
||||
ide {
|
||||
ide2 {
|
||||
cloudinit {
|
||||
storage = "local-lvm"
|
||||
}
|
||||
}
|
||||
}
|
||||
virtio {
|
||||
virtio0 {
|
||||
disk {
|
||||
backup = true
|
||||
discard = false
|
||||
format = "raw"
|
||||
id = 0
|
||||
iops_r_burst = 0
|
||||
iops_r_burst_length = 0
|
||||
iops_r_concurrent = 0
|
||||
iops_wr_burst = 0
|
||||
iops_wr_burst_length = 0
|
||||
iops_wr_concurrent = 0
|
||||
iothread = false
|
||||
linked_disk_id = -1
|
||||
mbps_r_burst = 0
|
||||
mbps_r_concurrent = 0
|
||||
mbps_wr_burst = 0
|
||||
mbps_wr_concurrent = 0
|
||||
readonly = false
|
||||
replicate = true
|
||||
size = "9452M"
|
||||
storage = "local-lvm"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
network {
|
||||
bridge = "vmbr0"
|
||||
firewall = true
|
||||
id = 0
|
||||
link_down = false
|
||||
macaddr = "bc:24:11:a7:e8:2a"
|
||||
model = "virtio"
|
||||
mtu = 0
|
||||
queues = 0
|
||||
rate = 0
|
||||
tag = 0
|
||||
}
|
||||
|
||||
serial {
|
||||
id = 0
|
||||
type = "socket"
|
||||
}
|
||||
|
||||
smbios {
|
||||
uuid = "37cd09d5-29a5-42e2-baba-f21b691130e8"
|
||||
}
|
||||
}
|
||||
1
proxmox-infra/terraform.tfstate.backup
Normal file
1
proxmox-infra/terraform.tfstate.backup
Normal file
|
|
@ -0,0 +1 @@
|
|||
{"version":4,"terraform_version":"1.9.1","serial":2,"lineage":"ecd6c5f8-5352-bf30-6117-d55763366399","outputs":{"sandbox_ipv4":{"value":"192.168.1.206","type":"string"},"sandbox_vmid":{"value":"proxmox-01/qemu/999","type":"string"}},"resources":[{"mode":"managed","type":"proxmox_vm_qemu","name":"sandbox","provider":"provider[\"registry.opentofu.org/telmate/proxmox\"]","instances":[{"schema_version":0,"attributes":{"additional_wait":5,"agent":1,"agent_timeout":90,"args":"","automatic_reboot":true,"balloon":0,"bios":"seabios","boot":" ","bootdisk":"","ci_wait":null,"cicustom":null,"cipassword":"","ciupgrade":false,"ciuser":"root","clone":null,"clone_id":9100,"clone_wait":10,"cores":0,"cpu":[{"affinity":"","cores":2,"flags":[],"limit":0,"numa":false,"sockets":1,"type":"host","units":0,"vcores":0}],"cpu_type":"","current_node":"proxmox-01","default_ipv4_address":"192.168.1.206","default_ipv6_address":"2a05:f6c7:2030:0:be24:11ff:feb9:919f","define_connection_info":true,"desc":"OpenTofu testing","disk":[],"disks":[{"ide":[{"ide0":[],"ide1":[],"ide2":[{"cdrom":[],"cloudinit":[{"storage":"local-lvm"}],"disk":[],"ignore":false,"passthrough":[]}],"ide3":[]}],"sata":[],"scsi":[],"virtio":[{"virtio0":[{"cdrom":[],"disk":[{"asyncio":"","backup":true,"cache":"","discard":false,"format":"raw","id":0,"iops_r_burst":0,"iops_r_burst_length":0,"iops_r_concurrent":0,"iops_wr_burst":0,"iops_wr_burst_length":0,"iops_wr_concurrent":0,"iothread":false,"linked_disk_id":-1,"mbps_r_burst":0,"mbps_r_concurrent":0,"mbps_wr_burst":0,"mbps_wr_concurrent":0,"readonly":false,"replicate":false,"serial":"","size":"9452M","storage":"local-lvm","wwn":""}],"ignore":false,"passthrough":[]}],"virtio1":[],"virtio10":[],"virtio11":[],"virtio12":[],"virtio13":[],"virtio14":[],"virtio15":[],"virtio2":[],"virtio3":[],"virtio4":[],"virtio5":[],"virtio6":[],"virtio7":[],"virtio8":[],"virtio9":[]}]}],"efidisk":[],"force_create":false,"force_recreate_on_change_of":null,"full_clone":true,"hagroup":"","hastate":"","hostpci":[],"hotplug":"network,disk,usb","id":"proxmox-01/qemu/999","ipconfig0":"ip=dhcp","ipconfig1":null,"ipconfig10":null,"ipconfig11":null,"ipconfig12":null,"ipconfig13":null,"ipconfig14":null,"ipconfig15":null,"ipconfig2":null,"ipconfig3":null,"ipconfig4":null,"ipconfig5":null,"ipconfig6":null,"ipconfig7":null,"ipconfig8":null,"ipconfig9":null,"kvm":true,"linked_vmid":0,"machine":"","memory":2048,"name":"sandbox2","nameserver":null,"network":[{"bridge":"vmbr0","firewall":false,"id":0,"link_down":false,"macaddr":"bc:24:11:b9:91:9f","model":"virtio","mtu":0,"queues":0,"rate":0,"tag":0}],"numa":false,"onboot":false,"os_network_config":null,"os_type":null,"pci":[],"pcis":[],"pool":"","protection":false,"pxe":null,"qemu_os":"l26","reboot_required":false,"scsihw":"virtio-scsi-single","searchdomain":null,"serial":[{"id":0,"type":"socket"}],"skip_ipv4":false,"skip_ipv6":false,"smbios":[{"family":"","manufacturer":"","product":"","serial":"","sku":"","uuid":"51a93ec4-4afa-428b-911a-daab70390a8c","version":""}],"sockets":0,"ssh_forward_ip":null,"ssh_host":"192.168.1.206","ssh_port":"22","ssh_private_key":null,"ssh_user":null,"sshkeys":null,"startup":"","tablet":true,"tags":"v0.0.2","target_node":null,"target_nodes":["proxmox-01"],"timeouts":null,"tpm_state":[],"unused_disk":[],"usb":[],"usbs":[],"vcpus":0,"vga":[],"vm_state":"running","vmid":999},"sensitive_attributes":[[{"type":"get_attr","value":"cipassword"}],[{"type":"get_attr","value":"ssh_private_key"}]],"private":"eyJlMmJmYjczMC1lY2FhLTExZTYtOGY4OC0zNDM2M2JjN2M0YzAiOnsiY3JlYXRlIjoxMjAwMDAwMDAwMDAwLCJkZWZhdWx0IjoxMjAwMDAwMDAwMDAwLCJkZWxldGUiOjEyMDAwMDAwMDAwMDAsInJlYWQiOjEyMDAwMDAwMDAwMDAsInVwZGF0ZSI6MTIwMDAwMDAwMDAwMH19"}]}],"check_results":null}
|
||||
30
proxmox-infra/variables.tf
Normal file
30
proxmox-infra/variables.tf
Normal file
|
|
@ -0,0 +1,30 @@
|
|||
# proxmox-infra/variables.tf
|
||||
|
||||
variable "proxmox_api_url" {
|
||||
description = "The URL of the Proxmox API (e.g., https://192.168.1.10:8006/api2/json)"
|
||||
type = string
|
||||
# No default here, so OpenTofu will prompt or expect a .tfvars file/env var
|
||||
}
|
||||
|
||||
variable "proxmox_user" {
|
||||
description = "Proxmox user (e.g., root@pam or user@pve)"
|
||||
type = string
|
||||
}
|
||||
|
||||
variable "proxmox_password" {
|
||||
description = "Proxmox user password"
|
||||
type = string
|
||||
sensitive = true # Mark as sensitive to hide in logs
|
||||
}
|
||||
|
||||
variable "proxmox_node" {
|
||||
description = "The Proxmox node name where VMs will be deployed (e.g., 'pve')"
|
||||
type = string
|
||||
}
|
||||
|
||||
# Example for templates - you might have different templates
|
||||
variable "nixos_template_id" {
|
||||
description = "VMID of the nixos cloud-init template"
|
||||
type = number
|
||||
# Example: default = 100
|
||||
}
|
||||
9
proxmox-infra/versions.tf
Normal file
9
proxmox-infra/versions.tf
Normal file
|
|
@ -0,0 +1,9 @@
|
|||
# versions.tf
|
||||
terraform {
|
||||
required_providers {
|
||||
proxmox = {
|
||||
source = "Telmate/proxmox"
|
||||
version = "3.0.2-rc01"
|
||||
}
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue