-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Your Name
committed
Aug 27, 2025
1 parent
555ac1c
commit 4f26e92
Showing
9 changed files
with
490 additions
and
189 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -1,166 +1,166 @@ | ||
| locals { | ||
| common_vars = merge({ | ||
| organization = "census:ocio:csvd" | ||
| project_name = "csvd_platformbaseline" | ||
| project_number = "fs0000000078" | ||
| project_role = "csvd_platformbaseline_app" | ||
| organization = "census:ocio:csvd" | ||
| project_name = "csvd_platformbaseline" | ||
| project_number = "fs0000000078" | ||
| project_role = "csvd_platformbaseline_app" | ||
| state_bucket_prefix = "inf-tfstate" | ||
| state_table_name = "tf_remote_state" | ||
| route53_endpoints = {} | ||
| state_table_name = "tf_remote_state" | ||
| route53_endpoints = {} | ||
| }, var.common_variables) | ||
|
|
||
| # First define base namespaces without dependencies | ||
| base_namespaces = { | ||
| cert-manager = "kube-system" | ||
| karpenter = "karpenter" | ||
| cert-manager = "kube-system" | ||
| karpenter = "karpenter" | ||
| metrics-server = "kube-system" | ||
| postgresql = "kube-system" | ||
| keycloak = "keycloak" | ||
| gogatekeeper = "kube-system" | ||
| istio = "istio-system" | ||
| kiali = "istio-system" | ||
| postgresql = "kube-system" | ||
| keycloak = "keycloak" | ||
| gogatekeeper = "kube-system" | ||
| istio = "istio-system" | ||
| kiali = "istio-system" | ||
| } | ||
|
|
||
| # Then merge with telemetry namespaces | ||
| all_namespaces = merge( | ||
| local.base_namespaces, | ||
| { | ||
| grafana = var.namespaces.telemetry_namespace | ||
| grafana = var.namespaces.telemetry_namespace | ||
| k8s-dashboard = var.namespaces.telemetry_namespace | ||
| loki = var.namespaces.telemetry_namespace | ||
| otel = var.namespaces.telemetry_namespace | ||
| prometheus = var.namespaces.telemetry_namespace | ||
| tempo = var.namespaces.telemetry_namespace | ||
| loki = var.namespaces.telemetry_namespace | ||
| otel = var.namespaces.telemetry_namespace | ||
| prometheus = var.namespaces.telemetry_namespace | ||
| tempo = var.namespaces.telemetry_namespace | ||
| }, | ||
| var.namespaces.custom_namespaces | ||
| ) | ||
|
|
||
| namespaces = { | ||
| operator_namespace = var.namespaces.operator_namespace | ||
| operator_namespace = var.namespaces.operator_namespace | ||
| telemetry_namespace = var.namespaces.telemetry_namespace | ||
| namespaces = local.all_namespaces | ||
| namespaces = local.all_namespaces | ||
| } | ||
|
|
||
| default_versions = { | ||
| cluster_version = var.versions.cluster_version | ||
| cluster_version = var.versions.cluster_version | ||
| custom_service_eks_account = var.versions.release_version | ||
| eks_module_version = var.versions.eks_module_version | ||
| istio_ingress_version = var.versions.release_version | ||
| release_version = var.versions.release_version | ||
| eks_module_version = var.versions.eks_module_version | ||
| istio_ingress_version = var.versions.release_version | ||
| release_version = var.versions.release_version | ||
|
|
||
| # Provider versions | ||
| aws_version = var.versions.aws_version | ||
| helm_version = var.versions.helm_version | ||
| aws_version = var.versions.aws_version | ||
| helm_version = var.versions.helm_version | ||
| kubernetes_version = var.versions.kubernetes_version | ||
| null_version = var.versions.null_version | ||
| random_version = var.versions.random_version | ||
| template_version = var.versions.template_version | ||
| tf_version = var.versions.tf_version | ||
| null_version = var.versions.null_version | ||
| random_version = var.versions.random_version | ||
| template_version = var.versions.template_version | ||
| tf_version = var.versions.tf_version | ||
|
|
||
| # Component versions | ||
| cert_manager_version = var.versions.cert_manager.version | ||
| cert_manager_version = var.versions.cert_manager.version | ||
| cert_manager_helm_chart = var.versions.cert_manager.chart_version | ||
| cluster_issuer_name = var.versions.cert_manager.cluster_issuer_name | ||
| cluster_issuer_name = var.versions.cert_manager.cluster_issuer_name | ||
|
|
||
| gogatekeeper_tag = var.versions.gogatekeeper.tag | ||
| gogatekeeper_tag = var.versions.gogatekeeper.tag | ||
| gogatekeeper_chart_version = var.versions.gogatekeeper.chart_version | ||
|
|
||
| grafana_hostname = var.versions.grafana.hostname | ||
| grafana_hostname = var.versions.grafana.hostname | ||
| grafana_operator_chart_version = var.versions.grafana.operator_chart_version | ||
| grafana_operator_tag = var.versions.grafana.operator_tag | ||
| grafana_tag = var.versions.grafana.tag | ||
| os_shell_image_tag = var.versions.grafana.os_shell_image_tag | ||
| grafana_operator_tag = var.versions.grafana.operator_tag | ||
| grafana_tag = var.versions.grafana.tag | ||
| os_shell_image_tag = var.versions.grafana.os_shell_image_tag | ||
|
|
||
| istio_version = var.versions.istio.version | ||
| istio_version = var.versions.istio.version | ||
| istio_namespace = var.versions.istio.namespace | ||
|
|
||
| dashboard_hostname = var.versions.k8s_dashboard.hostname | ||
| dashboard_hostname = var.versions.k8s_dashboard.hostname | ||
| k8s_dashboard_metrics_scraper = var.versions.k8s_dashboard.metrics_scraper | ||
| k8s_dashboard_version = var.versions.k8s_dashboard.version | ||
| k8s_dashboard_version = var.versions.k8s_dashboard.version | ||
|
|
||
| karpenter_helm_chart = var.versions.karpenter.helm_chart | ||
| karpenter_tag = var.versions.karpenter.tag | ||
| karpenter_tag = var.versions.karpenter.tag | ||
|
|
||
| keycloak_chart_version = var.versions.keycloak.chart_version | ||
| keycloak_tag = var.versions.keycloak.tag | ||
| keycloak_hostname = var.versions.keycloak.hostname | ||
| keycloak_database = var.versions.keycloak.database | ||
| keycloak_username = var.versions.keycloak.username | ||
| keycloak_password = var.versions.keycloak.password | ||
| postgresql_tag = var.versions.keycloak.postgresql_tag | ||
|
|
||
| kiali_operator_version = var.versions.kiali.operator_version | ||
| keycloak_tag = var.versions.keycloak.tag | ||
| keycloak_hostname = var.versions.keycloak.hostname | ||
| keycloak_database = var.versions.keycloak.database | ||
| keycloak_username = var.versions.keycloak.username | ||
| keycloak_password = var.versions.keycloak.password | ||
| postgresql_tag = var.versions.keycloak.postgresql_tag | ||
|
|
||
| kiali_operator_version = var.versions.kiali.operator_version | ||
| kiali_application_version = "v${var.versions.kiali.operator_version}" | ||
|
|
||
| loki_chart_version = var.versions.loki.chart_version | ||
| loki_tag = var.versions.loki.tag | ||
| loki_chart_version = var.versions.loki.chart_version | ||
| loki_tag = var.versions.loki.tag | ||
| enterprise_logs_provisioner_tag = var.versions.loki.enterprise_logs_provisioner_tag | ||
| gateway_tag = var.versions.loki.gateway_tag | ||
| memcached_tag = var.versions.loki.memcached_tag | ||
| exporter_tag = var.versions.loki.exporter_tag | ||
| sidecar_tag = var.versions.loki.sidecar_tag | ||
| gateway_tag = var.versions.loki.gateway_tag | ||
| memcached_tag = var.versions.loki.memcached_tag | ||
| exporter_tag = var.versions.loki.exporter_tag | ||
| sidecar_tag = var.versions.loki.sidecar_tag | ||
|
|
||
| metrics_server_helm_chart = var.versions.metrics_server.helm_chart | ||
| metrics_server_tag = var.versions.metrics_server.tag | ||
| metrics_server_tag = var.versions.metrics_server.tag | ||
|
|
||
| prometheus_chart_version = var.versions.prometheus.chart_version | ||
| prometheus_server_tag = var.versions.prometheus.server_tag | ||
| prometheus_chart_version = var.versions.prometheus.chart_version | ||
| prometheus_server_tag = var.versions.prometheus.server_tag | ||
| prometheus_config_reloader_tag = var.versions.prometheus.config_reloader_tag | ||
| alertmanager_tag = var.versions.prometheus.alertmanager_tag | ||
| kube_state_metrics_tag = var.versions.prometheus.kube_state_metrics_tag | ||
| node_exporter_tag = var.versions.prometheus.node_exporter_tag | ||
| pushgateway_tag = var.versions.prometheus.pushgateway_tag | ||
| alertmanager_tag = var.versions.prometheus.alertmanager_tag | ||
| kube_state_metrics_tag = var.versions.prometheus.kube_state_metrics_tag | ||
| node_exporter_tag = var.versions.prometheus.node_exporter_tag | ||
| pushgateway_tag = var.versions.prometheus.pushgateway_tag | ||
|
|
||
| tempo_chart_version = var.versions.tempo.chart_version | ||
| tempo_tag = var.versions.tempo.tag | ||
| tempo_tag = var.versions.tempo.tag | ||
|
|
||
| # Add namespace configurations | ||
| operator_namespace = var.namespaces.operator_namespace | ||
| operator_namespace = var.namespaces.operator_namespace | ||
| telemetry_namespace = var.namespaces.telemetry_namespace | ||
| namespaces = local.all_namespaces | ||
| namespaces = local.all_namespaces | ||
| } | ||
|
|
||
| config_json = jsonencode({ | ||
| environment = var.environment | ||
| region = var.region | ||
| cluster_dir = "platform-cluster" | ||
| environment = var.environment | ||
| region = var.region | ||
| cluster_dir = "platform-cluster" | ||
| enable_all_modules = var.enable_all_modules | ||
| account = { | ||
| account_name = var.cluster_config.account_name | ||
| aws_account_id = var.cluster_config.aws_account_id | ||
| aws_profile = var.cluster_config.aws_profile | ||
| account_name = var.cluster_config.account_name | ||
| aws_account_id = var.cluster_config.aws_account_id | ||
| aws_profile = var.cluster_config.aws_profile | ||
| environment_abbr = var.cluster_config.environment_abbr | ||
| } | ||
| vpc = { | ||
| vpc_name = var.cluster_config.vpc_name | ||
| vpc_name = var.cluster_config.vpc_name | ||
| vpc_domain_name = var.cluster_config.vpc_domain_name | ||
| } | ||
| cluster = { | ||
| cluster_name = var.cluster_config.cluster_name | ||
| cluster_mailing_list = var.cluster_config.cluster_mailing_list | ||
| eks_instance_disk_size = var.cluster_config.eks_instance_disk_size | ||
| eks_ng_desired_size = var.cluster_config.eks_ng_desired_size | ||
| eks_ng_max_size = var.cluster_config.eks_ng_max_size | ||
| eks_ng_min_size = var.cluster_config.eks_ng_min_size | ||
| cluster_name = var.cluster_config.cluster_name | ||
| cluster_mailing_list = var.cluster_config.cluster_mailing_list | ||
| eks_instance_disk_size = var.cluster_config.eks_instance_disk_size | ||
| eks_ng_desired_size = var.cluster_config.eks_ng_desired_size | ||
| eks_ng_max_size = var.cluster_config.eks_ng_max_size | ||
| eks_ng_min_size = var.cluster_config.eks_ng_min_size | ||
| enable_cluster_creator_admin_permissions = var.cluster_config.enable_cluster_creator_admin_permissions | ||
| tags = var.cluster_config.tags | ||
| tags = var.cluster_config.tags | ||
| } | ||
| modules = var.enable_modules | ||
| }) | ||
|
|
||
| managed_extra_files = concat([ | ||
| { | ||
| path = "config.json" | ||
| path = "config.json" | ||
| content = local.config_json | ||
| }, | ||
| { | ||
| path = "_envcommon/default-versions.hcl" | ||
| path = "_envcommon/default-versions.hcl" | ||
| content = templatefile("${path.module}/templates/default-versions.hcl", local.default_versions) | ||
| }, | ||
| { | ||
| path = "_envcommon/common-variables.hcl" | ||
| path = "_envcommon/common-variables.hcl" | ||
| content = templatefile("${path.module}/templates/common-variables.hcl", local.common_vars) | ||
| } | ||
| ], | ||
| ], | ||
| var.github_actions_workflows) | ||
| } |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -1,44 +1,79 @@ | ||
| locals { | ||
| # Render the HCL files from templates | ||
| rendered_files = { | ||
| "root.hcl" : templatefile("${path.module}/templates/root.hcl.tf.tpl", { | ||
| environment = var.environment | ||
| }), | ||
| "${var.environment}/account.hcl" : templatefile("${path.module}/templates/account.hcl.tf.tpl", { | ||
| account_name = var.account_config.account_name, | ||
| aws_account_id = var.account_config.aws_account_id, | ||
| environment = var.environment, | ||
| environment_abbr = var.account_config.environment_abbr | ||
| }), | ||
| "${var.environment}/${var.region}/region.hcl" : templatefile("${path.module}/templates/region.hcl.tf.tpl", { | ||
| environment = var.environment, | ||
| aws_region = var.region | ||
| }), | ||
| "${var.environment}/${var.region}/vpc/vpc.hcl" : templatefile("${path.module}/templates/vpc.hcl.tf.tpl", { | ||
| environment = var.environment, | ||
| aws_region = var.region, | ||
| vpc_name = var.vpc_config.vpc_name, | ||
| vpc_domain_name = var.vpc_config.vpc_domain_name | ||
| }), | ||
| "${var.environment}/${var.region}/vpc/${var.cluster_config.cluster_name}/cluster.hcl" : templatefile("${path.module}/templates/cluster.hcl.tf.tpl", { | ||
| cluster_name = var.cluster_config.cluster_name, | ||
| cluster_mailing_list = var.cluster_config.cluster_mailing_list, | ||
| eks_instance_disk_size = var.cluster_config.eks_instance_disk_size, | ||
| eks_ng_desired_size = var.cluster_config.eks_ng_desired_size, | ||
| eks_ng_max_size = var.cluster_config.eks_ng_max_size, | ||
| eks_ng_min_size = var.cluster_config.eks_ng_min_size, | ||
| organization = var.cluster_config.organization, | ||
| finops_project_name = var.cluster_config.finops_project_name, | ||
| finops_project_number = var.cluster_config.finops_project_number, | ||
| finops_project_role = var.cluster_config.finops_project_role, | ||
| tags = var.cluster_config.tags, | ||
| module_enablement_overrides = var.cluster_config.module_enablement_overrides | ||
| }) | ||
| } | ||
| } | ||
|
|
||
| module "github_repo" { | ||
| source = "HappyPathway/repo/github" | ||
| source = "github.com/HappyPathway/terraform-github-repo" | ||
|
|
||
| name = var.name | ||
| repo_org = var.organization | ||
| name = var.repository_name | ||
| repo_org = var.organization | ||
| github_repo_description = "EKS Cluster Configuration for ${var.cluster_config.cluster_name}" | ||
| github_repo_topics = ["eks", "kubernetes", "terraform", "infrastructure"] | ||
|
|
||
| template_repo = "template-eks-cluster" | ||
| template_repo_org = var.template_repo_org | ||
|
|
||
| github_is_private = true | ||
| github_has_issues = true | ||
| github_has_wiki = true | ||
| github_has_projects = true | ||
|
|
||
| managed_extra_files = concat( | ||
| local.managed_extra_files, | ||
| var.managed_extra_files | ||
| ) | ||
| extra_files = var.extra_files | ||
| } | ||
| github_repo_topics = ["eks", "kubernetes", "terraform", "infrastructure"] | ||
|
|
||
| resource "null_resource" "trigger_workflow" { | ||
| triggers = { | ||
| github_repo_name = module.github_repo.full_name | ||
| template = { | ||
| owner = var.repository_template_owner | ||
| repository = var.repository_template | ||
| } | ||
|
|
||
| provisioner "local-exec" { | ||
| command = "python3 scripts/trigger_workflow.py ${module.github_repo.full_name} cluster-plan '{\"environment\":\"${var.environment}\",\"region\":\"${var.region}\",\"cluster_dir\":\"${var.cluster_config.cluster_name}\",\"auto_approve\":true}'" | ||
| } | ||
| github_is_private = true | ||
| github_has_issues = true | ||
| github_has_wiki = true | ||
| github_has_projects = true | ||
|
|
||
| depends_on = [module.github_repo] | ||
| files = [ | ||
| for path, content in local.rendered_files : { | ||
| path = path | ||
| content = content | ||
| } | ||
| ] | ||
|
|
||
| teams = var.repository_teams | ||
| } | ||
|
|
||
| # The EKS deployment logic will go here, and will be skipped if create_repository is true. | ||
| # For now, we are just implementing the repository creation part. | ||
|
|
||
| output "repository_url" { | ||
| description = "URL of the created repository" | ||
| value = module.github_repo.html_url | ||
| value = module.github_repo.html_url | ||
| } | ||
|
|
||
| output "ssh_clone_url" { | ||
| description = "SSH clone URL of the repository" | ||
| value = module.github_repo.ssh_clone_url | ||
| value = module.github_repo.ssh_clone_url | ||
| } |
Oops, something went wrong.