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)
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
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))
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)
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