112 lines
2.5 KiB
HCL
112 lines
2.5 KiB
HCL
# Initializes a new Proxmox VM given a specific cloud-init image, and attempts to enroll it in FreeIPA
|
|
terraform {
|
|
required_providers {
|
|
proxmox = {
|
|
source = "bpg/proxmox"
|
|
version = "0.78.0"
|
|
}
|
|
}
|
|
}
|
|
|
|
provider "proxmox" {
|
|
endpoint = var.api_url
|
|
api_token = "${var.proxmox_token_id}=${var.proxmox_token_secret}"
|
|
insecure = true
|
|
|
|
# Needed for snippet upload
|
|
ssh {
|
|
agent = false
|
|
username = var.proxmox_ssh_username
|
|
password = var.proxmox_ssh_password
|
|
}
|
|
}
|
|
|
|
# Cloud-init user config snippet
|
|
resource "proxmox_virtual_environment_file" "user_data_cloud_config" {
|
|
content_type = "snippets"
|
|
datastore_id = "local"
|
|
node_name = var.proxmox_node_name
|
|
|
|
source_raw {
|
|
data = <<-EOF
|
|
#cloud-config
|
|
hostname: ${var.vm_hostname}
|
|
fqdn: ${var.vm_hostname}
|
|
prefer_fqdn_over_hostname: true
|
|
package_update: true
|
|
packages:
|
|
- qemu-guest-agent
|
|
- net-tools
|
|
- curl
|
|
- freeipa-client
|
|
runcmd:
|
|
- systemctl enable qemu-guest-agent
|
|
- systemctl start qemu-guest-agent
|
|
- ipa-client-install --mkhomedir --unattended --principal ${var.freeipa_enrollment_principal} --password ${var.freeipa_enrollment_password}
|
|
- echo "done" > /tmp/cloud-config.done
|
|
EOF
|
|
|
|
file_name = "user-data-cloud-config.yaml"
|
|
}
|
|
}
|
|
|
|
# Downloads a given cloud image file to use, and uploads it to proxmox
|
|
resource "proxmox_virtual_environment_download_file" "vm_cloud_image" {
|
|
content_type = "iso"
|
|
datastore_id = "local"
|
|
node_name = var.proxmox_node_name
|
|
|
|
url = var.image_url
|
|
file_name = var.image_file_name
|
|
}
|
|
|
|
# Provisions a new VM using the above image and cloud-init snippet
|
|
resource "proxmox_virtual_environment_vm" "cloud_vm" {
|
|
name = var.vm_hostname
|
|
node_name = var.proxmox_node_name
|
|
|
|
# Enables qemu agent
|
|
agent {
|
|
enabled = true
|
|
}
|
|
|
|
cpu {
|
|
cores = var.cores
|
|
# Should speed up CPU
|
|
type ="x86-64-v2-AES"
|
|
}
|
|
|
|
memory {
|
|
dedicated = var.memory
|
|
}
|
|
|
|
disk {
|
|
datastore_id = var.disk_storage
|
|
file_id = proxmox_virtual_environment_download_file.vm_cloud_image.id
|
|
interface = "scsi0"
|
|
iothread = false
|
|
discard = "ignore"
|
|
size = var.disk_size
|
|
}
|
|
|
|
initialization {
|
|
ip_config {
|
|
ipv4 {
|
|
address = var.ipv4_address
|
|
gateway = var.ipv4_gateway
|
|
}
|
|
}
|
|
|
|
dns {
|
|
domain = var.dns_domain
|
|
servers = var.dns_servers
|
|
}
|
|
|
|
user_data_file_id = proxmox_virtual_environment_file.user_data_cloud_config.id
|
|
}
|
|
|
|
network_device {
|
|
bridge = var.network_bridge_device
|
|
}
|
|
|
|
} |