def get_fdb_entry(self, tunnel_name=None, mac=None, folder='Common'): folder = str(folder).replace('/', '') request_url = self.bigip.icr_url + '/net/fdb/tunnel/' request_url += '~' + folder + '~' + tunnel_name response = self.bigip.icr_session.get(request_url, timeout=const.CONNECTION_TIMEOUT) if response.status_code < 400: response_obj = json.loads(response.text) if 'records' in response_obj: if not mac: return_fdbs = [] for fdb in response_obj['records']: fdb['endpoint'] = strip_domain_address(fdb['endpoint']) return_fdbs.append(fdb) return return_fdbs else: for record in response_obj['records']: if record['name'] == mac: record['endpoint'] = strip_domain_address( record['endpoint']) return record elif response.status_code != 404: Log.error('L2GRE', response.text) raise exceptions.L2GRETunnelQueryException(response.text) return []
def _in_use(self, name=None, folder=None): """ Is a self ip using the vlan/tunnel ? """ 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.L2GRETunnelQueryException(response.text) return False
def profile_exists(self, name=None, folder='Common'): folder = str(folder).replace('/', '') request_url = self.bigip.icr_url + '/net/tunnels/gre/' request_url += '~' + folder + '~' + 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('L2GRE', response.text) raise exceptions.L2GRETunnelQueryException(response.text) return False
def get_tunnel_key(self, name=None, folder='Common'): """ Get tunnel key """ folder = str(folder).replace('/', '') request_url = self.bigip.icr_url + '/net/tunnels/tunnel/' request_url += '~' + folder + '~' + name response = self.bigip.icr_session.get(request_url, timeout=const.CONNECTION_TIMEOUT) if response.status_code < 400: return_obj = json.loads(response.text) Log.debug('L2GRE', 'get_tunnel_key got %s' + str(return_obj)) return return_obj['key'] elif response.status_code != 404: Log.error('L2GRE', response.text) exceptions.L2GRETunnelQueryException(response.text) return None
def get_tunnel_folder(self, tunnel_name=None): if tunnel_name: request_url = self.bigip.icr_url + '/net/tunnels/tunnel/' 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['name'] == tunnel_name: return strip_folder_and_prefix(tunnel['partition']) return None elif response.status_code != 404: Log.error('L2GRE', response.text) raise exceptions.L2GRETunnelQueryException(response.text) return None
def delete_tunnel(self, name=None, folder='Common'): """ Delete tunnel """ folder = str(folder).replace('/', '') # delete arp and fdb records for this tunnel first request_url = self.bigip.icr_url + '/net/fdb/tunnel/' request_url += '~' + folder + '~' + name response = self.bigip.icr_session.get(request_url, timeout=const.CONNECTION_TIMEOUT) if response.status_code < 400: response_obj = json.loads(response.text) if const.FDB_POPULATE_STATIC_ARP: if 'records' in response_obj: for record in response_obj['records']: self.bigip.arp.delete_by_mac( mac_address=record['name'], folder=folder) payload = dict() payload['records'] = [] tunnel_link = self.bigip.icr_link(response_obj['selfLink']) response = self.bigip.icr_session.put( tunnel_link, data=json.dumps(payload), timeout=const.CONNECTION_TIMEOUT) response = self.bigip.icr_session.delete(tunnel_link) if response.status_code > 399: Log.error('fdb', response.text) raise exceptions.L2GRETunnelUpdateException(response.text) elif response.status_code != 404: Log.error('fdb', response.text) raise exceptions.L2GRETunnelQueryException(response.text) request_url = self.bigip.icr_url + '/net/tunnels/tunnel/' request_url += '~' + folder + '~' + name response = self.bigip.icr_session.delete( request_url, timeout=const.CONNECTION_TIMEOUT) if response.status_code < 400: return True elif response.status_code == 404: return True else: Log.error('L2GRE', response.text) raise exceptions.L2GRETunnelDeleteException(response.text) return False
def get_fdb_entry(self, tunnel_name=None, mac=None, folder='Common'): """ Add fdb entry for a tunnel """ folder = str(folder).replace('/', '') request_url = self.bigip.icr_url + '/net/fdb/tunnel/' request_url += '~' + folder + '~' + tunnel_name + '?ver=11.5.0' response = self.bigip.icr_session.get(request_url, timeout=const.CONNECTION_TIMEOUT) if response.status_code < 400: response_obj = json.loads(response.text) if 'records' in response_obj: if not mac: return response_obj['records'] else: for record in response_obj['records']: if record['name'] == mac: return record elif response.status_code != 404: Log.error('L2GRE', response.text) raise exceptions.L2GRETunnelQueryException(response.text) return []
def get_tunnel_by_description(self, description=None, folder='Common'): 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_profiles(self, folder='Common'): folder = str(folder).replace('/', '') request_url = self.bigip.icr_url + '/net/tunnels/gre' 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) 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('L2GRE', response.text) raise exceptions.L2GRETunnelQueryException(response.text) return None