- docker-30/zot: add Zot OCI registry with on-demand sync to docker.io, registry.k8s.io, ghcr.io, quay.io - kubernetes-kvm-terraform: wire Kanidm OIDC via structured AuthenticationConfiguration; add reference apiserver manifest and join-node-02 helper - servers: reorganize shadow/ under servers/, add saint vhost config and utility-101 VM definition, add shadow hrajfrisbee.cz vhost and storage-23 notes - experiments: add notes and configs for e2b dev VM, kata + firecracker on kube, microsandbox, orb-stack k3s (terraform + cloud-init), rke2 - vms/docker: document tailscale + node-exporter setup - blog: stub post on Gateway API - chore: gitignore tmp/, smtp_password, and the two local-only credential caches; add per-project .claude/settings.json Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
75 lines
1.6 KiB
HCL
75 lines
1.6 KiB
HCL
terraform {
|
|
required_providers {
|
|
orbstack = {
|
|
source = "robertdebock/orbstack"
|
|
version = "~> 3.0"
|
|
}
|
|
cloudinit = {
|
|
source = "hashicorp/cloudinit"
|
|
version = "~> 2.0"
|
|
}
|
|
}
|
|
}
|
|
|
|
variable "node_count" {
|
|
description = "Number of nodes to deploy"
|
|
type = number
|
|
default = 3
|
|
}
|
|
|
|
variable "name" {
|
|
description = "Base name for the machines"
|
|
type = string
|
|
}
|
|
|
|
variable "distro" {
|
|
description = "OS distribution"
|
|
type = string
|
|
default = "ubuntu"
|
|
}
|
|
|
|
variable "distro_version" {
|
|
description = "OS distribution version/codename"
|
|
type = string
|
|
default = "noble"
|
|
}
|
|
|
|
variable "extra_cloud_init_parts" {
|
|
description = "Additional cloud-init parts to layer on top of the base config"
|
|
type = list(object({ content = string, content_type = string }))
|
|
default = []
|
|
}
|
|
|
|
data "cloudinit_config" "this" {
|
|
count = var.node_count
|
|
|
|
part {
|
|
content_type = "text/cloud-config"
|
|
content = templatefile("${path.module}/cloud-init-base.yaml", {
|
|
hostname = "${var.name}-${count.index + 1}"
|
|
})
|
|
}
|
|
|
|
dynamic "part" {
|
|
for_each = var.extra_cloud_init_parts
|
|
content {
|
|
content_type = part.value.content_type
|
|
content = part.value.content
|
|
}
|
|
}
|
|
}
|
|
|
|
resource "orbstack_machine" "this" {
|
|
count = var.node_count
|
|
|
|
name = "${var.name}-${count.index + 1}"
|
|
distro = var.distro
|
|
region = var.distro_version
|
|
|
|
user_data = data.cloudinit_config.this[count.index].rendered
|
|
}
|
|
|
|
output "machines" {
|
|
value = { for m in orbstack_machine.this : m.name => m.ip_address }
|
|
}
|