Skip to content

Instantly share code, notes, and snippets.

@danield137
Last active August 24, 2021 15:47
Show Gist options
  • Save danield137/2d2c10c1dacb33fdfe2f4361b98e16c3 to your computer and use it in GitHub Desktop.
Save danield137/2d2c10c1dacb33fdfe2f4361b98e16c3 to your computer and use it in GitHub Desktop.
Create multiple storage accounts
from typing import List, Tuple
from azure.cli.core import get_default_cli # requires `pip install azure-cli-core`
from tqdm import trange # requires `pip install tqdm`, can be removed
DEFAULT_RG = "resource_group"
NAME_FORMAT = "app0storage{0}"
SA_PREFIX_ARGS = ["storage", "account"]
GENERATE_SAS_DEFAULT_ARGS = ["--expiry", "2023-01-01", "--services", "ftqb", "--resource-types", "sco" ,"--permissions" ,"cdlruwap"]
class StorageAccountCreator:
def __init__(self, az_cli) -> None:
self.az_cli = az_cli
def exists(self, name: str) -> bool:
self.az_cli.invoke(SA_PREFIX_ARGS + ["check-name", "--name", name])
result = self.az_cli.result.result
return result["nameAvailable"] == False and result["reason"] == "AlreadyExists";
def _create_storage_account(self, name):
self.az_cli.invoke(SA_PREFIX_ARGS + ["create", "--name", name, "-g", DEFAULT_RG])
def get_sas(self, name):
self.az_cli.invoke(SA_PREFIX_ARGS + ["generate-sas", "--account-name", name] + GENERATE_SAS_DEFAULT_ARGS)
r = self.az_cli.result.result
return r
def get_connection_string(self, name):
self.az_cli.invoke(SA_PREFIX_ARGS + ["show-connection-string", "--name", name])
r = self.az_cli.result.result
return r["connectionString"]
def create(self, name) -> Tuple[str, str]:
if not self.exists(name):
self._create_storage_account(name)
sas = self.get_sas(name)
conn_str = self.get_connection_string(name)
return sas, conn_str # assuming blob uri is `https://{name}.blob.storage.windows.net`
def create_many(self, n, start_idx = 0) -> List[Tuple[str,str]]:
results = []
for idx in trange(start_idx, n + start_idx):
results.append(self.create(NAME_FORMAT.format(idx + 1)))
return results
def main():
sa_creator = StorageAccountCreator(get_default_cli())
results = sa_creator.create_many(50)
if __name__ == '__main__':
main()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment