Merge pull request #113465 from chendave/golang_generic

kubeadm: bump to use golang generic
This commit is contained in:
Kubernetes Prow Robot 2022-12-14 11:55:34 -08:00 committed by GitHub
commit 08160f7975
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
26 changed files with 112 additions and 113 deletions

View File

@ -238,7 +238,7 @@ func ValidateTokenGroups(usages []string, groups []string, fldPath *field.Path)
allErrs := field.ErrorList{} allErrs := field.ErrorList{}
// adding groups only makes sense for authentication // adding groups only makes sense for authentication
usagesSet := sets.NewString(usages...) usagesSet := sets.New(usages...)
usageAuthentication := strings.TrimPrefix(bootstrapapi.BootstrapTokenUsageAuthentication, bootstrapapi.BootstrapTokenUsagePrefix) usageAuthentication := strings.TrimPrefix(bootstrapapi.BootstrapTokenUsageAuthentication, bootstrapapi.BootstrapTokenUsagePrefix)
if len(groups) > 0 && !usagesSet.Has(usageAuthentication) { if len(groups) > 0 && !usagesSet.Has(usageAuthentication) {
allErrs = append(allErrs, field.Invalid(fldPath, groups, fmt.Sprintf("token groups cannot be specified unless --usages includes %q", usageAuthentication))) allErrs = append(allErrs, field.Invalid(fldPath, groups, fmt.Sprintf("token groups cannot be specified unless --usages includes %q", usageAuthentication)))
@ -564,7 +564,7 @@ func ValidateMixedArguments(flag *pflag.FlagSet) error {
} }
func isAllowedFlag(flagName string) bool { func isAllowedFlag(flagName string) bool {
allowedFlags := sets.NewString(kubeadmcmdoptions.CfgPath, allowedFlags := sets.New(kubeadmcmdoptions.CfgPath,
kubeadmcmdoptions.IgnorePreflightErrors, kubeadmcmdoptions.IgnorePreflightErrors,
kubeadmcmdoptions.DryRun, kubeadmcmdoptions.DryRun,
kubeadmcmdoptions.KubeconfigPath, kubeadmcmdoptions.KubeconfigPath,
@ -603,8 +603,8 @@ func ValidateAPIEndpoint(c *kubeadm.APIEndpoint, fldPath *field.Path) field.Erro
// ValidateIgnorePreflightErrors validates duplicates in: // ValidateIgnorePreflightErrors validates duplicates in:
// - ignore-preflight-errors flag and // - ignore-preflight-errors flag and
// - ignorePreflightErrors field in {Init,Join}Configuration files. // - ignorePreflightErrors field in {Init,Join}Configuration files.
func ValidateIgnorePreflightErrors(ignorePreflightErrorsFromCLI, ignorePreflightErrorsFromConfigFile []string) (sets.String, error) { func ValidateIgnorePreflightErrors(ignorePreflightErrorsFromCLI, ignorePreflightErrorsFromConfigFile []string) (sets.Set[string], error) {
ignoreErrors := sets.NewString() ignoreErrors := sets.New[string]()
allErrs := field.ErrorList{} allErrs := field.ErrorList{}
for _, item := range ignorePreflightErrorsFromConfigFile { for _, item := range ignorePreflightErrorsFromConfigFile {
@ -623,7 +623,7 @@ func ValidateIgnorePreflightErrors(ignorePreflightErrorsFromCLI, ignorePreflight
} }
if ignoreErrors.Has("all") && ignoreErrors.Len() > 1 { if ignoreErrors.Has("all") && ignoreErrors.Len() > 1 {
allErrs = append(allErrs, field.Invalid(field.NewPath("ignore-preflight-errors"), strings.Join(ignoreErrors.List(), ","), "don't specify individual checks if 'all' is used")) allErrs = append(allErrs, field.Invalid(field.NewPath("ignore-preflight-errors"), strings.Join(sets.List(ignoreErrors), ","), "don't specify individual checks if 'all' is used"))
} }
return ignoreErrors, allErrs.ToAggregate() return ignoreErrors, allErrs.ToAggregate()

View File

@ -761,67 +761,67 @@ func TestValidateIgnorePreflightErrors(t *testing.T) {
var tests = []struct { var tests = []struct {
ignorePreflightErrorsFromCLI []string ignorePreflightErrorsFromCLI []string
ignorePreflightErrorsFromConfigFile []string ignorePreflightErrorsFromConfigFile []string
expectedSet sets.String expectedSet sets.Set[string]
expectedError bool expectedError bool
}{ }{
{ // empty lists in CLI and config file { // empty lists in CLI and config file
[]string{}, []string{},
[]string{}, []string{},
sets.NewString(), sets.New[string](),
false, false,
}, },
{ // empty list in CLI only { // empty list in CLI only
[]string{}, []string{},
[]string{"a"}, []string{"a"},
sets.NewString("a"), sets.New("a"),
false, false,
}, },
{ // empty list in config file only { // empty list in config file only
[]string{"a"}, []string{"a"},
[]string{}, []string{},
sets.NewString("a"), sets.New("a"),
false, false,
}, },
{ // no duplicates, no overlap { // no duplicates, no overlap
[]string{"a", "b"}, []string{"a", "b"},
[]string{"c", "d"}, []string{"c", "d"},
sets.NewString("a", "b", "c", "d"), sets.New("a", "b", "c", "d"),
false, false,
}, },
{ // some duplicates, with some overlapping duplicates { // some duplicates, with some overlapping duplicates
[]string{"a", "b", "a"}, []string{"a", "b", "a"},
[]string{"c", "b"}, []string{"c", "b"},
sets.NewString("a", "b", "c"), sets.New("a", "b", "c"),
false, false,
}, },
{ // non-duplicate, but 'all' present together with individual checks in CLI { // non-duplicate, but 'all' present together with individual checks in CLI
[]string{"a", "b", "all"}, []string{"a", "b", "all"},
[]string{}, []string{},
sets.NewString(), sets.New[string](),
true, true,
}, },
{ // empty list in CLI, but 'all' present in config file, which is forbidden { // empty list in CLI, but 'all' present in config file, which is forbidden
[]string{}, []string{},
[]string{"all"}, []string{"all"},
sets.NewString(), sets.New[string](),
true, true,
}, },
{ // non-duplicate, but 'all' present in config file, which is forbidden { // non-duplicate, but 'all' present in config file, which is forbidden
[]string{"a", "b"}, []string{"a", "b"},
[]string{"all"}, []string{"all"},
sets.NewString(), sets.New[string](),
true, true,
}, },
{ // non-duplicate, but 'all' present in CLI, while values are in config file, which is forbidden { // non-duplicate, but 'all' present in CLI, while values are in config file, which is forbidden
[]string{"all"}, []string{"all"},
[]string{"a", "b"}, []string{"a", "b"},
sets.NewString(), sets.New[string](),
true, true,
}, },
{ // skip all checks { // skip all checks
[]string{"all"}, []string{"all"},
[]string{}, []string{},
sets.NewString("all"), sets.New("all"),
false, false,
}, },
} }

View File

@ -76,7 +76,7 @@ type initData struct {
dryRun bool dryRun bool
kubeconfigDir string kubeconfigDir string
kubeconfigPath string kubeconfigPath string
ignorePreflightErrors sets.String ignorePreflightErrors sets.Set[string]
certificatesDir string certificatesDir string
dryRunDir string dryRunDir string
externalCA bool externalCA bool
@ -307,7 +307,7 @@ func newInitData(cmd *cobra.Command, args []string, options *initOptions, out io
return nil, err return nil, err
} }
// Also set the union of pre-flight errors to InitConfiguration, to provide a consistent view of the runtime configuration: // Also set the union of pre-flight errors to InitConfiguration, to provide a consistent view of the runtime configuration:
cfg.NodeRegistration.IgnorePreflightErrors = ignorePreflightErrorsSet.List() cfg.NodeRegistration.IgnorePreflightErrors = sets.List(ignorePreflightErrorsSet)
// override node name from the command line option // override node name from the command line option
if options.externalInitCfg.NodeRegistration.Name != "" { if options.externalInitCfg.NodeRegistration.Name != "" {
@ -416,7 +416,7 @@ func (d *initData) SkipTokenPrint() bool {
} }
// IgnorePreflightErrors returns the IgnorePreflightErrors flag. // IgnorePreflightErrors returns the IgnorePreflightErrors flag.
func (d *initData) IgnorePreflightErrors() sets.String { func (d *initData) IgnorePreflightErrors() sets.Set[string] {
return d.ignorePreflightErrors return d.ignorePreflightErrors
} }

View File

@ -174,13 +174,13 @@ func TestNewInitData(t *testing.T) {
} }
func expectedInitIgnorePreflightErrors(expectedItems ...string) func(t *testing.T, data *initData) { func expectedInitIgnorePreflightErrors(expectedItems ...string) func(t *testing.T, data *initData) {
expected := sets.NewString(expectedItems...) expected := sets.New(expectedItems...)
return func(t *testing.T, data *initData) { return func(t *testing.T, data *initData) {
if !expected.Equal(data.ignorePreflightErrors) { if !expected.Equal(data.ignorePreflightErrors) {
t.Errorf("Invalid ignore preflight errors. Expected: %v. Actual: %v", expected.List(), data.ignorePreflightErrors.List()) t.Errorf("Invalid ignore preflight errors. Expected: %v. Actual: %v", sets.List(expected), sets.List(data.ignorePreflightErrors))
} }
if !expected.HasAll(data.cfg.NodeRegistration.IgnorePreflightErrors...) { if !expected.HasAll(data.cfg.NodeRegistration.IgnorePreflightErrors...) {
t.Errorf("Invalid ignore preflight errors in InitConfiguration. Expected: %v. Actual: %v", expected.List(), data.cfg.NodeRegistration.IgnorePreflightErrors) t.Errorf("Invalid ignore preflight errors in InitConfiguration. Expected: %v. Actual: %v", sets.List(expected), data.cfg.NodeRegistration.IgnorePreflightErrors)
} }
} }
} }

View File

@ -147,7 +147,7 @@ type joinData struct {
initCfg *kubeadmapi.InitConfiguration initCfg *kubeadmapi.InitConfiguration
tlsBootstrapCfg *clientcmdapi.Config tlsBootstrapCfg *clientcmdapi.Config
client clientset.Interface client clientset.Interface
ignorePreflightErrors sets.String ignorePreflightErrors sets.Set[string]
outputWriter io.Writer outputWriter io.Writer
patchesDir string patchesDir string
dryRun bool dryRun bool
@ -432,7 +432,7 @@ func newJoinData(cmd *cobra.Command, args []string, opt *joinOptions, out io.Wri
return nil, err return nil, err
} }
// Also set the union of pre-flight errors to JoinConfiguration, to provide a consistent view of the runtime configuration: // Also set the union of pre-flight errors to JoinConfiguration, to provide a consistent view of the runtime configuration:
cfg.NodeRegistration.IgnorePreflightErrors = ignorePreflightErrorsSet.List() cfg.NodeRegistration.IgnorePreflightErrors = sets.List(ignorePreflightErrorsSet)
// override node name and CRI socket from the command line opt // override node name and CRI socket from the command line opt
if opt.externalcfg.NodeRegistration.Name != "" { if opt.externalcfg.NodeRegistration.Name != "" {
@ -558,7 +558,7 @@ func (j *joinData) Client() (clientset.Interface, error) {
} }
// IgnorePreflightErrors returns the list of preflight errors to ignore. // IgnorePreflightErrors returns the list of preflight errors to ignore.
func (j *joinData) IgnorePreflightErrors() sets.String { func (j *joinData) IgnorePreflightErrors() sets.Set[string] {
return j.ignorePreflightErrors return j.ignorePreflightErrors
} }

View File

@ -236,14 +236,14 @@ func TestNewJoinData(t *testing.T) {
options.IgnorePreflightErrors: "a,b", options.IgnorePreflightErrors: "a,b",
options.FileDiscovery: "https://foo", //required only to pass discovery validation options.FileDiscovery: "https://foo", //required only to pass discovery validation
}, },
validate: expectedJoinIgnorePreflightErrors(sets.NewString("a", "b")), validate: expectedJoinIgnorePreflightErrors(sets.New("a", "b")),
}, },
{ {
name: "pre-flights errors from JoinConfiguration only", name: "pre-flights errors from JoinConfiguration only",
flags: map[string]string{ flags: map[string]string{
options.CfgPath: configFilePath, options.CfgPath: configFilePath,
}, },
validate: expectedJoinIgnorePreflightErrors(sets.NewString("c", "d")), validate: expectedJoinIgnorePreflightErrors(sets.New("c", "d")),
}, },
{ {
name: "pre-flights errors from both CLI args and JoinConfiguration", name: "pre-flights errors from both CLI args and JoinConfiguration",
@ -251,7 +251,7 @@ func TestNewJoinData(t *testing.T) {
options.CfgPath: configFilePath, options.CfgPath: configFilePath,
options.IgnorePreflightErrors: "a,b", options.IgnorePreflightErrors: "a,b",
}, },
validate: expectedJoinIgnorePreflightErrors(sets.NewString("a", "b", "c", "d")), validate: expectedJoinIgnorePreflightErrors(sets.New("a", "b", "c", "d")),
}, },
{ {
name: "warn if --control-plane flag is not set", name: "warn if --control-plane flag is not set",
@ -315,13 +315,13 @@ func TestNewJoinData(t *testing.T) {
} }
} }
func expectedJoinIgnorePreflightErrors(expected sets.String) func(t *testing.T, data *joinData) { func expectedJoinIgnorePreflightErrors(expected sets.Set[string]) func(t *testing.T, data *joinData) {
return func(t *testing.T, data *joinData) { return func(t *testing.T, data *joinData) {
if !expected.Equal(data.ignorePreflightErrors) { if !expected.Equal(data.ignorePreflightErrors) {
t.Errorf("Invalid ignore preflight errors. Expected: %v. Actual: %v", expected.List(), data.ignorePreflightErrors.List()) t.Errorf("Invalid ignore preflight errors. Expected: %v. Actual: %v", sets.List(expected), sets.List(data.ignorePreflightErrors))
} }
if !expected.HasAll(data.cfg.NodeRegistration.IgnorePreflightErrors...) { if !expected.HasAll(data.cfg.NodeRegistration.IgnorePreflightErrors...) {
t.Errorf("Invalid ignore preflight errors in JoinConfiguration. Expected: %v. Actual: %v", expected.List(), data.cfg.NodeRegistration.IgnorePreflightErrors) t.Errorf("Invalid ignore preflight errors in JoinConfiguration. Expected: %v. Actual: %v", sets.List(expected), data.cfg.NodeRegistration.IgnorePreflightErrors)
} }
} }
} }

View File

@ -35,7 +35,7 @@ type InitData interface {
Cfg() *kubeadmapi.InitConfiguration Cfg() *kubeadmapi.InitConfiguration
DryRun() bool DryRun() bool
SkipTokenPrint() bool SkipTokenPrint() bool
IgnorePreflightErrors() sets.String IgnorePreflightErrors() sets.Set[string]
CertificateWriteDir() string CertificateWriteDir() string
CertificateDir() string CertificateDir() string
KubeConfigDir() string KubeConfigDir() string

View File

@ -31,22 +31,22 @@ type testInitData struct{}
// testInitData must satisfy InitData. // testInitData must satisfy InitData.
var _ InitData = &testInitData{} var _ InitData = &testInitData{}
func (t *testInitData) UploadCerts() bool { return false } func (t *testInitData) UploadCerts() bool { return false }
func (t *testInitData) CertificateKey() string { return "" } func (t *testInitData) CertificateKey() string { return "" }
func (t *testInitData) SetCertificateKey(key string) {} func (t *testInitData) SetCertificateKey(key string) {}
func (t *testInitData) SkipCertificateKeyPrint() bool { return false } func (t *testInitData) SkipCertificateKeyPrint() bool { return false }
func (t *testInitData) Cfg() *kubeadmapi.InitConfiguration { return nil } func (t *testInitData) Cfg() *kubeadmapi.InitConfiguration { return nil }
func (t *testInitData) DryRun() bool { return false } func (t *testInitData) DryRun() bool { return false }
func (t *testInitData) SkipTokenPrint() bool { return false } func (t *testInitData) SkipTokenPrint() bool { return false }
func (t *testInitData) IgnorePreflightErrors() sets.String { return nil } func (t *testInitData) IgnorePreflightErrors() sets.Set[string] { return nil }
func (t *testInitData) CertificateWriteDir() string { return "" } func (t *testInitData) CertificateWriteDir() string { return "" }
func (t *testInitData) CertificateDir() string { return "" } func (t *testInitData) CertificateDir() string { return "" }
func (t *testInitData) KubeConfigDir() string { return "" } func (t *testInitData) KubeConfigDir() string { return "" }
func (t *testInitData) KubeConfigPath() string { return "" } func (t *testInitData) KubeConfigPath() string { return "" }
func (t *testInitData) ManifestDir() string { return "" } func (t *testInitData) ManifestDir() string { return "" }
func (t *testInitData) KubeletDir() string { return "" } func (t *testInitData) KubeletDir() string { return "" }
func (t *testInitData) ExternalCA() bool { return false } func (t *testInitData) ExternalCA() bool { return false }
func (t *testInitData) OutputWriter() io.Writer { return nil } func (t *testInitData) OutputWriter() io.Writer { return nil }
func (t *testInitData) Client() (clientset.Interface, error) { return nil, nil } func (t *testInitData) Client() (clientset.Interface, error) { return nil, nil }
func (t *testInitData) Tokens() []string { return nil } func (t *testInitData) Tokens() []string { return nil }
func (t *testInitData) PatchesDir() string { return "" } func (t *testInitData) PatchesDir() string { return "" }

View File

@ -34,7 +34,7 @@ type JoinData interface {
TLSBootstrapCfg() (*clientcmdapi.Config, error) TLSBootstrapCfg() (*clientcmdapi.Config, error)
InitCfg() (*kubeadmapi.InitConfiguration, error) InitCfg() (*kubeadmapi.InitConfiguration, error)
Client() (clientset.Interface, error) Client() (clientset.Interface, error)
IgnorePreflightErrors() sets.String IgnorePreflightErrors() sets.Set[string]
OutputWriter() io.Writer OutputWriter() io.Writer
PatchesDir() string PatchesDir() string
DryRun() bool DryRun() bool

View File

@ -37,7 +37,7 @@ func (j *testJoinData) Cfg() *kubeadmapi.JoinConfiguration { return
func (j *testJoinData) TLSBootstrapCfg() (*clientcmdapi.Config, error) { return nil, nil } func (j *testJoinData) TLSBootstrapCfg() (*clientcmdapi.Config, error) { return nil, nil }
func (j *testJoinData) InitCfg() (*kubeadmapi.InitConfiguration, error) { return nil, nil } func (j *testJoinData) InitCfg() (*kubeadmapi.InitConfiguration, error) { return nil, nil }
func (j *testJoinData) Client() (clientset.Interface, error) { return nil, nil } func (j *testJoinData) Client() (clientset.Interface, error) { return nil, nil }
func (j *testJoinData) IgnorePreflightErrors() sets.String { return nil } func (j *testJoinData) IgnorePreflightErrors() sets.Set[string] { return nil }
func (j *testJoinData) OutputWriter() io.Writer { return nil } func (j *testJoinData) OutputWriter() io.Writer { return nil }
func (j *testJoinData) PatchesDir() string { return "" } func (j *testJoinData) PatchesDir() string { return "" }
func (t *testJoinData) DryRun() bool { return false } func (t *testJoinData) DryRun() bool { return false }

View File

@ -30,7 +30,7 @@ import (
type resetData interface { type resetData interface {
ForceReset() bool ForceReset() bool
InputReader() io.Reader InputReader() io.Reader
IgnorePreflightErrors() sets.String IgnorePreflightErrors() sets.Set[string]
Cfg() *kubeadmapi.InitConfiguration Cfg() *kubeadmapi.InitConfiguration
DryRun() bool DryRun() bool
Client() clientset.Interface Client() clientset.Interface

View File

@ -31,12 +31,12 @@ type testData struct{}
// testData must satisfy resetData. // testData must satisfy resetData.
var _ resetData = &testData{} var _ resetData = &testData{}
func (t *testData) ForceReset() bool { return false } func (t *testData) ForceReset() bool { return false }
func (t *testData) InputReader() io.Reader { return nil } func (t *testData) InputReader() io.Reader { return nil }
func (t *testData) IgnorePreflightErrors() sets.String { return nil } func (t *testData) IgnorePreflightErrors() sets.Set[string] { return nil }
func (t *testData) Cfg() *kubeadmapi.InitConfiguration { return nil } func (t *testData) Cfg() *kubeadmapi.InitConfiguration { return nil }
func (t *testData) DryRun() bool { return false } func (t *testData) DryRun() bool { return false }
func (t *testData) Client() clientset.Interface { return nil } func (t *testData) Client() clientset.Interface { return nil }
func (t *testData) CertificatesDir() string { return "" } func (t *testData) CertificatesDir() string { return "" }
func (t *testData) CRISocketPath() string { return "" } func (t *testData) CRISocketPath() string { return "" }
func (t *testData) CleanupTmpDir() bool { return false } func (t *testData) CleanupTmpDir() bool { return false }

View File

@ -34,7 +34,7 @@ type Data interface {
Cfg() *kubeadmapi.InitConfiguration Cfg() *kubeadmapi.InitConfiguration
IsControlPlaneNode() bool IsControlPlaneNode() bool
Client() clientset.Interface Client() clientset.Interface
IgnorePreflightErrors() sets.String IgnorePreflightErrors() sets.Set[string]
PatchesDir() string PatchesDir() string
KubeConfigPath() string KubeConfigPath() string
OutputWriter() io.Writer OutputWriter() io.Writer

View File

@ -31,13 +31,13 @@ type testData struct{}
// testData must satisfy Data. // testData must satisfy Data.
var _ Data = &testData{} var _ Data = &testData{}
func (t *testData) EtcdUpgrade() bool { return false } func (t *testData) EtcdUpgrade() bool { return false }
func (t *testData) RenewCerts() bool { return false } func (t *testData) RenewCerts() bool { return false }
func (t *testData) DryRun() bool { return false } func (t *testData) DryRun() bool { return false }
func (t *testData) Cfg() *kubeadmapi.InitConfiguration { return nil } func (t *testData) Cfg() *kubeadmapi.InitConfiguration { return nil }
func (t *testData) IsControlPlaneNode() bool { return false } func (t *testData) IsControlPlaneNode() bool { return false }
func (t *testData) Client() clientset.Interface { return nil } func (t *testData) Client() clientset.Interface { return nil }
func (t *testData) IgnorePreflightErrors() sets.String { return nil } func (t *testData) IgnorePreflightErrors() sets.Set[string] { return nil }
func (t *testData) PatchesDir() string { return "" } func (t *testData) PatchesDir() string { return "" }
func (t *testData) KubeConfigPath() string { return "" } func (t *testData) KubeConfigPath() string { return "" }
func (t *testData) OutputWriter() io.Writer { return nil } func (t *testData) OutputWriter() io.Writer { return nil }

View File

@ -76,7 +76,7 @@ type resetData struct {
client clientset.Interface client clientset.Interface
criSocketPath string criSocketPath string
forceReset bool forceReset bool
ignorePreflightErrors sets.String ignorePreflightErrors sets.Set[string]
inputReader io.Reader inputReader io.Reader
outputWriter io.Writer outputWriter io.Writer
cfg *kubeadmapi.InitConfiguration cfg *kubeadmapi.InitConfiguration
@ -116,7 +116,7 @@ func newResetData(cmd *cobra.Command, options *resetOptions, in io.Reader, out i
} }
if cfg != nil { if cfg != nil {
// Also set the union of pre-flight errors to InitConfiguration, to provide a consistent view of the runtime configuration: // Also set the union of pre-flight errors to InitConfiguration, to provide a consistent view of the runtime configuration:
cfg.NodeRegistration.IgnorePreflightErrors = ignorePreflightErrorsSet.List() cfg.NodeRegistration.IgnorePreflightErrors = sets.List(ignorePreflightErrorsSet)
} }
var criSocketPath string var criSocketPath string
@ -249,7 +249,7 @@ func (r *resetData) InputReader() io.Reader {
} }
// IgnorePreflightErrors returns the list of preflight errors to ignore. // IgnorePreflightErrors returns the list of preflight errors to ignore.
func (r *resetData) IgnorePreflightErrors() sets.String { func (r *resetData) IgnorePreflightErrors() sets.Set[string] {
return r.ignorePreflightErrors return r.ignorePreflightErrors
} }

View File

@ -49,7 +49,7 @@ func TestNewResetData(t *testing.T) {
data: &resetData{ data: &resetData{
certificatesDir: "/tmp", certificatesDir: "/tmp",
criSocketPath: "unix:///var/run/crio/crio.sock", criSocketPath: "unix:///var/run/crio/crio.sock",
ignorePreflightErrors: sets.NewString("all"), ignorePreflightErrors: sets.New("all"),
forceReset: true, forceReset: true,
dryRun: true, dryRun: true,
cleanupTmpDir: true, cleanupTmpDir: true,
@ -67,7 +67,7 @@ func TestNewResetData(t *testing.T) {
flags: map[string]string{ flags: map[string]string{
options.IgnorePreflightErrors: "a,b", options.IgnorePreflightErrors: "a,b",
}, },
validate: expectedResetIgnorePreflightErrors(sets.NewString("a", "b")), validate: expectedResetIgnorePreflightErrors(sets.New("a", "b")),
}, },
} }
for _, tc := range testCases { for _, tc := range testCases {
@ -103,13 +103,13 @@ func TestNewResetData(t *testing.T) {
} }
} }
func expectedResetIgnorePreflightErrors(expected sets.String) func(t *testing.T, data *resetData) { func expectedResetIgnorePreflightErrors(expected sets.Set[string]) func(t *testing.T, data *resetData) {
return func(t *testing.T, data *resetData) { return func(t *testing.T, data *resetData) {
if !expected.Equal(data.ignorePreflightErrors) { if !expected.Equal(data.ignorePreflightErrors) {
t.Errorf("Invalid ignore preflight errors. Expected: %v. Actual: %v", expected.List(), data.ignorePreflightErrors.List()) t.Errorf("Invalid ignore preflight errors. Expected: %v. Actual: %v", sets.List(expected), sets.List(data.ignorePreflightErrors))
} }
if data.cfg != nil && !expected.HasAll(data.cfg.NodeRegistration.IgnorePreflightErrors...) { if data.cfg != nil && !expected.HasAll(data.cfg.NodeRegistration.IgnorePreflightErrors...) {
t.Errorf("Invalid ignore preflight errors in InitConfiguration. Expected: %v. Actual: %v", expected.List(), data.cfg.NodeRegistration.IgnorePreflightErrors) t.Errorf("Invalid ignore preflight errors in InitConfiguration. Expected: %v. Actual: %v", sets.List(expected), data.cfg.NodeRegistration.IgnorePreflightErrors)
} }
} }
} }

View File

@ -143,7 +143,7 @@ func runApply(flags *applyFlags, args []string) error {
fmt.Println("[upgrade/prepull] Pulling images required for setting up a Kubernetes cluster") fmt.Println("[upgrade/prepull] Pulling images required for setting up a Kubernetes cluster")
fmt.Println("[upgrade/prepull] This might take a minute or two, depending on the speed of your internet connection") fmt.Println("[upgrade/prepull] This might take a minute or two, depending on the speed of your internet connection")
fmt.Println("[upgrade/prepull] You can also perform this action in beforehand using 'kubeadm config images pull'") fmt.Println("[upgrade/prepull] You can also perform this action in beforehand using 'kubeadm config images pull'")
if err := preflight.RunPullImagesCheck(utilsexec.New(), cfg, sets.NewString(cfg.NodeRegistration.IgnorePreflightErrors...)); err != nil { if err := preflight.RunPullImagesCheck(utilsexec.New(), cfg, sets.New(cfg.NodeRegistration.IgnorePreflightErrors...)); err != nil {
return err return err
} }
} else { } else {
@ -164,7 +164,7 @@ func runApply(flags *applyFlags, args []string) error {
} }
if flags.dryRun { if flags.dryRun {
fmt.Println("[upgrade/successful] Finished dryrunning successfully!") fmt.Println("[upgrade/successful] Finished dryrunning successfully!")
return nil return nil
} }

View File

@ -177,7 +177,7 @@ func enforceRequirements(flags *applyPlanFlags, args []string, dryRun bool, upgr
return nil, nil, nil, err return nil, nil, nil, err
} }
// Also set the union of pre-flight errors to InitConfiguration, to provide a consistent view of the runtime configuration: // Also set the union of pre-flight errors to InitConfiguration, to provide a consistent view of the runtime configuration:
cfg.NodeRegistration.IgnorePreflightErrors = ignorePreflightErrorsSet.List() cfg.NodeRegistration.IgnorePreflightErrors = sets.List(ignorePreflightErrorsSet)
// Ensure the user is root // Ensure the user is root
klog.V(1).Info("running preflight checks") klog.V(1).Info("running preflight checks")
@ -234,7 +234,7 @@ func printConfiguration(clustercfg *kubeadmapi.ClusterConfiguration, w io.Writer
} }
// runPreflightChecks runs the root preflight check // runPreflightChecks runs the root preflight check
func runPreflightChecks(client clientset.Interface, ignorePreflightErrors sets.String, cfg *kubeadmapi.ClusterConfiguration, printer output.Printer) error { func runPreflightChecks(client clientset.Interface, ignorePreflightErrors sets.Set[string], cfg *kubeadmapi.ClusterConfiguration, printer output.Printer) error {
printer.Printf("[preflight] Running pre-flight checks.\n") printer.Printf("[preflight] Running pre-flight checks.\n")
err := preflight.RunRootCheckOnly(ignorePreflightErrors) err := preflight.RunRootCheckOnly(ignorePreflightErrors)
if err != nil { if err != nil {

View File

@ -61,7 +61,7 @@ type nodeData struct {
isControlPlaneNode bool isControlPlaneNode bool
client clientset.Interface client clientset.Interface
patchesDir string patchesDir string
ignorePreflightErrors sets.String ignorePreflightErrors sets.Set[string]
kubeConfigPath string kubeConfigPath string
outputWriter io.Writer outputWriter io.Writer
} }
@ -151,8 +151,7 @@ func newNodeData(cmd *cobra.Command, args []string, options *nodeOptions, out io
return nil, err return nil, err
} }
// Also set the union of pre-flight errors to JoinConfiguration, to provide a consistent view of the runtime configuration: // Also set the union of pre-flight errors to JoinConfiguration, to provide a consistent view of the runtime configuration:
cfg.NodeRegistration.IgnorePreflightErrors = ignorePreflightErrorsSet.List() cfg.NodeRegistration.IgnorePreflightErrors = sets.List(ignorePreflightErrorsSet)
return &nodeData{ return &nodeData{
etcdUpgrade: options.etcdUpgrade, etcdUpgrade: options.etcdUpgrade,
renewCerts: options.renewCerts, renewCerts: options.renewCerts,
@ -203,7 +202,7 @@ func (d *nodeData) PatchesDir() string {
} }
// IgnorePreflightErrors returns the list of preflight errors to ignore. // IgnorePreflightErrors returns the list of preflight errors to ignore.
func (d *nodeData) IgnorePreflightErrors() sets.String { func (d *nodeData) IgnorePreflightErrors() sets.Set[string] {
return d.ignorePreflightErrors return d.ignorePreflightErrors
} }

View File

@ -530,9 +530,9 @@ func errorDiffArguments(t *testing.T, name string, actual, expected []string) {
// removeCommon removes common items from left list // removeCommon removes common items from left list
// makes compairing two cmdline (with lots of arguments) easier // makes compairing two cmdline (with lots of arguments) easier
func removeCommon(left, right []string) []string { func removeCommon(left, right []string) []string {
origSet := sets.NewString(left...) origSet := sets.New(left...)
origSet.Delete(right...) origSet.Delete(right...)
return origSet.List() return sets.List(origSet)
} }
func TestGetControllerManagerCommand(t *testing.T) { func TestGetControllerManagerCommand(t *testing.T) {

View File

@ -175,7 +175,7 @@ func (c *controlPlaneHostPathMounts) addComponentVolumeMount(component string, v
// getEtcdCertVolumes returns the volumes/volumemounts needed for talking to an external etcd cluster // getEtcdCertVolumes returns the volumes/volumemounts needed for talking to an external etcd cluster
func getEtcdCertVolumes(etcdCfg *kubeadmapi.ExternalEtcd, k8sCertificatesDir string) ([]v1.Volume, []v1.VolumeMount) { func getEtcdCertVolumes(etcdCfg *kubeadmapi.ExternalEtcd, k8sCertificatesDir string) ([]v1.Volume, []v1.VolumeMount) {
certPaths := []string{etcdCfg.CAFile, etcdCfg.CertFile, etcdCfg.KeyFile} certPaths := []string{etcdCfg.CAFile, etcdCfg.CertFile, etcdCfg.KeyFile}
certDirs := sets.NewString() certDirs := sets.New[string]()
for _, certPath := range certPaths { for _, certPath := range certPaths {
certDir := filepath.ToSlash(filepath.Dir(certPath)) certDir := filepath.ToSlash(filepath.Dir(certPath))
// Ignore ".", which is the result of passing an empty path. // Ignore ".", which is the result of passing an empty path.
@ -193,7 +193,7 @@ func getEtcdCertVolumes(etcdCfg *kubeadmapi.ExternalEtcd, k8sCertificatesDir str
} }
// Filter out any existing hostpath mounts in the list that contains a subset of the path // Filter out any existing hostpath mounts in the list that contains a subset of the path
alreadyExists := false alreadyExists := false
for _, existingCertDir := range certDirs.List() { for _, existingCertDir := range sets.List(certDirs) {
// If the current directory is a parent of an existing one, remove the already existing one // If the current directory is a parent of an existing one, remove the already existing one
if strings.HasPrefix(existingCertDir, certDir) { if strings.HasPrefix(existingCertDir, certDir) {
certDirs.Delete(existingCertDir) certDirs.Delete(existingCertDir)
@ -211,7 +211,7 @@ func getEtcdCertVolumes(etcdCfg *kubeadmapi.ExternalEtcd, k8sCertificatesDir str
volumes := []v1.Volume{} volumes := []v1.Volume{}
volumeMounts := []v1.VolumeMount{} volumeMounts := []v1.VolumeMount{}
pathType := v1.HostPathDirectoryOrCreate pathType := v1.HostPathDirectoryOrCreate
for i, certDir := range certDirs.List() { for i, certDir := range sets.List(certDirs) {
name := fmt.Sprintf("etcd-certs-%d", i) name := fmt.Sprintf("etcd-certs-%d", i)
volumes = append(volumes, staticpodutil.NewVolume(name, certDir, &pathType)) volumes = append(volumes, staticpodutil.NewVolume(name, certDir, &pathType))
volumeMounts = append(volumeMounts, staticpodutil.NewVolumeMount(name, certDir, true)) volumeMounts = append(volumeMounts, staticpodutil.NewVolumeMount(name, certDir, true))

View File

@ -66,7 +66,7 @@ func (c *healthCheck) Name() string {
// - the API /healthz endpoint is healthy // - the API /healthz endpoint is healthy
// - all control-plane Nodes are Ready // - all control-plane Nodes are Ready
// - (if static pod-hosted) that all required Static Pod manifests exist on disk // - (if static pod-hosted) that all required Static Pod manifests exist on disk
func CheckClusterHealth(client clientset.Interface, cfg *kubeadmapi.ClusterConfiguration, ignoreChecksErrors sets.String) error { func CheckClusterHealth(client clientset.Interface, cfg *kubeadmapi.ClusterConfiguration, ignoreChecksErrors sets.Set[string]) error {
fmt.Println("[upgrade] Running cluster health checks") fmt.Println("[upgrade] Running cluster health checks")
healthChecks := []preflight.Checker{ healthChecks := []preflight.Checker{

View File

@ -54,7 +54,7 @@ func (c CoreDNSCheck) Check() (warnings, errors []error) {
} }
// RunCoreDNSMigrationCheck initializes checks related to CoreDNS migration. // RunCoreDNSMigrationCheck initializes checks related to CoreDNS migration.
func RunCoreDNSMigrationCheck(client clientset.Interface, ignorePreflightErrors sets.String) error { func RunCoreDNSMigrationCheck(client clientset.Interface, ignorePreflightErrors sets.Set[string]) error {
migrationChecks := []preflight.Checker{ migrationChecks := []preflight.Checker{
&CoreDNSCheck{ &CoreDNSCheck{
name: "CoreDNSUnsupportedPlugins", name: "CoreDNSUnsupportedPlugins",

View File

@ -892,7 +892,7 @@ func (MemCheck) Name() string {
// The boolean flag 'isSecondaryControlPlane' controls whether we are running checks in a --join-control-plane scenario. // The boolean flag 'isSecondaryControlPlane' controls whether we are running checks in a --join-control-plane scenario.
// The boolean flag 'downloadCerts' controls whether we should skip checks on certificates because we are downloading them. // The boolean flag 'downloadCerts' controls whether we should skip checks on certificates because we are downloading them.
// If the flag is set to true we should skip checks already executed by RunJoinNodeChecks. // If the flag is set to true we should skip checks already executed by RunJoinNodeChecks.
func RunInitNodeChecks(execer utilsexec.Interface, cfg *kubeadmapi.InitConfiguration, ignorePreflightErrors sets.String, isSecondaryControlPlane bool, downloadCerts bool) error { func RunInitNodeChecks(execer utilsexec.Interface, cfg *kubeadmapi.InitConfiguration, ignorePreflightErrors sets.Set[string], isSecondaryControlPlane bool, downloadCerts bool) error {
if !isSecondaryControlPlane { if !isSecondaryControlPlane {
// First, check if we're root separately from the other preflight checks and fail fast // First, check if we're root separately from the other preflight checks and fail fast
if err := RunRootCheckOnly(ignorePreflightErrors); err != nil { if err := RunRootCheckOnly(ignorePreflightErrors); err != nil {
@ -972,7 +972,7 @@ func RunInitNodeChecks(execer utilsexec.Interface, cfg *kubeadmapi.InitConfigura
} }
// RunJoinNodeChecks executes all individual, applicable to node checks. // RunJoinNodeChecks executes all individual, applicable to node checks.
func RunJoinNodeChecks(execer utilsexec.Interface, cfg *kubeadmapi.JoinConfiguration, ignorePreflightErrors sets.String) error { func RunJoinNodeChecks(execer utilsexec.Interface, cfg *kubeadmapi.JoinConfiguration, ignorePreflightErrors sets.Set[string]) error {
// First, check if we're root separately from the other preflight checks and fail fast // First, check if we're root separately from the other preflight checks and fail fast
if err := RunRootCheckOnly(ignorePreflightErrors); err != nil { if err := RunRootCheckOnly(ignorePreflightErrors); err != nil {
return err return err
@ -1049,7 +1049,7 @@ func addCommonChecks(execer utilsexec.Interface, k8sVersion string, nodeReg *kub
} }
// RunRootCheckOnly initializes checks slice of structs and call RunChecks // RunRootCheckOnly initializes checks slice of structs and call RunChecks
func RunRootCheckOnly(ignorePreflightErrors sets.String) error { func RunRootCheckOnly(ignorePreflightErrors sets.Set[string]) error {
checks := []Checker{ checks := []Checker{
IsPrivilegedUserCheck{}, IsPrivilegedUserCheck{},
} }
@ -1058,7 +1058,7 @@ func RunRootCheckOnly(ignorePreflightErrors sets.String) error {
} }
// RunPullImagesCheck will pull images kubeadm needs if they are not found on the system // RunPullImagesCheck will pull images kubeadm needs if they are not found on the system
func RunPullImagesCheck(execer utilsexec.Interface, cfg *kubeadmapi.InitConfiguration, ignorePreflightErrors sets.String) error { func RunPullImagesCheck(execer utilsexec.Interface, cfg *kubeadmapi.InitConfiguration, ignorePreflightErrors sets.Set[string]) error {
containerRuntime, err := utilruntime.NewContainerRuntime(utilsexec.New(), cfg.NodeRegistration.CRISocket) containerRuntime, err := utilruntime.NewContainerRuntime(utilsexec.New(), cfg.NodeRegistration.CRISocket)
if err != nil { if err != nil {
return &Error{Msg: err.Error()} return &Error{Msg: err.Error()}
@ -1072,7 +1072,7 @@ func RunPullImagesCheck(execer utilsexec.Interface, cfg *kubeadmapi.InitConfigur
// RunChecks runs each check, displays it's warnings/errors, and once all // RunChecks runs each check, displays it's warnings/errors, and once all
// are processed will exit if any errors occurred. // are processed will exit if any errors occurred.
func RunChecks(checks []Checker, ww io.Writer, ignorePreflightErrors sets.String) error { func RunChecks(checks []Checker, ww io.Writer, ignorePreflightErrors sets.Set[string]) error {
var errsBuffer bytes.Buffer var errsBuffer bytes.Buffer
for _, c := range checks { for _, c := range checks {
@ -1099,7 +1099,7 @@ func RunChecks(checks []Checker, ww io.Writer, ignorePreflightErrors sets.String
} }
// setHasItemOrAll is helper function that return true if item is present in the set (case insensitive) or special key 'all' is present // setHasItemOrAll is helper function that return true if item is present in the set (case insensitive) or special key 'all' is present
func setHasItemOrAll(s sets.String, item string) bool { func setHasItemOrAll(s sets.Set[string], item string) bool {
if s.Has("all") || s.Has(strings.ToLower(item)) { if s.Has("all") || s.Has(strings.ToLower(item)) {
return true return true
} }

View File

@ -436,7 +436,7 @@ func TestRunChecks(t *testing.T) {
} }
for _, rt := range tokenTest { for _, rt := range tokenTest {
buf := new(bytes.Buffer) buf := new(bytes.Buffer)
actual := RunChecks(rt.p, buf, sets.NewString()) actual := RunChecks(rt.p, buf, sets.New[string]())
if (actual == nil) != rt.expected { if (actual == nil) != rt.expected {
t.Errorf( t.Errorf(
"failed RunChecks:\n\texpected: %t\n\t actual: %t", "failed RunChecks:\n\texpected: %t\n\t actual: %t",
@ -836,16 +836,16 @@ func TestKubeletVersionCheck(t *testing.T) {
func TestSetHasItemOrAll(t *testing.T) { func TestSetHasItemOrAll(t *testing.T) {
var tests = []struct { var tests = []struct {
ignoreSet sets.String ignoreSet sets.Set[string]
testString string testString string
expectedResult bool expectedResult bool
}{ }{
{sets.NewString(), "foo", false}, {sets.New[string](), "foo", false},
{sets.NewString("all"), "foo", true}, {sets.New("all"), "foo", true},
{sets.NewString("all", "bar"), "foo", true}, {sets.New("all", "bar"), "foo", true},
{sets.NewString("bar"), "foo", false}, {sets.New("bar"), "foo", false},
{sets.NewString("baz", "foo", "bar"), "foo", true}, {sets.New("baz", "foo", "bar"), "foo", true},
{sets.NewString("baz", "bar", "foo"), "Foo", true}, {sets.New("baz", "bar", "foo"), "Foo", true},
} }
for _, rt := range tests { for _, rt := range tests {

View File

@ -500,7 +500,7 @@ func getAltNames(cfg *kubeadmapi.InitConfiguration, certName string) (*certutil.
// valid IP address strings are parsed and added to altNames.IPs as net.IP's // valid IP address strings are parsed and added to altNames.IPs as net.IP's
// RFC-1123 compliant DNS strings are added to altNames.DNSNames as strings // RFC-1123 compliant DNS strings are added to altNames.DNSNames as strings
// RFC-1123 compliant wildcard DNS strings are added to altNames.DNSNames as strings // RFC-1123 compliant wildcard DNS strings are added to altNames.DNSNames as strings
// certNames is used to print user facing warnings and should be the name of the cert the altNames will be used for // certNames is used to print user facing warnings and should be the name of the cert the altNames will be used for
func appendSANsToAltNames(altNames *certutil.AltNames, SANs []string, certName string) { func appendSANsToAltNames(altNames *certutil.AltNames, SANs []string, certName string) {
for _, altname := range SANs { for _, altname := range SANs {
if ip := netutils.ParseIPSloppy(altname); ip != nil { if ip := netutils.ParseIPSloppy(altname); ip != nil {
@ -680,7 +680,7 @@ func RemoveDuplicateAltNames(altNames *certutil.AltNames) {
} }
if altNames.DNSNames != nil { if altNames.DNSNames != nil {
altNames.DNSNames = sets.NewString(altNames.DNSNames...).List() altNames.DNSNames = sets.List(sets.New(altNames.DNSNames...))
} }
ipsKeys := make(map[string]struct{}) ipsKeys := make(map[string]struct{})