feat(openclaw): add shopping, supermarket deals, geizhals, and ebay MCP tools
This commit is contained in:
Generated
+32
-32
@@ -1,24 +1,24 @@
|
||||
# This file is maintained automatically by "terraform init".
|
||||
# Manual edits may be lost in future updates.
|
||||
|
||||
provider "registry.opentofu.org/ovh/ovh" {
|
||||
version = "2.1.0"
|
||||
provider "registry.terraform.io/goauthentik/authentik" {
|
||||
version = "2026.5.1"
|
||||
constraints = ">= 2024.12.0"
|
||||
hashes = [
|
||||
"h1:QNYWbHCXQyUAs1Ucxd4Lw7CS/FohMP/P21uyRWlYPTw=",
|
||||
"zh:08d56f6fd7e0730ea379962b869a80ee47992d5f8523d259eada4479001ce646",
|
||||
"zh:0f1e34db1f51e5b05e183b8905e89c521e223481507ab72421ec141718cb1465",
|
||||
"zh:299b1a702fba2b42bcef9a12db0cb51d091962a6387e1da6043b4830d60b7eca",
|
||||
"zh:4ee79a677eddff27ceed33c207b074ebbfc33727a9e5b863ae8d800da819f1da",
|
||||
"zh:50b7ae60d4d539b79e8db097db954a03e582d29c760cff0854a9b882148db848",
|
||||
"zh:6121ce09a73ed20025e933a8e237cbc62ccaee92fed5ebcbb6984b3c2bc6e4fc",
|
||||
"zh:75cccdfefdfd9054b388b6c8ddce3ffa76adbdc9eb149f6e34998a87e5bb0d3d",
|
||||
"zh:8859bdfb25ae26e4e924e9909f476eafea91a9c2c9f7f65fbc85e68f3c2c4e60",
|
||||
"zh:a435fe28514806bc7b3a3c5a9b878401790402bd75d34f1a9fe1b7b7db9b66b7",
|
||||
"zh:b3ac7469d1864cf96cad90fd8b0c4b99da2e5695b6b2826540320302c241f803",
|
||||
"zh:b531d3ea1b12a17a8999a093a819f0e90c18b0d5db371e2c7e15add337f421ff",
|
||||
"zh:bebc6b1aa48fc5c42fd68d9ff2f8866d794bfff568486d1943827202212aed44",
|
||||
"zh:d4fb1c9e76eb923b35bea62ba4921cba63da83abe4676150d7a4bb9b687228eb",
|
||||
"zh:f953ef37e4a1b3cac22f851c3269e7376704018ffa642b4768869cc227ffccc9",
|
||||
"h1:sa790BNXc5pY8vVXyFn8Y1cHY+cRDbEiHDsr9t0NdiA=",
|
||||
"zh:05f252734db99792e5d3f52b582a4e0027348ac2614d8c9621bf7e623cff8036",
|
||||
"zh:0e1cd8041650aed9bb8d4af23301e786223ed5d1a00c2a5150b7ad874ae03917",
|
||||
"zh:26b1daebd30650df411f903248e061cf963712a063b38e731782fb13a5755ddf",
|
||||
"zh:362b536ff6bf8866c7c1094c3e2322c22b8c36d8d4caa4db0397cebbcad08561",
|
||||
"zh:3d94367b853960f5e88efe3ae69d995d02a11dc8d60ec4d7413a37aabf78b379",
|
||||
"zh:3e840e204677eabe562d17c2ad12afdfa250098725bebac4e91fb8934e233c22",
|
||||
"zh:4db66139d7a9ec6f7852538573261010d48f0a939e2fe8eeb5c55b01149e3629",
|
||||
"zh:7b88a830fb26c697f9d240f498f604485454b12e56b7604eda4ca35d10660ecd",
|
||||
"zh:851bc8bd2d4a16dc71f30da17b6285aa7d85f4bc4175fde7b8319a6a8987ec65",
|
||||
"zh:8bdfc2c70271d48126eef3b1a30d0d132e868d2118ae7277323ed4c905636e4a",
|
||||
"zh:e85c03eac43f23f25ad5443a2984cc67977c3abdcb4c4c426d37342c2f25c37e",
|
||||
"zh:efc296826a700a4e90ee06f8bd3b137617486ce774772aabed3053d4ef8dd906",
|
||||
"zh:f249033dc242c51600cd3968535efa0780352d5ae7435e8ab1482a7ccc9c2f5e",
|
||||
]
|
||||
}
|
||||
|
||||
@@ -84,21 +84,21 @@ provider "registry.terraform.io/hashicorp/random" {
|
||||
}
|
||||
|
||||
provider "registry.terraform.io/ovh/ovh" {
|
||||
version = "2.15.0"
|
||||
version = "2.19.0"
|
||||
hashes = [
|
||||
"h1:Y6pQdKjn1OR4wNlxRpy+nI7Dvap/bKzFb68fynMxTmI=",
|
||||
"zh:22d361f99caa70b07532fce13208fce8b84072cf83eaf6ddfcd9096df88b57ea",
|
||||
"zh:497f88936649d3c352fdb639ba5ebdabfec8ec7a59d67bf619013e3afbbaefb4",
|
||||
"zh:62e49208e2950daf366b396694dc7de5bba31a8b7a10aac7c021f2c78fd64f70",
|
||||
"zh:97e06f7494706df30c136f4809314d92a25129738cf080e22c5c9e47ec70c4cf",
|
||||
"zh:be23cf1ecb2eb76c60dad72eb4f9d005c6184cae6e2cf9f13b0462030133644c",
|
||||
"zh:bf60c1af6db5ca51ff4372fee8e64a21462134d281ae9cb3968ca5b209338c4b",
|
||||
"zh:c9e5ad5c063249786595c5b6c3f59791bd21f5157ff0572a4ed2d52ca8141c50",
|
||||
"zh:d2bf2603741df6fc29a88384f7026fb8b0e982b8a270796e672037d287b41e83",
|
||||
"zh:d944de8032fc01d8488087755bf7fb813e7b8c259e23a7b68ed654905ad19b56",
|
||||
"zh:dcf2a7620abac38e9d8f0a88f2a79de0fddd917ba0facba1108f6581eb1b7f6f",
|
||||
"zh:e7c7905954f69f0d5b6cf9bd87572101924e128aa33311856dbbfedd711361d2",
|
||||
"zh:f6a9977d744ed879a0b3c28a5a800b6a1f49aabe8d71e87ca1d02fe6a77a31ba",
|
||||
"zh:fd0e48de826df04e18489d33b0ff35bd776cb6e7704188f67dad66cbb041e5af",
|
||||
"h1:SUzZY0kbQQ1Z+T958n8//7u+UlItQgll3vTfxuUbdOM=",
|
||||
"zh:0ba0eec9b66d3cf3ffbb8cc753d87aebc7ddb73b975c5b2eb372ec1fcf8712fe",
|
||||
"zh:24773d4959b2fa2674760eebdda421e93a7b0e4cadf1ae135ed66d573e86b040",
|
||||
"zh:2f24103c6b132cb21f1834ee2b00ebce863118d53dc2e55b85cd5b1d154bdc46",
|
||||
"zh:3a7492ea842566601323b6ff4ee45a6ced7eb7c08ed888608acc3bc8e490c22a",
|
||||
"zh:5018841095e9677fc8e5abcdd8336b5ad20086426cc22be35fb657b3cd8c7b9d",
|
||||
"zh:62ea15a24fb26a79586c14eed2d1b8dfbdb5195288620dcd36d9c71a55b5860c",
|
||||
"zh:6847b431185ddf4e7349d2397ac9cb1659ad129b01ec1661df2cac60b031e6c4",
|
||||
"zh:7cdc7f403f10b405ef5e9a10094ce11685d2a739058e5c21c7db268dcf3c8fd8",
|
||||
"zh:9d9ae5b6afe707487230c46930a805b0bcfc4c95cb779c4dd956695dd67a7a84",
|
||||
"zh:bcc1bfd1df2546aff09726885703713dc9579f73240395cb9890140165f45d1c",
|
||||
"zh:c02e93bdd854b5814089d88c2ecf76fc22b83dda1c4785aea6765c1b72ac9897",
|
||||
"zh:e26191ff7f5ae7750d129136c0e6f13a54167fe332dc6c5f3f3ceab17c27c4df",
|
||||
"zh:f0de0de40649efc805e63fbe405055ed4c0f8149b0d530bb63d079b62f692de1",
|
||||
]
|
||||
}
|
||||
|
||||
Binary file not shown.
@@ -0,0 +1,725 @@
|
||||
# --- Authentik Terraform Configuration ---
|
||||
|
||||
variable "authentik_url" {
|
||||
description = "Base URL of the Authentik instance"
|
||||
type = string
|
||||
default = "https://auth.haumdaucher.de"
|
||||
}
|
||||
|
||||
variable "authentik_token" {
|
||||
description = "Authentik API Token (create via Directory > Tokens & App passwords)"
|
||||
type = string
|
||||
sensitive = true
|
||||
default = null
|
||||
}
|
||||
|
||||
provider "authentik" {
|
||||
url = var.authentik_url
|
||||
token = var.authentik_token
|
||||
}
|
||||
|
||||
# --- Branding: Haumdaucher Custom Theme & Assets ---
|
||||
|
||||
resource "authentik_brand" "haumdaucher" {
|
||||
domain = "auth.haumdaucher.de"
|
||||
default = true
|
||||
branding_title = "HAUMDAUCHER"
|
||||
branding_logo = "https://haumdaucher.de/images/logo_classic.png"
|
||||
branding_favicon = "https://haumdaucher.de/icon-192.png"
|
||||
branding_custom_css = file("${path.module}/haumdaucher-theme.css")
|
||||
}
|
||||
|
||||
# --- Directory: User Groups ---
|
||||
|
||||
resource "authentik_group" "infra_admins" {
|
||||
name = "infra-admins"
|
||||
is_superuser = false
|
||||
}
|
||||
|
||||
resource "authentik_group" "users" {
|
||||
name = "users"
|
||||
is_superuser = false
|
||||
}
|
||||
|
||||
resource "authentik_group" "verein_mitglieder" {
|
||||
name = "verein-mitglieder"
|
||||
is_superuser = false
|
||||
}
|
||||
|
||||
# --- Flows: Authorization, Invalidation & Custom Invitation Flow ---
|
||||
|
||||
data "authentik_flow" "default_authorization_flow" {
|
||||
slug = "default-provider-authorization-implicit-consent"
|
||||
}
|
||||
|
||||
data "authentik_flow" "default_invalidation_flow" {
|
||||
slug = "default-invalidation-flow"
|
||||
}
|
||||
|
||||
# 1. Prompt Fields for Member Onboarding
|
||||
resource "authentik_stage_prompt_field" "haumdaucher_enrollment_username" {
|
||||
name = "haumdaucher-enrollment-username"
|
||||
field_key = "username"
|
||||
label = "Benutzername"
|
||||
type = "username"
|
||||
required = true
|
||||
order = 10
|
||||
}
|
||||
|
||||
resource "authentik_stage_prompt_field" "haumdaucher_enrollment_email" {
|
||||
name = "haumdaucher-enrollment-email"
|
||||
field_key = "email"
|
||||
label = "E-Mail-Adresse"
|
||||
type = "email"
|
||||
required = true
|
||||
order = 15
|
||||
}
|
||||
|
||||
resource "authentik_stage_prompt_field" "haumdaucher_enrollment_name" {
|
||||
name = "haumdaucher-enrollment-name"
|
||||
field_key = "name"
|
||||
label = "Vollständiger Name"
|
||||
type = "text"
|
||||
required = true
|
||||
order = 20
|
||||
}
|
||||
|
||||
resource "authentik_stage_prompt_field" "haumdaucher_enrollment_password" {
|
||||
name = "haumdaucher-enrollment-password"
|
||||
field_key = "password"
|
||||
label = "Passwort"
|
||||
type = "password"
|
||||
required = true
|
||||
order = 30
|
||||
}
|
||||
|
||||
resource "authentik_stage_prompt_field" "haumdaucher_enrollment_password_repeat" {
|
||||
name = "haumdaucher-enrollment-password-repeat"
|
||||
field_key = "password_repeat"
|
||||
label = "Passwort wiederholen"
|
||||
type = "password"
|
||||
required = true
|
||||
order = 40
|
||||
}
|
||||
|
||||
# 2. Prompt Stage
|
||||
resource "authentik_stage_prompt" "haumdaucher_enrollment_prompt" {
|
||||
name = "haumdaucher-enrollment-prompt"
|
||||
fields = [
|
||||
authentik_stage_prompt_field.haumdaucher_enrollment_username.id,
|
||||
authentik_stage_prompt_field.haumdaucher_enrollment_email.id,
|
||||
authentik_stage_prompt_field.haumdaucher_enrollment_name.id,
|
||||
authentik_stage_prompt_field.haumdaucher_enrollment_password.id,
|
||||
authentik_stage_prompt_field.haumdaucher_enrollment_password_repeat.id,
|
||||
]
|
||||
}
|
||||
|
||||
# 3. Invitation Stage (gates the flow so only valid ?itoken=... can register)
|
||||
resource "authentik_stage_invitation" "haumdaucher_enrollment_invitation" {
|
||||
name = "haumdaucher-enrollment-invitation"
|
||||
continue_flow_without_invitation = false
|
||||
}
|
||||
|
||||
# 4. User Write Stage (creates user in database and assigns default 'users' group)
|
||||
resource "authentik_stage_user_write" "haumdaucher_enrollment_write" {
|
||||
name = "haumdaucher-enrollment-write"
|
||||
create_users_as_inactive = false
|
||||
create_users_group = authentik_group.users.id
|
||||
}
|
||||
|
||||
# 5. User Login Stage (starts the user session)
|
||||
resource "authentik_stage_user_login" "haumdaucher_enrollment_login" {
|
||||
name = "haumdaucher-enrollment-login"
|
||||
session_duration = "seconds=0"
|
||||
}
|
||||
|
||||
# 6. Redirect Stage (redirects user to haumdaucher.de after successful registration)
|
||||
resource "authentik_stage_redirect" "haumdaucher_enrollment_redirect" {
|
||||
name = "haumdaucher-enrollment-redirect"
|
||||
mode = "static"
|
||||
target_static = "https://haumdaucher.de"
|
||||
}
|
||||
|
||||
# 7. Flow Definition
|
||||
resource "authentik_flow" "haumdaucher_invitation_flow" {
|
||||
name = "Haumdaucher Invitation Flow"
|
||||
slug = "haumdaucher-invitation-flow"
|
||||
title = "Haumdaucher Registrierung"
|
||||
designation = "enrollment"
|
||||
}
|
||||
|
||||
# 8. Flow Stage Bindings (Execution Order)
|
||||
resource "authentik_flow_stage_binding" "bind_haumdaucher_invitation" {
|
||||
target = authentik_flow.haumdaucher_invitation_flow.uuid
|
||||
stage = authentik_stage_invitation.haumdaucher_enrollment_invitation.id
|
||||
order = 10
|
||||
}
|
||||
|
||||
resource "authentik_flow_stage_binding" "bind_haumdaucher_prompt" {
|
||||
target = authentik_flow.haumdaucher_invitation_flow.uuid
|
||||
stage = authentik_stage_prompt.haumdaucher_enrollment_prompt.id
|
||||
order = 20
|
||||
}
|
||||
|
||||
resource "authentik_flow_stage_binding" "bind_haumdaucher_write" {
|
||||
target = authentik_flow.haumdaucher_invitation_flow.uuid
|
||||
stage = authentik_stage_user_write.haumdaucher_enrollment_write.id
|
||||
order = 30
|
||||
}
|
||||
|
||||
resource "authentik_flow_stage_binding" "bind_haumdaucher_login" {
|
||||
target = authentik_flow.haumdaucher_invitation_flow.uuid
|
||||
stage = authentik_stage_user_login.haumdaucher_enrollment_login.id
|
||||
order = 40
|
||||
}
|
||||
|
||||
resource "authentik_flow_stage_binding" "bind_haumdaucher_redirect" {
|
||||
target = authentik_flow.haumdaucher_invitation_flow.uuid
|
||||
stage = authentik_stage_redirect.haumdaucher_enrollment_redirect.id
|
||||
order = 50
|
||||
}
|
||||
|
||||
# --- ForwardAuth Proxy Providers & Applications ---
|
||||
|
||||
# 1. Zigbee2MQTT
|
||||
resource "authentik_provider_proxy" "zigbee2mqtt" {
|
||||
name = "Zigbee2MQTT"
|
||||
external_host = "https://zigbee2mqtt.moritzgraf.de"
|
||||
mode = "forward_single"
|
||||
authorization_flow = data.authentik_flow.default_authorization_flow.id
|
||||
invalidation_flow = data.authentik_flow.default_invalidation_flow.id
|
||||
intercept_header_auth = true
|
||||
}
|
||||
|
||||
resource "authentik_application" "zigbee2mqtt" {
|
||||
name = "Zigbee2MQTT"
|
||||
slug = "zigbee2mqtt"
|
||||
protocol_provider = authentik_provider_proxy.zigbee2mqtt.id
|
||||
}
|
||||
|
||||
# 2. Prometheus
|
||||
resource "authentik_provider_proxy" "prometheus" {
|
||||
name = "Prometheus"
|
||||
external_host = "https://prometheus.haumdaucher.de"
|
||||
mode = "forward_single"
|
||||
authorization_flow = data.authentik_flow.default_authorization_flow.id
|
||||
invalidation_flow = data.authentik_flow.default_invalidation_flow.id
|
||||
intercept_header_auth = true
|
||||
}
|
||||
|
||||
resource "authentik_application" "prometheus" {
|
||||
name = "Prometheus"
|
||||
slug = "prometheus"
|
||||
protocol_provider = authentik_provider_proxy.prometheus.id
|
||||
}
|
||||
|
||||
# 3. Alertmanager
|
||||
resource "authentik_provider_proxy" "alertmanager" {
|
||||
name = "Alertmanager"
|
||||
external_host = "https://alertmanager.haumdaucher.de"
|
||||
mode = "forward_single"
|
||||
authorization_flow = data.authentik_flow.default_authorization_flow.id
|
||||
invalidation_flow = data.authentik_flow.default_invalidation_flow.id
|
||||
intercept_header_auth = true
|
||||
}
|
||||
|
||||
resource "authentik_application" "alertmanager" {
|
||||
name = "Alertmanager"
|
||||
slug = "alertmanager"
|
||||
protocol_provider = authentik_provider_proxy.alertmanager.id
|
||||
}
|
||||
|
||||
# 4. Nextcloud phpMyAdmin
|
||||
resource "authentik_provider_proxy" "nextcloud_phpmyadmin" {
|
||||
name = "Nextcloud phpMyAdmin"
|
||||
external_host = "https://nextcloud.phpmyadmin.haumdaucher.de"
|
||||
mode = "forward_single"
|
||||
authorization_flow = data.authentik_flow.default_authorization_flow.id
|
||||
invalidation_flow = data.authentik_flow.default_invalidation_flow.id
|
||||
intercept_header_auth = true
|
||||
}
|
||||
|
||||
resource "authentik_application" "nextcloud_phpmyadmin" {
|
||||
name = "Nextcloud phpMyAdmin"
|
||||
slug = "nextcloud-phpmyadmin"
|
||||
protocol_provider = authentik_provider_proxy.nextcloud_phpmyadmin.id
|
||||
}
|
||||
|
||||
# 5. Gitea phpMyAdmin
|
||||
resource "authentik_provider_proxy" "gitea_phpmyadmin" {
|
||||
name = "Gitea phpMyAdmin"
|
||||
external_host = "https://gitea.phpmyadmin.haumdaucher.de"
|
||||
mode = "forward_single"
|
||||
authorization_flow = data.authentik_flow.default_authorization_flow.id
|
||||
invalidation_flow = data.authentik_flow.default_invalidation_flow.id
|
||||
intercept_header_auth = true
|
||||
}
|
||||
|
||||
resource "authentik_application" "gitea_phpmyadmin" {
|
||||
name = "Gitea phpMyAdmin"
|
||||
slug = "gitea-phpmyadmin"
|
||||
protocol_provider = authentik_provider_proxy.gitea_phpmyadmin.id
|
||||
}
|
||||
|
||||
# 6. Home Assistant VS Code
|
||||
resource "authentik_provider_proxy" "hass_coder" {
|
||||
name = "Home Assistant Code"
|
||||
external_host = "https://hass-coder.moritzgraf.de"
|
||||
mode = "forward_single"
|
||||
authorization_flow = data.authentik_flow.default_authorization_flow.id
|
||||
invalidation_flow = data.authentik_flow.default_invalidation_flow.id
|
||||
intercept_header_auth = true
|
||||
}
|
||||
|
||||
resource "authentik_application" "hass_coder" {
|
||||
name = "Home Assistant Code"
|
||||
slug = "hass-coder"
|
||||
protocol_provider = authentik_provider_proxy.hass_coder.id
|
||||
}
|
||||
|
||||
# 7. OpenClaw
|
||||
resource "authentik_provider_proxy" "openclaw" {
|
||||
name = "OpenClaw"
|
||||
external_host = "https://openclaw.haumdaucher.de"
|
||||
mode = "forward_single"
|
||||
authorization_flow = data.authentik_flow.default_authorization_flow.id
|
||||
invalidation_flow = data.authentik_flow.default_invalidation_flow.id
|
||||
intercept_header_auth = true
|
||||
}
|
||||
|
||||
resource "authentik_application" "openclaw" {
|
||||
name = "OpenClaw"
|
||||
slug = "openclaw"
|
||||
protocol_provider = authentik_provider_proxy.openclaw.id
|
||||
}
|
||||
|
||||
# 8. n8n
|
||||
resource "authentik_provider_proxy" "n8n" {
|
||||
name = "n8n"
|
||||
external_host = "https://n8n.moritzgraf.de"
|
||||
mode = "forward_single"
|
||||
authorization_flow = data.authentik_flow.default_authorization_flow.id
|
||||
invalidation_flow = data.authentik_flow.default_invalidation_flow.id
|
||||
intercept_header_auth = true
|
||||
}
|
||||
|
||||
resource "authentik_application" "n8n" {
|
||||
name = "n8n"
|
||||
slug = "n8n"
|
||||
protocol_provider = authentik_provider_proxy.n8n.id
|
||||
}
|
||||
|
||||
# --- Outpost: Embedded Proxy Outpost ---
|
||||
|
||||
resource "authentik_outpost" "embedded" {
|
||||
name = "authentik Embedded Outpost"
|
||||
type = "proxy"
|
||||
protocol_providers = [
|
||||
authentik_provider_proxy.zigbee2mqtt.id,
|
||||
authentik_provider_proxy.prometheus.id,
|
||||
authentik_provider_proxy.alertmanager.id,
|
||||
authentik_provider_proxy.nextcloud_phpmyadmin.id,
|
||||
authentik_provider_proxy.gitea_phpmyadmin.id,
|
||||
authentik_provider_proxy.hass_coder.id,
|
||||
authentik_provider_proxy.openclaw.id,
|
||||
authentik_provider_proxy.n8n.id,
|
||||
]
|
||||
}
|
||||
|
||||
# --- Machine & AI Assistant: Service Account & API Token ---
|
||||
|
||||
resource "authentik_user" "ai_assistant" {
|
||||
username = "ai-assistant"
|
||||
name = "AI Assistant"
|
||||
type = "service_account"
|
||||
groups = [authentik_group.infra_admins.id]
|
||||
}
|
||||
|
||||
resource "authentik_token" "ai_assistant_token" {
|
||||
identifier = "ai-assistant-api-token"
|
||||
user = authentik_user.ai_assistant.id
|
||||
intent = "api"
|
||||
expiring = false
|
||||
retrieve_key = true
|
||||
}
|
||||
|
||||
# --- Native OIDC Providers & Applications ---
|
||||
|
||||
# Scope Mappings
|
||||
data "authentik_property_mapping_provider_scope" "openid" {
|
||||
scope_name = "openid"
|
||||
}
|
||||
|
||||
data "authentik_property_mapping_provider_scope" "email" {
|
||||
scope_name = "email"
|
||||
}
|
||||
|
||||
data "authentik_property_mapping_provider_scope" "profile" {
|
||||
scope_name = "profile"
|
||||
}
|
||||
|
||||
data "authentik_certificate_key_pair" "generated" {
|
||||
name = "authentik Self-signed Certificate"
|
||||
}
|
||||
|
||||
# 1. Gitea
|
||||
resource "random_password" "gitea_oauth_client_secret" {
|
||||
length = 40
|
||||
special = false
|
||||
}
|
||||
|
||||
resource "authentik_provider_oauth2" "gitea" {
|
||||
name = "Gitea"
|
||||
client_id = "gitea"
|
||||
client_secret = random_password.gitea_oauth_client_secret.result
|
||||
client_type = "confidential"
|
||||
authorization_flow = data.authentik_flow.default_authorization_flow.id
|
||||
invalidation_flow = data.authentik_flow.default_invalidation_flow.id
|
||||
signing_key = data.authentik_certificate_key_pair.generated.id
|
||||
grant_types = ["authorization_code", "refresh_token"]
|
||||
allowed_redirect_uris = [
|
||||
{
|
||||
matching_mode = "strict"
|
||||
url = "https://git.moritzgraf.de/user/oauth2/authentik/callback"
|
||||
},
|
||||
{
|
||||
matching_mode = "strict"
|
||||
url = "https://git.moritzgraf.de/user/oauth2/Authentik/callback"
|
||||
}
|
||||
]
|
||||
sub_mode = "user_username"
|
||||
include_claims_in_id_token = true
|
||||
property_mappings = [
|
||||
data.authentik_property_mapping_provider_scope.openid.id,
|
||||
data.authentik_property_mapping_provider_scope.email.id,
|
||||
data.authentik_property_mapping_provider_scope.profile.id,
|
||||
]
|
||||
}
|
||||
|
||||
resource "authentik_application" "gitea" {
|
||||
name = "Gitea"
|
||||
slug = "gitea"
|
||||
protocol_provider = authentik_provider_oauth2.gitea.id
|
||||
}
|
||||
|
||||
output "gitea_oauth_client_secret" {
|
||||
description = "OAuth2 Client Secret for Gitea OIDC provider"
|
||||
value = random_password.gitea_oauth_client_secret.result
|
||||
sensitive = true
|
||||
}
|
||||
|
||||
# 2. Grafana
|
||||
resource "random_password" "grafana_oauth_client_secret" {
|
||||
length = 40
|
||||
special = false
|
||||
}
|
||||
|
||||
resource "authentik_provider_oauth2" "grafana" {
|
||||
name = "Grafana"
|
||||
client_id = "grafana"
|
||||
client_secret = random_password.grafana_oauth_client_secret.result
|
||||
client_type = "confidential"
|
||||
authorization_flow = data.authentik_flow.default_authorization_flow.id
|
||||
invalidation_flow = data.authentik_flow.default_invalidation_flow.id
|
||||
signing_key = data.authentik_certificate_key_pair.generated.id
|
||||
grant_types = ["authorization_code", "refresh_token"]
|
||||
allowed_redirect_uris = [
|
||||
{
|
||||
matching_mode = "strict"
|
||||
url = "https://grafana.haumdaucher.de/login/generic_oauth"
|
||||
}
|
||||
]
|
||||
sub_mode = "user_username"
|
||||
include_claims_in_id_token = true
|
||||
property_mappings = [
|
||||
data.authentik_property_mapping_provider_scope.openid.id,
|
||||
data.authentik_property_mapping_provider_scope.email.id,
|
||||
data.authentik_property_mapping_provider_scope.profile.id,
|
||||
]
|
||||
}
|
||||
|
||||
resource "authentik_application" "grafana" {
|
||||
name = "Grafana"
|
||||
slug = "grafana"
|
||||
protocol_provider = authentik_provider_oauth2.grafana.id
|
||||
}
|
||||
|
||||
output "grafana_oauth_client_secret" {
|
||||
description = "OAuth2 Client Secret for Grafana OIDC provider"
|
||||
value = random_password.grafana_oauth_client_secret.result
|
||||
sensitive = true
|
||||
}
|
||||
|
||||
# 3. Coder v2
|
||||
resource "random_password" "coder_oauth_client_secret" {
|
||||
length = 40
|
||||
special = false
|
||||
}
|
||||
|
||||
resource "authentik_provider_oauth2" "coder" {
|
||||
name = "Coder"
|
||||
client_id = "coder"
|
||||
client_secret = random_password.coder_oauth_client_secret.result
|
||||
client_type = "confidential"
|
||||
authorization_flow = data.authentik_flow.default_authorization_flow.id
|
||||
invalidation_flow = data.authentik_flow.default_invalidation_flow.id
|
||||
signing_key = data.authentik_certificate_key_pair.generated.id
|
||||
grant_types = ["authorization_code", "refresh_token"]
|
||||
allowed_redirect_uris = [
|
||||
{
|
||||
matching_mode = "strict"
|
||||
url = "https://coder.moritzgraf.de/api/v2/users/oidc/callback"
|
||||
}
|
||||
]
|
||||
sub_mode = "user_username"
|
||||
include_claims_in_id_token = true
|
||||
property_mappings = [
|
||||
data.authentik_property_mapping_provider_scope.openid.id,
|
||||
data.authentik_property_mapping_provider_scope.email.id,
|
||||
data.authentik_property_mapping_provider_scope.profile.id,
|
||||
]
|
||||
}
|
||||
|
||||
resource "authentik_application" "coder" {
|
||||
name = "Coder"
|
||||
slug = "coder"
|
||||
protocol_provider = authentik_provider_oauth2.coder.id
|
||||
}
|
||||
|
||||
output "coder_oauth_client_secret" {
|
||||
description = "OAuth2 Client Secret for Coder OIDC provider"
|
||||
value = random_password.coder_oauth_client_secret.result
|
||||
sensitive = true
|
||||
}
|
||||
|
||||
# 4. MinIO Console
|
||||
resource "authentik_property_mapping_provider_scope" "minio_policy" {
|
||||
name = "minio-policy"
|
||||
scope_name = "policy"
|
||||
expression = <<EOF
|
||||
if "infra-admins" in [group.name for group in request.user.groups.all()]:
|
||||
return {"policy": "consoleAdmin"}
|
||||
return {"policy": "readonly"}
|
||||
EOF
|
||||
}
|
||||
|
||||
resource "random_password" "minio_oauth_client_secret" {
|
||||
length = 40
|
||||
special = false
|
||||
}
|
||||
|
||||
resource "authentik_provider_oauth2" "minio" {
|
||||
name = "MinIO"
|
||||
client_id = "minio"
|
||||
client_secret = random_password.minio_oauth_client_secret.result
|
||||
client_type = "confidential"
|
||||
authorization_flow = data.authentik_flow.default_authorization_flow.id
|
||||
invalidation_flow = data.authentik_flow.default_invalidation_flow.id
|
||||
signing_key = data.authentik_certificate_key_pair.generated.id
|
||||
grant_types = ["authorization_code", "refresh_token"]
|
||||
allowed_redirect_uris = [
|
||||
{
|
||||
matching_mode = "strict"
|
||||
url = "https://minio-console.haumdaucher.de/oauth_callback"
|
||||
}
|
||||
]
|
||||
sub_mode = "user_username"
|
||||
include_claims_in_id_token = true
|
||||
property_mappings = [
|
||||
data.authentik_property_mapping_provider_scope.openid.id,
|
||||
data.authentik_property_mapping_provider_scope.email.id,
|
||||
data.authentik_property_mapping_provider_scope.profile.id,
|
||||
authentik_property_mapping_provider_scope.minio_policy.id,
|
||||
]
|
||||
}
|
||||
|
||||
resource "authentik_application" "minio" {
|
||||
name = "MinIO"
|
||||
slug = "minio"
|
||||
protocol_provider = authentik_provider_oauth2.minio.id
|
||||
}
|
||||
|
||||
output "minio_oauth_client_secret" {
|
||||
description = "OAuth2 Client Secret for MinIO OIDC provider"
|
||||
value = random_password.minio_oauth_client_secret.result
|
||||
sensitive = true
|
||||
}
|
||||
|
||||
# 5. Nextcloud
|
||||
resource "random_password" "nextcloud_oauth_client_secret" {
|
||||
length = 40
|
||||
special = false
|
||||
}
|
||||
|
||||
resource "authentik_provider_oauth2" "nextcloud" {
|
||||
name = "Nextcloud"
|
||||
client_id = "nextcloud"
|
||||
client_secret = random_password.nextcloud_oauth_client_secret.result
|
||||
client_type = "confidential"
|
||||
authorization_flow = data.authentik_flow.default_authorization_flow.id
|
||||
invalidation_flow = data.authentik_flow.default_invalidation_flow.id
|
||||
signing_key = data.authentik_certificate_key_pair.generated.id
|
||||
grant_types = ["authorization_code", "refresh_token"]
|
||||
allowed_redirect_uris = [
|
||||
{
|
||||
matching_mode = "strict"
|
||||
url = "https://cloud.haumdaucher.de/apps/user_oidc/code"
|
||||
}
|
||||
]
|
||||
sub_mode = "user_username"
|
||||
include_claims_in_id_token = true
|
||||
property_mappings = [
|
||||
data.authentik_property_mapping_provider_scope.openid.id,
|
||||
data.authentik_property_mapping_provider_scope.email.id,
|
||||
data.authentik_property_mapping_provider_scope.profile.id,
|
||||
]
|
||||
}
|
||||
|
||||
resource "authentik_application" "nextcloud" {
|
||||
name = "Nextcloud"
|
||||
slug = "nextcloud"
|
||||
protocol_provider = authentik_provider_oauth2.nextcloud.id
|
||||
}
|
||||
|
||||
output "nextcloud_oauth_client_secret" {
|
||||
description = "OAuth2 Client Secret for Nextcloud OIDC provider"
|
||||
value = random_password.nextcloud_oauth_client_secret.result
|
||||
sensitive = true
|
||||
}
|
||||
|
||||
# 6. Home Assistant
|
||||
resource "random_password" "homeassistant_oauth_client_secret" {
|
||||
length = 40
|
||||
special = false
|
||||
}
|
||||
|
||||
resource "authentik_provider_oauth2" "homeassistant" {
|
||||
name = "Home Assistant"
|
||||
client_id = "homeassistant"
|
||||
client_secret = random_password.homeassistant_oauth_client_secret.result
|
||||
client_type = "confidential"
|
||||
authorization_flow = data.authentik_flow.default_authorization_flow.id
|
||||
invalidation_flow = data.authentik_flow.default_invalidation_flow.id
|
||||
signing_key = data.authentik_certificate_key_pair.generated.id
|
||||
grant_types = ["authorization_code", "refresh_token"]
|
||||
allowed_redirect_uris = [
|
||||
{
|
||||
matching_mode = "strict"
|
||||
url = "https://hass.moritzgraf.de/auth/oidc/callback"
|
||||
},
|
||||
{
|
||||
matching_mode = "strict"
|
||||
url = "https://hass.moritzgraf.de/auth/external/callback"
|
||||
}
|
||||
]
|
||||
sub_mode = "user_username"
|
||||
include_claims_in_id_token = true
|
||||
property_mappings = [
|
||||
data.authentik_property_mapping_provider_scope.openid.id,
|
||||
data.authentik_property_mapping_provider_scope.email.id,
|
||||
data.authentik_property_mapping_provider_scope.profile.id,
|
||||
]
|
||||
}
|
||||
|
||||
resource "authentik_application" "homeassistant" {
|
||||
name = "Home Assistant"
|
||||
slug = "homeassistant"
|
||||
protocol_provider = authentik_provider_oauth2.homeassistant.id
|
||||
}
|
||||
|
||||
output "homeassistant_oauth_client_secret" {
|
||||
description = "OAuth2 Client Secret for Home Assistant OIDC provider"
|
||||
value = random_password.homeassistant_oauth_client_secret.result
|
||||
sensitive = true
|
||||
}
|
||||
|
||||
# --- Application Policy Bindings (Access Control & RBAC) ---
|
||||
|
||||
# 1. Admin-Only Applications (Strictly restricted to infra-admins)
|
||||
resource "authentik_policy_binding" "openclaw_admin_only" {
|
||||
target = authentik_application.openclaw.uuid
|
||||
group = authentik_group.infra_admins.id
|
||||
order = 0
|
||||
}
|
||||
|
||||
resource "authentik_policy_binding" "zigbee2mqtt_admin_only" {
|
||||
target = authentik_application.zigbee2mqtt.uuid
|
||||
group = authentik_group.infra_admins.id
|
||||
order = 0
|
||||
}
|
||||
|
||||
resource "authentik_policy_binding" "prometheus_admin_only" {
|
||||
target = authentik_application.prometheus.uuid
|
||||
group = authentik_group.infra_admins.id
|
||||
order = 0
|
||||
}
|
||||
|
||||
resource "authentik_policy_binding" "alertmanager_admin_only" {
|
||||
target = authentik_application.alertmanager.uuid
|
||||
group = authentik_group.infra_admins.id
|
||||
order = 0
|
||||
}
|
||||
|
||||
resource "authentik_policy_binding" "nextcloud_phpmyadmin_admin_only" {
|
||||
target = authentik_application.nextcloud_phpmyadmin.uuid
|
||||
group = authentik_group.infra_admins.id
|
||||
order = 0
|
||||
}
|
||||
|
||||
resource "authentik_policy_binding" "gitea_phpmyadmin_admin_only" {
|
||||
target = authentik_application.gitea_phpmyadmin.uuid
|
||||
group = authentik_group.infra_admins.id
|
||||
order = 0
|
||||
}
|
||||
|
||||
resource "authentik_policy_binding" "hass_coder_admin_only" {
|
||||
target = authentik_application.hass_coder.uuid
|
||||
group = authentik_group.infra_admins.id
|
||||
order = 0
|
||||
}
|
||||
|
||||
resource "authentik_policy_binding" "n8n_admin_only" {
|
||||
target = authentik_application.n8n.uuid
|
||||
group = authentik_group.infra_admins.id
|
||||
order = 0
|
||||
}
|
||||
|
||||
resource "authentik_policy_binding" "coder_admin_only" {
|
||||
target = authentik_application.coder.uuid
|
||||
group = authentik_group.infra_admins.id
|
||||
order = 0
|
||||
}
|
||||
|
||||
resource "authentik_policy_binding" "minio_admin_only" {
|
||||
target = authentik_application.minio.uuid
|
||||
group = authentik_group.infra_admins.id
|
||||
order = 0
|
||||
}
|
||||
|
||||
# 2. Shared & Member Applications (Accessible to all authenticated users)
|
||||
resource "authentik_policy_binding" "grafana_users" {
|
||||
target = authentik_application.grafana.uuid
|
||||
group = authentik_group.users.id
|
||||
order = 0
|
||||
}
|
||||
|
||||
resource "authentik_policy_binding" "nextcloud_users" {
|
||||
target = authentik_application.nextcloud.uuid
|
||||
group = authentik_group.users.id
|
||||
order = 0
|
||||
}
|
||||
|
||||
resource "authentik_policy_binding" "gitea_users" {
|
||||
target = authentik_application.gitea.uuid
|
||||
group = authentik_group.users.id
|
||||
order = 0
|
||||
}
|
||||
|
||||
resource "authentik_policy_binding" "homeassistant_users" {
|
||||
target = authentik_application.homeassistant.uuid
|
||||
group = authentik_group.users.id
|
||||
order = 0
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -2,10 +2,10 @@
|
||||
|
||||
resource "ovh_domain_zone_record" "haumdaucher_mx_record" {
|
||||
|
||||
zone = "haumdaucher.de"
|
||||
fieldtype = "MX"
|
||||
ttl = 60
|
||||
target = "1 SMTP.GOOGLE.COM."
|
||||
zone = "haumdaucher.de"
|
||||
fieldtype = "MX"
|
||||
ttl = 60
|
||||
target = "1 SMTP.GOOGLE.COM."
|
||||
}
|
||||
|
||||
resource "ovh_domain_zone_record" "spf_haumdaucher_de" {
|
||||
@@ -36,18 +36,18 @@ resource "ovh_domain_zone_record" "dkim_google_haumdaucher_de" {
|
||||
|
||||
resource "ovh_domain_zone_record" "mx_record_moritzgraf_de" {
|
||||
|
||||
zone = "moritzgraf.de"
|
||||
fieldtype = "MX"
|
||||
ttl = 60
|
||||
target = "1 SMTP.GOOGLE.COM."
|
||||
zone = "moritzgraf.de"
|
||||
fieldtype = "MX"
|
||||
ttl = 60
|
||||
target = "1 SMTP.GOOGLE.COM."
|
||||
}
|
||||
|
||||
|
||||
resource "ovh_domain_zone_record" "google_domain_verification_moritzgraf_de" {
|
||||
zone = "moritzgraf.de"
|
||||
fieldtype = "TXT"
|
||||
ttl = 60
|
||||
target = "google-site-verification=YwUd-Bmbq1-lA7uYGcowsLEMczqx1odndFZq_Nk3nvM"
|
||||
zone = "moritzgraf.de"
|
||||
fieldtype = "TXT"
|
||||
ttl = 60
|
||||
target = "google-site-verification=YwUd-Bmbq1-lA7uYGcowsLEMczqx1odndFZq_Nk3nvM"
|
||||
}
|
||||
|
||||
resource "ovh_domain_zone_record" "spf_moritzgraf_de" {
|
||||
@@ -79,17 +79,17 @@ resource "ovh_domain_zone_record" "dkim_google_moritzgraf_de" {
|
||||
|
||||
resource "ovh_domain_zone_record" "mx_record_ameliegraf_de" {
|
||||
|
||||
zone = "ameliegraf.de"
|
||||
zone = "ameliegraf.de"
|
||||
fieldtype = "MX"
|
||||
ttl = 60
|
||||
target = "1 smtp.google.com."
|
||||
ttl = 60
|
||||
target = "1 smtp.google.com."
|
||||
}
|
||||
|
||||
resource "ovh_domain_zone_record" "google_domain_verification_ameliegraf_de" {
|
||||
zone = "ameliegraf.de"
|
||||
fieldtype = "TXT"
|
||||
ttl = 60
|
||||
target = "google-site-verification=LwCbVqOp4c200QYrEEX1m4lIebOzxl5eBb2IkHbrSVA"
|
||||
zone = "ameliegraf.de"
|
||||
fieldtype = "TXT"
|
||||
ttl = 60
|
||||
target = "google-site-verification=LwCbVqOp4c200QYrEEX1m4lIebOzxl5eBb2IkHbrSVA"
|
||||
}
|
||||
|
||||
resource "ovh_domain_zone_record" "spf_ameliegraf_de" {
|
||||
@@ -121,17 +121,17 @@ resource "ovh_domain_zone_record" "dkim_google_ameliegraf_de" {
|
||||
|
||||
resource "ovh_domain_zone_record" "mx_record_graf_fam_de" {
|
||||
|
||||
zone = "graf-fam.de"
|
||||
zone = "graf-fam.de"
|
||||
fieldtype = "MX"
|
||||
ttl = 60
|
||||
target = "1 smtp.google.com."
|
||||
ttl = 60
|
||||
target = "1 smtp.google.com."
|
||||
}
|
||||
|
||||
resource "ovh_domain_zone_record" "google_domain_verification_graf_fam_de" {
|
||||
zone = "graf-fam.de"
|
||||
fieldtype = "TXT"
|
||||
ttl = 60
|
||||
target = "google-site-verification=DcG0tKp5YXxCRvw_Ekxa-3gbzdkZvxXUVkPs8aq9yQ4"
|
||||
zone = "graf-fam.de"
|
||||
fieldtype = "TXT"
|
||||
ttl = 60
|
||||
target = "google-site-verification=DcG0tKp5YXxCRvw_Ekxa-3gbzdkZvxXUVkPs8aq9yQ4"
|
||||
}
|
||||
|
||||
resource "ovh_domain_zone_record" "spf_graf_fam_de" {
|
||||
@@ -163,17 +163,17 @@ resource "ovh_domain_zone_record" "dkim_google_graf_fam_de" {
|
||||
|
||||
resource "ovh_domain_zone_record" "mx_record_krassescheisse_de" {
|
||||
|
||||
zone = "krassescheisse.de"
|
||||
zone = "krassescheisse.de"
|
||||
fieldtype = "MX"
|
||||
ttl = 60
|
||||
target = "1 smtp.google.com."
|
||||
ttl = 60
|
||||
target = "1 smtp.google.com."
|
||||
}
|
||||
|
||||
resource "ovh_domain_zone_record" "google_domain_verification_krassescheisse_de" {
|
||||
zone = "krassescheisse.de"
|
||||
fieldtype = "TXT"
|
||||
ttl = 60
|
||||
target = "google-site-verification=SHFDcMegmOoh9syhj7_xBH9dLQxA2NMnh_zvg4Ma0CM"
|
||||
zone = "krassescheisse.de"
|
||||
fieldtype = "TXT"
|
||||
ttl = 60
|
||||
target = "google-site-verification=SHFDcMegmOoh9syhj7_xBH9dLQxA2NMnh_zvg4Ma0CM"
|
||||
}
|
||||
|
||||
resource "ovh_domain_zone_record" "spf_krassescheisse_de" {
|
||||
@@ -204,17 +204,17 @@ resource "ovh_domain_zone_record" "dkim_google_krassescheisse_de" {
|
||||
|
||||
resource "ovh_domain_zone_record" "mx_record_grabengasse7_de" {
|
||||
|
||||
zone = "grabengasse7.de"
|
||||
zone = "grabengasse7.de"
|
||||
fieldtype = "MX"
|
||||
ttl = 60
|
||||
target = "1 smtp.google.com."
|
||||
ttl = 60
|
||||
target = "1 smtp.google.com."
|
||||
}
|
||||
|
||||
resource "ovh_domain_zone_record" "google_domain_verification_grabengasse7_de" {
|
||||
zone = "grabengasse7.de"
|
||||
fieldtype = "TXT"
|
||||
ttl = 60
|
||||
target = "google-site-verification=zwmmYhET0gyCJr_An22btaOVcpsE_nR2b1St0y4jn1A"
|
||||
zone = "grabengasse7.de"
|
||||
fieldtype = "TXT"
|
||||
ttl = 60
|
||||
target = "google-site-verification=zwmmYhET0gyCJr_An22btaOVcpsE_nR2b1St0y4jn1A"
|
||||
}
|
||||
|
||||
resource "ovh_domain_zone_record" "spf_grabengasse7_de" {
|
||||
|
||||
@@ -0,0 +1,514 @@
|
||||
/* ==========================================================================
|
||||
HAUMDAUCHER THEME FOR AUTHENTIK
|
||||
Wurst und Spezialitäten n.e.V.
|
||||
========================================================================== */
|
||||
|
||||
@import url('https://fonts.googleapis.com/css2?family=Outfit:wght@300;400;500;600;700;800;900&display=swap');
|
||||
|
||||
/* --- Global Brand Font (Safe for all pages) --- */
|
||||
:root {
|
||||
--hd-font: 'Outfit', -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;
|
||||
--pf-global--FontFamily--sans-serif: var(--hd-font);
|
||||
--pf-v5-global--FontFamily--sans-serif: var(--hd-font);
|
||||
}
|
||||
|
||||
/* ==========================================================================
|
||||
AUTHENTICATED INTERFACE POLISH (User Dashboard & Admin Console)
|
||||
Ensure brand logo is well proportioned and high-contrast in masthead
|
||||
========================================================================== */
|
||||
ak-interface-user .pf-c-brand img,
|
||||
ak-interface-admin .pf-c-brand img,
|
||||
.pf-c-page__header-brand img,
|
||||
.pf-v5-c-page__header-brand img {
|
||||
max-height: 38px !important;
|
||||
width: auto !important;
|
||||
}
|
||||
|
||||
[data-theme='dark'] ak-interface-user .pf-c-brand img,
|
||||
[data-theme='dark'] ak-interface-admin .pf-c-brand img,
|
||||
[data-theme='dark'] .pf-c-page__header-brand img,
|
||||
[data-theme='dark'] .pf-v5-c-page__header-brand img {
|
||||
filter: invert(1) hue-rotate(180deg);
|
||||
}
|
||||
|
||||
/* ==========================================================================
|
||||
LOGIN & AUTHENTICATION FLOW SCOPE
|
||||
All custom card styling, colors, and layout rules are strictly scoped
|
||||
to ak-flow-executor and .pf-c-login to avoid leaking into the dashboard!
|
||||
========================================================================== */
|
||||
|
||||
/* --- Flow Executor Variables & Overrides --- */
|
||||
ak-flow-executor,
|
||||
.pf-c-login,
|
||||
.pf-v5-c-login,
|
||||
ak-stage,
|
||||
.ak-stage {
|
||||
--hd-bg: #f4f5f8;
|
||||
--hd-card-bg: #ffffff;
|
||||
--hd-card-border: rgba(0, 0, 0, 0.08);
|
||||
--hd-text-main: #111111;
|
||||
--hd-text-muted: #555555;
|
||||
--hd-input-bg: #f9f9fb;
|
||||
--hd-input-border: #d0d5dd;
|
||||
--hd-btn-bg: #000000;
|
||||
--hd-btn-text: #ffffff;
|
||||
--hd-radius: 12px;
|
||||
--hd-card-radius: 22px;
|
||||
--hd-transition: all 0.2s ease-in-out;
|
||||
|
||||
/* Force PatternFly flow text & inputs to crisp black on the white card */
|
||||
--pf-global--FontFamily--sans-serif: var(--hd-font) !important;
|
||||
--pf-v5-global--FontFamily--sans-serif: var(--hd-font) !important;
|
||||
--pf-global--Color--100: #111111 !important;
|
||||
--pf-v5-global--Color--100: #111111 !important;
|
||||
--pf-global--Color--200: #222222 !important;
|
||||
--pf-v5-global--Color--200: #222222 !important;
|
||||
--pf-global--Color--300: #444444 !important;
|
||||
--pf-v5-global--Color--300: #444444 !important;
|
||||
--pf-global--Color--dark-100: #111111 !important;
|
||||
--pf-v5-global--Color--dark-100: #111111 !important;
|
||||
--pf-global--Color--light-100: #111111 !important;
|
||||
--pf-v5-global--Color--light-100: #111111 !important;
|
||||
--pf-global--primary-color--100: #000000 !important;
|
||||
--pf-v5-global--primary-color--100: #000000 !important;
|
||||
|
||||
/* Form & Label Variables */
|
||||
--pf-c-form__label--Color: #111111 !important;
|
||||
--pf-v5-c-form__label--Color: #111111 !important;
|
||||
--pf-c-form__label-text--Color: #111111 !important;
|
||||
--pf-v5-c-form__label-text--Color: #111111 !important;
|
||||
--pf-c-form-control--Color: #111111 !important;
|
||||
--pf-v5-c-form-control--Color: #111111 !important;
|
||||
--pf-c-form-control--placeholder--Color: #666666 !important;
|
||||
--pf-v5-c-form-control--placeholder--Color: #666666 !important;
|
||||
--pf-c-form-control--BackgroundColor: #f9f9fb !important;
|
||||
--pf-v5-c-form-control--BackgroundColor: #f9f9fb !important;
|
||||
--pf-c-form-control--BorderColor: #d0d5dd !important;
|
||||
--pf-v5-c-form-control--BorderColor: #d0d5dd !important;
|
||||
--pf-c-form__helper-text--Color: #555555 !important;
|
||||
--pf-v5-c-form__helper-text--Color: #555555 !important;
|
||||
}
|
||||
|
||||
/* --- Flow Executor Viewport Centering & Background --- */
|
||||
ak-flow-executor,
|
||||
.pf-c-login,
|
||||
.pf-v5-c-login {
|
||||
min-height: 100vh !important;
|
||||
min-height: 100dvh !important;
|
||||
display: flex !important;
|
||||
flex-direction: column !important;
|
||||
align-items: center !important;
|
||||
justify-content: center !important;
|
||||
background-color: #f4f5f8 !important;
|
||||
background-image: radial-gradient(circle at 50% 15%, rgba(0, 0, 0, 0.03) 0%, transparent 60%) !important;
|
||||
background-attachment: fixed !important;
|
||||
background-size: cover !important;
|
||||
padding: 32px 16px 48px 16px !important;
|
||||
box-sizing: border-box !important;
|
||||
position: relative !important;
|
||||
font-family: var(--hd-font) !important;
|
||||
color: #111111 !important;
|
||||
}
|
||||
|
||||
/* --- Centered Login Container --- */
|
||||
ak-flow-executor .pf-c-login__container,
|
||||
.pf-c-login .pf-c-login__container,
|
||||
.pf-v5-c-login .pf-v5-c-login__container {
|
||||
display: flex !important;
|
||||
flex-direction: column !important;
|
||||
align-items: center !important;
|
||||
justify-content: center !important;
|
||||
width: 100% !important;
|
||||
max-width: 420px !important;
|
||||
margin: auto !important;
|
||||
padding: 0 !important;
|
||||
box-sizing: border-box !important;
|
||||
}
|
||||
|
||||
/* --- Top Header & Logo Layout --- */
|
||||
ak-flow-executor .pf-c-login__header,
|
||||
.pf-c-login .pf-c-login__header,
|
||||
.pf-v5-c-login .pf-v5-c-login__header {
|
||||
display: flex !important;
|
||||
justify-content: center !important;
|
||||
align-items: center !important;
|
||||
width: 100% !important;
|
||||
margin-top: 0 !important;
|
||||
margin-bottom: 24px !important;
|
||||
padding: 0 !important;
|
||||
}
|
||||
|
||||
ak-flow-executor .pf-c-login__header ak-brand,
|
||||
ak-flow-executor .pf-c-login__header img,
|
||||
.pf-c-login .pf-c-login__header ak-brand,
|
||||
.pf-c-login .pf-c-login__header img,
|
||||
.pf-v5-c-login .pf-v5-c-login__header ak-brand,
|
||||
.pf-v5-c-login .pf-v5-c-login__header img {
|
||||
display: block !important;
|
||||
max-height: 85px !important;
|
||||
max-width: 240px !important;
|
||||
width: auto !important;
|
||||
margin: 0 auto !important;
|
||||
mix-blend-mode: multiply !important;
|
||||
filter: drop-shadow(0 2px 8px rgba(0, 0, 0, 0.08)) !important;
|
||||
transition: all 0.2s ease-in-out;
|
||||
}
|
||||
|
||||
/* --- Classic White Card --- */
|
||||
ak-flow-executor .pf-c-login__main,
|
||||
.pf-c-login .pf-c-login__main,
|
||||
.pf-v5-c-login .pf-v5-c-login__main,
|
||||
ak-flow-executor ak-stage,
|
||||
ak-flow-executor .ak-stage {
|
||||
background: #ffffff !important;
|
||||
border: 1px solid rgba(0, 0, 0, 0.08) !important;
|
||||
border-radius: 22px !important;
|
||||
box-shadow: 0 16px 48px rgba(0, 0, 0, 0.06), 0 1px 3px rgba(0, 0, 0, 0.04) !important;
|
||||
padding: 36px 32px 32px 32px !important;
|
||||
width: 100% !important;
|
||||
box-sizing: border-box !important;
|
||||
color: #111111 !important;
|
||||
}
|
||||
|
||||
/* --- Fully Hide Duplicate / Generic Flow Title --- */
|
||||
ak-flow-executor .pf-c-login__main-header-title,
|
||||
ak-flow-executor .pf-v5-c-login__main-header-title,
|
||||
ak-flow-executor .pf-c-title,
|
||||
ak-flow-executor .pf-v5-c-title,
|
||||
.pf-c-login .pf-c-login__main-header-title,
|
||||
.pf-v5-c-login .pf-v5-c-login__main-header-title {
|
||||
display: none !important;
|
||||
}
|
||||
|
||||
ak-flow-executor .pf-c-login__main-header,
|
||||
.pf-c-login .pf-c-login__main-header,
|
||||
.pf-v5-c-login .pf-v5-c-login__main-header {
|
||||
margin-bottom: 24px !important;
|
||||
padding: 0 !important;
|
||||
text-align: center !important;
|
||||
}
|
||||
|
||||
ak-flow-executor .pf-c-login__main-header-desc,
|
||||
.pf-c-login .pf-c-login__main-header-desc,
|
||||
.pf-v5-c-login .pf-v5-c-login__main-header-desc {
|
||||
font-family: var(--hd-font) !important;
|
||||
font-size: 0.95rem !important;
|
||||
line-height: 1.5 !important;
|
||||
margin: 0 !important;
|
||||
color: #555555 !important;
|
||||
text-align: center !important;
|
||||
}
|
||||
|
||||
ak-flow-executor .pf-c-login__main-header-desc strong,
|
||||
ak-flow-executor .pf-c-login__main-header-desc b,
|
||||
.pf-c-login .pf-c-login__main-header-desc strong,
|
||||
.pf-c-login .pf-c-login__main-header-desc b,
|
||||
.pf-v5-c-login .pf-v5-c-login__main-header-desc strong,
|
||||
.pf-v5-c-login .pf-v5-c-login__main-header-desc b {
|
||||
color: #111111 !important;
|
||||
font-weight: 700 !important;
|
||||
}
|
||||
|
||||
/* --- Form Field Groups --- */
|
||||
ak-flow-executor .pf-c-form__group,
|
||||
.pf-c-login .pf-c-form__group,
|
||||
.pf-v5-c-login .pf-v5-c-form__group {
|
||||
margin-bottom: 20px !important;
|
||||
}
|
||||
|
||||
/* --- LABELS & LABEL TEXT (High-Contrast Black inside login flow) --- */
|
||||
ak-flow-executor .pf-c-form__label,
|
||||
ak-flow-executor .pf-v5-c-form__label,
|
||||
ak-flow-executor .pf-c-form__label-text,
|
||||
ak-flow-executor .pf-v5-c-form__label-text,
|
||||
ak-flow-executor .pf-c-form__group-label,
|
||||
ak-flow-executor .pf-v5-c-form__group-label,
|
||||
ak-flow-executor label,
|
||||
ak-flow-executor label *,
|
||||
.pf-c-login .pf-c-form__label,
|
||||
.pf-c-login .pf-v5-c-form__label,
|
||||
.pf-c-login .pf-c-form__label-text,
|
||||
.pf-c-login .pf-v5-c-form__label-text,
|
||||
.pf-c-login label,
|
||||
.pf-c-login label *,
|
||||
.pf-v5-c-login label,
|
||||
.pf-v5-c-login label * {
|
||||
font-family: var(--hd-font) !important;
|
||||
font-weight: 600 !important;
|
||||
font-size: 0.9rem !important;
|
||||
color: #111111 !important;
|
||||
margin-bottom: 6px !important;
|
||||
display: inline-block !important;
|
||||
opacity: 1 !important;
|
||||
}
|
||||
|
||||
/* Required Asterisk */
|
||||
ak-flow-executor .pf-c-form__label-required,
|
||||
ak-flow-executor .pf-v5-c-form__label-required,
|
||||
.pf-c-login .pf-c-form__label-required,
|
||||
.pf-v5-c-login .pf-v5-c-form__label-required {
|
||||
color: #c9190b !important;
|
||||
margin-left: 4px !important;
|
||||
font-weight: 700 !important;
|
||||
}
|
||||
|
||||
/* --- INPUT FIELDS & TEXT (inside login flow) --- */
|
||||
ak-flow-executor .pf-c-form-control,
|
||||
ak-flow-executor .pf-v5-c-form-control,
|
||||
ak-flow-executor input[type="text"],
|
||||
ak-flow-executor input[type="password"],
|
||||
ak-flow-executor input[type="email"],
|
||||
ak-flow-executor input,
|
||||
.pf-c-login .pf-c-form-control,
|
||||
.pf-c-login .pf-v5-c-form-control,
|
||||
.pf-c-login input,
|
||||
.pf-v5-c-login input {
|
||||
font-family: var(--hd-font) !important;
|
||||
font-size: 0.98rem !important;
|
||||
border-radius: 12px !important;
|
||||
padding: 12px 14px !important;
|
||||
background-color: #f9f9fb !important;
|
||||
border: 1px solid #d0d5dd !important;
|
||||
color: #111111 !important;
|
||||
transition: all 0.2s ease-in-out !important;
|
||||
width: 100% !important;
|
||||
box-sizing: border-box !important;
|
||||
}
|
||||
|
||||
/* Input Placeholder */
|
||||
ak-flow-executor input::placeholder,
|
||||
.pf-c-login input::placeholder,
|
||||
.pf-v5-c-login input::placeholder {
|
||||
color: #666666 !important;
|
||||
font-style: normal !important;
|
||||
opacity: 1 !important;
|
||||
}
|
||||
|
||||
/* Focus State */
|
||||
ak-flow-executor input:focus,
|
||||
.pf-c-login input:focus,
|
||||
.pf-v5-c-login input:focus {
|
||||
outline: none !important;
|
||||
border-color: #000000 !important;
|
||||
box-shadow: 0 0 0 3px rgba(0, 0, 0, 0.12) !important;
|
||||
background-color: #ffffff !important;
|
||||
color: #111111 !important;
|
||||
}
|
||||
|
||||
/* Browser Autofill Fix (Prevent White on White) */
|
||||
ak-flow-executor input:-webkit-autofill,
|
||||
ak-flow-executor input:-webkit-autofill:hover,
|
||||
ak-flow-executor input:-webkit-autofill:focus,
|
||||
.pf-c-login input:-webkit-autofill,
|
||||
.pf-v5-c-login input:-webkit-autofill {
|
||||
-webkit-text-fill-color: #111111 !important;
|
||||
-webkit-box-shadow: 0 0 0 1000px #f9f9fb inset !important;
|
||||
box-shadow: 0 0 0 1000px #f9f9fb inset !important;
|
||||
transition: background-color 5000s ease-in-out 0s !important;
|
||||
}
|
||||
|
||||
/* --- Solid Black Submit Button (inside login flow) --- */
|
||||
ak-flow-executor button[type="submit"],
|
||||
ak-flow-executor .pf-c-button.pf-m-primary,
|
||||
ak-flow-executor .pf-v5-c-button.pf-m-primary,
|
||||
.pf-c-login button[type="submit"],
|
||||
.pf-c-login .pf-c-button.pf-m-primary,
|
||||
.pf-v5-c-login button[type="submit"],
|
||||
.pf-v5-c-login .pf-v5-c-button.pf-m-primary {
|
||||
font-family: var(--hd-font) !important;
|
||||
font-size: 1rem !important;
|
||||
font-weight: 700 !important;
|
||||
letter-spacing: 0.3px !important;
|
||||
border-radius: 12px !important;
|
||||
padding: 13px 20px !important;
|
||||
border: none !important;
|
||||
cursor: pointer !important;
|
||||
background: #000000 !important;
|
||||
color: #ffffff !important;
|
||||
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15) !important;
|
||||
transition: all 0.2s ease-in-out !important;
|
||||
width: 100% !important;
|
||||
margin-top: 16px !important;
|
||||
margin-bottom: 4px !important;
|
||||
display: flex !important;
|
||||
align-items: center !important;
|
||||
justify-content: center !important;
|
||||
}
|
||||
|
||||
ak-flow-executor button[type="submit"]:hover,
|
||||
.pf-c-login button[type="submit"]:hover,
|
||||
.pf-v5-c-login button[type="submit"]:hover {
|
||||
background: #222222 !important;
|
||||
color: #ffffff !important;
|
||||
transform: translateY(-1px) !important;
|
||||
box-shadow: 0 6px 16px rgba(0, 0, 0, 0.2) !important;
|
||||
}
|
||||
|
||||
ak-flow-executor button[type="submit"]:active,
|
||||
.pf-c-login button[type="submit"]:active,
|
||||
.pf-v5-c-login button[type="submit"]:active {
|
||||
transform: translateY(0) !important;
|
||||
}
|
||||
|
||||
/* Secondary Buttons (inside login flow) */
|
||||
ak-flow-executor .pf-c-button.pf-m-secondary,
|
||||
ak-flow-executor .pf-v5-c-button.pf-m-secondary,
|
||||
.pf-c-login .pf-c-button.pf-m-secondary,
|
||||
.pf-v5-c-login .pf-v5-c-button.pf-m-secondary {
|
||||
font-family: var(--hd-font) !important;
|
||||
font-weight: 600 !important;
|
||||
border-radius: 12px !important;
|
||||
padding: 11px 18px !important;
|
||||
border: 1px solid #d0d5dd !important;
|
||||
background: #ffffff !important;
|
||||
color: #111111 !important;
|
||||
transition: all 0.2s ease-in-out !important;
|
||||
}
|
||||
|
||||
ak-flow-executor .pf-c-button.pf-m-secondary:hover,
|
||||
.pf-c-login .pf-c-button.pf-m-secondary:hover,
|
||||
.pf-v5-c-login .pf-v5-c-button.pf-m-secondary:hover {
|
||||
background: #f4f5f7 !important;
|
||||
border-color: #000000 !important;
|
||||
}
|
||||
|
||||
/* --- Alerts & Messages (inside login flow) --- */
|
||||
ak-flow-executor .pf-c-alert,
|
||||
ak-flow-executor .pf-v5-c-alert,
|
||||
.pf-c-login .pf-c-alert,
|
||||
.pf-v5-c-login .pf-v5-c-alert {
|
||||
border-radius: 12px !important;
|
||||
margin-bottom: 16px !important;
|
||||
}
|
||||
|
||||
/* --- LANGUAGE BUTTON AT BOTTOM (inside login flow only) --- */
|
||||
ak-flow-executor ak-locale-select,
|
||||
ak-flow-executor [part="locale-select"],
|
||||
ak-flow-executor::part(locale-select),
|
||||
.pf-c-login ak-locale-select,
|
||||
.pf-v5-c-login ak-locale-select {
|
||||
position: fixed !important;
|
||||
inset-block-start: auto !important;
|
||||
inset-inline-start: auto !important;
|
||||
top: auto !important;
|
||||
left: auto !important;
|
||||
bottom: 14px !important;
|
||||
right: 18px !important;
|
||||
z-index: 999 !important;
|
||||
opacity: 0.65 !important;
|
||||
transition: opacity 0.2s ease, transform 0.2s ease !important;
|
||||
}
|
||||
|
||||
ak-flow-executor ak-locale-select:hover,
|
||||
.pf-c-login ak-locale-select:hover {
|
||||
opacity: 1 !important;
|
||||
transform: translateY(-1px) !important;
|
||||
}
|
||||
|
||||
ak-flow-executor ak-locale-select select,
|
||||
.pf-c-login ak-locale-select select {
|
||||
color: #111111 !important;
|
||||
background: transparent !important;
|
||||
cursor: pointer !important;
|
||||
}
|
||||
|
||||
ak-flow-executor ak-locale-select label,
|
||||
.pf-c-login ak-locale-select label {
|
||||
color: #111111 !important;
|
||||
cursor: pointer !important;
|
||||
}
|
||||
|
||||
/* --- Footer & Copyright (inside login flow) --- */
|
||||
ak-flow-executor ak-brand-links,
|
||||
ak-flow-executor .pf-c-login__footer,
|
||||
ak-flow-executor .pf-v5-c-login__footer,
|
||||
.pf-c-login .pf-c-login__footer,
|
||||
.pf-v5-c-login .pf-v5-c-login__footer {
|
||||
margin-top: 24px !important;
|
||||
margin-bottom: 0 !important;
|
||||
text-align: center !important;
|
||||
font-size: 0.82rem !important;
|
||||
color: #555555 !important;
|
||||
}
|
||||
|
||||
ak-flow-executor ak-brand-links a,
|
||||
ak-flow-executor .pf-c-login__footer a,
|
||||
.pf-c-login .pf-c-login__footer a,
|
||||
.pf-v5-c-login .pf-v5-c-login__footer a {
|
||||
color: #111111 !important;
|
||||
text-decoration: none !important;
|
||||
font-weight: 600 !important;
|
||||
}
|
||||
|
||||
ak-flow-executor ak-brand-links a:hover,
|
||||
ak-flow-executor .pf-c-login__footer a:hover,
|
||||
.pf-c-login .pf-c-login__footer a:hover,
|
||||
.pf-v5-c-login .pf-v5-c-login__footer a:hover {
|
||||
text-decoration: underline !important;
|
||||
}
|
||||
|
||||
/* --- Watermark (inside login flow container) --- */
|
||||
ak-flow-executor .pf-c-login__container::after,
|
||||
.pf-c-login .pf-c-login__container::after,
|
||||
.pf-v5-c-login .pf-v5-c-login__container::after {
|
||||
content: "HAUMDAUCHER • Wurst und Spezialitäten n.e.V.";
|
||||
display: block;
|
||||
margin-top: 28px;
|
||||
margin-bottom: 12px;
|
||||
font-size: 0.76rem;
|
||||
letter-spacing: 1.5px;
|
||||
text-transform: uppercase;
|
||||
font-weight: 600;
|
||||
color: #888888;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
/* --- Mobile Responsiveness (inside login flow) --- */
|
||||
@media (max-width: 480px) {
|
||||
ak-flow-executor,
|
||||
.pf-c-login,
|
||||
.pf-v5-c-login {
|
||||
padding: 24px 12px 48px 12px !important;
|
||||
}
|
||||
|
||||
ak-flow-executor .pf-c-login__container,
|
||||
.pf-c-login .pf-c-login__container,
|
||||
.pf-v5-c-login .pf-v5-c-login__container {
|
||||
padding: 0 !important;
|
||||
}
|
||||
|
||||
ak-flow-executor .pf-c-login__header,
|
||||
.pf-c-login .pf-c-login__header,
|
||||
.pf-v5-c-login .pf-v5-c-login__header {
|
||||
margin-bottom: 18px !important;
|
||||
}
|
||||
|
||||
ak-flow-executor .pf-c-login__main,
|
||||
.pf-c-login .pf-c-login__main,
|
||||
.pf-v5-c-login .pf-v5-c-login__main,
|
||||
ak-flow-executor ak-stage,
|
||||
ak-flow-executor .ak-stage {
|
||||
padding: 28px 20px 24px 20px !important;
|
||||
border-radius: 18px !important;
|
||||
}
|
||||
|
||||
ak-flow-executor .pf-c-login__header img,
|
||||
.pf-c-login .pf-c-login__header img,
|
||||
.pf-v5-c-login .pf-v5-c-login__header img {
|
||||
max-height: 72px !important;
|
||||
}
|
||||
|
||||
ak-flow-executor .pf-c-login__container::after,
|
||||
.pf-c-login .pf-c-login__container::after,
|
||||
.pf-v5-c-login .pf-v5-c-login__container::after {
|
||||
margin-top: 20px;
|
||||
margin-bottom: 8px;
|
||||
}
|
||||
|
||||
ak-flow-executor ak-locale-select,
|
||||
.pf-c-login ak-locale-select,
|
||||
.pf-v5-c-login ak-locale-select {
|
||||
bottom: 10px !important;
|
||||
right: 12px !important;
|
||||
}
|
||||
}
|
||||
+100
-80
@@ -6,7 +6,7 @@ provider "ovh" {
|
||||
}
|
||||
|
||||
locals {
|
||||
ttl = "60"
|
||||
ttl = "60"
|
||||
}
|
||||
|
||||
## old moritzgrafde
|
||||
@@ -15,65 +15,65 @@ locals {
|
||||
## => 91.121.64.43
|
||||
|
||||
variable "subdomains_moritzgraf" {
|
||||
default = ["auth","prometheus","alertmanager","chat","mqtt", "cloud",
|
||||
"monitoring","smtp","pop3","imap","jaeger","ldap","code","hub",
|
||||
"grafana","phpmyadmin","webapp","kc","phppgadmin","www","rstudio","code" ]
|
||||
default = ["auth", "prometheus", "alertmanager", "chat", "mqtt", "cloud",
|
||||
"monitoring", "smtp", "pop3", "imap", "jaeger", "ldap", "code", "hub",
|
||||
"grafana", "phpmyadmin", "webapp", "kc", "phppgadmin", "www", "rstudio", "code"]
|
||||
}
|
||||
|
||||
resource "ovh_domain_zone_record" "moritzgraf_subdomains" {
|
||||
for_each = toset( var.subdomains_moritzgraf )
|
||||
zone = "moritzgraf.de"
|
||||
subdomain = each.key
|
||||
fieldtype = "CNAME"
|
||||
ttl = local.ttl
|
||||
target = "moritzgraf.de."
|
||||
for_each = toset(var.subdomains_moritzgraf)
|
||||
zone = "moritzgraf.de"
|
||||
subdomain = each.key
|
||||
fieldtype = "CNAME"
|
||||
ttl = local.ttl
|
||||
target = "moritzgraf.de."
|
||||
}
|
||||
|
||||
|
||||
## new haumdaucher k8s
|
||||
|
||||
variable "subdomains_moritzgraf_k8s" {
|
||||
default = ["corona","corona-api","tt-rss","git" ]
|
||||
default = ["corona", "corona-api", "tt-rss", "git"]
|
||||
}
|
||||
|
||||
resource "ovh_domain_zone_record" "moritzgraf_subdomains_k8s" {
|
||||
for_each = toset( var.subdomains_moritzgraf_k8s )
|
||||
zone = "moritzgraf.de"
|
||||
subdomain = each.key
|
||||
fieldtype = "CNAME"
|
||||
ttl = local.ttl
|
||||
target = "haumdaucher.de."
|
||||
for_each = toset(var.subdomains_moritzgraf_k8s)
|
||||
zone = "moritzgraf.de"
|
||||
subdomain = each.key
|
||||
fieldtype = "CNAME"
|
||||
ttl = local.ttl
|
||||
target = "haumdaucher.de."
|
||||
}
|
||||
|
||||
# Kochen
|
||||
resource "ovh_domain_zone_record" "kochen_haumdaucher" {
|
||||
zone = "haumdaucher.de"
|
||||
subdomain = "kochen"
|
||||
fieldtype = "CNAME"
|
||||
ttl = local.ttl
|
||||
target = "haumdaucher-datalab.github.io."
|
||||
zone = "haumdaucher.de"
|
||||
subdomain = "kochen"
|
||||
fieldtype = "CNAME"
|
||||
ttl = local.ttl
|
||||
target = "haumdaucher-datalab.github.io."
|
||||
}
|
||||
|
||||
## nodes
|
||||
|
||||
resource "ovh_domain_zone_record" "one" {
|
||||
zone = "haumdaucher.de"
|
||||
subdomain = "one"
|
||||
fieldtype = "A"
|
||||
ttl = local.ttl
|
||||
#target = "91.121.84.190"
|
||||
target = "136.243.23.215"
|
||||
zone = "haumdaucher.de"
|
||||
subdomain = "one"
|
||||
fieldtype = "A"
|
||||
ttl = local.ttl
|
||||
#target = "91.121.84.190"
|
||||
target = "136.243.23.215"
|
||||
}
|
||||
|
||||
## krassescheisse
|
||||
|
||||
resource "ovh_domain_zone_record" "krassescheisse_subdomains" {
|
||||
for_each = toset( var.subdomains_moritzgraf )
|
||||
zone = "krassescheisse.de"
|
||||
subdomain = each.key
|
||||
fieldtype = "CNAME"
|
||||
ttl = local.ttl
|
||||
target = "krassescheisse.de."
|
||||
for_each = toset(var.subdomains_moritzgraf)
|
||||
zone = "krassescheisse.de"
|
||||
subdomain = each.key
|
||||
fieldtype = "CNAME"
|
||||
ttl = local.ttl
|
||||
target = "krassescheisse.de."
|
||||
}
|
||||
|
||||
|
||||
@@ -92,36 +92,36 @@ variable "subdomains_haumdaucher" {
|
||||
|
||||
# ## graf.me -> problems with domain
|
||||
variable "domains" {
|
||||
default = [ "moritzgraf.de"
|
||||
,"graf-fam.de"
|
||||
,"krassescheisse.de"]
|
||||
default = ["moritzgraf.de"
|
||||
, "graf-fam.de"
|
||||
, "krassescheisse.de"]
|
||||
}
|
||||
|
||||
resource "ovh_domain_zone_record" "haumdaucher_domain" {
|
||||
zone = "haumdaucher.de"
|
||||
subdomain = ""
|
||||
fieldtype = "A"
|
||||
ttl = local.ttl
|
||||
#target = "91.121.84.190"
|
||||
target = "136.243.23.215"
|
||||
zone = "haumdaucher.de"
|
||||
subdomain = ""
|
||||
fieldtype = "A"
|
||||
ttl = local.ttl
|
||||
#target = "91.121.84.190"
|
||||
target = "136.243.23.215"
|
||||
}
|
||||
|
||||
resource "ovh_domain_zone_record" "haumdaucher_wildcard_domain" {
|
||||
zone = "haumdaucher.de"
|
||||
subdomain = "*"
|
||||
fieldtype = "A"
|
||||
ttl = local.ttl
|
||||
#target = "91.121.84.190"
|
||||
target = "136.243.23.215"
|
||||
zone = "haumdaucher.de"
|
||||
subdomain = "*"
|
||||
fieldtype = "A"
|
||||
ttl = local.ttl
|
||||
#target = "91.121.84.190"
|
||||
target = "136.243.23.215"
|
||||
}
|
||||
|
||||
resource "ovh_domain_zone_record" "moritzgraf_wildcard_domain" {
|
||||
zone = "moritzgraf.de"
|
||||
subdomain = "*"
|
||||
fieldtype = "A"
|
||||
ttl = local.ttl
|
||||
#target = "91.121.84.190"
|
||||
target = "136.243.23.215"
|
||||
zone = "moritzgraf.de"
|
||||
subdomain = "*"
|
||||
fieldtype = "A"
|
||||
ttl = local.ttl
|
||||
#target = "91.121.84.190"
|
||||
target = "136.243.23.215"
|
||||
}
|
||||
|
||||
######################################
|
||||
@@ -130,40 +130,60 @@ resource "ovh_domain_zone_record" "moritzgraf_wildcard_domain" {
|
||||
locals {
|
||||
|
||||
# adobe
|
||||
first = "151.101.128.119"
|
||||
first = "151.101.128.119"
|
||||
second = "151.101.192.119"
|
||||
}
|
||||
|
||||
resource "ovh_domain_zone_record" "ameliegraf_de_first" {
|
||||
zone = "ameliegraf.de"
|
||||
subdomain = ""
|
||||
fieldtype = "A"
|
||||
ttl = local.ttl
|
||||
#target = "91.121.84.190"
|
||||
target = local.first
|
||||
zone = "ameliegraf.de"
|
||||
subdomain = ""
|
||||
fieldtype = "A"
|
||||
ttl = local.ttl
|
||||
#target = "91.121.84.190"
|
||||
target = local.first
|
||||
}
|
||||
resource "ovh_domain_zone_record" "ameliegraf_de_second" {
|
||||
zone = "ameliegraf.de"
|
||||
subdomain = ""
|
||||
fieldtype = "A"
|
||||
ttl = local.ttl
|
||||
#target = "91.121.84.190"
|
||||
target = local.second
|
||||
zone = "ameliegraf.de"
|
||||
subdomain = ""
|
||||
fieldtype = "A"
|
||||
ttl = local.ttl
|
||||
#target = "91.121.84.190"
|
||||
target = local.second
|
||||
}
|
||||
|
||||
resource "ovh_domain_zone_record" "wildcard_ameliegraf_de_first" {
|
||||
zone = "ameliegraf.de"
|
||||
subdomain = "*"
|
||||
fieldtype = "A"
|
||||
ttl = local.ttl
|
||||
#target = "91.121.84.190"
|
||||
target = local.first
|
||||
zone = "ameliegraf.de"
|
||||
subdomain = "*"
|
||||
fieldtype = "A"
|
||||
ttl = local.ttl
|
||||
#target = "91.121.84.190"
|
||||
target = local.first
|
||||
}
|
||||
resource "ovh_domain_zone_record" "wildcard_ameliegraf_de_second" {
|
||||
zone = "ameliegraf.de"
|
||||
subdomain = "*"
|
||||
fieldtype = "A"
|
||||
ttl = local.ttl
|
||||
#target = "91.121.84.190"
|
||||
target = local.second
|
||||
zone = "ameliegraf.de"
|
||||
subdomain = "*"
|
||||
fieldtype = "A"
|
||||
ttl = local.ttl
|
||||
#target = "91.121.84.190"
|
||||
target = local.second
|
||||
}
|
||||
|
||||
######################################
|
||||
## grabengasse7.de
|
||||
|
||||
resource "ovh_domain_zone_record" "grabengasse7_de_domain" {
|
||||
zone = "grabengasse7.de"
|
||||
subdomain = ""
|
||||
fieldtype = "A"
|
||||
ttl = local.ttl
|
||||
target = "136.243.23.215"
|
||||
}
|
||||
|
||||
resource "ovh_domain_zone_record" "grabengasse7_de_wildcard" {
|
||||
zone = "grabengasse7.de"
|
||||
subdomain = "*"
|
||||
fieldtype = "A"
|
||||
ttl = local.ttl
|
||||
target = "136.243.23.215"
|
||||
}
|
||||
|
||||
|
||||
+2945
-1
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -11,6 +11,10 @@ terraform {
|
||||
source = "hashicorp/local"
|
||||
version = "~> 2.0"
|
||||
}
|
||||
authentik = {
|
||||
source = "goauthentik/authentik"
|
||||
version = ">= 2024.12"
|
||||
}
|
||||
}
|
||||
required_version = ">= 0.13"
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user