kubeadm: init must validate or generate token before anything else.

Fixes kubernetes/kubeadm#112
This commit is contained in:
Paulo Pires 2017-01-17 10:29:15 +00:00
parent 9d2fce7c22
commit 2e8df3b569
No known key found for this signature in database
GPG Key ID: F3F6ED5C522EAA71

View File

@ -200,18 +200,19 @@ func (i *Init) Validate() error {
// Run executes master node provisioning, including certificates, needed static pod manifests, etc. // Run executes master node provisioning, including certificates, needed static pod manifests, etc.
func (i *Init) Run(out io.Writer) error { func (i *Init) Run(out io.Writer) error {
// PHASE 1: Generate certificates // Validate token if any, otherwise generate
caCert, err := certphase.CreatePKIAssets(i.cfg, kubeadmapi.GlobalEnvParams.HostPKIPath)
if err != nil {
return err
}
// Exception:
if i.cfg.Discovery.Token != nil { if i.cfg.Discovery.Token != nil {
// Validate token if i.cfg.Discovery.Token.ID != "" && i.cfg.Discovery.Token.Secret != "" {
fmt.Printf("[token-discovery] A token has been provided, validating [%+v]\n", i.cfg.Discovery.Token)
if valid, err := kubeadmutil.ValidateToken(i.cfg.Discovery.Token); valid == false { if valid, err := kubeadmutil.ValidateToken(i.cfg.Discovery.Token); valid == false {
return err return err
} }
} else {
fmt.Printf("[token-discovery] A token has not been provided, generating one\n")
if err := kubeadmutil.GenerateToken(i.cfg.Discovery.Token); err != nil {
return err
}
}
// Make sure there is at least one address // Make sure there is at least one address
if len(i.cfg.Discovery.Token.Addresses) == 0 { if len(i.cfg.Discovery.Token.Addresses) == 0 {
@ -227,6 +228,12 @@ func (i *Init) Run(out io.Writer) error {
} }
} }
// PHASE 1: Generate certificates
caCert, err := certphase.CreatePKIAssets(i.cfg, kubeadmapi.GlobalEnvParams.HostPKIPath)
if err != nil {
return err
}
// PHASE 2: Generate kubeconfig files for the admin and the kubelet // PHASE 2: Generate kubeconfig files for the admin and the kubelet
// TODO this is not great, but there is only one address we can use here // TODO this is not great, but there is only one address we can use here