refactor resource_config.go thoroughly and remove useless code in registry
Kubernetes-commit: d0d1e1dcc473d75c5dae6d4710ac67f4f8ba44c6
This commit is contained in:
parent
5640ff2e39
commit
db4dae8a12
|
@ -18,122 +18,50 @@ package storage
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"k8s.io/apimachinery/pkg/runtime/schema"
|
"k8s.io/apimachinery/pkg/runtime/schema"
|
||||||
"k8s.io/apimachinery/pkg/util/sets"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
// APIResourceConfigSource is the interface to determine which versions and resources are enabled
|
// APIResourceConfigSource is the interface to determine which groups and versions are enabled
|
||||||
type APIResourceConfigSource interface {
|
type APIResourceConfigSource interface {
|
||||||
AnyVersionOfResourceEnabled(resource schema.GroupResource) bool
|
VersionEnabled(version schema.GroupVersion) bool
|
||||||
ResourceEnabled(resource schema.GroupVersionResource) bool
|
AnyVersionForGroupEnabled(group string) bool
|
||||||
AnyResourcesForVersionEnabled(version schema.GroupVersion) bool
|
|
||||||
AnyResourcesForGroupEnabled(group string) bool
|
|
||||||
}
|
|
||||||
|
|
||||||
// Specifies the overrides for various API group versions.
|
|
||||||
// This can be used to enable/disable entire group versions or specific resources.
|
|
||||||
type GroupVersionResourceConfig struct {
|
|
||||||
// Whether to enable or disable this entire group version. This dominates any enablement check.
|
|
||||||
// Enable=true means the group version is enabled, and EnabledResources/DisabledResources are considered.
|
|
||||||
// Enable=false means the group version is disabled, and EnabledResources/DisabledResources are not considered.
|
|
||||||
Enable bool
|
|
||||||
|
|
||||||
// DisabledResources lists the resources that are specifically disabled for a group/version
|
|
||||||
// DisabledResources trumps EnabledResources
|
|
||||||
DisabledResources sets.String
|
|
||||||
|
|
||||||
// EnabledResources lists the resources that should be enabled by default. This is a little
|
|
||||||
// unusual, but we need it for compatibility with old code for now. An empty set means
|
|
||||||
// enable all, a non-empty set means that all other resources are disabled.
|
|
||||||
EnabledResources sets.String
|
|
||||||
}
|
}
|
||||||
|
|
||||||
var _ APIResourceConfigSource = &ResourceConfig{}
|
var _ APIResourceConfigSource = &ResourceConfig{}
|
||||||
|
|
||||||
type ResourceConfig struct {
|
type ResourceConfig struct {
|
||||||
GroupVersionResourceConfigs map[schema.GroupVersion]*GroupVersionResourceConfig
|
GroupVersionConfigs map[schema.GroupVersion]bool
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewResourceConfig() *ResourceConfig {
|
func NewResourceConfig() *ResourceConfig {
|
||||||
return &ResourceConfig{GroupVersionResourceConfigs: map[schema.GroupVersion]*GroupVersionResourceConfig{}}
|
return &ResourceConfig{GroupVersionConfigs: map[schema.GroupVersion]bool{}}
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewGroupVersionResourceConfig() *GroupVersionResourceConfig {
|
// DisableVersions disables the versions entirely.
|
||||||
return &GroupVersionResourceConfig{Enable: true, DisabledResources: sets.String{}, EnabledResources: sets.String{}}
|
|
||||||
}
|
|
||||||
|
|
||||||
// DisableVersions disables the versions entirely. No resources (even those whitelisted in EnabledResources) will be enabled
|
|
||||||
func (o *ResourceConfig) DisableVersions(versions ...schema.GroupVersion) {
|
func (o *ResourceConfig) DisableVersions(versions ...schema.GroupVersion) {
|
||||||
for _, version := range versions {
|
for _, version := range versions {
|
||||||
_, versionExists := o.GroupVersionResourceConfigs[version]
|
o.GroupVersionConfigs[version] = false
|
||||||
if !versionExists {
|
|
||||||
o.GroupVersionResourceConfigs[version] = NewGroupVersionResourceConfig()
|
|
||||||
}
|
|
||||||
|
|
||||||
o.GroupVersionResourceConfigs[version].Enable = false
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (o *ResourceConfig) EnableVersions(versions ...schema.GroupVersion) {
|
func (o *ResourceConfig) EnableVersions(versions ...schema.GroupVersion) {
|
||||||
for _, version := range versions {
|
for _, version := range versions {
|
||||||
_, versionExists := o.GroupVersionResourceConfigs[version]
|
o.GroupVersionConfigs[version] = true
|
||||||
if !versionExists {
|
|
||||||
o.GroupVersionResourceConfigs[version] = NewGroupVersionResourceConfig()
|
|
||||||
}
|
|
||||||
|
|
||||||
o.GroupVersionResourceConfigs[version].Enable = true
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// AnyResourcesForVersionEnabled only considers matches based on exactly group/resource lexical matching. This means that
|
func (o *ResourceConfig) VersionEnabled(version schema.GroupVersion) bool {
|
||||||
// resource renames across versions are NOT considered to be the same resource by this method. You'll need to manually check
|
enabled, _ := o.GroupVersionConfigs[version]
|
||||||
// using the ResourceEnabled function.
|
if enabled {
|
||||||
func (o *ResourceConfig) AnyVersionOfResourceEnabled(resource schema.GroupResource) bool {
|
return true
|
||||||
for version := range o.GroupVersionResourceConfigs {
|
|
||||||
if version.Group != resource.Group {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
|
|
||||||
if o.ResourceEnabled(version.WithResource(resource.Resource)) {
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
func (o *ResourceConfig) ResourceEnabled(resource schema.GroupVersionResource) bool {
|
func (o *ResourceConfig) AnyVersionForGroupEnabled(group string) bool {
|
||||||
versionOverride, versionExists := o.GroupVersionResourceConfigs[resource.GroupVersion()]
|
for version := range o.GroupVersionConfigs {
|
||||||
if !versionExists {
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
if !versionOverride.Enable {
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
|
|
||||||
if versionOverride.DisabledResources.Has(resource.Resource) {
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
|
|
||||||
if len(versionOverride.EnabledResources) > 0 {
|
|
||||||
return versionOverride.EnabledResources.Has(resource.Resource)
|
|
||||||
}
|
|
||||||
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
|
|
||||||
func (o *ResourceConfig) AnyResourcesForVersionEnabled(version schema.GroupVersion) bool {
|
|
||||||
versionOverride, versionExists := o.GroupVersionResourceConfigs[version]
|
|
||||||
if !versionExists {
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
|
|
||||||
return versionOverride.Enable
|
|
||||||
}
|
|
||||||
|
|
||||||
func (o *ResourceConfig) AnyResourcesForGroupEnabled(group string) bool {
|
|
||||||
for version := range o.GroupVersionResourceConfigs {
|
|
||||||
if version.Group == group {
|
if version.Group == group {
|
||||||
if o.AnyResourcesForVersionEnabled(version) {
|
if o.VersionEnabled(version) {
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -32,18 +32,18 @@ func TestDisabledVersion(t *testing.T) {
|
||||||
config.DisableVersions(g1v1)
|
config.DisableVersions(g1v1)
|
||||||
config.EnableVersions(g1v2, g2v1)
|
config.EnableVersions(g1v2, g2v1)
|
||||||
|
|
||||||
if config.AnyResourcesForVersionEnabled(g1v1) {
|
if config.VersionEnabled(g1v1) {
|
||||||
t.Errorf("expected disabled for %v, from %v", g1v1, config)
|
t.Errorf("expected disabled for %v, from %v", g1v1, config)
|
||||||
}
|
}
|
||||||
if !config.AnyResourcesForVersionEnabled(g1v2) {
|
if !config.VersionEnabled(g1v2) {
|
||||||
t.Errorf("expected enabled for %v, from %v", g1v1, config)
|
t.Errorf("expected enabled for %v, from %v", g1v1, config)
|
||||||
}
|
}
|
||||||
if !config.AnyResourcesForVersionEnabled(g2v1) {
|
if !config.VersionEnabled(g2v1) {
|
||||||
t.Errorf("expected enabled for %v, from %v", g1v1, config)
|
t.Errorf("expected enabled for %v, from %v", g1v1, config)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestAnyResourcesForGroupEnabled(t *testing.T) {
|
func TestAnyVersionForGroupEnabled(t *testing.T) {
|
||||||
tests := []struct {
|
tests := []struct {
|
||||||
name string
|
name string
|
||||||
creator func() APIResourceConfigSource
|
creator func() APIResourceConfigSource
|
||||||
|
@ -86,7 +86,7 @@ func TestAnyResourcesForGroupEnabled(t *testing.T) {
|
||||||
}
|
}
|
||||||
|
|
||||||
for _, tc := range tests {
|
for _, tc := range tests {
|
||||||
if e, a := tc.expectedResult, tc.creator().AnyResourcesForGroupEnabled(tc.testGroup); e != a {
|
if e, a := tc.expectedResult, tc.creator().AnyVersionForGroupEnabled(tc.testGroup); e != a {
|
||||||
t.Errorf("%s: expected %v, got %v", tc.name, e, a)
|
t.Errorf("%s: expected %v, got %v", tc.name, e, a)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -240,7 +240,7 @@ func getAllResourcesAlias(resource schema.GroupResource) schema.GroupResource {
|
||||||
|
|
||||||
func (s *DefaultStorageFactory) getStorageGroupResource(groupResource schema.GroupResource) schema.GroupResource {
|
func (s *DefaultStorageFactory) getStorageGroupResource(groupResource schema.GroupResource) schema.GroupResource {
|
||||||
for _, potentialStorageResource := range s.Overrides[groupResource].cohabitatingResources {
|
for _, potentialStorageResource := range s.Overrides[groupResource].cohabitatingResources {
|
||||||
if s.APIResourceConfigSource.AnyVersionOfResourceEnabled(potentialStorageResource) {
|
if s.APIResourceConfigSource.AnyVersionForGroupEnabled(potentialStorageResource.Group) {
|
||||||
return potentialStorageResource
|
return potentialStorageResource
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue