Merge pull request #129207 from Jefftree/remove-vap-alpha

Remove v1alpha1 admissionregistration APIs (ValidatingAdmissionPolicies & ValidatingAdmissionPolicyBindings)
This commit is contained in:
Kubernetes Prow Robot 2024-12-17 18:52:59 +01:00 committed by GitHub
commit cc03c6058b
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
4 changed files with 46 additions and 82 deletions

View File

@ -130,26 +130,6 @@ func (p RESTStorageProvider) v1alpha1Storage(apiResourceConfigSource serverstora
return storage, err return storage, err
} }
// validatingadmissionpolicies
if resource := "validatingadmissionpolicies"; apiResourceConfigSource.ResourceEnabled(admissionregistrationv1alpha1.SchemeGroupVersion.WithResource(resource)) {
policyStorage, policyStatusStorage, err := validatingadmissionpolicystorage.NewREST(restOptionsGetter, p.Authorizer, r)
if err != nil {
return storage, err
}
policyGetter = policyStorage
storage[resource] = policyStorage
storage[resource+"/status"] = policyStatusStorage
}
// validatingadmissionpolicybindings
if resource := "validatingadmissionpolicybindings"; apiResourceConfigSource.ResourceEnabled(admissionregistrationv1alpha1.SchemeGroupVersion.WithResource(resource)) {
policyBindingStorage, err := policybindingstorage.NewREST(restOptionsGetter, p.Authorizer, &policybindingstorage.DefaultPolicyGetter{Getter: policyGetter}, r)
if err != nil {
return storage, err
}
storage[resource] = policyBindingStorage
}
// mutatingadmissionpolicies // mutatingadmissionpolicies
if resource := "mutatingadmissionpolicies"; apiResourceConfigSource.ResourceEnabled(admissionregistrationv1alpha1.SchemeGroupVersion.WithResource(resource)) { if resource := "mutatingadmissionpolicies"; apiResourceConfigSource.ResourceEnabled(admissionregistrationv1alpha1.SchemeGroupVersion.WithResource(resource)) {
policyStorage, err := mutatingadmissionpolicystorage.NewREST(restOptionsGetter, p.Authorizer, r) policyStorage, err := mutatingadmissionpolicystorage.NewREST(restOptionsGetter, p.Authorizer, r)

View File

@ -31,7 +31,7 @@ import (
apiextensionsclientset "k8s.io/apiextensions-apiserver/pkg/client/clientset/clientset" apiextensionsclientset "k8s.io/apiextensions-apiserver/pkg/client/clientset/clientset"
apiservertesting "k8s.io/kubernetes/cmd/kube-apiserver/app/testing" apiservertesting "k8s.io/kubernetes/cmd/kube-apiserver/app/testing"
"k8s.io/kubernetes/pkg/apis/admissionregistration" "k8s.io/kubernetes/pkg/apis/admissionregistration"
admissionregistrationv1alpha1apis "k8s.io/kubernetes/pkg/apis/admissionregistration/v1alpha1" admissionregistrationv1apis "k8s.io/kubernetes/pkg/apis/admissionregistration/v1"
admissionregistrationv1beta1apis "k8s.io/kubernetes/pkg/apis/admissionregistration/v1beta1" admissionregistrationv1beta1apis "k8s.io/kubernetes/pkg/apis/admissionregistration/v1beta1"
"k8s.io/kubernetes/test/integration/etcd" "k8s.io/kubernetes/test/integration/etcd"
"k8s.io/kubernetes/test/integration/framework" "k8s.io/kubernetes/test/integration/framework"
@ -43,7 +43,6 @@ import (
clientset "k8s.io/client-go/kubernetes" clientset "k8s.io/client-go/kubernetes"
admissionregistrationv1 "k8s.io/api/admissionregistration/v1" admissionregistrationv1 "k8s.io/api/admissionregistration/v1"
admissionregistrationv1alpha1 "k8s.io/api/admissionregistration/v1alpha1"
admissionregistrationv1beta1 "k8s.io/api/admissionregistration/v1beta1" admissionregistrationv1beta1 "k8s.io/api/admissionregistration/v1beta1"
) )
@ -282,22 +281,22 @@ func createV1beta1ValidatingPolicyAndBinding(client clientset.Interface, convert
return nil return nil
} }
func createV1alpha1ValidatingPolicyAndBinding(client clientset.Interface, convertedRules []admissionregistrationv1alpha1.NamedRuleWithOperations) error { func createV1ValidatingPolicyAndBinding(client clientset.Interface, convertedRules []admissionregistrationv1.NamedRuleWithOperations) error {
exact := admissionregistrationv1alpha1.Exact exact := admissionregistrationv1.Exact
equivalent := admissionregistrationv1alpha1.Equivalent equivalent := admissionregistrationv1.Equivalent
denyAction := admissionregistrationv1alpha1.DenyAction denyAction := admissionregistrationv1.DenyAction
var outSpec admissionregistrationv1alpha1.ValidatingAdmissionPolicy var outSpec admissionregistrationv1.ValidatingAdmissionPolicy
if err := admissionregistrationv1alpha1apis.Convert_admissionregistration_ValidatingAdmissionPolicy_To_v1alpha1_ValidatingAdmissionPolicy(&testSpec, &outSpec, nil); err != nil { if err := admissionregistrationv1apis.Convert_admissionregistration_ValidatingAdmissionPolicy_To_v1_ValidatingAdmissionPolicy(&testSpec, &outSpec, nil); err != nil {
return err return err
} }
exactPolicyTemplate := outSpec.DeepCopy() exactPolicyTemplate := outSpec.DeepCopy()
convertedPolicyTemplate := outSpec.DeepCopy() convertedPolicyTemplate := outSpec.DeepCopy()
exactPolicyTemplate.SetName("test-policy-v1alpha1") exactPolicyTemplate.SetName("test-policy-v1")
exactPolicyTemplate.Spec.MatchConstraints = &admissionregistrationv1alpha1.MatchResources{ exactPolicyTemplate.Spec.MatchConstraints = &admissionregistrationv1.MatchResources{
ResourceRules: []admissionregistrationv1alpha1.NamedRuleWithOperations{ ResourceRules: []admissionregistrationv1.NamedRuleWithOperations{
{ {
RuleWithOperations: admissionregistrationv1.RuleWithOperations{ RuleWithOperations: admissionregistrationv1.RuleWithOperations{
Operations: []admissionregistrationv1.OperationType{admissionregistrationv1.OperationAll}, Operations: []admissionregistrationv1.OperationType{admissionregistrationv1.OperationAll},
@ -308,18 +307,18 @@ func createV1alpha1ValidatingPolicyAndBinding(client clientset.Interface, conver
MatchPolicy: &exact, MatchPolicy: &exact,
} }
convertedPolicyTemplate.SetName("test-policy-v1alpha1-convert") convertedPolicyTemplate.SetName("test-policy-v1-convert")
convertedPolicyTemplate.Spec.MatchConstraints = &admissionregistrationv1alpha1.MatchResources{ convertedPolicyTemplate.Spec.MatchConstraints = &admissionregistrationv1.MatchResources{
ResourceRules: convertedRules, ResourceRules: convertedRules,
MatchPolicy: &equivalent, MatchPolicy: &equivalent,
} }
exactPolicy, err := client.AdmissionregistrationV1alpha1().ValidatingAdmissionPolicies().Create(context.TODO(), exactPolicyTemplate, metav1.CreateOptions{}) exactPolicy, err := client.AdmissionregistrationV1().ValidatingAdmissionPolicies().Create(context.TODO(), exactPolicyTemplate, metav1.CreateOptions{})
if err != nil { if err != nil {
return err return err
} }
convertPolicy, err := client.AdmissionregistrationV1alpha1().ValidatingAdmissionPolicies().Create(context.TODO(), convertedPolicyTemplate, metav1.CreateOptions{}) convertPolicy, err := client.AdmissionregistrationV1().ValidatingAdmissionPolicies().Create(context.TODO(), convertedPolicyTemplate, metav1.CreateOptions{})
if err != nil { if err != nil {
return err return err
} }
@ -327,14 +326,14 @@ func createV1alpha1ValidatingPolicyAndBinding(client clientset.Interface, conver
// Create a param that holds the options for this // Create a param that holds the options for this
configuration, err := client.CoreV1().ConfigMaps("default").Create(context.TODO(), &corev1.ConfigMap{ configuration, err := client.CoreV1().ConfigMaps("default").Create(context.TODO(), &corev1.ConfigMap{
ObjectMeta: metav1.ObjectMeta{ ObjectMeta: metav1.ObjectMeta{
Name: "test-policy-v1alpha1-param", Name: "test-policy-v1-param",
Namespace: "default", Namespace: "default",
Annotations: map[string]string{ Annotations: map[string]string{
"skipMatch": "yes", "skipMatch": "yes",
}, },
}, },
Data: map[string]string{ Data: map[string]string{
"version": "v1alpha1", "version": "v1",
"phase": validation, "phase": validation,
"convert": "false", "convert": "false",
}, },
@ -345,14 +344,14 @@ func createV1alpha1ValidatingPolicyAndBinding(client clientset.Interface, conver
configurationConvert, err := client.CoreV1().ConfigMaps("default").Create(context.TODO(), &corev1.ConfigMap{ configurationConvert, err := client.CoreV1().ConfigMaps("default").Create(context.TODO(), &corev1.ConfigMap{
ObjectMeta: metav1.ObjectMeta{ ObjectMeta: metav1.ObjectMeta{
Name: "test-policy-v1alpha1-convert-param", Name: "test-policy-v1-convert-param",
Namespace: "default", Namespace: "default",
Annotations: map[string]string{ Annotations: map[string]string{
"skipMatch": "yes", "skipMatch": "yes",
}, },
}, },
Data: map[string]string{ Data: map[string]string{
"version": "v1alpha1", "version": "v1",
"phase": validation, "phase": validation,
"convert": "true", "convert": "true",
}, },
@ -361,14 +360,14 @@ func createV1alpha1ValidatingPolicyAndBinding(client clientset.Interface, conver
return err return err
} }
_, err = client.AdmissionregistrationV1alpha1().ValidatingAdmissionPolicyBindings().Create(context.TODO(), &admissionregistrationv1alpha1.ValidatingAdmissionPolicyBinding{ _, err = client.AdmissionregistrationV1().ValidatingAdmissionPolicyBindings().Create(context.TODO(), &admissionregistrationv1.ValidatingAdmissionPolicyBinding{
ObjectMeta: metav1.ObjectMeta{ ObjectMeta: metav1.ObjectMeta{
Name: "test-policy-v1alpha1-binding", Name: "test-policy-v1-binding",
}, },
Spec: admissionregistrationv1alpha1.ValidatingAdmissionPolicyBindingSpec{ Spec: admissionregistrationv1.ValidatingAdmissionPolicyBindingSpec{
PolicyName: exactPolicy.GetName(), PolicyName: exactPolicy.GetName(),
ValidationActions: []admissionregistrationv1alpha1.ValidationAction{admissionregistrationv1alpha1.Warn}, ValidationActions: []admissionregistrationv1.ValidationAction{admissionregistrationv1.Warn},
ParamRef: &admissionregistrationv1alpha1.ParamRef{ ParamRef: &admissionregistrationv1.ParamRef{
Name: configuration.GetName(), Name: configuration.GetName(),
Namespace: configuration.GetNamespace(), Namespace: configuration.GetNamespace(),
ParameterNotFoundAction: &denyAction, ParameterNotFoundAction: &denyAction,
@ -378,14 +377,14 @@ func createV1alpha1ValidatingPolicyAndBinding(client clientset.Interface, conver
if err != nil { if err != nil {
return err return err
} }
_, err = client.AdmissionregistrationV1alpha1().ValidatingAdmissionPolicyBindings().Create(context.TODO(), &admissionregistrationv1alpha1.ValidatingAdmissionPolicyBinding{ _, err = client.AdmissionregistrationV1().ValidatingAdmissionPolicyBindings().Create(context.TODO(), &admissionregistrationv1.ValidatingAdmissionPolicyBinding{
ObjectMeta: metav1.ObjectMeta{ ObjectMeta: metav1.ObjectMeta{
Name: "test-policy-v1alpha1-convert-binding", Name: "test-policy-v1-convert-binding",
}, },
Spec: admissionregistrationv1alpha1.ValidatingAdmissionPolicyBindingSpec{ Spec: admissionregistrationv1.ValidatingAdmissionPolicyBindingSpec{
PolicyName: convertPolicy.GetName(), PolicyName: convertPolicy.GetName(),
ValidationActions: []admissionregistrationv1alpha1.ValidationAction{admissionregistrationv1alpha1.Warn}, ValidationActions: []admissionregistrationv1.ValidationAction{admissionregistrationv1.Warn},
ParamRef: &admissionregistrationv1alpha1.ParamRef{ ParamRef: &admissionregistrationv1.ParamRef{
Name: configurationConvert.GetName(), Name: configurationConvert.GetName(),
Namespace: configurationConvert.GetNamespace(), Namespace: configurationConvert.GetNamespace(),
ParameterNotFoundAction: &denyAction, ParameterNotFoundAction: &denyAction,
@ -405,10 +404,6 @@ func createV1alpha1ValidatingPolicyAndBinding(client clientset.Interface, conver
// This test tries to mirror very closely the same test for webhook admission // This test tries to mirror very closely the same test for webhook admission
// test/integration/apiserver/admissionwebhook/admission_test.go testWebhookAdmission // test/integration/apiserver/admissionwebhook/admission_test.go testWebhookAdmission
func TestPolicyAdmission(t *testing.T) { func TestPolicyAdmission(t *testing.T) {
// KUBE_APISERVER_SERVE_REMOVED_APIS_FOR_ONE_RELEASE allows for APIs pending removal to not block tests
// TODO: Remove this line once admissionregistration v1alpha1 types to be removed in 1.32 are fully removed
t.Setenv("KUBE_APISERVER_SERVE_REMOVED_APIS_FOR_ONE_RELEASE", "true")
holder := &policyExpectationHolder{ holder := &policyExpectationHolder{
holder: holder{ holder: holder{
t: t, t: t,
@ -505,7 +500,7 @@ func TestPolicyAdmission(t *testing.T) {
convertedResources := map[string]schema.GroupVersionResource{} convertedResources := map[string]schema.GroupVersionResource{}
// build the webhook rules enumerating the specific group/version/resources we want // build the webhook rules enumerating the specific group/version/resources we want
convertedV1beta1Rules := []admissionregistrationv1beta1.NamedRuleWithOperations{} convertedV1beta1Rules := []admissionregistrationv1beta1.NamedRuleWithOperations{}
convertedV1alpha1Rules := []admissionregistrationv1alpha1.NamedRuleWithOperations{} convertedV1Rules := []admissionregistrationv1.NamedRuleWithOperations{}
for _, gvr := range gvrsToTest { for _, gvr := range gvrsToTest {
metaGVR := metav1.GroupVersionResource{Group: gvr.Group, Version: gvr.Version, Resource: gvr.Resource} metaGVR := metav1.GroupVersionResource{Group: gvr.Group, Version: gvr.Version, Resource: gvr.Resource}
@ -522,10 +517,10 @@ func TestPolicyAdmission(t *testing.T) {
Rule: admissionregistrationv1beta1.Rule{APIGroups: []string{gvr.Group}, APIVersions: []string{gvr.Version}, Resources: []string{gvr.Resource}}, Rule: admissionregistrationv1beta1.Rule{APIGroups: []string{gvr.Group}, APIVersions: []string{gvr.Version}, Resources: []string{gvr.Resource}},
}, },
}) })
convertedV1alpha1Rules = append(convertedV1alpha1Rules, admissionregistrationv1alpha1.NamedRuleWithOperations{ convertedV1Rules = append(convertedV1Rules, admissionregistrationv1.NamedRuleWithOperations{
RuleWithOperations: admissionregistrationv1.RuleWithOperations{ RuleWithOperations: admissionregistrationv1.RuleWithOperations{
Operations: []admissionregistrationv1alpha1.OperationType{admissionregistrationv1alpha1.OperationAll}, Operations: []admissionregistrationv1.OperationType{admissionregistrationv1.OperationAll},
Rule: admissionregistrationv1alpha1.Rule{APIGroups: []string{gvr.Group}, APIVersions: []string{gvr.Version}, Resources: []string{gvr.Resource}}, Rule: admissionregistrationv1.Rule{APIGroups: []string{gvr.Group}, APIVersions: []string{gvr.Version}, Resources: []string{gvr.Resource}},
}, },
}) })
} }
@ -535,11 +530,10 @@ func TestPolicyAdmission(t *testing.T) {
holder.gvrToConvertedGVK[metaGVR] = schema.GroupVersionKind{Group: resourcesByGVR[convertedGVR].Group, Version: resourcesByGVR[convertedGVR].Version, Kind: resourcesByGVR[convertedGVR].Kind} holder.gvrToConvertedGVK[metaGVR] = schema.GroupVersionKind{Group: resourcesByGVR[convertedGVR].Group, Version: resourcesByGVR[convertedGVR].Version, Kind: resourcesByGVR[convertedGVR].Kind}
} }
if err := createV1alpha1ValidatingPolicyAndBinding(client, convertedV1alpha1Rules); err != nil { if err := createV1beta1ValidatingPolicyAndBinding(client, convertedV1beta1Rules); err != nil {
t.Fatal(err) t.Fatal(err)
} }
if err := createV1ValidatingPolicyAndBinding(client, convertedV1Rules); err != nil {
if err := createV1beta1ValidatingPolicyAndBinding(client, convertedV1beta1Rules); err != nil {
t.Fatal(err) t.Fatal(err)
} }
@ -610,7 +604,7 @@ func (p *policyExpectationHolder) expect(gvr schema.GroupVersionResource, gvk, o
p.recorded = map[webhookOptions]*admissionRequest{} p.recorded = map[webhookOptions]*admissionRequest{}
for _, phase := range []string{validation} { for _, phase := range []string{validation} {
for _, converted := range []bool{true, false} { for _, converted := range []bool{true, false} {
for _, version := range []string{"v1alpha1", "v1beta1"} { for _, version := range []string{"v1beta1", "v1"} {
p.recorded[webhookOptions{version: version, phase: phase, converted: converted}] = nil p.recorded[webhookOptions{version: version, phase: phase, converted: converted}] = nil
} }
} }

View File

@ -137,17 +137,17 @@ var (
// gvr("admissionregistration.k8s.io", "v1beta1", "validatingwebhookconfigurations"): true, // gvr("admissionregistration.k8s.io", "v1beta1", "validatingwebhookconfigurations"): true,
// gvr("admissionregistration.k8s.io", "v1", "mutatingwebhookconfigurations"): true, // gvr("admissionregistration.k8s.io", "v1", "mutatingwebhookconfigurations"): true,
// gvr("admissionregistration.k8s.io", "v1", "validatingwebhookconfigurations"): true, // gvr("admissionregistration.k8s.io", "v1", "validatingwebhookconfigurations"): true,
gvr("admissionregistration.k8s.io", "v1alpha1", "validatingadmissionpolicies"): true, // gvr("admissionregistration.k8s.io", "v1alpha1", "validatingadmissionpolicies"): true,
gvr("admissionregistration.k8s.io", "v1alpha1", "validatingadmissionpolicies/status"): true, // gvr("admissionregistration.k8s.io", "v1alpha1", "validatingadmissionpolicies/status"): true,
gvr("admissionregistration.k8s.io", "v1alpha1", "validatingadmissionpolicybindings"): true, // gvr("admissionregistration.k8s.io", "v1alpha1", "validatingadmissionpolicybindings"): true,
gvr("admissionregistration.k8s.io", "v1beta1", "validatingadmissionpolicies"): true, gvr("admissionregistration.k8s.io", "v1beta1", "validatingadmissionpolicies"): true,
gvr("admissionregistration.k8s.io", "v1beta1", "validatingadmissionpolicies/status"): true, gvr("admissionregistration.k8s.io", "v1beta1", "validatingadmissionpolicies/status"): true,
gvr("admissionregistration.k8s.io", "v1beta1", "validatingadmissionpolicybindings"): true, gvr("admissionregistration.k8s.io", "v1beta1", "validatingadmissionpolicybindings"): true,
gvr("admissionregistration.k8s.io", "v1", "validatingadmissionpolicies"): true, gvr("admissionregistration.k8s.io", "v1", "validatingadmissionpolicies"): true,
gvr("admissionregistration.k8s.io", "v1", "validatingadmissionpolicies/status"): true, gvr("admissionregistration.k8s.io", "v1", "validatingadmissionpolicies/status"): true,
gvr("admissionregistration.k8s.io", "v1", "validatingadmissionpolicybindings"): true, gvr("admissionregistration.k8s.io", "v1", "validatingadmissionpolicybindings"): true,
gvr("admissionregistration.k8s.io", "v1alpha1", "mutatingadmissionpolicies"): true, gvr("admissionregistration.k8s.io", "v1alpha1", "mutatingadmissionpolicies"): true,
gvr("admissionregistration.k8s.io", "v1alpha1", "mutatingadmissionpolicybindings"): true, gvr("admissionregistration.k8s.io", "v1alpha1", "mutatingadmissionpolicybindings"): true,
// transient resource exemption // transient resource exemption
gvr("authentication.k8s.io", "v1", "selfsubjectreviews"): true, gvr("authentication.k8s.io", "v1", "selfsubjectreviews"): true,
gvr("authentication.k8s.io", "v1beta1", "selfsubjectreviews"): true, gvr("authentication.k8s.io", "v1beta1", "selfsubjectreviews"): true,

View File

@ -352,16 +352,6 @@ func GetEtcdStorageDataForNamespace(namespace string) map[schema.GroupVersionRes
// -- // --
// k8s.io/kubernetes/pkg/apis/admissionregistration/v1alpha1 // k8s.io/kubernetes/pkg/apis/admissionregistration/v1alpha1
gvr("admissionregistration.k8s.io", "v1alpha1", "validatingadmissionpolicies"): {
Stub: `{"metadata":{"name":"vap1a1","creationTimestamp":null},"spec":{"paramKind":{"apiVersion":"test.example.com/v1","kind":"Example"},"matchConstraints":{"resourceRules": [{"resourceNames": ["fakeName"], "apiGroups":["apps"],"apiVersions":["v1"],"operations":["CREATE", "UPDATE"], "resources":["deployments"]}]},"validations":[{"expression":"object.spec.replicas <= params.maxReplicas","message":"Too many replicas"}]}}`,
ExpectedEtcdPath: "/registry/validatingadmissionpolicies/vap1a1",
ExpectedGVK: gvkP("admissionregistration.k8s.io", "v1", "ValidatingAdmissionPolicy"),
},
gvr("admissionregistration.k8s.io", "v1alpha1", "validatingadmissionpolicybindings"): {
Stub: `{"metadata":{"name":"pb1a1","creationTimestamp":null},"spec":{"policyName":"replicalimit-policy.example.com","paramRef":{"name":"replica-limit-test.example.com"},"validationActions":["Deny"]}}`,
ExpectedEtcdPath: "/registry/validatingadmissionpolicybindings/pb1a1",
ExpectedGVK: gvkP("admissionregistration.k8s.io", "v1", "ValidatingAdmissionPolicyBinding"),
},
gvr("admissionregistration.k8s.io", "v1alpha1", "mutatingadmissionpolicies"): { gvr("admissionregistration.k8s.io", "v1alpha1", "mutatingadmissionpolicies"): {
Stub: `{"metadata":{"name":"map1","creationTimestamp":null},"spec":{"paramKind":{"apiVersion":"test.example.com/v1","kind":"Example"},"matchConstraints":{"resourceRules": [{"resourceNames": ["fakeName"], "apiGroups":["apps"],"apiVersions":["v1"],"operations":["CREATE", "UPDATE"], "resources":["deployments"]}]},"reinvocationPolicy": "IfNeeded","mutations":[{"applyConfiguration": {"expression":"Object{metadata: Object.metadata{labels: {'example':'true'}}}"}, "patchType":"ApplyConfiguration"}]}}`, Stub: `{"metadata":{"name":"map1","creationTimestamp":null},"spec":{"paramKind":{"apiVersion":"test.example.com/v1","kind":"Example"},"matchConstraints":{"resourceRules": [{"resourceNames": ["fakeName"], "apiGroups":["apps"],"apiVersions":["v1"],"operations":["CREATE", "UPDATE"], "resources":["deployments"]}]},"reinvocationPolicy": "IfNeeded","mutations":[{"applyConfiguration": {"expression":"Object{metadata: Object.metadata{labels: {'example':'true'}}}"}, "patchType":"ApplyConfiguration"}]}}`,
ExpectedEtcdPath: "/registry/mutatingadmissionpolicies/map1", ExpectedEtcdPath: "/registry/mutatingadmissionpolicies/map1",