From 6e069c94e89d1685af4ad865419fa2903131cdaf Mon Sep 17 00:00:00 2001 From: Kevin Puetz Date: Wed, 2 Oct 2019 17:59:13 -0500 Subject: [PATCH] fix: set openstack metadata for use_blockstorage_volume Also set os-set_image_metadata on the tempoary volume before uploading (volume metadata does not automatically become image metadata) so the uploaded image will be created with the desired metadata --- builder/openstack/step_create_image.go | 27 +++++++++++++------------ builder/openstack/step_create_volume.go | 1 + 2 files changed, 15 insertions(+), 13 deletions(-) diff --git a/builder/openstack/step_create_image.go b/builder/openstack/step_create_image.go index 1b8b02b9e..b70a119b1 100644 --- a/builder/openstack/step_create_image.go +++ b/builder/openstack/step_create_image.go @@ -55,6 +55,20 @@ func (s *stepCreateImage) Run(ctx context.Context, state multistep.StateBag) mul return multistep.ActionHalt } volume := state.Get("volume_id").(string) + + // set ImageMetadata before uploading to glance so the new image captured the desired values + if len(config.ImageMetadata) > 0 { + err = volumeactions.SetImageMetadata(blockStorageClient, volume, volumeactions.ImageMetadataOpts{ + Metadata: config.ImageMetadata, + }).ExtractErr() + if err != nil { + err := fmt.Errorf("Error setting image metadata: %s", err) + state.Put("error", err) + ui.Error(err.Error()) + return multistep.ActionHalt + } + } + image, err := volumeactions.UploadImage(blockStorageClient, volume, volumeactions.UploadImageOpts{ DiskFormat: config.ImageDiskFormat, ImageName: config.ImageName, @@ -92,19 +106,6 @@ func (s *stepCreateImage) Run(ctx context.Context, state multistep.StateBag) mul return multistep.ActionHalt } - volume := state.Get("volume_id").(string) - if len(config.ImageMetadata) > 0 && s.UseBlockStorageVolume { - err = volumeactions.SetImageMetadata(blockStorageClient, volume, volumeactions.ImageMetadataOpts{ - Metadata: config.ImageMetadata, - }).ExtractErr() - if err != nil { - err := fmt.Errorf("Error setting image metadata: %s", err) - state.Put("error", err) - ui.Error(err.Error()) - return multistep.ActionHalt - } - } - return multistep.ActionContinue } diff --git a/builder/openstack/step_create_volume.go b/builder/openstack/step_create_volume.go index 93207c744..1e74ba1e9 100644 --- a/builder/openstack/step_create_volume.go +++ b/builder/openstack/step_create_volume.go @@ -63,6 +63,7 @@ func (s *StepCreateVolume) Run(ctx context.Context, state multistep.StateBag) mu AvailabilityZone: s.VolumeAvailabilityZone, Name: s.VolumeName, ImageID: sourceImage, + Metadata: config.ImageMetadata, } volume, err := volumes.Create(blockStorageClient, volumeOpts).Extract() if err != nil {