argo-cd/notification_controller/controller/controller.go

268 lines
9.7 KiB
Go
Raw Normal View History

package controller
import (
"context"
"errors"
"fmt"
"time"
fix(notifications): Allow notifications controller to notify on all namespaces (#15702) * Allow notifications controller to notify on all namespaces This adds functionality to the notifications controller to be notified of and send notifications for applications in any namespace. The namespaces to watch are controlled by the same --application-namespaces and ARGOCD_APPLICATION_NAMESPACES variables as in the application controller. Signed-off-by: Nikolas Skoufis <nskoufis@seek.com.au> * Add SEEK to users.md Signed-off-by: Nikolas Skoufis <nskoufis@seek.com.au> * Remove unused fields Signed-off-by: Nikolas Skoufis <nskoufis@seek.com.au> * Revert changes to Procfile Signed-off-by: Nik Skoufis <n.skoufis@gmail.com> * Fix unit tests Signed-off-by: Nikolas Skoufis <nskoufis@seek.com.au> * - add argocd namespaces environment variable to notifications controller Signed-off-by: Stewart Thomson <sthomson@wynshop.com> * - add example cluster role rbac Signed-off-by: Stewart Thomson <sthomson@wynshop.com> * - only look for projects in the controller's namespace (argocd by default) Signed-off-by: Stewart Thomson <sthomson@wynshop.com> * - update base manifest Signed-off-by: Stewart Thomson <sthomson@wynshop.com> * - skip app processing in notification controller Signed-off-by: Stewart Thomson <sthomson@wynshop.com> * added unit test and updated doc Signed-off-by: May Zhang <may_zhang@intuit.com> * added unit test and updated doc Signed-off-by: May Zhang <may_zhang@intuit.com> * updated examples/k8s-rbac/argocd-server-applications/kustomization.yaml's resources Signed-off-by: May Zhang <may_zhang@intuit.com> --------- Signed-off-by: Nikolas Skoufis <nskoufis@seek.com.au> Signed-off-by: Nik Skoufis <n.skoufis@gmail.com> Signed-off-by: Stewart Thomson <sthomson@wynshop.com> Signed-off-by: May Zhang <may_zhang@intuit.com> Co-authored-by: Nikolas Skoufis <nskoufis@seek.com.au> Co-authored-by: Nik Skoufis <n.skoufis@gmail.com> Co-authored-by: Stewart Thomson <sthomson@wynshop.com>
2023-10-06 20:25:38 +00:00
"github.com/argoproj/argo-cd/v2/util/glob"
"github.com/argoproj/argo-cd/v2/util/notification/k8s"
service "github.com/argoproj/argo-cd/v2/util/notification/argocd"
argocert "github.com/argoproj/argo-cd/v2/util/cert"
"k8s.io/apimachinery/pkg/runtime/schema"
"github.com/argoproj/argo-cd/v2/util/notification/settings"
"github.com/argoproj/argo-cd/v2/pkg/apis/application"
"github.com/argoproj/notifications-engine/pkg/api"
"github.com/argoproj/notifications-engine/pkg/controller"
"github.com/argoproj/notifications-engine/pkg/services"
"github.com/argoproj/notifications-engine/pkg/subscriptions"
httputil "github.com/argoproj/notifications-engine/pkg/util/http"
log "github.com/sirupsen/logrus"
v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
"k8s.io/apimachinery/pkg/runtime"
"k8s.io/apimachinery/pkg/watch"
"k8s.io/client-go/dynamic"
"k8s.io/client-go/kubernetes"
"k8s.io/client-go/tools/cache"
)
const (
resyncPeriod = 60 * time.Second
)
var (
applications = schema.GroupVersionResource{Group: application.Group, Version: "v1alpha1", Resource: application.ApplicationPlural}
appProjects = schema.GroupVersionResource{Group: application.Group, Version: "v1alpha1", Resource: application.AppProjectPlural}
)
func newAppProjClient(client dynamic.Interface, namespace string) dynamic.ResourceInterface {
resClient := client.Resource(appProjects).Namespace(namespace)
return resClient
}
type NotificationController interface {
Run(ctx context.Context, processors int)
Init(ctx context.Context) error
}
func NewController(
k8sClient kubernetes.Interface,
client dynamic.Interface,
argocdService service.Service,
namespace string,
fix(notifications): Allow notifications controller to notify on all namespaces (#15702) * Allow notifications controller to notify on all namespaces This adds functionality to the notifications controller to be notified of and send notifications for applications in any namespace. The namespaces to watch are controlled by the same --application-namespaces and ARGOCD_APPLICATION_NAMESPACES variables as in the application controller. Signed-off-by: Nikolas Skoufis <nskoufis@seek.com.au> * Add SEEK to users.md Signed-off-by: Nikolas Skoufis <nskoufis@seek.com.au> * Remove unused fields Signed-off-by: Nikolas Skoufis <nskoufis@seek.com.au> * Revert changes to Procfile Signed-off-by: Nik Skoufis <n.skoufis@gmail.com> * Fix unit tests Signed-off-by: Nikolas Skoufis <nskoufis@seek.com.au> * - add argocd namespaces environment variable to notifications controller Signed-off-by: Stewart Thomson <sthomson@wynshop.com> * - add example cluster role rbac Signed-off-by: Stewart Thomson <sthomson@wynshop.com> * - only look for projects in the controller's namespace (argocd by default) Signed-off-by: Stewart Thomson <sthomson@wynshop.com> * - update base manifest Signed-off-by: Stewart Thomson <sthomson@wynshop.com> * - skip app processing in notification controller Signed-off-by: Stewart Thomson <sthomson@wynshop.com> * added unit test and updated doc Signed-off-by: May Zhang <may_zhang@intuit.com> * added unit test and updated doc Signed-off-by: May Zhang <may_zhang@intuit.com> * updated examples/k8s-rbac/argocd-server-applications/kustomization.yaml's resources Signed-off-by: May Zhang <may_zhang@intuit.com> --------- Signed-off-by: Nikolas Skoufis <nskoufis@seek.com.au> Signed-off-by: Nik Skoufis <n.skoufis@gmail.com> Signed-off-by: Stewart Thomson <sthomson@wynshop.com> Signed-off-by: May Zhang <may_zhang@intuit.com> Co-authored-by: Nikolas Skoufis <nskoufis@seek.com.au> Co-authored-by: Nik Skoufis <n.skoufis@gmail.com> Co-authored-by: Stewart Thomson <sthomson@wynshop.com>
2023-10-06 20:25:38 +00:00
applicationNamespaces []string,
appLabelSelector string,
registry *controller.MetricsRegistry,
secretName string,
configMapName string,
feat: Argocd notification self service (#16488) * self service notification Signed-off-by: May Zhang <may_zhang@intuit.com> * revert back the changes for redis-ha Signed-off-by: May Zhang <may_zhang@intuit.com> * revert back the changes for redis-ha Signed-off-by: May Zhang <may_zhang@intuit.com> * update notification engine Signed-off-by: May Zhang <may_zhang@intuit.com> * re-trigger build Signed-off-by: May Zhang <may_zhang@intuit.com> * self service notification Signed-off-by: May Zhang <may_zhang@intuit.com> * revert back the changes for redis-ha Signed-off-by: May Zhang <may_zhang@intuit.com> * revert back the changes for redis-ha Signed-off-by: May Zhang <may_zhang@intuit.com> * update notification engine Signed-off-by: May Zhang <may_zhang@intuit.com> * re-trigger build Signed-off-by: May Zhang <may_zhang@intuit.com> * fix conflict Signed-off-by: May Zhang <may_zhang@intuit.com> * fix conflict Signed-off-by: May Zhang <may_zhang@intuit.com> * fix conflict Signed-off-by: May Zhang <may_zhang@intuit.com> * fix conflict Signed-off-by: May Zhang <may_zhang@intuit.com> * update notification enginer version Signed-off-by: May Zhang <may_zhang@intuit.com> * update notification enginer version Signed-off-by: May Zhang <may_zhang@intuit.com> * fixing go tidy Signed-off-by: May Zhang <may_zhang@intuit.com> * fixing go tidy Signed-off-by: May Zhang <may_zhang@intuit.com> * fixing go tidy Signed-off-by: May Zhang <may_zhang@intuit.com> * fixing go tidy Signed-off-by: May Zhang <may_zhang@intuit.com> * fixing go tidy Signed-off-by: May Zhang <may_zhang@intuit.com> * add back checkAppNotInAdditionalNamespaces Signed-off-by: May Zhang <may_zhang@intuit.com> * add cm and secret to clusterRole Signed-off-by: May Zhang <may_zhang@intuit.com> * if applicationNamespaces is not used, then use namespaced appClient Signed-off-by: May Zhang <may_zhang@intuit.com> * fix merge conflict Signed-off-by: May Zhang <may_zhang@intuit.com> * fix doc and test based on review Signed-off-by: May Zhang <may_zhang@intuit.com> * self service notification Signed-off-by: May Zhang <may_zhang@intuit.com> * revert back the changes for redis-ha Signed-off-by: May Zhang <may_zhang@intuit.com> * revert back the changes for redis-ha Signed-off-by: May Zhang <may_zhang@intuit.com> * update notification engine Signed-off-by: May Zhang <may_zhang@intuit.com> * re-trigger build Signed-off-by: May Zhang <may_zhang@intuit.com> * fix conflict Signed-off-by: May Zhang <may_zhang@intuit.com> * self service notification Signed-off-by: May Zhang <may_zhang@intuit.com> * revert back the changes for redis-ha Signed-off-by: May Zhang <may_zhang@intuit.com> * revert back the changes for redis-ha Signed-off-by: May Zhang <may_zhang@intuit.com> * update notification engine Signed-off-by: May Zhang <may_zhang@intuit.com> * re-trigger build Signed-off-by: May Zhang <may_zhang@intuit.com> * fix conflict Signed-off-by: May Zhang <may_zhang@intuit.com> * fix conflict Signed-off-by: May Zhang <may_zhang@intuit.com> * fix conflict Signed-off-by: May Zhang <may_zhang@intuit.com> * update notification enginer version Signed-off-by: May Zhang <may_zhang@intuit.com> * update notification enginer version Signed-off-by: May Zhang <may_zhang@intuit.com> * fixing go tidy Signed-off-by: May Zhang <may_zhang@intuit.com> * fixing go tidy Signed-off-by: May Zhang <may_zhang@intuit.com> * fixing go tidy Signed-off-by: May Zhang <may_zhang@intuit.com> * fixing go tidy Signed-off-by: May Zhang <may_zhang@intuit.com> * fixing go tidy Signed-off-by: May Zhang <may_zhang@intuit.com> * add back checkAppNotInAdditionalNamespaces Signed-off-by: May Zhang <may_zhang@intuit.com> * add cm and secret to clusterRole Signed-off-by: May Zhang <may_zhang@intuit.com> * if applicationNamespaces is not used, then use namespaced appClient Signed-off-by: May Zhang <may_zhang@intuit.com> * fix doc and test based on review Signed-off-by: May Zhang <may_zhang@intuit.com> * disable defining and using secrets within notification templates for self-service Signed-off-by: May Zhang <may_zhang@intuit.com> * tweaks Signed-off-by: Michael Crenshaw <350466+crenshaw-dev@users.noreply.github.com> * fix docs formatting Signed-off-by: Michael Crenshaw <350466+crenshaw-dev@users.noreply.github.com> * more docs and Procfile update for local run convenience Signed-off-by: Michael Crenshaw <350466+crenshaw-dev@users.noreply.github.com> --------- Signed-off-by: May Zhang <may_zhang@intuit.com> Signed-off-by: Michael Crenshaw <350466+crenshaw-dev@users.noreply.github.com> Co-authored-by: Michael Crenshaw <350466+crenshaw-dev@users.noreply.github.com>
2023-11-30 21:40:33 +00:00
selfServiceNotificationEnabled bool,
) *notificationController {
var appClient dynamic.ResourceInterface
feat: Argocd notification self service (#16488) * self service notification Signed-off-by: May Zhang <may_zhang@intuit.com> * revert back the changes for redis-ha Signed-off-by: May Zhang <may_zhang@intuit.com> * revert back the changes for redis-ha Signed-off-by: May Zhang <may_zhang@intuit.com> * update notification engine Signed-off-by: May Zhang <may_zhang@intuit.com> * re-trigger build Signed-off-by: May Zhang <may_zhang@intuit.com> * self service notification Signed-off-by: May Zhang <may_zhang@intuit.com> * revert back the changes for redis-ha Signed-off-by: May Zhang <may_zhang@intuit.com> * revert back the changes for redis-ha Signed-off-by: May Zhang <may_zhang@intuit.com> * update notification engine Signed-off-by: May Zhang <may_zhang@intuit.com> * re-trigger build Signed-off-by: May Zhang <may_zhang@intuit.com> * fix conflict Signed-off-by: May Zhang <may_zhang@intuit.com> * fix conflict Signed-off-by: May Zhang <may_zhang@intuit.com> * fix conflict Signed-off-by: May Zhang <may_zhang@intuit.com> * fix conflict Signed-off-by: May Zhang <may_zhang@intuit.com> * update notification enginer version Signed-off-by: May Zhang <may_zhang@intuit.com> * update notification enginer version Signed-off-by: May Zhang <may_zhang@intuit.com> * fixing go tidy Signed-off-by: May Zhang <may_zhang@intuit.com> * fixing go tidy Signed-off-by: May Zhang <may_zhang@intuit.com> * fixing go tidy Signed-off-by: May Zhang <may_zhang@intuit.com> * fixing go tidy Signed-off-by: May Zhang <may_zhang@intuit.com> * fixing go tidy Signed-off-by: May Zhang <may_zhang@intuit.com> * add back checkAppNotInAdditionalNamespaces Signed-off-by: May Zhang <may_zhang@intuit.com> * add cm and secret to clusterRole Signed-off-by: May Zhang <may_zhang@intuit.com> * if applicationNamespaces is not used, then use namespaced appClient Signed-off-by: May Zhang <may_zhang@intuit.com> * fix merge conflict Signed-off-by: May Zhang <may_zhang@intuit.com> * fix doc and test based on review Signed-off-by: May Zhang <may_zhang@intuit.com> * self service notification Signed-off-by: May Zhang <may_zhang@intuit.com> * revert back the changes for redis-ha Signed-off-by: May Zhang <may_zhang@intuit.com> * revert back the changes for redis-ha Signed-off-by: May Zhang <may_zhang@intuit.com> * update notification engine Signed-off-by: May Zhang <may_zhang@intuit.com> * re-trigger build Signed-off-by: May Zhang <may_zhang@intuit.com> * fix conflict Signed-off-by: May Zhang <may_zhang@intuit.com> * self service notification Signed-off-by: May Zhang <may_zhang@intuit.com> * revert back the changes for redis-ha Signed-off-by: May Zhang <may_zhang@intuit.com> * revert back the changes for redis-ha Signed-off-by: May Zhang <may_zhang@intuit.com> * update notification engine Signed-off-by: May Zhang <may_zhang@intuit.com> * re-trigger build Signed-off-by: May Zhang <may_zhang@intuit.com> * fix conflict Signed-off-by: May Zhang <may_zhang@intuit.com> * fix conflict Signed-off-by: May Zhang <may_zhang@intuit.com> * fix conflict Signed-off-by: May Zhang <may_zhang@intuit.com> * update notification enginer version Signed-off-by: May Zhang <may_zhang@intuit.com> * update notification enginer version Signed-off-by: May Zhang <may_zhang@intuit.com> * fixing go tidy Signed-off-by: May Zhang <may_zhang@intuit.com> * fixing go tidy Signed-off-by: May Zhang <may_zhang@intuit.com> * fixing go tidy Signed-off-by: May Zhang <may_zhang@intuit.com> * fixing go tidy Signed-off-by: May Zhang <may_zhang@intuit.com> * fixing go tidy Signed-off-by: May Zhang <may_zhang@intuit.com> * add back checkAppNotInAdditionalNamespaces Signed-off-by: May Zhang <may_zhang@intuit.com> * add cm and secret to clusterRole Signed-off-by: May Zhang <may_zhang@intuit.com> * if applicationNamespaces is not used, then use namespaced appClient Signed-off-by: May Zhang <may_zhang@intuit.com> * fix doc and test based on review Signed-off-by: May Zhang <may_zhang@intuit.com> * disable defining and using secrets within notification templates for self-service Signed-off-by: May Zhang <may_zhang@intuit.com> * tweaks Signed-off-by: Michael Crenshaw <350466+crenshaw-dev@users.noreply.github.com> * fix docs formatting Signed-off-by: Michael Crenshaw <350466+crenshaw-dev@users.noreply.github.com> * more docs and Procfile update for local run convenience Signed-off-by: Michael Crenshaw <350466+crenshaw-dev@users.noreply.github.com> --------- Signed-off-by: May Zhang <may_zhang@intuit.com> Signed-off-by: Michael Crenshaw <350466+crenshaw-dev@users.noreply.github.com> Co-authored-by: Michael Crenshaw <350466+crenshaw-dev@users.noreply.github.com>
2023-11-30 21:40:33 +00:00
namespaceableAppClient := client.Resource(applications)
appClient = namespaceableAppClient
feat: Argocd notification self service (#16488) * self service notification Signed-off-by: May Zhang <may_zhang@intuit.com> * revert back the changes for redis-ha Signed-off-by: May Zhang <may_zhang@intuit.com> * revert back the changes for redis-ha Signed-off-by: May Zhang <may_zhang@intuit.com> * update notification engine Signed-off-by: May Zhang <may_zhang@intuit.com> * re-trigger build Signed-off-by: May Zhang <may_zhang@intuit.com> * self service notification Signed-off-by: May Zhang <may_zhang@intuit.com> * revert back the changes for redis-ha Signed-off-by: May Zhang <may_zhang@intuit.com> * revert back the changes for redis-ha Signed-off-by: May Zhang <may_zhang@intuit.com> * update notification engine Signed-off-by: May Zhang <may_zhang@intuit.com> * re-trigger build Signed-off-by: May Zhang <may_zhang@intuit.com> * fix conflict Signed-off-by: May Zhang <may_zhang@intuit.com> * fix conflict Signed-off-by: May Zhang <may_zhang@intuit.com> * fix conflict Signed-off-by: May Zhang <may_zhang@intuit.com> * fix conflict Signed-off-by: May Zhang <may_zhang@intuit.com> * update notification enginer version Signed-off-by: May Zhang <may_zhang@intuit.com> * update notification enginer version Signed-off-by: May Zhang <may_zhang@intuit.com> * fixing go tidy Signed-off-by: May Zhang <may_zhang@intuit.com> * fixing go tidy Signed-off-by: May Zhang <may_zhang@intuit.com> * fixing go tidy Signed-off-by: May Zhang <may_zhang@intuit.com> * fixing go tidy Signed-off-by: May Zhang <may_zhang@intuit.com> * fixing go tidy Signed-off-by: May Zhang <may_zhang@intuit.com> * add back checkAppNotInAdditionalNamespaces Signed-off-by: May Zhang <may_zhang@intuit.com> * add cm and secret to clusterRole Signed-off-by: May Zhang <may_zhang@intuit.com> * if applicationNamespaces is not used, then use namespaced appClient Signed-off-by: May Zhang <may_zhang@intuit.com> * fix merge conflict Signed-off-by: May Zhang <may_zhang@intuit.com> * fix doc and test based on review Signed-off-by: May Zhang <may_zhang@intuit.com> * self service notification Signed-off-by: May Zhang <may_zhang@intuit.com> * revert back the changes for redis-ha Signed-off-by: May Zhang <may_zhang@intuit.com> * revert back the changes for redis-ha Signed-off-by: May Zhang <may_zhang@intuit.com> * update notification engine Signed-off-by: May Zhang <may_zhang@intuit.com> * re-trigger build Signed-off-by: May Zhang <may_zhang@intuit.com> * fix conflict Signed-off-by: May Zhang <may_zhang@intuit.com> * self service notification Signed-off-by: May Zhang <may_zhang@intuit.com> * revert back the changes for redis-ha Signed-off-by: May Zhang <may_zhang@intuit.com> * revert back the changes for redis-ha Signed-off-by: May Zhang <may_zhang@intuit.com> * update notification engine Signed-off-by: May Zhang <may_zhang@intuit.com> * re-trigger build Signed-off-by: May Zhang <may_zhang@intuit.com> * fix conflict Signed-off-by: May Zhang <may_zhang@intuit.com> * fix conflict Signed-off-by: May Zhang <may_zhang@intuit.com> * fix conflict Signed-off-by: May Zhang <may_zhang@intuit.com> * update notification enginer version Signed-off-by: May Zhang <may_zhang@intuit.com> * update notification enginer version Signed-off-by: May Zhang <may_zhang@intuit.com> * fixing go tidy Signed-off-by: May Zhang <may_zhang@intuit.com> * fixing go tidy Signed-off-by: May Zhang <may_zhang@intuit.com> * fixing go tidy Signed-off-by: May Zhang <may_zhang@intuit.com> * fixing go tidy Signed-off-by: May Zhang <may_zhang@intuit.com> * fixing go tidy Signed-off-by: May Zhang <may_zhang@intuit.com> * add back checkAppNotInAdditionalNamespaces Signed-off-by: May Zhang <may_zhang@intuit.com> * add cm and secret to clusterRole Signed-off-by: May Zhang <may_zhang@intuit.com> * if applicationNamespaces is not used, then use namespaced appClient Signed-off-by: May Zhang <may_zhang@intuit.com> * fix doc and test based on review Signed-off-by: May Zhang <may_zhang@intuit.com> * disable defining and using secrets within notification templates for self-service Signed-off-by: May Zhang <may_zhang@intuit.com> * tweaks Signed-off-by: Michael Crenshaw <350466+crenshaw-dev@users.noreply.github.com> * fix docs formatting Signed-off-by: Michael Crenshaw <350466+crenshaw-dev@users.noreply.github.com> * more docs and Procfile update for local run convenience Signed-off-by: Michael Crenshaw <350466+crenshaw-dev@users.noreply.github.com> --------- Signed-off-by: May Zhang <may_zhang@intuit.com> Signed-off-by: Michael Crenshaw <350466+crenshaw-dev@users.noreply.github.com> Co-authored-by: Michael Crenshaw <350466+crenshaw-dev@users.noreply.github.com>
2023-11-30 21:40:33 +00:00
if len(applicationNamespaces) == 0 {
appClient = namespaceableAppClient.Namespace(namespace)
}
fix(notifications): Allow notifications controller to notify on all namespaces (#15702) * Allow notifications controller to notify on all namespaces This adds functionality to the notifications controller to be notified of and send notifications for applications in any namespace. The namespaces to watch are controlled by the same --application-namespaces and ARGOCD_APPLICATION_NAMESPACES variables as in the application controller. Signed-off-by: Nikolas Skoufis <nskoufis@seek.com.au> * Add SEEK to users.md Signed-off-by: Nikolas Skoufis <nskoufis@seek.com.au> * Remove unused fields Signed-off-by: Nikolas Skoufis <nskoufis@seek.com.au> * Revert changes to Procfile Signed-off-by: Nik Skoufis <n.skoufis@gmail.com> * Fix unit tests Signed-off-by: Nikolas Skoufis <nskoufis@seek.com.au> * - add argocd namespaces environment variable to notifications controller Signed-off-by: Stewart Thomson <sthomson@wynshop.com> * - add example cluster role rbac Signed-off-by: Stewart Thomson <sthomson@wynshop.com> * - only look for projects in the controller's namespace (argocd by default) Signed-off-by: Stewart Thomson <sthomson@wynshop.com> * - update base manifest Signed-off-by: Stewart Thomson <sthomson@wynshop.com> * - skip app processing in notification controller Signed-off-by: Stewart Thomson <sthomson@wynshop.com> * added unit test and updated doc Signed-off-by: May Zhang <may_zhang@intuit.com> * added unit test and updated doc Signed-off-by: May Zhang <may_zhang@intuit.com> * updated examples/k8s-rbac/argocd-server-applications/kustomization.yaml's resources Signed-off-by: May Zhang <may_zhang@intuit.com> --------- Signed-off-by: Nikolas Skoufis <nskoufis@seek.com.au> Signed-off-by: Nik Skoufis <n.skoufis@gmail.com> Signed-off-by: Stewart Thomson <sthomson@wynshop.com> Signed-off-by: May Zhang <may_zhang@intuit.com> Co-authored-by: Nikolas Skoufis <nskoufis@seek.com.au> Co-authored-by: Nik Skoufis <n.skoufis@gmail.com> Co-authored-by: Stewart Thomson <sthomson@wynshop.com>
2023-10-06 20:25:38 +00:00
appInformer := newInformer(appClient, namespace, applicationNamespaces, appLabelSelector)
appProjInformer := newInformer(newAppProjClient(client, namespace), namespace, []string{namespace}, "")
feat: Argocd notification self service (#16488) * self service notification Signed-off-by: May Zhang <may_zhang@intuit.com> * revert back the changes for redis-ha Signed-off-by: May Zhang <may_zhang@intuit.com> * revert back the changes for redis-ha Signed-off-by: May Zhang <may_zhang@intuit.com> * update notification engine Signed-off-by: May Zhang <may_zhang@intuit.com> * re-trigger build Signed-off-by: May Zhang <may_zhang@intuit.com> * self service notification Signed-off-by: May Zhang <may_zhang@intuit.com> * revert back the changes for redis-ha Signed-off-by: May Zhang <may_zhang@intuit.com> * revert back the changes for redis-ha Signed-off-by: May Zhang <may_zhang@intuit.com> * update notification engine Signed-off-by: May Zhang <may_zhang@intuit.com> * re-trigger build Signed-off-by: May Zhang <may_zhang@intuit.com> * fix conflict Signed-off-by: May Zhang <may_zhang@intuit.com> * fix conflict Signed-off-by: May Zhang <may_zhang@intuit.com> * fix conflict Signed-off-by: May Zhang <may_zhang@intuit.com> * fix conflict Signed-off-by: May Zhang <may_zhang@intuit.com> * update notification enginer version Signed-off-by: May Zhang <may_zhang@intuit.com> * update notification enginer version Signed-off-by: May Zhang <may_zhang@intuit.com> * fixing go tidy Signed-off-by: May Zhang <may_zhang@intuit.com> * fixing go tidy Signed-off-by: May Zhang <may_zhang@intuit.com> * fixing go tidy Signed-off-by: May Zhang <may_zhang@intuit.com> * fixing go tidy Signed-off-by: May Zhang <may_zhang@intuit.com> * fixing go tidy Signed-off-by: May Zhang <may_zhang@intuit.com> * add back checkAppNotInAdditionalNamespaces Signed-off-by: May Zhang <may_zhang@intuit.com> * add cm and secret to clusterRole Signed-off-by: May Zhang <may_zhang@intuit.com> * if applicationNamespaces is not used, then use namespaced appClient Signed-off-by: May Zhang <may_zhang@intuit.com> * fix merge conflict Signed-off-by: May Zhang <may_zhang@intuit.com> * fix doc and test based on review Signed-off-by: May Zhang <may_zhang@intuit.com> * self service notification Signed-off-by: May Zhang <may_zhang@intuit.com> * revert back the changes for redis-ha Signed-off-by: May Zhang <may_zhang@intuit.com> * revert back the changes for redis-ha Signed-off-by: May Zhang <may_zhang@intuit.com> * update notification engine Signed-off-by: May Zhang <may_zhang@intuit.com> * re-trigger build Signed-off-by: May Zhang <may_zhang@intuit.com> * fix conflict Signed-off-by: May Zhang <may_zhang@intuit.com> * self service notification Signed-off-by: May Zhang <may_zhang@intuit.com> * revert back the changes for redis-ha Signed-off-by: May Zhang <may_zhang@intuit.com> * revert back the changes for redis-ha Signed-off-by: May Zhang <may_zhang@intuit.com> * update notification engine Signed-off-by: May Zhang <may_zhang@intuit.com> * re-trigger build Signed-off-by: May Zhang <may_zhang@intuit.com> * fix conflict Signed-off-by: May Zhang <may_zhang@intuit.com> * fix conflict Signed-off-by: May Zhang <may_zhang@intuit.com> * fix conflict Signed-off-by: May Zhang <may_zhang@intuit.com> * update notification enginer version Signed-off-by: May Zhang <may_zhang@intuit.com> * update notification enginer version Signed-off-by: May Zhang <may_zhang@intuit.com> * fixing go tidy Signed-off-by: May Zhang <may_zhang@intuit.com> * fixing go tidy Signed-off-by: May Zhang <may_zhang@intuit.com> * fixing go tidy Signed-off-by: May Zhang <may_zhang@intuit.com> * fixing go tidy Signed-off-by: May Zhang <may_zhang@intuit.com> * fixing go tidy Signed-off-by: May Zhang <may_zhang@intuit.com> * add back checkAppNotInAdditionalNamespaces Signed-off-by: May Zhang <may_zhang@intuit.com> * add cm and secret to clusterRole Signed-off-by: May Zhang <may_zhang@intuit.com> * if applicationNamespaces is not used, then use namespaced appClient Signed-off-by: May Zhang <may_zhang@intuit.com> * fix doc and test based on review Signed-off-by: May Zhang <may_zhang@intuit.com> * disable defining and using secrets within notification templates for self-service Signed-off-by: May Zhang <may_zhang@intuit.com> * tweaks Signed-off-by: Michael Crenshaw <350466+crenshaw-dev@users.noreply.github.com> * fix docs formatting Signed-off-by: Michael Crenshaw <350466+crenshaw-dev@users.noreply.github.com> * more docs and Procfile update for local run convenience Signed-off-by: Michael Crenshaw <350466+crenshaw-dev@users.noreply.github.com> --------- Signed-off-by: May Zhang <may_zhang@intuit.com> Signed-off-by: Michael Crenshaw <350466+crenshaw-dev@users.noreply.github.com> Co-authored-by: Michael Crenshaw <350466+crenshaw-dev@users.noreply.github.com>
2023-11-30 21:40:33 +00:00
var notificationConfigNamespace string
if selfServiceNotificationEnabled {
notificationConfigNamespace = v1.NamespaceAll
} else {
notificationConfigNamespace = namespace
}
secretInformer := k8s.NewSecretInformer(k8sClient, notificationConfigNamespace, secretName)
configMapInformer := k8s.NewConfigMapInformer(k8sClient, notificationConfigNamespace, configMapName)
apiFactory := api.NewFactory(settings.GetFactorySettings(argocdService, secretName, configMapName, selfServiceNotificationEnabled), namespace, secretInformer, configMapInformer)
res := &notificationController{
secretInformer: secretInformer,
configMapInformer: configMapInformer,
appInformer: appInformer,
appProjInformer: appProjInformer,
apiFactory: apiFactory}
feat: Argocd notification self service (#16488) * self service notification Signed-off-by: May Zhang <may_zhang@intuit.com> * revert back the changes for redis-ha Signed-off-by: May Zhang <may_zhang@intuit.com> * revert back the changes for redis-ha Signed-off-by: May Zhang <may_zhang@intuit.com> * update notification engine Signed-off-by: May Zhang <may_zhang@intuit.com> * re-trigger build Signed-off-by: May Zhang <may_zhang@intuit.com> * self service notification Signed-off-by: May Zhang <may_zhang@intuit.com> * revert back the changes for redis-ha Signed-off-by: May Zhang <may_zhang@intuit.com> * revert back the changes for redis-ha Signed-off-by: May Zhang <may_zhang@intuit.com> * update notification engine Signed-off-by: May Zhang <may_zhang@intuit.com> * re-trigger build Signed-off-by: May Zhang <may_zhang@intuit.com> * fix conflict Signed-off-by: May Zhang <may_zhang@intuit.com> * fix conflict Signed-off-by: May Zhang <may_zhang@intuit.com> * fix conflict Signed-off-by: May Zhang <may_zhang@intuit.com> * fix conflict Signed-off-by: May Zhang <may_zhang@intuit.com> * update notification enginer version Signed-off-by: May Zhang <may_zhang@intuit.com> * update notification enginer version Signed-off-by: May Zhang <may_zhang@intuit.com> * fixing go tidy Signed-off-by: May Zhang <may_zhang@intuit.com> * fixing go tidy Signed-off-by: May Zhang <may_zhang@intuit.com> * fixing go tidy Signed-off-by: May Zhang <may_zhang@intuit.com> * fixing go tidy Signed-off-by: May Zhang <may_zhang@intuit.com> * fixing go tidy Signed-off-by: May Zhang <may_zhang@intuit.com> * add back checkAppNotInAdditionalNamespaces Signed-off-by: May Zhang <may_zhang@intuit.com> * add cm and secret to clusterRole Signed-off-by: May Zhang <may_zhang@intuit.com> * if applicationNamespaces is not used, then use namespaced appClient Signed-off-by: May Zhang <may_zhang@intuit.com> * fix merge conflict Signed-off-by: May Zhang <may_zhang@intuit.com> * fix doc and test based on review Signed-off-by: May Zhang <may_zhang@intuit.com> * self service notification Signed-off-by: May Zhang <may_zhang@intuit.com> * revert back the changes for redis-ha Signed-off-by: May Zhang <may_zhang@intuit.com> * revert back the changes for redis-ha Signed-off-by: May Zhang <may_zhang@intuit.com> * update notification engine Signed-off-by: May Zhang <may_zhang@intuit.com> * re-trigger build Signed-off-by: May Zhang <may_zhang@intuit.com> * fix conflict Signed-off-by: May Zhang <may_zhang@intuit.com> * self service notification Signed-off-by: May Zhang <may_zhang@intuit.com> * revert back the changes for redis-ha Signed-off-by: May Zhang <may_zhang@intuit.com> * revert back the changes for redis-ha Signed-off-by: May Zhang <may_zhang@intuit.com> * update notification engine Signed-off-by: May Zhang <may_zhang@intuit.com> * re-trigger build Signed-off-by: May Zhang <may_zhang@intuit.com> * fix conflict Signed-off-by: May Zhang <may_zhang@intuit.com> * fix conflict Signed-off-by: May Zhang <may_zhang@intuit.com> * fix conflict Signed-off-by: May Zhang <may_zhang@intuit.com> * update notification enginer version Signed-off-by: May Zhang <may_zhang@intuit.com> * update notification enginer version Signed-off-by: May Zhang <may_zhang@intuit.com> * fixing go tidy Signed-off-by: May Zhang <may_zhang@intuit.com> * fixing go tidy Signed-off-by: May Zhang <may_zhang@intuit.com> * fixing go tidy Signed-off-by: May Zhang <may_zhang@intuit.com> * fixing go tidy Signed-off-by: May Zhang <may_zhang@intuit.com> * fixing go tidy Signed-off-by: May Zhang <may_zhang@intuit.com> * add back checkAppNotInAdditionalNamespaces Signed-off-by: May Zhang <may_zhang@intuit.com> * add cm and secret to clusterRole Signed-off-by: May Zhang <may_zhang@intuit.com> * if applicationNamespaces is not used, then use namespaced appClient Signed-off-by: May Zhang <may_zhang@intuit.com> * fix doc and test based on review Signed-off-by: May Zhang <may_zhang@intuit.com> * disable defining and using secrets within notification templates for self-service Signed-off-by: May Zhang <may_zhang@intuit.com> * tweaks Signed-off-by: Michael Crenshaw <350466+crenshaw-dev@users.noreply.github.com> * fix docs formatting Signed-off-by: Michael Crenshaw <350466+crenshaw-dev@users.noreply.github.com> * more docs and Procfile update for local run convenience Signed-off-by: Michael Crenshaw <350466+crenshaw-dev@users.noreply.github.com> --------- Signed-off-by: May Zhang <may_zhang@intuit.com> Signed-off-by: Michael Crenshaw <350466+crenshaw-dev@users.noreply.github.com> Co-authored-by: Michael Crenshaw <350466+crenshaw-dev@users.noreply.github.com>
2023-11-30 21:40:33 +00:00
skipProcessingOpt := controller.WithSkipProcessing(func(obj v1.Object) (bool, string) {
app, ok := (obj).(*unstructured.Unstructured)
if !ok {
return false, ""
}
if checkAppNotInAdditionalNamespaces(app, namespace, applicationNamespaces) {
return true, "app is not in one of the application-namespaces, nor the notification controller namespace"
}
return !isAppSyncStatusRefreshed(app, log.WithField("app", obj.GetName())), "sync status out of date"
})
metricsRegistryOpt := controller.WithMetricsRegistry(registry)
alterDestinationsOpt := controller.WithAlterDestinations(res.alterDestinations)
if !selfServiceNotificationEnabled {
res.ctrl = controller.NewController(namespaceableAppClient, appInformer, apiFactory,
skipProcessingOpt,
metricsRegistryOpt,
alterDestinationsOpt)
} else {
res.ctrl = controller.NewControllerWithNamespaceSupport(namespaceableAppClient, appInformer, apiFactory,
skipProcessingOpt,
metricsRegistryOpt,
alterDestinationsOpt)
}
return res
}
fix(notifications): Allow notifications controller to notify on all namespaces (#15702) * Allow notifications controller to notify on all namespaces This adds functionality to the notifications controller to be notified of and send notifications for applications in any namespace. The namespaces to watch are controlled by the same --application-namespaces and ARGOCD_APPLICATION_NAMESPACES variables as in the application controller. Signed-off-by: Nikolas Skoufis <nskoufis@seek.com.au> * Add SEEK to users.md Signed-off-by: Nikolas Skoufis <nskoufis@seek.com.au> * Remove unused fields Signed-off-by: Nikolas Skoufis <nskoufis@seek.com.au> * Revert changes to Procfile Signed-off-by: Nik Skoufis <n.skoufis@gmail.com> * Fix unit tests Signed-off-by: Nikolas Skoufis <nskoufis@seek.com.au> * - add argocd namespaces environment variable to notifications controller Signed-off-by: Stewart Thomson <sthomson@wynshop.com> * - add example cluster role rbac Signed-off-by: Stewart Thomson <sthomson@wynshop.com> * - only look for projects in the controller's namespace (argocd by default) Signed-off-by: Stewart Thomson <sthomson@wynshop.com> * - update base manifest Signed-off-by: Stewart Thomson <sthomson@wynshop.com> * - skip app processing in notification controller Signed-off-by: Stewart Thomson <sthomson@wynshop.com> * added unit test and updated doc Signed-off-by: May Zhang <may_zhang@intuit.com> * added unit test and updated doc Signed-off-by: May Zhang <may_zhang@intuit.com> * updated examples/k8s-rbac/argocd-server-applications/kustomization.yaml's resources Signed-off-by: May Zhang <may_zhang@intuit.com> --------- Signed-off-by: Nikolas Skoufis <nskoufis@seek.com.au> Signed-off-by: Nik Skoufis <n.skoufis@gmail.com> Signed-off-by: Stewart Thomson <sthomson@wynshop.com> Signed-off-by: May Zhang <may_zhang@intuit.com> Co-authored-by: Nikolas Skoufis <nskoufis@seek.com.au> Co-authored-by: Nik Skoufis <n.skoufis@gmail.com> Co-authored-by: Stewart Thomson <sthomson@wynshop.com>
2023-10-06 20:25:38 +00:00
// Check if app is not in the namespace where the controller is in, and also app is not in one of the applicationNamespaces
func checkAppNotInAdditionalNamespaces(app *unstructured.Unstructured, namespace string, applicationNamespaces []string) bool {
return namespace != app.GetNamespace() && !glob.MatchStringInList(applicationNamespaces, app.GetNamespace(), false)
}
func (c *notificationController) alterDestinations(obj v1.Object, destinations services.Destinations, cfg api.Config) services.Destinations {
app, ok := (obj).(*unstructured.Unstructured)
if !ok {
return destinations
}
if proj := getAppProj(app, c.appProjInformer); proj != nil {
destinations.Merge(subscriptions.NewAnnotations(proj.GetAnnotations()).GetDestinations(cfg.DefaultTriggers, cfg.ServiceDefaultTriggers))
destinations.Merge(settings.GetLegacyDestinations(proj.GetAnnotations(), cfg.DefaultTriggers, cfg.ServiceDefaultTriggers))
}
return destinations
}
fix(notifications): Allow notifications controller to notify on all namespaces (#15702) * Allow notifications controller to notify on all namespaces This adds functionality to the notifications controller to be notified of and send notifications for applications in any namespace. The namespaces to watch are controlled by the same --application-namespaces and ARGOCD_APPLICATION_NAMESPACES variables as in the application controller. Signed-off-by: Nikolas Skoufis <nskoufis@seek.com.au> * Add SEEK to users.md Signed-off-by: Nikolas Skoufis <nskoufis@seek.com.au> * Remove unused fields Signed-off-by: Nikolas Skoufis <nskoufis@seek.com.au> * Revert changes to Procfile Signed-off-by: Nik Skoufis <n.skoufis@gmail.com> * Fix unit tests Signed-off-by: Nikolas Skoufis <nskoufis@seek.com.au> * - add argocd namespaces environment variable to notifications controller Signed-off-by: Stewart Thomson <sthomson@wynshop.com> * - add example cluster role rbac Signed-off-by: Stewart Thomson <sthomson@wynshop.com> * - only look for projects in the controller's namespace (argocd by default) Signed-off-by: Stewart Thomson <sthomson@wynshop.com> * - update base manifest Signed-off-by: Stewart Thomson <sthomson@wynshop.com> * - skip app processing in notification controller Signed-off-by: Stewart Thomson <sthomson@wynshop.com> * added unit test and updated doc Signed-off-by: May Zhang <may_zhang@intuit.com> * added unit test and updated doc Signed-off-by: May Zhang <may_zhang@intuit.com> * updated examples/k8s-rbac/argocd-server-applications/kustomization.yaml's resources Signed-off-by: May Zhang <may_zhang@intuit.com> --------- Signed-off-by: Nikolas Skoufis <nskoufis@seek.com.au> Signed-off-by: Nik Skoufis <n.skoufis@gmail.com> Signed-off-by: Stewart Thomson <sthomson@wynshop.com> Signed-off-by: May Zhang <may_zhang@intuit.com> Co-authored-by: Nikolas Skoufis <nskoufis@seek.com.au> Co-authored-by: Nik Skoufis <n.skoufis@gmail.com> Co-authored-by: Stewart Thomson <sthomson@wynshop.com>
2023-10-06 20:25:38 +00:00
func newInformer(resClient dynamic.ResourceInterface, controllerNamespace string, applicationNamespaces []string, selector string) cache.SharedIndexInformer {
feat: Argocd notification self service (#16488) * self service notification Signed-off-by: May Zhang <may_zhang@intuit.com> * revert back the changes for redis-ha Signed-off-by: May Zhang <may_zhang@intuit.com> * revert back the changes for redis-ha Signed-off-by: May Zhang <may_zhang@intuit.com> * update notification engine Signed-off-by: May Zhang <may_zhang@intuit.com> * re-trigger build Signed-off-by: May Zhang <may_zhang@intuit.com> * self service notification Signed-off-by: May Zhang <may_zhang@intuit.com> * revert back the changes for redis-ha Signed-off-by: May Zhang <may_zhang@intuit.com> * revert back the changes for redis-ha Signed-off-by: May Zhang <may_zhang@intuit.com> * update notification engine Signed-off-by: May Zhang <may_zhang@intuit.com> * re-trigger build Signed-off-by: May Zhang <may_zhang@intuit.com> * fix conflict Signed-off-by: May Zhang <may_zhang@intuit.com> * fix conflict Signed-off-by: May Zhang <may_zhang@intuit.com> * fix conflict Signed-off-by: May Zhang <may_zhang@intuit.com> * fix conflict Signed-off-by: May Zhang <may_zhang@intuit.com> * update notification enginer version Signed-off-by: May Zhang <may_zhang@intuit.com> * update notification enginer version Signed-off-by: May Zhang <may_zhang@intuit.com> * fixing go tidy Signed-off-by: May Zhang <may_zhang@intuit.com> * fixing go tidy Signed-off-by: May Zhang <may_zhang@intuit.com> * fixing go tidy Signed-off-by: May Zhang <may_zhang@intuit.com> * fixing go tidy Signed-off-by: May Zhang <may_zhang@intuit.com> * fixing go tidy Signed-off-by: May Zhang <may_zhang@intuit.com> * add back checkAppNotInAdditionalNamespaces Signed-off-by: May Zhang <may_zhang@intuit.com> * add cm and secret to clusterRole Signed-off-by: May Zhang <may_zhang@intuit.com> * if applicationNamespaces is not used, then use namespaced appClient Signed-off-by: May Zhang <may_zhang@intuit.com> * fix merge conflict Signed-off-by: May Zhang <may_zhang@intuit.com> * fix doc and test based on review Signed-off-by: May Zhang <may_zhang@intuit.com> * self service notification Signed-off-by: May Zhang <may_zhang@intuit.com> * revert back the changes for redis-ha Signed-off-by: May Zhang <may_zhang@intuit.com> * revert back the changes for redis-ha Signed-off-by: May Zhang <may_zhang@intuit.com> * update notification engine Signed-off-by: May Zhang <may_zhang@intuit.com> * re-trigger build Signed-off-by: May Zhang <may_zhang@intuit.com> * fix conflict Signed-off-by: May Zhang <may_zhang@intuit.com> * self service notification Signed-off-by: May Zhang <may_zhang@intuit.com> * revert back the changes for redis-ha Signed-off-by: May Zhang <may_zhang@intuit.com> * revert back the changes for redis-ha Signed-off-by: May Zhang <may_zhang@intuit.com> * update notification engine Signed-off-by: May Zhang <may_zhang@intuit.com> * re-trigger build Signed-off-by: May Zhang <may_zhang@intuit.com> * fix conflict Signed-off-by: May Zhang <may_zhang@intuit.com> * fix conflict Signed-off-by: May Zhang <may_zhang@intuit.com> * fix conflict Signed-off-by: May Zhang <may_zhang@intuit.com> * update notification enginer version Signed-off-by: May Zhang <may_zhang@intuit.com> * update notification enginer version Signed-off-by: May Zhang <may_zhang@intuit.com> * fixing go tidy Signed-off-by: May Zhang <may_zhang@intuit.com> * fixing go tidy Signed-off-by: May Zhang <may_zhang@intuit.com> * fixing go tidy Signed-off-by: May Zhang <may_zhang@intuit.com> * fixing go tidy Signed-off-by: May Zhang <may_zhang@intuit.com> * fixing go tidy Signed-off-by: May Zhang <may_zhang@intuit.com> * add back checkAppNotInAdditionalNamespaces Signed-off-by: May Zhang <may_zhang@intuit.com> * add cm and secret to clusterRole Signed-off-by: May Zhang <may_zhang@intuit.com> * if applicationNamespaces is not used, then use namespaced appClient Signed-off-by: May Zhang <may_zhang@intuit.com> * fix doc and test based on review Signed-off-by: May Zhang <may_zhang@intuit.com> * disable defining and using secrets within notification templates for self-service Signed-off-by: May Zhang <may_zhang@intuit.com> * tweaks Signed-off-by: Michael Crenshaw <350466+crenshaw-dev@users.noreply.github.com> * fix docs formatting Signed-off-by: Michael Crenshaw <350466+crenshaw-dev@users.noreply.github.com> * more docs and Procfile update for local run convenience Signed-off-by: Michael Crenshaw <350466+crenshaw-dev@users.noreply.github.com> --------- Signed-off-by: May Zhang <may_zhang@intuit.com> Signed-off-by: Michael Crenshaw <350466+crenshaw-dev@users.noreply.github.com> Co-authored-by: Michael Crenshaw <350466+crenshaw-dev@users.noreply.github.com>
2023-11-30 21:40:33 +00:00
informer := cache.NewSharedIndexInformer(
&cache.ListWatch{
fix(notifications): Allow notifications controller to notify on all namespaces (#15702) * Allow notifications controller to notify on all namespaces This adds functionality to the notifications controller to be notified of and send notifications for applications in any namespace. The namespaces to watch are controlled by the same --application-namespaces and ARGOCD_APPLICATION_NAMESPACES variables as in the application controller. Signed-off-by: Nikolas Skoufis <nskoufis@seek.com.au> * Add SEEK to users.md Signed-off-by: Nikolas Skoufis <nskoufis@seek.com.au> * Remove unused fields Signed-off-by: Nikolas Skoufis <nskoufis@seek.com.au> * Revert changes to Procfile Signed-off-by: Nik Skoufis <n.skoufis@gmail.com> * Fix unit tests Signed-off-by: Nikolas Skoufis <nskoufis@seek.com.au> * - add argocd namespaces environment variable to notifications controller Signed-off-by: Stewart Thomson <sthomson@wynshop.com> * - add example cluster role rbac Signed-off-by: Stewart Thomson <sthomson@wynshop.com> * - only look for projects in the controller's namespace (argocd by default) Signed-off-by: Stewart Thomson <sthomson@wynshop.com> * - update base manifest Signed-off-by: Stewart Thomson <sthomson@wynshop.com> * - skip app processing in notification controller Signed-off-by: Stewart Thomson <sthomson@wynshop.com> * added unit test and updated doc Signed-off-by: May Zhang <may_zhang@intuit.com> * added unit test and updated doc Signed-off-by: May Zhang <may_zhang@intuit.com> * updated examples/k8s-rbac/argocd-server-applications/kustomization.yaml's resources Signed-off-by: May Zhang <may_zhang@intuit.com> --------- Signed-off-by: Nikolas Skoufis <nskoufis@seek.com.au> Signed-off-by: Nik Skoufis <n.skoufis@gmail.com> Signed-off-by: Stewart Thomson <sthomson@wynshop.com> Signed-off-by: May Zhang <may_zhang@intuit.com> Co-authored-by: Nikolas Skoufis <nskoufis@seek.com.au> Co-authored-by: Nik Skoufis <n.skoufis@gmail.com> Co-authored-by: Stewart Thomson <sthomson@wynshop.com>
2023-10-06 20:25:38 +00:00
ListFunc: func(options v1.ListOptions) (runtime.Object, error) {
// We are only interested in apps that exist in namespaces the
// user wants to be enabled.
options.LabelSelector = selector
fix(notifications): Allow notifications controller to notify on all namespaces (#15702) * Allow notifications controller to notify on all namespaces This adds functionality to the notifications controller to be notified of and send notifications for applications in any namespace. The namespaces to watch are controlled by the same --application-namespaces and ARGOCD_APPLICATION_NAMESPACES variables as in the application controller. Signed-off-by: Nikolas Skoufis <nskoufis@seek.com.au> * Add SEEK to users.md Signed-off-by: Nikolas Skoufis <nskoufis@seek.com.au> * Remove unused fields Signed-off-by: Nikolas Skoufis <nskoufis@seek.com.au> * Revert changes to Procfile Signed-off-by: Nik Skoufis <n.skoufis@gmail.com> * Fix unit tests Signed-off-by: Nikolas Skoufis <nskoufis@seek.com.au> * - add argocd namespaces environment variable to notifications controller Signed-off-by: Stewart Thomson <sthomson@wynshop.com> * - add example cluster role rbac Signed-off-by: Stewart Thomson <sthomson@wynshop.com> * - only look for projects in the controller's namespace (argocd by default) Signed-off-by: Stewart Thomson <sthomson@wynshop.com> * - update base manifest Signed-off-by: Stewart Thomson <sthomson@wynshop.com> * - skip app processing in notification controller Signed-off-by: Stewart Thomson <sthomson@wynshop.com> * added unit test and updated doc Signed-off-by: May Zhang <may_zhang@intuit.com> * added unit test and updated doc Signed-off-by: May Zhang <may_zhang@intuit.com> * updated examples/k8s-rbac/argocd-server-applications/kustomization.yaml's resources Signed-off-by: May Zhang <may_zhang@intuit.com> --------- Signed-off-by: Nikolas Skoufis <nskoufis@seek.com.au> Signed-off-by: Nik Skoufis <n.skoufis@gmail.com> Signed-off-by: Stewart Thomson <sthomson@wynshop.com> Signed-off-by: May Zhang <may_zhang@intuit.com> Co-authored-by: Nikolas Skoufis <nskoufis@seek.com.au> Co-authored-by: Nik Skoufis <n.skoufis@gmail.com> Co-authored-by: Stewart Thomson <sthomson@wynshop.com>
2023-10-06 20:25:38 +00:00
appList, err := resClient.List(context.TODO(), options)
if err != nil {
return nil, fmt.Errorf("failed to list applications: %w", err)
}
newItems := []unstructured.Unstructured{}
for _, res := range appList.Items {
if controllerNamespace == res.GetNamespace() || glob.MatchStringInList(applicationNamespaces, res.GetNamespace(), false) {
newItems = append(newItems, res)
}
}
appList.Items = newItems
return appList, nil
},
WatchFunc: func(options v1.ListOptions) (watch.Interface, error) {
options.LabelSelector = selector
fix(notifications): Allow notifications controller to notify on all namespaces (#15702) * Allow notifications controller to notify on all namespaces This adds functionality to the notifications controller to be notified of and send notifications for applications in any namespace. The namespaces to watch are controlled by the same --application-namespaces and ARGOCD_APPLICATION_NAMESPACES variables as in the application controller. Signed-off-by: Nikolas Skoufis <nskoufis@seek.com.au> * Add SEEK to users.md Signed-off-by: Nikolas Skoufis <nskoufis@seek.com.au> * Remove unused fields Signed-off-by: Nikolas Skoufis <nskoufis@seek.com.au> * Revert changes to Procfile Signed-off-by: Nik Skoufis <n.skoufis@gmail.com> * Fix unit tests Signed-off-by: Nikolas Skoufis <nskoufis@seek.com.au> * - add argocd namespaces environment variable to notifications controller Signed-off-by: Stewart Thomson <sthomson@wynshop.com> * - add example cluster role rbac Signed-off-by: Stewart Thomson <sthomson@wynshop.com> * - only look for projects in the controller's namespace (argocd by default) Signed-off-by: Stewart Thomson <sthomson@wynshop.com> * - update base manifest Signed-off-by: Stewart Thomson <sthomson@wynshop.com> * - skip app processing in notification controller Signed-off-by: Stewart Thomson <sthomson@wynshop.com> * added unit test and updated doc Signed-off-by: May Zhang <may_zhang@intuit.com> * added unit test and updated doc Signed-off-by: May Zhang <may_zhang@intuit.com> * updated examples/k8s-rbac/argocd-server-applications/kustomization.yaml's resources Signed-off-by: May Zhang <may_zhang@intuit.com> --------- Signed-off-by: Nikolas Skoufis <nskoufis@seek.com.au> Signed-off-by: Nik Skoufis <n.skoufis@gmail.com> Signed-off-by: Stewart Thomson <sthomson@wynshop.com> Signed-off-by: May Zhang <may_zhang@intuit.com> Co-authored-by: Nikolas Skoufis <nskoufis@seek.com.au> Co-authored-by: Nik Skoufis <n.skoufis@gmail.com> Co-authored-by: Stewart Thomson <sthomson@wynshop.com>
2023-10-06 20:25:38 +00:00
return resClient.Watch(context.TODO(), options)
},
},
&unstructured.Unstructured{},
resyncPeriod,
fix(notifications): Allow notifications controller to notify on all namespaces (#15702) * Allow notifications controller to notify on all namespaces This adds functionality to the notifications controller to be notified of and send notifications for applications in any namespace. The namespaces to watch are controlled by the same --application-namespaces and ARGOCD_APPLICATION_NAMESPACES variables as in the application controller. Signed-off-by: Nikolas Skoufis <nskoufis@seek.com.au> * Add SEEK to users.md Signed-off-by: Nikolas Skoufis <nskoufis@seek.com.au> * Remove unused fields Signed-off-by: Nikolas Skoufis <nskoufis@seek.com.au> * Revert changes to Procfile Signed-off-by: Nik Skoufis <n.skoufis@gmail.com> * Fix unit tests Signed-off-by: Nikolas Skoufis <nskoufis@seek.com.au> * - add argocd namespaces environment variable to notifications controller Signed-off-by: Stewart Thomson <sthomson@wynshop.com> * - add example cluster role rbac Signed-off-by: Stewart Thomson <sthomson@wynshop.com> * - only look for projects in the controller's namespace (argocd by default) Signed-off-by: Stewart Thomson <sthomson@wynshop.com> * - update base manifest Signed-off-by: Stewart Thomson <sthomson@wynshop.com> * - skip app processing in notification controller Signed-off-by: Stewart Thomson <sthomson@wynshop.com> * added unit test and updated doc Signed-off-by: May Zhang <may_zhang@intuit.com> * added unit test and updated doc Signed-off-by: May Zhang <may_zhang@intuit.com> * updated examples/k8s-rbac/argocd-server-applications/kustomization.yaml's resources Signed-off-by: May Zhang <may_zhang@intuit.com> --------- Signed-off-by: Nikolas Skoufis <nskoufis@seek.com.au> Signed-off-by: Nik Skoufis <n.skoufis@gmail.com> Signed-off-by: Stewart Thomson <sthomson@wynshop.com> Signed-off-by: May Zhang <may_zhang@intuit.com> Co-authored-by: Nikolas Skoufis <nskoufis@seek.com.au> Co-authored-by: Nik Skoufis <n.skoufis@gmail.com> Co-authored-by: Stewart Thomson <sthomson@wynshop.com>
2023-10-06 20:25:38 +00:00
cache.Indexers{
cache.NamespaceIndex: func(obj interface{}) ([]string, error) {
return cache.MetaNamespaceIndexFunc(obj)
},
},
)
return informer
}
type notificationController struct {
apiFactory api.Factory
ctrl controller.NotificationController
appInformer cache.SharedIndexInformer
appProjInformer cache.SharedIndexInformer
secretInformer cache.SharedIndexInformer
configMapInformer cache.SharedIndexInformer
}
func (c *notificationController) Init(ctx context.Context) error {
// resolve certificates using injected "argocd-tls-certs-cm" ConfigMap
httputil.SetCertResolver(argocert.GetCertificateForConnect)
go c.appInformer.Run(ctx.Done())
go c.appProjInformer.Run(ctx.Done())
go c.secretInformer.Run(ctx.Done())
go c.configMapInformer.Run(ctx.Done())
if !cache.WaitForCacheSync(ctx.Done(), c.appInformer.HasSynced, c.appProjInformer.HasSynced, c.secretInformer.HasSynced, c.configMapInformer.HasSynced) {
return errors.New("Timed out waiting for caches to sync")
}
return nil
}
func (c *notificationController) Run(ctx context.Context, processors int) {
c.ctrl.Run(processors, ctx.Done())
}
func getAppProj(app *unstructured.Unstructured, appProjInformer cache.SharedIndexInformer) *unstructured.Unstructured {
projName, ok, err := unstructured.NestedString(app.Object, "spec", "project")
if !ok || err != nil {
return nil
}
projObj, ok, err := appProjInformer.GetIndexer().GetByKey(fmt.Sprintf("%s/%s", app.GetNamespace(), projName))
if !ok || err != nil {
return nil
}
proj, ok := projObj.(*unstructured.Unstructured)
if !ok {
return nil
}
if proj.GetAnnotations() == nil {
proj.SetAnnotations(map[string]string{})
}
return proj
}
// Checks if the application SyncStatus has been refreshed by Argo CD after an operation has completed
func isAppSyncStatusRefreshed(app *unstructured.Unstructured, logEntry *log.Entry) bool {
_, ok, err := unstructured.NestedMap(app.Object, "status", "operationState")
if !ok || err != nil {
logEntry.Debug("No OperationState found, SyncStatus is assumed to be up-to-date")
return true
}
phase, ok, err := unstructured.NestedString(app.Object, "status", "operationState", "phase")
if !ok || err != nil {
logEntry.Debug("No OperationPhase found, SyncStatus is assumed to be up-to-date")
return true
}
switch phase {
case "Failed", "Error", "Succeeded":
finishedAtRaw, ok, err := unstructured.NestedString(app.Object, "status", "operationState", "finishedAt")
if !ok || err != nil {
logEntry.Debugf("No FinishedAt found for completed phase '%s', SyncStatus is assumed to be out-of-date", phase)
return false
}
finishedAt, err := time.Parse(time.RFC3339, finishedAtRaw)
if err != nil {
logEntry.Warnf("Failed to parse FinishedAt '%s'", finishedAtRaw)
return false
}
var reconciledAt, observedAt time.Time
reconciledAtRaw, ok, err := unstructured.NestedString(app.Object, "status", "reconciledAt")
if ok && err == nil {
reconciledAt, _ = time.Parse(time.RFC3339, reconciledAtRaw)
}
observedAtRaw, ok, err := unstructured.NestedString(app.Object, "status", "observedAt")
if ok && err == nil {
observedAt, _ = time.Parse(time.RFC3339, observedAtRaw)
}
if finishedAt.After(reconciledAt) && finishedAt.After(observedAt) {
logEntry.Debugf("SyncStatus out-of-date (FinishedAt=%v, ReconciledAt=%v, Observed=%v", finishedAt, reconciledAt, observedAt)
return false
}
logEntry.Debugf("SyncStatus up-to-date (FinishedAt=%v, ReconciledAt=%v, Observed=%v", finishedAt, reconciledAt, observedAt)
default:
logEntry.Debugf("Found phase '%s', SyncStatus is assumed to be up-to-date", phase)
}
return true
}