func listMonitors(t *testing.T) { err := monitors.List(base.Client, monitors.ListOpts{}).EachPage(func(page pagination.Page) (bool, error) { monitorsList, err := monitors.ExtractMonitors(page) if err != nil { t.Errorf("Failed to extract Monitors: %v", err) return false, err } for _, monitor := range monitorsList { t.Logf("Listing Monitors: ID [%s] Type [%s] HTTPMethod [%s] URLPath [%s]", monitor.ID, monitor.Type, monitor.HTTPMethod, monitor.URLPath) } return true, nil }) th.AssertNoErr(t, err) }
// Each pool has exactly one or zero monitors. ListOpts does not seem to filter anything. func getMonitorByPoolID(client *gophercloud.ServiceClient, id string) (*v2monitors.Monitor, error) { var monitorList []v2monitors.Monitor err := v2monitors.List(client, v2monitors.ListOpts{PoolID: id}).EachPage(func(page pagination.Page) (bool, error) { monitorsList, err := v2monitors.ExtractMonitors(page) if err != nil { return false, err } for _, monitor := range monitorsList { // bugfix, filter by poolid for _, pool := range monitor.Pools { if pool.ID == id { monitorList = append(monitorList, monitor) } } } if len(monitorList) > 1 { return false, ErrMultipleResults } return true, nil }) if err != nil { if isNotFound(err) { return nil, ErrNotFound } return nil, err } if len(monitorList) == 0 { return nil, ErrNotFound } else if len(monitorList) > 1 { return nil, ErrMultipleResults } return &monitorList[0], nil }
func (lbaas *LbaasV2) EnsureLoadBalancerDeleted(service *api.Service) error { loadBalancerName := cloudprovider.GetLoadBalancerName(service) glog.V(4).Infof("EnsureLoadBalancerDeleted(%v)", loadBalancerName) loadbalancer, err := getLoadbalancerByName(lbaas.network, loadBalancerName) if err != nil && err != ErrNotFound { return err } if loadbalancer == nil { return nil } if lbaas.opts.FloatingNetworkId != "" && loadbalancer != nil { portID, err := getPortIDByIP(lbaas.network, loadbalancer.VipAddress) if err != nil { return err } floatingIP, err := getFloatingIPByPortID(lbaas.network, portID) if err != nil && err != ErrNotFound { return err } if floatingIP != nil { err = floatingips.Delete(lbaas.network, floatingIP.ID).ExtractErr() if err != nil && !isNotFound(err) { return err } } } // get all listeners associated with this loadbalancer var listenerIDs []string err = listeners.List(lbaas.network, listeners.ListOpts{LoadbalancerID: loadbalancer.ID}).EachPage(func(page pagination.Page) (bool, error) { listenerList, err := listeners.ExtractListeners(page) if err != nil { return false, err } for _, listener := range listenerList { listenerIDs = append(listenerIDs, listener.ID) } return true, nil }) if err != nil { return err } // get all pools associated with this loadbalancer var poolIDs []string err = v2_pools.List(lbaas.network, v2_pools.ListOpts{LoadbalancerID: loadbalancer.ID}).EachPage(func(page pagination.Page) (bool, error) { poolsList, err := v2_pools.ExtractPools(page) if err != nil { return false, err } for _, pool := range poolsList { poolIDs = append(poolIDs, pool.ID) } return true, nil }) if err != nil { return err } // get all members associated with each poolIDs var memberIDs []string for _, poolID := range poolIDs { err := v2_pools.ListAssociateMembers(lbaas.network, poolID, v2_pools.MemberListOpts{}).EachPage(func(page pagination.Page) (bool, error) { membersList, err := v2_pools.ExtractMembers(page) if err != nil { return false, err } for _, member := range membersList { memberIDs = append(memberIDs, member.ID) } return true, nil }) if err != nil { return err } } // get all monitors associated with each poolIDs var monitorIDs []string for _, poolID := range poolIDs { err = v2_monitors.List(lbaas.network, v2_monitors.ListOpts{PoolID: poolID}).EachPage(func(page pagination.Page) (bool, error) { monitorsList, err := v2_monitors.ExtractMonitors(page) if err != nil { return false, err } for _, monitor := range monitorsList { monitorIDs = append(monitorIDs, monitor.ID) } return true, nil }) if err != nil { return err } } // delete all monitors for _, monitorID := range monitorIDs { err := v2_monitors.Delete(lbaas.network, monitorID).ExtractErr() if err != nil && !isNotFound(err) { return err } waitLoadbalancerActiveProvisioningStatus(lbaas.network, loadbalancer.ID) } // delete all members and pools for _, poolID := range poolIDs { // delete all members for this pool for _, memberID := range memberIDs { err := v2_pools.DeleteMember(lbaas.network, poolID, memberID).ExtractErr() if err != nil && !isNotFound(err) { return err } waitLoadbalancerActiveProvisioningStatus(lbaas.network, loadbalancer.ID) } // delete pool err := v2_pools.Delete(lbaas.network, poolID).ExtractErr() if err != nil && !isNotFound(err) { return err } waitLoadbalancerActiveProvisioningStatus(lbaas.network, loadbalancer.ID) } // delete all listeners for _, listenerID := range listenerIDs { err := listeners.Delete(lbaas.network, listenerID).ExtractErr() if err != nil && !isNotFound(err) { return err } waitLoadbalancerActiveProvisioningStatus(lbaas.network, loadbalancer.ID) } // delete loadbalancer err = loadbalancers.Delete(lbaas.network, loadbalancer.ID).ExtractErr() if err != nil && !isNotFound(err) { return err } waitLoadbalancerDeleted(lbaas.network, loadbalancer.ID) return nil }