def generate_command(ctx, path): """ Prints the template. Prints the template used for stack in PATH. """ stack = get_stack(ctx, path) write(stack.template.body)
def describe_policy(ctx, path): """ Displays the stack policy used. """ stack = get_stack(ctx, path) response = stack.get_policy() write(response.get('StackPolicyBody', {}))
def execute_command(ctx, path, change_set_name, yes): """ Executes a change set. """ stack = get_stack(ctx, path) confirmation("execute", yes, change_set=change_set_name, stack=path) stack.execute_change_set(change_set_name)
def list_change_sets(ctx, path): """ List change sets for stack. """ stack = get_stack(ctx, path) response = stack.list_change_sets() if response['ResponseMetadata']['HTTPStatusCode'] == 200: del response['ResponseMetadata'] write(response, ctx.obj["output_format"])
def describe_change_set(ctx, path, change_set_name, verbose): """ Describes the change set. """ stack = get_stack(ctx, path) description = stack.describe_change_set(change_set_name) if not verbose: description = simplify_change_set_description(description) write(description, ctx.obj["output_format"])
def validate_command(ctx, path): """ Validates the template. Validates the template used for stack in PATH. """ stack = get_stack(ctx, path) response = stack.template.validate() if response['ResponseMetadata']['HTTPStatusCode'] == 200: del response['ResponseMetadata'] click.echo("Template is valid. Template details:\n") write(response, ctx.obj["output_format"])
def set_policy_command(ctx, path, policy_file, built_in): """ Sets stack policy. Sets a specific stack policy for either a file or using a built-in policy. """ stack = get_stack(ctx, path) if built_in == 'deny-all': stack.lock() elif built_in == 'allow-all': stack.unlock() else: stack.set_policy(policy_file)
def list_outputs(ctx, path, export): """ List outputs for stack. """ stack = get_stack(ctx, path) response = stack.describe_outputs() if export == "envvar": write("\n".join([ "export SCEPTRE_{0}={1}".format(output["OutputKey"], output["OutputValue"]) for output in response ])) else: write(response, ctx.obj["output_format"])
def create_command(ctx, path, change_set_name, yes): """ Creates a stack or a change set. Creates a stack for a given config PATH. Or if CHANGE_SET_NAME is specified creates a change set for stack in PATH. """ action = "create" stack = get_stack(ctx, path) if change_set_name: confirmation(action, yes, change_set=change_set_name, stack=path) stack.create_change_set(change_set_name) else: confirmation(action, yes, stack=path) response = stack.create() if response != StackStatus.COMPLETE: exit(1)
def update_command(ctx, path, change_set, verbose, yes): """ Update a stack. Updates a stack for a given config PATH. Or perform an update via change-set when the change-set flag is set. """ stack = get_stack(ctx, path) if change_set: change_set_name = "-".join(["change-set", uuid1().hex]) stack.create_change_set(change_set_name) try: # Wait for change set to be created status = stack.wait_for_cs_completion(change_set_name) # Exit if change set fails to create if status != StackChangeSetStatus.READY: exit(1) # Describe changes description = stack.describe_change_set(change_set_name) if not verbose: description = simplify_change_set_description(description) write(description, ctx.obj["output_format"]) # Execute change set if happy with changes if yes or click.confirm("Proceed with stack update?"): stack.execute_change_set(change_set_name) finally: # Clean up by deleting change set stack.delete_change_set(change_set_name) else: confirmation("update", yes, stack=path) response = stack.update() if response != StackStatus.COMPLETE: exit(1)