diff --git a/cmd/kubeadm/app/cmd/BUILD b/cmd/kubeadm/app/cmd/BUILD index 2f2b2dd7038..e542aa60f27 100644 --- a/cmd/kubeadm/app/cmd/BUILD +++ b/cmd/kubeadm/app/cmd/BUILD @@ -36,8 +36,6 @@ go_library( "//cmd/kubeadm/app/discovery:go_default_library", "//cmd/kubeadm/app/features:go_default_library", "//cmd/kubeadm/app/images:go_default_library", - "//cmd/kubeadm/app/phases/addons/dns:go_default_library", - "//cmd/kubeadm/app/phases/addons/proxy:go_default_library", "//cmd/kubeadm/app/phases/bootstraptoken/node:go_default_library", "//cmd/kubeadm/app/phases/certs:go_default_library", "//cmd/kubeadm/app/phases/controlplane:go_default_library", diff --git a/cmd/kubeadm/app/cmd/alpha/alpha.go b/cmd/kubeadm/app/cmd/alpha/alpha.go index 115e3af04f5..b5dd4334214 100644 --- a/cmd/kubeadm/app/cmd/alpha/alpha.go +++ b/cmd/kubeadm/app/cmd/alpha/alpha.go @@ -20,7 +20,6 @@ import ( "io" "github.com/spf13/cobra" - "k8s.io/kubernetes/cmd/kubeadm/app/cmd/phases" cmdutil "k8s.io/kubernetes/cmd/kubeadm/app/cmd/util" ) @@ -52,7 +51,5 @@ func newCmdPhase(out io.Writer) *cobra.Command { Long: cmdutil.MacroCommandLongDescription, } - cmd.AddCommand(phases.NewCmdAddon()) - return cmd } diff --git a/cmd/kubeadm/app/cmd/init.go b/cmd/kubeadm/app/cmd/init.go index f61528571ff..48e800aced7 100644 --- a/cmd/kubeadm/app/cmd/init.go +++ b/cmd/kubeadm/app/cmd/init.go @@ -31,7 +31,6 @@ import ( flag "github.com/spf13/pflag" "k8s.io/apimachinery/pkg/util/sets" clientset "k8s.io/client-go/kubernetes" - "k8s.io/klog" kubeadmapi "k8s.io/kubernetes/cmd/kubeadm/app/apis/kubeadm" kubeadmscheme "k8s.io/kubernetes/cmd/kubeadm/app/apis/kubeadm/scheme" kubeadmapiv1beta1 "k8s.io/kubernetes/cmd/kubeadm/app/apis/kubeadm/v1beta1" @@ -42,12 +41,8 @@ import ( cmdutil "k8s.io/kubernetes/cmd/kubeadm/app/cmd/util" kubeadmconstants "k8s.io/kubernetes/cmd/kubeadm/app/constants" "k8s.io/kubernetes/cmd/kubeadm/app/features" - dnsaddonphase "k8s.io/kubernetes/cmd/kubeadm/app/phases/addons/dns" - proxyaddonphase "k8s.io/kubernetes/cmd/kubeadm/app/phases/addons/proxy" certsphase "k8s.io/kubernetes/cmd/kubeadm/app/phases/certs" kubeconfigphase "k8s.io/kubernetes/cmd/kubeadm/app/phases/kubeconfig" - kubeletphase "k8s.io/kubernetes/cmd/kubeadm/app/phases/kubelet" - uploadconfigphase "k8s.io/kubernetes/cmd/kubeadm/app/phases/uploadconfig" kubeadmutil "k8s.io/kubernetes/cmd/kubeadm/app/util" "k8s.io/kubernetes/cmd/kubeadm/app/util/apiclient" configutil "k8s.io/kubernetes/cmd/kubeadm/app/util/config" @@ -146,11 +141,6 @@ func NewCmdInit(out io.Writer) *cobra.Command { err = initRunner.Run() kubeadmutil.CheckErr(err) - // TODO: the code in runInit should be progressively converted in phases; each phase will be exposed - // via the subcommands automatically created by initRunner.BindToCommand - err = runInit(&data, out) - kubeadmutil.CheckErr(err) - err = showJoinCommand(&data, out) kubeadmutil.CheckErr(err) }, @@ -166,6 +156,7 @@ func NewCmdInit(out io.Writer) *cobra.Command { // defines additional flag that are not used by the init command but that could be eventually used // by the sub-commands automatically generated for phases initRunner.SetPhaseSubcommandsAdditionalFlags(func(flags *flag.FlagSet) { + options.AddImageMetaFlags(flags, &initOptions.externalcfg.ImageRepository) options.AddKubeConfigFlag(flags, &initOptions.kubeconfigPath) options.AddKubeConfigDirFlag(flags, &initOptions.kubeconfigDir) options.AddControlPlanExtraArgsFlags(flags, &initOptions.externalcfg.APIServer.ExtraArgs, &initOptions.externalcfg.ControllerManager.ExtraArgs, &initOptions.externalcfg.Scheduler.ExtraArgs) @@ -182,6 +173,7 @@ func NewCmdInit(out io.Writer) *cobra.Command { initRunner.AppendPhase(phases.NewUploadConfigPhase()) initRunner.AppendPhase(phases.NewMarkControlPlanePhase()) initRunner.AppendPhase(phases.NewBootstrapTokenPhase()) + initRunner.AppendPhase(phases.NewAddonPhase()) // TODO: add other phases to the runner. // sets the data builder function, that will be used by the runner @@ -460,57 +452,6 @@ func (d initData) Tokens() []string { return tokens } -// runInit executes master node provisioning -func runInit(i *initData, out io.Writer) error { - // Get directories to write files to; can be faked if we're dry-running - klog.V(1).Infof("[init] Getting certificates directory from configuration") - certsDirToWriteTo, _, _, _, err := getDirectoriesToUse(i.dryRun, i.dryRunDir, i.cfg.CertificatesDir) - if err != nil { - return errors.Wrap(err, "error getting directories to use") - } - - // certsDirToWriteTo is gonna equal cfg.CertificatesDir in the normal case, but gonna be a temp directory if dryrunning - i.cfg.CertificatesDir = certsDirToWriteTo - - // TODO: client and waiter are temporary until the rest of the phases that use them - // are removed from this function. - client, err := i.Client() - if err != nil { - return errors.Wrap(err, "failed to create client") - } - - // Upload currently used configuration to the cluster - // Note: This is done right in the beginning of cluster initialization; as we might want to make other phases - // depend on centralized information from this source in the future - klog.V(1).Infof("[init] uploading currently used configuration to the cluster") - if err := uploadconfigphase.UploadConfiguration(i.cfg, client); err != nil { - return errors.Wrap(err, "error uploading configuration") - } - - klog.V(1).Infof("[init] creating kubelet configuration configmap") - if err := kubeletphase.CreateConfigMap(i.cfg, client); err != nil { - return errors.Wrap(err, "error creating kubelet configuration ConfigMap") - } - - klog.V(1).Infof("[init] ensuring DNS addon") - if err := dnsaddonphase.EnsureDNSAddon(i.cfg, client); err != nil { - return errors.Wrap(err, "error ensuring dns addon") - } - - klog.V(1).Infof("[init] ensuring proxy addon") - if err := proxyaddonphase.EnsureProxyAddon(i.cfg, client); err != nil { - return errors.Wrap(err, "error ensuring proxy addon") - } - - // Exit earlier if we're dryrunning - if i.dryRun { - fmt.Println("[dryrun] finished dry-running successfully. Above are the resources that would be created") - return nil - } - - return nil -} - func printJoinCommand(out io.Writer, adminKubeConfigPath, token string, skipTokenPrint bool) error { joinCommand, err := cmdutil.GetJoinCommand(adminKubeConfigPath, token, skipTokenPrint) if err != nil { diff --git a/cmd/kubeadm/app/cmd/options/constant.go b/cmd/kubeadm/app/cmd/options/constant.go index 5bff8860e97..575016f1c60 100644 --- a/cmd/kubeadm/app/cmd/options/constant.go +++ b/cmd/kubeadm/app/cmd/options/constant.go @@ -46,6 +46,9 @@ const FeatureGatesString = "feature-gates" // IgnorePreflightErrors sets the path a list of checks whose errors will be shown as warnings. Example: 'IsPrivilegedUser,Swap'. Value 'all' ignores errors from all checks. const IgnorePreflightErrors = "ignore-preflight-errors" +// ImageRepository sets the container registry to pull control plane images from. +const ImageRepository = "image-repository" + // KubeconfigDir flag sets the path where to save the kubeconfig file. const KubeconfigDir = "kubeconfig-dir" diff --git a/cmd/kubeadm/app/cmd/options/generic.go b/cmd/kubeadm/app/cmd/options/generic.go index 58e748a44e3..3a08838b099 100644 --- a/cmd/kubeadm/app/cmd/options/generic.go +++ b/cmd/kubeadm/app/cmd/options/generic.go @@ -50,3 +50,8 @@ func AddControlPlanExtraArgsFlags(fs *pflag.FlagSet, apiServerExtraArgs, control fs.Var(utilflag.NewMapStringString(controllerManagerExtraArgs), ControllerManagerExtraArgs, "A set of extra flags to pass to the Controller Manager or override default ones in form of =") fs.Var(utilflag.NewMapStringString(schedulerExtraArgs), SchedulerExtraArgs, "A set of extra flags to pass to the Scheduler or override default ones in form of =") } + +// AddImageMetaFlags adds the --image-repository flag to the given flagset +func AddImageMetaFlags(fs *pflag.FlagSet, imageRepository *string) { + fs.StringVar(imageRepository, ImageRepository, *imageRepository, "Choose a container registry to pull control plane images from") +} diff --git a/cmd/kubeadm/app/cmd/phases/BUILD b/cmd/kubeadm/app/cmd/phases/BUILD index 96a6c947ddb..63bddeb5d95 100644 --- a/cmd/kubeadm/app/cmd/phases/BUILD +++ b/cmd/kubeadm/app/cmd/phases/BUILD @@ -27,7 +27,6 @@ go_library( "//cmd/kubeadm/app/cmd/phases/workflow:go_default_library", "//cmd/kubeadm/app/cmd/util:go_default_library", "//cmd/kubeadm/app/constants:go_default_library", - "//cmd/kubeadm/app/features:go_default_library", "//cmd/kubeadm/app/phases/addons/dns:go_default_library", "//cmd/kubeadm/app/phases/addons/proxy:go_default_library", "//cmd/kubeadm/app/phases/bootstraptoken/clusterinfo:go_default_library", @@ -45,7 +44,6 @@ go_library( "//cmd/kubeadm/app/util/apiclient:go_default_library", "//cmd/kubeadm/app/util/config:go_default_library", "//cmd/kubeadm/app/util/dryrun:go_default_library", - "//cmd/kubeadm/app/util/kubeconfig:go_default_library", "//pkg/util/normalizer:go_default_library", "//pkg/version:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", @@ -61,14 +59,10 @@ go_library( go_test( name = "go_default_test", - srcs = [ - "addons_test.go", - "util_test.go", - ], + srcs = ["util_test.go"], embed = [":go_default_library"], deps = [ "//cmd/kubeadm/app/apis/kubeadm/v1beta1:go_default_library", - "//cmd/kubeadm/test/cmd:go_default_library", "//pkg/version:go_default_library", ], ) diff --git a/cmd/kubeadm/app/cmd/phases/addons.go b/cmd/kubeadm/app/cmd/phases/addons.go index 730e7aa2374..be6057677c3 100644 --- a/cmd/kubeadm/app/cmd/phases/addons.go +++ b/cmd/kubeadm/app/cmd/phases/addons.go @@ -1,5 +1,5 @@ /* -Copyright 2017 The Kubernetes Authors. +Copyright 2018 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. @@ -17,186 +17,109 @@ limitations under the License. package phases import ( - "strings" - - "github.com/spf13/cobra" - "k8s.io/klog" + "github.com/pkg/errors" clientset "k8s.io/client-go/kubernetes" kubeadmapi "k8s.io/kubernetes/cmd/kubeadm/app/apis/kubeadm" - kubeadmscheme "k8s.io/kubernetes/cmd/kubeadm/app/apis/kubeadm/scheme" - kubeadmapiv1beta1 "k8s.io/kubernetes/cmd/kubeadm/app/apis/kubeadm/v1beta1" - "k8s.io/kubernetes/cmd/kubeadm/app/apis/kubeadm/validation" "k8s.io/kubernetes/cmd/kubeadm/app/cmd/options" - cmdutil "k8s.io/kubernetes/cmd/kubeadm/app/cmd/util" - kubeadmconstants "k8s.io/kubernetes/cmd/kubeadm/app/constants" - "k8s.io/kubernetes/cmd/kubeadm/app/features" + "k8s.io/kubernetes/cmd/kubeadm/app/cmd/phases/workflow" dnsaddon "k8s.io/kubernetes/cmd/kubeadm/app/phases/addons/dns" proxyaddon "k8s.io/kubernetes/cmd/kubeadm/app/phases/addons/proxy" - kubeadmutil "k8s.io/kubernetes/cmd/kubeadm/app/util" - configutil "k8s.io/kubernetes/cmd/kubeadm/app/util/config" - kubeconfigutil "k8s.io/kubernetes/cmd/kubeadm/app/util/kubeconfig" "k8s.io/kubernetes/pkg/util/normalizer" ) var ( - allAddonsLongDesc = normalizer.LongDesc(` - Installs the CoreDNS and the kube-proxy addons components via the API server. - Please note that although the DNS server is deployed, it will not be scheduled until CNI is installed. - ` + cmdutil.AlphaDisclaimer) - - allAddonsExample = normalizer.Examples(` - # Installs the CoreDNS and the kube-proxy addons components via the API server, - # functionally equivalent to what installed by kubeadm init. - - kubeadm alpha phase self-hosting from-staticpods - `) - - corednsAddonsLongDesc = normalizer.LongDesc(` + coreDNSAddonLongDesc = normalizer.LongDesc(` Installs the CoreDNS addon components via the API server. Please note that although the DNS server is deployed, it will not be scheduled until CNI is installed. - ` + cmdutil.AlphaDisclaimer) + `) - kubeproxyAddonsLongDesc = normalizer.LongDesc(` + kubeProxyAddonLongDesc = normalizer.LongDesc(` Installs the kube-proxy addon components via the API server. - ` + cmdutil.AlphaDisclaimer) + `) ) -// NewCmdAddon returns the addon Cobra command -func NewCmdAddon() *cobra.Command { - cmd := &cobra.Command{ - Use: "addon", - Aliases: []string{"addons"}, - Short: "Installs required addons for passing Conformance tests", - Long: cmdutil.MacroCommandLongDescription, - } - - cmd.AddCommand(getAddonsSubCommands()...) - return cmd +type addonData interface { + Cfg() *kubeadmapi.InitConfiguration + Client() (clientset.Interface, error) } -// EnsureAllAddons installs all addons to a Kubernetes cluster -func EnsureAllAddons(cfg *kubeadmapi.InitConfiguration, client clientset.Interface) error { - - addonActions := []func(cfg *kubeadmapi.InitConfiguration, client clientset.Interface) error{ - dnsaddon.EnsureDNSAddon, - proxyaddon.EnsureProxyAddon, - } - - klog.V(1).Infoln("[addon] installing all addons") - for _, action := range addonActions { - err := action(cfg, client) - if err != nil { - return err - } - } - - return nil -} - -// getAddonsSubCommands returns sub commands for addons phase -func getAddonsSubCommands() []*cobra.Command { - cfg := &kubeadmapiv1beta1.InitConfiguration{} - // Default values for the cobra help text - kubeadmscheme.Scheme.Default(cfg) - - var cfgPath, featureGatesString string - var subCmds []*cobra.Command - kubeConfigFile := kubeadmconstants.GetAdminKubeConfigPath() - - subCmdProperties := []struct { - use string - short string - long string - examples string - cmdFunc func(cfg *kubeadmapi.InitConfiguration, client clientset.Interface) error - }{ - { - use: "all", - short: "Installs all addons to a Kubernetes cluster", - long: allAddonsLongDesc, - examples: allAddonsExample, - cmdFunc: EnsureAllAddons, - }, - { - use: "coredns", - short: "Installs the CoreDNS addon to a Kubernetes cluster", - long: corednsAddonsLongDesc, - cmdFunc: dnsaddon.EnsureDNSAddon, - }, - { - use: "kube-proxy", - short: "Installs the kube-proxy addon to a Kubernetes cluster", - long: kubeproxyAddonsLongDesc, - cmdFunc: proxyaddon.EnsureProxyAddon, +// NewAddonPhase returns the addon Cobra command +func NewAddonPhase() workflow.Phase { + return workflow.Phase{ + Name: "addon", + Short: "Installs required addons for passing Conformance tests", + CmdFlags: getAddonPhaseFlags("all"), + Phases: []workflow.Phase{ + { + Name: "coredns", + Short: "Installs the CoreDNS addon to a Kubernetes cluster", + Long: coreDNSAddonLongDesc, + CmdFlags: getAddonPhaseFlags("coredns"), + Run: runCoreDNSAddon, + }, + { + Name: "kube-proxy", + Short: "Installs the kube-proxy addon to a Kubernetes cluster", + Long: kubeProxyAddonLongDesc, + CmdFlags: getAddonPhaseFlags("kube-proxy"), + Run: runKubeProxyAddon, + }, }, } - - for _, properties := range subCmdProperties { - // Creates the UX Command - cmd := &cobra.Command{ - Use: properties.use, - Short: properties.short, - Long: properties.long, - Example: properties.examples, - Run: runAddonsCmdFunc(properties.cmdFunc, cfg, kubeConfigFile, &cfgPath, &featureGatesString), - } - - // Add flags to the command - options.AddKubeConfigFlag(cmd.Flags(), &kubeConfigFile) - cmd.Flags().StringVar(&cfgPath, "config", cfgPath, "Path to a kubeadm config file. WARNING: Usage of a configuration file is experimental") - cmd.Flags().StringVar(&cfg.KubernetesVersion, "kubernetes-version", cfg.KubernetesVersion, `Choose a specific Kubernetes version for the control plane`) - cmd.Flags().StringVar(&cfg.ImageRepository, "image-repository", cfg.ImageRepository, `Choose a container registry to pull control plane images from`) - - if properties.use == "all" || properties.use == "kube-proxy" { - cmd.Flags().StringVar(&cfg.LocalAPIEndpoint.AdvertiseAddress, "apiserver-advertise-address", cfg.LocalAPIEndpoint.AdvertiseAddress, `The IP address the API server is accessible on`) - cmd.Flags().Int32Var(&cfg.LocalAPIEndpoint.BindPort, "apiserver-bind-port", cfg.LocalAPIEndpoint.BindPort, `The port the API server is accessible on`) - cmd.Flags().StringVar(&cfg.Networking.PodSubnet, "pod-network-cidr", cfg.Networking.PodSubnet, `The range of IP addresses used for the Pod network`) - } - - if properties.use == "all" || properties.use == "coredns" { - cmd.Flags().StringVar(&cfg.Networking.DNSDomain, "service-dns-domain", cfg.Networking.DNSDomain, `Alternative domain for services`) - cmd.Flags().StringVar(&cfg.Networking.ServiceSubnet, "service-cidr", cfg.Networking.ServiceSubnet, `The range of IP address used for service VIPs`) - cmd.Flags().StringVar(&featureGatesString, "feature-gates", featureGatesString, "A set of key=value pairs that describe feature gates for various features. "+ - "Options are:\n"+strings.Join(features.KnownFeatures(&features.InitFeatureGates), "\n")) - } - subCmds = append(subCmds, cmd) - } - - return subCmds } -// runAddonsCmdFunc creates a cobra.Command Run function, by composing the call to the given cmdFunc with necessary additional steps (e.g preparation of input parameters) -func runAddonsCmdFunc(cmdFunc func(cfg *kubeadmapi.InitConfiguration, client clientset.Interface) error, cfg *kubeadmapiv1beta1.InitConfiguration, kubeConfigFile string, cfgPath *string, featureGatesString *string) func(cmd *cobra.Command, args []string) { - - // the following statement build a clousure that wraps a call to a cmdFunc, binding - // the function itself with the specific parameters of each sub command. - // Please note that specific parameter should be passed as value, while other parameters - passed as reference - - // are shared between sub commands and gets access to current value e.g. flags value. - - return func(cmd *cobra.Command, args []string) { - var err error - if err := validation.ValidateMixedArguments(cmd.Flags()); err != nil { - kubeadmutil.CheckErr(err) - } - - if cfg.FeatureGates, err = features.NewFeatureGate(&features.InitFeatureGates, *featureGatesString); err != nil { - kubeadmutil.CheckErr(err) - } - - internalcfg := &kubeadmapi.InitConfiguration{} - kubeadmscheme.Scheme.Convert(cfg, internalcfg, nil) - kubeConfigFile = cmdutil.FindExistingKubeConfig(kubeConfigFile) - client, err := kubeconfigutil.ClientSetFromFile(kubeConfigFile) - kubeadmutil.CheckErr(err) - internalcfg, err = configutil.ConfigFileAndDefaultsToInternalConfig(*cfgPath, cfg) - kubeadmutil.CheckErr(err) - if err := features.ValidateVersion(features.InitFeatureGates, internalcfg.FeatureGates, internalcfg.KubernetesVersion); err != nil { - kubeadmutil.CheckErr(err) - } - - // Execute the cmdFunc - err = cmdFunc(internalcfg, client) - kubeadmutil.CheckErr(err) +func getAddonData(c workflow.RunData) (*kubeadmapi.InitConfiguration, clientset.Interface, error) { + data, ok := c.(addonData) + if !ok { + return nil, nil, errors.New("addon phase invoked with an invalid data struct") } + cfg := data.Cfg() + client, err := data.Client() + if err != nil { + return nil, nil, err + } + return cfg, client, err +} + +// runCoreDNSAddon installs CoreDNS addon to a Kubernetes cluster +func runCoreDNSAddon(c workflow.RunData) error { + cfg, client, err := getAddonData(c) + if err != nil { + return err + } + return dnsaddon.EnsureDNSAddon(cfg, client) +} + +// runKubeProxyAddon installs KubeProxy addon to a Kubernetes cluster +func runKubeProxyAddon(c workflow.RunData) error { + cfg, client, err := getAddonData(c) + if err != nil { + return err + } + return proxyaddon.EnsureProxyAddon(cfg, client) +} + +func getAddonPhaseFlags(name string) []string { + flags := []string{ + options.CfgPath, + options.KubeconfigPath, + options.KubernetesVersion, + options.ImageRepository, + } + if name == "all" || name == "kube-proxy" { + flags = append(flags, + options.APIServerAdvertiseAddress, + options.APIServerBindPort, + options.NetworkingPodSubnet, + ) + } + if name == "all" || name == "coredns" { + flags = append(flags, + options.FeatureGatesString, + options.NetworkingDNSDomain, + options.NetworkingServiceSubnet, + ) + } + return flags } diff --git a/cmd/kubeadm/app/cmd/phases/addons_test.go b/cmd/kubeadm/app/cmd/phases/addons_test.go deleted file mode 100644 index 713e7f8dbda..00000000000 --- a/cmd/kubeadm/app/cmd/phases/addons_test.go +++ /dev/null @@ -1,71 +0,0 @@ -/* -Copyright 2017 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 phases - -import ( - "testing" - - cmdtestutil "k8s.io/kubernetes/cmd/kubeadm/test/cmd" -) - -func TestAddonsSubCommandsHasFlags(t *testing.T) { - - subCmds := getAddonsSubCommands() - - commonFlags := []string{ - "kubeconfig", - "config", - "kubernetes-version", - "image-repository", - } - - var tests = []struct { - command string - additionalFlags []string - }{ - { - command: "all", - additionalFlags: []string{ - "apiserver-advertise-address", - "apiserver-bind-port", - "pod-network-cidr", - "service-dns-domain", - "service-cidr", - }, - }, - { - command: "kube-proxy", - additionalFlags: []string{ - "apiserver-advertise-address", - "apiserver-bind-port", - "pod-network-cidr", - }, - }, - { - command: "coredns", - additionalFlags: []string{ - "service-dns-domain", - "service-cidr", - }, - }, - } - - for _, test := range tests { - expectedFlags := append(commonFlags, test.additionalFlags...) - cmdtestutil.AssertSubCommandHasFlags(t, subCmds, test.command, expectedFlags...) - } -} diff --git a/docs/.generated_docs b/docs/.generated_docs index 2a0169d35a9..cc24ed321c0 100644 --- a/docs/.generated_docs +++ b/docs/.generated_docs @@ -22,11 +22,6 @@ docs/admin/kubeadm_alpha_kubelet.md docs/admin/kubeadm_alpha_kubelet_config.md docs/admin/kubeadm_alpha_kubelet_config_download.md docs/admin/kubeadm_alpha_kubelet_config_enable-dynamic.md -docs/admin/kubeadm_alpha_phase.md -docs/admin/kubeadm_alpha_phase_addon.md -docs/admin/kubeadm_alpha_phase_addon_all.md -docs/admin/kubeadm_alpha_phase_addon_coredns.md -docs/admin/kubeadm_alpha_phase_addon_kube-proxy.md docs/admin/kubeadm_alpha_preflight.md docs/admin/kubeadm_alpha_preflight_node.md docs/admin/kubeadm_alpha_selfhosting.md @@ -46,6 +41,9 @@ docs/admin/kubeadm_config_upload_from-flags.md docs/admin/kubeadm_config_view.md docs/admin/kubeadm_init.md docs/admin/kubeadm_init_phase.md +docs/admin/kubeadm_init_phase_addon.md +docs/admin/kubeadm_init_phase_addon_coredns.md +docs/admin/kubeadm_init_phase_addon_kube-proxy.md docs/admin/kubeadm_init_phase_bootstrap-token.md docs/admin/kubeadm_init_phase_certs.md docs/admin/kubeadm_init_phase_certs_apiserver-etcd-client.md @@ -113,10 +111,6 @@ docs/man/man1/kubeadm-alpha-kubelet-config-download.1 docs/man/man1/kubeadm-alpha-kubelet-config-enable-dynamic.1 docs/man/man1/kubeadm-alpha-kubelet-config.1 docs/man/man1/kubeadm-alpha-kubelet.1 -docs/man/man1/kubeadm-alpha-phase-addon-all.1 -docs/man/man1/kubeadm-alpha-phase-addon-coredns.1 -docs/man/man1/kubeadm-alpha-phase-addon-kube-proxy.1 -docs/man/man1/kubeadm-alpha-phase-addon.1 docs/man/man1/kubeadm-alpha-phase.1 docs/man/man1/kubeadm-alpha-preflight-node.1 docs/man/man1/kubeadm-alpha-preflight.1 @@ -137,6 +131,9 @@ docs/man/man1/kubeadm-config-upload-from-flags.1 docs/man/man1/kubeadm-config-upload.1 docs/man/man1/kubeadm-config-view.1 docs/man/man1/kubeadm-config.1 +docs/man/man1/kubeadm-init-phase-addon-coredns.1 +docs/man/man1/kubeadm-init-phase-addon-kube-proxy.1 +docs/man/man1/kubeadm-init-phase-addon.1 docs/man/man1/kubeadm-init-phase-bootstrap-token.1 docs/man/man1/kubeadm-init-phase-certs-apiserver-etcd-client.1 docs/man/man1/kubeadm-init-phase-certs-apiserver-kubelet-client.1 diff --git a/docs/admin/kubeadm_alpha_phase.md b/docs/admin/kubeadm_init_phase_addon.md similarity index 100% rename from docs/admin/kubeadm_alpha_phase.md rename to docs/admin/kubeadm_init_phase_addon.md diff --git a/docs/admin/kubeadm_alpha_phase_addon.md b/docs/admin/kubeadm_init_phase_addon_coredns.md similarity index 100% rename from docs/admin/kubeadm_alpha_phase_addon.md rename to docs/admin/kubeadm_init_phase_addon_coredns.md diff --git a/docs/admin/kubeadm_alpha_phase_addon_all.md b/docs/admin/kubeadm_init_phase_addon_kube-proxy.md similarity index 100% rename from docs/admin/kubeadm_alpha_phase_addon_all.md rename to docs/admin/kubeadm_init_phase_addon_kube-proxy.md diff --git a/docs/man/man1/kubeadm-alpha-phase-addon-coredns.1 b/docs/man/man1/kubeadm-alpha-phase-addon-coredns.1 deleted file mode 100644 index b6fd7a0f989..00000000000 --- a/docs/man/man1/kubeadm-alpha-phase-addon-coredns.1 +++ /dev/null @@ -1,3 +0,0 @@ -This file is autogenerated, but we've stopped checking such files into the -repository to reduce the need for rebases. Please run hack/generate-docs.sh to -populate this file. diff --git a/docs/man/man1/kubeadm-alpha-phase-addon-kube-proxy.1 b/docs/man/man1/kubeadm-alpha-phase-addon-kube-proxy.1 deleted file mode 100644 index b6fd7a0f989..00000000000 --- a/docs/man/man1/kubeadm-alpha-phase-addon-kube-proxy.1 +++ /dev/null @@ -1,3 +0,0 @@ -This file is autogenerated, but we've stopped checking such files into the -repository to reduce the need for rebases. Please run hack/generate-docs.sh to -populate this file. diff --git a/docs/man/man1/kubeadm-alpha-phase-addon.1 b/docs/man/man1/kubeadm-alpha-phase-addon.1 deleted file mode 100644 index b6fd7a0f989..00000000000 --- a/docs/man/man1/kubeadm-alpha-phase-addon.1 +++ /dev/null @@ -1,3 +0,0 @@ -This file is autogenerated, but we've stopped checking such files into the -repository to reduce the need for rebases. Please run hack/generate-docs.sh to -populate this file. diff --git a/docs/admin/kubeadm_alpha_phase_addon_coredns.md b/docs/man/man1/kubeadm-init-phase-addon-coredns.1 similarity index 100% rename from docs/admin/kubeadm_alpha_phase_addon_coredns.md rename to docs/man/man1/kubeadm-init-phase-addon-coredns.1 diff --git a/docs/admin/kubeadm_alpha_phase_addon_kube-proxy.md b/docs/man/man1/kubeadm-init-phase-addon-kube-proxy.1 similarity index 100% rename from docs/admin/kubeadm_alpha_phase_addon_kube-proxy.md rename to docs/man/man1/kubeadm-init-phase-addon-kube-proxy.1 diff --git a/docs/man/man1/kubeadm-alpha-phase-addon-all.1 b/docs/man/man1/kubeadm-init-phase-addon.1 similarity index 100% rename from docs/man/man1/kubeadm-alpha-phase-addon-all.1 rename to docs/man/man1/kubeadm-init-phase-addon.1