コード例 #1
0
    def get_rack_vthunder_create_member_flow(self):
        """Create a flow to create a rack vthunder member

        :returns: The flow for creating a rack vthunder member
        """
        create_member_flow = linear_flow.Flow(constants.CREATE_MEMBER_FLOW)
        create_member_flow.add(
            lifecycle_tasks.MemberToErrorOnRevertTask(requires=[
                constants.MEMBER, constants.LISTENERS, constants.LOADBALANCER,
                constants.POOL
            ]))
        create_member_flow.add(
            database_tasks.MarkMemberPendingCreateInDB(
                requires=constants.MEMBER))
        create_member_flow.add(
            a10_database_tasks.GetVThunderByLoadBalancer(
                requires=constants.LOADBALANCER,
                provides=a10constants.VTHUNDER))
        create_member_flow.add(
            vthunder_tasks.SetupDeviceNetworkMap(
                requires=a10constants.VTHUNDER,
                provides=a10constants.VTHUNDER))
        create_member_flow.add(self.handle_vrid_for_member_subflow())
        if CONF.a10_global.network_type == 'vlan':
            create_member_flow.add(
                vthunder_tasks.TagInterfaceForMember(
                    requires=[constants.MEMBER, a10constants.VTHUNDER]))
        create_member_flow.add(
            a10_database_tasks.CountMembersWithIP(
                requires=constants.MEMBER,
                provides=a10constants.MEMBER_COUNT_IP))
        create_member_flow.add(
            a10_database_tasks.GetFlavorData(
                rebind={a10constants.LB_RESOURCE: constants.LOADBALANCER},
                provides=constants.FLAVOR))
        create_member_flow.add(self.get_create_member_snat_pool_subflow())
        create_member_flow.add(
            server_tasks.MemberCreate(requires=(constants.MEMBER,
                                                a10constants.VTHUNDER,
                                                constants.POOL,
                                                a10constants.MEMBER_COUNT_IP,
                                                constants.FLAVOR)))
        create_member_flow.add(
            database_tasks.MarkMemberActiveInDB(requires=constants.MEMBER))
        create_member_flow.add(
            database_tasks.MarkPoolActiveInDB(requires=constants.POOL))
        create_member_flow.add(
            database_tasks.MarkLBAndListenersActiveInDB(
                requires=(constants.LOADBALANCER, constants.LISTENERS)))
        create_member_flow.add(
            vthunder_tasks.WriteMemory(requires=a10constants.VTHUNDER))
        create_member_flow.add(
            a10_database_tasks.SetThunderUpdatedAt(
                requires=a10constants.VTHUNDER))
        return create_member_flow
コード例 #2
0
    def get_rack_vthunder_update_member_flow(self):
        """Flow to update a member in Thunder devices

        :returns: The flow for updating a member
        """
        update_member_flow = linear_flow.Flow(constants.UPDATE_MEMBER_FLOW)
        update_member_flow.add(
            lifecycle_tasks.MemberToErrorOnRevertTask(requires=[
                constants.MEMBER, constants.LISTENERS, constants.LOADBALANCER,
                constants.POOL
            ]))
        update_member_flow.add(
            database_tasks.MarkMemberPendingUpdateInDB(
                requires=constants.MEMBER))
        update_member_flow.add(
            a10_database_tasks.GetVThunderByLoadBalancer(
                requires=constants.LOADBALANCER,
                provides=a10constants.VTHUNDER))
        update_member_flow.add(
            vthunder_tasks.SetupDeviceNetworkMap(
                requires=a10constants.VTHUNDER,
                provides=a10constants.VTHUNDER))
        # Handle VRID settings
        update_member_flow.add(self.handle_vrid_for_member_subflow())
        update_member_flow.add(
            a10_database_tasks.GetFlavorData(
                rebind={a10constants.LB_RESOURCE: constants.LOADBALANCER},
                provides=constants.FLAVOR))
        update_member_flow.add(
            server_tasks.MemberUpdate(requires=(constants.MEMBER,
                                                a10constants.VTHUNDER,
                                                constants.POOL,
                                                constants.FLAVOR)))
        update_member_flow.add(
            database_tasks.UpdateMemberInDB(
                requires=[constants.MEMBER, constants.UPDATE_DICT]))
        if CONF.a10_global.network_type == 'vlan':
            update_member_flow.add(
                vthunder_tasks.TagInterfaceForMember(
                    requires=[constants.MEMBER, a10constants.VTHUNDER]))
        update_member_flow.add(
            database_tasks.MarkMemberActiveInDB(requires=constants.MEMBER))
        update_member_flow.add(
            database_tasks.MarkPoolActiveInDB(requires=constants.POOL))
        update_member_flow.add(
            database_tasks.MarkLBAndListenersActiveInDB(
                requires=[constants.LOADBALANCER, constants.LISTENERS]))
        update_member_flow.add(
            vthunder_tasks.WriteMemory(requires=a10constants.VTHUNDER))
        update_member_flow.add(
            a10_database_tasks.SetThunderUpdatedAt(
                requires=a10constants.VTHUNDER))
        return update_member_flow
コード例 #3
0
 def test_TagInterfaceForMember_revert_log_warning_no_subnet_id(self):
     member = self._mock_member()
     member.id = "1234"
     member.subnet_id = None
     task_path = "a10_octavia.controller.worker.tasks.vthunder_tasks"
     log_message = str("Subnet id argument was not specified during "
                       "issuance of create command/API call for member %s. "
                       "Skipping TagInterfaceForMember task")
     expected_log = [
         "WARNING:{}:{}".format(task_path, log_message % member.id)
     ]
     mock_task = task.TagInterfaceForMember()
     with self.assertLogs(task_path, level='WARN') as cm:
         mock_task.revert(member, VTHUNDER)
         self.assertEqual(expected_log, cm.output)
コード例 #4
0
 def test_TagInterfaceForMember_create_vlan_ve_with_neutron_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]
     member = self._mock_member()
     mock_task = task.TagInterfaceForMember()
     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()
     mock_task._network_driver.neutron_client.create_port.side_effect = Exception
     self.assertRaises(Exception,
                       lambda: mock_task.execute(member, mock_thunder))
コード例 #5
0
 def test_TagInterfaceForMember_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]
     member = self._mock_member()
     mock_task = task.TagInterfaceForMember()
     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(member, 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)
コード例 #6
0
 def test_TagInterfaceForMember_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]
     member = self._mock_member()
     mock_task = task.TagInterfaceForMember()
     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()
     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(member, 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'])