From b993e31c5411efe9a4351fabc7a2f2b625c5a91c Mon Sep 17 00:00:00 2001 From: Amit Date: Thu, 13 Mar 2014 12:03:37 +0000 Subject: [PATCH 1/2] Add timeout and rollback options for spinning up stacks --- gonzo/backends/__init__.py | 6 ++++-- gonzo/backends/aws/cloud.py | 5 ++++- gonzo/backends/base/cloud.py | 3 ++- gonzo/backends/openstack/cloud.py | 5 ++++- gonzo/scripts/stack/launch.py | 16 ++++++++++++++-- 5 files changed, 28 insertions(+), 7 deletions(-) diff --git a/gonzo/backends/__init__.py b/gonzo/backends/__init__.py index b58334a..ba32110 100644 --- a/gonzo/backends/__init__.py +++ b/gonzo/backends/__init__.py @@ -147,7 +147,8 @@ def insert_stack_owner_output(template_dict, owner): return template_dict -def launch_stack(stack_name, template_uri, template_params, owner=None): +def launch_stack(stack_name, template_uri, template_params, + timeout_in_minutes, disable_rollback, owner=None): """ Launch stacks """ unique_stack_name = get_next_hostname(stack_name) @@ -157,7 +158,8 @@ def launch_stack(stack_name, template_uri, template_params, owner=None): owner) cloud = get_current_cloud() - return cloud.launch_stack(unique_stack_name, template) + return cloud.launch_stack(unique_stack_name, template, + timeout_in_minutes, disable_rollback) def terminate_stack(stack_name_or_id): diff --git a/gonzo/backends/aws/cloud.py b/gonzo/backends/aws/cloud.py index 901dcfc..82878b2 100644 --- a/gonzo/backends/aws/cloud.py +++ b/gonzo/backends/aws/cloud.py @@ -164,10 +164,13 @@ def launch_instance( return instance - def launch_stack(self, name, template): + def launch_stack(self, name, template, + timeout_in_minutes, disable_rollback): stack_id = self.orchestration_connection.create_stack( stack_name=name, template_body=template, + timeout_in_minutes=timeout_in_minutes, + disable_rollback=disable_rollback, ) return self._instantiate_stack(stack_id) diff --git a/gonzo/backends/base/cloud.py b/gonzo/backends/base/cloud.py index c97fdbd..84d5202 100644 --- a/gonzo/backends/base/cloud.py +++ b/gonzo/backends/base/cloud.py @@ -161,7 +161,8 @@ def launch_instance( pass @abstractmethod - def launch_stack(self, name, template): + def launch_stack(self, name, template, + timeout_in_minutes, disable_rollback): """ Launch a stack """ pass diff --git a/gonzo/backends/openstack/cloud.py b/gonzo/backends/openstack/cloud.py index 8719cb0..a022c4b 100644 --- a/gonzo/backends/openstack/cloud.py +++ b/gonzo/backends/openstack/cloud.py @@ -138,10 +138,13 @@ def launch_instance( return instance - def launch_stack(self, name, template): + def launch_stack(self, name, template, + timeout_in_minutes, disable_rollback): stack_id = self.orchestration_connection.create_stack( stack_name=name, template_body=template, + timeout_in_minutes=timeout_in_minutes, + disable_rollback=disable_rollback, ) return self._instantiate_stack(stack_id) diff --git a/gonzo/scripts/stack/launch.py b/gonzo/scripts/stack/launch.py index 02825c3..5f70e58 100644 --- a/gonzo/scripts/stack/launch.py +++ b/gonzo/scripts/stack/launch.py @@ -68,8 +68,10 @@ def launch(args): username = os.environ.get('USER') stack = launch_stack(args.stack_name, args.template_uri, - args.template_params, owner=username) - wait_for_stack_complete(stack, args.quiet) + args.template_params, + args.timeout_in_minutes, args.disable_rollback, + owner=username) + wait_for_stack_complete(stack, args.quiet,) if not stack.is_healthy: raise UnhealthyResourceError("Stack was not healthy upon completion.") @@ -150,3 +152,13 @@ def init_parser(parser): '--color', dest='color', nargs='?', default='auto', choices=['never', 'auto', 'always'], help='display coloured output. (default: auto)') + parser.add_argument( + '--timeout-in-minutes', dest='timeout_in_minutes', default=720, + help="Set stack creation timeout in minutes") + parser.add_argument( + '--disable-rollback', dest='disable_rollback', action="store_true", + help="Disable destroying stacks on failures(Disabled by default)") + parser.add_argument( + '--enable-rollback', dest='disable_rollback', action="store_false", + help="Enable destroying stacks on failures(Disabled by default)") + parser.set_defaults(disable_rollback=True) From 254d279cfcfa1c168527a5c45385969b82e492af Mon Sep 17 00:00:00 2001 From: Amit Date: Thu, 13 Mar 2014 12:06:12 +0000 Subject: [PATCH 2/2] remove confusing rollback option --- gonzo/scripts/stack/launch.py | 3 --- 1 file changed, 3 deletions(-) diff --git a/gonzo/scripts/stack/launch.py b/gonzo/scripts/stack/launch.py index 5f70e58..5122ec5 100644 --- a/gonzo/scripts/stack/launch.py +++ b/gonzo/scripts/stack/launch.py @@ -155,9 +155,6 @@ def init_parser(parser): parser.add_argument( '--timeout-in-minutes', dest='timeout_in_minutes', default=720, help="Set stack creation timeout in minutes") - parser.add_argument( - '--disable-rollback', dest='disable_rollback', action="store_true", - help="Disable destroying stacks on failures(Disabled by default)") parser.add_argument( '--enable-rollback', dest='disable_rollback', action="store_false", help="Enable destroying stacks on failures(Disabled by default)")