public override async Task <DeleteVolumeResponse> DeleteVolume(
            DeleteVolumeRequest request,
            ServerCallContext context)
        {
            DeleteVolumeResponse response = new DeleteVolumeResponse();
            var id = request.VolumeId;

            using (logger.BeginKeyValueScope("volume_id", id))
                using (var _s = logger.StepInformation("{0}", nameof(DeleteVolume)))
                {
                    try
                    {
                        var ctx = new Helpers.Azure.DataProviderContext <ManagedDiskConfig>();
                        await contextConfig.Provide(ctx);

                        var actx = new AzureAuthConfigProviderContext {
                            Secrets = request.ControllerDeleteSecrets
                        };

                        var provisionService = provisionServiceFactory.Create(provider.Provide(actx), ctx.Result.SubscriptionId);
                        await provisionService.DeleteAsync(AzureResourceInnerHelper.CreateForDisk(
                                                               ctx.Result.SubscriptionId, ctx.Result.ResourceGroupName, id));
                    }
                    catch (Exception ex)
                    {
                        logger.LogError(ex, "Exception in DeleteVolume");
                        throw new RpcException(new Status(StatusCode.Internal, ex.Message));
                    }

                    _s.Commit();
                }

            return(response);
        }
        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);
        }
Exemple #3
0
 public ServiceClientCredentials Provide(AzureAuthConfigProviderContext ctx)
 {
     azureSpProvider.Provide(ctx);
     return(SdkContext.AzureCredentialsFactory.FromServicePrincipal(
                ctx.Result.ClientId,
                ctx.Result.ClientSecret,
                ctx.Result.TenantId,
                AzureEnvironment.AzureGlobalCloud));
 }
        public override async Task <CreateVolumeResponse> CreateVolume(
            CreateVolumeRequest request,
            ServerCallContext context)
        {
            CreateVolumeResponse response = new CreateVolumeResponse();

            if (string.IsNullOrEmpty(request.Name))
            {
                logger.LogDebug("Validation fail");
                throw new RpcException(new Status(StatusCode.InvalidArgument, "Name cannot be empty"));
            }

            using (var _s = logger.StepInformation("{0}, name: {1}", nameof(CreateVolume), request.Name))
            {
                try
                {
                    var ctx = new DataProviderContext <ManagedDiskConfig>();
                    await contextConfig.Provide(ctx);

                    var actx = new AzureAuthConfigProviderContext {
                        Secrets = request.ControllerCreateSecrets
                    };

                    var provisionService = provisionServiceFactory.Create(
                        provider.Provide(actx),
                        ctx.Result.SubscriptionId);

                    var sizeGiB = byteUnitConverter.ToGibibyte(
                        request.CapacityRange == null
                        ? 1
                        : request.CapacityRange.RequiredBytes);

                    var md = await provisionService.CreateAsync(
                        ctx.Result.SubscriptionId,
                        ctx.Result.ResourceGroupName,
                        request.Name,
                        ctx.Result.Location,
                        sizeGiB);

                    response.Volume = new Volume
                    {
                        Id            = md.Id.Id,
                        CapacityBytes = byteUnitConverter.FromGigibyte(md.Size),
                    };
                }
                catch (Exception ex)
                {
                    logger.LogError(ex, "Exception in CreateAsync");
                    throw new RpcException(new Status(StatusCode.Internal, ex.Message));
                }

                _s.Commit();
            }

            return(response);
        }
 public Task Provide(AzureAuthConfigProviderContext context)
 {
     context.Result = new AzureAuthConfig
     {
         TenantId     = Environment.GetEnvironmentVariable("DEFAULT_TENANT_ID"),
         ClientId     = Environment.GetEnvironmentVariable("DEFAULT_CLIENT_ID"),
         ClientSecret = Environment.GetEnvironmentVariable("DEFAULT_CLIENT_SECRET"),
     };
     return(Task.CompletedTask);
 }