mirror of
https://github.com/ceph/ceph-csi.git
synced 2024-11-27 00:30:18 +00:00
111 lines
2.6 KiB
Go
111 lines
2.6 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 verflag defines utility functions to handle command line flags
|
|
// related to version of Kubernetes.
|
|
package verflag
|
|
|
|
import (
|
|
"fmt"
|
|
"os"
|
|
"strconv"
|
|
|
|
flag "github.com/spf13/pflag"
|
|
|
|
"k8s.io/kubernetes/pkg/version"
|
|
)
|
|
|
|
type versionValue int
|
|
|
|
const (
|
|
VersionFalse versionValue = 0
|
|
VersionTrue versionValue = 1
|
|
VersionRaw versionValue = 2
|
|
)
|
|
|
|
const strRawVersion string = "raw"
|
|
|
|
func (v *versionValue) IsBoolFlag() bool {
|
|
return true
|
|
}
|
|
|
|
func (v *versionValue) Get() interface{} {
|
|
return versionValue(*v)
|
|
}
|
|
|
|
func (v *versionValue) Set(s string) error {
|
|
if s == strRawVersion {
|
|
*v = VersionRaw
|
|
return nil
|
|
}
|
|
boolVal, err := strconv.ParseBool(s)
|
|
if boolVal {
|
|
*v = VersionTrue
|
|
} else {
|
|
*v = VersionFalse
|
|
}
|
|
return err
|
|
}
|
|
|
|
func (v *versionValue) String() string {
|
|
if *v == VersionRaw {
|
|
return strRawVersion
|
|
}
|
|
return fmt.Sprintf("%v", bool(*v == VersionTrue))
|
|
}
|
|
|
|
// The type of the flag as required by the pflag.Value interface
|
|
func (v *versionValue) Type() string {
|
|
return "version"
|
|
}
|
|
|
|
func VersionVar(p *versionValue, name string, value versionValue, usage string) {
|
|
*p = value
|
|
flag.Var(p, name, usage)
|
|
// "--version" will be treated as "--version=true"
|
|
flag.Lookup(name).NoOptDefVal = "true"
|
|
}
|
|
|
|
func Version(name string, value versionValue, usage string) *versionValue {
|
|
p := new(versionValue)
|
|
VersionVar(p, name, value, usage)
|
|
return p
|
|
}
|
|
|
|
const versionFlagName = "version"
|
|
|
|
var (
|
|
versionFlag = Version(versionFlagName, VersionFalse, "Print version information and quit")
|
|
)
|
|
|
|
// AddFlags registers this package's flags on arbitrary FlagSets, such that they point to the
|
|
// same value as the global flags.
|
|
func AddFlags(fs *flag.FlagSet) {
|
|
fs.AddFlag(flag.Lookup(versionFlagName))
|
|
}
|
|
|
|
// PrintAndExitIfRequested will check if the -version flag was passed
|
|
// and, if so, print the version and exit.
|
|
func PrintAndExitIfRequested() {
|
|
if *versionFlag == VersionRaw {
|
|
fmt.Printf("%#v\n", version.Get())
|
|
os.Exit(0)
|
|
} else if *versionFlag == VersionTrue {
|
|
fmt.Printf("Kubernetes %s\n", version.Get())
|
|
os.Exit(0)
|
|
}
|
|
}
|