func serversRetrieve(client *cm15.Api, serversLocator string) []Server { serverLocator := client.ServerLocator(serversLocator) servers, err := serverLocator.Index(rsapi.ApiParams{"view": "instance_detail"}) if err != nil { fmt.Println("failed to find servers: %s", err) } var serverList = make([]Server, len(servers)) for i := 0; i < len(servers); i++ { nextInstanceLocator := extractHref(servers[i].Links, "next_instance") currentInstanceLocator := extractHref(servers[i].Links, "current_instance") s := Server{Name: servers[i].Name, Locked: false} nextInstance := instanceRetrieve(client, nextInstanceLocator) templateLocator := extractHref(nextInstance.Links, "server_template") template := templateRetrieve(client, templateLocator) s.Template = template.Name templates[templateLocator] = template.Name alertSpecs := alertsRetrieve(client, extractHref(servers[i].Links, "alert_specs")) alerts = append(alerts, alertSpecs...) s.NextInstance = inputsRetrieve(client, extractHref(nextInstance.Links, "inputs")) if currentInstanceLocator != "" { templateLocator := instanceRetrieve(client, currentInstanceLocator) s.CurrentInstance = inputsRetrieve(client, extractHref(templateLocator.Links, "inputs")) s.Locked = templateLocator.Locked s.Volumes = extractVolumesInfo(client, currentInstanceLocator+"/volume_attachments") if len(s.Volumes) == 0 { s.Volumes = nil } } serverList[i] = s } return serverList }
// Makes a GET call on the given server and returns the current instance of the server. func server(client *cm15.Api, name string) *cm15.Instance { serverLocator := client.ServerLocator("/api/servers") servers, err := serverLocator.Index(rsapi.ApiParams{"view": "instance_detail", "filter": []string{"name==" + name}}) if err != nil { fail("Failed to retrieve server: %v\n", err.Error()) } if len(servers) == 0 { fail("Could not find server with name: %v\n", name) } else if len(servers) != 1 { fail("More than one server found with name: %v\n", name) } return servers[0].CurrentInstance }