From 6d6d200c3a7f611037db7a6200271da7e59983a0 Mon Sep 17 00:00:00 2001 From: Haleygo Date: Fri, 25 Jun 2021 23:29:59 +0800 Subject: [PATCH] dry-run can work when using an external ca --- cmd/kubeadm/app/cmd/init.go | 3 --- cmd/kubeadm/app/cmd/phases/init/certs.go | 16 ++++++++++++++++ cmd/kubeadm/app/cmd/phases/init/kubeconfig.go | 15 +++++++++++++++ 3 files changed, 31 insertions(+), 3 deletions(-) diff --git a/cmd/kubeadm/app/cmd/init.go b/cmd/kubeadm/app/cmd/init.go index e09f5e2b1e1..ceb5e6a3262 100644 --- a/cmd/kubeadm/app/cmd/init.go +++ b/cmd/kubeadm/app/cmd/init.go @@ -386,9 +386,6 @@ func newInitData(cmd *cobra.Command, args []string, options *initOptions, out io // Validate that also the required kubeconfig files exists and are invalid, because // kubeadm can't regenerate them without the CA Key kubeconfigDir := options.kubeconfigDir - if options.dryRun { - kubeconfigDir = dryRunDir - } if err := kubeconfigphase.ValidateKubeconfigsForExternalCA(kubeconfigDir, cfg); err != nil { return nil, err } diff --git a/cmd/kubeadm/app/cmd/phases/init/certs.go b/cmd/kubeadm/app/cmd/phases/init/certs.go index e9890666367..bf48ebd41fd 100644 --- a/cmd/kubeadm/app/cmd/phases/init/certs.go +++ b/cmd/kubeadm/app/cmd/phases/init/certs.go @@ -18,6 +18,8 @@ package phases import ( "fmt" + "os" + "path/filepath" "strings" "github.com/pkg/errors" @@ -197,6 +199,20 @@ func runCerts(c workflow.RunData) error { } fmt.Printf("[certs] Using certificateDir folder %q\n", data.CertificateWriteDir()) + + // If using an external CA while dryrun, copy CA cert to dryrun dir for later use + if data.ExternalCA() && data.DryRun() { + externalCAFile := filepath.Join(data.Cfg().CertificatesDir, kubeadmconstants.CACertName) + fileInfo, _ := os.Stat(externalCAFile) + contents, err := os.ReadFile(externalCAFile) + if err != nil { + return err + } + err = os.WriteFile(filepath.Join(data.CertificateWriteDir(), kubeadmconstants.CACertName), contents, fileInfo.Mode()) + if err != nil { + return err + } + } return nil } diff --git a/cmd/kubeadm/app/cmd/phases/init/kubeconfig.go b/cmd/kubeadm/app/cmd/phases/init/kubeconfig.go index f2f6b7d3cb4..3d1f304a084 100644 --- a/cmd/kubeadm/app/cmd/phases/init/kubeconfig.go +++ b/cmd/kubeadm/app/cmd/phases/init/kubeconfig.go @@ -18,6 +18,8 @@ package phases import ( "fmt" + "os" + "path/filepath" "github.com/pkg/errors" "k8s.io/kubernetes/cmd/kubeadm/app/cmd/options" @@ -132,6 +134,19 @@ func runKubeConfigFile(kubeConfigFileName string) func(workflow.RunData) error { // if external CA mode, skip certificate authority generation if data.ExternalCA() { fmt.Printf("[kubeconfig] External CA mode: Using user provided %s\n", kubeConfigFileName) + // If using an external CA while dryrun, copy kubeconfig files to dryrun dir for later use + if data.DryRun() { + externalCAFile := filepath.Join(kubeadmconstants.KubernetesDir, kubeConfigFileName) + fileInfo, _ := os.Stat(externalCAFile) + contents, err := os.ReadFile(externalCAFile) + if err != nil { + return err + } + err = os.WriteFile(filepath.Join(data.KubeConfigDir(), kubeConfigFileName), contents, fileInfo.Mode()) + if err != nil { + return err + } + } return nil }