-
Notifications
You must be signed in to change notification settings - Fork 22
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
fixes #1258 controller updates deployment when headless boolean is up… #102
base: main
Are you sure you want to change the base?
Conversation
…dated Signed-off-by: Horiodino <[email protected]>
[APPROVALNOTIFIER] This PR is NOT APPROVED This pull-request has been approved by: Horiodino The full list of commands accepted by this bot can be found here.
Needs approval from an approver in each of these files:
Approvers can indicate their approval by writing |
Hi @Horiodino. Thanks for your PR. I'm waiting for a devfile member to verify that this patch is reasonable to test. If it is, they should reply with Once the patch is verified, the new status will be reflected by the I understand the commands that are listed here. Instructions for interacting with me using PR comments are available here. If you have questions or suggestions related to my behavior, please file an issue against the kubernetes-sigs/prow repository. |
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.
/ok-to-test
controllers/update.go
Outdated
@@ -84,6 +85,19 @@ func (r *DevfileRegistryReconciler) updateDeployment(ctx context.Context, cr *re | |||
needsUpdating = true | |||
} | |||
} | |||
headlessStatus := dep.Spec.Template.Spec.Containers[0].Env |
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.
Is it possible to rename this var to be more clear that it is the array of all env vars for the container?
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.
Not able to get it to update when the headless is altered. Currently deploying with
apiVersion: registry.devfile.io/v1alpha1
kind: DevfileRegistry
metadata:
name: devfile-registry
spec:
telemetry:
registryName: test
k8s:
ingressDomain: testing-registry
tls:
enabled: false
headless: true
and when running kubectl apply -n devfile registry -f <path to yaml>
with this file:
apiVersion: registry.devfile.io/v1alpha1
kind: DevfileRegistry
metadata:
name: devfile-registry
spec:
telemetry:
registryName: test
k8s:
ingressDomain: testing-registry
tls:
enabled: false
headless: false
It does not update. I also noticed that if you remove headless
altogether then it segfaults as a memory issue, could be a one off but worth looking into.
Was this working for you/was it tested? @michael-valdron @thepetk have either of you been able to reproduce?
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.
Left a comment to get more info. I think the current feature needs to have some test cases too.
controllers/update.go
Outdated
headlessStatus := dep.Spec.Template.Spec.Containers[0].Env | ||
|
||
for _, env := range headlessStatus { | ||
if env.Name == "REGISTRY_HEADLESS" { |
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.
I have some time to check this part of the code, so I'm not sure I understand the purpose of the env var usage here. Could you elaborate?
From my point of view, I would expect us here to:
- Compare the existing headless status with the new one.
- We could fetch the existing from
dep.Spec.Template.Spec.Headless
- We could create (IIRC we don't have one) a function to get the headless status from the
registryv1alpha1.DevfileRegistry
resource. - In case the two of them are different assign the current value to the existing one and update the
needsUpdating
variable totrue
.
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.
We could create (IIRC we don't have one) a function to get the headless status from the registryv1alpha1.DevfileRegistry resource.
im comparing on the basis of deployment , i also taught about that but saw this
https://github.com/Horiodino/registry-operator/blob/headless-boolean/pkg/registry/deployment.go#L286
so i didn't added anything.
is that same thing or different ?
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.
That looks like it is setting the headless value but I believe @thepetk is wanting a checker function to easily grab the headless value from a CR
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.
but the here headlessStatus := dep.Spec.Template.Spec.Containers[0].Env
dep
is CR isit ?
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.
@Horiodino yes dep
is a CR but the built-in Kubernetes Deployment CR
to be more specific.
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.
ah its not the user defined one right , theirs not any wrapper for getting that CR correct ?
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.
Not that I can think of off the top of my head, I think just abstracting your piece of code into a function that takes in a deployment cr and fetches the headless env and returns what it is would be good to add pieces that can easily be tested with unit tests. So I would recommend doing that and adding unit tests for it. Side note, you can deploy the operator and registry on Kubernetes (Minikube/Kind) locally and can verify what happens when you change the headless value, I know during my run throughs it wasn't adding/removing the registry-viewer container as expected
Signed-off-by: Horiodino <[email protected]>
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.
I am still unable to get this to spin up/spin down the viewer depending on the value of the headless
env var. If I deploy with headless: true
and then re-apply after with headless: false
it does not spin up the viewer and vice-versa.
You are able to verify this by applying and deploying everything to Minikube/Kind, @Horiodino have you done this?
@thepetk do you experience the same things?
I feel that's because we're currently expecting that an env var is set for that purpose. I agree tho what @Jdubrick is at least my idea of the expected behavior |
The var is present in the index container but only if |
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.
After taking a look at this again, I believe the following is needed to get this working:
-
Updated Unit Tests
I would personally like to see the tests have more comprehensive coverage. What I mean by that is the tests should handle the case where a Deployment has it'sheadless
value changed after deployment and the appropriate response (viewer container is added/removed from pod) is taken. We would need to mock up the Deployment to do this in the tests. -
Add Deployment Update Logic
We are grabbing theheadless
value but I believe nothing is happening because we are relying onUpdate()
to do this for us, but I believe in order for that to work we need to physically alter the Deployment to include/exclude that viewer container based on theheadless
status. This would most likely include looking through at how the viewer container is added to the deployment normally (when the headless is false) and using that as a guide to either include/exclude it when headless changes.
Thanks for the suggestions! I’ve made some changes and will now write the test case. 👍 |
Description of Changes
checks if the environment variable "REGISTRY_HEADLESS" exists in headlessStatus, parses its value to a boolean, and sets needsUpdating to true if the parsed value differs from the Headless spec in the cr.Spec
Related Issue(s)
devfile/api#1258
Acceptance Criteria
Tests
Documentation
Tests Performed
Explain what tests you personally ran to ensure the changes are functioning as expected.
How To Test
Instructions for the reviewer on how to test your changes.
Running Unit Tests
Running Integration Tests
Notes To Reviewer
Any notes you would like to include for the reviewer.