From 904dd1df63d1678b8458b3e5256e83658fea5627 Mon Sep 17 00:00:00 2001 From: Daisuke Takahashi Date: Wed, 12 Sep 2018 13:20:04 +0900 Subject: [PATCH 1/4] Add disk_format option for OpenStack builder --- builder/openstack/image_config.go | 1 + builder/openstack/step_create_image.go | 3 ++- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/builder/openstack/image_config.go b/builder/openstack/image_config.go index 3bdc1fc50..7a903ebae 100644 --- a/builder/openstack/image_config.go +++ b/builder/openstack/image_config.go @@ -14,6 +14,7 @@ type ImageConfig struct { ImageMetadata map[string]string `mapstructure:"metadata"` ImageVisibility imageservice.ImageVisibility `mapstructure:"image_visibility"` ImageMembers []string `mapstructure:"image_members"` + DiskFormat string `mapstructure:"disk_format"` } func (c *ImageConfig) Prepare(ctx *interpolate.Context) []error { diff --git a/builder/openstack/step_create_image.go b/builder/openstack/step_create_image.go index 550ddcd28..0a871adf0 100644 --- a/builder/openstack/step_create_image.go +++ b/builder/openstack/step_create_image.go @@ -47,7 +47,8 @@ func (s *stepCreateImage) Run(_ context.Context, state multistep.StateBag) multi } volume := state.Get("volume_id").(string) image, err := volumeactions.UploadImage(blockStorageClient, volume, volumeactions.UploadImageOpts{ - ImageName: config.ImageName, + DiskFormat: config.DiskFormat, + ImageName: config.ImageName, }).Extract() if err != nil { err := fmt.Errorf("Error creating image: %s", err) From e375a87a56d8f6c73a85e6046b3b8578f1444ee1 Mon Sep 17 00:00:00 2001 From: Daisuke Takahashi Date: Thu, 13 Sep 2018 18:52:35 +0900 Subject: [PATCH 2/4] OpenStack: Update documentation for `image_disk_format` --- website/source/docs/builders/openstack.html.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/website/source/docs/builders/openstack.html.md b/website/source/docs/builders/openstack.html.md index 28566bd0d..ab75b1071 100644 --- a/website/source/docs/builders/openstack.html.md +++ b/website/source/docs/builders/openstack.html.md @@ -275,6 +275,9 @@ builder. zones aren't specified, the default enforced by your OpenStack cluster will be used. +- `image_disk_format` (string) - Disk format of the resulting image. + This option works if `use_blockstorage_volume` is true. + ## Basic Example: DevStack Here is a basic example. This is a example to build on DevStack running in a VM. From b7bd3d4b34003edaf8d84a9aef61947d11ed9335 Mon Sep 17 00:00:00 2001 From: Daisuke Takahashi Date: Thu, 13 Sep 2018 18:53:54 +0900 Subject: [PATCH 3/4] OpenStack: Change option name to `image_disk_format` --- builder/openstack/image_config.go | 2 +- builder/openstack/step_create_image.go | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/builder/openstack/image_config.go b/builder/openstack/image_config.go index 7a903ebae..f17ad753d 100644 --- a/builder/openstack/image_config.go +++ b/builder/openstack/image_config.go @@ -14,7 +14,7 @@ type ImageConfig struct { ImageMetadata map[string]string `mapstructure:"metadata"` ImageVisibility imageservice.ImageVisibility `mapstructure:"image_visibility"` ImageMembers []string `mapstructure:"image_members"` - DiskFormat string `mapstructure:"disk_format"` + ImageDiskFormat string `mapstructure:"image_disk_format"` } func (c *ImageConfig) Prepare(ctx *interpolate.Context) []error { diff --git a/builder/openstack/step_create_image.go b/builder/openstack/step_create_image.go index 0a871adf0..260596ffb 100644 --- a/builder/openstack/step_create_image.go +++ b/builder/openstack/step_create_image.go @@ -47,7 +47,7 @@ func (s *stepCreateImage) Run(_ context.Context, state multistep.StateBag) multi } volume := state.Get("volume_id").(string) image, err := volumeactions.UploadImage(blockStorageClient, volume, volumeactions.UploadImageOpts{ - DiskFormat: config.DiskFormat, + DiskFormat: config.ImageDiskFormat, ImageName: config.ImageName, }).Extract() if err != nil { From c848f59a555238652ed6260bb3af5d0ec2b05a1e Mon Sep 17 00:00:00 2001 From: Daisuke Takahashi Date: Thu, 20 Sep 2018 10:24:39 +0900 Subject: [PATCH 4/4] Check condition for image_disk_format option --- builder/openstack/builder.go | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/builder/openstack/builder.go b/builder/openstack/builder.go index 7aba1d432..441636ae2 100644 --- a/builder/openstack/builder.go +++ b/builder/openstack/builder.go @@ -52,6 +52,10 @@ func (b *Builder) Prepare(raws ...interface{}) ([]string, error) { return nil, errs } + if b.config.ImageConfig.ImageDiskFormat != "" && !b.config.RunConfig.UseBlockStorageVolume { + return nil, fmt.Errorf("use_blockstorage_volume must be true if image_disk_format is specified.") + } + // By default, instance name is same as image name if b.config.InstanceName == "" { b.config.InstanceName = b.config.ImageName