github.com/jingruilea/kubeedge@v1.2.0-beta.0.0.20200410162146-4bb8902b3879/cloud/cmd/cloudcore/app/server.go (about) 1 package app 2 3 import ( 4 "fmt" 5 6 "github.com/spf13/cobra" 7 "k8s.io/apiserver/pkg/util/term" 8 cliflag "k8s.io/component-base/cli/flag" 9 "k8s.io/component-base/cli/globalflag" 10 "k8s.io/klog" 11 12 "github.com/kubeedge/beehive/pkg/core" 13 "github.com/kubeedge/kubeedge/cloud/cmd/cloudcore/app/options" 14 "github.com/kubeedge/kubeedge/cloud/pkg/cloudhub" 15 "github.com/kubeedge/kubeedge/cloud/pkg/devicecontroller" 16 "github.com/kubeedge/kubeedge/cloud/pkg/edgecontroller" 17 "github.com/kubeedge/kubeedge/cloud/pkg/synccontroller" 18 "github.com/kubeedge/kubeedge/pkg/apis/componentconfig/cloudcore/v1alpha1" 19 "github.com/kubeedge/kubeedge/pkg/apis/componentconfig/cloudcore/v1alpha1/validation" 20 "github.com/kubeedge/kubeedge/pkg/util" 21 "github.com/kubeedge/kubeedge/pkg/util/flag" 22 "github.com/kubeedge/kubeedge/pkg/version" 23 "github.com/kubeedge/kubeedge/pkg/version/verflag" 24 ) 25 26 func NewCloudCoreCommand() *cobra.Command { 27 opts := options.NewCloudCoreOptions() 28 cmd := &cobra.Command{ 29 Use: "cloudcore", 30 Long: `CloudCore is the core cloud part of KubeEdge, which contains three modules: cloudhub, 31 edgecontroller, and devicecontroller. Cloudhub is a web server responsible for watching changes at the cloud side, 32 caching and sending messages to EdgeHub. EdgeController is an extended kubernetes controller which manages 33 edge nodes and pods metadata so that the data can be targeted to a specific edge node. DeviceController is an extended 34 kubernetes controller which manages devices so that the device metadata/status date can be synced between edge and cloud.`, 35 Run: func(cmd *cobra.Command, args []string) { 36 verflag.PrintAndExitIfRequested() 37 flag.PrintMinConfigAndExitIfRequested(v1alpha1.NewMinCloudCoreConfig()) 38 flag.PrintDefaultConfigAndExitIfRequested(v1alpha1.NewDefaultCloudCoreConfig()) 39 flag.PrintFlags(cmd.Flags()) 40 41 if errs := opts.Validate(); len(errs) > 0 { 42 klog.Fatal(util.SpliceErrors(errs)) 43 } 44 45 config, err := opts.Config() 46 if err != nil { 47 klog.Fatal(err) 48 } 49 50 if errs := validation.ValidateCloudCoreConfiguration(config); len(errs) > 0 { 51 klog.Fatal(util.SpliceErrors(errs.ToAggregate().Errors())) 52 } 53 54 // To help debugging, immediately log version 55 klog.Infof("Version: %+v", version.Get()) 56 57 registerModules(config) 58 // start all modules 59 core.Run() 60 }, 61 } 62 fs := cmd.Flags() 63 namedFs := opts.Flags() 64 verflag.AddFlags(namedFs.FlagSet("global")) 65 flag.AddFlags(namedFs.FlagSet("global")) 66 globalflag.AddGlobalFlags(namedFs.FlagSet("global"), cmd.Name()) 67 for _, f := range namedFs.FlagSets { 68 fs.AddFlagSet(f) 69 } 70 71 usageFmt := "Usage:\n %s\n" 72 cols, _, _ := term.TerminalSize(cmd.OutOrStdout()) 73 cmd.SetUsageFunc(func(cmd *cobra.Command) error { 74 fmt.Fprintf(cmd.OutOrStderr(), usageFmt, cmd.UseLine()) 75 cliflag.PrintSections(cmd.OutOrStderr(), namedFs, cols) 76 return nil 77 }) 78 cmd.SetHelpFunc(func(cmd *cobra.Command, args []string) { 79 fmt.Fprintf(cmd.OutOrStdout(), "%s\n\n"+usageFmt, cmd.Long, cmd.UseLine()) 80 cliflag.PrintSections(cmd.OutOrStdout(), namedFs, cols) 81 }) 82 83 return cmd 84 } 85 86 // registerModules register all the modules started in cloudcore 87 func registerModules(c *v1alpha1.CloudCoreConfig) { 88 cloudhub.Register(c.Modules.CloudHub, c.KubeAPIConfig) 89 edgecontroller.Register(c.Modules.EdgeController, c.KubeAPIConfig, "", false) 90 devicecontroller.Register(c.Modules.DeviceController, c.KubeAPIConfig) 91 synccontroller.Register(c.Modules.SyncController, c.KubeAPIConfig) 92 }