cf-moodle/main.tf
lukas.weberruss 3365312c32
Some checks are pending
Deploy Moodle to STACKIT Cloud Foundry / deploy (push) Waiting to run
Add main.tf
2025-07-23 08:38:19 +00:00

104 lines
No EOL
3.3 KiB
HCL

# =========== STACKIT Ressourcen ===========
data "stackit_dns_zone" "zone" {
project_id = var.stackit_project_id
name = trimsuffix(var.moodle_domain, ".")
}
resource "stackit_dns_record_set" "moodle_cname" {
project_id = var.stackit_project_id
zone_id = data.stackit_dns_zone.zone.id
name = var.moodle_domain
type = "CNAME"
ttl = 300
records = ["console.apps.01.cf.eu01.stackit.cloud."]
}
resource "stackit_object_storage_bucket" "moodle_bucket" {
project_id = var.stackit_project_id
name = var.s3_bucket_name
}
resource "stackit_object_storage_credential" "s3_credentials" {
project_id = var.stackit_project_id
}
# =========== Cloud Foundry Ressourcen ===========
resource "cloudfoundry_org" "org" {
name = var.cf_org_name
}
resource "cloudfoundry_space" "space" {
name = var.cf_space_name
org = cloudfoundry_org.org.id
}
data "cloudfoundry_service" "mariadb" {
name = "appcloud-mariadb1011"
}
resource "cloudfoundry_service_instance" "db" {
name = "moodle-db"
space = cloudfoundry_space.space.id
service_plan = data.cloudfoundry_service.mariadb.service_plans["mariadb-1.4.10-single"]
}
data "cloudfoundry_service" "redis" {
name = "appcloud-redis7"
}
resource "cloudfoundry_service_instance" "redis_cache" {
name = "moodle-redis"
space = cloudfoundry_space.space.id
service_plan = data.cloudfoundry_service.redis.service_plans["redis-4.16.100-replica"]
}
resource "cloudfoundry_user_provided_service_instance" "s3_cups" {
name = "moodle-s3-credentials"
space = cloudfoundry_space.space.id
credentials = jsonencode({
access_key = stackit_object_storage_credential.s3_credentials.access_key
secret_key = stackit_object_storage_credential.s3_credentials.secret_key
bucket = stackit_object_storage_bucket.moodle_bucket.name
endpoint = "https://object.storage.eu01.onstackit.cloud/"
})
}
# =========== Dynamische config.php Erstellung ===========
resource "local_file" "config_php" {
content = templatefile("${path.module}/config.php.tpl", {
use_cdn = var.use_cdn
wwwroot = var.use_cdn ? "https://${var.moodle_domain}" : "https://${var.moodle_internal_host}.${trimsuffix(var.moodle_domain, ".")}"
db_service_name = data.cloudfoundry_service.mariadb.name
redis_service_name = data.cloudfoundry_service.redis.name
s3_cups_name = cloudfoundry_user_provided_service_instance.s3_cups.name
cdn_proxy_ip = var.cdn_proxy_ip
moodle_domain = var.moodle_domain
})
filename = "${path.module}/moodle/config.php"
}
# =========== Cloud Foundry Applikation (cf push) ===========
resource "cloudfoundry_app" "moodle_app" {
name = "moodle"
space = cloudfoundry_space.space.id
path = "./moodle"
memory = "2G"
disk_quota = "2G"
instances = 2
buildpack = "https://github.com/cloudfoundry/php-buildpack.git"
service_binding { service_instance = cloudfoundry_service_instance.db.id }
service_binding { service_instance = cloudfoundry_service_instance.redis_cache.id }
service_binding { service_instance = cloudfoundry_user_provided_service_instance.s3_cups.id }
routes {
route = "${var.moodle_internal_host}.${trimsuffix(var.moodle_domain, ".")}"
}
routes {
route = var.moodle_domain
}
depends_on = [
local_file.config_php
]
}