我在使用 azure stprage blob sdk 取消删除已删除的容器时遇到错误

问题描述 投票:0回答:2

我在使用 azure stprage blob sdk 取消删除已删除的容器时遇到错误。

这些是我正在使用的软件包版本:

azure-storage-blob =“=12.18.3” 天蓝色管理存储 =“=21.1.0”

我已经创建了 blobserviceclient 并调用 undelete_container 函数来恢复已删除的容器。

创建 BlobServiceClient 对象

blob_service_client = BlobServiceClient(storage_account_url, credential=default_credential)
recovered_containers = blob_service_client.undelete_container(container_name, deleted_container_version = '')

我面临的问题是“deleted_container_version”是 undelete_container 的强制参数。但我不知道要提供的价值是什么。这被定义为字符串参数。

我需要传递的值应该是多少?

这是我在已删除容器上看到的属性。

请指导我解决这个问题。先谢谢你了

我确实尝试将deleted_container_version作为空字符串,最新值,但没有通过。

在不传递deleted_container_version时收到错误,指出deleted_container_version是强制参数,需要传递。

在将它们作为空字符串或最新字符串传递时,收到错误消息,指出标头版本是无效值或类似的内容,

azure azure-blob-storage azure-storage azure-python-sdk
2个回答
0
投票

我在使用 Azure 存储 blob sdk 取消删除已删除的容器时遇到错误。

我同意 KKI 的评论,即获取已删除的容器首先列出带有

include_deleted=True
的容器,从中您可以获取容器的版本。

对于 Azure Blob 存储中的

undelete
特定容器
test
,您可以使用以下 Python 代码。

代码:

from azure.storage.blob import BlobServiceClient
from azure.identity import DefaultAzureCredential

storage_account_url="https://xxxx.blob.core.windows.net/"
default_credential=DefaultAzureCredential()
blob_service_client = BlobServiceClient(storage_account_url, credential=default_credential)

for container in blob_service_client.list_containers(include_metadata=True, include_deleted=True):
    if container.name == "<container name>":
        version_id = container.version
        break


blob_service_client.undelete_container("test", deleted_container_version=version_id)

输出: enter image description here

如果您需要

undelete all
容器,您可以使用以下代码。

代码:

from azure.storage.blob import BlobServiceClient
from azure.identity import DefaultAzureCredential

storage_account_url="https://venkat901.blob.core.windows.net/"
default_credential=DefaultAzureCredential()
blob_service_client = BlobServiceClient(storage_account_url, credential=default_credential)

for container in blob_service_client.list_containers(include_metadata=True, include_deleted=True):
    if container.deleted:
        version_id = container.version
        container_name = container.name
        
        blob_service_client.undelete_container(container_name, deleted_container_version=version_id)

输出: enter image description here

参考:

使用 Python 列出 Blob 容器 - Azure 存储 |微软学习


0
投票

这段代码有效。

def recover_soft_deleted_containers_on_storage_account(storage_account: str, container_name: str):
    """
    recover soft deleted containers.
    Operation will only be successful if used within the specified number of days set in the delete retention policy.

    Args:
        storage_account:
        container_name:

    Returns:

    """
    blob_service_client = create_blob_service_client(storage_account=storage_account)
    container_list = list(blob_service_client.list_containers(include_deleted=True))
    assert len(container_list) >= 1
    for container in container_list:
        # Find the deleted container and restore it
        if container.deleted and container.name == container_name:
            restored_container_client = blob_service_client.undelete_container(
                deleted_container_name=container.name, deleted_container_version=container.version)
    print(f"Container {container_name} recovered from {storage_account}")
© www.soinside.com 2019 - 2024. All rights reserved.