diff --git a/marshal.go b/marshal.go index 46ed617..e25de6a 100644 --- a/marshal.go +++ b/marshal.go @@ -105,14 +105,19 @@ func parsePort(s string) int { // the raw JSON for later parsing. func (i *InstanceMetadata) UnmarshalJSON(b []byte) error { i.Raw = b - // TODO(cq) could actually parse Raw here, and in a parallel UnmarshalXML as well. + // TODO(cq) could actually parse Raw in a parallel UnmarshalXML as well. + var m map[string]interface{} + if err := json.Unmarshal(b, &m); err != nil { + return err + } + i.Parsed = m return nil } // MarshalJSON is a custom JSON marshaler for InstanceMetadata. func (i *InstanceMetadata) MarshalJSON() ([]byte, error) { - if i.parsed != nil { - return json.Marshal(i.parsed) + if i.Parsed != nil { + return json.Marshal(i.Parsed) } if i.Raw == nil { @@ -126,8 +131,8 @@ func (i *InstanceMetadata) MarshalJSON() ([]byte, error) { func (i InstanceMetadata) MarshalXML(e *xml.Encoder, start xml.StartElement) error { tokens := []xml.Token{start} - if i.parsed != nil { - for key, value := range i.parsed { + if i.Parsed != nil { + for key, value := range i.Parsed { t := xml.StartElement{Name: xml.Name{"", key}} tokens = append(tokens, t, xml.CharData(value.(string)), xml.EndElement{t.Name}) } diff --git a/metadata.go b/metadata.go index f1af0be..d1c79c8 100644 --- a/metadata.go +++ b/metadata.go @@ -23,15 +23,15 @@ func (a *Application) ParseAllMetadata() error { // SetMetadataString for a given instance before register func (ins *Instance) SetMetadataString(key, value string) { - if ins.Metadata.parsed == nil { - ins.Metadata.parsed = map[string]interface{}{} + if ins.Metadata.Parsed == nil { + ins.Metadata.Parsed = map[string]interface{}{} } - ins.Metadata.parsed[key] = value + ins.Metadata.Parsed[key] = value } func (im *InstanceMetadata) parse() error { if len(im.Raw) == 0 { - im.parsed = make(map[string]interface{}) + im.Parsed = make(map[string]interface{}) log.Debug("len(Metadata)==0. Quitting parsing.") return nil } @@ -39,7 +39,7 @@ func (im *InstanceMetadata) parse() error { if len(im.Raw) > 0 && im.Raw[0] == '{' { // JSON - err := json.Unmarshal(im.Raw, &im.parsed) + err := json.Unmarshal(im.Raw, &im.Parsed) if err != nil { log.Errorf("Error unmarshalling: %s", err.Error()) return fmt.Errorf("error unmarshalling: %s", err.Error()) @@ -52,14 +52,14 @@ func (im *InstanceMetadata) parse() error { log.Errorf("Error unmarshalling: %s", err.Error()) return fmt.Errorf("error unmarshalling: %s", err.Error()) } - im.parsed = parsedDoc["d"].(map[string]interface{}) + im.Parsed = parsedDoc["d"].(map[string]interface{}) } return nil } // GetMap returns a map of the metadata parameters for this instance func (im *InstanceMetadata) GetMap() map[string]interface{} { - return im.parsed + return im.Parsed } func (im *InstanceMetadata) getItem(key string) (interface{}, bool, error) { @@ -67,7 +67,7 @@ func (im *InstanceMetadata) getItem(key string) (interface{}, bool, error) { if err != nil { return "", false, fmt.Errorf("parsing error: %s", err.Error()) } - val, present := im.parsed[key] + val, present := im.Parsed[key] return val, present, nil } diff --git a/struct.go b/struct.go index 19b0570..75b212d 100644 --- a/struct.go +++ b/struct.go @@ -113,7 +113,7 @@ type Port struct { // metadata.go for more info. type InstanceMetadata struct { Raw []byte `xml:",innerxml" json:"-"` - parsed map[string]interface{} + Parsed map[string]interface{} `json:"-"` } // AmazonMetadataType is information about AZ's, AMI's, and the AWS instance