[client-gen] Support Read-Only APIs

This commit adds support for read-only APIs to client-gen.
If the tag `// +readonly=true` is used, only the {Get,List,Watch}
client methods will be generated.
This commit is contained in:
Solly Ross 2017-05-01 17:11:01 -04:00
parent 392b8da1d0
commit 1cbc825fb9
2 changed files with 34 additions and 6 deletions

View File

@ -149,6 +149,8 @@ func (g *genFakeForType) GenerateType(c *generator.Context, t *types.Type, w io.
noMethods := extractBoolTagOrDie("noMethods", t.SecondClosestCommentLines) == true noMethods := extractBoolTagOrDie("noMethods", t.SecondClosestCommentLines) == true
readonly := extractBoolTagOrDie("readonly", t.SecondClosestCommentLines) == true
if namespaced { if namespaced {
sw.Do(structNamespaced, m) sw.Do(structNamespaced, m)
} else { } else {
@ -158,6 +160,9 @@ func (g *genFakeForType) GenerateType(c *generator.Context, t *types.Type, w io.
if !noMethods { if !noMethods {
sw.Do(resource, m) sw.Do(resource, m)
sw.Do(kind, m) sw.Do(kind, m)
}
if !noMethods && !readonly {
sw.Do(createTemplate, m) sw.Do(createTemplate, m)
sw.Do(updateTemplate, m) sw.Do(updateTemplate, m)
// Generate the UpdateStatus method if the type has a status // Generate the UpdateStatus method if the type has a status
@ -166,6 +171,9 @@ func (g *genFakeForType) GenerateType(c *generator.Context, t *types.Type, w io.
} }
sw.Do(deleteTemplate, m) sw.Do(deleteTemplate, m)
sw.Do(deleteCollectionTemplate, m) sw.Do(deleteCollectionTemplate, m)
}
if !noMethods {
sw.Do(getTemplate, m) sw.Do(getTemplate, m)
if hasObjectMeta(t) { if hasObjectMeta(t) {
sw.Do(listUsingOptionsTemplate, m) sw.Do(listUsingOptionsTemplate, m)
@ -173,6 +181,9 @@ func (g *genFakeForType) GenerateType(c *generator.Context, t *types.Type, w io.
sw.Do(listTemplate, m) sw.Do(listTemplate, m)
} }
sw.Do(watchTemplate, m) sw.Do(watchTemplate, m)
}
if !noMethods && !readonly {
sw.Do(patchTemplate, m) sw.Do(patchTemplate, m)
} }

View File

@ -102,14 +102,20 @@ func (g *genClientForType) GenerateType(c *generator.Context, t *types.Type, w i
} }
noMethods := extractBoolTagOrDie("noMethods", t.SecondClosestCommentLines) == true noMethods := extractBoolTagOrDie("noMethods", t.SecondClosestCommentLines) == true
readonly := extractBoolTagOrDie("readonly", t.SecondClosestCommentLines) == true
sw.Do(interfaceTemplate1, m) sw.Do(interfaceTemplate1, m)
if !noMethods { if !noMethods {
sw.Do(interfaceTemplate2, m) if readonly {
// Include the UpdateStatus method if the type has a status sw.Do(interfaceTemplateReadonly, m)
if genStatus(t) { } else {
sw.Do(interfaceUpdateStatusTemplate, m) sw.Do(interfaceTemplate2, m)
// Include the UpdateStatus method if the type has a status
if genStatus(t) {
sw.Do(interfaceUpdateStatusTemplate, m)
}
sw.Do(interfaceTemplate3, m)
} }
sw.Do(interfaceTemplate3, m)
} }
sw.Do(interfaceTemplate4, m) sw.Do(interfaceTemplate4, m)
@ -121,7 +127,7 @@ func (g *genClientForType) GenerateType(c *generator.Context, t *types.Type, w i
sw.Do(newStructNonNamespaced, m) sw.Do(newStructNonNamespaced, m)
} }
if !noMethods { if !noMethods && !readonly {
sw.Do(createTemplate, m) sw.Do(createTemplate, m)
sw.Do(updateTemplate, m) sw.Do(updateTemplate, m)
// Generate the UpdateStatus method if the type has a status // Generate the UpdateStatus method if the type has a status
@ -130,9 +136,15 @@ func (g *genClientForType) GenerateType(c *generator.Context, t *types.Type, w i
} }
sw.Do(deleteTemplate, m) sw.Do(deleteTemplate, m)
sw.Do(deleteCollectionTemplate, m) sw.Do(deleteCollectionTemplate, m)
}
if !noMethods {
sw.Do(getTemplate, m) sw.Do(getTemplate, m)
sw.Do(listTemplate, m) sw.Do(listTemplate, m)
sw.Do(watchTemplate, m) sw.Do(watchTemplate, m)
}
if !noMethods && !readonly {
sw.Do(patchTemplate, m) sw.Do(patchTemplate, m)
} }
@ -177,6 +189,11 @@ var interfaceTemplate3 = `
Watch(opts $.ListOptions|raw$) ($.watchInterface|raw$, error) Watch(opts $.ListOptions|raw$) ($.watchInterface|raw$, error)
Patch(name string, pt $.PatchType|raw$, data []byte, subresources ...string) (result *$.type|raw$, err error)` Patch(name string, pt $.PatchType|raw$, data []byte, subresources ...string) (result *$.type|raw$, err error)`
var interfaceTemplateReadonly = `
Get(name string, options $.GetOptions|raw$) (*$.type|raw$, error)
List(opts $.ListOptions|raw$) (*$.type|raw$List, error)
Watch(opts $.ListOptions|raw$) ($.watchInterface|raw$, error)`
var interfaceTemplate4 = ` var interfaceTemplate4 = `
$.type|public$Expansion $.type|public$Expansion
} }