mirror of https://github.com/hashicorp/boundary
Adding List to go SDK (#164)
parent
c017da7087
commit
2727917b2a
@ -0,0 +1,140 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"fmt"
|
||||
"io/ioutil"
|
||||
"os"
|
||||
"strings"
|
||||
"text/template"
|
||||
)
|
||||
|
||||
type listInfo struct {
|
||||
baseType string
|
||||
targetType string
|
||||
path string
|
||||
}
|
||||
|
||||
var listFuncs = map[string][]*listInfo{
|
||||
"scopes": {
|
||||
{
|
||||
baseType: "Organization",
|
||||
targetType: "Project",
|
||||
path: "projects",
|
||||
},
|
||||
{
|
||||
baseType: "Organization",
|
||||
targetType: "groups.Group",
|
||||
path: "groups",
|
||||
},
|
||||
{
|
||||
baseType: "Organization",
|
||||
targetType: "roles.Role",
|
||||
path: "roles",
|
||||
},
|
||||
{
|
||||
baseType: "Organization",
|
||||
targetType: "users.User",
|
||||
path: "users",
|
||||
},
|
||||
{
|
||||
baseType: "Project",
|
||||
targetType: "groups.Group",
|
||||
path: "groups",
|
||||
},
|
||||
{
|
||||
baseType: "Project",
|
||||
targetType: "roles.Role",
|
||||
path: "roles",
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
func writeListFuncs() {
|
||||
for outPkg, funcs := range listFuncs {
|
||||
outFile := os.Getenv("GEN_BASEPATH") + fmt.Sprintf("/api/%s/list.gen.go", outPkg)
|
||||
outBuf := bytes.NewBuffer([]byte(fmt.Sprintf(
|
||||
`// Code generated by "make api"; DO NOT EDIT.
|
||||
package %s
|
||||
`, outPkg)))
|
||||
for _, listInfo := range funcs {
|
||||
listFuncTemplate.Execute(outBuf, struct {
|
||||
BaseType string
|
||||
TargetType string
|
||||
TargetName string
|
||||
Path string
|
||||
}{
|
||||
BaseType: listInfo.baseType,
|
||||
TargetType: listInfo.targetType,
|
||||
TargetName: strings.Split(listInfo.targetType, ".")[strings.Count(listInfo.targetType, ".")],
|
||||
Path: listInfo.path,
|
||||
})
|
||||
}
|
||||
if err := ioutil.WriteFile(outFile, outBuf.Bytes(), 0644); err != nil {
|
||||
fmt.Printf("error writing file %q: %v\n", outFile, err)
|
||||
os.Exit(1)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
var listFuncTemplate = template.Must(template.New("").Parse(
|
||||
`
|
||||
func (s {{ .BaseType }}) List{{ .TargetName }}s(ctx context.Context) ([]*{{ .TargetType }}, *api.Error, error) {
|
||||
if s.Client == nil {
|
||||
return nil, nil, fmt.Errorf("nil client in List{{ .TargetName }} request")
|
||||
}
|
||||
if s.Id == "" {
|
||||
{{ if (eq .BaseType "Organization") }}
|
||||
// Assume the client has been configured with organization already and
|
||||
// move on
|
||||
{{ else if (eq .BaseType "Project") }}
|
||||
// Assume the client has been configured with project already and move
|
||||
// on
|
||||
{{ else }}
|
||||
return nil, nil, fmt.Errorf("missing {{ .BaseType }} ID in List{{ .TargetType }}s request")
|
||||
{{ end }}
|
||||
} else {
|
||||
// If it's explicitly set here, override anything that might be in the
|
||||
// client
|
||||
{{ if (eq .BaseType "Organization") }}
|
||||
ctx = context.WithValue(ctx, "org", s.Id)
|
||||
{{ else if (eq .BaseType "Project") }}
|
||||
ctx = context.WithValue(ctx, "project", s.Id)
|
||||
{{ end }}
|
||||
}
|
||||
|
||||
req, err := s.Client.NewRequest(ctx, "GET", "{{ .Path }}", nil)
|
||||
if err != nil {
|
||||
return nil, nil, fmt.Errorf("error creating List{{ .TargetName }}s request: %w", err)
|
||||
}
|
||||
|
||||
resp, err := s.Client.Do(req)
|
||||
if err != nil {
|
||||
return nil, nil, fmt.Errorf("error performing client request during List{{ .TargetName }}s call: %w", err)
|
||||
}
|
||||
|
||||
type listResponse struct {
|
||||
Items []*{{ .TargetType }}
|
||||
}
|
||||
target := &listResponse{}
|
||||
|
||||
apiErr, err := resp.Decode(target)
|
||||
if err != nil {
|
||||
return nil, nil, fmt.Errorf("error decoding List{{ .TargetName }}s response: %w", err)
|
||||
}
|
||||
|
||||
for _, t := range target.Items {
|
||||
{{ if (eq .TargetType "Organization") }}
|
||||
t.Client = s.Client.Clone()
|
||||
t.Client.SetOrgnization(t.Id)
|
||||
{{ else if (eq .TargetType "Project") }}
|
||||
t.Client = s.Client.Clone()
|
||||
t.Client.SetProject(t.Id)
|
||||
{{ else }}
|
||||
t.Client = s.Client
|
||||
{{ end }}
|
||||
}
|
||||
|
||||
return target.Items, apiErr, nil
|
||||
}
|
||||
`))
|
||||
@ -0,0 +1,289 @@
|
||||
// Code generated by "make api"; DO NOT EDIT.
|
||||
package scopes
|
||||
|
||||
import (
|
||||
"context"
|
||||
"fmt"
|
||||
|
||||
"github.com/hashicorp/watchtower/api"
|
||||
"github.com/hashicorp/watchtower/api/groups"
|
||||
"github.com/hashicorp/watchtower/api/roles"
|
||||
"github.com/hashicorp/watchtower/api/users"
|
||||
)
|
||||
|
||||
func (s Organization) ListProjects(ctx context.Context) ([]*Project, *api.Error, error) {
|
||||
if s.Client == nil {
|
||||
return nil, nil, fmt.Errorf("nil client in ListProject request")
|
||||
}
|
||||
if s.Id == "" {
|
||||
|
||||
// Assume the client has been configured with organization already and
|
||||
// move on
|
||||
|
||||
} else {
|
||||
// If it's explicitly set here, override anything that might be in the
|
||||
// client
|
||||
|
||||
ctx = context.WithValue(ctx, "org", s.Id)
|
||||
|
||||
}
|
||||
|
||||
req, err := s.Client.NewRequest(ctx, "GET", "projects", nil)
|
||||
if err != nil {
|
||||
return nil, nil, fmt.Errorf("error creating ListProjects request: %w", err)
|
||||
}
|
||||
|
||||
resp, err := s.Client.Do(req)
|
||||
if err != nil {
|
||||
return nil, nil, fmt.Errorf("error performing client request during ListProjects call: %w", err)
|
||||
}
|
||||
|
||||
type listResponse struct {
|
||||
Items []*Project
|
||||
}
|
||||
target := &listResponse{}
|
||||
|
||||
apiErr, err := resp.Decode(target)
|
||||
if err != nil {
|
||||
return nil, nil, fmt.Errorf("error decoding ListProjects response: %w", err)
|
||||
}
|
||||
|
||||
for _, t := range target.Items {
|
||||
|
||||
t.Client = s.Client.Clone()
|
||||
t.Client.SetProject(t.Id)
|
||||
|
||||
}
|
||||
|
||||
return target.Items, apiErr, nil
|
||||
}
|
||||
|
||||
func (s Organization) ListGroups(ctx context.Context) ([]*groups.Group, *api.Error, error) {
|
||||
if s.Client == nil {
|
||||
return nil, nil, fmt.Errorf("nil client in ListGroup request")
|
||||
}
|
||||
if s.Id == "" {
|
||||
|
||||
// Assume the client has been configured with organization already and
|
||||
// move on
|
||||
|
||||
} else {
|
||||
// If it's explicitly set here, override anything that might be in the
|
||||
// client
|
||||
|
||||
ctx = context.WithValue(ctx, "org", s.Id)
|
||||
|
||||
}
|
||||
|
||||
req, err := s.Client.NewRequest(ctx, "GET", "groups", nil)
|
||||
if err != nil {
|
||||
return nil, nil, fmt.Errorf("error creating ListGroups request: %w", err)
|
||||
}
|
||||
|
||||
resp, err := s.Client.Do(req)
|
||||
if err != nil {
|
||||
return nil, nil, fmt.Errorf("error performing client request during ListGroups call: %w", err)
|
||||
}
|
||||
|
||||
type listResponse struct {
|
||||
Items []*groups.Group
|
||||
}
|
||||
target := &listResponse{}
|
||||
|
||||
apiErr, err := resp.Decode(target)
|
||||
if err != nil {
|
||||
return nil, nil, fmt.Errorf("error decoding ListGroups response: %w", err)
|
||||
}
|
||||
|
||||
for _, t := range target.Items {
|
||||
|
||||
t.Client = s.Client
|
||||
|
||||
}
|
||||
|
||||
return target.Items, apiErr, nil
|
||||
}
|
||||
|
||||
func (s Organization) ListRoles(ctx context.Context) ([]*roles.Role, *api.Error, error) {
|
||||
if s.Client == nil {
|
||||
return nil, nil, fmt.Errorf("nil client in ListRole request")
|
||||
}
|
||||
if s.Id == "" {
|
||||
|
||||
// Assume the client has been configured with organization already and
|
||||
// move on
|
||||
|
||||
} else {
|
||||
// If it's explicitly set here, override anything that might be in the
|
||||
// client
|
||||
|
||||
ctx = context.WithValue(ctx, "org", s.Id)
|
||||
|
||||
}
|
||||
|
||||
req, err := s.Client.NewRequest(ctx, "GET", "roles", nil)
|
||||
if err != nil {
|
||||
return nil, nil, fmt.Errorf("error creating ListRoles request: %w", err)
|
||||
}
|
||||
|
||||
resp, err := s.Client.Do(req)
|
||||
if err != nil {
|
||||
return nil, nil, fmt.Errorf("error performing client request during ListRoles call: %w", err)
|
||||
}
|
||||
|
||||
type listResponse struct {
|
||||
Items []*roles.Role
|
||||
}
|
||||
target := &listResponse{}
|
||||
|
||||
apiErr, err := resp.Decode(target)
|
||||
if err != nil {
|
||||
return nil, nil, fmt.Errorf("error decoding ListRoles response: %w", err)
|
||||
}
|
||||
|
||||
for _, t := range target.Items {
|
||||
|
||||
t.Client = s.Client
|
||||
|
||||
}
|
||||
|
||||
return target.Items, apiErr, nil
|
||||
}
|
||||
|
||||
func (s Organization) ListUsers(ctx context.Context) ([]*users.User, *api.Error, error) {
|
||||
if s.Client == nil {
|
||||
return nil, nil, fmt.Errorf("nil client in ListUser request")
|
||||
}
|
||||
if s.Id == "" {
|
||||
|
||||
// Assume the client has been configured with organization already and
|
||||
// move on
|
||||
|
||||
} else {
|
||||
// If it's explicitly set here, override anything that might be in the
|
||||
// client
|
||||
|
||||
ctx = context.WithValue(ctx, "org", s.Id)
|
||||
|
||||
}
|
||||
|
||||
req, err := s.Client.NewRequest(ctx, "GET", "users", nil)
|
||||
if err != nil {
|
||||
return nil, nil, fmt.Errorf("error creating ListUsers request: %w", err)
|
||||
}
|
||||
|
||||
resp, err := s.Client.Do(req)
|
||||
if err != nil {
|
||||
return nil, nil, fmt.Errorf("error performing client request during ListUsers call: %w", err)
|
||||
}
|
||||
|
||||
type listResponse struct {
|
||||
Items []*users.User
|
||||
}
|
||||
target := &listResponse{}
|
||||
|
||||
apiErr, err := resp.Decode(target)
|
||||
if err != nil {
|
||||
return nil, nil, fmt.Errorf("error decoding ListUsers response: %w", err)
|
||||
}
|
||||
|
||||
for _, t := range target.Items {
|
||||
|
||||
t.Client = s.Client
|
||||
|
||||
}
|
||||
|
||||
return target.Items, apiErr, nil
|
||||
}
|
||||
|
||||
func (s Project) ListGroups(ctx context.Context) ([]*groups.Group, *api.Error, error) {
|
||||
if s.Client == nil {
|
||||
return nil, nil, fmt.Errorf("nil client in ListGroup request")
|
||||
}
|
||||
if s.Id == "" {
|
||||
|
||||
// Assume the client has been configured with project already and move
|
||||
// on
|
||||
|
||||
} else {
|
||||
// If it's explicitly set here, override anything that might be in the
|
||||
// client
|
||||
|
||||
ctx = context.WithValue(ctx, "project", s.Id)
|
||||
|
||||
}
|
||||
|
||||
req, err := s.Client.NewRequest(ctx, "GET", "groups", nil)
|
||||
if err != nil {
|
||||
return nil, nil, fmt.Errorf("error creating ListGroups request: %w", err)
|
||||
}
|
||||
|
||||
resp, err := s.Client.Do(req)
|
||||
if err != nil {
|
||||
return nil, nil, fmt.Errorf("error performing client request during ListGroups call: %w", err)
|
||||
}
|
||||
|
||||
type listResponse struct {
|
||||
Items []*groups.Group
|
||||
}
|
||||
target := &listResponse{}
|
||||
|
||||
apiErr, err := resp.Decode(target)
|
||||
if err != nil {
|
||||
return nil, nil, fmt.Errorf("error decoding ListGroups response: %w", err)
|
||||
}
|
||||
|
||||
for _, t := range target.Items {
|
||||
|
||||
t.Client = s.Client
|
||||
|
||||
}
|
||||
|
||||
return target.Items, apiErr, nil
|
||||
}
|
||||
|
||||
func (s Project) ListRoles(ctx context.Context) ([]*roles.Role, *api.Error, error) {
|
||||
if s.Client == nil {
|
||||
return nil, nil, fmt.Errorf("nil client in ListRole request")
|
||||
}
|
||||
if s.Id == "" {
|
||||
|
||||
// Assume the client has been configured with project already and move
|
||||
// on
|
||||
|
||||
} else {
|
||||
// If it's explicitly set here, override anything that might be in the
|
||||
// client
|
||||
|
||||
ctx = context.WithValue(ctx, "project", s.Id)
|
||||
|
||||
}
|
||||
|
||||
req, err := s.Client.NewRequest(ctx, "GET", "roles", nil)
|
||||
if err != nil {
|
||||
return nil, nil, fmt.Errorf("error creating ListRoles request: %w", err)
|
||||
}
|
||||
|
||||
resp, err := s.Client.Do(req)
|
||||
if err != nil {
|
||||
return nil, nil, fmt.Errorf("error performing client request during ListRoles call: %w", err)
|
||||
}
|
||||
|
||||
type listResponse struct {
|
||||
Items []*roles.Role
|
||||
}
|
||||
target := &listResponse{}
|
||||
|
||||
apiErr, err := resp.Decode(target)
|
||||
if err != nil {
|
||||
return nil, nil, fmt.Errorf("error decoding ListRoles response: %w", err)
|
||||
}
|
||||
|
||||
for _, t := range target.Items {
|
||||
|
||||
t.Client = s.Client
|
||||
|
||||
}
|
||||
|
||||
return target.Items, apiErr, nil
|
||||
}
|
||||
Loading…
Reference in new issue