def get_virtual_service_insertion(self, folder='Common'):
     virtual_services = []
     vs = self.lb_vs.get_list()
     if len(vs) > 0:
         vd = self.lb_vs.get_destination_v2(vs)
         vn = self.lb_vs.get_wildmask(vs)
         vp = self.lb_vs.get_protocol(vs)
         protocols = {
                      'PROTOCOL_ANY': 'any',
                      'PROTOCOL_TCP': 'tcp',
                      'PROTOCOL_UDP': 'udp',
                      'PROTOCOL_ICMP': 'icmp',
                      'PROTOCOL_SCTP': 'sctp'
                     }
         for i in range(len(vs)):
             name = strip_folder_and_prefix(vs[i])
             address = strip_folder_and_prefix(
                             vd[i]['address']).split('%')[0]
             service = {name: {}}
             service[name]['address'] = address
             service[name]['netmask'] = vn[i]
             service[name]['protocol'] = protocols[vp[i]]
             service[name]['port'] = vd[i]['port']
             virtual_services.append(service)
     return virtual_services
 def http_profile_exists(self, name=None, folder='Common'):
     if name:
         for http_profile in self.lb_vs.get_list():
             if strip_folder_and_prefix(http_profile) == \
                strip_folder_and_prefix(name):
                 return True
         return False
     else:
         return False
 def set_persist_profile(self, name=None, profile_name=None,
                             folder='Common'):
     if self.exists(name=name, folder=folder):
         Log.debug('VirtualServer', 'resetting persistence.')
         self.lb_vs.remove_all_persistence_profiles([name])
         if profile_name.startswith('/Common'):
             profile_name = strip_folder_and_prefix(profile_name)
         try:
             vsp = self.lb_vs.typefactory.create(
             'LocalLB.VirtualServer.VirtualServerPersistence')
             vsp.profile_name = profile_name
             vsp.default_profile = True
             vsp_seq = self.lb_vs.typefactory.create(
             'LocalLB.VirtualServer.VirtualServerPersistenceSequence')
             vsp_seq.values = [vsp]
             vsp_seq_seq = self.lb_vs.typefactory.create(
         'LocalLB.VirtualServer.VirtualServerPersistenceSequenceSequence')
             vsp_seq_seq.values = [vsp_seq]
             Log.debug('VirtualServer', 'adding persistence %s'
                       % profile_name)
             self.lb_vs.add_persistence_profile([name], vsp_seq_seq)
             return True
         except WebFault as wf:
             if "already exists in partition" in str(wf.message):
                 Log.error('VirtualServer',
                 'tried to set source_addr persistence when exists')
             return False
         else:
             raise wf
     else:
         return False
Beispiel #4
0
 def _in_use(self, name=None, folder=None):
     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 remove_profile(self, name=None, profile_name=None,
                    client_context=True, server_context=True,
                    folder='Common'):
     if profile_name.startswith("/Common"):
         profile_name = strip_folder_and_prefix(profile_name)
     if self.virtual_server_has_profile(name=name,
                                        profile_name=profile_name,
                                        client_context=client_context,
                                        server_context=server_context,
                                        folder=folder):
         profile_context = 'PROFILE_CONTEXT_TYPE_ALL'
         if client_context and not server_context:
             profile_context = 'PROFILE_CONTEXT_TYPE_CLIENT'
         elif not client_context and server_context:
             profile_context = 'PROFILE_CONTEXT_TYPE_SERVER'
         vsp = self.lb_vs.typefactory.create(
           'LocalLB.VirtualServer.VirtualServerProfile')
         vsp.profile_name = profile_name
         vsp.profile_context = profile_context
         vsp_seq = self.lb_vs.typefactory.create(
           'LocalLB.VirtualServer.VirtualServerProfileSequence')
         vsp_seq.values = [vsp]
         vsp_seq_seq = self.lb_vs.typefactory.create(
           'LocalLB.VirtualServer.VirtualServerProfileSequenceSequence')
         vsp_seq_seq.values = [vsp_seq]
         self.lb_vs.remove_profile([name], vsp_seq_seq)
         return True
     else:
         return False
Beispiel #6
0
 def _in_use(self, name=None, folder=None):
     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 #7
0
 def get_description(self, name=None, folder='Common'):
     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
Beispiel #8
0
 def get_description(self, name=None, folder="Common"):
     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
Beispiel #9
0
 def get_vlan(self, name=None, folder="Common"):
     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
Beispiel #10
0
 def delete_by_vlan_name(self, vlan_name=None, folder='Common'):
     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
Beispiel #11
0
 def get_vlan(self, name=None, folder='Common'):
     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
Beispiel #12
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('VXLAN', response.text)
             raise exceptions.VXLANQueryException(response.text)
     return None
Beispiel #13
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
 def remove_and_delete_persist_profile(self, name=None,
                                       profile_name=None, folder='Common'):
     if self.exists(name=name, folder=folder):
         persist_profiles = self.lb_vs.get_persistence_profile([name])[0]
         fb_profiles = \
                   self.lb_vs.get_fallback_persistence_profile([name])
         profile_names_to_remove = []
         profiles_to_remove = []
         rules_to_remove = []
         for p in persist_profiles:
             if profile_name:
                 if profile_name.startswith('/Common'):
                     profile_name = strip_folder_and_prefix(profile_name)
                 if profile_name == p['profile_name']:
                     rule_name = \
                 self.lb_persist.get_rule([p['profile_name']])[0]['value']
                     if rule_name:
                         rules_to_remove.append(rule_name)
                     profiles_to_remove.append(p)
                     profile_names_to_remove.append(p['profile_name'])
             else:
                 rule_name = \
                  self.lb_persist.get_rule([p['profile_name']])[0]['value']
                 if rule_name:
                         rules_to_remove.append(rule_name)
                 profiles_to_remove.append(p)
                 if not p['profile_name'].startswith('/Common'):
                     profile_names_to_remove.append(p['profile_name'])
         if len(profiles_to_remove) > 0:
             if len(fb_profiles):
                 self.lb_vs.set_fallback_persistence_profile([name], [None])
             vsp_seq = self.lb_vs.typefactory.create(
              'LocalLB.VirtualServer.VirtualServerPersistenceSequence')
             vsp_seq.values = profiles_to_remove
             vsp_seq_seq = self.lb_vs.typefactory.create(
         'LocalLB.VirtualServer.VirtualServerPersistenceSequenceSequence')
             vsp_seq_seq.values = [vsp_seq]
             self.lb_vs.remove_persistence_profile([name], vsp_seq_seq)
             if len(profile_names_to_remove) > 0:
                 self.lb_persist.delete_profile(profile_names_to_remove)
         if len(rules_to_remove) > 0:
             self.bigip.rule.lb_rule.delete_rule(rules_to_remove)
         return True
     else:
         return False
Beispiel #15
0
    def get_nats(self, folder='Common'):
        folder = str(folder).replace('/', '')
        request_url = self.bigip.icr_url + '/ltm/nat'
        request_url += '?$select=name'
        request_url += '&$filter=partition eq ' + folder

        response = self.bigip.icr_session.get(request_url,
                                              timeout=const.CONNECTION_TIMEOUT)
        nat_names = []
        if response.status_code < 400:
            return_obj = json.loads(response.text)
            if 'items' in return_obj:
                for nat in return_obj['items']:
                    nat_names.append(strip_folder_and_prefix(nat['name']))
        elif response.status_code != 404:
            Log.error('nat', response.text)
            raise exceptions.NATQueryException(response.text)
        return nat_names
 def set_fallback_persist_profile(self, name=None, profile_name=None,
                                  folder='Common'):
     if self.exists(name=name, folder=folder):
         if profile_name.startswith('/Common'):
             profile_name = strip_folder_and_prefix(profile_name)
         try:
             self.lb_vs.set_fallback_persistence_profile([name],
                                                         [profile_name])
             return True
         except WebFault as wf:
             if "already exists in partition" in str(wf.message):
                 Log.error('VirtualServer',
                 'tried to set source_addr persistence when exists')
             return False
         else:
             raise wf
     else:
         return False
 def virtual_server_has_profile(self, name=None, profile_name=None,
                    client_context=True,
                    server_context=True,
                    folder='Common'):
     if self.exists(name=name, folder=folder):
         profile_name = strip_folder_and_prefix(profile_name)
         profiles = self.get_profiles(name=name, folder=folder)
         for profile in profiles:
             if profile_name in profile:
                 if client_context and \
                          profile.get(profile_name)['client_context']:
                     return True
                 if server_context and \
                          profile.get(profile_name)['server_context']:
                     return True
         return False
     else:
         return False
Beispiel #18
0
 def get_vlans(self, folder="Common"):
     folder = str(folder).replace("/", "")
     request_url = self.bigip.icr_url + "/net/vlan/"
     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 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
Beispiel #19
0
 def get_snataddresses(self, folder='Common'):
     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
Beispiel #20
0
 def get_snatpool_members(self, name=None, folder='Common'):
     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
Beispiel #21
0
    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
Beispiel #22
0
 def get_vlans(self, folder='Common'):
     folder = str(folder).replace('/', '')
     request_url = self.bigip.icr_url + '/net/vlan/'
     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 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
Beispiel #23
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 #24
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('VXLAN', response.text)
             raise exceptions.VXLANQueryException(response.text)
     return None
Beispiel #25
0
 def get_profiles(self, folder='Common'):
     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
Beispiel #26
0
 def get_vlan(self, name=None, folder='Common'):
     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, name=None, folder='Common'):
     return_profiles = []
     if self.exists(name=name, folder=folder):
         profiles = self.lb_vs.get_profile([name])[0]
         for profile in profiles:
             p = {}
             profile_name = \
                 strip_folder_and_prefix(profile.profile_name)
             p[profile_name] = {}
             if profile.profile_context == "PROFILE_CONTEXT_TYPE_ALL":
                 p[profile_name]['client_context'] = True
                 p[profile_name]['server_context'] = True
             elif profile.profile_context == "PROFILE_CONTEXT_TYPE_CLIENT":
                 p[profile_name]['client_context'] = True
                 p[profile_name]['server_context'] = False
             elif profile.profile_context == "PROFILE_CONTEXT_TYPE_SERVER":
                 p[profile_name]['client_context'] = False
                 p[profile_name]['server_context'] = True
             p[profile_name]['type'] = "'" + profile.profile_type + "'"
             return_profiles.append(p)
     return return_profiles
Beispiel #28
0
 def get_profiles(self, folder='Common'):
     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
Beispiel #29
0
 def get_vlan(self, name=None, folder='Common'):
     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
Beispiel #30
0
 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 []
Beispiel #31
0
 def exists(self, name=None, folder="Common"):
     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
Beispiel #32
0
 def delete_by_vlan_name(self, vlan_name=None, folder="Common"):
     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
Beispiel #33
0
 def get_tunnels(self, folder='Common'):
     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
Beispiel #34
0
 def exists(self, name=None, folder='Common'):
     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 get_pool(self, name=None, folder='Common'):
     if self.exists(name=name, folder=folder):
         pool_name = self.lb_vs.get_default_pool_name([name])[0]
         return strip_folder_and_prefix(pool_name)
 def get_monitors(self, name=None, folder='Common'):
     monitors = self._get_monitors(name=name, folder=folder)
     if len(monitors) > 0:
         monitors = strip_folder_and_prefix(monitors)
     return monitors