cmd/scaleway: set page size to 100 when listing servers

According to Scaleway API documentation¹, most endpoints are paginated.
Use the maximum page size of 100 when listing servers. The default page
size was 50, which meant some servers weren't included in the response.

We currently have just over 50 servers, so this is sufficient for now,
but we'll need to do proper pagination when we need to handle over 100.
At that point, need to decide if it's better to implement it ad-hoc here
or start using an existing Scaleway API client. For now, add a TODO and
check that we haven't exceeded the page size, to avoid silent problems.

¹ https://developer.scaleway.com/#header-pagination

Updates golang/go#32229

Change-Id: I254671e464e88017eee2e49e382c686c52fd8fbd
Reviewed-on: https://go-review.googlesource.com/c/build/+/179182
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
diff --git a/cmd/scaleway/scaleway.go b/cmd/scaleway/scaleway.go
index cd74608..14cc5b9 100644
--- a/cmd/scaleway/scaleway.go
+++ b/cmd/scaleway/scaleway.go
@@ -18,6 +18,7 @@
 	"os"
 	"path/filepath"
 	"sort"
+	"strconv"
 	"strings"
 	"time"
 
@@ -254,7 +255,7 @@
 }
 
 func (c *Client) Servers() ([]*Server, error) {
-	req, _ := http.NewRequest("GET", scalewayAPIBase+"/servers", nil)
+	req, _ := http.NewRequest("GET", scalewayAPIBase+"/servers?per_page=100", nil)
 	req.Header.Set("X-Auth-Token", c.Token)
 	res, err := http.DefaultClient.Do(req)
 	if err != nil {
@@ -264,6 +265,10 @@
 	if res.StatusCode != http.StatusOK {
 		return nil, fmt.Errorf("failed to get Server list: %v", res.Status)
 	}
+	if n, _ := strconv.Atoi(res.Header.Get("X-Total-Count")); n > 100 {
+		// TODO: Get all pages, not just first one. See https://developer.scaleway.com/#header-pagination.
+		return nil, fmt.Errorf("results (%d) don't fit in one page (100) and pagination isn't implemented", n)
+	}
 	var jres struct {
 		Servers []*Server `json:"servers"`
 	}