Refactor the API registration and installation

This commit is contained in:
Chao Xu
2015-12-18 21:08:34 -08:00
parent be235e8754
commit 2b5b708b70
30 changed files with 332 additions and 141 deletions

View File

@@ -42,20 +42,32 @@ var accessor = meta.NewAccessor()
var availableVersions = []unversioned.GroupVersion{v1beta1.SchemeGroupVersion}
func init() {
registered.RegisterVersions(availableVersions...)
externalVersions := []unversioned.GroupVersion{}
for _, allowedVersion := range registered.GroupVersionsForGroup(extensions.GroupName) {
for _, externalVersion := range availableVersions {
if externalVersion == allowedVersion {
externalVersions = append(externalVersions, externalVersion)
}
for _, v := range availableVersions {
if registered.IsAllowedVersion(v) {
externalVersions = append(externalVersions, v)
}
}
if len(externalVersions) == 0 {
glog.V(4).Infof("No version is registered for group %v", extensions.GroupName)
return
}
if err := registered.EnableVersions(externalVersions...); err != nil {
glog.V(4).Infof("%v", err)
return
}
if err := enableVersions(externalVersions); err != nil {
glog.V(4).Infof("%v", err)
return
}
}
// TODO: enableVersions should be centralized rather than spread in each API
// group.
func enableVersions(externalVersions []unversioned.GroupVersion) error {
addVersionsToScheme(externalVersions...)
preferredExternalVersion := externalVersions[0]
groupMeta := latest.GroupMeta{
@@ -68,11 +80,10 @@ func init() {
}
if err := latest.RegisterGroup(groupMeta); err != nil {
glog.V(4).Infof("%v", err)
return
return err
}
api.RegisterRESTMapper(groupMeta.RESTMapper)
return nil
}
func newRESTMapper(externalVersions []unversioned.GroupVersion) meta.RESTMapper {
@@ -105,3 +116,19 @@ func interfacesFor(version unversioned.GroupVersion) (*meta.VersionInterfaces, e
return nil, fmt.Errorf("unsupported storage version: %s (valid: %v)", version, g.GroupVersions)
}
}
func addVersionsToScheme(externalVersions ...unversioned.GroupVersion) {
// add the internal version to Scheme
extensions.AddToScheme()
// add the enabled external versions to Scheme
for _, v := range externalVersions {
if !registered.IsEnabledVersion(v) {
glog.Errorf("Version %s is not enabled, so it will not be added to the Scheme.", v)
continue
}
switch v {
case v1beta1.SchemeGroupVersion:
v1beta1.AddToScheme()
}
}
}