Skip to content

Commit f31efad

Browse files
Pratik-Redhat-TechPratik Langde
authored andcommitted
Mark GitopsService-managed NodePlacement on ArgoCD create path
Set the managed-by annotation on defaultArgoCDInstance before create so clearing GitopsService placement later removes operator-applied placement for newly created instances too. Signed-off-by: Pratik Langde <plangde@redhat.com>
1 parent e71ec47 commit f31efad

2 files changed

Lines changed: 54 additions & 1 deletion

File tree

‎controllers/gitopsservice_controller.go‎

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -523,6 +523,14 @@ func (r *ReconcileGitopsService) reconcileDefaultArgoCDInstance(instance *pipeli
523523
}
524524
}
525525

526+
gitopsServiceConfiguresNodePlacement := len(instance.Spec.NodeSelector) > 0 || len(instance.Spec.Tolerations) > 0
527+
if gitopsServiceConfiguresNodePlacement {
528+
if defaultArgoCDInstance.Annotations == nil {
529+
defaultArgoCDInstance.Annotations = map[string]string{}
530+
}
531+
defaultArgoCDInstance.Annotations[common.NodePlacementManagedByGitopsServiceAnnotation] = "true"
532+
}
533+
526534
// Get or create ArgoCD instance in default namespace
527535
existingArgoCD := &argoapp.ArgoCD{}
528536
err = r.Client.Get(context.TODO(), types.NamespacedName{Name: defaultArgoCDInstance.Name, Namespace: defaultArgoCDInstance.Namespace}, existingArgoCD)
@@ -590,7 +598,6 @@ func (r *ReconcileGitopsService) reconcileDefaultArgoCDInstance(instance *pipeli
590598

591599
// Sync NodePlacement when GitopsService configures placement fields. Do not wipe NodePlacement
592600
// that admins set directly on the ArgoCD CR when GitopsService placement fields are empty.
593-
gitopsServiceConfiguresNodePlacement := len(instance.Spec.NodeSelector) > 0 || len(instance.Spec.Tolerations) > 0
594601
if gitopsServiceConfiguresNodePlacement {
595602
if defaultArgoCDInstance.Spec.NodePlacement != nil {
596603
if !reflect.DeepEqual(existingArgoCD.Spec.NodePlacement, defaultArgoCDInstance.Spec.NodePlacement) {

‎controllers/gitopsservice_controller_test.go‎

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -328,6 +328,52 @@ func TestReconcileDefaultArgoCDNodePlacementClearsWhenGitopsServiceCleared(t *te
328328
assert.Assert(t, !hasManagedAnnotation)
329329
}
330330

331+
func TestReconcileDefaultArgoCDNodePlacementClearsWhenCreatedByReconcile(t *testing.T) {
332+
logf.SetLogger(argocd.ZapLogger(true))
333+
s := scheme.Scheme
334+
addKnownTypesToScheme(s)
335+
336+
gitopsService := &pipelinesv1alpha1.GitopsService{
337+
ObjectMeta: v1.ObjectMeta{
338+
Name: serviceName,
339+
},
340+
Spec: pipelinesv1alpha1.GitopsServiceSpec{
341+
NodeSelector: map[string]string{
342+
"key1": "value1",
343+
},
344+
},
345+
}
346+
347+
fakeClient := fake.NewFakeClient(gitopsService)
348+
reconciler := newReconcileGitOpsService(fakeClient, s)
349+
350+
_, err := reconciler.Reconcile(context.TODO(), newRequest("test", "test"))
351+
assertNoError(t, err)
352+
353+
existingArgoCD := &argoapp.ArgoCD{}
354+
err = fakeClient.Get(context.TODO(), types.NamespacedName{Name: common.ArgoCDInstanceName, Namespace: serviceNamespace},
355+
existingArgoCD)
356+
assertNoError(t, err)
357+
assert.Check(t, existingArgoCD.Spec.NodePlacement != nil)
358+
assert.Equal(t, existingArgoCD.Annotations[common.NodePlacementManagedByGitopsServiceAnnotation], "true")
359+
360+
err = fakeClient.Get(context.TODO(), types.NamespacedName{Name: serviceName}, gitopsService)
361+
assertNoError(t, err)
362+
gitopsService.Spec.NodeSelector = nil
363+
err = fakeClient.Update(context.TODO(), gitopsService)
364+
assertNoError(t, err)
365+
366+
_, err = reconciler.Reconcile(context.TODO(), newRequest("test", "test"))
367+
assertNoError(t, err)
368+
369+
err = fakeClient.Get(context.TODO(), types.NamespacedName{Name: common.ArgoCDInstanceName, Namespace: serviceNamespace},
370+
existingArgoCD)
371+
assertNoError(t, err)
372+
assert.Assert(t, existingArgoCD.Spec.NodePlacement == nil)
373+
_, hasManagedAnnotation := existingArgoCD.Annotations[common.NodePlacementManagedByGitopsServiceAnnotation]
374+
assert.Assert(t, !hasManagedAnnotation)
375+
}
376+
331377
// If the DISABLE_DEFAULT_ARGOCD_INSTANCE is set, ensure that the default ArgoCD instance is not created.
332378
func TestReconcileDisableDefault(t *testing.T) {
333379

0 commit comments

Comments
 (0)