mirror of
				https://github.com/optim-enterprises-bv/kubernetes.git
				synced 2025-11-04 12:18:16 +00:00 
			
		
		
		
	Allow enabling/disabling specific extensions/v1beta1 resources
This commit is contained in:
		@@ -474,8 +474,6 @@ func DefaultAPIResourceConfigSource() *serverstorage.ResourceConfig {
 | 
				
			|||||||
	ret.EnableVersions(
 | 
						ret.EnableVersions(
 | 
				
			||||||
		admissionregistrationv1beta1.SchemeGroupVersion,
 | 
							admissionregistrationv1beta1.SchemeGroupVersion,
 | 
				
			||||||
		apiv1.SchemeGroupVersion,
 | 
							apiv1.SchemeGroupVersion,
 | 
				
			||||||
		appsv1beta1.SchemeGroupVersion,
 | 
					 | 
				
			||||||
		appsv1beta2.SchemeGroupVersion,
 | 
					 | 
				
			||||||
		appsv1.SchemeGroupVersion,
 | 
							appsv1.SchemeGroupVersion,
 | 
				
			||||||
		authenticationv1.SchemeGroupVersion,
 | 
							authenticationv1.SchemeGroupVersion,
 | 
				
			||||||
		authenticationv1beta1.SchemeGroupVersion,
 | 
							authenticationv1beta1.SchemeGroupVersion,
 | 
				
			||||||
@@ -499,6 +497,24 @@ func DefaultAPIResourceConfigSource() *serverstorage.ResourceConfig {
 | 
				
			|||||||
		storageapiv1beta1.SchemeGroupVersion,
 | 
							storageapiv1beta1.SchemeGroupVersion,
 | 
				
			||||||
		schedulingapiv1beta1.SchemeGroupVersion,
 | 
							schedulingapiv1beta1.SchemeGroupVersion,
 | 
				
			||||||
	)
 | 
						)
 | 
				
			||||||
 | 
						// enable non-deprecated beta resources in extensions/v1beta1 explicitly so we have a full list of what's possible to serve
 | 
				
			||||||
 | 
						ret.EnableResources(
 | 
				
			||||||
 | 
							extensionsapiv1beta1.SchemeGroupVersion.WithResource("ingresses"),
 | 
				
			||||||
 | 
						)
 | 
				
			||||||
 | 
						// enable deprecated beta resources in extensions/v1beta1 explicitly so we have a full list of what's possible to serve
 | 
				
			||||||
 | 
						ret.EnableResources(
 | 
				
			||||||
 | 
							extensionsapiv1beta1.SchemeGroupVersion.WithResource("daemonsets"),
 | 
				
			||||||
 | 
							extensionsapiv1beta1.SchemeGroupVersion.WithResource("deployments"),
 | 
				
			||||||
 | 
							extensionsapiv1beta1.SchemeGroupVersion.WithResource("networkpolicies"),
 | 
				
			||||||
 | 
							extensionsapiv1beta1.SchemeGroupVersion.WithResource("podsecuritypolicies"),
 | 
				
			||||||
 | 
							extensionsapiv1beta1.SchemeGroupVersion.WithResource("replicasets"),
 | 
				
			||||||
 | 
							extensionsapiv1beta1.SchemeGroupVersion.WithResource("replicationcontrollers"),
 | 
				
			||||||
 | 
						)
 | 
				
			||||||
 | 
						// enable deprecated beta versions explicitly so we have a full list of what's possible to serve
 | 
				
			||||||
 | 
						ret.EnableVersions(
 | 
				
			||||||
 | 
							appsv1beta1.SchemeGroupVersion,
 | 
				
			||||||
 | 
							appsv1beta2.SchemeGroupVersion,
 | 
				
			||||||
 | 
						)
 | 
				
			||||||
	// disable alpha versions explicitly so we have a full list of what's possible to serve
 | 
						// disable alpha versions explicitly so we have a full list of what's possible to serve
 | 
				
			||||||
	ret.DisableVersions(
 | 
						ret.DisableVersions(
 | 
				
			||||||
		auditregistrationv1alpha1.SchemeGroupVersion,
 | 
							auditregistrationv1alpha1.SchemeGroupVersion,
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -52,39 +52,53 @@ func (p RESTStorageProvider) v1beta1Storage(apiResourceConfigSource serverstorag
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	// This is a dummy replication controller for scale subresource purposes.
 | 
						// This is a dummy replication controller for scale subresource purposes.
 | 
				
			||||||
	// TODO: figure out how to enable this only if needed as a part of scale subresource GA.
 | 
						// TODO: figure out how to enable this only if needed as a part of scale subresource GA.
 | 
				
			||||||
	controllerStorage := expcontrollerstore.NewStorage(restOptionsGetter)
 | 
						if apiResourceConfigSource.ResourceEnabled(extensionsapiv1beta1.SchemeGroupVersion.WithResource("replicationcontrollers")) {
 | 
				
			||||||
	storage["replicationcontrollers"] = controllerStorage.ReplicationController
 | 
							controllerStorage := expcontrollerstore.NewStorage(restOptionsGetter)
 | 
				
			||||||
	storage["replicationcontrollers/scale"] = controllerStorage.Scale
 | 
							storage["replicationcontrollers"] = controllerStorage.ReplicationController
 | 
				
			||||||
 | 
							storage["replicationcontrollers/scale"] = controllerStorage.Scale
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// daemonsets
 | 
						// daemonsets
 | 
				
			||||||
	daemonSetStorage, daemonSetStatusStorage := daemonstore.NewREST(restOptionsGetter)
 | 
						if apiResourceConfigSource.ResourceEnabled(extensionsapiv1beta1.SchemeGroupVersion.WithResource("daemonsets")) {
 | 
				
			||||||
	storage["daemonsets"] = daemonSetStorage.WithCategories(nil)
 | 
							daemonSetStorage, daemonSetStatusStorage := daemonstore.NewREST(restOptionsGetter)
 | 
				
			||||||
	storage["daemonsets/status"] = daemonSetStatusStorage
 | 
							storage["daemonsets"] = daemonSetStorage.WithCategories(nil)
 | 
				
			||||||
 | 
							storage["daemonsets/status"] = daemonSetStatusStorage
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	//deployments
 | 
						//deployments
 | 
				
			||||||
	deploymentStorage := deploymentstore.NewStorage(restOptionsGetter)
 | 
						if apiResourceConfigSource.ResourceEnabled(extensionsapiv1beta1.SchemeGroupVersion.WithResource("deployments")) {
 | 
				
			||||||
	storage["deployments"] = deploymentStorage.Deployment.WithCategories(nil)
 | 
							deploymentStorage := deploymentstore.NewStorage(restOptionsGetter)
 | 
				
			||||||
	storage["deployments/status"] = deploymentStorage.Status
 | 
							storage["deployments"] = deploymentStorage.Deployment.WithCategories(nil)
 | 
				
			||||||
	storage["deployments/rollback"] = deploymentStorage.Rollback
 | 
							storage["deployments/status"] = deploymentStorage.Status
 | 
				
			||||||
	storage["deployments/scale"] = deploymentStorage.Scale
 | 
							storage["deployments/rollback"] = deploymentStorage.Rollback
 | 
				
			||||||
 | 
							storage["deployments/scale"] = deploymentStorage.Scale
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
	// ingresses
 | 
						// ingresses
 | 
				
			||||||
	ingressStorage, ingressStatusStorage := ingressstore.NewREST(restOptionsGetter)
 | 
						if apiResourceConfigSource.ResourceEnabled(extensionsapiv1beta1.SchemeGroupVersion.WithResource("ingresses")) {
 | 
				
			||||||
	storage["ingresses"] = ingressStorage
 | 
							ingressStorage, ingressStatusStorage := ingressstore.NewREST(restOptionsGetter)
 | 
				
			||||||
	storage["ingresses/status"] = ingressStatusStorage
 | 
							storage["ingresses"] = ingressStorage
 | 
				
			||||||
 | 
							storage["ingresses/status"] = ingressStatusStorage
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// podsecuritypolicy
 | 
						// podsecuritypolicy
 | 
				
			||||||
	podSecurityPolicyStorage := pspstore.NewREST(restOptionsGetter)
 | 
						if apiResourceConfigSource.ResourceEnabled(extensionsapiv1beta1.SchemeGroupVersion.WithResource("podsecuritypolicies")) {
 | 
				
			||||||
	storage["podSecurityPolicies"] = podSecurityPolicyStorage
 | 
							podSecurityPolicyStorage := pspstore.NewREST(restOptionsGetter)
 | 
				
			||||||
 | 
							storage["podSecurityPolicies"] = podSecurityPolicyStorage
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// replicasets
 | 
						// replicasets
 | 
				
			||||||
	replicaSetStorage := replicasetstore.NewStorage(restOptionsGetter)
 | 
						if apiResourceConfigSource.ResourceEnabled(extensionsapiv1beta1.SchemeGroupVersion.WithResource("replicasets")) {
 | 
				
			||||||
	storage["replicasets"] = replicaSetStorage.ReplicaSet.WithCategories(nil)
 | 
							replicaSetStorage := replicasetstore.NewStorage(restOptionsGetter)
 | 
				
			||||||
	storage["replicasets/status"] = replicaSetStorage.Status
 | 
							storage["replicasets"] = replicaSetStorage.ReplicaSet.WithCategories(nil)
 | 
				
			||||||
	storage["replicasets/scale"] = replicaSetStorage.Scale
 | 
							storage["replicasets/status"] = replicaSetStorage.Status
 | 
				
			||||||
 | 
							storage["replicasets/scale"] = replicaSetStorage.Scale
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// networkpolicies
 | 
						// networkpolicies
 | 
				
			||||||
	networkExtensionsStorage := networkpolicystore.NewREST(restOptionsGetter)
 | 
						if apiResourceConfigSource.ResourceEnabled(extensionsapiv1beta1.SchemeGroupVersion.WithResource("networkpolicies")) {
 | 
				
			||||||
	storage["networkpolicies"] = networkExtensionsStorage
 | 
							networkExtensionsStorage := networkpolicystore.NewREST(restOptionsGetter)
 | 
				
			||||||
 | 
							storage["networkpolicies"] = networkExtensionsStorage
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return storage
 | 
						return storage
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -94,7 +94,7 @@ func MergeAPIResourceConfigs(
 | 
				
			|||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		tokens := strings.Split(key, "/")
 | 
							tokens := strings.Split(key, "/")
 | 
				
			||||||
		if len(tokens) != 2 {
 | 
							if len(tokens) < 2 {
 | 
				
			||||||
			continue
 | 
								continue
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		groupVersionString := tokens[0] + "/" + tokens[1]
 | 
							groupVersionString := tokens[0] + "/" + tokens[1]
 | 
				
			||||||
@@ -103,6 +103,12 @@ func MergeAPIResourceConfigs(
 | 
				
			|||||||
			return nil, fmt.Errorf("invalid key %s", key)
 | 
								return nil, fmt.Errorf("invalid key %s", key)
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							// individual resource enablement/disablement is only supported in the extensions/v1beta1 API group for legacy reasons.
 | 
				
			||||||
 | 
							// all other API groups are expected to contain coherent sets of resources that are enabled/disabled together.
 | 
				
			||||||
 | 
							if len(tokens) > 2 && (groupVersion != schema.GroupVersion{Group: "extensions", Version: "v1beta1"}) {
 | 
				
			||||||
 | 
								return nil, fmt.Errorf("invalid key %s, individual resource enablement/disablement is not supported in %s", key, groupVersion.String())
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		// Exclude group not registered into the registry.
 | 
							// Exclude group not registered into the registry.
 | 
				
			||||||
		if !registry.IsGroupRegistered(groupVersion.Group) {
 | 
							if !registry.IsGroupRegistered(groupVersion.Group) {
 | 
				
			||||||
			continue
 | 
								continue
 | 
				
			||||||
@@ -117,10 +123,22 @@ func MergeAPIResourceConfigs(
 | 
				
			|||||||
			return nil, err
 | 
								return nil, err
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		if enabled {
 | 
							if enabled {
 | 
				
			||||||
 | 
								// enable the groupVersion for "group/version=true" and "group/version/resource=true"
 | 
				
			||||||
			resourceConfig.EnableVersions(groupVersion)
 | 
								resourceConfig.EnableVersions(groupVersion)
 | 
				
			||||||
		} else {
 | 
							} else if len(tokens) == 2 {
 | 
				
			||||||
 | 
								// disable the groupVersion only for "group/version=false", not "group/version/resource=false"
 | 
				
			||||||
			resourceConfig.DisableVersions(groupVersion)
 | 
								resourceConfig.DisableVersions(groupVersion)
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							if len(tokens) < 3 {
 | 
				
			||||||
 | 
								continue
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							groupVersionResource := groupVersion.WithResource(tokens[2])
 | 
				
			||||||
 | 
							if enabled {
 | 
				
			||||||
 | 
								resourceConfig.EnableResources(groupVersionResource)
 | 
				
			||||||
 | 
							} else {
 | 
				
			||||||
 | 
								resourceConfig.DisableResources(groupVersionResource)
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return resourceConfig, nil
 | 
						return resourceConfig, nil
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -117,6 +117,11 @@ func TestParseRuntimeConfig(t *testing.T) {
 | 
				
			|||||||
			expectedAPIConfig: func() *serverstore.ResourceConfig {
 | 
								expectedAPIConfig: func() *serverstore.ResourceConfig {
 | 
				
			||||||
				config := newFakeAPIResourceConfigSource()
 | 
									config := newFakeAPIResourceConfigSource()
 | 
				
			||||||
				config.EnableVersions(scheme.PrioritizedVersionsAllGroups()...)
 | 
									config.EnableVersions(scheme.PrioritizedVersionsAllGroups()...)
 | 
				
			||||||
 | 
									config.EnableResources(
 | 
				
			||||||
 | 
										extensionsapiv1beta1.SchemeGroupVersion.WithResource("deployments"),
 | 
				
			||||||
 | 
										extensionsapiv1beta1.SchemeGroupVersion.WithResource("replicasets"),
 | 
				
			||||||
 | 
										extensionsapiv1beta1.SchemeGroupVersion.WithResource("daemonsets"),
 | 
				
			||||||
 | 
									)
 | 
				
			||||||
				return config
 | 
									return config
 | 
				
			||||||
			},
 | 
								},
 | 
				
			||||||
			err: false,
 | 
								err: false,
 | 
				
			||||||
@@ -133,10 +138,71 @@ func TestParseRuntimeConfig(t *testing.T) {
 | 
				
			|||||||
			expectedAPIConfig: func() *serverstore.ResourceConfig {
 | 
								expectedAPIConfig: func() *serverstore.ResourceConfig {
 | 
				
			||||||
				config := newFakeAPIResourceConfigSource()
 | 
									config := newFakeAPIResourceConfigSource()
 | 
				
			||||||
				config.DisableVersions(extensionsapiv1beta1.SchemeGroupVersion)
 | 
									config.DisableVersions(extensionsapiv1beta1.SchemeGroupVersion)
 | 
				
			||||||
 | 
									config.DisableResources(extensionsapiv1beta1.SchemeGroupVersion.WithResource("ingresses"))
 | 
				
			||||||
				return config
 | 
									return config
 | 
				
			||||||
			},
 | 
								},
 | 
				
			||||||
			err: false,
 | 
								err: false,
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								// enable specific extensions resources
 | 
				
			||||||
 | 
								runtimeConfig: map[string]string{
 | 
				
			||||||
 | 
									"extensions/v1beta1/deployments": "true",
 | 
				
			||||||
 | 
								},
 | 
				
			||||||
 | 
								defaultResourceConfig: func() *serverstore.ResourceConfig {
 | 
				
			||||||
 | 
									return newFakeAPIResourceConfigSource()
 | 
				
			||||||
 | 
								},
 | 
				
			||||||
 | 
								expectedAPIConfig: func() *serverstore.ResourceConfig {
 | 
				
			||||||
 | 
									config := newFakeAPIResourceConfigSource()
 | 
				
			||||||
 | 
									config.EnableResources(extensionsapiv1beta1.SchemeGroupVersion.WithResource("deployments"))
 | 
				
			||||||
 | 
									return config
 | 
				
			||||||
 | 
								},
 | 
				
			||||||
 | 
								err: false,
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								// disable specific extensions resources
 | 
				
			||||||
 | 
								runtimeConfig: map[string]string{
 | 
				
			||||||
 | 
									"extensions/v1beta1/ingresses": "false",
 | 
				
			||||||
 | 
								},
 | 
				
			||||||
 | 
								defaultResourceConfig: func() *serverstore.ResourceConfig {
 | 
				
			||||||
 | 
									return newFakeAPIResourceConfigSource()
 | 
				
			||||||
 | 
								},
 | 
				
			||||||
 | 
								expectedAPIConfig: func() *serverstore.ResourceConfig {
 | 
				
			||||||
 | 
									config := newFakeAPIResourceConfigSource()
 | 
				
			||||||
 | 
									config.DisableResources(extensionsapiv1beta1.SchemeGroupVersion.WithResource("ingresses"))
 | 
				
			||||||
 | 
									return config
 | 
				
			||||||
 | 
								},
 | 
				
			||||||
 | 
								err: false,
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								// disable all extensions resources
 | 
				
			||||||
 | 
								runtimeConfig: map[string]string{
 | 
				
			||||||
 | 
									"extensions/v1beta1": "false",
 | 
				
			||||||
 | 
								},
 | 
				
			||||||
 | 
								defaultResourceConfig: func() *serverstore.ResourceConfig {
 | 
				
			||||||
 | 
									return newFakeAPIResourceConfigSource()
 | 
				
			||||||
 | 
								},
 | 
				
			||||||
 | 
								expectedAPIConfig: func() *serverstore.ResourceConfig {
 | 
				
			||||||
 | 
									config := newFakeAPIResourceConfigSource()
 | 
				
			||||||
 | 
									config.DisableVersions(extensionsapiv1beta1.SchemeGroupVersion)
 | 
				
			||||||
 | 
									return config
 | 
				
			||||||
 | 
								},
 | 
				
			||||||
 | 
								err: false,
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								// disable a non-extensions resource
 | 
				
			||||||
 | 
								runtimeConfig: map[string]string{
 | 
				
			||||||
 | 
									"apps/v1/deployments": "false",
 | 
				
			||||||
 | 
								},
 | 
				
			||||||
 | 
								defaultResourceConfig: func() *serverstore.ResourceConfig {
 | 
				
			||||||
 | 
									return newFakeAPIResourceConfigSource()
 | 
				
			||||||
 | 
								},
 | 
				
			||||||
 | 
								expectedAPIConfig: func() *serverstore.ResourceConfig {
 | 
				
			||||||
 | 
									config := newFakeAPIResourceConfigSource()
 | 
				
			||||||
 | 
									config.DisableVersions(extensionsapiv1beta1.SchemeGroupVersion)
 | 
				
			||||||
 | 
									return config
 | 
				
			||||||
 | 
								},
 | 
				
			||||||
 | 
								err: true,
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	for index, test := range testCases {
 | 
						for index, test := range testCases {
 | 
				
			||||||
		t.Log(scheme.PrioritizedVersionsAllGroups())
 | 
							t.Log(scheme.PrioritizedVersionsAllGroups())
 | 
				
			||||||
@@ -161,6 +227,14 @@ func newFakeAPIResourceConfigSource() *serverstore.ResourceConfig {
 | 
				
			|||||||
		apiv1.SchemeGroupVersion,
 | 
							apiv1.SchemeGroupVersion,
 | 
				
			||||||
		extensionsapiv1beta1.SchemeGroupVersion,
 | 
							extensionsapiv1beta1.SchemeGroupVersion,
 | 
				
			||||||
	)
 | 
						)
 | 
				
			||||||
 | 
						ret.EnableResources(
 | 
				
			||||||
 | 
							extensionsapiv1beta1.SchemeGroupVersion.WithResource("ingresses"),
 | 
				
			||||||
 | 
						)
 | 
				
			||||||
 | 
						ret.DisableResources(
 | 
				
			||||||
 | 
							extensionsapiv1beta1.SchemeGroupVersion.WithResource("deployments"),
 | 
				
			||||||
 | 
							extensionsapiv1beta1.SchemeGroupVersion.WithResource("replicasets"),
 | 
				
			||||||
 | 
							extensionsapiv1beta1.SchemeGroupVersion.WithResource("daemonsets"),
 | 
				
			||||||
 | 
						)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return ret
 | 
						return ret
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -23,6 +23,7 @@ import (
 | 
				
			|||||||
// APIResourceConfigSource is the interface to determine which groups and versions are enabled
 | 
					// APIResourceConfigSource is the interface to determine which groups and versions are enabled
 | 
				
			||||||
type APIResourceConfigSource interface {
 | 
					type APIResourceConfigSource interface {
 | 
				
			||||||
	VersionEnabled(version schema.GroupVersion) bool
 | 
						VersionEnabled(version schema.GroupVersion) bool
 | 
				
			||||||
 | 
						ResourceEnabled(resource schema.GroupVersionResource) bool
 | 
				
			||||||
	AnyVersionForGroupEnabled(group string) bool
 | 
						AnyVersionForGroupEnabled(group string) bool
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -30,22 +31,29 @@ var _ APIResourceConfigSource = &ResourceConfig{}
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
type ResourceConfig struct {
 | 
					type ResourceConfig struct {
 | 
				
			||||||
	GroupVersionConfigs map[schema.GroupVersion]bool
 | 
						GroupVersionConfigs map[schema.GroupVersion]bool
 | 
				
			||||||
 | 
						ResourceConfigs     map[schema.GroupVersionResource]bool
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func NewResourceConfig() *ResourceConfig {
 | 
					func NewResourceConfig() *ResourceConfig {
 | 
				
			||||||
	return &ResourceConfig{GroupVersionConfigs: map[schema.GroupVersion]bool{}}
 | 
						return &ResourceConfig{GroupVersionConfigs: map[schema.GroupVersion]bool{}, ResourceConfigs: map[schema.GroupVersionResource]bool{}}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func (o *ResourceConfig) DisableAll() {
 | 
					func (o *ResourceConfig) DisableAll() {
 | 
				
			||||||
	for k := range o.GroupVersionConfigs {
 | 
						for k := range o.GroupVersionConfigs {
 | 
				
			||||||
		o.GroupVersionConfigs[k] = false
 | 
							o.GroupVersionConfigs[k] = false
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
						for k := range o.ResourceConfigs {
 | 
				
			||||||
 | 
							o.ResourceConfigs[k] = false
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func (o *ResourceConfig) EnableAll() {
 | 
					func (o *ResourceConfig) EnableAll() {
 | 
				
			||||||
	for k := range o.GroupVersionConfigs {
 | 
						for k := range o.GroupVersionConfigs {
 | 
				
			||||||
		o.GroupVersionConfigs[k] = true
 | 
							o.GroupVersionConfigs[k] = true
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
						for k := range o.ResourceConfigs {
 | 
				
			||||||
 | 
							o.ResourceConfigs[k] = true
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// DisableVersions disables the versions entirely.
 | 
					// DisableVersions disables the versions entirely.
 | 
				
			||||||
@@ -70,6 +78,29 @@ func (o *ResourceConfig) VersionEnabled(version schema.GroupVersion) bool {
 | 
				
			|||||||
	return false
 | 
						return false
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (o *ResourceConfig) DisableResources(resources ...schema.GroupVersionResource) {
 | 
				
			||||||
 | 
						for _, resource := range resources {
 | 
				
			||||||
 | 
							o.ResourceConfigs[resource] = false
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (o *ResourceConfig) EnableResources(resources ...schema.GroupVersionResource) {
 | 
				
			||||||
 | 
						for _, resource := range resources {
 | 
				
			||||||
 | 
							o.ResourceConfigs[resource] = true
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (o *ResourceConfig) ResourceEnabled(resource schema.GroupVersionResource) bool {
 | 
				
			||||||
 | 
						if !o.VersionEnabled(resource.GroupVersion()) {
 | 
				
			||||||
 | 
							return false
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						resourceEnabled, explicitlySet := o.ResourceConfigs[resource]
 | 
				
			||||||
 | 
						if !explicitlySet {
 | 
				
			||||||
 | 
							return true
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						return resourceEnabled
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func (o *ResourceConfig) AnyVersionForGroupEnabled(group string) bool {
 | 
					func (o *ResourceConfig) AnyVersionForGroupEnabled(group string) bool {
 | 
				
			||||||
	for version := range o.GroupVersionConfigs {
 | 
						for version := range o.GroupVersionConfigs {
 | 
				
			||||||
		if version.Group == group {
 | 
							if version.Group == group {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -43,6 +43,84 @@ func TestDisabledVersion(t *testing.T) {
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func TestDisabledResource(t *testing.T) {
 | 
				
			||||||
 | 
						g1v1 := schema.GroupVersion{Group: "group1", Version: "version1"}
 | 
				
			||||||
 | 
						g1v1rUnspecified := g1v1.WithResource("unspecified")
 | 
				
			||||||
 | 
						g1v1rEnabled := g1v1.WithResource("enabled")
 | 
				
			||||||
 | 
						g1v1rDisabled := g1v1.WithResource("disabled")
 | 
				
			||||||
 | 
						g1v2 := schema.GroupVersion{Group: "group1", Version: "version2"}
 | 
				
			||||||
 | 
						g1v2rUnspecified := g1v2.WithResource("unspecified")
 | 
				
			||||||
 | 
						g1v2rEnabled := g1v2.WithResource("enabled")
 | 
				
			||||||
 | 
						g1v2rDisabled := g1v2.WithResource("disabled")
 | 
				
			||||||
 | 
						g2v1 := schema.GroupVersion{Group: "group2", Version: "version1"}
 | 
				
			||||||
 | 
						g2v1rUnspecified := g2v1.WithResource("unspecified")
 | 
				
			||||||
 | 
						g2v1rEnabled := g2v1.WithResource("enabled")
 | 
				
			||||||
 | 
						g2v1rDisabled := g2v1.WithResource("disabled")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						config := NewResourceConfig()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						config.DisableVersions(g1v1)
 | 
				
			||||||
 | 
						config.EnableVersions(g1v2, g2v1)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						config.EnableResources(g1v1rEnabled, g1v2rEnabled, g2v1rEnabled)
 | 
				
			||||||
 | 
						config.DisableResources(g1v1rDisabled, g1v2rDisabled, g2v1rDisabled)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// all resources under g1v1 are disabled because the group-version is disabled
 | 
				
			||||||
 | 
						if config.ResourceEnabled(g1v1rUnspecified) {
 | 
				
			||||||
 | 
							t.Errorf("expected disabled for %v, from %v", g1v1rUnspecified, config)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						if config.ResourceEnabled(g1v1rEnabled) {
 | 
				
			||||||
 | 
							t.Errorf("expected disabled for %v, from %v", g1v1rEnabled, config)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						if config.ResourceEnabled(g1v1rDisabled) {
 | 
				
			||||||
 | 
							t.Errorf("expected disabled for %v, from %v", g1v1rDisabled, config)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// explicitly disabled resources in enabled group-versions are disabled
 | 
				
			||||||
 | 
						if config.ResourceEnabled(g1v2rDisabled) {
 | 
				
			||||||
 | 
							t.Errorf("expected disabled for %v, from %v", g1v2rDisabled, config)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						if config.ResourceEnabled(g2v1rDisabled) {
 | 
				
			||||||
 | 
							t.Errorf("expected disabled for %v, from %v", g2v1rDisabled, config)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// unspecified and explicitly enabled resources in enabled group-versions are enabled
 | 
				
			||||||
 | 
						if !config.ResourceEnabled(g1v2rUnspecified) {
 | 
				
			||||||
 | 
							t.Errorf("expected enabled for %v, from %v", g1v2rUnspecified, config)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						if !config.ResourceEnabled(g1v2rEnabled) {
 | 
				
			||||||
 | 
							t.Errorf("expected enabled for %v, from %v", g1v2rEnabled, config)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						if !config.ResourceEnabled(g2v1rUnspecified) {
 | 
				
			||||||
 | 
							t.Errorf("expected enabled for %v, from %v", g2v1rUnspecified, config)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						if !config.ResourceEnabled(g2v1rEnabled) {
 | 
				
			||||||
 | 
							t.Errorf("expected enabled for %v, from %v", g2v1rEnabled, config)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// Enable all enables specific resources
 | 
				
			||||||
 | 
						config.EnableAll()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// all resources under g1v1 are now enabled
 | 
				
			||||||
 | 
						if !config.ResourceEnabled(g1v1rUnspecified) {
 | 
				
			||||||
 | 
							t.Errorf("expected enabled for %v, from %v", g1v1rUnspecified, config)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						if !config.ResourceEnabled(g1v1rEnabled) {
 | 
				
			||||||
 | 
							t.Errorf("expected enabled for %v, from %v", g1v1rEnabled, config)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						if !config.ResourceEnabled(g1v1rDisabled) {
 | 
				
			||||||
 | 
							t.Errorf("expected enabled for %v, from %v", g1v1rDisabled, config)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// previously disabled resources are now enabled
 | 
				
			||||||
 | 
						if !config.ResourceEnabled(g1v2rDisabled) {
 | 
				
			||||||
 | 
							t.Errorf("expected enabled for %v, from %v", g1v2rDisabled, config)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						if !config.ResourceEnabled(g2v1rDisabled) {
 | 
				
			||||||
 | 
							t.Errorf("expected enabled for %v, from %v", g2v1rDisabled, config)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func TestAnyVersionForGroupEnabled(t *testing.T) {
 | 
					func TestAnyVersionForGroupEnabled(t *testing.T) {
 | 
				
			||||||
	tests := []struct {
 | 
						tests := []struct {
 | 
				
			||||||
		name      string
 | 
							name      string
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user