65 lines
1.2 KiB
Go
Raw Normal View History

package compute
2017-04-26 12:12:57 -07:00
import (
"context"
2017-04-26 12:12:57 -07:00
"encoding/json"
"fmt"
"net/http"
"sort"
"github.com/hashicorp/errwrap"
"github.com/joyent/triton-go/client"
2017-04-26 12:12:57 -07:00
)
type ServicesClient struct {
client *client.Client
2017-04-26 12:12:57 -07:00
}
type Service struct {
Name string
Endpoint string
}
type ListServicesInput struct{}
func (c *ServicesClient) List(ctx context.Context, _ *ListServicesInput) ([]*Service, error) {
path := fmt.Sprintf("/%s/services", c.client.AccountName)
reqInputs := client.RequestInput{
Method: http.MethodGet,
Path: path,
}
respReader, err := c.client.ExecuteRequest(ctx, reqInputs)
2017-04-26 12:12:57 -07:00
if respReader != nil {
defer respReader.Close()
}
if err != nil {
return nil, errwrap.Wrapf("Error executing List request: {{err}}", err)
2017-04-26 12:12:57 -07:00
}
var intermediate map[string]string
decoder := json.NewDecoder(respReader)
if err = decoder.Decode(&intermediate); err != nil {
return nil, errwrap.Wrapf("Error decoding List response: {{err}}", err)
2017-04-26 12:12:57 -07:00
}
keys := make([]string, len(intermediate))
i := 0
for k := range intermediate {
keys[i] = k
i++
}
sort.Strings(keys)
result := make([]*Service, len(intermediate))
i = 0
for _, key := range keys {
result[i] = &Service{
Name: key,
Endpoint: intermediate[key],
}
i++
}
return result, nil
}