Skip to content

Commit c476fcc

Browse files
author
Quentin Perez
committed
region: add ams1
1 parent 8eebd52 commit c476fcc

File tree

4 files changed

+56
-22
lines changed

4 files changed

+56
-22
lines changed

README.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -182,7 +182,7 @@ Options:
182182
-q, --quiet=false Enable quiet mode
183183
--sensitive=false Show sensitive data in outputs, i.e. API Token/Organization
184184
-v, --version=false Print version information and quit
185-
--region=par1 Change the default region
185+
--region=par1 Change the default region (e.g. ams1)
186186

187187
Commands:
188188
help help of the scw command line
@@ -1203,6 +1203,7 @@ $ scw inspect myserver | jq '.[0].public_ip.address'
12031203

12041204
### master (unreleased)
12051205

1206+
* Region: add `ams1`, you can start a server at Amsterdam with `scw --region="ams1" run yakkety`
12061207
* API: Support multi-zone
12071208
* API: Add ZoneID field in server location
12081209
* `scw image -a -f type=volume` fix unmarshal error on size field

pkg/api/api.go

Lines changed: 52 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -35,8 +35,11 @@ var (
3535
AccountAPI = "https://account.scaleway.com/"
3636
MetadataAPI = "http://169.254.42.42/"
3737
MarketplaceAPI = "https://api-marketplace.scaleway.com"
38-
URLPublicDNS = ".pub.cloud.scaleway.com"
39-
URLPrivateDNS = ".priv.cloud.scaleway.com"
38+
ComputeAPIPar1 = "https://api.scaleway.com/"
39+
ComputeAPIAms1 = "https://cp-ams1.scaleway.com"
40+
41+
URLPublicDNS = ".pub.cloud.scaleway.com"
42+
URLPrivateDNS = ".priv.cloud.scaleway.com"
4043
)
4144

4245
func init() {
@@ -887,7 +890,9 @@ func NewScalewayAPI(organization, token, userAgent, region string, options ...fu
887890
}
888891
switch region {
889892
case "par1", "":
890-
s.computeAPI = "https://api.scaleway.com/"
893+
s.computeAPI = ComputeAPIPar1
894+
case "ams1":
895+
s.computeAPI = ComputeAPIAms1
891896
default:
892897
return nil, fmt.Errorf("%s isn't a valid region", region)
893898
}
@@ -1101,6 +1106,30 @@ func (s *ScalewayAPI) handleHTTPError(goodStatusCode []int, resp *http.Response)
11011106
return body, nil
11021107
}
11031108

1109+
func (s *ScalewayAPI) fetchServers(api string, query url.Values, out chan<- ScalewayServers) func() error {
1110+
return func() error {
1111+
resp, err := s.GetResponsePaginate(api, "servers", query)
1112+
if resp != nil {
1113+
defer resp.Body.Close()
1114+
}
1115+
if err != nil {
1116+
return err
1117+
}
1118+
1119+
body, err := s.handleHTTPError([]int{http.StatusOK}, resp)
1120+
if err != nil {
1121+
return err
1122+
}
1123+
var servers ScalewayServers
1124+
1125+
if err = json.Unmarshal(body, &servers); err != nil {
1126+
return err
1127+
}
1128+
out <- servers
1129+
return nil
1130+
}
1131+
}
1132+
11041133
// GetServers gets the list of servers from the ScalewayAPI
11051134
func (s *ScalewayAPI) GetServers(all bool, limit int) (*[]ScalewayServer, error) {
11061135
query := url.Values{}
@@ -1115,32 +1144,34 @@ func (s *ScalewayAPI) GetServers(all bool, limit int) (*[]ScalewayServer, error)
11151144
if all && limit == 0 {
11161145
s.Cache.ClearServers()
11171146
}
1118-
resp, err := s.GetResponsePaginate(s.computeAPI, "servers", query)
1119-
if resp != nil {
1120-
defer resp.Body.Close()
1121-
}
1122-
if err != nil {
1123-
return nil, err
1147+
var (
1148+
g errgroup.Group
1149+
apis = []string{
1150+
ComputeAPIPar1,
1151+
ComputeAPIAms1,
1152+
}
1153+
)
1154+
1155+
serverChan := make(chan ScalewayServers, 2)
1156+
for _, api := range apis {
1157+
g.Go(s.fetchServers(api, query, serverChan))
11241158
}
11251159

1126-
body, err := s.handleHTTPError([]int{http.StatusOK}, resp)
1127-
if err != nil {
1160+
if err := g.Wait(); err != nil {
11281161
return nil, err
11291162
}
1163+
close(serverChan)
11301164
var servers ScalewayServers
1131-
if err = json.Unmarshal(body, &servers); err != nil {
1132-
return nil, err
1165+
1166+
for server := range serverChan {
1167+
servers.Servers = append(servers.Servers, server.Servers...)
11331168
}
1169+
11341170
for i, server := range servers.Servers {
1135-
// FIXME arch, owner, title
11361171
servers.Servers[i].DNSPublic = server.Identifier + URLPublicDNS
11371172
servers.Servers[i].DNSPrivate = server.Identifier + URLPrivateDNS
11381173
s.Cache.InsertServer(server.Identifier, server.Location.ZoneID, server.Arch, server.Organization, server.Name)
11391174
}
1140-
// FIXME: when API limit is ready, remove the following code
1141-
if limit > 0 && limit < len(servers.Servers) {
1142-
servers.Servers = servers.Servers[0:limit]
1143-
}
11441175
return &servers.Servers, nil
11451176
}
11461177

@@ -2177,7 +2208,7 @@ func (s *ScalewayAPI) GetImageID(needle, arch string) (*ScalewayImageIdentifier,
21772208
}, nil
21782209
}
21792210
if len(images) == 0 {
2180-
return nil, fmt.Errorf("No such image: %s", needle)
2211+
return nil, fmt.Errorf("No such image (zone %s, arch %s) : %s", s.Region, arch, needle)
21812212
}
21822213
return nil, showResolverResults(needle, images)
21832214
}
@@ -2841,6 +2872,8 @@ func (s *ScalewayAPI) ResolveTTYUrl() string {
28412872
switch s.Region {
28422873
case "par1", "":
28432874
return "https://tty.scaleway.com/v2/"
2875+
case "ams1":
2876+
return "https://tty-ams1.scaleway.com"
28442877
}
28452878
return ""
28462879
}

pkg/cli/cmd_help.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ Options:
4343
-q, --quiet=false Enable quiet mode
4444
--sensitive=false Show sensitive data in outputs, i.e. API Token/Organization
4545
-v, --version=false Print version information and quit
46-
--region=par1 Change the default region
46+
--region=par1 Change the default region (e.g. ams1)
4747
4848
Commands:
4949
{{range .}}{{if not .Hidden}} {{.Name | printf "%-9s"}} {{.Description}}

pkg/cli/main.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ var (
3232
flVersion = flag.Bool([]string{"v", "-version"}, false, "Print version information and quit")
3333
flQuiet = flag.Bool([]string{"q", "-quiet"}, false, "Enable quiet mode")
3434
flSensitive = flag.Bool([]string{"-sensitive"}, false, "Show sensitive data in outputs, i.e. API Token/Organization")
35-
flRegion = flag.String([]string{"-region"}, "par1", "Change the default region")
35+
flRegion = flag.String([]string{"-region"}, "par1", "Change the default region (e.g. ams1)")
3636
)
3737

3838
// Start is the entrypoint

0 commit comments

Comments
 (0)