github.com/caos/orbos@v1.5.14-0.20221103111702-e6cd0cea7ad4/cmd/orbctl/start.go (about) 1 package main 2 3 import ( 4 "log" 5 "net/http" 6 7 "github.com/caos/orbos/internal/ctrlcrd" 8 "github.com/caos/orbos/internal/ctrlgitops" 9 "github.com/caos/orbos/pkg/kubernetes" 10 orbcfg "github.com/caos/orbos/pkg/orb" 11 "github.com/spf13/cobra" 12 ) 13 14 func StartCommand() *cobra.Command { 15 return &cobra.Command{ 16 Use: "start", 17 Short: "Start an operator", 18 Long: `Pass exactly one of orbiter, boom or networking"`, 19 Args: cobra.MinimumNArgs(1), 20 } 21 } 22 23 func StartOrbiter(getRv GetRootValues) *cobra.Command { 24 var ( 25 verbose bool 26 recur bool 27 deploy bool 28 pprof bool 29 cmd = &cobra.Command{ 30 Use: "orbiter", 31 Short: "Launch an orbiter", 32 Long: "Ensures a desired state", 33 } 34 ) 35 36 flags := cmd.Flags() 37 flags.BoolVar(&recur, "recur", true, "Ensure the desired state continously") 38 flags.BoolVar(&deploy, "deploy", true, "Ensure Orbiter deployment continously") 39 flags.BoolVar(&pprof, "pprof", false, "Start pprof to analyse memory usage") 40 41 cmd.RunE = func(cmd *cobra.Command, args []string) (err error) { 42 43 rv := getRv("start", "orbiter", map[string]interface{}{"recur": recur, "depoy": deploy, "pprof": pprof}) 44 defer rv.ErrFunc(err) 45 46 if err := orbcfg.IsComplete(rv.OrbConfig); err != nil { 47 return err 48 } 49 50 if err := rv.GitClient.Configure(rv.OrbConfig.URL, []byte(rv.OrbConfig.Repokey)); err != nil { 51 return err 52 } 53 54 orbiterConfig := &ctrlgitops.OrbiterConfig{ 55 Recur: recur, 56 Deploy: deploy, 57 Verbose: verbose, 58 Version: version, 59 OrbConfigPath: rv.OrbConfig.Path, 60 GitCommit: gitCommit, 61 } 62 63 if pprof { 64 go func() { 65 log.Println(http.ListenAndServe("localhost:6060", nil)) 66 }() 67 } 68 69 return ctrlgitops.Orbiter(rv.Ctx, monitor, orbiterConfig, rv.GitClient) 70 } 71 return cmd 72 } 73 74 func StartBoom(getRv GetRootValues) *cobra.Command { 75 var ( 76 metricsAddr string 77 cmd = &cobra.Command{ 78 Use: "boom", 79 Short: "Launch a boom", 80 Long: "Ensures a desired state", 81 } 82 ) 83 84 flags := cmd.Flags() 85 flags.StringVar(&metricsAddr, "metrics-addr", "", "The address the metric endpoint binds to.") 86 87 cmd.RunE = func(cmd *cobra.Command, args []string) (err error) { 88 89 rv := getRv("start", "boom", map[string]interface{}{"metrics-addr": metricsAddr != ""}) 90 defer rv.ErrFunc(err) 91 92 monitor.Info("Takeoff Boom") 93 94 if rv.Gitops { 95 return ctrlgitops.Boom(monitor, rv.OrbConfig.Path, version) 96 } 97 return ctrlcrd.Start(monitor, version, "/boom", metricsAddr, "", ctrlcrd.Boom) 98 } 99 return cmd 100 } 101 102 func StartNetworking(getRv GetRootValues) *cobra.Command { 103 var ( 104 metricsAddr string 105 cmd = &cobra.Command{ 106 Use: "networking", 107 Short: "Launch a networking operator", 108 Long: "Ensures a desired state of networking for an application", 109 } 110 ) 111 flags := cmd.Flags() 112 flags.StringVar(&metricsAddr, "metrics-addr", "", "The address the metric endpoint binds to.") 113 114 cmd.RunE = func(cmd *cobra.Command, args []string) (err error) { 115 rv := getRv("start", "networking-operator", map[string]interface{}{"metrics-addr": metricsAddr != ""}) 116 defer rv.ErrFunc(err) 117 118 monitor := rv.Monitor 119 orbConfig := rv.OrbConfig 120 121 monitor.Info("Takeoff Networking") 122 123 if rv.Gitops { 124 125 k8sClient, err := kubernetes.NewK8sClientPathBeforeInCluster(monitor, rv.Kubeconfig) 126 if err != nil { 127 return err 128 } 129 return ctrlgitops.Networking(rv.Ctx, monitor, orbConfig.Path, k8sClient, &version) 130 } else { 131 return ctrlcrd.Start(monitor, version, "/boom", metricsAddr, rv.Kubeconfig, ctrlcrd.Networking) 132 } 133 return ctrlcrd.Start(monitor, version, "/boom", metricsAddr, rv.Kubeconfig, ctrlcrd.Networking) 134 } 135 return cmd 136 }