mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-07-27 05:27:21 +00:00
kubeadm: Make sure --config can be mixed with --skip-* flags
This commit is contained in:
parent
6fdf0e4157
commit
aa46947557
@ -262,8 +262,22 @@ func ValidateCloudProvider(provider string, fldPath *field.Path) field.ErrorList
|
|||||||
}
|
}
|
||||||
|
|
||||||
func ValidateMixedArguments(flag *pflag.FlagSet) error {
|
func ValidateMixedArguments(flag *pflag.FlagSet) error {
|
||||||
if flag.Changed("config") && flag.NFlag() != 1 {
|
// If --config isn't set, we have nothing to validate
|
||||||
return fmt.Errorf("can not mix '--config' with other arguments")
|
if !flag.Changed("config") {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
mixedInvalidFlags := []string{}
|
||||||
|
flag.Visit(func(f *pflag.Flag) {
|
||||||
|
if f.Name == "config" || strings.HasPrefix(f.Name, "skip-") {
|
||||||
|
// "--skip-*" flags can be set with --config
|
||||||
|
return
|
||||||
|
}
|
||||||
|
mixedInvalidFlags = append(mixedInvalidFlags, f.Name)
|
||||||
|
})
|
||||||
|
|
||||||
|
if len(mixedInvalidFlags) != 0 {
|
||||||
|
return fmt.Errorf("can not mix '--config' with arguments %v", mixedInvalidFlags)
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
@ -286,25 +286,28 @@ func TestValidateMixedArguments(t *testing.T) {
|
|||||||
args []string
|
args []string
|
||||||
expected bool
|
expected bool
|
||||||
}{
|
}{
|
||||||
|
// Expected to succeed, --config is mixed with skip-* flags only or no other flags
|
||||||
{[]string{"--foo=bar"}, true},
|
{[]string{"--foo=bar"}, true},
|
||||||
{[]string{"--config=hello"}, true},
|
{[]string{"--config=hello"}, true},
|
||||||
{[]string{"--foo=bar", "--config=hello"}, false},
|
{[]string{"--config=hello", "--skip-preflight-checks=true"}, true},
|
||||||
|
{[]string{"--config=hello", "--skip-token-print=true"}, true},
|
||||||
|
{[]string{"--config=hello", "--skip-preflight-checks", "--skip-token-print"}, true},
|
||||||
|
// Expected to fail, --config is mixed with the --foo flag
|
||||||
|
{[]string{"--config=hello", "--skip-preflight-checks", "--foo=bar"}, false},
|
||||||
|
{[]string{"--config=hello", "--foo=bar"}, false},
|
||||||
}
|
}
|
||||||
|
|
||||||
var cfgPath string
|
var cfgPath string
|
||||||
var skipPreFlight bool
|
|
||||||
|
|
||||||
for _, rt := range tests {
|
for _, rt := range tests {
|
||||||
f := pflag.NewFlagSet("test", pflag.ContinueOnError)
|
f := pflag.NewFlagSet("test", pflag.ContinueOnError)
|
||||||
if f.Parsed() {
|
if f.Parsed() {
|
||||||
t.Error("f.Parse() = true before Parse")
|
t.Error("f.Parse() = true before Parse")
|
||||||
}
|
}
|
||||||
f.String("foo", "", "string value")
|
f.String("foo", "", "flag bound to config object")
|
||||||
|
f.Bool("skip-preflight-checks", false, "flag not bound to config object")
|
||||||
|
f.Bool("skip-token-print", false, "flag not bound to config object")
|
||||||
f.StringVar(&cfgPath, "config", cfgPath, "Path to kubeadm config file")
|
f.StringVar(&cfgPath, "config", cfgPath, "Path to kubeadm config file")
|
||||||
f.BoolVar(
|
|
||||||
&skipPreFlight, "skip-preflight-checks", skipPreFlight,
|
|
||||||
"Skip preflight checks normally run before modifying the system",
|
|
||||||
)
|
|
||||||
if err := f.Parse(rt.args); err != nil {
|
if err := f.Parse(rt.args); err != nil {
|
||||||
t.Fatal(err)
|
t.Fatal(err)
|
||||||
}
|
}
|
||||||
@ -312,9 +315,10 @@ func TestValidateMixedArguments(t *testing.T) {
|
|||||||
actual := ValidateMixedArguments(f)
|
actual := ValidateMixedArguments(f)
|
||||||
if (actual == nil) != rt.expected {
|
if (actual == nil) != rt.expected {
|
||||||
t.Errorf(
|
t.Errorf(
|
||||||
"failed ValidateMixedArguments:\n\texpected: %t\n\t actual: %t",
|
"failed ValidateMixedArguments:\n\texpected: %t\n\t actual: %t testdata: %v",
|
||||||
rt.expected,
|
rt.expected,
|
||||||
(actual == nil),
|
(actual == nil),
|
||||||
|
rt.args,
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -137,10 +137,12 @@ func NewCmdInit(out io.Writer) *cobra.Command {
|
|||||||
|
|
||||||
cmd.PersistentFlags().StringVar(&cfgPath, "config", cfgPath, "Path to kubeadm config file (WARNING: Usage of a configuration file is experimental)")
|
cmd.PersistentFlags().StringVar(&cfgPath, "config", cfgPath, "Path to kubeadm config file (WARNING: Usage of a configuration file is experimental)")
|
||||||
|
|
||||||
|
// Note: All flags that are not bound to the cfg object should be whitelisted in cmd/kubeadm/app/apis/kubeadm/validation/validation.go
|
||||||
cmd.PersistentFlags().BoolVar(
|
cmd.PersistentFlags().BoolVar(
|
||||||
&skipPreFlight, "skip-preflight-checks", skipPreFlight,
|
&skipPreFlight, "skip-preflight-checks", skipPreFlight,
|
||||||
"Skip preflight checks normally run before modifying the system",
|
"Skip preflight checks normally run before modifying the system",
|
||||||
)
|
)
|
||||||
|
// Note: All flags that are not bound to the cfg object should be whitelisted in cmd/kubeadm/app/apis/kubeadm/validation/validation.go
|
||||||
cmd.PersistentFlags().BoolVar(
|
cmd.PersistentFlags().BoolVar(
|
||||||
&skipTokenPrint, "skip-token-print", skipTokenPrint,
|
&skipTokenPrint, "skip-token-print", skipTokenPrint,
|
||||||
"Skip printing of the default bootstrap token generated by 'kubeadm init'",
|
"Skip printing of the default bootstrap token generated by 'kubeadm init'",
|
||||||
|
Loading…
Reference in New Issue
Block a user