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}')
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" )
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)