azext_iot/deviceupdate/providers/storage.py (26 lines of code) (raw):

# coding=utf-8 # -------------------------------------------------------------------------------------------- # Copyright (c) Microsoft Corporation. All rights reserved. # Licensed under the MIT License. See License.txt in the project root for license information. # -------------------------------------------------------------------------------------------- from azure.identity import AzureCliCredential from azure.mgmt.storage import StorageManagementClient from azure.storage.blob import BlobServiceClient from msrestazure.tools import parse_resource_id from azure.cli.core.azclierror import ResourceNotFoundError from typing import TypeVar StorageAccount = TypeVar("StorageAccount") class StorageAccountManager(object): def __init__(self, subscription_id: str): self.subscription_id = subscription_id self.client = StorageManagementClient( credential=AzureCliCredential(), subscription_id=self.subscription_id) def find_storage_account(self, account_name: str) -> StorageAccount: list_iterator = self.client.storage_accounts.list() for acc in list_iterator: if acc.name == account_name: return acc raise ResourceNotFoundError( f"Unable to find storage account: {account_name} in subscription: {self.subscription_id}.") def get_sas_blob_service_client(self, account_name: str) -> BlobServiceClient: account = self.find_storage_account(account_name) storage_rg = parse_resource_id(account.id)["resource_group"] storage_keys = self.client.storage_accounts.list_keys( resource_group_name=storage_rg, account_name=account.name) return BlobServiceClient( account_url=account.primary_endpoints.blob, credential=storage_keys.keys[0].value)