From f14a3a5e190ac44d231c0356c9a1a69ff5d77267 Mon Sep 17 00:00:00 2001 From: David Eads Date: Thu, 22 Mar 2018 16:10:34 -0400 Subject: [PATCH] remove disabledfeatures from master config --- hack/test-cmd.sh | 4 - pkg/cmd/openshift-apiserver/server.go | 5 - .../controller/config.go | 11 +- .../controller/image.go | 91 +++----- .../controller_manager.go | 21 -- pkg/cmd/openshift-kube-apiserver/server.go | 4 - pkg/cmd/server/apis/config/helpers.go | 74 ------ pkg/cmd/server/apis/config/types.go | 18 -- pkg/cmd/server/apis/config/types_test.go | 215 ------------------ pkg/cmd/server/apis/config/util.go | 6 - .../config/v1/testdata/master-config.yaml | 1 - pkg/cmd/server/apis/config/v1/types.go | 3 - .../server/apis/config/validation/master.go | 2 - .../apis/config/validation/validation.go | 12 - pkg/cmd/server/origin/master.go | 2 - .../server/origin/oauth_apiserver_adapter.go | 5 +- pkg/cmd/server/origin/openshift_apiserver.go | 5 - .../origin/reststorage_validation_test.go | 1 - pkg/cmd/server/start/start_master.go | 9 - 19 files changed, 38 insertions(+), 451 deletions(-) delete mode 100644 pkg/cmd/server/apis/config/types_test.go delete mode 100644 pkg/cmd/server/apis/config/util.go diff --git a/hack/test-cmd.sh b/hack/test-cmd.sh index ab8c9ca363f4..e20ef3d492bc 100755 --- a/hack/test-cmd.sh +++ b/hack/test-cmd.sh @@ -77,10 +77,6 @@ os::cmd::expect_success_and_not_text "KUBECONFIG='${MASTER_CONFIG_DIR}/admin.kub os::cmd::expect_success_and_not_text "KUBECONFIG='' oc version" "Missing or incomplete configuration info" os::test::junit::declare_suite_end -os::test::junit::declare_suite_start "cmd/config" -os::cmd::expect_success_and_text "cat ${MASTER_CONFIG_DIR}/master-config.yaml" 'disabledFeatures: null' -os::test::junit::declare_suite_end - os::start::master # profile the cli commands diff --git a/pkg/cmd/openshift-apiserver/server.go b/pkg/cmd/openshift-apiserver/server.go index bd3636bc17b6..34a970afc3c9 100644 --- a/pkg/cmd/openshift-apiserver/server.go +++ b/pkg/cmd/openshift-apiserver/server.go @@ -1,8 +1,6 @@ package openshift_apiserver import ( - "strings" - "github.com/golang/glog" kerrors "k8s.io/apimachinery/pkg/api/errors" @@ -55,9 +53,6 @@ func RunOpenShiftAPIServer(masterConfig *configapi.MasterConfig) error { glog.Infof("Starting master on %s (%s)", masterConfig.ServingInfo.BindAddress, version.Get().String()) glog.Infof("Public master address is %s", masterConfig.MasterPublicURL) - if len(masterConfig.DisabledFeatures) > 0 { - glog.V(4).Infof("Disabled features: %s", strings.Join(masterConfig.DisabledFeatures, ", ")) - } imageTemplate := variable.NewDefaultImageTemplate() imageTemplate.Format = masterConfig.ImageConfig.Format imageTemplate.Latest = masterConfig.ImageConfig.Latest diff --git a/pkg/cmd/openshift-controller-manager/controller/config.go b/pkg/cmd/openshift-controller-manager/controller/config.go index 2f6785ab126a..83007b79a5e3 100644 --- a/pkg/cmd/openshift-controller-manager/controller/config.go +++ b/pkg/cmd/openshift-controller-manager/controller/config.go @@ -58,7 +58,6 @@ type OpenshiftControllerConfig struct { DeployerControllerConfig DeployerControllerConfig DeploymentConfigControllerConfig DeploymentConfigControllerConfig - ImageTriggerControllerConfig ImageTriggerControllerConfig ImageSignatureImportControllerConfig ImageSignatureImportControllerConfig ImageImportControllerConfig ImageImportControllerConfig @@ -90,7 +89,7 @@ func (c *OpenshiftControllerConfig) GetControllerInitializers() (map[string]Init ret["openshift.io/deployer"] = c.DeployerControllerConfig.RunController ret["openshift.io/deploymentconfig"] = c.DeploymentConfigControllerConfig.RunController - ret["openshift.io/image-trigger"] = c.ImageTriggerControllerConfig.RunController + ret["openshift.io/image-trigger"] = RunImageTriggerController ret["openshift.io/image-import"] = c.ImageImportControllerConfig.RunController ret["openshift.io/image-signature-import"] = c.ImageSignatureImportControllerConfig.RunController @@ -146,14 +145,6 @@ func BuildOpenshiftControllerConfig(options configapi.MasterConfig) (*OpenshiftC Codec: annotationCodec, } - ret.ImageTriggerControllerConfig = ImageTriggerControllerConfig{ - HasBuilderEnabled: options.DisabledFeatures.Has(configapi.FeatureBuilder), - // TODO: make these consts in configapi - HasDeploymentsEnabled: options.DisabledFeatures.Has("triggers.image.openshift.io/deployments"), - HasDaemonSetsEnabled: options.DisabledFeatures.Has("triggers.image.openshift.io/daemonsets"), - HasStatefulSetsEnabled: options.DisabledFeatures.Has("triggers.image.openshift.io/statefulsets"), - HasCronJobsEnabled: options.DisabledFeatures.Has("triggers.image.openshift.io/cronjobs"), - } ret.ImageImportControllerConfig = ImageImportControllerConfig{ MaxScheduledImageImportsPerMinute: options.ImagePolicyConfig.MaxScheduledImageImportsPerMinute, ResyncPeriod: 10 * time.Minute, diff --git a/pkg/cmd/openshift-controller-manager/controller/image.go b/pkg/cmd/openshift-controller-manager/controller/image.go index c9aa1ad67860..f290c31b010e 100644 --- a/pkg/cmd/openshift-controller-manager/controller/image.go +++ b/pkg/cmd/openshift-controller-manager/controller/image.go @@ -27,16 +27,7 @@ import ( triggerdeploymentconfigs "github.com/openshift/origin/pkg/image/trigger/deploymentconfigs" ) -type ImageTriggerControllerConfig struct { - HasBuilderEnabled bool - HasDeploymentsEnabled bool - HasDaemonSetsEnabled bool - HasStatefulSetsEnabled bool - HasCronJobsEnabled bool -} - -func (c *ImageTriggerControllerConfig) RunController(ctx ControllerContext) (bool, error) { - //streamInformer := ctx.ImageInformers.Image().InternalVersion().ImageStreams().Informer() +func RunImageTriggerController(ctx ControllerContext) (bool, error) { informer := ctx.ImageInformers.Image().InternalVersion().ImageStreams() buildClient, err := ctx.ClientBuilder.OpenshiftInternalBuildClient(bootstrappolicy.InfraImageTriggerControllerServiceAccountName) @@ -63,51 +54,41 @@ func (c *ImageTriggerControllerConfig) RunController(ctx ControllerContext) (boo Reactor: &triggerdeploymentconfigs.DeploymentConfigReactor{Client: appsClient.Apps()}, }, } - if !c.HasBuilderEnabled { - sources = append(sources, imagetriggercontroller.TriggerSource{ - Resource: schema.GroupResource{Group: "build.openshift.io", Resource: "buildconfigs"}, - Informer: ctx.BuildInformers.Build().InternalVersion().BuildConfigs().Informer(), - Store: ctx.BuildInformers.Build().InternalVersion().BuildConfigs().Informer().GetIndexer(), - TriggerFn: triggerbuildconfigs.NewBuildConfigTriggerIndexer, - Reactor: triggerbuildconfigs.NewBuildConfigReactor(bcInstantiator, kclient.Core().RESTClient()), - }) - } - if !c.HasDeploymentsEnabled { - sources = append(sources, imagetriggercontroller.TriggerSource{ - Resource: schema.GroupResource{Group: "extensions", Resource: "deployments"}, - Informer: ctx.ExternalKubeInformers.Extensions().V1beta1().Deployments().Informer(), - Store: ctx.ExternalKubeInformers.Extensions().V1beta1().Deployments().Informer().GetIndexer(), - TriggerFn: triggerannotations.NewAnnotationTriggerIndexer, - Reactor: &triggerannotations.AnnotationReactor{Updater: updater}, - }) - } - if !c.HasDaemonSetsEnabled { - sources = append(sources, imagetriggercontroller.TriggerSource{ - Resource: schema.GroupResource{Group: "extensions", Resource: "daemonsets"}, - Informer: ctx.ExternalKubeInformers.Extensions().V1beta1().DaemonSets().Informer(), - Store: ctx.ExternalKubeInformers.Extensions().V1beta1().DaemonSets().Informer().GetIndexer(), - TriggerFn: triggerannotations.NewAnnotationTriggerIndexer, - Reactor: &triggerannotations.AnnotationReactor{Updater: updater}, - }) - } - if !c.HasStatefulSetsEnabled { - sources = append(sources, imagetriggercontroller.TriggerSource{ - Resource: schema.GroupResource{Group: "apps", Resource: "statefulsets"}, - Informer: ctx.ExternalKubeInformers.Apps().V1beta1().StatefulSets().Informer(), - Store: ctx.ExternalKubeInformers.Apps().V1beta1().StatefulSets().Informer().GetIndexer(), - TriggerFn: triggerannotations.NewAnnotationTriggerIndexer, - Reactor: &triggerannotations.AnnotationReactor{Updater: updater}, - }) - } - if !c.HasCronJobsEnabled { - sources = append(sources, imagetriggercontroller.TriggerSource{ - Resource: schema.GroupResource{Group: "batch", Resource: "cronjobs"}, - Informer: ctx.ExternalKubeInformers.Batch().V2alpha1().CronJobs().Informer(), - Store: ctx.ExternalKubeInformers.Batch().V2alpha1().CronJobs().Informer().GetIndexer(), - TriggerFn: triggerannotations.NewAnnotationTriggerIndexer, - Reactor: &triggerannotations.AnnotationReactor{Updater: updater}, - }) - } + sources = append(sources, imagetriggercontroller.TriggerSource{ + Resource: schema.GroupResource{Group: "build.openshift.io", Resource: "buildconfigs"}, + Informer: ctx.BuildInformers.Build().InternalVersion().BuildConfigs().Informer(), + Store: ctx.BuildInformers.Build().InternalVersion().BuildConfigs().Informer().GetIndexer(), + TriggerFn: triggerbuildconfigs.NewBuildConfigTriggerIndexer, + Reactor: triggerbuildconfigs.NewBuildConfigReactor(bcInstantiator, kclient.Core().RESTClient()), + }) + sources = append(sources, imagetriggercontroller.TriggerSource{ + Resource: schema.GroupResource{Group: "extensions", Resource: "deployments"}, + Informer: ctx.ExternalKubeInformers.Extensions().V1beta1().Deployments().Informer(), + Store: ctx.ExternalKubeInformers.Extensions().V1beta1().Deployments().Informer().GetIndexer(), + TriggerFn: triggerannotations.NewAnnotationTriggerIndexer, + Reactor: &triggerannotations.AnnotationReactor{Updater: updater}, + }) + sources = append(sources, imagetriggercontroller.TriggerSource{ + Resource: schema.GroupResource{Group: "extensions", Resource: "daemonsets"}, + Informer: ctx.ExternalKubeInformers.Extensions().V1beta1().DaemonSets().Informer(), + Store: ctx.ExternalKubeInformers.Extensions().V1beta1().DaemonSets().Informer().GetIndexer(), + TriggerFn: triggerannotations.NewAnnotationTriggerIndexer, + Reactor: &triggerannotations.AnnotationReactor{Updater: updater}, + }) + sources = append(sources, imagetriggercontroller.TriggerSource{ + Resource: schema.GroupResource{Group: "apps", Resource: "statefulsets"}, + Informer: ctx.ExternalKubeInformers.Apps().V1beta1().StatefulSets().Informer(), + Store: ctx.ExternalKubeInformers.Apps().V1beta1().StatefulSets().Informer().GetIndexer(), + TriggerFn: triggerannotations.NewAnnotationTriggerIndexer, + Reactor: &triggerannotations.AnnotationReactor{Updater: updater}, + }) + sources = append(sources, imagetriggercontroller.TriggerSource{ + Resource: schema.GroupResource{Group: "batch", Resource: "cronjobs"}, + Informer: ctx.ExternalKubeInformers.Batch().V2alpha1().CronJobs().Informer(), + Store: ctx.ExternalKubeInformers.Batch().V2alpha1().CronJobs().Informer().GetIndexer(), + TriggerFn: triggerannotations.NewAnnotationTriggerIndexer, + Reactor: &triggerannotations.AnnotationReactor{Updater: updater}, + }) go imagetriggercontroller.NewTriggerController( broadcaster, diff --git a/pkg/cmd/openshift-controller-manager/controller_manager.go b/pkg/cmd/openshift-controller-manager/controller_manager.go index f4ac15bbe229..b717f3ea2a96 100644 --- a/pkg/cmd/openshift-controller-manager/controller_manager.go +++ b/pkg/cmd/openshift-controller-manager/controller_manager.go @@ -4,7 +4,6 @@ import ( "fmt" "net/http" "os" - "strings" "time" "github.com/golang/glog" @@ -12,7 +11,6 @@ import ( "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" kutilerrors "k8s.io/apimachinery/pkg/util/errors" - "k8s.io/apimachinery/pkg/util/sets" "k8s.io/apimachinery/pkg/util/wait" clientgoclientset "k8s.io/client-go/kubernetes" kclientsetexternal "k8s.io/client-go/kubernetes" @@ -63,9 +61,6 @@ func runOpenShiftControllerManager(masterConfig *configapi.MasterConfig, runServ // you can't double run healthz, so only do this next bit if we aren't starting the API if runServer { glog.Infof("Starting controllers on %s (%s)", masterConfig.ServingInfo.BindAddress, version.Get().String()) - if len(masterConfig.DisabledFeatures) > 0 { - glog.V(4).Infof("Disabled features: %s", strings.Join(masterConfig.DisabledFeatures, ", ")) - } if err := origincontrollers.RunControllerServer(masterConfig.ServingInfo, clientGoKubeExternal); err != nil { return err @@ -280,14 +275,7 @@ func startControllers(options configapi.MasterConfig, allocationController origi return err } - excludedControllers := getExcludedControllers(options) - for controllerName, initFn := range openshiftControllerInitializers { - // TODO remove this. Only call one to start to prove the principle - if excludedControllers.Has(controllerName) { - glog.Warningf("%q is skipped", controllerName) - continue - } if !controllerContext.IsControllerEnabled(controllerName) { glog.Warningf("%q is disabled", controllerName) continue @@ -310,12 +298,3 @@ func startControllers(options configapi.MasterConfig, allocationController origi return nil } - -func getExcludedControllers(options configapi.MasterConfig) sets.String { - excludedControllers := sets.NewString() - if !configapi.IsBuildEnabled(&options) { - excludedControllers.Insert("openshift.io/build") - excludedControllers.Insert("openshift.io/build-config-change") - } - return excludedControllers -} diff --git a/pkg/cmd/openshift-kube-apiserver/server.go b/pkg/cmd/openshift-kube-apiserver/server.go index 39703a7e2b42..8aae7e33daf3 100644 --- a/pkg/cmd/openshift-kube-apiserver/server.go +++ b/pkg/cmd/openshift-kube-apiserver/server.go @@ -2,7 +2,6 @@ package openshift_kube_apiserver import ( "fmt" - "strings" "github.com/golang/glog" @@ -67,9 +66,6 @@ func RunOpenShiftKubeAPIServerServer(masterConfig *configapi.MasterConfig) error glog.Infof("Starting master on %s (%s)", masterConfig.ServingInfo.BindAddress, version.Get().String()) glog.Infof("Public master address is %s", masterConfig.MasterPublicURL) - if len(masterConfig.DisabledFeatures) > 0 { - glog.V(4).Infof("Disabled features: %s", strings.Join(masterConfig.DisabledFeatures, ", ")) - } imageTemplate := variable.NewDefaultImageTemplate() imageTemplate.Format = masterConfig.ImageConfig.Format imageTemplate.Latest = masterConfig.ImageConfig.Latest diff --git a/pkg/cmd/server/apis/config/helpers.go b/pkg/cmd/server/apis/config/helpers.go index cba6960ffa20..cc17c1bc63ca 100644 --- a/pkg/cmd/server/apis/config/helpers.go +++ b/pkg/cmd/server/apis/config/helpers.go @@ -23,80 +23,6 @@ import ( cmdutil "github.com/openshift/origin/pkg/cmd/util" ) -var ( - // Maps lower-cased feature flag names and aliases to their canonical names. - knownOpenShiftFeatureSet map[string]string -) - -func init() { - knownOpenShiftFeatureSet = make(map[string]string, len(KnownOpenShiftFeatures)) - for _, feature := range KnownOpenShiftFeatures { - knownOpenShiftFeatureSet[strings.ToLower(feature)] = feature - } - for alias, feature := range FeatureAliases { - knownOpenShiftFeatureSet[strings.ToLower(alias)] = feature - } -} - -// NormalizeOpenShiftFeature returns canonical name for given OpenShift feature -// flag or an alias if known. Otherwise lower-cased name is returned. -func NormalizeOpenShiftFeature(name string) (string, bool) { - name = strings.ToLower(name) - if feature, ok := knownOpenShiftFeatureSet[name]; ok { - return feature, true - } - return name, false -} - -// Add extends feature list with given valid items. They are appended -// unless already present. -func (fl *FeatureList) Add(items ...string) error { - unknown := []string{} - toAppend := make([]string, 0, len(items)) - for _, item := range items { - feature, known := NormalizeOpenShiftFeature(item) - if !known { - unknown = append(unknown, item) - continue - } - if fl.Has(feature) { - continue - } - toAppend = append(toAppend, feature) - } - if len(unknown) > 0 { - return fmt.Errorf("unknown features: %s", strings.Join(unknown, ", ")) - } - *fl = append(*fl, toAppend...) - return nil -} - -// Delete removes given items from feature list while keeping its original -// order. -func (fl *FeatureList) Delete(items ...string) { - toDelete := FeatureList(items) - newList := []string{} - for _, item := range *fl { - if !toDelete.Has(item) { - newList = append(newList, item) - } - } - *fl = newList -} - -// Has returns true if given feature exists in feature list. The check is -// case-insensitive. -func (fl FeatureList) Has(feature string) bool { - normalized, _ := NormalizeOpenShiftFeature(feature) - for _, item := range fl { - itemNormalized, _ := NormalizeOpenShiftFeature(item) - if normalized == itemNormalized { - return true - } - } - return false -} - // ParseNamespaceAndName returns back the namespace and name (empty if something goes wrong), for a given string. // This is useful when pointing to a particular resource inside of our config. func ParseNamespaceAndName(in string) (string, string, error) { diff --git a/pkg/cmd/server/apis/config/types.go b/pkg/cmd/server/apis/config/types.go index 65da1d57fa7b..82b41e8f94b6 100644 --- a/pkg/cmd/server/apis/config/types.go +++ b/pkg/cmd/server/apis/config/types.go @@ -9,10 +9,6 @@ import ( // A new entry shall be added to FeatureAliases for every change to following values. const ( - FeatureBuilder = `Builder` - FeatureS2I = `S2IBuilder` - FeatureWebConsole = `WebConsole` - AllVersions = "*" ) @@ -135,15 +131,6 @@ var ( KnownKubeAPIGroups = sets.StringKeySet(KubeAPIGroupsToAllowedVersions) KnownOriginAPIGroups = sets.StringKeySet(OriginAPIGroupsToAllowedVersions) - // FeatureAliases maps deprecated names of feature flag to their canonical - // names. Aliases must be lower-cased for O(1) lookup. - FeatureAliases = map[string]string{ - "s2i builder": FeatureS2I, - "web console": FeatureWebConsole, - } - KnownOpenShiftFeatures = []string{FeatureBuilder, FeatureS2I, FeatureWebConsole} - AtomicDisabledFeatures = []string{FeatureBuilder, FeatureS2I, FeatureWebConsole} - // List public registries that we are allowing to import images from by default. // By default all registries have set to be "secure", iow. the port for them is // defaulted to "443". @@ -330,8 +317,6 @@ const ( ControllersAll = "*" ) -type FeatureList []string - // +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object type MasterConfig struct { @@ -379,9 +364,6 @@ type MasterConfig struct { ControllerConfig ControllerConfig - // Allow to disable OpenShift components - DisabledFeatures FeatureList - // EtcdStorageConfig contains information about how API resources are // stored in Etcd. These values are only relevant when etcd is the // backing store for the cluster. diff --git a/pkg/cmd/server/apis/config/types_test.go b/pkg/cmd/server/apis/config/types_test.go deleted file mode 100644 index fd562ebfc51b..000000000000 --- a/pkg/cmd/server/apis/config/types_test.go +++ /dev/null @@ -1,215 +0,0 @@ -package config - -import ( - "strings" - "testing" -) - -func TestFeatureListAdd(t *testing.T) { - orderedList := []string{FeatureBuilder, FeatureWebConsole, FeatureS2I} - fl := FeatureList{} - if err := fl.Add(FeatureBuilder); err != nil { - t.Fatalf("failed to add feature %q: %v", FeatureBuilder, err) - } - if len(fl) != 1 { - t.Fatalf("feature list shall contain 1 item") - } - if err := fl.Add(strings.ToUpper(FeatureWebConsole)); err != nil { - t.Fatalf("failed to add feature %q: %v", FeatureWebConsole, err) - } - if len(fl) != 2 { - t.Fatalf("feature list shall contain 1 item") - } - for i := 0; i < 2; i++ { - if fl[i] != orderedList[i] { - t.Errorf("fl[%d] == %q, but %q is right", i, fl[i], orderedList[i]) - } - } - // add already existing - if err := fl.Add(FeatureBuilder); err != nil { - t.Fatalf("failed to add feature %q: %v", FeatureBuilder, err) - } - // add unknown - if err := fl.Add("unknown"); err == nil { - t.Fatalf("adding unknown feature should have failed") - } - // add multiple at once - if err := fl.Add(FeatureWebConsole, FeatureS2I, FeatureBuilder); err != nil { - t.Fatalf("failed to add multiple features: %v", err) - } - if len(fl) != 3 { - t.Fatalf("feature list has unexpected length (%d != %d)", len(fl), len(orderedList)) - } - for i := 0; i < 3; i++ { - if fl[i] != orderedList[i] { - t.Errorf("fl[%d] == %q, but %q is right", i, fl[i], orderedList[i]) - } - } -} - -func TestFeatureListDelete(t *testing.T) { - fl := FeatureList(KnownOpenShiftFeatures) - // try to delete unknown feature - fl.Delete("unknown") - if len(fl) != len(KnownOpenShiftFeatures) { - t.Fatalf("fl.Delete() unexpectedly modified the list: %d != %d", len(fl), len(KnownOpenShiftFeatures)) - } - fl.Delete(strings.ToUpper(KnownOpenShiftFeatures[1])) - if len(fl) != len(KnownOpenShiftFeatures)-1 { - t.Fatalf("Delete() should have removed exactly 1 item: %d != %d", len(fl), len(KnownOpenShiftFeatures)-1) - - } - flIndex := 0 - // ensure that the order of items is kept - for i := 0; i < len(KnownOpenShiftFeatures); i++ { - if i == 1 { - continue - } - if fl[flIndex] != KnownOpenShiftFeatures[i] { - t.Errorf("fl[%d] == %q, but %q is right", i, fl[flIndex], KnownOpenShiftFeatures[i]) - } - flIndex++ - } - // delete multiple items - fl.Delete(KnownOpenShiftFeatures...) - if len(fl) != 0 { - t.Fatal("feature list should be empty") - } - // delete on empty list succeeds - fl.Delete(KnownOpenShiftFeatures[0]) - if len(fl) != 0 { - t.Fatal("feature list should be empty") - } -} - -func TestFeatureListDeleteByAnAlias(t *testing.T) { - fl := FeatureList{FeatureWebConsole} - // try to delete unknown feature - fl.Delete("web console") - if len(fl) != 0 { - t.Fatalf("fl.Delete() should have removed feature %s", FeatureWebConsole) - } -} - -func TestFeatureListDeleteUknown(t *testing.T) { - fl := FeatureList{FeatureWebConsole, "Unknown Feature"} - // try to delete unknown feature - fl.Delete("unknownfeatures") - if len(fl) != 2 { - t.Fatalf("fl.Delete() unexpectedly modified the list: %d != 2", len(fl)) - } - fl.Delete("unknown feature") - if len(fl) != 1 { - t.Fatalf("Delete() should have removed exactly 1 item: %d != 1", len(fl)) - } - if fl[0] != FeatureWebConsole { - t.Fatalf("Delete() removed wrong item") - } -} - -func TestFeatureListDeleteAliases(t *testing.T) { - fl := FeatureList{} - for alias := range FeatureAliases { - fl = append(fl, alias) - } - // try to delete unknown feature - fl.Delete("unknown") - if len(fl) != len(FeatureAliases) { - t.Fatalf("fl.Delete() unexpectedly modified the list: %d != %d", len(fl), len(FeatureAliases)) - } - fl.Delete("web console") - if len(fl) != len(FeatureAliases)-1 { - t.Fatalf("Delete() should have removed exactly 1 item: %d != %d", len(fl), len(FeatureAliases)-1) - } - fl.Delete("s2ibuilder") - if len(fl) != len(FeatureAliases)-2 { - t.Fatalf("Delete() should have removed exactly 1 item: %d != %d", len(fl), len(FeatureAliases)-2) - } -} - -func testFeatureListCases(t *testing.T, fl FeatureList, cases []string, good bool) { - for _, name := range cases { - if good { - if !fl.Has(name) { - t.Errorf("feature list {%s} should have %q", strings.Join(fl, ", "), name) - } - } else { - if fl.Has(name) { - t.Errorf("feature list {%s} shouldn't have %q", strings.Join(fl, ", "), name) - } - } - } -} - -func TestFeatureListHas(t *testing.T) { - fl := FeatureList{FeatureBuilder, FeatureS2I} - goodCases := []string{ - "builder", - "BuilDer", - "S2IBuilder", - "S2ibuilder", - "s2i builder", - } - badCases := []string{ - "console", - "CONSOLE", - "unknown", - "web-console", - "S2 I Builder", - } - testFeatureListCases(t, fl, goodCases, true) - testFeatureListCases(t, fl, badCases, false) - - fl = FeatureList{FeatureWebConsole} - goodCases = []string{ - "WebConsole", - "Web Console", - "wEBcONSOLE", - } - badCases = []string{ - "console", - "CONSOLE", - "unknown", - "builder", - "web-console", - "S2 I Builder", - } - testFeatureListCases(t, fl, goodCases, true) - testFeatureListCases(t, fl, badCases, false) -} - -func TestFeatureListHasWithAliases(t *testing.T) { - fl := FeatureList{} - for alias := range FeatureAliases { - fl = append(fl, alias) - } - goodCases := []string{ - "web console", - "WebConsole", - "S2iBuilder", - "S2i Builder", - } - badCases := []string{ - "Builder", - } - testFeatureListCases(t, fl, goodCases, true) - testFeatureListCases(t, fl, badCases, false) -} - -func TestFeatureListHasWithUnknownValue(t *testing.T) { - fl := FeatureList{"Unknown value"} - goodCases := []string{ - "unknown value", - "UNknown Value", - "Unknown value", - } - badCases := []string{ - "web console", - "WebConsole", - "S2iBuilder", - "S2i Builder", - "unknownvalue", - } - testFeatureListCases(t, fl, goodCases, true) - testFeatureListCases(t, fl, badCases, false) -} diff --git a/pkg/cmd/server/apis/config/util.go b/pkg/cmd/server/apis/config/util.go deleted file mode 100644 index c9f4aa83d27e..000000000000 --- a/pkg/cmd/server/apis/config/util.go +++ /dev/null @@ -1,6 +0,0 @@ -package config - -// IsBuildDisabled returns true if the builder feature is disabled. -func IsBuildEnabled(config *MasterConfig) bool { - return !config.DisabledFeatures.Has(FeatureBuilder) -} diff --git a/pkg/cmd/server/apis/config/v1/testdata/master-config.yaml b/pkg/cmd/server/apis/config/v1/testdata/master-config.yaml index 51338cd713ff..667419b327ca 100644 --- a/pkg/cmd/server/apis/config/v1/testdata/master-config.yaml +++ b/pkg/cmd/server/apis/config/v1/testdata/master-config.yaml @@ -38,7 +38,6 @@ controllerConfig: controllerLeaseTTL: 0 controllers: '*' corsAllowedOrigins: null -disabledFeatures: null dnsConfig: allowRecursiveQueries: false bindAddress: "" diff --git a/pkg/cmd/server/apis/config/v1/types.go b/pkg/cmd/server/apis/config/v1/types.go index 65ee723fa1ab..8f1dfbb0e688 100644 --- a/pkg/cmd/server/apis/config/v1/types.go +++ b/pkg/cmd/server/apis/config/v1/types.go @@ -228,9 +228,6 @@ type MasterConfig struct { // ControllerConfig holds configuration values for controllers ControllerConfig ControllerConfig `json:"controllerConfig"` - // DisabledFeatures is a list of features that should not be started. - DisabledFeatures FeatureList `json:"disabledFeatures"` - // EtcdStorageConfig contains information about how API resources are // stored in Etcd. These values are only relevant when etcd is the // backing store for the cluster. diff --git a/pkg/cmd/server/apis/config/validation/master.go b/pkg/cmd/server/apis/config/validation/master.go index d2a9cfc38f08..4a78fecffd5c 100644 --- a/pkg/cmd/server/apis/config/validation/master.go +++ b/pkg/cmd/server/apis/config/validation/master.go @@ -69,8 +69,6 @@ func ValidateMasterConfig(config *configapi.MasterConfig, fldPath *field.Path) V validationResults.AddErrors(field.Invalid(fldPath.Child("controllerLeaseTTL"), config.ControllerLeaseTTL, "TTL must be -1 (disabled), 0 (default), or between 10 and 300 seconds")) } - validationResults.AddErrors(ValidateDisabledFeatures(config.DisabledFeatures, fldPath.Child("disabledFeatures"))...) - if config.DNSConfig != nil { dnsConfigPath := fldPath.Child("dnsConfig") validationResults.AddErrors(ValidateHostPort(config.DNSConfig.BindAddress, dnsConfigPath.Child("bindAddress"))...) diff --git a/pkg/cmd/server/apis/config/validation/validation.go b/pkg/cmd/server/apis/config/validation/validation.go index e887f370a990..e2b8b787fe71 100644 --- a/pkg/cmd/server/apis/config/validation/validation.go +++ b/pkg/cmd/server/apis/config/validation/validation.go @@ -234,18 +234,6 @@ func ValidateHTTPServingInfo(info config.HTTPServingInfo, fldPath *field.Path) V return validationResults } -func ValidateDisabledFeatures(disabledFeatures []string, fldPath *field.Path) field.ErrorList { - allErrs := field.ErrorList{} - - for i, feature := range disabledFeatures { - if _, isKnown := config.NormalizeOpenShiftFeature(feature); !isKnown { - allErrs = append(allErrs, field.Invalid(fldPath.Index(i), disabledFeatures[i], fmt.Sprintf("not one of valid features: %s", strings.Join(config.KnownOpenShiftFeatures, ", ")))) - } - } - - return allErrs -} - func ValidateKubeConfig(path string, fldPath *field.Path) field.ErrorList { allErrs := field.ErrorList{} diff --git a/pkg/cmd/server/origin/master.go b/pkg/cmd/server/origin/master.go index 3c59ad180718..373bf8159ab7 100644 --- a/pkg/cmd/server/origin/master.go +++ b/pkg/cmd/server/origin/master.go @@ -17,7 +17,6 @@ import ( kubeapiserver "k8s.io/kubernetes/pkg/master" kcorestorage "k8s.io/kubernetes/pkg/registry/core/rest" - configapi "github.com/openshift/origin/pkg/cmd/server/apis/config" "github.com/openshift/origin/pkg/cmd/server/bootstrappolicy" kubernetes "github.com/openshift/origin/pkg/cmd/server/kubernetes/master" cmdutil "github.com/openshift/origin/pkg/cmd/util" @@ -65,7 +64,6 @@ func (c *MasterConfig) newOpenshiftAPIConfig(kubeAPIServerConfig apiserver.Confi ProjectCache: c.ProjectCache, ProjectRequestTemplate: c.Options.ProjectConfig.ProjectRequestTemplate, ProjectRequestMessage: c.Options.ProjectConfig.ProjectRequestMessage, - EnableBuilds: configapi.IsBuildEnabled(&c.Options), ClusterQuotaMappingController: c.ClusterQuotaMappingController, SCCStorage: sccStorage, }, diff --git a/pkg/cmd/server/origin/oauth_apiserver_adapter.go b/pkg/cmd/server/origin/oauth_apiserver_adapter.go index 1ef71d884e10..ba7b88af0b95 100644 --- a/pkg/cmd/server/origin/oauth_apiserver_adapter.go +++ b/pkg/cmd/server/origin/oauth_apiserver_adapter.go @@ -8,7 +8,6 @@ import ( utilflag "k8s.io/apiserver/pkg/util/flag" routeclient "github.com/openshift/client-go/route/clientset/versioned/typed/route/v1" - configapi "github.com/openshift/origin/pkg/cmd/server/apis/config" "github.com/openshift/origin/pkg/cmd/server/crypto" "github.com/openshift/origin/pkg/oauthserver/oauthserver" ) @@ -66,9 +65,7 @@ func NewOAuthServerConfigFromMasterConfig(masterConfig *MasterConfig, listener n oauthServerConfig.ExtraOAuthConfig.KubeClient = masterConfig.PrivilegedLoopbackKubernetesClientsetExternal // Build the list of valid redirect_uri prefixes for a login using the openshift-web-console client to redirect to - if !options.DisabledFeatures.Has(configapi.FeatureWebConsole) { - oauthServerConfig.ExtraOAuthConfig.AssetPublicAddresses = []string{oauthConfig.AssetPublicURL} - } + oauthServerConfig.ExtraOAuthConfig.AssetPublicAddresses = []string{oauthConfig.AssetPublicURL} return oauthServerConfig, nil } diff --git a/pkg/cmd/server/origin/openshift_apiserver.go b/pkg/cmd/server/origin/openshift_apiserver.go index afebf659a1d3..14695f210153 100644 --- a/pkg/cmd/server/origin/openshift_apiserver.go +++ b/pkg/cmd/server/origin/openshift_apiserver.go @@ -102,8 +102,6 @@ type OpenshiftAPIExtraConfig struct { ProjectRequestTemplate string ProjectRequestMessage string - EnableBuilds bool - // oauth API server ServiceAccountMethod configapi.GrantHandlerType @@ -274,9 +272,6 @@ func (c *completedConfig) withAuthorizationAPIServer(delegateAPIServer genericap } func (c *completedConfig) withBuildAPIServer(delegateAPIServer genericapiserver.DelegationTarget) (genericapiserver.DelegationTarget, legacyStorageMutator, error) { - if !c.ExtraConfig.EnableBuilds { - return delegateAPIServer, legacyStorageMutatorFunc(func(map[schema.GroupVersion]map[string]rest.Storage) {}), nil - } cfg := &buildapiserver.BuildServerConfig{ GenericConfig: &genericapiserver.RecommendedConfig{Config: *c.GenericConfig.Config}, diff --git a/pkg/cmd/server/origin/reststorage_validation_test.go b/pkg/cmd/server/origin/reststorage_validation_test.go index fe117b5f61f2..adbf2a39014f 100644 --- a/pkg/cmd/server/origin/reststorage_validation_test.go +++ b/pkg/cmd/server/origin/reststorage_validation_test.go @@ -99,7 +99,6 @@ func fakeOpenshiftAPIServerConfig() *OpenshiftAPIConfig { QuotaInformers: quotaInformerFactory, SecurityInformers: securityInformerFactory, SCCStorage: sccStorage, - EnableBuilds: true, ClusterQuotaMappingController: clusterquotamapping.NewClusterQuotaMappingControllerInternal(internalkubeInformerFactory.Core().InternalVersion().Namespaces(), quotaInformerFactory.Quota().InternalVersion().ClusterResourceQuotas()), }, } diff --git a/pkg/cmd/server/start/start_master.go b/pkg/cmd/server/start/start_master.go index 24cedea8a6c2..951112eb76f3 100644 --- a/pkg/cmd/server/start/start_master.go +++ b/pkg/cmd/server/start/start_master.go @@ -9,7 +9,6 @@ import ( "os" "path" "path/filepath" - "strings" "github.com/coreos/go-systemd/daemon" "github.com/golang/glog" @@ -46,7 +45,6 @@ type MasterOptions struct { SignerExpireDays int ConfigFile string Output io.Writer - DisabledFeatures []string } func (o *MasterOptions) DefaultsFromName(basename string) {} @@ -266,10 +264,6 @@ func (o MasterOptions) RunMaster() error { } } - // Inject disabled feature flags based on distribution being used and - // regardless of configuration. They aren't written to config file to - // prevent upgrade path issues. - masterConfig.DisabledFeatures.Add(o.DisabledFeatures...) validationResults := validation.ValidateMasterConfig(masterConfig, nil) if len(validationResults.Warnings) != 0 { for _, warning := range validationResults.Warnings { @@ -455,9 +449,6 @@ func (m *Master) Start() error { glog.Infof("Starting master on %s (%s)", m.config.ServingInfo.BindAddress, version.Get().String()) glog.Infof("Public master address is %s", m.config.MasterPublicURL) - if len(m.config.DisabledFeatures) > 0 { - glog.V(4).Infof("Disabled features: %s", strings.Join(m.config.DisabledFeatures, ", ")) - } imageTemplate := variable.NewDefaultImageTemplate() imageTemplate.Format = m.config.ImageConfig.Format imageTemplate.Latest = m.config.ImageConfig.Latest