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  }