def get_create_load_balancer_flow(self, topology, listeners=None): """Flow to create a load balancer""" f_name = constants.CREATE_LOADBALANCER_FLOW lb_create_flow = linear_flow.Flow(f_name) lb_create_flow.add( lifecycle_tasks.LoadBalancerIDToErrorOnRevertTask( requires=constants.LOADBALANCER_ID)) # Attaching vThunder to LB in database if topology == constants.TOPOLOGY_ACTIVE_STANDBY: lb_create_flow.add(*self._create_active_standby_topology()) LOG.info("TOPOLOGY ===" + str(topology)) elif topology == constants.TOPOLOGY_SINGLE: lb_create_flow.add(*self._create_single_topology()) LOG.info("TOPOLOGY ===" + str(topology)) else: LOG.error("Unknown topology: %s. Unable to build load balancer.", topology) raise exceptions.InvalidTopology(topology=topology) # IMP: Now creating vThunder config here post_amp_prefix = constants.POST_LB_AMP_ASSOCIATION_SUBFLOW lb_create_flow.add( self.get_post_lb_vthunder_association_flow( post_amp_prefix, topology, mark_active=(not listeners))) lb_create_flow.add( virtual_server_tasks.CreateVirtualServerTask( requires=(constants.LOADBALANCER, a10constants.VTHUNDER))) lb_create_flow.add( vthunder_tasks.WriteMemory(requires=a10constants.VTHUNDER)) return lb_create_flow
def get_create_rack_vthunder_load_balancer_flow(self, vthunder_conf, topology, listeners=None): """Creates a linear flow to create rack vthunder :return: The linear flow for creating a loadbalancer. """ f_name = constants.CREATE_LOADBALANCER_FLOW lb_create_flow = linear_flow.Flow(f_name) lb_create_flow.add( lifecycle_tasks.LoadBalancerIDToErrorOnRevertTask( requires=constants.LOADBALANCER_ID)) lb_create_flow.add( self.vthunder_flows.get_rack_vthunder_for_lb_subflow( vthunder_conf=vthunder_conf, prefix=constants.ROLE_STANDALONE, role=constants.ROLE_STANDALONE)) post_amp_prefix = constants.POST_LB_AMP_ASSOCIATION_SUBFLOW lb_create_flow.add( self.get_post_lb_rack_vthunder_association_flow( post_amp_prefix, topology, mark_active=(not listeners))) lb_create_flow.add( virtual_server_tasks.CreateVirtualServerTask( requires=(constants.LOADBALANCER, a10constants.VTHUNDER), provides=a10constants.STATUS)) return lb_create_flow
def test_CreateVirtualServerTask_execute_create_with_flavor(self): flavor = {"virtual_server": {"arp_disable": 1}} vthunder = copy.deepcopy(VTHUNDER) virtual_server_task = task.CreateVirtualServerTask() virtual_server_task.axapi_client = self.client_mock virtual_server_task.execute(LOADBALANCER, vthunder, flavor_data=flavor) args, kwargs = self.client_mock.slb.virtual_server.create.call_args self.assertEqual(kwargs['virtual_server']['arp_disable'], 1)
def test_CreateVirtualServerTask_execute_create_with_flavor_regex( self, mock_name_expr): mock_name_expr.return_value = {"arp_disable": 0} vthunder = copy.deepcopy(VTHUNDER) virtual_server_task = task.CreateVirtualServerTask() virtual_server_task.axapi_client = self.client_mock virtual_server_task.execute(LOADBALANCER, vthunder, flavor_data={}) args, kwargs = self.client_mock.slb.virtual_server.create.call_args self.assertEqual(kwargs['arp_disable'], 0)
def test_CreateVirtualServerTask_execute_flavor_override_config(self): self.conf.config(group=a10constants.VIRTUAL_SERVER_CONFIG_SECTION, arp_disable=False) flavor = {"virtual_server": {"arp_disable": 1}} vthunder = copy.deepcopy(VTHUNDER) virtual_server_task = task.CreateVirtualServerTask() virtual_server_task.axapi_client = self.client_mock virtual_server_task.execute(LOADBALANCER, vthunder, flavor_data=flavor) args, kwargs = self.client_mock.slb.virtual_server.create.call_args self.assertEqual(kwargs['virtual_server']['arp_disable'], 1)
def get_create_rack_vthunder_load_balancer_flow(self, vthunder_conf, topology, listeners=None): """Flow to create rack load balancer""" f_name = constants.CREATE_LOADBALANCER_FLOW lb_create_flow = linear_flow.Flow(f_name) lb_create_flow.add( lifecycle_tasks.LoadBalancerIDToErrorOnRevertTask( requires=constants.LOADBALANCER_ID)) lb_create_flow.add( database_tasks.ReloadLoadBalancer( requires=constants.LOADBALANCER_ID, provides=constants.LOADBALANCER)) lb_create_flow.add( a10_database_tasks.CheckExistingProjectToThunderMappedEntries( inject={a10constants.VTHUNDER_CONFIG: vthunder_conf}, requires=(constants.LOADBALANCER, a10constants.VTHUNDER_CONFIG), provides=a10constants.VTHUNDER_CONFIG)) lb_create_flow.add( a10_database_tasks.CheckExistingThunderToProjectMappedEntries( requires=(constants.LOADBALANCER, a10constants.VTHUNDER_CONFIG))) lb_create_flow.add( self.vthunder_flows.get_rack_vthunder_for_lb_subflow( vthunder_conf=a10constants.VTHUNDER_CONFIG, prefix=constants.ROLE_STANDALONE, role=constants.ROLE_STANDALONE)) post_amp_prefix = constants.POST_LB_AMP_ASSOCIATION_SUBFLOW lb_create_flow.add( self.get_post_lb_rack_vthunder_association_flow( post_amp_prefix, topology, mark_active=(not listeners))) lb_create_flow.add( a10_database_tasks.GetFlavorData( rebind={a10constants.LB_RESOURCE: constants.LOADBALANCER}, provides=constants.FLAVOR_DATA)) lb_create_flow.add( nat_pool_tasks.NatPoolCreate(requires=(constants.LOADBALANCER, a10constants.VTHUNDER, constants.FLAVOR_DATA))) lb_create_flow.add( virtual_server_tasks.CreateVirtualServerTask( requires=(constants.LOADBALANCER, a10constants.VTHUNDER, constants.FLAVOR_DATA), provides=a10constants.STATUS)) lb_create_flow.add( vthunder_tasks.WriteMemory(requires=a10constants.VTHUNDER)) lb_create_flow.add( a10_database_tasks.SetThunderUpdatedAt( requires=a10constants.VTHUNDER)) return lb_create_flow
def test_CreateVirtualServerTask_revert(self): mock_load_balancer = task.CreateVirtualServerTask() mock_load_balancer.axapi_client = self.client_mock mock_load_balancer.revert(LOADBALANCER, VTHUNDER) self.client_mock.slb.virtual_server.delete.assert_called_with( LOADBALANCER.id)
def test_revert_create_virtual_server_task(self): client_mock = mock.Mock() mock_load_balancer = task.CreateVirtualServerTask() mock_load_balancer.axapi_client = client_mock mock_load_balancer.revert(LB, VTHUNDER) client_mock.slb.virtual_server.delete.assert_called_with(LB.id)