You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
I was creating an internal task to create generic Kubernetes secrets on-demand.
Imagine the following:
global:inject-external-secrets-token:
desc: Inject a token into Kubernetes, ready for External Secrets to read variables from Gitlab (task pepe TOKEN_NAME=cluster-01)requires:
vars: [ TOKEN_NAME ]cmds:
- task: kubernetes:create-generic-secretvars:
GITLAB_ACCESS_TOKEN:
sh: cat {{ .GITLAB_ACCESS_TOKENS_TEMPORARY_DIR }}/{{ .TOKEN_NAME }}.json | jq '.token'# Main variables (these are probably required)NAME: "test"NAMESPACE: "default"CONTENT: | token={{ .GITLAB_ACCESS_TOKEN }}
The issue I'm facing is about expanding variables when using long lined strings in YAML. The following does not work:
CONTENT: | token={{ .GITLAB_ACCESS_TOKEN }}
while the following does:
CONTENT: "{{ .GITLAB_ACCESS_TOKEN }}"
To deal with it, I have done an extended task that does exactly this, more or less. It's not perfect but t can be useful for users dealing with this until this is fixed in the main project:
# This is a special task to create generic secrets on Kubernetes. It receives a variable called 'CONTENT'# which is a line-separated list of key=value to put into the secret. As Task can not expand variables in that way# I made the same using Golang template, so if some value matches the name of a defined variable, it's value will# be replaced with the value from the variable.## vars:# TEST: test_value# CONTENT: |# token=TEST -----> token=test_value#create-generic-secret:
desc: Create a generic secret on your Kubernetes clustersummary: | Create a generic secret on your Kubernetes cluster It will delete existing secret before creating the new one. Please make sure you don't need the old one before starting.prompt: This will remove the previous existing secret if found... Do you want to continue?required:
vars: [ NAME, NAMESPACE, CONTENT ]cmds:
- kubectl delete secret {{ .NAME }} --namespace {{ .NAMESPACE | default "default" }}
- | kubectl create secret generic {{ .NAME }} --namespace {{ .NAMESPACE | default "default" }} {{- $this := . -}} {{/* Each line should be a literal */}} {{- $lines := .CONTENT | splitLines -}} {{- range $i, $line := $lines -}} {{/* Drop lines not matching the pattern */}} {{- if not (regexMatch `(.*?)=(.*?)` $line) -}} {{- continue -}} {{- end -}} {{/* Replace vars on matching lines when possible */}} {{- $literalKeyValue := $line | split "=" -}} {{- $key := $literalKeyValue._0 -}} {{- $value := default $literalKeyValue._1 (get $this $literalKeyValue._1) -}} {{- printf " --from-literal %s=%s " $key $value -}} {{- end -}}
I was creating an internal task to create generic Kubernetes secrets on-demand.
Imagine the following:
The issue I'm facing is about expanding variables when using long lined strings in YAML. The following does not work:
while the following does:
To deal with it, I have done an extended task that does exactly this, more or less. It's not perfect but t can be useful for users dealing with this until this is fixed in the main project:
Can you take a look? :)
The text was updated successfully, but these errors were encountered: