func (c *RESTClient) request(verb string) *restclient.Request { config := restclient.ContentConfig{ ContentType: runtime.ContentTypeJSON, GroupVersion: ®istered.GroupOrDie(api.GroupName).GroupVersion, NegotiatedSerializer: c.NegotiatedSerializer, } groupName := api.GroupName if c.GroupName != "" { groupName = c.GroupName } ns := c.NegotiatedSerializer info, _ := runtime.SerializerInfoForMediaType(ns.SupportedMediaTypes(), runtime.ContentTypeJSON) internalVersion := unversioned.GroupVersion{ Group: registered.GroupOrDie(groupName).GroupVersion.Group, Version: runtime.APIVersionInternal, } internalVersion.Version = runtime.APIVersionInternal serializers := restclient.Serializers{ Encoder: ns.EncoderForVersion(info.Serializer, registered.GroupOrDie(api.GroupName).GroupVersion), Decoder: ns.DecoderToVersion(info.Serializer, internalVersion), } if info.StreamSerializer != nil { serializers.StreamingSerializer = info.StreamSerializer.Serializer serializers.Framer = info.StreamSerializer.Framer } return restclient.NewRequest(c, verb, &url.URL{Host: "localhost"}, "", config, serializers, nil, nil) }
func main() { runtime.GOMAXPROCS(runtime.NumCPU()) flag.Parse() var funcOut io.Writer if *functionDest == "-" { funcOut = os.Stdout } else { file, err := os.Create(*functionDest) if err != nil { glog.Fatalf("Couldn't open %v: %v", *functionDest, err) } defer file.Close() funcOut = file } knownGroupVersion := unversioned.GroupVersion{Group: *group, Version: *version} if knownGroupVersion.Version == "api" { knownGroupVersion.Version = pkg_runtime.APIVersionInternal } generator := pkg_runtime.NewDeepCopyGenerator(api.Scheme.Raw(), "github.com/openshift/origin/pkg/api", sets.NewString("github.com/openshift/origin")) apiShort := generator.AddImport("k8s.io/kubernetes/pkg/api") generator.ReplaceType("k8s.io/kubernetes/pkg/util/sets", "empty", struct{}{}) for _, overwrite := range strings.Split(*overwrites, ",") { vals := strings.Split(overwrite, "=") generator.OverwritePackage(vals[0], vals[1]) } for _, knownType := range api.Scheme.KnownTypes(knownGroupVersion) { if !strings.Contains(knownType.PkgPath(), "openshift/origin") { continue } if err := generator.AddType(knownType); err != nil { glog.Errorf("error while generating deep copy functions for %v: %v", knownType, err) } } generator.RepackImports() // the repack changes the name of the import apiShort = generator.AddImport("k8s.io/kubernetes/pkg/api") if err := generator.WriteImports(funcOut); err != nil { glog.Fatalf("error while writing imports: %v", err) } if err := generator.WriteDeepCopyFunctions(funcOut); err != nil { glog.Fatalf("error while writing deep copy functions: %v", err) } if err := generator.RegisterDeepCopyFunctions(funcOut, fmt.Sprintf("%s.Scheme", apiShort)); err != nil { glog.Fatalf("error while registering deep copy functions: %v", err) } }
func (c *RESTClient) request(verb string) *restclient.Request { config := restclient.ContentConfig{ ContentType: runtime.ContentTypeJSON, GroupVersion: testapi.Default.GroupVersion(), NegotiatedSerializer: c.NegotiatedSerializer, } ns := c.NegotiatedSerializer serializer, _ := ns.SerializerForMediaType(runtime.ContentTypeJSON, nil) streamingSerializer, _ := ns.StreamingSerializerForMediaType(runtime.ContentTypeJSON, nil) internalVersion := unversioned.GroupVersion{ Group: testapi.Default.GroupVersion().Group, Version: runtime.APIVersionInternal, } internalVersion.Version = runtime.APIVersionInternal serializers := restclient.Serializers{ Encoder: ns.EncoderForVersion(serializer, *testapi.Default.GroupVersion()), Decoder: ns.DecoderToVersion(serializer, internalVersion), StreamingSerializer: streamingSerializer, Framer: streamingSerializer.Framer, } return restclient.NewRequest(c, verb, &url.URL{Host: "localhost"}, "", config, serializers, nil, nil) }
// Decode attempts a decode of the object, then tries to convert it to the internal version. If into is provided and the decoding is // successful, the returned runtime.Object will be the value passed as into. Note that this may bypass conversion if you pass an // into that matches the serialized version. func (c *codec) Decode(data []byte, defaultGVK *unversioned.GroupVersionKind, into runtime.Object) (runtime.Object, *unversioned.GroupVersionKind, error) { versioned, isVersioned := into.(*runtime.VersionedObjects) if isVersioned { into = versioned.Last() } obj, gvk, err := c.decoder.Decode(data, defaultGVK, into) if err != nil { return nil, gvk, err } // if we specify a target, use generic conversion. if into != nil { if into == obj { if isVersioned { return versioned, gvk, nil } return into, gvk, nil } if err := c.convertor.Convert(obj, into); err != nil { return nil, gvk, err } if isVersioned { versioned.Objects = []runtime.Object{obj, into} return versioned, gvk, nil } return into, gvk, nil } // invoke a version conversion group := gvk.Group if defaultGVK != nil { group = defaultGVK.Group } var targetGV unversioned.GroupVersion if c.decodeVersion == nil { // convert to internal by default targetGV.Group = group targetGV.Version = runtime.APIVersionInternal } else { gv, ok := c.decodeVersion[group] if !ok { // unknown objects are left in their original version if isVersioned { versioned.Objects = []runtime.Object{obj} return versioned, gvk, nil } return obj, gvk, nil } targetGV = gv } if gvk.GroupVersion() == targetGV { if isVersioned { versioned.Objects = []runtime.Object{obj} return versioned, gvk, nil } return obj, gvk, nil } if isVersioned { // create a copy, because ConvertToVersion does not guarantee non-mutation of objects copied, err := c.copier.Copy(obj) if err != nil { copied = obj } versioned.Objects = []runtime.Object{copied} } // Convert if needed. out, err := c.convertor.ConvertToVersion(obj, targetGV.String()) if err != nil { return nil, gvk, err } if isVersioned { versioned.Objects = append(versioned.Objects, out) return versioned, gvk, nil } return out, gvk, nil }