github.com/argoproj/argo-cd/v3@v3.2.1/cmd/argocd/commands/admin/notifications.go (about)

     1  package admin
     2  
     3  import (
     4  	"log"
     5  
     6  	"k8s.io/apimachinery/pkg/runtime/schema"
     7  	"k8s.io/client-go/kubernetes"
     8  	"k8s.io/client-go/tools/clientcmd"
     9  
    10  	"github.com/argoproj/argo-cd/v3/common"
    11  	"github.com/argoproj/argo-cd/v3/reposerver/apiclient"
    12  	"github.com/argoproj/argo-cd/v3/util/env"
    13  	service "github.com/argoproj/argo-cd/v3/util/notification/argocd"
    14  	"github.com/argoproj/argo-cd/v3/util/notification/settings"
    15  	"github.com/argoproj/argo-cd/v3/util/tls"
    16  
    17  	"github.com/argoproj/notifications-engine/pkg/cmd"
    18  	"github.com/spf13/cobra"
    19  
    20  	"github.com/argoproj/argo-cd/v3/pkg/apis/application"
    21  )
    22  
    23  var applications = schema.GroupVersionResource{Group: application.Group, Version: "v1alpha1", Resource: application.ApplicationPlural}
    24  
    25  func NewNotificationsCommand() *cobra.Command {
    26  	var (
    27  		argocdRepoServer          string
    28  		argocdRepoServerPlaintext bool
    29  		argocdRepoServerStrictTLS bool
    30  	)
    31  
    32  	var argocdService service.Service
    33  
    34  	toolsCommand := cmd.NewToolsCommand(
    35  		"notifications",
    36  		"argocd admin notifications",
    37  		applications,
    38  		settings.GetFactorySettingsForCLI(func() service.Service { return argocdService }, "argocd-notifications-secret", "argocd-notifications-cm", false),
    39  		func(clientConfig clientcmd.ClientConfig) {
    40  			k8sCfg, err := clientConfig.ClientConfig()
    41  			if err != nil {
    42  				log.Fatalf("Failed to parse k8s config: %v", err)
    43  			}
    44  			ns, _, err := clientConfig.Namespace()
    45  			if err != nil {
    46  				log.Fatalf("Failed to parse k8s config: %v", err)
    47  			}
    48  			tlsConfig := apiclient.TLSConfiguration{
    49  				DisableTLS:       argocdRepoServerPlaintext,
    50  				StrictValidation: argocdRepoServerStrictTLS,
    51  			}
    52  			if !tlsConfig.DisableTLS && tlsConfig.StrictValidation {
    53  				pool, err := tls.LoadX509CertPool(
    54  					env.StringFromEnv(common.EnvAppConfigPath, common.DefaultAppConfigPath)+"/reposerver/tls/tls.crt",
    55  					env.StringFromEnv(common.EnvAppConfigPath, common.DefaultAppConfigPath)+"/reposerver/tls/ca.crt",
    56  				)
    57  				if err != nil {
    58  					log.Fatalf("Failed to load tls certs: %v", err)
    59  				}
    60  				tlsConfig.Certificates = pool
    61  			}
    62  			repoClientset := apiclient.NewRepoServerClientset(argocdRepoServer, 5, tlsConfig)
    63  			argocdService, err = service.NewArgoCDService(kubernetes.NewForConfigOrDie(k8sCfg), ns, repoClientset)
    64  			if err != nil {
    65  				log.Fatalf("Failed to initialize Argo CD service: %v", err)
    66  			}
    67  		})
    68  	toolsCommand.PersistentFlags().StringVar(&argocdRepoServer, "argocd-repo-server", common.DefaultRepoServerAddr, "Argo CD repo server address")
    69  	toolsCommand.PersistentFlags().BoolVar(&argocdRepoServerPlaintext, "argocd-repo-server-plaintext", false, "Use a plaintext client (non-TLS) to connect to repository server")
    70  	toolsCommand.PersistentFlags().BoolVar(&argocdRepoServerStrictTLS, "argocd-repo-server-strict-tls", false, "Perform strict validation of TLS certificates when connecting to repo server")
    71  	return toolsCommand
    72  }