Trying to setup talos qemu with terraform

This commit is contained in:
vandomej 2025-09-27 20:55:32 -07:00
parent 517af2d402
commit 4e2f951f6d
3 changed files with 204 additions and 1 deletions

View file

@ -1,4 +1,14 @@
# Setup # Setup Instructions
Ensure you have [Homebrew](https://brew.sh/) installed on your machine.
`/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"`
Ensure you have the dependencies installed:
`brew install terraform`
# Development Environment Setup
`brew install minikube` `brew install minikube`

189
main.tf Normal file
View file

@ -0,0 +1,189 @@
terraform {
required_version = ">= 1.0"
required_providers {
talos = {
source = "siderolabs/talos"
version = "~> 0.4"
}
libvirt = {
source = "dmacvicar/libvirt"
version = "~> 0.7"
}
}
}
# Load variables from a .tfvars file
variable "cluster_name" {
description = "The name of the Talos cluster"
type = string
default = "evolved-npcs-cluster"
}
variable "memory_mb" {
description = "Memory for each VM in MB"
type = number
default = 2048
}
variable "vcpu_count" {
description = "Number of vCPUs for each VM"
type = number
default = 2
}
# Configure providers
provider "talos" {}
provider "libvirt" {
uri = "qemu:///system"
}
# Create a dedicated network for Talos
resource "libvirt_network" "talos_network" {
name = "talos-network"
mode = "nat"
domain = "talos.local"
addresses = ["10.5.0.0/24"]
dhcp {
enabled = true
}
dns {
enabled = true
}
}
# Generate machine secrets
resource "talos_machine_secrets" "this" {}
# Create control plane configuration with correct endpoint
resource "talos_machine_configuration" "controlplane" {
cluster_name = var.cluster_name
cluster_endpoint = "https://10.5.0.0:6443" # Fixed endpoint IP
machine_type = "controlplane"
machine_secrets = talos_machine_secrets.this.machine_secrets
config_patches = [
yamlencode({
machine = {
install = {
disk = "/dev/vda"
}
network = {
interfaces = [
{
interface = "eth0"
addresses = ["10.5.0.0/24"]
}
]
}
}
})
]
}
# Download Talos kernel and initramfs
resource "null_resource" "download_talos_files" {
triggers = {
version = "v1.6.4" # Change to your preferred version
}
provisioner "local-exec" {
command = <<EOT
mkdir -p _out/
curl -L -o _out/vmlinuz-amd64 https://github.com/siderolabs/talos/releases/download/${self.triggers.version}/vmlinuz-amd64
curl -L -o _out/initramfs-amd64.xz https://github.com/siderolabs/talos/releases/download/${self.triggers.version}/initramfs-amd64.xz
EOT
}
}
# Create a cloud-init disk for configuration
resource "libvirt_cloudinit_disk" "commoninit" {
name = "commoninit.iso"
user_data = <<EOF
#cloud-config
EOF
}
# Create the QEMU domain with direct kernel boot
resource "libvirt_domain" "talos-controlplane" {
name = "talos-controlplane"
memory = vars.memory_mb
vcpu = vars.vcpu_count
# Use kernel and initramfs directly
kernel = "${path.module}/_out/vmlinuz-amd64"
initrd = "${path.module}/_out/initramfs-amd64.xz"
# Talos kernel parameters
cmdline = [
"talos.platform=metal",
"talos.config=http://10.5.0.1:8001/controlplane.yaml",
"ip=10.5.0.2::10.5.0.1:255.255.255.0::eth0:off",
"init_on_alloc=1",
"slab_nomerge",
"pti=on",
"console=tty0",
"console=ttyS0",
"printk.devkmsg=on"
]
disk {
volume_id = libvirt_volume.talos-disk.id
}
network_interface {
network_id = libvirt_network.talos_network.id
addresses = ["10.5.0.2"]
hostname = "controlplane"
}
# Small disk for Talos
disk {
file = "/tmp/talos-disk.img"
}
console {
type = "pty"
target_port = "0"
target_type = "serial"
}
graphics {
type = "spice"
listen_type = "address"
autoport = true
}
depends_on = [null_resource.download_talos_files]
}
# Create a small disk
resource "libvirt_volume" "talos-disk" {
name = "talos-disk"
pool = "default"
size = 10 * 1024 * 1024 * 1024 # 10GB
format = "qcow2"
}
# Output important information
output "controlplane_ip" {
value = "10.5.0.0"
}
output "talosconfig" {
value = talos_machine_configuration.controlplane.machine_config
sensitive = true
}
output "next_steps" {
value = <<EOT
After applying:
1. The control plane will be available at 10.5.0.0
2. Apply the configuration using talosctl:
talosctl apply-config --insecure --nodes 10.5.0.0 --file controlplane.yaml
3. Bootstrap the cluster:
talosctl bootstrap --nodes 10.5.0.0
EOT
}

4
terraform.tfvars Normal file
View file

@ -0,0 +1,4 @@
# You can customize these values
cluster_name = "evolved-npcs-cluster"
memory_mb = 2048
vcpu_count = 2