def put(self, deployment_id, **kwargs):
     """
     Create a deployment
     """
     rest_utils.validate_inputs({'deployment_id': deployment_id})
     request_schema = self.create_request_schema()
     request_dict = rest_utils.get_json_and_verify_params(request_schema)
     blueprint_id = request_dict['blueprint_id']
     bypass_maintenance = is_bypass_maintenance_mode()
     args = rest_utils.get_args_and_verify_arguments(
         [Argument('private_resource', type=boolean)]
     )
     visibility = rest_utils.get_visibility_parameter(
         optional=True,
         valid_values=VisibilityState.STATES
     )
     deployment = get_resource_manager().create_deployment(
         blueprint_id,
         deployment_id,
         inputs=request_dict.get('inputs', {}),
         bypass_maintenance=bypass_maintenance,
         private_resource=args.private_resource,
         visibility=visibility,
         skip_plugins_validation=self.get_skip_plugin_validation_flag(
             request_dict),
         site_name=_get_site_name(request_dict)
     )
     return deployment, 201
Beispiel #2
0
 def post(self, snapshot_id):
     _verify_no_multi_node_cluster(action="restore snapshot")
     request_dict = rest_utils.get_json_and_verify_params({
         'recreate_deployments_envs', 'ignore_plugin_installation_failure'
     })
     recreate_deployments_envs = rest_utils.verify_and_convert_bool(
         'recreate_deployments_envs',
         request_dict['recreate_deployments_envs'])
     bypass_maintenance = is_bypass_maintenance_mode()
     force = rest_utils.verify_and_convert_bool('force',
                                                request_dict['force'])
     restore_certificates = rest_utils.verify_and_convert_bool(
         'restore_certificates',
         request_dict.get('restore_certificates', 'false'))
     no_reboot = rest_utils.verify_and_convert_bool(
         'no_reboot', request_dict.get('no_reboot', 'false'))
     ignore_plugin_installation_failure = \
         rest_utils.verify_and_convert_bool(
             'ignore_plugin_installation_failure',
             request_dict.get('ignore_plugin_installation_failure', 'false')
         )
     if no_reboot and not restore_certificates:
         raise manager_exceptions.BadParametersError(
             '`no_reboot` is only relevant when `restore_certificates` is '
             'activated')
     default_timeout_sec = 300
     request_timeout = request_dict.get('timeout', default_timeout_sec)
     timeout = rest_utils.convert_to_int(request_timeout)
     execution = get_resource_manager().restore_snapshot(
         snapshot_id, recreate_deployments_envs, force, bypass_maintenance,
         timeout, restore_certificates, no_reboot,
         ignore_plugin_installation_failure)
     return execution, 200
Beispiel #3
0
 def put(self, deployment_id, **kwargs):
     """
     Create a deployment
     """
     validate_inputs({'deployment_id': deployment_id})
     request_schema = self.create_request_schema()
     request_dict = get_json_and_verify_params(request_schema)
     blueprint_id = request_dict['blueprint_id']
     bypass_maintenance = is_bypass_maintenance_mode()
     args = get_args_and_verify_arguments(
         [Argument('private_resource', type=boolean,
                   default=False)]
     )
     skip_plugins_validation = self.get_skip_plugin_validation_flag(
         request_dict)
     rm = get_resource_manager()
     sm = get_storage_manager()
     blueprint = sm.get(models.Blueprint, blueprint_id)
     rm.cleanup_failed_deployment(deployment_id)
     if not skip_plugins_validation:
         rm.check_blueprint_plugins_installed(blueprint.plan)
     deployment = rm.create_deployment(
         blueprint,
         deployment_id,
         private_resource=args.private_resource,
         visibility=None,
     )
     try:
         rm.execute_workflow(deployment.make_create_environment_execution(
             inputs=request_dict.get('inputs', {}),
         ), bypass_maintenance=bypass_maintenance)
     except manager_exceptions.ExistingRunningExecutionError:
         rm.delete_deployment(deployment)
         raise
     return deployment, 201
    def put(self, snapshot_id):
        rest_utils.validate_inputs({'snapshot_id': snapshot_id})
        request_dict = rest_utils.get_json_and_verify_params()
        include_metrics = rest_utils.verify_and_convert_bool(
            'include_metrics',
            request_dict.get('include_metrics', 'false')
        )
        include_credentials = rest_utils.verify_and_convert_bool(
            'include_credentials',
            request_dict.get('include_credentials', 'true')
        )
        include_logs = rest_utils.verify_and_convert_bool(
            'include_logs',
            request_dict.get('include_logs', 'true')
        )
        include_events = rest_utils.verify_and_convert_bool(
            'include_events',
            request_dict.get('include_events', 'true')
        )
        queue = rest_utils.verify_and_convert_bool(
            'queue',
            request_dict.get('queue', 'false')
        )
        bypass_maintenance = is_bypass_maintenance_mode()
        execution = get_resource_manager().create_snapshot(
            snapshot_id,
            include_metrics,
            include_credentials,
            include_logs,
            include_events,
            bypass_maintenance,
            queue
        )

        return execution, 201
Beispiel #5
0
 def put(self, deployment_id, **kwargs):
     """
     Create a deployment
     """
     rest_utils.validate_inputs({'deployment_id': deployment_id})
     request_schema = self.create_request_schema()
     request_dict = rest_utils.get_json_and_verify_params(request_schema)
     blueprint_id = request_dict['blueprint_id']
     bypass_maintenance = is_bypass_maintenance_mode()
     args = rest_utils.get_args_and_verify_arguments(
         [Argument('private_resource', type=boolean)]
     )
     visibility = rest_utils.get_visibility_parameter(
         optional=True,
         valid_values=VisibilityState.STATES
     )
     deployment = get_resource_manager().create_deployment(
         blueprint_id,
         deployment_id,
         inputs=request_dict.get('inputs', {}),
         bypass_maintenance=bypass_maintenance,
         private_resource=args.private_resource,
         visibility=visibility,
         skip_plugins_validation=self.get_skip_plugin_validation_flag(
             request_dict),
         site_name=_get_site_name(request_dict),
         runtime_only_evaluation=request_dict.get(
             'runtime_only_evaluation', False)
     )
     return deployment, 201
    def delete(self, deployment_id, **kwargs):
        """
        Delete deployment by id
        """
        args = get_args_and_verify_arguments(
            [Argument('ignore_live_nodes', type=boolean,
                      default=False),
             Argument('delete_db_mode', type=boolean,
                      default=False),
             Argument('delete_logs', type=boolean,
                      default=False)]
        )

        bypass_maintenance = is_bypass_maintenance_mode()
        deployment = get_resource_manager().delete_deployment(
            deployment_id,
            bypass_maintenance,
            args.ignore_live_nodes,
            args.delete_db_mode,
            args.delete_logs)

        if args.delete_db_mode:
            # Delete deployment resources from file server
            deployment_folder = os.path.join(
                config.instance.file_server_root,
                FILE_SERVER_DEPLOYMENTS_FOLDER,
                utils.current_tenant.name,
                deployment.id)
            if os.path.exists(deployment_folder):
                shutil.rmtree(deployment_folder)
        return deployment, 200
    def post(self, **kwargs):
        """Execute a workflow"""
        request_dict = get_json_and_verify_params(
            {'deployment_id', 'workflow_id'})

        allow_custom_parameters = verify_and_convert_bool(
            'allow_custom_parameters',
            request_dict.get('allow_custom_parameters', 'false'))
        force = verify_and_convert_bool('force',
                                        request_dict.get('force', 'false'))
        dry_run = verify_and_convert_bool('dry_run',
                                          request_dict.get('dry_run', 'false'))
        queue = verify_and_convert_bool('queue',
                                        request_dict.get('queue', 'false'))

        deployment_id = request_dict['deployment_id']
        workflow_id = request_dict['workflow_id']
        parameters = request_dict.get('parameters', None)

        if parameters is not None and parameters.__class__ is not dict:
            raise manager_exceptions.BadParametersError(
                "request body's 'parameters' field must be a dict but"
                " is of type {0}".format(parameters.__class__.__name__))

        bypass_maintenance = is_bypass_maintenance_mode()
        execution = get_resource_manager().execute_workflow(
            deployment_id,
            workflow_id,
            parameters=parameters,
            allow_custom_parameters=allow_custom_parameters,
            force=force,
            dry_run=dry_run,
            bypass_maintenance=bypass_maintenance,
            queue=queue)
        return execution, 201
Beispiel #8
0
    def put(self, snapshot_id):
        verify_json_content_type()
        request_json = request.json
        include_metrics = verify_and_convert_bool(
            'include_metrics', request_json.get('include_metrics', 'false'))
        include_credentials = verify_and_convert_bool(
            'include_credentials',
            request_json.get('include_credentials', 'true'))
        bypass_maintenance = is_bypass_maintenance_mode()

        execution = get_blueprints_manager().create_snapshot(
            snapshot_id, include_metrics, include_credentials,
            bypass_maintenance)
        return execution, 201
Beispiel #9
0
 def post(self, snapshot_id):
     request_dict = rest_utils.get_json_and_verify_params(
         {'recreate_deployments_envs', 'tenant_name'})
     recreate_deployments_envs = rest_utils.verify_and_convert_bool(
         'recreate_deployments_envs',
         request_dict['recreate_deployments_envs'])
     bypass_maintenance = is_bypass_maintenance_mode()
     force = rest_utils.verify_and_convert_bool('force',
                                                request_dict['force'])
     tenant_name = request_dict['tenant_name']
     default_timeout_sec = 300
     request_timeout = request_dict.get('timeout', default_timeout_sec)
     timeout = rest_utils.convert_to_int(request_timeout)
     execution = get_resource_manager().restore_snapshot(
         snapshot_id, recreate_deployments_envs, force, bypass_maintenance,
         timeout, tenant_name)
     return execution, 200
Beispiel #10
0
 def post(self, snapshot_id):
     verify_json_content_type()
     request_json = request.json
     verify_parameter_in_request_body('recreate_deployments_envs',
                                      request_json)
     recreate_deployments_envs = verify_and_convert_bool(
         'recreate_deployments_envs',
         request_json['recreate_deployments_envs'])
     bypass_maintenance = is_bypass_maintenance_mode()
     force = verify_and_convert_bool('force', request_json['force'])
     default_timeout_sec = 300
     request_timeout = request_json.get('timeout', default_timeout_sec)
     timeout = convert_to_int(request_timeout)
     execution = get_blueprints_manager().restore_snapshot(
         snapshot_id, recreate_deployments_envs, force, bypass_maintenance,
         timeout)
     return execution, 200
Beispiel #11
0
    def put(self, snapshot_id):
        request_dict = rest_utils.get_json_and_verify_params()
        include_metrics = rest_utils.verify_and_convert_bool(
            'include_metrics', request_dict.get('include_metrics', 'false'))
        include_credentials = rest_utils.verify_and_convert_bool(
            'include_credentials',
            request_dict.get('include_credentials', 'true'))
        private_resource = rest_utils.verify_and_convert_bool(
            'private_resource', request_dict.get('private_resource', 'false'))
        bypass_maintenance = is_bypass_maintenance_mode()

        execution = get_resource_manager().create_snapshot(
            snapshot_id,
            include_metrics,
            include_credentials,
            bypass_maintenance,
            private_resource=private_resource)
        return execution, 201
Beispiel #12
0
 def put(self, deployment_id, **kwargs):
     """
     Create a deployment
     """
     request_schema = self.create_request_schema()
     request_dict = get_json_and_verify_params(request_schema)
     blueprint_id = request_dict['blueprint_id']
     bypass_maintenance = is_bypass_maintenance_mode()
     args = get_args_and_verify_arguments(
         [Argument('private_resource', type=types.boolean, default=False)])
     deployment = get_resource_manager().create_deployment(
         blueprint_id,
         deployment_id,
         inputs=request_dict.get('inputs', {}),
         bypass_maintenance=bypass_maintenance,
         private_resource=args.private_resource,
         skip_plugins_validation=self.get_skip_plugin_validation_flag(
             request_dict))
     return deployment, 201
Beispiel #13
0
    def delete(self, deployment_id, **kwargs):
        """
        Delete deployment by id
        """
        args = get_args_and_verify_arguments(
            [Argument('ignore_live_nodes', type=types.boolean, default=False)])

        bypass_maintenance = is_bypass_maintenance_mode()

        deployment = get_resource_manager().delete_deployment(
            deployment_id, bypass_maintenance, args.ignore_live_nodes)

        # Delete deployment resources from file server
        deployment_folder = os.path.join(
            config.instance.file_server_root, FILE_SERVER_DEPLOYMENTS_FOLDER,
            current_app.config[CURRENT_TENANT_CONFIG].name, deployment.id)
        if os.path.exists(deployment_folder):
            shutil.rmtree(deployment_folder)

        return deployment, 200
Beispiel #14
0
    def delete(self, deployment_id, **kwargs):
        """Delete deployment by id"""
        args = get_args_and_verify_arguments([
            Argument('force', type=boolean, default=False),
            Argument('delete_logs', type=boolean, default=False)
        ])

        bypass_maintenance = is_bypass_maintenance_mode()
        sm = get_storage_manager()
        dep = sm.get(models.Deployment, deployment_id)
        dep.deployment_status = DeploymentState.IN_PROGRESS
        sm.update(dep, modified_attrs=('deployment_status',))
        rm = get_resource_manager()
        rm.check_deployment_delete(dep, force=args.force)
        delete_execution = dep.make_delete_environment_execution(
            delete_logs=args.delete_logs)
        rm.execute_workflow(
            delete_execution, bypass_maintenance=bypass_maintenance)
        workflow_executor.delete_source_plugins(dep.id)
        return None, 204
    def put(self, snapshot_id):
        verify_json_content_type()
        request_json = request.json
        include_metrics = verify_and_convert_bool(
            'include_metrics',
            request_json.get('include_metrics', 'false')
        )
        include_credentials = verify_and_convert_bool(
            'include_credentials',
            request_json.get('include_credentials', 'true')
        )
        bypass_maintenance = is_bypass_maintenance_mode()

        execution = get_blueprints_manager().create_snapshot(
            snapshot_id,
            include_metrics,
            include_credentials,
            bypass_maintenance
        )
        return execution, 201
    def post(self, **kwargs):
        """Execute a workflow"""
        request_dict = get_json_and_verify_params({'deployment_id',
                                                   'workflow_id'})

        allow_custom_parameters = verify_and_convert_bool(
            'allow_custom_parameters',
            request_dict.get('allow_custom_parameters', 'false'))
        force = verify_and_convert_bool(
            'force',
            request_dict.get('force', 'false'))
        dry_run = verify_and_convert_bool(
            'dry_run',
            request_dict.get('dry_run', 'false'))
        queue = verify_and_convert_bool(
            'queue',
            request_dict.get('queue', 'false'))

        deployment_id = request_dict['deployment_id']
        workflow_id = request_dict['workflow_id']
        parameters = request_dict.get('parameters', None)
        wait_after_fail = request_dict.get('wait_after_fail', 600)
        scheduled_time = request_dict.get('scheduled_time', None)

        if scheduled_time:
            scheduled_time = parse_datetime(scheduled_time)

        if parameters is not None and parameters.__class__ is not dict:
            raise manager_exceptions.BadParametersError(
                "request body's 'parameters' field must be a dict but"
                " is of type {0}".format(parameters.__class__.__name__))

        bypass_maintenance = is_bypass_maintenance_mode()
        execution = get_resource_manager().execute_workflow(
            deployment_id, workflow_id, parameters=parameters,
            allow_custom_parameters=allow_custom_parameters, force=force,
            dry_run=dry_run, bypass_maintenance=bypass_maintenance,
            queue=queue, wait_after_fail=wait_after_fail,
            scheduled_time=scheduled_time)
        return execution, 201
 def post(self, snapshot_id):
     verify_json_content_type()
     request_json = request.json
     verify_parameter_in_request_body('recreate_deployments_envs',
                                      request_json)
     recreate_deployments_envs = verify_and_convert_bool(
         'recreate_deployments_envs',
         request_json['recreate_deployments_envs']
     )
     bypass_maintenance = is_bypass_maintenance_mode()
     force = verify_and_convert_bool('force', request_json['force'])
     default_timeout_sec = 300
     request_timeout = request_json.get('timeout', default_timeout_sec)
     timeout = convert_to_int(request_timeout)
     execution = get_blueprints_manager().restore_snapshot(
         snapshot_id,
         recreate_deployments_envs,
         force,
         bypass_maintenance,
         timeout
     )
     return execution, 200
Beispiel #18
0
 def put(self, deployment_id, **kwargs):
     """
     Create a deployment
     """
     request_schema = self.create_request_schema()
     request_dict = get_json_and_verify_params(request_schema)
     blueprint_id = request_dict['blueprint_id']
     bypass_maintenance = is_bypass_maintenance_mode()
     args = get_args_and_verify_arguments(
         [Argument('private_resource', type=types.boolean)])
     visibility = rest_utils.get_visibility_parameter(
         optional=True,
         valid_values=[VisibilityState.PRIVATE, VisibilityState.TENANT])
     deployment = get_resource_manager().create_deployment(
         blueprint_id,
         deployment_id,
         inputs=request_dict.get('inputs', {}),
         bypass_maintenance=bypass_maintenance,
         private_resource=args.private_resource,
         visibility=visibility,
         skip_plugins_validation=self.get_skip_plugin_validation_flag(
             request_dict))
     return deployment, 201
 def put(self, deployment_id, **kwargs):
     """
     Create a deployment
     """
     validate_inputs({'deployment_id': deployment_id})
     request_schema = self.create_request_schema()
     request_dict = get_json_and_verify_params(request_schema)
     blueprint_id = request_dict['blueprint_id']
     bypass_maintenance = is_bypass_maintenance_mode()
     args = get_args_and_verify_arguments(
         [Argument('private_resource', type=boolean,
                   default=False)]
     )
     deployment = get_resource_manager().create_deployment(
         blueprint_id,
         deployment_id,
         private_resource=args.private_resource,
         visibility=None,
         inputs=request_dict.get('inputs', {}),
         bypass_maintenance=bypass_maintenance,
         skip_plugins_validation=self.get_skip_plugin_validation_flag(
             request_dict)
     )
     return deployment, 201
Beispiel #20
0
    def post(self, **kwargs):
        """Execute a workflow"""
        request_dict = get_json_and_verify_params({'deployment_id',
                                                   'workflow_id'})

        allow_custom_parameters = verify_and_convert_bool(
            'allow_custom_parameters',
            request_dict.get('allow_custom_parameters', False))
        force = verify_and_convert_bool(
            'force',
            request_dict.get('force', False))
        dry_run = verify_and_convert_bool(
            'dry_run',
            request_dict.get('dry_run', False))
        queue = verify_and_convert_bool(
            'queue',
            request_dict.get('queue', False))

        deployment_id = request_dict['deployment_id']
        workflow_id = request_dict['workflow_id']
        parameters = request_dict.get('parameters', None)
        wait_after_fail = request_dict.get('wait_after_fail', 600)
        scheduled_time = request_dict.get('scheduled_time', None)

        if scheduled_time:
            sm = get_storage_manager()
            schedule = models.ExecutionSchedule(
                id='{}_{}'.format(workflow_id, uuid.uuid4().hex),
                deployment=sm.get(models.Deployment, deployment_id),
                created_at=datetime.utcnow(),
                since=self._parse_scheduled_time(scheduled_time),
                rule={'count': 1},
                slip=0,
                workflow_id=workflow_id,
                parameters=parameters,
                execution_arguments={
                    'allow_custom_parameters': allow_custom_parameters,
                    'force': force,
                    'is_dry_run': dry_run,
                    'wait_after_fail': wait_after_fail,
                },
                stop_on_fail=False,
            )
            schedule.next_occurrence = schedule.compute_next_occurrence()
            sm.put(schedule)
            return models.Execution(status=ExecutionState.SCHEDULED), 201

        if parameters is not None and not isinstance(parameters, dict):
            raise manager_exceptions.BadParametersError(
                f"request body's 'parameters' field must be a dict but"
                f" is of type {parameters.__class__.__name__}")

        sm = get_storage_manager()
        rm = get_resource_manager()
        with sm.transaction():
            deployment = sm.get(models.Deployment, deployment_id)
            rm.verify_deployment_environment_created_successfully(deployment)
            execution = models.Execution(
                workflow_id=workflow_id,
                deployment=deployment,
                parameters=parameters,
                is_dry_run=dry_run,
                status=ExecutionState.PENDING,
                allow_custom_parameters=allow_custom_parameters,
            )
            sm.put(execution)
        rm.execute_workflow(
            execution,
            bypass_maintenance=is_bypass_maintenance_mode(),
            force=force,
            queue=queue,
            wait_after_fail=wait_after_fail,
        )
        return execution, 201