159 lines
4.4 KiB
Text
159 lines
4.4 KiB
Text
# Workspace Servers Definition Template
|
|
# Pattern: Import defaults → Apply overrides → Validate
|
|
#
|
|
# This template shows the standard pattern for defining servers in a workspace.
|
|
# Each server merges workspace defaults with individual overrides.
|
|
|
|
let provisioning = import "schemas/main.ncl" in
|
|
let lib = provisioning.lib in
|
|
|
|
# Load workspace-specific defaults (e.g., upcloud_defaults, hetzner_defaults)
|
|
# Customize path based on your provider:
|
|
# - For Upcloud: import "../lib/upcloud_defaults.ncl"
|
|
# - For Hetzner: import "../lib/hetzner_defaults.ncl"
|
|
# - For OCI: import "../lib/oci_defaults.ncl"
|
|
let workspace_defaults = import "../lib/provider_defaults.ncl" in
|
|
|
|
{
|
|
servers = [
|
|
# Example: Primary control panel node
|
|
(workspace_defaults & {
|
|
hostname = "cp-0",
|
|
title = "Control Panel 0",
|
|
# Plan/size: adjust for provider
|
|
plan = "2xCPU-4GB",
|
|
not_use = false,
|
|
extra_hostnames = ["cp-0", "control.local"],
|
|
labels = "use=control-panel,role=primary",
|
|
# Storage configuration
|
|
storages = [
|
|
({
|
|
name = "root",
|
|
size = 50,
|
|
total = 100,
|
|
type = "ext4",
|
|
mount = true,
|
|
mount_path = "/",
|
|
fstab = true,
|
|
parts = [
|
|
{
|
|
name = "root",
|
|
size = 50,
|
|
total = 50,
|
|
type = "ext4",
|
|
mount = true,
|
|
mount_path = "/",
|
|
},
|
|
{
|
|
name = "etcd",
|
|
size = 50,
|
|
total = 50,
|
|
type = "xfs",
|
|
mount = true,
|
|
mount_path = "/var/lib/etcd",
|
|
},
|
|
],
|
|
} | lib.Storage)
|
|
],
|
|
# Taskservs to deploy on this server
|
|
taskservs = [
|
|
{name = "os", profile = "control-plane"} | lib.TaskServDef,
|
|
{name = "resolv"} | lib.TaskServDef,
|
|
{name = "containerd"} | lib.TaskServDef,
|
|
{name = "kubernetes", role = "master"} | lib.TaskServDef,
|
|
{name = "etcd", cluster_role = "master"} | lib.TaskServDef,
|
|
],
|
|
}),
|
|
|
|
# Example: Worker node
|
|
(workspace_defaults & {
|
|
hostname = "worker-0",
|
|
title = "Kubernetes Worker 0",
|
|
plan = "2xCPU-4GB",
|
|
not_use = false,
|
|
extra_hostnames = ["worker-0"],
|
|
labels = "use=worker,role=compute",
|
|
storages = [
|
|
({
|
|
name = "root",
|
|
size = 100,
|
|
total = 100,
|
|
type = "ext4",
|
|
mount = true,
|
|
mount_path = "/",
|
|
fstab = true,
|
|
parts = [
|
|
{
|
|
name = "root",
|
|
size = 100,
|
|
total = 100,
|
|
type = "ext4",
|
|
mount = true,
|
|
mount_path = "/",
|
|
},
|
|
],
|
|
} | lib.Storage)
|
|
],
|
|
taskservs = [
|
|
{name = "os", profile = "worker"} | lib.TaskServDef,
|
|
{name = "resolv"} | lib.TaskServDef,
|
|
{name = "containerd"} | lib.TaskServDef,
|
|
{name = "kubernetes", role = "worker"} | lib.TaskServDef,
|
|
],
|
|
}),
|
|
|
|
# Example: Storage node (disabled)
|
|
(workspace_defaults & {
|
|
hostname = "storage-0",
|
|
title = "Kubernetes Storage 0",
|
|
plan = "4xCPU-8GB",
|
|
not_use = true, # Set to false to enable
|
|
extra_hostnames = ["storage-0"],
|
|
labels = "use=storage,role=data",
|
|
storages = [
|
|
({
|
|
name = "root",
|
|
size = 50,
|
|
total = 500,
|
|
type = "ext4",
|
|
mount = true,
|
|
mount_path = "/",
|
|
fstab = true,
|
|
parts = [
|
|
{
|
|
name = "root",
|
|
size = 50,
|
|
total = 50,
|
|
type = "ext4",
|
|
mount = true,
|
|
mount_path = "/",
|
|
},
|
|
{
|
|
name = "data0",
|
|
size = 200,
|
|
total = 200,
|
|
type = "xfs",
|
|
mount = true,
|
|
mount_path = "/data0",
|
|
},
|
|
{
|
|
name = "data1",
|
|
size = 250,
|
|
total = 250,
|
|
type = "xfs",
|
|
mount = true,
|
|
mount_path = "/data1",
|
|
},
|
|
],
|
|
} | lib.Storage)
|
|
],
|
|
taskservs = [
|
|
{name = "os", profile = "worker"} | lib.TaskServDef,
|
|
{name = "resolv"} | lib.TaskServDef,
|
|
{name = "containerd"} | lib.TaskServDef,
|
|
{name = "kubernetes", role = "worker"} | lib.TaskServDef,
|
|
{name = "rook-ceph"} | lib.TaskServDef,
|
|
],
|
|
}),
|
|
],
|
|
}
|