mirror of
				https://github.com/k3s-io/kubernetes.git
				synced 2025-10-31 13:50:01 +00:00 
			
		
		
		
	This changes the Kubelet configuration flag precedence order so that flags take precedence over config from files/ConfigMaps. See #56171 for rationale. Note: Feature gates accumulate with the following precedence (greater number overrides lesser number): 1. file-based config 2. dynamic cofig 3. flag-based config
		
			
				
	
	
		
			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)
 | |
| 	}
 | |
| }
 |