/
data_centers.go
76 lines (64 loc) · 2.1 KB
/
data_centers.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
package main
import (
"context"
"errors"
"fmt"
"github.com/krystal/go-katapult"
"github.com/krystal/go-katapult/core"
"github.com/spf13/cobra"
)
type dataCentersClient interface {
List(ctx context.Context) ([]*core.DataCenter, *katapult.Response, error)
Get(ctx context.Context, ref core.DataCenterRef) (*core.DataCenter, *katapult.Response, error)
}
//nolint:lll
const dataCentersFormat = `{{ Table (StringSlice "Name" "Permalink" "Country Name") (MultipleRows . "Name" "Permalink" "Country.Name") }}`
//nolint:lll
const getDataCenterFormat = `{{ Table (StringSlice "Name" "Permalink" "Country Name") (SingleRow .Name .Permalink .Country.Name) }}`
func listDataCentersCmd(client dataCentersClient) *cobra.Command {
return &cobra.Command{
Use: "list",
Aliases: []string{"ls"},
Short: "List data centers",
Long: "List data centers.",
RunE: outputWrapper(func(cmd *cobra.Command, args []string) (Output, error) {
dcs, _, err := client.List(cmd.Context())
if err != nil {
return nil, err
}
return &genericOutput{
item: dcs,
defaultTextTemplate: dataCentersFormat,
}, nil
}),
}
}
func getDataCenterCmd(client dataCentersClient) *cobra.Command {
return &cobra.Command{
Use: "get",
Args: cobra.ExactArgs(1),
Short: "Get details for a data center",
Long: "Get details for a data center.",
RunE: outputWrapper(func(cmd *cobra.Command, args []string) (Output, error) {
dc, _, err := client.Get(cmd.Context(), core.DataCenterRef{Permalink: args[0]})
if err != nil {
if errors.Is(err, katapult.ErrNotFound) {
return nil, fmt.Errorf("unknown datacentre")
}
return nil, err
}
return &genericOutput{item: dc, defaultTextTemplate: getDataCenterFormat}, nil
}),
}
}
func dataCentersCmd(client dataCentersClient) *cobra.Command {
cmd := &cobra.Command{
Use: "dc",
Aliases: []string{"dcs", "data-centers", "data_centers"},
Short: "Get information about data centers",
Long: "Get information about data centers.",
}
cmd.AddCommand(listDataCentersCmd(client))
cmd.AddCommand(getDataCenterCmd(client))
return cmd
}