func downloadAndUploadRelease(boshClient bosh.Client, release string) error { file, size, err := download(release) if err != nil { return err } _, err = boshClient.UploadRelease(bosh.NewSizeReader(file, size)) return err }
func DownloadLatestConsulRelease(client bosh.Client) (string, error) { resp, err := http.Get("http://bosh.io/api/v1/releases/github.com/cloudfoundry-incubator/consul-release") if err != nil { return "", err } defer resp.Body.Close() releases := []release{} json.NewDecoder(resp.Body).Decode(&releases) if len(releases) < 1 { return "", errors.New("no releases") } dir, err := ioutil.TempDir("", "") if err != nil { return "", err } out, err := os.Create(filepath.Join(dir, "consul-release.tgz")) if err != nil { return "", err } defer out.Close() resp, err = http.Get(releases[0].URL) if err != nil { return "", err } defer resp.Body.Close() _, err = io.Copy(out, resp.Body) if err != nil { return "", err } _, err = out.Seek(0, 0) if err != nil { return "", err } info, err := out.Stat() if err != nil { return "", err } _, err = client.UploadRelease(bosh.NewSizeReader(out, info.Size())) if err != nil { return "", err } return releases[0].Version, nil }