Skip to content

Commit b8a01c4

Browse files
committed
Initial support for deploying from customer image.
1 parent 50ee33d commit b8a01c4

6 files changed

Lines changed: 46 additions & 22 deletions

File tree

CHANGES.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,11 @@
11
# Changes
22

3+
## v0.9.4
4+
5+
Enhancements:
6+
7+
* Support for using either OS or customer images.
8+
39
## v0.9.3
410

511
Enhancements:

Makefile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
VERSION = 0.9.3
1+
VERSION = 0.9.4
22

33
default: fmt build test
44

README.md

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -40,8 +40,7 @@ Environment: `MCP_REGION`.
4040
* `ddcloud-networkdomain` - The name of the target CloudControl network domain.
4141
* `ddcloud-datacenter` - The name of the CloudControl datacenter (e.g. NA1, AU9) in which the network domain is located.
4242
* `ddcloud-vlan` - The name of the target CloudControl VLAN.
43-
* `ddcloud-image-name` - The name of the OS image used to create the target machine.
44-
Note that only OS images are supported for now, not customer images.
43+
* `ddcloud-image-name` - The name of the image used to create the target machine.
4544
Additionally, the OS must be a Linux distribution supported by docker-machine (Ubuntu 12.04 and above are supported, but RedHat 6 and 7 are not supported due to iptables configuration issues).
4645
* `ddcloud-ssh-user` - The SSH username to use.
4746
Default: "root".

client.go

Lines changed: 36 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -188,49 +188,68 @@ func (driver *Driver) resolveVLAN() error {
188188
return nil
189189
}
190190

191-
// Retrieve the target OS image.
192-
func (driver *Driver) getOSImage() (*compute.OSImage, error) {
191+
// Retrieve the target image.
192+
func (driver *Driver) getImage() (image compute.Image, err error) {
193193
if driver.ImageID == "" {
194194
return nil, errors.New("Image Id has not been resolved")
195195
}
196196

197-
client, err := driver.getCloudControlClient()
197+
var client *compute.Client
198+
client, err = driver.getCloudControlClient()
198199
if err != nil {
199200
return nil, err
200201
}
201202

202-
return client.GetOSImage(driver.ImageID)
203+
image, err = client.GetOSImage(driver.ImageID)
204+
if err != nil {
205+
return
206+
}
207+
if image == nil {
208+
image, err = client.GetCustomerImage(driver.ImageID)
209+
if err != nil {
210+
return
211+
}
212+
}
213+
214+
return
203215
}
204216

205-
// Resolve (find) the target OS image.
206-
func (driver *Driver) resolveOSImage() error {
217+
// Resolve (find) the target image.
218+
func (driver *Driver) resolveImage() error {
207219
driver.ImageID = ""
208220

209221
client, err := driver.getCloudControlClient()
210222
if err != nil {
211223
return err
212224
}
213225

214-
image, err := client.FindOSImage(driver.ImageName, driver.DataCenterID)
226+
var image compute.Image
227+
image, err = client.FindOSImage(driver.ImageName, driver.DataCenterID)
215228
if err != nil {
216229
return err
217230
}
218231
if image == nil {
219-
log.Errorf("OS image '%s' was not found in data centre '%s'.", driver.ImageName, driver.DataCenterID)
232+
image, err = client.FindCustomerImage(driver.ImageName, driver.DataCenterID)
233+
if err != nil {
234+
return err
235+
}
236+
}
237+
if image == nil {
238+
log.Errorf("Image '%s' was not found in data centre '%s'.", driver.ImageName, driver.DataCenterID)
220239

221-
return fmt.Errorf("OS image '%s' was not found in data centre '%s'", driver.ImageName, driver.DataCenterID)
240+
return fmt.Errorf("Image '%s' was not found in data centre '%s'", driver.ImageName, driver.DataCenterID)
222241
}
223242

224-
if image.OperatingSystem.Family != "UNIX" {
225-
return fmt.Errorf("OS image '%s' in data centre '%s' is not from a supported OS family (expected 'UNIX', but found '%s')",
243+
if image.GetOS().Family != "UNIX" {
244+
return fmt.Errorf("Image '%s' in data centre '%s' is not from a supported OS family (expected 'UNIX', but found '%s')",
226245
driver.ImageName,
227246
driver.DataCenterID,
228-
image.OperatingSystem.Family,
247+
image.GetOS().Family,
229248
)
230249
}
231250

232-
driver.ImageID = image.ID
233-
driver.ImageOSType = image.OperatingSystem.ID
251+
driver.ImageID = image.GetID()
252+
driver.ImageOSType = image.GetOS().ID
234253

235254
return nil
236255
}
@@ -273,8 +292,8 @@ func (driver *Driver) deployServer() (*compute.Server, error) {
273292

274293
// Build a deployment configuration for the target server.
275294
func (driver *Driver) buildDeploymentConfiguration() (deploymentConfiguration compute.ServerDeploymentConfiguration, err error) {
276-
var image *compute.OSImage
277-
image, err = driver.getOSImage()
295+
var image compute.Image
296+
image, err = driver.getImage()
278297
if err != nil {
279298
return
280299
}
@@ -312,7 +331,7 @@ func (driver *Driver) buildDeploymentConfiguration() (deploymentConfiguration co
312331

313332
Start: true,
314333
}
315-
deploymentConfiguration.ApplyOSImage(image)
334+
image.ApplyTo(&deploymentConfiguration)
316335

317336
return
318337
}

driver.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -153,7 +153,7 @@ func (driver *Driver) GetCreateFlags() []mcnflag.Flag {
153153
},
154154
mcnflag.StringFlag{
155155
Name: "ddcloud-image-name",
156-
Usage: fmt.Sprintf(`The name of OS image used to create the target machine. Default: "%s"`, DefaultImageName),
156+
Usage: fmt.Sprintf(`The name of the image used to create the target machine. Default: "%s"`, DefaultImageName),
157157
Value: DefaultImageName,
158158
},
159159
mcnflag.StringFlag{

0 commit comments

Comments
 (0)