blob: 9c1ef1d40241159ac26b7e098c61c01505eaa9e3 [file] [log] [blame]
Samuel A. Falvo IIc007c272014-02-10 20:49:26 -08001package main
2
3import (
4 "fmt"
Samuel A. Falvo II5df4fb52014-02-12 21:17:39 -08005 "os"
6 "text/tabwriter"
Samuel A. Falvo IIc007c272014-02-10 20:49:26 -08007 "github.com/rackspace/gophercloud/openstack/compute/servers"
8 "github.com/rackspace/gophercloud/openstack/identity"
9 "github.com/rackspace/gophercloud/openstack/utils"
10)
11
12func main() {
13 ao, err := utils.AuthOptions()
14 if err != nil {
15 panic(err)
16 }
17
18 a, err := identity.Authenticate(ao)
19 if err != nil {
20 panic(err)
21 }
22
23 sc, err := identity.GetServiceCatalog(a)
24 if err != nil {
25 panic(err)
26 }
27
Samuel A. Falvo IId793b022014-02-12 16:32:23 -080028 eps, err := findAllComputeEndpoints(sc)
Samuel A. Falvo IIc007c272014-02-10 20:49:26 -080029 if err != nil {
30 panic(err)
31 }
32
Samuel A. Falvo IIe520cb62014-02-12 21:18:57 -080033 region := os.Getenv("OS_REGION_NAME")
34
Samuel A. Falvo IId793b022014-02-12 16:32:23 -080035 n := 0
Samuel A. Falvo II5df4fb52014-02-12 21:17:39 -080036 w := new(tabwriter.Writer)
37 w.Init(os.Stdout, 2, 8, 2, ' ', 0)
38 fmt.Fprintln(w, "ID\tName\tRegion\tIPv4\tIPv6\t")
39 for _, ep := range eps {
Samuel A. Falvo IIe520cb62014-02-12 21:18:57 -080040 if (region != "") && (region != ep.Region) {
41 continue
42 }
43
Samuel A. Falvo II5df4fb52014-02-12 21:17:39 -080044 client := servers.NewClient(ep.PublicURL, a, ao)
45
Samuel A. Falvo IId793b022014-02-12 16:32:23 -080046 listResults, err := servers.List(client)
47 if err != nil {
48 panic(err)
49 }
Samuel A. Falvo IIc007c272014-02-10 20:49:26 -080050
Samuel A. Falvo IId793b022014-02-12 16:32:23 -080051 svrs, err := servers.GetServers(listResults)
52 if err != nil {
53 panic(err)
54 }
55
56 n = n + len(svrs)
57
58 for _, s := range svrs {
Samuel A. Falvo II5df4fb52014-02-12 21:17:39 -080059 fmt.Fprintf(w, "%s\t%s\t%s\t%s\t%s\t\n", s.Id, s.Name, ep.Region, s.AccessIPv4, s.AccessIPv6)
Samuel A. Falvo IId793b022014-02-12 16:32:23 -080060 }
Samuel A. Falvo IIc007c272014-02-10 20:49:26 -080061 }
Samuel A. Falvo II5df4fb52014-02-12 21:17:39 -080062 w.Flush()
Samuel A. Falvo IId793b022014-02-12 16:32:23 -080063 fmt.Printf("--------\n%d servers listed.\n", n)
Samuel A. Falvo IIc007c272014-02-10 20:49:26 -080064}
65
66
Samuel A. Falvo II5df4fb52014-02-12 21:17:39 -080067func findAllComputeEndpoints(sc *identity.ServiceCatalog) ([]identity.Endpoint, error) {
Samuel A. Falvo IIc007c272014-02-10 20:49:26 -080068 ces, err := sc.CatalogEntries()
69 if err != nil {
Samuel A. Falvo II5df4fb52014-02-12 21:17:39 -080070 return nil, err
Samuel A. Falvo IIc007c272014-02-10 20:49:26 -080071 }
72
73 for _, ce := range ces {
74 if ce.Type == "compute" {
Samuel A. Falvo II5df4fb52014-02-12 21:17:39 -080075 return ce.Endpoints, nil
Samuel A. Falvo IIc007c272014-02-10 20:49:26 -080076 }
77 }
78
Samuel A. Falvo II5df4fb52014-02-12 21:17:39 -080079 return nil, fmt.Errorf("Compute endpoint not found.")
Samuel A. Falvo IIc007c272014-02-10 20:49:26 -080080}
81