236 lines
6.5 KiB
HCL
236 lines
6.5 KiB
HCL
variable "region" {
|
||
description = "Region for the STACKIT Cloud"
|
||
type = string
|
||
default = "eu01"
|
||
}
|
||
|
||
variable "project_id" {
|
||
description = "STACKIT Cloud project ID"
|
||
type = string
|
||
}
|
||
|
||
variable "service_account_token" {
|
||
description = "Service account token for authentication"
|
||
sensitive = true
|
||
type = string
|
||
}
|
||
|
||
variable "service_account_key_path" {
|
||
type = string
|
||
default = ""
|
||
}
|
||
|
||
variable "organization_id" {
|
||
description = "Organization ID"
|
||
type = string
|
||
}
|
||
|
||
variable "owner_email" {
|
||
description = "Email of the project owner"
|
||
type = string
|
||
default = null
|
||
}
|
||
|
||
variable "security_groups" {
|
||
type = map(object({
|
||
name = optional(string)
|
||
description = optional(string)
|
||
rules = list(object({
|
||
direction = string
|
||
description = optional(string)
|
||
ether_type = optional(string)
|
||
icmp_parameters = optional(object({
|
||
type = optional(number)
|
||
code = optional(number)
|
||
}))
|
||
ip_range = optional(string)
|
||
port_range = optional(object({
|
||
min = number
|
||
max = number
|
||
}))
|
||
protocol = optional(object({
|
||
name = optional(string)
|
||
number = optional(number)
|
||
}))
|
||
remote_security_group_id = optional(string)
|
||
}))
|
||
}))
|
||
}
|
||
|
||
variable "postgres_instances" {
|
||
type = map(object({
|
||
name = string
|
||
version = number
|
||
flavor = object({ cpu = number, ram = number })
|
||
storage = object({ class = string, size = number })
|
||
replicas = number
|
||
acl = list(string)
|
||
backup_schedule = string
|
||
users = list(object({
|
||
username = string
|
||
roles = set(string)
|
||
}))
|
||
databases = list(object({
|
||
name = string
|
||
owner = string
|
||
}))
|
||
}))
|
||
}
|
||
|
||
# Network definition map
|
||
variable "networks" {
|
||
type = map(object({
|
||
name = string
|
||
|
||
# IPv4 settings
|
||
ipv4_gateway = optional(string)
|
||
ipv4_nameservers = optional(list(string))
|
||
ipv4_prefix = optional(string)
|
||
ipv4_prefix_length = optional(number)
|
||
|
||
# IPv6 settings
|
||
ipv6_gateway = optional(string)
|
||
ipv6_nameservers = optional(list(string))
|
||
ipv6_prefix = optional(string)
|
||
ipv6_prefix_length = optional(number)
|
||
|
||
# Flags & labels
|
||
labels = optional(map(string))
|
||
no_ipv4_gateway = optional(bool)
|
||
no_ipv6_gateway = optional(bool)
|
||
routed = optional(bool)
|
||
|
||
# NIC‑specific options
|
||
nics = optional(map(object({
|
||
nic_ipv4 = optional(string)
|
||
nic_name = string
|
||
nic_allowed_addresses = optional(list(string))
|
||
nic_labels = optional(map(string))
|
||
nic_security = optional(bool)
|
||
nic_security_group_ids = optional(list(string))
|
||
nic_security_group_names = optional(list(string))
|
||
})))
|
||
}))
|
||
|
||
default = {}
|
||
}
|
||
|
||
|
||
variable "ske_clusters" {
|
||
type = map(object({
|
||
name = string
|
||
kubernetes_version_min = string
|
||
node_pools = list(object({
|
||
name = string
|
||
machine_type = string
|
||
availability_zones = list(string)
|
||
volume_size = number
|
||
minimum = number
|
||
maximum = number
|
||
}))
|
||
}))
|
||
}
|
||
|
||
variable "observability_instances" {
|
||
description = "Map of Observability instances to create"
|
||
type = map(object({
|
||
# Required
|
||
name = string
|
||
plan_name = string
|
||
|
||
# Optional instance settings
|
||
acl = optional(list(string))
|
||
metrics_retention_days = optional(number)
|
||
metrics_retention_days_5m_downsampling = optional(number)
|
||
metrics_retention_days_1h_downsampling = optional(number)
|
||
alert_config = optional(any)
|
||
parameters = optional(map(string))
|
||
|
||
# Control credential creation
|
||
create_credentials = optional(bool, true)
|
||
credentials_count = optional(number, 1)
|
||
|
||
# alert‑groups
|
||
alertgroups = optional(map(object({
|
||
name = string
|
||
interval = optional(string)
|
||
rules = list(object({
|
||
alert = string
|
||
expression = string
|
||
for = optional(string)
|
||
labels = optional(map(string))
|
||
annotations = optional(map(string))
|
||
}))
|
||
})), {})
|
||
|
||
# log‑alert‑groups
|
||
logalertgroups = optional(map(object({
|
||
name = string
|
||
interval = optional(string)
|
||
rules = list(object({
|
||
alert = string
|
||
expression = string
|
||
for = optional(string)
|
||
labels = optional(map(string))
|
||
annotations = optional(map(string))
|
||
}))
|
||
})), {})
|
||
|
||
# scrape‑configs
|
||
scrapeconfigs = optional(map(object({
|
||
name = string
|
||
metrics_path = string
|
||
targets = list(object({
|
||
urls = list(string)
|
||
labels = optional(map(string))
|
||
}))
|
||
basic_auth = optional(object({
|
||
username = string
|
||
password = string
|
||
}))
|
||
saml2 = optional(object({
|
||
enable_url_parameters = optional(bool)
|
||
}))
|
||
sample_limit = optional(number)
|
||
scheme = optional(string)
|
||
scrape_interval = optional(string)
|
||
scrape_timeout = optional(string)
|
||
})), {})
|
||
}))
|
||
default = {}
|
||
validation {
|
||
condition = alltrue([
|
||
for k, v in var.observability_instances :
|
||
contains([
|
||
"Observability-Medium-EU01",
|
||
"Observability-Monitoring-XL-EU01",
|
||
"Observability-Large-EU01",
|
||
"Observability-Monitoring-Basic-EU01",
|
||
"Observability-Monitoring-Large-EU01",
|
||
"Observability-Basic-EU01",
|
||
"Observability-Monitoring-Medium-EU01",
|
||
"Observability-Monitoring-XXL-EU01",
|
||
"Observability-Metrics-Endpoint-100k-EU01",
|
||
"Observability-Frontend-Starter-EU01",
|
||
"Observability-Monitoring-Starter-EU01",
|
||
"Observability-Starter-EU01",
|
||
], v.plan_name)
|
||
])
|
||
error_message = <<-EOM
|
||
One or more observability_instances specify an invalid plan_name.
|
||
See the provider error output for the list of supported plans. Allowed values:
|
||
Observability-Medium-EU01
|
||
Observability-Monitoring-XL-EU01
|
||
Observability-Large-EU01
|
||
Observability-Monitoring-Basic-EU01
|
||
Observability-Monitoring-Large-EU01
|
||
Observability-Basic-EU01
|
||
Observability-Monitoring-Medium-EU01
|
||
Observability-Monitoring-XXL-EU01
|
||
Observability-Metrics-Endpoint-100k-EU01
|
||
Observability-Frontend-Starter-EU01
|
||
Observability-Monitoring-Starter-EU01
|
||
Observability-Starter-EU01
|
||
EOM
|
||
}
|
||
}
|