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
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
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
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
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, 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
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
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
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
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
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
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
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