diff --git a/pkg/model/config/config.go b/pkg/model/config/config.go index b319b0d04f0..32db0a72942 100644 --- a/pkg/model/config/config.go +++ b/pkg/model/config/config.go @@ -118,13 +118,15 @@ type GVK struct { Group string `json:"group,omitempty"` Version string `json:"version,omitempty"` Kind string `json:"kind,omitempty"` + Plural string `json:"plural,omitempty"` } // isEqualTo compares it with another resource func (r GVK) isEqualTo(other GVK) bool { return r.Group == other.Group && r.Version == other.Version && - r.Kind == other.Kind + r.Kind == other.Kind && + r.Plural == other.Plural } // Marshal returns the bytes of c. diff --git a/pkg/model/resource/resource.go b/pkg/model/resource/resource.go index 3a2c0395013..73968aa16c8 100644 --- a/pkg/model/resource/resource.go +++ b/pkg/model/resource/resource.go @@ -20,6 +20,8 @@ import ( "fmt" "strings" + "github.com/gobuffalo/flect" + "sigs.k8s.io/kubebuilder/v2/pkg/model/config" ) @@ -55,11 +57,18 @@ type Resource struct { // GVK returns the group-version-kind information to check against tracked resources in the configuration file func (r *Resource) GVK() config.GVK { - return config.GVK{ + gvk := config.GVK{ Group: r.Group, Version: r.Version, Kind: r.Kind, } + + // Only store plural if it is irregular + if r.Plural != flect.Pluralize(strings.ToLower(r.Kind)) { + gvk.Plural = r.Plural + } + + return gvk } func wrapKey(key string) string { diff --git a/pkg/plugin/v2/api.go b/pkg/plugin/v2/api.go index 1ce3e14031f..f77091b651a 100644 --- a/pkg/plugin/v2/api.go +++ b/pkg/plugin/v2/api.go @@ -114,6 +114,7 @@ func (p *createAPISubcommand) BindFlags(fs *pflag.FlagSet) { fs.StringVar(&p.resource.Kind, "kind", "", "resource Kind") fs.StringVar(&p.resource.Group, "group", "", "resource Group") fs.StringVar(&p.resource.Version, "version", "", "resource Version") + fs.StringVar(&p.resource.Plural, "plural", "", "resource kind irregular plural form") fs.BoolVar(&p.resource.Namespaced, "namespaced", true, "resource is namespaced") } diff --git a/pkg/plugin/v2/webhook.go b/pkg/plugin/v2/webhook.go index d688cb4b7ab..de34a90096b 100644 --- a/pkg/plugin/v2/webhook.go +++ b/pkg/plugin/v2/webhook.go @@ -67,7 +67,7 @@ func (p *createWebhookSubcommand) BindFlags(fs *pflag.FlagSet) { fs.StringVar(&p.resource.Group, "group", "", "resource Group") fs.StringVar(&p.resource.Version, "version", "", "resource Version") fs.StringVar(&p.resource.Kind, "kind", "", "resource Kind") - fs.StringVar(&p.resource.Plural, "resource", "", "resource Resource") + fs.StringVar(&p.resource.Plural, "resource", "", "resource kind irregular plural form") fs.BoolVar(&p.defaulting, "defaulting", false, "if set, scaffold the defaulting webhook") diff --git a/pkg/plugin/v3/api.go b/pkg/plugin/v3/api.go index b938251cc3a..2a5e15508e8 100644 --- a/pkg/plugin/v3/api.go +++ b/pkg/plugin/v3/api.go @@ -123,6 +123,7 @@ func (p *createAPISubcommand) BindFlags(fs *pflag.FlagSet) { fs.StringVar(&p.resource.Kind, "kind", "", "resource Kind") fs.StringVar(&p.resource.Group, "group", "", "resource Group") fs.StringVar(&p.resource.Version, "version", "", "resource Version") + fs.StringVar(&p.resource.Plural, "plural", "", "resource kind irregular plural form") fs.BoolVar(&p.resource.Namespaced, "namespaced", true, "resource is namespaced") } diff --git a/pkg/plugin/v3/webhook.go b/pkg/plugin/v3/webhook.go index 0e7d6df5e20..7aab72a9f3c 100644 --- a/pkg/plugin/v3/webhook.go +++ b/pkg/plugin/v3/webhook.go @@ -64,10 +64,10 @@ validating and (or) conversion webhooks. func (p *createWebhookSubcommand) BindFlags(fs *pflag.FlagSet) { p.resource = &resource.Options{} + fs.StringVar(&p.resource.Kind, "kind", "", "resource Kind") fs.StringVar(&p.resource.Group, "group", "", "resource Group") fs.StringVar(&p.resource.Version, "version", "", "resource Version") - fs.StringVar(&p.resource.Kind, "kind", "", "resource Kind") - fs.StringVar(&p.resource.Plural, "resource", "", "resource Resource") + fs.StringVar(&p.resource.Plural, "plural", "", "resource kind irregular plural form") fs.BoolVar(&p.defaulting, "defaulting", false, "if set, scaffold the defaulting webhook")