コード例 #1
0
ファイル: vthunder_flows.py プロジェクト: qev0/a10-octavia
    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
コード例 #2
0
    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
コード例 #3
0
    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
コード例 #4
0
    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
コード例 #5
0
ファイル: vthunder_flows.py プロジェクト: qev0/a10-octavia
    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
コード例 #6
0
ファイル: vthunder_flows.py プロジェクト: qev0/a10-octavia
    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