def create(blueprint_id, deployment_id, inputs): logger = get_logger() rest_host = utils.get_rest_host() inputs = utils.inputs_to_dict(inputs, 'inputs') logger.info('Creating new deployment from blueprint {0} at ' 'management server {1}' .format(blueprint_id, rest_host)) client = utils.get_rest_client(rest_host) try: deployment = client.deployments.create(blueprint_id, deployment_id, inputs=inputs) except MissingRequiredDeploymentInputError as e: logger.info('Unable to create deployment. Not all ' 'required inputs have been specified...') _print_deployment_inputs(client, blueprint_id) raise SuppressedCloudifyCliError(str(e)) except UnknownDeploymentInputError as e: logger.info( 'Unable to create deployment, an unknown input was specified...') _print_deployment_inputs(client, blueprint_id) raise SuppressedCloudifyCliError(str(e)) logger.info("Deployment created. The deployment's id is {0}".format( deployment.id))
def update_inputs(inputs=None): inputs = utils.inputs_to_dict(inputs, 'inputs') or {} inputs.update({'private_ip': _load_private_ip(inputs)}) inputs.update({'ssh_key_filename': _load_management_key(inputs)}) inputs.update({'ssh_user': _load_management_user(inputs)}) inputs.update({'public_ip': utils.get_management_server_ip()}) return inputs
def execute(workflow_id, parameters, allow_custom_parameters, task_retries, task_retry_interval, task_thread_pool_size): logger = get_logger() parameters = utils.inputs_to_dict(parameters, 'parameters') env = _load_env() result = env.execute(workflow=workflow_id, parameters=parameters, allow_custom_parameters=allow_custom_parameters, task_retries=task_retries, task_retry_interval=task_retry_interval, task_thread_pool_size=task_thread_pool_size) if result is not None: logger.info(json.dumps(result, sort_keys=True, indent=2))
def initialize_blueprint(blueprint_path, name, storage, install_plugins=False, inputs=None): if install_plugins: install_blueprint_plugins( blueprint_path=blueprint_path ) inputs = utils.inputs_to_dict(inputs, 'inputs') return local.init_env( blueprint_path=blueprint_path, name=name, inputs=inputs, storage=storage, ignored_modules=constants.IGNORED_LOCAL_WORKFLOW_MODULES)
def initialize_blueprint(blueprint_path, name, storage, install_plugins=False, inputs=None, resolver=None): if install_plugins: install_blueprint_plugins(blueprint_path=blueprint_path) config = utils.CloudifyConfig() inputs = utils.inputs_to_dict(inputs, "inputs") return local.init_env( blueprint_path=blueprint_path, name=name, inputs=inputs, storage=storage, ignored_modules=constants.IGNORED_LOCAL_WORKFLOW_MODULES, provider_context=config.local_provider_context, resolver=resolver, validate_version=config.validate_definitions_version, )
def create(blueprint_id, deployment_id, inputs): logger = get_logger() management_ip = utils.get_management_server_ip() inputs = utils.inputs_to_dict(inputs, 'inputs') logger.info('Creating new deployment from blueprint {0} at ' 'management server {1}'.format(blueprint_id, management_ip)) client = utils.get_rest_client(management_ip) try: deployment = client.deployments.create(blueprint_id, deployment_id, inputs=inputs) except MissingRequiredDeploymentInputError, e: logger.info('Unable to create deployment, not all ' 'required inputs have been specified...') _print_deployment_inputs(client, blueprint_id) raise SuppressedCloudifyCliError(str(e))
def create(blueprint_id, deployment_id, inputs): logger = get_logger() management_ip = utils.get_management_server_ip() inputs = utils.inputs_to_dict(inputs, 'inputs') logger.info('Creating new deployment from blueprint {0} at ' 'management server {1}' .format(blueprint_id, management_ip)) client = utils.get_rest_client(management_ip) try: deployment = client.deployments.create(blueprint_id, deployment_id, inputs=inputs) except MissingRequiredDeploymentInputError, e: logger.info('Unable to create deployment, not all ' 'required inputs have been specified...') _print_deployment_inputs(client, blueprint_id) raise SuppressedCloudifyCliError(str(e))
def initialize_blueprint(blueprint_path, name, storage, install_plugins=False, inputs=None, resolver=None): if install_plugins: install_blueprint_plugins( blueprint_path=blueprint_path ) provider_context = utils.CloudifyConfig().local_provider_context inputs = utils.inputs_to_dict(inputs, 'inputs') return local.init_env( blueprint_path=blueprint_path, name=name, inputs=inputs, storage=storage, ignored_modules=constants.IGNORED_LOCAL_WORKFLOW_MODULES, provider_context=provider_context, resolver=resolver)
def start(workflow_id, deployment_id, timeout, force, allow_custom_parameters, include_logs, parameters): logger = get_logger() parameters = utils.inputs_to_dict(parameters, 'parameters') management_ip = utils.get_management_server_ip() logger.info("Executing workflow '{0}' on deployment '{1}' at" " management server {2} [timeout={3} seconds]".format( workflow_id, deployment_id, management_ip, timeout)) events_logger = get_events_logger() events_message = "* Run 'cfy events list --include-logs " \ "--execution-id {0}' to retrieve the " \ "execution's events/logs" try: client = utils.get_rest_client(management_ip) try: execution = client.executions.start( deployment_id, workflow_id, parameters=parameters, allow_custom_parameters=allow_custom_parameters, force=force) except (exceptions.DeploymentEnvironmentCreationInProgressError, exceptions.DeploymentEnvironmentCreationPendingError) as e: # wait for deployment environment creation workflow if isinstance( e, exceptions.DeploymentEnvironmentCreationPendingError): status = 'pending' else: status = 'in progress' logger.info( 'Deployment environment creation is {0}!'.format(status)) logger.info('Waiting for create_deployment_environment ' 'workflow execution to finish...') now = time.time() wait_for_execution(client, _get_deployment_environment_creation_execution( client, deployment_id), events_handler=events_logger, include_logs=include_logs, timeout=timeout) remaining_timeout = time.time() - now timeout -= remaining_timeout # try to execute user specified workflow execution = client.executions.start( deployment_id, workflow_id, parameters=parameters, allow_custom_parameters=allow_custom_parameters, force=force) execution = wait_for_execution(client, execution, events_handler=events_logger, include_logs=include_logs, timeout=timeout) if execution.error: logger.info("Execution of workflow '{0}' for deployment " "'{1}' failed. [error={2}]".format( workflow_id, deployment_id, execution.error)) logger.info(events_message.format(execution.id)) raise SuppressedCloudifyCliError() else: logger.info("Finished executing workflow '{0}' on deployment" " '{1}'".format(workflow_id, deployment_id)) logger.info(events_message.format(execution.id)) except ExecutionTimeoutError, e: logger.info("Execution of workflow '{0}' " "for deployment '{1}' timed out. " "* Run 'cfy executions cancel " "--execution-id {2}' to cancel" " the running workflow.".format(workflow_id, deployment_id, e.execution_id)) events_tail_message = "* Run 'cfy events list --tail --include-logs " \ "--execution-id {0}' to retrieve the " \ "execution's events/logs" logger.info(events_tail_message.format(e.execution_id)) raise SuppressedCloudifyCliError()
def update(deployment_id, blueprint_path, inputs, blueprint_filename, archive_location, skip_install, skip_uninstall, workflow_id, force, include_logs, json): logger = get_logger() rest_host = utils.get_rest_host() client = utils.get_rest_client(rest_host) processed_inputs = utils.inputs_to_dict(inputs, 'inputs') blueprint_or_archive_path = blueprint_path.name \ if blueprint_path else archive_location logger.info('Updating deployment {dep_id} using blueprint {path}'.format( dep_id=deployment_id, path=blueprint_or_archive_path)) deployment_update = client.deployment_updates.update( deployment_id, blueprint_or_archive_path, application_file_name=blueprint_filename, inputs=processed_inputs, workflow_id=workflow_id, skip_install=skip_install, skip_uninstall=skip_uninstall, force=force) events_logger = get_events_logger(json) execution = wait_for_execution( client, client.executions.get(deployment_update.execution_id), events_handler=events_logger, include_logs=include_logs, timeout=None) # don't timeout ever if execution.error: logger.info("Execution of workflow '{0}' for deployment " "'{1}' failed. [error={2}]" .format(execution.workflow_id, execution.deployment_id, execution.error)) logger.info('Failed updating deployment {dep_id}. Deployment update ' 'id: {depup_id}. Execution id: {exec_id}' .format(depup_id=deployment_update.id, dep_id=deployment_id, exec_id=execution.id)) raise SuppressedCloudifyCliError() else: logger.info("Finished executing workflow '{0}' on deployment " "'{1}'".format(execution.workflow_id, execution.deployment_id)) logger.info('Successfully updated deployment {dep_id}. ' 'Deployment update id: {depup_id}. Execution id: {exec_id}' .format(depup_id=deployment_update.id, dep_id=deployment_id, exec_id=execution.id))
def start(workflow_id, deployment_id, timeout, force, allow_custom_parameters, include_logs, parameters): logger = get_logger() parameters = utils.inputs_to_dict(parameters, 'parameters') management_ip = utils.get_management_server_ip() logger.info("Executing workflow '{0}' on deployment '{1}' at" " management server {2} [timeout={3} seconds]" .format(workflow_id, deployment_id, management_ip, timeout)) events_logger = get_events_logger() events_message = "* Run 'cfy events list --include-logs " \ "--execution-id {0}' to retrieve the " \ "execution's events/logs" try: client = utils.get_rest_client(management_ip) try: execution = client.executions.start( deployment_id, workflow_id, parameters=parameters, allow_custom_parameters=allow_custom_parameters, force=force) except (exceptions.DeploymentEnvironmentCreationInProgressError, exceptions.DeploymentEnvironmentCreationPendingError) as e: # wait for deployment environment creation workflow if isinstance( e, exceptions.DeploymentEnvironmentCreationPendingError): status = 'pending' else: status = 'in progress' logger.info('Deployment environment creation is {0}!'.format( status)) logger.info('Waiting for create_deployment_environment ' 'workflow execution to finish...') now = time.time() wait_for_execution(client, _get_deployment_environment_creation_execution( client, deployment_id), events_handler=events_logger, include_logs=include_logs, timeout=timeout) remaining_timeout = time.time() - now timeout -= remaining_timeout # try to execute user specified workflow execution = client.executions.start( deployment_id, workflow_id, parameters=parameters, allow_custom_parameters=allow_custom_parameters, force=force) execution = wait_for_execution(client, execution, events_handler=events_logger, include_logs=include_logs, timeout=timeout) if execution.error: logger.info("Execution of workflow '{0}' for deployment " "'{1}' failed. [error={2}]" .format(workflow_id, deployment_id, execution.error)) logger.info(events_message.format(execution.id)) raise SuppressedCloudifyCliError() else: logger.info("Finished executing workflow '{0}' on deployment" " '{1}'".format(workflow_id, deployment_id)) logger.info(events_message.format(execution.id)) except ExecutionTimeoutError, e: logger.info("Execution of workflow '{0}' " "for deployment '{1}' timed out. " "* Run 'cfy executions cancel " "--execution-id {2}' to cancel" " the running workflow." .format(workflow_id, deployment_id, e.execution_id)) events_tail_message = "* Run 'cfy events list --tail --include-logs " \ "--execution-id {0}' to retrieve the " \ "execution's events/logs" logger.info(events_tail_message.format(e.execution_id)) raise SuppressedCloudifyCliError()
def start(workflow_id, deployment_id, timeout, force, allow_custom_parameters, include_logs, parameters, json): logger = get_logger() parameters = utils.inputs_to_dict(parameters, 'parameters') rest_host = utils.get_rest_host() logger.info("Executing workflow '{0}' on deployment '{1}' at" " management server {2} [timeout={3} seconds]" .format(workflow_id, deployment_id, rest_host, timeout)) events_logger = get_events_logger(json) events_message = "* Run 'cfy events list --include-logs " \ "--execution-id {0}' to retrieve the " \ "execution's events/logs" original_timeout = timeout try: client = utils.get_rest_client(rest_host) try: execution = client.executions.start( deployment_id, workflow_id, parameters=parameters, allow_custom_parameters=allow_custom_parameters, force=force) except (exceptions.DeploymentEnvironmentCreationInProgressError, exceptions.DeploymentEnvironmentCreationPendingError) as e: # wait for deployment environment creation workflow if isinstance( e, exceptions.DeploymentEnvironmentCreationPendingError): status = 'pending' else: status = 'in progress' logger.info('Deployment environment creation is {0}...'.format( status)) logger.debug('Waiting for create_deployment_environment ' 'workflow execution to finish...') now = time.time() wait_for_execution(client, _get_deployment_environment_creation_execution( client, deployment_id), events_handler=events_logger, include_logs=include_logs, timeout=timeout) remaining_timeout = time.time() - now timeout -= remaining_timeout # try to execute user specified workflow execution = client.executions.start( deployment_id, workflow_id, parameters=parameters, allow_custom_parameters=allow_custom_parameters, force=force) execution = wait_for_execution(client, execution, events_handler=events_logger, include_logs=include_logs, timeout=timeout) if execution.error: logger.info('Execution of workflow {0} for deployment ' '{1} failed. [error={2}]'.format( workflow_id, deployment_id, execution.error)) logger.info(events_message.format(execution.id)) raise SuppressedCloudifyCliError() else: logger.info('Finished executing workflow {0} on deployment ' '{1}'.format(workflow_id, deployment_id)) logger.info(events_message.format(execution.id)) except ExecutionTimeoutError as e: logger.info( "Timed out waiting for workflow '{0}' of deployment '{1}' to " "end. The execution may still be running properly; however, " "the command-line utility was instructed to wait up to {3} " "seconds for its completion.\n\n" "* Run 'cfy executions list' to determine the execution's " "status.\n" "* Run 'cfy executions cancel --execution-id {2}' to cancel" " the running workflow.".format( workflow_id, deployment_id, e.execution_id, original_timeout)) events_tail_message = "* Run 'cfy events list --tail --include-logs " \ "--execution-id {0}' to retrieve the " \ "execution's events/logs" logger.info(events_tail_message.format(e.execution_id)) raise SuppressedCloudifyCliError()