Skip to content

Commit eee7b8a

Browse files
authored
Fix bug where ArgoCD removes nodePlacement stanza from configuration (#740)
* Fix bug where ArgoCD removes nodePlacement stanza from configuration Signed-off-by: Rizwana777 <[email protected]> * Add unit test for argocd nodeplacement Signed-off-by: Rizwana777 <[email protected]> --------- Signed-off-by: Rizwana777 <[email protected]>
1 parent 990a1f9 commit eee7b8a

File tree

3 files changed

+68
-8
lines changed

3 files changed

+68
-8
lines changed

controllers/argocd_metrics_controller_test.go

+1-2
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,6 @@ import (
2929
is "gotest.tools/assert/cmp"
3030
corev1 "k8s.io/api/core/v1"
3131
rbacv1 "k8s.io/api/rbac/v1"
32-
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
3332
v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
3433
"k8s.io/apimachinery/pkg/runtime"
3534
"k8s.io/apimachinery/pkg/types"
@@ -349,7 +348,7 @@ func TestReconciler_add_dashboard(t *testing.T) {
349348

350349
// Need to create one configmap to test update existing versus create
351350
cm := corev1.ConfigMap{
352-
ObjectMeta: metav1.ObjectMeta{
351+
ObjectMeta: v1.ObjectMeta{
353352
Name: "gitops-overview",
354353
Namespace: dashboardNamespace,
355354
},

controllers/gitopsservice_controller.go

+8-2
Original file line numberDiff line numberDiff line change
@@ -423,7 +423,6 @@ func (r *ReconcileGitopsService) reconcileDefaultArgoCDInstance(instance *pipeli
423423
}
424424
} else {
425425
changed := false
426-
427426
if existingArgoCD.Spec.ApplicationSet != nil {
428427
if existingArgoCD.Spec.ApplicationSet.Resources == nil {
429428
existingArgoCD.Spec.ApplicationSet.Resources = defaultArgoCDInstance.Spec.ApplicationSet.Resources
@@ -472,7 +471,14 @@ func (r *ReconcileGitopsService) reconcileDefaultArgoCDInstance(instance *pipeli
472471
changed = true
473472
}
474473

475-
if !reflect.DeepEqual(existingArgoCD.Spec.NodePlacement, defaultArgoCDInstance.Spec.NodePlacement) {
474+
// if user is patching nodePlacement through GitopsService CR, then existingArgoCD NodePlacement is updated.
475+
if defaultArgoCDInstance.Spec.NodePlacement != nil {
476+
if !reflect.DeepEqual(existingArgoCD.Spec.NodePlacement, defaultArgoCDInstance.Spec.NodePlacement) {
477+
existingArgoCD.Spec.NodePlacement = defaultArgoCDInstance.Spec.NodePlacement
478+
changed = true
479+
}
480+
// Handle the case where NodePlacement should be removed
481+
} else if existingArgoCD.Spec.NodePlacement != nil {
476482
existingArgoCD.Spec.NodePlacement = defaultArgoCDInstance.Spec.NodePlacement
477483
changed = true
478484
}

controllers/gitopsservice_controller_test.go

+59-4
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,6 @@ import (
3737
rbacv1 "k8s.io/api/rbac/v1"
3838
"k8s.io/apimachinery/pkg/api/errors"
3939
resourcev1 "k8s.io/apimachinery/pkg/api/resource"
40-
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
4140
v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
4241
"k8s.io/apimachinery/pkg/runtime"
4342
"k8s.io/apimachinery/pkg/types"
@@ -93,6 +92,62 @@ func TestImageFromEnvVariable(t *testing.T) {
9392

9493
}
9594

95+
func TestReconcileDefaultForArgoCDNodeplacement(t *testing.T) {
96+
logf.SetLogger(argocd.ZapLogger(true))
97+
s := scheme.Scheme
98+
addKnownTypesToScheme(s)
99+
100+
var err error
101+
102+
gitopsService := &pipelinesv1alpha1.GitopsService{
103+
ObjectMeta: v1.ObjectMeta{
104+
Name: serviceName,
105+
},
106+
Spec: pipelinesv1alpha1.GitopsServiceSpec{
107+
NodeSelector: map[string]string{
108+
"foo": "bar",
109+
},
110+
},
111+
}
112+
113+
fakeClient := fake.NewFakeClient(gitopsService)
114+
reconciler := newReconcileGitOpsService(fakeClient, s)
115+
116+
existingArgoCD := &argoapp.ArgoCD{
117+
ObjectMeta: v1.ObjectMeta{
118+
Name: serviceNamespace,
119+
Namespace: serviceNamespace,
120+
},
121+
Spec: argoapp.ArgoCDSpec{
122+
Server: argoapp.ArgoCDServerSpec{
123+
Route: argoapp.ArgoCDRouteSpec{
124+
Enabled: true,
125+
},
126+
},
127+
ApplicationSet: &argoapp.ArgoCDApplicationSet{},
128+
SSO: &argoapp.ArgoCDSSOSpec{
129+
Provider: "dex",
130+
Dex: &argoapp.ArgoCDDexSpec{
131+
Config: "test-config",
132+
},
133+
},
134+
},
135+
}
136+
137+
err = fakeClient.Create(context.TODO(), existingArgoCD)
138+
assertNoError(t, err)
139+
140+
_, err = reconciler.Reconcile(context.TODO(), newRequest("test", "test"))
141+
assertNoError(t, err)
142+
143+
// verify whether existingArgoCD NodePlacement is updated when user is patching nodePlacement through GitopsService CR
144+
err = fakeClient.Get(context.TODO(), types.NamespacedName{Name: common.ArgoCDInstanceName, Namespace: serviceNamespace},
145+
existingArgoCD)
146+
assertNoError(t, err)
147+
assert.Check(t, existingArgoCD.Spec.NodePlacement != nil)
148+
assert.DeepEqual(t, existingArgoCD.Spec.NodePlacement.NodeSelector, gitopsService.Spec.NodeSelector)
149+
}
150+
96151
// If the DISABLE_DEFAULT_ARGOCD_INSTANCE is set, ensure that the default ArgoCD instance is not created.
97152
func TestReconcileDisableDefault(t *testing.T) {
98153

@@ -553,14 +608,14 @@ func TestReconcile_VerifyResourceQuotaDeletionForUpgrade(t *testing.T) {
553608

554609
// Create namespace object for default ArgoCD instance and set resource quota to it.
555610
defaultArgoNS := &corev1.Namespace{
556-
ObjectMeta: metav1.ObjectMeta{
611+
ObjectMeta: v1.ObjectMeta{
557612
Name: serviceNamespace,
558613
},
559614
}
560615
fakeClient.Create(context.TODO(), defaultArgoNS)
561616

562617
dummyResourceObj := &corev1.ResourceQuota{
563-
ObjectMeta: metav1.ObjectMeta{
618+
ObjectMeta: v1.ObjectMeta{
564619
Name: fmt.Sprintf("%s-compute-resources", serviceNamespace),
565620
Namespace: serviceNamespace,
566621
},
@@ -613,7 +668,7 @@ func TestReconcile_InfrastructureNode(t *testing.T) {
613668
s := scheme.Scheme
614669
addKnownTypesToScheme(s)
615670
gitopsService := &pipelinesv1alpha1.GitopsService{
616-
ObjectMeta: metav1.ObjectMeta{
671+
ObjectMeta: v1.ObjectMeta{
617672
Name: serviceName,
618673
},
619674
Spec: pipelinesv1alpha1.GitopsServiceSpec{

0 commit comments

Comments
 (0)