feat: initial commit

- have been working on this for some time now
This commit is contained in:
2025-05-30 22:36:55 +10:00
commit cb67816eee
188 changed files with 6145 additions and 0 deletions
+130
View File
@@ -0,0 +1,130 @@
variables:
- name: description
description: Which is this instance for?
order: 0
type: string
default: Standard-Server
validations:
- required
- length-5-22
- name: node
description: Which Incus node for this instance?
order: 1
type: enum
options:
- prodnxsr0009
- prodnxsr0010
- prodnxsr0011
- prodnxsr0012
- prodnxsr0013
- name: puppet_class
description: Which puppet role for this instance?
order: 2
type: enum
default: roles::base
options:
- roles::apps::jupyter::hub
- roles::apps::media::jellyfin
- roles::apps::media::lidarr
- roles::apps::media::nzbget
- roles::apps::media::prowlarr
- roles::apps::media::radarr
- roles::apps::media::readarr
- roles::apps::media::sonarr
- roles::apps::music::gonic
- roles::base
- roles::ceph::mds
- roles::ceph::mon
- roles::ceph::rgw
- roles::infra::auth::glauth
- roles::infra::auth::openldap
- roles::infra::automation::rundeck
- roles::infra::cobbler::server
- roles::infra::db::redis
- roles::infra::dhcp::server
- roles::infra::dns::master
- roles::infra::dns::resolver
- roles::infra::droneci::runner
- roles::infra::droneci::server
- roles::infra::etcd::node
- roles::infra::git::gitea
- roles::infra::git::runner
- roles::infra::halb::haproxy
- roles::infra::incus::imagehost
- roles::infra::incus::node
- roles::infra::k8s::controller
- roles::infra::k8s::etcd
- roles::infra::k8s::worker
- roles::infra::metrics::grafana
- roles::infra::metrics::prometheus
- roles::infra::nomad::agent
- roles::infra::nomad::agentv2
- roles::infra::nomad::server
- roles::infra::ntp::server
- roles::infra::ovirt::engine
- roles::infra::ovirt::node
- roles::infra::pki::certbot
- roles::infra::proxmox::node
- roles::infra::proxy::jumphost
- roles::infra::proxy::squid
- roles::infra::puppet::master
- roles::infra::puppetboard::server
- roles::infra::puppetdb::api
- roles::infra::puppetdb::sql
- roles::infra::reposync::syncer
- roles::infra::sql::galera
- roles::infra::sql::patroni
- roles::infra::storage::consul
- roles::infra::storage::edgecache
- roles::infra::storage::minio
- roles::infra::storage::vault
- name: disksize
description: Root disk capacity in GB?
order: 3
type: enum
default: "10"
options:
- "10"
- "20"
- "30"
- name: primarynet
description: Primary network zone?
order: 4
type: enum
default: com1
options:
- com1
- dmz1
- wan1
- name: resourcegroup
description: Cores and Memory
order: 5
type: enum
default: 2core2048
options:
- 2core2048
- 2core4096
- 4core4096
- 4core8192
- name: datadisk
description: Add a data disk?
order: 6
type: bool
default: false
- name: datadisksize
description: Data disk size (GB, between 10 and 200)
order: 7
type: int
default: 50
validation:
min: 10
max: 200
when: "{{ datadisk }}"
+15
View File
@@ -0,0 +1,15 @@
description: {{.description}}
cobbler_mgmt_classes:
- {{.puppet_class}}
profiles:
- disk{{.disksize}}
- net_{{.primarynet}}_eth0
- {{.resourcegroup}}
{{- if .datadisk }}
storage_volumes:
data:
pool: fastpool
path: /data
config:
size: {{ .datadisksize }}GB
{{- end }}
+52
View File
@@ -0,0 +1,52 @@
locals {
node_name = "{{.node}}"
config_common = yamldecode(file("${get_terragrunt_dir()}/../config_common.yaml"))
config_specific = yamldecode(file("${get_terragrunt_dir()}/config.yaml"))
config = merge(local.config_common, local.config_specific)
instance_name = basename(get_terragrunt_dir())
}
inputs = merge(
{
name = local.instance_name
},
local.config
)
include "root" {
path = find_in_parent_folders("root.hcl")
}
include "instances" {
path = find_in_parent_folders("instances.hcl")
expose = true
merge_strategy = "deep"
}
dependencies {
paths = ["${get_repo_root()}/config/nodes/${local.node_name}"]
}
terraform {
source = "${get_repo_root()}/modules/instance"
}
generate "incus" {
path = "incus.tf"
if_exists = "overwrite_terragrunt"
contents = <<-EOF
provider "incus" {
generate_client_certificates = true
accept_remote_certificate = true
remote {
name = "${basename(get_terragrunt_dir())}"
scheme = "https"
address = "${yamldecode(file("${get_repo_root()}/config/nodes/${local.node_name}/config.yaml")).node_addr}"
port = "${yamldecode(file("${get_repo_root()}/config/nodes/${local.node_name}/config.yaml")).node_port}"
token = "${get_env("INCUS_TOKEN_${upper(local.node_name)}")}"
default = true
}
}
EOF
}