Skip to content

Commit

Permalink
initi
Browse files Browse the repository at this point in the history
  • Loading branch information
Your Name committed Aug 27, 2025
1 parent 555ac1c commit 4f26e92
Show file tree
Hide file tree
Showing 9 changed files with 490 additions and 189 deletions.
14 changes: 7 additions & 7 deletions examples/basic/main.tf
Original file line number Diff line number Diff line change
Expand Up @@ -16,13 +16,13 @@ module "eks_deployment" {
github_server_url = "https://github.e.it.census.gov"

cluster_config = {
cluster_name = "dev-eks-01"
account_name = "dev-account"
aws_account_id = "123456789012"
aws_profile = "dev-profile"
cluster_name = "dev-eks-01"
account_name = "dev-account"
aws_account_id = "123456789012"
aws_profile = "dev-profile"
environment_abbr = "dev"
vpc_name = "dev-vpc"
vpc_domain_name = "dev.example.com"
vpc_name = "dev-vpc"
vpc_domain_name = "dev.example.com"
}

enable_modules = {
Expand All @@ -32,7 +32,7 @@ module "eks_deployment" {
}

versions = {
cluster_version = "1.27"
cluster_version = "1.27"
eks_module_version = "20.33.1"
}
}
166 changes: 83 additions & 83 deletions locals.tf
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)
}
91 changes: 63 additions & 28 deletions main.tf
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
}
Loading

0 comments on commit 4f26e92

Please sign in to comment.