Add workers SDK API bits (#2159)
This commit is contained in:
1 parent
f6c4e3c896
commit
7c4f495c25
8 files changed
+611
-102
No files matched your search
+102
-30
@@ -20,6 +20,7 @@ import (
|
||||
"github.com/hashicorp/boundary/sdk/pbs/controller/api/resources/sessions"
|
||||
"github.com/hashicorp/boundary/sdk/pbs/controller/api/resources/targets"
|
||||
"github.com/hashicorp/boundary/sdk/pbs/controller/api/resources/users"
|
||||
"github.com/hashicorp/boundary/sdk/pbs/controller/api/resources/workers"
|
||||
"google.golang.org/protobuf/proto"
|
||||
)
|
||||
|
||||
@@ -34,6 +35,12 @@ type structureInfo struct {
|
||||
fields []fieldInfo
|
||||
}
|
||||
|
||||
type requiredParam struct {
|
||||
Name string
|
||||
Typ string
|
||||
PostType string
|
||||
}
|
||||
|
||||
type fieldInfo struct {
|
||||
Name string
|
||||
ProtoName string
|
||||
@@ -87,9 +94,8 @@ type structInfo struct {
|
||||
// useful to avoid collisions
|
||||
nameOverride string
|
||||
|
||||
// typeOnCreate indicates that create will be creating a concrete
|
||||
// implementation of an abstract type and thus a type field is necessary
|
||||
typeOnCreate bool
|
||||
// extraRequiredParams allows adding extra required parameters to templates
|
||||
extraRequiredParams []requiredParam
|
||||
|
||||
// recursiveListing indicates that the collection supports recursion when
|
||||
// listing
|
||||
@@ -149,7 +155,7 @@ var inputStructs = []*structInfo{
|
||||
outFile: "scopes/scope.gen.go",
|
||||
templates: []*template.Template{
|
||||
clientTemplate,
|
||||
createTemplate,
|
||||
commonCreateTemplate,
|
||||
readTemplate,
|
||||
updateTemplate,
|
||||
deleteTemplate,
|
||||
@@ -185,7 +191,7 @@ var inputStructs = []*structInfo{
|
||||
outFile: "users/user.gen.go",
|
||||
templates: []*template.Template{
|
||||
clientTemplate,
|
||||
createTemplate,
|
||||
commonCreateTemplate,
|
||||
readTemplate,
|
||||
updateTemplate,
|
||||
deleteTemplate,
|
||||
@@ -213,7 +219,7 @@ var inputStructs = []*structInfo{
|
||||
outFile: "groups/group.gen.go",
|
||||
templates: []*template.Template{
|
||||
clientTemplate,
|
||||
createTemplate,
|
||||
commonCreateTemplate,
|
||||
readTemplate,
|
||||
updateTemplate,
|
||||
deleteTemplate,
|
||||
@@ -251,7 +257,7 @@ var inputStructs = []*structInfo{
|
||||
outFile: "roles/role.gen.go",
|
||||
templates: []*template.Template{
|
||||
clientTemplate,
|
||||
createTemplate,
|
||||
commonCreateTemplate,
|
||||
readTemplate,
|
||||
updateTemplate,
|
||||
deleteTemplate,
|
||||
@@ -293,14 +299,20 @@ var inputStructs = []*structInfo{
|
||||
outFile: "authmethods/authmethods.gen.go",
|
||||
templates: []*template.Template{
|
||||
clientTemplate,
|
||||
createTemplate,
|
||||
commonCreateTemplate,
|
||||
readTemplate,
|
||||
updateTemplate,
|
||||
deleteTemplate,
|
||||
listTemplate,
|
||||
},
|
||||
pluralResourceName: "auth-methods",
|
||||
typeOnCreate: true,
|
||||
pluralResourceName: "auth-methods",
|
||||
extraRequiredParams: []requiredParam{
|
||||
{
|
||||
Name: "resourceType",
|
||||
Typ: "string",
|
||||
PostType: "type",
|
||||
},
|
||||
},
|
||||
versionEnabled: true,
|
||||
createResponseTypes: true,
|
||||
recursiveListing: true,
|
||||
@@ -321,7 +333,7 @@ var inputStructs = []*structInfo{
|
||||
outFile: "accounts/account.gen.go",
|
||||
templates: []*template.Template{
|
||||
clientTemplate,
|
||||
createTemplate,
|
||||
commonCreateTemplate,
|
||||
readTemplate,
|
||||
updateTemplate,
|
||||
deleteTemplate,
|
||||
@@ -349,7 +361,7 @@ var inputStructs = []*structInfo{
|
||||
outFile: "managedgroups/managedgroups.gen.go",
|
||||
templates: []*template.Template{
|
||||
clientTemplate,
|
||||
createTemplate,
|
||||
commonCreateTemplate,
|
||||
readTemplate,
|
||||
updateTemplate,
|
||||
deleteTemplate,
|
||||
@@ -385,15 +397,21 @@ var inputStructs = []*structInfo{
|
||||
outFile: "credentialstores/credential_store.gen.go",
|
||||
templates: []*template.Template{
|
||||
clientTemplate,
|
||||
createTemplate,
|
||||
commonCreateTemplate,
|
||||
readTemplate,
|
||||
updateTemplate,
|
||||
deleteTemplate,
|
||||
listTemplate,
|
||||
},
|
||||
pluralResourceName: "credential-stores",
|
||||
parentTypeName: "scope",
|
||||
typeOnCreate: true,
|
||||
pluralResourceName: "credential-stores",
|
||||
parentTypeName: "scope",
|
||||
extraRequiredParams: []requiredParam{
|
||||
{
|
||||
Name: "resourceType",
|
||||
Typ: "string",
|
||||
PostType: "type",
|
||||
},
|
||||
},
|
||||
versionEnabled: true,
|
||||
createResponseTypes: true,
|
||||
recursiveListing: true,
|
||||
@@ -424,7 +442,7 @@ var inputStructs = []*structInfo{
|
||||
outFile: "credentiallibraries/credential_library.gen.go",
|
||||
templates: []*template.Template{
|
||||
clientTemplate,
|
||||
createTemplate,
|
||||
commonCreateTemplate,
|
||||
readTemplate,
|
||||
updateTemplate,
|
||||
deleteTemplate,
|
||||
@@ -446,15 +464,21 @@ var inputStructs = []*structInfo{
|
||||
outFile: "credentialstores/credential_store.gen.go",
|
||||
templates: []*template.Template{
|
||||
clientTemplate,
|
||||
createTemplate,
|
||||
commonCreateTemplate,
|
||||
readTemplate,
|
||||
updateTemplate,
|
||||
deleteTemplate,
|
||||
listTemplate,
|
||||
},
|
||||
pluralResourceName: "credential-stores",
|
||||
parentTypeName: "scope",
|
||||
typeOnCreate: true,
|
||||
pluralResourceName: "credential-stores",
|
||||
parentTypeName: "scope",
|
||||
extraRequiredParams: []requiredParam{
|
||||
{
|
||||
Name: "resourceType",
|
||||
Typ: "string",
|
||||
PostType: "type",
|
||||
},
|
||||
},
|
||||
versionEnabled: true,
|
||||
createResponseTypes: true,
|
||||
recursiveListing: true,
|
||||
@@ -485,7 +509,7 @@ var inputStructs = []*structInfo{
|
||||
outFile: "credentiallibraries/credential_library.gen.go",
|
||||
templates: []*template.Template{
|
||||
clientTemplate,
|
||||
createTemplate,
|
||||
commonCreateTemplate,
|
||||
readTemplate,
|
||||
updateTemplate,
|
||||
deleteTemplate,
|
||||
@@ -502,7 +526,7 @@ var inputStructs = []*structInfo{
|
||||
outFile: "hostcatalogs/host_catalog.gen.go",
|
||||
templates: []*template.Template{
|
||||
clientTemplate,
|
||||
createTemplate,
|
||||
commonCreateTemplate,
|
||||
readTemplate,
|
||||
updateTemplate,
|
||||
deleteTemplate,
|
||||
@@ -523,8 +547,14 @@ var inputStructs = []*structInfo{
|
||||
SkipDefault: true,
|
||||
},
|
||||
},
|
||||
pluralResourceName: "host-catalogs",
|
||||
typeOnCreate: true,
|
||||
pluralResourceName: "host-catalogs",
|
||||
extraRequiredParams: []requiredParam{
|
||||
{
|
||||
Name: "resourceType",
|
||||
Typ: "string",
|
||||
PostType: "type",
|
||||
},
|
||||
},
|
||||
versionEnabled: true,
|
||||
createResponseTypes: true,
|
||||
recursiveListing: true,
|
||||
@@ -534,7 +564,7 @@ var inputStructs = []*structInfo{
|
||||
outFile: "hosts/host.gen.go",
|
||||
templates: []*template.Template{
|
||||
clientTemplate,
|
||||
createTemplate,
|
||||
commonCreateTemplate,
|
||||
readTemplate,
|
||||
updateTemplate,
|
||||
deleteTemplate,
|
||||
@@ -555,7 +585,7 @@ var inputStructs = []*structInfo{
|
||||
outFile: "hostsets/host_set.gen.go",
|
||||
templates: []*template.Template{
|
||||
clientTemplate,
|
||||
createTemplate,
|
||||
commonCreateTemplate,
|
||||
readTemplate,
|
||||
updateTemplate,
|
||||
deleteTemplate,
|
||||
@@ -622,7 +652,7 @@ var inputStructs = []*structInfo{
|
||||
outFile: "targets/target.gen.go",
|
||||
templates: []*template.Template{
|
||||
clientTemplate,
|
||||
createTemplate,
|
||||
commonCreateTemplate,
|
||||
readTemplate,
|
||||
updateTemplate,
|
||||
deleteTemplate,
|
||||
@@ -676,8 +706,14 @@ var inputStructs = []*structInfo{
|
||||
FieldType: "[]string",
|
||||
},
|
||||
},
|
||||
versionEnabled: true,
|
||||
typeOnCreate: true,
|
||||
versionEnabled: true,
|
||||
extraRequiredParams: []requiredParam{
|
||||
{
|
||||
Name: "resourceType",
|
||||
Typ: "string",
|
||||
PostType: "type",
|
||||
},
|
||||
},
|
||||
createResponseTypes: true,
|
||||
recursiveListing: true,
|
||||
},
|
||||
@@ -702,4 +738,40 @@ var inputStructs = []*structInfo{
|
||||
fieldFilter: []string{"private_key"},
|
||||
recursiveListing: true,
|
||||
},
|
||||
{
|
||||
inProto: &workers.Worker{},
|
||||
outFile: "workers/worker.gen.go",
|
||||
templates: []*template.Template{
|
||||
clientTemplate,
|
||||
template.Must(template.New("").Funcs(
|
||||
template.FuncMap{
|
||||
"snakeCase": snakeCase,
|
||||
"funcName": func() string {
|
||||
return "CreateWorkerLed"
|
||||
},
|
||||
"apiAction": func() string {
|
||||
return ":create:worker-led"
|
||||
},
|
||||
},
|
||||
).Parse(createTemplateStr)),
|
||||
readTemplate,
|
||||
updateTemplate,
|
||||
deleteTemplate,
|
||||
listTemplate,
|
||||
},
|
||||
extraRequiredParams: []requiredParam{
|
||||
{
|
||||
Name: "workerAuthToken",
|
||||
Typ: "string",
|
||||
PostType: "worker_auth_token",
|
||||
},
|
||||
},
|
||||
pluralResourceName: "workers",
|
||||
createResponseTypes: true,
|
||||
recursiveListing: true,
|
||||
},
|
||||
{
|
||||
inProto: &workers.WorkerConfig{},
|
||||
outFile: "workers/worker_config.gen.go",
|
||||
},
|
||||
}
|
||||
@@ -70,7 +70,7 @@ func parsePBs() {
|
||||
name = fmt.Sprintf("%s.%s", pkg, name)
|
||||
}
|
||||
switch name {
|
||||
case "v1.AuthorizedCollectionActionsEntry":
|
||||
case "v1.AuthorizedCollectionActionsEntry", "v1.CanonicalTagsEntry", "v1.TagsEntry":
|
||||
fi.FieldType = "map[string][]string"
|
||||
default:
|
||||
fi.FieldType = sliceText + ptr + name
|
||||
|
||||
@@ -46,7 +46,7 @@ type templateInput struct {
|
||||
SliceSubtypes map[string]sliceSubtypeInfo
|
||||
ExtraFields []fieldInfo
|
||||
VersionEnabled bool
|
||||
TypeOnCreate bool
|
||||
ExtraRequiredParams []requiredParam
|
||||
CreateResponseTypes bool
|
||||
RecursiveListing bool
|
||||
}
|
||||
@@ -65,7 +65,7 @@ func fillTemplates() {
|
||||
ParentTypeName: in.parentTypeName,
|
||||
ExtraFields: in.extraFields,
|
||||
VersionEnabled: in.versionEnabled,
|
||||
TypeOnCreate: in.typeOnCreate,
|
||||
ExtraRequiredParams: in.extraRequiredParams,
|
||||
CreateResponseTypes: in.createResponseTypes,
|
||||
RecursiveListing: in.recursiveListing,
|
||||
}
|
||||
@@ -346,14 +346,10 @@ func (c *Client) Delete(ctx context.Context, id string, opt... Option) (*{{ .Nam
|
||||
}
|
||||
`))
|
||||
|
||||
var createTemplate = template.Must(template.New("").Funcs(
|
||||
template.FuncMap{
|
||||
"snakeCase": snakeCase,
|
||||
},
|
||||
).Parse(`
|
||||
func (c *Client) Create (ctx context.Context, {{ if .TypeOnCreate }} resourceType string, {{ end }} {{ .CollectionFunctionArg }} string, opt... Option) (*{{ .Name }}CreateResult, error) {
|
||||
const createTemplateStr = `
|
||||
func (c *Client) {{ funcName }} (ctx context.Context, {{ range .ExtraRequiredParams }} {{ .Name }} {{ .Typ }}, {{ end }} {{ .CollectionFunctionArg }} string, opt... Option) (*{{ .Name }}CreateResult, error) {
|
||||
if {{ .CollectionFunctionArg }} == "" {
|
||||
return nil, fmt.Errorf("empty {{ .CollectionFunctionArg }} value passed into Create request")
|
||||
return nil, fmt.Errorf("empty {{ .CollectionFunctionArg }} value passed into {{ funcName }} request")
|
||||
}
|
||||
|
||||
opts, apiOpts := getOpts(opt...)
|
||||
@@ -361,17 +357,17 @@ func (c *Client) Create (ctx context.Context, {{ if .TypeOnCreate }} resourceTyp
|
||||
if c.client == nil {
|
||||
return nil, fmt.Errorf("nil client")
|
||||
}
|
||||
{{ if .TypeOnCreate }} if resourceType == "" {
|
||||
return nil, fmt.Errorf("empty resourceType value passed into Create request")
|
||||
{{ range .ExtraRequiredParams }} if {{ .Name }} == "" {
|
||||
return nil, fmt.Errorf("empty {{ .Name }} value passed into {{ funcName }} request")
|
||||
} else {
|
||||
opts.postMap["type"] = resourceType
|
||||
opts.postMap["{{ .PostType }}"] = {{ .Name }}
|
||||
}{{ end }}
|
||||
|
||||
opts.postMap["{{ snakeCase .CollectionFunctionArg }}"] = {{ .CollectionFunctionArg }}
|
||||
|
||||
req, err := c.client.NewRequest(ctx, "POST", "{{ .CollectionPath }}", opts.postMap, apiOpts...)
|
||||
req, err := c.client.NewRequest(ctx, "POST", "{{ .CollectionPath }}{{ apiAction }}", opts.postMap, apiOpts...)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("error creating Create request: %w", err)
|
||||
return nil, fmt.Errorf("error creating {{ funcName }} request: %w", err)
|
||||
}
|
||||
{{ if ( eq .CollectionPath "\"scopes\"" ) }}
|
||||
opts.queryMap["scope_id"] = scopeId
|
||||
@@ -386,14 +382,14 @@ func (c *Client) Create (ctx context.Context, {{ if .TypeOnCreate }} resourceTyp
|
||||
|
||||
resp, err := c.client.Do(req)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("error performing client request during Create call: %w", err)
|
||||
return nil, fmt.Errorf("error performing client request during {{ funcName }} call: %w", err)
|
||||
}
|
||||
|
||||
target := new({{ .Name }}CreateResult)
|
||||
target.Item = new({{ .Name }})
|
||||
apiErr, err := resp.Decode(target.Item)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("error decoding Create response: %w", err)
|
||||
return nil, fmt.Errorf("error decoding {{ funcName }} response: %w", err)
|
||||
}
|
||||
if apiErr != nil {
|
||||
return nil, apiErr
|
||||
@@ -401,7 +397,19 @@ func (c *Client) Create (ctx context.Context, {{ if .TypeOnCreate }} resourceTyp
|
||||
target.response = resp
|
||||
return target, nil
|
||||
}
|
||||
`))
|
||||
`
|
||||
|
||||
var commonCreateTemplate = template.Must(template.New("").Funcs(
|
||||
template.FuncMap{
|
||||
"snakeCase": snakeCase,
|
||||
"funcName": func() string {
|
||||
return "Create"
|
||||
},
|
||||
"apiAction": func() string {
|
||||
return ""
|
||||
},
|
||||
},
|
||||
).Parse(createTemplateStr))
|
||||
|
||||
var updateTemplate = template.Must(template.New("").Parse(`
|
||||
func (c *Client) Update(ctx context.Context, id string, version uint32, opt... Option) (*{{ .Name }}UpdateResult, error) {
|
||||
|
||||
Reference in new issue
Block a user