// 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 }
"github.com/golang/glog" "k8s.io/client-go/pkg/api" "k8s.io/client-go/pkg/api/meta" "k8s.io/client-go/pkg/apimachinery" "k8s.io/client-go/pkg/apimachinery/registered" "k8s.io/client-go/pkg/federation/apis/federation" "k8s.io/client-go/pkg/federation/apis/federation/v1beta1" "k8s.io/client-go/pkg/runtime" "k8s.io/client-go/pkg/runtime/schema" "k8s.io/client-go/pkg/util/sets" ) const importPrefix = "k8s.io/client-go/pkg/federation/apis/federation" var accessor = meta.NewAccessor() // availableVersions lists all known external versions for this group from most preferred to least preferred var availableVersions = []schema.GroupVersion{v1beta1.SchemeGroupVersion} func init() { registered.RegisterVersions(availableVersions) externalVersions := []schema.GroupVersion{} 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", federation.GroupName) return
// VersionInterfaces provides an object converter and metadata // accessor appropriate for use with unstructured objects. func VersionInterfaces(schema.GroupVersion) (*meta.VersionInterfaces, error) { return &meta.VersionInterfaces{ ObjectConvertor: &unstructured.UnstructuredObjectConverter{}, MetadataAccessor: meta.NewAccessor(), }, nil }