func()

in spinnaker/spinnaker.go [552:593]


func (s Spinnaker) GetClusterNames(app string, account D.AccountName) (clusters []D.ClusterName, err error) {
	url := s.appURL(app)
	resp, err := s.client.Get(url)
	if err != nil {
		return nil, errors.Wrapf(err, "http get failed at %s", url)
	}

	defer func() {
		if cerr := resp.Body.Close(); cerr != nil && err == nil {
			err = errors.Wrapf(err, "body close failed at %s", url)
		}
	}()

	if resp.StatusCode != http.StatusOK {
		return nil, errors.Errorf("unexpected response code (%d) from %s", resp.StatusCode, url)
	}

	body, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		return nil, errors.Wrap(err, fmt.Sprintf("body read failed at %s", url))
	}

	var pcl struct {
		Clusters map[D.AccountName][]struct {
			Name D.ClusterName
		}
	}

	err = json.Unmarshal(body, &pcl)
	if err != nil {
		return nil, errors.Wrapf(err, "failed to parse json at %s", url)
	}

	cls := pcl.Clusters[account]

	clusters = make([]D.ClusterName, len(cls))
	for i, cl := range cls {
		clusters[i] = cl.Name
	}

	return clusters, nil
}