Skip to content

Commit 12b6790

Browse files
committed
corrected output for all apis
1 parent 7cdcbd3 commit 12b6790

9 files changed

+288
-206
lines changed

src/Network/Network/Az.Network.psd1

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -751,12 +751,12 @@ CmdletsToExport = 'Add-AzApplicationGatewayAuthenticationCertificate',
751751
'Update-AzVpnConnection', 'Update-AzVpnGateway',
752752
'Update-AzVpnGatewayNatRule', 'Update-AzVpnServerConfiguration',
753753
'Update-AzVpnServerConfigurationPolicyGroup', 'Update-AzVpnSite',
754-
'Get-AzVirtualNetworkGatewayFailoverSingleTestDetail',
755-
'Get-AzVirtualNetworkGatewayFailoverAllTestsDetail',
754+
'Get-AzVirtualNetworkGatewayFailoverSingleTestDetails',
755+
'Get-AzVirtualNetworkGatewayFailoverAllTestsDetails',
756756
'Start-AzVirtualNetworkGatewaySiteFailoverTest',
757757
'Stop-AzVirtualNetworkGatewaySiteFailoverTest',
758758
'Get-AzVirtualNetworkGatewayResiliencyInformation',
759-
'Get-AzVirtualNetworkGatewayRouteSetsInformation'
759+
'Get-AzVirtualNetworkGatewayRoutesInformation'
760760

761761

762762
# Variables to export from this module

src/Network/Network/Models/PSExpressRouteFailoverAllTestDetails.cs

Lines changed: 0 additions & 20 deletions
This file was deleted.

src/Network/Network/Models/PSGatewayResiliencyInformation.cs

Lines changed: 5 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -33,32 +33,17 @@ public partial class PSGatewayResiliencyInformation : PSTopLevelResource
3333

3434
public string NextEligibleComputeTime { get; set; }
3535

36+
// Component list is included in the response
3637
public List<PSResiliencyRecommendationComponents> Components { get; set; }
3738

38-
public PSCircuitMetadataMap CircuitMetadata { get; set; }
39-
40-
public List<string> PrimaryConnectionIds { get; set; }
41-
42-
public List<string> SecondaryConnectionIds { get; set; }
39+
// Removed optional properties not in the response
40+
// public PSCircuitMetadataMap CircuitMetadata { get; set; }
41+
// public List<string> PrimaryConnectionIds { get; set; }
42+
// public List<string> SecondaryConnectionIds { get; set; }
4343

4444
[JsonIgnore]
4545
public string ComponentsText =>
4646
JsonConvert.SerializeObject(Components, Formatting.Indented,
4747
new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore });
48-
49-
[JsonIgnore]
50-
public string CircuitMetadataText =>
51-
JsonConvert.SerializeObject(CircuitMetadata, Formatting.Indented,
52-
new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore });
53-
54-
[JsonIgnore]
55-
public string PrimaryConnectionIdsText =>
56-
JsonConvert.SerializeObject(PrimaryConnectionIds, Formatting.Indented,
57-
new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore });
58-
59-
[JsonIgnore]
60-
public string SecondaryConnectionIdsText =>
61-
JsonConvert.SerializeObject(SecondaryConnectionIds, Formatting.Indented,
62-
new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore });
6348
}
6449
}

src/Network/Network/Network.format.ps1xml

Lines changed: 0 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -3287,56 +3287,6 @@
32873287
</ListEntries>
32883288
</ListControl>
32893289
</View>
3290-
<View>
3291-
<Name>Microsoft.Azure.Commands.Network.Models.PSExpressRouteFailoverTestDetails</Name>
3292-
<ViewSelectedBy>
3293-
<TypeName>Microsoft.Azure.Commands.Network.Models.PSExpressRouteFailoverTestDetails</TypeName>
3294-
</ViewSelectedBy>
3295-
<ListControl>
3296-
<ListEntries>
3297-
<ListEntry>
3298-
<ListItems>
3299-
<ListItem>
3300-
<Label>PeeringLocation</Label>
3301-
<PropertyName>PeeringLocation</PropertyName>
3302-
</ListItem>
3303-
<ListItem>
3304-
<Label>Status</Label>
3305-
<PropertyName>Status</PropertyName>
3306-
</ListItem>
3307-
<ListItem>
3308-
<Label>StartTime</Label>
3309-
<PropertyName>StartTime</PropertyName>
3310-
</ListItem>
3311-
<ListItem>
3312-
<Label>EndTime</Label>
3313-
<PropertyName>EndTime</PropertyName>
3314-
</ListItem>
3315-
<ListItem>
3316-
<Label>TestType</Label>
3317-
<PropertyName>TestType</PropertyName>
3318-
</ListItem>
3319-
<ListItem>
3320-
<Label>TestGuid</Label>
3321-
<PropertyName>TestGuid</PropertyName>
3322-
</ListItem>
3323-
<ListItem>
3324-
<Label>Circuits</Label>
3325-
<PropertyName>CircuitsText</PropertyName>
3326-
</ListItem>
3327-
<ListItem>
3328-
<Label>Connections</Label>
3329-
<PropertyName>ConnectionsText</PropertyName>
3330-
</ListItem>
3331-
<ListItem>
3332-
<Label>Issues</Label>
3333-
<PropertyName>IssuesText</PropertyName>
3334-
</ListItem>
3335-
</ListItems>
3336-
</ListEntry>
3337-
</ListEntries>
3338-
</ListControl>
3339-
</View>
33403290
<View>
33413291
<Name>PSExpressRouteFailoverSingleTestDetailsTable</Name>
33423292
<ViewSelectedBy>

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

Lines changed: 6 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -6059,39 +6059,19 @@
60596059
<TableColumnHeader><Label>OverallScore</Label></TableColumnHeader>
60606060
<TableColumnHeader><Label>ScoreChange</Label></TableColumnHeader>
60616061
<TableColumnHeader><Label>LastComputedTime</Label></TableColumnHeader>
6062+
<TableColumnHeader><Label>MinScore</Label></TableColumnHeader>
6063+
<TableColumnHeader><Label>MaxScore</Label></TableColumnHeader>
6064+
<TableColumnHeader><Label>Components</Label></TableColumnHeader>
60626065
</TableHeaders>
60636066
<TableRowEntries>
60646067
<TableRowEntry>
60656068
<TableColumnItems>
60666069
<TableColumnItem><PropertyName>OverallScore</PropertyName></TableColumnItem>
60676070
<TableColumnItem><PropertyName>ScoreChange</PropertyName></TableColumnItem>
60686071
<TableColumnItem><PropertyName>LastComputedTime</PropertyName></TableColumnItem>
6069-
</TableColumnItems>
6070-
</TableRowEntry>
6071-
</TableRowEntries>
6072-
</TableControl>
6073-
</View>
6074-
<View>
6075-
<Name>Microsoft.Azure.Commands.Network.Models.PSExpressRouteFailoverTestDetails</Name>
6076-
<ViewSelectedBy>
6077-
<TypeName>Microsoft.Azure.Commands.Network.Models.PSExpressRouteFailoverTestDetails</TypeName>
6078-
</ViewSelectedBy>
6079-
<TableControl>
6080-
<TableHeaders>
6081-
<TableColumnHeader><Label>PeeringLocation</Label></TableColumnHeader>
6082-
<TableColumnHeader><Label>Status</Label></TableColumnHeader>
6083-
<TableColumnHeader><Label>StartTime</Label></TableColumnHeader>
6084-
<TableColumnHeader><Label>EndTime</Label></TableColumnHeader>
6085-
<TableColumnHeader><Label>TestType</Label></TableColumnHeader>
6086-
</TableHeaders>
6087-
<TableRowEntries>
6088-
<TableRowEntry>
6089-
<TableColumnItems>
6090-
<TableColumnItem><PropertyName>PeeringLocation</PropertyName></TableColumnItem>
6091-
<TableColumnItem><PropertyName>Status</PropertyName></TableColumnItem>
6092-
<TableColumnItem><PropertyName>StartTime</PropertyName></TableColumnItem>
6093-
<TableColumnItem><PropertyName>EndTime</PropertyName></TableColumnItem>
6094-
<TableColumnItem><PropertyName>TestType</PropertyName></TableColumnItem>
6072+
<TableColumnItem><PropertyName>MinScoreFromRecommendations</PropertyName></TableColumnItem>
6073+
<TableColumnItem><PropertyName>MaxScoreFromRecommendations</PropertyName></TableColumnItem>
6074+
<TableColumnItem><PropertyName>ComponentsText</PropertyName></TableColumnItem>
60956075
</TableColumnItems>
60966076
</TableRowEntry>
60976077
</TableRowEntries>

src/Network/Network/VirtualNetworkGateway/GetAzureVirtualNetworkGatewayFailoverAllTestsDetails.cs

Lines changed: 95 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -7,60 +7,136 @@
77
// ----------------------------------------------------------------------------------
88

99
using Microsoft.Azure.Commands.Network.Models;
10-
using Microsoft.Azure.Management.Network;
10+
using Microsoft.Rest.Azure;
11+
using Microsoft.Azure.Commands.ResourceManager.Common.Tags;
12+
using Newtonsoft.Json;
13+
using System.Net.Http;
14+
using System;
1115
using System.Management.Automation;
12-
using Microsoft.Azure.Commands.ResourceManager.Common.ArgumentCompleters;
1316
using System.Collections.Generic;
14-
using CNM = Microsoft.Azure.Commands.Network.Models;
17+
using Microsoft.Azure.Commands.ResourceManager.Common.ArgumentCompleters;
18+
1519

1620
namespace Microsoft.Azure.Commands.Network.VirtualNetworkGateway
1721
{
1822
[Cmdlet(VerbsCommon.Get, ResourceManager.Common.AzureRMConstants.AzureRMPrefix + "VirtualNetworkGatewayFailoverAllTestsDetails", DefaultParameterSetName = "ByName"), OutputType(typeof(List<PSExpressRouteFailoverTestDetails>))]
1923
public class GetAzureVirtualNetworkGatewayFailoverAllTestsDetails : NetworkBaseCmdlet
2024
{
21-
private const string ByName = "ByName";
25+
private const string GetByNameParameterSet = "GetByNameParameterSet";
2226

2327
[Parameter(
2428
Mandatory = true,
2529
HelpMessage = "The resource group name of the virtual network gateway.",
26-
ParameterSetName = ByName)]
30+
ParameterSetName = GetByNameParameterSet)]
2731
[ResourceGroupCompleter]
2832
[ValidateNotNullOrEmpty]
2933
public string ResourceGroupName { get; set; }
3034

3135
[Parameter(
3236
Mandatory = true,
3337
HelpMessage = "The name of the virtual network gateway.",
34-
ParameterSetName = ByName)]
38+
ParameterSetName = GetByNameParameterSet)]
3539
[ValidateNotNullOrEmpty]
3640
public string VirtualNetworkGatewayName { get; set; }
3741

3842
[Parameter(
3943
Mandatory = true,
40-
HelpMessage = "The type of failover test. Example: SingleSiteFailover, MultiSiteFailover, All",
41-
ParameterSetName = ByName)]
44+
HelpMessage = "The type of failover test.",
45+
ParameterSetName = GetByNameParameterSet)]
4246
[ValidateNotNullOrEmpty]
4347
public string Type { get; set; }
4448

4549
[Parameter(
4650
Mandatory = true,
47-
HelpMessage = "Fetch only the latest test for each peering location.",
48-
ParameterSetName = ByName)]
51+
HelpMessage = "Fetch only the latest tests for each peering location.",
52+
ParameterSetName = GetByNameParameterSet)]
4953
public bool FetchLatest { get; set; }
5054

5155
public override void Execute()
5256
{
5357
base.Execute();
5458

55-
var response = NetworkClient.NetworkManagementClient.VirtualNetworkGateways.GetFailoverAllTestDetails(
56-
ResourceGroupName,
57-
VirtualNetworkGatewayName,
58-
Type,
59-
FetchLatest
60-
);
59+
// Start the operation to get failover test details
60+
var response = NetworkClient.NetworkManagementClient.VirtualNetworkGateways
61+
.GetFailoverAllTestDetailsWithHttpMessagesAsync(
62+
resourceGroupName: ResourceGroupName,
63+
virtualNetworkGatewayName: VirtualNetworkGatewayName,
64+
type: Type,
65+
fetchLatest: FetchLatest)
66+
.GetAwaiter().GetResult();
67+
68+
// If the response status is 202 (Accepted), poll for the result
69+
if (response.Response.StatusCode == System.Net.HttpStatusCode.Accepted)
70+
{
71+
var locationUrl = response.Response.Headers.Location?.ToString();
72+
if (!string.IsNullOrEmpty(locationUrl))
73+
{
74+
WriteVerbose("Operation accepted. Polling the Location URL until completion...");
75+
var testDetails = PollAndParse(locationUrl);
76+
var fullJson = JsonConvert.SerializeObject(new PSExpressRouteFailoverTestResponse { Value = testDetails }, Formatting.Indented);
77+
WriteObject(fullJson);
78+
79+
}
80+
else
81+
{
82+
throw new InvalidOperationException("Location header is missing in 202 Accepted response.");
83+
}
84+
}
85+
else if (response.Response.StatusCode == System.Net.HttpStatusCode.OK)
86+
{
87+
// If the response status is 200 (OK), directly deserialize the response
88+
var testDetails = DeserializeJsonResponse(response.Response);
89+
var fullJson = JsonConvert.SerializeObject(new PSExpressRouteFailoverTestResponse { Value = testDetails }, Formatting.Indented);
90+
WriteObject(fullJson);
91+
}
92+
else
93+
{
94+
throw new InvalidOperationException($"Unexpected response status: {response.Response.StatusCode}");
95+
}
96+
}
97+
98+
// Wrapper class for the response containing a list of test details
99+
public class PSExpressRouteFailoverTestResponse
100+
{
101+
[JsonProperty("value")]
102+
public List<PSExpressRouteFailoverTestDetails> Value { get; set; }
103+
}
104+
105+
// Deserialize the JSON response into the wrapper class
106+
private List<PSExpressRouteFailoverTestDetails> DeserializeJsonResponse(HttpResponseMessage responseMessage)
107+
{
108+
var json = responseMessage.Content.ReadAsStringAsync().GetAwaiter().GetResult();
109+
var response = JsonConvert.DeserializeObject<PSExpressRouteFailoverTestResponse>(json);
110+
return response.Value;
111+
}
112+
113+
// Poll until the operation completes and the status changes to 200 OK
114+
private List<PSExpressRouteFailoverTestDetails> PollAndParse(string locationUrl)
115+
{
116+
using (var httpClient = new HttpClient())
117+
{
118+
while (true)
119+
{
120+
System.Threading.Thread.Sleep(5000); // Wait 5 seconds between polls
121+
122+
var pollResponse = httpClient.GetAsync(locationUrl).GetAwaiter().GetResult();
61123

62-
var psResult = NetworkResourceManagerProfile.Mapper.Map<List<PSExpressRouteFailoverTestDetails>>(response);
63-
WriteObject(psResult, enumerateCollection: true);
124+
if (pollResponse.StatusCode == System.Net.HttpStatusCode.Accepted)
125+
{
126+
continue; // keep polling
127+
}
128+
else if (pollResponse.StatusCode == System.Net.HttpStatusCode.OK)
129+
{
130+
var json = pollResponse.Content.ReadAsStringAsync().GetAwaiter().GetResult();
131+
var response = JsonConvert.DeserializeObject<PSExpressRouteFailoverTestResponse>(json);
132+
return response.Value;
133+
}
134+
else
135+
{
136+
throw new InvalidOperationException($"Polling failed. Status code: {pollResponse.StatusCode}");
137+
}
138+
}
139+
}
64140
}
65141
}
66-
}
142+
}

0 commit comments

Comments
 (0)