Merge pull request #2811 from sparkprime/verbatim_account
account_file can be verbatim JSON string
This commit is contained in:
commit
96d522fb64
|
@ -2,7 +2,10 @@ package googlecompute
|
|||
|
||||
import (
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"io/ioutil"
|
||||
"os"
|
||||
"strings"
|
||||
)
|
||||
|
||||
// accountFile represents the structure of the account file JSON file.
|
||||
|
@ -13,13 +16,37 @@ type accountFile struct {
|
|||
ClientId string `json:"client_id"`
|
||||
}
|
||||
|
||||
func loadJSON(result interface{}, path string) error {
|
||||
f, err := os.Open(path)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
defer f.Close()
|
||||
|
||||
dec := json.NewDecoder(f)
|
||||
func parseJSON(result interface{}, text string) error {
|
||||
r := strings.NewReader(text)
|
||||
dec := json.NewDecoder(r)
|
||||
return dec.Decode(result)
|
||||
}
|
||||
|
||||
func processAccountFile(account_file *accountFile, text string) error {
|
||||
// Assume text is a JSON string
|
||||
if err := parseJSON(account_file, text); err != nil {
|
||||
// If text was not JSON, assume it is a file path instead
|
||||
if _, err := os.Stat(text); os.IsNotExist(err) {
|
||||
return fmt.Errorf(
|
||||
"account_file path does not exist: %s",
|
||||
text)
|
||||
}
|
||||
|
||||
b, err := ioutil.ReadFile(text)
|
||||
if err != nil {
|
||||
return fmt.Errorf(
|
||||
"Error reading account_file from path '%s': %s",
|
||||
text, err)
|
||||
}
|
||||
|
||||
contents := string(b)
|
||||
|
||||
if err := parseJSON(account_file, contents); err != nil {
|
||||
return fmt.Errorf(
|
||||
"Error parsing account file '%s': %s",
|
||||
contents, err)
|
||||
}
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
|
|
@ -131,9 +131,8 @@ func NewConfig(raws ...interface{}) (*Config, []string, error) {
|
|||
c.stateTimeout = stateTimeout
|
||||
|
||||
if c.AccountFile != "" {
|
||||
if err := loadJSON(&c.account, c.AccountFile); err != nil {
|
||||
errs = packer.MultiErrorAppend(
|
||||
errs, fmt.Errorf("Failed parsing account file: %s", err))
|
||||
if err := processAccountFile(&c.account, c.AccountFile); err != nil {
|
||||
errs = packer.MultiErrorAppend(errs, err)
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -77,7 +77,9 @@ straightforwarded, it is documented here.
|
|||
|
||||
Below is a fully functioning example. It doesn't do anything useful, since no
|
||||
provisioners are defined, but it will effectively repackage an existing GCE
|
||||
image. The account file is obtained in the previous section.
|
||||
image. The account_file is obtained in the previous section. If it parses as
|
||||
JSON it is assumed to be the file itself, otherwise it is assumed to be
|
||||
the path to the file containing the JSON.
|
||||
|
||||
``` {.javascript}
|
||||
{
|
||||
|
|
Loading…
Reference in New Issue