func newExternalScheme() (*runtime.Scheme, meta.RESTMapper, runtime.Codec) { scheme := runtime.NewScheme() scheme.AddKnownTypeWithName("", "Type", &internalType{}) scheme.AddKnownTypeWithName("unlikelyversion", "Type", &externalType{}) //This tests that kubectl will not confuse the external scheme with the internal scheme, even when they accidentally have versions of the same name. scheme.AddKnownTypeWithName(testapi.Version(), "Type", &ExternalType2{}) codec := runtime.CodecFor(scheme, "unlikelyversion") validVersion := testapi.Version() mapper := meta.NewDefaultRESTMapper([]string{"unlikelyversion", validVersion}, func(version string) (*meta.VersionInterfaces, bool) { return &meta.VersionInterfaces{ Codec: runtime.CodecFor(scheme, version), ObjectConvertor: scheme, MetadataAccessor: meta.NewAccessor(), }, (version == validVersion || version == "unlikelyversion") }) for _, version := range []string{"unlikelyversion", validVersion} { for kind := range scheme.KnownTypes(version) { mixedCase := false scope := meta.RESTScopeNamespace mapper.Add(scope, kind, version, mixedCase) } } return scheme, mapper, codec }
func init() { // Certain API objects are returned regardless of the contents of storage: // api.Status is returned in errors // api.ServerOp/api.ServerOpList are returned by /operations // "internal" version api.Scheme.AddKnownTypes("", &Simple{}, &SimpleList{}, &api.Status{}, &api.ServerOp{}, &api.ServerOpList{}) // "version" version // TODO: Use versioned api objects? api.Scheme.AddKnownTypes(testVersion, &Simple{}, &SimpleList{}, &api.Status{}, &api.ServerOp{}, &api.ServerOpList{}) defMapper := meta.NewDefaultRESTMapper( versions, func(version string) (*meta.VersionInterfaces, bool) { interfaces, err := interfacesFor(version) if err != nil { return nil, false } return interfaces, true }, ) defMapper.Add(api.Scheme, true, versions...) mapper = defMapper }
func init() { // Use the first API version in the list of registered versions as the latest. Version = registered.RegisteredVersions[0] OldestVersion = registered.RegisteredVersions[len(registered.RegisteredVersions)-1] Codec = runtime.CodecFor(api.Scheme, Version) // Put the registered versions in Versions in reverse order. versions := registered.RegisteredVersions Versions = []string{} for i := len(versions) - 1; i >= 0; i-- { Versions = append(Versions, versions[i]) } mapper := meta.NewDefaultRESTMapper( versions, func(version string) (*meta.VersionInterfaces, bool) { interfaces, err := InterfacesFor(version) if err != nil { return nil, false } return interfaces, true }, ) // the list of kinds that are scoped at the root of the api hierarchy // if a kind is not enumerated here, it is assumed to have a namespace scope kindToRootScope := map[string]bool{ "Node": true, "Minion": true, "Namespace": true, "PersistentVolume": true, "SecurityContextConstraints": true, } // setup aliases for groups of resources mapper.AddResourceAlias("all", userResources...) // these kinds should be excluded from the list of resources ignoredKinds := util.NewStringSet( "ListOptions", "DeleteOptions", "Status", "PodLogOptions", "PodExecOptions", "PodProxyOptions") // enumerate all supported versions, get the kinds, and register with the mapper how to address our resources. for _, version := range versions { for kind := range api.Scheme.KnownTypes(version) { if ignoredKinds.Has(kind) { continue } scope := meta.RESTScopeNamespace if kindToRootScope[kind] { scope = meta.RESTScopeRoot } mapper.Add(scope, kind, version, false) } } RESTMapper = mapper }
func newMapper() *meta.DefaultRESTMapper { return meta.NewDefaultRESTMapper( versions, func(version string) (*meta.VersionInterfaces, bool) { interfaces, err := interfacesFor(version) if err != nil { return nil, false } return interfaces, true }, ) }
func init() { mapper := meta.NewDefaultRESTMapper( Versions, func(version string) (*meta.VersionInterfaces, bool) { interfaces, err := InterfacesFor(version) if err != nil { return nil, false } return interfaces, true }, ) // list of versions we support on the server versions := []string{"v1beta1", "v1beta2", "v1beta3"} // versions that used mixed case URL formats versionMixedCase := map[string]bool{ "v1beta1": true, "v1beta2": true, } // backwards compatibility, prior to v1beta3, we identified the namespace as a query parameter versionToNamespaceScope := map[string]meta.RESTScope{ "v1beta1": meta.RESTScopeNamespaceLegacy, "v1beta2": meta.RESTScopeNamespaceLegacy, "v1beta3": meta.RESTScopeNamespace, } // the list of kinds that are scoped at the root of the api hierarchy // if a kind is not enumerated here, it is assumed to have a namespace scope kindToRootScope := map[string]bool{ "Node": true, "Minion": true, "Namespace": true, } // enumerate all supported versions, get the kinds, and register with the mapper how to address our resources for _, version := range versions { for kind := range api.Scheme.KnownTypes(version) { mixedCase, found := versionMixedCase[version] if !found { mixedCase = false } scope := versionToNamespaceScope[version] _, found = kindToRootScope[kind] if found { scope = meta.RESTScopeRoot } mapper.Add(scope, kind, version, mixedCase) } } RESTMapper = mapper }
func init() { mapper := meta.NewDefaultRESTMapper( Versions, func(version string) (*meta.VersionInterfaces, bool) { interfaces, err := InterfacesFor(version) if err != nil { return nil, false } return interfaces, true }, ) mapper.Add(api.Scheme, true, Versions...) // TODO: when v1beta3 is added it will not use mixed case. RESTMapper = mapper }
func init() { mapper := meta.NewDefaultRESTMapper( Versions, func(version string) (*meta.VersionInterfaces, bool) { interfaces, err := InterfacesFor(version) if err != nil { return nil, false } return interfaces, true }, ) mapper.Add(api.Scheme, true, "v1beta1", "v1beta2") mapper.Add(api.Scheme, false, "v1beta3") RESTMapper = mapper }
func newExternalScheme() (*runtime.Scheme, meta.RESTMapper, runtime.Codec) { scheme := runtime.NewScheme() scheme.AddKnownTypeWithName("", "Type", &internalType{}) scheme.AddKnownTypeWithName("unlikelyversion", "Type", &externalType{}) codec := runtime.CodecFor(scheme, "unlikelyversion") mapper := meta.NewDefaultRESTMapper([]string{"unlikelyversion"}, func(version string) (*meta.VersionInterfaces, bool) { return &meta.VersionInterfaces{ Codec: codec, ObjectConvertor: scheme, MetadataAccessor: meta.NewAccessor(), }, (version == "unlikelyversion") }) mapper.Add(scheme, false, "unlikelyversion") return scheme, mapper, codec }
func NewDefaultRESTMapper(versions []string, interfacesFunc meta.VersionInterfacesFunc, importPathPrefix string, ignoredKinds, rootScoped util.StringSet) *meta.DefaultRESTMapper { mapper := meta.NewDefaultRESTMapper(versions, interfacesFunc) // enumerate all supported versions, get the kinds, and register with the mapper how to address our resources. for _, version := range versions { for kind, oType := range Scheme.KnownTypes(version) { // TODO: Remove import path prefix check. // We check the import path prefix because we currently stuff both "api" and "experimental" objects // into the same group within Scheme since Scheme has no notion of groups yet. if !strings.HasPrefix(oType.PkgPath(), importPathPrefix) || ignoredKinds.Has(kind) { continue } scope := meta.RESTScopeNamespace if rootScoped.Has(kind) { scope = meta.RESTScopeRoot } mapper.Add(scope, kind, version, false) } } return mapper }
func newExternalScheme() (*runtime.Scheme, meta.RESTMapper, runtime.Codec) { scheme := runtime.NewScheme() scheme.AddKnownTypeWithName("", "Type", &internalType{}) scheme.AddKnownTypeWithName("unlikelyversion", "Type", &externalType{}) codec := runtime.CodecFor(scheme, "unlikelyversion") mapper := meta.NewDefaultRESTMapper([]string{"unlikelyversion"}, func(version string) (*meta.VersionInterfaces, bool) { return &meta.VersionInterfaces{ Codec: codec, ObjectConvertor: scheme, MetadataAccessor: meta.NewAccessor(), }, (version == "unlikelyversion") }) for _, version := range []string{"unlikelyversion"} { for kind := range scheme.KnownTypes(version) { mixedCase := false scope := meta.RESTScopeNamespace mapper.Add(scope, kind, version, mixedCase) } } return scheme, mapper, codec }
func init() { kubeMapper := klatest.RESTMapper // list of versions we support on the server, in preferred order versions := []string{"v1beta3", "v1"} originMapper := kmeta.NewDefaultRESTMapper( versions, func(version string) (*kmeta.VersionInterfaces, bool) { interfaces, err := InterfacesFor(version) if err != nil { return nil, false } return interfaces, true }, ) // the list of kinds that are scoped at the root of the api hierarchy // if a kind is not enumerated here, it is assumed to have a namespace scope kindToRootScope := map[string]bool{ "Status": true, "Project": true, "ProjectRequest": true, "Image": true, "User": true, "Identity": true, "UserIdentityMapping": true, "OAuthAccessToken": true, "OAuthAuthorizeToken": true, "OAuthClient": true, "OAuthClientAuthorization": true, "ClusterRole": true, "ClusterRoleBinding": true, "ClusterPolicy": true, "ClusterPolicyBinding": true, "ClusterNetwork": true, "HostSubnet": true, } // enumerate all supported versions, get the kinds, and register with the mapper how to address our resources for _, version := range versions { for kind, t := range api.Scheme.KnownTypes(version) { if !strings.Contains(t.PkgPath(), "openshift/origin") { if _, ok := kindToRootScope[kind]; !ok { continue } } originTypes.Insert(kind) scope := kmeta.RESTScopeNamespace _, found := kindToRootScope[kind] if found || (strings.HasSuffix(kind, "List") && kindToRootScope[strings.TrimSuffix(kind, "List")]) { scope = kmeta.RESTScopeRoot } glog.V(6).Infof("Registering %s %s %s", kind, version, scope.Name()) originMapper.Add(scope, kind, version, false) } } // For Origin we use MultiRESTMapper that handles both Origin and Kubernetes // objects RESTMapper = meta.MultiRESTMapper{originMapper, kubeMapper} }
func init() { // Use the first API version in the list of registered versions as the latest. Version = registered.RegisteredVersions[0] Codec = runtime.CodecFor(api.Scheme, Version) // Put the registered versions in Versions in reverse order. versions := registered.RegisteredVersions Versions = []string{} for i := len(versions) - 1; i >= 0; i-- { Versions = append(Versions, versions[i]) } mapper := meta.NewDefaultRESTMapper( versions, func(version string) (*meta.VersionInterfaces, bool) { interfaces, err := InterfacesFor(version) if err != nil { return nil, false } return interfaces, true }, ) // versions that used mixed case URL formats versionMixedCase := map[string]bool{ "v1beta1": true, "v1beta2": true, } // backwards compatibility, prior to v1beta3, we identified the namespace as a query parameter versionToNamespaceScope := map[string]meta.RESTScope{ "v1beta1": meta.RESTScopeNamespaceLegacy, "v1beta2": meta.RESTScopeNamespaceLegacy, "v1beta3": meta.RESTScopeNamespace, "v1": meta.RESTScopeNamespace, } // the list of kinds that are scoped at the root of the api hierarchy // if a kind is not enumerated here, it is assumed to have a namespace scope kindToRootScope := map[string]bool{ "Node": true, "Minion": true, "Namespace": true, "PersistentVolume": true, } // setup aliases for groups of resources mapper.AddResourceAlias("all", userResources...) // these kinds should be excluded from the list of resources ignoredKinds := util.NewStringSet( "ListOptions", "DeleteOptions", "Status", "ContainerManifest", "PodLogOptions", "PodExecOptions", "PodProxyOptions") // enumerate all supported versions, get the kinds, and register with the mapper how to address our resources. for _, version := range versions { for kind := range api.Scheme.KnownTypes(version) { if ignoredKinds.Has(kind) { continue } mixedCase, found := versionMixedCase[version] if !found { mixedCase = false } scope := versionToNamespaceScope[version] _, found = kindToRootScope[kind] if found { scope = meta.RESTScopeRoot } mapper.Add(scope, kind, version, mixedCase) } } RESTMapper = mapper }