From 54170f3a4d5665e12772eee1fce52e9bc008795a Mon Sep 17 00:00:00 2001 From: Mangilal Bishnoi Date: Sun, 13 Sep 2026 18:45:18 +0530 Subject: [PATCH 1/3] Add PowerShell cmdlets for Virtual Network Appliance capabilities --- .../Generated/INetworkManagementClient.cs | 4 + ...lNetworkApplianceCapabilitiesOperations.cs | 213 +++ ...appliancecapabilitycreateorupdateAllof0.cs | 65 + ...VirtualnetworkappliancecapabilityAllof0.cs | 65 + .../Generated/Models/Nat64Capability.cs | 75 + .../Models/Nat64CapabilityCreateOrUpdate.cs | 65 + .../Generated/Models/PLGatewayCapability.cs | 70 + .../PLGatewayCapabilityCreateOrUpdate.cs | 60 + .../Models/PLGatewayFastpathCapability.cs | 70 + ...GatewayFastpathCapabilityCreateOrUpdate.cs | 60 + .../Models/PlipForwardersCapability.cs | 70 + .../PlipForwardersCapabilityCreateOrUpdate.cs | 60 + .../Models/ProxyResourceAutoGenerated.cs | 59 + ...lianceCapabilitiesCreateOrUpdateHeaders.cs | 55 + ...tworkApplianceCapabilitiesDeleteHeaders.cs | 55 + .../VirtualNetworkApplianceCapability.cs | 79 ++ ...etworkApplianceCapabilityCreateOrUpdate.cs | 62 + ...tualNetworkApplianceCapabilityIpVersion.cs | 25 + .../VirtualNetworkApplianceCapabilityKind.cs | 33 + ...ualNetworkApplianceCapabilityProperties.cs | 84 ++ .../Generated/NetworkManagementClient.cs | 7 + ...lNetworkApplianceCapabilitiesOperations.cs | 1228 +++++++++++++++++ ...plianceCapabilitiesOperationsExtensions.cs | 313 +++++ ...tualNetworkApplianceCapabilityUnitTests.cs | 112 ++ src/Network/Network/Az.Network.psd1 | 6 +- src/Network/Network/ChangeLog.md | 2 + .../PSVirtualNetworkApplianceCapability.cs | 33 + ...irtualNetworkApplianceCapabilityCommand.cs | 99 ++ ...irtualNetworkApplianceCapabilityCommand.cs | 100 ++ ...irtualNetworkApplianceCapabilityCommand.cs | 117 ++ ...ualNetworkApplianceCapabilityBaseCmdlet.cs | 187 +++ src/Network/Network/help/Az.Network.md | 9 + ...Get-AzVirtualNetworkApplianceCapability.md | 136 ++ ...New-AzVirtualNetworkApplianceCapability.md | 247 ++++ ...ove-AzVirtualNetworkApplianceCapability.md | 264 ++++ 35 files changed, 4186 insertions(+), 3 deletions(-) create mode 100644 src/Network/Network.Management.Sdk/Generated/IVirtualNetworkApplianceCapabilitiesOperations.cs create mode 100644 src/Network/Network.Management.Sdk/Generated/Models/Components19Zjha1SchemasVirtualnetworkappliancecapabilitycreateorupdateAllof0.cs create mode 100644 src/Network/Network.Management.Sdk/Generated/Models/Components1Tw8E2RSchemasVirtualnetworkappliancecapabilityAllof0.cs create mode 100644 src/Network/Network.Management.Sdk/Generated/Models/Nat64Capability.cs create mode 100644 src/Network/Network.Management.Sdk/Generated/Models/Nat64CapabilityCreateOrUpdate.cs create mode 100644 src/Network/Network.Management.Sdk/Generated/Models/PLGatewayCapability.cs create mode 100644 src/Network/Network.Management.Sdk/Generated/Models/PLGatewayCapabilityCreateOrUpdate.cs create mode 100644 src/Network/Network.Management.Sdk/Generated/Models/PLGatewayFastpathCapability.cs create mode 100644 src/Network/Network.Management.Sdk/Generated/Models/PLGatewayFastpathCapabilityCreateOrUpdate.cs create mode 100644 src/Network/Network.Management.Sdk/Generated/Models/PlipForwardersCapability.cs create mode 100644 src/Network/Network.Management.Sdk/Generated/Models/PlipForwardersCapabilityCreateOrUpdate.cs create mode 100644 src/Network/Network.Management.Sdk/Generated/Models/ProxyResourceAutoGenerated.cs create mode 100644 src/Network/Network.Management.Sdk/Generated/Models/VirtualNetworkApplianceCapabilitiesCreateOrUpdateHeaders.cs create mode 100644 src/Network/Network.Management.Sdk/Generated/Models/VirtualNetworkApplianceCapabilitiesDeleteHeaders.cs create mode 100644 src/Network/Network.Management.Sdk/Generated/Models/VirtualNetworkApplianceCapability.cs create mode 100644 src/Network/Network.Management.Sdk/Generated/Models/VirtualNetworkApplianceCapabilityCreateOrUpdate.cs create mode 100644 src/Network/Network.Management.Sdk/Generated/Models/VirtualNetworkApplianceCapabilityIpVersion.cs create mode 100644 src/Network/Network.Management.Sdk/Generated/Models/VirtualNetworkApplianceCapabilityKind.cs create mode 100644 src/Network/Network.Management.Sdk/Generated/Models/VirtualNetworkApplianceCapabilityProperties.cs create mode 100644 src/Network/Network.Management.Sdk/Generated/VirtualNetworkApplianceCapabilitiesOperations.cs create mode 100644 src/Network/Network.Management.Sdk/Generated/VirtualNetworkApplianceCapabilitiesOperationsExtensions.cs create mode 100644 src/Network/Network.Test/UnitTests/VirtualNetworkApplianceCapabilityUnitTests.cs create mode 100644 src/Network/Network/Models/PSVirtualNetworkApplianceCapability.cs create mode 100644 src/Network/Network/VirtualNetworkApplianceCapability/GetVirtualNetworkApplianceCapabilityCommand.cs create mode 100644 src/Network/Network/VirtualNetworkApplianceCapability/NewVirtualNetworkApplianceCapabilityCommand.cs create mode 100644 src/Network/Network/VirtualNetworkApplianceCapability/RemoveVirtualNetworkApplianceCapabilityCommand.cs create mode 100644 src/Network/Network/VirtualNetworkApplianceCapability/VirtualNetworkApplianceCapabilityBaseCmdlet.cs create mode 100644 src/Network/Network/help/Get-AzVirtualNetworkApplianceCapability.md create mode 100644 src/Network/Network/help/New-AzVirtualNetworkApplianceCapability.md create mode 100644 src/Network/Network/help/Remove-AzVirtualNetworkApplianceCapability.md diff --git a/src/Network/Network.Management.Sdk/Generated/INetworkManagementClient.cs b/src/Network/Network.Management.Sdk/Generated/INetworkManagementClient.cs index e4d76050c00b..ecf21035a88f 100644 --- a/src/Network/Network.Management.Sdk/Generated/INetworkManagementClient.cs +++ b/src/Network/Network.Management.Sdk/Generated/INetworkManagementClient.cs @@ -766,6 +766,10 @@ public partial interface INetworkManagementClient : System.IDisposable /// Gets the IVirtualNetworkAppliancesOperations /// IVirtualNetworkAppliancesOperations VirtualNetworkAppliances { get; } + /// + /// Gets the IVirtualNetworkApplianceCapabilitiesOperations + /// + IVirtualNetworkApplianceCapabilitiesOperations VirtualNetworkApplianceCapabilities { get; } /// /// Gets the IExpressRouteGatewaysOperations diff --git a/src/Network/Network.Management.Sdk/Generated/IVirtualNetworkApplianceCapabilitiesOperations.cs b/src/Network/Network.Management.Sdk/Generated/IVirtualNetworkApplianceCapabilitiesOperations.cs new file mode 100644 index 000000000000..3f0a54e4dbc4 --- /dev/null +++ b/src/Network/Network.Management.Sdk/Generated/IVirtualNetworkApplianceCapabilitiesOperations.cs @@ -0,0 +1,213 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See License.txt in the project root for license information. +// Code generated by Microsoft (R) AutoRest Code Generator. +// Changes may cause incorrect behavior and will be lost if the code is regenerated. + +namespace Microsoft.Azure.Management.Network +{ + using Microsoft.Rest.Azure; + using Models; + + /// + /// VirtualNetworkApplianceCapabilitiesOperations operations. + /// + public partial interface IVirtualNetworkApplianceCapabilitiesOperations + { + /// + /// Gets all capabilities of a virtual network appliance. + /// + /// + /// Gets all capabilities of a virtual network appliance. + /// + /// + /// The name of the resource group. The name is case insensitive. + /// + /// + /// The name of the virtual network appliance. + /// + /// + /// The headers that will be added to request. + /// + /// + /// The cancellation token. + /// + /// + /// Thrown when the operation returned an invalid status code + /// + /// + /// Thrown when unable to deserialize the response + /// + System.Threading.Tasks.Task>> ListWithHttpMessagesAsync(string resourceGroupName, string virtualNetworkApplianceName, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + + /// + /// Gets the specified capability of a virtual network appliance. + /// + /// + /// Gets the specified capability of a virtual network appliance. + /// + /// + /// The name of the resource group. The name is case insensitive. + /// + /// + /// The name of the virtual network appliance. + /// + /// + /// The name of the virtual network appliance capability. + /// + /// + /// The headers that will be added to request. + /// + /// + /// The cancellation token. + /// + /// + /// Thrown when the operation returned an invalid status code + /// + /// + /// Thrown when unable to deserialize the response + /// + System.Threading.Tasks.Task> GetWithHttpMessagesAsync(string resourceGroupName, string virtualNetworkApplianceName, string capabilityName, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + + /// + /// Creates or updates a capability on a virtual network appliance. + /// + /// + /// Creates or updates a capability on a virtual network appliance. + /// + /// + /// The name of the resource group. The name is case insensitive. + /// + /// + /// The name of the virtual network appliance. + /// + /// + /// The name of the virtual network appliance capability. + /// + /// + /// Parameters supplied to the create or update virtual network appliance + /// capability operation. + /// + /// + /// The headers that will be added to request. + /// + /// + /// The cancellation token. + /// + /// + /// Thrown when the operation returned an invalid status code + /// + /// + /// Thrown when unable to deserialize the response + /// + System.Threading.Tasks.Task> CreateOrUpdateWithHttpMessagesAsync(string resourceGroupName, string virtualNetworkApplianceName, string capabilityName, VirtualNetworkApplianceCapabilityCreateOrUpdate parameters, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + + /// + /// Deletes the specified capability of a virtual network appliance. + /// + /// + /// Deletes the specified capability of a virtual network appliance. + /// + /// + /// The name of the resource group. The name is case insensitive. + /// + /// + /// The name of the virtual network appliance. + /// + /// + /// The name of the virtual network appliance capability. + /// + /// + /// The headers that will be added to request. + /// + /// + /// The cancellation token. + /// + /// + /// Thrown when the operation returned an invalid status code + /// + System.Threading.Tasks.Task> DeleteWithHttpMessagesAsync(string resourceGroupName, string virtualNetworkApplianceName, string capabilityName, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + + /// + /// Creates or updates a capability on a virtual network appliance. + /// + /// + /// Creates or updates a capability on a virtual network appliance. + /// + /// + /// The name of the resource group. The name is case insensitive. + /// + /// + /// The name of the virtual network appliance. + /// + /// + /// The name of the virtual network appliance capability. + /// + /// + /// Parameters supplied to the create or update virtual network appliance + /// capability operation. + /// + /// + /// The headers that will be added to request. + /// + /// + /// The cancellation token. + /// + /// + /// Thrown when the operation returned an invalid status code + /// + /// + /// Thrown when unable to deserialize the response + /// + System.Threading.Tasks.Task> BeginCreateOrUpdateWithHttpMessagesAsync(string resourceGroupName, string virtualNetworkApplianceName, string capabilityName, VirtualNetworkApplianceCapabilityCreateOrUpdate parameters, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + + /// + /// Deletes the specified capability of a virtual network appliance. + /// + /// + /// Deletes the specified capability of a virtual network appliance. + /// + /// + /// The name of the resource group. The name is case insensitive. + /// + /// + /// The name of the virtual network appliance. + /// + /// + /// The name of the virtual network appliance capability. + /// + /// + /// The headers that will be added to request. + /// + /// + /// The cancellation token. + /// + /// + /// Thrown when the operation returned an invalid status code + /// + System.Threading.Tasks.Task> BeginDeleteWithHttpMessagesAsync(string resourceGroupName, string virtualNetworkApplianceName, string capabilityName, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + + /// + /// Gets all capabilities of a virtual network appliance. + /// + /// + /// Gets all capabilities of a virtual network appliance. + /// + /// + /// The NextLink from the previous successful call to List operation. + /// + /// + /// The headers that will be added to request. + /// + /// + /// The cancellation token. + /// + /// + /// Thrown when the operation returned an invalid status code + /// + /// + /// Thrown when unable to deserialize the response + /// + System.Threading.Tasks.Task>> ListNextWithHttpMessagesAsync(string nextPageLink, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + + } +} \ No newline at end of file diff --git a/src/Network/Network.Management.Sdk/Generated/Models/Components19Zjha1SchemasVirtualnetworkappliancecapabilitycreateorupdateAllof0.cs b/src/Network/Network.Management.Sdk/Generated/Models/Components19Zjha1SchemasVirtualnetworkappliancecapabilitycreateorupdateAllof0.cs new file mode 100644 index 000000000000..4c3b39771e7a --- /dev/null +++ b/src/Network/Network.Management.Sdk/Generated/Models/Components19Zjha1SchemasVirtualnetworkappliancecapabilitycreateorupdateAllof0.cs @@ -0,0 +1,65 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See License.txt in the project root for license information. +// Code generated by Microsoft (R) AutoRest Code Generator. +// Changes may cause incorrect behavior and will be lost if the code is regenerated. + +namespace Microsoft.Azure.Management.Network.Models +{ + using System.Linq; + + /// + /// Concrete proxy resource types can be created by aliasing this type using a + /// specific property type. + /// + public partial class Components19Zjha1SchemasVirtualnetworkappliancecapabilitycreateorupdateAllof0 : ProxyResourceAutoGenerated + { + /// + /// Initializes a new instance of the Components19Zjha1SchemasVirtualnetworkappliancecapabilitycreateorupdateAllof0 class. + /// + public Components19Zjha1SchemasVirtualnetworkappliancecapabilitycreateorupdateAllof0() + { + CustomInit(); + } + + /// + /// Initializes a new instance of the Components19Zjha1SchemasVirtualnetworkappliancecapabilitycreateorupdateAllof0 class. + /// + + /// Fully qualified resource ID for the resource. E.g. + /// "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}" + /// + + /// The name of the resource + /// + + /// The type of the resource. E.g. "Microsoft.Compute/virtualMachines" or + /// "Microsoft.Storage/storageAccounts" + /// + + /// Azure Resource Manager metadata containing createdBy and modifiedBy + /// information. + /// + + /// The resource-specific properties for this resource. + /// + public Components19Zjha1SchemasVirtualnetworkappliancecapabilitycreateorupdateAllof0(string id = default(string), string name = default(string), string type = default(string), SystemData systemData = default(SystemData), VirtualNetworkApplianceCapabilityProperties properties = default(VirtualNetworkApplianceCapabilityProperties)) + + : base(id, name, type, systemData) + { + this.Properties = properties; + CustomInit(); + } + + /// + /// An initialization method that performs custom operations like setting defaults + /// + partial void CustomInit(); + + + /// + /// Gets or sets the resource-specific properties for this resource. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties")] + public VirtualNetworkApplianceCapabilityProperties Properties {get; set; } + } +} \ No newline at end of file diff --git a/src/Network/Network.Management.Sdk/Generated/Models/Components1Tw8E2RSchemasVirtualnetworkappliancecapabilityAllof0.cs b/src/Network/Network.Management.Sdk/Generated/Models/Components1Tw8E2RSchemasVirtualnetworkappliancecapabilityAllof0.cs new file mode 100644 index 000000000000..9ab5b0d62b5d --- /dev/null +++ b/src/Network/Network.Management.Sdk/Generated/Models/Components1Tw8E2RSchemasVirtualnetworkappliancecapabilityAllof0.cs @@ -0,0 +1,65 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See License.txt in the project root for license information. +// Code generated by Microsoft (R) AutoRest Code Generator. +// Changes may cause incorrect behavior and will be lost if the code is regenerated. + +namespace Microsoft.Azure.Management.Network.Models +{ + using System.Linq; + + /// + /// Concrete proxy resource types can be created by aliasing this type using a + /// specific property type. + /// + public partial class Components1Tw8E2RSchemasVirtualnetworkappliancecapabilityAllof0 : ProxyResourceAutoGenerated + { + /// + /// Initializes a new instance of the Components1Tw8E2RSchemasVirtualnetworkappliancecapabilityAllof0 class. + /// + public Components1Tw8E2RSchemasVirtualnetworkappliancecapabilityAllof0() + { + CustomInit(); + } + + /// + /// Initializes a new instance of the Components1Tw8E2RSchemasVirtualnetworkappliancecapabilityAllof0 class. + /// + + /// Fully qualified resource ID for the resource. E.g. + /// "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}" + /// + + /// The name of the resource + /// + + /// The type of the resource. E.g. "Microsoft.Compute/virtualMachines" or + /// "Microsoft.Storage/storageAccounts" + /// + + /// Azure Resource Manager metadata containing createdBy and modifiedBy + /// information. + /// + + /// The resource-specific properties for this resource. + /// + public Components1Tw8E2RSchemasVirtualnetworkappliancecapabilityAllof0(string id = default(string), string name = default(string), string type = default(string), SystemData systemData = default(SystemData), VirtualNetworkApplianceCapabilityProperties properties = default(VirtualNetworkApplianceCapabilityProperties)) + + : base(id, name, type, systemData) + { + this.Properties = properties; + CustomInit(); + } + + /// + /// An initialization method that performs custom operations like setting defaults + /// + partial void CustomInit(); + + + /// + /// Gets or sets the resource-specific properties for this resource. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties")] + public VirtualNetworkApplianceCapabilityProperties Properties {get; set; } + } +} \ No newline at end of file diff --git a/src/Network/Network.Management.Sdk/Generated/Models/Nat64Capability.cs b/src/Network/Network.Management.Sdk/Generated/Models/Nat64Capability.cs new file mode 100644 index 000000000000..69b7b6189418 --- /dev/null +++ b/src/Network/Network.Management.Sdk/Generated/Models/Nat64Capability.cs @@ -0,0 +1,75 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See License.txt in the project root for license information. +// Code generated by Microsoft (R) AutoRest Code Generator. +// Changes may cause incorrect behavior and will be lost if the code is regenerated. + +namespace Microsoft.Azure.Management.Network.Models +{ + using System.Linq; + + /// + /// The NAT64 capability. Enables stateful NAT64 translation (IPv6-only + /// workloads reaching IPv4 + /// destinations) on the appliance's floating NIC; supported on a dual-stack + /// appliance. This kind is + /// property-less: it carries no `ipVersion` (the parent appliance's + /// dual-stack configuration is the + /// precondition, service-validated) beyond the properties common to every + /// capability. + /// + [Newtonsoft.Json.JsonObject("NAT64")] + public partial class Nat64Capability : VirtualNetworkApplianceCapability + { + /// + /// Initializes a new instance of the Nat64Capability class. + /// + public Nat64Capability() + { + CustomInit(); + } + + /// + /// Initializes a new instance of the Nat64Capability class. + /// + + /// Fully qualified resource ID for the resource. E.g. + /// "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}" + /// + + /// The name of the resource + /// + + /// The type of the resource. E.g. "Microsoft.Compute/virtualMachines" or + /// "Microsoft.Storage/storageAccounts" + /// + + /// Azure Resource Manager metadata containing createdBy and modifiedBy + /// information. + /// + + /// The resource-specific properties for this resource. + /// + public Nat64Capability(string id = default(string), string name = default(string), string type = default(string), SystemData systemData = default(SystemData), VirtualNetworkApplianceCapabilityProperties properties = default(VirtualNetworkApplianceCapabilityProperties)) + + : base(id, name, type, systemData, properties) + { + CustomInit(); + } + + /// + /// An initialization method that performs custom operations like setting defaults + /// + partial void CustomInit(); + + /// + /// Validate the object. + /// + /// + /// Thrown if validation fails + /// + public override void Validate() + { + base.Validate(); + } + } +} diff --git a/src/Network/Network.Management.Sdk/Generated/Models/Nat64CapabilityCreateOrUpdate.cs b/src/Network/Network.Management.Sdk/Generated/Models/Nat64CapabilityCreateOrUpdate.cs new file mode 100644 index 000000000000..857de29c23c0 --- /dev/null +++ b/src/Network/Network.Management.Sdk/Generated/Models/Nat64CapabilityCreateOrUpdate.cs @@ -0,0 +1,65 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See License.txt in the project root for license information. +// Code generated by Microsoft (R) AutoRest Code Generator. +// Changes may cause incorrect behavior and will be lost if the code is regenerated. + +namespace Microsoft.Azure.Management.Network.Models +{ + using System.Linq; + + /// + /// The NAT64 capability. Enables stateful NAT64 translation (IPv6-only + /// workloads reaching IPv4 + /// destinations) on the appliance's floating NIC; supported on a dual-stack + /// appliance. This kind is + /// property-less: it carries no `ipVersion` (the parent appliance's + /// dual-stack configuration is the + /// precondition, service-validated) beyond the properties common to every + /// capability. + /// + [Newtonsoft.Json.JsonObject("NAT64")] + public partial class Nat64CapabilityCreateOrUpdate : VirtualNetworkApplianceCapabilityCreateOrUpdate + { + /// + /// Initializes a new instance of the Nat64CapabilityCreateOrUpdate class. + /// + public Nat64CapabilityCreateOrUpdate() + { + CustomInit(); + } + + /// + /// Initializes a new instance of the Nat64CapabilityCreateOrUpdate class. + /// + + /// Fully qualified resource ID for the resource. E.g. + /// "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}" + /// + + /// The name of the resource + /// + + /// The type of the resource. E.g. "Microsoft.Compute/virtualMachines" or + /// "Microsoft.Storage/storageAccounts" + /// + + /// Azure Resource Manager metadata containing createdBy and modifiedBy + /// information. + /// + + /// The resource-specific properties for this resource. + /// + public Nat64CapabilityCreateOrUpdate(string id = default(string), string name = default(string), string type = default(string), SystemData systemData = default(SystemData), VirtualNetworkApplianceCapabilityProperties properties = default(VirtualNetworkApplianceCapabilityProperties)) + + : base(id, name, type, systemData, properties) + { + CustomInit(); + } + + /// + /// An initialization method that performs custom operations like setting defaults + /// + partial void CustomInit(); + + } +} diff --git a/src/Network/Network.Management.Sdk/Generated/Models/PLGatewayCapability.cs b/src/Network/Network.Management.Sdk/Generated/Models/PLGatewayCapability.cs new file mode 100644 index 000000000000..c5fcfbf23520 --- /dev/null +++ b/src/Network/Network.Management.Sdk/Generated/Models/PLGatewayCapability.cs @@ -0,0 +1,70 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See License.txt in the project root for license information. +// Code generated by Microsoft (R) AutoRest Code Generator. +// Changes may cause incorrect behavior and will be lost if the code is regenerated. + +namespace Microsoft.Azure.Management.Network.Models +{ + using System.Linq; + + /// + /// The Private Link Gateway (slow-path) capability. Private Link programming + /// offloaded to the appliance's gateway; + /// IPv6 on a dual-stack appliance. + /// + [Newtonsoft.Json.JsonObject("PLGateway")] + public partial class PLGatewayCapability : VirtualNetworkApplianceCapability + { + /// + /// Initializes a new instance of the PLGatewayCapability class. + /// + public PLGatewayCapability() + { + CustomInit(); + } + + /// + /// Initializes a new instance of the PLGatewayCapability class. + /// + + /// Fully qualified resource ID for the resource. E.g. + /// "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}" + /// + + /// The name of the resource + /// + + /// The type of the resource. E.g. "Microsoft.Compute/virtualMachines" or + /// "Microsoft.Storage/storageAccounts" + /// + + /// Azure Resource Manager metadata containing createdBy and modifiedBy + /// information. + /// + + /// The resource-specific properties for this resource. + /// + public PLGatewayCapability(string id = default(string), string name = default(string), string type = default(string), SystemData systemData = default(SystemData), VirtualNetworkApplianceCapabilityProperties properties = default(VirtualNetworkApplianceCapabilityProperties)) + + : base(id, name, type, systemData, properties) + { + CustomInit(); + } + + /// + /// An initialization method that performs custom operations like setting defaults + /// + partial void CustomInit(); + + /// + /// Validate the object. + /// + /// + /// Thrown if validation fails + /// + public override void Validate() + { + base.Validate(); + } + } +} \ No newline at end of file diff --git a/src/Network/Network.Management.Sdk/Generated/Models/PLGatewayCapabilityCreateOrUpdate.cs b/src/Network/Network.Management.Sdk/Generated/Models/PLGatewayCapabilityCreateOrUpdate.cs new file mode 100644 index 000000000000..a172b2245d8d --- /dev/null +++ b/src/Network/Network.Management.Sdk/Generated/Models/PLGatewayCapabilityCreateOrUpdate.cs @@ -0,0 +1,60 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See License.txt in the project root for license information. +// Code generated by Microsoft (R) AutoRest Code Generator. +// Changes may cause incorrect behavior and will be lost if the code is regenerated. + +namespace Microsoft.Azure.Management.Network.Models +{ + using System.Linq; + + /// + /// The Private Link Gateway (slow-path) capability. Private Link programming + /// offloaded to the appliance's gateway; + /// IPv6 on a dual-stack appliance. + /// + [Newtonsoft.Json.JsonObject("PLGateway")] + public partial class PLGatewayCapabilityCreateOrUpdate : VirtualNetworkApplianceCapabilityCreateOrUpdate + { + /// + /// Initializes a new instance of the PLGatewayCapabilityCreateOrUpdate class. + /// + public PLGatewayCapabilityCreateOrUpdate() + { + CustomInit(); + } + + /// + /// Initializes a new instance of the PLGatewayCapabilityCreateOrUpdate class. + /// + + /// Fully qualified resource ID for the resource. E.g. + /// "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}" + /// + + /// The name of the resource + /// + + /// The type of the resource. E.g. "Microsoft.Compute/virtualMachines" or + /// "Microsoft.Storage/storageAccounts" + /// + + /// Azure Resource Manager metadata containing createdBy and modifiedBy + /// information. + /// + + /// The resource-specific properties for this resource. + /// + public PLGatewayCapabilityCreateOrUpdate(string id = default(string), string name = default(string), string type = default(string), SystemData systemData = default(SystemData), VirtualNetworkApplianceCapabilityProperties properties = default(VirtualNetworkApplianceCapabilityProperties)) + + : base(id, name, type, systemData, properties) + { + CustomInit(); + } + + /// + /// An initialization method that performs custom operations like setting defaults + /// + partial void CustomInit(); + + } +} \ No newline at end of file diff --git a/src/Network/Network.Management.Sdk/Generated/Models/PLGatewayFastpathCapability.cs b/src/Network/Network.Management.Sdk/Generated/Models/PLGatewayFastpathCapability.cs new file mode 100644 index 000000000000..6d165b841860 --- /dev/null +++ b/src/Network/Network.Management.Sdk/Generated/Models/PLGatewayFastpathCapability.cs @@ -0,0 +1,70 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See License.txt in the project root for license information. +// Code generated by Microsoft (R) AutoRest Code Generator. +// Changes may cause incorrect behavior and will be lost if the code is regenerated. + +namespace Microsoft.Azure.Management.Network.Models +{ + using System.Linq; + + /// + /// The Private Link Gateway FastPath capability. Private Link fast-path + /// programming on the appliance's gateway; + /// supported on a dual-stack appliance. + /// + [Newtonsoft.Json.JsonObject("PLGatewayFastpath")] + public partial class PLGatewayFastpathCapability : VirtualNetworkApplianceCapability + { + /// + /// Initializes a new instance of the PLGatewayFastpathCapability class. + /// + public PLGatewayFastpathCapability() + { + CustomInit(); + } + + /// + /// Initializes a new instance of the PLGatewayFastpathCapability class. + /// + + /// Fully qualified resource ID for the resource. E.g. + /// "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}" + /// + + /// The name of the resource + /// + + /// The type of the resource. E.g. "Microsoft.Compute/virtualMachines" or + /// "Microsoft.Storage/storageAccounts" + /// + + /// Azure Resource Manager metadata containing createdBy and modifiedBy + /// information. + /// + + /// The resource-specific properties for this resource. + /// + public PLGatewayFastpathCapability(string id = default(string), string name = default(string), string type = default(string), SystemData systemData = default(SystemData), VirtualNetworkApplianceCapabilityProperties properties = default(VirtualNetworkApplianceCapabilityProperties)) + + : base(id, name, type, systemData, properties) + { + CustomInit(); + } + + /// + /// An initialization method that performs custom operations like setting defaults + /// + partial void CustomInit(); + + /// + /// Validate the object. + /// + /// + /// Thrown if validation fails + /// + public override void Validate() + { + base.Validate(); + } + } +} \ No newline at end of file diff --git a/src/Network/Network.Management.Sdk/Generated/Models/PLGatewayFastpathCapabilityCreateOrUpdate.cs b/src/Network/Network.Management.Sdk/Generated/Models/PLGatewayFastpathCapabilityCreateOrUpdate.cs new file mode 100644 index 000000000000..48d1bb707539 --- /dev/null +++ b/src/Network/Network.Management.Sdk/Generated/Models/PLGatewayFastpathCapabilityCreateOrUpdate.cs @@ -0,0 +1,60 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See License.txt in the project root for license information. +// Code generated by Microsoft (R) AutoRest Code Generator. +// Changes may cause incorrect behavior and will be lost if the code is regenerated. + +namespace Microsoft.Azure.Management.Network.Models +{ + using System.Linq; + + /// + /// The Private Link Gateway FastPath capability. Private Link fast-path + /// programming on the appliance's gateway; + /// supported on a dual-stack appliance. + /// + [Newtonsoft.Json.JsonObject("PLGatewayFastpath")] + public partial class PLGatewayFastpathCapabilityCreateOrUpdate : VirtualNetworkApplianceCapabilityCreateOrUpdate + { + /// + /// Initializes a new instance of the PLGatewayFastpathCapabilityCreateOrUpdate class. + /// + public PLGatewayFastpathCapabilityCreateOrUpdate() + { + CustomInit(); + } + + /// + /// Initializes a new instance of the PLGatewayFastpathCapabilityCreateOrUpdate class. + /// + + /// Fully qualified resource ID for the resource. E.g. + /// "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}" + /// + + /// The name of the resource + /// + + /// The type of the resource. E.g. "Microsoft.Compute/virtualMachines" or + /// "Microsoft.Storage/storageAccounts" + /// + + /// Azure Resource Manager metadata containing createdBy and modifiedBy + /// information. + /// + + /// The resource-specific properties for this resource. + /// + public PLGatewayFastpathCapabilityCreateOrUpdate(string id = default(string), string name = default(string), string type = default(string), SystemData systemData = default(SystemData), VirtualNetworkApplianceCapabilityProperties properties = default(VirtualNetworkApplianceCapabilityProperties)) + + : base(id, name, type, systemData, properties) + { + CustomInit(); + } + + /// + /// An initialization method that performs custom operations like setting defaults + /// + partial void CustomInit(); + + } +} \ No newline at end of file diff --git a/src/Network/Network.Management.Sdk/Generated/Models/PlipForwardersCapability.cs b/src/Network/Network.Management.Sdk/Generated/Models/PlipForwardersCapability.cs new file mode 100644 index 000000000000..32feed18d6c1 --- /dev/null +++ b/src/Network/Network.Management.Sdk/Generated/Models/PlipForwardersCapability.cs @@ -0,0 +1,70 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See License.txt in the project root for license information. +// Code generated by Microsoft (R) AutoRest Code Generator. +// Changes may cause incorrect behavior and will be lost if the code is regenerated. + +namespace Microsoft.Azure.Management.Network.Models +{ + using System.Linq; + + /// + /// The Private Link IP-forwarders (NVA) capability. Private Link programming + /// offloaded to the appliance NVA; + /// IPv6 on a dual-stack appliance. + /// + [Newtonsoft.Json.JsonObject("PLIPForwarders")] + public partial class PlipForwardersCapability : VirtualNetworkApplianceCapability + { + /// + /// Initializes a new instance of the PlipForwardersCapability class. + /// + public PlipForwardersCapability() + { + CustomInit(); + } + + /// + /// Initializes a new instance of the PlipForwardersCapability class. + /// + + /// Fully qualified resource ID for the resource. E.g. + /// "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}" + /// + + /// The name of the resource + /// + + /// The type of the resource. E.g. "Microsoft.Compute/virtualMachines" or + /// "Microsoft.Storage/storageAccounts" + /// + + /// Azure Resource Manager metadata containing createdBy and modifiedBy + /// information. + /// + + /// The resource-specific properties for this resource. + /// + public PlipForwardersCapability(string id = default(string), string name = default(string), string type = default(string), SystemData systemData = default(SystemData), VirtualNetworkApplianceCapabilityProperties properties = default(VirtualNetworkApplianceCapabilityProperties)) + + : base(id, name, type, systemData, properties) + { + CustomInit(); + } + + /// + /// An initialization method that performs custom operations like setting defaults + /// + partial void CustomInit(); + + /// + /// Validate the object. + /// + /// + /// Thrown if validation fails + /// + public override void Validate() + { + base.Validate(); + } + } +} \ No newline at end of file diff --git a/src/Network/Network.Management.Sdk/Generated/Models/PlipForwardersCapabilityCreateOrUpdate.cs b/src/Network/Network.Management.Sdk/Generated/Models/PlipForwardersCapabilityCreateOrUpdate.cs new file mode 100644 index 000000000000..be5d6fd25f8b --- /dev/null +++ b/src/Network/Network.Management.Sdk/Generated/Models/PlipForwardersCapabilityCreateOrUpdate.cs @@ -0,0 +1,60 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See License.txt in the project root for license information. +// Code generated by Microsoft (R) AutoRest Code Generator. +// Changes may cause incorrect behavior and will be lost if the code is regenerated. + +namespace Microsoft.Azure.Management.Network.Models +{ + using System.Linq; + + /// + /// The Private Link IP-forwarders (NVA) capability. Private Link programming + /// offloaded to the appliance NVA; + /// IPv6 on a dual-stack appliance. + /// + [Newtonsoft.Json.JsonObject("PLIPForwarders")] + public partial class PlipForwardersCapabilityCreateOrUpdate : VirtualNetworkApplianceCapabilityCreateOrUpdate + { + /// + /// Initializes a new instance of the PlipForwardersCapabilityCreateOrUpdate class. + /// + public PlipForwardersCapabilityCreateOrUpdate() + { + CustomInit(); + } + + /// + /// Initializes a new instance of the PlipForwardersCapabilityCreateOrUpdate class. + /// + + /// Fully qualified resource ID for the resource. E.g. + /// "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}" + /// + + /// The name of the resource + /// + + /// The type of the resource. E.g. "Microsoft.Compute/virtualMachines" or + /// "Microsoft.Storage/storageAccounts" + /// + + /// Azure Resource Manager metadata containing createdBy and modifiedBy + /// information. + /// + + /// The resource-specific properties for this resource. + /// + public PlipForwardersCapabilityCreateOrUpdate(string id = default(string), string name = default(string), string type = default(string), SystemData systemData = default(SystemData), VirtualNetworkApplianceCapabilityProperties properties = default(VirtualNetworkApplianceCapabilityProperties)) + + : base(id, name, type, systemData, properties) + { + CustomInit(); + } + + /// + /// An initialization method that performs custom operations like setting defaults + /// + partial void CustomInit(); + + } +} \ No newline at end of file diff --git a/src/Network/Network.Management.Sdk/Generated/Models/ProxyResourceAutoGenerated.cs b/src/Network/Network.Management.Sdk/Generated/Models/ProxyResourceAutoGenerated.cs new file mode 100644 index 000000000000..7c50847c8a6b --- /dev/null +++ b/src/Network/Network.Management.Sdk/Generated/Models/ProxyResourceAutoGenerated.cs @@ -0,0 +1,59 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See License.txt in the project root for license information. +// Code generated by Microsoft (R) AutoRest Code Generator. +// Changes may cause incorrect behavior and will be lost if the code is regenerated. + +namespace Microsoft.Azure.Management.Network.Models +{ + using System.Linq; + + /// + /// The resource model definition for a Azure Resource Manager proxy resource. + /// It will not have tags and a location + /// + /// + /// The resource model definition for a Azure Resource Manager proxy resource. + /// It will not have tags and a location + /// + public partial class ProxyResourceAutoGenerated : CommonResource + { + /// + /// Initializes a new instance of the ProxyResourceAutoGenerated class. + /// + public ProxyResourceAutoGenerated() + { + CustomInit(); + } + + /// + /// Initializes a new instance of the ProxyResourceAutoGenerated class. + /// + + /// Fully qualified resource ID for the resource. E.g. + /// "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}" + /// + + /// The name of the resource + /// + + /// The type of the resource. E.g. "Microsoft.Compute/virtualMachines" or + /// "Microsoft.Storage/storageAccounts" + /// + + /// Azure Resource Manager metadata containing createdBy and modifiedBy + /// information. + /// + public ProxyResourceAutoGenerated(string id = default(string), string name = default(string), string type = default(string), SystemData systemData = default(SystemData)) + + : base(id, name, type, systemData) + { + CustomInit(); + } + + /// + /// An initialization method that performs custom operations like setting defaults + /// + partial void CustomInit(); + + } +} \ No newline at end of file diff --git a/src/Network/Network.Management.Sdk/Generated/Models/VirtualNetworkApplianceCapabilitiesCreateOrUpdateHeaders.cs b/src/Network/Network.Management.Sdk/Generated/Models/VirtualNetworkApplianceCapabilitiesCreateOrUpdateHeaders.cs new file mode 100644 index 000000000000..9788dd93f2da --- /dev/null +++ b/src/Network/Network.Management.Sdk/Generated/Models/VirtualNetworkApplianceCapabilitiesCreateOrUpdateHeaders.cs @@ -0,0 +1,55 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See License.txt in the project root for license information. +// Code generated by Microsoft (R) AutoRest Code Generator. +// Changes may cause incorrect behavior and will be lost if the code is regenerated. + +namespace Microsoft.Azure.Management.Network.Models +{ + using System.Linq; + + public partial class VirtualNetworkApplianceCapabilitiesCreateOrUpdateHeaders + { + /// + /// Initializes a new instance of the VirtualNetworkApplianceCapabilitiesCreateOrUpdateHeaders class. + /// + public VirtualNetworkApplianceCapabilitiesCreateOrUpdateHeaders() + { + CustomInit(); + } + + /// + /// Initializes a new instance of the VirtualNetworkApplianceCapabilitiesCreateOrUpdateHeaders class. + /// + + /// + /// + + /// + /// + public VirtualNetworkApplianceCapabilitiesCreateOrUpdateHeaders(string azureAsyncOperation = default(string), int? retryAfter = default(int?)) + + { + this.AzureAsyncOperation = azureAsyncOperation; + this.RetryAfter = retryAfter; + CustomInit(); + } + + /// + /// An initialization method that performs custom operations like setting defaults + /// + partial void CustomInit(); + + + /// + /// Gets or sets + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "Azure-AsyncOperation")] + public string AzureAsyncOperation {get; set; } + + /// + /// Gets or sets + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "Retry-After")] + public int? RetryAfter {get; set; } + } +} \ No newline at end of file diff --git a/src/Network/Network.Management.Sdk/Generated/Models/VirtualNetworkApplianceCapabilitiesDeleteHeaders.cs b/src/Network/Network.Management.Sdk/Generated/Models/VirtualNetworkApplianceCapabilitiesDeleteHeaders.cs new file mode 100644 index 000000000000..152c0460a394 --- /dev/null +++ b/src/Network/Network.Management.Sdk/Generated/Models/VirtualNetworkApplianceCapabilitiesDeleteHeaders.cs @@ -0,0 +1,55 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See License.txt in the project root for license information. +// Code generated by Microsoft (R) AutoRest Code Generator. +// Changes may cause incorrect behavior and will be lost if the code is regenerated. + +namespace Microsoft.Azure.Management.Network.Models +{ + using System.Linq; + + public partial class VirtualNetworkApplianceCapabilitiesDeleteHeaders + { + /// + /// Initializes a new instance of the VirtualNetworkApplianceCapabilitiesDeleteHeaders class. + /// + public VirtualNetworkApplianceCapabilitiesDeleteHeaders() + { + CustomInit(); + } + + /// + /// Initializes a new instance of the VirtualNetworkApplianceCapabilitiesDeleteHeaders class. + /// + + /// + /// + + /// + /// + public VirtualNetworkApplianceCapabilitiesDeleteHeaders(string location = default(string), int? retryAfter = default(int?)) + + { + this.Location = location; + this.RetryAfter = retryAfter; + CustomInit(); + } + + /// + /// An initialization method that performs custom operations like setting defaults + /// + partial void CustomInit(); + + + /// + /// Gets or sets + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "Location")] + public string Location {get; set; } + + /// + /// Gets or sets + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "Retry-After")] + public int? RetryAfter {get; set; } + } +} \ No newline at end of file diff --git a/src/Network/Network.Management.Sdk/Generated/Models/VirtualNetworkApplianceCapability.cs b/src/Network/Network.Management.Sdk/Generated/Models/VirtualNetworkApplianceCapability.cs new file mode 100644 index 000000000000..941050443732 --- /dev/null +++ b/src/Network/Network.Management.Sdk/Generated/Models/VirtualNetworkApplianceCapability.cs @@ -0,0 +1,79 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See License.txt in the project root for license information. +// Code generated by Microsoft (R) AutoRest Code Generator. +// Changes may cause incorrect behavior and will be lost if the code is regenerated. + +namespace Microsoft.Azure.Management.Network.Models +{ + using System.Linq; + + /// + /// A capability enabled on a virtual network appliance. The top-level `kind` + /// discriminator selects the + /// capability family; every kind shares the same `properties` schema (see + /// VirtualNetworkApplianceCapabilityProperties). One capability of a given + /// kind may exist per appliance. + /// + [Newtonsoft.Json.JsonObject("VirtualNetworkApplianceCapability")] + public partial class VirtualNetworkApplianceCapability : Components1Tw8E2RSchemasVirtualnetworkappliancecapabilityAllof0 + { + /// + /// Initializes a new instance of the VirtualNetworkApplianceCapability class. + /// + public VirtualNetworkApplianceCapability() + { + CustomInit(); + } + + /// + /// Initializes a new instance of the VirtualNetworkApplianceCapability class. + /// + + /// Fully qualified resource ID for the resource. E.g. + /// "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}" + /// + + /// The name of the resource + /// + + /// The type of the resource. E.g. "Microsoft.Compute/virtualMachines" or + /// "Microsoft.Storage/storageAccounts" + /// + + /// Azure Resource Manager metadata containing createdBy and modifiedBy + /// information. + /// + + /// The resource-specific properties for this resource. + /// + public VirtualNetworkApplianceCapability(string id = default(string), string name = default(string), string type = default(string), SystemData systemData = default(SystemData), VirtualNetworkApplianceCapabilityProperties properties = default(VirtualNetworkApplianceCapabilityProperties)) + + : base(id, name, type, systemData, properties) + { + CustomInit(); + } + + /// + /// An initialization method that performs custom operations like setting defaults + /// + partial void CustomInit(); + + + /// + /// Validate the object. + /// + /// + /// Thrown if validation fails + /// + public virtual void Validate() + { + if (this.Name != null) + { + if (!System.Text.RegularExpressions.Regex.IsMatch(this.Name, "^[0-9a-zA-Z]([0-9a-zA-Z_.-]{0,62}[0-9a-zA-Z_])?$")) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.Pattern, "Name", "^[0-9a-zA-Z]([0-9a-zA-Z_.-]{0,62}[0-9a-zA-Z_])?$"); + } + } + } + } +} \ No newline at end of file diff --git a/src/Network/Network.Management.Sdk/Generated/Models/VirtualNetworkApplianceCapabilityCreateOrUpdate.cs b/src/Network/Network.Management.Sdk/Generated/Models/VirtualNetworkApplianceCapabilityCreateOrUpdate.cs new file mode 100644 index 000000000000..d188bd524384 --- /dev/null +++ b/src/Network/Network.Management.Sdk/Generated/Models/VirtualNetworkApplianceCapabilityCreateOrUpdate.cs @@ -0,0 +1,62 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See License.txt in the project root for license information. +// Code generated by Microsoft (R) AutoRest Code Generator. +// Changes may cause incorrect behavior and will be lost if the code is regenerated. + +namespace Microsoft.Azure.Management.Network.Models +{ + using System.Linq; + + /// + /// A capability enabled on a virtual network appliance. The top-level `kind` + /// discriminator selects the + /// capability family; every kind shares the same `properties` schema (see + /// VirtualNetworkApplianceCapabilityProperties). One capability of a given + /// kind may exist per appliance. + /// + [Newtonsoft.Json.JsonObject("VirtualNetworkApplianceCapabilityCreateOrUpdate")] + public partial class VirtualNetworkApplianceCapabilityCreateOrUpdate : Components19Zjha1SchemasVirtualnetworkappliancecapabilitycreateorupdateAllof0 + { + /// + /// Initializes a new instance of the VirtualNetworkApplianceCapabilityCreateOrUpdate class. + /// + public VirtualNetworkApplianceCapabilityCreateOrUpdate() + { + CustomInit(); + } + + /// + /// Initializes a new instance of the VirtualNetworkApplianceCapabilityCreateOrUpdate class. + /// + + /// Fully qualified resource ID for the resource. E.g. + /// "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}" + /// + + /// The name of the resource + /// + + /// The type of the resource. E.g. "Microsoft.Compute/virtualMachines" or + /// "Microsoft.Storage/storageAccounts" + /// + + /// Azure Resource Manager metadata containing createdBy and modifiedBy + /// information. + /// + + /// The resource-specific properties for this resource. + /// + public VirtualNetworkApplianceCapabilityCreateOrUpdate(string id = default(string), string name = default(string), string type = default(string), SystemData systemData = default(SystemData), VirtualNetworkApplianceCapabilityProperties properties = default(VirtualNetworkApplianceCapabilityProperties)) + + : base(id, name, type, systemData, properties) + { + CustomInit(); + } + + /// + /// An initialization method that performs custom operations like setting defaults + /// + partial void CustomInit(); + + } +} \ No newline at end of file diff --git a/src/Network/Network.Management.Sdk/Generated/Models/VirtualNetworkApplianceCapabilityIpVersion.cs b/src/Network/Network.Management.Sdk/Generated/Models/VirtualNetworkApplianceCapabilityIpVersion.cs new file mode 100644 index 000000000000..ee27d3433ea2 --- /dev/null +++ b/src/Network/Network.Management.Sdk/Generated/Models/VirtualNetworkApplianceCapabilityIpVersion.cs @@ -0,0 +1,25 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See License.txt in the project root for license information. +// Code generated by Microsoft (R) AutoRest Code Generator. +// Changes may cause incorrect behavior and will be lost if the code is regenerated. + +namespace Microsoft.Azure.Management.Network.Models +{ + + /// + /// Defines values for VirtualNetworkApplianceCapabilityIpVersion. + /// + + + public static class VirtualNetworkApplianceCapabilityIpVersion + { + /// + /// Single stack IPv6 only. + /// + public const string IPv6 = "IPv6"; + /// + /// Dual stack (both IPv4 and IPv6). + /// + public const string DualStack = "DualStack"; + } +} \ No newline at end of file diff --git a/src/Network/Network.Management.Sdk/Generated/Models/VirtualNetworkApplianceCapabilityKind.cs b/src/Network/Network.Management.Sdk/Generated/Models/VirtualNetworkApplianceCapabilityKind.cs new file mode 100644 index 000000000000..86e63736e176 --- /dev/null +++ b/src/Network/Network.Management.Sdk/Generated/Models/VirtualNetworkApplianceCapabilityKind.cs @@ -0,0 +1,33 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See License.txt in the project root for license information. +// Code generated by Microsoft (R) AutoRest Code Generator. +// Changes may cause incorrect behavior and will be lost if the code is regenerated. + +namespace Microsoft.Azure.Management.Network.Models +{ + + /// + /// Defines values for VirtualNetworkApplianceCapabilityKind. + /// + + + public static class VirtualNetworkApplianceCapabilityKind + { + /// + /// Private Link Gateway FastPath. + /// + public const string PLGatewayFastpath = "PLGatewayFastpath"; + /// + /// Private Link Gateway (slow-path). + /// + public const string PLGateway = "PLGateway"; + /// + /// Private Link IP-forwarders (NVA). + /// + public const string PlipForwarders = "PLIPForwarders"; + /// + /// NAT64 (stateful IPv6-to-IPv4 translation). + /// + public const string Nat64 = "NAT64"; + } +} \ No newline at end of file diff --git a/src/Network/Network.Management.Sdk/Generated/Models/VirtualNetworkApplianceCapabilityProperties.cs b/src/Network/Network.Management.Sdk/Generated/Models/VirtualNetworkApplianceCapabilityProperties.cs new file mode 100644 index 000000000000..6c764cb77d86 --- /dev/null +++ b/src/Network/Network.Management.Sdk/Generated/Models/VirtualNetworkApplianceCapabilityProperties.cs @@ -0,0 +1,84 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See License.txt in the project root for license information. +// Code generated by Microsoft (R) AutoRest Code Generator. +// Changes may cause incorrect behavior and will be lost if the code is regenerated. + +namespace Microsoft.Azure.Management.Network.Models +{ + using System.Linq; + + /// + /// Properties common to every virtual network appliance capability, + /// independent of kind. + /// + public partial class VirtualNetworkApplianceCapabilityProperties + { + /// + /// Initializes a new instance of the VirtualNetworkApplianceCapabilityProperties class. + /// + public VirtualNetworkApplianceCapabilityProperties() + { + CustomInit(); + } + + /// + /// Initializes a new instance of the VirtualNetworkApplianceCapabilityProperties class. + /// + + /// The Azure resource ID of the owning virtual network. System-derived and + /// read-only. + /// + + /// The provisioning state of the capability resource. + /// Possible values include: 'Failed', 'Succeeded', 'Canceled', 'Creating', + /// 'Updating', 'Deleting' + + /// The IP version the capability applies to. Private Link Gateway FastPath + /// (`PLGatewayFastpath`) + /// only accepts `DualStack`; Private Link Gateway (`PLGateway`) and Private + /// Link IP-forwarders + /// (`PLIPForwarders`) only accept `IPv6`. The service validates the value + /// against the resource's + /// `kind` when the capability is created or updated. + /// Possible values include: 'IPv6', 'DualStack' + public VirtualNetworkApplianceCapabilityProperties(string linkedResourceId = default(string), string provisioningState = default(string), string ipVersion = default(string)) + + { + this.LinkedResourceId = linkedResourceId; + this.ProvisioningState = provisioningState; + this.IPVersion = ipVersion; + CustomInit(); + } + + /// + /// An initialization method that performs custom operations like setting defaults + /// + partial void CustomInit(); + + + /// + /// Gets the Azure resource ID of the owning virtual network. System-derived + /// and read-only. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "linkedResourceId")] + public string LinkedResourceId {get; private set; } + + /// + /// Gets the provisioning state of the capability resource. Possible values include: 'Failed', 'Succeeded', 'Canceled', 'Creating', 'Updating', 'Deleting' + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "provisioningState")] + public string ProvisioningState {get; private set; } + + /// + /// Gets or sets the IP version the capability applies to. Private Link Gateway + /// FastPath (`PLGatewayFastpath`) + /// only accepts `DualStack`; Private Link Gateway (`PLGateway`) and Private + /// Link IP-forwarders + /// (`PLIPForwarders`) only accept `IPv6`. The service validates the value + /// against the resource's + /// `kind` when the capability is created or updated. Possible values include: 'IPv6', 'DualStack' + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "ipVersion")] + public string IPVersion {get; set; } + } +} \ No newline at end of file diff --git a/src/Network/Network.Management.Sdk/Generated/NetworkManagementClient.cs b/src/Network/Network.Management.Sdk/Generated/NetworkManagementClient.cs index 439805c909b1..c66a5aaa4c76 100644 --- a/src/Network/Network.Management.Sdk/Generated/NetworkManagementClient.cs +++ b/src/Network/Network.Management.Sdk/Generated/NetworkManagementClient.cs @@ -620,6 +620,10 @@ public partial class NetworkManagementClient : Microsoft.Rest.ServiceClient public virtual IVirtualNetworkAppliancesOperations VirtualNetworkAppliances { get; private set; } /// + /// Gets the IVirtualNetworkApplianceCapabilitiesOperations + /// + public virtual IVirtualNetworkApplianceCapabilitiesOperations VirtualNetworkApplianceCapabilities { get; private set; } + /// /// Gets the IExpressRouteGatewaysOperations /// public virtual IExpressRouteGatewaysOperations ExpressRouteGateways { get; private set; } @@ -1102,6 +1106,7 @@ private void Initialize() this.VirtualRouterPeerings = new VirtualRouterPeeringsOperations(this); this.VipSwap = new VipSwapOperations(this); this.VirtualNetworkAppliances = new VirtualNetworkAppliancesOperations(this); + this.VirtualNetworkApplianceCapabilities = new VirtualNetworkApplianceCapabilitiesOperations(this); this.ExpressRouteGateways = new ExpressRouteGatewaysOperations(this); this.P2SVpnGateways = new P2SVpnGatewaysOperations(this); this.VirtualHubs = new VirtualHubsOperations(this); @@ -1164,6 +1169,8 @@ private void Initialize() DeserializationSettings.Converters.Add(new Microsoft.Rest.Serialization.PolymorphicDeserializeJsonConverter("kind")); SerializationSettings.Converters.Add(new Microsoft.Rest.Serialization.PolymorphicSerializeJsonConverter("kind")); DeserializationSettings.Converters.Add(new Microsoft.Rest.Serialization.PolymorphicDeserializeJsonConverter("kind")); + SerializationSettings.Converters.Add(new Microsoft.Rest.Serialization.PolymorphicSerializeJsonConverter("kind")); + DeserializationSettings.Converters.Add(new Microsoft.Rest.Serialization.PolymorphicDeserializeJsonConverter("kind")); SerializationSettings.Converters.Add(new Microsoft.Rest.Serialization.PolymorphicSerializeJsonConverter("kind")); DeserializationSettings.Converters.Add(new Microsoft.Rest.Serialization.PolymorphicDeserializeJsonConverter("kind")); SerializationSettings.Converters.Add(new Microsoft.Rest.Serialization.PolymorphicSerializeJsonConverter("ruleType")); diff --git a/src/Network/Network.Management.Sdk/Generated/VirtualNetworkApplianceCapabilitiesOperations.cs b/src/Network/Network.Management.Sdk/Generated/VirtualNetworkApplianceCapabilitiesOperations.cs new file mode 100644 index 000000000000..d5b60c5d066a --- /dev/null +++ b/src/Network/Network.Management.Sdk/Generated/VirtualNetworkApplianceCapabilitiesOperations.cs @@ -0,0 +1,1228 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See License.txt in the project root for license information. +// Code generated by Microsoft (R) AutoRest Code Generator. +// Changes may cause incorrect behavior and will be lost if the code is regenerated. + +namespace Microsoft.Azure.Management.Network +{ + using System.Linq; + using Microsoft.Rest; + using Microsoft.Rest.Azure; + using Models; + + /// + /// VirtualNetworkApplianceCapabilitiesOperations operations. + /// + internal partial class VirtualNetworkApplianceCapabilitiesOperations : Microsoft.Rest.IServiceOperations, IVirtualNetworkApplianceCapabilitiesOperations + { + /// + /// Initializes a new instance of the VirtualNetworkApplianceCapabilitiesOperations class. + /// + /// + /// Reference to the service client. + /// + /// + /// Thrown when a required parameter is null + /// + internal VirtualNetworkApplianceCapabilitiesOperations (NetworkManagementClient client) + { + if (client == null) + { + throw new System.ArgumentNullException("client"); + } + this.Client = client; + } + + /// + /// Gets a reference to the NetworkManagementClient + /// + public NetworkManagementClient Client { get; private set; } + + /// + /// Gets all capabilities of a virtual network appliance. + /// + /// + /// The name of the resource group. The name is case insensitive. + /// + /// + /// The name of the virtual network appliance. + /// + /// + /// Headers that will be added to request. + /// + /// + /// The cancellation token. + /// + /// + /// Thrown when the operation returned an invalid status code + /// + /// + /// Thrown when unable to deserialize the response + /// + /// + /// Thrown when a required parameter is null + /// + /// + /// Thrown when a required parameter is null + /// + /// + /// A response object containing the response body and response headers. + /// + public async System.Threading.Tasks.Task>> ListWithHttpMessagesAsync(string resourceGroupName, string virtualNetworkApplianceName, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + + + + + string apiVersion = "2026-03-01"; + + + if (resourceGroupName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "resourceGroupName"); + } + if (resourceGroupName != null) + { + if (resourceGroupName.Length > 90) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.MaxLength, "resourceGroupName", 90); + } + if (resourceGroupName.Length < 1) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.MinLength, "resourceGroupName", 1); + } + } + if (virtualNetworkApplianceName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "virtualNetworkApplianceName"); + } + if (virtualNetworkApplianceName != null) + { + if (!System.Text.RegularExpressions.Regex.IsMatch(virtualNetworkApplianceName, "^[0-9a-zA-Z]([0-9a-zA-Z_.-]{0,62}[0-9a-zA-Z_])?$")) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.Pattern, "virtualNetworkApplianceName", "^[0-9a-zA-Z]([0-9a-zA-Z_.-]{0,62}[0-9a-zA-Z_])?$"); + } + } + // Tracing + bool _shouldTrace = Microsoft.Rest.ServiceClientTracing.IsEnabled; + string _invocationId = null; + if (_shouldTrace) + { + _invocationId = Microsoft.Rest.ServiceClientTracing.NextInvocationId.ToString(); + System.Collections.Generic.Dictionary tracingParameters = new System.Collections.Generic.Dictionary(); + tracingParameters.Add("resourceGroupName", resourceGroupName); + tracingParameters.Add("virtualNetworkApplianceName", virtualNetworkApplianceName); + + + tracingParameters.Add("cancellationToken", cancellationToken); + Microsoft.Rest.ServiceClientTracing.Enter(_invocationId, this, "List", tracingParameters); + } + // Construct URL + + var _baseUrl = this.Client.BaseUri.AbsoluteUri; + var _url = new System.Uri(new System.Uri(_baseUrl + (_baseUrl.EndsWith("/") ? "" : "/")), "subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/virtualNetworkAppliances/{virtualNetworkApplianceName}/capabilities").ToString(); + _url = _url.Replace("{subscriptionId}", System.Uri.EscapeDataString(Microsoft.Rest.Serialization.SafeJsonConvert.SerializeObject(this.Client.SubscriptionId, this.Client.SerializationSettings).Trim('"'))); + _url = _url.Replace("{resourceGroupName}", System.Uri.EscapeDataString(resourceGroupName)); + _url = _url.Replace("{virtualNetworkApplianceName}", System.Uri.EscapeDataString(virtualNetworkApplianceName)); + + System.Collections.Generic.List _queryParameters = new System.Collections.Generic.List(); + if (apiVersion != null) + { + _queryParameters.Add(string.Format("api-version={0}", System.Uri.EscapeDataString(apiVersion))); + } + if (_queryParameters.Count > 0) + { + _url += (_url.Contains("?") ? "&" : "?") + string.Join("&", _queryParameters); + } + // Create HTTP transport objects + var _httpRequest = new System.Net.Http.HttpRequestMessage(); + System.Net.Http.HttpResponseMessage _httpResponse = null; + _httpRequest.Method = new System.Net.Http.HttpMethod("GET"); + _httpRequest.RequestUri = new System.Uri(_url); + // Set Headers + if (this.Client.GenerateClientRequestId != null && this.Client.GenerateClientRequestId.Value) + { + _httpRequest.Headers.TryAddWithoutValidation("x-ms-client-request-id", System.Guid.NewGuid().ToString()); + } + if (this.Client.AcceptLanguage != null) + { + if (_httpRequest.Headers.Contains("accept-language")) + { + _httpRequest.Headers.Remove("accept-language"); + } + _httpRequest.Headers.TryAddWithoutValidation("accept-language", this.Client.AcceptLanguage); + } + + if (customHeaders != null) + { + foreach(var _header in customHeaders) + { + if (_httpRequest.Headers.Contains(_header.Key)) + { + _httpRequest.Headers.Remove(_header.Key); + } + _httpRequest.Headers.TryAddWithoutValidation(_header.Key, _header.Value); + } + } + // Serialize Request + string _requestContent = null; + // Set Credentials + if (this.Client.Credentials != null) + { + cancellationToken.ThrowIfCancellationRequested(); + await this.Client.Credentials.ProcessHttpRequestAsync(_httpRequest, cancellationToken).ConfigureAwait(false); + } + // Send Request + if (_shouldTrace) + { + Microsoft.Rest.ServiceClientTracing.SendRequest(_invocationId, _httpRequest); + } + cancellationToken.ThrowIfCancellationRequested(); + _httpResponse = await this.Client.HttpClient.SendAsync(_httpRequest, cancellationToken).ConfigureAwait(false); + if (_shouldTrace) + { + Microsoft.Rest.ServiceClientTracing.ReceiveResponse(_invocationId, _httpResponse); + } + + System.Net.HttpStatusCode _statusCode = _httpResponse.StatusCode; + cancellationToken.ThrowIfCancellationRequested(); + string _responseContent = null; + + if ((int)_statusCode != 200) + { + var ex = new Microsoft.Rest.Azure.CloudException(string.Format("Operation returned an invalid status code '{0}'", _statusCode)); + try + { + _responseContent = await _httpResponse.Content.ReadAsStringAsync().ConfigureAwait(false); + Microsoft.Rest.Azure.CloudError _errorBody = Microsoft.Rest.Serialization.SafeJsonConvert.DeserializeObject(_responseContent, this.Client.DeserializationSettings); + if (_errorBody != null) + { + ex.Body = _errorBody; + } + } + catch (Newtonsoft.Json.JsonException) + { + // Ignore the exception + } + ex.Request = new Microsoft.Rest.HttpRequestMessageWrapper(_httpRequest, _requestContent); + ex.Response = new Microsoft.Rest.HttpResponseMessageWrapper(_httpResponse, _responseContent); + if (_shouldTrace) + { + Microsoft.Rest.ServiceClientTracing.Error(_invocationId, ex); + } + _httpRequest.Dispose(); + if (_httpResponse != null) + { + _httpResponse.Dispose(); + } + throw ex; + } + // Create Result + var _result = new Microsoft.Rest.Azure.AzureOperationResponse>(); + _result.Request = _httpRequest; + _result.Response = _httpResponse; + + if (_httpResponse.Headers.Contains("x-ms-request-id")) + { + _result.RequestId = _httpResponse.Headers.GetValues("x-ms-request-id").FirstOrDefault(); + } + // Deserialize Response + if ((int)_statusCode == 200) + { + _responseContent = await _httpResponse.Content.ReadAsStringAsync().ConfigureAwait(false); + try + { + _result.Body = Microsoft.Rest.Serialization.SafeJsonConvert.DeserializeObject>(_responseContent, this.Client.DeserializationSettings); + } + catch (Newtonsoft.Json.JsonException ex) + { + _httpRequest.Dispose(); + if (_httpResponse != null) + { + _httpResponse.Dispose(); + } + throw new Microsoft.Rest.SerializationException("Unable to deserialize the response.", _responseContent, ex); + } + } + if (_shouldTrace) + { + Microsoft.Rest.ServiceClientTracing.Exit(_invocationId, _result); + } + return _result; + + + + + + } + /// + /// Gets the specified capability of a virtual network appliance. + /// + /// + /// The name of the resource group. The name is case insensitive. + /// + /// + /// The name of the virtual network appliance. + /// + /// + /// The name of the virtual network appliance capability. + /// + /// + /// Headers that will be added to request. + /// + /// + /// The cancellation token. + /// + /// + /// Thrown when the operation returned an invalid status code + /// + /// + /// Thrown when unable to deserialize the response + /// + /// + /// Thrown when a required parameter is null + /// + /// + /// Thrown when a required parameter is null + /// + /// + /// A response object containing the response body and response headers. + /// + public async System.Threading.Tasks.Task> GetWithHttpMessagesAsync(string resourceGroupName, string virtualNetworkApplianceName, string capabilityName, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + + + + + string apiVersion = "2026-03-01"; + + + if (resourceGroupName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "resourceGroupName"); + } + if (resourceGroupName != null) + { + if (resourceGroupName.Length > 90) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.MaxLength, "resourceGroupName", 90); + } + if (resourceGroupName.Length < 1) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.MinLength, "resourceGroupName", 1); + } + } + if (virtualNetworkApplianceName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "virtualNetworkApplianceName"); + } + if (virtualNetworkApplianceName != null) + { + if (!System.Text.RegularExpressions.Regex.IsMatch(virtualNetworkApplianceName, "^[0-9a-zA-Z]([0-9a-zA-Z_.-]{0,62}[0-9a-zA-Z_])?$")) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.Pattern, "virtualNetworkApplianceName", "^[0-9a-zA-Z]([0-9a-zA-Z_.-]{0,62}[0-9a-zA-Z_])?$"); + } + } + if (capabilityName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "capabilityName"); + } + if (capabilityName != null) + { + if (!System.Text.RegularExpressions.Regex.IsMatch(capabilityName, "^[0-9a-zA-Z]([0-9a-zA-Z_.-]{0,62}[0-9a-zA-Z_])?$")) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.Pattern, "capabilityName", "^[0-9a-zA-Z]([0-9a-zA-Z_.-]{0,62}[0-9a-zA-Z_])?$"); + } + } + // Tracing + bool _shouldTrace = Microsoft.Rest.ServiceClientTracing.IsEnabled; + string _invocationId = null; + if (_shouldTrace) + { + _invocationId = Microsoft.Rest.ServiceClientTracing.NextInvocationId.ToString(); + System.Collections.Generic.Dictionary tracingParameters = new System.Collections.Generic.Dictionary(); + tracingParameters.Add("resourceGroupName", resourceGroupName); + tracingParameters.Add("virtualNetworkApplianceName", virtualNetworkApplianceName); + tracingParameters.Add("capabilityName", capabilityName); + + + tracingParameters.Add("cancellationToken", cancellationToken); + Microsoft.Rest.ServiceClientTracing.Enter(_invocationId, this, "Get", tracingParameters); + } + // Construct URL + + var _baseUrl = this.Client.BaseUri.AbsoluteUri; + var _url = new System.Uri(new System.Uri(_baseUrl + (_baseUrl.EndsWith("/") ? "" : "/")), "subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/virtualNetworkAppliances/{virtualNetworkApplianceName}/capabilities/{capabilityName}").ToString(); + _url = _url.Replace("{subscriptionId}", System.Uri.EscapeDataString(Microsoft.Rest.Serialization.SafeJsonConvert.SerializeObject(this.Client.SubscriptionId, this.Client.SerializationSettings).Trim('"'))); + _url = _url.Replace("{resourceGroupName}", System.Uri.EscapeDataString(resourceGroupName)); + _url = _url.Replace("{virtualNetworkApplianceName}", System.Uri.EscapeDataString(virtualNetworkApplianceName)); + _url = _url.Replace("{capabilityName}", System.Uri.EscapeDataString(capabilityName)); + + System.Collections.Generic.List _queryParameters = new System.Collections.Generic.List(); + if (apiVersion != null) + { + _queryParameters.Add(string.Format("api-version={0}", System.Uri.EscapeDataString(apiVersion))); + } + if (_queryParameters.Count > 0) + { + _url += (_url.Contains("?") ? "&" : "?") + string.Join("&", _queryParameters); + } + // Create HTTP transport objects + var _httpRequest = new System.Net.Http.HttpRequestMessage(); + System.Net.Http.HttpResponseMessage _httpResponse = null; + _httpRequest.Method = new System.Net.Http.HttpMethod("GET"); + _httpRequest.RequestUri = new System.Uri(_url); + // Set Headers + if (this.Client.GenerateClientRequestId != null && this.Client.GenerateClientRequestId.Value) + { + _httpRequest.Headers.TryAddWithoutValidation("x-ms-client-request-id", System.Guid.NewGuid().ToString()); + } + if (this.Client.AcceptLanguage != null) + { + if (_httpRequest.Headers.Contains("accept-language")) + { + _httpRequest.Headers.Remove("accept-language"); + } + _httpRequest.Headers.TryAddWithoutValidation("accept-language", this.Client.AcceptLanguage); + } + + if (customHeaders != null) + { + foreach(var _header in customHeaders) + { + if (_httpRequest.Headers.Contains(_header.Key)) + { + _httpRequest.Headers.Remove(_header.Key); + } + _httpRequest.Headers.TryAddWithoutValidation(_header.Key, _header.Value); + } + } + // Serialize Request + string _requestContent = null; + // Set Credentials + if (this.Client.Credentials != null) + { + cancellationToken.ThrowIfCancellationRequested(); + await this.Client.Credentials.ProcessHttpRequestAsync(_httpRequest, cancellationToken).ConfigureAwait(false); + } + // Send Request + if (_shouldTrace) + { + Microsoft.Rest.ServiceClientTracing.SendRequest(_invocationId, _httpRequest); + } + cancellationToken.ThrowIfCancellationRequested(); + _httpResponse = await this.Client.HttpClient.SendAsync(_httpRequest, cancellationToken).ConfigureAwait(false); + if (_shouldTrace) + { + Microsoft.Rest.ServiceClientTracing.ReceiveResponse(_invocationId, _httpResponse); + } + + System.Net.HttpStatusCode _statusCode = _httpResponse.StatusCode; + cancellationToken.ThrowIfCancellationRequested(); + string _responseContent = null; + + if ((int)_statusCode != 200) + { + var ex = new Microsoft.Rest.Azure.CloudException(string.Format("Operation returned an invalid status code '{0}'", _statusCode)); + try + { + _responseContent = await _httpResponse.Content.ReadAsStringAsync().ConfigureAwait(false); + Microsoft.Rest.Azure.CloudError _errorBody = Microsoft.Rest.Serialization.SafeJsonConvert.DeserializeObject(_responseContent, this.Client.DeserializationSettings); + if (_errorBody != null) + { + ex.Body = _errorBody; + } + } + catch (Newtonsoft.Json.JsonException) + { + // Ignore the exception + } + ex.Request = new Microsoft.Rest.HttpRequestMessageWrapper(_httpRequest, _requestContent); + ex.Response = new Microsoft.Rest.HttpResponseMessageWrapper(_httpResponse, _responseContent); + if (_shouldTrace) + { + Microsoft.Rest.ServiceClientTracing.Error(_invocationId, ex); + } + _httpRequest.Dispose(); + if (_httpResponse != null) + { + _httpResponse.Dispose(); + } + throw ex; + } + // Create Result + var _result = new Microsoft.Rest.Azure.AzureOperationResponse(); + _result.Request = _httpRequest; + _result.Response = _httpResponse; + + if (_httpResponse.Headers.Contains("x-ms-request-id")) + { + _result.RequestId = _httpResponse.Headers.GetValues("x-ms-request-id").FirstOrDefault(); + } + // Deserialize Response + if ((int)_statusCode == 200) + { + _responseContent = await _httpResponse.Content.ReadAsStringAsync().ConfigureAwait(false); + try + { + _result.Body = Microsoft.Rest.Serialization.SafeJsonConvert.DeserializeObject(_responseContent, this.Client.DeserializationSettings); + } + catch (Newtonsoft.Json.JsonException ex) + { + _httpRequest.Dispose(); + if (_httpResponse != null) + { + _httpResponse.Dispose(); + } + throw new Microsoft.Rest.SerializationException("Unable to deserialize the response.", _responseContent, ex); + } + } + if (_shouldTrace) + { + Microsoft.Rest.ServiceClientTracing.Exit(_invocationId, _result); + } + return _result; + + + + + + } + /// + /// Creates or updates a capability on a virtual network appliance. + /// + /// + /// The name of the resource group. The name is case insensitive. + /// + /// + /// The name of the virtual network appliance. + /// + /// + /// The name of the virtual network appliance capability. + /// + /// + /// Parameters supplied to the create or update virtual network appliance + /// capability operation. + /// + /// + /// Headers that will be added to request. + /// + /// + /// The cancellation token. + /// + public async System.Threading.Tasks.Task> CreateOrUpdateWithHttpMessagesAsync(string resourceGroupName, string virtualNetworkApplianceName, string capabilityName, VirtualNetworkApplianceCapabilityCreateOrUpdate parameters, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + // Send Request + Microsoft.Rest.Azure.AzureOperationResponse _response = await BeginCreateOrUpdateWithHttpMessagesAsync(resourceGroupName, virtualNetworkApplianceName, capabilityName, parameters, customHeaders, cancellationToken).ConfigureAwait(false); + return await this.Client.GetPutOrPatchOperationResultAsync(_response, customHeaders, cancellationToken).ConfigureAwait(false); + } + + /// + /// Deletes the specified capability of a virtual network appliance. + /// + /// + /// The name of the resource group. The name is case insensitive. + /// + /// + /// The name of the virtual network appliance. + /// + /// + /// The name of the virtual network appliance capability. + /// + /// + /// Headers that will be added to request. + /// + /// + /// The cancellation token. + /// + public async System.Threading.Tasks.Task> DeleteWithHttpMessagesAsync(string resourceGroupName, string virtualNetworkApplianceName, string capabilityName, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + // Send Request + Microsoft.Rest.Azure.AzureOperationHeaderResponse _response = await BeginDeleteWithHttpMessagesAsync(resourceGroupName, virtualNetworkApplianceName, capabilityName, customHeaders, cancellationToken).ConfigureAwait(false); + return await this.Client.GetPostOrDeleteOperationResultAsync(_response, customHeaders, cancellationToken).ConfigureAwait(false); + } + + /// + /// Creates or updates a capability on a virtual network appliance. + /// + /// + /// The name of the resource group. The name is case insensitive. + /// + /// + /// The name of the virtual network appliance. + /// + /// + /// The name of the virtual network appliance capability. + /// + /// + /// Parameters supplied to the create or update virtual network appliance + /// capability operation. + /// + /// + /// Headers that will be added to request. + /// + /// + /// The cancellation token. + /// + /// + /// Thrown when the operation returned an invalid status code + /// + /// + /// Thrown when unable to deserialize the response + /// + /// + /// Thrown when a required parameter is null + /// + /// + /// Thrown when a required parameter is null + /// + /// + /// A response object containing the response body and response headers. + /// + public async System.Threading.Tasks.Task> BeginCreateOrUpdateWithHttpMessagesAsync(string resourceGroupName, string virtualNetworkApplianceName, string capabilityName, VirtualNetworkApplianceCapabilityCreateOrUpdate parameters, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + + + + + if (parameters == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "parameters"); + } + + string apiVersion = "2026-03-01"; + + + if (resourceGroupName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "resourceGroupName"); + } + if (resourceGroupName != null) + { + if (resourceGroupName.Length > 90) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.MaxLength, "resourceGroupName", 90); + } + if (resourceGroupName.Length < 1) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.MinLength, "resourceGroupName", 1); + } + } + if (virtualNetworkApplianceName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "virtualNetworkApplianceName"); + } + if (virtualNetworkApplianceName != null) + { + if (!System.Text.RegularExpressions.Regex.IsMatch(virtualNetworkApplianceName, "^[0-9a-zA-Z]([0-9a-zA-Z_.-]{0,62}[0-9a-zA-Z_])?$")) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.Pattern, "virtualNetworkApplianceName", "^[0-9a-zA-Z]([0-9a-zA-Z_.-]{0,62}[0-9a-zA-Z_])?$"); + } + } + if (capabilityName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "capabilityName"); + } + if (capabilityName != null) + { + if (!System.Text.RegularExpressions.Regex.IsMatch(capabilityName, "^[0-9a-zA-Z]([0-9a-zA-Z_.-]{0,62}[0-9a-zA-Z_])?$")) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.Pattern, "capabilityName", "^[0-9a-zA-Z]([0-9a-zA-Z_.-]{0,62}[0-9a-zA-Z_])?$"); + } + } + // Tracing + bool _shouldTrace = Microsoft.Rest.ServiceClientTracing.IsEnabled; + string _invocationId = null; + if (_shouldTrace) + { + _invocationId = Microsoft.Rest.ServiceClientTracing.NextInvocationId.ToString(); + System.Collections.Generic.Dictionary tracingParameters = new System.Collections.Generic.Dictionary(); + tracingParameters.Add("resourceGroupName", resourceGroupName); + tracingParameters.Add("virtualNetworkApplianceName", virtualNetworkApplianceName); + tracingParameters.Add("capabilityName", capabilityName); + + tracingParameters.Add("parameters", parameters); + + tracingParameters.Add("cancellationToken", cancellationToken); + Microsoft.Rest.ServiceClientTracing.Enter(_invocationId, this, "BeginCreateOrUpdate", tracingParameters); + } + // Construct URL + + var _baseUrl = this.Client.BaseUri.AbsoluteUri; + var _url = new System.Uri(new System.Uri(_baseUrl + (_baseUrl.EndsWith("/") ? "" : "/")), "subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/virtualNetworkAppliances/{virtualNetworkApplianceName}/capabilities/{capabilityName}").ToString(); + _url = _url.Replace("{subscriptionId}", System.Uri.EscapeDataString(Microsoft.Rest.Serialization.SafeJsonConvert.SerializeObject(this.Client.SubscriptionId, this.Client.SerializationSettings).Trim('"'))); + _url = _url.Replace("{resourceGroupName}", System.Uri.EscapeDataString(resourceGroupName)); + _url = _url.Replace("{virtualNetworkApplianceName}", System.Uri.EscapeDataString(virtualNetworkApplianceName)); + _url = _url.Replace("{capabilityName}", System.Uri.EscapeDataString(capabilityName)); + + System.Collections.Generic.List _queryParameters = new System.Collections.Generic.List(); + if (apiVersion != null) + { + _queryParameters.Add(string.Format("api-version={0}", System.Uri.EscapeDataString(apiVersion))); + } + if (_queryParameters.Count > 0) + { + _url += (_url.Contains("?") ? "&" : "?") + string.Join("&", _queryParameters); + } + // Create HTTP transport objects + var _httpRequest = new System.Net.Http.HttpRequestMessage(); + System.Net.Http.HttpResponseMessage _httpResponse = null; + _httpRequest.Method = new System.Net.Http.HttpMethod("PUT"); + _httpRequest.RequestUri = new System.Uri(_url); + // Set Headers + if (this.Client.GenerateClientRequestId != null && this.Client.GenerateClientRequestId.Value) + { + _httpRequest.Headers.TryAddWithoutValidation("x-ms-client-request-id", System.Guid.NewGuid().ToString()); + } + if (this.Client.AcceptLanguage != null) + { + if (_httpRequest.Headers.Contains("accept-language")) + { + _httpRequest.Headers.Remove("accept-language"); + } + _httpRequest.Headers.TryAddWithoutValidation("accept-language", this.Client.AcceptLanguage); + } + + if (customHeaders != null) + { + foreach(var _header in customHeaders) + { + if (_httpRequest.Headers.Contains(_header.Key)) + { + _httpRequest.Headers.Remove(_header.Key); + } + _httpRequest.Headers.TryAddWithoutValidation(_header.Key, _header.Value); + } + } + // Serialize Request + string _requestContent = null; + if(parameters != null) + { + _requestContent = Microsoft.Rest.Serialization.SafeJsonConvert.SerializeObject(parameters, this.Client.SerializationSettings); + _httpRequest.Content = new System.Net.Http.StringContent(_requestContent, System.Text.Encoding.UTF8); + _httpRequest.Content.Headers.ContentType =System.Net.Http.Headers.MediaTypeHeaderValue.Parse("application/json; charset=utf-8"); + } + // Set Credentials + if (this.Client.Credentials != null) + { + cancellationToken.ThrowIfCancellationRequested(); + await this.Client.Credentials.ProcessHttpRequestAsync(_httpRequest, cancellationToken).ConfigureAwait(false); + } + // Send Request + if (_shouldTrace) + { + Microsoft.Rest.ServiceClientTracing.SendRequest(_invocationId, _httpRequest); + } + cancellationToken.ThrowIfCancellationRequested(); + _httpResponse = await this.Client.HttpClient.SendAsync(_httpRequest, cancellationToken).ConfigureAwait(false); + if (_shouldTrace) + { + Microsoft.Rest.ServiceClientTracing.ReceiveResponse(_invocationId, _httpResponse); + } + + System.Net.HttpStatusCode _statusCode = _httpResponse.StatusCode; + cancellationToken.ThrowIfCancellationRequested(); + string _responseContent = null; + + if ((int)_statusCode != 200 && (int)_statusCode != 201) + { + var ex = new Microsoft.Rest.Azure.CloudException(string.Format("Operation returned an invalid status code '{0}'", _statusCode)); + try + { + _responseContent = await _httpResponse.Content.ReadAsStringAsync().ConfigureAwait(false); + Microsoft.Rest.Azure.CloudError _errorBody = Microsoft.Rest.Serialization.SafeJsonConvert.DeserializeObject(_responseContent, this.Client.DeserializationSettings); + if (_errorBody != null) + { + ex.Body = _errorBody; + } + } + catch (Newtonsoft.Json.JsonException) + { + // Ignore the exception + } + ex.Request = new Microsoft.Rest.HttpRequestMessageWrapper(_httpRequest, _requestContent); + ex.Response = new Microsoft.Rest.HttpResponseMessageWrapper(_httpResponse, _responseContent); + if (_shouldTrace) + { + Microsoft.Rest.ServiceClientTracing.Error(_invocationId, ex); + } + _httpRequest.Dispose(); + if (_httpResponse != null) + { + _httpResponse.Dispose(); + } + throw ex; + } + // Create Result + var _result = new Microsoft.Rest.Azure.AzureOperationResponse(); + _result.Request = _httpRequest; + _result.Response = _httpResponse; + + if (_httpResponse.Headers.Contains("x-ms-request-id")) + { + _result.RequestId = _httpResponse.Headers.GetValues("x-ms-request-id").FirstOrDefault(); + } + // Deserialize Response + if ((int)_statusCode == 200) + { + _responseContent = await _httpResponse.Content.ReadAsStringAsync().ConfigureAwait(false); + try + { + _result.Body = Microsoft.Rest.Serialization.SafeJsonConvert.DeserializeObject(_responseContent, this.Client.DeserializationSettings); + } + catch (Newtonsoft.Json.JsonException ex) + { + _httpRequest.Dispose(); + if (_httpResponse != null) + { + _httpResponse.Dispose(); + } + throw new Microsoft.Rest.SerializationException("Unable to deserialize the response.", _responseContent, ex); + } + } + // Deserialize Response + if ((int)_statusCode == 201) + { + _responseContent = await _httpResponse.Content.ReadAsStringAsync().ConfigureAwait(false); + try + { + _result.Body = Microsoft.Rest.Serialization.SafeJsonConvert.DeserializeObject(_responseContent, this.Client.DeserializationSettings); + } + catch (Newtonsoft.Json.JsonException ex) + { + _httpRequest.Dispose(); + if (_httpResponse != null) + { + _httpResponse.Dispose(); + } + throw new Microsoft.Rest.SerializationException("Unable to deserialize the response.", _responseContent, ex); + } + } + try + { + _result.Headers = _httpResponse.GetHeadersAsJson().ToObject(Newtonsoft.Json.JsonSerializer.Create(this.Client.DeserializationSettings)); + } + catch (Newtonsoft.Json.JsonException ex) + { + _httpRequest.Dispose(); + if (_httpResponse != null) + { + _httpResponse.Dispose(); + } + throw new Microsoft.Rest.SerializationException("Unable to deserialize the headers.", _httpResponse.GetHeadersAsJson().ToString(), ex); + } + if (_shouldTrace) + { + Microsoft.Rest.ServiceClientTracing.Exit(_invocationId, _result); + } + return _result; + + + + + + } + /// + /// Deletes the specified capability of a virtual network appliance. + /// + /// + /// The name of the resource group. The name is case insensitive. + /// + /// + /// The name of the virtual network appliance. + /// + /// + /// The name of the virtual network appliance capability. + /// + /// + /// Headers that will be added to request. + /// + /// + /// The cancellation token. + /// + /// + /// Thrown when the operation returned an invalid status code + /// + /// + /// Thrown when a required parameter is null + /// + /// + /// Thrown when a required parameter is null + /// + /// + /// A response object containing the response body and response headers. + /// + public async System.Threading.Tasks.Task> BeginDeleteWithHttpMessagesAsync(string resourceGroupName, string virtualNetworkApplianceName, string capabilityName, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + + + + + string apiVersion = "2026-03-01"; + + + if (resourceGroupName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "resourceGroupName"); + } + if (resourceGroupName != null) + { + if (resourceGroupName.Length > 90) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.MaxLength, "resourceGroupName", 90); + } + if (resourceGroupName.Length < 1) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.MinLength, "resourceGroupName", 1); + } + } + if (virtualNetworkApplianceName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "virtualNetworkApplianceName"); + } + if (virtualNetworkApplianceName != null) + { + if (!System.Text.RegularExpressions.Regex.IsMatch(virtualNetworkApplianceName, "^[0-9a-zA-Z]([0-9a-zA-Z_.-]{0,62}[0-9a-zA-Z_])?$")) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.Pattern, "virtualNetworkApplianceName", "^[0-9a-zA-Z]([0-9a-zA-Z_.-]{0,62}[0-9a-zA-Z_])?$"); + } + } + if (capabilityName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "capabilityName"); + } + if (capabilityName != null) + { + if (!System.Text.RegularExpressions.Regex.IsMatch(capabilityName, "^[0-9a-zA-Z]([0-9a-zA-Z_.-]{0,62}[0-9a-zA-Z_])?$")) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.Pattern, "capabilityName", "^[0-9a-zA-Z]([0-9a-zA-Z_.-]{0,62}[0-9a-zA-Z_])?$"); + } + } + // Tracing + bool _shouldTrace = Microsoft.Rest.ServiceClientTracing.IsEnabled; + string _invocationId = null; + if (_shouldTrace) + { + _invocationId = Microsoft.Rest.ServiceClientTracing.NextInvocationId.ToString(); + System.Collections.Generic.Dictionary tracingParameters = new System.Collections.Generic.Dictionary(); + tracingParameters.Add("resourceGroupName", resourceGroupName); + tracingParameters.Add("virtualNetworkApplianceName", virtualNetworkApplianceName); + tracingParameters.Add("capabilityName", capabilityName); + + + tracingParameters.Add("cancellationToken", cancellationToken); + Microsoft.Rest.ServiceClientTracing.Enter(_invocationId, this, "BeginDelete", tracingParameters); + } + // Construct URL + + var _baseUrl = this.Client.BaseUri.AbsoluteUri; + var _url = new System.Uri(new System.Uri(_baseUrl + (_baseUrl.EndsWith("/") ? "" : "/")), "subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/virtualNetworkAppliances/{virtualNetworkApplianceName}/capabilities/{capabilityName}").ToString(); + _url = _url.Replace("{subscriptionId}", System.Uri.EscapeDataString(Microsoft.Rest.Serialization.SafeJsonConvert.SerializeObject(this.Client.SubscriptionId, this.Client.SerializationSettings).Trim('"'))); + _url = _url.Replace("{resourceGroupName}", System.Uri.EscapeDataString(resourceGroupName)); + _url = _url.Replace("{virtualNetworkApplianceName}", System.Uri.EscapeDataString(virtualNetworkApplianceName)); + _url = _url.Replace("{capabilityName}", System.Uri.EscapeDataString(capabilityName)); + + System.Collections.Generic.List _queryParameters = new System.Collections.Generic.List(); + if (apiVersion != null) + { + _queryParameters.Add(string.Format("api-version={0}", System.Uri.EscapeDataString(apiVersion))); + } + if (_queryParameters.Count > 0) + { + _url += (_url.Contains("?") ? "&" : "?") + string.Join("&", _queryParameters); + } + // Create HTTP transport objects + var _httpRequest = new System.Net.Http.HttpRequestMessage(); + System.Net.Http.HttpResponseMessage _httpResponse = null; + _httpRequest.Method = new System.Net.Http.HttpMethod("DELETE"); + _httpRequest.RequestUri = new System.Uri(_url); + // Set Headers + if (this.Client.GenerateClientRequestId != null && this.Client.GenerateClientRequestId.Value) + { + _httpRequest.Headers.TryAddWithoutValidation("x-ms-client-request-id", System.Guid.NewGuid().ToString()); + } + if (this.Client.AcceptLanguage != null) + { + if (_httpRequest.Headers.Contains("accept-language")) + { + _httpRequest.Headers.Remove("accept-language"); + } + _httpRequest.Headers.TryAddWithoutValidation("accept-language", this.Client.AcceptLanguage); + } + + if (customHeaders != null) + { + foreach(var _header in customHeaders) + { + if (_httpRequest.Headers.Contains(_header.Key)) + { + _httpRequest.Headers.Remove(_header.Key); + } + _httpRequest.Headers.TryAddWithoutValidation(_header.Key, _header.Value); + } + } + // Serialize Request + string _requestContent = null; + // Set Credentials + if (this.Client.Credentials != null) + { + cancellationToken.ThrowIfCancellationRequested(); + await this.Client.Credentials.ProcessHttpRequestAsync(_httpRequest, cancellationToken).ConfigureAwait(false); + } + // Send Request + if (_shouldTrace) + { + Microsoft.Rest.ServiceClientTracing.SendRequest(_invocationId, _httpRequest); + } + cancellationToken.ThrowIfCancellationRequested(); + _httpResponse = await this.Client.HttpClient.SendAsync(_httpRequest, cancellationToken).ConfigureAwait(false); + if (_shouldTrace) + { + Microsoft.Rest.ServiceClientTracing.ReceiveResponse(_invocationId, _httpResponse); + } + + System.Net.HttpStatusCode _statusCode = _httpResponse.StatusCode; + cancellationToken.ThrowIfCancellationRequested(); + string _responseContent = null; + + if ((int)_statusCode != 202 && (int)_statusCode != 204) + { + var ex = new Microsoft.Rest.Azure.CloudException(string.Format("Operation returned an invalid status code '{0}'", _statusCode)); + try + { + _responseContent = await _httpResponse.Content.ReadAsStringAsync().ConfigureAwait(false); + Microsoft.Rest.Azure.CloudError _errorBody = Microsoft.Rest.Serialization.SafeJsonConvert.DeserializeObject(_responseContent, this.Client.DeserializationSettings); + if (_errorBody != null) + { + ex.Body = _errorBody; + } + } + catch (Newtonsoft.Json.JsonException) + { + // Ignore the exception + } + ex.Request = new Microsoft.Rest.HttpRequestMessageWrapper(_httpRequest, _requestContent); + ex.Response = new Microsoft.Rest.HttpResponseMessageWrapper(_httpResponse, _responseContent); + if (_shouldTrace) + { + Microsoft.Rest.ServiceClientTracing.Error(_invocationId, ex); + } + _httpRequest.Dispose(); + if (_httpResponse != null) + { + _httpResponse.Dispose(); + } + throw ex; + } + // Create Result + var _result = new Microsoft.Rest.Azure.AzureOperationHeaderResponse(); + _result.Request = _httpRequest; + _result.Response = _httpResponse; + + if (_httpResponse.Headers.Contains("x-ms-request-id")) + { + _result.RequestId = _httpResponse.Headers.GetValues("x-ms-request-id").FirstOrDefault(); + } + try + { + _result.Headers = _httpResponse.GetHeadersAsJson().ToObject(Newtonsoft.Json.JsonSerializer.Create(this.Client.DeserializationSettings)); + } + catch (Newtonsoft.Json.JsonException ex) + { + _httpRequest.Dispose(); + if (_httpResponse != null) + { + _httpResponse.Dispose(); + } + throw new Microsoft.Rest.SerializationException("Unable to deserialize the headers.", _httpResponse.GetHeadersAsJson().ToString(), ex); + } + if (_shouldTrace) + { + Microsoft.Rest.ServiceClientTracing.Exit(_invocationId, _result); + } + return _result; + + + + + + } + /// + /// Gets all capabilities of a virtual network appliance. + /// + /// + /// The NextLink from the previous successful call to List operation. + /// + /// + /// Headers that will be added to request. + /// + /// + /// The cancellation token. + /// + /// + /// Thrown when the operation returned an invalid status code + /// + /// + /// Thrown when unable to deserialize the response + /// + /// + /// Thrown when a required parameter is null + /// + /// + /// Thrown when a required parameter is null + /// + /// + /// A response object containing the response body and response headers. + /// + public async System.Threading.Tasks.Task>> ListNextWithHttpMessagesAsync(string nextPageLink, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + + if (nextPageLink == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "nextPageLink"); + } + // Tracing + bool _shouldTrace = Microsoft.Rest.ServiceClientTracing.IsEnabled; + string _invocationId = null; + if (_shouldTrace) + { + _invocationId = Microsoft.Rest.ServiceClientTracing.NextInvocationId.ToString(); + System.Collections.Generic.Dictionary tracingParameters = new System.Collections.Generic.Dictionary(); + tracingParameters.Add("nextPageLink", nextPageLink); + + + tracingParameters.Add("cancellationToken", cancellationToken); + Microsoft.Rest.ServiceClientTracing.Enter(_invocationId, this, "ListNext", tracingParameters); + } + // Construct URL + string _url = "{nextLink}"; + _url = _url.Replace("{nextLink}", nextPageLink); + + System.Collections.Generic.List _queryParameters = new System.Collections.Generic.List(); + if (_queryParameters.Count > 0) + { + _url += (_url.Contains("?") ? "&" : "?") + string.Join("&", _queryParameters); + } + // Create HTTP transport objects + var _httpRequest = new System.Net.Http.HttpRequestMessage(); + System.Net.Http.HttpResponseMessage _httpResponse = null; + _httpRequest.Method = new System.Net.Http.HttpMethod("GET"); + _httpRequest.RequestUri = new System.Uri(_url); + // Set Headers + if (this.Client.GenerateClientRequestId != null && this.Client.GenerateClientRequestId.Value) + { + _httpRequest.Headers.TryAddWithoutValidation("x-ms-client-request-id", System.Guid.NewGuid().ToString()); + } + if (this.Client.AcceptLanguage != null) + { + if (_httpRequest.Headers.Contains("accept-language")) + { + _httpRequest.Headers.Remove("accept-language"); + } + _httpRequest.Headers.TryAddWithoutValidation("accept-language", this.Client.AcceptLanguage); + } + + if (customHeaders != null) + { + foreach(var _header in customHeaders) + { + if (_httpRequest.Headers.Contains(_header.Key)) + { + _httpRequest.Headers.Remove(_header.Key); + } + _httpRequest.Headers.TryAddWithoutValidation(_header.Key, _header.Value); + } + } + // Serialize Request + string _requestContent = null; + // Set Credentials + if (this.Client.Credentials != null) + { + cancellationToken.ThrowIfCancellationRequested(); + await this.Client.Credentials.ProcessHttpRequestAsync(_httpRequest, cancellationToken).ConfigureAwait(false); + } + // Send Request + if (_shouldTrace) + { + Microsoft.Rest.ServiceClientTracing.SendRequest(_invocationId, _httpRequest); + } + cancellationToken.ThrowIfCancellationRequested(); + _httpResponse = await this.Client.HttpClient.SendAsync(_httpRequest, cancellationToken).ConfigureAwait(false); + if (_shouldTrace) + { + Microsoft.Rest.ServiceClientTracing.ReceiveResponse(_invocationId, _httpResponse); + } + + System.Net.HttpStatusCode _statusCode = _httpResponse.StatusCode; + cancellationToken.ThrowIfCancellationRequested(); + string _responseContent = null; + + if ((int)_statusCode != 200) + { + var ex = new Microsoft.Rest.Azure.CloudException(string.Format("Operation returned an invalid status code '{0}'", _statusCode)); + try + { + _responseContent = await _httpResponse.Content.ReadAsStringAsync().ConfigureAwait(false); + Microsoft.Rest.Azure.CloudError _errorBody = Microsoft.Rest.Serialization.SafeJsonConvert.DeserializeObject(_responseContent, this.Client.DeserializationSettings); + if (_errorBody != null) + { + ex.Body = _errorBody; + } + } + catch (Newtonsoft.Json.JsonException) + { + // Ignore the exception + } + ex.Request = new Microsoft.Rest.HttpRequestMessageWrapper(_httpRequest, _requestContent); + ex.Response = new Microsoft.Rest.HttpResponseMessageWrapper(_httpResponse, _responseContent); + if (_shouldTrace) + { + Microsoft.Rest.ServiceClientTracing.Error(_invocationId, ex); + } + _httpRequest.Dispose(); + if (_httpResponse != null) + { + _httpResponse.Dispose(); + } + throw ex; + } + // Create Result + var _result = new Microsoft.Rest.Azure.AzureOperationResponse>(); + _result.Request = _httpRequest; + _result.Response = _httpResponse; + + if (_httpResponse.Headers.Contains("x-ms-request-id")) + { + _result.RequestId = _httpResponse.Headers.GetValues("x-ms-request-id").FirstOrDefault(); + } + // Deserialize Response + if ((int)_statusCode == 200) + { + _responseContent = await _httpResponse.Content.ReadAsStringAsync().ConfigureAwait(false); + try + { + _result.Body = Microsoft.Rest.Serialization.SafeJsonConvert.DeserializeObject>(_responseContent, this.Client.DeserializationSettings); + } + catch (Newtonsoft.Json.JsonException ex) + { + _httpRequest.Dispose(); + if (_httpResponse != null) + { + _httpResponse.Dispose(); + } + throw new Microsoft.Rest.SerializationException("Unable to deserialize the response.", _responseContent, ex); + } + } + if (_shouldTrace) + { + Microsoft.Rest.ServiceClientTracing.Exit(_invocationId, _result); + } + return _result; + + + + + + } + } +} \ No newline at end of file diff --git a/src/Network/Network.Management.Sdk/Generated/VirtualNetworkApplianceCapabilitiesOperationsExtensions.cs b/src/Network/Network.Management.Sdk/Generated/VirtualNetworkApplianceCapabilitiesOperationsExtensions.cs new file mode 100644 index 000000000000..13c475261ae8 --- /dev/null +++ b/src/Network/Network.Management.Sdk/Generated/VirtualNetworkApplianceCapabilitiesOperationsExtensions.cs @@ -0,0 +1,313 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See License.txt in the project root for license information. +// Code generated by Microsoft (R) AutoRest Code Generator. +// Changes may cause incorrect behavior and will be lost if the code is regenerated. +namespace Microsoft.Azure.Management.Network +{ + using Microsoft.Rest.Azure; + using Models; + + /// + /// Extension methods for VirtualNetworkApplianceCapabilitiesOperations + /// + public static partial class VirtualNetworkApplianceCapabilitiesOperationsExtensions + { + /// + /// Gets all capabilities of a virtual network appliance. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. The name is case insensitive. + /// + /// + /// The name of the virtual network appliance. + /// + public static Microsoft.Rest.Azure.IPage List(this IVirtualNetworkApplianceCapabilitiesOperations operations, string resourceGroupName, string virtualNetworkApplianceName) + { + return ((IVirtualNetworkApplianceCapabilitiesOperations)operations).ListAsync(resourceGroupName, virtualNetworkApplianceName).GetAwaiter().GetResult(); + } + + /// + /// Gets all capabilities of a virtual network appliance. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. The name is case insensitive. + /// + /// + /// The name of the virtual network appliance. + /// + /// + /// The cancellation token. + /// + public static async System.Threading.Tasks.Task> ListAsync(this IVirtualNetworkApplianceCapabilitiesOperations operations, string resourceGroupName, string virtualNetworkApplianceName, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + using (var _result = await operations.ListWithHttpMessagesAsync(resourceGroupName, virtualNetworkApplianceName, null, cancellationToken).ConfigureAwait(false)) + { + return _result.Body; + } + } + /// + /// Gets the specified capability of a virtual network appliance. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. The name is case insensitive. + /// + /// + /// The name of the virtual network appliance. + /// + /// + /// The name of the virtual network appliance capability. + /// + public static VirtualNetworkApplianceCapability Get(this IVirtualNetworkApplianceCapabilitiesOperations operations, string resourceGroupName, string virtualNetworkApplianceName, string capabilityName) + { + return ((IVirtualNetworkApplianceCapabilitiesOperations)operations).GetAsync(resourceGroupName, virtualNetworkApplianceName, capabilityName).GetAwaiter().GetResult(); + } + + /// + /// Gets the specified capability of a virtual network appliance. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. The name is case insensitive. + /// + /// + /// The name of the virtual network appliance. + /// + /// + /// The name of the virtual network appliance capability. + /// + /// + /// The cancellation token. + /// + public static async System.Threading.Tasks.Task GetAsync(this IVirtualNetworkApplianceCapabilitiesOperations operations, string resourceGroupName, string virtualNetworkApplianceName, string capabilityName, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + using (var _result = await operations.GetWithHttpMessagesAsync(resourceGroupName, virtualNetworkApplianceName, capabilityName, null, cancellationToken).ConfigureAwait(false)) + { + return _result.Body; + } + } + /// + /// Creates or updates a capability on a virtual network appliance. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. The name is case insensitive. + /// + /// + /// The name of the virtual network appliance. + /// + /// + /// The name of the virtual network appliance capability. + /// + public static VirtualNetworkApplianceCapability CreateOrUpdate(this IVirtualNetworkApplianceCapabilitiesOperations operations, string resourceGroupName, string virtualNetworkApplianceName, string capabilityName, VirtualNetworkApplianceCapabilityCreateOrUpdate parameters) + { + return ((IVirtualNetworkApplianceCapabilitiesOperations)operations).CreateOrUpdateAsync(resourceGroupName, virtualNetworkApplianceName, capabilityName, parameters).GetAwaiter().GetResult(); + } + + /// + /// Creates or updates a capability on a virtual network appliance. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. The name is case insensitive. + /// + /// + /// The name of the virtual network appliance. + /// + /// + /// The name of the virtual network appliance capability. + /// + /// + /// The cancellation token. + /// + public static async System.Threading.Tasks.Task CreateOrUpdateAsync(this IVirtualNetworkApplianceCapabilitiesOperations operations, string resourceGroupName, string virtualNetworkApplianceName, string capabilityName, VirtualNetworkApplianceCapabilityCreateOrUpdate parameters, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + using (var _result = await operations.CreateOrUpdateWithHttpMessagesAsync(resourceGroupName, virtualNetworkApplianceName, capabilityName, parameters, null, cancellationToken).ConfigureAwait(false)) + { + return _result.Body; + } + } + /// + /// Deletes the specified capability of a virtual network appliance. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. The name is case insensitive. + /// + /// + /// The name of the virtual network appliance. + /// + /// + /// The name of the virtual network appliance capability. + /// + public static VirtualNetworkApplianceCapabilitiesDeleteHeaders Delete(this IVirtualNetworkApplianceCapabilitiesOperations operations, string resourceGroupName, string virtualNetworkApplianceName, string capabilityName) + { + return ((IVirtualNetworkApplianceCapabilitiesOperations)operations).DeleteAsync(resourceGroupName, virtualNetworkApplianceName, capabilityName).GetAwaiter().GetResult(); + } + + /// + /// Deletes the specified capability of a virtual network appliance. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. The name is case insensitive. + /// + /// + /// The name of the virtual network appliance. + /// + /// + /// The name of the virtual network appliance capability. + /// + /// + /// The cancellation token. + /// + public static async System.Threading.Tasks.Task DeleteAsync(this IVirtualNetworkApplianceCapabilitiesOperations operations, string resourceGroupName, string virtualNetworkApplianceName, string capabilityName, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + using (var _result = await operations.DeleteWithHttpMessagesAsync(resourceGroupName, virtualNetworkApplianceName, capabilityName, null, cancellationToken).ConfigureAwait(false)) + { + return _result.Headers; + } + } + /// + /// Creates or updates a capability on a virtual network appliance. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. The name is case insensitive. + /// + /// + /// The name of the virtual network appliance. + /// + /// + /// The name of the virtual network appliance capability. + /// + public static VirtualNetworkApplianceCapability BeginCreateOrUpdate(this IVirtualNetworkApplianceCapabilitiesOperations operations, string resourceGroupName, string virtualNetworkApplianceName, string capabilityName, VirtualNetworkApplianceCapabilityCreateOrUpdate parameters) + { + return ((IVirtualNetworkApplianceCapabilitiesOperations)operations).BeginCreateOrUpdateAsync(resourceGroupName, virtualNetworkApplianceName, capabilityName, parameters).GetAwaiter().GetResult(); + } + + /// + /// Creates or updates a capability on a virtual network appliance. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. The name is case insensitive. + /// + /// + /// The name of the virtual network appliance. + /// + /// + /// The name of the virtual network appliance capability. + /// + /// + /// The cancellation token. + /// + public static async System.Threading.Tasks.Task BeginCreateOrUpdateAsync(this IVirtualNetworkApplianceCapabilitiesOperations operations, string resourceGroupName, string virtualNetworkApplianceName, string capabilityName, VirtualNetworkApplianceCapabilityCreateOrUpdate parameters, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + using (var _result = await operations.BeginCreateOrUpdateWithHttpMessagesAsync(resourceGroupName, virtualNetworkApplianceName, capabilityName, parameters, null, cancellationToken).ConfigureAwait(false)) + { + return _result.Body; + } + } + /// + /// Deletes the specified capability of a virtual network appliance. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. The name is case insensitive. + /// + /// + /// The name of the virtual network appliance. + /// + /// + /// The name of the virtual network appliance capability. + /// + public static VirtualNetworkApplianceCapabilitiesDeleteHeaders BeginDelete(this IVirtualNetworkApplianceCapabilitiesOperations operations, string resourceGroupName, string virtualNetworkApplianceName, string capabilityName) + { + return ((IVirtualNetworkApplianceCapabilitiesOperations)operations).BeginDeleteAsync(resourceGroupName, virtualNetworkApplianceName, capabilityName).GetAwaiter().GetResult(); + } + + /// + /// Deletes the specified capability of a virtual network appliance. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. The name is case insensitive. + /// + /// + /// The name of the virtual network appliance. + /// + /// + /// The name of the virtual network appliance capability. + /// + /// + /// The cancellation token. + /// + public static async System.Threading.Tasks.Task BeginDeleteAsync(this IVirtualNetworkApplianceCapabilitiesOperations operations, string resourceGroupName, string virtualNetworkApplianceName, string capabilityName, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + using (var _result = await operations.BeginDeleteWithHttpMessagesAsync(resourceGroupName, virtualNetworkApplianceName, capabilityName, null, cancellationToken).ConfigureAwait(false)) + { + return _result.Headers; + } + } + /// + /// Gets all capabilities of a virtual network appliance. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The NextLink from the previous successful call to List operation. + /// + public static Microsoft.Rest.Azure.IPage ListNext(this IVirtualNetworkApplianceCapabilitiesOperations operations, string nextPageLink) + { + return ((IVirtualNetworkApplianceCapabilitiesOperations)operations).ListNextAsync(nextPageLink).GetAwaiter().GetResult(); + } + + /// + /// Gets all capabilities of a virtual network appliance. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The NextLink from the previous successful call to List operation. + /// + /// + /// The cancellation token. + /// + public static async System.Threading.Tasks.Task> ListNextAsync(this IVirtualNetworkApplianceCapabilitiesOperations operations, string nextPageLink, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + using (var _result = await operations.ListNextWithHttpMessagesAsync(nextPageLink, null, cancellationToken).ConfigureAwait(false)) + { + return _result.Body; + } + } + } +} diff --git a/src/Network/Network.Test/UnitTests/VirtualNetworkApplianceCapabilityUnitTests.cs b/src/Network/Network.Test/UnitTests/VirtualNetworkApplianceCapabilityUnitTests.cs new file mode 100644 index 000000000000..bf9770cead62 --- /dev/null +++ b/src/Network/Network.Test/UnitTests/VirtualNetworkApplianceCapabilityUnitTests.cs @@ -0,0 +1,112 @@ +// ---------------------------------------------------------------------------------- +// +// Copyright Microsoft Corporation +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// http://www.apache.org/licenses/LICENSE-2.0 +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// ---------------------------------------------------------------------------------- + +using System; +using Microsoft.Azure.Commands.Network; +using Microsoft.Azure.Management.Network.Models; +using Microsoft.WindowsAzure.Commands.ScenarioTest; +using Xunit; + +namespace Commands.Network.Test.UnitTests +{ + /// + /// Unit tests for the client-side kind/ipVersion logic of the Virtual Network Appliance capability cmdlets. + /// These exercise pure logic (payload construction, discriminator mapping, validation) with no service + /// dependency, so they do not require a recorded session. + /// + public class VirtualNetworkApplianceCapabilityUnitTests + { + [Fact] + [Trait(Category.AcceptanceType, Category.CheckIn)] + public void BuildCapabilityParameters_PLGatewayFastpath_UsesDualStack() + { + var parameters = VirtualNetworkApplianceCapabilityBaseCmdlet.BuildCapabilityParameters("PLGatewayFastpath", "DualStack"); + + var fastpath = Assert.IsType(parameters); + Assert.NotNull(fastpath.Properties); + Assert.Equal("DualStack", fastpath.Properties.IPVersion); + } + + [Fact] + [Trait(Category.AcceptanceType, Category.CheckIn)] + public void BuildCapabilityParameters_PLGateway_UsesIPv6() + { + var parameters = VirtualNetworkApplianceCapabilityBaseCmdlet.BuildCapabilityParameters("PLGateway", "IPv6"); + + var gateway = Assert.IsType(parameters); + Assert.Equal("IPv6", gateway.Properties.IPVersion); + } + + [Fact] + [Trait(Category.AcceptanceType, Category.CheckIn)] + public void BuildCapabilityParameters_PLIPForwarders_UsesIPv6() + { + var parameters = VirtualNetworkApplianceCapabilityBaseCmdlet.BuildCapabilityParameters("PLIPForwarders", "IPv6"); + + var ipForwarders = Assert.IsType(parameters); + Assert.Equal("IPv6", ipForwarders.Properties.IPVersion); + } + + [Fact] + [Trait(Category.AcceptanceType, Category.CheckIn)] + public void BuildCapabilityParameters_Nat64_IsPropertyLess() + { + var parameters = VirtualNetworkApplianceCapabilityBaseCmdlet.BuildCapabilityParameters("NAT64", null); + + var nat64 = Assert.IsType(parameters); + // NAT64 carries an empty properties bag with no ipVersion, matching the service contract. + Assert.NotNull(nat64.Properties); + Assert.Null(nat64.Properties.IPVersion); + } + + [Fact] + [Trait(Category.AcceptanceType, Category.CheckIn)] + public void BuildCapabilityParameters_IsCaseInsensitive() + { + var parameters = VirtualNetworkApplianceCapabilityBaseCmdlet.BuildCapabilityParameters("plgateway", "ipv6"); + + var gateway = Assert.IsType(parameters); + // The ip version is canonicalized to the exact wire casing. + Assert.Equal("IPv6", gateway.Properties.IPVersion); + } + + [Fact] + [Trait(Category.AcceptanceType, Category.CheckIn)] + public void BuildCapabilityParameters_Nat64WithIpVersion_Throws() + { + var exception = Assert.Throws( + () => VirtualNetworkApplianceCapabilityBaseCmdlet.BuildCapabilityParameters("NAT64", "IPv6")); + Assert.Contains("NAT64", exception.Message); + } + + [Fact] + [Trait(Category.AcceptanceType, Category.CheckIn)] + public void BuildCapabilityParameters_PrivateLinkWithoutIpVersion_Throws() + { + var exception = Assert.Throws( + () => VirtualNetworkApplianceCapabilityBaseCmdlet.BuildCapabilityParameters("PLGateway", null)); + Assert.Contains("required", exception.Message); + } + + [Fact] + [Trait(Category.AcceptanceType, Category.CheckIn)] + public void GetCapabilityKind_MapsEveryKind() + { + Assert.Equal("PLGatewayFastpath", VirtualNetworkApplianceCapabilityBaseCmdlet.GetCapabilityKind(new PLGatewayFastpathCapability())); + Assert.Equal("PLGateway", VirtualNetworkApplianceCapabilityBaseCmdlet.GetCapabilityKind(new PLGatewayCapability())); + Assert.Equal("PLIPForwarders", VirtualNetworkApplianceCapabilityBaseCmdlet.GetCapabilityKind(new PlipForwardersCapability())); + Assert.Equal("NAT64", VirtualNetworkApplianceCapabilityBaseCmdlet.GetCapabilityKind(new Nat64Capability())); + } + } +} diff --git a/src/Network/Network/Az.Network.psd1 b/src/Network/Network/Az.Network.psd1 index 488130c1d104..c20e0bdd11a7 100644 --- a/src/Network/Network/Az.Network.psd1 +++ b/src/Network/Network/Az.Network.psd1 @@ -315,7 +315,7 @@ CmdletsToExport = 'Add-AzApplicationGatewayAdvancedRoutingConditionSet', 'Get-AzVHubRouteTable', 'Get-AzVirtualApplianceSite', 'Get-AzVirtualHub', 'Get-AzVirtualHubBgpConnection', 'Get-AzVirtualHubRouteTable', 'Get-AzVirtualHubVnetConnection', - 'Get-AzVirtualNetwork', 'Get-AzVirtualNetworkAppliance', + 'Get-AzVirtualNetwork', 'Get-AzVirtualNetworkAppliance', 'Get-AzVirtualNetworkApplianceCapability', 'Get-AzVirtualNetworkAvailableEndpointService', 'Get-AzVirtualNetworkGateway', 'Get-AzVirtualNetworkGatewayAdvertisedRoute', @@ -551,7 +551,7 @@ CmdletsToExport = 'Add-AzApplicationGatewayAdvancedRoutingConditionSet', 'New-AzVirtualHub', 'New-AzVirtualHubBgpConnection', 'New-AzVirtualHubRoute', 'New-AzVirtualHubRouteTable', 'New-AzVirtualHubVnetConnection', 'New-AzVirtualNetwork', - 'New-AzVirtualNetworkAppliance', 'New-AzVirtualNetworkGateway', + 'New-AzVirtualNetworkAppliance', 'New-AzVirtualNetworkApplianceCapability', 'New-AzVirtualNetworkGateway', 'New-AzVirtualNetworkGatewayCertificateAuthentication', 'New-AzVirtualNetworkGatewayConnection', 'New-AzVirtualNetworkGatewayIpConfig', @@ -675,7 +675,7 @@ CmdletsToExport = 'Add-AzApplicationGatewayAdvancedRoutingConditionSet', 'Remove-AzVirtualHub', 'Remove-AzVirtualHubBgpConnection', 'Remove-AzVirtualHubRouteTable', 'Remove-AzVirtualHubVnetConnection', 'Remove-AzVirtualNetwork', - 'Remove-AzVirtualNetworkAppliance', + 'Remove-AzVirtualNetworkAppliance', 'Remove-AzVirtualNetworkApplianceCapability', 'Remove-AzVirtualNetworkGateway', 'Remove-AzVirtualNetworkGatewayConnection', 'Remove-AzVirtualNetworkGatewayDefaultSite', diff --git a/src/Network/Network/ChangeLog.md b/src/Network/Network/ChangeLog.md index 26b79782a725..d9d2e41d32ff 100644 --- a/src/Network/Network/ChangeLog.md +++ b/src/Network/Network/ChangeLog.md @@ -55,6 +55,8 @@ * Removed client-side validation of the `-FormatVersion` parameter for `New-AzNetworkWatcherFlowLog` and `Set-AzNetworkWatcherFlowLog`. - Flow log format versions are now validated by the service, so newly supported versions can be used without a module update. - Corrected the error message shown for an invalid `-FormatType` value, which previously reported an invalid format version. +* Added cmdlets to manage Virtual Network Appliance capabilities. + - `New-AzVirtualNetworkApplianceCapability`, `Get-AzVirtualNetworkApplianceCapability`, `Remove-AzVirtualNetworkApplianceCapability`. * Added Change Safety support for additional cmdlets. * Added support for the `CAPTCHA` action in Application Gateway WAF (Web Application Firewall) policies. - Added `CAPTCHA` as an allowed value for the `-Action` parameter of custom rules (`New-AzApplicationGatewayFirewallCustomRule`) and managed rule overrides (`New-AzApplicationGatewayFirewallPolicyManagedRuleOverride`). diff --git a/src/Network/Network/Models/PSVirtualNetworkApplianceCapability.cs b/src/Network/Network/Models/PSVirtualNetworkApplianceCapability.cs new file mode 100644 index 000000000000..a69ed320929a --- /dev/null +++ b/src/Network/Network/Models/PSVirtualNetworkApplianceCapability.cs @@ -0,0 +1,33 @@ +// ---------------------------------------------------------------------------------- +// +// Copyright Microsoft Corporation +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// http://www.apache.org/licenses/LICENSE-2.0 +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// ---------------------------------------------------------------------------------- + +namespace Microsoft.Azure.Commands.Network.Models +{ + public class PSVirtualNetworkApplianceCapability : PSChildResource + { + public string Type { get; set; } + + public string Kind { get; set; } + + public string IpVersion { get; set; } + + public string LinkedResourceId { get; set; } + + public string ProvisioningState { get; set; } + + public string ResourceGroupName { get; set; } + + public string VirtualNetworkApplianceName { get; set; } + } +} diff --git a/src/Network/Network/VirtualNetworkApplianceCapability/GetVirtualNetworkApplianceCapabilityCommand.cs b/src/Network/Network/VirtualNetworkApplianceCapability/GetVirtualNetworkApplianceCapabilityCommand.cs new file mode 100644 index 000000000000..4fd5cbe6d123 --- /dev/null +++ b/src/Network/Network/VirtualNetworkApplianceCapability/GetVirtualNetworkApplianceCapabilityCommand.cs @@ -0,0 +1,99 @@ +// ---------------------------------------------------------------------------------- +// +// Copyright Microsoft Corporation +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// http://www.apache.org/licenses/LICENSE-2.0 +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// ---------------------------------------------------------------------------------- + +using Microsoft.Azure.Commands.Network.Models; +using Microsoft.Azure.Commands.ResourceManager.Common.ArgumentCompleters; +using Microsoft.Azure.Management.Network; +using Microsoft.Azure.Management.Network.Models; +using Microsoft.Rest.Azure; +using System.Collections.Generic; +using System.Management.Automation; + +namespace Microsoft.Azure.Commands.Network +{ + [Cmdlet("Get", ResourceManager.Common.AzureRMConstants.AzureRMPrefix + "VirtualNetworkApplianceCapability", DefaultParameterSetName = ResourceNameParameterSet, HelpUri = "https://learn.microsoft.com/powershell/module/az.network/get-azvirtualnetworkappliancecapability"), OutputType(typeof(PSVirtualNetworkApplianceCapability))] + public class GetVirtualNetworkApplianceCapabilityCommand : VirtualNetworkApplianceCapabilityBaseCmdlet + { + private const string ResourceNameParameterSet = "ResourceNameParameterSet"; + private const string ResourceIdParameterSet = "ResourceIdParameterSet"; + + [Alias("ResourceName")] + [Parameter( + Mandatory = false, + ValueFromPipelineByPropertyName = true, + HelpMessage = "The capability name.", + ParameterSetName = ResourceNameParameterSet)] + [ValidateNotNullOrEmpty] + public virtual string Name { get; set; } + + [Alias("ApplianceName")] + [Parameter( + Mandatory = true, + ValueFromPipelineByPropertyName = true, + HelpMessage = "The name of the parent Virtual Network Appliance.", + ParameterSetName = ResourceNameParameterSet)] + [ResourceNameCompleter("Microsoft.Network/virtualNetworkAppliances", "ResourceGroupName")] + [ValidateNotNullOrEmpty] + public virtual string VirtualNetworkApplianceName { get; set; } + + [Parameter( + Mandatory = true, + ValueFromPipelineByPropertyName = true, + HelpMessage = "The resource group name.", + ParameterSetName = ResourceNameParameterSet)] + [ResourceGroupCompleter] + [ValidateNotNullOrEmpty] + public virtual string ResourceGroupName { get; set; } + + [Parameter( + Mandatory = true, + ValueFromPipelineByPropertyName = true, + HelpMessage = "The resource Id of the capability.", + ParameterSetName = ResourceIdParameterSet)] + [ValidateNotNullOrEmpty] + public virtual string ResourceId { get; set; } + + public override void Execute() + { + base.Execute(); + + if (ParameterSetName.Equals(ResourceIdParameterSet)) + { + ParseCapabilityResourceId(this.ResourceId, out string parsedResourceGroupName, out string parsedApplianceName, out string parsedCapabilityName); + this.ResourceGroupName = parsedResourceGroupName; + this.VirtualNetworkApplianceName = parsedApplianceName; + this.Name = parsedCapabilityName; + } + + if (!string.IsNullOrEmpty(this.Name)) + { + var capability = this.GetVirtualNetworkApplianceCapability(this.ResourceGroupName, this.VirtualNetworkApplianceName, this.Name); + WriteObject(capability); + } + else + { + IPage page = this.VirtualNetworkApplianceCapabilitiesClient.List(this.ResourceGroupName, this.VirtualNetworkApplianceName); + var all = ListNextLink.GetAllResourcesByPollingNextLink(page, this.VirtualNetworkApplianceCapabilitiesClient.ListNext); + + var results = new List(); + foreach (var capability in all) + { + results.Add(this.ToPsVirtualNetworkApplianceCapability(capability, this.ResourceGroupName, this.VirtualNetworkApplianceName)); + } + + WriteObject(results, true); + } + } + } +} \ No newline at end of file diff --git a/src/Network/Network/VirtualNetworkApplianceCapability/NewVirtualNetworkApplianceCapabilityCommand.cs b/src/Network/Network/VirtualNetworkApplianceCapability/NewVirtualNetworkApplianceCapabilityCommand.cs new file mode 100644 index 000000000000..0aa18c889d6f --- /dev/null +++ b/src/Network/Network/VirtualNetworkApplianceCapability/NewVirtualNetworkApplianceCapabilityCommand.cs @@ -0,0 +1,100 @@ +// ---------------------------------------------------------------------------------- +// +// Copyright Microsoft Corporation +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// http://www.apache.org/licenses/LICENSE-2.0 +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// ---------------------------------------------------------------------------------- + +using Microsoft.Azure.Commands.Network.Models; +using Microsoft.Azure.Commands.ResourceManager.Common.ArgumentCompleters; +using Microsoft.Azure.Management.Network; +using System.Management.Automation; + +namespace Microsoft.Azure.Commands.Network +{ + [Cmdlet("New", ResourceManager.Common.AzureRMConstants.AzureRMPrefix + "VirtualNetworkApplianceCapability", SupportsShouldProcess = true, DefaultParameterSetName = ResourceNameParameterSet, HelpUri = "https://learn.microsoft.com/powershell/module/az.network/new-azvirtualnetworkappliancecapability"), OutputType(typeof(PSVirtualNetworkApplianceCapability))] + public class NewVirtualNetworkApplianceCapabilityCommand : VirtualNetworkApplianceCapabilityBaseCmdlet + { + private const string ResourceNameParameterSet = "ResourceNameParameterSet"; + + [Alias("ResourceName")] + [Parameter( + Mandatory = true, + ValueFromPipelineByPropertyName = true, + HelpMessage = "The capability name.", + ParameterSetName = ResourceNameParameterSet)] + [ValidateNotNullOrEmpty] + public virtual string Name { get; set; } + + [Alias("ApplianceName")] + [Parameter( + Mandatory = true, + ValueFromPipelineByPropertyName = true, + HelpMessage = "The name of the parent Virtual Network Appliance.", + ParameterSetName = ResourceNameParameterSet)] + [ResourceNameCompleter("Microsoft.Network/virtualNetworkAppliances", "ResourceGroupName")] + [ValidateNotNullOrEmpty] + public virtual string VirtualNetworkApplianceName { get; set; } + + [Parameter( + Mandatory = true, + ValueFromPipelineByPropertyName = true, + HelpMessage = "The resource group name.", + ParameterSetName = ResourceNameParameterSet)] + [ResourceGroupCompleter] + [ValidateNotNullOrEmpty] + public virtual string ResourceGroupName { get; set; } + + [Parameter( + Mandatory = true, + ValueFromPipelineByPropertyName = true, + HelpMessage = "The capability kind. Possible values: PLGatewayFastpath, PLGateway, PLIPForwarders, NAT64.")] + [ValidateSet("PLGatewayFastpath", "PLGateway", "PLIPForwarders", "NAT64", IgnoreCase = true)] + public virtual string Kind { get; set; } + + [Parameter( + Mandatory = false, + ValueFromPipelineByPropertyName = true, + HelpMessage = "The IP version the capability applies to. Required for the Private Link kinds: PLGatewayFastpath requires DualStack; PLGateway and PLIPForwarders require IPv6. Must not be set for NAT64 (property-less). Possible values: IPv6, DualStack.")] + [ValidateSet("IPv6", "DualStack", IgnoreCase = true)] + public virtual string IpVersion { get; set; } + + [Parameter( + Mandatory = false, + HelpMessage = "Do not ask for confirmation if you want to overwrite a resource")] + public SwitchParameter Force { get; set; } + + [Parameter(Mandatory = false, HelpMessage = "Run cmdlet in the background")] + public SwitchParameter AsJob { get; set; } + + public override void Execute() + { + base.Execute(); + + // Validate and build the payload before any service call so client-side errors (e.g. an unsupported + // kind/ipVersion combination) surface without network I/O. + var parameters = BuildCapabilityParameters(this.Kind, this.IpVersion); + + var present = this.IsVirtualNetworkApplianceCapabilityPresent(this.ResourceGroupName, this.VirtualNetworkApplianceName, this.Name); + ConfirmAction( + Force.IsPresent, + string.Format(Properties.Resources.OverwritingResource, Name), + Properties.Resources.CreatingResourceMessage, + Name, + () => + { + var response = this.VirtualNetworkApplianceCapabilitiesClient.CreateOrUpdate(this.ResourceGroupName, this.VirtualNetworkApplianceName, this.Name, parameters); + var capability = ToPsVirtualNetworkApplianceCapability(response, this.ResourceGroupName, this.VirtualNetworkApplianceName); + WriteObject(capability); + }, + () => present); + } + } +} diff --git a/src/Network/Network/VirtualNetworkApplianceCapability/RemoveVirtualNetworkApplianceCapabilityCommand.cs b/src/Network/Network/VirtualNetworkApplianceCapability/RemoveVirtualNetworkApplianceCapabilityCommand.cs new file mode 100644 index 000000000000..7e4f684fae7e --- /dev/null +++ b/src/Network/Network/VirtualNetworkApplianceCapability/RemoveVirtualNetworkApplianceCapabilityCommand.cs @@ -0,0 +1,117 @@ +// ---------------------------------------------------------------------------------- +// +// Copyright Microsoft Corporation +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// http://www.apache.org/licenses/LICENSE-2.0 +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// ---------------------------------------------------------------------------------- + +using Microsoft.Azure.Commands.Network.Models; +using Microsoft.Azure.Commands.ResourceManager.Common.ArgumentCompleters; +using Microsoft.Azure.Management.Network; +using System.Management.Automation; + +namespace Microsoft.Azure.Commands.Network +{ + [Cmdlet("Remove", ResourceManager.Common.AzureRMConstants.AzureRMPrefix + "VirtualNetworkApplianceCapability", SupportsShouldProcess = true, DefaultParameterSetName = ResourceNameParameterSet, HelpUri = "https://learn.microsoft.com/powershell/module/az.network/remove-azvirtualnetworkappliancecapability"), OutputType(typeof(bool))] + public class RemoveVirtualNetworkApplianceCapabilityCommand : VirtualNetworkApplianceCapabilityBaseCmdlet + { + private const string ResourceNameParameterSet = "ResourceNameParameterSet"; + private const string ResourceIdParameterSet = "ResourceIdParameterSet"; + private const string InputObjectParameterSet = "InputObjectParameterSet"; + + [Alias("ResourceName")] + [Parameter( + Mandatory = true, + ValueFromPipelineByPropertyName = true, + HelpMessage = "The capability name.", + ParameterSetName = ResourceNameParameterSet)] + [ValidateNotNullOrEmpty] + public virtual string Name { get; set; } + + [Alias("ApplianceName")] + [Parameter( + Mandatory = true, + ValueFromPipelineByPropertyName = true, + HelpMessage = "The name of the parent Virtual Network Appliance.", + ParameterSetName = ResourceNameParameterSet)] + [ResourceNameCompleter("Microsoft.Network/virtualNetworkAppliances", "ResourceGroupName")] + [ValidateNotNullOrEmpty] + public virtual string VirtualNetworkApplianceName { get; set; } + + [Parameter( + Mandatory = true, + ValueFromPipelineByPropertyName = true, + HelpMessage = "The resource group name.", + ParameterSetName = ResourceNameParameterSet)] + [ResourceGroupCompleter] + [ValidateNotNullOrEmpty] + public virtual string ResourceGroupName { get; set; } + + [Parameter( + Mandatory = true, + ValueFromPipelineByPropertyName = true, + HelpMessage = "The resource Id of the capability.", + ParameterSetName = ResourceIdParameterSet)] + [ValidateNotNullOrEmpty] + public virtual string ResourceId { get; set; } + + [Parameter( + Mandatory = true, + ValueFromPipeline = true, + HelpMessage = "The Virtual Network Appliance capability object.", + ParameterSetName = InputObjectParameterSet)] + [ValidateNotNullOrEmpty] + public PSVirtualNetworkApplianceCapability InputObject { get; set; } + + [Parameter( + Mandatory = false, + HelpMessage = "Do not ask for confirmation.")] + public SwitchParameter Force { get; set; } + + [Parameter(Mandatory = false)] + public SwitchParameter PassThru { get; set; } + + [Parameter(Mandatory = false, HelpMessage = "Run cmdlet in the background")] + public SwitchParameter AsJob { get; set; } + + public override void Execute() + { + base.Execute(); + + if (ParameterSetName.Equals(ResourceIdParameterSet)) + { + ParseCapabilityResourceId(this.ResourceId, out string parsedResourceGroupName, out string parsedApplianceName, out string parsedCapabilityName); + this.ResourceGroupName = parsedResourceGroupName; + this.VirtualNetworkApplianceName = parsedApplianceName; + this.Name = parsedCapabilityName; + } + else if (ParameterSetName.Equals(InputObjectParameterSet)) + { + this.ResourceGroupName = this.InputObject.ResourceGroupName; + this.VirtualNetworkApplianceName = this.InputObject.VirtualNetworkApplianceName; + this.Name = this.InputObject.Name; + } + + ConfirmAction( + Force.IsPresent, + string.Format(Properties.Resources.RemovingResource, Name), + Properties.Resources.RemoveResourceMessage, + Name, + () => + { + this.VirtualNetworkApplianceCapabilitiesClient.Delete(this.ResourceGroupName, this.VirtualNetworkApplianceName, this.Name); + if (PassThru) + { + WriteObject(true); + } + }); + } + } +} diff --git a/src/Network/Network/VirtualNetworkApplianceCapability/VirtualNetworkApplianceCapabilityBaseCmdlet.cs b/src/Network/Network/VirtualNetworkApplianceCapability/VirtualNetworkApplianceCapabilityBaseCmdlet.cs new file mode 100644 index 000000000000..56ef672f7a99 --- /dev/null +++ b/src/Network/Network/VirtualNetworkApplianceCapability/VirtualNetworkApplianceCapabilityBaseCmdlet.cs @@ -0,0 +1,187 @@ +// ---------------------------------------------------------------------------------- +// +// Copyright Microsoft Corporation +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// http://www.apache.org/licenses/LICENSE-2.0 +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// ---------------------------------------------------------------------------------- + +using Microsoft.Azure.Commands.Network.Models; +using Microsoft.Azure.Management.Network; +using Microsoft.Azure.Management.Network.Models; +using System; +using System.Management.Automation; +using System.Net; + +namespace Microsoft.Azure.Commands.Network +{ + public abstract class VirtualNetworkApplianceCapabilityBaseCmdlet : NetworkBaseCmdlet + { + public IVirtualNetworkApplianceCapabilitiesOperations VirtualNetworkApplianceCapabilitiesClient + { + get + { + return NetworkClient.NetworkManagementClient.VirtualNetworkApplianceCapabilities; + } + } + + public bool IsVirtualNetworkApplianceCapabilityPresent(string resourceGroupName, string virtualNetworkApplianceName, string name) + { + try + { + GetVirtualNetworkApplianceCapability(resourceGroupName, virtualNetworkApplianceName, name); + } + catch (Microsoft.Rest.Azure.CloudException exception) + { + if (exception.Response.StatusCode == HttpStatusCode.NotFound) + { + // Resource is not present + return false; + } + throw; + } + return true; + } + + public PSVirtualNetworkApplianceCapability GetVirtualNetworkApplianceCapability(string resourceGroupName, string virtualNetworkApplianceName, string name) + { + var capability = this.VirtualNetworkApplianceCapabilitiesClient.Get(resourceGroupName, virtualNetworkApplianceName, name); + return ToPsVirtualNetworkApplianceCapability(capability, resourceGroupName, virtualNetworkApplianceName); + } + + public PSVirtualNetworkApplianceCapability ToPsVirtualNetworkApplianceCapability(VirtualNetworkApplianceCapability capability, string resourceGroupName, string virtualNetworkApplianceName) + { + return new PSVirtualNetworkApplianceCapability + { + Name = capability.Name, + Id = capability.Id, + Type = capability.Type, + Kind = GetCapabilityKind(capability), + IpVersion = capability.Properties?.IPVersion, + LinkedResourceId = capability.Properties?.LinkedResourceId, + ProvisioningState = capability.Properties?.ProvisioningState, + ResourceGroupName = resourceGroupName, + VirtualNetworkApplianceName = virtualNetworkApplianceName + }; + } + + // The capability is a discriminated resource: the concrete SDK subtype maps one-to-one to the + // wire-level "kind". The generated base type does not surface "kind" as a settable property, so it is + // derived from the runtime subtype here. Exposed for unit testing (no service dependency). + public static string GetCapabilityKind(VirtualNetworkApplianceCapability capability) + { + switch (capability) + { + case PLGatewayFastpathCapability _: + return VirtualNetworkApplianceCapabilityKind.PLGatewayFastpath; + case PLGatewayCapability _: + return VirtualNetworkApplianceCapabilityKind.PLGateway; + case PlipForwardersCapability _: + return VirtualNetworkApplianceCapabilityKind.PlipForwarders; + case Nat64Capability _: + return VirtualNetworkApplianceCapabilityKind.Nat64; + default: + return null; + } + } + + // Builds the kind-specific create-or-update payload. "kind" selects the concrete subtype (which the + // serializer emits as the top-level discriminator). The Private-Link kinds carry an "ipVersion" (the + // service validates it against the kind: PLGatewayFastpath -> DualStack; PLGateway / PLIPForwarders -> + // IPv6). NAT64 is property-less and must not carry an ipVersion. Exposed for unit testing (no service dependency). + public static VirtualNetworkApplianceCapabilityCreateOrUpdate BuildCapabilityParameters(string kind, string ipVersion) + { + bool isNat64 = string.Equals(kind, VirtualNetworkApplianceCapabilityKind.Nat64, StringComparison.OrdinalIgnoreCase); + bool ipVersionProvided = !string.IsNullOrEmpty(ipVersion); + + if (isNat64 && ipVersionProvided) + { + throw new ArgumentException("The -IpVersion parameter is not supported for the 'NAT64' capability kind, which is property-less.", nameof(ipVersion)); + } + + if (!isNat64 && !ipVersionProvided) + { + throw new ArgumentException($"The -IpVersion parameter is required for the '{kind}' capability kind.", nameof(ipVersion)); + } + + if (isNat64) + { + // NAT64 is property-less; the wire contract still carries an empty "properties" object + // (no ipVersion). An empty properties bag serializes to "properties": {} to match the service contract. + return new Nat64CapabilityCreateOrUpdate { Properties = new VirtualNetworkApplianceCapabilityProperties() }; + } + + var properties = new VirtualNetworkApplianceCapabilityProperties + { + IPVersion = NormalizeIpVersion(ipVersion) + }; + + if (string.Equals(kind, VirtualNetworkApplianceCapabilityKind.PLGatewayFastpath, StringComparison.OrdinalIgnoreCase)) + { + return new PLGatewayFastpathCapabilityCreateOrUpdate { Properties = properties }; + } + + if (string.Equals(kind, VirtualNetworkApplianceCapabilityKind.PLGateway, StringComparison.OrdinalIgnoreCase)) + { + return new PLGatewayCapabilityCreateOrUpdate { Properties = properties }; + } + + if (string.Equals(kind, VirtualNetworkApplianceCapabilityKind.PlipForwarders, StringComparison.OrdinalIgnoreCase)) + { + return new PlipForwardersCapabilityCreateOrUpdate { Properties = properties }; + } + + throw new ArgumentException($"Unsupported virtual network appliance capability kind '{kind}'.", nameof(kind)); + } + + // Canonicalizes the IP version to the exact wire value the service expects, since the cmdlet's + // ValidateSet accepts case-insensitive input. + private static string NormalizeIpVersion(string ipVersion) + { + if (string.Equals(ipVersion, VirtualNetworkApplianceCapabilityIpVersion.IPv6, StringComparison.OrdinalIgnoreCase)) + { + return VirtualNetworkApplianceCapabilityIpVersion.IPv6; + } + + if (string.Equals(ipVersion, VirtualNetworkApplianceCapabilityIpVersion.DualStack, StringComparison.OrdinalIgnoreCase)) + { + return VirtualNetworkApplianceCapabilityIpVersion.DualStack; + } + + return ipVersion; + } + + // Parses a capability ARM resource id of the fixed 10-segment form + // /subscriptions/{sub}/resourceGroups/{rg}/providers/Microsoft.Network/virtualNetworkAppliances/{appliance}/capabilities/{capability} + // Every structural token is validated positionally and the resource group, appliance, and capability + // names are read from fixed positions, so a resource NAME that happens to equal a type keyword + // (e.g. an appliance literally named "resourceGroups" or "capabilities") cannot be mis-parsed. + protected static void ParseCapabilityResourceId(string resourceId, out string resourceGroupName, out string virtualNetworkApplianceName, out string capabilityName) + { + var segments = (resourceId ?? string.Empty).Split(new[] { '/' }, StringSplitOptions.RemoveEmptyEntries); + + bool valid = segments.Length == 10 + && string.Equals(segments[0], "subscriptions", StringComparison.OrdinalIgnoreCase) + && string.Equals(segments[2], "resourceGroups", StringComparison.OrdinalIgnoreCase) + && string.Equals(segments[4], "providers", StringComparison.OrdinalIgnoreCase) + && string.Equals(segments[5], "Microsoft.Network", StringComparison.OrdinalIgnoreCase) + && string.Equals(segments[6], "virtualNetworkAppliances", StringComparison.OrdinalIgnoreCase) + && string.Equals(segments[8], "capabilities", StringComparison.OrdinalIgnoreCase); + + if (!valid) + { + throw new PSArgumentException($"'{resourceId}' is not a valid virtual network appliance capability resource id. Expected the form '/subscriptions/{{subscriptionId}}/resourceGroups/{{resourceGroupName}}/providers/Microsoft.Network/virtualNetworkAppliances/{{applianceName}}/capabilities/{{capabilityName}}'.", nameof(resourceId)); + } + + resourceGroupName = segments[3]; + virtualNetworkApplianceName = segments[7]; + capabilityName = segments[9]; + } + } +} diff --git a/src/Network/Network/help/Az.Network.md b/src/Network/Network/help/Az.Network.md index c820821ae396..1162af20e3d8 100644 --- a/src/Network/Network/help/Az.Network.md +++ b/src/Network/Network/help/Az.Network.md @@ -814,6 +814,9 @@ Gets a virtual network in a resource group. ### [Get-AzVirtualNetworkAppliance](Get-AzVirtualNetworkAppliance.md) Gets a Virtual Network Appliance (VNA) resource. +### [Get-AzVirtualNetworkApplianceCapability](Get-AzVirtualNetworkApplianceCapability.md) +Gets a capability of a Virtual Network Appliance (VNA), or lists all capabilities on an appliance. + ### [Get-AzVirtualNetworkAvailableEndpointService](Get-AzVirtualNetworkAvailableEndpointService.md) Lists available endpoint services for location. @@ -1709,6 +1712,9 @@ Creates a virtual network. ### [New-AzVirtualNetworkAppliance](New-AzVirtualNetworkAppliance.md) Creates a new Virtual Network Appliance (VNA) resource. +### [New-AzVirtualNetworkApplianceCapability](New-AzVirtualNetworkApplianceCapability.md) +Creates a capability on a Virtual Network Appliance (VNA). + ### [New-AzVirtualNetworkGateway](New-AzVirtualNetworkGateway.md) Creates a Virtual Network Gateway @@ -2208,6 +2214,9 @@ Removes a virtual network. ### [Remove-AzVirtualNetworkAppliance](Remove-AzVirtualNetworkAppliance.md) Removes a Virtual Network Appliance (VNA) resource. +### [Remove-AzVirtualNetworkApplianceCapability](Remove-AzVirtualNetworkApplianceCapability.md) +Removes a capability from a Virtual Network Appliance (VNA). + ### [Remove-AzVirtualNetworkGateway](Remove-AzVirtualNetworkGateway.md) Deletes a Virtual Network Gateway diff --git a/src/Network/Network/help/Get-AzVirtualNetworkApplianceCapability.md b/src/Network/Network/help/Get-AzVirtualNetworkApplianceCapability.md new file mode 100644 index 000000000000..faf33db2e42d --- /dev/null +++ b/src/Network/Network/help/Get-AzVirtualNetworkApplianceCapability.md @@ -0,0 +1,136 @@ +--- +external help file: Microsoft.Azure.PowerShell.Cmdlets.Network.dll-Help.xml +Module Name: Az.Network +online version: https://learn.microsoft.com/powershell/module/az.network/get-azvirtualnetworkappliancecapability +schema: 2.0.0 +--- + +# Get-AzVirtualNetworkApplianceCapability + +## SYNOPSIS +Gets a capability of a Virtual Network Appliance (VNA), or lists all capabilities on an appliance. + +## SYNTAX + +### ResourceNameParameterSet (Default) +``` +Get-AzVirtualNetworkApplianceCapability [-Name ] -VirtualNetworkApplianceName + -ResourceGroupName [-DefaultProfile ] [] +``` + +### ResourceIdParameterSet +``` +Get-AzVirtualNetworkApplianceCapability -ResourceId [-DefaultProfile ] + [] +``` + +## DESCRIPTION +The Get-AzVirtualNetworkApplianceCapability cmdlet gets a single capability of a Virtual Network Appliance by name, or lists all capabilities on the appliance when -Name is omitted. A capability can also be retrieved by its full resource ID. + +## EXAMPLES + +### Example 1: Get a capability by name +```powershell +Get-AzVirtualNetworkApplianceCapability -ResourceGroupName "myResourceGroup" -VirtualNetworkApplianceName "myVNA" -Name "pl-gateway" +``` + +Gets the capability named "pl-gateway" on the appliance "myVNA". + +### Example 2: List all capabilities on an appliance +```powershell +Get-AzVirtualNetworkApplianceCapability -ResourceGroupName "myResourceGroup" -VirtualNetworkApplianceName "myVNA" +``` + +Lists every capability on the appliance "myVNA". + +## PARAMETERS + +### -DefaultProfile +The credentials, account, tenant, and subscription used for communication with Azure. + +```yaml +Type: Microsoft.Azure.Commands.Common.Authentication.Abstractions.Core.IAzureContextContainer +Parameter Sets: (All) +Aliases: AzContext, AzureRmContext, AzureCredential + +Required: False +Position: Named +Default value: None +Accept pipeline input: False +Accept wildcard characters: False +``` + +### -Name +The capability name. + +```yaml +Type: System.String +Parameter Sets: ResourceNameParameterSet +Aliases: ResourceName + +Required: False +Position: Named +Default value: None +Accept pipeline input: True (ByPropertyName) +Accept wildcard characters: False +``` + +### -ResourceGroupName +The resource group name. + +```yaml +Type: System.String +Parameter Sets: ResourceNameParameterSet +Aliases: + +Required: True +Position: Named +Default value: None +Accept pipeline input: True (ByPropertyName) +Accept wildcard characters: False +``` + +### -ResourceId +The resource Id of the capability. + +```yaml +Type: System.String +Parameter Sets: ResourceIdParameterSet +Aliases: + +Required: True +Position: Named +Default value: None +Accept pipeline input: True (ByPropertyName) +Accept wildcard characters: False +``` + +### -VirtualNetworkApplianceName +The name of the parent Virtual Network Appliance. + +```yaml +Type: System.String +Parameter Sets: ResourceNameParameterSet +Aliases: ApplianceName + +Required: True +Position: Named +Default value: None +Accept pipeline input: True (ByPropertyName) +Accept wildcard characters: False +``` + +### CommonParameters +This cmdlet supports the common parameters: -Debug, -ErrorAction, -ErrorVariable, -InformationAction, -InformationVariable, -OutVariable, -OutBuffer, -PipelineVariable, -Verbose, -WarningAction, and -WarningVariable. For more information, see [about_CommonParameters](http://go.microsoft.com/fwlink/?LinkID=113216). + +## INPUTS + +### System.String + +## OUTPUTS + +### Microsoft.Azure.Commands.Network.Models.PSVirtualNetworkApplianceCapability + +## NOTES + +## RELATED LINKS diff --git a/src/Network/Network/help/New-AzVirtualNetworkApplianceCapability.md b/src/Network/Network/help/New-AzVirtualNetworkApplianceCapability.md new file mode 100644 index 000000000000..c0d40f103cbd --- /dev/null +++ b/src/Network/Network/help/New-AzVirtualNetworkApplianceCapability.md @@ -0,0 +1,247 @@ +--- +external help file: Microsoft.Azure.PowerShell.Cmdlets.Network.dll-Help.xml +Module Name: Az.Network +online version: https://learn.microsoft.com/powershell/module/az.network/new-azvirtualnetworkappliancecapability +schema: 2.0.0 +--- + +# New-AzVirtualNetworkApplianceCapability + +## SYNOPSIS +Creates a capability on a Virtual Network Appliance (VNA). + +## SYNTAX + +``` +New-AzVirtualNetworkApplianceCapability -Name -VirtualNetworkApplianceName + -ResourceGroupName -Kind [-IpVersion ] [-Force] [-AsJob] + [-DefaultProfile ] [-WhatIf] [-Confirm] [-AcquirePolicyToken] + [-ChangeReference ] [] +``` + +## DESCRIPTION +The New-AzVirtualNetworkApplianceCapability cmdlet creates a capability child resource on an existing Virtual Network Appliance. +The capability kind is selected with the -Kind parameter. The three Private Link kinds (PLGatewayFastpath, PLGateway, PLIPForwarders) require an -IpVersion; NAT64 is property-less and does not accept -IpVersion. The parent appliance must be dual-stack. + +## EXAMPLES + +### Example 1: Create a Private Link Gateway FastPath capability +```powershell +New-AzVirtualNetworkApplianceCapability -ResourceGroupName "myResourceGroup" -VirtualNetworkApplianceName "myVNA" -Name "pl-fastpath" -Kind "PLGatewayFastpath" -IpVersion "DualStack" +``` + +Creates a PLGatewayFastpath capability. This kind requires the DualStack IP version. + +### Example 2: Create a Private Link Gateway capability +```powershell +New-AzVirtualNetworkApplianceCapability -ResourceGroupName "myResourceGroup" -VirtualNetworkApplianceName "myVNA" -Name "pl-gateway" -Kind "PLGateway" -IpVersion "IPv6" +``` + +Creates a PLGateway capability. This kind requires the IPv6 IP version (as does PLIPForwarders). + +### Example 3: Create a NAT64 capability +```powershell +New-AzVirtualNetworkApplianceCapability -ResourceGroupName "myResourceGroup" -VirtualNetworkApplianceName "myVNA" -Name "nat64" -Kind "NAT64" +``` + +Creates a NAT64 capability. NAT64 is property-less and must not be given an -IpVersion. + +## PARAMETERS + +### -AcquirePolicyToken +Acquire an Azure Policy token automatically for this resource operation. + +```yaml +Type: System.Management.Automation.SwitchParameter +Parameter Sets: (All) +Aliases: + +Required: False +Position: Named +Default value: None +Accept pipeline input: False +Accept wildcard characters: False +``` + +### -AsJob +Run cmdlet in the background + +```yaml +Type: System.Management.Automation.SwitchParameter +Parameter Sets: (All) +Aliases: + +Required: False +Position: Named +Default value: None +Accept pipeline input: False +Accept wildcard characters: False +``` + +### -ChangeReference +The change reference resource ID for this resource operation. + +```yaml +Type: System.String +Parameter Sets: (All) +Aliases: + +Required: False +Position: Named +Default value: None +Accept pipeline input: False +Accept wildcard characters: False +``` + +### -DefaultProfile +The credentials, account, tenant, and subscription used for communication with Azure. + +```yaml +Type: Microsoft.Azure.Commands.Common.Authentication.Abstractions.Core.IAzureContextContainer +Parameter Sets: (All) +Aliases: AzContext, AzureRmContext, AzureCredential + +Required: False +Position: Named +Default value: None +Accept pipeline input: False +Accept wildcard characters: False +``` + +### -Force +Do not ask for confirmation if you want to overwrite a resource + +```yaml +Type: System.Management.Automation.SwitchParameter +Parameter Sets: (All) +Aliases: + +Required: False +Position: Named +Default value: None +Accept pipeline input: False +Accept wildcard characters: False +``` + +### -IpVersion +The IP version the capability applies to. Required for the Private Link kinds: PLGatewayFastpath requires DualStack; PLGateway and PLIPForwarders require IPv6. Must not be set for NAT64 (property-less). Possible values: IPv6, DualStack. + +```yaml +Type: System.String +Parameter Sets: (All) +Aliases: +Accepted values: IPv6, DualStack + +Required: False +Position: Named +Default value: None +Accept pipeline input: True (ByPropertyName) +Accept wildcard characters: False +``` + +### -Kind +The capability kind. Possible values: PLGatewayFastpath, PLGateway, PLIPForwarders, NAT64. + +```yaml +Type: System.String +Parameter Sets: (All) +Aliases: +Accepted values: PLGatewayFastpath, PLGateway, PLIPForwarders, NAT64 + +Required: True +Position: Named +Default value: None +Accept pipeline input: True (ByPropertyName) +Accept wildcard characters: False +``` + +### -Name +The capability name. + +```yaml +Type: System.String +Parameter Sets: (All) +Aliases: ResourceName + +Required: True +Position: Named +Default value: None +Accept pipeline input: True (ByPropertyName) +Accept wildcard characters: False +``` + +### -ResourceGroupName +The resource group name. + +```yaml +Type: System.String +Parameter Sets: (All) +Aliases: + +Required: True +Position: Named +Default value: None +Accept pipeline input: True (ByPropertyName) +Accept wildcard characters: False +``` + +### -VirtualNetworkApplianceName +The name of the parent Virtual Network Appliance. + +```yaml +Type: System.String +Parameter Sets: (All) +Aliases: ApplianceName + +Required: True +Position: Named +Default value: None +Accept pipeline input: True (ByPropertyName) +Accept wildcard characters: False +``` + +### -Confirm +Prompts you for confirmation before running the cmdlet. + +```yaml +Type: System.Management.Automation.SwitchParameter +Parameter Sets: (All) +Aliases: cf + +Required: False +Position: Named +Default value: None +Accept pipeline input: False +Accept wildcard characters: False +``` + +### -WhatIf +Shows what would happen if the cmdlet runs. +The cmdlet is not run. + +```yaml +Type: System.Management.Automation.SwitchParameter +Parameter Sets: (All) +Aliases: wi + +Required: False +Position: Named +Default value: None +Accept pipeline input: False +Accept wildcard characters: False +``` + +### CommonParameters +This cmdlet supports the common parameters: -Debug, -ErrorAction, -ErrorVariable, -InformationAction, -InformationVariable, -OutVariable, -OutBuffer, -PipelineVariable, -Verbose, -WarningAction, and -WarningVariable. For more information, see [about_CommonParameters](http://go.microsoft.com/fwlink/?LinkID=113216). + +## INPUTS + +### System.String + +## OUTPUTS + +### Microsoft.Azure.Commands.Network.Models.PSVirtualNetworkApplianceCapability + +## NOTES + +## RELATED LINKS diff --git a/src/Network/Network/help/Remove-AzVirtualNetworkApplianceCapability.md b/src/Network/Network/help/Remove-AzVirtualNetworkApplianceCapability.md new file mode 100644 index 000000000000..ae2d8c1fb49d --- /dev/null +++ b/src/Network/Network/help/Remove-AzVirtualNetworkApplianceCapability.md @@ -0,0 +1,264 @@ +--- +external help file: Microsoft.Azure.PowerShell.Cmdlets.Network.dll-Help.xml +Module Name: Az.Network +online version: https://learn.microsoft.com/powershell/module/az.network/remove-azvirtualnetworkappliancecapability +schema: 2.0.0 +--- + +# Remove-AzVirtualNetworkApplianceCapability + +## SYNOPSIS +Removes a capability from a Virtual Network Appliance (VNA). + +## SYNTAX + +### ResourceNameParameterSet (Default) +``` +Remove-AzVirtualNetworkApplianceCapability -Name -VirtualNetworkApplianceName + -ResourceGroupName [-Force] [-PassThru] [-AsJob] [-DefaultProfile ] + [-WhatIf] [-Confirm] [-AcquirePolicyToken] [-ChangeReference ] [] +``` + +### ResourceIdParameterSet +``` +Remove-AzVirtualNetworkApplianceCapability -ResourceId [-Force] [-PassThru] [-AsJob] + [-DefaultProfile ] [-WhatIf] [-Confirm] [-AcquirePolicyToken] + [-ChangeReference ] [] +``` + +### InputObjectParameterSet +``` +Remove-AzVirtualNetworkApplianceCapability -InputObject [-Force] + [-PassThru] [-AsJob] [-DefaultProfile ] [-WhatIf] [-Confirm] [-AcquirePolicyToken] + [-ChangeReference ] [] +``` + +## DESCRIPTION +The Remove-AzVirtualNetworkApplianceCapability cmdlet deletes a capability child resource from a Virtual Network Appliance. The capability can be identified by name, by resource ID, or by piping a capability object. + +## EXAMPLES + +### Example 1: Remove a capability by name +```powershell +Remove-AzVirtualNetworkApplianceCapability -ResourceGroupName "myResourceGroup" -VirtualNetworkApplianceName "myVNA" -Name "pl-gateway" -Force +``` + +Removes the capability named "pl-gateway" from the appliance "myVNA". + +### Example 2: Remove a capability via pipeline +```powershell +Get-AzVirtualNetworkApplianceCapability -ResourceGroupName "myResourceGroup" -VirtualNetworkApplianceName "myVNA" -Name "nat64" | Remove-AzVirtualNetworkApplianceCapability -Force +``` + +Gets the "nat64" capability and removes it. + +## PARAMETERS + +### -AcquirePolicyToken +Acquire an Azure Policy token automatically for this resource operation. + +```yaml +Type: System.Management.Automation.SwitchParameter +Parameter Sets: (All) +Aliases: + +Required: False +Position: Named +Default value: None +Accept pipeline input: False +Accept wildcard characters: False +``` + +### -AsJob +Run cmdlet in the background + +```yaml +Type: System.Management.Automation.SwitchParameter +Parameter Sets: (All) +Aliases: + +Required: False +Position: Named +Default value: None +Accept pipeline input: False +Accept wildcard characters: False +``` + +### -ChangeReference +The change reference resource ID for this resource operation. + +```yaml +Type: System.String +Parameter Sets: (All) +Aliases: + +Required: False +Position: Named +Default value: None +Accept pipeline input: False +Accept wildcard characters: False +``` + +### -DefaultProfile +The credentials, account, tenant, and subscription used for communication with Azure. + +```yaml +Type: Microsoft.Azure.Commands.Common.Authentication.Abstractions.Core.IAzureContextContainer +Parameter Sets: (All) +Aliases: AzContext, AzureRmContext, AzureCredential + +Required: False +Position: Named +Default value: None +Accept pipeline input: False +Accept wildcard characters: False +``` + +### -Force +Do not ask for confirmation. + +```yaml +Type: System.Management.Automation.SwitchParameter +Parameter Sets: (All) +Aliases: + +Required: False +Position: Named +Default value: None +Accept pipeline input: False +Accept wildcard characters: False +``` + +### -InputObject +The Virtual Network Appliance capability object. + +```yaml +Type: Microsoft.Azure.Commands.Network.Models.PSVirtualNetworkApplianceCapability +Parameter Sets: InputObjectParameterSet +Aliases: + +Required: True +Position: Named +Default value: None +Accept pipeline input: True (ByValue) +Accept wildcard characters: False +``` + +### -Name +The capability name. + +```yaml +Type: System.String +Parameter Sets: ResourceNameParameterSet +Aliases: ResourceName + +Required: True +Position: Named +Default value: None +Accept pipeline input: True (ByPropertyName) +Accept wildcard characters: False +``` + +### -PassThru +```yaml +Type: System.Management.Automation.SwitchParameter +Parameter Sets: (All) +Aliases: + +Required: False +Position: Named +Default value: None +Accept pipeline input: False +Accept wildcard characters: False +``` + +### -ResourceGroupName +The resource group name. + +```yaml +Type: System.String +Parameter Sets: ResourceNameParameterSet +Aliases: + +Required: True +Position: Named +Default value: None +Accept pipeline input: True (ByPropertyName) +Accept wildcard characters: False +``` + +### -ResourceId +The resource Id of the capability. + +```yaml +Type: System.String +Parameter Sets: ResourceIdParameterSet +Aliases: + +Required: True +Position: Named +Default value: None +Accept pipeline input: True (ByPropertyName) +Accept wildcard characters: False +``` + +### -VirtualNetworkApplianceName +The name of the parent Virtual Network Appliance. + +```yaml +Type: System.String +Parameter Sets: ResourceNameParameterSet +Aliases: ApplianceName + +Required: True +Position: Named +Default value: None +Accept pipeline input: True (ByPropertyName) +Accept wildcard characters: False +``` + +### -Confirm +Prompts you for confirmation before running the cmdlet. + +```yaml +Type: System.Management.Automation.SwitchParameter +Parameter Sets: (All) +Aliases: cf + +Required: False +Position: Named +Default value: None +Accept pipeline input: False +Accept wildcard characters: False +``` + +### -WhatIf +Shows what would happen if the cmdlet runs. +The cmdlet is not run. + +```yaml +Type: System.Management.Automation.SwitchParameter +Parameter Sets: (All) +Aliases: wi + +Required: False +Position: Named +Default value: None +Accept pipeline input: False +Accept wildcard characters: False +``` + +### CommonParameters +This cmdlet supports the common parameters: -Debug, -ErrorAction, -ErrorVariable, -InformationAction, -InformationVariable, -OutVariable, -OutBuffer, -PipelineVariable, -Verbose, -WarningAction, and -WarningVariable. For more information, see [about_CommonParameters](http://go.microsoft.com/fwlink/?LinkID=113216). + +## INPUTS + +### Microsoft.Azure.Commands.Network.Models.PSVirtualNetworkApplianceCapability + +## OUTPUTS + +### System.Boolean + +## NOTES + +## RELATED LINKS From 2999dddcfdc1e60a7d0688ac7e9f1501eb717fd8 Mon Sep 17 00:00:00 2001 From: Mangilal Bishnoi Date: Mon, 21 Sep 2026 19:19:36 +0530 Subject: [PATCH 2/3] Validate capability kind/ipVersion combination client-side and add ResourceId parser tests --- ...tualNetworkApplianceCapabilityUnitTests.cs | 55 +++++++++++++++++++ ...ualNetworkApplianceCapabilityBaseCmdlet.cs | 18 +++++- 2 files changed, 72 insertions(+), 1 deletion(-) diff --git a/src/Network/Network.Test/UnitTests/VirtualNetworkApplianceCapabilityUnitTests.cs b/src/Network/Network.Test/UnitTests/VirtualNetworkApplianceCapabilityUnitTests.cs index bf9770cead62..aa2525a09251 100644 --- a/src/Network/Network.Test/UnitTests/VirtualNetworkApplianceCapabilityUnitTests.cs +++ b/src/Network/Network.Test/UnitTests/VirtualNetworkApplianceCapabilityUnitTests.cs @@ -13,6 +13,7 @@ // ---------------------------------------------------------------------------------- using System; +using System.Management.Automation; using Microsoft.Azure.Commands.Network; using Microsoft.Azure.Management.Network.Models; using Microsoft.WindowsAzure.Commands.ScenarioTest; @@ -108,5 +109,59 @@ public void GetCapabilityKind_MapsEveryKind() Assert.Equal("PLIPForwarders", VirtualNetworkApplianceCapabilityBaseCmdlet.GetCapabilityKind(new PlipForwardersCapability())); Assert.Equal("NAT64", VirtualNetworkApplianceCapabilityBaseCmdlet.GetCapabilityKind(new Nat64Capability())); } + + [Theory] + [Trait(Category.AcceptanceType, Category.CheckIn)] + [InlineData("PLGatewayFastpath", "IPv6")] + [InlineData("PLGateway", "DualStack")] + [InlineData("PLIPForwarders", "DualStack")] + public void BuildCapabilityParameters_MismatchedIpVersionForKind_Throws(string kind, string ipVersion) + { + var exception = Assert.Throws( + () => VirtualNetworkApplianceCapabilityBaseCmdlet.BuildCapabilityParameters(kind, ipVersion)); + Assert.Contains(kind, exception.Message); + } + + [Fact] + [Trait(Category.AcceptanceType, Category.CheckIn)] + public void ParseCapabilityResourceId_ValidId_ParsesNames() + { + const string id = "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/rg1/providers/Microsoft.Network/virtualNetworkAppliances/vna1/capabilities/pl-gateway"; + + VirtualNetworkApplianceCapabilityBaseCmdlet.ParseCapabilityResourceId(id, out var resourceGroupName, out var applianceName, out var capabilityName); + + Assert.Equal("rg1", resourceGroupName); + Assert.Equal("vna1", applianceName); + Assert.Equal("pl-gateway", capabilityName); + } + + [Fact] + [Trait(Category.AcceptanceType, Category.CheckIn)] + public void ParseCapabilityResourceId_NamesEqualToStructuralKeywords_ParsedByPosition() + { + // An appliance literally named "capabilities" and a capability literally named "resourceGroups" + // must still be parsed from their fixed positions, not by keyword search. + const string id = "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/rg1/providers/Microsoft.Network/virtualNetworkAppliances/capabilities/capabilities/resourceGroups"; + + VirtualNetworkApplianceCapabilityBaseCmdlet.ParseCapabilityResourceId(id, out var resourceGroupName, out var applianceName, out var capabilityName); + + Assert.Equal("rg1", resourceGroupName); + Assert.Equal("capabilities", applianceName); + Assert.Equal("resourceGroups", capabilityName); + } + + [Theory] + [Trait(Category.AcceptanceType, Category.CheckIn)] + [InlineData(null)] + [InlineData("")] + [InlineData("/subscriptions/s/resourceGroups/rg/providers/Microsoft.Network/virtualNetworkAppliances/vna")] // parent id, too short + [InlineData("/subscriptions/s/resourceGroups/rg/providers/Microsoft.Compute/virtualNetworkAppliances/vna/capabilities/c")] // wrong provider + [InlineData("/subscriptions/s/resourceGroups/rg/providers/Microsoft.Network/virtualNetworkAppliances/vna/subnets/c")] // wrong child type + [InlineData("/subscriptions/s/resourceGroups/rg/providers/Microsoft.Network/virtualNetworkAppliances/vna/capabilities/c/extra")] // too long + public void ParseCapabilityResourceId_MalformedId_Throws(string resourceId) + { + Assert.Throws( + () => VirtualNetworkApplianceCapabilityBaseCmdlet.ParseCapabilityResourceId(resourceId, out _, out _, out _)); + } } } diff --git a/src/Network/Network/VirtualNetworkApplianceCapability/VirtualNetworkApplianceCapabilityBaseCmdlet.cs b/src/Network/Network/VirtualNetworkApplianceCapability/VirtualNetworkApplianceCapabilityBaseCmdlet.cs index 56ef672f7a99..a69d9a318ed2 100644 --- a/src/Network/Network/VirtualNetworkApplianceCapability/VirtualNetworkApplianceCapabilityBaseCmdlet.cs +++ b/src/Network/Network/VirtualNetworkApplianceCapability/VirtualNetworkApplianceCapabilityBaseCmdlet.cs @@ -122,6 +122,21 @@ public static VirtualNetworkApplianceCapabilityCreateOrUpdate BuildCapabilityPar IPVersion = NormalizeIpVersion(ipVersion) }; + // Enforce the per-kind ipVersion contract client-side (the service also validates it), so a + // documented-invalid combination fails fast without a network round-trip. NAT64 already returned + // above, so it is never evaluated here. The value compared is the normalized (canonical-cased) one. + bool invalidIpVersion = + (string.Equals(kind, VirtualNetworkApplianceCapabilityKind.PLGatewayFastpath, StringComparison.OrdinalIgnoreCase) + && !string.Equals(properties.IPVersion, VirtualNetworkApplianceCapabilityIpVersion.DualStack, StringComparison.Ordinal)) + || ((string.Equals(kind, VirtualNetworkApplianceCapabilityKind.PLGateway, StringComparison.OrdinalIgnoreCase) + || string.Equals(kind, VirtualNetworkApplianceCapabilityKind.PlipForwarders, StringComparison.OrdinalIgnoreCase)) + && !string.Equals(properties.IPVersion, VirtualNetworkApplianceCapabilityIpVersion.IPv6, StringComparison.Ordinal)); + + if (invalidIpVersion) + { + throw new ArgumentException($"The -IpVersion value '{ipVersion}' is not valid for the '{kind}' capability kind. PLGatewayFastpath requires DualStack; PLGateway and PLIPForwarders require IPv6.", nameof(ipVersion)); + } + if (string.Equals(kind, VirtualNetworkApplianceCapabilityKind.PLGatewayFastpath, StringComparison.OrdinalIgnoreCase)) { return new PLGatewayFastpathCapabilityCreateOrUpdate { Properties = properties }; @@ -162,7 +177,8 @@ private static string NormalizeIpVersion(string ipVersion) // Every structural token is validated positionally and the resource group, appliance, and capability // names are read from fixed positions, so a resource NAME that happens to equal a type keyword // (e.g. an appliance literally named "resourceGroups" or "capabilities") cannot be mis-parsed. - protected static void ParseCapabilityResourceId(string resourceId, out string resourceGroupName, out string virtualNetworkApplianceName, out string capabilityName) + // Exposed for unit testing (no service dependency). + public static void ParseCapabilityResourceId(string resourceId, out string resourceGroupName, out string virtualNetworkApplianceName, out string capabilityName) { var segments = (resourceId ?? string.Empty).Split(new[] { '/' }, StringSplitOptions.RemoveEmptyEntries); From f050f92b640ba69aadf3db1f866b550b48f33a45 Mon Sep 17 00:00:00 2001 From: Mangilal Bishnoi Date: Thu, 1 Oct 2026 22:55:04 +0530 Subject: [PATCH 3/3] Align capability SDK with approved spec: reuse VirtualNetworkApplianceCapability for create, drop stale CreateOrUpdate hierarchy Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- ...lNetworkApplianceCapabilitiesOperations.cs | 4 +- ...appliancecapabilitycreateorupdateAllof0.cs | 65 ------------------- .../Models/Nat64CapabilityCreateOrUpdate.cs | 65 ------------------- .../PLGatewayCapabilityCreateOrUpdate.cs | 60 ----------------- ...GatewayFastpathCapabilityCreateOrUpdate.cs | 60 ----------------- .../PlipForwardersCapabilityCreateOrUpdate.cs | 60 ----------------- ...etworkApplianceCapabilityCreateOrUpdate.cs | 62 ------------------ .../Generated/NetworkManagementClient.cs | 2 +- ...lNetworkApplianceCapabilitiesOperations.cs | 4 +- ...plianceCapabilitiesOperationsExtensions.cs | 8 +-- src/Network/Network.Management.Sdk/README.md | 15 ++++- ...tualNetworkApplianceCapabilityUnitTests.cs | 10 +-- ...ualNetworkApplianceCapabilityBaseCmdlet.cs | 10 +-- 13 files changed, 33 insertions(+), 392 deletions(-) delete mode 100644 src/Network/Network.Management.Sdk/Generated/Models/Components19Zjha1SchemasVirtualnetworkappliancecapabilitycreateorupdateAllof0.cs delete mode 100644 src/Network/Network.Management.Sdk/Generated/Models/Nat64CapabilityCreateOrUpdate.cs delete mode 100644 src/Network/Network.Management.Sdk/Generated/Models/PLGatewayCapabilityCreateOrUpdate.cs delete mode 100644 src/Network/Network.Management.Sdk/Generated/Models/PLGatewayFastpathCapabilityCreateOrUpdate.cs delete mode 100644 src/Network/Network.Management.Sdk/Generated/Models/PlipForwardersCapabilityCreateOrUpdate.cs delete mode 100644 src/Network/Network.Management.Sdk/Generated/Models/VirtualNetworkApplianceCapabilityCreateOrUpdate.cs diff --git a/src/Network/Network.Management.Sdk/Generated/IVirtualNetworkApplianceCapabilitiesOperations.cs b/src/Network/Network.Management.Sdk/Generated/IVirtualNetworkApplianceCapabilitiesOperations.cs index 3f0a54e4dbc4..21a8775dc8d9 100644 --- a/src/Network/Network.Management.Sdk/Generated/IVirtualNetworkApplianceCapabilitiesOperations.cs +++ b/src/Network/Network.Management.Sdk/Generated/IVirtualNetworkApplianceCapabilitiesOperations.cs @@ -99,7 +99,7 @@ public partial interface IVirtualNetworkApplianceCapabilitiesOperations /// /// Thrown when unable to deserialize the response /// - System.Threading.Tasks.Task> CreateOrUpdateWithHttpMessagesAsync(string resourceGroupName, string virtualNetworkApplianceName, string capabilityName, VirtualNetworkApplianceCapabilityCreateOrUpdate parameters, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + System.Threading.Tasks.Task> CreateOrUpdateWithHttpMessagesAsync(string resourceGroupName, string virtualNetworkApplianceName, string capabilityName, VirtualNetworkApplianceCapability parameters, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); /// /// Deletes the specified capability of a virtual network appliance. @@ -158,7 +158,7 @@ public partial interface IVirtualNetworkApplianceCapabilitiesOperations /// /// Thrown when unable to deserialize the response /// - System.Threading.Tasks.Task> BeginCreateOrUpdateWithHttpMessagesAsync(string resourceGroupName, string virtualNetworkApplianceName, string capabilityName, VirtualNetworkApplianceCapabilityCreateOrUpdate parameters, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + System.Threading.Tasks.Task> BeginCreateOrUpdateWithHttpMessagesAsync(string resourceGroupName, string virtualNetworkApplianceName, string capabilityName, VirtualNetworkApplianceCapability parameters, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); /// /// Deletes the specified capability of a virtual network appliance. diff --git a/src/Network/Network.Management.Sdk/Generated/Models/Components19Zjha1SchemasVirtualnetworkappliancecapabilitycreateorupdateAllof0.cs b/src/Network/Network.Management.Sdk/Generated/Models/Components19Zjha1SchemasVirtualnetworkappliancecapabilitycreateorupdateAllof0.cs deleted file mode 100644 index 4c3b39771e7a..000000000000 --- a/src/Network/Network.Management.Sdk/Generated/Models/Components19Zjha1SchemasVirtualnetworkappliancecapabilitycreateorupdateAllof0.cs +++ /dev/null @@ -1,65 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. See License.txt in the project root for license information. -// Code generated by Microsoft (R) AutoRest Code Generator. -// Changes may cause incorrect behavior and will be lost if the code is regenerated. - -namespace Microsoft.Azure.Management.Network.Models -{ - using System.Linq; - - /// - /// Concrete proxy resource types can be created by aliasing this type using a - /// specific property type. - /// - public partial class Components19Zjha1SchemasVirtualnetworkappliancecapabilitycreateorupdateAllof0 : ProxyResourceAutoGenerated - { - /// - /// Initializes a new instance of the Components19Zjha1SchemasVirtualnetworkappliancecapabilitycreateorupdateAllof0 class. - /// - public Components19Zjha1SchemasVirtualnetworkappliancecapabilitycreateorupdateAllof0() - { - CustomInit(); - } - - /// - /// Initializes a new instance of the Components19Zjha1SchemasVirtualnetworkappliancecapabilitycreateorupdateAllof0 class. - /// - - /// Fully qualified resource ID for the resource. E.g. - /// "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}" - /// - - /// The name of the resource - /// - - /// The type of the resource. E.g. "Microsoft.Compute/virtualMachines" or - /// "Microsoft.Storage/storageAccounts" - /// - - /// Azure Resource Manager metadata containing createdBy and modifiedBy - /// information. - /// - - /// The resource-specific properties for this resource. - /// - public Components19Zjha1SchemasVirtualnetworkappliancecapabilitycreateorupdateAllof0(string id = default(string), string name = default(string), string type = default(string), SystemData systemData = default(SystemData), VirtualNetworkApplianceCapabilityProperties properties = default(VirtualNetworkApplianceCapabilityProperties)) - - : base(id, name, type, systemData) - { - this.Properties = properties; - CustomInit(); - } - - /// - /// An initialization method that performs custom operations like setting defaults - /// - partial void CustomInit(); - - - /// - /// Gets or sets the resource-specific properties for this resource. - /// - [Newtonsoft.Json.JsonProperty(PropertyName = "properties")] - public VirtualNetworkApplianceCapabilityProperties Properties {get; set; } - } -} \ No newline at end of file diff --git a/src/Network/Network.Management.Sdk/Generated/Models/Nat64CapabilityCreateOrUpdate.cs b/src/Network/Network.Management.Sdk/Generated/Models/Nat64CapabilityCreateOrUpdate.cs deleted file mode 100644 index 857de29c23c0..000000000000 --- a/src/Network/Network.Management.Sdk/Generated/Models/Nat64CapabilityCreateOrUpdate.cs +++ /dev/null @@ -1,65 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. See License.txt in the project root for license information. -// Code generated by Microsoft (R) AutoRest Code Generator. -// Changes may cause incorrect behavior and will be lost if the code is regenerated. - -namespace Microsoft.Azure.Management.Network.Models -{ - using System.Linq; - - /// - /// The NAT64 capability. Enables stateful NAT64 translation (IPv6-only - /// workloads reaching IPv4 - /// destinations) on the appliance's floating NIC; supported on a dual-stack - /// appliance. This kind is - /// property-less: it carries no `ipVersion` (the parent appliance's - /// dual-stack configuration is the - /// precondition, service-validated) beyond the properties common to every - /// capability. - /// - [Newtonsoft.Json.JsonObject("NAT64")] - public partial class Nat64CapabilityCreateOrUpdate : VirtualNetworkApplianceCapabilityCreateOrUpdate - { - /// - /// Initializes a new instance of the Nat64CapabilityCreateOrUpdate class. - /// - public Nat64CapabilityCreateOrUpdate() - { - CustomInit(); - } - - /// - /// Initializes a new instance of the Nat64CapabilityCreateOrUpdate class. - /// - - /// Fully qualified resource ID for the resource. E.g. - /// "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}" - /// - - /// The name of the resource - /// - - /// The type of the resource. E.g. "Microsoft.Compute/virtualMachines" or - /// "Microsoft.Storage/storageAccounts" - /// - - /// Azure Resource Manager metadata containing createdBy and modifiedBy - /// information. - /// - - /// The resource-specific properties for this resource. - /// - public Nat64CapabilityCreateOrUpdate(string id = default(string), string name = default(string), string type = default(string), SystemData systemData = default(SystemData), VirtualNetworkApplianceCapabilityProperties properties = default(VirtualNetworkApplianceCapabilityProperties)) - - : base(id, name, type, systemData, properties) - { - CustomInit(); - } - - /// - /// An initialization method that performs custom operations like setting defaults - /// - partial void CustomInit(); - - } -} diff --git a/src/Network/Network.Management.Sdk/Generated/Models/PLGatewayCapabilityCreateOrUpdate.cs b/src/Network/Network.Management.Sdk/Generated/Models/PLGatewayCapabilityCreateOrUpdate.cs deleted file mode 100644 index a172b2245d8d..000000000000 --- a/src/Network/Network.Management.Sdk/Generated/Models/PLGatewayCapabilityCreateOrUpdate.cs +++ /dev/null @@ -1,60 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. See License.txt in the project root for license information. -// Code generated by Microsoft (R) AutoRest Code Generator. -// Changes may cause incorrect behavior and will be lost if the code is regenerated. - -namespace Microsoft.Azure.Management.Network.Models -{ - using System.Linq; - - /// - /// The Private Link Gateway (slow-path) capability. Private Link programming - /// offloaded to the appliance's gateway; - /// IPv6 on a dual-stack appliance. - /// - [Newtonsoft.Json.JsonObject("PLGateway")] - public partial class PLGatewayCapabilityCreateOrUpdate : VirtualNetworkApplianceCapabilityCreateOrUpdate - { - /// - /// Initializes a new instance of the PLGatewayCapabilityCreateOrUpdate class. - /// - public PLGatewayCapabilityCreateOrUpdate() - { - CustomInit(); - } - - /// - /// Initializes a new instance of the PLGatewayCapabilityCreateOrUpdate class. - /// - - /// Fully qualified resource ID for the resource. E.g. - /// "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}" - /// - - /// The name of the resource - /// - - /// The type of the resource. E.g. "Microsoft.Compute/virtualMachines" or - /// "Microsoft.Storage/storageAccounts" - /// - - /// Azure Resource Manager metadata containing createdBy and modifiedBy - /// information. - /// - - /// The resource-specific properties for this resource. - /// - public PLGatewayCapabilityCreateOrUpdate(string id = default(string), string name = default(string), string type = default(string), SystemData systemData = default(SystemData), VirtualNetworkApplianceCapabilityProperties properties = default(VirtualNetworkApplianceCapabilityProperties)) - - : base(id, name, type, systemData, properties) - { - CustomInit(); - } - - /// - /// An initialization method that performs custom operations like setting defaults - /// - partial void CustomInit(); - - } -} \ No newline at end of file diff --git a/src/Network/Network.Management.Sdk/Generated/Models/PLGatewayFastpathCapabilityCreateOrUpdate.cs b/src/Network/Network.Management.Sdk/Generated/Models/PLGatewayFastpathCapabilityCreateOrUpdate.cs deleted file mode 100644 index 48d1bb707539..000000000000 --- a/src/Network/Network.Management.Sdk/Generated/Models/PLGatewayFastpathCapabilityCreateOrUpdate.cs +++ /dev/null @@ -1,60 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. See License.txt in the project root for license information. -// Code generated by Microsoft (R) AutoRest Code Generator. -// Changes may cause incorrect behavior and will be lost if the code is regenerated. - -namespace Microsoft.Azure.Management.Network.Models -{ - using System.Linq; - - /// - /// The Private Link Gateway FastPath capability. Private Link fast-path - /// programming on the appliance's gateway; - /// supported on a dual-stack appliance. - /// - [Newtonsoft.Json.JsonObject("PLGatewayFastpath")] - public partial class PLGatewayFastpathCapabilityCreateOrUpdate : VirtualNetworkApplianceCapabilityCreateOrUpdate - { - /// - /// Initializes a new instance of the PLGatewayFastpathCapabilityCreateOrUpdate class. - /// - public PLGatewayFastpathCapabilityCreateOrUpdate() - { - CustomInit(); - } - - /// - /// Initializes a new instance of the PLGatewayFastpathCapabilityCreateOrUpdate class. - /// - - /// Fully qualified resource ID for the resource. E.g. - /// "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}" - /// - - /// The name of the resource - /// - - /// The type of the resource. E.g. "Microsoft.Compute/virtualMachines" or - /// "Microsoft.Storage/storageAccounts" - /// - - /// Azure Resource Manager metadata containing createdBy and modifiedBy - /// information. - /// - - /// The resource-specific properties for this resource. - /// - public PLGatewayFastpathCapabilityCreateOrUpdate(string id = default(string), string name = default(string), string type = default(string), SystemData systemData = default(SystemData), VirtualNetworkApplianceCapabilityProperties properties = default(VirtualNetworkApplianceCapabilityProperties)) - - : base(id, name, type, systemData, properties) - { - CustomInit(); - } - - /// - /// An initialization method that performs custom operations like setting defaults - /// - partial void CustomInit(); - - } -} \ No newline at end of file diff --git a/src/Network/Network.Management.Sdk/Generated/Models/PlipForwardersCapabilityCreateOrUpdate.cs b/src/Network/Network.Management.Sdk/Generated/Models/PlipForwardersCapabilityCreateOrUpdate.cs deleted file mode 100644 index be5d6fd25f8b..000000000000 --- a/src/Network/Network.Management.Sdk/Generated/Models/PlipForwardersCapabilityCreateOrUpdate.cs +++ /dev/null @@ -1,60 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. See License.txt in the project root for license information. -// Code generated by Microsoft (R) AutoRest Code Generator. -// Changes may cause incorrect behavior and will be lost if the code is regenerated. - -namespace Microsoft.Azure.Management.Network.Models -{ - using System.Linq; - - /// - /// The Private Link IP-forwarders (NVA) capability. Private Link programming - /// offloaded to the appliance NVA; - /// IPv6 on a dual-stack appliance. - /// - [Newtonsoft.Json.JsonObject("PLIPForwarders")] - public partial class PlipForwardersCapabilityCreateOrUpdate : VirtualNetworkApplianceCapabilityCreateOrUpdate - { - /// - /// Initializes a new instance of the PlipForwardersCapabilityCreateOrUpdate class. - /// - public PlipForwardersCapabilityCreateOrUpdate() - { - CustomInit(); - } - - /// - /// Initializes a new instance of the PlipForwardersCapabilityCreateOrUpdate class. - /// - - /// Fully qualified resource ID for the resource. E.g. - /// "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}" - /// - - /// The name of the resource - /// - - /// The type of the resource. E.g. "Microsoft.Compute/virtualMachines" or - /// "Microsoft.Storage/storageAccounts" - /// - - /// Azure Resource Manager metadata containing createdBy and modifiedBy - /// information. - /// - - /// The resource-specific properties for this resource. - /// - public PlipForwardersCapabilityCreateOrUpdate(string id = default(string), string name = default(string), string type = default(string), SystemData systemData = default(SystemData), VirtualNetworkApplianceCapabilityProperties properties = default(VirtualNetworkApplianceCapabilityProperties)) - - : base(id, name, type, systemData, properties) - { - CustomInit(); - } - - /// - /// An initialization method that performs custom operations like setting defaults - /// - partial void CustomInit(); - - } -} \ No newline at end of file diff --git a/src/Network/Network.Management.Sdk/Generated/Models/VirtualNetworkApplianceCapabilityCreateOrUpdate.cs b/src/Network/Network.Management.Sdk/Generated/Models/VirtualNetworkApplianceCapabilityCreateOrUpdate.cs deleted file mode 100644 index d188bd524384..000000000000 --- a/src/Network/Network.Management.Sdk/Generated/Models/VirtualNetworkApplianceCapabilityCreateOrUpdate.cs +++ /dev/null @@ -1,62 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. See License.txt in the project root for license information. -// Code generated by Microsoft (R) AutoRest Code Generator. -// Changes may cause incorrect behavior and will be lost if the code is regenerated. - -namespace Microsoft.Azure.Management.Network.Models -{ - using System.Linq; - - /// - /// A capability enabled on a virtual network appliance. The top-level `kind` - /// discriminator selects the - /// capability family; every kind shares the same `properties` schema (see - /// VirtualNetworkApplianceCapabilityProperties). One capability of a given - /// kind may exist per appliance. - /// - [Newtonsoft.Json.JsonObject("VirtualNetworkApplianceCapabilityCreateOrUpdate")] - public partial class VirtualNetworkApplianceCapabilityCreateOrUpdate : Components19Zjha1SchemasVirtualnetworkappliancecapabilitycreateorupdateAllof0 - { - /// - /// Initializes a new instance of the VirtualNetworkApplianceCapabilityCreateOrUpdate class. - /// - public VirtualNetworkApplianceCapabilityCreateOrUpdate() - { - CustomInit(); - } - - /// - /// Initializes a new instance of the VirtualNetworkApplianceCapabilityCreateOrUpdate class. - /// - - /// Fully qualified resource ID for the resource. E.g. - /// "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}" - /// - - /// The name of the resource - /// - - /// The type of the resource. E.g. "Microsoft.Compute/virtualMachines" or - /// "Microsoft.Storage/storageAccounts" - /// - - /// Azure Resource Manager metadata containing createdBy and modifiedBy - /// information. - /// - - /// The resource-specific properties for this resource. - /// - public VirtualNetworkApplianceCapabilityCreateOrUpdate(string id = default(string), string name = default(string), string type = default(string), SystemData systemData = default(SystemData), VirtualNetworkApplianceCapabilityProperties properties = default(VirtualNetworkApplianceCapabilityProperties)) - - : base(id, name, type, systemData, properties) - { - CustomInit(); - } - - /// - /// An initialization method that performs custom operations like setting defaults - /// - partial void CustomInit(); - - } -} \ No newline at end of file diff --git a/src/Network/Network.Management.Sdk/Generated/NetworkManagementClient.cs b/src/Network/Network.Management.Sdk/Generated/NetworkManagementClient.cs index c66a5aaa4c76..755abb8117ab 100644 --- a/src/Network/Network.Management.Sdk/Generated/NetworkManagementClient.cs +++ b/src/Network/Network.Management.Sdk/Generated/NetworkManagementClient.cs @@ -1169,7 +1169,7 @@ private void Initialize() DeserializationSettings.Converters.Add(new Microsoft.Rest.Serialization.PolymorphicDeserializeJsonConverter("kind")); SerializationSettings.Converters.Add(new Microsoft.Rest.Serialization.PolymorphicSerializeJsonConverter("kind")); DeserializationSettings.Converters.Add(new Microsoft.Rest.Serialization.PolymorphicDeserializeJsonConverter("kind")); - SerializationSettings.Converters.Add(new Microsoft.Rest.Serialization.PolymorphicSerializeJsonConverter("kind")); + SerializationSettings.Converters.Add(new Microsoft.Rest.Serialization.PolymorphicSerializeJsonConverter("kind")); DeserializationSettings.Converters.Add(new Microsoft.Rest.Serialization.PolymorphicDeserializeJsonConverter("kind")); SerializationSettings.Converters.Add(new Microsoft.Rest.Serialization.PolymorphicSerializeJsonConverter("kind")); DeserializationSettings.Converters.Add(new Microsoft.Rest.Serialization.PolymorphicDeserializeJsonConverter("kind")); diff --git a/src/Network/Network.Management.Sdk/Generated/VirtualNetworkApplianceCapabilitiesOperations.cs b/src/Network/Network.Management.Sdk/Generated/VirtualNetworkApplianceCapabilitiesOperations.cs index d5b60c5d066a..e72d76aa4021 100644 --- a/src/Network/Network.Management.Sdk/Generated/VirtualNetworkApplianceCapabilitiesOperations.cs +++ b/src/Network/Network.Management.Sdk/Generated/VirtualNetworkApplianceCapabilitiesOperations.cs @@ -510,7 +510,7 @@ internal VirtualNetworkApplianceCapabilitiesOperations (NetworkManagementClient /// /// The cancellation token. /// - public async System.Threading.Tasks.Task> CreateOrUpdateWithHttpMessagesAsync(string resourceGroupName, string virtualNetworkApplianceName, string capabilityName, VirtualNetworkApplianceCapabilityCreateOrUpdate parameters, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + public async System.Threading.Tasks.Task> CreateOrUpdateWithHttpMessagesAsync(string resourceGroupName, string virtualNetworkApplianceName, string capabilityName, VirtualNetworkApplianceCapability parameters, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) { // Send Request Microsoft.Rest.Azure.AzureOperationResponse _response = await BeginCreateOrUpdateWithHttpMessagesAsync(resourceGroupName, virtualNetworkApplianceName, capabilityName, parameters, customHeaders, cancellationToken).ConfigureAwait(false); @@ -579,7 +579,7 @@ internal VirtualNetworkApplianceCapabilitiesOperations (NetworkManagementClient /// /// A response object containing the response body and response headers. /// - public async System.Threading.Tasks.Task> BeginCreateOrUpdateWithHttpMessagesAsync(string resourceGroupName, string virtualNetworkApplianceName, string capabilityName, VirtualNetworkApplianceCapabilityCreateOrUpdate parameters, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + public async System.Threading.Tasks.Task> BeginCreateOrUpdateWithHttpMessagesAsync(string resourceGroupName, string virtualNetworkApplianceName, string capabilityName, VirtualNetworkApplianceCapability parameters, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) { diff --git a/src/Network/Network.Management.Sdk/Generated/VirtualNetworkApplianceCapabilitiesOperationsExtensions.cs b/src/Network/Network.Management.Sdk/Generated/VirtualNetworkApplianceCapabilitiesOperationsExtensions.cs index 13c475261ae8..1c653eb5b995 100644 --- a/src/Network/Network.Management.Sdk/Generated/VirtualNetworkApplianceCapabilitiesOperationsExtensions.cs +++ b/src/Network/Network.Management.Sdk/Generated/VirtualNetworkApplianceCapabilitiesOperationsExtensions.cs @@ -111,7 +111,7 @@ public static VirtualNetworkApplianceCapability Get(this IVirtualNetworkApplianc /// /// The name of the virtual network appliance capability. /// - public static VirtualNetworkApplianceCapability CreateOrUpdate(this IVirtualNetworkApplianceCapabilitiesOperations operations, string resourceGroupName, string virtualNetworkApplianceName, string capabilityName, VirtualNetworkApplianceCapabilityCreateOrUpdate parameters) + public static VirtualNetworkApplianceCapability CreateOrUpdate(this IVirtualNetworkApplianceCapabilitiesOperations operations, string resourceGroupName, string virtualNetworkApplianceName, string capabilityName, VirtualNetworkApplianceCapability parameters) { return ((IVirtualNetworkApplianceCapabilitiesOperations)operations).CreateOrUpdateAsync(resourceGroupName, virtualNetworkApplianceName, capabilityName, parameters).GetAwaiter().GetResult(); } @@ -134,7 +134,7 @@ public static VirtualNetworkApplianceCapability CreateOrUpdate(this IVirtualNetw /// /// The cancellation token. /// - public static async System.Threading.Tasks.Task CreateOrUpdateAsync(this IVirtualNetworkApplianceCapabilitiesOperations operations, string resourceGroupName, string virtualNetworkApplianceName, string capabilityName, VirtualNetworkApplianceCapabilityCreateOrUpdate parameters, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + public static async System.Threading.Tasks.Task CreateOrUpdateAsync(this IVirtualNetworkApplianceCapabilitiesOperations operations, string resourceGroupName, string virtualNetworkApplianceName, string capabilityName, VirtualNetworkApplianceCapability parameters, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) { using (var _result = await operations.CreateOrUpdateWithHttpMessagesAsync(resourceGroupName, virtualNetworkApplianceName, capabilityName, parameters, null, cancellationToken).ConfigureAwait(false)) { @@ -201,7 +201,7 @@ public static VirtualNetworkApplianceCapabilitiesDeleteHeaders Delete(this IVirt /// /// The name of the virtual network appliance capability. /// - public static VirtualNetworkApplianceCapability BeginCreateOrUpdate(this IVirtualNetworkApplianceCapabilitiesOperations operations, string resourceGroupName, string virtualNetworkApplianceName, string capabilityName, VirtualNetworkApplianceCapabilityCreateOrUpdate parameters) + public static VirtualNetworkApplianceCapability BeginCreateOrUpdate(this IVirtualNetworkApplianceCapabilitiesOperations operations, string resourceGroupName, string virtualNetworkApplianceName, string capabilityName, VirtualNetworkApplianceCapability parameters) { return ((IVirtualNetworkApplianceCapabilitiesOperations)operations).BeginCreateOrUpdateAsync(resourceGroupName, virtualNetworkApplianceName, capabilityName, parameters).GetAwaiter().GetResult(); } @@ -224,7 +224,7 @@ public static VirtualNetworkApplianceCapability BeginCreateOrUpdate(this IVirtua /// /// The cancellation token. /// - public static async System.Threading.Tasks.Task BeginCreateOrUpdateAsync(this IVirtualNetworkApplianceCapabilitiesOperations operations, string resourceGroupName, string virtualNetworkApplianceName, string capabilityName, VirtualNetworkApplianceCapabilityCreateOrUpdate parameters, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + public static async System.Threading.Tasks.Task BeginCreateOrUpdateAsync(this IVirtualNetworkApplianceCapabilitiesOperations operations, string resourceGroupName, string virtualNetworkApplianceName, string capabilityName, VirtualNetworkApplianceCapability parameters, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) { using (var _result = await operations.BeginCreateOrUpdateWithHttpMessagesAsync(resourceGroupName, virtualNetworkApplianceName, capabilityName, parameters, null, cancellationToken).ConfigureAwait(false)) { diff --git a/src/Network/Network.Management.Sdk/README.md b/src/Network/Network.Management.Sdk/README.md index b6c22647109e..21827777e9a1 100644 --- a/src/Network/Network.Management.Sdk/README.md +++ b/src/Network/Network.Management.Sdk/README.md @@ -46,7 +46,12 @@ input-file: - https://github.com/Azure/azure-rest-api-specs/blob/$(commit)/specification/network/resource-manager/Microsoft.Network/Network/stable/2026-01-01/networkingOperations.json - https://github.com/Azure/azure-rest-api-specs/blob/$(commit)/specification/network/resource-manager/Microsoft.Network/Network/stable/2026-01-01/serviceGateway.json - https://github.com/Azure/azure-rest-api-specs/blob/$(commit)/specification/network/resource-manager/Microsoft.Network/Network/stable/2026-01-01/virtualNetwork.json - - https://github.com/Azure/azure-rest-api-specs/blob/$(commit)/specification/network/resource-manager/Microsoft.Network/Network/stable/2026-01-01/virtualNetworkAppliance.json + # Pulled from a newer commit than $(commit) because this file now also defines the + # Virtual Network Appliance capability resource (Microsoft.Network/virtualNetworkAppliances/capabilities), + # added in https://github.com/Azure/azure-rest-api-specs/pull/46629. The 2026-03-01 version of this file + # is additive over 2026-01-01 (same pre-existing paths plus the new capability paths), so the + # VirtualNetworkAppliances* directive below pins the pre-existing operations back to 2026-01-01. + - https://github.com/Azure/azure-rest-api-specs/blob/b8522b0ea77d6fc7fbdc8f987ec749d06309b846/specification/network/resource-manager/Microsoft.Network/Network/stable/2026-03-01/virtualNetworkAppliance.json - https://github.com/Azure/azure-rest-api-specs/blob/$(commit)/specification/network/resource-manager/Microsoft.Network/Network/stable/2026-01-01/virtualWan.json - https://github.com/Azure/azure-rest-api-specs/blob/$(commit)/specification/network/resource-manager/Microsoft.Network/Network/stable/2018-10-01/vmssNetwork.json @@ -84,6 +89,14 @@ directive: - from: IpamPoolsOperations.cs where: $ transform: $ = $.replace(/string apiVersion = "2025-09-01";/g, 'string apiVersion = "2026-01-01";'); +# virtualNetworkAppliance.json is now pulled from the 2026-03-01 version (see the input-file +# comment above) solely to pick up the new capability resource. Pin the pre-existing +# VirtualNetworkAppliances operations back to 2026-01-01 so this upgrade does not change the +# wire api-version of any already-released cmdlet; only VirtualNetworkApplianceCapabilities* +# (new in this version) is meant to use 2026-03-01. + - from: VirtualNetworkAppliancesOperations.cs + where: $ + transform: $ = $.replace(/string apiVersion = "2026-03-01";/g, 'string apiVersion = "2026-01-01";'); # The 2025-09-01 service response returns resourceGuid at the resource root, while the # published swagger places it under properties. Move the schema property during generation # until the current and next API specifications are corrected. diff --git a/src/Network/Network.Test/UnitTests/VirtualNetworkApplianceCapabilityUnitTests.cs b/src/Network/Network.Test/UnitTests/VirtualNetworkApplianceCapabilityUnitTests.cs index aa2525a09251..98203b943174 100644 --- a/src/Network/Network.Test/UnitTests/VirtualNetworkApplianceCapabilityUnitTests.cs +++ b/src/Network/Network.Test/UnitTests/VirtualNetworkApplianceCapabilityUnitTests.cs @@ -34,7 +34,7 @@ public void BuildCapabilityParameters_PLGatewayFastpath_UsesDualStack() { var parameters = VirtualNetworkApplianceCapabilityBaseCmdlet.BuildCapabilityParameters("PLGatewayFastpath", "DualStack"); - var fastpath = Assert.IsType(parameters); + var fastpath = Assert.IsType(parameters); Assert.NotNull(fastpath.Properties); Assert.Equal("DualStack", fastpath.Properties.IPVersion); } @@ -45,7 +45,7 @@ public void BuildCapabilityParameters_PLGateway_UsesIPv6() { var parameters = VirtualNetworkApplianceCapabilityBaseCmdlet.BuildCapabilityParameters("PLGateway", "IPv6"); - var gateway = Assert.IsType(parameters); + var gateway = Assert.IsType(parameters); Assert.Equal("IPv6", gateway.Properties.IPVersion); } @@ -55,7 +55,7 @@ public void BuildCapabilityParameters_PLIPForwarders_UsesIPv6() { var parameters = VirtualNetworkApplianceCapabilityBaseCmdlet.BuildCapabilityParameters("PLIPForwarders", "IPv6"); - var ipForwarders = Assert.IsType(parameters); + var ipForwarders = Assert.IsType(parameters); Assert.Equal("IPv6", ipForwarders.Properties.IPVersion); } @@ -65,7 +65,7 @@ public void BuildCapabilityParameters_Nat64_IsPropertyLess() { var parameters = VirtualNetworkApplianceCapabilityBaseCmdlet.BuildCapabilityParameters("NAT64", null); - var nat64 = Assert.IsType(parameters); + var nat64 = Assert.IsType(parameters); // NAT64 carries an empty properties bag with no ipVersion, matching the service contract. Assert.NotNull(nat64.Properties); Assert.Null(nat64.Properties.IPVersion); @@ -77,7 +77,7 @@ public void BuildCapabilityParameters_IsCaseInsensitive() { var parameters = VirtualNetworkApplianceCapabilityBaseCmdlet.BuildCapabilityParameters("plgateway", "ipv6"); - var gateway = Assert.IsType(parameters); + var gateway = Assert.IsType(parameters); // The ip version is canonicalized to the exact wire casing. Assert.Equal("IPv6", gateway.Properties.IPVersion); } diff --git a/src/Network/Network/VirtualNetworkApplianceCapability/VirtualNetworkApplianceCapabilityBaseCmdlet.cs b/src/Network/Network/VirtualNetworkApplianceCapability/VirtualNetworkApplianceCapabilityBaseCmdlet.cs index a69d9a318ed2..f78d996384c8 100644 --- a/src/Network/Network/VirtualNetworkApplianceCapability/VirtualNetworkApplianceCapabilityBaseCmdlet.cs +++ b/src/Network/Network/VirtualNetworkApplianceCapability/VirtualNetworkApplianceCapabilityBaseCmdlet.cs @@ -95,7 +95,7 @@ public static string GetCapabilityKind(VirtualNetworkApplianceCapability capabil // serializer emits as the top-level discriminator). The Private-Link kinds carry an "ipVersion" (the // service validates it against the kind: PLGatewayFastpath -> DualStack; PLGateway / PLIPForwarders -> // IPv6). NAT64 is property-less and must not carry an ipVersion. Exposed for unit testing (no service dependency). - public static VirtualNetworkApplianceCapabilityCreateOrUpdate BuildCapabilityParameters(string kind, string ipVersion) + public static VirtualNetworkApplianceCapability BuildCapabilityParameters(string kind, string ipVersion) { bool isNat64 = string.Equals(kind, VirtualNetworkApplianceCapabilityKind.Nat64, StringComparison.OrdinalIgnoreCase); bool ipVersionProvided = !string.IsNullOrEmpty(ipVersion); @@ -114,7 +114,7 @@ public static VirtualNetworkApplianceCapabilityCreateOrUpdate BuildCapabilityPar { // NAT64 is property-less; the wire contract still carries an empty "properties" object // (no ipVersion). An empty properties bag serializes to "properties": {} to match the service contract. - return new Nat64CapabilityCreateOrUpdate { Properties = new VirtualNetworkApplianceCapabilityProperties() }; + return new Nat64Capability { Properties = new VirtualNetworkApplianceCapabilityProperties() }; } var properties = new VirtualNetworkApplianceCapabilityProperties @@ -139,17 +139,17 @@ public static VirtualNetworkApplianceCapabilityCreateOrUpdate BuildCapabilityPar if (string.Equals(kind, VirtualNetworkApplianceCapabilityKind.PLGatewayFastpath, StringComparison.OrdinalIgnoreCase)) { - return new PLGatewayFastpathCapabilityCreateOrUpdate { Properties = properties }; + return new PLGatewayFastpathCapability { Properties = properties }; } if (string.Equals(kind, VirtualNetworkApplianceCapabilityKind.PLGateway, StringComparison.OrdinalIgnoreCase)) { - return new PLGatewayCapabilityCreateOrUpdate { Properties = properties }; + return new PLGatewayCapability { Properties = properties }; } if (string.Equals(kind, VirtualNetworkApplianceCapabilityKind.PlipForwarders, StringComparison.OrdinalIgnoreCase)) { - return new PlipForwardersCapabilityCreateOrUpdate { Properties = properties }; + return new PlipForwardersCapability { Properties = properties }; } throw new ArgumentException($"Unsupported virtual network appliance capability kind '{kind}'.", nameof(kind));