Fix set flag are ignored when used in conjunction with jsonPatches (#867)

* Fix set flag are ignored when used in conjunction with jsonPatches

Signed-off-by: xiaomudk <xiaomudk@gmail.com>
This commit is contained in:
xiaomudk 2023-05-24 07:29:19 +08:00 committed by GitHub
parent 8b3ad5b793
commit c498af3f52
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
7 changed files with 171 additions and 0 deletions

View File

@ -251,6 +251,7 @@ func (a *App) Template(c TemplateConfigProvider) error {
Validate: c.Validate(),
Concurrency: c.Concurrency(),
IncludeTransitiveNeeds: c.IncludeNeeds(),
Set: c.Set(),
}, func() {
ok, errs = a.template(run, c)
})

View File

@ -1052,6 +1052,7 @@ type ChartPrepareOptions struct {
IncludeTransitiveNeeds bool
Concurrency int
KubeVersion string
Set []string
}
type chartPrepareResult struct {
@ -1225,6 +1226,11 @@ func (st *HelmState) PrepareCharts(helm helmexec.Interface, dir string, concurre
chartifyOpts.KubeVersion = release.KubeVersion
chartifyOpts.ApiVersions = release.ApiVersions
var flags []string
for _, s := range opts.Set {
flags = append(flags, "--set", s)
}
chartifyOpts.SetFlags = flags
out, err := c.Chartify(release.Name, chartPath, chartify.WithChartifyOpts(chartifyOpts))
if err != nil {

View File

@ -84,6 +84,7 @@ ${kubectl} create namespace ${test_ns} || fail "Could not create namespace ${tes
. ${dir}/test-cases/yaml-overwrite.sh
. ${dir}/test-cases/chart-needs.sh
. ${dir}/test-cases/postrender.sh
. ${dir}/test-cases/chartify.sh
# ALL DONE -----------------------------------------------------------------------------------------------------------

View File

@ -0,0 +1,27 @@
chartify_case_input_dir="${cases_dir}/chartify/input"
chartify_case_output_dir="${cases_dir}/chartify/output"
config_file="helmfile.yaml"
if [[ ${HELMFILE_V1MODE} = true ]]; then
pushd "${chartify_case_input_dir}"
mv "${config_file}" "${config_file}.gotmpl"
config_file="${config_file}.gotmpl"
popd
fi
chartify_tmp=$(mktemp -d)
chartify_template_reverse=${chartify_tmp}/chartify.template.log
test_start "helmfile template with chartify"
info "Comparing template/chartify"
${helmfile} -f ${chartify_case_input_dir}/${config_file} template > ${chartify_template_reverse} || fail "\"helmfile template\" shouldn't fail"
./dyff between -bs ${chartify_case_output_dir}/template ${chartify_template_reverse} || fail "\"helmfile template\" should be consistent"
info "Comparing template/chartify with set"
${helmfile} -f ${chartify_case_input_dir}/${config_file} template --set image.tag=v2 > ${chartify_template_reverse} || fail "\"helmfile template\" shouldn't fail"
./dyff between -bs ${chartify_case_output_dir}/template-set ${chartify_template_reverse} || fail "\"helmfile template\" should be consistent"
test_pass "helmfile template with chartify"

View File

@ -0,0 +1,14 @@
releases:
- name: httpbin
chart: ../../../charts/httpbin
jsonPatches:
- target:
group: apps
version: v1
kind: Deployment
name: httpbin-httpbin
patch:
- path: "/spec/strategy/type"
op: replace
value: Recreate

View File

@ -0,0 +1,61 @@
---
# Source: httpbin/templates/patched_resources.yaml
apiVersion: v1
kind: Service
metadata:
labels:
app: httpbin
chart: httpbin-0.1.0
heritage: Helm
release: httpbin
name: httpbin-httpbin
spec:
ports:
- name: httpbin
port: 8000
protocol: TCP
targetPort: 8000
selector:
app: httpbin
release: httpbin
type: LoadBalancer
---
# Source: httpbin/templates/patched_resources.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: httpbin
chart: httpbin-0.1.0
heritage: Helm
release: httpbin
name: httpbin-httpbin
spec:
replicas: 1
selector:
matchLabels:
app: httpbin
strategy:
type: Recreate
template:
metadata:
labels:
app: httpbin
release: httpbin
spec:
containers:
- image: docker.io/citizenstig/httpbin:latest
imagePullPolicy: IfNotPresent
livenessProbe:
httpGet:
path: /
port: 8000
name: httpbin
ports:
- containerPort: 8000
readinessProbe:
httpGet:
path: /
port: 8000
resources: {}
status: {}

View File

@ -0,0 +1,61 @@
---
# Source: httpbin/templates/patched_resources.yaml
apiVersion: v1
kind: Service
metadata:
labels:
app: httpbin
chart: httpbin-0.1.0
heritage: Helm
release: httpbin
name: httpbin-httpbin
spec:
ports:
- name: httpbin
port: 8000
protocol: TCP
targetPort: 8000
selector:
app: httpbin
release: httpbin
type: LoadBalancer
---
# Source: httpbin/templates/patched_resources.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: httpbin
chart: httpbin-0.1.0
heritage: Helm
release: httpbin
name: httpbin-httpbin
spec:
replicas: 1
selector:
matchLabels:
app: httpbin
strategy:
type: Recreate
template:
metadata:
labels:
app: httpbin
release: httpbin
spec:
containers:
- image: docker.io/citizenstig/httpbin:v2
imagePullPolicy: IfNotPresent
livenessProbe:
httpGet:
path: /
port: 8000
name: httpbin
ports:
- containerPort: 8000
readinessProbe:
httpGet:
path: /
port: 8000
resources: {}
status: {}