// k8s-tester-falcon installs Falcon Operator, Falcon Container and validates the install package main import ( "fmt" "os" "github.com/aws/aws-k8s-tester/client" falcon_tester "github.com/aws/aws-k8s-tester/k8s-tester/falcon" "github.com/aws/aws-k8s-tester/utils/log" "github.com/spf13/cobra" "go.uber.org/zap" ) var rootCmd = &cobra.Command{ Use: "k8s-tester-falcon", Short: "Kubernetes CrowdStrike Falcon tester", SuggestFor: []string{"falcon"}, } func init() { cobra.EnablePrefixMatching = true } var ( prompt bool logLevel string logOutputs []string kubectlDownloadURL string kubectlPath string kubeconfigPath string falconClientId string falconClientSecret string ) func init() { rootCmd.PersistentFlags().BoolVar(&prompt, "prompt", true, "'true' to enable prompt mode") rootCmd.PersistentFlags().StringVar(&logLevel, "log-level", log.DefaultLogLevel, "Logging level") rootCmd.PersistentFlags().StringSliceVar(&logOutputs, "log-outputs", []string{"stderr"}, "Additional logger outputs") rootCmd.PersistentFlags().StringVar(&kubectlDownloadURL, "kubectl-download-url", client.DefaultKubectlDownloadURL(), "kubectl download URL") rootCmd.PersistentFlags().StringVar(&kubectlPath, "kubectl-path", client.DefaultKubectlPath(), "kubectl path") rootCmd.PersistentFlags().StringVar(&kubeconfigPath, "kubeconfig-path", "", "KUBECONFIG path") rootCmd.PersistentFlags().StringVar(&falconClientId, "falcon-client-id", os.Getenv("FALCON_CLIENT_ID"), "Client ID for accessing CrowdStrike Falcon Platform") rootCmd.PersistentFlags().StringVar(&falconClientSecret, "falcon-client-secret", os.Getenv("FALCON_CLIENT_SECRET"), "Client Secret for accessing CrowdStrike Falcon Platform") rootCmd.AddCommand( newApply(), newDelete(), ) } func main() { if err := rootCmd.Execute(); err != nil { fmt.Fprintf(os.Stderr, "k8s-tester-falcon failed %v\n", err) os.Exit(1) } os.Exit(0) } func newApply() *cobra.Command { cmd := &cobra.Command{ Use: "apply", Short: "Apply tests", Run: createApplyFunc, } return cmd } func createApplyFunc(cmd *cobra.Command, args []string) { lg, logWriter, _, err := log.NewWithStderrWriter(logLevel, logOutputs) if err != nil { fmt.Fprintf(os.Stderr, "failed to create logger (%v)\n", err) // panic(err) } _ = zap.ReplaceGlobals(lg) cli, err := client.New(&client.Config{ Logger: lg, KubectlDownloadURL: kubectlDownloadURL, KubectlPath: kubectlPath, KubeconfigPath: kubeconfigPath, }) if err != nil { lg.Panic("failed to create client", zap.Error(err)) } cfg := &falcon_tester.Config{ Prompt: prompt, Logger: lg, LogWriter: logWriter, Client: cli, FalconClientId: falconClientId, FalconClientSecret: falconClientSecret, } ts := falcon_tester.New(cfg) if err := ts.Apply(); err != nil { fmt.Fprintf(os.Stderr, "failed to apply (%v)\n", err) os.Exit(1) } fmt.Printf("\n*********************************\n") fmt.Printf("'k8s-tester-falcon apply' success\n") } func newDelete() *cobra.Command { cmd := &cobra.Command{ Use: "delete", Short: "Delete resources", Run: createDeleteFunc, } return cmd } func createDeleteFunc(cmd *cobra.Command, args []string) { lg, logWriter, _, err := log.NewWithStderrWriter(logLevel, logOutputs) if err != nil { panic(err) } _ = zap.ReplaceGlobals(lg) cli, err := client.New(&client.Config{ Logger: lg, KubectlDownloadURL: kubectlDownloadURL, KubectlPath: kubectlPath, KubeconfigPath: kubeconfigPath, }) if err != nil { lg.Panic("failed to create client", zap.Error(err)) } cfg := &falcon_tester.Config{ Prompt: prompt, Logger: lg, LogWriter: logWriter, Client: cli, FalconClientId: falconClientId, FalconClientSecret: falconClientSecret, } ts := falcon_tester.New(cfg) if err := ts.Delete(); err != nil { fmt.Fprintf(os.Stderr, "failed to delete (%v)\n", err) os.Exit(1) } fmt.Printf("\n*********************************\n") fmt.Printf("'k8s-tester-falcon delete' success\n") }