// Enable enables group versions that are allowed, adds methods to the scheme, etc. func (gmf *GroupMetaFactory) Enable(m *registered.APIRegistrationManager, scheme *runtime.Scheme) error { externalVersions := []schema.GroupVersion{} for _, v := range gmf.prioritizedVersionList { if !m.IsAllowedVersion(v) { continue } externalVersions = append(externalVersions, v) if err := m.EnableVersions(v); err != nil { return err } gmf.VersionArgs[v.Version].AddToScheme(scheme) } if len(externalVersions) == 0 { glog.V(4).Infof("No version is registered for group %v", gmf.GroupArgs.GroupName) return nil } if gmf.GroupArgs.AddInternalObjectsToScheme != nil { gmf.GroupArgs.AddInternalObjectsToScheme(scheme) } preferredExternalVersion := externalVersions[0] accessor := meta.NewAccessor() groupMeta := &apimachinery.GroupMeta{ GroupVersion: preferredExternalVersion, GroupVersions: externalVersions, SelfLinker: runtime.SelfLinker(accessor), } for _, v := range externalVersions { gvf := gmf.VersionArgs[v.Version] if err := groupMeta.AddVersionInterfaces( schema.GroupVersion{Group: gvf.GroupName, Version: gvf.VersionName}, &meta.VersionInterfaces{ ObjectConvertor: scheme, MetadataAccessor: accessor, }, ); err != nil { return err } } groupMeta.InterfacesFor = groupMeta.DefaultInterfacesFor groupMeta.RESTMapper = gmf.newRESTMapper(scheme, externalVersions, groupMeta) if err := m.RegisterGroup(*groupMeta); err != nil { return err } return nil }
// TODO: enableVersions should be centralized rather than spread in each API // group. // We can combine registered.RegisterVersions, registered.EnableVersions and // registered.RegisterGroup once we have moved enableVersions there. func enableVersions(externalVersions []schema.GroupVersion) error { addVersionsToScheme(externalVersions...) preferredExternalVersion := externalVersions[0] groupMeta := apimachinery.GroupMeta{ GroupVersion: preferredExternalVersion, GroupVersions: externalVersions, RESTMapper: newRESTMapper(externalVersions), SelfLinker: runtime.SelfLinker(accessor), InterfacesFor: interfacesFor, } if err := registered.RegisterGroup(groupMeta); err != nil { return err } return nil }