package pkg import ( "regexp" "github.rackspace.com/gorax/tools/util" ) type ( SoftwareVolumes struct { SwVolumes []*SwVolume `json:"images"` } SwVolume struct { Name string `json:"volume"` Active bool `json:"active"` ActiveReq bool `json:"active-requested"` BaseBuild string `json:"basebuild"` Build string `json:"build"` SwMedia []*SwMedia `json:"media"` Product string `json:"product"` Status string `json:"status"` Version string `json:"version"` } SwMedia struct { Hd string `json:"hd"` Media string `json:"media"` Size string `json:"size"` DefaultLocation bool `json:"default-boot-location"` } ) //func ParseSoftwareVolumes(s string) *SoftwareVolumes { // v := new(SoftwareVolumes) // v.Parse(s) // return v //} func (h *SoftwareVolumes) Parse(s string) { for _, i := range regexp.MustCompile(`(?i)(|s)ys\s+software\s+volume\s+(\S+)\s+{((.|\n)*?)(}\n\w|}$)`).FindAllStringSubmatch(s, -1) { h.SwVolumes = append(h.SwVolumes, &SwVolume{ Name: i[2], Active: regexp.MustCompile(`(?i)(active)\n`).MatchString(i[3]), ActiveReq: regexp.MustCompile(`(?i)\s+(active-requested)`).MatchString(i[3]), BaseBuild: util.RegexpString(regexp.MustCompile(`(?i)basebuild\s+(\S+)`), i[3]), Build: util.RegexpString(regexp.MustCompile(`(?i)build\s+(\S+)`), i[3]), Product: util.RegexpString(regexp.MustCompile(`(?i)product\s+(\S+)`), i[3]), Version: util.RegexpString(regexp.MustCompile(`(?i)version\s+(\S+)`), i[3]), Status: util.RegexpString(regexp.MustCompile(`(?i)status\s+(\S+)`), i[3]), SwMedia: func() (t []*SwMedia) { for _, i := range util.BraceParse(util.RegexpFindString(regexp.MustCompile(`(?i)\s+media\s+{\n\s+((.|\n)*?)$`), i[3])) { t = append(t, &SwMedia{ Hd: util.RegexpString(regexp.MustCompile(`(?i)(\S+)\s+{`), i), Media: util.RegexpString(regexp.MustCompile(`(?i)media\s+(\S+)`), i), Size: util.RegexpString(regexp.MustCompile(`(?i)size\s+(\S+)`), i), DefaultLocation: regexp.MustCompile(`(?i)(default-boot-location)`).MatchString(i), }) } return }(), }) } }