Skip to content

Commit 99b8d6e

Browse files
Merge pull request #16682 from deads2k/server-47-collapse-init
Automatic merge from submit-queue (batch tested with PRs 16545, 16684, 16643, 16459, 16682). use the upstream admission plugin construction for most plugins We still have four special ones that really need to take config. That may or may not happen in 3.7 @aveshagarwal you can start to see the pay-off here. This has exposed some debt-y config problems where the controller configuration was being built from the admission config. /assign soltysh /assign mfojtik @mfojtik This collapses our admission path and eliminates drift for 3.7. We probably need to fix the build controller config problem (spoke with @bparees already) for 3.7.
2 parents 7dfa56f + b169ef9 commit 99b8d6e

21 files changed

+248
-565
lines changed

pkg/assets/apiserver/asset_apiserver.go

+14-17
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,6 @@ import (
3232
"github.com/openshift/origin/pkg/cmd/server/crypto"
3333
cmdutil "github.com/openshift/origin/pkg/cmd/util"
3434
oauthutil "github.com/openshift/origin/pkg/oauth/util"
35-
clusterresourceoverrideapi "github.com/openshift/origin/pkg/quota/admission/clusterresourceoverride/api"
3635
"github.com/openshift/origin/pkg/util/httprequest"
3736
oversion "github.com/openshift/origin/pkg/version"
3837
)
@@ -44,8 +43,7 @@ const (
4443
type AssetServerConfig struct {
4544
GenericConfig *genericapiserver.Config
4645

47-
Options oapi.AssetConfig
48-
LimitRequestOverrides *clusterresourceoverrideapi.ClusterResourceOverrideConfig
46+
Options oapi.AssetConfig
4947

5048
PublicURL url.URL
5149
}
@@ -218,20 +216,19 @@ func (c *completedAssetServerConfig) addWebConsoleConfig(serverMux *genericmux.P
218216

219217
// Generated web console config and server version
220218
config := assets.WebConsoleConfig{
221-
APIGroupAddr: masterURL.Host,
222-
APIGroupPrefix: server.APIGroupPrefix,
223-
MasterAddr: masterURL.Host,
224-
MasterPrefix: api.Prefix,
225-
KubernetesAddr: masterURL.Host,
226-
KubernetesPrefix: server.DefaultLegacyAPIPrefix,
227-
OAuthAuthorizeURI: oauthutil.OpenShiftOAuthAuthorizeURL(masterURL.String()),
228-
OAuthTokenURI: oauthutil.OpenShiftOAuthTokenURL(masterURL.String()),
229-
OAuthRedirectBase: c.Options.PublicURL,
230-
OAuthClientID: OpenShiftWebConsoleClientID,
231-
LogoutURI: c.Options.LogoutURL,
232-
LoggingURL: c.Options.LoggingPublicURL,
233-
MetricsURL: c.Options.MetricsPublicURL,
234-
LimitRequestOverrides: c.LimitRequestOverrides,
219+
APIGroupAddr: masterURL.Host,
220+
APIGroupPrefix: server.APIGroupPrefix,
221+
MasterAddr: masterURL.Host,
222+
MasterPrefix: api.Prefix,
223+
KubernetesAddr: masterURL.Host,
224+
KubernetesPrefix: server.DefaultLegacyAPIPrefix,
225+
OAuthAuthorizeURI: oauthutil.OpenShiftOAuthAuthorizeURL(masterURL.String()),
226+
OAuthTokenURI: oauthutil.OpenShiftOAuthTokenURL(masterURL.String()),
227+
OAuthRedirectBase: c.Options.PublicURL,
228+
OAuthClientID: OpenShiftWebConsoleClientID,
229+
LogoutURI: c.Options.LogoutURL,
230+
LoggingURL: c.Options.LoggingPublicURL,
231+
MetricsURL: c.Options.MetricsPublicURL,
235232
}
236233
kVersionInfo := kversion.Get()
237234
oVersionInfo := oversion.Get()

pkg/cmd/server/api/install/install.go

+4
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@ import (
55

66
"k8s.io/apimachinery/pkg/api/meta"
77
"k8s.io/apimachinery/pkg/runtime/schema"
8+
"k8s.io/apiserver/pkg/apis/apiserver"
9+
apiserverv1alpha1 "k8s.io/apiserver/pkg/apis/apiserver/v1alpha1"
810
"k8s.io/apiserver/pkg/apis/audit"
911
auditv1alpha1 "k8s.io/apiserver/pkg/apis/audit/v1alpha1"
1012

@@ -33,6 +35,8 @@ func init() {
3335
// policy file inside master-config.yaml
3436
audit.AddToScheme(configapi.Scheme)
3537
auditv1alpha1.AddToScheme(configapi.Scheme)
38+
apiserver.AddToScheme(configapi.Scheme)
39+
apiserverv1alpha1.AddToScheme(configapi.Scheme)
3640
}
3741

3842
func interfacesFor(version schema.GroupVersion) (*meta.VersionInterfaces, error) {

pkg/cmd/server/api/latest/helpers.go

+30
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,9 @@ import (
1111
"github.com/ghodss/yaml"
1212

1313
"k8s.io/apimachinery/pkg/runtime"
14+
"k8s.io/apimachinery/pkg/util/sets"
1415
kyaml "k8s.io/apimachinery/pkg/util/yaml"
16+
"k8s.io/apiserver/pkg/apis/apiserver"
1517

1618
configapi "github.com/openshift/origin/pkg/cmd/server/api"
1719
)
@@ -158,3 +160,31 @@ func IsAdmissionPluginActivated(reader io.Reader, defaultValue bool) (bool, erro
158160

159161
return !activationConfig.Disable, nil
160162
}
163+
164+
func ConvertOpenshiftAdmissionConfigToKubeAdmissionConfig(in map[string]configapi.AdmissionPluginConfig) (*apiserver.AdmissionConfiguration, error) {
165+
ret := &apiserver.AdmissionConfiguration{}
166+
167+
for _, pluginName := range sets.StringKeySet(in).List() {
168+
openshiftConfig := in[pluginName]
169+
170+
fmt.Printf("#### adding for %T\n", openshiftConfig.Configuration)
171+
kubeConfig := apiserver.AdmissionPluginConfiguration{
172+
Name: pluginName,
173+
Path: openshiftConfig.Location,
174+
}
175+
176+
if openshiftConfig.Configuration != nil {
177+
configBytes, err := runtime.Encode(Codec, openshiftConfig.Configuration)
178+
if err != nil {
179+
return nil, err
180+
}
181+
kubeConfig.Configuration = &runtime.Unknown{
182+
Raw: configBytes,
183+
}
184+
}
185+
186+
ret.Plugins = append(ret.Plugins, kubeConfig)
187+
}
188+
189+
return ret, nil
190+
}

pkg/cmd/server/api/latest/latest.go

+5-1
Original file line numberDiff line numberDiff line change
@@ -22,4 +22,8 @@ var OldestVersion = schema.GroupVersion{Group: "", Version: "v1"}
2222
// with a set of versions to choose.
2323
var Versions = []schema.GroupVersion{{Group: "", Version: "v1"}}
2424

25-
var Codec = serializer.NewCodecFactory(configapi.Scheme).LegacyCodec(schema.GroupVersion{Group: "", Version: "v1"})
25+
var Codec = serializer.NewCodecFactory(configapi.Scheme).LegacyCodec(
26+
schema.GroupVersion{Group: "", Version: "v1"},
27+
schema.GroupVersion{Group: "apiserver.k8s.io", Version: "v1alpha1"},
28+
schema.GroupVersion{Group: "audit.k8s.io", Version: "v1alpha1"},
29+
)

pkg/cmd/server/api/validation/master.go

+2-18
Original file line numberDiff line numberDiff line change
@@ -190,7 +190,6 @@ func ValidateMasterConfig(config *api.MasterConfig, fldPath *field.Path) Validat
190190

191191
if config.AdmissionConfig.PluginConfig != nil {
192192
validationResults.Append(ValidateAdmissionPluginConfig(config.AdmissionConfig.PluginConfig, fldPath.Child("admissionConfig", "pluginConfig")))
193-
validationResults.Append(ValidateAdmissionPluginConfigConflicts(config))
194193
}
195194
if len(config.AdmissionConfig.PluginOrderOverride) != 0 {
196195
validationResults.AddWarnings(field.Invalid(fldPath.Child("admissionConfig", "pluginOrderOverride"), config.AdmissionConfig.PluginOrderOverride, "specified admission ordering is being phased out. Convert to DefaultAdmissionConfig in admissionConfig.pluginConfig."))
@@ -671,10 +670,10 @@ func ValidateKubernetesMasterConfig(config *api.KubernetesMasterConfig, fldPath
671670
}
672671

673672
if config.AdmissionConfig.PluginConfig != nil {
674-
validationResults.Append(ValidateAdmissionPluginConfig(config.AdmissionConfig.PluginConfig, fldPath.Child("admissionConfig", "pluginConfig")))
673+
validationResults.AddErrors(field.Invalid(fldPath.Child("admissionConfig", "pluginConfig"), config.AdmissionConfig.PluginConfig, "separate admission chains are no longer allowed. Convert to admissionConfig.pluginConfig."))
675674
}
676675
if len(config.AdmissionConfig.PluginOrderOverride) != 0 {
677-
validationResults.AddWarnings(field.Invalid(fldPath.Child("admissionConfig", "pluginOrderOverride"), config.AdmissionConfig.PluginOrderOverride, "specified admission ordering is being phased out. Convert to DefaultAdmissionConfig in admissionConfig.pluginConfig."))
676+
validationResults.AddErrors(field.Invalid(fldPath.Child("admissionConfig", "pluginOrderOverride"), config.AdmissionConfig.PluginOrderOverride, "separate admission chains are no longer allowed. Convert to DefaultAdmissionConfig in admissionConfig.pluginConfig."))
678677
}
679678

680679
validationResults.Append(ValidateAPIServerExtendedArguments(config.APIServerArguments, fldPath.Child("apiServerArguments")))
@@ -795,21 +794,6 @@ func ValidateAdmissionPluginConfig(pluginConfig map[string]api.AdmissionPluginCo
795794

796795
}
797796

798-
func ValidateAdmissionPluginConfigConflicts(masterConfig *api.MasterConfig) ValidationResults {
799-
validationResults := ValidationResults{}
800-
801-
if masterConfig.KubernetesMasterConfig != nil {
802-
// check for collisions between openshift and kube plugin config
803-
for pluginName, kubeConfig := range masterConfig.KubernetesMasterConfig.AdmissionConfig.PluginConfig {
804-
if openshiftConfig, exists := masterConfig.AdmissionConfig.PluginConfig[pluginName]; exists && !reflect.DeepEqual(kubeConfig, openshiftConfig) {
805-
validationResults.AddWarnings(field.Invalid(field.NewPath("kubernetesMasterConfig", "admissionConfig", "pluginConfig").Key(pluginName), masterConfig.AdmissionConfig.PluginConfig[pluginName], "conflicts with kubernetesMasterConfig.admissionConfig.pluginConfig. Separate admission chains are being phased out. Convert to admissionConfig.pluginConfig."))
806-
}
807-
}
808-
}
809-
810-
return validationResults
811-
}
812-
813797
func ValidateIngressIPNetworkCIDR(config *api.MasterConfig, fldPath *field.Path) (errors field.ErrorList) {
814798
cidr := config.NetworkConfig.IngressIPNetworkCIDR
815799
if len(cidr) == 0 {

pkg/cmd/server/api/validation/master_test.go

+18-2
Original file line numberDiff line numberDiff line change
@@ -274,6 +274,7 @@ func TestValidateAdmissionPluginConfigConflicts(t *testing.T) {
274274
options configapi.MasterConfig
275275

276276
warningFields []string
277+
errorFields []string
277278
}{
278279
{
279280
name: "stock everything",
@@ -287,7 +288,7 @@ func TestValidateAdmissionPluginConfigConflicts(t *testing.T) {
287288
},
288289
},
289290
},
290-
warningFields: []string{"kubernetesMasterConfig.admissionConfig.pluginOrderOverride"},
291+
errorFields: []string{"kubernetesMasterConfig.admissionConfig.pluginOrderOverride"},
291292
},
292293
{
293294
name: "specified kube admission order 02",
@@ -393,7 +394,7 @@ func TestValidateAdmissionPluginConfigConflicts(t *testing.T) {
393394
},
394395
},
395396
},
396-
warningFields: []string{"kubernetesMasterConfig.admissionConfig.pluginConfig[foo]"},
397+
errorFields: []string{"kubernetesMasterConfig.admissionConfig.pluginConfig"},
397398
},
398399
}
399400

@@ -436,6 +437,21 @@ func TestValidateAdmissionPluginConfigConflicts(t *testing.T) {
436437
t.Errorf("%s: didn't find %q", tc.name, expectedField)
437438
}
438439
}
440+
441+
for _, expectedField := range tc.errorFields {
442+
found := false
443+
for _, result := range results.Errors {
444+
if result.Field == expectedField {
445+
found = true
446+
break
447+
}
448+
}
449+
450+
if !found {
451+
t.Errorf("%s: didn't find %q", tc.name, expectedField)
452+
}
453+
}
454+
439455
}
440456
}
441457

0 commit comments

Comments
 (0)