def get_create_pool_flow(self): """Create a flow to create a pool :returns: The flow for creating a pool """ create_pool_flow = linear_flow.Flow(constants.CREATE_POOL_FLOW) create_pool_flow.add( lifecycle_tasks.PoolToErrorOnRevertTask(requires=[ constants.POOL, constants.LISTENERS, constants.LOADBALANCER ])) create_pool_flow.add( database_tasks.MarkPoolPendingCreateInDB(requires=constants.POOL)) create_pool_flow.add( a10_database_tasks.GetVThunderByLoadBalancer( requires=constants.LOADBALANCER, provides=a10constants.VTHUNDER)) create_pool = service_group_tasks.PoolCreate( requires=[constants.POOL, a10constants.VTHUNDER], provides=constants.POOL) create_pool_flow.add(*self._get_sess_pers_subflow(create_pool)) create_pool_flow.add( virtual_port_tasks.ListenerUpdateForPool(requires=[ constants.LOADBALANCER, constants.LISTENER, a10constants.VTHUNDER ])) create_pool_flow.add( database_tasks.MarkPoolActiveInDB(requires=constants.POOL)) create_pool_flow.add( database_tasks.MarkLBAndListenersActiveInDB( requires=[constants.LOADBALANCER, constants.LISTENERS])) create_pool_flow.add( vthunder_tasks.WriteMemory(requires=a10constants.VTHUNDER)) return create_pool_flow
def test_PoolCreate_execute_create_with_flavor(self): vthunder = copy.deepcopy(VTHUNDER) service_group_task = task.PoolCreate() service_group_task.axapi_client = self.client_mock flavor = {"service_group": {"health_check_disable": 1}} expect_kwargs = {"health_check_disable": 1} service_group_task.execute(POOL, vthunder, flavor=flavor) args, kwargs = self.client_mock.slb.service_group.create.call_args self.assertEqual(kwargs['service_group'], expect_kwargs)
def test_create_pool_with_protocol_proxy(self): mock_pool = task.PoolCreate() mock_pool.axapi_client = self.client_mock mock_pool.CONF = self.conf pool = o_data_models.Pool( id=a10constants.MOCK_POOL_ID, protocol=o_constants.PROTOCOL_PROXY, lb_algorithm=o_constants.LB_ALGORITHM_SOURCE_IP) self.assertRaises(exceptions.ProviderUnsupportedOptionError, mock_pool.execute, pool, VTHUNDER)
def _create_service_group_task_with_template(self, config_template, use_shared=False): service_group_task = task.PoolCreate() service_group_task.axapi_client = self.client_mock self.conf.config(group=a10constants.A10_GLOBAL_CONF_SECTION, use_shared_for_template_lookup=use_shared) self.conf.config(group=a10constants.SERVICE_GROUP_CONF_SECTION, **config_template) service_group_task.CONF = self.conf return service_group_task
def test_PoolCreate_execute_create_with_flavor_over_conf(self): vthunder = copy.deepcopy(VTHUNDER) service_group_task = task.PoolCreate() service_group_task.axapi_client = self.client_mock conf = {'template_server': 'my_server_template'} self.conf.config(group=a10constants.SERVICE_GROUP_CONF_SECTION, **conf) flavor = {"service_group": {"template_server": 'tmpl1'}} expect_kwargs = {"template_server": 'tmpl1'} service_group_task.execute(POOL, vthunder, flavor=flavor) args, kwargs = self.client_mock.slb.service_group.create.call_args self.assertEqual(kwargs['service_group'], expect_kwargs)
def get_create_pool_flow(self, topology): """Create a flow to create a pool :returns: The flow for creating a pool """ create_pool_flow = linear_flow.Flow(constants.CREATE_POOL_FLOW) create_pool_flow.add( lifecycle_tasks.PoolToErrorOnRevertTask(requires=[ constants.POOL, constants.LISTENERS, constants.LOADBALANCER ])) create_pool_flow.add( vthunder_tasks.VthunderInstanceBusy( requires=a10constants.COMPUTE_BUSY)) create_pool_flow.add( database_tasks.MarkPoolPendingCreateInDB(requires=constants.POOL)) create_pool_flow.add( a10_database_tasks.GetVThunderByLoadBalancer( requires=constants.LOADBALANCER, provides=a10constants.VTHUNDER)) if topology == constants.TOPOLOGY_ACTIVE_STANDBY: create_pool_flow.add( vthunder_tasks.GetMasterVThunder( name=a10constants.GET_MASTER_VTHUNDER, requires=a10constants.VTHUNDER, provides=a10constants.VTHUNDER)) create_pool_flow.add( a10_database_tasks.GetFlavorData( rebind={a10constants.LB_RESOURCE: constants.POOL}, provides=constants.FLAVOR)) create_pool = service_group_tasks.PoolCreate( requires=[constants.POOL, a10constants.VTHUNDER, constants.FLAVOR], provides=constants.POOL) create_pool_flow.add(*self._get_sess_pers_subflow(create_pool)) create_pool_flow.add( virtual_port_tasks.ListenerUpdateForPool(requires=[ constants.LOADBALANCER, constants.LISTENER, a10constants.VTHUNDER ])) create_pool_flow.add( database_tasks.MarkPoolActiveInDB(requires=constants.POOL)) create_pool_flow.add( database_tasks.MarkLBAndListenersActiveInDB( requires=[constants.LOADBALANCER, constants.LISTENERS])) create_pool_flow.add( vthunder_tasks.WriteMemory(requires=a10constants.VTHUNDER)) create_pool_flow.add( a10_database_tasks.SetThunderUpdatedAt( requires=a10constants.VTHUNDER)) return create_pool_flow
def test_create_lb_algorithm_source_ip_hash_only(self): mock_pool = task.PoolCreate() mock_pool.axapi_client = self.client_mock mock_pool.CONF = self.conf pool = o_data_models.Pool( id=a10constants.MOCK_POOL_ID, protocol=o_constants.PROTOCOL_HTTP, lb_algorithm=o_constants.LB_ALGORITHM_SOURCE_IP) mock_pool.execute(pool, VTHUNDER) self.client_mock.slb.service_group.create.assert_called_with( a10constants.MOCK_POOL_ID, protocol=mock.ANY, lb_method=mock_pool.axapi_client.slb.service_group. SOURCE_IP_HASH_ONLY, service_group_templates=mock.ANY, axapi_args=AXAPI_ARGS)
def test_PoolCreate_execute_create_with_regex_over_regex(self): vthunder = copy.deepcopy(VTHUNDER) service_group_task = task.PoolCreate() service_group_task.axapi_client = self.client_mock flavor = {"service_group": {"health_check_disable": 0}} regex = { "name_expressions": [{ "regex": "sg1", "json": { "health_check_disable": 1 } }] } flavor["service_group"] = regex expect_kwargs = {"health_check_disable": 1} service_group_task.execute(POOL, vthunder, flavor=flavor) args, kwargs = self.client_mock.slb.service_group.create.call_args self.assertEqual(kwargs['service_group'], expect_kwargs)
def test_revert_pool_create_task(self): mock_pool = task.PoolCreate() mock_pool.axapi_client = self.client_mock mock_pool.revert(POOL, VTHUNDER) self.client_mock.slb.service_group.delete.assert_called_with(POOL.id)