@Override
public void reload() {
String publicIPId = getRequiredConfig(PUBLIC_IP_ID);
String lbId = getAttribute(LOAD_BALANCER_ID);
if (lbId == null) {
LOG.warn("Not updating load balancer {} ({} in {}), ipId {}, because id not set", new Object[] {this, lbId, loc, publicIPId});
}
LOG.debug("Updating load balancer {} ({} in {}), ipId {}", new Object[] {this, lbId, loc, publicIPId});
Set<VirtualMachine> oldVirtualMachines = loadBalancerApi.listVirtualMachinesAssignedToLoadBalancerRule(lbId);
Set<String> oldVirtualMachineIds = Sets.newLinkedHashSet();
for (VirtualMachine virtualMachine : oldVirtualMachines) {
oldVirtualMachineIds.add(virtualMachine.getId());
}
Set<String> currentVirtualMachineIds = Sets.newLinkedHashSet();
for (String address : getServerPoolAddresses()) {
currentVirtualMachineIds.add(address);
}
Set<String> removedVirtualMachineIds = Sets.difference(oldVirtualMachineIds, currentVirtualMachineIds);
Set<String> addedVirtualMachineIds = Sets.difference(currentVirtualMachineIds, oldVirtualMachineIds);
LOG.debug("Updating load balancer {} ({} in {}), ipId {}: adding {}, removing {}", new Object[] {this, lbId, loc, publicIPId, addedVirtualMachineIds, removedVirtualMachineIds});
if (addedVirtualMachineIds.size() > 0) {
loadBalancerApi.assignVirtualMachinesToLoadBalancerRule(lbId, addedVirtualMachineIds);
}
if (removedVirtualMachineIds.size() > 0) {
loadBalancerApi.removeVirtualMachinesFromLoadBalancerRule(lbId, removedVirtualMachineIds);
}
}