Beispiel #1
0
 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 []
Beispiel #2
0
 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
Beispiel #3
0
    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
Beispiel #4
0
 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
Beispiel #5
0
 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
Beispiel #6
0
    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
Beispiel #7
0
 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 []
Beispiel #8
0
 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
Beispiel #9
0
 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