// Get OpenStack LBAAS pool by name func (os *OpenStack) getPoolByName(name string) (*pools.Pool, error) { opts := pools.ListOpts{ Name: name, } pager := pools.List(os.network, opts) poolList := make([]pools.Pool, 0, 1) err := pager.EachPage(func(page pagination.Page) (bool, error) { p, err := pools.ExtractPools(page) if err != nil { return false, err } poolList = append(poolList, p...) if len(poolList) > 1 { return false, ErrMultipleResults } return true, nil }) if err != nil { if isNotFound(err) { return nil, ErrNotFound } return nil, err } if len(poolList) == 0 { return nil, ErrNotFound } else if len(poolList) > 1 { return nil, ErrMultipleResults } return &poolList[0], nil }
func TestPoolsList(t *testing.T) { client, err := clients.NewNetworkV2Client() if err != nil { t.Fatalf("Unable to create a network client: %v", err) } allPages, err := pools.List(client, pools.ListOpts{}).AllPages() if err != nil { t.Fatalf("Unable to list pools: %v", err) } allPools, err := pools.ExtractPools(allPages) if err != nil { t.Fatalf("Unable to extract pools: %v", err) } for _, pool := range allPools { PrintPool(t, &pool) } }
func TestList(t *testing.T) { th.SetupHTTP() defer th.TeardownHTTP() th.Mux.HandleFunc("/v2.0/lb/pools", func(w http.ResponseWriter, r *http.Request) { th.TestMethod(t, r, "GET") th.TestHeader(t, r, "X-Auth-Token", fake.TokenID) w.Header().Add("Content-Type", "application/json") w.WriteHeader(http.StatusOK) fmt.Fprintf(w, ` { "pools":[ { "status":"ACTIVE", "lb_method":"ROUND_ROBIN", "protocol":"HTTP", "description":"", "health_monitors":[ "466c8345-28d8-4f84-a246-e04380b0461d", "5d4b5228-33b0-4e60-b225-9b727c1a20e7" ], "members":[ "701b531b-111a-4f21-ad85-4795b7b12af6", "beb53b4d-230b-4abd-8118-575b8fa006ef" ], "status_description": null, "id":"72741b06-df4d-4715-b142-276b6bce75ab", "vip_id":"4ec89087-d057-4e2c-911f-60a3b47ee304", "name":"app_pool", "admin_state_up":true, "subnet_id":"8032909d-47a1-4715-90af-5153ffe39861", "tenant_id":"83657cfcdfe44cd5920adaf26c48ceea", "health_monitors_status": [], "provider": "haproxy" } ] } `) }) count := 0 pools.List(fake.ServiceClient(), pools.ListOpts{}).EachPage(func(page pagination.Page) (bool, error) { count++ actual, err := pools.ExtractPools(page) if err != nil { t.Errorf("Failed to extract pools: %v", err) return false, err } expected := []pools.Pool{ { Status: "ACTIVE", LBMethod: "ROUND_ROBIN", Protocol: "HTTP", Description: "", MonitorIDs: []string{ "466c8345-28d8-4f84-a246-e04380b0461d", "5d4b5228-33b0-4e60-b225-9b727c1a20e7", }, SubnetID: "8032909d-47a1-4715-90af-5153ffe39861", TenantID: "83657cfcdfe44cd5920adaf26c48ceea", AdminStateUp: true, Name: "app_pool", MemberIDs: []string{ "701b531b-111a-4f21-ad85-4795b7b12af6", "beb53b4d-230b-4abd-8118-575b8fa006ef", }, ID: "72741b06-df4d-4715-b142-276b6bce75ab", VIPID: "4ec89087-d057-4e2c-911f-60a3b47ee304", Provider: "haproxy", }, } th.CheckDeepEquals(t, expected, actual) return true, nil }) if count != 1 { t.Errorf("Expected 1 page, got %d", count) } }