mirror of
https://github.com/helmfile/helmfile.git
synced 2026-10-05 08:11:25 +02:00
* fix: apply post-renderer to output-dir-template output When --output-dir and --post-renderer are both passed to helm template, Helm writes pre-post-renderer content to files and sends post-renderer output to stdout. This workaround strips --output-dir from helm flags, captures the post-renderer-processed stdout, and writes it to the output directory. Fixes #2515 Signed-off-by: yxxhero <aiopsclub@163.com> * test: add integration test for issue-2515 (post-renderer with output-dir-template) Verifies that --post-renderer output is written to files when --output-dir-template is set, instead of pre-renderer content. Signed-off-by: yxxhero <aiopsclub@163.com> * fix: address review comments - correct HasPrefix args, fix output dir structure, fix test mock init Agent-Logs-Url: https://github.com/helmfile/helmfile/sessions/33d92423-fc47-4080-8307-5af9b16dd9c6 Co-authored-by: yxxhero <11087727+yxxhero@users.noreply.github.com> * fix: wrap file operation errors with context in post-renderer workaround Agent-Logs-Url: https://github.com/helmfile/helmfile/sessions/33d92423-fc47-4080-8307-5af9b16dd9c6 Co-authored-by: yxxhero <11087727+yxxhero@users.noreply.github.com> * fix: correct chart path and use absolute case dir path in integration test Agent-Logs-Url: https://github.com/helmfile/helmfile/sessions/43b7a794-1e7b-4577-8829-deb544a1a105 Co-authored-by: yxxhero <11087727+yxxhero@users.noreply.github.com> * fix: restrict --output-dir + --post-renderer workaround to Helm 3 only Agent-Logs-Url: https://github.com/helmfile/helmfile/sessions/229b14e2-b1ad-4f19-bd00-b8f7821383cd Co-authored-by: yxxhero <11087727+yxxhero@users.noreply.github.com> * fix: clean up stale templates dir on re-runs in Helm 3 post-renderer workaround Agent-Logs-Url: https://github.com/helmfile/helmfile/sessions/f6c66284-8eca-4db3-8711-c9b6d3a9c179 Co-authored-by: yxxhero <11087727+yxxhero@users.noreply.github.com> * fix: detect --post-renderer=<path> form and use targeted file cleanup Agent-Logs-Url: https://github.com/helmfile/helmfile/sessions/8c9e4af4-84ae-4cbd-bc0a-8fcd9adddaed Co-authored-by: yxxhero <11087727+yxxhero@users.noreply.github.com> * feat: add Helm 4 post-renderer plugin and enable Helm 4 issue-2515 integration test Agent-Logs-Url: https://github.com/helmfile/helmfile/sessions/3da2949c-a9d6-4e16-9b4a-a7e241080089 Co-authored-by: yxxhero <11087727+yxxhero@users.noreply.github.com> * fix: search recursively for YAML files in Helm 4 output-dir integration test Agent-Logs-Url: https://github.com/helmfile/helmfile/sessions/c5d33143-f611-40db-b73a-e5189d944ffd Co-authored-by: yxxhero <11087727+yxxhero@users.noreply.github.com> * fix: limit find depth and truncate log in Helm 4 integration test fallback message Agent-Logs-Url: https://github.com/helmfile/helmfile/sessions/c5d33143-f611-40db-b73a-e5189d944ffd Co-authored-by: yxxhero <11087727+yxxhero@users.noreply.github.com> --------- Signed-off-by: yxxhero <aiopsclub@163.com> Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
63 lines
3.2 KiB
Bash
63 lines
3.2 KiB
Bash
issue_2515_case_dir="$(cd "${cases_dir}/issue-2515" && pwd)"
|
|
issue_2515_tmp=$(mktemp -d)
|
|
|
|
# Determine the post-renderer argument.
|
|
# Helm 3 accepts an executable script; Helm 4 requires a plugin name.
|
|
if [ "${HELMFILE_HELM4}" = "1" ]; then
|
|
test_start "issue-2515 post-renderer with output-dir-template (Helm 4)"
|
|
info "Installing filter post-renderer plugin for Helm 4"
|
|
${helm} plugin uninstall filter &>/dev/null || true
|
|
${helm} plugin install ${issue_2515_case_dir}/input/helm-plugin-filter ${PLUGIN_INSTALL_FLAGS} || fail "Failed to install filter plugin"
|
|
issue_2515_postrenderer_arg="filter"
|
|
else
|
|
test_start "issue-2515 post-renderer with output-dir-template"
|
|
issue_2515_postrenderer_arg="${issue_2515_case_dir}/input/filter.bash"
|
|
fi
|
|
|
|
info "Testing that --post-renderer output is written to files when --output-dir-template is set"
|
|
|
|
issue_2515_output_dir="${issue_2515_tmp}/output"
|
|
|
|
${helmfile} -f ${issue_2515_case_dir}/input/helmfile.yaml \
|
|
template \
|
|
--post-renderer ${issue_2515_postrenderer_arg} \
|
|
--output-dir-template "${issue_2515_output_dir}/{{.Release.Name}}" \
|
|
&> ${issue_2515_tmp}/log || fail "helmfile template should not fail"
|
|
|
|
if [ "${HELMFILE_HELM4}" = "1" ]; then
|
|
# Helm 4 natively applies --post-renderer to --output-dir output.
|
|
# The directory structure may differ from Helm 3 (no guaranteed templates/ subdir),
|
|
# so search recursively for any YAML file. Fall back to stdout (log) if no files written.
|
|
issue_2515_output_file=$(find "${issue_2515_output_dir}" -maxdepth 5 -type f \( -name '*.yaml' -o -name '*.yml' \) 2>/dev/null | head -n 1)
|
|
if [ -z "${issue_2515_output_file}" ]; then
|
|
# Helm 4 may write post-rendered output to stdout rather than files
|
|
issue_2515_output_file="${issue_2515_tmp}/log"
|
|
if ! grep -q "postrendered" "${issue_2515_output_file}"; then
|
|
fail "Expected post-rendered YAML (namespace postrendered) in output files under ${issue_2515_output_dir} or stdout. Dir: $(find ${issue_2515_output_dir} 2>/dev/null || echo 'not found'). Log (last 50 lines): $(tail -50 ${issue_2515_output_file})"
|
|
fi
|
|
fi
|
|
else
|
|
issue_2515_templates_dir="${issue_2515_output_dir}/issue-2515/templates"
|
|
if [ ! -d "${issue_2515_templates_dir}" ]; then
|
|
fail "Expected templates directory ${issue_2515_templates_dir} to exist"
|
|
fi
|
|
issue_2515_output_file=$(find "${issue_2515_templates_dir}" -type f \( -name '*.yaml' -o -name '*.yml' \) | head -n 1)
|
|
if [ -z "${issue_2515_output_file}" ]; then
|
|
fail "Expected rendered YAML file under ${issue_2515_templates_dir}"
|
|
fi
|
|
fi
|
|
|
|
if grep -q "original-cm" "${issue_2515_output_file}"; then
|
|
fail "Output should contain post-renderer output (Namespace), not original templates (original-cm). File contents: $(cat ${issue_2515_output_file})"
|
|
fi
|
|
|
|
if ! grep -q "postrendered" "${issue_2515_output_file}"; then
|
|
fail "Output should contain post-renderer content (namespace postrendered). File contents: $(cat ${issue_2515_output_file})"
|
|
fi
|
|
|
|
if [ "${HELMFILE_HELM4}" = "1" ]; then
|
|
test_pass "issue-2515 post-renderer with output-dir-template (Helm 4)"
|
|
else
|
|
test_pass "issue-2515 post-renderer with output-dir-template"
|
|
fi
|