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);
        }