func loadText(reader io.Reader, datacentre string, logger *log.Logger) ( *mdb.Mdb, error) { scanner := bufio.NewScanner(reader) var newMdb mdb.Mdb for scanner.Scan() { fields := strings.Fields(scanner.Text()) if len(fields) > 0 { if fields[0][0] == '#' { continue } var machine mdb.Machine machine.Hostname = fields[0] if len(fields) > 1 { machine.RequiredImage = fields[1] if len(fields) > 2 { machine.PlannedImage = fields[2] if len(fields) > 3 && fields[3] == "true" { machine.DisableUpdates = true } } } newMdb.Machines = append(newMdb.Machines, machine) } } if err := scanner.Err(); err != nil { return nil, err } return &newMdb, nil }
func loadCis(reader io.Reader, datacentre string, logger *log.Logger) ( *mdb.Mdb, error) { type instanceMetadataType struct { RequiredImage string `json:"required_image"` PlannedImage string `json:"planned_image"` DisableUpdates bool `json:"disable_updates"` OwnerGroup string `json:"owner_group"` } type sourceType struct { HostName string `json:"host_name"` InstanceMetadata instanceMetadataType `json:"instance_metadata"` Fqdn string } type hitType struct { Source sourceType `json:"_source"` } type hitListType struct { Hits []hitType } type inMdbType struct { Hits hitListType } var inMdb inMdbType var outMdb mdb.Mdb decoder := json.NewDecoder(reader) if err := decoder.Decode(&inMdb); err != nil { return nil, errors.New("Error decoding: " + err.Error()) } for _, hit := range inMdb.Hits.Hits { var outMachine mdb.Machine if hit.Source.Fqdn != "" { outMachine.Hostname = hit.Source.Fqdn } else { outMachine.Hostname = hit.Source.HostName } outMachine.RequiredImage = hit.Source.InstanceMetadata.RequiredImage outMachine.PlannedImage = hit.Source.InstanceMetadata.PlannedImage outMachine.DisableUpdates = hit.Source.InstanceMetadata.DisableUpdates outMachine.OwnerGroup = hit.Source.InstanceMetadata.OwnerGroup outMdb.Machines = append(outMdb.Machines, outMachine) } return &outMdb, nil }
func extractTags(tags []*ec2.Tag, machine *mdb.Machine) { for _, tag := range tags { switch *tag.Key { case "RequiredImage": if tag.Value != nil { machine.RequiredImage = *tag.Value } case "PlannedImage": if tag.Value != nil { machine.PlannedImage = *tag.Value } case "DisableUpdates": if tag.Value != nil { machine.DisableUpdates = true } case "OwnerGroup": if tag.Value != nil { machine.OwnerGroup = *tag.Value } } } }