feat: add label intersection mode for precise pod targeting #777
+210
−10
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.
What this PR does / why we need it:
This PR adds support for label intersection mode when selecting target pods for chaos experiments, enabling precise pod targeting by matching ALL specified labels (AND logic) instead of the default union behavior that matches ANY label (OR logic).
Problem: Currently, multiple labels use UNION (OR) logic - selecting pods that match ANY label. This causes unintended pod selection when precise targeting is needed (e.g., "primary role AND specific cluster"). As noted in issue #774, when working with CloudNativePG clusters that have multiple instances with different roles, the union behavior selects too many pods.
Solution: Adds optional 4th parameter to TARGETS env variable:
Where mode can be
union(default) orintersectionExample:
Changes:
LabelMatchModefield toAppDetailsstructgetPodsWithIntersectionLabels()functionGetTargets()to parse optional mode parameterBackward Compatibility: Fully compatible - defaults to union mode
Which issue this PR fixes : fixes #774
Use Cases:
Checklist:
breaking-changestag - Not applicable (backward compatible)requires-upgradetag - Not applicablepkg/types/types_test.go)