From cc7d4e4a959f6d3d44d75bff8bddc78764017c6c Mon Sep 17 00:00:00 2001 From: Harvey Lowndes Date: Mon, 4 Jun 2018 13:14:59 +0100 Subject: [PATCH 1/3] Add support for freeform tagging of images --- builder/oracle/oci/config.go | 3 +++ builder/oracle/oci/driver_oci.go | 1 + 2 files changed, 4 insertions(+) diff --git a/builder/oracle/oci/config.go b/builder/oracle/oci/config.go index eda312ee2..e9c5043ba 100644 --- a/builder/oracle/oci/config.go +++ b/builder/oracle/oci/config.go @@ -62,6 +62,9 @@ type Config struct { // Networking SubnetID string `mapstructure:"subnet_ocid"` + // Tagging + Tags map[string]string `mapstructure:"tags"` + ctx interpolate.Context } diff --git a/builder/oracle/oci/driver_oci.go b/builder/oracle/oci/driver_oci.go index 138bb6474..db0f2fbc1 100644 --- a/builder/oracle/oci/driver_oci.go +++ b/builder/oracle/oci/driver_oci.go @@ -80,6 +80,7 @@ func (d *driverOCI) CreateImage(ctx context.Context, id string) (core.Image, err CompartmentId: &d.cfg.CompartmentID, InstanceId: &id, DisplayName: &d.cfg.ImageName, + FreeformTags: d.cfg.Tags, }}) if err != nil { From 344e7e8b927556a88ff9013028fbcc5732a8e236 Mon Sep 17 00:00:00 2001 From: Harvey Lowndes Date: Mon, 4 Jun 2018 14:18:18 +0100 Subject: [PATCH 2/3] Validation for tag configuration --- builder/oracle/oci/config.go | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/builder/oracle/oci/config.go b/builder/oracle/oci/config.go index e9c5043ba..b7db218db 100644 --- a/builder/oracle/oci/config.go +++ b/builder/oracle/oci/config.go @@ -8,6 +8,7 @@ import ( "log" "os" "path/filepath" + "strings" "github.com/hashicorp/packer/common" "github.com/hashicorp/packer/helper/communicator" @@ -183,6 +184,30 @@ func NewConfig(raws ...interface{}) (*Config, error) { errs, errors.New("'base_image_ocid' must be specified")) } + // Validate tag lengths. TODO (hlowndes) maximum number of tags allowed. + if c.Tags != nil { + for k, v := range c.Tags { + k = strings.TrimSpace(k) + v = strings.TrimSpace(v) + if len(k) > 100 { + errs = packer.MultiErrorAppend( + errs, fmt.Errorf("Tag key length too long. Maximum 100 but found %d. Key: %s", len(k), k)) + } + if len(k) == 0 { + errs = packer.MultiErrorAppend( + errs, errors.New("Tag key empty in config")) + } + if len(v) > 100 { + errs = packer.MultiErrorAppend( + errs, fmt.Errorf("Tag value length too long. Maximum 100 but found %d. Key: %s", len(v), k)) + } + if len(v) == 0 { + errs = packer.MultiErrorAppend( + errs, errors.New("Tag value empty in config")) + } + } + } + if c.ImageName == "" { name, err := interpolate.Render("packer-{{timestamp}}", nil) if err != nil { From 6a4b2ccf8240724de7c035ebfc659f50cfc3793b Mon Sep 17 00:00:00 2001 From: Harvey Lowndes Date: Fri, 6 Jul 2018 14:23:25 +0100 Subject: [PATCH 3/3] Add documentation for OCI freeform tags --- website/source/docs/builders/oracle-oci.html.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/website/source/docs/builders/oracle-oci.html.md b/website/source/docs/builders/oracle-oci.html.md index 61b93e2fa..8dc2d6e0e 100644 --- a/website/source/docs/builders/oracle-oci.html.md +++ b/website/source/docs/builders/oracle-oci.html.md @@ -138,6 +138,13 @@ launched instance. init. See [the Oracle docs](https://docs.us-phoenix-1.oraclecloud.com/api/#/en/iaas/20160918/LaunchInstanceDetails) for more details. Example: `"user_data_file": "./boot_config/myscript.sh"` + - `tags` (map of strings) - Add one or more freeform tags to the resulting custom image. See [the Oracle docs](https://docs.cloud.oracle.com/iaas/Content/Identity/Concepts/taggingoverview.htm) for more details. Example: + +``` {.yaml} +"tags": + "tag1": "value1" + "tag2": "value2" +``` ## Basic Example