# =========== 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 ] }