mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-08-04 01:40:07 +00:00
Merge pull request #129376 from carlory/update-fg
run hack/update-featuregates.sh
This commit is contained in:
commit
e54dedc93e
@ -162,15 +162,15 @@ func verifyOrUpdateFeatureList(rootPath, featureListFile string, update, version
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
featureListBytes, err := yaml.Marshal(featureList)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
if update {
|
if update {
|
||||||
data, err := yaml.Marshal(featureList)
|
return os.WriteFile(filePath, featureListBytes, 0644)
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
return os.WriteFile(filePath, data, 0644)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if diff := cmp.Diff(featureList, baseFeatureList); diff != "" {
|
if diff := cmp.Diff(featureListBytes, baseFeatureListBytes); diff != "" {
|
||||||
if versioned {
|
if versioned {
|
||||||
return fmt.Errorf("detected diff in versioned feature list (%s), diff: \n%s", versionedFeatureListFile, diff)
|
return fmt.Errorf("detected diff in versioned feature list (%s), diff: \n%s", versionedFeatureListFile, diff)
|
||||||
} else {
|
} else {
|
||||||
|
@ -24,7 +24,6 @@ import (
|
|||||||
"os"
|
"os"
|
||||||
"path/filepath"
|
"path/filepath"
|
||||||
"reflect"
|
"reflect"
|
||||||
"strings"
|
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
"github.com/google/go-cmp/cmp"
|
"github.com/google/go-cmp/cmp"
|
||||||
@ -111,6 +110,7 @@ func TestVerifyOrUpdateFeatureListUnversioned(t *testing.T) {
|
|||||||
tests := []struct {
|
tests := []struct {
|
||||||
name string
|
name string
|
||||||
goFileContent string
|
goFileContent string
|
||||||
|
featureListFileContent string
|
||||||
updatedFeatureListFileContent string
|
updatedFeatureListFileContent string
|
||||||
expectVerifyErr bool
|
expectVerifyErr bool
|
||||||
expectUpdateErr bool
|
expectUpdateErr bool
|
||||||
@ -132,8 +132,48 @@ var otherFeatureGates = map[featuregate.Feature]featuregate.FeatureSpec{
|
|||||||
AppArmorFields: {Default: true, PreRelease: featuregate.Beta},
|
AppArmorFields: {Default: true, PreRelease: featuregate.Beta},
|
||||||
}
|
}
|
||||||
`,
|
`,
|
||||||
|
featureListFileContent: featureListFileContent,
|
||||||
updatedFeatureListFileContent: featureListFileContent,
|
updatedFeatureListFileContent: featureListFileContent,
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
name: "semantically equivalent, formatting wrong",
|
||||||
|
goFileContent: `
|
||||||
|
package features
|
||||||
|
|
||||||
|
import (
|
||||||
|
"k8s.io/component-base/featuregate"
|
||||||
|
)
|
||||||
|
var defaultKubernetesFeatureGates = map[featuregate.Feature]featuregate.FeatureSpec{
|
||||||
|
AppArmorFields: {Default: true, PreRelease: featuregate.Beta},
|
||||||
|
CPUCFSQuotaPeriod: {Default: false, PreRelease: featuregate.Alpha},
|
||||||
|
ClusterTrustBundleProjection: {Default: false, PreRelease: featuregate.Alpha},
|
||||||
|
}
|
||||||
|
var otherFeatureGates = map[featuregate.Feature]featuregate.FeatureSpec{
|
||||||
|
AppArmorFields: {Default: true, PreRelease: featuregate.Beta},
|
||||||
|
}
|
||||||
|
`,
|
||||||
|
featureListFileContent: `- name: AppArmorFields
|
||||||
|
versionedSpecs:
|
||||||
|
- default: true
|
||||||
|
lockToDefault: false
|
||||||
|
preRelease: Beta
|
||||||
|
version: ""
|
||||||
|
- name: ClusterTrustBundleProjection
|
||||||
|
versionedSpecs:
|
||||||
|
- default: false
|
||||||
|
lockToDefault: false
|
||||||
|
preRelease: Alpha
|
||||||
|
version: ""
|
||||||
|
- name: CPUCFSQuotaPeriod
|
||||||
|
versionedSpecs:
|
||||||
|
- default: false
|
||||||
|
lockToDefault: false
|
||||||
|
preRelease: Alpha
|
||||||
|
version: ""
|
||||||
|
`,
|
||||||
|
updatedFeatureListFileContent: featureListFileContent,
|
||||||
|
expectVerifyErr: true,
|
||||||
|
},
|
||||||
{
|
{
|
||||||
name: "same feature added twice with different lifecycle",
|
name: "same feature added twice with different lifecycle",
|
||||||
goFileContent: `
|
goFileContent: `
|
||||||
@ -151,8 +191,9 @@ var defaultKubernetesFeatureGates = map[featuregate.Feature]featuregate.FeatureS
|
|||||||
AppArmorFields: {Default: true, PreRelease: featuregate.Alpha},
|
AppArmorFields: {Default: true, PreRelease: featuregate.Alpha},
|
||||||
}
|
}
|
||||||
`,
|
`,
|
||||||
expectVerifyErr: true,
|
featureListFileContent: featureListFileContent,
|
||||||
expectUpdateErr: true,
|
expectVerifyErr: true,
|
||||||
|
expectUpdateErr: true,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "new feature added",
|
name: "new feature added",
|
||||||
@ -169,8 +210,9 @@ var defaultKubernetesFeatureGates = map[featuregate.Feature]featuregate.FeatureS
|
|||||||
SELinuxMount: {Default: false, PreRelease: featuregate.Alpha},
|
SELinuxMount: {Default: false, PreRelease: featuregate.Alpha},
|
||||||
}
|
}
|
||||||
`,
|
`,
|
||||||
expectVerifyErr: true,
|
featureListFileContent: featureListFileContent,
|
||||||
expectUpdateErr: true,
|
expectVerifyErr: true,
|
||||||
|
expectUpdateErr: true,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "delete feature",
|
name: "delete feature",
|
||||||
@ -185,7 +227,8 @@ var defaultKubernetesFeatureGates = map[featuregate.Feature]featuregate.FeatureS
|
|||||||
ClusterTrustBundleProjection: {Default: false, PreRelease: featuregate.Alpha},
|
ClusterTrustBundleProjection: {Default: false, PreRelease: featuregate.Alpha},
|
||||||
}
|
}
|
||||||
`,
|
`,
|
||||||
expectVerifyErr: true,
|
featureListFileContent: featureListFileContent,
|
||||||
|
expectVerifyErr: true,
|
||||||
updatedFeatureListFileContent: `- name: AppArmorFields
|
updatedFeatureListFileContent: `- name: AppArmorFields
|
||||||
versionedSpecs:
|
versionedSpecs:
|
||||||
- default: true
|
- default: true
|
||||||
@ -214,13 +257,14 @@ var defaultKubernetesFeatureGates = map[featuregate.Feature]featuregate.FeatureS
|
|||||||
ClusterTrustBundleProjection: {Default: false, PreRelease: featuregate.Alpha},
|
ClusterTrustBundleProjection: {Default: false, PreRelease: featuregate.Alpha},
|
||||||
}
|
}
|
||||||
`,
|
`,
|
||||||
expectVerifyErr: true,
|
featureListFileContent: featureListFileContent,
|
||||||
expectUpdateErr: true,
|
expectVerifyErr: true,
|
||||||
|
expectUpdateErr: true,
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
for _, tc := range tests {
|
for _, tc := range tests {
|
||||||
t.Run(tc.name, func(t *testing.T) {
|
t.Run(tc.name, func(t *testing.T) {
|
||||||
featureListFile := writeContentToTmpFile(t, "", "feature_list.yaml", strings.TrimSpace(featureListFileContent))
|
featureListFile := writeContentToTmpFile(t, "", "feature_list.yaml", tc.featureListFileContent)
|
||||||
tmpDir := filepath.Dir(featureListFile.Name())
|
tmpDir := filepath.Dir(featureListFile.Name())
|
||||||
_ = writeContentToTmpFile(t, tmpDir, "pkg/new_features.go", tc.goFileContent)
|
_ = writeContentToTmpFile(t, tmpDir, "pkg/new_features.go", tc.goFileContent)
|
||||||
err := verifyOrUpdateFeatureList(tmpDir, filepath.Base(featureListFile.Name()), false, false)
|
err := verifyOrUpdateFeatureList(tmpDir, filepath.Base(featureListFile.Name()), false, false)
|
||||||
@ -229,7 +273,7 @@ var defaultKubernetesFeatureGates = map[featuregate.Feature]featuregate.FeatureS
|
|||||||
}
|
}
|
||||||
err = verifyOrUpdateFeatureList(tmpDir, filepath.Base(featureListFile.Name()), true, false)
|
err = verifyOrUpdateFeatureList(tmpDir, filepath.Base(featureListFile.Name()), true, false)
|
||||||
if tc.expectUpdateErr != (err != nil) {
|
if tc.expectUpdateErr != (err != nil) {
|
||||||
t.Errorf("expectVerifyErr=%v, got err: %s", tc.expectVerifyErr, err)
|
t.Errorf("expectUpdateErr=%v, got err: %s", tc.expectUpdateErr, err)
|
||||||
}
|
}
|
||||||
if tc.expectUpdateErr {
|
if tc.expectUpdateErr {
|
||||||
return
|
return
|
||||||
@ -272,6 +316,7 @@ func TestVerifyOrUpdateFeatureListVersioned(t *testing.T) {
|
|||||||
tests := []struct {
|
tests := []struct {
|
||||||
name string
|
name string
|
||||||
goFileContent string
|
goFileContent string
|
||||||
|
featureListFileContent string
|
||||||
updatedFeatureListFileContent string
|
updatedFeatureListFileContent string
|
||||||
expectVerifyErr bool
|
expectVerifyErr bool
|
||||||
expectUpdateErr bool
|
expectUpdateErr bool
|
||||||
@ -303,8 +348,62 @@ var otherFeatureGates = map[featuregate.Feature]featuregate.VersionedSpecs{
|
|||||||
},
|
},
|
||||||
}
|
}
|
||||||
`,
|
`,
|
||||||
|
featureListFileContent: featureListFileContent,
|
||||||
updatedFeatureListFileContent: featureListFileContent,
|
updatedFeatureListFileContent: featureListFileContent,
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
name: "semantically equivalent, formatting wrong",
|
||||||
|
goFileContent: `
|
||||||
|
package features
|
||||||
|
|
||||||
|
import (
|
||||||
|
"k8s.io/apimachinery/pkg/util/version"
|
||||||
|
"k8s.io/component-base/featuregate"
|
||||||
|
)
|
||||||
|
var defaultVersionedKubernetesFeatureGates = map[featuregate.Feature]featuregate.VersionedSpecs{
|
||||||
|
AppArmorFields: {
|
||||||
|
{Version: version.MajorMinor(1, 30), Default: true, PreRelease: featuregate.Beta},
|
||||||
|
},
|
||||||
|
CPUCFSQuotaPeriod: {
|
||||||
|
{Version: version.MustParse("1.30"), Default: false, PreRelease: featuregate.Alpha},
|
||||||
|
{Version: version.MustParse("1.31"), Default: true, PreRelease: featuregate.Beta},
|
||||||
|
},
|
||||||
|
genericfeatures.APIListChunking: {
|
||||||
|
{Version: version.MustParse("1.30"), Default: true, PreRelease: featuregate.GA, LockToDefault: true},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
var otherFeatureGates = map[featuregate.Feature]featuregate.VersionedSpecs{
|
||||||
|
AppArmorFields: {
|
||||||
|
{Version: version.MajorMinor(1, 30), Default: true, PreRelease: featuregate.Beta},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
`,
|
||||||
|
featureListFileContent: `- name: APIListChunking
|
||||||
|
versionedSpecs:
|
||||||
|
- default: true
|
||||||
|
lockToDefault: true
|
||||||
|
preRelease: GA
|
||||||
|
version: "1.30"
|
||||||
|
- name: AppArmorFields
|
||||||
|
versionedSpecs:
|
||||||
|
- default: true
|
||||||
|
lockToDefault: false
|
||||||
|
preRelease: Beta
|
||||||
|
version: "1.30"
|
||||||
|
- name: CPUCFSQuotaPeriod
|
||||||
|
versionedSpecs:
|
||||||
|
- default: false
|
||||||
|
lockToDefault: false
|
||||||
|
preRelease: Alpha
|
||||||
|
version: "1.30"
|
||||||
|
- default: true
|
||||||
|
lockToDefault: false
|
||||||
|
preRelease: Beta
|
||||||
|
version: "1.31"
|
||||||
|
`,
|
||||||
|
updatedFeatureListFileContent: featureListFileContent,
|
||||||
|
expectVerifyErr: true,
|
||||||
|
},
|
||||||
{
|
{
|
||||||
name: "same feature added twice with different lifecycle",
|
name: "same feature added twice with different lifecycle",
|
||||||
goFileContent: `
|
goFileContent: `
|
||||||
@ -332,8 +431,9 @@ var otherFeatureGates = map[featuregate.Feature]featuregate.VersionedSpecs{
|
|||||||
},
|
},
|
||||||
}
|
}
|
||||||
`,
|
`,
|
||||||
expectVerifyErr: true,
|
featureListFileContent: featureListFileContent,
|
||||||
expectUpdateErr: true,
|
expectVerifyErr: true,
|
||||||
|
expectUpdateErr: true,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "VersionedSpecs not ordered by version",
|
name: "VersionedSpecs not ordered by version",
|
||||||
@ -357,8 +457,9 @@ var defaultVersionedKubernetesFeatureGates = map[featuregate.Feature]featuregate
|
|||||||
},
|
},
|
||||||
}
|
}
|
||||||
`,
|
`,
|
||||||
expectVerifyErr: true,
|
featureListFileContent: featureListFileContent,
|
||||||
expectUpdateErr: true,
|
expectVerifyErr: true,
|
||||||
|
expectUpdateErr: true,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "add new feature",
|
name: "add new feature",
|
||||||
@ -385,7 +486,8 @@ var defaultVersionedKubernetesFeatureGates = map[featuregate.Feature]featuregate
|
|||||||
},
|
},
|
||||||
}
|
}
|
||||||
`,
|
`,
|
||||||
expectVerifyErr: true,
|
expectVerifyErr: true,
|
||||||
|
featureListFileContent: featureListFileContent,
|
||||||
updatedFeatureListFileContent: `- name: APIListChunking
|
updatedFeatureListFileContent: `- name: APIListChunking
|
||||||
versionedSpecs:
|
versionedSpecs:
|
||||||
- default: true
|
- default: true
|
||||||
@ -435,7 +537,8 @@ var defaultVersionedKubernetesFeatureGates = map[featuregate.Feature]featuregate
|
|||||||
},
|
},
|
||||||
}
|
}
|
||||||
`,
|
`,
|
||||||
expectVerifyErr: true,
|
expectVerifyErr: true,
|
||||||
|
featureListFileContent: featureListFileContent,
|
||||||
updatedFeatureListFileContent: `- name: APIListChunking
|
updatedFeatureListFileContent: `- name: APIListChunking
|
||||||
versionedSpecs:
|
versionedSpecs:
|
||||||
- default: true
|
- default: true
|
||||||
@ -477,7 +580,8 @@ var defaultVersionedKubernetesFeatureGates = map[featuregate.Feature]featuregate
|
|||||||
},
|
},
|
||||||
}
|
}
|
||||||
`,
|
`,
|
||||||
expectVerifyErr: true,
|
expectVerifyErr: true,
|
||||||
|
featureListFileContent: featureListFileContent,
|
||||||
updatedFeatureListFileContent: `- name: APIListChunking
|
updatedFeatureListFileContent: `- name: APIListChunking
|
||||||
versionedSpecs:
|
versionedSpecs:
|
||||||
- default: true
|
- default: true
|
||||||
@ -509,7 +613,7 @@ var defaultVersionedKubernetesFeatureGates = map[featuregate.Feature]featuregate
|
|||||||
}
|
}
|
||||||
for _, tc := range tests {
|
for _, tc := range tests {
|
||||||
t.Run(tc.name, func(t *testing.T) {
|
t.Run(tc.name, func(t *testing.T) {
|
||||||
featureListFile := writeContentToTmpFile(t, "", "feature_list.yaml", strings.TrimSpace(featureListFileContent))
|
featureListFile := writeContentToTmpFile(t, "", "feature_list.yaml", tc.featureListFileContent)
|
||||||
tmpDir := filepath.Dir(featureListFile.Name())
|
tmpDir := filepath.Dir(featureListFile.Name())
|
||||||
_ = writeContentToTmpFile(t, tmpDir, "pkg/new_features.go", tc.goFileContent)
|
_ = writeContentToTmpFile(t, tmpDir, "pkg/new_features.go", tc.goFileContent)
|
||||||
err := verifyOrUpdateFeatureList(tmpDir, filepath.Base(featureListFile.Name()), false, true)
|
err := verifyOrUpdateFeatureList(tmpDir, filepath.Base(featureListFile.Name()), false, true)
|
||||||
|
Loading…
Reference in New Issue
Block a user