Skip to content

Commit b96c675

Browse files
committed
Merge pull request #38 from QuentinPerez/ip
Add --scaleway-ip
2 parents 080131b + eb293fa commit b96c675

File tree

2 files changed

+52
-8
lines changed

2 files changed

+52
-8
lines changed

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -146,7 +146,7 @@ $ curl --silent http://212.47.248.251 | head -n1 # you can also open your browse
146146

147147
### master (unreleased)
148148

149-
* No entry
149+
* Add `--scaleway-ip` ([#37](https://github.com/scaleway/docker-machine-driver-scaleway/issues/37))
150150

151151
View full [commits list](https://github.com/scaleway/docker-machine-driver-scaleway/compare/v1.1.0...master)
152152

driver/scaleway.go

Lines changed: 51 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ import (
1515
"github.com/docker/machine/libmachine/mcnflag"
1616
"github.com/docker/machine/libmachine/ssh"
1717
"github.com/docker/machine/libmachine/state"
18+
"github.com/moul/anonuuid"
1819
"github.com/scaleway/scaleway-cli/pkg/api"
1920
"github.com/scaleway/scaleway-cli/pkg/config"
2021
)
@@ -38,6 +39,7 @@ type Driver struct {
3839
CommercialType string
3940
name string
4041
image string
42+
ip string
4143
stopping bool
4244
created bool
4345
// size string
@@ -85,6 +87,7 @@ func (d *Driver) SetConfigFromFlags(flags drivers.DriverOptions) (err error) {
8587
d.CommercialType = flags.String("scaleway-commercial-type")
8688
d.name = flags.String("scaleway-name")
8789
d.image = flags.String("scaleway-image")
90+
d.ip = flags.String("scaleway-ip")
8891
return
8992
}
9093

@@ -125,6 +128,12 @@ func (d *Driver) GetCreateFlags() []mcnflag.Flag {
125128
Usage: "Specifies the image",
126129
Value: defaultImage,
127130
},
131+
mcnflag.StringFlag{
132+
EnvVar: "SCALEWAY_IP",
133+
Name: "scaleway-ip",
134+
Usage: "Specifies the IP address",
135+
Value: "",
136+
},
128137
mcnflag.BoolFlag{
129138
EnvVar: "SCALEWAY_DEBUG",
130139
Name: "scaleway-debug",
@@ -147,7 +156,6 @@ func (d *Driver) GetCreateFlags() []mcnflag.Flag {
147156
func (d *Driver) Create() (err error) {
148157
var publicKey []byte
149158
var cl *api.ScalewayAPI
150-
var ip *api.ScalewayGetIP
151159

152160
log.Infof("Creating SSH key...")
153161
if err = ssh.GenerateSSHKey(d.GetSSHKeyPath()); err != nil {
@@ -162,18 +170,54 @@ func (d *Driver) Create() (err error) {
162170
if err != nil {
163171
return
164172
}
165-
ip, err = cl.NewIP()
166-
if err != nil {
167-
return
173+
if d.ip != "" {
174+
var ips *api.ScalewayGetIPS
175+
176+
ips, err = cl.GetIPS()
177+
if err != nil {
178+
return
179+
}
180+
if anonuuid.IsUUID(d.ip) == nil {
181+
d.IPID = d.ip
182+
for _, ip := range ips.IPS {
183+
if ip.ID == d.ip {
184+
d.IPAddress = ip.Address
185+
break
186+
}
187+
}
188+
if d.IPAddress == "" {
189+
err = fmt.Errorf("IP UUID %v not found", d.IPID)
190+
return
191+
}
192+
} else {
193+
d.IPAddress = d.ip
194+
for _, ip := range ips.IPS {
195+
if ip.Address == d.ip {
196+
d.IPID = ip.ID
197+
break
198+
}
199+
}
200+
if d.IPID == "" {
201+
err = fmt.Errorf("IP address %v not found", d.ip)
202+
return
203+
}
204+
}
205+
} else {
206+
var ip *api.ScalewayGetIP
207+
208+
ip, err = cl.NewIP()
209+
if err != nil {
210+
return
211+
}
212+
d.IPAddress = ip.IP.Address
213+
d.IPID = ip.IP.ID
168214
}
169-
d.IPAddress = ip.IP.Address
170-
d.IPID = ip.IP.ID
171215
d.ServerID, err = api.CreateServer(cl, &api.ConfigCreateServer{
172216
ImageName: d.image,
173217
CommercialType: d.CommercialType,
174218
Name: d.name,
175219
Bootscript: defaultBootscript,
176-
IP: ip.IP.ID,
220+
IP: d.IPID,
177221
Env: strings.Join([]string{"AUTHORIZED_KEY",
178222
strings.Replace(string(publicKey[:len(publicKey)-1]), " ", "_", -1)}, "="),
179223
})

0 commit comments

Comments
 (0)