def _get_failover_create_amphora_subflow(self, prefix): """Flow to create amphora for failover""" create_amp_flow = linear_flow.Flow(constants.CREATE_AMPHORA_FLOW) sf_name = prefix + '-' + a10constants.SPARE_VTHUNDER_CREATE create_amp_flow.add( database_tasks.CreateAmphoraInDB(name=sf_name + '-' + constants.CREATE_AMPHORA_INDB, provides=constants.AMPHORA_ID)) create_amp_flow.add( compute_tasks.ComputeCreate( name=sf_name + '-' + constants.COMPUTE_CREATE, requires=(constants.AMPHORA_ID, a10constants.NETWORK_LIST), provides=constants.COMPUTE_ID)) create_amp_flow.add( database_tasks.UpdateAmphoraComputeId( name=sf_name + '-' + constants.UPDATE_AMPHORA_COMPUTEID, requires=(constants.AMPHORA_ID, constants.COMPUTE_ID))) create_amp_flow.add( database_tasks.MarkAmphoraBootingInDB( name=sf_name + '-' + constants.MARK_AMPHORA_BOOTING_INDB, requires=(constants.AMPHORA_ID, constants.COMPUTE_ID))) create_amp_flow.add( compute_tasks.ComputeActiveWait( name=sf_name + '-' + constants.COMPUTE_WAIT, requires=(constants.COMPUTE_ID, constants.AMPHORA_ID), provides=constants.COMPUTE_OBJ)) create_amp_flow.add( database_tasks.UpdateAmphoraInfo( name=sf_name + '-' + constants.UPDATE_AMPHORA_INFO, requires=(constants.AMPHORA_ID, constants.COMPUTE_OBJ), provides=constants.AMPHORA)) create_amp_flow.add( a10_database_tasks.CreateSpareVThunderEntry( requires=(constants.AMPHORA), provides=a10constants.SPARE_VTHUNDER)) create_amp_flow.add( vthunder_tasks.VThunderComputeConnectivityWait( name=sf_name + '-' + constants.AMP_COMPUTE_CONNECTIVITY_WAIT, requires=constants.AMPHORA, rebind={a10constants.VTHUNDER: a10constants.SPARE_VTHUNDER})) create_amp_flow.add( a10_database_tasks.MarkVThunderStatusInDB( rebind={a10constants.VTHUNDER: a10constants.SPARE_VTHUNDER}, inject={"status": a10constants.READY})) create_amp_flow.add( vthunder_tasks.UpdateAcosVersionInVthunderEntry( name=sf_name + '-' + a10constants.UPDATE_ACOS_VERSION_IN_VTHUNDER_ENTRY, rebind={a10constants.VTHUNDER: a10constants.SPARE_VTHUNDER})) create_amp_flow.add( vthunder_tasks.EnableInterfaceOnSpare( name=sf_name + '-' + a10constants.ENABLE_VTHUNDER_INTERFACE, rebind={a10constants.VTHUNDER: a10constants.SPARE_VTHUNDER})) return create_amp_flow
def get_create_amphora_flow(self): """Creates a flow to create an amphora. :returns: The flow for creating the amphora """ create_amphora_flow = linear_flow.Flow(constants.CREATE_AMPHORA_FLOW) create_amphora_flow.add( database_tasks.CreateAmphoraInDB(provides=constants.AMPHORA_ID)) create_amphora_flow.add( lifecycle_tasks.AmphoraIDToErrorOnRevertTask( requires=constants.AMPHORA_ID)) if self.REST_AMPHORA_DRIVER: create_amphora_flow.add( cert_task.GenerateServerPEMTask(provides=constants.SERVER_PEM)) create_amphora_flow.add( database_tasks.UpdateAmphoraDBCertExpiration( requires=(constants.AMPHORA_ID, constants.SERVER_PEM))) create_amphora_flow.add( compute_tasks.CertComputeCreate( requires=(constants.AMPHORA_ID, constants.SERVER_PEM, constants.BUILD_TYPE_PRIORITY, constants.FLAVOR, constants.AVAILABILITY_ZONE), provides=constants.COMPUTE_ID)) else: create_amphora_flow.add( compute_tasks.ComputeCreate( requires=(constants.AMPHORA_ID, constants.BUILD_TYPE_PRIORITY, constants.FLAVOR, constants.AVAILABILITY_ZONE), provides=constants.COMPUTE_ID)) create_amphora_flow.add( database_tasks.MarkAmphoraBootingInDB( requires=(constants.AMPHORA_ID, constants.COMPUTE_ID))) create_amphora_flow.add( compute_tasks.ComputeActiveWait(requires=(constants.COMPUTE_ID, constants.AMPHORA_ID), provides=constants.COMPUTE_OBJ)) create_amphora_flow.add( database_tasks.UpdateAmphoraInfo(requires=(constants.AMPHORA_ID, constants.COMPUTE_OBJ), provides=constants.AMPHORA)) create_amphora_flow.add( amphora_driver_tasks.AmphoraComputeConnectivityWait( requires=constants.AMPHORA)) create_amphora_flow.add( database_tasks.ReloadAmphora(requires=constants.AMPHORA_ID, provides=constants.AMPHORA)) create_amphora_flow.add( amphora_driver_tasks.AmphoraFinalize(requires=constants.AMPHORA)) create_amphora_flow.add( database_tasks.MarkAmphoraReadyInDB(requires=constants.AMPHORA)) return create_amphora_flow
def get_create_vthunder_flow(self): """Flow to create a spare amphora.""" create_vthunder_flow = linear_flow.Flow( constants.CREATE_AMPHORA_FLOW) sf_name = a10constants.SPARE_VTHUNDER_CREATE create_vthunder_flow.add(database_tasks.CreateAmphoraInDB( name=sf_name + '-' + constants.CREATE_AMPHORA_INDB, provides=constants.AMPHORA_ID)) create_vthunder_flow.add(compute_tasks.ComputeCreate( name=sf_name + '-' + constants.COMPUTE_CREATE, requires=(constants.AMPHORA_ID, constants.BUILD_TYPE_PRIORITY, ), provides=constants.COMPUTE_ID)) create_vthunder_flow.add(database_tasks.UpdateAmphoraComputeId( name=sf_name + '-' + constants.UPDATE_AMPHORA_COMPUTEID, requires=(constants.AMPHORA_ID, constants.COMPUTE_ID))) create_vthunder_flow.add(database_tasks.MarkAmphoraBootingInDB( name=sf_name + '-' + constants.MARK_AMPHORA_BOOTING_INDB, requires=(constants.AMPHORA_ID, constants.COMPUTE_ID))) create_vthunder_flow.add(compute_tasks.ComputeActiveWait( name=sf_name + '-' + constants.COMPUTE_WAIT, requires=(constants.COMPUTE_ID, constants.AMPHORA_ID), provides=constants.COMPUTE_OBJ)) create_vthunder_flow.add(database_tasks.UpdateAmphoraInfo( name=sf_name + '-' + constants.UPDATE_AMPHORA_INFO, requires=(constants.AMPHORA_ID, constants.COMPUTE_OBJ), provides=constants.AMPHORA)) create_vthunder_flow.add(a10_database_tasks.CreateSpareVThunderEntry( requires=(constants.AMPHORA), provides=a10constants.VTHUNDER)) create_vthunder_flow.add( vthunder_tasks.VThunderComputeConnectivityWait( name=sf_name + '-' + constants.AMP_COMPUTE_CONNECTIVITY_WAIT, requires=(a10constants.VTHUNDER, constants.AMPHORA))) return create_vthunder_flow
def _get_create_amp_for_lb_subflow(self, prefix, role, is_spare=False): """Create a new amphora for lb.""" sf_name = prefix + '-' + constants.CREATE_AMP_FOR_LB_SUBFLOW create_amp_for_lb_subflow = linear_flow.Flow(sf_name) create_amp_for_lb_subflow.add( database_tasks.CreateAmphoraInDB( name=sf_name + '-' + constants.CREATE_AMPHORA_INDB, requires=constants.LOADBALANCER_ID, provides=constants.AMPHORA_ID)) create_amp_for_lb_subflow.add( cert_task.GenerateServerPEMTask(name=sf_name + '-' + constants.GENERATE_SERVER_PEM, provides=constants.SERVER_PEM)) create_amp_for_lb_subflow.add( database_tasks.UpdateAmphoraDBCertExpiration( name=sf_name + '-' + constants.UPDATE_CERT_EXPIRATION, requires=(constants.AMPHORA_ID, constants.SERVER_PEM))) create_amp_for_lb_subflow.add( compute_tasks.CertComputeCreate( name=sf_name + '-' + constants.CERT_COMPUTE_CREATE, requires=(constants.AMPHORA_ID, constants.SERVER_PEM, constants.BUILD_TYPE_PRIORITY, constants.SERVER_GROUP_ID, constants.FLAVOR, constants.AVAILABILITY_ZONE), provides=constants.COMPUTE_ID)) create_amp_for_lb_subflow.add( database_tasks.UpdateAmphoraComputeId( name=sf_name + '-' + constants.UPDATE_AMPHORA_COMPUTEID, requires=(constants.AMPHORA_ID, constants.COMPUTE_ID))) create_amp_for_lb_subflow.add( database_tasks.MarkAmphoraBootingInDB( name=sf_name + '-' + constants.MARK_AMPHORA_BOOTING_INDB, requires=(constants.AMPHORA_ID, constants.COMPUTE_ID))) create_amp_for_lb_subflow.add( compute_tasks.ComputeActiveWait( name=sf_name + '-' + constants.COMPUTE_WAIT, requires=(constants.COMPUTE_ID, constants.AMPHORA_ID, constants.AVAILABILITY_ZONE), provides=constants.COMPUTE_OBJ)) create_amp_for_lb_subflow.add( database_tasks.UpdateAmphoraInfo( name=sf_name + '-' + constants.UPDATE_AMPHORA_INFO, requires=(constants.AMPHORA_ID, constants.COMPUTE_OBJ), provides=constants.AMPHORA)) create_amp_for_lb_subflow.add( amphora_driver_tasks.AmphoraComputeConnectivityWait( name=sf_name + '-' + constants.AMP_COMPUTE_CONNECTIVITY_WAIT, requires=constants.AMPHORA)) create_amp_for_lb_subflow.add( amphora_driver_tasks.AmphoraFinalize(name=sf_name + '-' + constants.AMPHORA_FINALIZE, requires=constants.AMPHORA)) if is_spare: create_amp_for_lb_subflow.add( database_tasks.MarkAmphoraReadyInDB( name=sf_name + '-' + constants.MARK_AMPHORA_READY_INDB, requires=constants.AMPHORA)) else: create_amp_for_lb_subflow.add( database_tasks.MarkAmphoraAllocatedInDB( name=sf_name + '-' + constants.MARK_AMPHORA_ALLOCATED_INDB, requires=(constants.AMPHORA, constants.LOADBALANCER_ID))) create_amp_for_lb_subflow.add( database_tasks.ReloadAmphora(name=sf_name + '-' + constants.RELOAD_AMPHORA, requires=constants.AMPHORA_ID, provides=constants.AMPHORA)) if role == constants.ROLE_MASTER: create_amp_for_lb_subflow.add( database_tasks.MarkAmphoraMasterInDB( name=sf_name + '-' + constants.MARK_AMP_MASTER_INDB, requires=constants.AMPHORA)) elif role == constants.ROLE_BACKUP: create_amp_for_lb_subflow.add( database_tasks.MarkAmphoraBackupInDB( name=sf_name + '-' + constants.MARK_AMP_BACKUP_INDB, requires=constants.AMPHORA)) elif role == constants.ROLE_STANDALONE: create_amp_for_lb_subflow.add( database_tasks.MarkAmphoraStandAloneInDB( name=sf_name + '-' + constants.MARK_AMP_STANDALONE_INDB, requires=constants.AMPHORA)) return create_amp_for_lb_subflow
def get_create_vthunder_flow(self): """Flow to create a spare amphora.""" create_vthunder_flow = linear_flow.Flow(constants.CREATE_AMPHORA_FLOW) sf_name = a10constants.SPARE_VTHUNDER_CREATE create_vthunder_flow.add( database_tasks.CreateAmphoraInDB(name=sf_name + '-' + constants.CREATE_AMPHORA_INDB, provides=constants.AMPHORA_ID)) create_vthunder_flow.add( compute_tasks.ComputeCreate(name=sf_name + '-' + constants.COMPUTE_CREATE, requires=( constants.AMPHORA_ID, constants.BUILD_TYPE_PRIORITY, ), provides=constants.COMPUTE_ID)) create_vthunder_flow.add( database_tasks.UpdateAmphoraComputeId( name=sf_name + '-' + constants.UPDATE_AMPHORA_COMPUTEID, requires=(constants.AMPHORA_ID, constants.COMPUTE_ID))) create_vthunder_flow.add( database_tasks.MarkAmphoraBootingInDB( name=sf_name + '-' + constants.MARK_AMPHORA_BOOTING_INDB, requires=(constants.AMPHORA_ID, constants.COMPUTE_ID))) create_vthunder_flow.add( compute_tasks.ComputeActiveWait( name=sf_name + '-' + constants.COMPUTE_WAIT, requires=(constants.COMPUTE_ID, constants.AMPHORA_ID), provides=constants.COMPUTE_OBJ)) create_vthunder_flow.add( database_tasks.UpdateAmphoraInfo( name=sf_name + '-' + constants.UPDATE_AMPHORA_INFO, requires=(constants.AMPHORA_ID, constants.COMPUTE_OBJ), provides=constants.AMPHORA)) create_vthunder_flow.add( a10_database_tasks.CreateSpareVThunderEntry( requires=(constants.AMPHORA), provides=a10constants.VTHUNDER)) create_vthunder_flow.add( vthunder_tasks.VThunderComputeConnectivityWait( name=sf_name + '-' + constants.AMP_COMPUTE_CONNECTIVITY_WAIT, requires=(a10constants.VTHUNDER, constants.AMPHORA))) create_vthunder_flow.add( vthunder_tasks.EnableInterfaceOnSpare( name=sf_name + '-' + a10constants.ENABLE_VTHUNDER_INTERFACE, requires=(a10constants.VTHUNDER))) create_vthunder_flow.add( vthunder_tasks.UpdateAcosVersionInVthunderEntry( name=sf_name + '-' + a10constants.UPDATE_ACOS_VERSION_IN_VTHUNDER_ENTRY, requires=(a10constants.VTHUNDER))) create_vthunder_flow.add( database_tasks.MarkAmphoraReadyInDB( name=sf_name + '-' + a10constants.MARK_AMPHORA_READY_INDB, requires=(constants.AMPHORA))) create_vthunder_flow.add( self.get_glm_license_subflow( prefix=a10constants.SPARE_VTHUNDER_CREATE, role=a10constants.SPARE_VTHUNDER)) create_vthunder_flow.add( vthunder_tasks.CreateHealthMonitorOnVThunder( name=sf_name + '-' + a10constants.CREATE_HEALTH_MONITOR_ON_SPARE, requires=(a10constants.VTHUNDER))) create_vthunder_flow.add( a10_database_tasks.MarkVThunderStatusInDB( requires=(a10constants.VTHUNDER), inject={"status": a10constants.READY})) return create_vthunder_flow
def _get_create_amp_for_lb_subflow(self, prefix, role): """Flow to create a new vThunder for lb.""" sf_name = prefix + '-' + constants.CREATE_AMP_FOR_LB_SUBFLOW create_amp_for_lb_subflow = linear_flow.Flow(sf_name) create_amp_for_lb_subflow.add( database_tasks.CreateAmphoraInDB(name=sf_name + '-' + constants.CREATE_AMPHORA_INDB, provides=constants.AMPHORA_ID)) # VIP subnet integration at bootup create_amp_for_lb_subflow.add( database_tasks.ReloadLoadBalancer( name=sf_name + '-' + a10constants.RELOADLOAD_BALANCER, requires=constants.LOADBALANCER_ID, provides=constants.LOADBALANCER)) require_server_group_id_condition = ( role in (constants.ROLE_BACKUP, constants.ROLE_MASTER) and CONF.a10_nova.enable_anti_affinity) if require_server_group_id_condition: create_amp_for_lb_subflow.add( compute_tasks.ComputeCreate( name=sf_name + '-' + constants.COMPUTE_CREATE, requires=(constants.AMPHORA_ID, constants.BUILD_TYPE_PRIORITY, constants.SERVER_GROUP_ID, constants.LOADBALANCER), provides=constants.COMPUTE_ID)) else: create_amp_for_lb_subflow.add( compute_tasks.ComputeCreate( name=sf_name + '-' + constants.COMPUTE_CREATE, requires=(constants.AMPHORA_ID, constants.BUILD_TYPE_PRIORITY, constants.LOADBALANCER), provides=constants.COMPUTE_ID)) create_amp_for_lb_subflow.add( database_tasks.UpdateAmphoraComputeId( name=sf_name + '-' + constants.UPDATE_AMPHORA_COMPUTEID, requires=(constants.AMPHORA_ID, constants.COMPUTE_ID))) create_amp_for_lb_subflow.add( database_tasks.MarkAmphoraBootingInDB( name=sf_name + '-' + constants.MARK_AMPHORA_BOOTING_INDB, requires=(constants.AMPHORA_ID, constants.COMPUTE_ID))) create_amp_for_lb_subflow.add( compute_tasks.ComputeActiveWait( name=sf_name + '-' + constants.COMPUTE_WAIT, requires=(constants.COMPUTE_ID, constants.AMPHORA_ID), provides=constants.COMPUTE_OBJ)) create_amp_for_lb_subflow.add( database_tasks.UpdateAmphoraInfo( name=sf_name + '-' + constants.UPDATE_AMPHORA_INFO, requires=(constants.AMPHORA_ID, constants.COMPUTE_OBJ), provides=constants.AMPHORA)) # Create vThunder entry in custom DB create_amp_for_lb_subflow.add( a10_database_tasks.CreateVThunderEntry( name=sf_name + '-' + a10constants.CREATE_VTHUNDER_ENTRY, requires=(constants.AMPHORA, constants.LOADBALANCER), inject={ a10constants.ROLE: role, a10constants.STATUS: constants.PENDING_CREATE })) # Rebind requires vthunder in store and vMaster requires vThunder create_amp_for_lb_subflow.add( a10_database_tasks.GetVThunderByLoadBalancer( name=sf_name + '-' + a10constants.VTHUNDER_BY_LB, requires=constants.LOADBALANCER, provides=a10constants.VTHUNDER)) # Get VThunder details from database if role == constants.ROLE_BACKUP: create_amp_for_lb_subflow.add( a10_database_tasks.GetBackupVThunderByLoadBalancer( requires=constants.LOADBALANCER, provides=a10constants.BACKUP_VTHUNDER)) create_amp_for_lb_subflow.add( vthunder_tasks.VThunderComputeConnectivityWait( name=sf_name + '-' + a10constants.BACKUP_CONNECTIVITY_WAIT, rebind={ a10constants.VTHUNDER: a10constants.BACKUP_VTHUNDER }, requires=constants.AMPHORA)) else: create_amp_for_lb_subflow.add( vthunder_tasks.VThunderComputeConnectivityWait( name=sf_name + '-' + a10constants.WAIT_FOR_VTHUNDER_CONNECTIVITY, requires=(a10constants.VTHUNDER, constants.AMPHORA))) # License the vThunder-Amphora create_amp_for_lb_subflow.add( *self.get_glm_license_subflow(prefix + '-' + role, role)) create_amp_for_lb_subflow.add( database_tasks.MarkAmphoraAllocatedInDB( name=sf_name + '-' + constants.MARK_AMPHORA_ALLOCATED_INDB, requires=(constants.AMPHORA, constants.LOADBALANCER_ID))) create_amp_for_lb_subflow.add( database_tasks.ReloadAmphora(name=sf_name + '-' + constants.RELOAD_AMPHORA, requires=constants.AMPHORA_ID, provides=constants.AMPHORA)) if role == constants.ROLE_MASTER: create_amp_for_lb_subflow.add( database_tasks.MarkAmphoraMasterInDB( name=sf_name + '-' + constants.MARK_AMP_MASTER_INDB, requires=constants.AMPHORA)) elif role == constants.ROLE_BACKUP: create_amp_for_lb_subflow.add( database_tasks.MarkAmphoraBackupInDB( name=sf_name + '-' + constants.MARK_AMP_BACKUP_INDB, requires=constants.AMPHORA)) elif role == constants.ROLE_STANDALONE: create_amp_for_lb_subflow.add( database_tasks.MarkAmphoraStandAloneInDB( name=sf_name + '-' + constants.MARK_AMP_STANDALONE_INDB, requires=constants.AMPHORA)) if role == constants.ROLE_BACKUP: create_amp_for_lb_subflow.add( a10_database_tasks.GetBackupVThunderByLoadBalancer( name=sf_name + '-' + a10constants.BACKUP_VTHUNDER, requires=constants.LOADBALANCER, provides=a10constants.BACKUP_VTHUNDER)) create_amp_for_lb_subflow.add( vthunder_tasks.UpdateAcosVersionInVthunderEntry( name=sf_name + '-' + a10constants.UPDATE_ACOS_VERSION_FOR_BACKUP_VTHUNDER, rebind={ a10constants.VTHUNDER: a10constants.BACKUP_VTHUNDER })) else: create_amp_for_lb_subflow.add( vthunder_tasks.UpdateAcosVersionInVthunderEntry( name=sf_name + '-' + a10constants.UPDATE_ACOS_VERSION_FOR_BACKUP_VTHUNDER, requires=(a10constants.VTHUNDER))) return create_amp_for_lb_subflow