129 lines
2.8 KiB
HCL
129 lines
2.8 KiB
HCL
|
|
terraform {
|
|
required_version = ">= 1.0"
|
|
required_providers {
|
|
proxmox = {
|
|
source = "telmate/proxmox"
|
|
version = "~> 2.9"
|
|
}
|
|
tls = {
|
|
source = "hashicorp/tls"
|
|
version = "~> 4.0"
|
|
}
|
|
}
|
|
}
|
|
|
|
# Proxmox Provider Configuration
|
|
provider "proxmox" {
|
|
pm_api_url = var.proxmox_api_url
|
|
pm_api_token_id = var.proxmox_token_id
|
|
pm_api_token_secret = var.proxmox_token_secret
|
|
pm_tls_insecure = var.proxmox_tls_insecure
|
|
}
|
|
|
|
# Generate SSH Key Pair
|
|
resource "tls_private_key" "vm_ssh_key" {
|
|
algorithm = "RSA"
|
|
rsa_bits = 4096
|
|
}
|
|
|
|
# Proxmox VM Resource
|
|
resource "proxmox_vm_qemu" "loki_vm" {
|
|
name = var.vm_name
|
|
target_node = var.target_node
|
|
clone = var.template_name
|
|
|
|
# VM Resources
|
|
cores = var.vm_cores
|
|
sockets = 1
|
|
memory = var.vm_memory
|
|
|
|
# Boot Configuration
|
|
boot = "order=scsi0"
|
|
agent = 1
|
|
onboot = true
|
|
|
|
# Disk Configuration
|
|
disk {
|
|
size = var.vm_disk_size
|
|
type = "scsi"
|
|
storage = var.storage
|
|
iothread = 1
|
|
}
|
|
|
|
# Network Configuration
|
|
network {
|
|
model = "virtio"
|
|
bridge = var.network_bridge
|
|
}
|
|
|
|
# Cloud-init Configuration
|
|
os_type = "cloud-init"
|
|
ipconfig0 = "ip=dhcp"
|
|
|
|
# SSH Keys
|
|
sshkeys = tls_private_key.vm_ssh_key.public_key_openssh
|
|
|
|
# Wait for cloud-init to complete
|
|
lifecycle {
|
|
ignore_changes = [
|
|
network,
|
|
]
|
|
}
|
|
|
|
# Connection settings for provisioners
|
|
connection {
|
|
type = "ssh"
|
|
user = var.ssh_user
|
|
private_key = tls_private_key.vm_ssh_key.private_key_pem
|
|
host = self.default_ipv4_address
|
|
timeout = "5m"
|
|
}
|
|
|
|
# Wait for VM to be ready
|
|
provisioner "remote-exec" {
|
|
inline = [
|
|
"cloud-init status --wait",
|
|
"echo 'VM is ready'",
|
|
]
|
|
}
|
|
|
|
# Copy Loki configuration
|
|
provisioner "file" {
|
|
source = "${path.module}/loki-config.yaml"
|
|
destination = "/tmp/loki-config.yaml"
|
|
}
|
|
|
|
# Copy Promtail configuration
|
|
provisioner "file" {
|
|
source = "${path.module}/promtail-config.yaml"
|
|
destination = "/tmp/promtail-config.yaml"
|
|
}
|
|
|
|
# Copy Loki installation script
|
|
provisioner "file" {
|
|
source = "${path.module}/install_loki.sh"
|
|
destination = "/tmp/install_loki.sh"
|
|
}
|
|
|
|
# Copy Promtail installation script
|
|
provisioner "file" {
|
|
source = "${path.module}/install_promtail.sh"
|
|
destination = "/tmp/install_promtail.sh"
|
|
}
|
|
|
|
# Execute installation scripts
|
|
provisioner "remote-exec" {
|
|
inline = [
|
|
"echo 'Starting installation...'",
|
|
"sudo chmod +x /tmp/install_loki.sh",
|
|
"sudo chmod +x /tmp/install_promtail.sh",
|
|
"echo 'Installing Grafana Loki...'",
|
|
"sudo /tmp/install_loki.sh",
|
|
"echo 'Installing Promtail...'",
|
|
"sudo /tmp/install_promtail.sh",
|
|
"echo 'Installation completed!'",
|
|
]
|
|
}
|
|
}
|