From 22f0f2e210f77962299145e15820ee6cb2747f72 Mon Sep 17 00:00:00 2001 From: SataQiu Date: Sat, 15 Jul 2023 11:14:28 +0800 Subject: [PATCH] kubeadm: add 'kubeadm config print reset-defaults' command for ResetConfiguration --- cmd/kubeadm/app/cmd/config.go | 44 +++++++++++++++++++++--------- cmd/kubeadm/app/cmd/config_test.go | 26 ++++++++++++++++++ 2 files changed, 57 insertions(+), 13 deletions(-) diff --git a/cmd/kubeadm/app/cmd/config.go b/cmd/kubeadm/app/cmd/config.go index f10901a684d..6ad8805a9a7 100644 --- a/cmd/kubeadm/app/cmd/config.go +++ b/cmd/kubeadm/app/cmd/config.go @@ -36,7 +36,8 @@ import ( kubeadmapi "k8s.io/kubernetes/cmd/kubeadm/app/apis/kubeadm" kubeadmscheme "k8s.io/kubernetes/cmd/kubeadm/app/apis/kubeadm/scheme" - kubeadmapiv1 "k8s.io/kubernetes/cmd/kubeadm/app/apis/kubeadm/v1beta3" + kubeadmapiv1old "k8s.io/kubernetes/cmd/kubeadm/app/apis/kubeadm/v1beta3" + kubeadmapiv1 "k8s.io/kubernetes/cmd/kubeadm/app/apis/kubeadm/v1beta4" outputapischeme "k8s.io/kubernetes/cmd/kubeadm/app/apis/output/scheme" outputapiv1alpha2 "k8s.io/kubernetes/cmd/kubeadm/app/apis/output/v1alpha2" "k8s.io/kubernetes/cmd/kubeadm/app/cmd/options" @@ -93,6 +94,7 @@ func newCmdConfigPrint(out io.Writer) *cobra.Command { } cmd.AddCommand(newCmdConfigPrintInitDefaults(out)) cmd.AddCommand(newCmdConfigPrintJoinDefaults(out)) + cmd.AddCommand(newCmdConfigPrintResetDefaults(out)) return cmd } @@ -106,6 +108,11 @@ func newCmdConfigPrintJoinDefaults(out io.Writer) *cobra.Command { return newCmdConfigPrintActionDefaults(out, "join", getDefaultNodeConfigBytes) } +// newCmdConfigPrintResetDefaults returns cobra.Command for "kubeadm config print reset-defaults" command +func newCmdConfigPrintResetDefaults(out io.Writer) *cobra.Command { + return newCmdConfigPrintActionDefaults(out, "reset", getDefaultResetConfigBytes) +} + func newCmdConfigPrintActionDefaults(out io.Writer, action string, configBytesProc func() ([]byte, error)) *cobra.Command { kinds := []string{} cmd := &cobra.Command{ @@ -199,19 +206,19 @@ func getDefaultInitConfigBytes() ([]byte, error) { return []byte{}, err } - return configutil.MarshalKubeadmConfigObject(internalcfg, kubeadmapiv1.SchemeGroupVersion) + return configutil.MarshalKubeadmConfigObject(internalcfg, kubeadmapiv1old.SchemeGroupVersion) } func getDefaultNodeConfigBytes() ([]byte, error) { - internalcfg, err := configutil.DefaultedJoinConfiguration(&kubeadmapiv1.JoinConfiguration{ - Discovery: kubeadmapiv1.Discovery{ - BootstrapToken: &kubeadmapiv1.BootstrapTokenDiscovery{ + internalcfg, err := configutil.DefaultedJoinConfiguration(&kubeadmapiv1old.JoinConfiguration{ + Discovery: kubeadmapiv1old.Discovery{ + BootstrapToken: &kubeadmapiv1old.BootstrapTokenDiscovery{ Token: configutil.PlaceholderToken.Token.String(), APIServerEndpoint: "kube-apiserver:6443", UnsafeSkipCAVerification: true, // TODO: UnsafeSkipCAVerification: true needs to be set for validation to pass, but shouldn't be recommended as the default }, }, - NodeRegistration: kubeadmapiv1.NodeRegistrationOptions{ + NodeRegistration: kubeadmapiv1old.NodeRegistrationOptions{ CRISocket: constants.DefaultCRISocket, // avoid CRI detection }, }) @@ -219,6 +226,17 @@ func getDefaultNodeConfigBytes() ([]byte, error) { return []byte{}, err } + return configutil.MarshalKubeadmConfigObject(internalcfg, kubeadmapiv1old.SchemeGroupVersion) +} + +func getDefaultResetConfigBytes() ([]byte, error) { + internalcfg, err := configutil.DefaultedResetConfiguration(&kubeadmapiv1.ResetConfiguration{ + CRISocket: constants.DefaultCRISocket, // avoid CRI detection + }) + if err != nil { + return []byte{}, err + } + return configutil.MarshalKubeadmConfigObject(internalcfg, kubeadmapiv1.SchemeGroupVersion) } @@ -243,7 +261,7 @@ func newCmdConfigMigrate(out io.Writer) *cobra.Command { In other words, the output of this command is what kubeadm actually would read internally if you submitted this file to "kubeadm init" - `), kubeadmapiv1.SchemeGroupVersion, kubeadmapiv1.SchemeGroupVersion), + `), kubeadmapiv1old.SchemeGroupVersion, kubeadmapiv1old.SchemeGroupVersion), RunE: func(cmd *cobra.Command, args []string) error { if len(oldCfgPath) == 0 { return errors.New("the --old-config flag is mandatory") @@ -293,7 +311,7 @@ func newCmdConfigValidate(out io.Writer) *cobra.Command { In this version of kubeadm, the following API versions are supported: - %s - `), kubeadmapiv1.SchemeGroupVersion), + `), kubeadmapiv1old.SchemeGroupVersion), RunE: func(cmd *cobra.Command, args []string) error { if len(cfgPath) == 0 { return errors.Errorf("the --%s flag is mandatory", options.CfgPath) @@ -332,9 +350,9 @@ func newCmdConfigImages(out io.Writer) *cobra.Command { // newCmdConfigImagesPull returns the `kubeadm config images pull` command func newCmdConfigImagesPull() *cobra.Command { - externalClusterCfg := &kubeadmapiv1.ClusterConfiguration{} + externalClusterCfg := &kubeadmapiv1old.ClusterConfiguration{} kubeadmscheme.Scheme.Default(externalClusterCfg) - externalInitCfg := &kubeadmapiv1.InitConfiguration{} + externalInitCfg := &kubeadmapiv1old.InitConfiguration{} kubeadmscheme.Scheme.Default(externalInitCfg) var cfgPath, featureGatesString string var err error @@ -379,7 +397,7 @@ func PullControlPlaneImages(runtime utilruntime.ContainerRuntime, cfg *kubeadmap // newCmdConfigImagesList returns the "kubeadm config images list" command func newCmdConfigImagesList(out io.Writer, mockK8sVersion *string) *cobra.Command { - externalcfg := &kubeadmapiv1.ClusterConfiguration{} + externalcfg := &kubeadmapiv1old.ClusterConfiguration{} kubeadmscheme.Scheme.Default(externalcfg) var cfgPath, featureGatesString string var err error @@ -421,7 +439,7 @@ func newCmdConfigImagesList(out io.Writer, mockK8sVersion *string) *cobra.Comman } // NewImagesList returns the underlying struct for the "kubeadm config images list" command -func NewImagesList(cfgPath string, cfg *kubeadmapiv1.ClusterConfiguration) (*ImagesList, error) { +func NewImagesList(cfgPath string, cfg *kubeadmapiv1old.ClusterConfiguration) (*ImagesList, error) { initcfg, err := configutil.LoadOrDefaultInitConfiguration(cfgPath, cmdutil.DefaultInitConfiguration(), cfg) if err != nil { return nil, errors.Wrap(err, "could not convert cfg to an internal cfg") @@ -476,7 +494,7 @@ func (i *ImagesList) Run(out io.Writer, printer output.Printer) error { } // AddImagesCommonConfigFlags adds the flags that configure kubeadm (and affect the images kubeadm will use) -func AddImagesCommonConfigFlags(flagSet *flag.FlagSet, cfg *kubeadmapiv1.ClusterConfiguration, cfgPath *string, featureGatesString *string) { +func AddImagesCommonConfigFlags(flagSet *flag.FlagSet, cfg *kubeadmapiv1old.ClusterConfiguration, cfgPath *string, featureGatesString *string) { options.AddKubernetesVersionFlag(flagSet, &cfg.KubernetesVersion) options.AddFeatureGatesStringFlag(flagSet, featureGatesString) options.AddImageMetaFlags(flagSet, &cfg.ImageRepository) diff --git a/cmd/kubeadm/app/cmd/config_test.go b/cmd/kubeadm/app/cmd/config_test.go index 49dbc7034b8..82ce401d197 100644 --- a/cmd/kubeadm/app/cmd/config_test.go +++ b/cmd/kubeadm/app/cmd/config_test.go @@ -451,6 +451,32 @@ func TestNewCmdConfigPrintActionDefaults(t *testing.T) { componentConfigs: "KubeProxyConfiguration,KubeletConfiguration", cmdProc: newCmdConfigPrintJoinDefaults, }, + { + name: "ResetConfiguration: No component configs", + expectedKinds: []string{ + constants.ResetConfigurationKind, + }, + cmdProc: newCmdConfigPrintResetDefaults, + }, + { + name: "JoinConfiguration: KubeProxyConfiguration", + expectedKinds: []string{ + "KubeProxyConfiguration", + constants.ResetConfigurationKind, + }, + componentConfigs: "KubeProxyConfiguration", + cmdProc: newCmdConfigPrintResetDefaults, + }, + { + name: "JoinConfiguration: KubeProxyConfiguration and KubeletConfiguration", + expectedKinds: []string{ + "KubeProxyConfiguration", + "KubeletConfiguration", + constants.ResetConfigurationKind, + }, + componentConfigs: "KubeProxyConfiguration,KubeletConfiguration", + cmdProc: newCmdConfigPrintResetDefaults, + }, } for _, test := range tests {