blob: 5821a04bee5cc774b4b02269803e0020d8e98da7 [file] [log] [blame]
Samuel A. Falvo IIc007c272014-02-10 20:49:26 -08001package main
2
3import (
4 "fmt"
5 "github.com/rackspace/gophercloud/openstack/compute/servers"
6 "github.com/rackspace/gophercloud/openstack/identity"
7 "github.com/rackspace/gophercloud/openstack/utils"
8)
9
10func main() {
11 ao, err := utils.AuthOptions()
12 if err != nil {
13 panic(err)
14 }
15
16 a, err := identity.Authenticate(ao)
17 if err != nil {
18 panic(err)
19 }
20
21 sc, err := identity.GetServiceCatalog(a)
22 if err != nil {
23 panic(err)
24 }
25
Samuel A. Falvo IId793b022014-02-12 16:32:23 -080026 eps, err := findAllComputeEndpoints(sc)
Samuel A. Falvo IIc007c272014-02-10 20:49:26 -080027 if err != nil {
28 panic(err)
29 }
30
Samuel A. Falvo IId793b022014-02-12 16:32:23 -080031 clients := make([]*servers.Client, len(eps))
32 for i, ep := range eps {
33 clients[i] = servers.NewClient(ep, a, ao)
Samuel A. Falvo IIc007c272014-02-10 20:49:26 -080034 }
35
Samuel A. Falvo IId793b022014-02-12 16:32:23 -080036 n := 0
37 for _, client := range clients {
38 listResults, err := servers.List(client)
39 if err != nil {
40 panic(err)
41 }
Samuel A. Falvo IIc007c272014-02-10 20:49:26 -080042
Samuel A. Falvo IId793b022014-02-12 16:32:23 -080043 svrs, err := servers.GetServers(listResults)
44 if err != nil {
45 panic(err)
46 }
47
48 n = n + len(svrs)
49
50 for _, s := range svrs {
51 fmt.Printf("ID(%s)\n", s.Id)
52 fmt.Printf(" Name(%s)\n", s.Name)
53 fmt.Printf(" IPv4(%s)\n IPv6(%s)\n", s.AccessIPv4, s.AccessIPv6)
54 }
Samuel A. Falvo IIc007c272014-02-10 20:49:26 -080055 }
Samuel A. Falvo IId793b022014-02-12 16:32:23 -080056 fmt.Printf("--------\n%d servers listed.\n", n)
Samuel A. Falvo IIc007c272014-02-10 20:49:26 -080057}
58
59
Samuel A. Falvo IId793b022014-02-12 16:32:23 -080060func findAllComputeEndpoints(sc *identity.ServiceCatalog) ([]string, error) {
61 var eps []string
62
Samuel A. Falvo IIc007c272014-02-10 20:49:26 -080063 ces, err := sc.CatalogEntries()
64 if err != nil {
Samuel A. Falvo IId793b022014-02-12 16:32:23 -080065 return eps, err
Samuel A. Falvo IIc007c272014-02-10 20:49:26 -080066 }
67
68 for _, ce := range ces {
69 if ce.Type == "compute" {
Samuel A. Falvo IId793b022014-02-12 16:32:23 -080070 eps := make([]string, len(ce.Endpoints))
71 for i, endpoint := range ce.Endpoints {
72 eps[i] = endpoint.PublicURL
73 }
74 return eps, nil
Samuel A. Falvo IIc007c272014-02-10 20:49:26 -080075 }
76 }
77
Samuel A. Falvo IId793b022014-02-12 16:32:23 -080078 return eps, fmt.Errorf("Compute endpoint not found.")
Samuel A. Falvo IIc007c272014-02-10 20:49:26 -080079}
80