Skip to content

CLOUDSTACK-7986 [F5 LB] Failed to execute IPAssocCommand due to com.clou... #47

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
wants to merge 1 commit into from
Closed
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -420,7 +420,7 @@ private void saveConfiguration() throws ExecutionException {
private void addGuestVlan(long vlanTag, String vlanSelfIp, String vlanNetmask, boolean inline) throws ExecutionException {
try {
String vlanName = genVlanName(vlanTag);
List<String> allVlans = getVlans();
List<String> allVlans = getStrippedVlans();
if (!allVlans.contains(vlanName)) {
String[] vlanNames = genStringArray(vlanName);
long[] vlanTags = genLongArray(vlanTag);
Expand All @@ -434,8 +434,10 @@ private void addGuestVlan(long vlanTag, String vlanSelfIp, String vlanNetmask, b

s_logger.debug("Creating a guest VLAN with tag " + vlanTag);
_vlanApi.create(vlanNames, vlanTags, vlanMemberEntries, commonEnabledState, new long[] {10L}, new String[] {"00:00:00:00:00:00"});
s_logger.debug("vlanName " + vlanName);
s_logger.debug("getStrippedVlans " + getStrippedVlans());

if (!getVlans().contains(vlanName)) {
if (!getStrippedVlans().contains(vlanName)) {
throw new ExecutionException("Failed to create vlan with tag " + vlanTag);
}
}
Expand Down Expand Up @@ -505,7 +507,7 @@ private void deleteGuestVlan(long vlanTag, String vlanSelfIp, String vlanNetmask
}

String vlanName = genVlanName(vlanTag);
List<String> allVlans = getVlans();
List<String> allVlans = getStrippedVlans();
if (allVlans.contains(vlanName)) {
_vlanApi.delete_vlan(genStringArray(vlanName));

Expand All @@ -522,7 +524,7 @@ private void deleteVirtualServersInGuestVlan(String vlanSelfIp, String vlanNetma
vlanSelfIp = stripRouteDomainFromAddress(vlanSelfIp);
List<String> virtualServersToDelete = new ArrayList<String>();

List<String> allVirtualServers = getVirtualServers();
List<String> allVirtualServers = getStrippedVirtualServers();
for (String virtualServerName : allVirtualServers) {
// Check if the virtual server's default pool has members in this guest VLAN
List<String> poolMembers = getMembers(virtualServerName);
Expand Down Expand Up @@ -576,6 +578,9 @@ private List<String> getSelfIps() throws ExecutionException {
}
}

//This was working with Big IP 10.x
//getVlans retuns vlans with user partition information
//ex: if vlanname is vlan-100 then the get_list() will return /Common/vlan-100
private List<String> getVlans() throws ExecutionException {
try {
List<String> vlans = new ArrayList<String>();
Expand All @@ -591,6 +596,27 @@ private List<String> getVlans() throws ExecutionException {
}
}

//getVlans retuns vlan names without user partition information
//ex: if vlanname is vlan-100 then the get_list() will return /Common/vlan-100
// This method will strip the partition information and only returns a list with vlan name (vlan-100)
private List<String> getStrippedVlans() throws ExecutionException {
try {
List<String> vlans = new ArrayList<String>();
String[] vlansArray = _vlanApi.get_list();

for (String vlan : vlansArray) {
if(vlan.contains("/")){
vlans.add(vlan.substring(vlan.lastIndexOf("/") + 1));
}else{
vlans.add(vlan);
}
}

return vlans;
} catch (RemoteException e) {
throw new ExecutionException(e.getMessage());
}
}
// Login

private void login() throws ExecutionException {
Expand Down Expand Up @@ -681,7 +707,7 @@ private void deleteVirtualServerAndDefaultPool(String virtualServerName) throws
s_logger.debug("Deleting virtual server " + virtualServerName);
_virtualServerApi.delete_virtual_server(genStringArray(virtualServerName));

if (getVirtualServers().contains(virtualServerName)) {
if (getStrippedVirtualServers().contains(virtualServerName)) {
throw new ExecutionException("Failed to delete virtual server " + virtualServerName);
}

Expand All @@ -699,9 +725,12 @@ private String genVirtualServerName(LbProtocol protocol, String srcIp, long srcP
}

private boolean virtualServerExists(String virtualServerName) throws ExecutionException {
return getVirtualServers().contains(virtualServerName);
return getStrippedVirtualServers().contains(virtualServerName);
}

//This was working with Big IP 10.x
//getVirtualServers retuns VirtualServers with user partition information
//ex: if VirtualServers is vs-tcp-10.147.44.8-22 then the get_list() will return /Common/vs-tcp-10.147.44.8-22
private List<String> getVirtualServers() throws ExecutionException {
try {
List<String> virtualServers = new ArrayList<String>();
Expand All @@ -717,6 +746,28 @@ private List<String> getVirtualServers() throws ExecutionException {
}
}

/* getStrippedVirtualServers retuns VirtualServers without user partition information
ex: if VirtualServers is vs-tcp-10.147.44.8-22 then the get_list() will return /Common/vs-tcp-10.147.44.8-22
This method will strip the partition information and only returns a list with VirtualServers (vs-tcp-10.147.44.8-22)*/
private List<String> getStrippedVirtualServers() throws ExecutionException {
try {
List<String> virtualServers = new ArrayList<String>();
String[] virtualServersArray = _virtualServerApi.get_list();

for (String virtualServer : virtualServersArray) {
if(virtualServer.contains("/")){
virtualServers.add(virtualServer.substring(virtualServer.lastIndexOf("/") + 1));
}else{
virtualServers.add(virtualServer);
}
}

return virtualServers;
} catch (RemoteException e) {
throw new ExecutionException(e.getMessage());
}
}

private boolean persistenceProfileExists(String profileName) throws ExecutionException {
try {
String[] persistenceProfileArray = _persistenceProfileApi.get_list();
Expand Down Expand Up @@ -843,7 +894,7 @@ private void deleteInactivePoolMembers(String virtualServerName, List<String> ac
private void deletePoolMember(String virtualServerName, String destIp, int destPort) throws ExecutionException {
try {
String memberIdentifier = destIp + "-" + destPort;
List<String> lbPools = getAllLbPools();
List<String> lbPools = getAllStrippedLbPools();

if (lbPools.contains(virtualServerName) && memberExists(virtualServerName, memberIdentifier)) {
s_logger.debug("Deleting member " + memberIdentifier + " from pool for virtual server " + virtualServerName);
Expand Down Expand Up @@ -880,7 +931,7 @@ private void deletePoolMember(String virtualServerName, String destIp, int destP
}

private boolean poolExists(String poolName) throws ExecutionException {
return getAllLbPools().contains(poolName);
return getAllStrippedLbPools().contains(poolName);
}

private boolean memberExists(String poolName, String memberIdentifier) throws ExecutionException {
Expand All @@ -895,6 +946,9 @@ private String[] getIpAndPort(String memberIdentifier) {
return memberIdentifier.split("-");
}

//This was working with Big IP 10.x
//getAllLbPools retuns LbPools with user partition information
//ex: if LbPools is vs-tcp-10.147.44.8-22 then the get_list() will return /Common/vs-tcp-10.147.44.8-22
public List<String> getAllLbPools() throws ExecutionException {
try {
List<String> lbPools = new ArrayList<String>();
Expand All @@ -910,6 +964,28 @@ public List<String> getAllLbPools() throws ExecutionException {
}
}

//Big IP 11.x
//getAllLbPools retuns LbPools without user partition information
//ex: if LbPools is vs-tcp-10.147.44.8-22 then the get_list() will return /Common/vs-tcp-10.147.44.8-22
//This method will strip the partition information and only returns a list with LbPools (vs-tcp-10.147.44.8-22)
public List<String> getAllStrippedLbPools() throws ExecutionException {
try {
List<String> lbPools = new ArrayList<String>();
String[] pools = _loadbalancerApi.get_list();

for (String pool : pools) {
if(pool.contains("/")){
lbPools.add(pool.substring(pool.lastIndexOf("/") + 1));
}else{
lbPools.add(pool);
}
}
return lbPools;
} catch (RemoteException e) {
throw new ExecutionException(e.getMessage());
}
}

private List<String> getMembers(String virtualServerName) throws ExecutionException {
try {
List<String> members = new ArrayList<String>();
Expand Down