Skip to content

Commit b03367b

Browse files
authored
Merge pull request kubernetes#77188 from SataQiu/fix-kubeadm-20190428
Make KubernetesDir a true constant
2 parents 6897c68 + d46bd0d commit b03367b

File tree

8 files changed

+43
-31
lines changed

8 files changed

+43
-31
lines changed

cmd/kubeadm/app/cmd/init.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -334,7 +334,7 @@ func newInitData(cmd *cobra.Command, args []string, options *initOptions, out io
334334
// if dry running creates a temporary folder for saving kubeadm generated files
335335
dryRunDir := ""
336336
if options.dryRun {
337-
if dryRunDir, err = kubeadmconstants.CreateTempDirForKubeadm("kubeadm-init-dryrun"); err != nil {
337+
if dryRunDir, err = kubeadmconstants.CreateTempDirForKubeadm("", "kubeadm-init-dryrun"); err != nil {
338338
return nil, errors.Wrap(err, "couldn't create a temporary directory")
339339
}
340340
}

cmd/kubeadm/app/cmd/upgrade/BUILD

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,6 @@ go_test(
5858
embed = [":go_default_library"],
5959
deps = [
6060
"//cmd/kubeadm/app/apis/kubeadm:go_default_library",
61-
"//cmd/kubeadm/app/constants:go_default_library",
6261
"//cmd/kubeadm/app/phases/upgrade:go_default_library",
6362
],
6463
)

cmd/kubeadm/app/cmd/upgrade/apply.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -238,14 +238,14 @@ func PerformControlPlaneUpgrade(flags *applyFlags, client clientset.Interface, w
238238
}
239239

240240
// GetPathManagerForUpgrade returns a path manager properly configured for the given InitConfiguration.
241-
func GetPathManagerForUpgrade(internalcfg *kubeadmapi.InitConfiguration, etcdUpgrade bool) (upgrade.StaticPodPathManager, error) {
241+
func GetPathManagerForUpgrade(kubernetesDir string, internalcfg *kubeadmapi.InitConfiguration, etcdUpgrade bool) (upgrade.StaticPodPathManager, error) {
242242
isHAEtcd := etcdutil.CheckConfigurationIsHA(&internalcfg.Etcd)
243-
return upgrade.NewKubeStaticPodPathManagerUsingTempDirs(constants.GetStaticPodDirectory(), true, etcdUpgrade && !isHAEtcd)
243+
return upgrade.NewKubeStaticPodPathManagerUsingTempDirs(kubernetesDir, true, etcdUpgrade && !isHAEtcd)
244244
}
245245

246246
// PerformStaticPodUpgrade performs the upgrade of the control plane components for a static pod hosted cluster
247247
func PerformStaticPodUpgrade(client clientset.Interface, waiter apiclient.Waiter, internalcfg *kubeadmapi.InitConfiguration, etcdUpgrade, renewCerts bool) error {
248-
pathManager, err := GetPathManagerForUpgrade(internalcfg, etcdUpgrade)
248+
pathManager, err := GetPathManagerForUpgrade(constants.KubernetesDir, internalcfg, etcdUpgrade)
249249
if err != nil {
250250
return err
251251
}
@@ -257,7 +257,7 @@ func PerformStaticPodUpgrade(client clientset.Interface, waiter apiclient.Waiter
257257
// DryRunStaticPodUpgrade fakes an upgrade of the control plane
258258
func DryRunStaticPodUpgrade(internalcfg *kubeadmapi.InitConfiguration) error {
259259

260-
dryRunManifestDir, err := constants.CreateTempDirForKubeadm("kubeadm-upgrade-dryrun")
260+
dryRunManifestDir, err := constants.CreateTempDirForKubeadm("", "kubeadm-upgrade-dryrun")
261261
if err != nil {
262262
return err
263263
}

cmd/kubeadm/app/cmd/upgrade/apply_test.go

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,6 @@ import (
2222
"testing"
2323

2424
kubeadmapi "k8s.io/kubernetes/cmd/kubeadm/app/apis/kubeadm"
25-
"k8s.io/kubernetes/cmd/kubeadm/app/constants"
2625
)
2726

2827
func TestSessionIsInteractive(t *testing.T) {
@@ -114,14 +113,11 @@ func TestGetPathManagerForUpgrade(t *testing.T) {
114113
if err != nil {
115114
t.Fatalf("unexpected error making temporary directory: %v", err)
116115
}
117-
oldK8sDir := constants.KubernetesDir
118-
constants.KubernetesDir = tmpdir
119116
defer func() {
120-
constants.KubernetesDir = oldK8sDir
121117
os.RemoveAll(tmpdir)
122118
}()
123119

124-
pathmgr, err := GetPathManagerForUpgrade(test.cfg, test.etcdUpgrade)
120+
pathmgr, err := GetPathManagerForUpgrade(tmpdir, test.cfg, test.etcdUpgrade)
125121
if err != nil {
126122
t.Fatalf("unexpected error creating path manager: %v", err)
127123
}

cmd/kubeadm/app/constants/constants.go

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -33,11 +33,9 @@ import (
3333
"k8s.io/kubernetes/pkg/registry/core/service/ipallocator"
3434
)
3535

36-
// KubernetesDir is the directory Kubernetes owns for storing various configuration files
37-
// This semi-constant MUST NOT be modified during runtime. It's a variable solely for use in unit testing.
38-
var KubernetesDir = "/etc/kubernetes"
39-
4036
const (
37+
// KubernetesDir is the directory Kubernetes owns for storing various configuration files
38+
KubernetesDir = "/etc/kubernetes"
4139
// ManifestsSubDirName defines directory name to store manifests
4240
ManifestsSubDirName = "manifests"
4341
// TempDirForKubeadm defines temporary directory for kubeadm
@@ -448,8 +446,12 @@ func AddSelfHostedPrefix(componentName string) string {
448446
}
449447

450448
// CreateTempDirForKubeadm is a function that creates a temporary directory under /etc/kubernetes/tmp (not using /tmp as that would potentially be dangerous)
451-
func CreateTempDirForKubeadm(dirName string) (string, error) {
449+
func CreateTempDirForKubeadm(kubernetesDir, dirName string) (string, error) {
452450
tempDir := path.Join(KubernetesDir, TempDirForKubeadm)
451+
if len(kubernetesDir) != 0 {
452+
tempDir = path.Join(kubernetesDir, TempDirForKubeadm)
453+
}
454+
453455
// creates target folder if not already exists
454456
if err := os.MkdirAll(tempDir, 0700); err != nil {
455457
return "", errors.Wrapf(err, "failed to create directory %q", tempDir)
@@ -463,8 +465,12 @@ func CreateTempDirForKubeadm(dirName string) (string, error) {
463465
}
464466

465467
// CreateTimestampDirForKubeadm is a function that creates a temporary directory under /etc/kubernetes/tmp formatted with the current date
466-
func CreateTimestampDirForKubeadm(dirName string) (string, error) {
468+
func CreateTimestampDirForKubeadm(kubernetesDir, dirName string) (string, error) {
467469
tempDir := path.Join(KubernetesDir, TempDirForKubeadm)
470+
if len(kubernetesDir) != 0 {
471+
tempDir = path.Join(kubernetesDir, TempDirForKubeadm)
472+
}
473+
468474
// creates target folder if not already exists
469475
if err := os.MkdirAll(tempDir, 0700); err != nil {
470476
return "", errors.Wrapf(err, "failed to create directory %q", tempDir)

cmd/kubeadm/app/phases/upgrade/postupgrade.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -180,7 +180,7 @@ func writeKubeletConfigFiles(client clientset.Interface, cfg *kubeadmapi.InitCon
180180
// GetKubeletDir gets the kubelet directory based on whether the user is dry-running this command or not.
181181
func GetKubeletDir(dryRun bool) (string, error) {
182182
if dryRun {
183-
return kubeadmconstants.CreateTempDirForKubeadm("kubeadm-upgrade-dryrun")
183+
return kubeadmconstants.CreateTempDirForKubeadm("", "kubeadm-upgrade-dryrun")
184184
}
185185
return kubeadmconstants.KubeletRunDirectory, nil
186186
}

cmd/kubeadm/app/phases/upgrade/staticpods.go

Lines changed: 20 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ package upgrade
1919
import (
2020
"fmt"
2121
"os"
22+
"path/filepath"
2223
"strings"
2324
"time"
2425

@@ -47,6 +48,8 @@ const (
4748
type StaticPodPathManager interface {
4849
// MoveFile should move a file from oldPath to newPath
4950
MoveFile(oldPath, newPath string) error
51+
// KubernetesDir is the directory Kubernetes owns for storing various configuration files
52+
KubernetesDir() string
5053
// RealManifestPath gets the file path for the component in the "real" static pod manifest directory used by the kubelet
5154
RealManifestPath(component string) string
5255
// RealManifestDir should point to the static pod manifest directory used by the kubelet
@@ -67,6 +70,7 @@ type StaticPodPathManager interface {
6770

6871
// KubeStaticPodPathManager is a real implementation of StaticPodPathManager that is used when upgrading a static pod cluster
6972
type KubeStaticPodPathManager struct {
73+
kubernetesDir string
7074
realManifestDir string
7175
tempManifestDir string
7276
backupManifestDir string
@@ -77,9 +81,10 @@ type KubeStaticPodPathManager struct {
7781
}
7882

7983
// NewKubeStaticPodPathManager creates a new instance of KubeStaticPodPathManager
80-
func NewKubeStaticPodPathManager(realDir, tempDir, backupDir, backupEtcdDir string, keepManifestDir, keepEtcdDir bool) StaticPodPathManager {
84+
func NewKubeStaticPodPathManager(kubernetesDir, tempDir, backupDir, backupEtcdDir string, keepManifestDir, keepEtcdDir bool) StaticPodPathManager {
8185
return &KubeStaticPodPathManager{
82-
realManifestDir: realDir,
86+
kubernetesDir: kubernetesDir,
87+
realManifestDir: filepath.Join(kubernetesDir, constants.ManifestsSubDirName),
8388
tempManifestDir: tempDir,
8489
backupManifestDir: backupDir,
8590
backupEtcdDir: backupEtcdDir,
@@ -89,28 +94,34 @@ func NewKubeStaticPodPathManager(realDir, tempDir, backupDir, backupEtcdDir stri
8994
}
9095

9196
// NewKubeStaticPodPathManagerUsingTempDirs creates a new instance of KubeStaticPodPathManager with temporary directories backing it
92-
func NewKubeStaticPodPathManagerUsingTempDirs(realManifestDir string, saveManifestsDir, saveEtcdDir bool) (StaticPodPathManager, error) {
93-
upgradedManifestsDir, err := constants.CreateTempDirForKubeadm("kubeadm-upgraded-manifests")
97+
func NewKubeStaticPodPathManagerUsingTempDirs(kubernetesDir string, saveManifestsDir, saveEtcdDir bool) (StaticPodPathManager, error) {
98+
99+
upgradedManifestsDir, err := constants.CreateTempDirForKubeadm(kubernetesDir, "kubeadm-upgraded-manifests")
94100
if err != nil {
95101
return nil, err
96102
}
97-
backupManifestsDir, err := constants.CreateTimestampDirForKubeadm("kubeadm-backup-manifests")
103+
backupManifestsDir, err := constants.CreateTimestampDirForKubeadm(kubernetesDir, "kubeadm-backup-manifests")
98104
if err != nil {
99105
return nil, err
100106
}
101-
backupEtcdDir, err := constants.CreateTimestampDirForKubeadm("kubeadm-backup-etcd")
107+
backupEtcdDir, err := constants.CreateTimestampDirForKubeadm(kubernetesDir, "kubeadm-backup-etcd")
102108
if err != nil {
103109
return nil, err
104110
}
105111

106-
return NewKubeStaticPodPathManager(realManifestDir, upgradedManifestsDir, backupManifestsDir, backupEtcdDir, saveManifestsDir, saveEtcdDir), nil
112+
return NewKubeStaticPodPathManager(kubernetesDir, upgradedManifestsDir, backupManifestsDir, backupEtcdDir, saveManifestsDir, saveEtcdDir), nil
107113
}
108114

109115
// MoveFile should move a file from oldPath to newPath
110116
func (spm *KubeStaticPodPathManager) MoveFile(oldPath, newPath string) error {
111117
return os.Rename(oldPath, newPath)
112118
}
113119

120+
// KubernetesDir should point to the directory Kubernetes owns for storing various configuration files
121+
func (spm *KubeStaticPodPathManager) KubernetesDir() string {
122+
return spm.kubernetesDir
123+
}
124+
114125
// RealManifestPath gets the file path for the component in the "real" static pod manifest directory used by the kubelet
115126
func (spm *KubeStaticPodPathManager) RealManifestPath(component string) string {
116127
return constants.GetStaticPodFilepath(component, spm.realManifestDir)
@@ -202,7 +213,7 @@ func upgradeComponent(component string, renewCerts bool, waiter apiclient.Waiter
202213
// if certificate renewal should be performed
203214
if renewCerts {
204215
// renew all the certificates used by the current component
205-
if err := renewCertsByComponent(cfg, constants.KubernetesDir, component); err != nil {
216+
if err := renewCertsByComponent(cfg, pathMgr.KubernetesDir(), component); err != nil {
206217
return rollbackOldManifests(recoverManifests, errors.Wrapf(err, "failed to renew certificates for component %q", component), pathMgr, recoverEtcd)
207218
}
208219
}
@@ -452,7 +463,7 @@ func StaticPodControlPlane(client clientset.Interface, waiter apiclient.Waiter,
452463

453464
if renewCerts {
454465
// renew the certificate embedded in the admin.conf file
455-
err := renewEmbeddedCertsByName(cfg, constants.KubernetesDir, constants.AdminKubeConfigFileName)
466+
err := renewEmbeddedCertsByName(cfg, pathMgr.KubernetesDir(), constants.AdminKubeConfigFileName)
456467
if err != nil {
457468
return rollbackOldManifests(recoverManifests, errors.Wrapf(err, "failed to upgrade the %s certificates", constants.AdminKubeConfigFileName), pathMgr, false)
458469
}

cmd/kubeadm/app/phases/upgrade/staticpods_test.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -468,7 +468,7 @@ func TestStaticPodControlPlane(t *testing.T) {
468468
t.Fatalf("couldn't run NewFakeStaticPodPathManager: %v", err)
469469
}
470470
defer os.RemoveAll(pathMgr.(*fakeStaticPodPathManager).KubernetesDir())
471-
constants.KubernetesDir = pathMgr.(*fakeStaticPodPathManager).KubernetesDir()
471+
tmpKubernetesDir := pathMgr.(*fakeStaticPodPathManager).KubernetesDir()
472472

473473
tempCertsDir, err := ioutil.TempDir("", "kubeadm-certs")
474474
if err != nil {
@@ -505,7 +505,7 @@ func TestStaticPodControlPlane(t *testing.T) {
505505
if rt.skipKubeConfig == kubeConfig {
506506
continue
507507
}
508-
if err := kubeconfigphase.CreateKubeConfigFile(kubeConfig, constants.KubernetesDir, oldcfg); err != nil {
508+
if err := kubeconfigphase.CreateKubeConfigFile(kubeConfig, tmpKubernetesDir, oldcfg); err != nil {
509509
t.Fatalf("couldn't create kubeconfig %q: %v", kubeConfig, err)
510510
}
511511
}
@@ -639,7 +639,7 @@ func TestCleanupDirs(t *testing.T) {
639639

640640
for _, test := range tests {
641641
t.Run(test.name, func(t *testing.T) {
642-
realManifestDir, cleanup := getTempDir(t, "realManifestDir")
642+
realKubernetesDir, cleanup := getTempDir(t, "realKubernetesDir")
643643
defer cleanup()
644644

645645
tempManifestDir, cleanup := getTempDir(t, "tempManifestDir")
@@ -651,7 +651,7 @@ func TestCleanupDirs(t *testing.T) {
651651
backupEtcdDir, cleanup := getTempDir(t, "backupEtcdDir")
652652
defer cleanup()
653653

654-
mgr := NewKubeStaticPodPathManager(realManifestDir, tempManifestDir, backupManifestDir, backupEtcdDir, test.keepManifest, test.keepEtcd)
654+
mgr := NewKubeStaticPodPathManager(realKubernetesDir, tempManifestDir, backupManifestDir, backupEtcdDir, test.keepManifest, test.keepEtcd)
655655
err := mgr.CleanupDirs()
656656
if err != nil {
657657
t.Errorf("unexpected error cleaning up: %v", err)

0 commit comments

Comments
 (0)