/// <summary> /// Initializes the storage account creating the containers /// </summary> /// <param name="configuration"></param> /// <param name="logger"></param> /// <param name="seedData"></param> public static async void Initialize(IConfiguration configuration, ILogger logger, bool seedData) { logger.LogInformation("Initializing Azure storage"); var account = CloudStorageAccount.Parse(configuration.GetConnectionString("Storage")); var client = account.CreateCloudBlobClient(); var inputsContainerName = configuration["BatchServer:InputsContainerName"]; logger.LogInformation($"Creating inputs container '{inputsContainerName}'"); InputsContainer = client.GetContainerReference(inputsContainerName); await InputsContainer.CreateIfNotExistsAsync(BlobContainerPublicAccessType.Blob, null, null) .ConfigureAwait(continueOnCapturedContext: false); var outputsContainerName = configuration["BatchServer:OutputsContainerName"]; logger.LogInformation($"Creating inputs container '{outputsContainerName}'"); OutputsContainer = client.GetContainerReference(outputsContainerName); await OutputsContainer.CreateIfNotExistsAsync(BlobContainerPublicAccessType.Off, null, null) .ConfigureAwait(continueOnCapturedContext: false); if (seedData) { // Look for any input var blobs = await InputsContainer.ListBlobsSegmentedAsync(null) .ConfigureAwait(continueOnCapturedContext: false); if (blobs.Results.Any()) { logger.LogInformation("Database already initialized. Skipping..."); return; // The database has been seeded } for (var i = 1; i < 10000; i++) { var blob = InputsContainer.GetBlockBlobReference($"input{i}.txt"); await blob.UploadTextAsync("Hello world") .ConfigureAwait(continueOnCapturedContext: false); } } logger.LogInformation($"Storage successfully initialized"); }