diff --git a/plugins/network-elements/f5/src/com/cloud/network/resource/F5BigIpResource.java b/plugins/network-elements/f5/src/com/cloud/network/resource/F5BigIpResource.java index e797bac0fa58..0f70a9b51392 100644 --- a/plugins/network-elements/f5/src/com/cloud/network/resource/F5BigIpResource.java +++ b/plugins/network-elements/f5/src/com/cloud/network/resource/F5BigIpResource.java @@ -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 allVlans = getVlans(); + List allVlans = getStrippedVlans(); if (!allVlans.contains(vlanName)) { String[] vlanNames = genStringArray(vlanName); long[] vlanTags = genLongArray(vlanTag); @@ -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); } } @@ -505,7 +507,7 @@ private void deleteGuestVlan(long vlanTag, String vlanSelfIp, String vlanNetmask } String vlanName = genVlanName(vlanTag); - List allVlans = getVlans(); + List allVlans = getStrippedVlans(); if (allVlans.contains(vlanName)) { _vlanApi.delete_vlan(genStringArray(vlanName)); @@ -522,7 +524,7 @@ private void deleteVirtualServersInGuestVlan(String vlanSelfIp, String vlanNetma vlanSelfIp = stripRouteDomainFromAddress(vlanSelfIp); List virtualServersToDelete = new ArrayList(); - List allVirtualServers = getVirtualServers(); + List allVirtualServers = getStrippedVirtualServers(); for (String virtualServerName : allVirtualServers) { // Check if the virtual server's default pool has members in this guest VLAN List poolMembers = getMembers(virtualServerName); @@ -576,6 +578,9 @@ private List 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 getVlans() throws ExecutionException { try { List vlans = new ArrayList(); @@ -591,6 +596,27 @@ private List 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 getStrippedVlans() throws ExecutionException { + try { + List vlans = new ArrayList(); + 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 { @@ -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); } @@ -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 getVirtualServers() throws ExecutionException { try { List virtualServers = new ArrayList(); @@ -717,6 +746,28 @@ private List 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 getStrippedVirtualServers() throws ExecutionException { + try { + List virtualServers = new ArrayList(); + 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(); @@ -843,7 +894,7 @@ private void deleteInactivePoolMembers(String virtualServerName, List ac private void deletePoolMember(String virtualServerName, String destIp, int destPort) throws ExecutionException { try { String memberIdentifier = destIp + "-" + destPort; - List lbPools = getAllLbPools(); + List lbPools = getAllStrippedLbPools(); if (lbPools.contains(virtualServerName) && memberExists(virtualServerName, memberIdentifier)) { s_logger.debug("Deleting member " + memberIdentifier + " from pool for virtual server " + virtualServerName); @@ -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 { @@ -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 getAllLbPools() throws ExecutionException { try { List lbPools = new ArrayList(); @@ -910,6 +964,28 @@ public List 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 getAllStrippedLbPools() throws ExecutionException { + try { + List lbPools = new ArrayList(); + 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 getMembers(String virtualServerName) throws ExecutionException { try { List members = new ArrayList();