Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat!: harmonize service account binding #major #363

Open
wants to merge 2 commits into
base: master
Choose a base branch
from

Conversation

aslafy-z
Copy link
Collaborator

@aslafy-z aslafy-z commented Nov 15, 2024

Closes #320
Closes #361

  • BREAKING: Rename rbac.serviceAccount.enabled field to rbac.serviceAccount.create.

  • Fix inconsistencies in serviceAccount binding across CronJob, Job, and Deployment templates by introducing a new application.serviceAccountName template:

    rbac.serviceAccount.create rbac.serviceAccount.name result
    true "" (include "application.name" .)
    true "foo" "foo"
    false "" "default"
    false "bar" "bar"

@aslafy-z aslafy-z force-pushed the aslafy-z-patch-3 branch 2 times, most recently from 0ef820d to 7d495fb Compare November 15, 2024 12:05
@aslafy-z aslafy-z requested a review from d3adb5 November 15, 2024 12:07
Copy link
Collaborator

@d3adb5 d3adb5 left a comment

Choose a reason for hiding this comment

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

Left a few comments. I like the idea of adding a semantic value like this, but I feel the way it currently is introduces more confusion than clarity. I expanded upon this in one of the threads I opened below.

Comment on lines 73 to 75
{{- if .Values.rbac.enabled }}
{{- if and .Values.rbac.serviceAccount.enabled .Values.rbac.existingServiceAccountName }}
{{- fail "Conflict: 'rbac.existingServiceAccountName' is set, but a new service account is being created. Please disable 'rbac.serviceAccount.enabled' or unset 'rbac.existingServiceAccountName'." }}
Copy link
Collaborator

Choose a reason for hiding this comment

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

I fear that this may just cause confusion when reading release values later down the line. I'd much rather have .Values.rbac.enabled be changed to .Values.rbac.create instead, but I realize that would be a breaking change. The way things are in this PR, I find it a bit confusing for a release using an existing service account:

  • .Values.rbac.serviceAccount.name exists, but is completely empty, meaning default or disabled. The comments hint at the default value being {{ include "application.name" $ }}.
  • .Values.rbac.serviceAccount.enabled exists and is set to false. What that means is unclear unless we peek into the templates or make an assumption based on widely available charts.
  • .Values.rbac.existingServiceAccount exists is finally what we were expecting. Its mere presence introduces branching in the line of code this thread highlights.

If instead we had .Values.rbac.serviceAccount.create as a boolean defaulting to false, .Values.rbac.serviceAccount.name would always have the name of the mounted (when applicable) service account.

Do you believe this legibility tradeoff is enough to justify a breaking change? I find myself unable to make that judgment.

Copy link
Collaborator Author

Choose a reason for hiding this comment

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

I renamed enabled to create for it to be aligned with what is done in the community. I personally don't care about breaking changes if they are clearly indicated as such and major is bumped. I prefer to consistent and easily understandable APIs, over over-engineering for compatible solutions, even if it come with the cost of a breaking change. This is my personal take, I think it works for this chart. WDYT?

{{- if .Values.rbac.serviceAccount.enabled }}
{{- default (include "application.name" .) .Values.rbac.serviceAccount.name }}
{{- else }}
{{- default "null" .Values.rbac.existingServiceAccountName }}
Copy link
Collaborator

Choose a reason for hiding this comment

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

Edge case, may or may not be something to take into consideration: service accounts named null. Also, we're assuming the result of this partial template to be interpreted as YAML rather than a raw string, that may create confusion.

Suggested change
{{- default "null" .Values.rbac.existingServiceAccountName }}
{{- $saName := .Values.rbac.existingServiceAccountName }}
{{- empty $saName | ternary (quote $saName) "null" }}

Copy link
Collaborator Author

Choose a reason for hiding this comment

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

the partial now only returns strings, do you think i should still quote the output?

application/templates/_helpers.tpl Outdated Show resolved Hide resolved
@aslafy-z aslafy-z force-pushed the aslafy-z-patch-3 branch 4 times, most recently from 4662e88 to a6b974e Compare January 22, 2025 19:21
@aslafy-z aslafy-z changed the title feat: allow usage of existing service account feat!: allow usage of existing service account Jan 22, 2025
@aslafy-z aslafy-z changed the title feat!: allow usage of existing service account feat!: allow usage of existing service account #major Jan 22, 2025
@aslafy-z aslafy-z changed the title feat!: allow usage of existing service account #major feat!: harmonize service account binding #major Jan 22, 2025
@aslafy-z aslafy-z requested a review from d3adb5 January 22, 2025 19:33
@aslafy-z aslafy-z marked this pull request as ready for review January 22, 2025 19:35
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.

2 participants