github.com/jingruilea/kubeedge@v1.2.0-beta.0.0.20200410162146-4bb8902b3879/cloud/cmd/admission/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/kubeedge/cloud/cmd/admission/app/options"
    13  	admissioncontroller "github.com/kubeedge/kubeedge/cloud/pkg/admissioncontroller"
    14  	"github.com/kubeedge/kubeedge/pkg/util/flag"
    15  	"github.com/kubeedge/kubeedge/pkg/version"
    16  	"github.com/kubeedge/kubeedge/pkg/version/verflag"
    17  )
    18  
    19  func NewAdmissionCommand() *cobra.Command {
    20  	ops := options.NewAdmissionOptions()
    21  	cmd := &cobra.Command{
    22  		Use: "admission",
    23  		Long: `Admission leverage the feature of Dynamic Admission Control from kubernetes, start it
    24  if want to admission control some kubeedge resources.`,
    25  		Run: func(cmd *cobra.Command, args []string) {
    26  			verflag.PrintAndExitIfRequested()
    27  			flag.PrintFlags(cmd.Flags())
    28  
    29  			// To help debugging, immediately log version
    30  			klog.Infof("Version: %+v", version.Get())
    31  			admissioncontroller.Run(ops)
    32  		},
    33  	}
    34  
    35  	fs := cmd.Flags()
    36  	namedFs := ops.Flags()
    37  	verflag.AddFlags(namedFs.FlagSet("global"))
    38  	globalflag.AddGlobalFlags(namedFs.FlagSet("global"), cmd.Name())
    39  	for _, f := range namedFs.FlagSets {
    40  		fs.AddFlagSet(f)
    41  	}
    42  
    43  	usageFmt := "Usage:\n  %s\n"
    44  	cols, _, _ := term.TerminalSize(cmd.OutOrStdout())
    45  	cmd.SetUsageFunc(func(cmd *cobra.Command) error {
    46  		fmt.Fprintf(cmd.OutOrStderr(), usageFmt, cmd.UseLine())
    47  		cliflag.PrintSections(cmd.OutOrStderr(), namedFs, cols)
    48  		return nil
    49  	})
    50  	cmd.SetHelpFunc(func(cmd *cobra.Command, args []string) {
    51  		fmt.Fprintf(cmd.OutOrStdout(), "%s\n\n"+usageFmt, cmd.Long, cmd.UseLine())
    52  		cliflag.PrintSections(cmd.OutOrStdout(), namedFs, cols)
    53  	})
    54  
    55  	return cmd
    56  }