Esempio n. 1
0
 def _compare_floatingip_list(self, ri):
     collect_fip = {} 
     floating_ips = self.get_ngfw_floating_ips(ri)        
     for floating_ip in floating_ips:
         collect_fip.update({ngfw_utils.get_floatingip_name(floating_ip['id']):
                             floating_ip['id']})
     
     nat_fip = {}
     floating_ips_list = self._get_all_floating_ips_list()
     nat_name_list = ngfw_utils.parse_xml_name(floating_ips_list,
                                               NAT_NAME_KEY_BEGIN,
                                               NAT_NAME_KEY_END)
     for nat_name in nat_name_list:
         prefix = ngfw_utils.get_dnat_rule_name(ri)
         if nat_name.startswith(prefix):
             nat_fip.update({nat_name.split('_')[-1]:nat_name})
                 
     collect_fip_keys = collect_fip.keys()
     nat_name_list_keys = nat_fip.keys()
     
     need_add = set(collect_fip_keys) - set(nat_name_list_keys)
     need_del = set(nat_name_list_keys) - set(collect_fip_keys)
     
     return (need_add, need_del, collect_fip, nat_fip)
Esempio n. 2
0
 def _config_floating_ips(self, ri, floating_ips_backup):
     floatingip_list = {}        
     for floatingip_id in floating_ips_backup:
         id_prefix = ngfw_utils.get_floatingip_name(floatingip_id)
         floatingip_list.update({id_prefix:floatingip_id})
     floatingip_list_keys = floatingip_list.keys()
     prefix = ngfw_utils.get_dnat_rule_name(ri)
     floating_ips = self.get_ngfw_floating_ips(ri)   
     
     (need_add, need_del, collect_fip, nat_fip) = self._compare_floatingip_list(ri)
     for del_floatingip in need_del:
         if del_floatingip in floatingip_list_keys:
             floatingip = del_floatingip
         else:
             floatingip = None
         #update the nat_server with no_reserve when its last 
         self._del_configure_fip_no_reserve(ri,floatingip, nat_fip[del_floatingip])
         
         #del port if _del_configure_fip_no_reserve dont del port succ
         self._delete_floating_ips(ri, floatingip, nat_fip[del_floatingip])
         
         #del acl rules of the fip
         nat_server_name = '%s_%s' % (prefix, ngfw_utils.get_floatingip_name(del_floatingip))
         self.del_acl_by_fip(nat_server_name)
     
     # add new dnat rules
     for fip in floating_ips:
         LOG.debug(_('_config_floating_ips_add: %s'), fip['id'])
         result = self.plugutil._check_ip_in_ip_pool(fip['floating_ip_address'], self.agent.fip_slb_ip_pool)
         if not result:
             continue
         if ngfw_utils.get_floatingip_name(fip['id']) in need_add:
             nat_server_name = '%s_%s' % (prefix, ngfw_utils.get_floatingip_name(fip['id']))
             floatingIP = fip['floating_ip_address']
             fixedIP = fip['fixed_ip_address']
             
             #configure fip with no_reserve
             is_no_reserve = self._add_configure_fip_no_reserve(fixedIP)
             
             body = ngfw_utils.get_nat_server_static_map(nat_server_name, floatingIP, fixedIP, no_reverse=is_no_reserve)
             LOG.debug(_('_config_floating_ips_add body (%s) (%s)'), nat_server_name, body)
             response = self.rest.rest_api('POST', ngfw_utils.NGFW_URL_NAT_SERVER, body, device_ip=self.director_for_fip)
             
             #update fip status if it handle success
             if response['status'] >= 400:
                 LOG.error(_('_config_floating_ips_add failed floatingIP is: (%s), fixedIP is :(%s),'
                             '(%s) response status is: (%s) ,response body is: (%s)'),
                             ri.router['id'], floatingIP, fixedIP, response['status'], response["body"])
                 fip_statuses = {fip['id']:l3_constants.FLOATINGIP_STATUS_ERROR}
                 self.plugin_rpc.update_floatingip_statuses(
                     self.context, ri.router_id, fip_statuses)
                 LOG.debug(_('update_floatingip_statuses success router_id is:%s , '
                     'fip_statuses is:%s'), ri.router_id, fip_statuses)
                 return False
             else :
                 fip_statuses = {fip['id']:l3_constants.FLOATINGIP_STATUS_ACTIVE}
                 self.plugin_rpc.update_floatingip_statuses(
                     self.context, ri.router_id, fip_statuses)
                 LOG.debug(_('update_floatingip_statuses success router_id is:%s , '
                     'fip_statuses is:%s'), ri.router_id, fip_statuses)
             
             # set acl rules for the fip 
             self.set_acl_by_fip(nat_server_name, fixedIP, floatingIP)
             
             LOG.debug(_('_config_floating_ips success (%s) (%s) (%s)'),
                       ri.router['id'], floatingIP, fixedIP)
     return True