Exemplo n.º 1
0
 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)
Exemplo n.º 2
0
 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)