public override void Invoke(AWSCredentials creds, RegionEndpoint region, int maxItems) { AmazonStorageGatewayConfig config = new AmazonStorageGatewayConfig(); config.RegionEndpoint = region; ConfigureClient(config); AmazonStorageGatewayClient client = new AmazonStorageGatewayClient(creds, config); ListVolumesResponse resp = new ListVolumesResponse(); do { ListVolumesRequest req = new ListVolumesRequest { Marker = resp.Marker , Limit = maxItems }; resp = client.ListVolumes(req); CheckError(resp.HttpStatusCode, "200"); foreach (var obj in resp.VolumeInfos) { AddObject(obj); } }while (!string.IsNullOrEmpty(resp.Marker)); }
/// <summary> /// Unmarshaller the response from the service to the response class. /// </summary> /// <param name="context"></param> /// <returns></returns> public override AmazonWebServiceResponse Unmarshall(JsonUnmarshallerContext context) { ListVolumesResponse response = new ListVolumesResponse(); context.Read(); int targetDepth = context.CurrentDepth; while (context.ReadAtDepth(targetDepth)) { if (context.TestExpression("GatewayARN", targetDepth)) { var unmarshaller = StringUnmarshaller.Instance; response.GatewayARN = unmarshaller.Unmarshall(context); continue; } if (context.TestExpression("Marker", targetDepth)) { var unmarshaller = StringUnmarshaller.Instance; response.Marker = unmarshaller.Unmarshall(context); continue; } if (context.TestExpression("VolumeInfos", targetDepth)) { var unmarshaller = new ListUnmarshaller <VolumeInfo, VolumeInfoUnmarshaller>(VolumeInfoUnmarshaller.Instance); response.VolumeInfos = unmarshaller.Unmarshall(context); continue; } } return(response); }
public static ListVolumesResponse Unmarshall(UnmarshallerContext context) { ListVolumesResponse listVolumesResponse = new ListVolumesResponse(); listVolumesResponse.HttpResponse = context.HttpResponse; listVolumesResponse.RequestId = context.StringValue("ListVolumes.RequestId"); listVolumesResponse.TotalCount = context.IntegerValue("ListVolumes.TotalCount"); listVolumesResponse.PageNumber = context.IntegerValue("ListVolumes.PageNumber"); listVolumesResponse.PageSize = context.IntegerValue("ListVolumes.PageSize"); List <ListVolumesResponse.ListVolumes_VolumeInfo> listVolumesResponse_volumes = new List <ListVolumesResponse.ListVolumes_VolumeInfo>(); for (int i = 0; i < context.Length("ListVolumes.Volumes.Length"); i++) { ListVolumesResponse.ListVolumes_VolumeInfo volumeInfo = new ListVolumesResponse.ListVolumes_VolumeInfo(); volumeInfo.RegionId = context.StringValue("ListVolumes.Volumes[" + i + "].RegionId"); volumeInfo.ClusterId = context.StringValue("ListVolumes.Volumes[" + i + "].ClusterId"); volumeInfo.ClusterName = context.StringValue("ListVolumes.Volumes[" + i + "].ClusterName"); volumeInfo.VolumeId = context.StringValue("ListVolumes.Volumes[" + i + "].VolumeId"); volumeInfo.VolumeType = context.StringValue("ListVolumes.Volumes[" + i + "].VolumeType"); volumeInfo.VolumeProtocol = context.StringValue("ListVolumes.Volumes[" + i + "].VolumeProtocol"); volumeInfo.VolumeMountpoint = context.StringValue("ListVolumes.Volumes[" + i + "].VolumeMountpoint"); volumeInfo.RemoteDirectory = context.StringValue("ListVolumes.Volumes[" + i + "].RemoteDirectory"); listVolumesResponse_volumes.Add(volumeInfo); } listVolumesResponse.Volumes = listVolumesResponse_volumes; return(listVolumesResponse); }
public override AmazonWebServiceResponse Unmarshall(JsonUnmarshallerContext context) { ListVolumesResponse response = new ListVolumesResponse(); context.Read(); response.ListVolumesResult = ListVolumesResultUnmarshaller.GetInstance().Unmarshall(context); return(response); }
public override AmazonWebServiceResponse Unmarshall(JsonUnmarshallerContext context) { ListVolumesResponse response = new ListVolumesResponse(); context.Read(); UnmarshallResult(context, response); return(response); }
private static void UnmarshallResult(JsonUnmarshallerContext context, ListVolumesResponse response) { int originalDepth = context.CurrentDepth; int targetDepth = originalDepth + 1; while (context.Read()) { if (context.TestExpression("GatewayARN", targetDepth)) { context.Read(); response.GatewayARN = StringUnmarshaller.GetInstance().Unmarshall(context); continue; } if (context.TestExpression("Marker", targetDepth)) { context.Read(); response.Marker = StringUnmarshaller.GetInstance().Unmarshall(context); continue; } if (context.TestExpression("VolumeInfos", targetDepth)) { context.Read(); response.VolumeInfos = new List <VolumeInfo>(); VolumeInfoUnmarshaller unmarshaller = VolumeInfoUnmarshaller.GetInstance(); while (context.Read()) { JsonToken token = context.CurrentTokenType; if (token == JsonToken.ArrayStart) { continue; } if (token == JsonToken.ArrayEnd) { break; } response.VolumeInfos.Add(unmarshaller.Unmarshall(context)); } continue; } if (context.CurrentDepth <= originalDepth) { return; } } return; }
public override string ExecuteCommand() { try { var contentResult = base.ExecuteCommand(); var result = JsonConvert.DeserializeObject <ListVolumesResponseDto>(contentResult); ListVolumesResponse = result.ListVolumesResponse; } catch (Exception e) { LogHelper.WriteAllLog(e.Message, LogHelper.LogType.Error); throw; } return(string.Empty); }
public static ListVolumesResponse Unmarshall(UnmarshallerContext _ctx) { ListVolumesResponse listVolumesResponse = new ListVolumesResponse(); listVolumesResponse.HttpResponse = _ctx.HttpResponse; listVolumesResponse.RequestId = _ctx.StringValue("ListVolumes.RequestId"); listVolumesResponse.TotalCount = _ctx.IntegerValue("ListVolumes.TotalCount"); listVolumesResponse.PageNumber = _ctx.IntegerValue("ListVolumes.PageNumber"); listVolumesResponse.PageSize = _ctx.IntegerValue("ListVolumes.PageSize"); List <ListVolumesResponse.ListVolumes_VolumeInfo> listVolumesResponse_volumes = new List <ListVolumesResponse.ListVolumes_VolumeInfo>(); for (int i = 0; i < _ctx.Length("ListVolumes.Volumes.Length"); i++) { ListVolumesResponse.ListVolumes_VolumeInfo volumeInfo = new ListVolumesResponse.ListVolumes_VolumeInfo(); volumeInfo.RegionId = _ctx.StringValue("ListVolumes.Volumes[" + i + "].RegionId"); volumeInfo.ClusterId = _ctx.StringValue("ListVolumes.Volumes[" + i + "].ClusterId"); volumeInfo.ClusterName = _ctx.StringValue("ListVolumes.Volumes[" + i + "].ClusterName"); volumeInfo.VolumeId = _ctx.StringValue("ListVolumes.Volumes[" + i + "].VolumeId"); volumeInfo.VolumeType = _ctx.StringValue("ListVolumes.Volumes[" + i + "].VolumeType"); volumeInfo.VolumeProtocol = _ctx.StringValue("ListVolumes.Volumes[" + i + "].VolumeProtocol"); volumeInfo.VolumeMountpoint = _ctx.StringValue("ListVolumes.Volumes[" + i + "].VolumeMountpoint"); volumeInfo.RemoteDirectory = _ctx.StringValue("ListVolumes.Volumes[" + i + "].RemoteDirectory"); List <ListVolumesResponse.ListVolumes_VolumeInfo.ListVolumes_VolumeInfo1> volumeInfo_additionalVolumes = new List <ListVolumesResponse.ListVolumes_VolumeInfo.ListVolumes_VolumeInfo1>(); for (int j = 0; j < _ctx.Length("ListVolumes.Volumes[" + i + "].AdditionalVolumes.Length"); j++) { ListVolumesResponse.ListVolumes_VolumeInfo.ListVolumes_VolumeInfo1 volumeInfo1 = new ListVolumesResponse.ListVolumes_VolumeInfo.ListVolumes_VolumeInfo1(); volumeInfo1.VolumeType = _ctx.StringValue("ListVolumes.Volumes[" + i + "].AdditionalVolumes[" + j + "].VolumeType"); volumeInfo1.VolumeId = _ctx.StringValue("ListVolumes.Volumes[" + i + "].AdditionalVolumes[" + j + "].VolumeId"); volumeInfo1.VolumeProtocol = _ctx.StringValue("ListVolumes.Volumes[" + i + "].AdditionalVolumes[" + j + "].VolumeProtocol"); volumeInfo1.VolumeMountpoint = _ctx.StringValue("ListVolumes.Volumes[" + i + "].AdditionalVolumes[" + j + "].VolumeMountpoint"); volumeInfo1.RemoteDirectory = _ctx.StringValue("ListVolumes.Volumes[" + i + "].AdditionalVolumes[" + j + "].RemoteDirectory"); volumeInfo1.LocalDirectory = _ctx.StringValue("ListVolumes.Volumes[" + i + "].AdditionalVolumes[" + j + "].LocalDirectory"); volumeInfo1.Role = _ctx.StringValue("ListVolumes.Volumes[" + i + "].AdditionalVolumes[" + j + "].Role"); volumeInfo1.Location = _ctx.StringValue("ListVolumes.Volumes[" + i + "].AdditionalVolumes[" + j + "].Location"); volumeInfo1.JobQueue = _ctx.StringValue("ListVolumes.Volumes[" + i + "].AdditionalVolumes[" + j + "].JobQueue"); volumeInfo_additionalVolumes.Add(volumeInfo1); } volumeInfo.AdditionalVolumes = volumeInfo_additionalVolumes; listVolumesResponse_volumes.Add(volumeInfo); } listVolumesResponse.Volumes = listVolumesResponse_volumes; return(listVolumesResponse); }
public ICommandResponse ParseResponse(WebResponse webResponse) { var response = new ListVolumesResponse(); var responseStream = webResponse.GetResponseStream(); if ((responseStream != null) && (responseStream.CanRead)) { var responseDocument = XDocument.Load(responseStream); response.Volumes = responseDocument.Root.Elements() .Where(e => e.Name.LocalName.Equals("volume", StringComparison.InvariantCultureIgnoreCase)) .Select(Machine.From); } return(response); }
public override async Task <ListVolumesResponse> ListVolumes(ListVolumesRequest request, ServerCallContext context) { //todo request.MaxEntries, //request.StartingToken var volumeSource = _service.GetVolumesAsync(null); if (!string.IsNullOrEmpty(request.StartingToken)) { if (!int.TryParse(request.StartingToken, out var startIndex)) { throw new RpcException(new Status(StatusCode.Aborted, string.Empty), "invalid starting_token"); } volumeSource = volumeSource.Skip(startIndex); } if (request.MaxEntries > 0) { volumeSource = volumeSource.Take(request.MaxEntries); } var foundVolumes = await volumeSource .ToListAsync(context.CancellationToken); var flows = await _service.GetVolumeFlowsAsnyc(null) .ToListAsync(context.CancellationToken); var nextIndex = request.MaxEntries + foundVolumes.Count; var rsp = new ListVolumesResponse { NextToken = request.MaxEntries > 0 ? nextIndex.ToString() : string.Empty }; foreach (var foundVolume in foundVolumes) { var volumeFlows = flows.Where(n => StringComparer.OrdinalIgnoreCase.Equals(foundVolume.Path, n.Path)).ToList(); var hostNames = volumeFlows.Select(n => n.Host) .Distinct(StringComparer.OrdinalIgnoreCase) .DefaultIfEmpty(null); var errors = new List <Exception>(); HypervVolumeDetail v = null; foreach (var hostName in hostNames) { //maybe stale record after remount to other node try { v = await _service.GetVolumeAsync(foundVolume.Path, hostName, context.CancellationToken); continue; } catch (Exception ex) { errors.Add(new Exception($"Getting volume details of '{foundVolume.Name}' at host '{hostName ?? "default"}' failed.", ex)); } } if (v is null) { throw errors.Count switch { 1 => errors[0], _ => new AggregateException($"Getting volume details of '{foundVolume.Name}' failed.", errors), }; } var entry = new ListVolumesResponse.Types.Entry { Volume = new Volume { VolumeId = foundVolume.Name, CapacityBytes = (long)v.SizeBytes, //AccessibleTopology //ContentSource }, Status = new ListVolumesResponse.Types.VolumeStatus { } }; entry.Volume.VolumeContext.Add("Id", v.Id.ToString()); entry.Volume.VolumeContext.Add("Storage", v.Storage); entry.Volume.VolumeContext.Add("Path", v.Path); entry.Status.PublishedNodeIds.Add(volumeFlows.Select(n => n.VMId.ToString())); rsp.Entries.Add(entry); } return(rsp); }
public override async Task <ListVolumesResponse> ListVolumes(ListVolumesRequest request, ServerCallContext context) { _logger.LogDebug("list volumes from index {StartIndex}", request.StartingToken); //todo cache query var volumes = await _service.GetVolumesAsync(null).ToListAsync(context.CancellationToken); var startIndex = 0; if (!string.IsNullOrEmpty(request.StartingToken)) { if (!int.TryParse(request.StartingToken, out startIndex)) { throw new RpcException(new Status(StatusCode.InvalidArgument, "invalid starting_token")); } } var rsp = new ListVolumesResponse { }; if (request.MaxEntries > 0 && (volumes.Count - startIndex) > request.MaxEntries) { rsp.NextToken = (startIndex + request.MaxEntries).ToString(); } var volumeSource = volumes.AsEnumerable(); if (startIndex > 0) { volumeSource = volumeSource.Skip(startIndex); } if (request.MaxEntries > 0) { volumeSource = volumeSource.Take(request.MaxEntries); } await foreach (var r in _service.GetVolumeDetailsAsync(volumeSource, context.CancellationToken)) { var entry = new ListVolumesResponse.Types.Entry { Volume = new Volume { VolumeId = r.Info.Name //AccessibleTopology //ContentSource }, Status = new ListVolumesResponse.Types.VolumeStatus { } }; if (r.Detail is not null) { var d = r.Detail; entry.Volume.CapacityBytes = (long)(d.SizeBytes); entry.Volume.VolumeContext.Add("Id", d.Id.ToString()); entry.Volume.VolumeContext.Add("Storage", d.Storage); entry.Volume.VolumeContext.Add("Path", d.Path); entry.Status.VolumeCondition = new VolumeCondition { Abnormal = false, Message = d.Attached ? "attached" : "detached" }; } if (r.Nodes.Length > 0) { entry.Status.PublishedNodeIds.Add(r.Nodes); } if (r.Error is not null) { entry.Status.VolumeCondition = new VolumeCondition { Abnormal = true, Message = r.Error.Message }; } rsp.Entries.Add(entry); } return(rsp); }