feat: initial commit
- have been working on this for some time now
This commit is contained in:
@@ -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 }}"
|
||||
|
||||
@@ -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 }}
|
||||
@@ -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
|
||||
}
|
||||
Reference in New Issue
Block a user