101 lines
3.7 KiB
Bash
Executable File
101 lines
3.7 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
|
|
# Test for issue #2291: strategicMergePatches should NOT cause CRDs to be removed
|
|
# Issue: https://github.com/helmfile/helmfile/issues/2291
|
|
#
|
|
# Problem: When using strategicMergePatches, chartify was relocating CRDs from
|
|
# templates/crds/ to the root crds/ directory, changing how Helm manages them.
|
|
# This caused helm diff to incorrectly show CRDs as being removed.
|
|
#
|
|
# Fix: Chartify now preserves the original CRD location (templates/crds/)
|
|
|
|
issue_2291_input_dir="${cases_dir}/issue-2291/input"
|
|
issue_2291_tmp_dir=$(mktemp -d)
|
|
|
|
# Cleanup function to ensure resources are removed even if test fails
|
|
cleanup_issue_2291() {
|
|
${helm} uninstall test-release-2291 --namespace ${test_ns} 2>/dev/null || true
|
|
${kubectl} delete crd testresources.test.io 2>/dev/null || true
|
|
rm -rf "${issue_2291_tmp_dir}"
|
|
}
|
|
trap cleanup_issue_2291 EXIT
|
|
|
|
test_start "issue-2291: CRDs preserved with strategicMergePatches"
|
|
|
|
# Test 1: Template the chart to verify CRDs are included
|
|
info "Step 1: Templating chart to verify CRD structure"
|
|
${helmfile} -f "${issue_2291_input_dir}/helmfile.yaml" template > "${issue_2291_tmp_dir}/templated.yaml" 2>&1
|
|
code=$?
|
|
|
|
if [ $code -ne 0 ]; then
|
|
cat "${issue_2291_tmp_dir}/templated.yaml"
|
|
fail "Failed to template chart"
|
|
fi
|
|
|
|
# Verify CRD is in the templated output
|
|
if ! grep -q "kind: CustomResourceDefinition" "${issue_2291_tmp_dir}/templated.yaml"; then
|
|
cat "${issue_2291_tmp_dir}/templated.yaml"
|
|
fail "CRD not found in templated output"
|
|
fi
|
|
|
|
info "✓ CRD found in templated output"
|
|
|
|
# Verify the CRD name
|
|
if ! grep -q "name: testresources.test.io" "${issue_2291_tmp_dir}/templated.yaml"; then
|
|
cat "${issue_2291_tmp_dir}/templated.yaml"
|
|
fail "Expected CRD 'testresources.test.io' not found"
|
|
fi
|
|
|
|
info "✓ CRD testresources.test.io found"
|
|
|
|
# Test 2: Apply the chart with strategicMergePatches
|
|
info "Step 2: Applying chart with strategicMergePatches"
|
|
${helmfile} -f "${issue_2291_input_dir}/helmfile.yaml" apply --suppress-diff > "${issue_2291_tmp_dir}/apply.txt" 2>&1
|
|
code=$?
|
|
|
|
if [ $code -ne 0 ]; then
|
|
cat "${issue_2291_tmp_dir}/apply.txt"
|
|
fail "Failed to apply chart"
|
|
fi
|
|
|
|
info "✓ Chart applied successfully"
|
|
|
|
# Test 3: Verify CRD was created
|
|
info "Step 3: Verifying CRD was installed"
|
|
if ! ${kubectl} get crd testresources.test.io > /dev/null 2>&1; then
|
|
fail "CRD testresources.test.io was not installed"
|
|
fi
|
|
|
|
info "✓ CRD testresources.test.io is installed"
|
|
|
|
# Test 4: Run diff - should show NO changes (especially NO CRD removal)
|
|
info "Step 4: Running diff - should show no CRD removal"
|
|
${helmfile} -f "${issue_2291_input_dir}/helmfile.yaml" diff > "${issue_2291_tmp_dir}/diff.txt" 2>&1
|
|
|
|
# Check if diff shows CRD being removed (the bug we're fixing).
|
|
# Note: Exit code is not checked since helmfile diff returns 2 when differences exist.
|
|
if grep -q "testresources.test.io.*will be deleted" "${issue_2291_tmp_dir}/diff.txt" || \
|
|
grep -q "testresources.test.io.*removed" "${issue_2291_tmp_dir}/diff.txt" || \
|
|
grep -q -- "- kind: CustomResourceDefinition" "${issue_2291_tmp_dir}/diff.txt"; then
|
|
cat "${issue_2291_tmp_dir}/diff.txt"
|
|
fail "BUG DETECTED: helm diff shows CRD being removed (issue #2291 regression)"
|
|
fi
|
|
|
|
info "✓ CRD is NOT marked for removal"
|
|
|
|
# Test 5: Verify Deployment has the DNS patch applied
|
|
info "Step 5: Verifying strategic merge patch was applied to Deployment"
|
|
if ! ${kubectl} get deployment test-app -o yaml | grep -q "ndots"; then
|
|
fail "DNS patch was not applied to Deployment"
|
|
fi
|
|
|
|
info "✓ Strategic merge patch applied successfully"
|
|
|
|
# Cleanup is handled by the trap, but we do it explicitly here too
|
|
# and then remove the trap before test_pass to avoid double cleanup
|
|
info "Cleaning up"
|
|
cleanup_issue_2291
|
|
trap - EXIT
|
|
|
|
test_pass "issue-2291: CRDs preserved with strategicMergePatches"
|