Skip to content

Instantly share code, notes, and snippets.

@chrigl
Last active July 14, 2019 18:53
Show Gist options
  • Save chrigl/93eb3733babeb17f2830dc43ccbc83c6 to your computer and use it in GitHub Desktop.
Save chrigl/93eb3733babeb17f2830dc43ccbc83c6 to your computer and use it in GitHub Desktop.
gophercloud: extracting addresses of servers
package main
import (
"fmt"
"log"
"github.com/gophercloud/gophercloud"
"github.com/gophercloud/gophercloud/openstack"
"github.com/gophercloud/gophercloud/openstack/compute/v2/servers"
"github.com/gophercloud/utils/openstack/clientconfig"
)
func main() {
fmt.Println("extract addresses of all servers")
provider, err := clientconfig.AuthenticatedClient(&clientconfig.ClientOpts{})
if err != nil {
log.Fatal(err)
}
vms, err := openstack.NewComputeV2(provider, gophercloud.EndpointOpts{})
if err != nil {
log.Fatal(err)
}
all, err := servers.List(vms, servers.ListOpts{}).AllPages()
if err != nil {
log.Fatal(err)
}
allServers, err := servers.ExtractServers(all)
if err != nil {
log.Fatal(err)
}
addrs := make([]string, 0)
for _, s := range allServers {
for k, _ := range s.Addresses {
v, ok := s.Addresses[k].([]interface{})
if !ok {
log.Printf("skipping %+v", v)
continue
}
for _, a := range v {
at, ok := a.(map[string]interface{})
if !ok {
log.Printf("skipping %+v", a)
continue
}
addr, ok := at["addr"]
if !ok {
log.Printf("skipping %+v", at)
continue
}
realAddr, ok := addr.(string)
if !ok {
log.Printf("skipping %+v", addr)
continue
}
addrs = append(addrs, realAddr)
}
}
}
fmt.Printf("%#v\n", addrs)
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment