def test_cloudformation_create_and_update(self): cloudformation = CloudFormationBuddy(self.test_deploy_ctx) s3 = CloudFormationDeployS3Buddy(self.test_deploy_ctx) temp_dir = tempfile.mkdtemp() try: template = ParentTestCase._get_resource_path("cloudformation/aws-resources.template") parameter_file = ParentTestCase._get_resource_path("cloudformation/aws-resources.parameters.json") self.test_deploy_ctx['RANDOM'] = self.randomWord(5) parameter_file_rendered = self.test_deploy_ctx.render_template(parameter_file,temp_dir) template_file_url = s3.upload(file=template) self.assertFalse(cloudformation.does_stack_exist(), "Failed to identify reality") cloudformation.create_stack(template_file_url=template_file_url, parameter_file=parameter_file_rendered) self.assertTrue(cloudformation.does_stack_exist(), "Failed to identify reality") self.assertEqual(cloudformation.get_stack_status(), "CREATE_COMPLETE", "Failed to identify create complete") cloudformation.create_change_set(template_file_url=template_file_url, parameter_file=parameter_file_rendered) self.assertFalse(cloudformation.should_execute_change_set(),"Failed to id noop changeset") cloudformation.delete_change_set() self.test_deploy_ctx['RANDOM'] = self.randomWord(5) parameter_file_rendered = self.test_deploy_ctx.render_template(parameter_file,temp_dir) cloudformation.create_change_set(template_file_url=template_file_url, parameter_file=parameter_file_rendered) self.assertEqual(cloudformation.get_change_set_status(refresh=True), "CREATE_COMPLETE", "Did not get expected cs status") self.assertTrue(cloudformation.should_execute_change_set(),"Failed to id good changeset") if not cloudformation.should_execute_change_set(): self.fail("Did not want to execute changeset") else: cloudformation.execute_change_set() cloudformation.log_stack_status() finally: super(CloudFormationTestCase, self).clean(cloudformation) super(CloudFormationTestCase, self).clean_s3(s3) super(CloudFormationTestCase, self).clean_dir(temp_dir)
def _internal_deploy(self, dry_run): # Initialize our buddies s3 = CloudFormationDeployS3Buddy(self.deploy_ctx) cloud_formation = CloudFormationBuddy(self.deploy_ctx) if dry_run: self.validate() return # Upload our template to s3 to make things a bit easier and keep a record template_file_url = s3.upload(file=(self.template_file)) # Upload all of our config files to S3 rendering any variables config_files = self.get_rendered_config_files() for rendered in config_files: s3.upload(file=rendered) # render our parameter files parameter_file_rendered = self.get_rendered_param_file() # see if we are updating or creating if cloud_formation.should_create_change_set(): cloud_formation.create_change_set( template_file_url=template_file_url, parameter_file=parameter_file_rendered) # make sure it is available and that there are no special conditions if cloud_formation.should_execute_change_set(): print_utility.progress( "Updating existing stack with ChangeSet - {}".format( self.stack_name)) cloud_formation.execute_change_set() else: print_utility.warn("No computed changes for stack - {}".format( self.stack_name)) # if there are no changes then clean up and exit cloud_formation.delete_change_set() return else: print_utility.progress("Creating new stack - {}".format( self.stack_name)) cloud_formation.create_stack( template_file_url=template_file_url, parameter_file=parameter_file_rendered)