Informer/lister can't use ObjectMeta to detect internal

Instead look for json tags
This commit is contained in:
Clayton Coleman 2017-01-12 01:12:33 -05:00
parent 36acd90aba
commit 9fd9c33264
No known key found for this signature in database
GPG Key ID: 3D16906B4F1C5CB3
2 changed files with 18 additions and 18 deletions

View File

@ -74,7 +74,7 @@ func generatedBy() string {
} }
// objectMetaForPackage returns the type of ObjectMeta used by package p. // 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 generatingForPackage := false
for _, t := range p.Types { for _, t := range p.Types {
// filter out types which dont have genclient=true. // filter out types which dont have genclient=true.
@ -84,19 +84,19 @@ func objectMetaForPackage(p *types.Package) (*types.Type, error) {
generatingForPackage = true generatingForPackage = true
for _, member := range t.Members { for _, member := range t.Members {
if member.Name == "ObjectMeta" { if member.Name == "ObjectMeta" {
return member.Type, nil return member.Type, isInternal(member), nil
} }
} }
} }
if generatingForPackage { 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. // isInternal returns true if the tags for a member do not contain a json tag
func isInternal(t *types.Type) bool { func isInternal(m types.Member) bool {
return t.Name.Package == "k8s.io/kubernetes/pkg/api" return !strings.Contains(m.Tags, "json")
} }
func packageForGroup(base string, group clientgentypes.Group) string { 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 { for _, inputDir := range arguments.InputDirs {
p := context.Universe.Package(inputDir) p := context.Universe.Package(inputDir)
objectMeta, err := objectMetaForPackage(p) objectMeta, internal, err := objectMetaForPackage(p)
if err != nil { if err != nil {
glog.Fatal(err) glog.Fatal(err)
} }
@ -139,7 +139,7 @@ func Packages(context *generator.Context, arguments *args.GeneratorArgs) generat
var gv clientgentypes.GroupVersion var gv clientgentypes.GroupVersion
if isInternal(objectMeta) { if internal {
lastSlash := strings.LastIndex(p.Path, "/") lastSlash := strings.LastIndex(p.Path, "/")
if lastSlash == -1 { if lastSlash == -1 {
glog.Fatalf("error constructing internal group version for package %q", p.Path) glog.Fatalf("error constructing internal group version for package %q", p.Path)

View File

@ -87,7 +87,7 @@ func Packages(context *generator.Context, arguments *args.GeneratorArgs) generat
for _, inputDir := range arguments.InputDirs { for _, inputDir := range arguments.InputDirs {
p := context.Universe.Package(inputDir) p := context.Universe.Package(inputDir)
objectMeta, err := objectMetaForPackage(p) objectMeta, internal, err := objectMetaForPackage(p)
if err != nil { if err != nil {
glog.Fatal(err) glog.Fatal(err)
} }
@ -99,7 +99,7 @@ func Packages(context *generator.Context, arguments *args.GeneratorArgs) generat
var gv clientgentypes.GroupVersion var gv clientgentypes.GroupVersion
var internalGVPkg string var internalGVPkg string
if isInternal(objectMeta) { if internal {
lastSlash := strings.LastIndex(p.Path, "/") lastSlash := strings.LastIndex(p.Path, "/")
if lastSlash == -1 { if lastSlash == -1 {
glog.Fatalf("error constructing internal group version for package %q", p.Path) 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. // 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 generatingForPackage := false
for _, t := range p.Types { for _, t := range p.Types {
// filter out types which dont have genclient=true. // filter out types which dont have genclient=true.
@ -175,19 +175,19 @@ func objectMetaForPackage(p *types.Package) (*types.Type, error) {
generatingForPackage = true generatingForPackage = true
for _, member := range t.Members { for _, member := range t.Members {
if member.Name == "ObjectMeta" { if member.Name == "ObjectMeta" {
return member.Type, nil return member.Type, isInternal(member), nil
} }
} }
} }
if generatingForPackage { 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. // isInternal returns true if the tags for a member do not contain a json tag
func isInternal(t *types.Type) bool { func isInternal(m types.Member) bool {
return t.Name.Package == "k8s.io/kubernetes/pkg/api" return !strings.Contains(m.Tags, "json")
} }
// listerGenerator produces a file of listers for a given GroupVersion and // listerGenerator produces a file of listers for a given GroupVersion and