package pkg import ( "regexp" "github.rackspace.com/gorax/tools/util" ) type ( VirtualAddress struct { Name string `json:"name"` Address string `json:"address"` Partition *string `json:"partition"` ARP string `json:"arp"` ICMP string `json:"icmp_echo"` Mask string `json:"mask"` TrafficGroup string `json:"traffic_group"` InheritedGroup string `json:"inherited_traffic_group"` Enabled bool `json:"enabled"` Unit *int `json:"unit"` } ) func ParseVirtualAddresses(s string) ([]*VirtualAddress, error) { var v []*VirtualAddress var lISTLTMVIPADDRRE = regexp.MustCompile(`(?i)ltm\s+virtual-address\s+(\S+)[ ]+{((.|\n)*?)(\n}|$)`) var icmpEchoRE = regexp.MustCompile(`icmp-echo\s+(\S+)`) var MASKRE = regexp.MustCompile(`mask\s+(\S+)`) var TRAFFICGROUPRE = regexp.MustCompile(`traffic-group\s+(\S+)`) var INHERITEDGROUPRE = regexp.MustCompile(`inherited-traffic-group\s+(\S+)`) var VAPARTITIONRE = regexp.MustCompile(`\s*partition\s+(\S+)\s*\n`) var ENABLEDRE = regexp.MustCompile(`enabled\s+(yes)`) var UNITRE = regexp.MustCompile(`unit\s+([0-9]+)`) var ARPRE = regexp.MustCompile(`arp\s+(\S+)`) for _, i := range lISTLTMVIPADDRRE.FindAllStringSubmatch(s, -1) { v = append(v, &VirtualAddress{ Address: func() string { a := util.RegexpString(addressRegex, i[2]) if a != "" { return a } return i[1] }(), Name: i[1], Partition: util.RegexpFindStringPtr(VAPARTITIONRE, i[2]), ARP: util.RegexpString(ARPRE, i[2]), ICMP: util.RegexpString(icmpEchoRE, i[2]), Mask: util.RegexpString(MASKRE, i[2]), TrafficGroup: util.RegexpString(TRAFFICGROUPRE, i[2]), InheritedGroup: util.RegexpString(INHERITEDGROUPRE, i[2]), Enabled: ENABLEDRE.MatchString(i[2]), Unit: util.AtoiPointer(util.RegexpString(UNITRE, i[2])), }) } return v, nil }