github.com/kubernetes-incubator/kube-aws@v0.16.4/flatcar/amiregistry/amiregistry.go (about) 1 package amiregistry 2 3 import ( 4 "encoding/json" 5 "fmt" 6 ) 7 8 func GetAMI(region, channel string) (string, error) { 9 10 amis, err := GetAMIData(channel) 11 12 if err != nil { 13 return "", fmt.Errorf("uanble to fetch AMI for channel \"%s\": %v", channel, err) 14 } 15 16 for _, v := range amis { 17 if v["name"] != region { 18 continue 19 } 20 if hvm, ok := v["hvm"]; ok { 21 return hvm, nil 22 } else { 23 break 24 } 25 } 26 27 return "", fmt.Errorf("could not find \"hvm\" image for region \"%s\" in flatcar channel \"%s\"", region, channel) 28 } 29 30 func GetAMIData(channel string) ([]map[string]string, error) { 31 url := fmt.Sprintf("https://%s.release.flatcar-linux.net/amd64-usr/current/flatcar_production_ami_all.json", channel) 32 r, err := newHttp().Get(url) 33 if err != nil { 34 return nil, fmt.Errorf("failed to get AMI data from url \"%s\": %v", channel, err) 35 } 36 37 if r.StatusCode != 200 { 38 return nil, fmt.Errorf("failed to get AMI data from url \"%s\": invalid status code: %d", url, r.StatusCode) 39 } 40 41 output := map[string][]map[string]string{} 42 43 err = json.NewDecoder(r.Body).Decode(&output) 44 if err != nil { 45 return nil, fmt.Errorf("failed to parse AMI data from url \"%s\": %v", url, err) 46 } 47 r.Body.Close() 48 49 return output["amis"], nil 50 }