Skip to content
This repository was archived by the owner on Jul 30, 2021. It is now read-only.

Commit 0a9ad9e

Browse files
authored
Merge pull request #368 from carolynvs/wait-for-namespace
Wait for kube-system namespace before creating assets
2 parents 03a43a5 + 3f42b41 commit 0a9ad9e

File tree

1 file changed

+21
-13
lines changed

1 file changed

+21
-13
lines changed

pkg/bootkube/create.go

Lines changed: 21 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ func CreateAssets(manifestDir string, timeout time.Duration) error {
2323

2424
upFn := func() (bool, error) {
2525
if err := apiTest(); err != nil {
26-
glog.Warningf("Unable to determine api-server version: %v", err)
26+
glog.Warningf("Unable to determine api-server readiness: %v", err)
2727
return false, nil
2828
}
2929
return true, nil
@@ -32,31 +32,32 @@ func CreateAssets(manifestDir string, timeout time.Duration) error {
3232
createFn := func() (bool, error) {
3333
err := createAssets(manifestDir)
3434
if err != nil {
35-
glog.Errorf("Error creating assets: %v", err)
36-
// If error is "system namespace not found" we should retry
37-
if apierrors.IsNotFound(err) {
38-
details := err.(*apierrors.StatusError).Status().Details
39-
if details.Name == api.NamespaceSystem && details.Kind == "namespaces" {
40-
return false, nil // retry
41-
}
42-
}
43-
UserOutput("\nError creating assets: %v\n", err)
35+
err = fmt.Errorf("Error creating assets: %v", err)
36+
glog.Error(err)
37+
UserOutput("%v\n", err)
4438
UserOutput("\nNOTE: Bootkube failed to create some cluster assets. It is important that manifest errors are resolved and resubmitted to the apiserver.\n")
4539
UserOutput("For example, after resolving issues: kubectl create -f <failed-manifest>\n\n")
4640
}
41+
42+
// Do not fail cluster creation due to missing assets as it is a recoverable situation
43+
// See https://github.com/kubernetes-incubator/bootkube/pull/368/files#r105509074
4744
return true, nil
4845
}
4946

5047
UserOutput("Waiting for api-server...\n")
5148
start := time.Now()
5249
if err := wait.Poll(5*time.Second, timeout, upFn); err != nil {
53-
return fmt.Errorf("API Server unavailable: %v", err)
50+
err = fmt.Errorf("API Server is not ready: %v", err)
51+
glog.Error(err)
52+
return err
5453
}
5554

5655
UserOutput("Creating self-hosted assets...\n")
5756
timeout = timeout - time.Since(start)
58-
if err := wait.Poll(5*time.Second, timeout, createFn); err != nil {
59-
return fmt.Errorf("Failed to create assets: %v", err)
57+
if err := wait.PollImmediate(5*time.Second, timeout, createFn); err != nil {
58+
err = fmt.Errorf("Failed to create assets: %v", err)
59+
glog.Error(err)
60+
return err
6061
}
6162

6263
return nil
@@ -138,6 +139,13 @@ func apiTest() error {
138139
return err
139140
}
140141

142+
// API Server is responding
141143
_, err = client.Discovery().ServerVersion()
144+
if err != nil {
145+
return err
146+
}
147+
148+
// System namespace has been created
149+
_, err = client.Namespaces().Get(api.NamespaceSystem)
142150
return err
143151
}

0 commit comments

Comments
 (0)