public override async Task <ControllerUnpublishVolumeResponse> ControllerUnpublishVolume(ControllerUnpublishVolumeRequest request, ServerCallContext context) { var volumeName = request.VolumeId; //tmp fix to remove bad pvc name if (volumeName.StartsWith("C:\\")) { volumeName = HypervUtils.GetFileNameWithoutExtension(volumeName); } var foundVolume = await _service.GetVolumesAsync(new HypervVolumeFilter { Name = volumeName }) .FirstOrDefaultAsync(context.CancellationToken); if (foundVolume is null) { throw new RpcException(new Status(StatusCode.NotFound, string.Empty), "volume not found"); } var vmId = Guid.Parse(request.NodeId); var vm = await _service.GetVirtualMachinesAsync(new HypervVirtualMachineFilter { Id = vmId }) .FirstOrDefaultAsync(context.CancellationToken); if (vm is null) { throw new RpcException(new Status(StatusCode.NotFound, string.Empty), "node not found"); } //todo maybe vm is deleted, spec: SHOULD return OK await _service.DetachVolumeAsync(new HypervDetachVolumeRequest { VMId = vm.Id, VolumePath = foundVolume.Path, Host = vm.Host }, context.CancellationToken); var rsp = new ControllerUnpublishVolumeResponse { }; return(rsp); }
public override async Task <ControllerUnpublishVolumeResponse> ControllerUnpublishVolume(ControllerUnpublishVolumeRequest request, ServerCallContext context) { var response = new ControllerUnpublishVolumeResponse(); var id = request.VolumeId; using (logger.BeginKeyValueScope("volume_id", id)) using (var _s = logger.StepInformation("{0}", nameof(ControllerUnpublishVolume))) { try { var ctx = new Helpers.Azure.DataProviderContext <ManagedDiskConfig>(); await contextConfig.Provide(ctx); var actx = new AzureAuthConfigProviderContext { Secrets = request.ControllerUnpublishSecrets }; var setupService = setupServiceFactory.Create(provider.Provide(actx), ctx.Result.SubscriptionId); var vmRid = ResourceId.FromString(request.NodeId); var diskId = ResourceId.FromString(id); await setupService.RemoveAsync(vmRid, diskId); } catch (Exception ex) { logger.LogError(ex, "Exception in ControllerUnpublishVolume"); throw new RpcException(new Status(StatusCode.Internal, ex.Message)); } _s.Commit(); } return(response); }