Skip to content

[INFRA-317] Update Plane-EE Helm Chart to version v2.3.0#212

Open
pratapalakshmi wants to merge 4 commits intomasterfrom
chore/update/helm/charts/with/support/aws/secrets
Open

[INFRA-317] Update Plane-EE Helm Chart to version v2.3.0#212
pratapalakshmi wants to merge 4 commits intomasterfrom
chore/update/helm/charts/with/support/aws/secrets

Conversation

@pratapalakshmi
Copy link
Copy Markdown
Collaborator

@pratapalakshmi pratapalakshmi commented Mar 20, 2026

  • Bump application version to 2.3.0 in Chart.yaml
  • Introduce new API secrets configuration in values.yaml for external secrets management
  • Add support for EKS Pod Identity and related annotations in service-account.yaml
  • Enhance config-secrets templates to include AWS Secrets Manager ARNs and key mappings
  • Add NOTES.txt for guidance on Pod Identity and secret management configuration

Summary by CodeRabbit

  • Chores

    • Bumped Helm chart version to 2.3.0
  • Documentation

    • Added deployment notes covering EKS Pod Identity and IRSA flows, ARN-driven secret wiring, and inspection tips; README updated with guidance for ARN-based credential usage
  • New Features

    • AWS Secrets Manager support with conditional ARN-driven env injection and configurable secret cache TTL
    • ServiceAccount annotations plus Pod Identity and IRSA options
    • Configurable runner base URL and expanded secret key-mapping fields for app and PI workloads

* Bump application version to 2.3.0 in Chart.yaml
* Introduce new API secrets configuration in values.yaml for external secrets management
* Add support for EKS Pod Identity and related annotations in service-account.yaml
* Enhance config-secrets templates to include AWS Secrets Manager ARNs and key mappings
* Add NOTES.txt for guidance on Pod Identity and secret management configuration
@coderabbitai
Copy link
Copy Markdown
Contributor

coderabbitai Bot commented Mar 20, 2026

Walkthrough

Bump plane-enterprise chart to v2.3.0 and add conditional AWS Secrets Manager ARN wiring, IRSA and EKS Pod Identity options, ServiceAccount annotation merging, and new values/key-mapping fields used by multiple templates.

Changes

Cohort / File(s) Summary
Chart Metadata
charts/plane-enterprise/Chart.yaml
Chart version updated 2.2.52.3.0.
Notes / Docs
charts/plane-enterprise/templates/NOTES.txt, charts/plane-enterprise/README.md
New NOTES template describing IRSA vs EKS Pod Identity setup, computed ServiceAccount name, and how to inspect rendered ARN-driven env vars; README updated with ARN wiring and local_setup=false guidance.
ServiceAccount
charts/plane-enterprise/templates/service-account.yaml
Builds annotations map from serviceAccount.annotations, irsa.annotations, optional irsa.roleArn, override via podIdentity.roleArn when enabled, and merges podIdentity.annotations; renders metadata.annotations only if non-empty.
Config & Secrets — app / live / silo
charts/plane-enterprise/templates/config-secrets/app-env.yaml, .../live-env.yaml, .../silo.yaml
Add conditional Secret ARN keys (AMAZONMQ_SECRET_ARN, ELASTICACHE_SECRET_ARN, RDS_SECRET_ARN) and conditional key-name mappings; add AWS_SECRET_CACHE_TTL (default "300") and RUNNER_BASE_URL defaulting when unset.
Config & Secrets — PI
charts/plane-enterprise/templates/config-secrets/pi-api-env.yaml
Resolve follower/primary/model/amazonmq ARNs via local vars; remove previous embedding gating for some AWS creds; add conditional Secret/ConfigMap entries for follower/primary RDS, AMQ, model secrets and PI-specific key mappings plus AWS_SECRET_CACHE_TTL.
Values / schema
charts/plane-enterprise/values.yaml
Add serviceAccount.annotations, irsa, podIdentity, top-level env.aws_secret_cache_ttl, env.apiSecrets ARNs, runner_base_url, services.pi.apiSecrets, and multiple credential key-name fields used by conditional rendering.

Sequence Diagram(s)

sequenceDiagram
    participant User
    participant Helm
    participant K8s as Kubernetes
    participant AWS as "AWS Secrets Manager / IAM"
    User->>Helm: helm install/upgrade (values include podIdentity/irsa/secret ARNs)
    Helm->>K8s: render manifests (ServiceAccount, Secrets, ConfigMaps, NOTES)
    alt IRSA configured
        K8s->>AWS: pod/ServiceAccount annotation -> STS AssumeRole on pod
    else Pod Identity enabled
        User->>AWS: install pod-identity-agent (out-of-band)
        K8s->>AWS: pod-identity-agent maps pod -> IAM role
    end
    AWS-->>K8s: secrets/credentials become available to pods (via role)
    Helm-->>User: NOTES.txt instructs setup and how to inspect rendered env vars
Loading

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~25 minutes

Poem

🐰 I hopped through charts and stitched each ARN bright,

Merged annotations, notes, and defaulted a URL right.
IRSA or pod identity, choose which to employ,
Secrets tucked in ConfigMaps — a rabbit's small joy. 🥕

🚥 Pre-merge checks | ✅ 3
✅ Passed checks (3 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Title check ✅ Passed The title accurately summarizes the main change—a version bump from 2.2.5 to 2.3.0 in the Helm chart. It is specific, clear, and directly related to the primary change in the changeset.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch chore/update/helm/charts/with/support/aws/secrets

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

Copy link
Copy Markdown
Contributor

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 4

🧹 Nitpick comments (2)
charts/plane-enterprise/templates/NOTES.txt (1)

39-39: Minor: Hyphenate compound adjective.

"Secret ARN driven" should be hyphenated as "Secret-ARN-driven" when used as a compound adjective before "env wiring".

📝 Proposed fix
 ---
-## Secret ARN driven env wiring
+## Secret-ARN-driven env wiring
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@charts/plane-enterprise/templates/NOTES.txt` at line 39, Update the header
"## Secret ARN driven env wiring" to hyphenate the compound adjective so it
reads "## Secret-ARN-driven env wiring"; edit the NOTES.txt header line (the
header string "Secret ARN driven env wiring") to the hyphenated form to correct
grammar.
charts/plane-enterprise/templates/config-secrets/pi-api-env.yaml (1)

116-122: Inconsistent whitespace control in template directive.

Line 122 uses {{ end }} while other closing directives use {{- end }}. This inconsistency can cause extra whitespace in the rendered output.

♻️ Proposed fix
   RDS_DB_PORT_KEY: {{ .Values.env.pi_envs.rds_db_port_key | quote }}
   RDS_DB_USERNAME_KEY: {{ .Values.env.pi_envs.rds_db_username_key | quote }}
-  {{ end }}
+  {{- end }}
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@charts/plane-enterprise/templates/config-secrets/pi-api-env.yaml` around
lines 116 - 122, The closing Helm template directive for the conditional block
is using "{{ end }}" which is inconsistent with the other closing directives
that use whitespace-trimming "{{- end }}"; update the closing directive for the
"if" block that checks .Values.services.pi.apiSecrets.rds_secret_arn and the
various .Values.env.pi_envs.* keys to use "{{- end }}" so whitespace control is
consistent with the opening "{{- if ... }}" and the other template closures.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@charts/plane-enterprise/templates/config-secrets/app-env.yaml`:
- Around line 109-114: The default RUNNER_BASE_URL fallback currently hardcodes
the service as "plane-node-runner", causing mismatches with release-scoped
services; update the template logic that sets RUNNER_BASE_URL (the block using
.Values.env.runner_base_url) so the fallback host follows the same release-name
convention as other services by using .Release.Name (e.g., "{{ .Release.Name
}}-node-runner") combined with .Release.Namespace and port 3000, preserving the
existing conditional that prefers .Values.env.runner_base_url when provided.

In `@charts/plane-enterprise/templates/service-account.yaml`:
- Around line 1-10: The merge order currently gives earlier maps precedence, so
.Values.serviceAccount.annotations or .Values.irsa.annotations can block
.Values.irsa.roleArn; fix by reversing the overlay order so IRSA wins: when
merging into $annotations ensure the overlay maps for .Values.irsa.annotations
and the role ARN dict (".Values.irsa.roleArn") are passed as the first argument
to merge (i.e., treat them as the overriding maps) or build the final
$annotations by starting from serviceAccount then overlaying irsa.annotations
then overlaying the roleArn dict so that the role ARN and irsa annotations have
highest precedence; update the merge calls referencing $annotations,
.Values.serviceAccount.annotations, .Values.irsa.annotations, and
.Values.irsa.roleArn accordingly.

In `@charts/plane-enterprise/values.yaml`:
- Around line 466-471: The apiSecrets block contains hardcoded ARNs with a
real-looking AWS account ID; update amazonmq_secret_arn, elasticache_secret_arn,
and rds_secret_arn to use non-sensitive placeholder/example values (e.g.,
arn:aws:secretsmanager:REGION:ACCOUNT_ID:secret:your-secret-name or empty
strings) instead of the specific account number 426043895157, and optionally add
a short comment directing users to replace them with their own Secrets Manager
ARNs; ensure you update the symbols amazonmq_secret_arn, elasticache_secret_arn,
and rds_secret_arn in values.yaml accordingly.
- Around line 391-397: The comment for apiSecrets incorrectly states values are
base64-encoded; ARNs (e.g., follower_rds_secret_arn, model_secret_arn,
amazonmq_secret_arn, rds_secret_arn under apiSecrets and the duplicate comment
for env.apiSecrets) are plain-text identifiers — update the comment to reflect
that these fields expect ARN strings (or plain text secret identifiers) rather
than base64-encoded values, and apply the same correction to the duplicate
comment near env.apiSecrets.

---

Nitpick comments:
In `@charts/plane-enterprise/templates/config-secrets/pi-api-env.yaml`:
- Around line 116-122: The closing Helm template directive for the conditional
block is using "{{ end }}" which is inconsistent with the other closing
directives that use whitespace-trimming "{{- end }}"; update the closing
directive for the "if" block that checks
.Values.services.pi.apiSecrets.rds_secret_arn and the various
.Values.env.pi_envs.* keys to use "{{- end }}" so whitespace control is
consistent with the opening "{{- if ... }}" and the other template closures.

In `@charts/plane-enterprise/templates/NOTES.txt`:
- Line 39: Update the header "## Secret ARN driven env wiring" to hyphenate the
compound adjective so it reads "## Secret-ARN-driven env wiring"; edit the
NOTES.txt header line (the header string "Secret ARN driven env wiring") to the
hyphenated form to correct grammar.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Run ID: 466c00a1-7e11-4df6-95ee-f268f60c7db1

📥 Commits

Reviewing files that changed from the base of the PR and between b9b1097 and c7becb8.

📒 Files selected for processing (8)
  • charts/plane-enterprise/Chart.yaml
  • charts/plane-enterprise/templates/NOTES.txt
  • charts/plane-enterprise/templates/config-secrets/app-env.yaml
  • charts/plane-enterprise/templates/config-secrets/live-env.yaml
  • charts/plane-enterprise/templates/config-secrets/pi-api-env.yaml
  • charts/plane-enterprise/templates/config-secrets/silo.yaml
  • charts/plane-enterprise/templates/service-account.yaml
  • charts/plane-enterprise/values.yaml

Comment on lines +109 to +114
# Runner base URL used by the automation runner integration.
{{- if .Values.env.runner_base_url }}
RUNNER_BASE_URL: {{ .Values.env.runner_base_url | quote }}
{{- else }}
RUNNER_BASE_URL: "http://plane-node-runner.{{ .Release.Namespace }}.svc.cluster.local:3000"
{{- end }}
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
# Check if node-runner service is defined in this chart with a fixed or release-based name
rg -n "node-runner" --type yaml charts/plane-enterprise/

Repository: makeplane/helm-charts

Length of output: 224


🏁 Script executed:

# Check service definitions and deployments to understand the naming pattern
fd "service" charts/plane-enterprise/templates/ -type f | head -20

Repository: makeplane/helm-charts

Length of output: 235


🏁 Script executed:

# Look for other service URL patterns in app-env.yaml to compare naming conventions
rg -A 2 "Release.Name" charts/plane-enterprise/templates/config-secrets/app-env.yaml | head -40

Repository: makeplane/helm-charts

Length of output: 1917


🏁 Script executed:

# Check if there are any node-runner related deployments or services
fd . charts/plane-enterprise/templates/ -type f -exec rg -l "runner" {} \;

Repository: makeplane/helm-charts

Length of output: 235


🏁 Script executed:

# Check values.yaml for runner configuration and service definitions
head -100 charts/plane-enterprise/values.yaml | grep -A 10 -B 10 "runner\|Runner" || rg -C 5 "runner.*service\|node.runner" charts/plane-enterprise/values.yaml | head -50

Repository: makeplane/helm-charts

Length of output: 47


🏁 Script executed:

# Check if node-runner has deployment templates in this chart
find charts/plane-enterprise/templates -type f -name "*runner*" -o -type f -name "*node*"

Repository: makeplane/helm-charts

Length of output: 47


🏁 Script executed:

# Look for Chart.yaml or dependencies that might reference node-runner
rg -i "dependencies|node-runner" charts/plane-enterprise/Chart.yaml

Repository: makeplane/helm-charts

Length of output: 47


🏁 Script executed:

# Check if there's a separate node-runner chart
ls -la charts/ | grep -i runner

Repository: makeplane/helm-charts

Length of output: 47


🏁 Script executed:

# Check the values.yaml file for runner-related configuration
grep -n "runner" charts/plane-enterprise/values.yaml

Repository: makeplane/helm-charts

Length of output: 158


🏁 Script executed:

# Look at the complete context of RUNNER_BASE_URL in app-env.yaml
sed -n '100,120p' charts/plane-enterprise/templates/config-secrets/app-env.yaml

Repository: makeplane/helm-charts

Length of output: 1126


🏁 Script executed:

# Check if there are any other references to "plane-node-runner" in the entire chart
rg "plane-node-runner" charts/plane-enterprise/

Repository: makeplane/helm-charts

Length of output: 220


🏁 Script executed:

# Check if there's any documentation about plane-node-runner in README or docs
find charts/plane-enterprise -name "*.md" -o -name "*.txt" -o -name "*.rst" | xargs grep -l "node-runner\|runner" 2>/dev/null

Repository: makeplane/helm-charts

Length of output: 49


🏁 Script executed:

# Check the git history to see if there's context about this naming choice
git log --oneline -n 30 -- charts/plane-enterprise/templates/config-secrets/app-env.yaml 2>/dev/null | head -10

Repository: makeplane/helm-charts

Length of output: 108


🏁 Script executed:

# Look at the entire values.yaml section about services to understand the architecture
sed -n '480,510p' charts/plane-enterprise/values.yaml

Repository: makeplane/helm-charts

Length of output: 850


Hardcoded service name doesn't follow release-name convention.

The default RUNNER_BASE_URL uses plane-node-runner instead of {{ .Release.Name }}-node-runner, which is inconsistent with every other internal service URL in this template (redis, pgdb, rabbitmq, monitor, live). If the node-runner service is deployed as part of this chart, this will cause connection failures when users deploy with a custom release name.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@charts/plane-enterprise/templates/config-secrets/app-env.yaml` around lines
109 - 114, The default RUNNER_BASE_URL fallback currently hardcodes the service
as "plane-node-runner", causing mismatches with release-scoped services; update
the template logic that sets RUNNER_BASE_URL (the block using
.Values.env.runner_base_url) so the fallback host follows the same release-name
convention as other services by using .Release.Name (e.g., "{{ .Release.Name
}}-node-runner") combined with .Release.Namespace and port 3000, preserving the
existing conditional that prefers .Values.env.runner_base_url when provided.

Comment on lines +1 to +10
{{- $annotations := dict -}}
{{- with .Values.serviceAccount.annotations -}}
{{- $annotations = merge $annotations . -}}
{{- end -}}
{{- with .Values.irsa.annotations -}}
{{- $annotations = merge $annotations . -}}
{{- end -}}
{{- if .Values.irsa.roleArn -}}
{{- $annotations = merge $annotations (dict "eks.amazonaws.com/role-arn" .Values.irsa.roleArn) -}}
{{- end -}}
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor

Merge precedence may surprise users expecting irsa.roleArn to override.

Helm's merge function gives precedence to the first (leftmost) map, meaning:

  1. If serviceAccount.annotations contains eks.amazonaws.com/role-arn, it will NOT be overridden by irsa.annotations or irsa.roleArn.
  2. If irsa.annotations contains eks.amazonaws.com/role-arn, it will NOT be overridden by irsa.roleArn.

This contradicts the comment in values.yaml (line 432) stating "Additional/override IRSA annotations". Consider documenting this precedence or reversing the merge order so irsa.roleArn takes highest precedence.

♻️ Option: Reverse merge order so irsa.roleArn wins
 {{- $annotations := dict -}}
-{{- with .Values.serviceAccount.annotations -}}
-{{- $annotations = merge $annotations . -}}
-{{- end -}}
-{{- with .Values.irsa.annotations -}}
-{{- $annotations = merge $annotations . -}}
-{{- end -}}
 {{- if .Values.irsa.roleArn -}}
-{{- $annotations = merge $annotations (dict "eks.amazonaws.com/role-arn" .Values.irsa.roleArn) -}}
+{{- $annotations = merge $annotations (dict "eks.amazonaws.com/role-arn" .Values.irsa.roleArn) -}}
+{{- end -}}
+{{- with .Values.irsa.annotations -}}
+{{- $annotations = merge $annotations . -}}
+{{- end -}}
+{{- with .Values.serviceAccount.annotations -}}
+{{- $annotations = merge $annotations . -}}
 {{- end -}}

This makes irsa.roleArn highest priority, then irsa.annotations, then serviceAccount.annotations.

🧰 Tools
🪛 YAMLlint (1.38.0)

[error] 1-1: syntax error: expected the node content, but found '-'

(syntax)

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@charts/plane-enterprise/templates/service-account.yaml` around lines 1 - 10,
The merge order currently gives earlier maps precedence, so
.Values.serviceAccount.annotations or .Values.irsa.annotations can block
.Values.irsa.roleArn; fix by reversing the overlay order so IRSA wins: when
merging into $annotations ensure the overlay maps for .Values.irsa.annotations
and the role ARN dict (".Values.irsa.roleArn") are passed as the first argument
to merge (i.e., treat them as the overriding maps) or build the final
$annotations by starting from serviceAccount then overlaying irsa.annotations
then overlaying the roleArn dict so that the role ARN and irsa annotations have
highest precedence; update the merge calls referencing $annotations,
.Values.serviceAccount.annotations, .Values.irsa.annotations, and
.Values.irsa.roleArn accordingly.

Comment on lines +391 to +397
apiSecrets:
# Used by PI API to look up external secrets/credentials.
# Values are expected to be base64-encoded strings (as provided by the user).
follower_rds_secret_arn: ''
model_secret_arn: ''
amazonmq_secret_arn: ''
rds_secret_arn: ''
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor

Misleading comment: ARNs are not base64-encoded.

The comment states "Values are expected to be base64-encoded strings" but AWS Secrets Manager ARNs are plain text identifiers (e.g., arn:aws:secretsmanager:region:account-id:secret:name). This same misleading comment also appears at lines 467-468 for env.apiSecrets.

📝 Proposed fix
   apiSecrets:
-      # Used by PI API to look up external secrets/credentials.
-      # Values are expected to be base64-encoded strings (as provided by the user).
+      # Used by PI API to look up external secrets/credentials.
+      # Provide the full AWS Secrets Manager ARN.
       follower_rds_secret_arn: ''

Apply the same fix at line 467-468.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@charts/plane-enterprise/values.yaml` around lines 391 - 397, The comment for
apiSecrets incorrectly states values are base64-encoded; ARNs (e.g.,
follower_rds_secret_arn, model_secret_arn, amazonmq_secret_arn, rds_secret_arn
under apiSecrets and the duplicate comment for env.apiSecrets) are plain-text
identifiers — update the comment to reflect that these fields expect ARN strings
(or plain text secret identifiers) rather than base64-encoded values, and apply
the same correction to the duplicate comment near env.apiSecrets.

Comment thread charts/plane-enterprise/values.yaml Outdated
…ecrets Manager ARNs and additional Redis configuration. Introduce pod identity role ARN handling in service-account.yaml and add Redis authentication token key in live-env.yaml and silo.yaml.
Copy link
Copy Markdown
Contributor

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

♻️ Duplicate comments (1)
charts/plane-enterprise/templates/service-account.yaml (1)

1-17: ⚠️ Potential issue | 🟠 Major

merge precedence prevents the intended IRSA/Pod Identity overrides

Line 12 says Pod Identity role ARN should override, but with merge the existing $annotations keys win. As written, values from serviceAccount.annotations / irsa.annotations can still block both irsa.roleArn (Line 9) and podIdentity.roleArn (Line 13), resulting in the wrong role annotation being rendered.

In Helm templates (Sprig dict functions), what is key precedence behavior for `merge` vs `mergeOverwrite`, and which one should be used when later maps (e.g., role-arn overrides) must take priority?
♻️ Suggested fix (use overwrite semantics for overlay steps)
 {{- $annotations := dict -}}
 {{- with .Values.serviceAccount.annotations -}}
-{{- $annotations = merge $annotations . -}}
+{{- $annotations = mergeOverwrite $annotations . -}}
 {{- end -}}
 {{- with .Values.irsa.annotations -}}
-{{- $annotations = merge $annotations . -}}
+{{- $annotations = mergeOverwrite $annotations . -}}
 {{- end -}}
 {{- if .Values.irsa.roleArn -}}
-{{- $annotations = merge $annotations (dict "eks.amazonaws.com/role-arn" .Values.irsa.roleArn) -}}
+{{- $annotations = mergeOverwrite $annotations (dict "eks.amazonaws.com/role-arn" .Values.irsa.roleArn) -}}
 {{- end -}}
 {{- if and .Values.podIdentity.enabled .Values.podIdentity.roleArn -}}
 {{- /* Pod Identity role ARN should override any IRSA role-arn when both are set. */ -}}
-{{- $annotations = merge $annotations (dict "eks.amazonaws.com/role-arn" .Values.podIdentity.roleArn) -}}
+{{- $annotations = mergeOverwrite $annotations (dict "eks.amazonaws.com/role-arn" .Values.podIdentity.roleArn) -}}
 {{- end -}}
 {{- if .Values.podIdentity.annotations -}}
-{{- $annotations = merge $annotations .Values.podIdentity.annotations -}}
+{{- $annotations = mergeOverwrite $annotations .Values.podIdentity.annotations -}}
 {{- end -}}
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@charts/plane-enterprise/templates/service-account.yaml` around lines 1 - 17,
The template uses Sprig's merge which preserves existing keys, so later overlays
like .Values.irsa.roleArn and .Values.podIdentity.roleArn can be blocked; change
the overlay merges to use mergeOverwrite so later values win. Concretely, keep
the initial $annotations := dict and the base merge of
.Values.serviceAccount.annotations, but replace the merge calls that apply
.Values.irsa.annotations, the dict("eks.amazonaws.com/role-arn",
.Values.irsa.roleArn), the dict("eks.amazonaws.com/role-arn",
.Values.podIdentity.roleArn), and .Values.podIdentity.annotations with
mergeOverwrite so the IRSA and Pod Identity role ARNs and podIdentity
annotations take precedence as intended.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@charts/plane-enterprise/README.md`:
- Line 160: The README text for the services.redis.local_setup description
incorrectly mentions “aws rds”; update the wording to reference Redis-specific
hosted services (e.g., AWS ElastiCache or MemoryDB) so operators aren’t
misled—edit the description string associated with services.redis.local_setup to
replace “aws rds or similar services” with something like “AWS ElastiCache or
MemoryDB (or other managed Redis services)”.

---

Duplicate comments:
In `@charts/plane-enterprise/templates/service-account.yaml`:
- Around line 1-17: The template uses Sprig's merge which preserves existing
keys, so later overlays like .Values.irsa.roleArn and
.Values.podIdentity.roleArn can be blocked; change the overlay merges to use
mergeOverwrite so later values win. Concretely, keep the initial $annotations :=
dict and the base merge of .Values.serviceAccount.annotations, but replace the
merge calls that apply .Values.irsa.annotations, the
dict("eks.amazonaws.com/role-arn", .Values.irsa.roleArn), the
dict("eks.amazonaws.com/role-arn", .Values.podIdentity.roleArn), and
.Values.podIdentity.annotations with mergeOverwrite so the IRSA and Pod Identity
role ARNs and podIdentity annotations take precedence as intended.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Run ID: 6b47e278-6177-4723-b73a-1f7394c70f7d

📥 Commits

Reviewing files that changed from the base of the PR and between 77349ef and c39e66f.

📒 Files selected for processing (5)
  • charts/plane-enterprise/README.md
  • charts/plane-enterprise/templates/config-secrets/live-env.yaml
  • charts/plane-enterprise/templates/config-secrets/silo.yaml
  • charts/plane-enterprise/templates/service-account.yaml
  • charts/plane-enterprise/values.yaml
🚧 Files skipped from review as they are similar to previous changes (2)
  • charts/plane-enterprise/templates/config-secrets/silo.yaml
  • charts/plane-enterprise/values.yaml

| Setting | Default | Required | Description |
| -------------------------------- | :-------------------------: | :------: | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| services.redis.local_setup | true | | Plane uses `valkey` to cache the session authentication and other static data. This database can be hosted within kubernetes as part of helm chart deployment or can be used as hosted service remotely (e.g. aws rds or similar services). Set this to `true` when you choose to setup stateful deployment of `redis`. Mark it as `false` when using a remotely hosted database |
| services.redis.local_setup | true | | Plane uses `valkey` to cache the session authentication and other static data. This database can be hosted within kubernetes as part of helm chart deployment or can be used as hosted service remotely (e.g. aws rds or similar services). Set this to `true` when you choose to setup stateful deployment of `redis`. Mark it as `false` when using a remotely hosted database. Important: if you configure Redis credentials via AWS Secrets Manager ARNs (for example `env.apiSecrets.elasticache_secret_arn`) and provide the Redis key mapping (`env.redis_auth_token_key`), keep this set to `false` so the chart does not compute `REDIS_URL` from in-cluster services. |
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor

Redis hosted-service example uses the wrong AWS service name

Line 160 references “aws rds” for Redis; this should be Redis-specific (e.g., AWS ElastiCache/MemoryDB) to avoid operator confusion.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@charts/plane-enterprise/README.md` at line 160, The README text for the
services.redis.local_setup description incorrectly mentions “aws rds”; update
the wording to reference Redis-specific hosted services (e.g., AWS ElastiCache
or MemoryDB) so operators aren’t misled—edit the description string associated
with services.redis.local_setup to replace “aws rds or similar services” with
something like “AWS ElastiCache or MemoryDB (or other managed Redis services)”.

@akshat5302 akshat5302 changed the title Update Plane-EE to version v2.3.0 Update Plane-EE Helm Chart to version v2.3.0 Mar 23, 2026
…cret ARN resolution. This update introduces fallback mechanisms for compatibility with older values files, ensuring smoother transitions and improved configuration management.
Copy link
Copy Markdown
Contributor

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@charts/plane-enterprise/templates/config-secrets/pi-api-env.yaml`:
- Around line 119-122: The condition gating the RABBITMQ_* entries is
inconsistent with the ConfigMap: replace the direct check of
.Values.env.apiSecrets.amazonmq_secret_arn with the PI-resolved variable so both
use the same source of truth; specifically, update the if expression that
currently tests .Values.env.apiSecrets.amazonmq_secret_arn to test
$resolvedAmazonmqSecretArn (and keep the checks for
.Values.env.pi_envs.rabbitmq_password_key and
.Values.env.pi_envs.rabbitmq_user_key) so the Secret rendering for
AMAZONMQ_SECRET_ARN and the ConfigMap use the same resolved value.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Run ID: 5ed5ef91-250e-4ee3-8f36-52d72d7ddf3c

📥 Commits

Reviewing files that changed from the base of the PR and between c39e66f and 53bf94f.

📒 Files selected for processing (1)
  • charts/plane-enterprise/templates/config-secrets/pi-api-env.yaml

Comment on lines +119 to +122
{{- if and (not (empty .Values.env.apiSecrets.amazonmq_secret_arn)) (not (empty .Values.env.pi_envs.rabbitmq_password_key)) (not (empty .Values.env.pi_envs.rabbitmq_user_key)) }}
RABBITMQ_PASSWORD_KEY: {{ .Values.env.pi_envs.rabbitmq_password_key | quote }}
RABBITMQ_USER_KEY: {{ .Values.env.pi_envs.rabbitmq_user_key | quote }}
{{- end }}
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟠 Major

Inconsistent condition: ConfigMap uses direct value while Secret uses resolved variable.

Line 76 uses $resolvedAmazonmqSecretArn (which respects the PI-specific override), but line 119 checks only .Values.env.apiSecrets.amazonmq_secret_arn. If a user sets only the PI-specific services.pi.apiSecrets.amazonmq_secret_arn, the Secret entry AMAZONMQ_SECRET_ARN will render, but these ConfigMap key mappings won't—causing a partial and likely broken configuration.

Proposed fix to use the resolved variable consistently
-  {{- if and (not (empty .Values.env.apiSecrets.amazonmq_secret_arn)) (not (empty .Values.env.pi_envs.rabbitmq_password_key)) (not (empty .Values.env.pi_envs.rabbitmq_user_key)) }}
+  {{- if and (not (empty $resolvedAmazonmqSecretArn)) (not (empty .Values.env.pi_envs.rabbitmq_password_key)) (not (empty .Values.env.pi_envs.rabbitmq_user_key)) }}
   RABBITMQ_PASSWORD_KEY: {{ .Values.env.pi_envs.rabbitmq_password_key | quote }}
   RABBITMQ_USER_KEY: {{ .Values.env.pi_envs.rabbitmq_user_key | quote }}
   {{- end }}
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
{{- if and (not (empty .Values.env.apiSecrets.amazonmq_secret_arn)) (not (empty .Values.env.pi_envs.rabbitmq_password_key)) (not (empty .Values.env.pi_envs.rabbitmq_user_key)) }}
RABBITMQ_PASSWORD_KEY: {{ .Values.env.pi_envs.rabbitmq_password_key | quote }}
RABBITMQ_USER_KEY: {{ .Values.env.pi_envs.rabbitmq_user_key | quote }}
{{- end }}
{{- if and (not (empty $resolvedAmazonmqSecretArn)) (not (empty .Values.env.pi_envs.rabbitmq_password_key)) (not (empty .Values.env.pi_envs.rabbitmq_user_key)) }}
RABBITMQ_PASSWORD_KEY: {{ .Values.env.pi_envs.rabbitmq_password_key | quote }}
RABBITMQ_USER_KEY: {{ .Values.env.pi_envs.rabbitmq_user_key | quote }}
{{- end }}
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@charts/plane-enterprise/templates/config-secrets/pi-api-env.yaml` around
lines 119 - 122, The condition gating the RABBITMQ_* entries is inconsistent
with the ConfigMap: replace the direct check of
.Values.env.apiSecrets.amazonmq_secret_arn with the PI-resolved variable so both
use the same source of truth; specifically, update the if expression that
currently tests .Values.env.apiSecrets.amazonmq_secret_arn to test
$resolvedAmazonmqSecretArn (and keep the checks for
.Values.env.pi_envs.rabbitmq_password_key and
.Values.env.pi_envs.rabbitmq_user_key) so the Secret rendering for
AMAZONMQ_SECRET_ARN and the ConfigMap use the same resolved value.

@pratapalakshmi pratapalakshmi changed the title Update Plane-EE Helm Chart to version v2.3.0 [INFRA-317] Update Plane-EE Helm Chart to version v2.3.0 Mar 24, 2026
@makeplane
Copy link
Copy Markdown

makeplane Bot commented Mar 24, 2026

Linked to Plane Work Item(s)

This comment was auto-generated by Plane

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant