@@ -5,11 +5,25 @@ import (
55 "sort"
66 "strings"
77
8+ "github.com/fatih/color"
89 "github.com/scaleway/scaleway-cli/internal/core"
10+ "github.com/scaleway/scaleway-cli/internal/human"
911 "github.com/scaleway/scaleway-sdk-go/api/instance/v1"
1012 "github.com/scaleway/scaleway-sdk-go/scw"
1113)
1214
15+ //
16+ // Marshalers
17+ //
18+
19+ var (
20+ serverTypesAvailabilityMarshalSpecs = human.EnumMarshalSpecs {
21+ instance .ServerTypesAvailabilityAvailable : & human.EnumMarshalSpec {Attribute : color .FgGreen },
22+ instance .ServerTypesAvailabilityScarce : & human.EnumMarshalSpec {Attribute : color .FgYellow , Value : "low stock" },
23+ instance .ServerTypesAvailabilityShortage : & human.EnumMarshalSpec {Attribute : color .FgRed , Value : "out of stock" },
24+ }
25+ )
26+
1327//
1428// Builders
1529//
@@ -33,30 +47,36 @@ func serverTypeListBuilder(c *core.Command) *core.Command {
3347 "X64-60GB" : {},
3448 }
3549
36- originalRun := c .Run
37-
3850 c .Run = func (ctx context.Context , argsI interface {}) (interface {}, error ) {
3951 type customServerType struct {
40- Name string `json:"name"`
41- MonthlyPrice * scw.Money `json:"monthly_price"`
42- HourlyPrice * scw.Money `json:"hourly_price"`
43- LocalVolumeSize scw.Size `json:"local_volume_size"`
44- CPU uint32 `json:"cpu"`
45- GPU * uint64 `json:"gpu"`
46- RAM scw.Size `json:"ram"`
47- Arch instance.Arch `json:"arch"`
52+ Name string `json:"name"`
53+ MonthlyPrice * scw.Money `json:"monthly_price"`
54+ HourlyPrice * scw.Money `json:"hourly_price"`
55+ LocalVolumeSize scw.Size `json:"local_volume_size"`
56+ CPU uint32 `json:"cpu"`
57+ GPU * uint64 `json:"gpu"`
58+ RAM scw.Size `json:"ram"`
59+ Arch instance.Arch `json:"arch"`
60+ Availability instance.ServerTypesAvailability `json:"availability"`
4861 }
4962
50- originalRes , err := originalRun (ctx , argsI )
63+ api := instance .NewAPI (core .ExtractClient (ctx ))
64+
65+ // Get server types.
66+ request := argsI .(* instance.ListServersTypesRequest )
67+ listServersTypesResponse , err := api .ListServersTypes (request )
5168 if err != nil {
5269 return nil , err
5370 }
54-
55- listServersTypesResponse := originalRes .(* instance.ListServersTypesResponse )
5671 serverTypes := []* customServerType (nil )
5772
58- for name , serverType := range listServersTypesResponse .Servers {
73+ // Get server availabilities.
74+ availabilitiesResponse , err := api .GetServerTypesAvailability (& instance.GetServerTypesAvailabilityRequest {})
75+ if err != nil {
76+ return nil , err
77+ }
5978
79+ for name , serverType := range listServersTypesResponse .Servers {
6080 _ , isDeprecated := deprecatedNames [name ]
6181 if isDeprecated {
6282 continue
@@ -71,6 +91,7 @@ func serverTypeListBuilder(c *core.Command) *core.Command {
7191 GPU : serverType .Gpu ,
7292 RAM : scw .Size (serverType .RAM ),
7393 Arch : serverType .Arch ,
94+ Availability : availabilitiesResponse .Servers [name ].Availability ,
7495 })
7596 }
7697
0 commit comments