mirror of
https://github.com/helmfile/helmfile.git
synced 2026-10-18 23:59:16 +02:00
Feature/support env hcl and interpolations (#1423)
* support HCL language for env variables Signed-off-by: xtphate <65117176+XT-Phate@users.noreply.github.com>
This commit is contained in:
@@ -0,0 +1,4 @@
|
||||
helmfileArgs:
|
||||
- template
|
||||
- --concurrency=1
|
||||
- -q
|
||||
@@ -0,0 +1,38 @@
|
||||
environments:
|
||||
default:
|
||||
values:
|
||||
- values1.hcl
|
||||
- values1.yaml
|
||||
- values2.hcl
|
||||
---
|
||||
|
||||
helmDefaults:
|
||||
kubeContext: minikube
|
||||
|
||||
releases:
|
||||
|
||||
- name: hcl-demo
|
||||
chart: ../../charts/raw-0.1.0
|
||||
values:
|
||||
- templates:
|
||||
- |
|
||||
apiVersion: v1
|
||||
kind: ConfigMap
|
||||
metadata:
|
||||
name: configmap
|
||||
data:
|
||||
a: {{ .Values.a }}
|
||||
b: {{ .Values.b }}
|
||||
c: {{ .Values.c }}
|
||||
crossfile: {{ .Values.crossfile }}
|
||||
expressionInText: "{{ .Values.expressionInText }}"
|
||||
fromMap: {{ .Values.fromMap }}
|
||||
insideFor: {{ .Values.insideFor }}
|
||||
list: "{{ .Values.list }}"
|
||||
{{- .Values.locals | toYaml | nindent 10 -}}
|
||||
multiBlock: {{ .Values.multiBlock }}
|
||||
simpleCompute: "{{ .Values.simpleCompute }}"
|
||||
yamlOverride: {{ .Values.yamlOverride }}
|
||||
|
||||
|
||||
|
||||
@@ -0,0 +1,20 @@
|
||||
---
|
||||
# Source: raw/templates/resources.yaml
|
||||
apiVersion: v1
|
||||
kind: ConfigMap
|
||||
metadata:
|
||||
name: configmap
|
||||
data:
|
||||
a: a
|
||||
b: b
|
||||
c: ab
|
||||
crossfile: values2.hcl
|
||||
expressionInText: "yes"
|
||||
fromMap: ab
|
||||
insideFor: b
|
||||
list: "[b]"
|
||||
filename: values1.hcl
|
||||
multiBlock: block
|
||||
simpleCompute: "4"
|
||||
yamlOverride: yaml_overrode
|
||||
|
||||
@@ -0,0 +1,53 @@
|
||||
locals {
|
||||
filename = "values1.hcl"
|
||||
}
|
||||
|
||||
values {
|
||||
a = "a"
|
||||
b = "b"
|
||||
c = "${hv.a}${hv.b}"
|
||||
|
||||
list = [
|
||||
hv.b
|
||||
]
|
||||
|
||||
locals = local
|
||||
|
||||
// Maps and some functions
|
||||
nestedmap = {
|
||||
submap = {
|
||||
subsubmap = {
|
||||
hello = hv.a
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
nestedmap2 = {
|
||||
submap = {
|
||||
subsubmap = {
|
||||
hello = hv.c
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
merged = merge(hv.nestedmap, hv.nestedmap2)
|
||||
fromMap = "${hv.merged.submap.subsubmap.hello}"
|
||||
|
||||
// precedence demo
|
||||
yamlOverride = "yaml_overrode"
|
||||
|
||||
|
||||
// Simple Expressions
|
||||
ternary = true ? true : false
|
||||
expressionInText = "%{if hv.ternary }yes%{else}no%{endif}"
|
||||
insideFor = "%{for i in hv.list }${i}%{endfor}"
|
||||
simpleCompute = 2 + 2
|
||||
|
||||
multiBlock = hv.block
|
||||
|
||||
crossfile = hv.crossfile_var
|
||||
}
|
||||
|
||||
values {
|
||||
block = "block"
|
||||
}
|
||||
@@ -0,0 +1 @@
|
||||
yamlOverride: "will_be_overriden"
|
||||
@@ -0,0 +1,7 @@
|
||||
locals {
|
||||
filename = "values2.hcl"
|
||||
}
|
||||
|
||||
values {
|
||||
crossfile_var = local.filename
|
||||
}
|
||||
@@ -94,6 +94,7 @@ ${kubectl} create namespace ${test_ns} || fail "Could not create namespace ${tes
|
||||
. ${dir}/test-cases/chartify.sh
|
||||
. ${dir}/test-cases/deps-mr-1011.sh
|
||||
. ${dir}/test-cases/deps-kustomization-i-1402.sh
|
||||
. ${dir}/test-cases/hcl-secrets.sh
|
||||
|
||||
# ALL DONE -----------------------------------------------------------------------------------------------------------
|
||||
|
||||
|
||||
@@ -0,0 +1,28 @@
|
||||
|
||||
export VAULT_ADDR=http://127.0.0.1:8200
|
||||
export VAULT_TOKEN=toor
|
||||
info "Inject sops key"
|
||||
sops="sops --hc-vault-transit $VAULT_ADDR/v1/sops/keys/key"
|
||||
|
||||
hcl_secrets_case_input_dir="${cases_dir}/hcl-secrets/input"
|
||||
hcl_secrets_case_output_dir="${cases_dir}/hcl-secrets/output"
|
||||
|
||||
mkdir -p ${hcl_secrets_case_input_dir}/tmp
|
||||
|
||||
info "Encrypt secrets"
|
||||
${sops} -e ${hcl_secrets_case_input_dir}/secrets.hcl > ${hcl_secrets_case_input_dir}/tmp/secrets.hcl || fail "${sops} failed at ${hcl_secrets_case_input_dir}/secrets.hcl"
|
||||
${sops} -e ${hcl_secrets_case_input_dir}/secrets.yaml > ${hcl_secrets_case_input_dir}/tmp/secrets.yaml || fail "${sops} failed at ${hcl_secrets_case_input_dir}/secrets.yaml"
|
||||
|
||||
|
||||
info "values precedence order : yamlFile < hcl = hclSecrets < secretYamlFile"
|
||||
test_start "hcl-yaml-mix - should output secrets with proper overrides"
|
||||
|
||||
hcl_secrets_tmp=$(mktemp -d)
|
||||
result=${hcl_secrets_tmp}/result.yaml
|
||||
|
||||
info "Building output"
|
||||
${helmfile} -f ${hcl_secrets_case_input_dir}/_helmfile.yaml.gotmpl template --skip-deps > ${result} || fail "\"helmfile template\" shouldn't fail"
|
||||
diff -u ${hcl_secrets_case_output_dir}/output.yaml ${result} || fail "helmdiff should be consistent"
|
||||
echo code=$?
|
||||
|
||||
test_pass "hcl-yaml-mix"
|
||||
@@ -0,0 +1,28 @@
|
||||
environments:
|
||||
default:
|
||||
values:
|
||||
- values.hcl
|
||||
- values.yaml
|
||||
secrets:
|
||||
- tmp/secrets.hcl
|
||||
- tmp/secrets.yaml
|
||||
---
|
||||
|
||||
helmDefaults:
|
||||
kubeContext: minikube
|
||||
|
||||
releases:
|
||||
|
||||
- name: hcl-demo
|
||||
chart: ../../../charts/raw
|
||||
values:
|
||||
- templates:
|
||||
- |
|
||||
apiVersion: v1
|
||||
kind: ConfigMap
|
||||
metadata:
|
||||
name: configmap
|
||||
data:
|
||||
secretOveriddenByPrecedence: {{ .Values.secretOveriddenByPrecedence }}
|
||||
secretRef: {{ .Values.secretref }}
|
||||
yamlOverride: {{ .Values.yamlOverride }}
|
||||
@@ -0,0 +1,3 @@
|
||||
values {
|
||||
secret = "mySecretValue"
|
||||
}
|
||||
@@ -0,0 +1 @@
|
||||
secretOveriddenByPrecedence: OverrodeHclVarByPrecedence
|
||||
@@ -0,0 +1,6 @@
|
||||
values {
|
||||
// Secrets and precedence demo
|
||||
secretref = upper(hv.secret)
|
||||
yamlOverride = "yaml_overrode"
|
||||
secretOveriddenByPrecedence = "will_be_overwrittten"
|
||||
}
|
||||
@@ -0,0 +1 @@
|
||||
yamlOverride: "will_be_overriden"
|
||||
@@ -0,0 +1,11 @@
|
||||
---
|
||||
# Source: raw/templates/resources.yaml
|
||||
apiVersion: v1
|
||||
kind: ConfigMap
|
||||
metadata:
|
||||
name: configmap
|
||||
data:
|
||||
secretOveriddenByPrecedence: OverrodeHclVarByPrecedence
|
||||
secretRef: MYSECRETVALUE
|
||||
yamlOverride: yaml_overrode
|
||||
|
||||
Reference in New Issue
Block a user