@@ -6,20 +6,19 @@ import (
6
6
7
7
"github.com/golang/glog"
8
8
kapierrors "k8s.io/apimachinery/pkg/api/errors"
9
+ "k8s.io/apimachinery/pkg/api/meta"
9
10
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
10
11
"k8s.io/apimachinery/pkg/runtime"
11
12
kutilerrors "k8s.io/apimachinery/pkg/util/errors"
12
13
"k8s.io/apiserver/pkg/admission"
14
+ "k8s.io/client-go/dynamic"
13
15
restclient "k8s.io/client-go/rest"
14
- "k8s.io/kubernetes/pkg/api/legacyscheme"
15
16
kclientset "k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset"
16
17
coreclient "k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/core/internalversion"
17
18
kadmission "k8s.io/kubernetes/pkg/kubeapiserver/admission"
18
- "k8s.io/kubernetes/pkg/kubectl/genericclioptions/resource"
19
19
20
20
buildapi "github.com/openshift/origin/pkg/build/apis/build"
21
- jenkinscontroller "github.com/openshift/origin/pkg/build/controller/jenkins"
22
- "github.com/openshift/origin/pkg/bulk"
21
+ jenkinscontroller "github.com/openshift/origin/pkg/build/admission/jenkinsbootstrapper/jenkins"
23
22
authenticationclient "github.com/openshift/origin/pkg/client/impersonatingclient"
24
23
oadmission "github.com/openshift/origin/pkg/cmd/server/admission"
25
24
configapi "github.com/openshift/origin/pkg/cmd/server/apis/config"
@@ -39,6 +38,7 @@ type jenkinsBootstrapper struct {
39
38
privilegedRESTClientConfig restclient.Config
40
39
serviceClient coreclient.ServicesGetter
41
40
templateClient templateclient.Interface
41
+ restMapper meta.RESTMapper
42
42
43
43
jenkinsConfig configapi.JenkinsPipelineConfig
44
44
}
@@ -47,6 +47,7 @@ var _ = oadmission.WantsJenkinsPipelineConfig(&jenkinsBootstrapper{})
47
47
var _ = oadmission .WantsRESTClientConfig (& jenkinsBootstrapper {})
48
48
var _ = oadmission .WantsOpenshiftInternalTemplateClient (& jenkinsBootstrapper {})
49
49
var _ = kadmission .WantsInternalKubeClientSet (& jenkinsBootstrapper {})
50
+ var _ = kadmission .WantsRESTMapper (& jenkinsBootstrapper {})
50
51
51
52
// NewJenkinsBootstrapper returns an admission plugin that will create required jenkins resources as the user if they are needed.
52
53
func NewJenkinsBootstrapper () admission.Interface {
@@ -99,35 +100,28 @@ func (a *jenkinsBootstrapper) Admit(attributes admission.Attributes) error {
99
100
}
100
101
101
102
impersonatingConfig := authenticationclient .NewImpersonatingConfig (attributes .GetUserInfo (), a .privilegedRESTClientConfig )
102
-
103
- var bulkErr error
104
-
105
- bulk := & bulk.Bulk {
106
- Mapper : & resource.Mapper {
107
- RESTMapper : legacyscheme .Registry .RESTMapper (),
108
- ObjectTyper : legacyscheme .Scheme ,
109
- ClientMapper : bulk .ClientMapperFromConfig (& impersonatingConfig ),
110
- },
111
- Op : bulk .Create ,
112
- After : func (info * resource.Info , err error ) bool {
113
- if kapierrors .IsAlreadyExists (err ) {
114
- return false
115
- }
116
- if err != nil {
117
- bulkErr = err
118
- return true
119
- }
120
- return false
121
- },
103
+ dynamicClient , err := dynamic .NewForConfig (& impersonatingConfig )
104
+ if err != nil {
105
+ return err
122
106
}
123
- // we're intercepting the error we care about using After
124
- bulk .Run (objects , namespace )
125
- if bulkErr != nil {
126
- return bulkErr
107
+
108
+ for _ , toCreate := range objects .Items {
109
+ restMapping , mappingErr := a .restMapper .RESTMapping (toCreate .GroupVersionKind ().GroupKind (), toCreate .GroupVersionKind ().Version )
110
+ if mappingErr != nil {
111
+ return kapierrors .NewInternalError (mappingErr )
112
+ }
113
+
114
+ _ , createErr := dynamicClient .Resource (restMapping .Resource ).Namespace (namespace ).Create (& toCreate )
115
+ // it is safe to ignore all such errors since stopOnErr will only let these through for the default role bindings
116
+ if kapierrors .IsAlreadyExists (createErr ) {
117
+ continue
118
+ }
119
+ if createErr != nil {
120
+ return kapierrors .NewInternalError (createErr )
121
+ }
127
122
}
128
123
129
124
glog .V (1 ).Infof ("Jenkins Pipeline service %q created" , svcName )
130
-
131
125
return nil
132
126
133
127
}
@@ -159,12 +153,19 @@ func (a *jenkinsBootstrapper) SetOpenshiftInternalTemplateClient(c templateclien
159
153
a .templateClient = c
160
154
}
161
155
156
+ func (a * jenkinsBootstrapper ) SetRESTMapper (restMapper meta.RESTMapper ) {
157
+ a .restMapper = restMapper
158
+ }
159
+
162
160
func (a * jenkinsBootstrapper ) ValidateInitialization () error {
163
161
if a .serviceClient == nil {
164
162
return fmt .Errorf ("missing serviceClient" )
165
163
}
166
164
if a .templateClient == nil {
167
165
return fmt .Errorf ("missing templateClient" )
168
166
}
167
+ if a .restMapper == nil {
168
+ return fmt .Errorf ("missing restMapper" )
169
+ }
169
170
return nil
170
171
}
0 commit comments