Merge pull request #75013 from neolit123/fix-join-flags

kubeadm: amend flags for join phases
pull/564/head
Kubernetes Prow Robot 2019-03-06 09:51:04 -08:00 committed by GitHub
commit 0e2c26829c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 84 additions and 38 deletions

View File

@ -16,7 +16,6 @@ go_library(
"//cmd/kubeadm/app/apis/kubeadm:go_default_library", "//cmd/kubeadm/app/apis/kubeadm:go_default_library",
"//cmd/kubeadm/app/cmd/options:go_default_library", "//cmd/kubeadm/app/cmd/options:go_default_library",
"//cmd/kubeadm/app/cmd/phases/workflow:go_default_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/constants:go_default_library",
"//cmd/kubeadm/app/phases/certs:go_default_library", "//cmd/kubeadm/app/phases/certs:go_default_library",
"//cmd/kubeadm/app/phases/controlplane:go_default_library", "//cmd/kubeadm/app/phases/controlplane:go_default_library",

View File

@ -22,7 +22,6 @@ import (
"github.com/pkg/errors" "github.com/pkg/errors"
"k8s.io/kubernetes/cmd/kubeadm/app/cmd/options" "k8s.io/kubernetes/cmd/kubeadm/app/cmd/options"
"k8s.io/kubernetes/cmd/kubeadm/app/cmd/phases/workflow" "k8s.io/kubernetes/cmd/kubeadm/app/cmd/phases/workflow"
cmdutil "k8s.io/kubernetes/cmd/kubeadm/app/cmd/util"
kubeadmconstants "k8s.io/kubernetes/cmd/kubeadm/app/constants" kubeadmconstants "k8s.io/kubernetes/cmd/kubeadm/app/constants"
etcdphase "k8s.io/kubernetes/cmd/kubeadm/app/phases/etcd" etcdphase "k8s.io/kubernetes/cmd/kubeadm/app/phases/etcd"
markcontrolplanephase "k8s.io/kubernetes/cmd/kubeadm/app/phases/markcontrolplane" markcontrolplanephase "k8s.io/kubernetes/cmd/kubeadm/app/phases/markcontrolplane"
@ -30,21 +29,21 @@ import (
"k8s.io/kubernetes/pkg/util/normalizer" "k8s.io/kubernetes/pkg/util/normalizer"
) )
var ( var controlPlaneJoinExample = normalizer.Examples(`
controlPlaneJoinExample = normalizer.Examples(` # Joins a machine as a control plane instance
# Joins a machine as a control plane instance kubeadm join phase control-plane-join all
kubeadm join phase control-plane-join all `)
`)
)
func getControlPlaneJoinPhaseFlags() []string { func getControlPlaneJoinPhaseFlags(name string) []string {
return []string{ flags := []string{
options.APIServerAdvertiseAddress,
options.APIServerBindPort,
options.CfgPath, options.CfgPath,
options.ControlPlane, options.ControlPlane,
options.NodeName, options.NodeName,
} }
if name != "mark-control-plane" {
flags = append(flags, options.APIServerAdvertiseAddress)
}
return flags
} }
// NewControlPlaneJoinPhase creates a kubeadm workflow phase that implements joining a machine as a control plane instance // NewControlPlaneJoinPhase creates a kubeadm workflow phase that implements joining a machine as a control plane instance
@ -52,13 +51,12 @@ func NewControlPlaneJoinPhase() workflow.Phase {
return workflow.Phase{ return workflow.Phase{
Name: "control-plane-join", Name: "control-plane-join",
Short: "Joins a machine as a control plane instance", Short: "Joins a machine as a control plane instance",
Long: cmdutil.MacroCommandLongDescription,
Example: controlPlaneJoinExample, Example: controlPlaneJoinExample,
Phases: []workflow.Phase{ Phases: []workflow.Phase{
{ {
Name: "all", Name: "all",
Short: "Joins a machine as a control plane instance", Short: "Joins a machine as a control plane instance",
InheritFlags: getControlPlaneJoinPhaseFlags(), InheritFlags: getControlPlaneJoinPhaseFlags("all"),
RunAllSiblings: true, RunAllSiblings: true,
}, },
newEtcdLocalSubphase(), newEtcdLocalSubphase(),
@ -73,7 +71,7 @@ func newEtcdLocalSubphase() workflow.Phase {
Name: "etcd", Name: "etcd",
Short: "Add a new local etcd member", Short: "Add a new local etcd member",
Run: runEtcdPhase, Run: runEtcdPhase,
InheritFlags: getControlPlaneJoinPhaseFlags(), InheritFlags: getControlPlaneJoinPhaseFlags("etcd"),
} }
} }
@ -86,7 +84,7 @@ func newUpdateStatusSubphase() workflow.Phase {
kubeadmconstants.KubeadmConfigConfigMap, kubeadmconstants.KubeadmConfigConfigMap,
), ),
Run: runUpdateStatusPhase, Run: runUpdateStatusPhase,
InheritFlags: getControlPlaneJoinPhaseFlags(), InheritFlags: getControlPlaneJoinPhaseFlags("update-status"),
} }
} }
@ -95,7 +93,7 @@ func newMarkControlPlaneSubphase() workflow.Phase {
Name: "mark-control-plane", Name: "mark-control-plane",
Short: "Mark a node as a control-plane", Short: "Mark a node as a control-plane",
Run: runMarkControlPlanePhase, Run: runMarkControlPlanePhase,
InheritFlags: getControlPlaneJoinPhaseFlags(), InheritFlags: getControlPlaneJoinPhaseFlags("mark-control-plane"),
} }
} }

View File

@ -31,13 +31,20 @@ import (
"k8s.io/kubernetes/cmd/kubeadm/app/phases/copycerts" "k8s.io/kubernetes/cmd/kubeadm/app/phases/copycerts"
kubeconfigphase "k8s.io/kubernetes/cmd/kubeadm/app/phases/kubeconfig" kubeconfigphase "k8s.io/kubernetes/cmd/kubeadm/app/phases/kubeconfig"
kubeconfigutil "k8s.io/kubernetes/cmd/kubeadm/app/util/kubeconfig" kubeconfigutil "k8s.io/kubernetes/cmd/kubeadm/app/util/kubeconfig"
"k8s.io/kubernetes/pkg/util/normalizer"
) )
var controlPlanePrepareExample = normalizer.Examples(`
# Prepares the machine for serving a control plane
kubeadm join phase control-plane-prepare all
`)
// NewControlPlanePreparePhase creates a kubeadm workflow phase that implements the preparation of the node to serve a control plane // NewControlPlanePreparePhase creates a kubeadm workflow phase that implements the preparation of the node to serve a control plane
func NewControlPlanePreparePhase() workflow.Phase { func NewControlPlanePreparePhase() workflow.Phase {
return workflow.Phase{ return workflow.Phase{
Name: "control-plane-prepare", Name: "control-plane-prepare",
Short: "Prepares the machine for serving a control plane.", Short: "Prepares the machine for serving a control plane.",
Example: controlPlanePrepareExample,
Phases: []workflow.Phase{ Phases: []workflow.Phase{
{ {
Name: "all [api-server-endpoint]", Name: "all [api-server-endpoint]",
@ -48,33 +55,75 @@ func NewControlPlanePreparePhase() workflow.Phase {
newControlPlanePrepareDownloadCertsSubphase(), newControlPlanePrepareDownloadCertsSubphase(),
newControlPlanePrepareCertsSubphase(), newControlPlanePrepareCertsSubphase(),
newControlPlanePrepareKubeconfigSubphase(), newControlPlanePrepareKubeconfigSubphase(),
newControlPlanePrepareManifestsSubphases(), newControlPlanePrepareControlPlaneSubphase(),
}, },
} }
} }
func getControlPlanePreparePhaseFlags(name string) []string { func getControlPlanePreparePhaseFlags(name string) []string {
flags := []string{ var flags []string
options.APIServerAdvertiseAddress, switch name {
options.APIServerBindPort, case "all":
options.CfgPath, flags = []string{
options.ControlPlane, options.APIServerAdvertiseAddress,
options.NodeName, options.APIServerBindPort,
} options.CfgPath,
if name != "manifests" { options.ControlPlane,
flags = append(flags, options.NodeName,
options.FileDiscovery, options.FileDiscovery,
options.TokenDiscovery, options.TokenDiscovery,
options.TokenDiscoveryCAHash, options.TokenDiscoveryCAHash,
options.TokenDiscoverySkipCAHash, options.TokenDiscoverySkipCAHash,
options.TLSBootstrapToken, options.TLSBootstrapToken,
options.TokenStr, options.TokenStr,
)
}
if name == "all" || name == "download-certs" {
flags = append(flags,
options.CertificateKey, options.CertificateKey,
) }
case "download-certs":
flags = []string{
options.CfgPath,
options.ControlPlane,
options.FileDiscovery,
options.TokenDiscovery,
options.TokenDiscoveryCAHash,
options.TokenDiscoverySkipCAHash,
options.TLSBootstrapToken,
options.TokenStr,
options.CertificateKey,
}
case "certs":
flags = []string{
options.APIServerAdvertiseAddress,
options.CfgPath,
options.ControlPlane,
options.NodeName,
options.FileDiscovery,
options.TokenDiscovery,
options.TokenDiscoveryCAHash,
options.TokenDiscoverySkipCAHash,
options.TLSBootstrapToken,
options.TokenStr,
}
case "kubeconfig":
flags = []string{
options.CfgPath,
options.ControlPlane,
options.FileDiscovery,
options.TokenDiscovery,
options.TokenDiscoveryCAHash,
options.TokenDiscoverySkipCAHash,
options.TLSBootstrapToken,
options.TokenStr,
options.CertificateKey,
}
case "control-plane":
flags = []string{
options.APIServerAdvertiseAddress,
options.APIServerBindPort,
options.CfgPath,
options.ControlPlane,
}
default:
flags = []string{}
} }
return flags return flags
} }
@ -106,16 +155,16 @@ func newControlPlanePrepareKubeconfigSubphase() workflow.Phase {
} }
} }
func newControlPlanePrepareManifestsSubphases() workflow.Phase { func newControlPlanePrepareControlPlaneSubphase() workflow.Phase {
return workflow.Phase{ return workflow.Phase{
Name: "control-plane", Name: "control-plane",
Short: "Generates the manifests for the new control plane components", Short: "Generates the manifests for the new control plane components",
Run: runControlPlanePrepareManifestsSubphase, //NB. eventually in future we would like to break down this in sub phases for each component Run: runControlPlanePrepareControlPlaneSubphase, //NB. eventually in future we would like to break down this in sub phases for each component
InheritFlags: getControlPlanePreparePhaseFlags("manifests"), InheritFlags: getControlPlanePreparePhaseFlags("control-plane"),
} }
} }
func runControlPlanePrepareManifestsSubphase(c workflow.RunData) error { func runControlPlanePrepareControlPlaneSubphase(c workflow.RunData) error {
data, ok := c.(JoinData) data, ok := c.(JoinData)
if !ok { if !ok {
return errors.New("control-plane-prepare phase invoked with an invalid data struct") return errors.New("control-plane-prepare phase invoked with an invalid data struct")