Skip to content

Commit 0fd0f75

Browse files
committed
update gssh and subnet
1 parent 291bbdc commit 0fd0f75

5 files changed

Lines changed: 216 additions & 74 deletions

File tree

cmd/completion.go

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,8 @@ import (
2323
"strings"
2424

2525
"github.com/spf13/cobra"
26-
. "github.com/ucloud/ucloud-cli/base"
26+
27+
"github.com/ucloud/ucloud-cli/base"
2728
)
2829

2930
// NewCmdCompletion ucloud completion
@@ -78,15 +79,15 @@ func zshCompletion(cmd *cobra.Command) {
7879
autoload -U +X bashcompinit && bashcompinit
7980
complete -F /usr/local/bin/ucloud ucloud`)
8081
fmt.Println("If the following scripts are included in '~/.bash_profile' or '~/.bashrc', please remove it. The scripts used to auto complete words before ucloud cli v0.1.3")
81-
fmt.Printf("fpath=(~/%s $fpath)\n", ConfigPath)
82+
fmt.Printf("fpath=(~/%s $fpath)\n", base.ConfigPath)
8283
fmt.Println("autoload -U +X compinit && compinit")
8384
}
8485

8586
func getBashVersion() (version string, err error) {
8687
lookupBashVersion := exec.Command("bash", "-version")
8788
out, err := lookupBashVersion.Output()
8889
if err != nil {
89-
Cxt.PrintErr(err)
90+
base.Cxt.PrintErr(err)
9091
}
9192

9293
// Example

cmd/globalssh.go

Lines changed: 100 additions & 55 deletions
Original file line numberDiff line numberDiff line change
@@ -15,14 +15,16 @@
1515
package cmd
1616

1717
import (
18+
"fmt"
1819
"net"
1920
"strings"
2021

2122
"github.com/spf13/cobra"
2223

23-
"github.com/ucloud/ucloud-cli/base"
24-
. "github.com/ucloud/ucloud-cli/base"
24+
"github.com/ucloud/ucloud-sdk-go/services/pathx"
2525
sdk "github.com/ucloud/ucloud-sdk-go/ucloud"
26+
27+
"github.com/ucloud/ucloud-cli/base"
2628
)
2729

2830
//NewCmdGssh ucloud gssh
@@ -52,7 +54,7 @@ type GSSHRow struct {
5254

5355
//NewCmdGsshList ucloud gssh list
5456
func NewCmdGsshList() *cobra.Command {
55-
req := BizClient.NewDescribeGlobalSSHInstanceRequest()
57+
req := base.BizClient.NewDescribeGlobalSSHInstanceRequest()
5658
cmd := &cobra.Command{
5759
Use: "list",
5860
Short: "List all GlobalSSH instances",
@@ -66,11 +68,12 @@ func NewCmdGsshList() *cobra.Command {
6668
"东京": "Tokyo",
6769
"华盛顿": "Washington",
6870
"法兰克福": "Frankfurt",
71+
"拉各斯": "Lagos",
6972
}
7073

71-
resp, err := BizClient.DescribeGlobalSSHInstance(req)
74+
resp, err := base.BizClient.DescribeGlobalSSHInstance(req)
7275
if err != nil {
73-
HandleError(err)
76+
base.HandleError(err)
7477
} else {
7578
list := make([]GSSHRow, 0)
7679
for _, gssh := range resp.InstanceSet {
@@ -92,22 +95,22 @@ func NewCmdGsshList() *cobra.Command {
9295
},
9396
}
9497
cmd.Flags().SortFlags = false
95-
req.Region = cmd.Flags().String("region", ConfigIns.Region, "Optional. Assign region")
96-
req.ProjectId = cmd.Flags().String("project-id", ConfigIns.ProjectID, "Optional. Assign project-id")
98+
req.Region = cmd.Flags().String("region", base.ConfigIns.Region, "Optional. Assign region")
99+
req.ProjectId = cmd.Flags().String("project-id", base.ConfigIns.ProjectID, "Optional. Assign project-id")
97100
return cmd
98101
}
99102

100103
//NewCmdGsshArea ucloud gssh area
101104
func NewCmdGsshArea() *cobra.Command {
102-
req := BizClient.NewDescribeGlobalSSHAreaRequest()
105+
req := base.BizClient.NewDescribeGlobalSSHAreaRequest()
103106
cmd := &cobra.Command{
104107
Use: "location",
105108
Short: "List SSH server locations and covered areas",
106109
Long: "List SSH server locations and covered areas",
107110
Run: func(cmd *cobra.Command, args []string) {
108-
resp, err := BizClient.DescribeGlobalSSHArea(req)
111+
resp, err := base.BizClient.DescribeGlobalSSHArea(req)
109112
if err != nil {
110-
HandleError(err)
113+
base.HandleError(err)
111114
return
112115
}
113116
list := make([]GsshLocation, 0)
@@ -118,13 +121,13 @@ func NewCmdGsshArea() *cobra.Command {
118121
}
119122
regionLabels := make([]string, 0)
120123
for _, region := range item.RegionSet {
121-
regionLabels = append(regionLabels, RegionLabel[region])
124+
regionLabels = append(regionLabels, base.RegionLabel[region])
122125
}
123126
row.CoveredArea = strings.Join(regionLabels, ",")
124127
list = append(list, row)
125128
}
126129

127-
PrintTable(list, []string{"AirportCode", "SSHServerLocation", "CoveredArea"})
130+
base.PrintTable(list, []string{"AirportCode", "SSHServerLocation", "CoveredArea"})
128131
},
129132
}
130133
return cmd
@@ -144,12 +147,13 @@ var areaCodeMap = map[string]string{
144147
"HND": "Tokyo",
145148
"IAD": "Washington",
146149
"FRA": "Frankfurt",
150+
"LOS": "Lagos",
147151
}
148152

149153
//NewCmdGsshCreate ucloud gssh create
150154
func NewCmdGsshCreate() *cobra.Command {
151155
var targetIP *net.IP
152-
req := BizClient.NewCreateGlobalSSHInstanceRequest()
156+
req := base.BizClient.NewCreateGlobalSSHInstanceRequest()
153157
cmd := &cobra.Command{
154158
Use: "create",
155159
Short: "Create GlobalSSH instance",
@@ -163,113 +167,154 @@ func NewCmdGsshCreate() *cobra.Command {
163167
}
164168
}
165169
if port < 1 || port > 65535 || port == 80 || port == 443 {
166-
Cxt.Println("The port number should be between 1 and 65535, and cannot be 80 or 443")
170+
base.Cxt.Println("The port number should be between 1 and 65535, and cannot be 80 or 443")
167171
return
168172
}
169173
req.TargetIP = sdk.String(targetIP.String())
170-
resp, err := BizClient.CreateGlobalSSHInstance(req)
174+
resp, err := base.BizClient.CreateGlobalSSHInstance(req)
171175
if err != nil {
172-
HandleError(err)
176+
base.HandleError(err)
173177
} else {
174-
Cxt.Printf("gssh[%s] created\n", resp.InstanceId)
178+
base.Cxt.Printf("gssh[%s] created\n", resp.InstanceId)
175179
}
176180
},
177181
}
178-
cmd.Flags().SortFlags = false
182+
flags := cmd.Flags()
183+
flags.SortFlags = false
184+
179185
req.AreaCode = cmd.Flags().String("location", "", "Required. Location of the source server. See 'ucloud gssh location'")
180186
targetIP = cmd.Flags().IP("target-ip", nil, "Required. IP of the source server. Required")
181-
req.Region = cmd.Flags().String("region", "", "Optional. Assign region")
182-
req.ProjectId = cmd.Flags().String("project-id", ConfigIns.ProjectID, "Optional. Assign project-id")
187+
bindProjectID(req, flags)
183188
req.Port = cmd.Flags().Int("port", 22, "Optional. Port of The SSH service between 1 and 65535. Do not use ports such as 80,443.")
184189
req.Remark = cmd.Flags().String("remark", "", "Optional. Remark of your GlobalSSH.")
185190
req.ChargeType = cmd.Flags().String("charge-type", "Month", "Optional.'Year',pay yearly;'Month',pay monthly;'Dynamic', pay hourly(requires access)")
186191
req.Quantity = cmd.Flags().Int("quantity", 1, "Optional. The duration of the instance. N years/months.")
187-
req.CouponId = cmd.Flags().String("coupon-id", "", "Optional. Coupon ID, The Coupon can deduct part of the payment,see DescribeCoupon or https://accountv2.ucloud.cn")
192+
188193
cmd.MarkFlagRequired("location")
189194
cmd.MarkFlagRequired("target-ip")
190-
cmd.Flags().SetFlagValues("location", "LosAngeles", "Singapore", "HongKong", "Tokyo", "Washington", "Frankfurt")
195+
cmd.Flags().SetFlagValues("location", "LosAngeles", "Singapore", "Lagos", "HongKong", "Tokyo", "Washington", "Frankfurt")
191196
cmd.Flags().SetFlagValues("charge-type", "Month", "Year", "Dynamic", "Trial")
197+
cmd.Flags().SetFlagValuesFunc("target-ip", func() []string {
198+
eips := getAllEip(*req.ProjectId, base.ConfigIns.Region, nil, nil)
199+
for idx, eip := range eips {
200+
eips[idx] = strings.SplitN(eip, "/", 2)[1]
201+
}
202+
return eips
203+
})
192204
return cmd
193205
}
194206

195207
//NewCmdGsshDelete ucloud gssh delete
196208
func NewCmdGsshDelete() *cobra.Command {
197-
var req = BizClient.NewDeleteGlobalSSHInstanceRequest()
209+
var req = base.BizClient.NewDeleteGlobalSSHInstanceRequest()
198210
var gsshIds *[]string
199211
var cmd = &cobra.Command{
200212
Use: "delete",
201213
Short: "Delete GlobalSSH instance",
202214
Long: "Delete GlobalSSH instance",
203215
Example: "ucloud gssh delete --gssh-id uga-xx1 --id uga-xx2",
204216
Run: func(cmd *cobra.Command, args []string) {
217+
req.ProjectId = sdk.String(base.PickResourceID(*req.ProjectId))
205218
for _, id := range *gsshIds {
206-
req.InstanceId = &id
207-
_, err := BizClient.DeleteGlobalSSHInstance(req)
219+
req.InstanceId = sdk.String(base.PickResourceID(id))
220+
_, err := base.BizClient.DeleteGlobalSSHInstance(req)
208221
if err != nil {
209-
HandleError(err)
222+
base.HandleError(err)
210223
} else {
211-
Cxt.Printf("gssh[%s] deleted\n", id)
224+
base.Cxt.Printf("gssh[%s] deleted\n", id)
212225
}
213226
}
214227
},
215228
}
216-
cmd.Flags().SortFlags = false
217-
gsshIds = cmd.Flags().StringArray("gssh-id", make([]string, 0), "Required. ID of the GlobalSSH instances you want to delete. Multiple values specified by multiple flags")
218-
req.ProjectId = cmd.Flags().String("project-id", ConfigIns.ProjectID, "Optional. Assign project-id")
219-
req.Region = cmd.Flags().String("region", ConfigIns.Region, "Optional. Assign region")
229+
flags := cmd.Flags()
230+
flags.SortFlags = false
231+
gsshIds = cmd.Flags().StringSlice("gssh-id", make([]string, 0), "Required. ID of the GlobalSSH instances you want to delete. Multiple values specified by multiple commas")
232+
bindProjectID(req, flags)
220233
cmd.MarkFlagRequired("gssh-id")
234+
cmd.Flags().SetFlagValuesFunc("gssh-id", func() []string {
235+
return getAllGsshIDNames(*req.ProjectId)
236+
})
221237
return cmd
222238
}
223239

224240
//NewCmdGsshModify ucloud gssh modify
225241
func NewCmdGsshModify() *cobra.Command {
226-
var gsshModifyPortReq = BizClient.NewModifyGlobalSSHPortRequest()
227-
var gsshModifyRemarkReq = BizClient.NewModifyGlobalSSHRemarkRequest()
228-
region := ConfigIns.Region
229-
project := ConfigIns.ProjectID
230-
var cmd = &cobra.Command{
242+
gsshModifyPortReq := base.BizClient.NewModifyGlobalSSHPortRequest()
243+
gsshModifyRemarkReq := base.BizClient.NewModifyGlobalSSHRemarkRequest()
244+
project := base.ConfigIns.ProjectID
245+
gsshIDs := []string{}
246+
cmd := &cobra.Command{
231247
Use: "update",
232248
Short: "Update GlobalSSH instance",
233249
Long: "Update GlobalSSH instance, including port and remark attribute",
234250
Example: "ucloud gssh update --gssh-id uga-xxx --port 22",
235251
Run: func(cmd *cobra.Command, args []string) {
236-
gsshModifyPortReq.Region = sdk.String(region)
237252
gsshModifyPortReq.ProjectId = sdk.String(project)
238-
gsshModifyRemarkReq.Region = sdk.String(region)
239253
gsshModifyRemarkReq.ProjectId = sdk.String(project)
240254
if *gsshModifyPortReq.Port == 0 && *gsshModifyRemarkReq.Remark == "" {
241-
Cxt.Println("port or remark required")
255+
base.Cxt.Println("Error, port or remark required")
242256
}
243257
if *gsshModifyPortReq.Port != 0 {
244258
port := *gsshModifyPortReq.Port
245259
if port <= 1 || port >= 65535 || port == 80 || port == 443 {
246-
Cxt.Println("The port number should be between 1 and 65535, and cannot be equal to 80 or 443")
260+
base.Cxt.Println("The port number should be between 1 and 65535, and cannot be equal to 80 or 443")
247261
return
248262
}
249-
gsshModifyPortReq.InstanceId = gsshModifyRemarkReq.InstanceId
250-
_, err := BizClient.ModifyGlobalSSHPort(gsshModifyPortReq)
251-
if err != nil {
252-
HandleError(err)
253-
} else {
254-
Cxt.Printf("gssh[%s] updated\n", *gsshModifyPortReq.InstanceId)
263+
for _, idname := range gsshIDs {
264+
gsshModifyPortReq.InstanceId = sdk.String(base.PickResourceID(idname))
265+
_, err := base.BizClient.ModifyGlobalSSHPort(gsshModifyPortReq)
266+
if err != nil {
267+
base.HandleError(err)
268+
} else {
269+
base.Cxt.Printf("gssh[%s]'s port updated\n", *gsshModifyPortReq.InstanceId)
270+
}
255271
}
256272
}
257273
if *gsshModifyRemarkReq.Remark != "" {
258-
_, err := BizClient.ModifyGlobalSSHRemark(gsshModifyRemarkReq)
259-
if err != nil {
260-
HandleError(err)
261-
} else {
262-
Cxt.Printf("gssh[%s] updated\n", *gsshModifyRemarkReq.InstanceId)
274+
for _, idname := range gsshIDs {
275+
gsshModifyRemarkReq.InstanceId = sdk.String(base.PickResourceID(idname))
276+
_, err := base.BizClient.ModifyGlobalSSHRemark(gsshModifyRemarkReq)
277+
if err != nil {
278+
base.HandleError(err)
279+
} else {
280+
base.Cxt.Printf("gssh[%s]'s remark updated\n", *gsshModifyRemarkReq.InstanceId)
281+
}
263282
}
264283
}
265284
},
266285
}
267-
cmd.Flags().SortFlags = false
268-
gsshModifyRemarkReq.InstanceId = cmd.Flags().String("gssh-id", "", "Required. InstanceID of your GlobalSSH")
269-
cmd.Flags().StringVar(&region, "region", ConfigIns.Region, "Optional. Assign region")
270-
cmd.Flags().StringVar(&project, "project-id", ConfigIns.ProjectID, "Optional. Assign project-id")
286+
flags := cmd.Flags()
287+
flags.SortFlags = false
288+
289+
flags.StringSliceVar(&gsshIDs, "gssh-id", nil, "Required. ResourceID of your GlobalSSH instances")
290+
bindProjectIDS(&project, flags)
271291
gsshModifyPortReq.Port = cmd.Flags().Int("port", 0, "Optional. Port of SSH service.")
272292
gsshModifyRemarkReq.Remark = cmd.Flags().String("remark", "", "Optional. Remark of your GlobalSSH.")
273293
cmd.MarkFlagRequired("gssh-id")
294+
cmd.Flags().SetFlagValuesFunc("gssh-id", func() []string {
295+
return getAllGsshIDNames(project)
296+
})
274297
return cmd
275298
}
299+
300+
func getAllGssh(project string) ([]pathx.GlobalSSHInfo, error) {
301+
req := base.BizClient.NewDescribeGlobalSSHInstanceRequest()
302+
req.ProjectId = &project
303+
resp, err := base.BizClient.DescribeGlobalSSHInstance(req)
304+
if err != nil {
305+
return nil, err
306+
}
307+
return resp.InstanceSet, nil
308+
}
309+
310+
func getAllGsshIDNames(project string) []string {
311+
gsshs, err := getAllGssh(project)
312+
if err != nil {
313+
return nil
314+
}
315+
list := []string{}
316+
for _, gssh := range gsshs {
317+
list = append(list, fmt.Sprintf("%s/%s", gssh.InstanceId, gssh.TargetIP))
318+
}
319+
return list
320+
}

0 commit comments

Comments
 (0)