mirror of https://github.com/k3s-io/k3s
[client-gen] Allow overriding the resource name
This commit allows client-gen to generate clients where the resource name does not directly correspond to the type name. The tag `// +resourceName=<name>` can be used to override the resource name.pull/6/head
parent
4e74c43e9a
commit
392b8da1d0
|
@ -39,13 +39,15 @@ func NameSystems() namer.NameSystems {
|
|||
pluralExceptions := map[string]string{
|
||||
"Endpoints": "Endpoints",
|
||||
}
|
||||
lowercaseNamer := namer.NewAllLowercasePluralNamer(pluralExceptions)
|
||||
return namer.NameSystems{
|
||||
"public": namer.NewPublicNamer(0),
|
||||
"private": namer.NewPrivateNamer(0),
|
||||
"raw": namer.NewRawNamer("", nil),
|
||||
"publicPlural": namer.NewPublicPluralNamer(pluralExceptions),
|
||||
"privatePlural": namer.NewPrivatePluralNamer(pluralExceptions),
|
||||
"allLowercasePlural": namer.NewAllLowercasePluralNamer(pluralExceptions),
|
||||
"allLowercasePlural": lowercaseNamer,
|
||||
"resource": NewTagOverrideNamer("resourceName", lowercaseNamer),
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -279,3 +281,27 @@ func Packages(context *generator.Context, arguments *args.GeneratorArgs) generat
|
|||
|
||||
return generator.Packages(packageList)
|
||||
}
|
||||
|
||||
// tagOverrideNamer is a namer which pulls names from a given tag, if specified,
|
||||
// and otherwise falls back to a different namer.
|
||||
type tagOverrideNamer struct {
|
||||
tagName string
|
||||
fallback namer.Namer
|
||||
}
|
||||
|
||||
func (n *tagOverrideNamer) Name(t *types.Type) string {
|
||||
if nameOverride := extractTag(n.tagName, t.SecondClosestCommentLines); nameOverride != "" {
|
||||
return nameOverride
|
||||
}
|
||||
|
||||
return n.fallback.Name(t)
|
||||
}
|
||||
|
||||
// NewTagOverrideNamer creates a namer.Namer which uses the contents of the given tag as
|
||||
// the name, or falls back to another Namer if the tag is not present.
|
||||
func NewTagOverrideNamer(tagName string, fallback namer.Namer) namer.Namer {
|
||||
return &tagOverrideNamer{
|
||||
tagName: tagName,
|
||||
fallback: fallback,
|
||||
}
|
||||
}
|
||||
|
|
|
@ -197,7 +197,7 @@ type Fake$.type|publicPlural$ struct {
|
|||
`
|
||||
|
||||
var resource = `
|
||||
var $.type|allLowercasePlural$Resource = $.GroupVersionResource|raw${Group: "$.groupName$", Version: "$.version$", Resource: "$.type|allLowercasePlural$"}
|
||||
var $.type|allLowercasePlural$Resource = $.GroupVersionResource|raw${Group: "$.groupName$", Version: "$.version$", Resource: "$.type|resource$"}
|
||||
`
|
||||
|
||||
var kind = `
|
||||
|
|
|
@ -224,7 +224,7 @@ func (c *$.type|privatePlural$) List(opts $.ListOptions|raw$) (result *$.type|ra
|
|||
result = &$.type|raw$List{}
|
||||
err = c.client.Get().
|
||||
$if .namespaced$Namespace(c.ns).$end$
|
||||
Resource("$.type|allLowercasePlural$").
|
||||
Resource("$.type|resource$").
|
||||
VersionedParams(&opts, $.schemeParameterCodec|raw$).
|
||||
Do().
|
||||
Into(result)
|
||||
|
@ -237,7 +237,7 @@ func (c *$.type|privatePlural$) Get(name string, options $.GetOptions|raw$) (res
|
|||
result = &$.type|raw${}
|
||||
err = c.client.Get().
|
||||
$if .namespaced$Namespace(c.ns).$end$
|
||||
Resource("$.type|allLowercasePlural$").
|
||||
Resource("$.type|resource$").
|
||||
Name(name).
|
||||
VersionedParams(&options, $.schemeParameterCodec|raw$).
|
||||
Do().
|
||||
|
@ -251,7 +251,7 @@ var deleteTemplate = `
|
|||
func (c *$.type|privatePlural$) Delete(name string, options *$.DeleteOptions|raw$) error {
|
||||
return c.client.Delete().
|
||||
$if .namespaced$Namespace(c.ns).$end$
|
||||
Resource("$.type|allLowercasePlural$").
|
||||
Resource("$.type|resource$").
|
||||
Name(name).
|
||||
Body(options).
|
||||
Do().
|
||||
|
@ -264,7 +264,7 @@ var deleteCollectionTemplate = `
|
|||
func (c *$.type|privatePlural$) DeleteCollection(options *$.DeleteOptions|raw$, listOptions $.ListOptions|raw$) error {
|
||||
return c.client.Delete().
|
||||
$if .namespaced$Namespace(c.ns).$end$
|
||||
Resource("$.type|allLowercasePlural$").
|
||||
Resource("$.type|resource$").
|
||||
VersionedParams(&listOptions, $.schemeParameterCodec|raw$).
|
||||
Body(options).
|
||||
Do().
|
||||
|
@ -278,7 +278,7 @@ func (c *$.type|privatePlural$) Create($.type|private$ *$.type|raw$) (result *$.
|
|||
result = &$.type|raw${}
|
||||
err = c.client.Post().
|
||||
$if .namespaced$Namespace(c.ns).$end$
|
||||
Resource("$.type|allLowercasePlural$").
|
||||
Resource("$.type|resource$").
|
||||
Body($.type|private$).
|
||||
Do().
|
||||
Into(result)
|
||||
|
@ -292,7 +292,7 @@ func (c *$.type|privatePlural$) Update($.type|private$ *$.type|raw$) (result *$.
|
|||
result = &$.type|raw${}
|
||||
err = c.client.Put().
|
||||
$if .namespaced$Namespace(c.ns).$end$
|
||||
Resource("$.type|allLowercasePlural$").
|
||||
Resource("$.type|resource$").
|
||||
Name($.type|private$.Name).
|
||||
Body($.type|private$).
|
||||
Do().
|
||||
|
@ -309,7 +309,7 @@ func (c *$.type|privatePlural$) UpdateStatus($.type|private$ *$.type|raw$) (resu
|
|||
result = &$.type|raw${}
|
||||
err = c.client.Put().
|
||||
$if .namespaced$Namespace(c.ns).$end$
|
||||
Resource("$.type|allLowercasePlural$").
|
||||
Resource("$.type|resource$").
|
||||
Name($.type|private$.Name).
|
||||
SubResource("status").
|
||||
Body($.type|private$).
|
||||
|
@ -325,7 +325,7 @@ func (c *$.type|privatePlural$) Watch(opts $.ListOptions|raw$) ($.watchInterface
|
|||
opts.Watch = true
|
||||
return c.client.Get().
|
||||
$if .namespaced$Namespace(c.ns).$end$
|
||||
Resource("$.type|allLowercasePlural$").
|
||||
Resource("$.type|resource$").
|
||||
VersionedParams(&opts, $.schemeParameterCodec|raw$).
|
||||
Watch()
|
||||
}
|
||||
|
@ -337,7 +337,7 @@ func (c *$.type|privatePlural$) Patch(name string, pt $.PatchType|raw$, data []b
|
|||
result = &$.type|raw${}
|
||||
err = c.client.Patch(pt).
|
||||
$if .namespaced$Namespace(c.ns).$end$
|
||||
Resource("$.type|allLowercasePlural$").
|
||||
Resource("$.type|resource$").
|
||||
SubResource(subresources...).
|
||||
Name(name).
|
||||
Body(data).
|
||||
|
|
|
@ -31,3 +31,14 @@ func extractBoolTagOrDie(key string, lines []string) bool {
|
|||
}
|
||||
return val
|
||||
}
|
||||
|
||||
// extractTag gets the comment-tags for the key. If the tag did not exist, it
|
||||
// returns the empty string.
|
||||
func extractTag(key string, lines []string) string {
|
||||
val, present := types.ExtractCommentTags("+", lines)[key]
|
||||
if !present || len(val) < 1 {
|
||||
return ""
|
||||
}
|
||||
|
||||
return val[0]
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue