def exists(self, name=None, folder='Common'): """ Does selfip exist? """ folder = str(folder).replace('/', '') request_url = self.bigip.icr_url + '/net/self/' request_url += '~' + folder + '~' + name request_url += '?$select=name' response = self.bigip.icr_session.get(request_url, timeout=const.CONNECTION_TIMEOUT) if response.status_code < 400: return True elif response.status_code == 404: request_url = self.bigip.icr_url + '/net/self/' request_url += '~' + folder + '~' + strip_folder_and_prefix(name) request_url += '?$select=name' response = self.bigip.icr_session.get( request_url, timeout=const.CONNECTION_TIMEOUT) if response.status_code < 400: return True elif response.status_code != 404: Log.error('self', response.text) raise exceptions.SelfIPQueryException(response.text) else: Log.error('self', response.text) raise exceptions.SelfIPQueryException(response.text) return False
def _in_use(self, name=None, folder=None): """ Is tunnel used by selfip? """ if name: folder = str(folder).replace('/', '') request_url = self.bigip.icr_url + '/net/self?$select=vlan' if folder: request_filter = 'partition eq ' + folder request_url += '&$filter=' + request_filter else: folder = 'Common' response = self.bigip.icr_session.get( request_url, timeout=const.CONNECTION_TIMEOUT) if response.status_code < 400: return_obj = json.loads(response.text) if 'items' in return_obj: for selfip in return_obj['items']: vlan_name = os.path.basename(selfip['vlan']) if vlan_name == name: return True if vlan_name == \ strip_folder_and_prefix(name): return True elif response.status_code != 404: Log.error('self', response.text) raise exceptions.VXLANQueryException(response.text) return False
def get_description(self, name=None, folder='Common'): """ Get vlan description """ if name: folder = str(folder).replace('/', '') request_url = self.bigip.icr_url + \ '/net/vlan?$select=name,description' if folder: request_filter = 'partition eq ' + folder request_url += '&$filter=' + request_filter else: folder = 'Common' response = self.bigip.icr_session.get( request_url, timeout=const.CONNECTION_TIMEOUT) if response.status_code < 400: return_obj = json.loads(response.text) if 'items' in return_obj: for vlan in return_obj['items']: vlan_name = os.path.basename(vlan['name']) if vlan_name == name: if 'description' in vlan: return vlan['description'] if vlan_name == \ strip_folder_and_prefix(name): if 'description' in vlan: return vlan['description'] elif response.status_code != 404: Log.error('VLAN', response.text) raise exceptions.VLANQueryException(response.text) return None
def _in_use(self, name=None, folder=None): """ Does selfip use vlan? """ if name: folder = str(folder).replace('/', '') request_url = self.bigip.icr_url + '/net/self?$select=vlan' if folder: request_filter = 'partition eq ' + folder request_url += '&$filter=' + request_filter else: folder = 'Common' response = self.bigip.icr_session.get( request_url, timeout=const.CONNECTION_TIMEOUT) if response.status_code < 400: return_obj = json.loads(response.text) if 'items' in return_obj: for selfip in return_obj['items']: vlan_name = os.path.basename(selfip['vlan']) if vlan_name == name: return True if vlan_name == \ strip_folder_and_prefix(name): return True elif response.status_code != 404: Log.error('VLAN', response.text) raise exceptions.VLANQueryException(response.text) return False
def exists(self, name=None, folder='Common'): """ Does selfip exist? """ folder = str(folder).replace('/', '') request_url = self.bigip.icr_url + '/net/self/' request_url += '~' + folder + '~' + name request_url += '?$select=name' response = self.bigip.icr_session.get( request_url, timeout=const.CONNECTION_TIMEOUT) if response.status_code < 400: return True elif response.status_code == 404: request_url = self.bigip.icr_url + '/net/self/' request_url += '~' + folder + '~' + strip_folder_and_prefix(name) request_url += '?$select=name' response = self.bigip.icr_session.get( request_url, timeout=const.CONNECTION_TIMEOUT) if response.status_code < 400: return True elif response.status_code != 404: Log.error('self', response.text) raise exceptions.SelfIPQueryException(response.text) else: Log.error('self', response.text) raise exceptions.SelfIPQueryException(response.text) return False
def delete_by_vlan_name(self, vlan_name=None, folder='Common'): """ Delete selfip by vlan name """ if vlan_name: folder = str(folder).replace('/', '') request_url = self.bigip.icr_url + '/net/self' request_url += '?$select=vlan,selfLink,floating' if folder: request_filter = 'partition eq ' + folder request_url += '&$filter=' + request_filter else: folder = 'Common' response = self.bigip.icr_session.get( request_url, timeout=const.CONNECTION_TIMEOUT) if response.status_code < 400: return_obj = json.loads(response.text) if 'items' in return_obj: float_to_delete = [] nonfloat_to_delete = [] for selfip in return_obj['items']: name = os.path.basename(selfip['vlan']) if vlan_name == name or \ vlan_name == strip_folder_and_prefix(name): if selfip['floating'] == 'enabled': float_to_delete.append( self.bigip.icr_link(selfip['selfLink'])) else: nonfloat_to_delete.append( self.bigip.icr_link(selfip['selfLink'])) for selfip in float_to_delete: del_res = self.bigip.icr_session.delete( selfip, timeout=const.CONNECTION_TIMEOUT) if del_res.status_code > 399 and\ del_res.status_code != 404: Log.error('self', del_res.text) raise exceptions.SelfIPDeleteException( del_res.text) for selfip in nonfloat_to_delete: del_res = self.bigip.icr_session.delete( selfip, timeout=const.CONNECTION_TIMEOUT) if del_res.status_code > 399 and\ del_res.status_code != 404: Log.error('self', del_res.text) raise exceptions.SelfIPDeleteException( del_res.text) return True else: Log.error('selfip', response.text) raise exceptions.SelfIPQueryException(response.text) return False
def get_vlan(self, name=None, folder='Common'): """ Get selfip vlan """ if name: folder = str(folder).replace('/', '') request_url = self.bigip.icr_url + '/net/self/' request_url += '~' + folder + '~' + name request_url += '/?$select=vlan' response = self.bigip.icr_session.get( request_url, timeout=const.CONNECTION_TIMEOUT) if response.status_code < 400: return_obj = json.loads(response.text) if 'vlan' in return_obj: return strip_folder_and_prefix(return_obj['vlan']) else: Log.error('self', response.text) raise exceptions.SelfIPQueryException(response.text) return None
def get_snatpool_member_use_count(self, name): """ Get use count for all SNAT pool members """ request_url = self.bigip.icr_url + "/ltm/snatpool" response = self.bigip.icr_session.get(request_url, timeout=const.CONNECTION_TIMEOUT) use_count = 0 if response.status_code < 400: return_obj = json.loads(response.text) if "items" in return_obj: items = return_obj["items"] for item in items: if "members" in item: for snat_name in item["members"]: if name in strip_folder_and_prefix(snat_name): use_count += 1 elif response.status_code != 404: Log.error("snatpool", response.text) raise exceptions.SNATQueryException(response.text) return use_count
def get_pools(self, folder='Common'): folder = str(folder).replace('/', '') request_url = self.bigip.icr_url + '/ltm/pool' request_url += '?$select=name' request_url += '&$filter=partition eq ' + folder response = self.bigip.icr_session.get(request_url, timeout=const.CONNECTION_TIMEOUT) pool_names = [] if response.status_code < 400: return_obj = json.loads(response.text) if 'items' in return_obj: for pool in return_obj['items']: pool_names.append(strip_folder_and_prefix(pool['name'])) elif response.status_code != 404: Log.error('pool', response.text) raise exceptions.PoolQueryException(response.text) return pool_names
def get_snatpool_members(self, name=None, folder="Common"): """ Get SNAT pool members """ if name: folder = str(folder).replace("/", "") request_url = self.bigip.icr_url + "/ltm/snatpool/" request_url += "~" + folder + "~" + name request_url += "/?$select=members" response = self.bigip.icr_session.get(request_url, timeout=const.CONNECTION_TIMEOUT) return_list = [] if response.status_code < 400: return_obj = json.loads(response.text) if "members" in return_obj: for sa in return_obj["members"]: return_list.append(strip_folder_and_prefix(sa)) elif response.status_code != 404: Log.error("snatpool", response.text) raise exceptions.SNATQueryException(response.text) return return_list return None
def get_snatpool_member_use_count(self, name): """ Get use count for all SNAT pool members """ request_url = self.bigip.icr_url + '/ltm/snatpool' response = self.bigip.icr_session.get(request_url, timeout=const.CONNECTION_TIMEOUT) use_count = 0 if response.status_code < 400: return_obj = json.loads(response.text) if 'items' in return_obj: items = return_obj['items'] for item in items: if 'members' in item: for snat_name in item['members']: if name in strip_folder_and_prefix(snat_name): use_count += 1 elif response.status_code != 404: Log.error('snatpool', response.text) raise exceptions.SNATQueryException(response.text) return use_count
def get_pools(self, folder='Common'): folder = str(folder).replace('/', '') request_url = self.bigip.icr_url + '/ltm/pool' request_url += '?$select=name' request_url += '&$filter=partition eq ' + folder response = self.bigip.icr_session.get( request_url, timeout=const.CONNECTION_TIMEOUT) pool_names = [] if response.status_code < 400: return_obj = json.loads(response.text) if 'items' in return_obj: for pool in return_obj['items']: pool_names.append( strip_folder_and_prefix(pool['name'])) elif response.status_code != 404: Log.error('pool', response.text) raise exceptions.PoolQueryException(response.text) return pool_names
def get_snatpools(self, folder="Common"): """ Get SNAT pools """ folder = str(folder).replace("/", "") request_url = self.bigip.icr_url + "/ltm/snatpool/" request_url += "?$select=name" if folder: request_filter = "partition eq " + folder request_url += "&$filter=" + request_filter response = self.bigip.icr_session.get(request_url, timeout=const.CONNECTION_TIMEOUT) return_list = [] if response.status_code < 400: return_obj = json.loads(response.text) if "items" in return_obj: for pool in return_obj["items"]: return_list.append(strip_folder_and_prefix(pool["name"])) elif response.status_code != 404: Log.error("snatpool", response.text) raise exceptions.SNATQueryException(response.text) return return_list
def get_snatpools(self, folder='Common'): """ Get SNAT pools """ folder = str(folder).replace('/', '') request_url = self.bigip.icr_url + '/ltm/snatpool/' request_url += '?$select=name' if folder: request_filter = 'partition eq ' + folder request_url += '&$filter=' + request_filter response = self.bigip.icr_session.get( request_url, timeout=const.CONNECTION_TIMEOUT) return_list = [] if response.status_code < 400: return_obj = json.loads(response.text) if 'items' in return_obj: for pool in return_obj['items']: return_list.append(strip_folder_and_prefix(pool['name'])) elif response.status_code != 404: Log.error('snatpool', response.text) raise exceptions.SNATQueryException(response.text) return return_list
def get_snataddresses(self, folder='Common'): """ Get SNAT addresses """ folder = str(folder).replace('/', '') request_url = self.bigip.icr_url + '/ltm/snat-translation/' request_url += '?$select=name' if folder: request_filter = 'partition eq ' + folder request_url += '&$filter=' + request_filter response = self.bigip.icr_session.get(request_url, timeout=const.CONNECTION_TIMEOUT) return_list = [] if response.status_code < 400: return_obj = json.loads(response.text) if 'items' in return_obj: for sa in return_obj['items']: return_list.append(strip_folder_and_prefix(sa['name'])) elif response.status_code != 404: Log.error('snat-translation', response.text) raise exceptions.SNATQueryException(response.text) return return_list
def get_snatpool_members(self, name=None, folder='Common'): """ Get SNAT pool members """ if name: folder = str(folder).replace('/', '') request_url = self.bigip.icr_url + '/ltm/snatpool/' request_url += '~' + folder + '~' + name request_url += '/?$select=members' response = self.bigip.icr_session.get( request_url, timeout=const.CONNECTION_TIMEOUT) return_list = [] if response.status_code < 400: return_obj = json.loads(response.text) if 'members' in return_obj: for sa in return_obj['members']: return_list.append(strip_folder_and_prefix(sa)) elif response.status_code != 404: Log.error('snatpool', response.text) raise exceptions.SNATQueryException(response.text) return return_list return None
def get_vlans(self, folder='Common'): """ Get vlans """ request_url = self.bigip.icr_url + '/net/vlan/' request_url += '?$select=name' if folder: folder = str(folder).replace('/', '') request_filter = 'partition eq ' + folder request_url += '&$filter=' + request_filter response = self.bigip.icr_session.get( request_url, timeout=const.CONNECTION_TIMEOUT) return_list = [] if response.status_code < 400: return_obj = json.loads(response.text) if 'items' in return_obj: for vlan in return_obj['items']: return_list.append(strip_folder_and_prefix(vlan['name'])) elif response.status_code != 404: Log.error('VLAN', response.text) raise exceptions.VLANQueryException(response.text) return return_list
def get_monitors(self, name=None, folder='Common'): if name: folder = str(folder).replace('/', '') request_url = self.bigip.icr_url + '/ltm/pool/' request_url += '~' + folder + '~' + name request_url += '?$select=monitor' response = self.bigip.icr_session.get( request_url, timeout=const.CONNECTION_TIMEOUT) if response.status_code < 400: response_obj = json.loads(response.text) monitors = [] if 'monitor' in response_obj: w_split = response_obj['monitor'].split() for w in w_split: if w.startswith('/'): monitors.append(strip_folder_and_prefix(w)) return monitors elif response.status_code != 404: Log.error('pool', response.text) raise exceptions.PoolQueryException(response.text) return []
def get_tunnel_by_description(self, description=None, folder='Common'): """ Get tunnel by description """ folder = str(folder).replace('/', '') if description: request_url = self.bigip.icr_url + '/net/tunnels/tunnel/' if folder: request_filter = 'partition eq ' + folder request_url += '?$filter=' + request_filter response = self.bigip.icr_session.get( request_url, timeout=const.CONNECTION_TIMEOUT) if response.status_code < 400: return_obj = json.loads(response.text) if 'items' in return_obj: for tunnel in return_obj['items']: if tunnel['description'] == description: return strip_folder_and_prefix(tunnel['name']) return None elif response.status_code != 404: Log.error('L2GRE', response.text) raise exceptions.L2GRETunnelQueryException(response.text) return None
def get_tunnel_by_description(self, description=None, folder='Common'): """ Get tunnel by description """ folder = str(folder).replace('/', '') if description: request_url = self.bigip.icr_url + '/net/tunnels/tunnel/' if folder: request_filter = 'partition eq ' + folder request_url += '?$filter=' + request_filter response = self.bigip.icr_session.get( request_url, timeout=const.CONNECTION_TIMEOUT) if response.status_code < 400: return_obj = json.loads(response.text) if 'items' in return_obj: for tunnel in return_obj['items']: if tunnel['description'] == description: return strip_folder_and_prefix(tunnel['name']) return None elif response.status_code != 404: Log.error('VXLAN', response.text) raise exceptions.VXLANQueryException(response.text) return None
def get_vlan(self, name=None, folder='Common'): """ Get NAT vlan """ if name: folder = str(folder).replace('/', '') request_url = self.bigip.icr_url + '/ltm/nat/' request_url += '~' + folder + '~' + name request_url += '/?$select=vlans' response = self.bigip.icr_session.get( request_url, timeout=const.CONNECTION_TIMEOUT) return_vlans = [] if response.status_code < 400: return_obj = json.loads(response.text) if 'vlans' in return_obj: for vlan in return_obj['vlans']: return_vlans.append(strip_folder_and_prefix(vlan)) elif response.status_code != 404: Log.error('nat', response.text) raise exceptions.NATQueryException(response.text) if len(return_vlans) == 1: return_vlans = return_vlans[0] return return_vlans return None
def get_profiles(self, folder='Common'): """ Get tunnel profiles """ folder = str(folder).replace('/', '') request_url = self.bigip.icr_url + '/net/tunnels/vxlan' request_filter = 'partition eq ' + folder request_url += '?$filter=' + request_filter response = self.bigip.icr_session.get( request_url, timeout=const.CONNECTION_TIMEOUT) if response.status_code < 400: return_obj = json.loads(response.text) profile_list = [] if 'items' in return_obj: for profile in return_obj['items']: profile_list.append( strip_folder_and_prefix(profile['name'])) return profile_list else: return None elif response.status_code != 404: Log.error('VXLAN', response.text) raise exceptions.VXLANQueryException(response.text) return None
def get_profiles(self, folder='Common'): """ Get tunnel profiles """ folder = str(folder).replace('/', '') request_url = self.bigip.icr_url + '/net/tunnels/vxlan' request_filter = 'partition eq ' + folder request_url += '?$filter=' + request_filter response = self.bigip.icr_session.get(request_url, timeout=const.CONNECTION_TIMEOUT) if response.status_code < 400: return_obj = json.loads(response.text) profile_list = [] if 'items' in return_obj: for profile in return_obj['items']: profile_list.append( strip_folder_and_prefix(profile['name'])) return profile_list else: return None elif response.status_code != 404: Log.error('VXLAN', response.text) raise exceptions.VXLANQueryException(response.text) return None
def get_selfips(self, folder='Common', vlan=None): """ Get selfips """ folder = str(folder).replace('/', '') request_url = self.bigip.icr_url + '/net/self/' if folder: request_filter = 'partition eq ' + folder request_url += '?$filter=' + request_filter response = self.bigip.icr_session.get( request_url, timeout=const.CONNECTION_TIMEOUT) return_list = [] if response.status_code < 400: return_obj = json.loads(response.text) if 'items' in return_obj: for selfip in return_obj['items']: if vlan and selfip['vlan'] != vlan: continue selfip['name'] = strip_folder_and_prefix(selfip['name']) return_list.append(selfip) elif response.status_code != 404: Log.error('self', response.text) raise exceptions.SelfIPQueryException(response.text) return return_list
def get_selfips(self, folder='Common', vlan=None): """ Get selfips """ folder = str(folder).replace('/', '') request_url = self.bigip.icr_url + '/net/self/' if folder: request_filter = 'partition eq ' + folder request_url += '?$filter=' + request_filter response = self.bigip.icr_session.get(request_url, timeout=const.CONNECTION_TIMEOUT) return_list = [] if response.status_code < 400: return_obj = json.loads(response.text) if 'items' in return_obj: for selfip in return_obj['items']: if vlan and selfip['vlan'] != vlan: continue selfip['name'] = strip_folder_and_prefix(selfip['name']) return_list.append(selfip) elif response.status_code != 404: Log.error('self', response.text) raise exceptions.SelfIPQueryException(response.text) return return_list
def get_tunnels(self, folder='Common'): """ Get tunnels """ folder = str(folder).replace('/', '') request_url = self.bigip.icr_url + '/net/tunnels/tunnel' if folder: request_filter = 'partition eq ' + folder request_url += '?$filter=' + request_filter response = self.bigip.icr_session.get( request_url, timeout=const.CONNECTION_TIMEOUT) if response.status_code < 400: tunnel_list = [] return_obj = json.loads(response.text) if 'items' in return_obj: for tunnel in return_obj['items']: if tunnel['profile'].find('gre') > 0: tunnel_list.append( strip_folder_and_prefix(tunnel['name'])) return tunnel_list else: return None elif response.status_code != 404: Log.error('L2GRE', response.text) exceptions.L2GRETunnelQueryException(response.text) return None
def get_tunnels(self, folder='Common'): """ Get tunnels """ folder = str(folder).replace('/', '') request_url = self.bigip.icr_url + '/net/tunnels/tunnel' if folder: request_filter = 'partition eq ' + folder request_url += '?$filter=' + request_filter response = self.bigip.icr_session.get(request_url, timeout=const.CONNECTION_TIMEOUT) if response.status_code < 400: tunnel_list = [] return_obj = json.loads(response.text) if 'items' in return_obj: for tunnel in return_obj['items']: if tunnel['profile'].find('gre') > 0: tunnel_list.append( strip_folder_and_prefix(tunnel['name'])) return tunnel_list else: return None elif response.status_code != 404: Log.error('L2GRE', response.text) exceptions.L2GRETunnelQueryException(response.text) return None