Replaced compute/v2/images with imageservice/v2/images.

Removed usage of a deprecated API.
Standardized clientService naming.
This commit is contained in:
Kevin Bulebush 2018-11-25 14:30:31 -05:00
parent e539133d8c
commit 76d1bf567e
3 changed files with 21 additions and 8 deletions

View File

@ -5,7 +5,7 @@ import (
"log" "log"
"github.com/gophercloud/gophercloud" "github.com/gophercloud/gophercloud"
"github.com/gophercloud/gophercloud/openstack/compute/v2/images" "github.com/gophercloud/gophercloud/openstack/imageservice/v2/images"
) )
// Artifact is an artifact implementation that contains built images. // Artifact is an artifact implementation that contains built images.

View File

@ -71,6 +71,11 @@ func (b *Builder) Run(ui packer.Ui, hook packer.Hook, cache packer.Cache) (packe
return nil, fmt.Errorf("Error initializing compute client: %s", err) return nil, fmt.Errorf("Error initializing compute client: %s", err)
} }
imageClient, err := b.config.imageV2Client()
if err != nil {
return nil, fmt.Errorf("Error initializing image client: %s", err)
}
// Setup the state bag and initial state for the steps // Setup the state bag and initial state for the steps
state := new(multistep.BasicStateBag) state := new(multistep.BasicStateBag)
state.Put("config", &b.config) state.Put("config", &b.config)
@ -164,7 +169,7 @@ func (b *Builder) Run(ui packer.Ui, hook packer.Hook, cache packer.Cache) (packe
artifact := &Artifact{ artifact := &Artifact{
ImageId: state.Get("image").(string), ImageId: state.Get("image").(string),
BuilderIdValue: BuilderId, BuilderIdValue: BuilderId,
Client: computeClient, Client: imageClient,
} }
return artifact, nil return artifact, nil

View File

@ -9,8 +9,8 @@ import (
"github.com/gophercloud/gophercloud/openstack/blockstorage/extensions/volumeactions" "github.com/gophercloud/gophercloud/openstack/blockstorage/extensions/volumeactions"
"github.com/gophercloud/gophercloud" "github.com/gophercloud/gophercloud"
"github.com/gophercloud/gophercloud/openstack/compute/v2/images"
"github.com/gophercloud/gophercloud/openstack/compute/v2/servers" "github.com/gophercloud/gophercloud/openstack/compute/v2/servers"
"github.com/gophercloud/gophercloud/openstack/imageservice/v2/images"
"github.com/hashicorp/packer/helper/multistep" "github.com/hashicorp/packer/helper/multistep"
"github.com/hashicorp/packer/packer" "github.com/hashicorp/packer/packer"
) )
@ -25,13 +25,21 @@ func (s *stepCreateImage) Run(_ context.Context, state multistep.StateBag) multi
ui := state.Get("ui").(packer.Ui) ui := state.Get("ui").(packer.Ui)
// We need the v2 compute client // We need the v2 compute client
client, err := config.computeV2Client() computeClient, err := config.computeV2Client()
if err != nil { if err != nil {
err = fmt.Errorf("Error initializing compute client: %s", err) err = fmt.Errorf("Error initializing compute client: %s", err)
state.Put("error", err) state.Put("error", err)
return multistep.ActionHalt return multistep.ActionHalt
} }
// We need the v2 image client
imageClient, err := config.imageV2Client()
if err != nil {
err = fmt.Errorf("Error initializing image service client: %s", err)
state.Put("error", err)
return multistep.ActionHalt
}
// Create the image. // Create the image.
// Image source depends on the type of the Compute instance. It can be // Image source depends on the type of the Compute instance. It can be
// Block Storage service volume or regular Compute service local volume. // Block Storage service volume or regular Compute service local volume.
@ -58,7 +66,7 @@ func (s *stepCreateImage) Run(_ context.Context, state multistep.StateBag) multi
} }
imageId = image.ImageID imageId = image.ImageID
} else { } else {
imageId, err = servers.CreateImage(client, server.ID, servers.CreateImageOpts{ imageId, err = servers.CreateImage(computeClient, server.ID, servers.CreateImageOpts{
Name: config.ImageName, Name: config.ImageName,
Metadata: config.ImageMetadata, Metadata: config.ImageMetadata,
}).ExtractImageID() }).ExtractImageID()
@ -76,7 +84,7 @@ func (s *stepCreateImage) Run(_ context.Context, state multistep.StateBag) multi
// Wait for the image to become ready // Wait for the image to become ready
ui.Say(fmt.Sprintf("Waiting for image %s (image id: %s) to become ready...", config.ImageName, imageId)) ui.Say(fmt.Sprintf("Waiting for image %s (image id: %s) to become ready...", config.ImageName, imageId))
if err := WaitForImage(client, imageId); err != nil { if err := WaitForImage(imageClient, imageId); err != nil {
err := fmt.Errorf("Error waiting for image: %s", err) err := fmt.Errorf("Error waiting for image: %s", err)
state.Put("error", err) state.Put("error", err)
ui.Error(err.Error()) ui.Error(err.Error())
@ -113,11 +121,11 @@ func WaitForImage(client *gophercloud.ServiceClient, imageId string) error {
return err return err
} }
if image.Status == "ACTIVE" { if image.Status == "active" {
return nil return nil
} }
log.Printf("Waiting for image creation status: %s (%d%%)", image.Status, image.Progress) log.Printf("Waiting for image creation status: %s", image.Status)
time.Sleep(2 * time.Second) time.Sleep(2 * time.Second)
} }
} }