Skip to content

Commit ae307ea

Browse files
committed
FIXME: break this up
1 parent 2787c3d commit ae307ea

File tree

8 files changed

+33
-14
lines changed

8 files changed

+33
-14
lines changed

cmd/kube-controller-manager/app/storageversionmigrator.go

+4-3
Original file line numberDiff line numberDiff line change
@@ -26,8 +26,9 @@ import (
2626
"k8s.io/controller-manager/controller"
2727
"k8s.io/kubernetes/cmd/kube-controller-manager/names"
2828
"k8s.io/kubernetes/pkg/features"
29+
"k8s.io/utils/feature"
2930

30-
utilfeature "k8s.io/apiserver/pkg/util/feature"
31+
oldutilfeature "k8s.io/apiserver/pkg/util/feature"
3132
clientgofeaturegate "k8s.io/client-go/features"
3233
svm "k8s.io/kubernetes/pkg/controller/storageversionmigrator"
3334
)
@@ -45,8 +46,8 @@ func startSVMController(
4546
controllerContext ControllerContext,
4647
controllerName string,
4748
) (controller.Interface, bool, error) {
48-
if !utilfeature.DefaultFeatureGate.Enabled(features.StorageVersionMigrator) ||
49-
!clientgofeaturegate.FeatureGates().Enabled(clientgofeaturegate.InformerResourceVersion) {
49+
if !oldutilfeature.DefaultFeatureGate.Enabled(features.StorageVersionMigrator) &&
50+
!feature.Enabled(clientgofeaturegate.InformerResourceVersionGate) {
5051
return nil, false, nil
5152
}
5253

cmd/kube-controller-manager/controller-manager.go

+5
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,8 @@ import (
2424
"os"
2525
_ "time/tzdata" // for CronJob Time Zone support
2626

27+
clientfeatures "k8s.io/client-go/features"
28+
2729
"k8s.io/component-base/cli"
2830
_ "k8s.io/component-base/logs/json/register" // for JSON log format registration
2931
_ "k8s.io/component-base/metrics/prometheus/clientgo" // load all the prometheus client-go plugin
@@ -32,6 +34,9 @@ import (
3234
)
3335

3436
func main() {
37+
// FIXME: Example, do not merge
38+
clientfeatures.WatchListClientGate.Set(true)
39+
3540
command := app.NewControllerManagerCommand()
3641
code := cli.Run(command)
3742
os.Exit(code)

pkg/api/pod/util.go

+5-2
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ import (
2929
"k8s.io/kubernetes/pkg/apis/core/helper"
3030
apivalidation "k8s.io/kubernetes/pkg/apis/core/validation"
3131
"k8s.io/kubernetes/pkg/features"
32+
"k8s.io/utils/feature"
3233
)
3334

3435
// ContainerType signifies container type
@@ -685,7 +686,8 @@ func dropDisabledFields(
685686
// For other types of containers, validateContainers will handle them.
686687
}
687688

688-
if !utilfeature.DefaultFeatureGate.Enabled(features.RecursiveReadOnlyMounts) && !rroInUse(oldPodSpec) {
689+
if !utilfeature.DefaultFeatureGate.Enabled(features.RecursiveReadOnlyMounts) &&
690+
!feature.Enabled(features.RecursiveReadOnlyMountsGate) && !rroInUse(oldPodSpec) {
689691
for i := range podSpec.Containers {
690692
for j := range podSpec.Containers[i].VolumeMounts {
691693
podSpec.Containers[i].VolumeMounts[j].RecursiveReadOnly = nil
@@ -809,7 +811,8 @@ func dropDisabledPodStatusFields(podStatus, oldPodStatus *api.PodStatus, podSpec
809811
podStatus.HostIPs = nil
810812
}
811813

812-
if !utilfeature.DefaultFeatureGate.Enabled(features.RecursiveReadOnlyMounts) && !rroInUse(oldPodSpec) {
814+
if !utilfeature.DefaultFeatureGate.Enabled(features.RecursiveReadOnlyMounts) &&
815+
!feature.Enabled(features.RecursiveReadOnlyMountsGate) && !rroInUse(oldPodSpec) {
813816
for i := range podStatus.ContainerStatuses {
814817
podStatus.ContainerStatuses[i].VolumeMounts = nil
815818
}

pkg/kubelet/kubelet_pods.go

+7-3
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,7 @@ import (
6969
"k8s.io/kubernetes/pkg/volume/util/volumepathhandler"
7070
volumevalidation "k8s.io/kubernetes/pkg/volume/validation"
7171
"k8s.io/kubernetes/third_party/forked/golang/expansion"
72+
"k8s.io/utils/feature"
7273
utilnet "k8s.io/utils/net"
7374
)
7475

@@ -348,7 +349,8 @@ func makeMounts(pod *v1.Pod, podDir string, container *v1.Container, hostName, h
348349
if err != nil {
349350
return nil, cleanupAction, fmt.Errorf("failed to resolve recursive read-only mode: %w", err)
350351
}
351-
if rro && !utilfeature.DefaultFeatureGate.Enabled(features.RecursiveReadOnlyMounts) {
352+
if rro && !utilfeature.DefaultFeatureGate.Enabled(features.RecursiveReadOnlyMounts) &&
353+
!feature.Enabled(features.RecursiveReadOnlyMountsGate) {
352354
return nil, cleanupAction, fmt.Errorf("recursive read-only mount needs feature gate %q to be enabled", features.RecursiveReadOnlyMounts)
353355
}
354356

@@ -2136,7 +2138,8 @@ func (kl *Kubelet) convertToAPIContainerStatuses(pod *v1.Pod, podStatus *kubecon
21362138
}
21372139
// status.VolumeMounts cannot be propagated from kubecontainer.Status
21382140
// because the CRI API is unaware of the volume names.
2139-
if utilfeature.DefaultFeatureGate.Enabled(features.RecursiveReadOnlyMounts) {
2141+
if utilfeature.DefaultFeatureGate.Enabled(features.RecursiveReadOnlyMounts) ||
2142+
feature.Enabled(features.RecursiveReadOnlyMountsGate) {
21402143
for _, vol := range container.VolumeMounts {
21412144
volStatus := v1.VolumeMountStatus{
21422145
Name: vol.Name,
@@ -2148,7 +2151,8 @@ func (kl *Kubelet) convertToAPIContainerStatuses(pod *v1.Pod, podStatus *kubecon
21482151
if b, err := resolveRecursiveReadOnly(vol, supportsRRO); err != nil {
21492152
klog.ErrorS(err, "failed to resolve recursive read-only mode", "mode", *vol.RecursiveReadOnly)
21502153
} else if b {
2151-
if utilfeature.DefaultFeatureGate.Enabled(features.RecursiveReadOnlyMounts) {
2154+
if utilfeature.DefaultFeatureGate.Enabled(features.RecursiveReadOnlyMounts) ||
2155+
feature.Enabled(features.RecursiveReadOnlyMountsGate) {
21522156
rroMode = v1.RecursiveReadOnlyEnabled
21532157
} else {
21542158
klog.ErrorS(nil, "recursive read-only mount needs feature gate to be enabled",

pkg/kubelet/nodestatus/setters.go

+3-1
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@ import (
4343
"k8s.io/kubernetes/pkg/kubelet/cm"
4444
kubecontainer "k8s.io/kubernetes/pkg/kubelet/container"
4545
"k8s.io/kubernetes/pkg/kubelet/events"
46+
"k8s.io/utils/feature"
4647
netutils "k8s.io/utils/net"
4748

4849
"k8s.io/klog/v2"
@@ -485,7 +486,8 @@ func GoRuntime() Setter {
485486
// RuntimeHandlers returns a Setter that sets RuntimeHandlers on the node.
486487
func RuntimeHandlers(fn func() []kubecontainer.RuntimeHandler) Setter {
487488
return func(ctx context.Context, node *v1.Node) error {
488-
if !utilfeature.DefaultFeatureGate.Enabled(features.RecursiveReadOnlyMounts) {
489+
if !utilfeature.DefaultFeatureGate.Enabled(features.RecursiveReadOnlyMounts) &&
490+
!feature.Enabled(features.RecursiveReadOnlyMountsGate) {
489491
return nil
490492
}
491493
handlers := fn()

pkg/registry/core/node/strategy.go

+3-1
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ import (
4040
"k8s.io/kubernetes/pkg/apis/core/validation"
4141
"k8s.io/kubernetes/pkg/features"
4242
"k8s.io/kubernetes/pkg/kubelet/client"
43+
"k8s.io/utils/feature"
4344
"sigs.k8s.io/structured-merge-diff/v4/fieldpath"
4445
)
4546

@@ -103,7 +104,8 @@ func dropDisabledFields(node *api.Node, oldNode *api.Node) {
103104
node.Spec.ConfigSource = nil
104105
}
105106

106-
if !utilfeature.DefaultFeatureGate.Enabled(features.RecursiveReadOnlyMounts) {
107+
if !utilfeature.DefaultFeatureGate.Enabled(features.RecursiveReadOnlyMounts) &&
108+
!feature.Enabled(features.RecursiveReadOnlyMountsGate) {
107109
node.Status.RuntimeHandlers = nil
108110
}
109111
}

staging/src/k8s.io/client-go/tools/cache/shared_informer.go

+3-1
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ import (
2929
"k8s.io/client-go/tools/cache/synctrack"
3030
"k8s.io/utils/buffer"
3131
"k8s.io/utils/clock"
32+
"k8s.io/utils/feature"
3233

3334
"k8s.io/klog/v2"
3435

@@ -411,7 +412,8 @@ func (v *dummyController) HasSynced() bool {
411412
}
412413

413414
func (v *dummyController) LastSyncResourceVersion() string {
414-
if clientgofeaturegate.FeatureGates().Enabled(clientgofeaturegate.InformerResourceVersion) {
415+
if clientgofeaturegate.FeatureGates().Enabled(clientgofeaturegate.InformerResourceVersion) ||
416+
feature.Enabled(clientgofeaturegate.InformerResourceVersionGate) {
415417
return v.informer.LastSyncResourceVersion()
416418
}
417419

test/integration/storageversionmigrator/storageversionmigrator_test.go

+3-3
Original file line numberDiff line numberDiff line change
@@ -30,9 +30,9 @@ import (
3030
encryptionconfigcontroller "k8s.io/apiserver/pkg/server/options/encryptionconfig/controller"
3131
utilfeature "k8s.io/apiserver/pkg/util/feature"
3232
clientgofeaturegate "k8s.io/client-go/features"
33-
"k8s.io/component-base/featuregate"
3433
featuregatetesting "k8s.io/component-base/featuregate/testing"
3534
"k8s.io/kubernetes/pkg/features"
35+
"k8s.io/utils/feature"
3636
)
3737

3838
// TestStorageVersionMigration is an integration test that verifies storage version migration works.
@@ -47,7 +47,7 @@ import (
4747
// 8. Verify that the resource version of the secret is not updated. i.e. it was a no-op update
4848
func TestStorageVersionMigration(t *testing.T) {
4949
featuregatetesting.SetFeatureGateDuringTest(t, utilfeature.DefaultFeatureGate, features.StorageVersionMigrator, true)
50-
featuregatetesting.SetFeatureGateDuringTest(t, utilfeature.DefaultFeatureGate, featuregate.Feature(clientgofeaturegate.InformerResourceVersion), true)
50+
feature.SetForTesting(clientgofeaturegate.InformerResourceVersionGate, t, true)
5151

5252
// this makes the test super responsive. It's set to a default of 1 minute.
5353
encryptionconfigcontroller.EncryptionConfigFileChangePollDuration = time.Millisecond
@@ -149,7 +149,7 @@ func TestStorageVersionMigration(t *testing.T) {
149149
// 11. Verify the list of CRs at v2 works
150150
func TestStorageVersionMigrationWithCRD(t *testing.T) {
151151
featuregatetesting.SetFeatureGateDuringTest(t, utilfeature.DefaultFeatureGate, features.StorageVersionMigrator, true)
152-
featuregatetesting.SetFeatureGateDuringTest(t, utilfeature.DefaultFeatureGate, featuregate.Feature(clientgofeaturegate.InformerResourceVersion), true)
152+
feature.SetForTesting(clientgofeaturegate.InformerResourceVersionGate, t, true)
153153
// decode errors are expected when using conversation webhooks
154154
etcd3watcher.TestOnlySetFatalOnDecodeError(false)
155155
defer etcd3watcher.TestOnlySetFatalOnDecodeError(true)

0 commit comments

Comments
 (0)