about summary refs log tree commit diff
path: root/terraform/main.tf
diff options
context:
space:
mode:
authormakefunstuff <[email protected]>2024-07-18 21:09:37 +0200
committermakefunstuff <[email protected]>2024-07-18 21:09:37 +0200
commit07822ea3f2239cf9cd3335ad2d7fb0aab7a3e1dc (patch)
treee9f4e9c69d3653b19139da565e5426b2c70806f8 /terraform/main.tf
parenta52d9c49b7f4166b18a49b4907a2b0afba3aac05 (diff)
downloadk3s-lab-07822ea3f2239cf9cd3335ad2d7fb0aab7a3e1dc.tar.gz
infra updates
Diffstat (limited to 'terraform/main.tf')
-rw-r--r--terraform/main.tf60
1 files changed, 60 insertions, 0 deletions
diff --git a/terraform/main.tf b/terraform/main.tf
new file mode 100644
index 0000000..187bd47
--- /dev/null
+++ b/terraform/main.tf
@@ -0,0 +1,60 @@
+provider "libvirt" {
+  uri = "qemu:///system"
+}
+
+resource "libvirt_volume" "ubuntu_image" {
+  name   = "ubuntu-18.04-minimal-cloudimg-amd64"
+  pool   = "default"
+  source = "https://cloud-images.ubuntu.com/minimal/releases/bionic/release/ubuntu-18.04-minimal-cloudimg-amd64.img"
+  format = "qcow2"
+}
+
+resource "libvirt_network" "k8s_network" {
+  name      = "k8s_network"
+  mode      = "nat"
+  addresses = ["192.168.122.0/24"]
+}
+
+resource "libvirt_domain" "k8s_node" {
+  count  = 3
+  name   = "k8s-node-${count.index + 1}"
+  memory = "2048"
+  vcpu   = 2
+
+  cloudinit = libvirt_cloudinit_disk.common.id
+
+  network_interface {
+    network_name = libvirt_network.k8s_network.name
+    hostname     = "k8s-node-${count.index + 1}"
+  }
+
+  disk {
+    volume_id = libvirt_volume.ubuntu_image.id
+  }
+
+  console {
+    type        = "pty"
+    target_type = "serial"
+    target_port = "0"
+  }
+
+  graphics {
+    type        = "spice"
+    listen_type = "none"
+  }
+}
+
+resource "libvirt_cloudinit_disk" "common" {
+  name      = "common-init.iso"
+  user_data = data.template_file.user_data.rendered
+}
+
+data "template_file" "user_data" {
+  template = file("${path.module}/cloud_init.cfg")
+}
+
+output "k8s_node_ips" {
+  value = {
+    for i in libvirt_domain.k8s_node : i.name => i.network_interface[0].addresses[0]
+  }
+}