Complete reference for all Terraform variables in Charon. Configure these in
terraform/terraform.tfvars.
- Kubernetes Configuration
- Headscale VPN
- cert-manager
- Ingress Controllers
- Cloudflare DNS
- Service Configuration
- Monitoring Stack
- Storage
- Node Affinity
- Type: string
- Default:
~/.kube/config - Sensitive: Yes
- Description: Path to kubeconfig file for cluster access
- Type: string
- Default:
dev - Description: Kubernetes namespace for application resources
- Type: bool
- Default:
true - Description: Whether to create the namespace (set false if it exists)
- Type: bool
- Default:
true - Description: Enable Headscale VPN deployment
- Type: string
- Default:
0.23.0 - Description: Headscale container image version
- Type: string
- Required: Yes
- Sensitive: Yes
- Description: Public URL where Headscale is accessible (e.g.,
https://vpn.example.com)
- Type: number
- Default:
30080 - Description: NodePort for Headscale HTTP API (range: 30000-32767)
- Type: number
- Default:
30443 - Description: NodePort for Headscale gRPC API (range: 30000-32767)
- Type: string
- Default:
100.64.0.0/10 - Description: IP prefix for VPN network (CGNAT range recommended)
- Type: string
- Default:
vpn.local - Description: Base domain for MagicDNS hostname resolution
- Type: bool
- Default:
true - Description: Enable MagicDNS for VPN hostnames
- Type: string
- Default:
1Gi - Description: Storage size for Headscale SQLite database
- Type: bool
- Default:
true - Description: Enable cert-manager for TLS certificate management
- Type: string
- Default:
cert-manager - Description: Namespace for cert-manager deployment
- Type: string
- Default:
v1.14.0 - Description: cert-manager Helm chart version
- Type: string
- Required: Yes
- Sensitive: Yes
- Description: Email address for Let's Encrypt certificate notifications
- Type: string
- Default:
letsencrypt-staging - Description: Let's Encrypt issuer (
letsencrypt-stagingorletsencrypt-prod) - Note: Use staging for testing to avoid rate limits
- Type: string
- Default:
nginx - Description: Ingress class name for internal VPN-only access
- Type: string
- Default:
nginx-external - Description: Ingress class for services requiring public access (e.g., Headscale enrollment)
- Type: bool
- Default:
true - Description: Enable Ingress for services (required for TLS)
- Type: string
- Default:
ingress-nginx - Description: Namespace for internal NGINX Ingress Controller
- Type: string
- Default:
ingress-nginx-external - Description: Namespace for external NGINX Ingress Controller
- Type: bool
- Default:
true - Description: Enable NGINX Ingress Controller deployment
- Type: string
- Default:
4.11.3 - Description: NGINX Ingress Controller Helm chart version
- Type: string
- Required: Yes
- Sensitive: Yes
- Description: Cloudflare API token with DNS edit permissions
- Type: string
- Required: Yes
- Sensitive: Yes
- Description: Cloudflare Zone ID for your domain
- Type: string
- Required: Yes
- Sensitive: Yes
- Description: Primary domain name (e.g.,
example.com)
- Type: bool
- Default:
false - Description: Enable FreeIPA identity management deployment
- Type: string
- Required: Yes (if enabled)
- Sensitive: Yes
- Description: Hostname for FreeIPA ingress (e.g.,
freeipa.example.com)
- Type: string
- Required: Yes (if enabled)
- Sensitive: Yes
- Description: FreeIPA domain (e.g.,
dev.svc.cluster.local)
- Type: string
- Required: Yes (if enabled)
- Sensitive: Yes
- Description: FreeIPA Kerberos realm (e.g.,
DEV.SVC.CLUSTER.LOCAL)
- Type: string
- Required: Yes (if enabled)
- Sensitive: Yes
- Description: FreeIPA admin user password
- Type: number
- Default:
1 - Description: Number of FreeIPA replicas for high availability
- Type: bool
- Default:
true - Description: Enable Grafana monitoring deployment
- Type: string
- Default:
8.5.0 - Description: Grafana Helm chart version
- Type: string
- Required: Yes (if enabled)
- Sensitive: Yes
- Description: Hostname for Grafana ingress (e.g.,
grafana.example.com)
- Type: bool
- Default:
true - Description: Enable ingress for Grafana
- Type: string
- Required: Yes (if enabled)
- Sensitive: Yes
- Description: Grafana admin user password
- Type: string
- Default:
500m - Description: Grafana container CPU request
- Type: string
- Default:
512Mi - Description: Grafana container memory request
- Type: string
- Default:
1 - Description: Grafana container CPU limit
- Type: string
- Default:
1Gi - Description: Grafana container memory limit
- Type: bool
- Default:
true - Description: Enable Tailscale sidecar for Grafana VPN connectivity
- Type: bool
- Default:
false - Description: Enable Git sync for Grafana dashboards
- Type: string
- Sensitive: Yes
- Default:
"" - Description: Git repository URL for dashboards (HTTPS for private repos)
- Type: string
- Default:
main - Description: Git branch for Grafana dashboards
- Type: string
- Sensitive: Yes
- Default:
"" - Description: Git repository token for private repos
- Type: number
- Default:
60 - Description: Git sync interval in seconds
- Type: bool
- Default:
true - Description: Enable Open-WebUI AI chat deployment
- Type: string
- Default:
0.6.40 - Description: Open-WebUI Helm chart version
- Type: string
- Required: Yes (if enabled)
- Sensitive: Yes
- Description: Hostname for Open-WebUI ingress (e.g.,
ai.example.com)
- Type: bool
- Default:
true - Description: Enable ingress for Open-WebUI
- Type: string
- Default:
500m - Description: Open-WebUI container CPU request
- Type: string
- Default:
1Gi - Description: Open-WebUI container memory request
- Type: string
- Default:
2 - Description: Open-WebUI container CPU limit
- Type: string
- Default:
2Gi - Description: Open-WebUI container memory limit
- Type: string
- Default:
10Gi - Description: Storage size for Open-WebUI data
- Type: string
- Sensitive: Yes
- Default:
"" - Description: Semicolon-separated OpenAI API keys
- Type: bool
- Default:
true - Description: Enable Tailscale sidecar for VPN connectivity
- Type: bool
- Default:
true - Description: Enable bundled Ollama in Open-WebUI
- Type: bool
- Default:
true - Description: Enable Ollama LLM deployment
- Type: string
- Default:
ollama/ollama:latest - Description: Ollama container image
- Type: string
- Default:
500m - Description: Ollama container CPU request
- Type: string
- Default:
1Gi - Description: Ollama container memory request
- Type: string
- Default:
4 - Description: Ollama container CPU limit
- Type: string
- Default:
8Gi - Description: Ollama container memory limit
- Type: string
- Default:
50Gi - Description: Storage size for Ollama models
- Type: bool
- Default:
true - Description: Enable Redmine project management deployment
- Type: string
- Default:
redmine:6.0 - Description: Redmine container image
- Type: string
- Required: Yes (if enabled)
- Sensitive: Yes
- Description: Hostname for Redmine ingress (e.g.,
redmine.example.com)
- Type: bool
- Default:
true - Description: Enable ingress for Redmine
- Type: string
- Required: Yes (if enabled)
- Sensitive: Yes
- Description: PostgreSQL database host (external)
- Type: number
- Default:
22110 - Description: PostgreSQL database port
- Type: string
- Default:
redmine - Description: PostgreSQL database name
- Type: string
- Required: Yes (if enabled)
- Sensitive: Yes
- Description: PostgreSQL database username
- Type: string
- Required: Yes (if enabled)
- Sensitive: Yes
- Description: PostgreSQL database password
- Type: string
- Default:
500m - Description: Redmine container CPU request
- Type: string
- Default:
1Gi - Description: Redmine container memory request
- Type: string
- Default:
2 - Description: Redmine container CPU limit
- Type: string
- Default:
2Gi - Description: Redmine container memory limit
- Type: bool
- Default:
false - Description: Enable Tailscale sidecar for VPN connectivity
- Type: bool
- Default:
true - Description: Enable vLLM model deployment
- Type: string
- Required: Yes (if enabled)
- Sensitive: Yes
- Description: Hugging Face API token for accessing private models
- Type: number
- Default:
0 - Description: Number of replicas for Hermes 3 8B model
- Type: number
- Default:
1 - Description: Number of replicas for DeepSeek Coder 6.7B model
- Type: bool
- Default:
true - Description: Enable Prometheus metrics deployment
- Type: string
- Default:
27.47.0 - Description: Prometheus container image version
- Type: string
- Default:
50Gi - Description: Storage size for Prometheus data
- Type: string
- Default:
100m - Description: Prometheus container CPU request
- Type: string
- Default:
256Mi - Description: Prometheus container memory request
- Type: string
- Default:
500m - Description: Prometheus container CPU limit
- Type: string
- Default:
1Gi - Description: Prometheus container memory limit
- Type: string
- Default:
monitoring - Description: Namespace for monitoring services
- Type: bool
- Default:
false - Description: Enable Loki log aggregation
- Type: string
- Default:
5.40.0 - Description: Loki Helm chart version
- Type: string
- Default:
100Gi - Description: Storage size for Loki log data
- Type: string
- Default:
standard - Description: Default block storage class for persistent volumes
- Type: string
- Default:
standard - Description: Block storage class with retention policy
- Type: bool
- Default:
true - Description: Enable RWX storage with Linode Block Storage + Samba CIFS
- Type: string
- Sensitive: Yes
- Description: Linode API token for managing Block Storage volumes
- Type: string
- Default:
node-type - Description: Node label key to identify CPU nodes
- Type: string
- Default:
cpu - Description: Node label value for CPU nodes
- Type: list(string)
- Default:
["nvidia-tesla-k80", "nvidia-tesla-v100", "nvidia-a100"] - Description: GPU accelerator labels to avoid for CPU workloads
# Cloudflare Configuration
cloudflare_zone_id = "your-zone-id-here"
cloudflare_api_token = "your-api-token-here"
domain_name = "example.com"
# cert-manager
cert_manager_email = "admin@example.com"
cert_issuer = "letsencrypt-prod"
# Headscale VPN
headscale_server_url = "https://vpn.example.com"
headscale_enabled = true
# Services
grafana_enabled = true
grafana_hostname = "grafana.example.com"
grafana_admin_password = "your-secure-password"
open_webui_enabled = true
open_webui_hostname = "ai.example.com"
freeipa_enabled = true
freeipa_hostname = "freeipa.example.com"
freeipa_domain = "dev.svc.cluster.local"
freeipa_realm = "DEV.SVC.CLUSTER.LOCAL"
freeipa_admin_password = "your-secure-password"
redmine_enabled = true
redmine_hostname = "redmine.example.com"
redmine_db_host = "postgres.external.com"
redmine_db_user = "redmine"
redmine_db_password = "your-secure-password"Related Documentation:
Navigation: Documentation Index | Home