def test_delete_vrid_entry_with_multi_vrids(self): VRID_1 = data_models.VRID(id=2) mock_vrid_entry = task.DeleteMultiVRIDEntry() mock_vrid_entry.vrid_repo = mock.Mock() mock_vrid_entry.execute([VRID, VRID_1]) mock_vrid_entry.vrid_repo.delete_batch.assert_called_once_with( mock.ANY, ids=[VRID.id, VRID_1.id])
def _add_vrid_to_list(self, vrid_list, subnet, owner): vrid_value = CONF.a10_global.vrid filtered_vrid_list = list( filter(lambda x: x.subnet_id == subnet.id, vrid_list)) if not filtered_vrid_list: vrid_list.append( data_models.VRID(id=uuidutils.generate_uuid(), vrid=vrid_value, owner=owner, vrid_port_id=None, vrid_floating_ip=None, subnet_id=subnet.id))
VTHUNDER = data_models.VThunder() HW_THUNDER = data_models.HardwareThunder( project_id=a10constants.MOCK_PROJECT_ID, device_name="rack_thunder_1", undercloud=True, username="******", password="******", ip_address="10.10.10.10", partition_name="shared") LB = o_data_models.LoadBalancer(id=a10constants.MOCK_LOAD_BALANCER_ID, flavor_id=a10constants.MOCK_FLAVOR_ID) FIXED_IP = n_data_models.FixedIP(ip_address='10.10.10.10') PORT = n_data_models.Port(id=uuidutils.generate_uuid(), fixed_ips=[FIXED_IP]) VRID = data_models.VRID(id=1, vrid=0, owner=a10constants.MOCK_PROJECT_ID, vrid_port_id=uuidutils.generate_uuid(), vrid_floating_ip='10.0.12.32') LISTENER = o_data_models.Listener(id=a10constants.MOCK_LISTENER_ID, load_balancer=LB) POOL = o_data_models.Pool(id=a10constants.MOCK_POOL_ID, load_balancer=LB) HM = o_data_models.HealthMonitor(id=a10constants, pool=POOL) MEMBER_1 = o_data_models.Member(id=uuidutils.generate_uuid(), project_id=a10constants.MOCK_PROJECT_ID, subnet_id=a10constants.MOCK_SUBNET_ID, pool=POOL) MEMBER_2 = o_data_models.Member(id=uuidutils.generate_uuid(), project_id=a10constants.MOCK_PROJECT_ID, subnet_id=a10constants.MOCK_SUBNET_ID_2, pool=POOL) FLAVOR_PROFILE = o_data_models.FlavorProfile(
from oslo_config import fixture as oslo_fixture from octavia.common import data_models as o_data_models from octavia.network import data_models as o_net_data_models from a10_octavia.common import config_options from a10_octavia.common import data_models from a10_octavia.controller.worker.tasks import a10_network_tasks from a10_octavia.tests.common import a10constants from a10_octavia.tests.unit import base MEMBER = o_data_models.Member(subnet_id=a10constants.MOCK_SUBNET_ID) VTHUNDER = data_models.VThunder() SUBNET = o_net_data_models.Subnet() PORT = o_net_data_models.Port() VRID = data_models.VRID() VRID_VALUE = 0 SUBNET_1 = o_net_data_models.Subnet(id=a10constants.MOCK_SUBNET_ID) VRID_1 = data_models.VRID(id=1, subnet_id=a10constants.MOCK_SUBNET_ID) NAT_POOL = data_models.NATPool(port_id=a10constants.MOCK_PORT_ID) NAT_FLAVOR = { "pool_name": "p1", "start_address": "1.1.1.1", "end_address": "1.1.1.2" } HW_THUNDER = data_models.HardwareThunder( project_id=a10constants.MOCK_PROJECT_ID, device_name="rack_thunder_1", undercloud=True, username="******", password="******",
def execute(self, vthunder, lb_resource, vrid_list, subnet): """ :param vthunder: :param lb_resource: Can accept LB or member :param vrid_list: VRID object list for LB resource's project. :param subnet: subnet of the resource in question, will be helpful if there is no VRID object present for the provided subnet then is should create new VRID floating IP instead of updating existing(delete + create -> update) :return: return the update list of VRID object, If empty the need to remove all VRID objects from DB else need update existing ones. """ vrid_floating_ips = [] update_vrid_flag = False vrid_value = CONF.a10_global.vrid conf_floating_ip = a10_utils.get_vrid_floating_ip_for_project( lb_resource.project_id) prev_vrid_value = copy.deepcopy( vrid_list[0].vrid) if vrid_list else None if conf_floating_ip: for vr in vrid_list: if vr.subnet_id == subnet.id: break else: vrid_list.append( data_models.VRID(vrid=vrid_value, project_id=lb_resource.project_id, vrid_port_id=None, vrid_floating_ip=None, subnet_id=subnet.id)) if conf_floating_ip.lower() == 'dhcp': for vrid in vrid_list: subnet = self.network_driver.get_subnet(vrid.subnet_id) subnet_ip, subnet_mask = a10_utils.get_net_info_from_cidr( subnet.cidr) vrid.vrid = vrid_value if not a10_utils.check_ip_in_subnet_range( vrid.vrid_floating_ip, subnet_ip, subnet_mask): try: # delete existing port associated to vrid in # question. if vrid.vrid_port_id: self.network_driver.delete_port( vrid.vrid_port_id) fip_obj = self.network_driver.create_port( subnet.network_id, subnet.id) self.added_fip_ports.append(fip_obj) vrid.vrid_floating_ip = fip_obj.fixed_ips[ 0].ip_address vrid.vrid_port_id = fip_obj.id update_vrid_flag = True except Exception as e: LOG.error( "Failed to create neutron port for lb_resource: %s", lb_resource.id) raise e vrid_floating_ips.append(vrid.vrid_floating_ip) else: for vrid in vrid_list: subnet = self.network_driver.get_subnet(vrid.subnet_id) conf_floating_ip = a10_utils.get_vrid_floating_ip_for_project( lb_resource.project_id) conf_floating_ip = a10_utils.get_patched_ip_address( conf_floating_ip, subnet.cidr) vrid.vrid = vrid_value if conf_floating_ip != vrid.vrid_floating_ip: try: # delete existing port associated to vrid in # question. if vrid.vrid_port_id: self.network_driver.delete_port( vrid.vrid_port_id) fip_obj = self.network_driver.create_port( subnet.network_id, subnet.id, fixed_ip=conf_floating_ip) self.added_fip_ports.append(fip_obj) vrid.vrid_floating_ip = fip_obj.fixed_ips[ 0].ip_address vrid.vrid_port_id = fip_obj.id update_vrid_flag = True except Exception as e: LOG.error( "Failed to create neutron port for loadbalancer resource: %s with " "floating IP %s", lb_resource.id, conf_floating_ip) raise e vrid_floating_ips.append(vrid.vrid_floating_ip) else: for vrid in vrid_list: try: self.network_driver.delete_port(vrid.vrid_port_id) except Exception as e: LOG.error("Failed to delete neutron port for VRID FIP: %s", vrid.vrid_floating_ip) raise e update_vrid_flag = True vrid_list = [] if (prev_vrid_value is not None) and (prev_vrid_value != vrid_value): self.update_device_vrid_fip(vthunder, [], prev_vrid_value) self.update_device_vrid_fip(vthunder, vrid_floating_ips, vrid_value) elif update_vrid_flag: self.update_device_vrid_fip(vthunder, vrid_floating_ips, vrid_value) return vrid_list
from octavia.common import data_models as o_data_models from octavia.network import data_models as o_net_data_models from a10_octavia.common import config_options from a10_octavia.common import data_models from a10_octavia.common import exceptions from a10_octavia.controller.worker.tasks import a10_network_tasks from a10_octavia.tests.common import a10constants from a10_octavia.tests.unit import base MEMBER = o_data_models.Member() VTHUNDER = data_models.VThunder() SUBNET = o_net_data_models.Subnet() PORT = o_net_data_models.Port() VRID = data_models.VRID() VRID_VALUE = 0 class MockIP(object): def __init__(self, ip_address): self.ip_address = ip_address class TestNetworkTasks(base.BaseTaskTestCase): def setUp(self): super(TestNetworkTasks, self).setUp() imp.reload(a10_network_tasks) patcher = mock.patch( 'a10_octavia.controller.worker.tasks.a10_network_tasks.BaseNetworkTask.network_driver' )