Ejemplo n.º 1
0
 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])
Ejemplo n.º 2
0
 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))
Ejemplo n.º 3
0
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="******",
Ejemplo n.º 5
0
    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'
        )