From 038d922b1b8c87aee978980a8eb7471ad3a9a6e7 Mon Sep 17 00:00:00 2001 From: Mykhailo Babych Date: Tue, 15 Sep 2026 11:26:02 +0300 Subject: [PATCH 1/4] fix: Project omniauth mounts per provider in lean backup --- README.md | 14 +++++++------- locals.tf | 25 +++++++++++++++++++++---- main.tf | 1 + templates/lean-backup-cronjob.yaml.tpl | 6 +----- 4 files changed, 30 insertions(+), 16 deletions(-) diff --git a/README.md b/README.md index 38c5795..c611523 100644 --- a/README.md +++ b/README.md @@ -45,7 +45,7 @@ chart's appVersion / `global.gitlabVersion`) — so no version needs to be maint ## Requirements | Name | Version | -|------|---------| +| ---- | ------- | | [terraform](#requirement\_terraform) | >= 1.5.7 | | [aws](#requirement\_aws) | >= 6.0 | | [helm](#requirement\_helm) | 2.11.0 | @@ -56,7 +56,7 @@ chart's appVersion / `global.gitlabVersion`) — so no version needs to be maint ## Providers | Name | Version | -|------|---------| +| ---- | ------- | | [aws](#provider\_aws) | 6.55.0 | | [helm](#provider\_helm) | 2.11.0 | | [kubectl](#provider\_kubectl) | 2.4.1 | @@ -65,7 +65,7 @@ chart's appVersion / `global.gitlabVersion`) — so no version needs to be maint ## Modules | Name | Source | Version | -|------|--------|---------| +| ---- | ------ | ------- | | [gitlab\_policy](#module\_gitlab\_policy) | terraform-aws-modules/iam/aws//modules/iam-policy | v6.4.0 | | [gitlab\_role](#module\_gitlab\_role) | terraform-aws-modules/iam/aws//modules/iam-role | v6.4.0 | | [s3\_bucket](#module\_s3\_bucket) | terraform-aws-modules/s3-bucket/aws | 5.10.0 | @@ -73,7 +73,7 @@ chart's appVersion / `global.gitlabVersion`) — so no version needs to be maint ## Resources | Name | Type | -|------|------| +| ---- | ---- | | [helm_release.gitlab](https://registry.terraform.io/providers/hashicorp/helm/2.11.0/docs/resources/release) | resource | | [kubectl_manifest.lean_backup](https://registry.terraform.io/providers/alekc/kubectl/latest/docs/resources/manifest) | resource | | [kubernetes_namespace_v1.gitlab](https://registry.terraform.io/providers/hashicorp/kubernetes/latest/docs/resources/namespace_v1) | resource | @@ -92,7 +92,7 @@ chart's appVersion / `global.gitlabVersion`) — so no version needs to be maint ## Inputs | Name | Description | Type | Default | Required | -|------|-------------|------|---------|:--------:| +| ---- | ----------- | ---- | ------- | :------: | | [bucket\_prefix](#input\_bucket\_prefix) | Prefix used for S3 buckets | `string` | `""` | no | | [buckets\_lifecycles](#input\_buckets\_lifecycles) | Lifecycle rules for buckets | `map(string)` | `{}` | no | | [buckets\_versioning](#input\_buckets\_versioning) | Versioning for buckets | `map(bool)` | `{}` | no | @@ -100,7 +100,7 @@ chart's appVersion / `global.gitlabVersion`) — so no version needs to be maint | [database\_password](#input\_database\_password) | Password to access PostgreSQL database | `string` | n/a | yes | | [gitlab\_chart\_version](#input\_gitlab\_chart\_version) | Version of the gitlab chart | `string` | `"7.8.1"` | no | | [ldap\_password](#input\_ldap\_password) | LDAP password | `string` | `""` | no | -| [lean\_backup](#input\_lean\_backup) | Optional intraday "lean full" backup CronJob (db + repositories only; object-storage/blob
components skipped). Rendered as a clone of the chart's toolbox backup CronJob with only the
scheduling, resources and `--skip` arguments changed, so env/secrets/volumes stay faithful to
the chart. Disabled by default; set `enabled = true` to create it.

Images default to the toolbox/certificates/gitlab-base repositories taken from `values`, tagged
with the GitLab application version resolved from the deployed Helm release (the chart's
appVersion, or `global.gitlabVersion` if set) — so there is no image version to maintain here.
Supply the full `*_image` fields only to override. `name` defaults to
"-toolbox-backup-lean" and `service_account_name` to "-toolbox". |
object({
enabled = optional(bool, false)
schedule = optional(string, "0 6,12,18 * * *")
name = optional(string, null)
toolbox_image = optional(string, null)
certificates_image = optional(string, null)
configure_image = optional(string, null)
service_account_name = optional(string, null)
rails_secret_name = optional(string, null)
concurrency_policy = optional(string, "Forbid")
restart_policy = optional(string, "Never")
active_deadline_seconds = optional(number, 2700)
backoff_limit = optional(number, 0)
successful_jobs_history_limit = optional(number, 1)
failed_jobs_history_limit = optional(number, 3)
ttl_seconds_after_finished = optional(number, 86400)
tmp_storage_size = optional(string, "30Gi")
skip = optional(list(string), [
"registry", "uploads", "pages", "packages", "external_diffs",
"ci_secure_files", "lfs", "artifacts", "terraform_state",
])
node_selector = optional(map(string), {
provisioner = "gitlab-base"
nodetype = "gitlab-base"
})
tolerations = optional(list(object({
key = string
value = optional(string)
effect = string
operator = optional(string)
})), [{ key = "gitlab-base", value = "true", effect = "NoSchedule" }])
pod_annotations = optional(map(string), { "karpenter.sh/do-not-disrupt" = "true" })
resources = optional(any, { requests = { cpu = "500m", memory = "1G" } })
})
| `{}` | no | +| [lean\_backup](#input\_lean\_backup) | Optional intraday "lean full" backup CronJob (db + repositories only; object-storage/blob
components skipped). Rendered as a clone of the chart's toolbox backup CronJob with only the
scheduling, resources and `--skip` arguments changed, so env/secrets/volumes stay faithful to
the chart. Disabled by default; set `enabled = true` to create it.

Images default to the toolbox/certificates/gitlab-base repositories taken from `values`, tagged
with the GitLab application version resolved from the deployed Helm release (the chart's
appVersion, or `global.gitlabVersion` if set) — so there is no image version to maintain here.
Supply the full `*_image` fields only to override. `name` defaults to
"-toolbox-backup-lean" and `service_account_name` to "-toolbox". |
object({
enabled = optional(bool, false)
schedule = optional(string, "0 6,12,18 * * *")
name = optional(string, null)
toolbox_image = optional(string, null)
certificates_image = optional(string, null)
configure_image = optional(string, null)
service_account_name = optional(string, null)
rails_secret_name = optional(string, null)
concurrency_policy = optional(string, "Forbid")
restart_policy = optional(string, "Never")
active_deadline_seconds = optional(number, 2700)
backoff_limit = optional(number, 0)
successful_jobs_history_limit = optional(number, 1)
failed_jobs_history_limit = optional(number, 3)
ttl_seconds_after_finished = optional(number, 86400)
tmp_storage_size = optional(string, "30Gi")
skip = optional(list(string), [
"registry", "uploads", "pages", "packages", "external_diffs",
"ci_secure_files", "lfs", "artifacts", "terraform_state",
])
node_selector = optional(map(string), {
provisioner = "gitlab-base"
nodetype = "gitlab-base"
})
tolerations = optional(list(object({
key = string
value = optional(string)
effect = string
operator = optional(string)
})), [{ key = "gitlab-base", value = "true", effect = "NoSchedule" }])
pod_annotations = optional(map(string), { "karpenter.sh/do-not-disrupt" = "true" })
resources = optional(any, { requests = { cpu = "500m", memory = "1G" } })
})
| `{}` | no | | [namespace\_labels](#input\_namespace\_labels) | Labels for GitLab namespace | `map(string)` | `{}` | no | | [omniauth\_providers](#input\_omniauth\_providers) | OmniAuth providers | `map(string)` | `{}` | no | | [redis\_password](#input\_redis\_password) | Password to access Redis database | `string` | n/a | yes | @@ -118,7 +118,7 @@ chart's appVersion / `global.gitlabVersion`) — so no version needs to be maint ## Outputs | Name | Description | -|------|-------------| +| ---- | ----------- | | [buckets](#output\_buckets) | List of buckets created | | [lean\_backup\_cronjob\_name](#output\_lean\_backup\_cronjob\_name) | Name of the lean backup CronJob, or null when lean\_backup is disabled | | [role\_arn](#output\_role\_arn) | ARN of IAM role | diff --git a/locals.tf b/locals.tf index cfc4189..72c5186 100644 --- a/locals.tf +++ b/locals.tf @@ -95,9 +95,26 @@ locals { "logging/type" = "gitlab" }, local.lean.pod_annotations) + # The chart's toolbox projects one omniauth secret per configured provider; mirror that instead of + # assuming a single provider, so single- and multi-provider installs both render correctly. The + # item key follows the chart (`key`, default "provider"), which is the key gitlab_omniauth_providers + # writes. + lean_omniauth_sources = [ + for p in try(local.app_config.omniauth.providers, []) : { + secret = { + name = p.secret + items = [{ + key = try(p.key, "provider") + path = "omniauth/${p.secret}/${try(p.key, "provider")}" + }] + } + } + ] + # Pre-indented YAML fragments injected into the CronJob template. - lean_node_selector_yaml = indent(12, trimspace(yamlencode(local.lean.node_selector))) - lean_tolerations_yaml = indent(12, trimspace(yamlencode(local.lean_tolerations))) - lean_pod_annotations_yaml = indent(12, trimspace(yamlencode(local.lean_pod_annotations))) - lean_resources_yaml = indent(14, trimspace(yamlencode(local.lean.resources))) + lean_omniauth_sources_yaml = length(local.lean_omniauth_sources) > 0 ? indent(14, trimspace(yamlencode(local.lean_omniauth_sources))) : "" + lean_node_selector_yaml = indent(12, trimspace(yamlencode(local.lean.node_selector))) + lean_tolerations_yaml = indent(12, trimspace(yamlencode(local.lean_tolerations))) + lean_pod_annotations_yaml = indent(12, trimspace(yamlencode(local.lean_pod_annotations))) + lean_resources_yaml = indent(14, trimspace(yamlencode(local.lean.resources))) } diff --git a/main.tf b/main.tf index 1157c6a..6117812 100644 --- a/main.tf +++ b/main.tf @@ -305,6 +305,7 @@ resource "kubectl_manifest" "lean_backup" { tolerations_yaml = local.lean_tolerations_yaml pod_annotations_yaml = local.lean_pod_annotations_yaml resources_yaml = local.lean_resources_yaml + omniauth_sources_yaml = local.lean_omniauth_sources_yaml }) server_side_apply = true diff --git a/templates/lean-backup-cronjob.yaml.tpl b/templates/lean-backup-cronjob.yaml.tpl index 4f5f4a0..09b0984 100644 --- a/templates/lean-backup-cronjob.yaml.tpl +++ b/templates/lean-backup-cronjob.yaml.tpl @@ -303,11 +303,7 @@ spec: - key: connection path: objectstorage/ci_secure_files name: ${release_name}-rails-storage - - secret: - items: - - key: provider - path: omniauth/gitlab-google-oauth2/provider - name: gitlab-google-oauth2 + ${omniauth_sources_yaml} - name: toolbox-secrets emptyDir: medium: Memory From d2b18652b3618d6fa6456dbd28f2ada9f42d2696 Mon Sep 17 00:00:00 2001 From: Mykhailo Babych Date: Tue, 15 Sep 2026 12:31:56 +0300 Subject: [PATCH 2/4] feat: Add extra_secret_projections to lean backup --- README.md | 6 +++++- locals.tf | 28 +++++++++++--------------- main.tf | 2 +- templates/lean-backup-cronjob.yaml.tpl | 2 +- variables.tf | 26 ++++++++++++++++-------- 5 files changed, 37 insertions(+), 27 deletions(-) diff --git a/README.md b/README.md index c611523..47d7307 100644 --- a/README.md +++ b/README.md @@ -37,6 +37,10 @@ The CronJob is rendered from `templates/lean-backup-cronjob.yaml.tpl` and applie image tag is resolved automatically from the deployed release's GitLab application version (the chart's appVersion / `global.gitlabVersion`) — so no version needs to be maintained here. +Secrets the release mounts one file at a time are not discovered automatically: list each one in +`extra_secret_projections` (`secret_name`, `key`, `path`) so the pod finds every file its rendered +config expects, otherwise it fails to start. + > **Chart upgrades:** because the template mirrors the chart's rendered toolbox backup pod spec, it > must be re-synced after major GitLab chart upgrades that change the toolbox secret/volume topology. > Regenerate it from the live CronJob: `kubectl -n get cronjob -toolbox-backup -o yaml`. @@ -100,7 +104,7 @@ chart's appVersion / `global.gitlabVersion`) — so no version needs to be maint | [database\_password](#input\_database\_password) | Password to access PostgreSQL database | `string` | n/a | yes | | [gitlab\_chart\_version](#input\_gitlab\_chart\_version) | Version of the gitlab chart | `string` | `"7.8.1"` | no | | [ldap\_password](#input\_ldap\_password) | LDAP password | `string` | `""` | no | -| [lean\_backup](#input\_lean\_backup) | Optional intraday "lean full" backup CronJob (db + repositories only; object-storage/blob
components skipped). Rendered as a clone of the chart's toolbox backup CronJob with only the
scheduling, resources and `--skip` arguments changed, so env/secrets/volumes stay faithful to
the chart. Disabled by default; set `enabled = true` to create it.

Images default to the toolbox/certificates/gitlab-base repositories taken from `values`, tagged
with the GitLab application version resolved from the deployed Helm release (the chart's
appVersion, or `global.gitlabVersion` if set) — so there is no image version to maintain here.
Supply the full `*_image` fields only to override. `name` defaults to
"-toolbox-backup-lean" and `service_account_name` to "-toolbox". |
object({
enabled = optional(bool, false)
schedule = optional(string, "0 6,12,18 * * *")
name = optional(string, null)
toolbox_image = optional(string, null)
certificates_image = optional(string, null)
configure_image = optional(string, null)
service_account_name = optional(string, null)
rails_secret_name = optional(string, null)
concurrency_policy = optional(string, "Forbid")
restart_policy = optional(string, "Never")
active_deadline_seconds = optional(number, 2700)
backoff_limit = optional(number, 0)
successful_jobs_history_limit = optional(number, 1)
failed_jobs_history_limit = optional(number, 3)
ttl_seconds_after_finished = optional(number, 86400)
tmp_storage_size = optional(string, "30Gi")
skip = optional(list(string), [
"registry", "uploads", "pages", "packages", "external_diffs",
"ci_secure_files", "lfs", "artifacts", "terraform_state",
])
node_selector = optional(map(string), {
provisioner = "gitlab-base"
nodetype = "gitlab-base"
})
tolerations = optional(list(object({
key = string
value = optional(string)
effect = string
operator = optional(string)
})), [{ key = "gitlab-base", value = "true", effect = "NoSchedule" }])
pod_annotations = optional(map(string), { "karpenter.sh/do-not-disrupt" = "true" })
resources = optional(any, { requests = { cpu = "500m", memory = "1G" } })
})
| `{}` | no | +| [lean\_backup](#input\_lean\_backup) | Optional intraday "lean full" backup CronJob (db + repositories only; object-storage/blob
components skipped). Rendered as a clone of the chart's toolbox backup CronJob with only the
scheduling, resources and `--skip` arguments changed, so env/secrets/volumes stay faithful to
the chart. Disabled by default; set `enabled = true` to create it.

Images default to the toolbox/certificates/gitlab-base repositories taken from `values`, tagged
with the GitLab application version resolved from the deployed Helm release (the chart's
appVersion, or `global.gitlabVersion` if set) — so there is no image version to maintain here.
Supply the full `*_image` fields only to override. `name` defaults to
"-toolbox-backup-lean" and `service_account_name` to "-toolbox".

`extra_secret_projections` appends entries to the pod's projected secret volume, for secrets the
chart mounts one file at a time and whose set the module cannot infer. Each entry projects
`secret_name`'s `key` at `path`, relative to the config directory. The pod fails to render its
config when a file the release expects is absent, so pass the complete set. |
object({
enabled = optional(bool, false)
schedule = optional(string, "0 6,12,18 * * *")
name = optional(string, null)
toolbox_image = optional(string, null)
certificates_image = optional(string, null)
configure_image = optional(string, null)
service_account_name = optional(string, null)
rails_secret_name = optional(string, null)
extra_secret_projections = optional(list(object({
secret_name = string
key = string
path = string
})), [])
concurrency_policy = optional(string, "Forbid")
restart_policy = optional(string, "Never")
active_deadline_seconds = optional(number, 2700)
backoff_limit = optional(number, 0)
successful_jobs_history_limit = optional(number, 1)
failed_jobs_history_limit = optional(number, 3)
ttl_seconds_after_finished = optional(number, 86400)
tmp_storage_size = optional(string, "30Gi")
skip = optional(list(string), [
"registry", "uploads", "pages", "packages", "external_diffs",
"ci_secure_files", "lfs", "artifacts", "terraform_state",
])
node_selector = optional(map(string), {
provisioner = "gitlab-base"
nodetype = "gitlab-base"
})
tolerations = optional(list(object({
key = string
value = optional(string)
effect = string
operator = optional(string)
})), [{ key = "gitlab-base", value = "true", effect = "NoSchedule" }])
pod_annotations = optional(map(string), { "karpenter.sh/do-not-disrupt" = "true" })
resources = optional(any, { requests = { cpu = "500m", memory = "1G" } })
})
| `{}` | no | | [namespace\_labels](#input\_namespace\_labels) | Labels for GitLab namespace | `map(string)` | `{}` | no | | [omniauth\_providers](#input\_omniauth\_providers) | OmniAuth providers | `map(string)` | `{}` | no | | [redis\_password](#input\_redis\_password) | Password to access Redis database | `string` | n/a | yes | diff --git a/locals.tf b/locals.tf index 72c5186..7d48e70 100644 --- a/locals.tf +++ b/locals.tf @@ -95,26 +95,22 @@ locals { "logging/type" = "gitlab" }, local.lean.pod_annotations) - # The chart's toolbox projects one omniauth secret per configured provider; mirror that instead of - # assuming a single provider, so single- and multi-provider installs both render correctly. The - # item key follows the chart (`key`, default "provider"), which is the key gitlab_omniauth_providers - # writes. - lean_omniauth_sources = [ - for p in try(local.app_config.omniauth.providers, []) : { + # Caller-supplied projections appended to the pod's projected secret volume. The release mounts + # some secrets one file at a time and fails to render its config when an expected file is absent, + # so the set is passed in rather than assumed - one entry, several, or none all render correctly. + lean_extra_secret_projections = [ + for s in local.lean.extra_secret_projections : { secret = { - name = p.secret - items = [{ - key = try(p.key, "provider") - path = "omniauth/${p.secret}/${try(p.key, "provider")}" - }] + name = s.secret_name + items = [{ key = s.key, path = s.path }] } } ] # Pre-indented YAML fragments injected into the CronJob template. - lean_omniauth_sources_yaml = length(local.lean_omniauth_sources) > 0 ? indent(14, trimspace(yamlencode(local.lean_omniauth_sources))) : "" - lean_node_selector_yaml = indent(12, trimspace(yamlencode(local.lean.node_selector))) - lean_tolerations_yaml = indent(12, trimspace(yamlencode(local.lean_tolerations))) - lean_pod_annotations_yaml = indent(12, trimspace(yamlencode(local.lean_pod_annotations))) - lean_resources_yaml = indent(14, trimspace(yamlencode(local.lean.resources))) + lean_extra_sources_yaml = length(local.lean_extra_secret_projections) > 0 ? indent(14, trimspace(yamlencode(local.lean_extra_secret_projections))) : "" + lean_node_selector_yaml = indent(12, trimspace(yamlencode(local.lean.node_selector))) + lean_tolerations_yaml = indent(12, trimspace(yamlencode(local.lean_tolerations))) + lean_pod_annotations_yaml = indent(12, trimspace(yamlencode(local.lean_pod_annotations))) + lean_resources_yaml = indent(14, trimspace(yamlencode(local.lean.resources))) } diff --git a/main.tf b/main.tf index 6117812..a4fd225 100644 --- a/main.tf +++ b/main.tf @@ -305,7 +305,7 @@ resource "kubectl_manifest" "lean_backup" { tolerations_yaml = local.lean_tolerations_yaml pod_annotations_yaml = local.lean_pod_annotations_yaml resources_yaml = local.lean_resources_yaml - omniauth_sources_yaml = local.lean_omniauth_sources_yaml + extra_sources_yaml = local.lean_extra_sources_yaml }) server_side_apply = true diff --git a/templates/lean-backup-cronjob.yaml.tpl b/templates/lean-backup-cronjob.yaml.tpl index 09b0984..f51654e 100644 --- a/templates/lean-backup-cronjob.yaml.tpl +++ b/templates/lean-backup-cronjob.yaml.tpl @@ -303,7 +303,7 @@ spec: - key: connection path: objectstorage/ci_secure_files name: ${release_name}-rails-storage - ${omniauth_sources_yaml} + ${extra_sources_yaml} - name: toolbox-secrets emptyDir: medium: Memory diff --git a/variables.tf b/variables.tf index 692c5cb..a7fd738 100644 --- a/variables.tf +++ b/variables.tf @@ -132,17 +132,27 @@ variable "lean_backup" { appVersion, or `global.gitlabVersion` if set) — so there is no image version to maintain here. Supply the full `*_image` fields only to override. `name` defaults to "-toolbox-backup-lean" and `service_account_name` to "-toolbox". + + `extra_secret_projections` appends entries to the pod's projected secret volume, for secrets the + chart mounts one file at a time and whose set the module cannot infer. Each entry projects + `secret_name`'s `key` at `path`, relative to the config directory. The pod fails to render its + config when a file the release expects is absent, so pass the complete set. EOT type = object({ - enabled = optional(bool, false) - schedule = optional(string, "0 6,12,18 * * *") - name = optional(string, null) - toolbox_image = optional(string, null) - certificates_image = optional(string, null) - configure_image = optional(string, null) - service_account_name = optional(string, null) - rails_secret_name = optional(string, null) + enabled = optional(bool, false) + schedule = optional(string, "0 6,12,18 * * *") + name = optional(string, null) + toolbox_image = optional(string, null) + certificates_image = optional(string, null) + configure_image = optional(string, null) + service_account_name = optional(string, null) + rails_secret_name = optional(string, null) + extra_secret_projections = optional(list(object({ + secret_name = string + key = string + path = string + })), []) concurrency_policy = optional(string, "Forbid") restart_policy = optional(string, "Never") active_deadline_seconds = optional(number, 2700) From f978696116e0aa85b964dfe0f0a44d82145c7131 Mon Sep 17 00:00:00 2001 From: Mykhailo Babych Date: Tue, 15 Sep 2026 12:34:13 +0300 Subject: [PATCH 3/4] chore: Run pre-commit --- examples/README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/examples/README.md b/examples/README.md index 2de153a..ec4e763 100644 --- a/examples/README.md +++ b/examples/README.md @@ -2,7 +2,7 @@ ## Requirements | Name | Version | -|------|---------| +| ---- | ------- | | [terraform](#requirement\_terraform) | >= 1.5.7 | | [aws](#requirement\_aws) | >= 6.0 | | [helm](#requirement\_helm) | 2.11.0 | @@ -17,7 +17,7 @@ No providers. ## Modules | Name | Source | Version | -|------|--------|---------| +| ---- | ------ | ------- | | [gitlab](#module\_gitlab) | ../ | n/a | ## Resources From f3a3e7535b426f811bcbad32d418405686f49575 Mon Sep 17 00:00:00 2001 From: Mykhailo Babych Date: Tue, 15 Sep 2026 12:49:41 +0300 Subject: [PATCH 4/4] chore: Bump TERRAFORM_DOCS_VERSION --- .github/workflows/pre-commit.yml | 2 +- README.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/pre-commit.yml b/.github/workflows/pre-commit.yml index 546d679..50e6b03 100644 --- a/.github/workflows/pre-commit.yml +++ b/.github/workflows/pre-commit.yml @@ -7,7 +7,7 @@ on: - master env: - TERRAFORM_DOCS_VERSION: v0.16.0 + TERRAFORM_DOCS_VERSION: v0.24.0 TFLINT_VERSION: v0.44.1 jobs: diff --git a/README.md b/README.md index 47d7307..b42e22d 100644 --- a/README.md +++ b/README.md @@ -61,7 +61,7 @@ config expects, otherwise it fails to start. | Name | Version | | ---- | ------- | -| [aws](#provider\_aws) | 6.55.0 | +| [aws](#provider\_aws) | 6.64.0 | | [helm](#provider\_helm) | 2.11.0 | | [kubectl](#provider\_kubectl) | 2.4.1 | | [kubernetes](#provider\_kubernetes) | 3.2.1 |