package pkg import ( "regexp" "github.rackspace.com/gorax/tools/util" ) var ( swBuildRegex = regexp.MustCompile(`(?i)build\s+(\S+)`) swCheckSumRegex = regexp.MustCompile(`(?i)checksum\s+(\S+)`) swIDRegex = regexp.MustCompile(`(?i)id\s+(\S+)`) swProductRegex = regexp.MustCompile(`(?i)product\s+(\S+)`) swTitleRegex = regexp.MustCompile(`(?i)title\s+(".*?"|\S+)`) swVerifiedRegex = regexp.MustCompile(`(?i)verified\s+(\S+)`) swVersionRegex = regexp.MustCompile(`(?i)version\s+(\S+)`) ) type ( SoftwareImage struct { SwImages []*SwImage `json:"images"` } SwImage struct { Name string `json:"name"` Build string `json:"build"` BuildDate string `json:"build-date"` CheckSum string `json:"checksum"` Id string `json:"id"` Product string `json:"product"` Title string `json:"title"` Verified string `json:"verified"` Version string `json:"version"` FileSize string `json:"file-size"` } ) func ParseSoftwareImage(s string) *SoftwareImage { i := new(SoftwareImage) i.Parse(s) return i } func (h *SoftwareImage) Parse(s string) { for _, i := range regexp.MustCompile(`(?i)sys\s+software\s+image\s+(\S+)\s+{((.|\n)*?)}`).FindAllStringSubmatch(s, -1) { h.SwImages = append(h.SwImages, &SwImage{ Name: i[1], Build: util.RegexpString(swBuildRegex, i[2]), BuildDate: util.RegexpString(regexp.MustCompile(`(?i)build-date\s+(".*?"|\S+)`), i[2]), CheckSum: util.RegexpString(swCheckSumRegex, i[2]), FileSize: util.RegexpString(regexp.MustCompile(`(?i)file-size\s+(".*?"|\S+)`), i[2]), Id: util.RegexpString(swIDRegex, i[2]), Product: util.RegexpString(swProductRegex, i[2]), Title: util.RegexpString(swTitleRegex, i[2]), Verified: util.RegexpString(swVerifiedRegex, i[2]), Version: util.RegexpString(swVersionRegex, i[2]), }) } }