diff --git a/api/v1alpha1/argocd_types.go b/api/v1alpha1/argocd_types.go index e4c9efa15..db94486b8 100644 --- a/api/v1alpha1/argocd_types.go +++ b/api/v1alpha1/argocd_types.go @@ -682,6 +682,10 @@ type ArgoCDSpec struct { //+operator-sdk:csv:customresourcedefinitions:type=spec,displayName="Application Instance Label Key'",xDescriptors={"urn:alm:descriptor:com.tectonic.ui:text","urn:alm:descriptor:com.tectonic.ui:advanced"} ApplicationInstanceLabelKey string `json:"applicationInstanceLabelKey,omitempty"` + // InstallationID uniquely identifies an Argo CD instance in multi-instance clusters. + //+operator-sdk:csv:customresourcedefinitions:type=spec,displayName="Installation ID",xDescriptors={"urn:alm:descriptor:com.tectonic.ui:text","urn:alm:descriptor:com.tectonic.ui:advanced"} + InstallationID string `json:"installationID,omitempty"` + // ConfigManagementPlugins is used to specify additional config management plugins. //+operator-sdk:csv:customresourcedefinitions:type=spec,displayName="Config Management Plugins'",xDescriptors={"urn:alm:descriptor:com.tectonic.ui:text","urn:alm:descriptor:com.tectonic.ui:advanced"} ConfigManagementPlugins string `json:"configManagementPlugins,omitempty"` diff --git a/api/v1beta1/argocd_types.go b/api/v1beta1/argocd_types.go index 0821ffed0..ca0beb026 100644 --- a/api/v1beta1/argocd_types.go +++ b/api/v1beta1/argocd_types.go @@ -792,6 +792,10 @@ type ArgoCDSpec struct { //+operator-sdk:csv:customresourcedefinitions:type=spec,displayName="Application Instance Label Key'",xDescriptors={"urn:alm:descriptor:com.tectonic.ui:text","urn:alm:descriptor:com.tectonic.ui:advanced"} ApplicationInstanceLabelKey string `json:"applicationInstanceLabelKey,omitempty"` + // InstallationID uniquely identifies an Argo CD instance in multi-instance clusters. + //+operator-sdk:csv:customresourcedefinitions:type=spec,displayName="Installation ID",xDescriptors={"urn:alm:descriptor:com.tectonic.ui:text","urn:alm:descriptor:com.tectonic.ui:advanced"} + InstallationID string `json:"installationID,omitempty"` + // ConfigManagementPlugins is used to specify additional config management plugins. //+operator-sdk:csv:customresourcedefinitions:type=spec,displayName="Config Management Plugins'",xDescriptors={"urn:alm:descriptor:com.tectonic.ui:text","urn:alm:descriptor:com.tectonic.ui:advanced"} ConfigManagementPlugins string `json:"configManagementPlugins,omitempty"` diff --git a/bundle/manifests/argocd-operator.clusterserviceversion.yaml b/bundle/manifests/argocd-operator.clusterserviceversion.yaml index a914d905d..a842c2502 100644 --- a/bundle/manifests/argocd-operator.clusterserviceversion.yaml +++ b/bundle/manifests/argocd-operator.clusterserviceversion.yaml @@ -247,7 +247,7 @@ metadata: capabilities: Deep Insights categories: Integration & Delivery certified: "false" - createdAt: "2024-12-20T09:48:39Z" + createdAt: "2025-02-04T21:18:01Z" description: Argo CD is a declarative, GitOps continuous delivery tool for Kubernetes. operators.operatorframework.io/builder: operator-sdk-v1.35.0 operators.operatorframework.io/project_layout: go.kubebuilder.io/v4 @@ -611,6 +611,13 @@ spec: x-descriptors: - urn:alm:descriptor:com.tectonic.ui:text - urn:alm:descriptor:com.tectonic.ui:advanced + - description: InstallationID uniquely identifies an Argo CD instance in multi-instance + clusters. + displayName: Installation ID + path: installationID + x-descriptors: + - urn:alm:descriptor:com.tectonic.ui:text + - urn:alm:descriptor:com.tectonic.ui:advanced - description: KustomizeVersions is a listing of configured versions of Kustomize to be made available within ArgoCD. displayName: Kustomize Build Options' @@ -1189,6 +1196,13 @@ spec: x-descriptors: - urn:alm:descriptor:com.tectonic.ui:text - urn:alm:descriptor:com.tectonic.ui:advanced + - description: InstallationID uniquely identifies an Argo CD instance in multi-instance + clusters. + displayName: Installation ID + path: installationID + x-descriptors: + - urn:alm:descriptor:com.tectonic.ui:text + - urn:alm:descriptor:com.tectonic.ui:advanced - description: KustomizeVersions is a listing of configured versions of Kustomize to be made available within ArgoCD. displayName: Kustomize Build Options' diff --git a/bundle/manifests/argoproj.io_argocds.yaml b/bundle/manifests/argoproj.io_argocds.yaml index cf66d2e72..0f50fae94 100644 --- a/bundle/manifests/argoproj.io_argocds.yaml +++ b/bundle/manifests/argoproj.io_argocds.yaml @@ -1166,6 +1166,10 @@ spec: have included in your ArgoCD server. type: string type: object + installationID: + description: InstallationID uniquely identifies an Argo CD instance + in multi-instance clusters. + type: string kustomizeBuildOptions: description: KustomizeBuildOptions is used to specify build options/parameters to use with `kustomize build`. @@ -14371,6 +14375,10 @@ spec: have included in your ArgoCD server. type: string type: object + installationID: + description: InstallationID uniquely identifies an Argo CD instance + in multi-instance clusters. + type: string kustomizeBuildOptions: description: KustomizeBuildOptions is used to specify build options/parameters to use with `kustomize build`. diff --git a/common/keys.go b/common/keys.go index 76aed700c..129cd9283 100644 --- a/common/keys.go +++ b/common/keys.go @@ -231,4 +231,7 @@ const ( // Label Selector is an env variable for ArgoCD instance reconcilliation. ArgoCDLabelSelectorKey = "ARGOCD_LABEL_SELECTOR" + + // ArgoCDKeyInstallationID is the configuration key for the installation ID. + ArgoCDKeyInstallationID = "installationID" ) diff --git a/config/crd/bases/argoproj.io_argocds.yaml b/config/crd/bases/argoproj.io_argocds.yaml index 68d5605a2..930b394ed 100644 --- a/config/crd/bases/argoproj.io_argocds.yaml +++ b/config/crd/bases/argoproj.io_argocds.yaml @@ -1155,6 +1155,10 @@ spec: have included in your ArgoCD server. type: string type: object + installationID: + description: InstallationID uniquely identifies an Argo CD instance + in multi-instance clusters. + type: string kustomizeBuildOptions: description: KustomizeBuildOptions is used to specify build options/parameters to use with `kustomize build`. @@ -14360,6 +14364,10 @@ spec: have included in your ArgoCD server. type: string type: object + installationID: + description: InstallationID uniquely identifies an Argo CD instance + in multi-instance clusters. + type: string kustomizeBuildOptions: description: KustomizeBuildOptions is used to specify build options/parameters to use with `kustomize build`. diff --git a/config/manifests/bases/argocd-operator.clusterserviceversion.yaml b/config/manifests/bases/argocd-operator.clusterserviceversion.yaml index 455734308..30885dd13 100644 --- a/config/manifests/bases/argocd-operator.clusterserviceversion.yaml +++ b/config/manifests/bases/argocd-operator.clusterserviceversion.yaml @@ -427,6 +427,13 @@ spec: x-descriptors: - urn:alm:descriptor:com.tectonic.ui:text - urn:alm:descriptor:com.tectonic.ui:advanced + - description: InstallationID uniquely identifies an Argo CD instance in multi-instance + clusters. + displayName: Installation ID + path: installationID + x-descriptors: + - urn:alm:descriptor:com.tectonic.ui:text + - urn:alm:descriptor:com.tectonic.ui:advanced - description: KustomizeVersions is a listing of configured versions of Kustomize to be made available within ArgoCD. displayName: Kustomize Build Options' @@ -1028,6 +1035,13 @@ spec: x-descriptors: - urn:alm:descriptor:com.tectonic.ui:text - urn:alm:descriptor:com.tectonic.ui:advanced + - description: InstallationID uniquely identifies an Argo CD instance in multi-instance + clusters. + displayName: Installation ID + path: installationID + x-descriptors: + - urn:alm:descriptor:com.tectonic.ui:text + - urn:alm:descriptor:com.tectonic.ui:advanced - description: KustomizeVersions is a listing of configured versions of Kustomize to be made available within ArgoCD. displayName: Kustomize Build Options' diff --git a/controllers/argocd/configmap.go b/controllers/argocd/configmap.go index 86e737acb..3fa867c36 100644 --- a/controllers/argocd/configmap.go +++ b/controllers/argocd/configmap.go @@ -379,7 +379,6 @@ func (r *ReconcileArgoCD) reconcileCAConfigMap(cr *argoproj.ArgoCD) error { // reconcileConfiguration will ensure that the main ConfigMap for ArgoCD is present. func (r *ReconcileArgoCD) reconcileArgoConfigMap(cr *argoproj.ArgoCD) error { cm := newConfigMapWithName(common.ArgoCDConfigMapName, cr) - cm.Data = make(map[string]string) cm.Data = setRespectRBAC(cr, cm.Data) cm.Data[common.ArgoCDKeyApplicationInstanceLabelKey] = getApplicationInstanceLabelKey(cr) @@ -391,6 +390,11 @@ func (r *ReconcileArgoCD) reconcileArgoConfigMap(cr *argoproj.ArgoCD) error { cm.Data[common.ArgoCDKeyHelpChatText] = getHelpChatText(cr) cm.Data[common.ArgoCDKeyKustomizeBuildOptions] = getKustomizeBuildOptions(cr) + // Set installationID as a top-level key + if cr.Spec.InstallationID != "" { + cm.Data[common.ArgoCDKeyInstallationID] = cr.Spec.InstallationID + } + if len(cr.Spec.KustomizeVersions) > 0 { for _, kv := range cr.Spec.KustomizeVersions { cm.Data["kustomize.version."+kv.Version] = kv.Path diff --git a/controllers/argocd/configmap_test.go b/controllers/argocd/configmap_test.go index 373d8afb2..e5e08bbd7 100644 --- a/controllers/argocd/configmap_test.go +++ b/controllers/argocd/configmap_test.go @@ -687,7 +687,6 @@ func TestReconcileArgoCD_reconcileArgoConfigMap_withResourceTrackingMethod(t *te assert.NoError(t, err) cm := &corev1.ConfigMap{} - t.Run("Check default tracking method", func(t *testing.T) { err = r.Client.Get(context.TODO(), types.NamespacedName{ Name: common.ArgoCDConfigMapName, @@ -1029,7 +1028,6 @@ func TestReconcileArgoCD_reconcileArgoConfigMap_withRespectRBAC(t *testing.T) { assert.NoError(t, err) cm := &corev1.ConfigMap{} - assert.NoError(t, r.Client.Get(context.TODO(), types.NamespacedName{Name: common.ArgoCDConfigMapName, Namespace: testNamespace}, cm)) if c := cm.Data["resource.respectRBAC"]; c != "normal" { @@ -1154,3 +1152,113 @@ func Test_validateOwnerReferences(t *testing.T) { assert.Equal(t, cm.OwnerReferences[0].Name, "argocd") assert.Equal(t, cm.OwnerReferences[0].UID, uid) } + +func TestReconcileArgoCD_reconcileArgoConfigMap_withInstallationID(t *testing.T) { + logf.SetLogger(ZapLogger(true)) + + a := makeTestArgoCD(func(a *argoproj.ArgoCD) { + a.Spec.InstallationID = "test-id" + }) + + resObjs := []client.Object{a} + subresObjs := []client.Object{a} + runtimeObjs := []runtime.Object{} + sch := makeTestReconcilerScheme(argoproj.AddToScheme) + cl := makeTestReconcilerClient(sch, resObjs, subresObjs, runtimeObjs) + r := makeTestReconciler(cl, sch) + + // Test initial installationID + err := r.reconcileArgoConfigMap(a) + assert.NoError(t, err) + + cm := &corev1.ConfigMap{} + err = r.Client.Get(context.TODO(), types.NamespacedName{ + Name: common.ArgoCDConfigMapName, + Namespace: testNamespace, + }, cm) + assert.NoError(t, err) + + // Verify installationID is set as a top-level key + assert.Equal(t, "test-id", cm.Data[common.ArgoCDKeyInstallationID]) + + //Test updating installationID + a.Spec.InstallationID = "test-id-2" + err = r.reconcileArgoConfigMap(a) + assert.NoError(t, err) + + cm = &corev1.ConfigMap{} + err = r.Client.Get(context.TODO(), types.NamespacedName{ + Name: common.ArgoCDConfigMapName, + Namespace: testNamespace, + }, cm) + assert.NoError(t, err) + + assert.Equal(t, "test-id-2", cm.Data[common.ArgoCDKeyInstallationID]) + + // Test removing installationID + a.Spec.InstallationID = "" + err = r.reconcileArgoConfigMap(a) + assert.NoError(t, err) + + err = r.Client.Get(context.TODO(), types.NamespacedName{ + Name: common.ArgoCDConfigMapName, + Namespace: testNamespace, + }, cm) + assert.NoError(t, err) + + // Verify installationID was removed + assert.NotContains(t, cm.Data, common.ArgoCDKeyInstallationID) +} + +func TestReconcileArgoCD_reconcileArgoConfigMap_withMultipleInstances(t *testing.T) { + logf.SetLogger(ZapLogger(true)) + + // Create first ArgoCD instance + argocd1 := makeTestArgoCD(func(a *argoproj.ArgoCD) { + a.Name = "argocd-1" + a.Namespace = testNamespace + a.Spec.InstallationID = "instance-1" + }) + + // Create second ArgoCD instance + argocd2 := makeTestArgoCD(func(a *argoproj.ArgoCD) { + a.Name = "argocd-2" + a.Namespace = testNamespace + a.Spec.InstallationID = "instance-2" + }) + + resObjs := []client.Object{argocd1, argocd2} + subresObjs := []client.Object{argocd1, argocd2} + runtimeObjs := []runtime.Object{} + sch := makeTestReconcilerScheme(argoproj.AddToScheme) + cl := makeTestReconcilerClient(sch, resObjs, subresObjs, runtimeObjs) + r := makeTestReconciler(cl, sch) + + // Test first instance + err := r.reconcileArgoConfigMap(argocd1) + assert.NoError(t, err) + + cm1 := &corev1.ConfigMap{} + err = r.Client.Get(context.TODO(), types.NamespacedName{ + Name: common.ArgoCDConfigMapName, + Namespace: testNamespace, + }, cm1) + assert.NoError(t, err) + + // Verify first instance's installationID + assert.Equal(t, "instance-1", cm1.Data[common.ArgoCDKeyInstallationID]) + + // Test second instance + err = r.reconcileArgoConfigMap(argocd2) + assert.NoError(t, err) + + cm2 := &corev1.ConfigMap{} + err = r.Client.Get(context.TODO(), types.NamespacedName{ + Name: common.ArgoCDConfigMapName, + Namespace: testNamespace, + }, cm2) + assert.NoError(t, err) + + // Verify second instance's installationID + assert.Equal(t, "instance-2", cm2.Data[common.ArgoCDKeyInstallationID]) +} diff --git a/deploy/olm-catalog/argocd-operator/0.14.0/argocd-operator.v0.14.0.clusterserviceversion.yaml b/deploy/olm-catalog/argocd-operator/0.14.0/argocd-operator.v0.14.0.clusterserviceversion.yaml index a914d905d..a842c2502 100644 --- a/deploy/olm-catalog/argocd-operator/0.14.0/argocd-operator.v0.14.0.clusterserviceversion.yaml +++ b/deploy/olm-catalog/argocd-operator/0.14.0/argocd-operator.v0.14.0.clusterserviceversion.yaml @@ -247,7 +247,7 @@ metadata: capabilities: Deep Insights categories: Integration & Delivery certified: "false" - createdAt: "2024-12-20T09:48:39Z" + createdAt: "2025-02-04T21:18:01Z" description: Argo CD is a declarative, GitOps continuous delivery tool for Kubernetes. operators.operatorframework.io/builder: operator-sdk-v1.35.0 operators.operatorframework.io/project_layout: go.kubebuilder.io/v4 @@ -611,6 +611,13 @@ spec: x-descriptors: - urn:alm:descriptor:com.tectonic.ui:text - urn:alm:descriptor:com.tectonic.ui:advanced + - description: InstallationID uniquely identifies an Argo CD instance in multi-instance + clusters. + displayName: Installation ID + path: installationID + x-descriptors: + - urn:alm:descriptor:com.tectonic.ui:text + - urn:alm:descriptor:com.tectonic.ui:advanced - description: KustomizeVersions is a listing of configured versions of Kustomize to be made available within ArgoCD. displayName: Kustomize Build Options' @@ -1189,6 +1196,13 @@ spec: x-descriptors: - urn:alm:descriptor:com.tectonic.ui:text - urn:alm:descriptor:com.tectonic.ui:advanced + - description: InstallationID uniquely identifies an Argo CD instance in multi-instance + clusters. + displayName: Installation ID + path: installationID + x-descriptors: + - urn:alm:descriptor:com.tectonic.ui:text + - urn:alm:descriptor:com.tectonic.ui:advanced - description: KustomizeVersions is a listing of configured versions of Kustomize to be made available within ArgoCD. displayName: Kustomize Build Options' diff --git a/deploy/olm-catalog/argocd-operator/0.14.0/argoproj.io_argocds.yaml b/deploy/olm-catalog/argocd-operator/0.14.0/argoproj.io_argocds.yaml index cf66d2e72..0f50fae94 100644 --- a/deploy/olm-catalog/argocd-operator/0.14.0/argoproj.io_argocds.yaml +++ b/deploy/olm-catalog/argocd-operator/0.14.0/argoproj.io_argocds.yaml @@ -1166,6 +1166,10 @@ spec: have included in your ArgoCD server. type: string type: object + installationID: + description: InstallationID uniquely identifies an Argo CD instance + in multi-instance clusters. + type: string kustomizeBuildOptions: description: KustomizeBuildOptions is used to specify build options/parameters to use with `kustomize build`. @@ -14371,6 +14375,10 @@ spec: have included in your ArgoCD server. type: string type: object + installationID: + description: InstallationID uniquely identifies an Argo CD instance + in multi-instance clusters. + type: string kustomizeBuildOptions: description: KustomizeBuildOptions is used to specify build options/parameters to use with `kustomize build`. diff --git a/tests/k8s/1-006_validate-managed-by-chain/01-assert.yaml b/tests/k8s/1-006_validate-managed-by-chain/01-assert.yaml index 18d3a4076..c3dc00b3d 100644 --- a/tests/k8s/1-006_validate-managed-by-chain/01-assert.yaml +++ b/tests/k8s/1-006_validate-managed-by-chain/01-assert.yaml @@ -3,9 +3,9 @@ kind: TestAssert timeout: 720 --- # Wait for the Operator to become available -apiVersion: argoproj.io/v1alpha1 +apiVersion: argoproj.io/v1beta1 kind: ArgoCD metadata: name: argocd status: - phase: Available \ No newline at end of file + phase: Available diff --git a/tests/k8s/1-046_validate_application_tracking/01-assert.yaml b/tests/k8s/1-046_validate_application_tracking/01-assert.yaml new file mode 100644 index 000000000..6f8138949 --- /dev/null +++ b/tests/k8s/1-046_validate_application_tracking/01-assert.yaml @@ -0,0 +1,53 @@ +apiVersion: kuttl.dev/v1beta1 +kind: TestAssert +timeout: 720 +--- +# Check first ArgoCD instance is available +apiVersion: argoproj.io/v1beta1 +kind: ArgoCD +metadata: + name: argocd-1 + namespace: test-1-046-argocd-1 +status: + phase: Available +--- +# Check second ArgoCD instance is available +apiVersion: argoproj.io/v1beta1 +kind: ArgoCD +metadata: + name: argocd-2 + namespace: test-1-046-argocd-2 +status: + phase: Available +--- +# Check first ArgoCD ConfigMap +apiVersion: v1 +kind: ConfigMap +metadata: + name: argocd-cm + namespace: test-1-046-argocd-1 +data: + installationID: "instance-1" + application.resourceTrackingMethod: "annotation" +--- +# Check second ArgoCD ConfigMap +apiVersion: v1 +kind: ConfigMap +metadata: + name: argocd-cm + namespace: test-1-046-argocd-2 +data: + installationID: "instance-2" + application.resourceTrackingMethod: "annotation" +--- +# Check first namespace +apiVersion: v1 +kind: Namespace +metadata: + name: source-ns-1 +--- +# Check second namespace +apiVersion: v1 +kind: Namespace +metadata: + name: source-ns-2 diff --git a/tests/k8s/1-046_validate_application_tracking/01-install.yaml b/tests/k8s/1-046_validate_application_tracking/01-install.yaml new file mode 100644 index 000000000..14c861665 --- /dev/null +++ b/tests/k8s/1-046_validate_application_tracking/01-install.yaml @@ -0,0 +1,39 @@ +apiVersion: v1 +kind: Namespace +metadata: + name: test-1-046-argocd-1 +--- +apiVersion: v1 +kind: Namespace +metadata: + name: test-1-046-argocd-2 +--- +apiVersion: v1 +kind: Namespace +metadata: + name: source-ns-1 +--- +apiVersion: v1 +kind: Namespace +metadata: + name: source-ns-2 +--- +# First ArgoCD instance +apiVersion: argoproj.io/v1beta1 +kind: ArgoCD +metadata: + name: argocd-1 + namespace: test-1-046-argocd-1 +spec: + installationID: "instance-1" + resourceTrackingMethod: "annotation" +--- +# Second ArgoCD instance +apiVersion: argoproj.io/v1beta1 +kind: ArgoCD +metadata: + name: argocd-2 + namespace: test-1-046-argocd-2 +spec: + installationID: "instance-2" + resourceTrackingMethod: "annotation" diff --git a/tests/k8s/1-046_validate_application_tracking/02-assert.yaml b/tests/k8s/1-046_validate_application_tracking/02-assert.yaml new file mode 100644 index 000000000..b9c1dcc4c --- /dev/null +++ b/tests/k8s/1-046_validate_application_tracking/02-assert.yaml @@ -0,0 +1,35 @@ +apiVersion: kuttl.dev/v1beta1 +kind: TestAssert +timeout: 300 +--- +# Check first namespace labels +apiVersion: v1 +kind: Namespace +metadata: + name: source-ns-1 + labels: + argocd.argoproj.io/managed-by: test-1-046-argocd-1 + argocd.argoproj.io/tracking-id: instance-1 +--- +# Check second namespace labels +apiVersion: v1 +kind: Namespace +metadata: + name: source-ns-2 + labels: + argocd.argoproj.io/managed-by: test-1-046-argocd-2 + argocd.argoproj.io/tracking-id: instance-2 +--- +# Verify RBAC is set up for first namespace +apiVersion: rbac.authorization.k8s.io/v1 +kind: Role +metadata: + name: argocd-1-argocd-application-controller + namespace: source-ns-1 +--- +# Verify RBAC is set up for second namespace +apiVersion: rbac.authorization.k8s.io/v1 +kind: Role +metadata: + name: argocd-2-argocd-application-controller + namespace: source-ns-2 diff --git a/tests/k8s/1-046_validate_application_tracking/02-label-namespaces.yaml b/tests/k8s/1-046_validate_application_tracking/02-label-namespaces.yaml new file mode 100644 index 000000000..6cdef9aec --- /dev/null +++ b/tests/k8s/1-046_validate_application_tracking/02-label-namespaces.yaml @@ -0,0 +1,13 @@ +apiVersion: kuttl.dev/v1beta1 +kind: TestStep +commands: +# Set managed-by labels +- script: | + kubectl label ns source-ns-1 argocd.argoproj.io/managed-by=test-1-046-argocd-1 + kubectl label ns source-ns-2 argocd.argoproj.io/managed-by=test-1-046-argocd-2 + sleep 30 +# Set tracking-id labels +- script: | + kubectl label ns source-ns-1 argocd.argoproj.io/tracking-id=instance-1 + kubectl label ns source-ns-2 argocd.argoproj.io/tracking-id=instance-2 + sleep 30 diff --git a/tests/k8s/1-046_validate_application_tracking/03-assert.yaml b/tests/k8s/1-046_validate_application_tracking/03-assert.yaml new file mode 100644 index 000000000..9bbe0f8c1 --- /dev/null +++ b/tests/k8s/1-046_validate_application_tracking/03-assert.yaml @@ -0,0 +1,45 @@ +apiVersion: kuttl.dev/v1beta1 +kind: TestAssert +timeout: 300 +--- +# Check first Application is healthy +apiVersion: argoproj.io/v1alpha1 +kind: Application +metadata: + name: test-app + namespace: test-1-046-argocd-1 +status: + health: + status: Healthy + sync: + status: Synced +--- +# Check second Application is healthy +apiVersion: argoproj.io/v1alpha1 +kind: Application +metadata: + name: test-app + namespace: test-1-046-argocd-2 +status: + health: + status: Healthy + sync: + status: Synced +--- +# Check resources in first namespace have correct annotation +apiVersion: apps/v1 +kind: Deployment +metadata: + name: nginx-deployment + namespace: source-ns-1 + annotations: + argocd.argoproj.io/tracking-id: test-app:apps/Deployment:source-ns-1/nginx-deployment +--- +# Check resources in second namespace have correct annotation +apiVersion: apps/v1 +kind: Deployment +metadata: + name: nginx-deployment + namespace: source-ns-2 + annotations: + argocd.argoproj.io/tracking-id: test-app:apps/Deployment:source-ns-2/nginx-deployment diff --git a/tests/k8s/1-046_validate_application_tracking/03-create-apps.yaml b/tests/k8s/1-046_validate_application_tracking/03-create-apps.yaml new file mode 100644 index 000000000..8d565b1e1 --- /dev/null +++ b/tests/k8s/1-046_validate_application_tracking/03-create-apps.yaml @@ -0,0 +1,35 @@ +# Application in first ArgoCD instance +apiVersion: argoproj.io/v1alpha1 +kind: Application +metadata: + name: test-app + namespace: test-1-046-argocd-1 +spec: + project: default + source: + repoURL: https://github.com/redhat-developer/gitops-operator + path: test/examples/nginx + targetRevision: HEAD + destination: + server: https://kubernetes.default.svc + namespace: source-ns-1 + syncPolicy: + automated: {} +--- +# Application in second ArgoCD instance +apiVersion: argoproj.io/v1alpha1 +kind: Application +metadata: + name: test-app + namespace: test-1-046-argocd-2 +spec: + project: default + source: + repoURL: https://github.com/redhat-developer/gitops-operator + path: test/examples/nginx + targetRevision: HEAD + destination: + server: https://kubernetes.default.svc + namespace: source-ns-2 + syncPolicy: + automated: {} diff --git a/tests/k8s/1-046_validate_application_tracking/04-cleanup.yaml b/tests/k8s/1-046_validate_application_tracking/04-cleanup.yaml new file mode 100644 index 000000000..24c31b9b7 --- /dev/null +++ b/tests/k8s/1-046_validate_application_tracking/04-cleanup.yaml @@ -0,0 +1,35 @@ +apiVersion: kuttl.dev/v1beta1 +kind: TestStep +delete: +# Delete test namespaces +- apiVersion: v1 + kind: Namespace + name: test-1-046-argocd-1 +- apiVersion: v1 + kind: Namespace + name: test-1-046-argocd-2 +- apiVersion: v1 + kind: Namespace + name: source-ns-1 +- apiVersion: v1 + kind: Namespace + name: source-ns-2 +# Delete ArgoCD instances +- apiVersion: argoproj.io/v1beta1 + kind: ArgoCD + name: argocd-1 + namespace: test-1-046-argocd-1 +- apiVersion: argoproj.io/v1beta1 + kind: ArgoCD + name: argocd-2 + namespace: test-1-046-argocd-2 +# Delete Applications +- apiVersion: argoproj.io/v1alpha1 + kind: Application + name: test-app + namespace: test-1-046-argocd-1 +- apiVersion: argoproj.io/v1alpha1 + kind: Application + name: test-app + namespace: test-1-046-argocd-2 +timeout: 120 # Give enough time for cascade deletion