diff --git a/cmd/libs/go2idl/informer-gen/generators/packages.go b/cmd/libs/go2idl/informer-gen/generators/packages.go index 255da268caa..54fc0dec457 100644 --- a/cmd/libs/go2idl/informer-gen/generators/packages.go +++ b/cmd/libs/go2idl/informer-gen/generators/packages.go @@ -74,7 +74,7 @@ func generatedBy() string { } // objectMetaForPackage returns the type of ObjectMeta used by package p. -func objectMetaForPackage(p *types.Package) (*types.Type, error) { +func objectMetaForPackage(p *types.Package) (*types.Type, bool, error) { generatingForPackage := false for _, t := range p.Types { // filter out types which dont have genclient=true. @@ -84,19 +84,19 @@ func objectMetaForPackage(p *types.Package) (*types.Type, error) { generatingForPackage = true for _, member := range t.Members { if member.Name == "ObjectMeta" { - return member.Type, nil + return member.Type, isInternal(member), nil } } } if generatingForPackage { - return nil, fmt.Errorf("unable to find ObjectMeta for any types in package %s", p.Path) + return nil, false, fmt.Errorf("unable to find ObjectMeta for any types in package %s", p.Path) } - return nil, nil + return nil, false, nil } -// isInternal returns true if t's package is k8s.io/kubernetes/pkg/api. -func isInternal(t *types.Type) bool { - return t.Name.Package == "k8s.io/kubernetes/pkg/api" +// isInternal returns true if the tags for a member do not contain a json tag +func isInternal(m types.Member) bool { + return !strings.Contains(m.Tags, "json") } func packageForGroup(base string, group clientgentypes.Group) string { @@ -128,7 +128,7 @@ func Packages(context *generator.Context, arguments *args.GeneratorArgs) generat for _, inputDir := range arguments.InputDirs { p := context.Universe.Package(inputDir) - objectMeta, err := objectMetaForPackage(p) + objectMeta, internal, err := objectMetaForPackage(p) if err != nil { glog.Fatal(err) } @@ -139,7 +139,7 @@ func Packages(context *generator.Context, arguments *args.GeneratorArgs) generat var gv clientgentypes.GroupVersion - if isInternal(objectMeta) { + if internal { lastSlash := strings.LastIndex(p.Path, "/") if lastSlash == -1 { glog.Fatalf("error constructing internal group version for package %q", p.Path) diff --git a/cmd/libs/go2idl/lister-gen/generators/lister.go b/cmd/libs/go2idl/lister-gen/generators/lister.go index 23749f2e324..ecbbdcedb65 100644 --- a/cmd/libs/go2idl/lister-gen/generators/lister.go +++ b/cmd/libs/go2idl/lister-gen/generators/lister.go @@ -87,7 +87,7 @@ func Packages(context *generator.Context, arguments *args.GeneratorArgs) generat for _, inputDir := range arguments.InputDirs { p := context.Universe.Package(inputDir) - objectMeta, err := objectMetaForPackage(p) + objectMeta, internal, err := objectMetaForPackage(p) if err != nil { glog.Fatal(err) } @@ -99,7 +99,7 @@ func Packages(context *generator.Context, arguments *args.GeneratorArgs) generat var gv clientgentypes.GroupVersion var internalGVPkg string - if isInternal(objectMeta) { + if internal { lastSlash := strings.LastIndex(p.Path, "/") if lastSlash == -1 { glog.Fatalf("error constructing internal group version for package %q", p.Path) @@ -165,7 +165,7 @@ func Packages(context *generator.Context, arguments *args.GeneratorArgs) generat } // objectMetaForPackage returns the type of ObjectMeta used by package p. -func objectMetaForPackage(p *types.Package) (*types.Type, error) { +func objectMetaForPackage(p *types.Package) (*types.Type, bool, error) { generatingForPackage := false for _, t := range p.Types { // filter out types which dont have genclient=true. @@ -175,19 +175,19 @@ func objectMetaForPackage(p *types.Package) (*types.Type, error) { generatingForPackage = true for _, member := range t.Members { if member.Name == "ObjectMeta" { - return member.Type, nil + return member.Type, isInternal(member), nil } } } if generatingForPackage { - return nil, fmt.Errorf("unable to find ObjectMeta for any types in package %s", p.Path) + return nil, false, fmt.Errorf("unable to find ObjectMeta for any types in package %s", p.Path) } - return nil, nil + return nil, false, nil } -// isInternal returns true if t's package is k8s.io/kubernetes/pkg/api. -func isInternal(t *types.Type) bool { - return t.Name.Package == "k8s.io/kubernetes/pkg/api" +// isInternal returns true if the tags for a member do not contain a json tag +func isInternal(m types.Member) bool { + return !strings.Contains(m.Tags, "json") } // listerGenerator produces a file of listers for a given GroupVersion and