From 3365312c32ee804abbb1aca3d897f581c8ecb0bb Mon Sep 17 00:00:00 2001 From: "lukas.weberruss" Date: Wed, 23 Jul 2025 08:38:19 +0000 Subject: [PATCH] Add main.tf --- main.tf | 104 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 104 insertions(+) create mode 100644 main.tf diff --git a/main.tf b/main.tf new file mode 100644 index 0000000..b90fee0 --- /dev/null +++ b/main.tf @@ -0,0 +1,104 @@ +# =========== 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 + ] +} \ No newline at end of file