func (h *DeployHandler) refreshZones() error { h.zonesMu.Lock() defer h.zonesMu.Unlock() defer func() { h.regions = make([]string, 0, len(h.zones)) for r, _ := range h.zones { h.regions = append(h.regions, r) } }() // TODO(mpl): get projectID and access tokens from metadata once camweb is on GCE. accountFile := os.Getenv("CAMLI_GCE_SERVICE_ACCOUNT") if accountFile == "" { h.Printf("No service account to query for the zones, using hard-coded ones instead.") h.zones = backupZones return nil } project := os.Getenv("CAMLI_GCE_PROJECT") if project == "" { h.Printf("No project we can query on to get the zones, using hard-coded ones instead.") h.zones = backupZones return nil } data, err := ioutil.ReadFile(accountFile) if err != nil { return err } conf, err := google.JWTConfigFromJSON(data, "https://www.googleapis.com/auth/compute.readonly") if err != nil { return err } s, err := compute.New(conf.Client(oauth2.NoContext)) if err != nil { return err } rl, err := compute.NewRegionsService(s).List(project).Do() if err != nil { return fmt.Errorf("could not get a list of regions: %v", err) } h.zones = make(map[string][]string) for _, r := range rl.Items { zones := make([]string, 0, len(r.Zones)) for _, z := range r.Zones { zone := path.Base(z) if zone == "europe-west1-a" { // Because even though the docs mark it as deprecated, it still shows up here, go figure. continue } zone = strings.Replace(zone, r.Name, "", 1) zones = append(zones, zone) } h.zones[r.Name] = zones } return nil }
func (h *DeployHandler) refreshZones() error { h.zonesMu.Lock() defer h.zonesMu.Unlock() defer func() { h.regions = make([]string, 0, len(h.zones)) for r, _ := range h.zones { h.regions = append(h.regions, r) } }() project, hc, err := h.authenticatedClient() if err != nil { if err == errNoRefresh { h.zones = backupZones h.logger.Printf("Cannot refresh zones because %v. Using hard-coded ones instead.") return nil } return err } s, err := compute.New(hc) if err != nil { return err } rl, err := compute.NewRegionsService(s).List(project).Do() if err != nil { return fmt.Errorf("could not get a list of regions: %v", err) } h.zones = make(map[string][]string) for _, r := range rl.Items { zones := make([]string, 0, len(r.Zones)) for _, z := range r.Zones { zone := path.Base(z) if zone == "europe-west1-a" { // Because even though the docs mark it as deprecated, it still shows up here, go figure. continue } zone = strings.Replace(zone, r.Name, "", 1) zones = append(zones, zone) } h.zones[r.Name] = zones } return nil }