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

Commit 67aa97a

Browse files
author
Carolyn Van Slyck
committed
Wait for kube-system namespace
Instead of trying to handle the NotFound error, check that the kube-system namespace exists before attempting to create assets.
1 parent a138eba commit 67aa97a

File tree

1 file changed

+19
-18
lines changed

1 file changed

+19
-18
lines changed

pkg/bootkube/create.go

Lines changed: 19 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -23,40 +23,34 @@ 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
3030
}
3131

3232
createFn := func() (bool, error) {
3333
err := createAssets(manifestDir)
34-
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)
44-
UserOutput("\nNOTE: Bootkube failed to create some cluster assets. It is important that manifest errors are resolved and resubmitted to the apiserver.\n")
45-
UserOutput("For example, after resolving issues: kubectl create -f <failed-manifest>\n\n")
46-
}
47-
return true, nil
34+
return true, err
4835
}
4936

5037
UserOutput("Waiting for api-server...\n")
5138
start := time.Now()
5239
if err := wait.Poll(5*time.Second, timeout, upFn); err != nil {
53-
return fmt.Errorf("API Server unavailable: %v", err)
40+
err = fmt.Errorf("API Server is not ready: %v", err)
41+
glog.Error(err)
42+
return err
5443
}
5544

5645
UserOutput("Creating self-hosted assets...\n")
5746
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)
47+
if err := wait.PollImmediate(5*time.Second, timeout, createFn); err != nil {
48+
err = fmt.Errorf("Error creating assets: %v", err)
49+
glog.Error(err)
50+
UserOutput("%v\n", err)
51+
UserOutput("\nNOTE: Bootkube failed to create some cluster assets. It is important that manifest errors are resolved and resubmitted to the apiserver.\n")
52+
UserOutput("For example, after resolving issues: kubectl create -f <failed-manifest>\n\n")
53+
return err
6054
}
6155

6256
return nil
@@ -138,6 +132,13 @@ func apiTest() error {
138132
return err
139133
}
140134

135+
// API Server is responding
141136
_, err = client.Discovery().ServerVersion()
137+
if err != nil {
138+
return err
139+
}
140+
141+
// System namespace has been created
142+
_, err = client.Namespaces().Get(api.NamespaceSystem)
142143
return err
143144
}

0 commit comments

Comments
 (0)