@@ -5,21 +5,20 @@ import (
5
5
"io"
6
6
"io/ioutil"
7
7
"net"
8
+ "os"
8
9
"reflect"
9
10
10
11
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
11
12
"k8s.io/apimachinery/pkg/util/sets"
12
13
"k8s.io/apiserver/pkg/admission"
13
14
"k8s.io/apiserver/pkg/admission/plugin/namespace/lifecycle"
14
- kclientsetinternal "k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset"
15
15
noderestriction "k8s.io/kubernetes/plugin/pkg/admission/noderestriction"
16
16
saadmit "k8s.io/kubernetes/plugin/pkg/admission/serviceaccount"
17
17
storageclassdefaultadmission "k8s.io/kubernetes/plugin/pkg/admission/storageclass/setdefault"
18
18
19
19
oadmission "github.com/openshift/origin/pkg/cmd/server/admission"
20
20
configapi "github.com/openshift/origin/pkg/cmd/server/api"
21
- configlatest "github.com/openshift/origin/pkg/cmd/server/api/latest"
22
- "github.com/openshift/origin/pkg/cmd/util/pluginconfig"
21
+ configapilatest "github.com/openshift/origin/pkg/cmd/server/api/latest"
23
22
imageadmission "github.com/openshift/origin/pkg/image/admission"
24
23
imagepolicy "github.com/openshift/origin/pkg/image/admission/imagepolicy/api"
25
24
ingressadmission "github.com/openshift/origin/pkg/ingress/admission"
@@ -131,12 +130,36 @@ func fixupAdmissionPlugins(plugins []string) []string {
131
130
132
131
func NewAdmissionChains (
133
132
options configapi.MasterConfig ,
134
- kubeClientSet kclientsetinternal.Interface ,
135
133
admissionInitializer admission.PluginInitializer ,
136
134
) (admission.Interface , error ) {
137
135
admissionPluginConfigFilename := ""
138
136
if len (options .KubernetesMasterConfig .APIServerArguments ["admission-control-config-file" ]) > 0 {
139
137
admissionPluginConfigFilename = options .KubernetesMasterConfig .APIServerArguments ["admission-control-config-file" ][0 ]
138
+
139
+ } else {
140
+ pluginConfig := map [string ]configapi.AdmissionPluginConfig {}
141
+ for pluginName , config := range options .AdmissionConfig .PluginConfig {
142
+ pluginConfig [pluginName ] = config
143
+ }
144
+ upstreamAdmissionConfig , err := configapilatest .ConvertOpenshiftAdmissionConfigToKubeAdmissionConfig (pluginConfig )
145
+ if err != nil {
146
+ return nil , err
147
+ }
148
+ configBytes , err := configapilatest .WriteYAML (upstreamAdmissionConfig )
149
+ if err != nil {
150
+ return nil , err
151
+ }
152
+
153
+ tempFile , err := ioutil .TempFile ("" , "master-config.yaml" )
154
+ if err != nil {
155
+ return nil , err
156
+ }
157
+ defer os .Remove (tempFile .Name ())
158
+ if _ , err := tempFile .Write (configBytes ); err != nil {
159
+ return nil , err
160
+ }
161
+ tempFile .Close ()
162
+ admissionPluginConfigFilename = tempFile .Name ()
140
163
}
141
164
142
165
admissionPluginNames := combinedAdmissionControlPlugins
@@ -145,13 +168,8 @@ func NewAdmissionChains(
145
168
}
146
169
admissionPluginNames = fixupAdmissionPlugins (admissionPluginNames )
147
170
148
- // if we have a unified chain, build the combined config
149
- pluginConfig := map [string ]configapi.AdmissionPluginConfig {}
150
- for pluginName , config := range options .AdmissionConfig .PluginConfig {
151
- pluginConfig [pluginName ] = config
152
- }
171
+ admissionChain , err := newAdmissionChainFunc (admissionPluginNames , admissionPluginConfigFilename , options , admissionInitializer )
153
172
154
- admissionChain , err := newAdmissionChainFunc (admissionPluginNames , admissionPluginConfigFilename , pluginConfig , options , kubeClientSet , admissionInitializer )
155
173
if err != nil {
156
174
return nil , err
157
175
}
@@ -162,12 +180,11 @@ func NewAdmissionChains(
162
180
// newAdmissionChainFunc is for unit testing only. You should NEVER OVERRIDE THIS outside of a unit test.
163
181
var newAdmissionChainFunc = newAdmissionChain
164
182
165
- func newAdmissionChain (pluginNames []string , admissionConfigFilename string , pluginConfig map [ string ]configapi. AdmissionPluginConfig , options configapi.MasterConfig , kubeClientSet kclientsetinternal. Interface , admissionInitializer admission.PluginInitializer ) (admission.Interface , error ) {
183
+ func newAdmissionChain (pluginNames []string , admissionConfigFilename string , options configapi.MasterConfig , admissionInitializer admission.PluginInitializer ) (admission.Interface , error ) {
166
184
plugins := []admission.Interface {}
167
185
for _ , pluginName := range pluginNames {
168
186
var (
169
- plugin admission.Interface
170
- skipInitialization bool
187
+ plugin admission.Interface
171
188
)
172
189
173
190
switch pluginName {
@@ -189,6 +206,7 @@ func newAdmissionChain(pluginNames []string, admissionConfigFilename string, plu
189
206
return nil , err
190
207
}
191
208
plugin = lc
209
+ admissionInitializer .Initialize (plugin )
192
210
193
211
case serviceadmit .ExternalIPPluginName :
194
212
// this needs to be moved upstream to be part of core config
@@ -202,6 +220,7 @@ func newAdmissionChain(pluginNames []string, admissionConfigFilename string, plu
202
220
allowIngressIP = true
203
221
}
204
222
plugin = serviceadmit .NewExternalIPRanger (reject , admit , allowIngressIP )
223
+ admissionInitializer .Initialize (plugin )
205
224
206
225
case serviceadmit .RestrictedEndpointsPluginName :
207
226
// we need to set some customer parameters, so create by hand
@@ -216,46 +235,32 @@ func newAdmissionChain(pluginNames []string, admissionConfigFilename string, plu
216
235
return nil , err
217
236
}
218
237
plugin = serviceadmit .NewRestrictedEndpointsAdmission (restrictedNetworks )
238
+ admissionInitializer .Initialize (plugin )
219
239
220
240
case saadmit .PluginName :
221
241
// we need to set some custom parameters on the service account admission controller, so create that one by hand
222
242
saAdmitter := saadmit .NewServiceAccount ()
223
- saAdmitter .SetInternalKubeClientSet (kubeClientSet )
224
243
saAdmitter .LimitSecretReferences = options .ServiceAccountConfig .LimitSecretReferences
225
244
plugin = saAdmitter
245
+ admissionInitializer .Initialize (plugin )
226
246
227
247
default :
228
- configFile , err := pluginconfig .GetAdmissionConfigurationFile (pluginConfig , pluginName , admissionConfigFilename )
229
- if err != nil {
230
- return nil , err
231
- }
232
- configReader , err := admission .ReadAdmissionConfiguration ([]string {pluginName }, configFile )
248
+ pluginsConfigProvider , err := admission .ReadAdmissionConfiguration ([]string {pluginName }, admissionConfigFilename )
233
249
if err != nil {
234
250
return nil , err
235
251
}
236
- pluginConfigReader , err := configReader .ConfigFor (pluginName )
237
- if err != nil {
238
- return nil , err
239
- }
240
-
241
- plugin , err = OriginAdmissionPlugins .InitPlugin (pluginName , pluginConfigReader , admissionInitializer )
252
+ plugin , err = OriginAdmissionPlugins .NewFromPlugins ([]string {pluginName }, pluginsConfigProvider , admissionInitializer )
242
253
if err != nil {
243
254
// should have been caught with validation
244
255
return nil , err
245
256
}
246
257
if plugin == nil {
247
258
continue
248
259
}
249
-
250
- // skip initialization below because admission.InitPlugin does all the work
251
- skipInitialization = true
252
260
}
253
261
254
262
plugins = append (plugins , plugin )
255
263
256
- if ! skipInitialization {
257
- admissionInitializer .Initialize (plugin )
258
- }
259
264
}
260
265
261
266
// ensure that plugins have been properly initialized
@@ -307,7 +312,7 @@ func filterEnableAdmissionConfigs(delegate admission.Factory) admission.Factory
307
312
}
308
313
// if the config isn't a DefaultAdmissionConfig, then assume we're enabled (we were called after all)
309
314
// if the config *is* a DefaultAdmissionConfig and it explicitly said
310
- obj , err := configlatest .ReadYAML (config1 )
315
+ obj , err := configapilatest .ReadYAML (config1 )
311
316
// if we can't read it, let the plugin deal with it
312
317
if err != nil {
313
318
return delegate (config2 )
0 commit comments