Merge pull request #9312 from nicolai86/chore/upgrade-scaleway-api
provider/scaleway: SDK upgrade
This commit is contained in:
commit
276ff83b84
|
@ -14,6 +14,7 @@ import (
|
|||
type Config struct {
|
||||
Organization string
|
||||
APIKey string
|
||||
Region string
|
||||
}
|
||||
|
||||
// Client contains scaleway api clients
|
||||
|
@ -27,6 +28,7 @@ func (c *Config) Client() (*Client, error) {
|
|||
c.Organization,
|
||||
c.APIKey,
|
||||
scwversion.UserAgent(),
|
||||
c.Region,
|
||||
func(s *api.ScalewayAPI) {
|
||||
s.Logger = newTerraformLogger()
|
||||
},
|
||||
|
|
|
@ -1,9 +1,7 @@
|
|||
package scaleway
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"log"
|
||||
"net/http"
|
||||
"time"
|
||||
|
||||
"github.com/scaleway/scaleway-cli/pkg/api"
|
||||
|
@ -19,33 +17,6 @@ func String(val string) *string {
|
|||
return &val
|
||||
}
|
||||
|
||||
// DetachIP detaches an IP from a server
|
||||
func DetachIP(s *api.ScalewayAPI, ipID string) error {
|
||||
var update struct {
|
||||
Address string `json:"address"`
|
||||
ID string `json:"id"`
|
||||
Organization string `json:"organization"`
|
||||
}
|
||||
|
||||
ip, err := s.GetIP(ipID)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
update.Address = ip.IP.Address
|
||||
update.ID = ip.IP.ID
|
||||
update.Organization = ip.IP.Organization
|
||||
|
||||
resp, err := s.PutResponse(api.ComputeAPI, fmt.Sprintf("ips/%s", ipID), update)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
if resp.StatusCode != http.StatusOK {
|
||||
return err
|
||||
}
|
||||
resp.Body.Close()
|
||||
return nil
|
||||
}
|
||||
|
||||
// NOTE copied from github.com/scaleway/scaleway-cli/pkg/api/helpers.go
|
||||
// the helpers.go file pulls in quite a lot dependencies, and they're just convenience wrappers anyway
|
||||
|
||||
|
|
|
@ -21,6 +21,12 @@ func Provider() terraform.ResourceProvider {
|
|||
DefaultFunc: schema.EnvDefaultFunc("SCALEWAY_ORGANIZATION", nil),
|
||||
Description: "The Organization ID for Scaleway API operations.",
|
||||
},
|
||||
"region": &schema.Schema{
|
||||
Type: schema.TypeString,
|
||||
Optional: true,
|
||||
DefaultFunc: schema.EnvDefaultFunc("SCALEWAY_REGION", "par1"),
|
||||
Description: "The Scaleway API region to use.",
|
||||
},
|
||||
},
|
||||
|
||||
ResourcesMap: map[string]*schema.Resource{
|
||||
|
@ -40,6 +46,7 @@ func providerConfigure(d *schema.ResourceData) (interface{}, error) {
|
|||
config := Config{
|
||||
Organization: d.Get("organization").(string),
|
||||
APIKey: d.Get("access_key").(string),
|
||||
Region: d.Get("region").(string),
|
||||
}
|
||||
|
||||
return config.Client()
|
||||
|
|
|
@ -70,7 +70,7 @@ func resourceScalewayIPUpdate(d *schema.ResourceData, m interface{}) error {
|
|||
}
|
||||
} else {
|
||||
log.Printf("[DEBUG] Detaching IP %q\n", d.Id())
|
||||
return DetachIP(scaleway, d.Id())
|
||||
return scaleway.DetachIP(d.Id())
|
||||
}
|
||||
}
|
||||
|
||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -9,7 +9,7 @@ import (
|
|||
|
||||
func TestNewScalewayAPI(t *testing.T) {
|
||||
Convey("Testing NewScalewayAPI()", t, func() {
|
||||
api, err := NewScalewayAPI("my-organization", "my-token", scwversion.UserAgent())
|
||||
api, err := NewScalewayAPI("my-organization", "my-token", scwversion.UserAgent(), "")
|
||||
So(err, ShouldBeNil)
|
||||
So(api, ShouldNotBeNil)
|
||||
So(api.Token, ShouldEqual, "my-token")
|
||||
|
|
|
@ -64,7 +64,7 @@ type ScalewayCache struct {
|
|||
}
|
||||
|
||||
const (
|
||||
// IdentifierUnknown is used when we don't know explicitely the type key of the object (used for nil comparison)
|
||||
// IdentifierUnknown is used when we don't know explicitly the type key of the object (used for nil comparison)
|
||||
IdentifierUnknown = 1 << iota
|
||||
// IdentifierServer is the type key of cached server objects
|
||||
IdentifierServer
|
||||
|
@ -239,9 +239,7 @@ func (c *ScalewayCache) Save() error {
|
|||
return err
|
||||
}
|
||||
defer file.Close()
|
||||
encoder := json.NewEncoder(file)
|
||||
err = encoder.Encode(*c)
|
||||
if err != nil {
|
||||
if err := json.NewEncoder(file).Encode(c); err != nil {
|
||||
os.Remove(file.Name())
|
||||
return err
|
||||
}
|
||||
|
|
|
@ -0,0 +1,27 @@
|
|||
Copyright (c) 2009 The Go Authors. All rights reserved.
|
||||
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
modification, are permitted provided that the following conditions are
|
||||
met:
|
||||
|
||||
* Redistributions of source code must retain the above copyright
|
||||
notice, this list of conditions and the following disclaimer.
|
||||
* Redistributions in binary form must reproduce the above
|
||||
copyright notice, this list of conditions and the following disclaimer
|
||||
in the documentation and/or other materials provided with the
|
||||
distribution.
|
||||
* Neither the name of Google Inc. nor the names of its
|
||||
contributors may be used to endorse or promote products derived from
|
||||
this software without specific prior written permission.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
@ -0,0 +1,22 @@
|
|||
Additional IP Rights Grant (Patents)
|
||||
|
||||
"This implementation" means the copyrightable works distributed by
|
||||
Google as part of the Go project.
|
||||
|
||||
Google hereby grants to You a perpetual, worldwide, non-exclusive,
|
||||
no-charge, royalty-free, irrevocable (except as stated in this section)
|
||||
patent license to make, have made, use, offer to sell, sell, import,
|
||||
transfer and otherwise run, modify and propagate the contents of this
|
||||
implementation of Go, where such license applies only to those patent
|
||||
claims, both currently owned or controlled by Google and acquired in
|
||||
the future, licensable by Google that are necessarily infringed by this
|
||||
implementation of Go. This grant does not include claims that would be
|
||||
infringed only as a consequence of further modification of this
|
||||
implementation. If you or your agent or exclusive licensee institute or
|
||||
order or agree to the institution of patent litigation against any
|
||||
entity (including a cross-claim or counterclaim in a lawsuit) alleging
|
||||
that this implementation of Go or any code incorporated within this
|
||||
implementation of Go constitutes direct or contributory patent
|
||||
infringement, or inducement of patent infringement, then any patent
|
||||
rights granted to you under this License for this implementation of Go
|
||||
shall terminate as of the date such litigation is filed.
|
|
@ -0,0 +1,67 @@
|
|||
// Copyright 2016 The Go Authors. All rights reserved.
|
||||
// Use of this source code is governed by a BSD-style
|
||||
// license that can be found in the LICENSE file.
|
||||
|
||||
// Package errgroup provides synchronization, error propagation, and Context
|
||||
// cancelation for groups of goroutines working on subtasks of a common task.
|
||||
package errgroup
|
||||
|
||||
import (
|
||||
"sync"
|
||||
|
||||
"golang.org/x/net/context"
|
||||
)
|
||||
|
||||
// A Group is a collection of goroutines working on subtasks that are part of
|
||||
// the same overall task.
|
||||
//
|
||||
// A zero Group is valid and does not cancel on error.
|
||||
type Group struct {
|
||||
cancel func()
|
||||
|
||||
wg sync.WaitGroup
|
||||
|
||||
errOnce sync.Once
|
||||
err error
|
||||
}
|
||||
|
||||
// WithContext returns a new Group and an associated Context derived from ctx.
|
||||
//
|
||||
// The derived Context is canceled the first time a function passed to Go
|
||||
// returns a non-nil error or the first time Wait returns, whichever occurs
|
||||
// first.
|
||||
func WithContext(ctx context.Context) (*Group, context.Context) {
|
||||
ctx, cancel := context.WithCancel(ctx)
|
||||
return &Group{cancel: cancel}, ctx
|
||||
}
|
||||
|
||||
// Wait blocks until all function calls from the Go method have returned, then
|
||||
// returns the first non-nil error (if any) from them.
|
||||
func (g *Group) Wait() error {
|
||||
g.wg.Wait()
|
||||
if g.cancel != nil {
|
||||
g.cancel()
|
||||
}
|
||||
return g.err
|
||||
}
|
||||
|
||||
// Go calls the given function in a new goroutine.
|
||||
//
|
||||
// The first call to return a non-nil error cancels the group; its error will be
|
||||
// returned by Wait.
|
||||
func (g *Group) Go(f func() error) {
|
||||
g.wg.Add(1)
|
||||
|
||||
go func() {
|
||||
defer g.wg.Done()
|
||||
|
||||
if err := f(); err != nil {
|
||||
g.errOnce.Do(func() {
|
||||
g.err = err
|
||||
if g.cancel != nil {
|
||||
g.cancel()
|
||||
}
|
||||
})
|
||||
}
|
||||
}()
|
||||
}
|
|
@ -25,6 +25,7 @@ Here is an example that will setup the following:
|
|||
provider "scaleway" {
|
||||
access_key = ""
|
||||
organization = ""
|
||||
region = "par1"
|
||||
}
|
||||
|
||||
resource "scaleway_ip" "ip" {
|
||||
|
@ -81,10 +82,15 @@ credentials in your configuration file, you can leave them
|
|||
out:
|
||||
|
||||
```
|
||||
provider "scaleway" {}
|
||||
provider "scaleway" {
|
||||
organization = ""
|
||||
access_key = ""
|
||||
region = "par1"
|
||||
}
|
||||
```
|
||||
|
||||
...and instead set these environment variables:
|
||||
|
||||
- **SCALEWAY_ORGANIZATION**: Your Scaleway organization
|
||||
- **SCALEWAY_ACCESS_KEY**: Your API Access key
|
||||
- **SCALEWAY_REGION**: The Scaleway region
|
||||
|
|
Loading…
Reference in New Issue