mirror of
https://github.com/ceph/ceph-csi.git
synced 2024-11-13 01:40:23 +00:00
78 lines
2.0 KiB
Go
78 lines
2.0 KiB
Go
/*
|
|
Copyright 2014 The Kubernetes Authors.
|
|
|
|
Licensed under the Apache License, Version 2.0 (the "License");
|
|
you may not use this file except in compliance with the License.
|
|
You may obtain a copy of the License at
|
|
|
|
http://www.apache.org/licenses/LICENSE-2.0
|
|
|
|
Unless required by applicable law or agreed to in writing, software
|
|
distributed under the License is distributed on an "AS IS" BASIS,
|
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
See the License for the specific language governing permissions and
|
|
limitations under the License.
|
|
*/
|
|
|
|
package main
|
|
|
|
import (
|
|
"io/ioutil"
|
|
"strings"
|
|
|
|
"k8s.io/apiserver/pkg/util/flag"
|
|
utiltemplate "k8s.io/kubernetes/pkg/util/template"
|
|
|
|
"github.com/spf13/pflag"
|
|
)
|
|
|
|
type serverRunFunc func(s *Server, args []string, stopCh <-chan struct{}) error
|
|
|
|
// Server describes a server that this binary can morph into.
|
|
type Server struct {
|
|
SimpleUsage string // One line description of the server.
|
|
Long string // Longer free form description of the server
|
|
Run serverRunFunc // Run the server. This is not expected to return.
|
|
AlternativeName string
|
|
RespectsStopCh bool
|
|
|
|
flags *pflag.FlagSet // Flags for the command (and all dependents)
|
|
name string
|
|
hk *HyperKube
|
|
}
|
|
|
|
// Usage returns the full usage string including all of the flags.
|
|
func (s *Server) Usage() error {
|
|
tt := `{{if .Long}}{{.Long | trim | wrap ""}}
|
|
{{end}}Usage:
|
|
{{.SimpleUsage}} [flags]
|
|
|
|
Available Flags:
|
|
{{.Flags.FlagUsages}}`
|
|
|
|
return utiltemplate.ExecuteTemplate(s.hk.Out(), tt, s)
|
|
}
|
|
|
|
// Name returns the name of the command as derived from the usage line.
|
|
func (s *Server) Name() string {
|
|
if s.name != "" {
|
|
return s.name
|
|
}
|
|
name := s.SimpleUsage
|
|
i := strings.Index(name, " ")
|
|
if i >= 0 {
|
|
name = name[:i]
|
|
}
|
|
return name
|
|
}
|
|
|
|
// Flags returns a flagset for this server
|
|
func (s *Server) Flags() *pflag.FlagSet {
|
|
if s.flags == nil {
|
|
s.flags = pflag.NewFlagSet(s.Name(), pflag.ContinueOnError)
|
|
s.flags.SetOutput(ioutil.Discard)
|
|
s.flags.SetNormalizeFunc(flag.WordSepNormalizeFunc)
|
|
}
|
|
return s.flags
|
|
}
|