Fix vMCP podTemplateSpec when only pod-level settings is applied #2897
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
This PR fixes a bug where applying a PodTemplateSpec with only pod-level settings would accidentally wipe out the controller-generated vmcp container.
The root cause was Go's JSON marshaling behavior - when we parsed the user's JSON into Go structs and re-marshaled it, nil slices became empty arrays ([]), which strategic merge patch interpreted as "delete all containers".
The fix is: we now use the raw JSON bytes directly from the user's PodTemplateSpec for the strategic merge patch, preserving exactly what they specified without any round-trip through Go structs.
I also added a regression test that explicitly verifies the container is preserved when only a nodeSelector is provided, improved error handling in the integration tests, and fixed an edge case for empty raw bytes.