The new flow: 1) Provision the instance 2) Tear down the instance, but keep the boot disk 3) Create an image from the disk 4) Tear down the disk The step to update gcloud is no longer needed, since gceimagebundle isn't used anymore. Fixes #1507 and addresses https://github.com/mitchellh/packer/issues/1447#issuecomment-61610235.
130 lines
2.6 KiB
Go
130 lines
2.6 KiB
Go
package googlecompute
|
|
|
|
// DriverMock is a Driver implementation that is a mocked out so that
|
|
// it can be used for tests.
|
|
type DriverMock struct {
|
|
CreateImageName string
|
|
CreateImageDesc string
|
|
CreateImageZone string
|
|
CreateImageDisk string
|
|
CreateImageErrCh <-chan error
|
|
|
|
DeleteImageName string
|
|
DeleteImageErrCh <-chan error
|
|
|
|
DeleteInstanceZone string
|
|
DeleteInstanceName string
|
|
DeleteInstanceErrCh <-chan error
|
|
DeleteInstanceErr error
|
|
|
|
DeleteDiskZone string
|
|
DeleteDiskName string
|
|
DeleteDiskErrCh <-chan error
|
|
DeleteDiskErr error
|
|
|
|
GetNatIPZone string
|
|
GetNatIPName string
|
|
GetNatIPResult string
|
|
GetNatIPErr error
|
|
|
|
RunInstanceConfig *InstanceConfig
|
|
RunInstanceErrCh <-chan error
|
|
RunInstanceErr error
|
|
|
|
WaitForInstanceState string
|
|
WaitForInstanceZone string
|
|
WaitForInstanceName string
|
|
WaitForInstanceErrCh <-chan error
|
|
}
|
|
|
|
func (d *DriverMock) CreateImage(name, description, zone, disk string) <-chan error {
|
|
d.CreateImageName = name
|
|
d.CreateImageDesc = description
|
|
d.CreateImageZone = zone
|
|
d.CreateImageDisk = disk
|
|
|
|
resultCh := d.CreateImageErrCh
|
|
if resultCh == nil {
|
|
ch := make(chan error)
|
|
close(ch)
|
|
resultCh = ch
|
|
}
|
|
|
|
return resultCh
|
|
}
|
|
|
|
func (d *DriverMock) DeleteImage(name string) <-chan error {
|
|
d.DeleteImageName = name
|
|
|
|
resultCh := d.DeleteImageErrCh
|
|
if resultCh == nil {
|
|
ch := make(chan error)
|
|
close(ch)
|
|
resultCh = ch
|
|
}
|
|
|
|
return resultCh
|
|
}
|
|
|
|
func (d *DriverMock) DeleteInstance(zone, name string) (<-chan error, error) {
|
|
d.DeleteInstanceZone = zone
|
|
d.DeleteInstanceName = name
|
|
|
|
resultCh := d.DeleteInstanceErrCh
|
|
if resultCh == nil {
|
|
ch := make(chan error)
|
|
close(ch)
|
|
resultCh = ch
|
|
}
|
|
|
|
return resultCh, d.DeleteInstanceErr
|
|
}
|
|
|
|
func (d *DriverMock) DeleteDisk(zone, name string) (<-chan error, error) {
|
|
d.DeleteDiskZone = zone
|
|
d.DeleteDiskName = name
|
|
|
|
resultCh := d.DeleteDiskErrCh
|
|
if resultCh == nil {
|
|
ch := make(chan error)
|
|
close(ch)
|
|
resultCh = ch
|
|
}
|
|
|
|
return resultCh, d.DeleteDiskErr
|
|
}
|
|
|
|
func (d *DriverMock) GetNatIP(zone, name string) (string, error) {
|
|
d.GetNatIPZone = zone
|
|
d.GetNatIPName = name
|
|
return d.GetNatIPResult, d.GetNatIPErr
|
|
}
|
|
|
|
func (d *DriverMock) RunInstance(c *InstanceConfig) (<-chan error, error) {
|
|
d.RunInstanceConfig = c
|
|
|
|
resultCh := d.RunInstanceErrCh
|
|
if resultCh == nil {
|
|
ch := make(chan error)
|
|
close(ch)
|
|
resultCh = ch
|
|
}
|
|
|
|
return resultCh, d.RunInstanceErr
|
|
}
|
|
|
|
func (d *DriverMock) WaitForInstance(state, zone, name string) <-chan error {
|
|
d.WaitForInstanceState = state
|
|
d.WaitForInstanceZone = zone
|
|
d.WaitForInstanceName = name
|
|
|
|
resultCh := d.WaitForInstanceErrCh
|
|
if resultCh == nil {
|
|
ch := make(chan error)
|
|
close(ch)
|
|
resultCh = ch
|
|
}
|
|
|
|
return resultCh
|
|
}
|