예제 #1
0
 def test_TagInterfaceForLB_create_trunk_vlan_ve_with_static_ip(self):
     intf = a10_utils.convert_interface_to_data_model(TRUNK_INTERFACE)
     device1_network_map = a10_data_models.DeviceNetworkMap(
         vcs_device_id=1, trunk_interfaces=[intf])
     mock_thunder = copy.deepcopy(VTHUNDER)
     mock_thunder.device_network_map = [device1_network_map]
     lb = self._mock_lb()
     mock_task = task.TagInterfaceForLB()
     self._mock_tag_task(mock_task)
     mock_task.get_vlan_id.return_value = VE_IP_VLAN_ID
     mock_task._subnet_ip = VE_IP_SUBNET_MASK[0]
     mock_task._subnet_mask = VE_IP_SUBNET_MASK[1]
     mock_task._subnet.cidr = VE_IP_SUBNET_MASK[2]
     self.client_mock.interface.ethernet.get.return_value = ETH_DATA
     self.client_mock.vlan.exists.return_value = False
     mock_task._network_driver.neutron_client.create_port = mock.Mock()
     mock_task._network_driver.get_network = mock.Mock()
     mock_task._network_driver.get_network.return_value = NETWORK_12
     mock_task._network_driver.list_networks = mock.Mock()
     mock_task._network_driver.list_networks.return_value = [NETWORK_12]
     mock_task.execute(lb, mock_thunder)
     self.client_mock.vlan.create.assert_called_with(
         VE_IP_VLAN_ID, tagged_trunks=[TAG_TRUNK_INTERFACE], veth=True)
     self.client_mock.interface.ve.create.assert_called_with(
         VE_IP_VLAN_ID,
         ip_address=STATIC_VE_IP,
         ip_netmask="255.255.255.0",
         enable=True)
예제 #2
0
 def test_TagInterfaceForLB_create_vlan_ve_with_dhcp(self):
     intf = a10_utils.convert_interface_to_data_model(ETHERNET_INTERFACE)
     device1_network_map = a10_data_models.DeviceNetworkMap(
         vcs_device_id=1, ethernet_interfaces=[intf])
     mock_thunder = copy.deepcopy(VTHUNDER)
     mock_thunder.device_network_map = [device1_network_map]
     lb = self._mock_lb()
     mock_task = task.TagInterfaceForLB()
     self._mock_tag_task(mock_task)
     self.client_mock.interface.ethernet.get.return_value = ETH_DATA
     self.client_mock.vlan.exists.return_value = False
     mock_task._network_driver.neutron_client.create_port = mock.Mock()
     utils.convert_port_dict_to_model = mock.Mock()
     mock_task._network_driver.get_network = mock.Mock()
     mock_task._network_driver.get_network.return_value = NETWORK_11
     mock_task._network_driver.list_networks = mock.Mock()
     mock_task._network_driver.list_networks.return_value = [NETWORK_11]
     mock_task.execute(lb, mock_thunder)
     self.client_mock.vlan.create.assert_called_with(
         VLAN_ID, tagged_eths=[TAG_INTERFACE], veth=True)
     args, kwargs = mock_task._network_driver.neutron_client.create_port.call_args
     self.assertIn('port', args[0])
     port = args[0]['port']
     fixed_ip = port['fixed_ips'][0]
     self.assertEqual(VE_IP, fixed_ip['ip_address'])
    def get_post_lb_rack_vthunder_association_flow(self,
                                                   prefix,
                                                   topology,
                                                   mark_active=True):
        """Flow to manage networking after rack lb creation"""

        sf_name = prefix + '-' + constants.POST_LB_AMP_ASSOCIATION_SUBFLOW
        post_create_lb_flow = linear_flow.Flow(sf_name)
        post_create_lb_flow.add(
            vthunder_tasks.SetupDeviceNetworkMap(
                requires=a10constants.VTHUNDER,
                provides=a10constants.VTHUNDER))
        post_create_lb_flow.add(
            database_tasks.ReloadLoadBalancer(
                name=sf_name + '-' + constants.RELOAD_LB_AFTER_AMP_ASSOC,
                requires=constants.LOADBALANCER_ID,
                provides=constants.LOADBALANCER))
        post_create_lb_flow.add(
            database_tasks.UpdateLoadbalancerInDB(
                requires=[constants.LOADBALANCER, constants.UPDATE_DICT]))
        post_create_lb_flow.add(self.handle_vrid_for_loadbalancer_subflow())
        if CONF.a10_global.network_type == 'vlan':
            post_create_lb_flow.add(
                vthunder_tasks.TagInterfaceForLB(
                    requires=[constants.LOADBALANCER, a10constants.VTHUNDER]))
        if mark_active:
            post_create_lb_flow.add(
                database_tasks.MarkLBActiveInDB(
                    name=sf_name + '-' + constants.MARK_LB_ACTIVE_INDB,
                    requires=constants.LOADBALANCER))
        return post_create_lb_flow
    def get_update_load_balancer_flow(self):
        """Flow to update load balancer."""

        update_LB_flow = linear_flow.Flow(constants.UPDATE_LOADBALANCER_FLOW)
        update_LB_flow.add(
            lifecycle_tasks.LoadBalancerToErrorOnRevertTask(
                requires=constants.LOADBALANCER))
        update_LB_flow.add(
            a10_database_tasks.GetVThunderByLoadBalancer(
                requires=constants.LOADBALANCER,
                provides=a10constants.VTHUNDER))
        update_LB_flow.add(
            a10_database_tasks.MarkVThunderStatusInDB(
                requires=a10constants.VTHUNDER,
                inject={"status": constants.PENDING_UPDATE}))
        update_LB_flow.add(
            vthunder_tasks.SetupDeviceNetworkMap(
                requires=a10constants.VTHUNDER,
                provides=a10constants.VTHUNDER))
        update_LB_flow.add(
            network_tasks.ApplyQos(requires=(constants.LOADBALANCER,
                                             constants.UPDATE_DICT)))
        # update_LB_flow.add(amphora_driver_tasks.ListenersUpdate(
        #    requires=[constants.LOADBALANCER, constants.LISTENERS]))
        # post_create_lb_flow.add(handle_vrid_for_loadbalancer_subflow())
        update_LB_flow.add(self.handle_vrid_for_loadbalancer_subflow())
        update_LB_flow.add(
            a10_database_tasks.GetFlavorData(
                rebind={a10constants.LB_RESOURCE: constants.LOADBALANCER},
                provides=constants.FLAVOR_DATA))
        update_LB_flow.add(
            virtual_server_tasks.UpdateVirtualServerTask(
                requires=(constants.LOADBALANCER, a10constants.VTHUNDER,
                          constants.FLAVOR_DATA)))
        update_LB_flow.add(
            database_tasks.UpdateLoadbalancerInDB(
                requires=[constants.LOADBALANCER, constants.UPDATE_DICT]))
        if CONF.a10_global.network_type == 'vlan':
            update_LB_flow.add(
                vthunder_tasks.TagInterfaceForLB(
                    requires=[constants.LOADBALANCER, a10constants.VTHUNDER]))
        update_LB_flow.add(
            database_tasks.MarkLBActiveInDB(requires=constants.LOADBALANCER))
        update_LB_flow.add(
            vthunder_tasks.WriteMemory(requires=a10constants.VTHUNDER))
        update_LB_flow.add(
            a10_database_tasks.MarkVThunderStatusInDB(
                name="pending_update_to_active",
                requires=a10constants.VTHUNDER,
                inject={"status": constants.ACTIVE}))
        update_LB_flow.add(
            a10_database_tasks.SetThunderUpdatedAt(
                requires=a10constants.VTHUNDER))
        return update_LB_flow
예제 #5
0
 def test_TagInterfaceForLB_create_vlan_ve_with_axapi_exception(self):
     intf = a10_utils.convert_interface_to_data_model(ETHERNET_INTERFACE)
     device1_network_map = a10_data_models.DeviceNetworkMap(
         vcs_device_id=1, ethernet_interfaces=[intf])
     mock_thunder = copy.deepcopy(VTHUNDER)
     mock_thunder.device_network_map = [device1_network_map]
     lb = self._mock_lb()
     mock_task = task.TagInterfaceForLB()
     self._mock_tag_task(mock_task)
     self.client_mock.interface.ethernet.get.return_value = ETH_DATA
     self.client_mock.vlan.exists.side_effect = Exception
     self.assertRaises(Exception,
                       lambda: mock_task.execute(lb, mock_thunder))
예제 #6
0
 def test_TagInterfaceForLB_revert_created_vlan(self):
     intf = a10_utils.convert_interface_to_data_model(ETHERNET_INTERFACE)
     device1_network_map = a10_data_models.DeviceNetworkMap(
         vcs_device_id=1, ethernet_interfaces=[intf])
     mock_thunder = copy.deepcopy(VTHUNDER)
     mock_thunder.device_network_map = [device1_network_map]
     lb = self._mock_lb()
     mock_task = task.TagInterfaceForLB()
     self._mock_tag_task(mock_task)
     mock_task.axapi_client.slb.virtual_server.get.return_value = DEL_VS_LIST
     mock_task.axapi_client.slb.server.get.return_value = DEL_SERVER_LIST
     mock_task._network_driver.get_port_id_from_ip = mock.Mock()
     mock_task._network_driver.neutron_client.delete_port = mock.Mock()
     mock_task._network_driver.get_port_id_from_ip.return_value = DEL_PORT_ID
     mock_task.revert(lb, mock_thunder)
     self.client_mock.vlan.delete.assert_called_with(VLAN_ID)
     mock_task._network_driver.neutron_client.delete_port.assert_called_with(
         DEL_PORT_ID)
예제 #7
0
    def get_update_load_balancer_flow(self):
        """Flow to update load balancer."""

        update_LB_flow = linear_flow.Flow(constants.UPDATE_LOADBALANCER_FLOW)
        update_LB_flow.add(
            lifecycle_tasks.LoadBalancerToErrorOnRevertTask(
                requires=constants.LOADBALANCER))
        update_LB_flow.add(
            a10_database_tasks.GetVThunderByLoadBalancer(
                requires=constants.LOADBALANCER,
                provides=a10constants.VTHUNDER))
        update_LB_flow.add(
            a10_database_tasks.MarkVThunderStatusInDB(
                requires=a10constants.VTHUNDER,
                inject={"status": constants.PENDING_UPDATE}))
        update_LB_flow.add(
            vthunder_tasks.SetupDeviceNetworkMap(
                requires=a10constants.VTHUNDER,
                provides=a10constants.VTHUNDER))
        update_LB_flow.add(
            network_tasks.ApplyQos(requires=(constants.LOADBALANCER,
                                             constants.UPDATE_DICT)))
        # update_LB_flow.add(amphora_driver_tasks.ListenersUpdate(
        #    requires=[constants.LOADBALANCER, constants.LISTENERS]))
        update_LB_flow.add(
            virtual_server_tasks.UpdateVirtualServerTask(
                requires=(constants.LOADBALANCER, a10constants.VTHUNDER)))
        update_LB_flow.add(
            database_tasks.UpdateLoadbalancerInDB(
                requires=[constants.LOADBALANCER, constants.UPDATE_DICT]))
        if CONF.a10_global.network_type == 'vlan':
            update_LB_flow.add(
                vthunder_tasks.TagInterfaceForLB(
                    requires=[constants.LOADBALANCER, a10constants.VTHUNDER]))
        update_LB_flow.add(
            database_tasks.MarkLBActiveInDB(requires=constants.LOADBALANCER))
        update_LB_flow.add(
            vthunder_tasks.WriteMemory(requires=a10constants.VTHUNDER))
        return update_LB_flow