예제 #1
0
    def test_resolver(self, mock_get_output_value):
        stack = MagicMock(spec=Stack)
        stack.dependencies = []
        stack.project_code = "project-code"
        stack.connection_manager = MagicMock(spec=ConnectionManager)
        stack_output_resolver = StackOutput("account/dev/vpc::VpcId", stack)
        mock_get_output_value.return_value = "output_value"

        result = stack_output_resolver.resolve()
        assert result == "output_value"
        mock_get_output_value.assert_called_once_with(
            "project-code-account-dev-vpc", "VpcId")
        assert stack.dependencies == ["account/dev/vpc"]
 def run(self):
     try:
         bucket_name = StackOutput(argument=self.argument,
                              connection_manager=self.connection_manager,
                              environment_config=self.environment_config,
                              stack_config=self.stack_config,
                              ).resolve()
         s3 = self.connection_manager.boto_session.resource('s3')
         bucket = s3.Bucket(bucket_name)
         print(f"Deleting bucket: {bucket_name}")
         bucket.delete()
     except Exception as e:
         print(e)
 def run(self):
     """
     Deletes a bucket
     Usage: !s3_delete_bucket stack_name::output_name
     :return:
     """
     try:
         bucket_name = StackOutput(
             argument=self.argument,
             connection_manager=self.connection_manager,
             environment_config=self.environment_config,
             stack_config=self.stack_config,
         ).resolve()
         s3 = self.connection_manager.boto_session.resource('s3')
         bucket = s3.Bucket(bucket_name)
         print(f"[{self.NAME}]: Deleting bucket: {bucket_name}")
         bucket.delete()
     except Exception as e:
         print(e)
    def run(self):
        """
        Removes all objects from a bucket
        Usage: !s3_empty_bucket stack_name::output_name
        :return:
        """
        try:
            bucket_name = StackOutput(argument=self.argument,
                                      connection_manager=self.connection_manager,
                                      environment_config=self.environment_config,
                                      stack_config=self.stack_config,
                                      ).resolve()

            print(f"[{self.NAME}] Emptying bucket: {bucket_name}")
            s3 = self.connection_manager.boto_session.resource('s3')
            bucket = s3.Bucket(bucket_name)
            s3_client = self.connection_manager.boto_session.client('s3')
            resp = s3_client.list_object_versions(Bucket=bucket_name)

            del_markers = {}
            # All delete markers that are latest version, i.e., should be deleted
            if resp.get('DeleteMarkers'):
                del_markers = {item['Key']: item['VersionId'] for item in resp['DeleteMarkers'] if item['IsLatest'] == True}

            # all objects must be deleted
            for item in resp['Versions']:
                self.del_obj_list[item['Key']].append(item['VersionId'])

            # Remove old versions of object by VersionId
            for del_item in self.del_obj_list:
                print(f'[{self.NAME}] Deleting: {del_item}')
                rm_obj = bucket.Object(del_item)

                for del_id in self.del_obj_list[del_item]:
                    rm_obj.delete(VersionId=del_id)

                # Remove delete marker
                rm_obj.delete(VersionId=del_markers[del_item])

            bucket.objects.all().delete()
        except Exception as e:
            print(f'[{self.NAME}] Error: {e}')
예제 #5
0
    def test_resolve(self, mock_get_output_value):
        mock_environment_config = MagicMock(spec=Config)
        mock_stack_config = MagicMock(spec=Config)
        mock_environment_config.__getitem__.return_value = "project-code"
        mock_stack_config.__getitem__.return_value = []

        stack_output_resolver = StackOutput(
            environment_config=mock_environment_config,
            stack_config=mock_stack_config,
            connection_manager=sentinel.connection_manager,
            argument="account/dev/vpc::VpcId"
        )

        mock_get_output_value.return_value = "output_value"

        stack_output_resolver.resolve()

        mock_get_output_value.assert_called_once_with(
            "project-code-account-dev-vpc", "VpcId"
        )
예제 #6
0
 def run(self):
     """
     Uploads a file to s3
     Usage: !s3_upload_file file_name bucket_key stack_name::output_name
     :return:
     """
     try:
         cwd = os.getcwd()
         print(cwd)
         file_name, bucket_key, stack_param = self.argument.split(' ', 2)
         bucket_name = StackOutput(
             argument=stack_param,
             connection_manager=self.connection_manager,
             environment_config=self.environment_config,
             stack_config=self.stack_config,
         ).resolve()
         print(
             f"[{self.NAME}] Copying {file_name} to bucket: s3://{bucket_name}/{bucket_key}"
         )
         s3 = self.connection_manager.boto_session.resource('s3')
         bucket = s3.Bucket(bucket_name)
         bucket.upload_file(file_name, bucket_key)
     except Exception as e:
         print(e)