Add tofu files
This commit is contained in:
148
tofu/main.tf
Normal file
148
tofu/main.tf
Normal file
@@ -0,0 +1,148 @@
|
||||
terraform {
|
||||
required_providers {
|
||||
incus = {
|
||||
source = "lxc/incus"
|
||||
version = "0.3.1"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
provider "incus" {
|
||||
}
|
||||
|
||||
resource "incus_project" "kubernetes" {
|
||||
name = "kubernetes"
|
||||
description = "Kubernetes project"
|
||||
|
||||
config = {
|
||||
"features.storage.volumes" = false
|
||||
"features.images" = false
|
||||
"features.profiles" = false
|
||||
"features.storage.buckets" = false
|
||||
}
|
||||
}
|
||||
|
||||
locals {
|
||||
ssh_public_key = trimspace(file("~/.ssh/id_ed25519.pub"))
|
||||
}
|
||||
|
||||
locals {
|
||||
kubeadmin_password_hash = trimspace(file("./kubeadmin_password_hash"))
|
||||
}
|
||||
|
||||
data "template_file" "cloud_init" {
|
||||
template = file("${path.module}/files/cloud-init.yaml")
|
||||
vars = {
|
||||
ssh_public_key = local.ssh_public_key
|
||||
}
|
||||
}
|
||||
|
||||
resource "incus_profile" "kubenode" {
|
||||
name = "kubenode"
|
||||
project = "kubernetes"
|
||||
description = "Kubernetes lab node"
|
||||
|
||||
depends_on = [
|
||||
incus_project.kubernetes
|
||||
]
|
||||
|
||||
config = {
|
||||
# "linux.kernel_modules" = "ip_tables,ip6_tables,nf_nat,overlay,br_netfilter"
|
||||
"security.nesting" = "true"
|
||||
"security.privileged" = "true"
|
||||
# "security.syscalls.intercept.mknod" = "true"
|
||||
# "security.syscalls.intercept.mount" = "true"
|
||||
# "security.syscalls.intercept.setxattr" = "true"
|
||||
"limits.cpu" = "4"
|
||||
"limits.memory" = "6GiB"
|
||||
"limits.memory.swap" = "false"
|
||||
"boot.autostart" = "true"
|
||||
"cloud-init.vendor-data" = templatefile(
|
||||
"${path.module}/files/cloud-init.yaml", { ssh_public_key = local.ssh_public_key, kubeadmin_password_hash = local.kubeadmin_password_hash }
|
||||
)
|
||||
}
|
||||
|
||||
device {
|
||||
name = "eth0"
|
||||
type = "nic"
|
||||
properties = {
|
||||
network = "incusbr0"
|
||||
name = "eth0"
|
||||
}
|
||||
}
|
||||
|
||||
device {
|
||||
name = "root"
|
||||
type = "disk"
|
||||
properties = {
|
||||
pool = "default"
|
||||
path = "/"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
resource "incus_instance" "kube-main" {
|
||||
name = "kube-main"
|
||||
type = "virtual-machine"
|
||||
image = "images:fedora/43/cloud"
|
||||
profiles = [incus_profile.kubenode.name]
|
||||
project = incus_project.kubernetes.name
|
||||
|
||||
depends_on = [
|
||||
incus_profile.kubenode
|
||||
]
|
||||
|
||||
device {
|
||||
name = "eth0"
|
||||
type = "nic"
|
||||
properties = {
|
||||
network = "incusbr0"
|
||||
name = "eth0"
|
||||
"ipv4.address" = "10.1.1.100"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
resource "incus_instance" "kube-worker1" {
|
||||
name = "kube-worker1"
|
||||
type = "virtual-machine"
|
||||
image = "images:fedora/43/cloud"
|
||||
profiles = [incus_profile.kubenode.name]
|
||||
project = incus_project.kubernetes.name
|
||||
|
||||
depends_on = [
|
||||
incus_profile.kubenode
|
||||
]
|
||||
|
||||
device {
|
||||
name = "eth0"
|
||||
type = "nic"
|
||||
properties = {
|
||||
network = "incusbr0"
|
||||
name = "eth0"
|
||||
"ipv4.address" = "10.1.1.101"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
resource "incus_instance" "kube-worker2" {
|
||||
name = "kube-worker2"
|
||||
type = "virtual-machine"
|
||||
image = "images:fedora/43/cloud"
|
||||
profiles = [incus_profile.kubenode.name]
|
||||
project = incus_project.kubernetes.name
|
||||
|
||||
depends_on = [
|
||||
incus_profile.kubenode
|
||||
]
|
||||
|
||||
device {
|
||||
name = "eth0"
|
||||
type = "nic"
|
||||
properties = {
|
||||
network = "incusbr0"
|
||||
name = "eth0"
|
||||
"ipv4.address" = "10.1.1.102"
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user