@@ -41,6 +41,7 @@ type Driver struct {
4141 image string
4242 ip string
4343 volumes string
44+ IPPersistant bool
4445 stopping bool
4546 created bool
4647 // userDataFile string
@@ -159,27 +160,11 @@ func (d *Driver) GetCreateFlags() []mcnflag.Flag {
159160 }
160161}
161162
162- // Create configures and starts a scaleway server
163- func (d * Driver ) Create () (err error ) {
164- var publicKey []byte
165- var cl * api.ScalewayAPI
166-
167- log .Infof ("Creating SSH key..." )
168- if err = ssh .GenerateSSHKey (d .GetSSHKeyPath ()); err != nil {
169- return err
170- }
171- publicKey , err = ioutil .ReadFile (d .GetSSHKeyPath () + ".pub" )
172- if err != nil {
173- return
174- }
175- log .Infof ("Creating server..." )
176- cl , err = d .getClient ()
177- if err != nil {
178- return
179- }
163+ func (d * Driver ) resolveIP (cl * api.ScalewayAPI ) (err error ) {
180164 if d .ip != "" {
181165 var ips * api.ScalewayGetIPS
182166
167+ d .IPPersistant = true
183168 ips , err = cl .GetIPS ()
184169 if err != nil {
185170 return
@@ -219,6 +204,30 @@ func (d *Driver) Create() (err error) {
219204 d .IPAddress = ip .IP .Address
220205 d .IPID = ip .IP .ID
221206 }
207+ return
208+ }
209+
210+ // Create configures and starts a scaleway server
211+ func (d * Driver ) Create () (err error ) {
212+ var publicKey []byte
213+ var cl * api.ScalewayAPI
214+
215+ log .Infof ("Creating SSH key..." )
216+ if err = ssh .GenerateSSHKey (d .GetSSHKeyPath ()); err != nil {
217+ return err
218+ }
219+ publicKey , err = ioutil .ReadFile (d .GetSSHKeyPath () + ".pub" )
220+ if err != nil {
221+ return
222+ }
223+ log .Infof ("Creating server..." )
224+ cl , err = d .getClient ()
225+ if err != nil {
226+ return
227+ }
228+ if err = d .resolveIP (cl ); err != nil {
229+ return
230+ }
222231 d .ServerID , err = api .CreateServer (cl , & api.ConfigCreateServer {
223232 ImageName : d .image ,
224233 CommercialType : d .CommercialType ,
@@ -320,7 +329,9 @@ func (d *Driver) Remove() (err error) {
320329 break
321330 }
322331 }
323- err = cl .DeleteIP (d .IPID )
332+ if ! d .IPPersistant {
333+ err = cl .DeleteIP (d .IPID )
334+ }
324335 return
325336}
326337
0 commit comments