Merge pull request #32309 from smarterclayton/generic_storage_factory

Automatic merge from submit-queue

Storage factory should not hardcode special resources

Prepares for future movement

@deads2k
This commit is contained in:
Kubernetes Submit Queue 2016-11-05 18:05:33 -07:00 committed by GitHub
commit 973685c006

View File

@ -57,6 +57,8 @@ type DefaultStorageFactory struct {
Overrides map[unversioned.GroupResource]groupResourceOverrides Overrides map[unversioned.GroupResource]groupResourceOverrides
DefaultResourcePrefixes map[unversioned.GroupResource]string
// DefaultMediaType is the media type used to store resources. If it is not set, "application/json" is used. // DefaultMediaType is the media type used to store resources. If it is not set, "application/json" is used.
DefaultMediaType string DefaultMediaType string
@ -99,6 +101,17 @@ var _ StorageFactory = &DefaultStorageFactory{}
const AllResources = "*" const AllResources = "*"
// specialDefaultResourcePrefixes are prefixes compiled into Kubernetes.
// TODO: move out of this package, it is not generic
var specialDefaultResourcePrefixes = map[unversioned.GroupResource]string{
unversioned.GroupResource{Group: "", Resource: "replicationControllers"}: "controllers",
unversioned.GroupResource{Group: "", Resource: "replicationcontrollers"}: "controllers",
unversioned.GroupResource{Group: "", Resource: "endpoints"}: "services/endpoints",
unversioned.GroupResource{Group: "", Resource: "nodes"}: "minions",
unversioned.GroupResource{Group: "", Resource: "services"}: "services/specs",
unversioned.GroupResource{Group: "extensions", Resource: "ingresses"}: "ingress",
}
func NewDefaultStorageFactory(config storagebackend.Config, defaultMediaType string, defaultSerializer runtime.StorageSerializer, resourceEncodingConfig ResourceEncodingConfig, resourceConfig APIResourceConfigSource) *DefaultStorageFactory { func NewDefaultStorageFactory(config storagebackend.Config, defaultMediaType string, defaultSerializer runtime.StorageSerializer, resourceEncodingConfig ResourceEncodingConfig, resourceConfig APIResourceConfigSource) *DefaultStorageFactory {
if len(defaultMediaType) == 0 { if len(defaultMediaType) == 0 {
defaultMediaType = runtime.ContentTypeJSON defaultMediaType = runtime.ContentTypeJSON
@ -110,6 +123,7 @@ func NewDefaultStorageFactory(config storagebackend.Config, defaultMediaType str
DefaultSerializer: defaultSerializer, DefaultSerializer: defaultSerializer,
ResourceEncodingConfig: resourceEncodingConfig, ResourceEncodingConfig: resourceEncodingConfig,
APIResourceConfigSource: resourceConfig, APIResourceConfigSource: resourceConfig,
DefaultResourcePrefixes: specialDefaultResourcePrefixes,
newStorageCodecFn: NewStorageCodec, newStorageCodecFn: NewStorageCodec,
} }
@ -283,21 +297,12 @@ func NewStorageCodec(storageMediaType string, ns runtime.StorageSerializer, stor
return runtime.NewCodec(encoder, decoder), nil return runtime.NewCodec(encoder, decoder), nil
} }
var specialDefaultResourcePrefixes = map[unversioned.GroupResource]string{
unversioned.GroupResource{Group: "", Resource: "replicationControllers"}: "controllers",
unversioned.GroupResource{Group: "", Resource: "replicationcontrollers"}: "controllers",
unversioned.GroupResource{Group: "", Resource: "endpoints"}: "services/endpoints",
unversioned.GroupResource{Group: "", Resource: "nodes"}: "minions",
unversioned.GroupResource{Group: "", Resource: "services"}: "services/specs",
unversioned.GroupResource{Group: "extensions", Resource: "ingresses"}: "ingress",
}
func (s *DefaultStorageFactory) ResourcePrefix(groupResource unversioned.GroupResource) string { func (s *DefaultStorageFactory) ResourcePrefix(groupResource unversioned.GroupResource) string {
chosenStorageResource := s.getStorageGroupResource(groupResource) chosenStorageResource := s.getStorageGroupResource(groupResource)
groupOverride := s.Overrides[getAllResourcesAlias(chosenStorageResource)] groupOverride := s.Overrides[getAllResourcesAlias(chosenStorageResource)]
exactResourceOverride := s.Overrides[chosenStorageResource] exactResourceOverride := s.Overrides[chosenStorageResource]
etcdResourcePrefix := specialDefaultResourcePrefixes[chosenStorageResource] etcdResourcePrefix := s.DefaultResourcePrefixes[chosenStorageResource]
if len(groupOverride.etcdResourcePrefix) > 0 { if len(groupOverride.etcdResourcePrefix) > 0 {
etcdResourcePrefix = groupOverride.etcdResourcePrefix etcdResourcePrefix = groupOverride.etcdResourcePrefix
} }