From 7f631fcb772616af9d8da80d66f4a4133acdaa7f Mon Sep 17 00:00:00 2001 From: Megan Marsh Date: Thu, 8 Feb 2018 14:12:39 -0800 Subject: [PATCH] unpack attributes in oracle-classic builder earlier so that we error fast if there's an issue --- builder/oracle/classic/config.go | 28 +++++++++++++++++ .../oracle/classic/step_create_instance.go | 31 +------------------ 2 files changed, 29 insertions(+), 30 deletions(-) diff --git a/builder/oracle/classic/config.go b/builder/oracle/classic/config.go index 52a08cbe9..233a3a0d1 100644 --- a/builder/oracle/classic/config.go +++ b/builder/oracle/classic/config.go @@ -1,7 +1,9 @@ package classic import ( + "encoding/json" "fmt" + "io/ioutil" "net/url" "os" @@ -15,6 +17,7 @@ import ( type Config struct { common.PackerConfig `mapstructure:",squash"` Comm communicator.Config `mapstructure:",squash"` + attribs map[string]interface{} // Access config overrides Username string `mapstructure:"username"` @@ -105,5 +108,30 @@ func NewConfig(raws ...interface{}) (*Config, error) { return nil, errs } + // unpack attributes from json into config + var data map[string]interface{} + + if c.Attributes != "" { + err := json.Unmarshal([]byte(c.Attributes), &data) + if err != nil { + err = fmt.Errorf("Problem parsing json from attributes: %s", err) + packer.MultiErrorAppend(errs, err) + } + c.attribs = data + } else if c.AttributesFile != "" { + fidata, err := ioutil.ReadFile(c.AttributesFile) + if err != nil { + err = fmt.Errorf("Problem reading attributes_file: %s", err) + packer.MultiErrorAppend(errs, err) + } + err = json.Unmarshal(fidata, &data) + c.attribs = data + if err != nil { + err = fmt.Errorf("Problem parsing json from attrinutes_file: %s", err) + packer.MultiErrorAppend(errs, err) + } + c.attribs = data + } + return c, nil } diff --git a/builder/oracle/classic/step_create_instance.go b/builder/oracle/classic/step_create_instance.go index cf4b043fe..cda67122c 100644 --- a/builder/oracle/classic/step_create_instance.go +++ b/builder/oracle/classic/step_create_instance.go @@ -2,9 +2,7 @@ package classic import ( "context" - "encoding/json" "fmt" - "io/ioutil" "github.com/hashicorp/go-oracle-terraform/compute" "github.com/hashicorp/packer/helper/multistep" @@ -32,33 +30,6 @@ func (s *stepCreateInstance) Run(_ context.Context, state multistep.StateBag) mu // get instances client instanceClient := client.Instances() - var data map[string]interface{} - - if config.Attributes != "" { - err := json.Unmarshal([]byte(config.Attributes), &data) - if err != nil { - err = fmt.Errorf("Problem parsing json from attributes: %s", err) - ui.Error(err.Error()) - state.Put("error", err) - return multistep.ActionHalt - } - } else if config.AttributesFile != "" { - fidata, err := ioutil.ReadFile(config.AttributesFile) - if err != nil { - err = fmt.Errorf("Problem reading attributes_file: %s", err) - ui.Error(err.Error()) - state.Put("error", err) - return multistep.ActionHalt - } - err = json.Unmarshal(fidata, &data) - if err != nil { - err = fmt.Errorf("Problem parsing json from attrinutes_file: %s", err) - ui.Error(err.Error()) - state.Put("error", err) - return multistep.ActionHalt - } - } - // Instances Input input := &compute.CreateInstanceInput{ Name: config.ImageName, @@ -66,7 +37,7 @@ func (s *stepCreateInstance) Run(_ context.Context, state multistep.StateBag) mu ImageList: config.SourceImageList, SSHKeys: []string{keyName}, Networking: map[string]compute.NetworkingInfo{"eth0": netInfo}, - Attributes: data, + Attributes: config.attribs, } instanceInfo, err := instanceClient.CreateInstance(input)