Repository: argoproj-labs/argocd-operator
Pull request #829 (2022-12-14 20:10:30)

fix: appset status not reflected in CR
Signed-off-by: Jaideep Rao <jaideep.r97@gmail.com>

**What type of PR is this?**
> Uncomment only one ` /kind` line, and delete the rest.
> For example, `> /kind bug` would simply become: `/kind bug`

 /kind bug
> /kind chore
> /kind cleanup
> /kind failing-test
> /kind enhancement
> /kind documentation
> /kind code-refactoring


**What does this PR do / why we need it**:
This PR adds applicationSetController to `.status` of the Argo CD CR. This allows us to track the status/health of the appset controller workload in the CR, and lets us know if the controller is running as expected or pending if a pod couldn't come up. This is needed since it is a dependency for being able to set up monitoring alerts for all argo-cd workloads to be notified when they remain unavailable for too long

**Have you updated the necessary documentation?**

* [ ] Documentation update is required by this PR.
* [ ] Documentation has been updated.

**Which issue(s) this PR fixes**:

Fixes https://github.com/argoproj-labs/argocd-operator/issues/627

**How to test changes / Special notes to the reviewer**:

1. Start operator locally
2. Create basic Argo CD instance 
```
cat <<EOF | oc apply -f -
apiVersion: argoproj.io/v1alpha1
kind: ArgoCD
metadata:
  name: argocd
spec: {}
EOF

```

3. Verify that `.status.applicationSetController` is initially set to `Unknown`
```
apiVersion: argoproj.io/v1alpha1
kind: ArgoCD
metadata:
  name: example-argocd
status:
  ...
  applicationSetController: Unknown
```

4. Enable applicationSet:
```
apiVersion: argoproj.io/v1alpha1
kind: ArgoCD
metadata:
  name: example-argocd
spec:
  applicationSet: {}
```

5. Verify that `.status.applicationSetController` is initially set to `Running`
```
apiVersion: argoproj.io/v1alpha1
kind: ArgoCD
metadata:
  name: example-argocd
status:
  ...
  applicationSetController: Running
```

6. Set `.spec.applicationSet.image` to some invalid image and delete existing appset deployment 
```
apiVersion: argoproj.io/v1alpha1
kind: ArgoCD
metadata:
  name: example-argocd
spec:
  applicationSet:
    image: quay.io/argoproj/argocd@sha256:8283a9f06033c2377dc61b03daf49
```
`kubectl delete deployment example-argocd-applicationset-controller -n $NAMESPACE`

7.  Verify that `.status.applicationSetController` is now set to `Pending` as the new controller pod fails to come up due to invalid image name
```
apiVersion: argoproj.io/v1alpha1
kind: ArgoCD
metadata:
  name: example-argocd
status:
  ...
  applicationSetController: Pending
```


Patch:
diff --git a/api/v1alpha1/argocd_types.go b/api/v1alpha1/argocd_types.go
index 9e483e6c..71490097 100644
--- a/api/v1alpha1/argocd_types.go
+++ b/api/v1alpha1/argocd_types.go
@@ -783,72 +783,81 @@ type ArgoCDSpec struct {
 // +k8s:openapi-gen=true
 type ArgoCDStatus struct {
 	// ApplicationController is a simple, high-level summary of where the Argo CD application controller component is in its lifecycle.
-	// There are five possible ApplicationController values:
+	// There are four possible ApplicationController values:
 	// Pending: The Argo CD application controller component has been accepted by the Kubernetes system, but one or more of the required resources have not been created.
 	// Running: All of the required Pods for the Argo CD application controller component are in a Ready state.
 	// Failed: At least one of the  Argo CD application controller component Pods had a failure.
-	// Unknown: For some reason the state of the Argo CD application controller component could not be obtained.
+	// Unknown: The state of the Argo CD application controller component could not be obtained.
 	//+operator-sdk:csv:customresourcedefinitions:type=status,displayName="ApplicationController",xDescriptors={"urn:alm:descriptor:com.tectonic.ui:text"}
 	ApplicationController string `json:"applicationController,omitempty"`
 
+	// ApplicationSetController is a simple, high-level summary of where the Argo CD applicationSet controller component is in its lifecycle.
+	// There are four possible ApplicationSetController values:
+	// Pending: The Argo CD applicationSet controller component has been accepted by the Kubernetes system, but one or more of the required resources have not been created.
+	// Running: All of the required Pods for the Argo CD applicationSet controller component are in a Ready state.
+	// Failed: At least one of the  Argo CD applicationSet controller component Pods had a failure.
+	// Unknown: The state of the Argo CD applicationSet controller component could not be obtained.
+	//+operator-sdk:csv:customresourcedefinitions:type=status,displayName="ApplicationSetController",xDescriptors={"urn:alm:descriptor:com.tectonic.ui:text"}
+	ApplicationSetController string `json:"applicationSetController,omitempty"`
+
 	// Dex is a simple, high-level summary of where the Argo CD Dex component is in its lifecycle.
-	// There are five possible dex values:
+	// There are four possible dex values:
 	// Pending: The Argo CD Dex component has been accepted by the Kubernetes system, but one or more of the required resources have not been created.
 	// Running: All of the required Pods for the Argo CD Dex component are in a Ready state.
 	// Failed: At least one of the  Argo CD Dex component Pods had a failure.
-	// Unknown: For some reason the state of the Argo CD Dex component could not be obtained.
+	// Unknown: The state of the Argo CD Dex component could not be obtained.
 	//+operator-sdk:csv:customresourcedefinitions:type=status,displayName="Dex",xDescriptors={"urn:alm:descriptor:com.tectonic.ui:text"}
 	Dex string `json:"dex,omitempty"`
 
 	// NotificationsController is a simple, high-level summary of where the Argo CD notifications controller component is in its lifecycle.
-	// There are five possible NotificationsController values:
+	// There are four possible NotificationsController values:
 	// Pending: The Argo CD notifications controller component has been accepted by the Kubernetes system, but one or more of the required resources have not been created.
 	// Running: All of the required Pods for the Argo CD notifications controller component are in a Ready state.
 	// Failed: At least one of the  Argo CD notifications controller component Pods had a failure.
-	// Unknown: For some reason the state of the Argo CD notifications controller component could not be obtained.
+	// Unknown: The state of the Argo CD notifications controller component could not be obtained.
 	//+operator-sdk:csv:customresourcedefinitions:type=status,displayName="NotificationsController",xDescriptors={"urn:alm:descriptor:com.tectonic.ui:text"}
 	NotificationsController string `json:"notificationsController,omitempty"`
 
 	// SSOConfig defines the status of SSO configuration.
 	// Success: Only one SSO provider is configured in CR.
 	// Failed: SSO configuration is illegal or more than one SSO providers are configured in CR.
-	// Unknown: For some reason the SSO configuration could not be obtained.
+	// Unknown: The SSO configuration could not be obtained.
 	//+operator-sdk:csv:customresourcedefinitions:type=status,displayName="SSOConfig",xDescriptors={"urn:alm:descriptor:com.tectonic.ui:text"}
 	SSOConfig string `json:"ssoConfig,omitempty"`
 
 	// Phase is a simple, high-level summary of where the ArgoCD is in its lifecycle.
-	// There are five possible phase values:
+	// There are four possible phase values:
 	// Pending: The ArgoCD has been accepted by the Kubernetes system, but one or more of the required resources have not been created.
 	// Available: All of the resources for the ArgoCD are ready.
 	// Failed: At least one resource has experienced a failure.
-	// Unknown: For some reason the state of the ArgoCD phase could not be obtained.
+	// Unknown: The state of the ArgoCD phase could not be obtained.
 	//+operator-sdk:csv:customresourcedefinitions:type=status,displayName="Phase",xDescriptors={"urn:alm:descriptor:com.tectonic.ui:text"}
 	Phase string `json:"phase,omitempty"`
 
 	// Redis is a simple, high-level summary of where the Argo CD Redis component is in its lifecycle.
-	// There are five possible redis values:
+	// There are four possible redis values:
 	// Pending: The Argo CD Redis component has been accepted by the Kubernetes system, but one or more of the required resources have not been created.
 	// Running: All of the required Pods for the Argo CD Redis component are in a Ready state.
 	// Failed: At least one of the  Argo CD Redis component Pods had a failure.
-	// Unknown: For some reason the state of the Argo CD Redis component could not be obtained.
+	// Unknown: The state of the Argo CD Redis component could not be obtained.
 	//+operator-sdk:csv:customresourcedefinitions:type=status,displayName="Redis",xDescriptors={"urn:alm:descriptor:com.tectonic.ui:text"}
 	Redis string `json:"redis,omitempty"`
 
 	// Repo is a simple, high-level summary of where the Argo CD Repo component is in its lifecycle.
-	// There are five possible repo values:
+	// There are four possible repo values:
 	// Pending: The Argo CD Repo component has been accepted by the Kubernetes system, but one or more of the required resources have not been created.
 	// Running: All of the required Pods for the Argo CD Repo component are in a Ready state.
 	// Failed: At least one of the  Argo CD Repo component Pods had a failure.
-	// Unknown: For some reason the state of the Argo CD Repo component could not be obtained.
+	// Unknown: The state of the Argo CD Repo component could not be obtained.
 	//+operator-sdk:csv:customresourcedefinitions:type=status,displayName="Repo",xDescriptors={"urn:alm:descriptor:com.tectonic.ui:text"}
 	Repo string `json:"repo,omitempty"`
 
 	// Server is a simple, high-level summary of where the Argo CD server component is in its lifecycle.
-	// There are five possible server values:
+	// There are four possible server values:
 	// Pending: The Argo CD server component has been accepted by the Kubernetes system, but one or more of the required resources have not been created.
 	// Running: All of the required Pods for the Argo CD server component are in a Ready state.
 	// Failed: At least one of the  Argo CD server component Pods had a failure.
-	// Unknown: For some reason the state of the Argo CD server component could not be obtained.
+	// Unknown: The state of the Argo CD server component could not be obtained.
 	//+operator-sdk:csv:customresourcedefinitions:type=status,displayName="Server",xDescriptors={"urn:alm:descriptor:com.tectonic.ui:text"}
 	Server string `json:"server,omitempty"`
 
diff --git a/bundle/manifests/argocd-operator.clusterserviceversion.yaml b/bundle/manifests/argocd-operator.clusterserviceversion.yaml
index ba8d77c7..8f25562d 100644
--- a/bundle/manifests/argocd-operator.clusterserviceversion.yaml
+++ b/bundle/manifests/argocd-operator.clusterserviceversion.yaml
@@ -756,91 +756,102 @@ spec:
       statusDescriptors:
       - description: 'ApplicationController is a simple, high-level summary of where
           the Argo CD application controller component is in its lifecycle. There
-          are five possible ApplicationController values: Pending: The Argo CD application
+          are four possible ApplicationController values: Pending: The Argo CD application
           controller component has been accepted by the Kubernetes system, but one
           or more of the required resources have not been created. Running: All of
           the required Pods for the Argo CD application controller component are in
           a Ready state. Failed: At least one of the  Argo CD application controller
-          component Pods had a failure. Unknown: For some reason the state of the
-          Argo CD application controller component could not be obtained.'
+          component Pods had a failure. Unknown: The state of the Argo CD application
+          controller component could not be obtained.'
         displayName: ApplicationController
         path: applicationController
         x-descriptors:
         - urn:alm:descriptor:com.tectonic.ui:text
+      - description: 'ApplicationSetController is a simple, high-level summary of
+          where the Argo CD applicationSet controller component is in its lifecycle.
+          There are four possible ApplicationSetController values: Pending: The Argo
+          CD applicationSet controller component has been accepted by the Kubernetes
+          system, but one or more of the required resources have not been created.
+          Running: All of the required Pods for the Argo CD applicationSet controller
+          component are in a Ready state. Failed: At least one of the  Argo CD applicationSet
+          controller component Pods had a failure. Unknown: The state of the Argo
+          CD applicationSet controller component could not be obtained.'
+        displayName: ApplicationSetController
+        path: applicationSetController
+        x-descriptors:
+        - urn:alm:descriptor:com.tectonic.ui:text
       - description: 'Dex is a simple, high-level summary of where the Argo CD Dex
-          component is in its lifecycle. There are five possible dex values: Pending:
+          component is in its lifecycle. There are four possible dex values: Pending:
           The Argo CD Dex component has been accepted by the Kubernetes system, but
           one or more of the required resources have not been created. Running: All
           of the required Pods for the Argo CD Dex component are in a Ready state.
           Failed: At least one of the  Argo CD Dex component Pods had a failure. Unknown:
-          For some reason the state of the Argo CD Dex component could not be obtained.'
+          The state of the Argo CD Dex component could not be obtained.'
         displayName: Dex
         path: dex
         x-descriptors:
         - urn:alm:descriptor:com.tectonic.ui:text
       - description: 'NotificationsController is a simple, high-level summary of where
           the Argo CD notifications controller component is in its lifecycle. There
-          are five possible NotificationsController values: Pending: The Argo CD notifications
+          are four possible NotificationsController values: Pending: The Argo CD notifications
           controller component has been accepted by the Kubernetes system, but one
           or more of the required resources have not been created. Running: All of
           the required Pods for the Argo CD notifications controller component are
           in a Ready state. Failed: At least one of the  Argo CD notifications controller
-          component Pods had a failure. Unknown: For some reason the state of the
-          Argo CD notifications controller component could not be obtained.'
+          component Pods had a failure. Unknown: The state of the Argo CD notifications
+          controller component could not be obtained.'
         displayName: NotificationsController
         path: notificationsController
         x-descriptors:
         - urn:alm:descriptor:com.tectonic.ui:text
       - description: 'Phase is a simple, high-level summary of where the ArgoCD is
-          in its lifecycle. There are five possible phase values: Pending: The ArgoCD
+          in its lifecycle. There are four possible phase values: Pending: The ArgoCD
           has been accepted by the Kubernetes system, but one or more of the required
           resources have not been created. Available: All of the resources for the
           ArgoCD are ready. Failed: At least one resource has experienced a failure.
-          Unknown: For some reason the state of the ArgoCD phase could not be obtained.'
+          Unknown: The state of the ArgoCD phase could not be obtained.'
         displayName: Phase
         path: phase
         x-descriptors:
         - urn:alm:descriptor:com.tectonic.ui:text
       - description: 'Redis is a simple, high-level summary of where the Argo CD Redis
-          component is in its lifecycle. There are five possible redis values: Pending:
+          component is in its lifecycle. There are four possible redis values: Pending:
           The Argo CD Redis component has been accepted by the Kubernetes system,
           but one or more of the required resources have not been created. Running:
           All of the required Pods for the Argo CD Redis component are in a Ready
           state. Failed: At least one of the  Argo CD Redis component Pods had a failure.
-          Unknown: For some reason the state of the Argo CD Redis component could
-          not be obtained.'
+          Unknown: The state of the Argo CD Redis component could not be obtained.'
         displayName: Redis
         path: redis
         x-descriptors:
         - urn:alm:descriptor:com.tectonic.ui:text
       - description: 'Repo is a simple, high-level summary of where the Argo CD Repo
-          component is in its lifecycle. There are five possible repo values: Pending:
+          component is in its lifecycle. There are four possible repo values: Pending:
           The Argo CD Repo component has been accepted by the Kubernetes system, but
           one or more of the required resources have not been created. Running: All
           of the required Pods for the Argo CD Repo component are in a Ready state.
           Failed: At least one of the  Argo CD Repo component Pods had a failure.
-          Unknown: For some reason the state of the Argo CD Repo component could not
-          be obtained.'
+          Unknown: The state of the Argo CD Repo component could not be obtained.'
         displayName: Repo
         path: repo
         x-descriptors:
         - urn:alm:descriptor:com.tectonic.ui:text
       - description: 'Server is a simple, high-level summary of where the Argo CD
-          server component is in its lifecycle. There are five possible server values:
+          server component is in its lifecycle. There are four possible server values:
           Pending: The Argo CD server component has been accepted by the Kubernetes
           system, but one or more of the required resources have not been created.
           Running: All of the required Pods for the Argo CD server component are in
           a Ready state. Failed: At least one of the  Argo CD server component Pods
-          had a failure. Unknown: For some reason the state of the Argo CD server
-          component could not be obtained.'
+          had a failure. Unknown: The state of the Argo CD server component could
+          not be obtained.'
         displayName: Server
         path: server
         x-descriptors:
         - urn:alm:descriptor:com.tectonic.ui:text
       - description: 'SSOConfig defines the status of SSO configuration. Success:
           Only one SSO provider is configured in CR. Failed: SSO configuration is
-          illegal or more than one SSO providers are configured in CR. Unknown: For
-          some reason the SSO configuration could not be obtained.'
+          illegal or more than one SSO providers are configured in CR. Unknown: The
+          SSO configuration could not be obtained.'
         displayName: SSOConfig
         path: ssoConfig
         x-descriptors:
diff --git a/bundle/manifests/argoproj.io_argocds.yaml b/bundle/manifests/argoproj.io_argocds.yaml
index ac9429ea..b3ffacae 100644
--- a/bundle/manifests/argoproj.io_argocds.yaml
+++ b/bundle/manifests/argoproj.io_argocds.yaml
@@ -6189,24 +6189,36 @@ spec:
               applicationController:
                 description: 'ApplicationController is a simple, high-level summary
                   of where the Argo CD application controller component is in its
-                  lifecycle. There are five possible ApplicationController values:
+                  lifecycle. There are four possible ApplicationController values:
                   Pending: The Argo CD application controller component has been accepted
                   by the Kubernetes system, but one or more of the required resources
                   have not been created. Running: All of the required Pods for the
                   Argo CD application controller component are in a Ready state. Failed:
                   At least one of the  Argo CD application controller component Pods
-                  had a failure. Unknown: For some reason the state of the Argo CD
-                  application controller component could not be obtained.'
+                  had a failure. Unknown: The state of the Argo CD application controller
+                  component could not be obtained.'
+                type: string
+              applicationSetController:
+                description: 'ApplicationSetController is a simple, high-level summary
+                  of where the Argo CD applicationSet controller component is in its
+                  lifecycle. There are four possible ApplicationSetController values:
+                  Pending: The Argo CD applicationSet controller component has been
+                  accepted by the Kubernetes system, but one or more of the required
+                  resources have not been created. Running: All of the required Pods
+                  for the Argo CD applicationSet controller component are in a Ready
+                  state. Failed: At least one of the  Argo CD applicationSet controller
+                  component Pods had a failure. Unknown: The state of the Argo CD
+                  applicationSet controller component could not be obtained.'
                 type: string
               dex:
                 description: 'Dex is a simple, high-level summary of where the Argo
-                  CD Dex component is in its lifecycle. There are five possible dex
+                  CD Dex component is in its lifecycle. There are four possible dex
                   values: Pending: The Argo CD Dex component has been accepted by
                   the Kubernetes system, but one or more of the required resources
                   have not been created. Running: All of the required Pods for the
                   Argo CD Dex component are in a Ready state. Failed: At least one
-                  of the  Argo CD Dex component Pods had a failure. Unknown: For some
-                  reason the state of the Argo CD Dex component could not be obtained.'
+                  of the  Argo CD Dex component Pods had a failure. Unknown: The state
+                  of the Argo CD Dex component could not be obtained.'
                 type: string
               host:
                 description: Host is the hostname of the Ingress.
@@ -6214,34 +6226,33 @@ spec:
               notificationsController:
                 description: 'NotificationsController is a simple, high-level summary
                   of where the Argo CD notifications controller component is in its
-                  lifecycle. There are five possible NotificationsController values:
+                  lifecycle. There are four possible NotificationsController values:
                   Pending: The Argo CD notifications controller component has been
                   accepted by the Kubernetes system, but one or more of the required
                   resources have not been created. Running: All of the required Pods
                   for the Argo CD notifications controller component are in a Ready
                   state. Failed: At least one of the  Argo CD notifications controller
-                  component Pods had a failure. Unknown: For some reason the state
-                  of the Argo CD notifications controller component could not be obtained.'
+                  component Pods had a failure. Unknown: The state of the Argo CD
+                  notifications controller component could not be obtained.'
                 type: string
               phase:
                 description: 'Phase is a simple, high-level summary of where the ArgoCD
-                  is in its lifecycle. There are five possible phase values: Pending:
+                  is in its lifecycle. There are four possible phase values: Pending:
                   The ArgoCD has been accepted by the Kubernetes system, but one or
                   more of the required resources have not been created. Available:
                   All of the resources for the ArgoCD are ready. Failed: At least
-                  one resource has experienced a failure. Unknown: For some reason
-                  the state of the ArgoCD phase could not be obtained.'
+                  one resource has experienced a failure. Unknown: The state of the
+                  ArgoCD phase could not be obtained.'
                 type: string
               redis:
                 description: 'Redis is a simple, high-level summary of where the Argo
-                  CD Redis component is in its lifecycle. There are five possible
+                  CD Redis component is in its lifecycle. There are four possible
                   redis values: Pending: The Argo CD Redis component has been accepted
                   by the Kubernetes system, but one or more of the required resources
                   have not been created. Running: All of the required Pods for the
                   Argo CD Redis component are in a Ready state. Failed: At least one
-                  of the  Argo CD Redis component Pods had a failure. Unknown: For
-                  some reason the state of the Argo CD Redis component could not be
-                  obtained.'
+                  of the  Argo CD Redis component Pods had a failure. Unknown: The
+                  state of the Argo CD Redis component could not be obtained.'
                 type: string
               redisTLSChecksum:
                 description: RedisTLSChecksum contains the SHA256 checksum of the
@@ -6250,14 +6261,13 @@ spec:
                 type: string
               repo:
                 description: 'Repo is a simple, high-level summary of where the Argo
-                  CD Repo component is in its lifecycle. There are five possible repo
+                  CD Repo component is in its lifecycle. There are four possible repo
                   values: Pending: The Argo CD Repo component has been accepted by
                   the Kubernetes system, but one or more of the required resources
                   have not been created. Running: All of the required Pods for the
                   Argo CD Repo component are in a Ready state. Failed: At least one
-                  of the  Argo CD Repo component Pods had a failure. Unknown: For
-                  some reason the state of the Argo CD Repo component could not be
-                  obtained.'
+                  of the  Argo CD Repo component Pods had a failure. Unknown: The
+                  state of the Argo CD Repo component could not be obtained.'
                 type: string
               repoTLSChecksum:
                 description: RepoTLSChecksum contains the SHA256 checksum of the latest
@@ -6266,20 +6276,19 @@ spec:
                 type: string
               server:
                 description: 'Server is a simple, high-level summary of where the
-                  Argo CD server component is in its lifecycle. There are five possible
+                  Argo CD server component is in its lifecycle. There are four possible
                   server values: Pending: The Argo CD server component has been accepted
                   by the Kubernetes system, but one or more of the required resources
                   have not been created. Running: All of the required Pods for the
                   Argo CD server component are in a Ready state. Failed: At least
                   one of the  Argo CD server component Pods had a failure. Unknown:
-                  For some reason the state of the Argo CD server component could
-                  not be obtained.'
+                  The state of the Argo CD server component could not be obtained.'
                 type: string
               ssoConfig:
                 description: 'SSOConfig defines the status of SSO configuration. Success:
                   Only one SSO provider is configured in CR. Failed: SSO configuration
                   is illegal or more than one SSO providers are configured in CR.
-                  Unknown: For some reason the SSO configuration could not be obtained.'
+                  Unknown: The SSO configuration could not be obtained.'
                 type: string
             type: object
         type: object
diff --git a/config/crd/bases/argoproj.io_argocds.yaml b/config/crd/bases/argoproj.io_argocds.yaml
index f361245e..3cce9a95 100644
--- a/config/crd/bases/argoproj.io_argocds.yaml
+++ b/config/crd/bases/argoproj.io_argocds.yaml
@@ -6191,24 +6191,36 @@ spec:
               applicationController:
                 description: 'ApplicationController is a simple, high-level summary
                   of where the Argo CD application controller component is in its
-                  lifecycle. There are five possible ApplicationController values:
+                  lifecycle. There are four possible ApplicationController values:
                   Pending: The Argo CD application controller component has been accepted
                   by the Kubernetes system, but one or more of the required resources
                   have not been created. Running: All of the required Pods for the
                   Argo CD application controller component are in a Ready state. Failed:
                   At least one of the  Argo CD application controller component Pods
-                  had a failure. Unknown: For some reason the state of the Argo CD
-                  application controller component could not be obtained.'
+                  had a failure. Unknown: The state of the Argo CD application controller
+                  component could not be obtained.'
+                type: string
+              applicationSetController:
+                description: 'ApplicationSetController is a simple, high-level summary
+                  of where the Argo CD applicationSet controller component is in its
+                  lifecycle. There are four possible ApplicationSetController values:
+                  Pending: The Argo CD applicationSet controller component has been
+                  accepted by the Kubernetes system, but one or more of the required
+                  resources have not been created. Running: All of the required Pods
+                  for the Argo CD applicationSet controller component are in a Ready
+                  state. Failed: At least one of the  Argo CD applicationSet controller
+                  component Pods had a failure. Unknown: The state of the Argo CD
+                  applicationSet controller component could not be obtained.'
                 type: string
               dex:
                 description: 'Dex is a simple, high-level summary of where the Argo
-                  CD Dex component is in its lifecycle. There are five possible dex
+                  CD Dex component is in its lifecycle. There are four possible dex
                   values: Pending: The Argo CD Dex component has been accepted by
                   the Kubernetes system, but one or more of the required resources
                   have not been created. Running: All of the required Pods for the
                   Argo CD Dex component are in a Ready state. Failed: At least one
-                  of the  Argo CD Dex component Pods had a failure. Unknown: For some
-                  reason the state of the Argo CD Dex component could not be obtained.'
+                  of the  Argo CD Dex component Pods had a failure. Unknown: The state
+                  of the Argo CD Dex component could not be obtained.'
                 type: string
               host:
                 description: Host is the hostname of the Ingress.
@@ -6216,34 +6228,33 @@ spec:
               notificationsController:
                 description: 'NotificationsController is a simple, high-level summary
                   of where the Argo CD notifications controller component is in its
-                  lifecycle. There are five possible NotificationsController values:
+                  lifecycle. There are four possible NotificationsController values:
                   Pending: The Argo CD notifications controller component has been
                   accepted by the Kubernetes system, but one or more of the required
                   resources have not been created. Running: All of the required Pods
                   for the Argo CD notifications controller component are in a Ready
                   state. Failed: At least one of the  Argo CD notifications controller
-                  component Pods had a failure. Unknown: For some reason the state
-                  of the Argo CD notifications controller component could not be obtained.'
+                  component Pods had a failure. Unknown: The state of the Argo CD
+                  notifications controller component could not be obtained.'
                 type: string
               phase:
                 description: 'Phase is a simple, high-level summary of where the ArgoCD
-                  is in its lifecycle. There are five possible phase values: Pending:
+                  is in its lifecycle. There are four possible phase values: Pending:
                   The ArgoCD has been accepted by the Kubernetes system, but one or
                   more of the required resources have not been created. Available:
                   All of the resources for the ArgoCD are ready. Failed: At least
-                  one resource has experienced a failure. Unknown: For some reason
-                  the state of the ArgoCD phase could not be obtained.'
+                  one resource has experienced a failure. Unknown: The state of the
+                  ArgoCD phase could not be obtained.'
                 type: string
               redis:
                 description: 'Redis is a simple, high-level summary of where the Argo
-                  CD Redis component is in its lifecycle. There are five possible
+                  CD Redis component is in its lifecycle. There are four possible
                   redis values: Pending: The Argo CD Redis component has been accepted
                   by the Kubernetes system, but one or more of the required resources
                   have not been created. Running: All of the required Pods for the
                   Argo CD Redis component are in a Ready state. Failed: At least one
-                  of the  Argo CD Redis component Pods had a failure. Unknown: For
-                  some reason the state of the Argo CD Redis component could not be
-                  obtained.'
+                  of the  Argo CD Redis component Pods had a failure. Unknown: The
+                  state of the Argo CD Redis component could not be obtained.'
                 type: string
               redisTLSChecksum:
                 description: RedisTLSChecksum contains the SHA256 checksum of the
@@ -6252,14 +6263,13 @@ spec:
                 type: string
               repo:
                 description: 'Repo is a simple, high-level summary of where the Argo
-                  CD Repo component is in its lifecycle. There are five possible repo
+                  CD Repo component is in its lifecycle. There are four possible repo
                   values: Pending: The Argo CD Repo component has been accepted by
                   the Kubernetes system, but one or more of the required resources
                   have not been created. Running: All of the required Pods for the
                   Argo CD Repo component are in a Ready state. Failed: At least one
-                  of the  Argo CD Repo component Pods had a failure. Unknown: For
-                  some reason the state of the Argo CD Repo component could not be
-                  obtained.'
+                  of the  Argo CD Repo component Pods had a failure. Unknown: The
+                  state of the Argo CD Repo component could not be obtained.'
                 type: string
               repoTLSChecksum:
                 description: RepoTLSChecksum contains the SHA256 checksum of the latest
@@ -6268,20 +6278,19 @@ spec:
                 type: string
               server:
                 description: 'Server is a simple, high-level summary of where the
-                  Argo CD server component is in its lifecycle. There are five possible
+                  Argo CD server component is in its lifecycle. There are four possible
                   server values: Pending: The Argo CD server component has been accepted
                   by the Kubernetes system, but one or more of the required resources
                   have not been created. Running: All of the required Pods for the
                   Argo CD server component are in a Ready state. Failed: At least
                   one of the  Argo CD server component Pods had a failure. Unknown:
-                  For some reason the state of the Argo CD server component could
-                  not be obtained.'
+                  The state of the Argo CD server component could not be obtained.'
                 type: string
               ssoConfig:
                 description: 'SSOConfig defines the status of SSO configuration. Success:
                   Only one SSO provider is configured in CR. Failed: SSO configuration
                   is illegal or more than one SSO providers are configured in CR.
-                  Unknown: For some reason the SSO configuration could not be obtained.'
+                  Unknown: The SSO configuration could not be obtained.'
                 type: string
             type: object
         type: object
diff --git a/config/manifests/bases/argocd-operator.clusterserviceversion.yaml b/config/manifests/bases/argocd-operator.clusterserviceversion.yaml
index d4b460a6..4f100c8d 100644
--- a/config/manifests/bases/argocd-operator.clusterserviceversion.yaml
+++ b/config/manifests/bases/argocd-operator.clusterserviceversion.yaml
@@ -630,91 +630,102 @@ spec:
       statusDescriptors:
       - description: 'ApplicationController is a simple, high-level summary of where
           the Argo CD application controller component is in its lifecycle. There
-          are five possible ApplicationController values: Pending: The Argo CD application
+          are four possible ApplicationController values: Pending: The Argo CD application
           controller component has been accepted by the Kubernetes system, but one
           or more of the required resources have not been created. Running: All of
           the required Pods for the Argo CD application controller component are in
           a Ready state. Failed: At least one of the  Argo CD application controller
-          component Pods had a failure. Unknown: For some reason the state of the
-          Argo CD application controller component could not be obtained.'
+          component Pods had a failure. Unknown: The state of the Argo CD application
+          controller component could not be obtained.'
         displayName: ApplicationController
         path: applicationController
         x-descriptors:
         - urn:alm:descriptor:com.tectonic.ui:text
+      - description: 'ApplicationSetController is a simple, high-level summary of
+          where the Argo CD applicationSet controller component is in its lifecycle.
+          There are four possible ApplicationSetController values: Pending: The Argo
+          CD applicationSet controller component has been accepted by the Kubernetes
+          system, but one or more of the required resources have not been created.
+          Running: All of the required Pods for the Argo CD applicationSet controller
+          component are in a Ready state. Failed: At least one of the  Argo CD applicationSet
+          controller component Pods had a failure. Unknown: The state of the Argo
+          CD applicationSet controller component could not be obtained.'
+        displayName: ApplicationSetController
+        path: applicationSetController
+        x-descriptors:
+        - urn:alm:descriptor:com.tectonic.ui:text
       - description: 'Dex is a simple, high-level summary of where the Argo CD Dex
-          component is in its lifecycle. There are five possible dex values: Pending:
+          component is in its lifecycle. There are four possible dex values: Pending:
           The Argo CD Dex component has been accepted by the Kubernetes system, but
           one or more of the required resources have not been created. Running: All
           of the required Pods for the Argo CD Dex component are in a Ready state.
           Failed: At least one of the  Argo CD Dex component Pods had a failure. Unknown:
-          For some reason the state of the Argo CD Dex component could not be obtained.'
+          The state of the Argo CD Dex component could not be obtained.'
         displayName: Dex
         path: dex
         x-descriptors:
         - urn:alm:descriptor:com.tectonic.ui:text
       - description: 'NotificationsController is a simple, high-level summary of where
           the Argo CD notifications controller component is in its lifecycle. There
-          are five possible NotificationsController values: Pending: The Argo CD notifications
+          are four possible NotificationsController values: Pending: The Argo CD notifications
           controller component has been accepted by the Kubernetes system, but one
           or more of the required resources have not been created. Running: All of
           the required Pods for the Argo CD notifications controller component are
           in a Ready state. Failed: At least one of the  Argo CD notifications controller
-          component Pods had a failure. Unknown: For some reason the state of the
-          Argo CD notifications controller component could not be obtained.'
+          component Pods had a failure. Unknown: The state of the Argo CD notifications
+          controller component could not be obtained.'
         displayName: NotificationsController
         path: notificationsController
         x-descriptors:
         - urn:alm:descriptor:com.tectonic.ui:text
       - description: 'Phase is a simple, high-level summary of where the ArgoCD is
-          in its lifecycle. There are five possible phase values: Pending: The ArgoCD
+          in its lifecycle. There are four possible phase values: Pending: The ArgoCD
           has been accepted by the Kubernetes system, but one or more of the required
           resources have not been created. Available: All of the resources for the
           ArgoCD are ready. Failed: At least one resource has experienced a failure.
-          Unknown: For some reason the state of the ArgoCD phase could not be obtained.'
+          Unknown: The state of the ArgoCD phase could not be obtained.'
         displayName: Phase
         path: phase
         x-descriptors:
         - urn:alm:descriptor:com.tectonic.ui:text
       - description: 'Redis is a simple, high-level summary of where the Argo CD Redis
-          component is in its lifecycle. There are five possible redis values: Pending:
+          component is in its lifecycle. There are four possible redis values: Pending:
           The Argo CD Redis component has been accepted by the Kubernetes system,
           but one or more of the required resources have not been created. Running:
           All of the required Pods for the Argo CD Redis component are in a Ready
           state. Failed: At least one of the  Argo CD Redis component Pods had a failure.
-          Unknown: For some reason the state of the Argo CD Redis component could
-          not be obtained.'
+          Unknown: The state of the Argo CD Redis component could not be obtained.'
         displayName: Redis
         path: redis
         x-descriptors:
         - urn:alm:descriptor:com.tectonic.ui:text
       - description: 'Repo is a simple, high-level summary of where the Argo CD Repo
-          component is in its lifecycle. There are five possible repo values: Pending:
+          component is in its lifecycle. There are four possible repo values: Pending:
           The Argo CD Repo component has been accepted by the Kubernetes system, but
           one or more of the required resources have not been created. Running: All
           of the required Pods for the Argo CD Repo component are in a Ready state.
           Failed: At least one of the  Argo CD Repo component Pods had a failure.
-          Unknown: For some reason the state of the Argo CD Repo component could not
-          be obtained.'
+          Unknown: The state of the Argo CD Repo component could not be obtained.'
         displayName: Repo
         path: repo
         x-descriptors:
         - urn:alm:descriptor:com.tectonic.ui:text
       - description: 'Server is a simple, high-level summary of where the Argo CD
-          server component is in its lifecycle. There are five possible server values:
+          server component is in its lifecycle. There are four possible server values:
           Pending: The Argo CD server component has been accepted by the Kubernetes
           system, but one or more of the required resources have not been created.
           Running: All of the required Pods for the Argo CD server component are in
           a Ready state. Failed: At least one of the  Argo CD server component Pods
-          had a failure. Unknown: For some reason the state of the Argo CD server
-          component could not be obtained.'
+          had a failure. Unknown: The state of the Argo CD server component could
+          not be obtained.'
         displayName: Server
         path: server
         x-descriptors:
         - urn:alm:descriptor:com.tectonic.ui:text
       - description: 'SSOConfig defines the status of SSO configuration. Success:
           Only one SSO provider is configured in CR. Failed: SSO configuration is
-          illegal or more than one SSO providers are configured in CR. Unknown: For
-          some reason the SSO configuration could not be obtained.'
+          illegal or more than one SSO providers are configured in CR. Unknown: The
+          SSO configuration could not be obtained.'
         displayName: SSOConfig
         path: ssoConfig
         x-descriptors:
diff --git a/controllers/argocd/status.go b/controllers/argocd/status.go
index e293a49a..0f6a9a56 100644
--- a/controllers/argocd/status.go
+++ b/controllers/argocd/status.go
@@ -66,6 +66,10 @@ func (r *ReconcileArgoCD) reconcileStatus(cr *argoprojv1a1.ArgoCD) error {
 		return err
 	}
 
+	if err := r.reconcileStatusApplicationSetController(cr); err != nil {
+		return err
+	}
+
 	return nil
 }
 
@@ -113,6 +117,28 @@ func (r *ReconcileArgoCD) reconcileStatusDex(cr *argoprojv1a1.ArgoCD) error {
 	return nil
 }
 
+// reconcileStatusApplicationSetController will ensure that the ApplicationSet controller status is updated for the given ArgoCD.
+func (r *ReconcileArgoCD) reconcileStatusApplicationSetController(cr *argoprojv1a1.ArgoCD) error {
+	status := "Unknown"
+
+	deploy := newDeploymentWithSuffix("applicationset-controller", "controller", cr)
+	if argoutil.IsObjectFound(r.Client, cr.Namespace, deploy.Name, deploy) {
+		status = "Pending"
+
+		if deploy.Spec.Replicas != nil {
+			if deploy.Status.ReadyReplicas == *deploy.Spec.Replicas {
+				status = "Running"
+			}
+		}
+	}
+
+	if cr.Status.ApplicationSetController != status {
+		cr.Status.ApplicationSetController = status
+		return r.Client.Status().Update(context.TODO(), cr)
+	}
+	return nil
+}
+
 // reconcileStatusSSOConfig will ensure that the SSOConfig status is updated for the given ArgoCD.
 func (r *ReconcileArgoCD) reconcileStatusSSOConfig(cr *argoprojv1a1.ArgoCD) error {
 
diff --git a/deploy/olm-catalog/argocd-operator/0.5.0/argocd-operator.v0.5.0.clusterserviceversion.yaml b/deploy/olm-catalog/argocd-operator/0.5.0/argocd-operator.v0.5.0.clusterserviceversion.yaml
index b7d1243d..845ee96d 100644
--- a/deploy/olm-catalog/argocd-operator/0.5.0/argocd-operator.v0.5.0.clusterserviceversion.yaml
+++ b/deploy/olm-catalog/argocd-operator/0.5.0/argocd-operator.v0.5.0.clusterserviceversion.yaml
@@ -1179,3 +1179,4 @@ spec:
     name: Argo CD Community
   replaces: argocd-operator.v0.4.0
   version: 0.5.0
+  
\ No newline at end of file
diff --git a/deploy/olm-catalog/argocd-operator/0.5.0/argoproj.io_argocds.yaml b/deploy/olm-catalog/argocd-operator/0.5.0/argoproj.io_argocds.yaml
index ac9429ea..fe429545 100644
--- a/deploy/olm-catalog/argocd-operator/0.5.0/argoproj.io_argocds.yaml
+++ b/deploy/olm-catalog/argocd-operator/0.5.0/argoproj.io_argocds.yaml
@@ -6293,3 +6293,4 @@ status:
     plural: ""
   conditions: []
   storedVersions: []
+  
\ No newline at end of file
diff --git a/deploy/olm-catalog/argocd-operator/0.6.0/argocd-operator.v0.6.0.clusterserviceversion.yaml b/deploy/olm-catalog/argocd-operator/0.6.0/argocd-operator.v0.6.0.clusterserviceversion.yaml
index ba8d77c7..8f25562d 100644
--- a/deploy/olm-catalog/argocd-operator/0.6.0/argocd-operator.v0.6.0.clusterserviceversion.yaml
+++ b/deploy/olm-catalog/argocd-operator/0.6.0/argocd-operator.v0.6.0.clusterserviceversion.yaml
@@ -756,91 +756,102 @@ spec:
       statusDescriptors:
       - description: 'ApplicationController is a simple, high-level summary of where
           the Argo CD application controller component is in its lifecycle. There
-          are five possible ApplicationController values: Pending: The Argo CD application
+          are four possible ApplicationController values: Pending: The Argo CD application
           controller component has been accepted by the Kubernetes system, but one
           or more of the required resources have not been created. Running: All of
           the required Pods for the Argo CD application controller component are in
           a Ready state. Failed: At least one of the  Argo CD application controller
-          component Pods had a failure. Unknown: For some reason the state of the
-          Argo CD application controller component could not be obtained.'
+          component Pods had a failure. Unknown: The state of the Argo CD application
+          controller component could not be obtained.'
         displayName: ApplicationController
         path: applicationController
         x-descriptors:
         - urn:alm:descriptor:com.tectonic.ui:text
+      - description: 'ApplicationSetController is a simple, high-level summary of
+          where the Argo CD applicationSet controller component is in its lifecycle.
+          There are four possible ApplicationSetController values: Pending: The Argo
+          CD applicationSet controller component has been accepted by the Kubernetes
+          system, but one or more of the required resources have not been created.
+          Running: All of the required Pods for the Argo CD applicationSet controller
+          component are in a Ready state. Failed: At least one of the  Argo CD applicationSet
+          controller component Pods had a failure. Unknown: The state of the Argo
+          CD applicationSet controller component could not be obtained.'
+        displayName: ApplicationSetController
+        path: applicationSetController
+        x-descriptors:
+        - urn:alm:descriptor:com.tectonic.ui:text
       - description: 'Dex is a simple, high-level summary of where the Argo CD Dex
-          component is in its lifecycle. There are five possible dex values: Pending:
+          component is in its lifecycle. There are four possible dex values: Pending:
           The Argo CD Dex component has been accepted by the Kubernetes system, but
           one or more of the required resources have not been created. Running: All
           of the required Pods for the Argo CD Dex component are in a Ready state.
           Failed: At least one of the  Argo CD Dex component Pods had a failure. Unknown:
-          For some reason the state of the Argo CD Dex component could not be obtained.'
+          The state of the Argo CD Dex component could not be obtained.'
         displayName: Dex
         path: dex
         x-descriptors:
         - urn:alm:descriptor:com.tectonic.ui:text
       - description: 'NotificationsController is a simple, high-level summary of where
           the Argo CD notifications controller component is in its lifecycle. There
-          are five possible NotificationsController values: Pending: The Argo CD notifications
+          are four possible NotificationsController values: Pending: The Argo CD notifications
           controller component has been accepted by the Kubernetes system, but one
           or more of the required resources have not been created. Running: All of
           the required Pods for the Argo CD notifications controller component are
           in a Ready state. Failed: At least one of the  Argo CD notifications controller
-          component Pods had a failure. Unknown: For some reason the state of the
-          Argo CD notifications controller component could not be obtained.'
+          component Pods had a failure. Unknown: The state of the Argo CD notifications
+          controller component could not be obtained.'
         displayName: NotificationsController
         path: notificationsController
         x-descriptors:
         - urn:alm:descriptor:com.tectonic.ui:text
       - description: 'Phase is a simple, high-level summary of where the ArgoCD is
-          in its lifecycle. There are five possible phase values: Pending: The ArgoCD
+          in its lifecycle. There are four possible phase values: Pending: The ArgoCD
           has been accepted by the Kubernetes system, but one or more of the required
           resources have not been created. Available: All of the resources for the
           ArgoCD are ready. Failed: At least one resource has experienced a failure.
-          Unknown: For some reason the state of the ArgoCD phase could not be obtained.'
+          Unknown: The state of the ArgoCD phase could not be obtained.'
         displayName: Phase
         path: phase
         x-descriptors:
         - urn:alm:descriptor:com.tectonic.ui:text
       - description: 'Redis is a simple, high-level summary of where the Argo CD Redis
-          component is in its lifecycle. There are five possible redis values: Pending:
+          component is in its lifecycle. There are four possible redis values: Pending:
           The Argo CD Redis component has been accepted by the Kubernetes system,
           but one or more of the required resources have not been created. Running:
           All of the required Pods for the Argo CD Redis component are in a Ready
           state. Failed: At least one of the  Argo CD Redis component Pods had a failure.
-          Unknown: For some reason the state of the Argo CD Redis component could
-          not be obtained.'
+          Unknown: The state of the Argo CD Redis component could not be obtained.'
         displayName: Redis
         path: redis
         x-descriptors:
         - urn:alm:descriptor:com.tectonic.ui:text
       - description: 'Repo is a simple, high-level summary of where the Argo CD Repo
-          component is in its lifecycle. There are five possible repo values: Pending:
+          component is in its lifecycle. There are four possible repo values: Pending:
           The Argo CD Repo component has been accepted by the Kubernetes system, but
           one or more of the required resources have not been created. Running: All
           of the required Pods for the Argo CD Repo component are in a Ready state.
           Failed: At least one of the  Argo CD Repo component Pods had a failure.
-          Unknown: For some reason the state of the Argo CD Repo component could not
-          be obtained.'
+          Unknown: The state of the Argo CD Repo component could not be obtained.'
         displayName: Repo
         path: repo
         x-descriptors:
         - urn:alm:descriptor:com.tectonic.ui:text
       - description: 'Server is a simple, high-level summary of where the Argo CD
-          server component is in its lifecycle. There are five possible server values:
+          server component is in its lifecycle. There are four possible server values:
           Pending: The Argo CD server component has been accepted by the Kubernetes
           system, but one or more of the required resources have not been created.
           Running: All of the required Pods for the Argo CD server component are in
           a Ready state. Failed: At least one of the  Argo CD server component Pods
-          had a failure. Unknown: For some reason the state of the Argo CD server
-          component could not be obtained.'
+          had a failure. Unknown: The state of the Argo CD server component could
+          not be obtained.'
         displayName: Server
         path: server
         x-descriptors:
         - urn:alm:descriptor:com.tectonic.ui:text
       - description: 'SSOConfig defines the status of SSO configuration. Success:
           Only one SSO provider is configured in CR. Failed: SSO configuration is
-          illegal or more than one SSO providers are configured in CR. Unknown: For
-          some reason the SSO configuration could not be obtained.'
+          illegal or more than one SSO providers are configured in CR. Unknown: The
+          SSO configuration could not be obtained.'
         displayName: SSOConfig
         path: ssoConfig
         x-descriptors:
diff --git a/deploy/olm-catalog/argocd-operator/0.6.0/argoproj.io_argocds.yaml b/deploy/olm-catalog/argocd-operator/0.6.0/argoproj.io_argocds.yaml
index ac9429ea..b3ffacae 100644
--- a/deploy/olm-catalog/argocd-operator/0.6.0/argoproj.io_argocds.yaml
+++ b/deploy/olm-catalog/argocd-operator/0.6.0/argoproj.io_argocds.yaml
@@ -6189,24 +6189,36 @@ spec:
               applicationController:
                 description: 'ApplicationController is a simple, high-level summary
                   of where the Argo CD application controller component is in its
-                  lifecycle. There are five possible ApplicationController values:
+                  lifecycle. There are four possible ApplicationController values:
                   Pending: The Argo CD application controller component has been accepted
                   by the Kubernetes system, but one or more of the required resources
                   have not been created. Running: All of the required Pods for the
                   Argo CD application controller component are in a Ready state. Failed:
                   At least one of the  Argo CD application controller component Pods
-                  had a failure. Unknown: For some reason the state of the Argo CD
-                  application controller component could not be obtained.'
+                  had a failure. Unknown: The state of the Argo CD application controller
+                  component could not be obtained.'
+                type: string
+              applicationSetController:
+                description: 'ApplicationSetController is a simple, high-level summary
+                  of where the Argo CD applicationSet controller component is in its
+                  lifecycle. There are four possible ApplicationSetController values:
+                  Pending: The Argo CD applicationSet controller component has been
+                  accepted by the Kubernetes system, but one or more of the required
+                  resources have not been created. Running: All of the required Pods
+                  for the Argo CD applicationSet controller component are in a Ready
+                  state. Failed: At least one of the  Argo CD applicationSet controller
+                  component Pods had a failure. Unknown: The state of the Argo CD
+                  applicationSet controller component could not be obtained.'
                 type: string
               dex:
                 description: 'Dex is a simple, high-level summary of where the Argo
-                  CD Dex component is in its lifecycle. There are five possible dex
+                  CD Dex component is in its lifecycle. There are four possible dex
                   values: Pending: The Argo CD Dex component has been accepted by
                   the Kubernetes system, but one or more of the required resources
                   have not been created. Running: All of the required Pods for the
                   Argo CD Dex component are in a Ready state. Failed: At least one
-                  of the  Argo CD Dex component Pods had a failure. Unknown: For some
-                  reason the state of the Argo CD Dex component could not be obtained.'
+                  of the  Argo CD Dex component Pods had a failure. Unknown: The state
+                  of the Argo CD Dex component could not be obtained.'
                 type: string
               host:
                 description: Host is the hostname of the Ingress.
@@ -6214,34 +6226,33 @@ spec:
               notificationsController:
                 description: 'NotificationsController is a simple, high-level summary
                   of where the Argo CD notifications controller component is in its
-                  lifecycle. There are five possible NotificationsController values:
+                  lifecycle. There are four possible NotificationsController values:
                   Pending: The Argo CD notifications controller component has been
                   accepted by the Kubernetes system, but one or more of the required
                   resources have not been created. Running: All of the required Pods
                   for the Argo CD notifications controller component are in a Ready
                   state. Failed: At least one of the  Argo CD notifications controller
-                  component Pods had a failure. Unknown: For some reason the state
-                  of the Argo CD notifications controller component could not be obtained.'
+                  component Pods had a failure. Unknown: The state of the Argo CD
+                  notifications controller component could not be obtained.'
                 type: string
               phase:
                 description: 'Phase is a simple, high-level summary of where the ArgoCD
-                  is in its lifecycle. There are five possible phase values: Pending:
+                  is in its lifecycle. There are four possible phase values: Pending:
                   The ArgoCD has been accepted by the Kubernetes system, but one or
                   more of the required resources have not been created. Available:
                   All of the resources for the ArgoCD are ready. Failed: At least
-                  one resource has experienced a failure. Unknown: For some reason
-                  the state of the ArgoCD phase could not be obtained.'
+                  one resource has experienced a failure. Unknown: The state of the
+                  ArgoCD phase could not be obtained.'
                 type: string
               redis:
                 description: 'Redis is a simple, high-level summary of where the Argo
-                  CD Redis component is in its lifecycle. There are five possible
+                  CD Redis component is in its lifecycle. There are four possible
                   redis values: Pending: The Argo CD Redis component has been accepted
                   by the Kubernetes system, but one or more of the required resources
                   have not been created. Running: All of the required Pods for the
                   Argo CD Redis component are in a Ready state. Failed: At least one
-                  of the  Argo CD Redis component Pods had a failure. Unknown: For
-                  some reason the state of the Argo CD Redis component could not be
-                  obtained.'
+                  of the  Argo CD Redis component Pods had a failure. Unknown: The
+                  state of the Argo CD Redis component could not be obtained.'
                 type: string
               redisTLSChecksum:
                 description: RedisTLSChecksum contains the SHA256 checksum of the
@@ -6250,14 +6261,13 @@ spec:
                 type: string
               repo:
                 description: 'Repo is a simple, high-level summary of where the Argo
-                  CD Repo component is in its lifecycle. There are five possible repo
+                  CD Repo component is in its lifecycle. There are four possible repo
                   values: Pending: The Argo CD Repo component has been accepted by
                   the Kubernetes system, but one or more of the required resources
                   have not been created. Running: All of the required Pods for the
                   Argo CD Repo component are in a Ready state. Failed: At least one
-                  of the  Argo CD Repo component Pods had a failure. Unknown: For
-                  some reason the state of the Argo CD Repo component could not be
-                  obtained.'
+                  of the  Argo CD Repo component Pods had a failure. Unknown: The
+                  state of the Argo CD Repo component could not be obtained.'
                 type: string
               repoTLSChecksum:
                 description: RepoTLSChecksum contains the SHA256 checksum of the latest
@@ -6266,20 +6276,19 @@ spec:
                 type: string
               server:
                 description: 'Server is a simple, high-level summary of where the
-                  Argo CD server component is in its lifecycle. There are five possible
+                  Argo CD server component is in its lifecycle. There are four possible
                   server values: Pending: The Argo CD server component has been accepted
                   by the Kubernetes system, but one or more of the required resources
                   have not been created. Running: All of the required Pods for the
                   Argo CD server component are in a Ready state. Failed: At least
                   one of the  Argo CD server component Pods had a failure. Unknown:
-                  For some reason the state of the Argo CD server component could
-                  not be obtained.'
+                  The state of the Argo CD server component could not be obtained.'
                 type: string
               ssoConfig:
                 description: 'SSOConfig defines the status of SSO configuration. Success:
                   Only one SSO provider is configured in CR. Failed: SSO configuration
                   is illegal or more than one SSO providers are configured in CR.
-                  Unknown: For some reason the SSO configuration could not be obtained.'
+                  Unknown: The SSO configuration could not be obtained.'
                 type: string
             type: object
         type: object


Test patch:
diff --git a/controllers/argocd/status_test.go b/controllers/argocd/status_test.go
index e6cc16f2..8586280b 100644
--- a/controllers/argocd/status_test.go
+++ b/controllers/argocd/status_test.go
@@ -234,3 +234,17 @@ func TestReconcileArgoCD_reconcileStatusNotificationsController(t *testing.T) {
 	assert.NoError(t, r.reconcileStatusNotifications(a))
 	assert.Equal(t, "", a.Status.NotificationsController)
 }
+
+func TestReconcileArgoCD_reconcileStatusApplicationSetController(t *testing.T) {
+	logf.SetLogger(ZapLogger(true))
+	a := makeTestArgoCD()
+	r := makeTestReconciler(t, a)
+
+	assert.NoError(t, r.reconcileStatusApplicationSetController(a))
+	assert.Equal(t, "Unknown", a.Status.ApplicationSetController)
+
+	a.Spec.ApplicationSet = &v1alpha1.ArgoCDApplicationSet{}
+	assert.NoError(t, r.reconcileApplicationSetController(a))
+	assert.NoError(t, r.reconcileStatusApplicationSetController(a))
+	assert.Equal(t, "Pending", a.Status.ApplicationSetController)
+}
diff --git a/tests/k8s/1-027_validate_applicationset_status/01-assert.yaml b/tests/k8s/1-027_validate_applicationset_status/01-assert.yaml
new file mode 100644
index 00000000..0e26c3f6
--- /dev/null
+++ b/tests/k8s/1-027_validate_applicationset_status/01-assert.yaml
@@ -0,0 +1,6 @@
+apiVersion: argoproj.io/v1alpha1
+kind: ArgoCD
+metadata:
+  name: example-argocd
+status:
+  applicationSetController: Unknown
\ No newline at end of file
diff --git a/tests/k8s/1-027_validate_applicationset_status/01-install.yaml b/tests/k8s/1-027_validate_applicationset_status/01-install.yaml
new file mode 100644
index 00000000..925e539b
--- /dev/null
+++ b/tests/k8s/1-027_validate_applicationset_status/01-install.yaml
@@ -0,0 +1,5 @@
+apiVersion: argoproj.io/v1alpha1
+kind: ArgoCD
+metadata:
+  name: example-argocd
+spec: {}
\ No newline at end of file
diff --git a/tests/k8s/1-027_validate_applicationset_status/02-assert.yaml b/tests/k8s/1-027_validate_applicationset_status/02-assert.yaml
new file mode 100644
index 00000000..d4044501
--- /dev/null
+++ b/tests/k8s/1-027_validate_applicationset_status/02-assert.yaml
@@ -0,0 +1,6 @@
+apiVersion: argoproj.io/v1alpha1
+kind: ArgoCD
+metadata:
+  name: example-argocd
+status:
+  applicationSetController: Running
\ No newline at end of file
diff --git a/tests/k8s/1-027_validate_applicationset_status/02-enable-appset.yaml b/tests/k8s/1-027_validate_applicationset_status/02-enable-appset.yaml
new file mode 100644
index 00000000..8bc5da47
--- /dev/null
+++ b/tests/k8s/1-027_validate_applicationset_status/02-enable-appset.yaml
@@ -0,0 +1,6 @@
+apiVersion: argoproj.io/v1alpha1
+kind: ArgoCD
+metadata:
+  name: example-argocd
+spec:
+  applicationSet: {}
\ No newline at end of file
diff --git a/tests/k8s/1-027_validate_applicationset_status/03-assert.yaml b/tests/k8s/1-027_validate_applicationset_status/03-assert.yaml
new file mode 100644
index 00000000..08811b4b
--- /dev/null
+++ b/tests/k8s/1-027_validate_applicationset_status/03-assert.yaml
@@ -0,0 +1,6 @@
+apiVersion: argoproj.io/v1alpha1
+kind: ArgoCD
+metadata:
+  name: example-argocd
+status:
+  applicationSetController: Pending
\ No newline at end of file
diff --git a/tests/k8s/1-027_validate_applicationset_status/03-change-appset-image.yaml b/tests/k8s/1-027_validate_applicationset_status/03-change-appset-image.yaml
new file mode 100644
index 00000000..a427db2a
--- /dev/null
+++ b/tests/k8s/1-027_validate_applicationset_status/03-change-appset-image.yaml
@@ -0,0 +1,7 @@
+apiVersion: argoproj.io/v1alpha1
+kind: ArgoCD
+metadata:
+  name: example-argocd
+spec:
+  applicationSet:
+    image: quay.io/argoproj/argocd@sha256:8283a9f06033c2377dc61b03daf49
\ No newline at end of file
diff --git a/tests/k8s/1-027_validate_applicationset_status/03-delete-exisiting-deployment b/tests/k8s/1-027_validate_applicationset_status/03-delete-exisiting-deployment
new file mode 100644
index 00000000..ea61013e
--- /dev/null
+++ b/tests/k8s/1-027_validate_applicationset_status/03-delete-exisiting-deployment
@@ -0,0 +1,4 @@
+apiVersion: kuttl.dev/v1beta1
+kind: TestStep
+commands:
+  - command: kubectl delete deployment example-argocd-applicationset-controller -n $NAMESPACE
\ No newline at end of file