public async Task <InvokeResult> DeleteInstanceAsync(String instanceId, EntityHeader org, EntityHeader user) { var instance = await _instanceRepo.GetInstanceAsync(instanceId); await AuthorizeAsync(instance, AuthorizeResult.AuthorizeActions.Delete, user, org); await CheckForDepenenciesAsync(instance); var repo = await _deviceManagerRepo.GetDeviceRepositoryAsync(instance.DeviceRepository.Id, org, user); if (repo != null) { /* Upon deletion release the repo so it can be used somewhere else */ repo.Instance = null; await _deviceManagerRepo.UpdateDeviceRepositoryAsync(repo, org, user); } instance.IsArchived = true; await _instanceRepo.UpdateInstanceAsync(instance); if (!EntityHeader.IsNullOrEmpty(instance.PrimaryHost)) { var host = await _deploymentHostManager.GetDeploymentHostAsync(instance.PrimaryHost.Id, org, user); if (host.HostType.Value == HostTypes.Dedicated) { await PerformActionAsync(instance, org, user, DeploymentActivityTaskTypes.DestroyHost); await _deploymentHostManager.DeleteDeploymentHostAsync(host.Id, org, user); } } return(InvokeResult.Success); }
public async Task <InvokeResult> UpdateInstanceAsync(DeploymentInstance instance, EntityHeader org, EntityHeader user) { ValidationCheck(instance, Actions.Update); await AuthorizeAsync(instance, AuthorizeResult.AuthorizeActions.Update, user, org); var existingInstance = await _instanceRepo.GetInstanceAsync(instance.Id); if (existingInstance.DeviceRepository.Id != instance.DeviceRepository.Id) { var newlyAssginedRepo = await _deviceManagerRepo.GetDeviceRepositoryAsync(instance.DeviceRepository.Id, org, user); if (!EntityHeader.IsNullOrEmpty(newlyAssginedRepo.Instance)) { throw new ValidationException("Device Repository In Use", new ErrorMessage($"Repository is already assigned to the instance {newlyAssginedRepo.Instance.Text}. A Device Repository can only be assigned to one Instance at a time.")); } newlyAssginedRepo.Instance = EntityHeader.Create(instance.Id, instance.Name); await _deviceManagerRepo.UpdateDeviceRepositoryAsync(newlyAssginedRepo, org, user); var oldRepo = await _deviceManagerRepo.GetDeviceRepositoryAsync(existingInstance.DeviceRepository.Id, org, user); oldRepo.Instance = null; await _deviceManagerRepo.UpdateDeviceRepositoryAsync(oldRepo, org, user); } if (existingInstance.Status.Value != instance.Status.Value || existingInstance.IsDeployed != instance.IsDeployed) { await UpdateInstanceStatusAsync(instance.Id, instance.Status.Value, instance.IsDeployed, instance.ContainerTag.Text.Replace("v", string.Empty), org, user); } var solution = instance.Solution.Value; instance.Solution.Value = null; await _instanceRepo.UpdateInstanceAsync(instance); instance.Solution.Value = solution; if (!EntityHeader.IsNullOrEmpty(instance.PrimaryHost)) { var host = await _deploymentHostManager.GetDeploymentHostAsync(instance.PrimaryHost.Id, org, user); if (host.Size.Id != instance.Size.Id || host.CloudProvider.Id != instance.CloudProvider.Id || host.Subscription.Id != instance.Subscription.Id || host.ContainerRepository.Id != instance.ContainerRepository.Id || host.ContainerTag.Id != instance.ContainerTag.Id) { host.Size = instance.Size; host.Subscription = instance.Subscription; host.CloudProvider = instance.CloudProvider; host.ContainerRepository = instance.ContainerRepository; host.ContainerTag = instance.ContainerTag; await _deploymentHostManager.UpdateDeploymentHostAsync(host, org, user); } } return(InvokeResult.Success); }
public async Task <DeploymentInstance> GetInstanceAsync(string instanceId, EntityHeader org, EntityHeader user) { var instance = await _instanceRepo.GetInstanceAsync(instanceId); MapInstanceProperties(instance); await AuthorizeAsync(instance, AuthorizeResult.AuthorizeActions.Read, user, org); var keysUpdated = false; if (String.IsNullOrEmpty(instance.SharedAccessKeySecureId1)) { keysUpdated = true; var key = GenerateRandomKey(); var keyAddResult = await _secureStorage.AddSecretAsync(org, key); if (!keyAddResult.Successful) { return(null); } instance.SharedAccessKeySecureId1 = keyAddResult.Result; } if (String.IsNullOrEmpty(instance.SharedAccessKeySecureId2)) { keysUpdated = true; var key = GenerateRandomKey(); var keyAddResult = await _secureStorage.AddSecretAsync(org, key); if (!keyAddResult.Successful) { return(null); } instance.SharedAccessKeySecureId2 = keyAddResult.Result; } if (keysUpdated) { await AuthorizeAsync(instance, AuthorizeResult.AuthorizeActions.Update, user, org, "Added Missing Keys"); await _instanceRepo.UpdateInstanceAsync(instance); } return(instance); }