apiVersion: argoproj.io/v1beta1 kind: ArgoCD metadata: name: argocd spec: # using this in conjunction with respectRBAC # defaultClusterScopedRoleDisabled: true resourceTrackingMethod: annotation applicationSet: {} kustomizeBuildOptions: "--enable-helm" notifications: enabled: true controller: logLevel: debug repo: sidecarContainers: - name: setenv-plugin command: [/var/run/argocd/argocd-cmp-server] env: - name: KUSTOMIZE_PLUGIN_HOME value: /etc/kustomize/plugin - name: SUB_DOMAIN value: ${SUB_DOMAIN} image: quay.io/gnunn/tools:latest imagePullPolicy: Always securityContext: runAsNonRoot: true volumeMounts: - mountPath: /var/run/argocd name: var-files - mountPath: /home/argocd/cmp-server/plugins name: plugins - mountPath: /tmp name: tmp - mountPath: /home/argocd/cmp-server/config/plugin.yaml subPath: plugin.yaml name: setenv-cmp-plugin volumes: - configMap: name: setenv-cmp-plugin name: setenv-cmp-plugin server: enableRolloutsUI: true insecure: true route: enabled: true tls: termination: edge insecureEdgeTerminationPolicy: Redirect volumeMounts: - mountPath: /tmp/extensions/ name: extensions volumes: - emptyDir: {} name: extensions resourceHealthChecks: - group: argoproj.io kind: Application check: | hs = {} hs.status = "Progressing" hs.message = "" if obj.status ~= nil then if obj.status.health ~= nil then hs.status = obj.status.health.status hs.message = obj.status.health.message end end return hs - group: argoproj.io kind: RolloutManager check: | hs = {} if obj.status ~= nil then if obj.status.conditions ~= nil then for _, condition in ipairs(obj.status.conditions) do hs.message = condition.message break end end if obj.status.phase ~= nil then if obj.status.phase == "Failure" then hs.status = "Degraded" return hs elseif obj.status.phase == "Available" then hs.status = "Healthy" return hs elseif obj.status.phase == "Pending" then hs.status = "Progressing" return hs end end hs.status = "Progressing" hs.message = "Waiting for operator to update status" return hs end - group: operators.coreos.com kind: Subscription check: | health_status = {} if obj.status ~= nil then if obj.status.conditions ~= nil then numDegraded = 0 numPending = 0 numSuspended = 0 msg = "" for i, condition in pairs(obj.status.conditions) do msg = msg .. i .. ": " .. condition.type .. " | " .. condition.status .. " | " .. condition.reason .. "\n" if condition.type == "InstallPlanPending" and condition.status == "True" then if condition.reason == "RequiresApproval" then numSuspended = numSuspended + 1 else numPending = numPending + 1 end elseif (condition.type == "InstallPlanMissing" and condition.reason ~= "ReferencedInstallPlanNotFound") then numDegraded = numDegraded + 1 elseif (condition.type == "CatalogSourcesUnhealthy" or condition.type == "InstallPlanFailed") and condition.status == "True" then numDegraded = numDegraded + 1 elseif (condition.type == "ResolutionFailed" and condition.reason ~= "ConstraintsNotSatisfiable") then numDegraded = numDegraded + 1 end end if numDegraded > 0 then health_status.status = "Degraded" health_status.message = msg return health_status elseif numSuspended > 0 then health_status.status = "Suspended" health_status.message = "Requires Approval" return health_status elseif numPending > 0 then health_status.status = "Progressing" health_status.message = "An install plan for a subscription is pending installation" return health_status else health_status.status = "Healthy" health_status.message = msg return health_status end end end health_status.status = "Progressing" health_status.message = "An install plan for a subscription is pending installation" return health_status - group: operators.coreos.com kind: InstallPlan check: | hs = {} if obj.status ~= nil then if obj.status.phase ~= nil then if obj.status.phase == "Complete" then hs.status = "Healthy" hs.message = obj.status.phase return hs elseif obj.status.phase == "RequiresApproval" then hs.status = "Suspended" hs.message = obj.status.phase return hs else hs.status = "Progressing" hs.message = obj.status.phase return hs end end end hs.status = "Progressing" hs.message = "Waiting for InstallPlan to complete" return hs - group: image.openshift.io kind: ImageStream check: | hs = {} hs.status = "Progressing" hs.message = "" if obj.status ~= nil then if obj.status.tags ~= nil then numTags = 0 for _ , item in pairs(obj.status.tags) do numTags = numTags + 1 numItems = 0 if item.tags ~= nil then for _ , item in pairs(item.tags) do numItems = numItems + 1 end if numItems == 0 then return hs end end end if numTags > 0 then hs.status = "Healthy" hs.message = "ImageStream has tags resolved" return hs end end end return hs - group: build.openshift.io kind: Build check: | hs = {} if obj.status ~= nil then if obj.status.phase ~= nil then if obj.status.phase == "Complete" then hs.status = "Healthy" hs.message = obj.status.phase return hs end end end hs.status = "Progressing" hs.message = "Waiting for Build to complete" return hs - kind: PersistentVolumeClaim check: | hs = {} if obj.status ~= nil then if obj.status.phase ~= nil then if obj.status.phase == "Pending" then hs.status = "Healthy" hs.message = obj.status.phase return hs end if obj.status.phase == "Bound" then hs.status = "Healthy" hs.message = obj.status.phase return hs end end end hs.status = "Progressing" hs.message = "Waiting for PVC" return hs resourceExclusions: | - apiGroups: - project.openshift.io clusters: - '*' kinds: - Project resourceIgnoreDifferences: resourceIdentifiers: - group: route.openshift.io kind: Route customization: jsonPointers: - /status/ingress - group: quay.redhat.com kind: QuayRegistry customization: jsonPointers: - /status/ingress ha: enabled: false