Skip to content

Commit

Permalink
feat(instance): add human marshalling for user-data (#1300)
Browse files Browse the repository at this point in the history
  • Loading branch information
remyleone authored Jul 29, 2020
1 parent fa2c0f0 commit 2d4a8a2
Show file tree
Hide file tree
Showing 5 changed files with 1,576 additions and 0 deletions.
1 change: 1 addition & 0 deletions internal/namespaces/instance/v1/custom.go
Original file line number Diff line number Diff line change
Expand Up @@ -158,6 +158,7 @@ func GetCommands() *core.Commands {
cmds.MustFind("instance", "user-data", "delete").Override(userDataDeleteBuilder)
cmds.MustFind("instance", "user-data", "set").Override(userDataSetBuilder)
cmds.MustFind("instance", "user-data", "get").Override(userDataGetBuilder)
cmds.MustFind("instance", "user-data", "list").Override(userDataListBuilder)

return cmds
}
Expand Down
37 changes: 37 additions & 0 deletions internal/namespaces/instance/v1/custom_user_data.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,9 @@ package instance
import (
"context"
"fmt"
"io"
"net/http"
"strings"

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

return c
}

func userDataListBuilder(c *core.Command) *core.Command {
type userDataRow struct {
Key string `json:"key"`
Value string `json:"value"`
}
c.AddInterceptors(func(ctx context.Context, argsI interface{}, runner core.CommandRunner) (interface{}, error) {
client := core.ExtractClient(ctx)
api := instance.NewAPI(client)
args := argsI.(*instance.ListServerUserDataRequest)
res, err := api.GetAllServerUserData(&instance.GetAllServerUserDataRequest{
Zone: args.Zone,
ServerID: args.ServerID,
})
if err != nil {
return nil, err
}
var r []userDataRow
for a, v := range res.UserData {
buf := new(strings.Builder)
_, err := io.Copy(buf, v)
if err != nil {
return nil, err
}
r = append(r, userDataRow{
Key: a,
Value: buf.String(),
})
}

return r, nil
})

return c
}
17 changes: 17 additions & 0 deletions internal/namespaces/instance/v1/custom_user_data_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -32,3 +32,20 @@ func Test_UserDataGet(t *testing.T) {
),
}))
}

func Test_UserDataList(t *testing.T) {
t.Run("Simple", core.Test(&core.TestConfig{
BeforeFunc: core.BeforeFuncCombine(
createServer("Server"),
core.ExecBeforeCmd("scw instance user-data set {{ .Server.ID }} key=foo content=bar"),
core.ExecBeforeCmd("scw instance user-data set {{ .Server.ID }} key=bar content=foo"),
),
Commands: GetCommands(),
Cmd: "scw instance user-data list server-id={{ .Server.ID }}",
AfterFunc: deleteServer("Server"),
Check: core.TestCheckCombine(
core.TestCheckGolden(),
core.TestCheckExitCode(0),
),
}))
}
Loading

0 comments on commit 2d4a8a2

Please sign in to comment.