From 47e496364d9be6c41eb66615f5eff980f99edac4 Mon Sep 17 00:00:00 2001 From: deads2k Date: Thu, 19 Nov 2015 09:24:16 -0500 Subject: [PATCH] update generators for groupVersion --- cmd/genconversion/conversion.go | 12 ++++++++++-- cmd/gendeepcopy/deep_copy.go | 3 ++- pkg/runtime/conversion_generator.go | 15 +++++++++++++-- 3 files changed, 25 insertions(+), 5 deletions(-) diff --git a/cmd/genconversion/conversion.go b/cmd/genconversion/conversion.go index 4c0a956d38e..f4c9de18e84 100644 --- a/cmd/genconversion/conversion.go +++ b/cmd/genconversion/conversion.go @@ -92,17 +92,25 @@ func main() { glog.Fatalf("Error while writing package line: %v", err) } + var schemeVersion string + if *groupVersion == "" || *groupVersion == "/" { + // This occurs when we generate deep-copy for internal version. + schemeVersion = "" + } else { + schemeVersion = *groupVersion + } + versionPath := pkgPath(group, version) generator := kruntime.NewConversionGenerator(api.Scheme.Raw(), versionPath) apiShort := generator.AddImport(path.Join(pkgBase, "api")) generator.AddImport(path.Join(pkgBase, "api/resource")) // TODO(wojtek-t): Change the overwrites to a flag. generator.OverwritePackage(version, "") - for _, knownType := range api.Scheme.KnownTypes(*groupVersion) { + for _, knownType := range api.Scheme.KnownTypes(schemeVersion) { if knownType.PkgPath() != versionPath { continue } - if err := generator.GenerateConversionsForType(version, knownType); err != nil { + if err := generator.GenerateConversionsForType(*groupVersion, knownType); err != nil { glog.Errorf("Error while generating conversion functions for %v: %v", knownType, err) } } diff --git a/cmd/gendeepcopy/deep_copy.go b/cmd/gendeepcopy/deep_copy.go index fe2a241d71a..59818de182b 100644 --- a/cmd/gendeepcopy/deep_copy.go +++ b/cmd/gendeepcopy/deep_copy.go @@ -125,8 +125,9 @@ func main() { generator.OverwritePackage(vals[0], vals[1]) } } + var schemeVersion string - if version == "" { + if *groupVersion == "" || *groupVersion == "/" { // This occurs when we generate deep-copy for internal version. schemeVersion = "" } else { diff --git a/pkg/runtime/conversion_generator.go b/pkg/runtime/conversion_generator.go index 93ece01fc27..8913d82633d 100644 --- a/pkg/runtime/conversion_generator.go +++ b/pkg/runtime/conversion_generator.go @@ -24,6 +24,7 @@ import ( "sort" "strings" + "k8s.io/kubernetes/pkg/api/unversioned" "k8s.io/kubernetes/pkg/conversion" "k8s.io/kubernetes/pkg/util/sets" ) @@ -86,10 +87,20 @@ func (g *conversionGenerator) AddImport(pkg string) string { return g.addImportByPath(pkg) } -func (g *conversionGenerator) GenerateConversionsForType(version string, reflection reflect.Type) error { +func (g *conversionGenerator) GenerateConversionsForType(gvString string, reflection reflect.Type) error { + gv, err := unversioned.ParseGroupVersion(gvString) + if err != nil { + return err + } + kind := reflection.Name() // TODO this is equivalent to what it did before, but it needs to be fixed for the proper group - internalObj, err := g.scheme.NewObject(g.scheme.InternalVersions[""].String(), kind) + internalGV, exists := g.scheme.InternalVersions[gv.Group] + if !exists { + return fmt.Errorf("no internal version for %v", gv) + } + + internalObj, err := g.scheme.NewObject(internalGV.String(), kind) if err != nil { return fmt.Errorf("cannot create an object of type %v in internal version", kind) }