@@ -2,135 +2,46 @@ package instance
22
33import (
44 "context"
5- "reflect"
5+ "fmt"
6+ "net/http"
67
78 "github.com/scaleway/scaleway-cli/internal/core"
89 "github.com/scaleway/scaleway-sdk-go/api/instance/v1"
10+ "github.com/scaleway/scaleway-sdk-go/scw"
911)
1012
1113//
1214// Commands
1315//
1416
15- func userDataCommand () * core.Command {
16- return & core.Command {
17- Namespace : "instance" ,
18- Resource : "user-data" ,
17+ func userDataSetBuilder (c * core.Command ) * core.Command {
18+ * c .ArgSpecs .GetByName ("content.name" ) = core.ArgSpec {
19+ Name : "content" ,
20+ Short : "Content of the user data" ,
21+ Required : true ,
1922 }
20- }
2123
22- func userDataListCommand () * core.Command {
23- return & core.Command {
24- Short : `List user data` ,
25- Long : `List user data for the given server.` ,
26- Namespace : "instance" ,
27- Resource : "user-data" ,
28- Verb : "list" ,
29- ArgsType : reflect .TypeOf (instance.ListServerUserDataRequest {}),
30- ArgSpecs : core.ArgSpecs {
31- core .ZoneArgSpec (),
32- {
33- Name : "server-id" ,
34- Short : `ID of a server` ,
35- Required : true ,
36- },
37- },
38- Run : func (ctx context.Context , argsI interface {}) (i interface {}, e error ) {
39- return instance .NewAPI (core .ExtractClient (ctx )).ListServerUserData (argsI .(* instance.ListServerUserDataRequest ))
40- },
41- }
24+ c .ArgSpecs .DeleteByName ("content.content-type" )
25+ c .ArgSpecs .DeleteByName ("content.content" )
26+ return c
4227}
4328
44- func userDataDeleteCommand () * core.Command {
45- return & core.Command {
46- Short : `Delete user data by key` ,
47- Long : `Delete user data key for the given server.` ,
48- Namespace : "instance" ,
49- Resource : "user-data" ,
50- Verb : "delete" ,
51- ArgsType : reflect .TypeOf (instance.DeleteServerUserDataRequest {}),
52- ArgSpecs : core.ArgSpecs {
53- core .ZoneArgSpec (),
54- {
55- Name : "server-id" ,
56- Short : `ID of a server` ,
57- Required : true ,
58- },
59- {
60- Name : "key" ,
61- Short : `Key of the user data` ,
62- Required : true ,
63- },
64- },
65- Run : func (ctx context.Context , argsI interface {}) (i interface {}, e error ) {
66- err := instance .NewAPI (core .ExtractClient (ctx )).DeleteServerUserData (argsI .(* instance.DeleteServerUserDataRequest ))
67- if err != nil {
68- return nil , err
29+ func userDataGetBuilder (c * core.Command ) * core.Command {
30+ originalRun := c .Run
31+ c .Run = func (ctx context.Context , argsI interface {}) (interface {}, error ) {
32+ req := argsI .(* instance.GetServerUserDataRequest )
33+ res , err := originalRun (ctx , argsI )
34+ if err != nil {
35+ if resErr , ok := err .(* scw.ResponseError ); ok {
36+ if resErr .StatusCode == http .StatusNotFound {
37+ return nil , fmt .Errorf ("'%s' key does not exists" , req .Key )
38+ }
6939 }
70- return & core.SuccessResult {}, nil
71- },
72- }
73- }
40+ return nil , err
41+ }
7442
75- func userDataGetCommand () * core.Command {
76- return & core.Command {
77- Short : `Get user data key` ,
78- Long : `Get user data key for the given server.` ,
79- Namespace : "instance" ,
80- Resource : "user-data" ,
81- Verb : "get" ,
82- ArgsType : reflect .TypeOf (instance.GetServerUserDataRequest {}),
83- ArgSpecs : core.ArgSpecs {
84- core .ZoneArgSpec (),
85- {
86- Name : "server-id" ,
87- Short : `ID of a server` ,
88- Required : true ,
89- },
90- {
91- Name : "key" ,
92- Short : `Key of the user data` ,
93- Required : true ,
94- },
95- },
96- Run : func (ctx context.Context , argsI interface {}) (i interface {}, e error ) {
97- return instance .NewAPI (core .ExtractClient (ctx )).GetServerUserData (argsI .(* instance.GetServerUserDataRequest ))
98- },
43+ return res , nil
9944 }
100- }
10145
102- func userDataSetCommand () * core.Command {
103- return & core.Command {
104- Short : `Set a user data` ,
105- Long : `Set a user data for the given server.` ,
106- Namespace : "instance" ,
107- Resource : "user-data" ,
108- Verb : "set" ,
109- ArgsType : reflect .TypeOf (instance.SetServerUserDataRequest {}),
110- ArgSpecs : core.ArgSpecs {
111- core .ZoneArgSpec (),
112- {
113- Name : "server-id" ,
114- Short : `ID of a server` ,
115- Required : true ,
116- },
117- {
118- Name : "key" ,
119- Short : `Key of the user data` ,
120- Required : true ,
121- },
122- {
123- Name : "content" ,
124- Short : `Content of the user data` ,
125- Required : true ,
126- },
127- },
128- Run : func (ctx context.Context , argsI interface {}) (i interface {}, e error ) {
129- err := instance .NewAPI (core .ExtractClient (ctx )).SetServerUserData (argsI .(* instance.SetServerUserDataRequest ))
130- if err != nil {
131- return nil , err
132- }
133- return & core.SuccessResult {}, nil
134- },
135- }
46+ return c
13647}
0 commit comments