Skip to content

Commit 7b225ea

Browse files
Merge pull request #15580 from jim-minter/issue15405
Automatic merge from submit-queue create template-service-broker SA during API server startup fixes #15405 (builds on #15568)
2 parents dc4d146 + 00ea18e commit 7b225ea

File tree

1 file changed

+37
-4
lines changed

1 file changed

+37
-4
lines changed

pkg/openservicebroker/server/apiserver.go

+37-4
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,27 @@
11
package server
22

33
import (
4+
"fmt"
5+
"time"
6+
7+
kapierrors "k8s.io/apimachinery/pkg/api/errors"
8+
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
9+
utilruntime "k8s.io/apimachinery/pkg/util/runtime"
10+
"k8s.io/apimachinery/pkg/util/wait"
11+
genericapiserver "k8s.io/apiserver/pkg/server"
12+
"k8s.io/kubernetes/pkg/api"
413
kclientsetinternal "k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset"
514

615
"github.com/openshift/origin/pkg/cmd/server/bootstrappolicy"
716
templateapi "github.com/openshift/origin/pkg/template/apis/template"
817
templateinformer "github.com/openshift/origin/pkg/template/generated/informers/internalversion"
918
templateservicebroker "github.com/openshift/origin/pkg/template/servicebroker"
10-
genericapiserver "k8s.io/apiserver/pkg/server"
1119
)
1220

21+
// TODO: this file breaks the layering of pkg/openservicebroker and
22+
// pkg/template/servicebroker; assuming that the latter will move out of origin
23+
// in 3.7, will leave as is for now.
24+
1325
type TemplateServiceBrokerConfig struct {
1426
GenericConfig *genericapiserver.Config
1527

@@ -62,9 +74,30 @@ func (c completedTemplateServiceBrokerConfig) New(delegationTarget genericapiser
6274

6375
// TODO, when/if the TSB becomes a separate entity, this should stop creating the SA and instead die if it cannot find it
6476
s.GenericAPIServer.AddPostStartHook("template-service-broker-ensure-service-account", func(context genericapiserver.PostStartHookContext) error {
65-
// TODO jim-minter - this is the spot to create the namespace if needed and create the SA if needed.
66-
// be tolerant of failures and retry a few times.
67-
return nil
77+
kc, err := kclientsetinternal.NewForConfig(context.LoopbackClientConfig)
78+
if err != nil {
79+
utilruntime.HandleError(fmt.Errorf("template service broker: failed to get client: %v", err))
80+
return err
81+
}
82+
83+
err = wait.PollImmediate(time.Second, 30*time.Second, func() (done bool, err error) {
84+
kc.Namespaces().Create(&api.Namespace{ObjectMeta: metav1.ObjectMeta{Name: bootstrappolicy.DefaultOpenShiftInfraNamespace}})
85+
86+
_, err = kc.ServiceAccounts(bootstrappolicy.DefaultOpenShiftInfraNamespace).Create(&api.ServiceAccount{ObjectMeta: metav1.ObjectMeta{Name: bootstrappolicy.InfraTemplateServiceBrokerServiceAccountName}})
87+
switch {
88+
case err == nil || kapierrors.IsAlreadyExists(err):
89+
done, err = true, nil
90+
case kapierrors.IsNotFound(err):
91+
err = nil
92+
}
93+
94+
return
95+
})
96+
97+
if err != nil {
98+
utilruntime.HandleError(fmt.Errorf("creation of template-service-broker SA failed: %v", err))
99+
}
100+
return err
68101
})
69102

70103
return s, nil

0 commit comments

Comments
 (0)