Skip to content

Commit 2d4a8a2

Browse files
authored
feat(instance): add human marshalling for user-data (#1300)
1 parent fa2c0f0 commit 2d4a8a2

File tree

5 files changed

+1576
-0
lines changed

5 files changed

+1576
-0
lines changed

internal/namespaces/instance/v1/custom.go

+1
Original file line numberDiff line numberDiff line change
@@ -158,6 +158,7 @@ func GetCommands() *core.Commands {
158158
cmds.MustFind("instance", "user-data", "delete").Override(userDataDeleteBuilder)
159159
cmds.MustFind("instance", "user-data", "set").Override(userDataSetBuilder)
160160
cmds.MustFind("instance", "user-data", "get").Override(userDataGetBuilder)
161+
cmds.MustFind("instance", "user-data", "list").Override(userDataListBuilder)
161162

162163
return cmds
163164
}

internal/namespaces/instance/v1/custom_user_data.go

+37
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,9 @@ package instance
33
import (
44
"context"
55
"fmt"
6+
"io"
67
"net/http"
8+
"strings"
79

810
"github.com/scaleway/scaleway-cli/internal/core"
911
"github.com/scaleway/scaleway-sdk-go/api/instance/v1"
@@ -53,3 +55,38 @@ func userDataGetBuilder(c *core.Command) *core.Command {
5355

5456
return c
5557
}
58+
59+
func userDataListBuilder(c *core.Command) *core.Command {
60+
type userDataRow struct {
61+
Key string `json:"key"`
62+
Value string `json:"value"`
63+
}
64+
c.AddInterceptors(func(ctx context.Context, argsI interface{}, runner core.CommandRunner) (interface{}, error) {
65+
client := core.ExtractClient(ctx)
66+
api := instance.NewAPI(client)
67+
args := argsI.(*instance.ListServerUserDataRequest)
68+
res, err := api.GetAllServerUserData(&instance.GetAllServerUserDataRequest{
69+
Zone: args.Zone,
70+
ServerID: args.ServerID,
71+
})
72+
if err != nil {
73+
return nil, err
74+
}
75+
var r []userDataRow
76+
for a, v := range res.UserData {
77+
buf := new(strings.Builder)
78+
_, err := io.Copy(buf, v)
79+
if err != nil {
80+
return nil, err
81+
}
82+
r = append(r, userDataRow{
83+
Key: a,
84+
Value: buf.String(),
85+
})
86+
}
87+
88+
return r, nil
89+
})
90+
91+
return c
92+
}

internal/namespaces/instance/v1/custom_user_data_test.go

+17
Original file line numberDiff line numberDiff line change
@@ -32,3 +32,20 @@ func Test_UserDataGet(t *testing.T) {
3232
),
3333
}))
3434
}
35+
36+
func Test_UserDataList(t *testing.T) {
37+
t.Run("Simple", core.Test(&core.TestConfig{
38+
BeforeFunc: core.BeforeFuncCombine(
39+
createServer("Server"),
40+
core.ExecBeforeCmd("scw instance user-data set {{ .Server.ID }} key=foo content=bar"),
41+
core.ExecBeforeCmd("scw instance user-data set {{ .Server.ID }} key=bar content=foo"),
42+
),
43+
Commands: GetCommands(),
44+
Cmd: "scw instance user-data list server-id={{ .Server.ID }}",
45+
AfterFunc: deleteServer("Server"),
46+
Check: core.TestCheckCombine(
47+
core.TestCheckGolden(),
48+
core.TestCheckExitCode(0),
49+
),
50+
}))
51+
}

0 commit comments

Comments
 (0)