diff --git a/pkg/operator/featureupgradablecontroller/feature_upgradeable_controller.go b/pkg/operator/featureupgradablecontroller/feature_upgradeable_controller.go deleted file mode 100644 index 53b92bb11d..0000000000 --- a/pkg/operator/featureupgradablecontroller/feature_upgradeable_controller.go +++ /dev/null @@ -1,73 +0,0 @@ -package featureupgradablecontroller - -import ( - "context" - "fmt" - - configv1 "github.com/openshift/api/config/v1" - operatorv1 "github.com/openshift/api/operator/v1" - configinformers "github.com/openshift/client-go/config/informers/externalversions" - configlistersv1 "github.com/openshift/client-go/config/listers/config/v1" - "github.com/openshift/library-go/pkg/controller/factory" - "github.com/openshift/library-go/pkg/operator/events" - "github.com/openshift/library-go/pkg/operator/v1helpers" - "k8s.io/apimachinery/pkg/util/sets" -) - -var ( - featureGatesAllowingUpgrade = sets.NewString("", string(configv1.LatencySensitive)) -) - -// FeatureUpgradeableController is a controller that sets upgradeable=false if anything outside the allowed list is the specified featuregates. -type FeatureUpgradeableController struct { - operatorClient v1helpers.OperatorClient - featureGateLister configlistersv1.FeatureGateLister -} - -func NewFeatureUpgradeableController( - operatorClient v1helpers.OperatorClient, - configInformer configinformers.SharedInformerFactory, - eventRecorder events.Recorder, -) factory.Controller { - c := &FeatureUpgradeableController{ - operatorClient: operatorClient, - featureGateLister: configInformer.Config().V1().FeatureGates().Lister(), - } - - return factory.New().WithInformers( - operatorClient.Informer(), - configInformer.Config().V1().FeatureGates().Informer(), - ).WithSync(c.sync).ToController("FeatureUpgradeableController", eventRecorder.WithComponentSuffix("feature-upgradeable")) -} - -func (c *FeatureUpgradeableController) sync(ctx context.Context, syncCtx factory.SyncContext) error { - featureGates, err := c.featureGateLister.Get("cluster") - if err != nil { - return err - } - - cond := newUpgradeableCondition(featureGates) - if _, _, updateError := v1helpers.UpdateStatus(ctx, c.operatorClient, v1helpers.UpdateConditionFn(cond)); updateError != nil { - return updateError - } - - return nil -} - -func newUpgradeableCondition(featureGates *configv1.FeatureGate) operatorv1.OperatorCondition { - if featureGatesAllowingUpgrade.Has(string(featureGates.Spec.FeatureSet)) { - return operatorv1.OperatorCondition{ - Type: "FeatureGatesUpgradeable", - Reason: "AllowedFeatureGates_" + string(featureGates.Spec.FeatureSet), - Status: operatorv1.ConditionTrue, - } - } - - return operatorv1.OperatorCondition{ - Type: "FeatureGatesUpgradeable", - Status: operatorv1.ConditionFalse, - Reason: "RestrictedFeatureGates_" + string(featureGates.Spec.FeatureSet), - Message: fmt.Sprintf("%q does not allow updates", string(featureGates.Spec.FeatureSet)), - } - -} diff --git a/pkg/operator/featureupgradablecontroller/feature_upgradeable_controller_test.go b/pkg/operator/featureupgradablecontroller/feature_upgradeable_controller_test.go deleted file mode 100644 index f77ae0a416..0000000000 --- a/pkg/operator/featureupgradablecontroller/feature_upgradeable_controller_test.go +++ /dev/null @@ -1,75 +0,0 @@ -package featureupgradablecontroller - -import ( - "reflect" - "testing" - - "github.com/davecgh/go-spew/spew" - configv1 "github.com/openshift/api/config/v1" - operatorv1 "github.com/openshift/api/operator/v1" -) - -func TestNewUpgradeableCondition(t *testing.T) { - tests := []struct { - name string - - features string - expected operatorv1.OperatorCondition - }{ - { - name: "default", - features: "", - expected: operatorv1.OperatorCondition{ - Reason: "AllowedFeatureGates_", - Status: "True", - Type: "FeatureGatesUpgradeable", - }, - }, - { - name: "unknown", - features: "other", - expected: operatorv1.OperatorCondition{ - Reason: "RestrictedFeatureGates_other", - Status: "False", - Type: "FeatureGatesUpgradeable", - Message: "\"other\" does not allow updates", - }, - }, - { - name: "techpreview", - features: string(configv1.TechPreviewNoUpgrade), - expected: operatorv1.OperatorCondition{ - Reason: "RestrictedFeatureGates_TechPreviewNoUpgrade", - Status: "False", - Type: "FeatureGatesUpgradeable", - Message: "\"TechPreviewNoUpgrade\" does not allow updates", - }, - }, - { - name: "latencysensitive", - features: string(configv1.LatencySensitive), - expected: operatorv1.OperatorCondition{ - Reason: "AllowedFeatureGates_LatencySensitive", - Status: "True", - Type: "FeatureGatesUpgradeable", - Message: "", - }, - }, - } - - for _, test := range tests { - t.Run(test.name, func(t *testing.T) { - actual := newUpgradeableCondition(&configv1.FeatureGate{ - Spec: configv1.FeatureGateSpec{ - FeatureGateSelection: configv1.FeatureGateSelection{ - FeatureSet: configv1.FeatureSet(test.features), - }, - }, - }) - - if !reflect.DeepEqual(test.expected, actual) { - t.Fatal(spew.Sdump(actual)) - } - }) - } -} diff --git a/pkg/operator/starter.go b/pkg/operator/starter.go index 9b0309a502..5776da2d0b 100644 --- a/pkg/operator/starter.go +++ b/pkg/operator/starter.go @@ -23,7 +23,6 @@ import ( "github.com/openshift/cluster-kube-apiserver-operator/pkg/operator/configobservation/configobservercontroller" "github.com/openshift/cluster-kube-apiserver-operator/pkg/operator/configobservation/node" "github.com/openshift/cluster-kube-apiserver-operator/pkg/operator/connectivitycheckcontroller" - "github.com/openshift/cluster-kube-apiserver-operator/pkg/operator/featureupgradablecontroller" "github.com/openshift/cluster-kube-apiserver-operator/pkg/operator/kubeletversionskewcontroller" "github.com/openshift/cluster-kube-apiserver-operator/pkg/operator/nodekubeconfigcontroller" "github.com/openshift/cluster-kube-apiserver-operator/pkg/operator/operatorclient" @@ -354,12 +353,6 @@ func RunOperator(ctx context.Context, controllerContext *controllercmd.Controlle return err } - featureUpgradeableController := featureupgradablecontroller.NewFeatureUpgradeableController( - operatorClient, - configInformers, - controllerContext.EventRecorder, - ) - certRotationTimeUpgradeableController := certrotationtimeupgradeablecontroller.NewCertRotationTimeUpgradeableController( operatorClient, kubeInformersForNamespaces.InformersFor(operatorclient.GlobalUserSpecifiedConfigNamespace).Core().V1().ConfigMaps(), @@ -454,7 +447,6 @@ func RunOperator(ctx context.Context, controllerContext *controllercmd.Controlle go clusterOperatorStatus.Run(ctx, 1) go certRotationController.Run(ctx, 1) go encryptionControllers.Run(ctx, 1) - go featureUpgradeableController.Run(ctx, 1) go certRotationTimeUpgradeableController.Run(ctx, 1) go terminationObserver.Run(ctx, 1) go eventWatcher.Run(ctx, 1) diff --git a/test/e2e/featuregate_upgradeable_test.go b/test/e2e/featuregate_upgradeable_test.go deleted file mode 100644 index f7d4d9fe2b..0000000000 --- a/test/e2e/featuregate_upgradeable_test.go +++ /dev/null @@ -1,27 +0,0 @@ -package e2e - -import ( - "context" - "testing" - - "github.com/openshift/library-go/pkg/operator/v1helpers" - - operatorv1 "github.com/openshift/api/operator/v1" - "github.com/openshift/library-go/pkg/operator/genericoperatorclient" - - "github.com/stretchr/testify/require" - - test "github.com/openshift/cluster-kube-apiserver-operator/test/library" -) - -func TestFeatureGatesUpgradeable(t *testing.T) { - kubeConfig, err := test.NewClientConfigForTest() - require.NoError(t, err) - operatorClient, _, err := genericoperatorclient.NewStaticPodOperatorClient(kubeConfig, operatorv1.GroupVersion.WithResource("kubeapiservers")) - require.NoError(t, err) - - // if the condition is true, then we're active. The unit tests confirm it goes false. - _, operatorStatus, _, err := operatorClient.GetStaticPodOperatorStateWithQuorum(context.TODO()) - require.NoError(t, err) - require.True(t, v1helpers.IsOperatorConditionTrue(operatorStatus.Conditions, "FeatureGatesUpgradeable")) -}