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): """Creates a flow to update a load balancer. :returns: The flow for update a 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( model_tasks.UpdateAttributes( rebind={constants.OBJECT: constants.LOADBALANCER}, requires=[constants.UPDATE_DICT])) 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( database_tasks.UpdateLoadbalancerInDB( requires=[constants.LOADBALANCER, constants.UPDATE_DICT])) update_LB_flow.add( database_tasks.MarkLBActiveInDB(requires=constants.LOADBALANCER)) return update_LB_flow
def get_post_lb_vthunder_association_flow(self, prefix, topology, mark_active=True): """Flow to manage networking after 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( database_tasks.ReloadLoadBalancer( name=sf_name + '-' + constants.RELOAD_LB_AFTER_AMP_ASSOC, requires=constants.LOADBALANCER_ID, provides=constants.LOADBALANCER)) # IMP: here we will inject network flow new_LB_net_subflow = self.get_new_lb_networking_subflow(topology) post_create_lb_flow.add(new_LB_net_subflow) if topology == constants.TOPOLOGY_ACTIVE_STANDBY: vrrp_subflow = self.vthunder_flows.get_vrrp_subflow(prefix) post_create_lb_flow.add(vrrp_subflow) post_create_lb_flow.add( database_tasks.UpdateLoadbalancerInDB( requires=[constants.LOADBALANCER, constants.UPDATE_DICT])) 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_post_lb_amp_association_flow(self, prefix, topology, mark_active=True): """Reload the loadbalancer and create networking subflows for created/allocated amphorae. :return: Post amphorae association subflow """ # Note: If any task in this flow failed, the created amphorae will be # left ''incorrectly'' allocated to the loadbalancer. Likely, # the get_new_LB_networking_subflow is the most prune to failure # shall deallocate the amphora from its loadbalancer and put it in a # READY state. sf_name = prefix + '-' + constants.POST_LB_AMP_ASSOCIATION_SUBFLOW post_create_LB_flow = linear_flow.Flow(sf_name) post_create_LB_flow.add( database_tasks.ReloadLoadBalancer( name=sf_name + '-' + constants.RELOAD_LB_AFTER_AMP_ASSOC, requires=constants.LOADBALANCER_ID, provides=constants.LOADBALANCER)) if topology == constants.TOPOLOGY_ACTIVE_STANDBY: vrrp_subflow = self.amp_flows.get_vrrp_subflow(prefix) post_create_LB_flow.add(vrrp_subflow) post_create_LB_flow.add(database_tasks.UpdateLoadbalancerInDB( requires=[constants.LOADBALANCER, constants.UPDATE_DICT])) 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): """Creates a flow to update a load balancer. :returns: The flow for update a 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( name="set load balancer status PENDING_UPDATE", requires=a10constants.VTHUNDER, inject={"status": constants.PENDING_UPDATE})) 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])) update_LB_flow.add( database_tasks.MarkLBActiveInDB(requires=constants.LOADBALANCER)) return update_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 get_update_load_balancer_flow(self): """Creates a flow to update a load balancer. :returns: The flow for update a load balancer """ update_LB_flow = linear_flow.Flow(constants.UPDATE_LOADBALANCER_FLOW) update_LB_flow.add(controller_tasks.DisableEnableLB( requires=constants.LOADBALANCER)) update_LB_flow.add(database_tasks.UpdateLoadbalancerInDB( requires=[constants.LOADBALANCER, constants.UPDATE_DICT])) update_LB_flow.add(database_tasks.MarkLBActiveInDB( requires=constants.LOADBALANCER)) return update_LB_flow
def test_update_load_balancer_in_db( self, mock_listner_repo_update, mock_generate_uuid, mock_LOG, mock_get_session, mock_loadbalancer_repo_update, mock_listener_repo_update, mock_amphora_repo_update, mock_amphora_repo_delete): update_load_balancer = database_tasks.UpdateLoadbalancerInDB() update_load_balancer.execute(self.loadbalancer_mock, { 'name': 'test', 'description': 'test2' }) repo.LoadBalancerRepository.update.assert_called_once_with( 'TEST', LB_ID, name='test', description='test2') # Test the revert mock_listener_repo_update.reset_mock() update_load_balancer.revert(self.listener_mock)
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
def get_post_lb_rack_vthunder_association_flow(self, prefix, topology, mark_active=True): """Reload the loadbalancer and update loadbalancer in database.""" sf_name = prefix + '-' + constants.POST_LB_AMP_ASSOCIATION_SUBFLOW post_create_lb_flow = linear_flow.Flow(sf_name) 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])) 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