From c3ffb3dc227524042a5105b3ef3f43ff1f610c4c Mon Sep 17 00:00:00 2001 From: js-g Date: Sat, 17 Oct 2020 14:24:45 -0400 Subject: [PATCH 1/4] feat (builder/oracle-oci): add launch mode property to image --- builder/oracle/oci/config.go | 1 + builder/oracle/oci/config.hcl2spec.go | 2 ++ builder/oracle/oci/driver_oci.go | 1 + 3 files changed, 4 insertions(+) diff --git a/builder/oracle/oci/config.go b/builder/oracle/oci/config.go index cc47c893e..052e07ab2 100644 --- a/builder/oracle/oci/config.go +++ b/builder/oracle/oci/config.go @@ -83,6 +83,7 @@ type Config struct { BaseImageFilter ListImagesRequest `mapstructure:"base_image_filter"` ImageName string `mapstructure:"image_name"` ImageCompartmentID string `mapstructure:"image_compartment_ocid"` + LaunchMode string `mapstructure:"image_launch_mode"` // Instance InstanceName *string `mapstructure:"instance_name"` diff --git a/builder/oracle/oci/config.hcl2spec.go b/builder/oracle/oci/config.hcl2spec.go index 99603843e..7610fa4e0 100644 --- a/builder/oracle/oci/config.hcl2spec.go +++ b/builder/oracle/oci/config.hcl2spec.go @@ -81,6 +81,7 @@ type FlatConfig struct { BaseImageFilter *FlatListImagesRequest `mapstructure:"base_image_filter" cty:"base_image_filter" hcl:"base_image_filter"` ImageName *string `mapstructure:"image_name" cty:"image_name" hcl:"image_name"` ImageCompartmentID *string `mapstructure:"image_compartment_ocid" cty:"image_compartment_ocid" hcl:"image_compartment_ocid"` + LaunchMode *string `mapstructure:"image_launch_mode" cty:"image_launch_mode" hcl:"image_launch_mode"` InstanceName *string `mapstructure:"instance_name" cty:"instance_name" hcl:"instance_name"` InstanceTags map[string]string `mapstructure:"instance_tags" cty:"instance_tags" hcl:"instance_tags"` InstanceDefinedTags map[string]map[string]interface{} `mapstructure:"instance_defined_tags" cty:"instance_defined_tags" hcl:"instance_defined_tags"` @@ -179,6 +180,7 @@ func (*FlatConfig) HCL2Spec() map[string]hcldec.Spec { "base_image_filter": &hcldec.BlockSpec{TypeName: "base_image_filter", Nested: hcldec.ObjectSpec((*FlatListImagesRequest)(nil).HCL2Spec())}, "image_name": &hcldec.AttrSpec{Name: "image_name", Type: cty.String, Required: false}, "image_compartment_ocid": &hcldec.AttrSpec{Name: "image_compartment_ocid", Type: cty.String, Required: false}, + "image_launch_mode": &hcldec.AttrSpec{Name: "image_launch_mode", Type: cty.String, Required: false}, "instance_name": &hcldec.AttrSpec{Name: "instance_name", Type: cty.String, Required: false}, "instance_tags": &hcldec.AttrSpec{Name: "instance_tags", Type: cty.Map(cty.String), Required: false}, "instance_defined_tags": &hcldec.AttrSpec{Name: "instance_defined_tags", Type: cty.Map(cty.String), Required: false}, diff --git a/builder/oracle/oci/driver_oci.go b/builder/oracle/oci/driver_oci.go index 0178741ea..bd3cb24be 100644 --- a/builder/oracle/oci/driver_oci.go +++ b/builder/oracle/oci/driver_oci.go @@ -145,6 +145,7 @@ func (d *driverOCI) CreateImage(ctx context.Context, id string) (core.Image, err DisplayName: &d.cfg.ImageName, FreeformTags: d.cfg.Tags, DefinedTags: d.cfg.DefinedTags, + LaunchMode: core.CreateImageDetailsLaunchModeEnum(d.cfg.LaunchMode), }}) if err != nil { From ba6173b84c4058565387b1cec7240813ba48a3ad Mon Sep 17 00:00:00 2001 From: js-g Date: Tue, 20 Oct 2020 22:11:29 -0400 Subject: [PATCH 2/4] fix (builder/oracle-oci): remove subnet from LaunchInstanceDetails Deprecated use. Use subnet in CreateVnicDetails instead. --- builder/oracle/oci/config.go | 9 ++++++++- builder/oracle/oci/driver_oci.go | 1 - 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/builder/oracle/oci/config.go b/builder/oracle/oci/config.go index 052e07ab2..2e40489e1 100644 --- a/builder/oracle/oci/config.go +++ b/builder/oracle/oci/config.go @@ -276,11 +276,18 @@ func (c *Config) Prepare(raws ...interface{}) error { errs, errors.New("'shape' must be specified")) } - if c.SubnetID == "" { + if (c.SubnetID == "") && (c.CreateVnicDetails.SubnetId == nil) { errs = packer.MultiErrorAppend( errs, errors.New("'subnet_ocid' must be specified")) } + if c.CreateVnicDetails.SubnetId == nil { + c.CreateVnicDetails.SubnetId = &c.SubnetID + } else if (*c.CreateVnicDetails.SubnetId != c.SubnetID) && (c.SubnetID != "") { + errs = packer.MultiErrorAppend( + errs, errors.New("'create_vnic_details[subnet]' must match 'subnet_ocid' if both are specified")) + } + if (c.BaseImageID == "") && (c.BaseImageFilter == ListImagesRequest{}) { errs = packer.MultiErrorAppend( errs, errors.New("'base_image_ocid' or 'base_image_filter' must be specified")) diff --git a/builder/oracle/oci/driver_oci.go b/builder/oracle/oci/driver_oci.go index bd3cb24be..8e572441e 100644 --- a/builder/oracle/oci/driver_oci.go +++ b/builder/oracle/oci/driver_oci.go @@ -124,7 +124,6 @@ func (d *driverOCI) CreateInstance(ctx context.Context, publicKey string) (strin FreeformTags: d.cfg.InstanceTags, Shape: &d.cfg.Shape, SourceDetails: InstanceSourceDetails, - SubnetId: &d.cfg.SubnetID, Metadata: metadata, } From ab2301448958a7400e09d7954da9f04dea6f99da Mon Sep 17 00:00:00 2001 From: js-g Date: Tue, 20 Oct 2020 22:47:39 -0400 Subject: [PATCH 3/4] docs (builder/oracle-oci): add reference to image_launch_mode --- website/pages/docs/builders/oracle/oci.mdx | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/website/pages/docs/builders/oracle/oci.mdx b/website/pages/docs/builders/oracle/oci.mdx index c96c7a172..1d53506f6 100644 --- a/website/pages/docs/builders/oracle/oci.mdx +++ b/website/pages/docs/builders/oracle/oci.mdx @@ -177,6 +177,11 @@ can also be supplied to override the typical auto-generated key: Sets the [BootVolumeSizeInGBs](https://godoc.org/github.com/oracle/oci-go-sdk/core#InstanceConfigurationInstanceSourceViaImageDetails) when launching the instance. Defaults to `50`. +- `image_launch_mode` (string) - Specifies the configuration mode for launching instances. + Valid values are `"NATIVE"`, `"EMULATED"`, `"PARAVIRTUALIZED"`, and `"CUSTOM"`. See the + [Oracle CLI docs](https://docs.cloud.oracle.com/en-us/iaas/tools/oci-cli/2.12.5/oci_cli_docs/cmdref/compute/image/create.html#cmdoption-launch-mode) + for more information about these modes. + - `use_private_ip` (boolean) - Use private ip addresses to connect to the instance via ssh. From 749a1372d2239c8df9a70b57f1209883f90b9da4 Mon Sep 17 00:00:00 2001 From: js-g Date: Tue, 3 Nov 2020 10:46:34 -0500 Subject: [PATCH 4/4] test (builder/oracle-oci): add config test for LaunchMode --- builder/oracle/oci/config_test.go | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/builder/oracle/oci/config_test.go b/builder/oracle/oci/config_test.go index 2dc9d2162..7ab3203cb 100644 --- a/builder/oracle/oci/config_test.go +++ b/builder/oracle/oci/config_test.go @@ -118,6 +118,17 @@ func TestConfig(t *testing.T) { } }) + t.Run("LaunchMode", func(t *testing.T) { + raw := testConfig(cfgFile) + raw["image_launch_mode"] = "NATIVE" + + var c Config + errs := c.Prepare(raw) + if errs != nil { + t.Fatalf("Unexpected error in configuration %+v", errs) + } + }) + t.Run("NoAccessConfig", func(t *testing.T) { raw := testConfig(cfgFile) delete(raw, "access_cfg_file")