Skip to content

Commit 04d73b1

Browse files
committed
corrected output for singletestdetails api
1 parent 410e290 commit 04d73b1

File tree

4 files changed

+88
-97
lines changed

4 files changed

+88
-97
lines changed

src/Network/Network/Network.format.ps1xml

Lines changed: 0 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -3287,57 +3287,6 @@
32873287
</ListEntries>
32883288
</ListControl>
32893289
</View>
3290-
<View>
3291-
<Name>PSExpressRouteFailoverSingleTestDetailsTable</Name>
3292-
<ViewSelectedBy>
3293-
<TypeName>Microsoft.Azure.Commands.Network.Models.PSExpressRouteFailoverSingleTestDetails</TypeName>
3294-
</ViewSelectedBy>
3295-
<TableControl>
3296-
<TableHeaders>
3297-
<TableColumnHeader>
3298-
<Label>Peering Location</Label>
3299-
<Width>20</Width>
3300-
</TableColumnHeader>
3301-
<TableColumnHeader>
3302-
<Label>Status</Label>
3303-
<Width>15</Width>
3304-
</TableColumnHeader>
3305-
<TableColumnHeader>
3306-
<Label>Start Time (UTC)</Label>
3307-
<Width>25</Width>
3308-
</TableColumnHeader>
3309-
<TableColumnHeader>
3310-
<Label>End Time (UTC)</Label>
3311-
<Width>25</Width>
3312-
</TableColumnHeader>
3313-
<TableColumnHeader>
3314-
<Label>Was Simulation Successful</Label>
3315-
<Width>20</Width>
3316-
</TableColumnHeader>
3317-
</TableHeaders>
3318-
<TableRowEntries>
3319-
<TableRowEntry>
3320-
<TableColumnItems>
3321-
<TableColumnItem>
3322-
<PropertyName>PeeringLocation</PropertyName>
3323-
</TableColumnItem>
3324-
<TableColumnItem>
3325-
<PropertyName>Status</PropertyName>
3326-
</TableColumnItem>
3327-
<TableColumnItem>
3328-
<PropertyName>StartTimeUtc</PropertyName>
3329-
</TableColumnItem>
3330-
<TableColumnItem>
3331-
<PropertyName>EndTimeUtc</PropertyName>
3332-
</TableColumnItem>
3333-
<TableColumnItem>
3334-
<PropertyName>WasSimulationSuccessful</PropertyName>
3335-
</TableColumnItem>
3336-
</TableColumnItems>
3337-
</TableRowEntry>
3338-
</TableRowEntries>
3339-
</TableControl>
3340-
</View>
33413290
<View>
33423291
<Name>Microsoft.Azure.Commands.Network.Models.PSRouteTable</Name>
33433292
<ViewSelectedBy>

src/Network/Network/Network.generated.format.ps1xml

Lines changed: 0 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -6077,32 +6077,6 @@
60776077
</TableRowEntries>
60786078
</TableControl>
60796079
</View>
6080-
<View>
6081-
<Name>Microsoft.Azure.Commands.Network.Models.PSExpressRouteFailoverSingleTestDetails</Name>
6082-
<ViewSelectedBy>
6083-
<TypeName>Microsoft.Azure.Commands.Network.Models.PSExpressRouteFailoverSingleTestDetails</TypeName>
6084-
</ViewSelectedBy>
6085-
<TableControl>
6086-
<TableHeaders>
6087-
<TableColumnHeader><Label>PeeringLocation</Label></TableColumnHeader>
6088-
<TableColumnHeader><Label>Status</Label></TableColumnHeader>
6089-
<TableColumnHeader><Label>StartTimeUtc</Label></TableColumnHeader>
6090-
<TableColumnHeader><Label>EndTimeUtc</Label></TableColumnHeader>
6091-
<TableColumnHeader><Label>WasSimulationSuccessful</Label></TableColumnHeader>
6092-
</TableHeaders>
6093-
<TableRowEntries>
6094-
<TableRowEntry>
6095-
<TableColumnItems>
6096-
<TableColumnItem><PropertyName>PeeringLocation</PropertyName></TableColumnItem>
6097-
<TableColumnItem><PropertyName>Status</PropertyName></TableColumnItem>
6098-
<TableColumnItem><PropertyName>StartTimeUtc</PropertyName></TableColumnItem>
6099-
<TableColumnItem><PropertyName>EndTimeUtc</PropertyName></TableColumnItem>
6100-
<TableColumnItem><PropertyName>WasSimulationSuccessful</PropertyName></TableColumnItem>
6101-
</TableColumnItems>
6102-
</TableRowEntry>
6103-
</TableRowEntries>
6104-
</TableControl>
6105-
</View>
61066080
<View>
61076081
<Name>Microsoft.Azure.Commands.Network.Models.PSLoadBalancerBackendAddress</Name>
61086082
<ViewSelectedBy>

src/Network/Network/VirtualNetworkGateway/GetAzureVirtualNetworkGatewayFailoverAllTestsDetails.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -96,7 +96,7 @@ public override void Execute()
9696
}
9797

9898
// Wrapper class for the response containing a list of test details
99-
public class PSExpressRouteFailoverTestResponse
99+
private class PSExpressRouteFailoverTestResponse
100100
{
101101
[JsonProperty("value")]
102102
public List<PSExpressRouteFailoverTestDetails> Value { get; set; }

src/Network/Network/VirtualNetworkGateway/GetAzureVirtualNetworkGatewayFailoverSingleTestDetail.cs

Lines changed: 87 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -13,64 +13,132 @@
1313
// ----------------------------------------------------------------------------------
1414

1515
using Microsoft.Azure.Commands.Network.Models;
16-
using Microsoft.Azure.Management.Network;
17-
using Microsoft.Azure.Management.Network.Models;
16+
using Microsoft.Rest.Azure;
17+
using Newtonsoft.Json;
18+
using System;
19+
using System.Net.Http;
1820
using System.Management.Automation;
19-
using System.Collections.Generic;
2021
using Microsoft.Azure.Commands.ResourceManager.Common.ArgumentCompleters;
21-
using CNM = Microsoft.Azure.Commands.Network.Models;
22+
using System.Collections.Generic;
2223

2324
namespace Microsoft.Azure.Commands.Network.VirtualNetworkGateway
2425
{
25-
[Cmdlet(VerbsCommon.Get, ResourceManager.Common.AzureRMConstants.AzureRMPrefix + "VirtualNetworkGatewayFailoverSingleTestDetails", DefaultParameterSetName = "ByName"), OutputType(typeof(List<PSExpressRouteFailoverSingleTestDetails>))]
26+
[Cmdlet(VerbsCommon.Get, ResourceManager.Common.AzureRMConstants.AzureRMPrefix + "VirtualNetworkGatewayFailoverSingleTestDetails", DefaultParameterSetName = "GetByNameParameterSet"), OutputType(typeof(List<PSExpressRouteFailoverSingleTestDetails>))]
2627
public class GetAzureVirtualNetworkGatewayFailoverSingleTestDetails : NetworkBaseCmdlet
2728
{
28-
private const string ByName = "ByName";
29+
private const string GetByNameParameterSet = "GetByNameParameterSet";
2930

3031
[Parameter(
3132
Mandatory = true,
3233
HelpMessage = "The resource group name of the virtual network gateway.",
33-
ParameterSetName = ByName)]
34+
ParameterSetName = GetByNameParameterSet)]
3435
[ResourceGroupCompleter]
3536
[ValidateNotNullOrEmpty]
3637
public string ResourceGroupName { get; set; }
3738

3839
[Parameter(
3940
Mandatory = true,
4041
HelpMessage = "The name of the virtual network gateway.",
41-
ParameterSetName = ByName)]
42+
ParameterSetName = GetByNameParameterSet)]
4243
[ValidateNotNullOrEmpty]
4344
public string VirtualNetworkGatewayName { get; set; }
4445

4546
[Parameter(
4647
Mandatory = true,
4748
HelpMessage = "Peering location of the test.",
48-
ParameterSetName = ByName)]
49+
ParameterSetName = GetByNameParameterSet)]
4950
[ValidateNotNullOrEmpty]
5051
public string PeeringLocation { get; set; }
5152

5253
[Parameter(
5354
Mandatory = true,
5455
HelpMessage = "The unique Guid value which identifies the test.",
55-
ParameterSetName = ByName)]
56+
ParameterSetName = GetByNameParameterSet)]
5657
[ValidateNotNullOrEmpty]
5758
public string FailoverTestId { get; set; }
5859

5960
public override void Execute()
6061
{
6162
base.Execute();
6263

63-
// Call the underlying SDK API (the method name may differ slightly depending on SDK version)
64-
var response = NetworkClient.NetworkManagementClient.VirtualNetworkGateways.GetFailoverSingleTestDetails(
65-
ResourceGroupName,
66-
VirtualNetworkGatewayName,
67-
PeeringLocation,
68-
FailoverTestId);
64+
var response = NetworkClient.NetworkManagementClient.VirtualNetworkGateways
65+
.GetFailoverSingleTestDetailsWithHttpMessagesAsync(
66+
resourceGroupName: ResourceGroupName,
67+
virtualNetworkGatewayName: VirtualNetworkGatewayName,
68+
peeringLocation: PeeringLocation,
69+
failoverTestId: FailoverTestId)
70+
.GetAwaiter().GetResult();
71+
72+
if (response.Response.StatusCode == System.Net.HttpStatusCode.Accepted)
73+
{
74+
WriteVerbose("Operation accepted. Polling for results...");
75+
var locationUrl = response.Response.Headers.Location?.ToString();
76+
if (!string.IsNullOrEmpty(locationUrl))
77+
{
78+
var testDetails = PollAndParse(locationUrl);
79+
var fullJson = JsonConvert.SerializeObject(new FailoverTestDetailsWrapper { Value = testDetails }, Formatting.Indented);
80+
WriteObject(fullJson);
81+
}
82+
else
83+
{
84+
throw new InvalidOperationException("Location header missing in 202 Accepted response.");
85+
}
86+
}
87+
else if (response.Response.StatusCode == System.Net.HttpStatusCode.OK)
88+
{
89+
var testDetails = DeserializeJsonResponse(response.Response);
90+
var fullJson = JsonConvert.SerializeObject(new FailoverTestDetailsWrapper { Value = testDetails }, Formatting.Indented);
91+
WriteObject(fullJson);
92+
93+
}
94+
else
95+
{
96+
throw new InvalidOperationException($"Unexpected response status: {response.Response.StatusCode}");
97+
}
98+
}
99+
100+
private class FailoverTestDetailsWrapper
101+
{
102+
[JsonProperty("value")]
103+
public List<PSExpressRouteFailoverSingleTestDetails> Value { get; set; }
104+
}
105+
106+
private List<PSExpressRouteFailoverSingleTestDetails> DeserializeJsonResponse(HttpResponseMessage responseMessage)
107+
{
108+
var json = responseMessage.Content.ReadAsStringAsync().GetAwaiter().GetResult();
109+
WriteVerbose("Response JSON: " + json);
110+
111+
var wrapper = JsonConvert.DeserializeObject<FailoverTestDetailsWrapper>(json);
112+
return wrapper?.Value ?? new List<PSExpressRouteFailoverSingleTestDetails>();
113+
}
114+
115+
private List<PSExpressRouteFailoverSingleTestDetails> PollAndParse(string locationUrl)
116+
{
117+
using (var httpClient = new HttpClient())
118+
{
119+
while (true)
120+
{
121+
System.Threading.Thread.Sleep(5000); // wait before polling
122+
var pollResponse = httpClient.GetAsync(locationUrl).GetAwaiter().GetResult();
69123

70-
// Map SDK model to PS model
71-
var psResult = NetworkResourceManagerProfile.Mapper.Map<List<PSExpressRouteFailoverSingleTestDetails>>(response);
124+
WriteVerbose($"Polling response status code: {pollResponse.StatusCode}");
72125

73-
WriteObject(psResult, enumerateCollection: true);
126+
if (pollResponse.StatusCode == System.Net.HttpStatusCode.Accepted)
127+
{
128+
continue; // still processing
129+
}
130+
else if (pollResponse.StatusCode == System.Net.HttpStatusCode.OK)
131+
{
132+
var json = pollResponse.Content.ReadAsStringAsync().GetAwaiter().GetResult();
133+
var response = JsonConvert.DeserializeObject<FailoverTestDetailsWrapper>(json);
134+
return response.Value;
135+
}
136+
else
137+
{
138+
throw new InvalidOperationException($"Polling failed. Status code: {pollResponse.StatusCode}");
139+
}
140+
}
141+
}
74142
}
75143
}
76144
}

0 commit comments

Comments
 (0)