-
Notifications
You must be signed in to change notification settings - Fork 1.4k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Distinguish between different unnamed node ports when preserving #4026
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
Distinguish between different unnamed node ports when preserving |
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -196,6 +196,9 @@ func TestServiceActionExecute(t *testing.T) { | |
{ | ||
NodePort: 8080, | ||
}, | ||
{ | ||
NodePort: 9090, | ||
}, | ||
}, | ||
}, | ||
}, | ||
|
@@ -212,6 +215,7 @@ func TestServiceActionExecute(t *testing.T) { | |
{ | ||
NodePort: 8080, | ||
}, | ||
{}, | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. What is this for? There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. We preserve the There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I added this to the test because the bug in the code was removing or preserving all nodeports based on the presence or absence of any unnamed node ports, rather than just preserving the specific unnamed ports found in the config. |
||
}, | ||
}, | ||
}, | ||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@sseago
Could you please explain why this check is necessary, and could you please add a test case to justify this condition?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The intent of the preserve node ports functionality is if a named port is found in the last applied configuration that matches a named port in the Service, its
nodePort
field is retained, and if a named port in the service does not have a match in that annotation, thenodePort
field is removed. For unnamed node ports, we need to perform the same matching on the nodePort value.The prior version of this inserted an empty entry into explicitNodePorts if there was no name. The effect was that if any unnamed node ports were listed in the configuration annotation, then all unnamed node ports were preserved, which does not match the intended goal. The fix is to track named nodeports by name and unnamed nodeports by port number. So if this port has a name, we compare it to the node port name list from the annotation, and if this port has no name, then we compare its port number to the unnamed nodeport number list from the annotation.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
For a test of this, see the modified service_action_test below. I've added a second NodePort value that doesn't match the annotation, so we see one is preserved and one is not for the
port.Name == ""
case, and the previously existing named node port test case handles testing this for theport.Name != ""
case.There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Without this fix, the below test case modification resulted in a test failure since it preserved both unnamed ports rather than just the one that matched.