Openstack: Update lb member when node port changes

This commit is contained in:
Davide Agnello 2016-10-09 20:22:00 -07:00
parent e4b1e263f4
commit 14b184756a

View File

@ -363,9 +363,9 @@ func getMonitorByPoolID(client *gophercloud.ServiceClient, id string) (*v2_monit
} }
// Check if a member exists for node // Check if a member exists for node
func memberExists(members []v2_pools.Member, addr string) bool { func memberExists(members []v2_pools.Member, addr string, port int) bool {
for _, member := range members { for _, member := range members {
if member.Address == addr { if member.Address == addr && member.ProtocolPort == port {
return true return true
} }
} }
@ -385,9 +385,9 @@ func popListener(existingListeners []listeners.Listener, id string) []listeners.
return existingListeners return existingListeners
} }
func popMember(members []v2_pools.Member, addr string) []v2_pools.Member { func popMember(members []v2_pools.Member, addr string, port int) []v2_pools.Member {
for i, member := range members { for i, member := range members {
if member.Address == addr { if member.Address == addr && member.ProtocolPort == port {
members[i] = members[len(members)-1] members[i] = members[len(members)-1]
members = members[:len(members)-1] members = members[:len(members)-1]
} }
@ -602,7 +602,7 @@ func (lbaas *LbaasV2) EnsureLoadBalancer(clusterName string, apiService *api.Ser
} }
} }
if !memberExists(members, addr) { if !memberExists(members, addr, int(port.NodePort)) {
glog.V(4).Infof("Creating member for pool %s", pool.ID) glog.V(4).Infof("Creating member for pool %s", pool.ID)
_, err := v2_pools.CreateAssociateMember(lbaas.network, pool.ID, v2_pools.MemberCreateOpts{ _, err := v2_pools.CreateAssociateMember(lbaas.network, pool.ID, v2_pools.MemberCreateOpts{
ProtocolPort: int(port.NodePort), ProtocolPort: int(port.NodePort),
@ -614,9 +614,10 @@ func (lbaas *LbaasV2) EnsureLoadBalancer(clusterName string, apiService *api.Ser
} }
waitLoadbalancerActiveProvisioningStatus(lbaas.network, loadbalancer.ID) waitLoadbalancerActiveProvisioningStatus(lbaas.network, loadbalancer.ID)
} } else {
// After all members have been processed, remaining members are deleted as obsolete. // After all members have been processed, remaining members are deleted as obsolete.
members = popMember(members, addr) members = popMember(members, addr, int(port.NodePort))
}
glog.V(4).Infof("Ensured pool %s has member for %s at %s", pool.ID, nodeName, addr) glog.V(4).Infof("Ensured pool %s has member for %s at %s", pool.ID, nodeName, addr)
} }
@ -832,7 +833,7 @@ func (lbaas *LbaasV2) UpdateLoadBalancer(clusterName string, service *api.Servic
// Add any new members for this port // Add any new members for this port
for addr := range addrs { for addr := range addrs {
if _, ok := members[addr]; ok { if _, ok := members[addr]; ok && members[addr].ProtocolPort == int(port.NodePort) {
// Already exists, do not create member // Already exists, do not create member
continue continue
} }
@ -849,7 +850,7 @@ func (lbaas *LbaasV2) UpdateLoadBalancer(clusterName string, service *api.Servic
// Remove any old members for this port // Remove any old members for this port
for _, member := range members { for _, member := range members {
if _, ok := addrs[member.Address]; ok { if _, ok := addrs[member.Address]; ok && member.ProtocolPort == int(port.NodePort) {
// Still present, do not delete member // Still present, do not delete member
continue continue
} }