async Task OrderCreationOfStudySpecificDatasetStorageAccount(Study study, Dataset dataset, CloudResource resourceGroup, string clientIp, ProvisioningQueueParentDto queueParent, CancellationToken cancellationToken) { try { if (resourceGroup == null) { throw new ArgumentNullException("resourceGroup", "Resource group entry is null"); } _logger.LogInformation($"CreateResourcesForStudySpecificDataset - Dataset Id: {dataset.Id}"); var currentUser = await _userService.GetCurrentUserAsync(); var tagsForStorageAccount = ResourceTagFactory.StudySpecificDatasourceStorageAccountTags(_config, study, dataset.Name); var storageAccountName = AzureResourceNameUtil.StudySpecificDataSetStorageAccount(dataset.Name); var resourceEntry = await _cloudResourceCreateService.CreateStudySpecificDatasetEntryAsync(dataset.Id, resourceGroup.Id, resourceGroup.Region, resourceGroup.ResourceGroupName, storageAccountName, tagsForStorageAccount); ProvisioningQueueUtil.CreateChildAndAdd(queueParent, resourceEntry); var serverPublicIp = await _publicIpService.GetIp(); DatasetFirewallUtils.EnsureDatasetHasFirewallRules(_logger, currentUser, dataset, clientIp, serverPublicIp); await _db.SaveChangesAsync(); var stateForFirewallOperation = DatasetFirewallUtils.TranslateAllowedIpsToOperationDesiredState(dataset.FirewallRules.ToList()); var createStorageAccountOperation = CloudResourceOperationUtil.GetCreateOperation(resourceEntry); var firewallUpdateOperation = await _cloudResourceOperationCreateService.CreateUpdateOperationAsync(resourceEntry.Id, CloudResourceOperationType.ENSURE_FIREWALL_RULES, dependsOn : createStorageAccountOperation.Id, desiredState : stateForFirewallOperation); ProvisioningQueueUtil.CreateChildAndAdd(queueParent, firewallUpdateOperation); var stateForCorsRules = DatasetCorsUtils.CreateDatasetCorsRules(_config); var corsUpdateOperation = await _cloudResourceOperationCreateService.CreateUpdateOperationAsync(resourceEntry.Id, CloudResourceOperationType.ENSURE_CORS_RULES, dependsOn : firewallUpdateOperation.Id, desiredState : stateForCorsRules); ProvisioningQueueUtil.CreateChildAndAdd(queueParent, corsUpdateOperation); } catch (Exception ex) { throw new Exception($"Failed to schedule creation of Azure Storage Account", ex); } }
public async Task EnsureFirewallExistsAsync(Study study, Dataset dataset, string clientIp, CancellationToken cancellationToken = default) { var currentUser = await _userService.GetCurrentUserAsync(); var serverPublicIp = await _publicIpService.GetIp(); if (DatasetFirewallUtils.SetDatasetFirewallRules(currentUser, dataset, clientIp, serverPublicIp)) { await _db.SaveChangesAsync(cancellationToken); var stateForFirewallOperation = DatasetFirewallUtils.TranslateAllowedIpsToOperationDesiredState(dataset.FirewallRules.ToList()); var datasetStorageAccountResource = DatasetUtils.GetStudySpecificStorageAccountResourceEntry(dataset); var firewallUpdateOperation = await _cloudResourceOperationCreateService.CreateUpdateOperationAsync(datasetStorageAccountResource.Id, CloudResourceOperationType.ENSURE_FIREWALL_RULES, desiredState : stateForFirewallOperation); await _provisioningQueueService.CreateItemAndEnqueue(firewallUpdateOperation); await WaitForOperationToCompleteAsync(firewallUpdateOperation.Id); } }
public void SetDatasetFirewallRules_ShouldReturnException(string expectedResult, string clientIp, string serverIp) { var fireWallRules = new List <DatasetFirewallRule>() { }; fireWallRules.Add(new DatasetFirewallRule { Id = 1, Address = "1", Created = DateTime.Today.AddYears(-1) }); var user = new UserDto() { Id = 1 }; var dataset = new Dataset() { FirewallRules = fireWallRules }; var ex = Assert.Throws <ArgumentException>(() => DatasetFirewallUtils.SetDatasetFirewallRules(user, dataset, clientIp, serverIp)); Assert.Equal(expectedResult, ex.Message); }
public void SetDatasetFirewallRules_ShouldReturnTrue(int expectedValue, string clientIp, string serverIp) { var fireWallRules = new List <DatasetFirewallRule>() { }; fireWallRules.Add(new DatasetFirewallRule { Id = 1, Address = "1", Created = DateTime.Today.AddYears(-1) }); var user = new UserDto() { Id = 1 }; var dataset = new Dataset() { FirewallRules = fireWallRules }; var result = DatasetFirewallUtils.SetDatasetFirewallRules(user, dataset, clientIp, serverIp); Assert.True(result); Assert.Equal(expectedValue, dataset.FirewallRules.Count); }