@@ -226,7 +226,7 @@ func NewCmdEIPAllocate() *cobra.Command {
226226 Use : "allocate" ,
227227 Short : "Allocate EIP" ,
228228 Long : "Allocate EIP" ,
229- Example : "ucloud eip allocate --line BGP --bandwidth 2" ,
229+ Example : "ucloud eip allocate --line BGP --bandwidth-mb 2" ,
230230 Run : func (cmd * cobra.Command , args []string ) {
231231 if * req .OperatorName == "BGP" {
232232 * req .OperatorName = "Bgp"
@@ -258,7 +258,6 @@ func NewCmdEIPAllocate() *cobra.Command {
258258 req .Tag = cmd .Flags ().String ("group" , "Default" , "Optional. Group of your EIP." )
259259 req .Name = cmd .Flags ().String ("name" , "EIP" , "Optional. Name of your EIP." )
260260 req .Remark = cmd .Flags ().String ("remark" , "" , "Optional. Remark of your EIP." )
261- req .CouponId = cmd .Flags ().String ("coupon-id" , "" , "Optional. Coupon ID, The Coupon can deducte part of the payment" )
262261 count = cmd .Flags ().Int ("count" , 1 , "Optional. Count of EIP to allocate" )
263262
264263 cmd .Flags ().SetFlagValues ("line" , "BGP" , "International" )
@@ -287,13 +286,28 @@ func NewCmdEIPBind() *cobra.Command {
287286 resourceType = cmd .Flags ().String ("resource-type" , "uhost" , "Requried. ResourceType, type of resource to bind with eip. 'uhost','vrouter','ulb','upm','hadoophost'.eg.." )
288287 projectID = cmd .Flags ().String ("project-id" , base .ConfigIns .ProjectID , "Optional. Assign project-id" )
289288 region = cmd .Flags ().String ("region" , base .ConfigIns .Region , "Optional. Assign region" )
289+
290+ cmd .Flags ().SetFlagValues ("resource-type" , "uhost" , "vrouter" , "ulb" , "upm" , "hadoophost" , "fortresshost" , "udockhost" , "udhost" , "natgw" , "udb" , "vpngw" , "ucdr" , "dbaudit" )
291+ cmd .Flags ().SetFlagValuesFunc ("eip-id" , func () []string {
292+ return getAllEip (* projectID , * region , []string {status .EIP_FREE }, nil )
293+ })
294+
290295 cmd .MarkFlagRequired ("eip-id" )
291296 cmd .MarkFlagRequired ("resource-id" )
292- cmd . Flags (). SetFlagValues ( "resource-type" , "uhost" , "vrouter" , "ulb" , "upm" , "hadoophost" , "fortresshost" , "udockhost" , "udhost" , "natgw" , "udb" , "vpngw" , "ucdr" , "dbaudit" )
297+
293298 return cmd
294299}
295300
296301func bindEIP (resourceID , resourceType , eipID , projectID , region * string ) {
302+ ip := net .ParseIP (* resourceID )
303+ if ip != nil {
304+ eipID , err := getEIPIDbyIP (ip , * projectID , * region )
305+ if err != nil {
306+ base .HandleError (err )
307+ } else {
308+ * resourceID = eipID
309+ }
310+ }
297311 req := base .BizClient .NewBindEIPRequest ()
298312 req .ResourceId = resourceID
299313 req .ResourceType = resourceType
@@ -310,61 +324,80 @@ func bindEIP(resourceID, resourceType, eipID, projectID, region *string) {
310324
311325//NewCmdEIPUnbind ucloud eip unbind
312326func NewCmdEIPUnbind () * cobra.Command {
313-
314- var req = base .BizClient .NewUnBindEIPRequest ()
315- var cmd = & cobra.Command {
327+ eipIDs := [] string {}
328+ req : = base .BizClient .NewUnBindEIPRequest ()
329+ cmd : = & cobra.Command {
316330 Use : "unbind" ,
317331 Short : "Unbind EIP with uhost" ,
318332 Long : "Unbind EIP with uhost" ,
319- Example : "ucloud eip unbind --eip-id eip-xxx --resource-id uhost-xxx " ,
333+ Example : "ucloud eip unbind --eip-id eip-xxx" ,
320334 Run : func (cmd * cobra.Command , args []string ) {
321- req .ResourceType = sdk .String ("uhost" )
322- _ , err := base .BizClient .UnBindEIP (req )
323- if err != nil {
324- base .HandleError (err )
325- } else {
335+ req .ProjectId = sdk .String (base .PickResourceID (* req .ProjectId ))
336+ for _ , eip := range eipIDs {
337+ eipIns , err := getEIP (base .PickResourceID (eip ))
338+ if err != nil {
339+ base .HandleError (err )
340+ return
341+ }
342+ req .EIPId = sdk .String (base .PickResourceID (eip ))
343+ req .ResourceId = sdk .String (eipIns .Resource .ResourceId )
344+ req .ResourceType = sdk .String (eipIns .Resource .ResourceType )
345+ _ , err = base .BizClient .UnBindEIP (req )
346+ if err != nil {
347+ base .HandleError (err )
348+ return
349+ }
326350 base .Cxt .Printf ("unbind EIP[%s] with %s[%s]\n " , * req .EIPId , * req .ResourceType , * req .ResourceId )
327351 }
328352 },
329353 }
330- cmd .Flags ().SortFlags = false
331- req .EIPId = cmd .Flags ().String ("eip-id" , "" , "Required. EIPId to unbind" )
332- req .ResourceId = cmd .Flags ().String ("resource-id" , "" , "Required. ResourceID , which is the UHostId of uhost" )
333- req .ProjectId = cmd .Flags ().String ("project-id" , base .ConfigIns .ProjectID , "Optional. Assign project-id" )
334- req .Region = cmd .Flags ().String ("region" , base .ConfigIns .Region , "Optional. Assign region" )
354+ flags := cmd .Flags ()
355+ flags .SortFlags = false
356+
357+ flags .StringSliceVar (& eipIDs , "eip-id" , nil , "Required. Resource ID of eips to unbind with some resource" )
358+ bindRegion (req , flags )
359+ bindProjectID (req , flags )
360+
335361 cmd .MarkFlagRequired ("eip-id" )
336- cmd .MarkFlagRequired ("resource-id" )
362+ cmd .Flags ().SetFlagValuesFunc ("eip-id" , func () []string {
363+ return getAllEip (* req .ProjectId , * req .Region , []string {status .EIP_USED }, nil )
364+ })
337365
338366 return cmd
339367}
340368
341369//NewCmdEIPRelease ucloud eip release
342370func NewCmdEIPRelease () * cobra.Command {
343371 var ids []string
344- var req = base .BizClient .NewReleaseEIPRequest ()
345- var cmd = & cobra.Command {
372+ req : = base .BizClient .NewReleaseEIPRequest ()
373+ cmd : = & cobra.Command {
346374 Use : "release" ,
347375 Short : "Release EIP" ,
348376 Long : "Release EIP" ,
349377 Example : "ucloud eip release --eip-id eip-xx1,eip-xx2" ,
350378 Run : func (cmd * cobra.Command , args []string ) {
379+ req .ProjectId = sdk .String (base .PickResourceID (* req .ProjectId ))
351380 for _ , id := range ids {
352- req .EIPId = sdk .String (id )
381+ req .EIPId = sdk .String (base . PickResourceID ( id ) )
353382 _ , err := base .BizClient .ReleaseEIP (req )
354383 if err != nil {
355384 base .HandleError (err )
356385 } else {
357- base .Cxt .Printf ("released EIP[%v] \n " , * req .EIPId )
386+ base .Cxt .Printf ("eip[%s] released \n " , * req .EIPId )
358387 }
359388 }
360389 },
361390 }
362- cmd .Flags ().SortFlags = false
363- cmd .Flags ().StringSliceVarP (& ids , "eip-id" , "" , make ([]string , 0 ), "Required. EIPIds of the EIP you want to release" )
364- req .ProjectId = cmd .Flags ().String ("project-id" , base .ConfigIns .ProjectID , "Optional. Assign project-id" )
365- req .Region = cmd .Flags ().String ("region" , base .ConfigIns .Region , "Optional. Assign region" )
391+ flags := cmd .Flags ()
392+ flags .SortFlags = false
393+ flags .StringSliceVarP (& ids , "eip-id" , "" , nil , "Required. Resource ID of the EIPs you want to release" )
394+ bindProjectID (req , flags )
395+ bindRegion (req , flags )
366396 cmd .MarkFlagRequired ("eip-id" )
367- cmd .MarkFlagRequired ("bandwidth" )
397+ flags .SetFlagValuesFunc ("eip-id" , func () []string {
398+ return getAllEip (* req .ProjectId , * req .Region , []string {status .EIP_FREE }, nil )
399+ })
400+
368401 return cmd
369402}
370403
0 commit comments