From 5a8eaf14f2d96c6f4818218d22fcacdccb1235de Mon Sep 17 00:00:00 2001 From: Hovsep Mkrtchyan Date: Thu, 15 Sep 2016 16:50:26 -0700 Subject: [PATCH] Moved C# Fluent API to public --- .gitattributes | 36 + .gitignore | 143 + .travis.yml | 23 + Documentation/AuthConflictsBetweenSDKs.md | 45 + Documentation/README.md | 59 + LICENSE.txt | 21 + NuGet.Config | 7 + README.md | 129 + appveyor.yml | 26 + build.proj | 344 ++ global.json | 11 + .../Azure.Tests/AvailabilitySetsTests.cs | 86 + .../Azure/Azure.Tests/AzureTests.xproj | 22 + .../Azure/Azure.Tests/DeploymentTests.cs | 130 + .../Azure.Tests/GenericResourcesTests.cs | 97 + .../Azure/Azure.Tests/NSGTests.cs | 105 + .../Azure.Tests/NetworkInterfaceTests.cs | 83 + .../Azure/Azure.Tests/NetworkTests.cs | 107 + .../Azure.Tests/Properties/AssemblyInfo.cs | 19 + .../Azure/Azure.Tests/ProvidersTests.cs | 52 + .../Azure/Azure.Tests/PublicIpAddressTests.cs | 65 + .../Azure/Azure.Tests/StorageAccountsTests.cs | 96 + .../Azure/Azure.Tests/StorageUsagesTests.cs | 30 + .../Azure/Azure.Tests/SubscriptionsTests.cs | 41 + .../Azure/Azure.Tests/TenantsTests.cs | 33 + .../Azure/Azure.Tests/TestHelper.cs | 39 + .../Azure/Azure.Tests/VirtualMachineTests.cs | 66 + .../Azure/Azure.Tests/VirtualNetworkTests.cs | 121 + .../Azure/Azure.Tests/project.json | 28 + src/ResourceManagement/Azure/Azure.sln | 58 + .../Azure/Microsoft.Azure.Management/Azure.cs | 277 ++ .../Microsoft.Azure.Management.xproj | 21 + .../Properties/AssemblyInfo.cs | 19 + .../Microsoft.Azure.Management/project.json | 17 + .../Microsoft.Azure/Microsoft.Azure.xproj | 19 + .../Azure/Microsoft.Azure/project.json | 45 + .../Samples/ARMTemplate/TemplateValue.json | 72 + .../Azure/Samples/DeployUsingArmTemplate.cs | 105 + .../Azure/Samples/ListVirtualMachineImages.cs | 82 + .../Azure/Samples/ManageAvailabilitySet.cs | 193 + .../Azure/Samples/ManageResource.cs | 129 + .../Azure/Samples/ManageResourceGroup.cs | 126 + .../Azure/Samples/ManageStorageAccount.cs | 127 + .../Azure/Samples/ManageVirtualMachine.cs | 225 ++ .../Azure/Samples/Program.cs | 31 + .../Azure/Samples/Properties/AssemblyInfo.cs | 19 + .../Azure/Samples/Samples.xproj | 19 + .../Azure/Samples/Utilities.cs | 149 + .../Azure/Samples/project.json | 20 + src/ResourceManagement/Azure/global.json | 3 + src/ResourceManagement/Compute/Compute.sln | 40 + .../AvailabilitySetImpl.cs | 118 + .../AvailabilitySetsImpl.cs | 90 + .../ComputeManager.cs | 141 + .../DataDiskImpl.cs | 266 ++ .../AvailabilitySet/Definition/IDefinition.cs | 75 + .../Domain/AvailabilitySet/Update/IUpdate.cs | 24 + .../Domain/IAvailabilitySet.cs | 55 + .../Domain/IAvailabilitySets.cs | 25 + .../Domain/IVirtualMachine.cs | 173 + .../Domain/IVirtualMachineDataDisk.cs | 58 + .../Domain/IVirtualMachineImage.cs | 47 + .../Domain/IVirtualMachineImages.cs | 40 + .../Domain/IVirtualMachineImagesInSku.cs | 18 + .../Domain/IVirtualMachineOffer.cs | 29 + .../Domain/IVirtualMachineOffers.cs | 18 + .../Domain/IVirtualMachinePublisher.cs | 26 + .../Domain/IVirtualMachinePublishers.cs | 18 + .../Domain/IVirtualMachineSize.cs | 35 + .../Domain/IVirtualMachineSizes.cs | 18 + .../Domain/IVirtualMachineSku.cs | 32 + .../Domain/IVirtualMachineSkus.cs | 18 + .../Domain/IVirtualMachines.cs | 85 + .../InterfaceImpl/AvailabilitySetImpl.cs | 116 + .../InterfaceImpl/AvailabilitySetsImpl.cs | 81 + .../Domain/InterfaceImpl/DataDiskImpl.cs | 232 ++ .../InterfaceImpl/VirtualMachineImageImpl.cs | 88 + .../InterfaceImpl/VirtualMachineImagesImpl.cs | 42 + .../VirtualMachineImagesInSkuImpl.cs | 24 + .../InterfaceImpl/VirtualMachineImpl.cs | 929 +++++ .../InterfaceImpl/VirtualMachineOfferImpl.cs | 41 + .../InterfaceImpl/VirtualMachineOffersImpl.cs | 24 + .../VirtualMachinePublisherImpl.cs | 36 + .../VirtualMachinePublishersImpl.cs | 34 + .../InterfaceImpl/VirtualMachineSizeImpl.cs | 62 + .../InterfaceImpl/VirtualMachineSizesImpl.cs | 34 + .../InterfaceImpl/VirtualMachineSkuImpl.cs | 46 + .../InterfaceImpl/VirtualMachineSkusImpl.cs | 24 + .../InterfaceImpl/VirtualMachinesImpl.cs | 174 + .../VirtualMachine/Definition/IDefinition.cs | 554 +++ .../Domain/VirtualMachine/Update/IUpdate.cs | 140 + .../Definition/IDefinition.cs | 115 + .../VirtualMachineDataDisk/Update/IUpdate.cs | 48 + .../Update/IUpdateDefinition.cs | 115 + .../Generated/AvailabilitySetsOperations.cs | 977 +++++ .../AvailabilitySetsOperationsExtensions.cs | 220 ++ .../Generated/ComputeManagementClient.cs | 360 ++ .../Generated/IAvailabilitySetsOperations.cs | 143 + .../Generated/IComputeManagementClient.cs | 115 + .../Generated/IUsageOperations.cs | 64 + ...VirtualMachineExtensionImagesOperations.cs | 98 + .../IVirtualMachineExtensionsOperations.cs | 169 + .../IVirtualMachineImagesOperations.cs | 148 + .../IVirtualMachineScaleSetVMsOperations.cs | 438 +++ .../IVirtualMachineScaleSetsOperations.cs | 684 ++++ .../IVirtualMachineSizesOperations.cs | 43 + .../Generated/IVirtualMachinesOperations.cs | 570 +++ .../Models/AdditionalUnattendContent.cs | 82 + .../Generated/Models/ApiEntityReference.cs | 41 + .../Generated/Models/ApiError.cs | 71 + .../Generated/Models/ApiErrorBase.cs | 55 + .../Generated/Models/AvailabilitySetInner.cs | 68 + .../Models/AvailabilitySetListResultInner.cs | 41 + .../Generated/Models/BootDiagnostics.cs | 51 + .../Models/BootDiagnosticsInstanceView.cs | 51 + .../Generated/Models/CachingTypes.cs | 25 + .../Generated/Models/ComponentNames.cs | 21 + .../ComputeLongRunningOperationProperties.cs | 41 + .../Generated/Models/DataDisk.cs | 117 + .../Generated/Models/DataDiskImage.cs | 44 + .../Generated/Models/DiagnosticsProfile.cs | 39 + .../Generated/Models/DiskCreateOptionTypes.cs | 25 + .../Models/DiskEncryptionSettings.cs | 76 + .../Generated/Models/DiskInstanceView.cs | 47 + .../Generated/Models/HardwareProfile.cs | 75 + .../Generated/Models/ImageReference.cs | 69 + .../Generated/Models/InnerError.cs | 48 + .../Generated/Models/InstanceViewStatus.cs | 76 + .../Generated/Models/InstanceViewTypes.cs | 21 + .../Generated/Models/KeyVaultKeyReference.cs | 66 + .../Models/KeyVaultSecretReference.cs | 67 + .../Generated/Models/LinuxConfiguration.cs | 49 + .../Generated/Models/ListUsagesResultInner.cs | 51 + .../Models/NetworkInterfaceReferenceInner.cs | 44 + .../Generated/Models/NetworkProfile.cs | 39 + .../Generated/Models/OSDisk.cs | 132 + .../Generated/Models/OSDiskImage.cs | 50 + .../Generated/Models/OSProfile.cs | 91 + .../Generated/Models/OperatingSystemTypes.cs | 23 + .../Generated/Models/Page.cs | 46 + .../Generated/Models/Page1.cs | 46 + .../Generated/Models/PassNames.cs | 21 + .../Generated/Models/Plan.cs | 63 + .../Generated/Models/ProtocolTypes.cs | 23 + .../Generated/Models/PurchasePlan.cs | 77 + .../Generated/Models/SettingNames.cs | 23 + .../Generated/Models/Sku.cs | 55 + .../Generated/Models/SshConfiguration.cs | 41 + .../Generated/Models/SshPublicKey.cs | 56 + .../Generated/Models/StatusLevelTypes.cs | 25 + .../Generated/Models/StorageProfile.cs | 78 + .../Generated/Models/UpgradeMode.cs | 23 + .../Generated/Models/UpgradePolicy.cs | 41 + .../Generated/Models/Usage.cs | 81 + .../Generated/Models/UsageName.cs | 48 + .../Generated/Models/VaultCertificate.cs | 53 + .../Generated/Models/VaultSecretGroup.cs | 51 + .../Generated/Models/VirtualHardDisk.cs | 41 + .../Models/VirtualMachineAgentInstanceView.cs | 58 + .../VirtualMachineCaptureParametersInner.cs | 78 + .../VirtualMachineCaptureResultInner.cs | 43 + ...tualMachineExtensionHandlerInstanceView.cs | 60 + .../VirtualMachineExtensionImageInner.cs | 111 + .../Models/VirtualMachineExtensionInner.cs | 120 + .../VirtualMachineExtensionInstanceView.cs | 76 + .../Models/VirtualMachineImageInner.cs | 72 + .../VirtualMachineImageResourceInner.cs | 75 + .../Generated/Models/VirtualMachineInner.cs | 151 + .../Models/VirtualMachineInstanceView.cs | 97 + .../Models/VirtualMachineListResultInner.cs | 52 + .../VirtualMachineScaleSetExtensionInner.cs | 107 + .../VirtualMachineScaleSetExtensionProfile.cs | 43 + ...tualMachineScaleSetIPConfigurationInner.cs | 96 + .../Models/VirtualMachineScaleSetInner.cs | 92 + ...VirtualMachineScaleSetInstanceViewInner.cs | 59 + ...hineScaleSetInstanceViewStatusesSummary.cs | 42 + .../VirtualMachineScaleSetListResultInner.cs | 53 + ...rtualMachineScaleSetListSkusResultInner.cs | 54 + ...lMachineScaleSetListWithLinkResultInner.cs | 53 + ...achineScaleSetNetworkConfigurationInner.cs | 89 + .../VirtualMachineScaleSetNetworkProfile.cs | 42 + .../Models/VirtualMachineScaleSetOSDisk.cs | 107 + .../Models/VirtualMachineScaleSetOSProfile.cs | 93 + .../Models/VirtualMachineScaleSetSku.cs | 56 + .../VirtualMachineScaleSetSkuCapacity.cs | 67 + .../VirtualMachineScaleSetSkuScaleType.cs | 23 + .../VirtualMachineScaleSetStorageProfile.cs | 62 + ...rtualMachineScaleSetVMExtensionsSummary.cs | 49 + .../Models/VirtualMachineScaleSetVMInner.cs | 171 + .../VirtualMachineScaleSetVMInstanceIDs.cs | 42 + ...ualMachineScaleSetVMInstanceRequiredIDs.cs | 55 + ...rtualMachineScaleSetVMInstanceViewInner.cs | 99 + ...VirtualMachineScaleSetVMListResultInner.cs | 54 + .../Models/VirtualMachineScaleSetVMProfile.cs | 82 + .../Generated/Models/VirtualMachineSize.cs | 84 + .../VirtualMachineSizeListResultInner.cs | 41 + .../Models/VirtualMachineSizeTypes.cs | 81 + .../Models/VirtualMachineStatusCodeCount.cs | 51 + .../Generated/Models/WinRMConfiguration.cs | 40 + .../Generated/Models/WinRMListener.cs | 53 + .../Generated/Models/WindowsConfiguration.cs | 79 + .../Generated/UsageOperations.cs | 402 ++ .../Generated/UsageOperationsExtensions.cs | 89 + ...VirtualMachineExtensionImagesOperations.cs | 648 ++++ ...hineExtensionImagesOperationsExtensions.cs | 147 + .../VirtualMachineExtensionsOperations.cs | 715 ++++ ...alMachineExtensionsOperationsExtensions.cs | 267 ++ .../VirtualMachineImagesOperations.cs | 1042 +++++ ...irtualMachineImagesOperationsExtensions.cs | 227 ++ .../VirtualMachineScaleSetVMsOperations.cs | 2012 ++++++++++ ...lMachineScaleSetVMsOperationsExtensions.cs | 727 ++++ .../VirtualMachineScaleSetsOperations.cs | 3356 +++++++++++++++++ ...ualMachineScaleSetsOperationsExtensions.cs | 1109 ++++++ .../VirtualMachineSizesOperations.cs | 234 ++ ...VirtualMachineSizesOperationsExtensions.cs | 55 + .../Generated/VirtualMachinesOperations.cs | 2898 ++++++++++++++ .../VirtualMachinesOperationsExtensions.cs | 922 +++++ .../KnownLinuxVirtualMachineImage.cs | 20 + .../KnownWindowsVirtualMachineImage.cs | 18 + ...icrosoft.Azure.Management.V2.Compute.xproj | 18 + .../PowerState.cs | 16 + .../VirtualMachineImageEnumExtensions.cs | 38 + .../VirtualMachineImageImpl.cs | 89 + .../VirtualMachineImagesImpl.cs | 50 + .../VirtualMachineImagesInSkuImpl.cs | 35 + .../VirtualMachineImpl.cs | 1236 ++++++ .../VirtualMachineOfferImpl.cs | 41 + .../VirtualMachineOffersImpl.cs | 34 + .../VirtualMachinePublisherImpl.cs | 32 + .../VirtualMachinePublishersImpl.cs | 36 + .../VirtualMachineSizeImpl.cs | 73 + .../VirtualMachineSizesImpl.cs | 45 + .../VirtualMachineSkuImpl.cs | 46 + .../VirtualMachineSkusImpl.cs | 31 + .../VirtualMachinesImpl.cs | 178 + .../project.json | 48 + src/ResourceManagement/Compute/global.json | 3 + .../Domain/ILoadBalancer.cs | 28 + .../Domain/ILoadBalancers.cs | 25 + .../Domain/INetwork.cs | 36 + .../Domain/INetworkInterface.cs | 94 + .../Domain/INetworkInterfaces.cs | 25 + .../Domain/INetworkSecurityGroup.cs | 34 + .../Domain/INetworkSecurityGroups.cs | 25 + .../Domain/INetworkSecurityRule.cs | 50 + .../Domain/INetworks.cs | 25 + .../Domain/INicIpConfiguration.cs | 56 + .../Domain/IPublicIpAddress.cs | 42 + .../Domain/IPublicIpAddresses.cs | 25 + .../Domain/ISubnet.cs | 28 + .../Domain/ISupportsNetworkInterfaces.cs | 31 + .../Domain/InterfaceImpl/NetworkImpl.cs | 210 ++ .../InterfaceImpl/NetworkInterfaceImpl.cs | 521 +++ .../InterfaceImpl/NetworkInterfacesImpl.cs | 81 + .../InterfaceImpl/NetworkSecurityGroupImpl.cs | 102 + .../NetworkSecurityGroupsImpl.cs | 81 + .../InterfaceImpl/NetworkSecurityRuleImpl.cs | 584 +++ .../Domain/InterfaceImpl/NetworksImpl.cs | 81 + .../InterfaceImpl/NicIpConfigurationImpl.cs | 429 +++ .../InterfaceImpl/PublicIpAddressImpl.cs | 230 ++ .../InterfaceImpl/PublicIpAddressesImpl.cs | 81 + .../Domain/InterfaceImpl/SubnetImpl.cs | 134 + .../LoadBalancer/Definition/IDefinition.cs | 106 + .../Domain/LoadBalancer/Update/IUpdate.cs | 24 + .../Domain/Network/Definition/IDefinition.cs | 123 + .../Domain/Network/Update/IUpdate.cs | 110 + .../Definition/IDefinition.cs | 232 ++ .../Domain/NetworkInterface/Update/IUpdate.cs | 217 ++ .../Definition/IDefinition.cs | 65 + .../NetworkSecurityGroup/Update/IUpdate.cs | 54 + .../Definition/IDefinition.cs | 224 ++ .../NetworkSecurityRule/Update/IUpdate.cs | 182 + .../UpdateDefinition/IUpdateDefinition.cs | 208 + .../Definition/IDefinition.cs | 176 + .../NicIpConfiguration/Update/IUpdate.cs | 134 + .../UpdateDefinition/IUpdateDefinition.cs | 177 + .../PublicIpAddress/Definition/IDefinition.cs | 129 + .../Domain/PublicIpAddress/Update/IUpdate.cs | 104 + .../Domain/Subnet/Definition/IDefinition.cs | 77 + .../Domain/Subnet/Update/IUpdate.cs | 55 + .../UpdateDefinition/IUpdateDefinition.cs | 78 + .../ApplicationGatewaysOperations.cs | 1744 +++++++++ ...ApplicationGatewaysOperationsExtensions.cs | 527 +++ ...essRouteCircuitAuthorizationsOperations.cs | 1073 ++++++ ...rcuitAuthorizationsOperationsExtensions.cs | 349 ++ .../ExpressRouteCircuitPeeringsOperations.cs | 1073 ++++++ ...outeCircuitPeeringsOperationsExtensions.cs | 349 ++ .../ExpressRouteCircuitsOperations.cs | 2489 ++++++++++++ ...xpressRouteCircuitsOperationsExtensions.cs | 797 ++++ .../ExpressRouteServiceProvidersOperations.cs | 388 ++ ...uteServiceProvidersOperationsExtensions.cs | 87 + .../IApplicationGatewaysOperations.cs | 335 ++ ...essRouteCircuitAuthorizationsOperations.cs | 216 ++ .../IExpressRouteCircuitPeeringsOperations.cs | 216 ++ .../IExpressRouteCircuitsOperations.cs | 494 +++ ...IExpressRouteServiceProvidersOperations.cs | 63 + .../Generated/ILoadBalancersOperations.cs | 240 ++ .../ILocalNetworkGatewaysOperations.cs | 201 + .../Generated/INetworkInterfacesOperations.cs | 484 +++ .../Generated/INetworkManagementClient.cs | 188 + .../INetworkSecurityGroupsOperations.cs | 244 ++ .../Generated/IPublicIPAddressesOperations.cs | 242 ++ .../Generated/IRouteTablesOperations.cs | 236 ++ .../Generated/IRoutesOperations.cs | 214 ++ .../Generated/ISecurityRulesOperations.cs | 216 ++ .../Generated/ISubnetsOperations.cs | 215 ++ .../Generated/IUsagesOperations.cs | 64 + ...tualNetworkGatewayConnectionsOperations.cs | 354 ++ .../IVirtualNetworkGatewaysOperations.cs | 294 ++ .../IVirtualNetworkPeeringsOperations.cs | 216 ++ .../Generated/IVirtualNetworksOperations.cs | 242 ++ .../Generated/LoadBalancersOperations.cs | 1376 +++++++ .../LoadBalancersOperationsExtensions.cs | 373 ++ .../LocalNetworkGatewaysOperations.cs | 1031 +++++ ...ocalNetworkGatewaysOperationsExtensions.cs | 313 ++ .../Generated/Models/AddressSpace.cs | 42 + ...onGatewayAuthenticationCertificateInner.cs | 75 + .../ApplicationGatewayBackendAddress.cs | 49 + ...plicationGatewayBackendAddressPoolInner.cs | 82 + ...licationGatewayBackendHttpSettingsInner.cs | 119 + .../ApplicationGatewayCookieBasedAffinity.cs | 20 + ...tionGatewayFrontendIPConfigurationInner.cs | 104 + .../ApplicationGatewayFrontendPortInner.cs | 74 + .../ApplicationGatewayHttpListenerInner.cs | 121 + .../ApplicationGatewayIPConfigurationInner.cs | 77 + .../Models/ApplicationGatewayInner.cs | 190 + .../ApplicationGatewayListResultInner.cs | 50 + .../ApplicationGatewayOperationalState.cs | 22 + .../Models/ApplicationGatewayPathRuleInner.cs | 92 + .../Models/ApplicationGatewayProbeInner.cs | 116 + .../Models/ApplicationGatewayProtocol.cs | 20 + ...plicationGatewayRequestRoutingRuleInner.cs | 112 + ...pplicationGatewayRequestRoutingRuleType.cs | 20 + .../Generated/Models/ApplicationGatewaySku.cs | 61 + .../Models/ApplicationGatewaySkuName.cs | 21 + .../ApplicationGatewaySslCertificateInner.cs | 90 + .../Models/ApplicationGatewaySslPolicy.cs | 42 + .../Models/ApplicationGatewaySslProtocol.cs | 21 + .../Models/ApplicationGatewayTier.cs | 19 + .../ApplicationGatewayUrlPathMapInner.cs | 93 + .../Models/AuthorizationListResultInner.cs | 52 + .../Models/AuthorizationUseStatus.cs | 20 + .../Models/AzureAsyncOperationResult.cs | 54 + .../Models/BackendAddressPoolInner.cs | 91 + .../Generated/Models/BgpSettings.cs | 56 + .../Models/ConnectionResetSharedKeyInner.cs | 39 + .../Models/ConnectionSharedKeyInner.cs | 40 + .../Models/ConnectionSharedKeyResultInner.cs | 42 + .../Generated/Models/DhcpOptions.cs | 42 + .../Models/DnsNameAvailabilityResultInner.cs | 41 + .../Models/EffectiveNetworkSecurityGroup.cs | 57 + ...ffectiveNetworkSecurityGroupAssociation.cs | 50 + ...tiveNetworkSecurityGroupListResultInner.cs | 51 + .../Models/EffectiveNetworkSecurityRule.cs | 134 + .../Generated/Models/EffectiveRoute.cs | 92 + .../Models/EffectiveRouteListResultInner.cs | 50 + .../Generated/Models/EffectiveRouteSource.cs | 22 + .../Generated/Models/EffectiveRouteState.cs | 20 + .../Generated/Models/Error.cs | 58 + .../Generated/Models/ErrorDetails.cs | 46 + .../Models/ExpressRouteCircuitArpTable.cs | 65 + .../ExpressRouteCircuitAuthorizationInner.cs | 86 + .../Models/ExpressRouteCircuitInner.cs | 144 + .../ExpressRouteCircuitListResultInner.cs | 51 + ...rcuitPeeringAdvertisedPublicPrefixState.cs | 23 + .../ExpressRouteCircuitPeeringConfig.cs | 73 + .../Models/ExpressRouteCircuitPeeringInner.cs | 190 + ...pressRouteCircuitPeeringListResultInner.cs | 52 + .../Models/ExpressRouteCircuitPeeringState.cs | 20 + .../Models/ExpressRouteCircuitPeeringType.cs | 21 + .../Models/ExpressRouteCircuitRoutesTable.cs | 73 + .../ExpressRouteCircuitRoutesTableSummary.cs | 80 + ...ssRouteCircuitServiceProviderProperties.cs | 59 + .../Models/ExpressRouteCircuitSku.cs | 59 + .../Models/ExpressRouteCircuitSkuFamily.cs | 20 + .../Models/ExpressRouteCircuitSkuTier.cs | 20 + .../Models/ExpressRouteCircuitStatsInner.cs | 66 + ...essRouteCircuitsArpTableListResultInner.cs | 51 + ...RouteCircuitsRoutesTableListResultInner.cs | 51 + ...rcuitsRoutesTableSummaryListResultInner.cs | 51 + ...ssRouteServiceProviderBandwidthsOffered.cs | 49 + .../ExpressRouteServiceProviderInner.cs | 61 + ...ressRouteServiceProviderListResultInner.cs | 51 + .../Models/FrontendIPConfigurationInner.cs | 140 + .../Generated/Models/IPAllocationMethod.cs | 20 + .../Generated/Models/IPConfigurationInner.cs | 102 + .../Generated/Models/IPVersion.cs | 20 + .../Generated/Models/InboundNatPoolInner.cs | 151 + .../Generated/Models/InboundNatRuleInner.cs | 165 + .../Generated/Models/LoadBalancerInner.cs | 125 + .../Models/LoadBalancerListResultInner.cs | 51 + .../Models/LoadBalancingRuleInner.cs | 199 + .../Generated/Models/LoadDistribution.cs | 21 + .../Models/LocalNetworkGatewayInner.cs | 90 + .../LocalNetworkGatewayListResultInner.cs | 51 + .../Models/NetworkInterfaceDnsSettings.cs | 77 + .../NetworkInterfaceIPConfigurationInner.cs | 141 + .../Generated/Models/NetworkInterfaceInner.cs | 126 + .../Models/NetworkInterfaceListResultInner.cs | 51 + .../Models/NetworkOperationStatus.cs | 21 + .../Models/NetworkSecurityGroupInner.cs | 99 + .../NetworkSecurityGroupListResultInner.cs | 50 + .../Generated/Models/OutboundNatRuleInner.cs | 106 + .../Generated/Models/Page.cs | 46 + .../Generated/Models/ProbeInner.cs | 158 + .../Generated/Models/ProbeProtocol.cs | 20 + .../Generated/Models/ProcessorArchitecture.cs | 20 + .../Models/PublicIPAddressDnsSettings.cs | 77 + .../Generated/Models/PublicIPAddressInner.cs | 121 + .../Models/PublicIPAddressListResultInner.cs | 51 + .../Generated/Models/RouteInner.cs | 110 + .../Generated/Models/RouteListResultInner.cs | 48 + .../Generated/Models/RouteNextHopType.cs | 23 + .../Generated/Models/RouteTableInner.cs | 69 + .../Models/RouteTableListResultInner.cs | 49 + .../Generated/Models/SecurityRuleAccess.cs | 20 + .../Generated/Models/SecurityRuleDirection.cs | 20 + .../Generated/Models/SecurityRuleInner.cs | 205 + .../Models/SecurityRuleListResultInner.cs | 52 + .../Generated/Models/SecurityRuleProtocol.cs | 21 + .../ServiceProviderProvisioningState.cs | 22 + .../Generated/Models/SubnetInner.cs | 100 + .../Generated/Models/SubnetListResultInner.cs | 49 + .../Generated/Models/TransportProtocol.cs | 20 + .../Generated/Models/Usage.cs | 83 + .../Generated/Models/UsageName.cs | 49 + .../Generated/Models/UsagesListResultInner.cs | 48 + .../VirtualNetworkGatewayConnectionInner.cs | 166 + ...NetworkGatewayConnectionListResultInner.cs | 52 + .../VirtualNetworkGatewayConnectionStatus.cs | 22 + .../VirtualNetworkGatewayConnectionType.cs | 22 + ...rtualNetworkGatewayIPConfigurationInner.cs | 95 + .../Models/VirtualNetworkGatewayInner.cs | 145 + .../VirtualNetworkGatewayListResultInner.cs | 51 + .../Models/VirtualNetworkGatewaySku.cs | 61 + .../Models/VirtualNetworkGatewaySkuName.cs | 21 + .../Models/VirtualNetworkGatewaySkuTier.cs | 21 + .../Models/VirtualNetworkGatewayType.cs | 20 + .../Generated/Models/VirtualNetworkInner.cs | 101 + .../Models/VirtualNetworkListResultInner.cs | 51 + .../Models/VirtualNetworkPeeringInner.cs | 134 + .../VirtualNetworkPeeringListResultInner.cs | 51 + .../Models/VirtualNetworkPeeringState.cs | 21 + .../Models/VpnClientConfiguration.cs | 62 + .../Generated/Models/VpnClientParameters.cs | 42 + .../VpnClientRevokedCertificateInner.cs | 76 + .../Models/VpnClientRootCertificateInner.cs | 75 + .../Generated/Models/VpnType.cs | 20 + .../Generated/NetworkInterfacesOperations.cs | 2764 ++++++++++++++ .../NetworkInterfacesOperationsExtensions.cs | 763 ++++ .../Generated/NetworkManagementClient.cs | 615 +++ .../NetworkManagementClientExtensions.cs | 63 + .../NetworkSecurityGroupsOperations.cs | 1380 +++++++ ...tworkSecurityGroupsOperationsExtensions.cs | 381 ++ .../Generated/PublicIPAddressesOperations.cs | 1378 +++++++ .../PublicIPAddressesOperationsExtensions.cs | 377 ++ .../Generated/RouteTablesOperations.cs | 1374 +++++++ .../RouteTablesOperationsExtensions.cs | 369 ++ .../Generated/RoutesOperations.cs | 1073 ++++++ .../Generated/RoutesOperationsExtensions.cs | 341 ++ .../Generated/SecurityRulesOperations.cs | 1075 ++++++ .../SecurityRulesOperationsExtensions.cs | 345 ++ .../Generated/SubnetsOperations.cs | 1074 ++++++ .../Generated/SubnetsOperationsExtensions.cs | 341 ++ .../Generated/UsagesOperations.cs | 402 ++ .../Generated/UsagesOperationsExtensions.cs | 89 + ...tualNetworkGatewayConnectionsOperations.cs | 1720 +++++++++ ...kGatewayConnectionsOperationsExtensions.cs | 571 +++ .../VirtualNetworkGatewaysOperations.cs | 1477 ++++++++ ...tualNetworkGatewaysOperationsExtensions.cs | 469 +++ .../VirtualNetworkPeeringsOperations.cs | 1069 ++++++ ...tualNetworkPeeringsOperationsExtensions.cs | 341 ++ .../Generated/VirtualNetworksOperations.cs | 1374 +++++++ .../VirtualNetworksOperationsExtensions.cs | 369 ++ ...icrosoft.Azure.Management.V2.Network.xproj | 21 + .../MissingClasses.cs | 9 + .../NetworkImpl.cs | 197 + .../NetworkInterfaceImpl.cs | 464 +++ .../NetworkInterfacesImpl.cs | 105 + .../NetworkManager.cs | 185 + .../NetworkSecurityGroupImpl.cs | 162 + .../NetworkSecurityGroupsImpl.cs | 110 + .../NetworkSecurityRuleImpl.cs | 246 ++ .../NetworksImpl.cs | 130 + .../NicIpConfigurationImpl.cs | 389 ++ .../PublicIpAddressImpl.cs | 227 ++ .../PublicIpAddressesImpl.cs | 113 + .../SubnetImpl.cs | 101 + .../project.json | 46 + src/ResourceManagement/Network/Network.sln | 28 + src/ResourceManagement/Network/global.json | 3 + .../ApplicationTokenCredentials.cs | 93 + .../AzureEnvironment.cs | 69 + .../Core/AzureConfigurable.cs | 49 + .../Core/ChildListFlattener.cs | 115 + .../Core/ChildResource.cs | 36 + .../Core/CreatableWrappers.cs | 11 + .../Core/DAG/CreatorTaskGroup.cs | 16 + .../Core/DAG/CreatorTaskItem.cs | 36 + .../Core/DAG/DAGNode.cs | 90 + .../Core/DAG/DAGraph.cs | 130 + .../Core/DAG/Exceptions.cs | 25 + .../Core/DAG/Graph.cs | 75 + .../Core/DAG/ITaskItem.cs | 12 + .../Core/DAG/Node.cs | 54 + .../Core/DAG/TaskGroup.cs | 20 + .../Core/DAG/TaskGroupBase.cs | 128 + .../Core/EnumNameAttribute.cs | 47 + .../Core/GroupableResource.cs | 119 + .../Core/GroupableResources.cs | 64 + .../Core/IAzureConfigurable.cs | 13 + .../Core/IWrapper.cs | 7 + .../Core/Indexable.cs | 17 + .../Core/IndexableWrapper.cs | 24 + .../Core/ManagerBase.cs | 24 + .../Core/PagedList.cs | 188 + .../Core/ReadableWrappers.cs | 25 + .../Core/Resource.cs | 71 + .../Core/ResourceActions/Creatable.cs | 118 + .../ResourceActions/CreatableUpdatable.cs | 36 + .../ResourceActions/IndexableRefreshable.cs | 19 + .../IndexableRefreshableWrapper.cs | 20 + .../Core/ResourceBase.cs | 256 ++ .../Core/ResourceUtils.cs | 51 + .../Core/RestClient/DelegatingHandlerBase.cs | 33 + .../HttpLoggingDelegatingHandler.cs | 95 + .../Core/RestClient/RestClient.cs | 173 + .../RestClient/UserAgentDelegatingHandler.cs | 34 + .../Core/SubResource.cs | 33 + .../Core/WrappedPage.cs | 38 + .../Core/Wrapper.cs | 15 + .../Deployment/DeploymentExportResultImpl.cs | 33 + .../Deployment/DeploymentImpl.cs | 480 +++ .../Deployment/DeploymentOperationImpl.cs | 111 + .../Deployment/DeploymentOperationsImpl.cs | 58 + .../Deployment/DeploymentsImpl.cs | 150 + .../ChildResource/Definition/IDefinition.cs | 19 + .../Core/ChildResource/Update/IUpdate.cs | 19 + .../Core/ChildResourceActions/IAttachable.cs | 24 + .../Core/ChildResourceActions/ISettable.cs | 29 + .../CollectionActions/ISupportsCreating.cs | 37 + .../CollectionActions/ISupportsDeleting.cs | 34 + .../ISupportsDeletingByGroup.cs | 36 + .../ISupportsGettingByGroup.cs | 40 + .../CollectionActions/ISupportsGettingById.cs | 36 + .../ISupportsGettingByName.cs | 36 + .../CollectionActions/ISupportsListing.cs | 28 + .../ISupportsListingByGroup.cs | 39 + .../ISupportsListingByRegion.cs | 37 + .../Definition/IDefinition.cs | 78 + .../Domain/Core/IChildResource.cs | 22 + .../Domain/Core/IGroupableResource.cs | 20 + .../Domain/Core/IResource.cs | 39 + .../Core/Resource/Definition/IDefinition.cs | 58 + .../Domain/Core/Resource/Update/IUpdate.cs | 42 + .../Domain/Core/ResourceActions/IAppliable.cs | 37 + .../Domain/Core/ResourceActions/ICreatable.cs | 38 + .../Domain/Core/ResourceActions/IIndexable.cs | 19 + .../Core/ResourceActions/IRefreshable.cs | 24 + .../Domain/Core/ResourceActions/IUpdatable.cs | 28 + .../Deployment/Definition/IDefinition.cs | 136 + .../Domain/Deployment/Update/IUpdate.cs | 102 + .../Domain/Feature/IInResourceProvider.cs | 28 + .../GenericResource/Definition/IDefinition.cs | 138 + .../Domain/GenericResource/Update/IUpdate.cs | 85 + .../Domain/IDeployment.cs | 80 + .../Domain/IDeploymentExportResult.cs | 26 + .../Domain/IDeploymentOperation.cs | 42 + .../Domain/IDeploymentOperations.cs | 20 + .../Domain/IDeployments.cs | 35 + .../Domain/IFeature.cs | 31 + .../Domain/IFeatures.cs | 27 + .../Domain/IGenericResource.cs | 43 + .../Domain/IGenericResources.cs | 67 + .../Domain/ILocation.cs | 37 + .../Domain/IProvider.cs | 33 + .../Domain/IProviders.cs | 34 + .../Domain/IResourceConnector.cs | 30 + .../Domain/IResourceGroup.cs | 49 + .../Domain/IResourceGroupExportResult.cs | 29 + .../Domain/IResourceGroups.cs | 30 + .../Domain/ISubscription.cs | 40 + .../Domain/ISubscriptions.cs | 20 + .../Domain/ITenant.cs | 25 + .../Domain/ITenants.cs | 19 + .../ResourceGroup/Definition/IDefinition.cs | 40 + .../Domain/ResourceGroup/Update/IUpdate.cs | 24 + .../Feature/FeatureImpl.cs | 39 + .../Feature/FeaturesImpl.cs | 40 + .../DeploymentOperationsOperations.cs | 626 +++ ...eploymentOperationsOperationsExtensions.cs | 147 + .../Generated/DeploymentsOperations.cs | 1838 +++++++++ .../DeploymentsOperationsExtensions.cs | 464 +++ .../Generated/FeatureClient.cs | 307 ++ .../Generated/FeaturesOperations.cs | 1120 ++++++ .../Generated/FeaturesOperationsExtensions.cs | 235 ++ .../IDeploymentOperationsOperations.cs | 98 + .../Generated/IDeploymentsOperations.cs | 292 ++ .../Generated/IFeatureClient.cs | 74 + .../Generated/IFeaturesOperations.cs | 157 + .../Generated/IProvidersOperations.cs | 138 + .../Generated/IResourceGroupsOperations.cs | 276 ++ .../Generated/IResourceManagementClient.cs | 99 + .../Generated/IResourcesOperations.cs | 251 ++ .../Generated/ISubscriptionClient.cs | 72 + .../Generated/ISubscriptionsOperations.cs | 105 + .../Generated/ITagsOperations.cs | 149 + .../Generated/ITenantsOperations.cs | 61 + .../Generated/Models/AliasPathType.cs | 44 + .../Generated/Models/AliasType.cs | 44 + .../Generated/Models/BasicDependency.cs | 55 + .../Generated/Models/DebugSetting.cs | 36 + .../Generated/Models/Dependency.cs | 63 + .../Models/DeploymentExportResultInner.cs | 38 + .../Models/DeploymentExtendedFilter.cs | 40 + .../Models/DeploymentExtendedFilterInner.cs | 41 + .../Models/DeploymentExtendedInner.cs | 72 + .../Generated/Models/DeploymentInner.cs | 52 + .../Models/DeploymentListResultInner.cs | 48 + .../Generated/Models/DeploymentMode.cs | 23 + .../Models/DeploymentOperationInner.cs | 55 + .../Models/DeploymentOperationProperties.cs | 99 + .../DeploymentOperationsListResultInner.cs | 50 + .../Generated/Models/DeploymentProperties.cs | 109 + .../Models/DeploymentPropertiesExtended.cs | 164 + .../Models/DeploymentValidateResultInner.cs | 67 + .../Models/ExportTemplateRequestInner.cs | 55 + .../FeatureOperationsListResultInner.cs | 50 + .../Generated/Models/FeatureProperties.cs | 40 + .../Generated/Models/FeatureResultInner.cs | 64 + .../Generated/Models/GenericResourceFilter.cs | 55 + .../Models/GenericResourceFilterInner.cs | 55 + .../Generated/Models/GenericResourceInner.cs | 81 + .../Generated/Models/HttpMessage.cs | 36 + .../Generated/Models/Identity.cs | 58 + .../Generated/Models/Location.cs | 85 + .../Models/LocationListResultInner.cs | 39 + .../Generated/Models/Page.cs | 46 + .../Generated/Models/Page1.cs | 46 + .../Generated/Models/ParametersLink.cs | 62 + .../Generated/Models/Plan.cs | 63 + .../Generated/Models/ProviderInner.cs | 66 + .../Models/ProviderListResultInner.cs | 48 + .../Generated/Models/ProviderResourceType.cs | 74 + .../Models/ResourceGroupExportResultInner.cs | 59 + .../Generated/Models/ResourceGroupFilter.cs | 47 + .../Models/ResourceGroupFilterInner.cs | 47 + .../Generated/Models/ResourceGroupInner.cs | 88 + .../Models/ResourceGroupListResultInner.cs | 73 + .../Models/ResourceGroupProperties.cs | 40 + .../Generated/Models/ResourceIdentityType.cs | 21 + .../Models/ResourceListResultInner.cs | 61 + .../ResourceManagementErrorWithDetails.cs | 90 + ...ourceProviderOperationDisplayProperties.cs | 73 + .../Models/ResourcesMoveInfoInner.cs | 48 + .../Generated/Models/Sku.cs | 79 + .../Generated/Models/SubscriptionInner.cs | 76 + .../Models/SubscriptionListResultInner.cs | 63 + .../Generated/Models/SubscriptionPolicies.cs | 49 + .../Generated/Models/TagCount.cs | 47 + .../Generated/Models/TagDetailsInner.cs | 63 + .../Generated/Models/TagValueInner.cs | 55 + .../Generated/Models/TagsListResultInner.cs | 61 + .../Generated/Models/TargetResource.cs | 55 + .../Generated/Models/TemplateLink.cs | 62 + .../Generated/Models/TenantIdDescription.cs | 47 + .../Generated/Models/TenantListResultInner.cs | 61 + .../Generated/ProvidersOperations.cs | 958 +++++ .../ProvidersOperationsExtensions.cs | 207 + .../Generated/ResourceGroupsOperations.cs | 1934 ++++++++++ .../ResourceGroupsOperationsExtensions.cs | 423 +++ .../Generated/ResourceManagementClient.cs | 337 ++ .../Generated/ResourcesOperations.cs | 1492 ++++++++ .../ResourcesOperationsExtensions.cs | 418 ++ .../Generated/SubscriptionClient.cs | 306 ++ .../Generated/SubscriptionsOperations.cs | 735 ++++ .../SubscriptionsOperationsExtensions.cs | 151 + .../Generated/TagsOperations.cs | 1110 ++++++ .../Generated/TagsOperationsExtensions.cs | 225 ++ .../Generated/TenantsOperations.cs | 381 ++ .../Generated/TenantsOperationsExtensions.cs | 83 + .../GenericResource/GenericResourceImpl.cs | 223 ++ .../GenericResource/GenericResourcesImpl.cs | 129 + .../LocationInner.cs | 6 + ...crosoft.Azure.Management.V2.Resource.xproj | 18 + .../MissingInners.cs | 9 + .../Provider/ProviderImpl.cs | 39 + .../Provider/ProvidersImpl.cs | 57 + .../Region.cs | 42 + .../ResourceGroupExportResultImpl.cs | 40 + .../ResourceGroup/ResourceGroupImpl.cs | 194 + .../ResourceGroup/ResourceGroupsImpl.cs | 82 + .../ResourceGroupExportTemplateOptions.cs | 15 + .../ResourceManager2.cs | 270 ++ .../ResourceNamer.cs | 82 + .../Subscription/SubscriptionImpl.cs | 59 + .../Subscription/SubscriptionsImpl.cs | 51 + .../Tenant/TenantImpl.cs | 30 + .../Tenant/TenantsImpl.cs | 40 + .../project.json | 51 + src/ResourceManagement/Resource/Resource.sln | 22 + src/ResourceManagement/Resource/global.json | 3 + .../Domain/IStorageAccount.cs | 89 + .../Domain/IStorageAccounts.cs | 32 + .../Domain/IStorageUsage.cs | 32 + .../Domain/IUsages.cs | 18 + .../StorageAccount/Definition/IDefinition.cs | 155 + .../Domain/StorageAccount/Update/IUpdate.cs | 107 + .../Generated/IStorageAccountsOperations.cs | 304 ++ .../Generated/IStorageManagementClient.cs | 80 + .../Generated/IUsageOperations.cs | 40 + .../Generated/Models/AccessTier.cs | 23 + .../Generated/Models/AccountStatus.cs | 23 + .../CheckNameAvailabilityResultInner.cs | 68 + .../Generated/Models/CustomDomain.cs | 66 + .../Generated/Models/Encryption.cs | 54 + .../Generated/Models/EncryptionService.cs | 58 + .../Generated/Models/EncryptionServices.cs | 39 + .../Generated/Models/Endpoints.cs | 64 + .../Generated/Models/KeyPermission.cs | 23 + .../Generated/Models/Kind.cs | 23 + .../Generated/Models/Page.cs | 46 + .../Generated/Models/ProvisioningState.cs | 25 + .../Generated/Models/Reason.cs | 23 + .../Generated/Models/Sku.cs | 65 + .../Generated/Models/SkuName.cs | 29 + .../Generated/Models/SkuTier.cs | 23 + ...eAccountCheckNameAvailabilityParameters.cs | 62 + .../StorageAccountCreateParametersInner.cs | 157 + .../Generated/Models/StorageAccountInner.cs | 217 ++ .../Generated/Models/StorageAccountKey.cs | 57 + .../StorageAccountListKeysResultInner.cs | 42 + .../Models/StorageAccountListResultInner.cs | 42 + .../StorageAccountRegenerateKeyParameters.cs | 49 + .../StorageAccountUpdateParametersInner.cs | 122 + .../Generated/Models/Usage.cs | 70 + .../Generated/Models/UsageListResultInner.cs | 40 + .../Generated/Models/UsageName.cs | 49 + .../Generated/Models/UsageUnit.cs | 31 + .../Generated/StorageAccountsOperations.cs | 1896 ++++++++++ .../StorageAccountsOperationsExtensions.cs | 486 +++ .../Generated/StorageManagementClient.cs | 318 ++ .../Generated/UsageOperations.cs | 219 ++ .../Generated/UsageOperationsExtensions.cs | 51 + ...icrosoft.Azure.Management.V2.Storage.xproj | 22 + .../StorageAccount/AccountStatuses.cs | 24 + .../CheckNameAvailabilityResult.cs | 38 + .../StorageAccount/PublicEndpoints.cs | 23 + .../StorageAccount/StorageAccountImpl.cs | 332 ++ .../StorageAccount/StorageAccountsImpl.cs | 136 + .../StorageManager.cs | 142 + .../Usage/UsageImpl.cs | 43 + .../Usage/UsagesImpl.cs | 35 + .../project.json | 46 + src/ResourceManagement/Storage/Storage.sln | 28 + src/ResourceManagement/Storage/global.json | 3 + src/ResourceManagement/gulpfile.js | 151 + src/ResourceManagement/package.json | 24 + test_on_linux.sh | 23 + tools/AzCopy/AzCopy.exe | Bin 0 -> 261792 bytes tools/AzCopy/Microsoft.Data.Edm.dll | Bin 0 -> 659120 bytes tools/AzCopy/Microsoft.Data.OData.dll | Bin 0 -> 1520808 bytes .../AzCopy/Microsoft.Data.Services.Client.dll | Bin 0 -> 667304 bytes ...soft.WindowsAzure.Storage.DataMovement.dll | Bin 0 -> 184480 bytes ...WindowsAzure.Storage.TableDataMovement.dll | Bin 0 -> 208032 bytes .../AzCopy/Microsoft.WindowsAzure.Storage.dll | Bin 0 -> 1045128 bytes tools/AzCopy/Newtonsoft.Json.dll | Bin 0 -> 513536 bytes tools/AzCopy/System.Spatial.dll | Bin 0 -> 118448 bytes tools/CopyGenerated.proj | 52 + tools/CopySourceToTools.bat | 11 + tools/DisableTestRunParallel.cs | 7 + tools/Fix-ADLGeneratedCode.ps1 | Bin 0 -> 14676 bytes tools/Get-TestMode.ps1 | 1 + tools/GlobalFilters.xml | 156 + tools/IncrementVersion.ps1 | 106 + tools/Library.Settings.targets | 141 + tools/MSSharedLibKey.snk | Bin 0 -> 160 bytes .../FilterOutAutoRestLibraries.cs | 125 + .../Microsoft.WindowsAzure.Build.Tasks.csproj | 59 + .../Microsoft.WindowsAzure.Build.Tasks.sln | 22 + .../Properties/AssemblyInfo.cs | 33 + .../RegexReplacementTask.cs | 86 + .../StrongNameUtility.cs | 84 + .../ValidateStrongNameSignatureTask.cs | 147 + tools/NuGet.exe | Bin 0 -> 3957976 bytes tools/RunCredScan.ps1 | 54 + tools/Set-TestMode.ps1 | 23 + tools/Sync-NuspecDependencies.ps1 | 123 + tools/Test.Dependencies.target | 91 + tools/autorest.composite.gen.cmd | 20 + tools/autorest.gen.cmd | 22 + tools/nuget.targets | 138 + tools/references.net40.props | 49 + tools/references.net45.props | 34 + tools/references.portable.props | 32 + tools/xunit.runner.msbuild.dll | Bin 0 -> 25088 bytes tools/xunit.runner.utility.dll | Bin 0 -> 47104 bytes 797 files changed, 124202 insertions(+) create mode 100644 .gitattributes create mode 100644 .gitignore create mode 100644 .travis.yml create mode 100644 Documentation/AuthConflictsBetweenSDKs.md create mode 100644 Documentation/README.md create mode 100644 LICENSE.txt create mode 100644 NuGet.Config create mode 100644 README.md create mode 100644 appveyor.yml create mode 100644 build.proj create mode 100644 global.json create mode 100644 src/ResourceManagement/Azure/Azure.Tests/AvailabilitySetsTests.cs create mode 100644 src/ResourceManagement/Azure/Azure.Tests/AzureTests.xproj create mode 100644 src/ResourceManagement/Azure/Azure.Tests/DeploymentTests.cs create mode 100644 src/ResourceManagement/Azure/Azure.Tests/GenericResourcesTests.cs create mode 100644 src/ResourceManagement/Azure/Azure.Tests/NSGTests.cs create mode 100644 src/ResourceManagement/Azure/Azure.Tests/NetworkInterfaceTests.cs create mode 100644 src/ResourceManagement/Azure/Azure.Tests/NetworkTests.cs create mode 100644 src/ResourceManagement/Azure/Azure.Tests/Properties/AssemblyInfo.cs create mode 100644 src/ResourceManagement/Azure/Azure.Tests/ProvidersTests.cs create mode 100644 src/ResourceManagement/Azure/Azure.Tests/PublicIpAddressTests.cs create mode 100644 src/ResourceManagement/Azure/Azure.Tests/StorageAccountsTests.cs create mode 100644 src/ResourceManagement/Azure/Azure.Tests/StorageUsagesTests.cs create mode 100644 src/ResourceManagement/Azure/Azure.Tests/SubscriptionsTests.cs create mode 100644 src/ResourceManagement/Azure/Azure.Tests/TenantsTests.cs create mode 100644 src/ResourceManagement/Azure/Azure.Tests/TestHelper.cs create mode 100644 src/ResourceManagement/Azure/Azure.Tests/VirtualMachineTests.cs create mode 100644 src/ResourceManagement/Azure/Azure.Tests/VirtualNetworkTests.cs create mode 100644 src/ResourceManagement/Azure/Azure.Tests/project.json create mode 100644 src/ResourceManagement/Azure/Azure.sln create mode 100644 src/ResourceManagement/Azure/Microsoft.Azure.Management/Azure.cs create mode 100644 src/ResourceManagement/Azure/Microsoft.Azure.Management/Microsoft.Azure.Management.xproj create mode 100644 src/ResourceManagement/Azure/Microsoft.Azure.Management/Properties/AssemblyInfo.cs create mode 100644 src/ResourceManagement/Azure/Microsoft.Azure.Management/project.json create mode 100644 src/ResourceManagement/Azure/Microsoft.Azure/Microsoft.Azure.xproj create mode 100644 src/ResourceManagement/Azure/Microsoft.Azure/project.json create mode 100644 src/ResourceManagement/Azure/Samples/ARMTemplate/TemplateValue.json create mode 100644 src/ResourceManagement/Azure/Samples/DeployUsingArmTemplate.cs create mode 100644 src/ResourceManagement/Azure/Samples/ListVirtualMachineImages.cs create mode 100644 src/ResourceManagement/Azure/Samples/ManageAvailabilitySet.cs create mode 100644 src/ResourceManagement/Azure/Samples/ManageResource.cs create mode 100644 src/ResourceManagement/Azure/Samples/ManageResourceGroup.cs create mode 100644 src/ResourceManagement/Azure/Samples/ManageStorageAccount.cs create mode 100644 src/ResourceManagement/Azure/Samples/ManageVirtualMachine.cs create mode 100644 src/ResourceManagement/Azure/Samples/Program.cs create mode 100644 src/ResourceManagement/Azure/Samples/Properties/AssemblyInfo.cs create mode 100644 src/ResourceManagement/Azure/Samples/Samples.xproj create mode 100644 src/ResourceManagement/Azure/Samples/Utilities.cs create mode 100644 src/ResourceManagement/Azure/Samples/project.json create mode 100644 src/ResourceManagement/Azure/global.json create mode 100644 src/ResourceManagement/Compute/Compute.sln create mode 100644 src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/AvailabilitySetImpl.cs create mode 100644 src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/AvailabilitySetsImpl.cs create mode 100644 src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/ComputeManager.cs create mode 100644 src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/DataDiskImpl.cs create mode 100644 src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Domain/AvailabilitySet/Definition/IDefinition.cs create mode 100644 src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Domain/AvailabilitySet/Update/IUpdate.cs create mode 100644 src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Domain/IAvailabilitySet.cs create mode 100644 src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Domain/IAvailabilitySets.cs create mode 100644 src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Domain/IVirtualMachine.cs create mode 100644 src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Domain/IVirtualMachineDataDisk.cs create mode 100644 src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Domain/IVirtualMachineImage.cs create mode 100644 src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Domain/IVirtualMachineImages.cs create mode 100644 src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Domain/IVirtualMachineImagesInSku.cs create mode 100644 src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Domain/IVirtualMachineOffer.cs create mode 100644 src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Domain/IVirtualMachineOffers.cs create mode 100644 src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Domain/IVirtualMachinePublisher.cs create mode 100644 src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Domain/IVirtualMachinePublishers.cs create mode 100644 src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Domain/IVirtualMachineSize.cs create mode 100644 src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Domain/IVirtualMachineSizes.cs create mode 100644 src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Domain/IVirtualMachineSku.cs create mode 100644 src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Domain/IVirtualMachineSkus.cs create mode 100644 src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Domain/IVirtualMachines.cs create mode 100644 src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Domain/InterfaceImpl/AvailabilitySetImpl.cs create mode 100644 src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Domain/InterfaceImpl/AvailabilitySetsImpl.cs create mode 100644 src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Domain/InterfaceImpl/DataDiskImpl.cs create mode 100644 src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Domain/InterfaceImpl/VirtualMachineImageImpl.cs create mode 100644 src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Domain/InterfaceImpl/VirtualMachineImagesImpl.cs create mode 100644 src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Domain/InterfaceImpl/VirtualMachineImagesInSkuImpl.cs create mode 100644 src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Domain/InterfaceImpl/VirtualMachineImpl.cs create mode 100644 src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Domain/InterfaceImpl/VirtualMachineOfferImpl.cs create mode 100644 src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Domain/InterfaceImpl/VirtualMachineOffersImpl.cs create mode 100644 src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Domain/InterfaceImpl/VirtualMachinePublisherImpl.cs create mode 100644 src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Domain/InterfaceImpl/VirtualMachinePublishersImpl.cs create mode 100644 src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Domain/InterfaceImpl/VirtualMachineSizeImpl.cs create mode 100644 src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Domain/InterfaceImpl/VirtualMachineSizesImpl.cs create mode 100644 src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Domain/InterfaceImpl/VirtualMachineSkuImpl.cs create mode 100644 src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Domain/InterfaceImpl/VirtualMachineSkusImpl.cs create mode 100644 src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Domain/InterfaceImpl/VirtualMachinesImpl.cs create mode 100644 src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Domain/VirtualMachine/Definition/IDefinition.cs create mode 100644 src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Domain/VirtualMachine/Update/IUpdate.cs create mode 100644 src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Domain/VirtualMachineDataDisk/Definition/IDefinition.cs create mode 100644 src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Domain/VirtualMachineDataDisk/Update/IUpdate.cs create mode 100644 src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Domain/VirtualMachineDataDisk/Update/IUpdateDefinition.cs create mode 100644 src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/AvailabilitySetsOperations.cs create mode 100644 src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/AvailabilitySetsOperationsExtensions.cs create mode 100644 src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/ComputeManagementClient.cs create mode 100644 src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/IAvailabilitySetsOperations.cs create mode 100644 src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/IComputeManagementClient.cs create mode 100644 src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/IUsageOperations.cs create mode 100644 src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/IVirtualMachineExtensionImagesOperations.cs create mode 100644 src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/IVirtualMachineExtensionsOperations.cs create mode 100644 src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/IVirtualMachineImagesOperations.cs create mode 100644 src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/IVirtualMachineScaleSetVMsOperations.cs create mode 100644 src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/IVirtualMachineScaleSetsOperations.cs create mode 100644 src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/IVirtualMachineSizesOperations.cs create mode 100644 src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/IVirtualMachinesOperations.cs create mode 100644 src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/AdditionalUnattendContent.cs create mode 100644 src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/ApiEntityReference.cs create mode 100644 src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/ApiError.cs create mode 100644 src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/ApiErrorBase.cs create mode 100644 src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/AvailabilitySetInner.cs create mode 100644 src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/AvailabilitySetListResultInner.cs create mode 100644 src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/BootDiagnostics.cs create mode 100644 src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/BootDiagnosticsInstanceView.cs create mode 100644 src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/CachingTypes.cs create mode 100644 src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/ComponentNames.cs create mode 100644 src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/ComputeLongRunningOperationProperties.cs create mode 100644 src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/DataDisk.cs create mode 100644 src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/DataDiskImage.cs create mode 100644 src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/DiagnosticsProfile.cs create mode 100644 src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/DiskCreateOptionTypes.cs create mode 100644 src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/DiskEncryptionSettings.cs create mode 100644 src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/DiskInstanceView.cs create mode 100644 src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/HardwareProfile.cs create mode 100644 src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/ImageReference.cs create mode 100644 src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/InnerError.cs create mode 100644 src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/InstanceViewStatus.cs create mode 100644 src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/InstanceViewTypes.cs create mode 100644 src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/KeyVaultKeyReference.cs create mode 100644 src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/KeyVaultSecretReference.cs create mode 100644 src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/LinuxConfiguration.cs create mode 100644 src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/ListUsagesResultInner.cs create mode 100644 src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/NetworkInterfaceReferenceInner.cs create mode 100644 src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/NetworkProfile.cs create mode 100644 src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/OSDisk.cs create mode 100644 src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/OSDiskImage.cs create mode 100644 src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/OSProfile.cs create mode 100644 src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/OperatingSystemTypes.cs create mode 100644 src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/Page.cs create mode 100644 src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/Page1.cs create mode 100644 src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/PassNames.cs create mode 100644 src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/Plan.cs create mode 100644 src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/ProtocolTypes.cs create mode 100644 src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/PurchasePlan.cs create mode 100644 src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/SettingNames.cs create mode 100644 src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/Sku.cs create mode 100644 src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/SshConfiguration.cs create mode 100644 src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/SshPublicKey.cs create mode 100644 src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/StatusLevelTypes.cs create mode 100644 src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/StorageProfile.cs create mode 100644 src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/UpgradeMode.cs create mode 100644 src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/UpgradePolicy.cs create mode 100644 src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/Usage.cs create mode 100644 src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/UsageName.cs create mode 100644 src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/VaultCertificate.cs create mode 100644 src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/VaultSecretGroup.cs create mode 100644 src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/VirtualHardDisk.cs create mode 100644 src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/VirtualMachineAgentInstanceView.cs create mode 100644 src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/VirtualMachineCaptureParametersInner.cs create mode 100644 src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/VirtualMachineCaptureResultInner.cs create mode 100644 src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/VirtualMachineExtensionHandlerInstanceView.cs create mode 100644 src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/VirtualMachineExtensionImageInner.cs create mode 100644 src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/VirtualMachineExtensionInner.cs create mode 100644 src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/VirtualMachineExtensionInstanceView.cs create mode 100644 src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/VirtualMachineImageInner.cs create mode 100644 src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/VirtualMachineImageResourceInner.cs create mode 100644 src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/VirtualMachineInner.cs create mode 100644 src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/VirtualMachineInstanceView.cs create mode 100644 src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/VirtualMachineListResultInner.cs create mode 100644 src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/VirtualMachineScaleSetExtensionInner.cs create mode 100644 src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/VirtualMachineScaleSetExtensionProfile.cs create mode 100644 src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/VirtualMachineScaleSetIPConfigurationInner.cs create mode 100644 src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/VirtualMachineScaleSetInner.cs create mode 100644 src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/VirtualMachineScaleSetInstanceViewInner.cs create mode 100644 src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/VirtualMachineScaleSetInstanceViewStatusesSummary.cs create mode 100644 src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/VirtualMachineScaleSetListResultInner.cs create mode 100644 src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/VirtualMachineScaleSetListSkusResultInner.cs create mode 100644 src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/VirtualMachineScaleSetListWithLinkResultInner.cs create mode 100644 src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/VirtualMachineScaleSetNetworkConfigurationInner.cs create mode 100644 src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/VirtualMachineScaleSetNetworkProfile.cs create mode 100644 src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/VirtualMachineScaleSetOSDisk.cs create mode 100644 src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/VirtualMachineScaleSetOSProfile.cs create mode 100644 src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/VirtualMachineScaleSetSku.cs create mode 100644 src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/VirtualMachineScaleSetSkuCapacity.cs create mode 100644 src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/VirtualMachineScaleSetSkuScaleType.cs create mode 100644 src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/VirtualMachineScaleSetStorageProfile.cs create mode 100644 src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/VirtualMachineScaleSetVMExtensionsSummary.cs create mode 100644 src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/VirtualMachineScaleSetVMInner.cs create mode 100644 src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/VirtualMachineScaleSetVMInstanceIDs.cs create mode 100644 src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/VirtualMachineScaleSetVMInstanceRequiredIDs.cs create mode 100644 src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/VirtualMachineScaleSetVMInstanceViewInner.cs create mode 100644 src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/VirtualMachineScaleSetVMListResultInner.cs create mode 100644 src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/VirtualMachineScaleSetVMProfile.cs create mode 100644 src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/VirtualMachineSize.cs create mode 100644 src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/VirtualMachineSizeListResultInner.cs create mode 100644 src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/VirtualMachineSizeTypes.cs create mode 100644 src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/VirtualMachineStatusCodeCount.cs create mode 100644 src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/WinRMConfiguration.cs create mode 100644 src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/WinRMListener.cs create mode 100644 src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/WindowsConfiguration.cs create mode 100644 src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/UsageOperations.cs create mode 100644 src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/UsageOperationsExtensions.cs create mode 100644 src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/VirtualMachineExtensionImagesOperations.cs create mode 100644 src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/VirtualMachineExtensionImagesOperationsExtensions.cs create mode 100644 src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/VirtualMachineExtensionsOperations.cs create mode 100644 src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/VirtualMachineExtensionsOperationsExtensions.cs create mode 100644 src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/VirtualMachineImagesOperations.cs create mode 100644 src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/VirtualMachineImagesOperationsExtensions.cs create mode 100644 src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/VirtualMachineScaleSetVMsOperations.cs create mode 100644 src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/VirtualMachineScaleSetVMsOperationsExtensions.cs create mode 100644 src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/VirtualMachineScaleSetsOperations.cs create mode 100644 src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/VirtualMachineScaleSetsOperationsExtensions.cs create mode 100644 src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/VirtualMachineSizesOperations.cs create mode 100644 src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/VirtualMachineSizesOperationsExtensions.cs create mode 100644 src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/VirtualMachinesOperations.cs create mode 100644 src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/VirtualMachinesOperationsExtensions.cs create mode 100644 src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/KnownLinuxVirtualMachineImage.cs create mode 100644 src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/KnownWindowsVirtualMachineImage.cs create mode 100644 src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Microsoft.Azure.Management.V2.Compute.xproj create mode 100644 src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/PowerState.cs create mode 100644 src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/VirtualMachineImageEnumExtensions.cs create mode 100644 src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/VirtualMachineImageImpl.cs create mode 100644 src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/VirtualMachineImagesImpl.cs create mode 100644 src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/VirtualMachineImagesInSkuImpl.cs create mode 100644 src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/VirtualMachineImpl.cs create mode 100644 src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/VirtualMachineOfferImpl.cs create mode 100644 src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/VirtualMachineOffersImpl.cs create mode 100644 src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/VirtualMachinePublisherImpl.cs create mode 100644 src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/VirtualMachinePublishersImpl.cs create mode 100644 src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/VirtualMachineSizeImpl.cs create mode 100644 src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/VirtualMachineSizesImpl.cs create mode 100644 src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/VirtualMachineSkuImpl.cs create mode 100644 src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/VirtualMachineSkusImpl.cs create mode 100644 src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/VirtualMachinesImpl.cs create mode 100644 src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/project.json create mode 100644 src/ResourceManagement/Compute/global.json create mode 100644 src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Domain/ILoadBalancer.cs create mode 100644 src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Domain/ILoadBalancers.cs create mode 100644 src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Domain/INetwork.cs create mode 100644 src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Domain/INetworkInterface.cs create mode 100644 src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Domain/INetworkInterfaces.cs create mode 100644 src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Domain/INetworkSecurityGroup.cs create mode 100644 src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Domain/INetworkSecurityGroups.cs create mode 100644 src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Domain/INetworkSecurityRule.cs create mode 100644 src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Domain/INetworks.cs create mode 100644 src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Domain/INicIpConfiguration.cs create mode 100644 src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Domain/IPublicIpAddress.cs create mode 100644 src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Domain/IPublicIpAddresses.cs create mode 100644 src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Domain/ISubnet.cs create mode 100644 src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Domain/ISupportsNetworkInterfaces.cs create mode 100644 src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Domain/InterfaceImpl/NetworkImpl.cs create mode 100644 src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Domain/InterfaceImpl/NetworkInterfaceImpl.cs create mode 100644 src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Domain/InterfaceImpl/NetworkInterfacesImpl.cs create mode 100644 src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Domain/InterfaceImpl/NetworkSecurityGroupImpl.cs create mode 100644 src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Domain/InterfaceImpl/NetworkSecurityGroupsImpl.cs create mode 100644 src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Domain/InterfaceImpl/NetworkSecurityRuleImpl.cs create mode 100644 src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Domain/InterfaceImpl/NetworksImpl.cs create mode 100644 src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Domain/InterfaceImpl/NicIpConfigurationImpl.cs create mode 100644 src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Domain/InterfaceImpl/PublicIpAddressImpl.cs create mode 100644 src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Domain/InterfaceImpl/PublicIpAddressesImpl.cs create mode 100644 src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Domain/InterfaceImpl/SubnetImpl.cs create mode 100644 src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Domain/LoadBalancer/Definition/IDefinition.cs create mode 100644 src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Domain/LoadBalancer/Update/IUpdate.cs create mode 100644 src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Domain/Network/Definition/IDefinition.cs create mode 100644 src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Domain/Network/Update/IUpdate.cs create mode 100644 src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Domain/NetworkInterface/Definition/IDefinition.cs create mode 100644 src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Domain/NetworkInterface/Update/IUpdate.cs create mode 100644 src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Domain/NetworkSecurityGroup/Definition/IDefinition.cs create mode 100644 src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Domain/NetworkSecurityGroup/Update/IUpdate.cs create mode 100644 src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Domain/NetworkSecurityRule/Definition/IDefinition.cs create mode 100644 src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Domain/NetworkSecurityRule/Update/IUpdate.cs create mode 100644 src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Domain/NetworkSecurityRule/UpdateDefinition/IUpdateDefinition.cs create mode 100644 src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Domain/NicIpConfiguration/Definition/IDefinition.cs create mode 100644 src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Domain/NicIpConfiguration/Update/IUpdate.cs create mode 100644 src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Domain/NicIpConfiguration/UpdateDefinition/IUpdateDefinition.cs create mode 100644 src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Domain/PublicIpAddress/Definition/IDefinition.cs create mode 100644 src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Domain/PublicIpAddress/Update/IUpdate.cs create mode 100644 src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Domain/Subnet/Definition/IDefinition.cs create mode 100644 src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Domain/Subnet/Update/IUpdate.cs create mode 100644 src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Domain/Subnet/UpdateDefinition/IUpdateDefinition.cs create mode 100644 src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/ApplicationGatewaysOperations.cs create mode 100644 src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/ApplicationGatewaysOperationsExtensions.cs create mode 100644 src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/ExpressRouteCircuitAuthorizationsOperations.cs create mode 100644 src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/ExpressRouteCircuitAuthorizationsOperationsExtensions.cs create mode 100644 src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/ExpressRouteCircuitPeeringsOperations.cs create mode 100644 src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/ExpressRouteCircuitPeeringsOperationsExtensions.cs create mode 100644 src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/ExpressRouteCircuitsOperations.cs create mode 100644 src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/ExpressRouteCircuitsOperationsExtensions.cs create mode 100644 src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/ExpressRouteServiceProvidersOperations.cs create mode 100644 src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/ExpressRouteServiceProvidersOperationsExtensions.cs create mode 100644 src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/IApplicationGatewaysOperations.cs create mode 100644 src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/IExpressRouteCircuitAuthorizationsOperations.cs create mode 100644 src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/IExpressRouteCircuitPeeringsOperations.cs create mode 100644 src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/IExpressRouteCircuitsOperations.cs create mode 100644 src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/IExpressRouteServiceProvidersOperations.cs create mode 100644 src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/ILoadBalancersOperations.cs create mode 100644 src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/ILocalNetworkGatewaysOperations.cs create mode 100644 src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/INetworkInterfacesOperations.cs create mode 100644 src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/INetworkManagementClient.cs create mode 100644 src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/INetworkSecurityGroupsOperations.cs create mode 100644 src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/IPublicIPAddressesOperations.cs create mode 100644 src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/IRouteTablesOperations.cs create mode 100644 src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/IRoutesOperations.cs create mode 100644 src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/ISecurityRulesOperations.cs create mode 100644 src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/ISubnetsOperations.cs create mode 100644 src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/IUsagesOperations.cs create mode 100644 src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/IVirtualNetworkGatewayConnectionsOperations.cs create mode 100644 src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/IVirtualNetworkGatewaysOperations.cs create mode 100644 src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/IVirtualNetworkPeeringsOperations.cs create mode 100644 src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/IVirtualNetworksOperations.cs create mode 100644 src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/LoadBalancersOperations.cs create mode 100644 src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/LoadBalancersOperationsExtensions.cs create mode 100644 src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/LocalNetworkGatewaysOperations.cs create mode 100644 src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/LocalNetworkGatewaysOperationsExtensions.cs create mode 100644 src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/AddressSpace.cs create mode 100644 src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/ApplicationGatewayAuthenticationCertificateInner.cs create mode 100644 src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/ApplicationGatewayBackendAddress.cs create mode 100644 src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/ApplicationGatewayBackendAddressPoolInner.cs create mode 100644 src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/ApplicationGatewayBackendHttpSettingsInner.cs create mode 100644 src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/ApplicationGatewayCookieBasedAffinity.cs create mode 100644 src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/ApplicationGatewayFrontendIPConfigurationInner.cs create mode 100644 src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/ApplicationGatewayFrontendPortInner.cs create mode 100644 src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/ApplicationGatewayHttpListenerInner.cs create mode 100644 src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/ApplicationGatewayIPConfigurationInner.cs create mode 100644 src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/ApplicationGatewayInner.cs create mode 100644 src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/ApplicationGatewayListResultInner.cs create mode 100644 src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/ApplicationGatewayOperationalState.cs create mode 100644 src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/ApplicationGatewayPathRuleInner.cs create mode 100644 src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/ApplicationGatewayProbeInner.cs create mode 100644 src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/ApplicationGatewayProtocol.cs create mode 100644 src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/ApplicationGatewayRequestRoutingRuleInner.cs create mode 100644 src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/ApplicationGatewayRequestRoutingRuleType.cs create mode 100644 src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/ApplicationGatewaySku.cs create mode 100644 src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/ApplicationGatewaySkuName.cs create mode 100644 src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/ApplicationGatewaySslCertificateInner.cs create mode 100644 src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/ApplicationGatewaySslPolicy.cs create mode 100644 src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/ApplicationGatewaySslProtocol.cs create mode 100644 src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/ApplicationGatewayTier.cs create mode 100644 src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/ApplicationGatewayUrlPathMapInner.cs create mode 100644 src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/AuthorizationListResultInner.cs create mode 100644 src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/AuthorizationUseStatus.cs create mode 100644 src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/AzureAsyncOperationResult.cs create mode 100644 src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/BackendAddressPoolInner.cs create mode 100644 src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/BgpSettings.cs create mode 100644 src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/ConnectionResetSharedKeyInner.cs create mode 100644 src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/ConnectionSharedKeyInner.cs create mode 100644 src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/ConnectionSharedKeyResultInner.cs create mode 100644 src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/DhcpOptions.cs create mode 100644 src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/DnsNameAvailabilityResultInner.cs create mode 100644 src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/EffectiveNetworkSecurityGroup.cs create mode 100644 src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/EffectiveNetworkSecurityGroupAssociation.cs create mode 100644 src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/EffectiveNetworkSecurityGroupListResultInner.cs create mode 100644 src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/EffectiveNetworkSecurityRule.cs create mode 100644 src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/EffectiveRoute.cs create mode 100644 src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/EffectiveRouteListResultInner.cs create mode 100644 src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/EffectiveRouteSource.cs create mode 100644 src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/EffectiveRouteState.cs create mode 100644 src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/Error.cs create mode 100644 src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/ErrorDetails.cs create mode 100644 src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/ExpressRouteCircuitArpTable.cs create mode 100644 src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/ExpressRouteCircuitAuthorizationInner.cs create mode 100644 src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/ExpressRouteCircuitInner.cs create mode 100644 src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/ExpressRouteCircuitListResultInner.cs create mode 100644 src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/ExpressRouteCircuitPeeringAdvertisedPublicPrefixState.cs create mode 100644 src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/ExpressRouteCircuitPeeringConfig.cs create mode 100644 src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/ExpressRouteCircuitPeeringInner.cs create mode 100644 src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/ExpressRouteCircuitPeeringListResultInner.cs create mode 100644 src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/ExpressRouteCircuitPeeringState.cs create mode 100644 src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/ExpressRouteCircuitPeeringType.cs create mode 100644 src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/ExpressRouteCircuitRoutesTable.cs create mode 100644 src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/ExpressRouteCircuitRoutesTableSummary.cs create mode 100644 src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/ExpressRouteCircuitServiceProviderProperties.cs create mode 100644 src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/ExpressRouteCircuitSku.cs create mode 100644 src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/ExpressRouteCircuitSkuFamily.cs create mode 100644 src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/ExpressRouteCircuitSkuTier.cs create mode 100644 src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/ExpressRouteCircuitStatsInner.cs create mode 100644 src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/ExpressRouteCircuitsArpTableListResultInner.cs create mode 100644 src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/ExpressRouteCircuitsRoutesTableListResultInner.cs create mode 100644 src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/ExpressRouteCircuitsRoutesTableSummaryListResultInner.cs create mode 100644 src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/ExpressRouteServiceProviderBandwidthsOffered.cs create mode 100644 src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/ExpressRouteServiceProviderInner.cs create mode 100644 src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/ExpressRouteServiceProviderListResultInner.cs create mode 100644 src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/FrontendIPConfigurationInner.cs create mode 100644 src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/IPAllocationMethod.cs create mode 100644 src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/IPConfigurationInner.cs create mode 100644 src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/IPVersion.cs create mode 100644 src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/InboundNatPoolInner.cs create mode 100644 src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/InboundNatRuleInner.cs create mode 100644 src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/LoadBalancerInner.cs create mode 100644 src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/LoadBalancerListResultInner.cs create mode 100644 src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/LoadBalancingRuleInner.cs create mode 100644 src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/LoadDistribution.cs create mode 100644 src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/LocalNetworkGatewayInner.cs create mode 100644 src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/LocalNetworkGatewayListResultInner.cs create mode 100644 src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/NetworkInterfaceDnsSettings.cs create mode 100644 src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/NetworkInterfaceIPConfigurationInner.cs create mode 100644 src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/NetworkInterfaceInner.cs create mode 100644 src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/NetworkInterfaceListResultInner.cs create mode 100644 src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/NetworkOperationStatus.cs create mode 100644 src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/NetworkSecurityGroupInner.cs create mode 100644 src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/NetworkSecurityGroupListResultInner.cs create mode 100644 src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/OutboundNatRuleInner.cs create mode 100644 src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/Page.cs create mode 100644 src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/ProbeInner.cs create mode 100644 src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/ProbeProtocol.cs create mode 100644 src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/ProcessorArchitecture.cs create mode 100644 src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/PublicIPAddressDnsSettings.cs create mode 100644 src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/PublicIPAddressInner.cs create mode 100644 src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/PublicIPAddressListResultInner.cs create mode 100644 src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/RouteInner.cs create mode 100644 src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/RouteListResultInner.cs create mode 100644 src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/RouteNextHopType.cs create mode 100644 src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/RouteTableInner.cs create mode 100644 src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/RouteTableListResultInner.cs create mode 100644 src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/SecurityRuleAccess.cs create mode 100644 src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/SecurityRuleDirection.cs create mode 100644 src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/SecurityRuleInner.cs create mode 100644 src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/SecurityRuleListResultInner.cs create mode 100644 src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/SecurityRuleProtocol.cs create mode 100644 src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/ServiceProviderProvisioningState.cs create mode 100644 src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/SubnetInner.cs create mode 100644 src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/SubnetListResultInner.cs create mode 100644 src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/TransportProtocol.cs create mode 100644 src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/Usage.cs create mode 100644 src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/UsageName.cs create mode 100644 src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/UsagesListResultInner.cs create mode 100644 src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/VirtualNetworkGatewayConnectionInner.cs create mode 100644 src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/VirtualNetworkGatewayConnectionListResultInner.cs create mode 100644 src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/VirtualNetworkGatewayConnectionStatus.cs create mode 100644 src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/VirtualNetworkGatewayConnectionType.cs create mode 100644 src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/VirtualNetworkGatewayIPConfigurationInner.cs create mode 100644 src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/VirtualNetworkGatewayInner.cs create mode 100644 src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/VirtualNetworkGatewayListResultInner.cs create mode 100644 src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/VirtualNetworkGatewaySku.cs create mode 100644 src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/VirtualNetworkGatewaySkuName.cs create mode 100644 src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/VirtualNetworkGatewaySkuTier.cs create mode 100644 src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/VirtualNetworkGatewayType.cs create mode 100644 src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/VirtualNetworkInner.cs create mode 100644 src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/VirtualNetworkListResultInner.cs create mode 100644 src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/VirtualNetworkPeeringInner.cs create mode 100644 src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/VirtualNetworkPeeringListResultInner.cs create mode 100644 src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/VirtualNetworkPeeringState.cs create mode 100644 src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/VpnClientConfiguration.cs create mode 100644 src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/VpnClientParameters.cs create mode 100644 src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/VpnClientRevokedCertificateInner.cs create mode 100644 src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/VpnClientRootCertificateInner.cs create mode 100644 src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/VpnType.cs create mode 100644 src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/NetworkInterfacesOperations.cs create mode 100644 src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/NetworkInterfacesOperationsExtensions.cs create mode 100644 src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/NetworkManagementClient.cs create mode 100644 src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/NetworkManagementClientExtensions.cs create mode 100644 src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/NetworkSecurityGroupsOperations.cs create mode 100644 src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/NetworkSecurityGroupsOperationsExtensions.cs create mode 100644 src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/PublicIPAddressesOperations.cs create mode 100644 src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/PublicIPAddressesOperationsExtensions.cs create mode 100644 src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/RouteTablesOperations.cs create mode 100644 src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/RouteTablesOperationsExtensions.cs create mode 100644 src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/RoutesOperations.cs create mode 100644 src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/RoutesOperationsExtensions.cs create mode 100644 src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/SecurityRulesOperations.cs create mode 100644 src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/SecurityRulesOperationsExtensions.cs create mode 100644 src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/SubnetsOperations.cs create mode 100644 src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/SubnetsOperationsExtensions.cs create mode 100644 src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/UsagesOperations.cs create mode 100644 src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/UsagesOperationsExtensions.cs create mode 100644 src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/VirtualNetworkGatewayConnectionsOperations.cs create mode 100644 src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/VirtualNetworkGatewayConnectionsOperationsExtensions.cs create mode 100644 src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/VirtualNetworkGatewaysOperations.cs create mode 100644 src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/VirtualNetworkGatewaysOperationsExtensions.cs create mode 100644 src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/VirtualNetworkPeeringsOperations.cs create mode 100644 src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/VirtualNetworkPeeringsOperationsExtensions.cs create mode 100644 src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/VirtualNetworksOperations.cs create mode 100644 src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/VirtualNetworksOperationsExtensions.cs create mode 100644 src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Microsoft.Azure.Management.V2.Network.xproj create mode 100644 src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/MissingClasses.cs create mode 100644 src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/NetworkImpl.cs create mode 100644 src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/NetworkInterfaceImpl.cs create mode 100644 src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/NetworkInterfacesImpl.cs create mode 100644 src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/NetworkManager.cs create mode 100644 src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/NetworkSecurityGroupImpl.cs create mode 100644 src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/NetworkSecurityGroupsImpl.cs create mode 100644 src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/NetworkSecurityRuleImpl.cs create mode 100644 src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/NetworksImpl.cs create mode 100644 src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/NicIpConfigurationImpl.cs create mode 100644 src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/PublicIpAddressImpl.cs create mode 100644 src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/PublicIpAddressesImpl.cs create mode 100644 src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/SubnetImpl.cs create mode 100644 src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/project.json create mode 100644 src/ResourceManagement/Network/Network.sln create mode 100644 src/ResourceManagement/Network/global.json create mode 100644 src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Authentication/ApplicationTokenCredentials.cs create mode 100644 src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/AzureEnvironment.cs create mode 100644 src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Core/AzureConfigurable.cs create mode 100644 src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Core/ChildListFlattener.cs create mode 100644 src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Core/ChildResource.cs create mode 100644 src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Core/CreatableWrappers.cs create mode 100644 src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Core/DAG/CreatorTaskGroup.cs create mode 100644 src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Core/DAG/CreatorTaskItem.cs create mode 100644 src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Core/DAG/DAGNode.cs create mode 100644 src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Core/DAG/DAGraph.cs create mode 100644 src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Core/DAG/Exceptions.cs create mode 100644 src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Core/DAG/Graph.cs create mode 100644 src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Core/DAG/ITaskItem.cs create mode 100644 src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Core/DAG/Node.cs create mode 100644 src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Core/DAG/TaskGroup.cs create mode 100644 src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Core/DAG/TaskGroupBase.cs create mode 100644 src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Core/EnumNameAttribute.cs create mode 100644 src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Core/GroupableResource.cs create mode 100644 src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Core/GroupableResources.cs create mode 100644 src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Core/IAzureConfigurable.cs create mode 100644 src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Core/IWrapper.cs create mode 100644 src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Core/Indexable.cs create mode 100644 src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Core/IndexableWrapper.cs create mode 100644 src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Core/ManagerBase.cs create mode 100644 src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Core/PagedList.cs create mode 100644 src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Core/ReadableWrappers.cs create mode 100644 src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Core/Resource.cs create mode 100644 src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Core/ResourceActions/Creatable.cs create mode 100644 src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Core/ResourceActions/CreatableUpdatable.cs create mode 100644 src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Core/ResourceActions/IndexableRefreshable.cs create mode 100644 src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Core/ResourceActions/IndexableRefreshableWrapper.cs create mode 100644 src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Core/ResourceBase.cs create mode 100644 src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Core/ResourceUtils.cs create mode 100644 src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Core/RestClient/DelegatingHandlerBase.cs create mode 100644 src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Core/RestClient/HttpLoggingDelegatingHandler.cs create mode 100644 src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Core/RestClient/RestClient.cs create mode 100644 src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Core/RestClient/UserAgentDelegatingHandler.cs create mode 100644 src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Core/SubResource.cs create mode 100644 src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Core/WrappedPage.cs create mode 100644 src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Core/Wrapper.cs create mode 100644 src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Deployment/DeploymentExportResultImpl.cs create mode 100644 src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Deployment/DeploymentImpl.cs create mode 100644 src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Deployment/DeploymentOperationImpl.cs create mode 100644 src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Deployment/DeploymentOperationsImpl.cs create mode 100644 src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Deployment/DeploymentsImpl.cs create mode 100644 src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Domain/Core/ChildResource/Definition/IDefinition.cs create mode 100644 src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Domain/Core/ChildResource/Update/IUpdate.cs create mode 100644 src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Domain/Core/ChildResourceActions/IAttachable.cs create mode 100644 src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Domain/Core/ChildResourceActions/ISettable.cs create mode 100644 src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Domain/Core/CollectionActions/ISupportsCreating.cs create mode 100644 src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Domain/Core/CollectionActions/ISupportsDeleting.cs create mode 100644 src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Domain/Core/CollectionActions/ISupportsDeletingByGroup.cs create mode 100644 src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Domain/Core/CollectionActions/ISupportsGettingByGroup.cs create mode 100644 src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Domain/Core/CollectionActions/ISupportsGettingById.cs create mode 100644 src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Domain/Core/CollectionActions/ISupportsGettingByName.cs create mode 100644 src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Domain/Core/CollectionActions/ISupportsListing.cs create mode 100644 src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Domain/Core/CollectionActions/ISupportsListingByGroup.cs create mode 100644 src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Domain/Core/CollectionActions/ISupportsListingByRegion.cs create mode 100644 src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Domain/Core/GroupableResource/Definition/IDefinition.cs create mode 100644 src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Domain/Core/IChildResource.cs create mode 100644 src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Domain/Core/IGroupableResource.cs create mode 100644 src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Domain/Core/IResource.cs create mode 100644 src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Domain/Core/Resource/Definition/IDefinition.cs create mode 100644 src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Domain/Core/Resource/Update/IUpdate.cs create mode 100644 src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Domain/Core/ResourceActions/IAppliable.cs create mode 100644 src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Domain/Core/ResourceActions/ICreatable.cs create mode 100644 src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Domain/Core/ResourceActions/IIndexable.cs create mode 100644 src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Domain/Core/ResourceActions/IRefreshable.cs create mode 100644 src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Domain/Core/ResourceActions/IUpdatable.cs create mode 100644 src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Domain/Deployment/Definition/IDefinition.cs create mode 100644 src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Domain/Deployment/Update/IUpdate.cs create mode 100644 src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Domain/Feature/IInResourceProvider.cs create mode 100644 src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Domain/GenericResource/Definition/IDefinition.cs create mode 100644 src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Domain/GenericResource/Update/IUpdate.cs create mode 100644 src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Domain/IDeployment.cs create mode 100644 src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Domain/IDeploymentExportResult.cs create mode 100644 src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Domain/IDeploymentOperation.cs create mode 100644 src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Domain/IDeploymentOperations.cs create mode 100644 src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Domain/IDeployments.cs create mode 100644 src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Domain/IFeature.cs create mode 100644 src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Domain/IFeatures.cs create mode 100644 src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Domain/IGenericResource.cs create mode 100644 src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Domain/IGenericResources.cs create mode 100644 src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Domain/ILocation.cs create mode 100644 src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Domain/IProvider.cs create mode 100644 src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Domain/IProviders.cs create mode 100644 src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Domain/IResourceConnector.cs create mode 100644 src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Domain/IResourceGroup.cs create mode 100644 src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Domain/IResourceGroupExportResult.cs create mode 100644 src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Domain/IResourceGroups.cs create mode 100644 src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Domain/ISubscription.cs create mode 100644 src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Domain/ISubscriptions.cs create mode 100644 src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Domain/ITenant.cs create mode 100644 src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Domain/ITenants.cs create mode 100644 src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Domain/ResourceGroup/Definition/IDefinition.cs create mode 100644 src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Domain/ResourceGroup/Update/IUpdate.cs create mode 100644 src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Feature/FeatureImpl.cs create mode 100644 src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Feature/FeaturesImpl.cs create mode 100644 src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/DeploymentOperationsOperations.cs create mode 100644 src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/DeploymentOperationsOperationsExtensions.cs create mode 100644 src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/DeploymentsOperations.cs create mode 100644 src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/DeploymentsOperationsExtensions.cs create mode 100644 src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/FeatureClient.cs create mode 100644 src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/FeaturesOperations.cs create mode 100644 src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/FeaturesOperationsExtensions.cs create mode 100644 src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/IDeploymentOperationsOperations.cs create mode 100644 src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/IDeploymentsOperations.cs create mode 100644 src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/IFeatureClient.cs create mode 100644 src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/IFeaturesOperations.cs create mode 100644 src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/IProvidersOperations.cs create mode 100644 src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/IResourceGroupsOperations.cs create mode 100644 src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/IResourceManagementClient.cs create mode 100644 src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/IResourcesOperations.cs create mode 100644 src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/ISubscriptionClient.cs create mode 100644 src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/ISubscriptionsOperations.cs create mode 100644 src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/ITagsOperations.cs create mode 100644 src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/ITenantsOperations.cs create mode 100644 src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/Models/AliasPathType.cs create mode 100644 src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/Models/AliasType.cs create mode 100644 src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/Models/BasicDependency.cs create mode 100644 src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/Models/DebugSetting.cs create mode 100644 src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/Models/Dependency.cs create mode 100644 src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/Models/DeploymentExportResultInner.cs create mode 100644 src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/Models/DeploymentExtendedFilter.cs create mode 100644 src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/Models/DeploymentExtendedFilterInner.cs create mode 100644 src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/Models/DeploymentExtendedInner.cs create mode 100644 src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/Models/DeploymentInner.cs create mode 100644 src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/Models/DeploymentListResultInner.cs create mode 100644 src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/Models/DeploymentMode.cs create mode 100644 src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/Models/DeploymentOperationInner.cs create mode 100644 src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/Models/DeploymentOperationProperties.cs create mode 100644 src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/Models/DeploymentOperationsListResultInner.cs create mode 100644 src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/Models/DeploymentProperties.cs create mode 100644 src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/Models/DeploymentPropertiesExtended.cs create mode 100644 src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/Models/DeploymentValidateResultInner.cs create mode 100644 src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/Models/ExportTemplateRequestInner.cs create mode 100644 src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/Models/FeatureOperationsListResultInner.cs create mode 100644 src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/Models/FeatureProperties.cs create mode 100644 src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/Models/FeatureResultInner.cs create mode 100644 src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/Models/GenericResourceFilter.cs create mode 100644 src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/Models/GenericResourceFilterInner.cs create mode 100644 src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/Models/GenericResourceInner.cs create mode 100644 src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/Models/HttpMessage.cs create mode 100644 src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/Models/Identity.cs create mode 100644 src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/Models/Location.cs create mode 100644 src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/Models/LocationListResultInner.cs create mode 100644 src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/Models/Page.cs create mode 100644 src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/Models/Page1.cs create mode 100644 src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/Models/ParametersLink.cs create mode 100644 src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/Models/Plan.cs create mode 100644 src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/Models/ProviderInner.cs create mode 100644 src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/Models/ProviderListResultInner.cs create mode 100644 src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/Models/ProviderResourceType.cs create mode 100644 src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/Models/ResourceGroupExportResultInner.cs create mode 100644 src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/Models/ResourceGroupFilter.cs create mode 100644 src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/Models/ResourceGroupFilterInner.cs create mode 100644 src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/Models/ResourceGroupInner.cs create mode 100644 src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/Models/ResourceGroupListResultInner.cs create mode 100644 src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/Models/ResourceGroupProperties.cs create mode 100644 src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/Models/ResourceIdentityType.cs create mode 100644 src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/Models/ResourceListResultInner.cs create mode 100644 src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/Models/ResourceManagementErrorWithDetails.cs create mode 100644 src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/Models/ResourceProviderOperationDisplayProperties.cs create mode 100644 src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/Models/ResourcesMoveInfoInner.cs create mode 100644 src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/Models/Sku.cs create mode 100644 src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/Models/SubscriptionInner.cs create mode 100644 src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/Models/SubscriptionListResultInner.cs create mode 100644 src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/Models/SubscriptionPolicies.cs create mode 100644 src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/Models/TagCount.cs create mode 100644 src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/Models/TagDetailsInner.cs create mode 100644 src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/Models/TagValueInner.cs create mode 100644 src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/Models/TagsListResultInner.cs create mode 100644 src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/Models/TargetResource.cs create mode 100644 src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/Models/TemplateLink.cs create mode 100644 src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/Models/TenantIdDescription.cs create mode 100644 src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/Models/TenantListResultInner.cs create mode 100644 src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/ProvidersOperations.cs create mode 100644 src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/ProvidersOperationsExtensions.cs create mode 100644 src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/ResourceGroupsOperations.cs create mode 100644 src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/ResourceGroupsOperationsExtensions.cs create mode 100644 src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/ResourceManagementClient.cs create mode 100644 src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/ResourcesOperations.cs create mode 100644 src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/ResourcesOperationsExtensions.cs create mode 100644 src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/SubscriptionClient.cs create mode 100644 src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/SubscriptionsOperations.cs create mode 100644 src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/SubscriptionsOperationsExtensions.cs create mode 100644 src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/TagsOperations.cs create mode 100644 src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/TagsOperationsExtensions.cs create mode 100644 src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/TenantsOperations.cs create mode 100644 src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/TenantsOperationsExtensions.cs create mode 100644 src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/GenericResource/GenericResourceImpl.cs create mode 100644 src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/GenericResource/GenericResourcesImpl.cs create mode 100644 src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/LocationInner.cs create mode 100644 src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Microsoft.Azure.Management.V2.Resource.xproj create mode 100644 src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/MissingInners.cs create mode 100644 src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Provider/ProviderImpl.cs create mode 100644 src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Provider/ProvidersImpl.cs create mode 100644 src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Region.cs create mode 100644 src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/ResourceGroup/ResourceGroupExportResultImpl.cs create mode 100644 src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/ResourceGroup/ResourceGroupImpl.cs create mode 100644 src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/ResourceGroup/ResourceGroupsImpl.cs create mode 100644 src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/ResourceGroupExportTemplateOptions.cs create mode 100644 src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/ResourceManager2.cs create mode 100644 src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/ResourceNamer.cs create mode 100644 src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Subscription/SubscriptionImpl.cs create mode 100644 src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Subscription/SubscriptionsImpl.cs create mode 100644 src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Tenant/TenantImpl.cs create mode 100644 src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Tenant/TenantsImpl.cs create mode 100644 src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/project.json create mode 100644 src/ResourceManagement/Resource/Resource.sln create mode 100644 src/ResourceManagement/Resource/global.json create mode 100644 src/ResourceManagement/Storage/Microsoft.Azure.Management.V2.Storage/Domain/IStorageAccount.cs create mode 100644 src/ResourceManagement/Storage/Microsoft.Azure.Management.V2.Storage/Domain/IStorageAccounts.cs create mode 100644 src/ResourceManagement/Storage/Microsoft.Azure.Management.V2.Storage/Domain/IStorageUsage.cs create mode 100644 src/ResourceManagement/Storage/Microsoft.Azure.Management.V2.Storage/Domain/IUsages.cs create mode 100644 src/ResourceManagement/Storage/Microsoft.Azure.Management.V2.Storage/Domain/StorageAccount/Definition/IDefinition.cs create mode 100644 src/ResourceManagement/Storage/Microsoft.Azure.Management.V2.Storage/Domain/StorageAccount/Update/IUpdate.cs create mode 100644 src/ResourceManagement/Storage/Microsoft.Azure.Management.V2.Storage/Generated/IStorageAccountsOperations.cs create mode 100644 src/ResourceManagement/Storage/Microsoft.Azure.Management.V2.Storage/Generated/IStorageManagementClient.cs create mode 100644 src/ResourceManagement/Storage/Microsoft.Azure.Management.V2.Storage/Generated/IUsageOperations.cs create mode 100644 src/ResourceManagement/Storage/Microsoft.Azure.Management.V2.Storage/Generated/Models/AccessTier.cs create mode 100644 src/ResourceManagement/Storage/Microsoft.Azure.Management.V2.Storage/Generated/Models/AccountStatus.cs create mode 100644 src/ResourceManagement/Storage/Microsoft.Azure.Management.V2.Storage/Generated/Models/CheckNameAvailabilityResultInner.cs create mode 100644 src/ResourceManagement/Storage/Microsoft.Azure.Management.V2.Storage/Generated/Models/CustomDomain.cs create mode 100644 src/ResourceManagement/Storage/Microsoft.Azure.Management.V2.Storage/Generated/Models/Encryption.cs create mode 100644 src/ResourceManagement/Storage/Microsoft.Azure.Management.V2.Storage/Generated/Models/EncryptionService.cs create mode 100644 src/ResourceManagement/Storage/Microsoft.Azure.Management.V2.Storage/Generated/Models/EncryptionServices.cs create mode 100644 src/ResourceManagement/Storage/Microsoft.Azure.Management.V2.Storage/Generated/Models/Endpoints.cs create mode 100644 src/ResourceManagement/Storage/Microsoft.Azure.Management.V2.Storage/Generated/Models/KeyPermission.cs create mode 100644 src/ResourceManagement/Storage/Microsoft.Azure.Management.V2.Storage/Generated/Models/Kind.cs create mode 100644 src/ResourceManagement/Storage/Microsoft.Azure.Management.V2.Storage/Generated/Models/Page.cs create mode 100644 src/ResourceManagement/Storage/Microsoft.Azure.Management.V2.Storage/Generated/Models/ProvisioningState.cs create mode 100644 src/ResourceManagement/Storage/Microsoft.Azure.Management.V2.Storage/Generated/Models/Reason.cs create mode 100644 src/ResourceManagement/Storage/Microsoft.Azure.Management.V2.Storage/Generated/Models/Sku.cs create mode 100644 src/ResourceManagement/Storage/Microsoft.Azure.Management.V2.Storage/Generated/Models/SkuName.cs create mode 100644 src/ResourceManagement/Storage/Microsoft.Azure.Management.V2.Storage/Generated/Models/SkuTier.cs create mode 100644 src/ResourceManagement/Storage/Microsoft.Azure.Management.V2.Storage/Generated/Models/StorageAccountCheckNameAvailabilityParameters.cs create mode 100644 src/ResourceManagement/Storage/Microsoft.Azure.Management.V2.Storage/Generated/Models/StorageAccountCreateParametersInner.cs create mode 100644 src/ResourceManagement/Storage/Microsoft.Azure.Management.V2.Storage/Generated/Models/StorageAccountInner.cs create mode 100644 src/ResourceManagement/Storage/Microsoft.Azure.Management.V2.Storage/Generated/Models/StorageAccountKey.cs create mode 100644 src/ResourceManagement/Storage/Microsoft.Azure.Management.V2.Storage/Generated/Models/StorageAccountListKeysResultInner.cs create mode 100644 src/ResourceManagement/Storage/Microsoft.Azure.Management.V2.Storage/Generated/Models/StorageAccountListResultInner.cs create mode 100644 src/ResourceManagement/Storage/Microsoft.Azure.Management.V2.Storage/Generated/Models/StorageAccountRegenerateKeyParameters.cs create mode 100644 src/ResourceManagement/Storage/Microsoft.Azure.Management.V2.Storage/Generated/Models/StorageAccountUpdateParametersInner.cs create mode 100644 src/ResourceManagement/Storage/Microsoft.Azure.Management.V2.Storage/Generated/Models/Usage.cs create mode 100644 src/ResourceManagement/Storage/Microsoft.Azure.Management.V2.Storage/Generated/Models/UsageListResultInner.cs create mode 100644 src/ResourceManagement/Storage/Microsoft.Azure.Management.V2.Storage/Generated/Models/UsageName.cs create mode 100644 src/ResourceManagement/Storage/Microsoft.Azure.Management.V2.Storage/Generated/Models/UsageUnit.cs create mode 100644 src/ResourceManagement/Storage/Microsoft.Azure.Management.V2.Storage/Generated/StorageAccountsOperations.cs create mode 100644 src/ResourceManagement/Storage/Microsoft.Azure.Management.V2.Storage/Generated/StorageAccountsOperationsExtensions.cs create mode 100644 src/ResourceManagement/Storage/Microsoft.Azure.Management.V2.Storage/Generated/StorageManagementClient.cs create mode 100644 src/ResourceManagement/Storage/Microsoft.Azure.Management.V2.Storage/Generated/UsageOperations.cs create mode 100644 src/ResourceManagement/Storage/Microsoft.Azure.Management.V2.Storage/Generated/UsageOperationsExtensions.cs create mode 100644 src/ResourceManagement/Storage/Microsoft.Azure.Management.V2.Storage/Microsoft.Azure.Management.V2.Storage.xproj create mode 100644 src/ResourceManagement/Storage/Microsoft.Azure.Management.V2.Storage/StorageAccount/AccountStatuses.cs create mode 100644 src/ResourceManagement/Storage/Microsoft.Azure.Management.V2.Storage/StorageAccount/CheckNameAvailabilityResult.cs create mode 100644 src/ResourceManagement/Storage/Microsoft.Azure.Management.V2.Storage/StorageAccount/PublicEndpoints.cs create mode 100644 src/ResourceManagement/Storage/Microsoft.Azure.Management.V2.Storage/StorageAccount/StorageAccountImpl.cs create mode 100644 src/ResourceManagement/Storage/Microsoft.Azure.Management.V2.Storage/StorageAccount/StorageAccountsImpl.cs create mode 100644 src/ResourceManagement/Storage/Microsoft.Azure.Management.V2.Storage/StorageManager.cs create mode 100644 src/ResourceManagement/Storage/Microsoft.Azure.Management.V2.Storage/Usage/UsageImpl.cs create mode 100644 src/ResourceManagement/Storage/Microsoft.Azure.Management.V2.Storage/Usage/UsagesImpl.cs create mode 100644 src/ResourceManagement/Storage/Microsoft.Azure.Management.V2.Storage/project.json create mode 100644 src/ResourceManagement/Storage/Storage.sln create mode 100644 src/ResourceManagement/Storage/global.json create mode 100644 src/ResourceManagement/gulpfile.js create mode 100644 src/ResourceManagement/package.json create mode 100755 test_on_linux.sh create mode 100644 tools/AzCopy/AzCopy.exe create mode 100644 tools/AzCopy/Microsoft.Data.Edm.dll create mode 100644 tools/AzCopy/Microsoft.Data.OData.dll create mode 100644 tools/AzCopy/Microsoft.Data.Services.Client.dll create mode 100644 tools/AzCopy/Microsoft.WindowsAzure.Storage.DataMovement.dll create mode 100644 tools/AzCopy/Microsoft.WindowsAzure.Storage.TableDataMovement.dll create mode 100644 tools/AzCopy/Microsoft.WindowsAzure.Storage.dll create mode 100644 tools/AzCopy/Newtonsoft.Json.dll create mode 100644 tools/AzCopy/System.Spatial.dll create mode 100644 tools/CopyGenerated.proj create mode 100644 tools/CopySourceToTools.bat create mode 100644 tools/DisableTestRunParallel.cs create mode 100644 tools/Fix-ADLGeneratedCode.ps1 create mode 100644 tools/Get-TestMode.ps1 create mode 100644 tools/GlobalFilters.xml create mode 100644 tools/IncrementVersion.ps1 create mode 100644 tools/Library.Settings.targets create mode 100644 tools/MSSharedLibKey.snk create mode 100644 tools/Microsoft.WindowsAzure.Build.Tasks/FilterOutAutoRestLibraries.cs create mode 100644 tools/Microsoft.WindowsAzure.Build.Tasks/Microsoft.WindowsAzure.Build.Tasks.csproj create mode 100644 tools/Microsoft.WindowsAzure.Build.Tasks/Microsoft.WindowsAzure.Build.Tasks.sln create mode 100644 tools/Microsoft.WindowsAzure.Build.Tasks/Properties/AssemblyInfo.cs create mode 100644 tools/Microsoft.WindowsAzure.Build.Tasks/RegexReplacementTask.cs create mode 100644 tools/Microsoft.WindowsAzure.Build.Tasks/StrongNameUtility.cs create mode 100644 tools/Microsoft.WindowsAzure.Build.Tasks/ValidateStrongNameSignatureTask.cs create mode 100644 tools/NuGet.exe create mode 100644 tools/RunCredScan.ps1 create mode 100644 tools/Set-TestMode.ps1 create mode 100644 tools/Sync-NuspecDependencies.ps1 create mode 100644 tools/Test.Dependencies.target create mode 100644 tools/autorest.composite.gen.cmd create mode 100644 tools/autorest.gen.cmd create mode 100644 tools/nuget.targets create mode 100644 tools/references.net40.props create mode 100644 tools/references.net45.props create mode 100644 tools/references.portable.props create mode 100644 tools/xunit.runner.msbuild.dll create mode 100644 tools/xunit.runner.utility.dll diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 000000000..01a3143e9 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,36 @@ +*.bmp binary +*.dll binary +*.gif binary +*.jpg binary +*.png binary +*.snk binary +*.exe binary +*.wmv binary +*.mp4 binary +*.ismv binary +*.isma binary + +*.ascx text +*.cmd text +*.config text +*.cs text diff=csharp +*.csproj text merge=union +*.edmx text + +*.htm text +*.html text + +*.js text +*.json text + +*.msbuild text +*.nuspec text + +*.resx text +*.ruleset text +*.StyleCop text +*.targets text +*.txt text +*.xml text + +*.sln text eol=crlf merge=union diff --git a/.gitignore b/.gitignore new file mode 100644 index 000000000..75200f700 --- /dev/null +++ b/.gitignore @@ -0,0 +1,143 @@ +## Ignore Visual Studio temporary files, build results, and +## files generated by popular Visual Studio add-ons. + +# Auth files +*.auth +*.azureauth + +# User-specific files +*.suo +*.user +*.sln.docstates +.vs/ +*.lock.json +developer/ + +# Build results +binaries/ +[Dd]ebug*/ +[Rr]elease/ +build/ +src/NuGet.Config +tools/7-zip/ + +[Tt]est[Rr]esult +[Bb]uild[Ll]og.* + +*_i.c +*_p.c +*.ilk +*.meta +*.obj +*.pch +*.pdb +*.pgc +*.pgd +*.rsp +*.sbr +*.tlb +*.tli +*.tlh +*.tmp +*.vspscc +*.vssscc +.builds + +*.pidb + +*.log +*.scc +# Visual C++ cache files +ipch/ +*.aps +*.ncb +*.opensdf +*.sdf + +# Visual Studio profiler +*.psess +*.vsp + +# Code analysis +*.CodeAnalysisLog.xml + +# Guidance Automation Toolkit +*.gpState + +# ReSharper is a .NET coding add-in +_ReSharper*/ + +*.[Rr]e[Ss]harper + +# NCrunch +*.ncrunch* +.*crunch*.local.xml + +# Installshield output folder +[Ee]xpress + +# DocProject is a documentation generator add-in +DocProject/buildhelp/ +DocProject/Help/*.HxT +DocProject/Help/*.HxC +DocProject/Help/*.hhc +DocProject/Help/*.hhk +DocProject/Help/*.hhp +DocProject/Help/Html2 +DocProject/Help/html + +# Click-Once directory +publish + +# Publish Web Output +*.Publish.xml + +# Others +[Bb]in +[Oo]bj +TestResults +[Tt]est[Rr]esult* +*.Cache +ClientBin +[Ss]tyle[Cc]op.* +~$* +*.dbmdl +node_modules + +*.[Pp]ublish.xml + +Generated_Code #added for RIA/Silverlight projects + +# Build tasks +tools/*.dll + +# Sensitive files +*.keys +*.pfx + +# Backup & report files from converting an old project file to a newer +# Visual Studio version. Backup files are not needed, because we have git ;-) +_UpgradeReport_Files/ +Backup*/ +UpgradeLog*.XML + +# NuGet +packages +packages/repositories.config + +# Mac development +.DS_Store + +# Specification DLLs +*.Specification.dll + +# Generated readme.txt files # +src/*/readme.txt + +build.out +.nuget/ + +# Azure Project +csx/ +*.GhostDoc.xml +pingme.txt diff --git a/.travis.yml b/.travis.yml new file mode 100644 index 000000000..bf0b18549 --- /dev/null +++ b/.travis.yml @@ -0,0 +1,23 @@ +language: csharp +sudo: required +dist: trusty +addons: + apt: + sources: + packages: +install: + - sudo sh -c 'echo "deb [arch=amd64] https://apt-mo.trafficmanager.net/repos/dotnet/ trusty main" > /etc/apt/sources.list.d/dotnetdev.list' + - sudo apt-key adv --keyserver apt-mo.trafficmanager.net --recv-keys 417A0893 + - sudo apt-get update + - sudo apt-get install dotnet-dev-1.0.0-preview2-003121 -y +script: + - ./test_on_linux.sh +after_script: + - echo "========== Server log: ============" + - pwd + - ls -al + - ls -al TestResults + - cat TestResults/*.log +notifications: + slack: + secure: d0PFVLcyqcMxNtmZ8JaEpIBzXbUbZCgKs8QtBB5qEIXDnxflSR3AhczlILNhTBKtMEBlwVzsz65yP09XcmvB6xpAfJbHqSRzk2frKa5viPcAD8Wr/NYamt9/UiTCsnql8MqzjVy0tLdMscXKRmsUey4YF570zl0b7gAbq7XTqxM= diff --git a/Documentation/AuthConflictsBetweenSDKs.md b/Documentation/AuthConflictsBetweenSDKs.md new file mode 100644 index 000000000..05b712297 --- /dev/null +++ b/Documentation/AuthConflictsBetweenSDKs.md @@ -0,0 +1,45 @@ +# Bridging gap between old and new SDKs + +Authentication conflicts can happen due to mixing old SDKs* and new SDKs*. SDKs that depend on The credential types created by the new authentication library (Microsoft.Rest.ClientRuntime.Azure.Authentication, type = ServiceClientCredentials) are incompatible with the credential types used in older SDKs (Microsoft.Azure.Common, type = SubscriptionCloudCredentials). The problem is that using two different authentication libraries will require you to authenticate twice, which is a painful experience. + +Recommended solution +To bridge this gap, the following adapter allows you to use the new credentials with clients that require the older credential type. + +Here’s the code for adapter +``` +public class SubscriptionCredentialsAdapter : SubscriptionCloudCredentials +{ + ServiceClientCredentials _credentials; + string _subscriptionId; +  + public SubscriptionCredentialsAdapter(ServiceClientCredentials wrapped, string subscriptionId) + { + _credentials = wrapped; + _subscriptionId = subscriptionId; + } + + public override string SubscriptionId + { + get { return _subscriptionId; } + } +  + public override Task ProcessHttpRequestAsync(HttpRequestMessage request, CancellationToken cancellationToken) + { + return _credentials.ProcessHttpRequestAsync(request, cancellationToken); + } +} +``` + +Here is how you can use the adapter +``` +var creds = UserTokenProvider.LoginWithPromptAsync(new ActiveDirectoryClientSettings(ClientId, new Uri(RedirectUri))).GetAwaiter().GetResult(); +var subClient = new SubscriptionClient(creds); +var subscriptions = subClient.Subscriptions.List(); +var insightClient = new HDInsightManagementClient(new SubscriptionCredentialsAdapter(creds, subscriptions.First().SubscriptionId)); +var clusters = insightClient.Clusters.List(); +``` + +Another solution would be to use the version of resource manager library that is based on Microsoft.Azure.Common. It can be found [here](https://www.nuget.org/packages/Microsoft.Azure.Management.Resources/). + +* Old SDKs - The SDKs that depend on Microsoft.Azure.Common +* New SDKs - The SDKs that depend on Microsoft.Rest.ClientRuntime.Azure diff --git a/Documentation/README.md b/Documentation/README.md new file mode 100644 index 000000000..d35fe7eff --- /dev/null +++ b/Documentation/README.md @@ -0,0 +1,59 @@ +# Microsoft Azure SDK for .NET Documentation + +The following services have SDKs that are generated from AutoRest + +** Old SDKs (as of August 2016) +These SDKs depend on Microsoft.Azure.Common + +| Service Name | Nuget Package | +| ------------ | --------------| +| Api Management | Microsoft.Azure.Management.ApiManagement | +| Automation | Microsoft.WindowsAzure.Management.Automation | +| Azure Backup | Microsoft.Azure.Management.BackupServices | +| Azure Stack | Microsoft.AzureStack.Management, Microsoft.AzureStack.Management.Storage | +| Commerce | Microsoft.Azure.Commerce.UsageAggregates | +| DataFactory | Microsoft.Azure.Management.DataFactories | +| DataLake | Microsoft.Azure.Management.DataLake.AnalyticsCatalog, Microsoft.Azure.Management.DataLake.AnalyticsJob, Microsoft.Azure.Management.DataLake.StoreFileSystem | +| ExpressRoute | Microsoft.WindowsAzure.Management.ExpressRoute | +| HdInsight | Microsoft.Azure.Management.HDInsight, Microsoft.Azure.Management.HDInsight.Job | +| Insights | Microsoft.Azure.Insights | +| Media Services | Microsoft.WindowsAzure.Management.MediaServices | +| Monitoring | Microsoft.WindowsAzure.Management.Monitoring | +| Operational Insights | Microsoft.Azure.Management.OperationalInsights | +| Recovery Services | Microsoft.Azure.Management.RecoveryServices, Microsoft.Azure.Management.RecoveryServices.Backup | +| ServerManagement | Microsoft.Azure.Management.ServerManagement | +| Site Recovery | Microsoft.Azure.Management.SiteRecovery | +| Sql | Microsoft.Azure.Management.Sql, Microsoft.WindowsAzure.Management.Sql | +| Stream Analytics | Microsoft.Azure.Management.StreamAnalytics | + +* New SDKs (as of August 2016) +These SDKs depend on Microsoft.Rest.ClientRuntime.Azure + +| Service Name | Nuget Package | +| ------------ | ------------- | +| Authorization | Microsoft.Azure.Management.Authorization | +| Batch | Azure.Batch | +| Cdn | Microsoft.Azure.Management.Cdn | +| Cognitive Services | Microsoft.Azure.Management.CognitiveServices | +| Compute | Microsoft.Azure.Management.Compute | +| DataLake Analytics | Microsoft.Azure.Management.DataLake.Analytics, Microsoft.Azure.Management.DataLake.Store | +| DevTestLabs | Microsoft.Azure.Management.DevTestLabs | +| Graph.RBAC | Microsoft.Azure.Graph.RBAC | +| Intune | Microsoft.Azure.Management.Intune | +| KeyVault | Microsoft.Azure.KeyVault, Microsoft.Azure.Management.KeyVault | +| Logic | Microsoft.Azure.Management.Logic | +| Machine Learning | Microsoft.Azure.Management.MachineLearning | +| Network | Microsoft.Azure.Management.Network | +| NotificationHubs | Microsoft.Azure.Management.NotificationHubs | +| PowerBI | Microsoft.Azure.Management.PowerBIEmbedded | +| Redis Cache | Microsoft.Azure.Management.Redis | +| Resource Manager (ARM) | Microsoft.Azure.Management.ResourceManager | +| Scheduler | Microsoft.WindowsAzure.Management.Scheduler | +| Search | Microsoft.Azure.Search | +| Storage | Microsoft.Azure.Management.Storage | +| Traffic Manager | Microsoft.Azure.Management.TrafficManager | +| Websites | Microsoft.Azure.Management.WebSites | + +Please see at [Azure documentation](https://azure.microsoft.com/en-us/documentation/api/) for more details + + diff --git a/LICENSE.txt b/LICENSE.txt new file mode 100644 index 000000000..3423e9584 --- /dev/null +++ b/LICENSE.txt @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2015 Microsoft + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/NuGet.Config b/NuGet.Config new file mode 100644 index 000000000..59d02ff82 --- /dev/null +++ b/NuGet.Config @@ -0,0 +1,7 @@ + + + + + + + diff --git a/README.md b/README.md new file mode 100644 index 000000000..6776f248c --- /dev/null +++ b/README.md @@ -0,0 +1,129 @@ +# Microsoft Azure SDK for .NET +---------- +The Microsoft Azure SDK for .NET allows you to build applications +that take advantage of scalable cloud computing resources. + +### Target Frameworks: + +* .NET Framework 4.5 +* Netstandard 1.5, based on the NetCore framework + +### Prerequisites: + Install .Net CoreCLR using [these steps](https://www.microsoft.com/net/core). + +### To build: + +####Full Build + + 1. Navigate to repository root directory + 2. Invoke **msbuild** build.proj + +####Build one nuget package + + 1. **msbuild** build.proj /t:build;package /p:scope=ResourceManagement\Compute + + +####Using Visual Studio: + + + + 1. Open any solution, say, "src\ResourceManagement\Compute\Compute.sln" + 2. Invoke "build" command. + + +### To run the tests: + +Using Visual Studio: + + - Build. + - "Test Explorer" window will get populated with tests. Go select and invoke. + +Using the command line: + + - Refer to the "To build" section to get the command window set up. + - Invoke "Test" target from "Build.proj". Likely, you need to build test project first, so put in "build" target as well. + *msbuild build.proj /t:build;test /p:scope=ResourceManagement\Compute* + +## To on-board new libraries + +### Project Structure + +In "src\ResourceManagement", you will find projects for services that have already been implemented + + - Each service contains a project for their generated/customized code + - The folder 'Generated' contains the generated code + - The folder 'Customizations' contains additions to the generated code - this can include additions to the generated partial classes, or additional classes that augment the SDK or call the generated code + - The file 'generate.cmd', used to generate library code for the given service, can also be found in this project + - Services also contain a project for their tests + +### Branches: AutoRest vs. master + +The **AutoRest** branch contains the code generated from AutoRest tool. + +The **master** branch contains the code generated from Hydra/Hyak. + - Hydra/Hyak is Azure's legacy code generation technology. + - This can still be used to generate client libraries, but the project is not being advanced in favor of AutoRest. Your team should move to AutoRest and Swagger as soon as possible. + +### Standard Process + + 1. Create fork of [Azure REST API Specs](https://github.com/azure/azure-rest-api-specs) + 2. Create fork of [Azure SDK for .NET](https://github.com/azure/azure-sdk-for-net) + 3. Create your Swagger specification for your HTTP API. For more information see + [Introduction to Swagger - The World's Most Popular Framework for APIs](http://swagger.io) + 4. Install the latest version of AutoRest and use it to generate your C# client. For more info on getting started with AutoRest, + see the [AutoRest repository](https://github.com/Azure/autorest) + 5. Create a branch in your fork of Azure SDK for .NET and add your newly generated code to your project. If you don't have a project in the SDK yet, look at some of the existing projects and build one like the others. + 6. **MANDATORY**: Add or update tests for the newly generated code. + 7. Once added to the Azure SDK for .NET, build your local package using command "msbuild build.proj /t:build;package /p:scope=YourService" + (Note, 'YourService' comes from the sub folder under \src, for example: "ResourceManagement\Compute") + 8. If you're using **master** branch, bump up the package version in YourService.nuget.proj. If you're using **AutoRest** branch, change the package version in the project.json file, as well as in the AssemblyInfo.cs file. + 9. Use this local Package for your Powershell development + 10. Create 2 Pull Requests and send an email to [azsdkcode@microsoft.com](mailto:azsdkcode@microsoft.com) + - A Pull Request of your spec changes against **master** branch of the [Azure REST API Specs](https://github.com/azure/azure-rest-api-specs) + - A Pull request of your Azure SDK for .NET changes against **master** branch of the [Azure SDK for .NET](https://github.com/azure/azure-sdk-for-net) + 11. Both the pull requests will be reviewed and merged by the Azure SDK team + +### Code Review Process + +Before a pull request will be considered by the Azure SDK team, the following requirements must be met: + +- Prior to issuing the pull request: + - All code must have completed any necessary legal signoff for being publically viewable (Patent review, JSR review, etc.) + - The changes cannot break any existing functional/unit tests that are part of the central repository. + - This includes all tests, even those not associated with the given feature area. + - Code submitted must have basic unit test coverage, and have all the unit tests pass. Testing is the full responsibility of the service team + - Functional tests are encouraged, and provide teams with a way to mitigate regressions caused by other code contributions. + - Code should be commented. + - Code should be fully code reviewed. + - Code should be able to merge without any conflicts into the dev branch being targeted. + - Code should pass all relevant static checks and coding guidelines set forth by the specific repository. + - All build warnings and code analysis warnings should be fixed prior to submission. +- As part of the pull request (aka, in the text box on GitHub as part of submitting the pull request): + - Proof of completion of the code review and test passes requirements above. + - Identity of QA responsible for feature testing (can be conducted post-merging of the pull request). + - Short description of the payload of pull request. +- After the pull request is submitted: + - Send an email to the Azure SDK Code Review (azsdkcode@microsoft.com) alias. + - Include all interested parties from your team as well. + - In the message, make sure to acknowledge that the legal signoff process is complete. + +Once all of the above steps are met, the following process will be followed: + +- A member of the Azure SDK team will review the pull request on GitHub. +- If the pull request meets the respository's requirements, the individual will aproove the pull request, merging the code into the dev branch of the source repository. + - The owner will then respond to the email sent as part of the pull request, informing the group of the completion of the request. +- If the request does not meet any of the requirements, the pull request will not be merged, and the necessary fixes for acceptance will be communicated back to the partner team. + +### Adding Tests + +Regarding the test project, one thing that's important is to name the test project by adding a ".Tests" suffix to the folder name for the folder containing your project. For example, the test project for "Compute\Microsoft.Azure.Management.Compute" should be named 'Compute.Tests' + + - This is for improving CI performance so to find exactly one copy of your test assembly. + - Also, due to test dependencies, the test project should build both .NET 4.5 and NETStandard 1.5. For example, check out "src\ResourceManagement\Resource\Resource.tests" + +### Issues with Generated Code + +Much of the SDK code is generated from metadata specs about the REST APIs. Do not submit PRs that modify generated code. Instead, + - File an issue describing the problem, + - Refer to the the [AutoRest project](https://github.com/azure/autorest) to view and modify the generator, or + - Add additional methods, properties, and overloads to the SDK by adding classes in the 'Customizations' folder of a project \ No newline at end of file diff --git a/appveyor.yml b/appveyor.yml new file mode 100644 index 000000000..ae10119ca --- /dev/null +++ b/appveyor.yml @@ -0,0 +1,26 @@ +clone_folder: c:\projects\azure-sdk-for-net + +environment: + access_token: + secure: JWSy9tPo2eoTYpPQplvokf4IiVk6onNBbWwAs6nNWWyQ2JaO+MRAg/QzbJnTjpUm + +install: + - cinst docfx + +before_build: + - cd .. + - if exist azure-docs-sdk-dotnet rmdir /s /q azure-docs-sdk-dotnet + - git config --global credential.helper store + - ps: Add-Content "$env:USERPROFILE\.git-credentials" "https://$($env:access_token):x-oauth-basic@github.com`n" + - git config --global user.email "vscopbld@microsoft.com" + - git config --global user.name "OpenPublishBuild" + - git clone -q --branch=master https://github.com/Azure/azure-docs-sdk-dotnet.git + +build_script: + - ps: azure-docs-sdk-dotnet\build.ps1 + +on_success: + - cd azure-docs-sdk-dotnet + - git add . + - git diff --quiet --exit-code --cached || git commit -m "Update Reference Content" && git push origin master + - appveyor AddMessage "Document Updated" diff --git a/build.proj b/build.proj new file mode 100644 index 000000000..2ed173e17 --- /dev/null +++ b/build.proj @@ -0,0 +1,344 @@ + + + + + + + $(MSBuildThisFileDirectory) + $(LibraryRoot)src + $(LibraryRoot)tools + $(LibraryRoot)\packages + Microsoft Azure Management Libraries + AzureManagementLibraries.sln + $(LibraryRoot)binaries + $(BinariesFolder)\packages + Debug + false + + false + All + portable;net40;net45 + $(LibraryToolsFolder)\7-Zip + $(ZipExeFolder)\7z.exe + + + + + + + + + + + "$(LibraryToolsFolder)\nuget.exe" + + + + + + + + + $(OnPremiseBuildTasks) + true + false + + + + + + + + + + + + + + + + + + + + + + <_ExtraPropertyList>CodeSign=$(CodeSign) + <_TemporaryNetCoreFeeds>-s https://api.nuget.org/v3/index.json -s https://dotnet.myget.org/F/cli-deps/api/v3/index.json + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + $([System.IO.Path]::GetFileName($(Scope))) + + + + + + + + + + + + + + + + + 31bf3856ad364e35 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + -PackagesDirectory $(LibraryNugetPackageFolder) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <_NetCorePackagesTemp Include="$(PackageOutputDir)\%(NetCore_AutoRestLibraries.PackageName)*.nupkg"/> + + + + + + <_UnsignedFolder>$(PackageOutputDir)\unsigned + <_SignedFolder>$(PackageOutputDir)\signed + + + + + + + + + + + + + + + + <_TempBinaries Include="$(PackageOutputDir)\**\*.dll"/> + <_PackageBinaries Include="@(_TempBinaries)"> + + $(_UnsignedFolder)\$([System.String]::new('%(RecursiveDir)%(FileName)%(Extension)').Replace('\', '__')) + $(_SignedFolder)\$([System.String]::new('%(RecursiveDir)%(FileName)%(Extension)').Replace('\', '__')) + + + + + + + + + + + + + + + + + + + + diff --git a/global.json b/global.json new file mode 100644 index 000000000..0dab8a49c --- /dev/null +++ b/global.json @@ -0,0 +1,11 @@ +{ + "projects": [ + "src/TestFramework/Microsoft.Azure.Test.HttpRecorder", + "src/TestFramework/Microsoft.Rest.ClientRuntime.Azure.TestFramework", + "src/ResourceManagement/Compute/Microsoft.Azure.Management.Compute", + "src/ResourceManagement/Network/Microsoft.Azure.Management.Network", + "src/ResourceManagement/Resource/Microsoft.Azure.Management.ResourceManager", + "src/ResourceManagement/Storage/Microsoft.Azure.Management.Storage", + "src/ResourceManagement/Azure/Microsoft.Azure.Management", + ] +} \ No newline at end of file diff --git a/src/ResourceManagement/Azure/Azure.Tests/AvailabilitySetsTests.cs b/src/ResourceManagement/Azure/Azure.Tests/AvailabilitySetsTests.cs new file mode 100644 index 000000000..97c8e764c --- /dev/null +++ b/src/ResourceManagement/Azure/Azure.Tests/AvailabilitySetsTests.cs @@ -0,0 +1,86 @@ +using Microsoft.Azure.Management.V2.Compute; +using Microsoft.Azure.Management.V2.Resource; +using Microsoft.Azure.Management.V2.Resource.Authentication; +using Microsoft.Azure.Management.V2.Resource.Core; +using System; +using Xunit; + +namespace Azure.Tests +{ + public class AvailabilitySetsTests + { + private string rgName = "rgstg1546"; + private string availName = "availset732"; + + [Fact(Skip = "TODO: Convert to recorded tests")] + public void CanCRUDAvailabilitySet() + { + try + { + // Create + IComputeManager computeManager = CreatComputeManager(); + var availabilitySet = computeManager.AvailabilitySets + .Define(availName) + .WithRegion(Region.US_EAST) + .WithNewResourceGroup(rgName) + .WithUpdateDomainCount(2) + .WithFaultDomainCount(3) + .Create(); + + Assert.True(string.Equals(availabilitySet.ResourceGroupName, rgName)); + Assert.True(availabilitySet.UpdateDomainCount.HasValue && availabilitySet.UpdateDomainCount == 2); + Assert.True(availabilitySet.FaultDomainCount.HasValue && availabilitySet.FaultDomainCount == 3); + + // Get + var feteched = computeManager.AvailabilitySets.GetById(availabilitySet.Id); + Assert.NotNull(feteched); + + // List + var availabilitySets = computeManager.AvailabilitySets.ListByGroup(rgName); + // todo: fix listing + // Assert.True(availabilitySets.Count() > 0); + + // Update + var availabilitySetUpdated = availabilitySet.Update() + .WithTag("a", "aa") + .WithTag("b", "bb") + .Apply(); + + // Delete + computeManager.AvailabilitySets.Delete(availabilitySet.Id); + } + catch (Exception ex) + { + // + } + finally + { + try + { + var resourceManager = CreateResourceManager(); + resourceManager.ResourceGroups.Delete(rgName); + } + catch { } + } + } + + private IComputeManager CreatComputeManager() + { + ApplicationTokenCredentials credentials = new ApplicationTokenCredentials(@"C:\my.azureauth"); + return ComputeManager + .Configure() + .withLogLevel(HttpLoggingDelegatingHandler.Level.BODY) + .Authenticate(credentials, credentials.DefaultSubscriptionId); + } + + private IResourceManager CreateResourceManager() + { + ApplicationTokenCredentials credentials = new ApplicationTokenCredentials(@"C:\my.azureauth"); + IResourceManager resourceManager = ResourceManager2.Configure() + .withLogLevel(HttpLoggingDelegatingHandler.Level.BODY) + .Authenticate(credentials) + .WithSubscription(credentials.DefaultSubscriptionId); + return resourceManager; + } + } +} \ No newline at end of file diff --git a/src/ResourceManagement/Azure/Azure.Tests/AzureTests.xproj b/src/ResourceManagement/Azure/Azure.Tests/AzureTests.xproj new file mode 100644 index 000000000..4a7f6e95c --- /dev/null +++ b/src/ResourceManagement/Azure/Azure.Tests/AzureTests.xproj @@ -0,0 +1,22 @@ + + + + 14.0 + $(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion) + + + + bf7b919f-53f0-4216-84bc-722786a3aea0 + Azure.Tests + .\obj + .\bin\ + v4.5.2 + + + 2.0 + + + + + + \ No newline at end of file diff --git a/src/ResourceManagement/Azure/Azure.Tests/DeploymentTests.cs b/src/ResourceManagement/Azure/Azure.Tests/DeploymentTests.cs new file mode 100644 index 000000000..05910dbaf --- /dev/null +++ b/src/ResourceManagement/Azure/Azure.Tests/DeploymentTests.cs @@ -0,0 +1,130 @@ +using Microsoft.Azure.Management.ResourceManager.Models; +using Microsoft.Azure.Management.V2.Resource; +using Microsoft.Azure.Management.V2.Resource.Authentication; +using Microsoft.Azure.Management.V2.Resource.Core; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; +using Xunit; + +namespace Azure.Tests +{ + public class DeploymentTests + { + private string rgName = "rgchash12"; + private string deploymentName1 = "deployment1"; + private string deploymentName2 = "deployment2"; + private string deploymentName3 = "deployment3"; + private string templateUri = "https://raw.githubusercontent.com/Azure/azure-quickstart-templates/master/101-vnet-two-subnets/azuredeploy.json"; + private string parametersUri = "https://raw.githubusercontent.com/Azure/azure-quickstart-templates/master/101-vnet-two-subnets/azuredeploy.parameters.json"; + private string updateTemplate = "{\"$schema\":\"https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#\",\"contentVersion\":\"1.0.0.0\",\"parameters\":{\"vnetName\":{\"type\":\"string\",\"defaultValue\":\"VNet2\",\"metadata\":{\"description\":\"VNet name\"}},\"vnetAddressPrefix\":{\"type\":\"string\",\"defaultValue\":\"10.0.0.0/16\",\"metadata\":{\"description\":\"Address prefix\"}},\"subnet1Prefix\":{\"type\":\"string\",\"defaultValue\":\"10.0.0.0/24\",\"metadata\":{\"description\":\"Subnet 1 Prefix\"}},\"subnet1Name\":{\"type\":\"string\",\"defaultValue\":\"Subnet1\",\"metadata\":{\"description\":\"Subnet 1 Name\"}},\"subnet2Prefix\":{\"type\":\"string\",\"defaultValue\":\"10.0.1.0/24\",\"metadata\":{\"description\":\"Subnet 2 Prefix\"}},\"subnet2Name\":{\"type\":\"string\",\"defaultValue\":\"Subnet222\",\"metadata\":{\"description\":\"Subnet 2 Name\"}}},\"variables\":{\"apiVersion\":\"2015-06-15\"},\"resources\":[{\"apiVersion\":\"[variables('apiVersion')]\",\"type\":\"Microsoft.Network/virtualNetworks\",\"name\":\"[parameters('vnetName')]\",\"location\":\"[resourceGroup().location]\",\"properties\":{\"addressSpace\":{\"addressPrefixes\":[\"[parameters('vnetAddressPrefix')]\"]},\"subnets\":[{\"name\":\"[parameters('subnet1Name')]\",\"properties\":{\"addressPrefix\":\"[parameters('subnet1Prefix')]\"}},{\"name\":\"[parameters('subnet2Name')]\",\"properties\":{\"addressPrefix\":\"[parameters('subnet2Prefix')]\"}}]}}]}"; + private string updateParameters = "{\"vnetAddressPrefix\":{\"value\":\"10.0.0.0/16\"},\"subnet1Name\":{\"value\":\"Subnet1\"},\"subnet1Prefix\":{\"value\":\"10.0.0.0/24\"}}"; + private string contentVersion = "1.0.0.0"; + + [Fact(Skip = "TODO: Convert to recorded tests")] + public void CanCreateVirtualNetwork() + { + IResourceManager resourceManager = CreateResourceManager(); + + resourceManager.Deployments + .Define(deploymentName1) + .WithNewResourceGroup(rgName, Region.US_EAST) + .WithTemplateLink(templateUri, contentVersion) + .WithParametersLink(parametersUri, contentVersion) + .WithMode(DeploymentMode.Complete) + .Create(); + + // List + var deployments = resourceManager.Deployments.ListByGroup(rgName); + var found = from dep in deployments + where dep.Name.Equals(deploymentName1, StringComparison.OrdinalIgnoreCase) + select dep; + + Assert.True(found != null); + + // Get + var deployment = resourceManager.Deployments.GetByGroup(rgName, deploymentName1); + Assert.True(deployment != null); + Assert.True(deployment.ProvisioningState != null); + + // Try export template from deployment object + var exportedDeployment = deployment.ExportTemplate; + Assert.True(exportedDeployment.Template != null); + + // Try export template using resourcegroup + var resourceGroup = resourceManager.ResourceGroups.GetByName(rgName); + var exportedRG = resourceGroup.ExportTemplate(ResourceGroupExportTemplateOptions.INCLUDE_BOTH); + Assert.True(exportedRG.Template != null); + + // Deployment operations + var deploymentOperations = deployment.DeploymentOperations.List(); + Assert.Equal(2, deploymentOperations.Count); + IDeploymentOperation deploymentOperation = deployment.DeploymentOperations.GetById(deploymentOperations.First().OperationId); + Assert.NotNull(deploymentOperation); + + resourceManager.GenericResources.Delete(rgName, "Microsoft.Network", "", "virtualnetworks", "VNet1", "2015-06-15"); + } + + [Fact(Skip = "TODO: Convert to recorded tests")] + public void CanCancelVirtualNetworkDeployment() + { + IResourceManager resourceManager = CreateResourceManager(); + resourceManager.Deployments + .Define(deploymentName2) + .WithNewResourceGroup(rgName, Region.US_EAST) + .WithTemplateLink(templateUri, contentVersion) + .WithParametersLink(parametersUri, contentVersion) + .WithMode(DeploymentMode.Complete) + .BeginCreate(); + var deployment = resourceManager.Deployments.GetByGroup(rgName, deploymentName2); + Assert.Equal(deployment.Name, deploymentName2); + deployment.Cancel(); + deployment = resourceManager.Deployments.GetByGroup(rgName, deploymentName2); + Assert.Equal(deployment.ProvisioningState, "Canceled"); + resourceManager.GenericResources.Delete(rgName, "Microsoft.Network", "", "virtualnetworks", "VNet1", "2015-06-15"); + } + + [Fact(Skip = "TODO: Convert to recorded tests")] + public void CanUpdateVirtualNetworkDeployment() + { + IResourceManager resourceManager = CreateResourceManager(); + + resourceManager.Deployments + .Define(deploymentName3) + .WithNewResourceGroup(rgName, Region.US_EAST) + .WithTemplateLink(templateUri, contentVersion) + .WithParametersLink(parametersUri, contentVersion) + .WithMode(DeploymentMode.Complete) + .BeginCreate(); + var deployment = resourceManager.Deployments.GetByGroup(rgName, deploymentName3); + Assert.Equal(deployment.Name, deploymentName3); + deployment.Cancel(); + deployment = resourceManager.Deployments.GetByGroup(rgName, deploymentName3); + Assert.Equal(deployment.ProvisioningState, "Canceled"); + + deployment.Update() + .WithTemplate(updateTemplate) + .WithParameters(updateParameters) + .WithMode(DeploymentMode.Incremental) + .Apply(); + deployment = resourceManager.Deployments.GetByGroup(rgName, deploymentName3); + Assert.True(deployment.Mode == DeploymentMode.Incremental); + Assert.Equal(deployment.ProvisioningState, "Succeeded"); + + IGenericResource genericVnet = resourceManager.GenericResources.Get(rgName, "Microsoft.Network", "", "virtualnetworks", "VNet2", "2015-06-15"); + Assert.NotNull(genericVnet); + resourceManager.GenericResources.Delete(rgName, "Microsoft.Network", "", "virtualnetworks", "VNet2", "2015-06-15"); + } + + private IResourceManager CreateResourceManager() + { + ApplicationTokenCredentials credentials = new ApplicationTokenCredentials(@"C:\my.azureauth"); + IResourceManager resourceManager = ResourceManager2.Configure() + .withLogLevel(HttpLoggingDelegatingHandler.Level.BODY) + .Authenticate(credentials) + .WithSubscription(credentials.DefaultSubscriptionId); + return resourceManager; + } + } +} diff --git a/src/ResourceManagement/Azure/Azure.Tests/GenericResourcesTests.cs b/src/ResourceManagement/Azure/Azure.Tests/GenericResourcesTests.cs new file mode 100644 index 000000000..dab78361d --- /dev/null +++ b/src/ResourceManagement/Azure/Azure.Tests/GenericResourcesTests.cs @@ -0,0 +1,97 @@ +using Microsoft.Azure.Management.V2.Resource; +using Microsoft.Azure.Management.V2.Resource.Authentication; +using Microsoft.Azure.Management.V2.Resource.Core; +using Newtonsoft.Json; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; +using Xunit; + +namespace Azure.Tests +{ + public class GenericResourcesTests + { + + private string resourceName = "rgweb955"; + private string rgName = "csmrg720"; + private string newRgName = "csmrg189"; + + [Fact(Skip = "TODO: Convert to recorded tests")] + public void CanCreateUpdateMoveResource() + { + IResourceManager resourceManager = CreateResourceManager(); + IGenericResources genericResources = resourceManager.GenericResources; + + IGenericResource resource = genericResources.Define(resourceName) + .WithRegion(Region.US_EAST) + .WithNewResourceGroup(rgName) + .WithResourceType("sites") + .WithProviderNamespace("Microsoft.Web") + .WithoutPlan() + .WithApiVersion("2015-08-01") + .WithParentResource("") + .WithProperties(JsonConvert.DeserializeObject("{\"SiteMode\":\"Limited\",\"ComputeMode\":\"Shared\"}")) + .Create(); + + // List + var found = (from r in genericResources.ListByGroup(rgName) + where string.Equals(r.Name, resourceName, StringComparison.OrdinalIgnoreCase) + select r).FirstOrDefault(); + Assert.NotNull(found); + + // Get + resource = genericResources.Get(rgName, + resource.ResourceProviderNamespace, + resource.ParentResourceId, + resource.ResourceType, + resource.Name, + resource.ApiVersion); + + // Move + IResourceGroup newGroup = resourceManager + .ResourceGroups + .Define(newRgName) + .WithRegion(Region.US_EAST) + .Create(); + genericResources.MoveResources(rgName, newGroup, new List + { + resource.Id + }); + + // Check existence [TODO: Server returned "MethodNotAllowed" for CheckExistence call] + /*bool exists = genericResources.CheckExistence(newRgName, + resource.ResourceProviderNamespace, + resource.ParentResourceId, + resource.ResourceType, + resource.Name, + resource.ApiVersion); + + Assert.True(exists); + */ + + // Get and update + resource = genericResources.Get(newRgName, + resource.ResourceProviderNamespace, + resource.ParentResourceId, + resource.ResourceType, + resource.Name, + resource.ApiVersion); + resource.Update() + .WithApiVersion("2015-08-01") + .WithProperties(JsonConvert.DeserializeObject("{\"SiteMode\":\"Limited\",\"ComputeMode\":\"Dynamic\"}")) + .Apply(); + } + + private IResourceManager CreateResourceManager() + { + ApplicationTokenCredentials credentials = new ApplicationTokenCredentials(@"C:\my.azureauth"); + IResourceManager resourceManager = ResourceManager2.Configure() + .withLogLevel(HttpLoggingDelegatingHandler.Level.BODY) + .Authenticate(credentials) + .WithSubscription(credentials.DefaultSubscriptionId); + return resourceManager; + } + } +} + diff --git a/src/ResourceManagement/Azure/Azure.Tests/NSGTests.cs b/src/ResourceManagement/Azure/Azure.Tests/NSGTests.cs new file mode 100644 index 000000000..a27bb8827 --- /dev/null +++ b/src/ResourceManagement/Azure/Azure.Tests/NSGTests.cs @@ -0,0 +1,105 @@ +using Microsoft.Azure.Management.Network.Models; +using Microsoft.Azure.Management.V2.Network; +using Microsoft.Azure.Management.V2.Resource.Core; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Xunit; + +namespace Azure.Tests +{ + public class NSGTests + { + string testId = "" + System.DateTime.Now.Ticks % 100000L; + + [Fact(Skip = "TODO: Convert to recorded tests")] + public void CreateUpdateTest() + { + var newName = "nsg" + this.testId; + var manager = TestHelper.CreateNetworkManager(); + var nsg = manager.NetworkSecurityGroups.Define(newName) + .WithRegion(Region.US_WEST) + .WithNewResourceGroup("rg" + this.testId) + .DefineRule("rule1") + .AllowOutbound() + .FromAnyAddress() + .FromPort(80) + .ToAnyAddress() + .ToPort(80) + .WithProtocol(SecurityRuleProtocol.Tcp) + .Attach() + .DefineRule("rule2") + .AllowInbound() + .FromAnyAddress() + .FromAnyPort() + .ToAnyAddress() + .ToPortRange(22, 25) + .WithAnyProtocol() + .WithPriority(200) + .WithDescription("foo!!") + .Attach() + .Create(); + + // Verify + Assert.True(nsg.Region.Equals(Region.US_WEST)); + Assert.True(nsg.SecurityRules().Count == 2); + + var resource = manager.NetworkSecurityGroups.GetByGroup("rg" + this.testId, newName); + resource = resource.Update() + .WithoutRule("rule1") + .WithTag("tag1", "value1") + .WithTag("tag2", "value2") + .DefineRule("rule3") + .AllowInbound() + .FromAnyAddress() + .FromAnyPort() + .ToAnyAddress() + .ToAnyPort() + .WithProtocol(SecurityRuleProtocol.Udp) + .Attach() + .WithoutRule("rule1") + .UpdateRule("rule2") + .DenyInbound() + .FromAddress("100.0.0.0/29") + .FromPort(88) + .WithPriority(300) + .WithDescription("bar!!!") + .Parent() + .Apply(); + Assert.True(resource.Tags.ContainsKey("tag1")); + + manager.NetworkSecurityGroups.Delete(resource.Id); + } + + + public void Print(INetworkSecurityGroup resource) + { + var info = new StringBuilder(); + info.Append("NSG: ").Append(resource.Id) + .Append("Name: ").Append(resource.Name) + .Append("\n\tResource group: ").Append(resource.ResourceGroupName) + .Append("\n\tRegion: ").Append(resource.Region) + .Append("\n\tTags: ").Append(resource.Tags); + + // Output security rules + foreach (INetworkSecurityRule rule in resource.SecurityRules()) + { + info.Append("\n\tRule: ").Append(rule.Name) + .Append("\n\t\tAccess: ").Append(rule.Access) + .Append("\n\t\tDirection: ").Append(rule.Direction) + .Append("\n\t\tFrom address: ").Append(rule.SourceAddressPrefix) + .Append("\n\t\tFrom port range: ").Append(rule.SourcePortRange) + .Append("\n\t\tTo address: ").Append(rule.DestinationAddressPrefix) + .Append("\n\t\tTo port: ").Append(rule.DestinationPortRange) + .Append("\n\t\tProtocol: ").Append(rule.Protocol) + .Append("\n\t\tPriority: ").Append(rule.Priority) + .Append("\n\t\tDescription: ").Append(rule.Description); + } + + info.Append("\n\tNICs: ").Append(resource.NetworkInterfaceIds); + Console.WriteLine(info.ToString()); + } + } +} diff --git a/src/ResourceManagement/Azure/Azure.Tests/NetworkInterfaceTests.cs b/src/ResourceManagement/Azure/Azure.Tests/NetworkInterfaceTests.cs new file mode 100644 index 000000000..04a7ce12d --- /dev/null +++ b/src/ResourceManagement/Azure/Azure.Tests/NetworkInterfaceTests.cs @@ -0,0 +1,83 @@ +using Microsoft.Azure.Management.V2.Network; +using Microsoft.Azure.Management.V2.Resource.Authentication; +using Microsoft.Azure.Management.V2.Resource.Core; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Xunit; + +namespace Azure.Tests +{ + public class NetworkInterfaceTests + { + string testId = "" + System.DateTime.Now.Ticks % 100000L; + + [Fact(Skip = "TODO: Convert to recorded tests")] + public void CreateUpdateTest() + { + var manager = TestHelper.CreateNetworkManager(); + manager.NetworkInterfaces.Define("nic" + testId) + .WithRegion(Region.US_EAST) + .WithNewResourceGroup("rg" + this.testId) + .WithNewPrimaryNetwork("10.0.0.0/28") + .WithPrimaryPrivateIpAddressDynamic() + .WithNewPrimaryPublicIpAddress("pipdns" + this.testId) + .WithIpForwarding() + .Create(); + + var resource = manager.NetworkInterfaces.GetByGroup("rg" + this.testId, "nic" + testId); + resource = resource.Update() + .WithoutIpForwarding() + .UpdateIpConfiguration("primary-nic-config") // Updating the primary ip configuration + .WithPrivateIpAddressDynamic() // Equivalent to ..update().withPrimaryPrivateIpAddressDynamic() + .WithoutPublicIpAddress() // Equivalent to ..update().withoutPrimaryPublicIpAddress() + .Parent() + .WithTag("tag1", "value1") + .WithTag("tag2", "value2") + .Apply(); + Assert.True(resource.Tags.ContainsKey("tag1")); + + manager.NetworkInterfaces.Delete(resource.Id); + } + + public void print(INetworkInterface resource) + { + var info = new StringBuilder(); + info.Append("NetworkInterface: ").Append(resource.Id) + .Append("Name: ").Append(resource.Name) + .Append("\n\tResource group: ").Append(resource.ResourceGroupName) + .Append("\n\tRegion: ").Append(resource.Region) + .Append("\n\tTags: ").Append(resource.Tags) + .Append("\n\tInternal DNS name label: ").Append(resource.InternalDnsNameLabel) + .Append("\n\tInternal FQDN: ").Append(resource.InternalFqdn) + .Append("\n\tDNS server IPs: "); + + // Output dns servers + foreach (string dnsServerIp in resource.DnsServers) + { + info.Append("\n\t\t").Append(dnsServerIp); + } + + info.Append("\n\t IP forwarding enabled: ").Append(resource.IsIpForwardingEnabled) + .Append("\n\tMAC Address:").Append(resource.MacAddress) + .Append("\n\tPrivate IP:").Append(resource.PrimaryPrivateIp) + .Append("\n\tPrivate allocation method:").Append(resource.PrimaryPrivateIpAllocationMethod) + .Append("\n\tSubnet Id:").Append(resource.PrimarySubnetId) + .Append("\n\tIP configurations: "); + + // Output IP configs + foreach (INicIpConfiguration ipConfig in resource.IpConfigurations()) + { + info.Append("\n\t\tName: ").Append(ipConfig.Name) + .Append("\n\t\tPrivate IP: ").Append(ipConfig.PrivateIp) + .Append("\n\t\tPrivate IP allocation method: ").Append(ipConfig.PrivateIpAllocationMethod) + .Append("\n\t\tPIP id: ").Append(ipConfig.PublicIpAddressId) + .Append("\n\t\tSubnet ID: ").Append(ipConfig.SubnetId); + } + + System.Console.WriteLine(info.ToString()); + } + } +} diff --git a/src/ResourceManagement/Azure/Azure.Tests/NetworkTests.cs b/src/ResourceManagement/Azure/Azure.Tests/NetworkTests.cs new file mode 100644 index 000000000..1fa9dcb99 --- /dev/null +++ b/src/ResourceManagement/Azure/Azure.Tests/NetworkTests.cs @@ -0,0 +1,107 @@ +using Microsoft.Azure.Management.V2.Network; +using Microsoft.Azure.Management.V2.Resource.Authentication; +using Microsoft.Azure.Management.V2.Resource.Core; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Xunit; + +namespace Azure.Tests +{ + public class NetworkTests + { + string testId = "" + System.DateTime.Now.Ticks % 100000L; + + [Fact(Skip = "TODO: Convert to recorded tests")] + public void CreateUpdateTest() + { + string newName = "net" + this.testId; + var region = Region.US_WEST; + var groupName = "rg" + this.testId; + + // Create an NSG + var manager = TestHelper.CreateNetworkManager(); + var nsg = manager.NetworkSecurityGroups.Define("nsg" + this.testId) + .WithRegion(region) + .WithNewResourceGroup(groupName) + .Create(); + + // Create a network + manager.Networks.Define(newName) + .WithRegion(region) + .WithNewResourceGroup(groupName) + .WithAddressSpace("10.0.0.0/28") + .WithSubnet("subnetA", "10.0.0.0/29") + .DefineSubnet("subnetB") + .WithAddressPrefix("10.0.0.8/29") + .WithExistingNetworkSecurityGroup(nsg) + .Attach() + .Create(); + + var resource = manager.Networks.GetByGroup(groupName, newName); + resource = resource.Update() + .WithTag("tag1", "value1") + .WithTag("tag2", "value2") + .WithAddressSpace("141.25.0.0/16") + .WithSubnet("subnetC", "141.25.0.0/29") + .WithoutSubnet("subnetA") + .UpdateSubnet("subnetB") + .WithAddressPrefix("141.25.0.8/29") + .WithExistingNetworkSecurityGroup(nsg) + .Parent() + .DefineSubnet("subnetD") + .WithAddressPrefix("141.25.0.16/29") + .WithExistingNetworkSecurityGroup(nsg) + .Attach() + .Apply(); + Assert.True(resource.Tags.ContainsKey("tag1")); + + manager.Networks.Delete(resource.Id); + manager.NetworkSecurityGroups.Delete(nsg.Id); + } + + + public void print(INetwork resource) + { + var info = new StringBuilder(); + info.Append("INetwork: ").Append(resource.Id) + .Append("Name: ").Append(resource.Name) + .Append("\n\tResource group: ").Append(resource.ResourceGroupName) + .Append("\n\tRegion: ").Append(resource.Region) + .Append("\n\tTags: ").Append(resource.Tags) + .Append("\n\tAddress spaces: ").Append(resource.AddressSpaces) + .Append("\n\tDNS server IPs: ").Append(resource.DnsServerIPs); + + // Output subnets + foreach (ISubnet subnet in resource.Subnets().Values) + { + info.Append("\n\tSubnet: ").Append(subnet.Name) + .Append("\n\t\tAddress prefix: ").Append(subnet.AddressPrefix) + .Append("\n\tAssociated NSG: "); + + INetworkSecurityGroup nsg; + try + { + nsg = subnet.NetworkSecurityGroup(); + } + catch (Exception e) + { + nsg = null; + } + + if (null == nsg) + { + info.Append("(None)"); + } + else + { + info.Append(nsg.ResourceGroupName + "/" + nsg.Name); + } + } + + Console.WriteLine(info.ToString()); + } + } +} diff --git a/src/ResourceManagement/Azure/Azure.Tests/Properties/AssemblyInfo.cs b/src/ResourceManagement/Azure/Azure.Tests/Properties/AssemblyInfo.cs new file mode 100644 index 000000000..01242a85e --- /dev/null +++ b/src/ResourceManagement/Azure/Azure.Tests/Properties/AssemblyInfo.cs @@ -0,0 +1,19 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("Azure.Tests")] +[assembly: AssemblyTrademark("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("bf7b919f-53f0-4216-84bc-722786a3aea0")] diff --git a/src/ResourceManagement/Azure/Azure.Tests/ProvidersTests.cs b/src/ResourceManagement/Azure/Azure.Tests/ProvidersTests.cs new file mode 100644 index 000000000..37b51d49e --- /dev/null +++ b/src/ResourceManagement/Azure/Azure.Tests/ProvidersTests.cs @@ -0,0 +1,52 @@ +using Microsoft.Azure.Management.ResourceManager.Models; +using Microsoft.Azure.Management.V2.Resource; +using Microsoft.Azure.Management.V2.Resource.Authentication; +using Microsoft.Azure.Management.V2.Resource.Core; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; +using Xunit; + +namespace Azure.Tests +{ + public class ProvidersTests + { + [Fact(Skip = "TODO: Convert to recorded tests")] + public void CanRegisterAndUnRegisterProvider() + { + var resourceManager = CreateResourceManager(); + var providers = resourceManager.Providers.List(); + IProvider provider = providers.FirstOrDefault(); + Assert.NotNull(provider); + + provider = resourceManager.Providers.Unregister(provider.Namespace); + while (provider.RegistrationState.Equals("Unregistering")) + { + Thread.Sleep(5000); + provider = resourceManager.Providers.GetByName(provider.Namespace); + } + + provider = resourceManager.Providers.Register(provider.Namespace); + while (provider.RegistrationState.Equals("Registering")) + { + Thread.Sleep(5000); + provider = resourceManager.Providers.GetByName(provider.Namespace); + } + Assert.True(string.Equals(provider.RegistrationState, "Registered")); + IList resourceTypes = provider.ResourceTypes; + Assert.True(resourceTypes.Count > 0); + } + + private IResourceManager CreateResourceManager() + { + ApplicationTokenCredentials credentials = new ApplicationTokenCredentials(@"C:\my.azureauth"); + IResourceManager resourceManager = ResourceManager2.Configure() + .withLogLevel(HttpLoggingDelegatingHandler.Level.BODY) + .Authenticate(credentials) + .WithSubscription(credentials.DefaultSubscriptionId); + return resourceManager; + } + } +} diff --git a/src/ResourceManagement/Azure/Azure.Tests/PublicIpAddressTests.cs b/src/ResourceManagement/Azure/Azure.Tests/PublicIpAddressTests.cs new file mode 100644 index 000000000..1c8b5d534 --- /dev/null +++ b/src/ResourceManagement/Azure/Azure.Tests/PublicIpAddressTests.cs @@ -0,0 +1,65 @@ +using Microsoft.Azure.Management.V2.Network; +using Microsoft.Azure.Management.V2.Resource.Core; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Xunit; + +namespace Azure.Tests +{ + public class IPublicIpAddressTests + { + string testId = "" + System.DateTime.Now.Ticks % 100000L; + + [Fact(Skip = "TODO: Convert to recorded tests")] + public void CreateUpdateTest() + { + var newPipName = "pip" + this.testId; + var newRG = "rg" + this.testId; + var manager = TestHelper.CreateNetworkManager(); + var pip = manager.PublicIpAddresses.Define(newPipName) + .WithRegion(Region.US_WEST) + .WithNewResourceGroup(newRG) + .WithDynamicIp() + .WithLeafDomainLabel(newPipName) + .WithIdleTimeoutInMinutes(10) + .Create(); + + var resource = manager.PublicIpAddresses.GetByGroup(newRG, newPipName); + var updatedDnsName = resource.LeafDomainLabel + "xx"; + var updatedIdleTimeout = 15; + resource = resource.Update() + .WithStaticIp() + .WithLeafDomainLabel(updatedDnsName) + .WithReverseFqdn(resource.LeafDomainLabel + "." + resource.RegionName + ".cloudapp.azure.com") + .WithIdleTimeoutInMinutes(updatedIdleTimeout) + .WithTag("tag1", "value1") + .WithTag("tag2", "value2") + .Apply(); + Assert.True(resource.LeafDomainLabel.Equals(updatedDnsName, StringComparison.OrdinalIgnoreCase)); + Assert.True(resource.IdleTimeoutInMinutes == updatedIdleTimeout); + + manager.PublicIpAddresses.Delete(pip.Id); + + } + + + public void print(IPublicIpAddress resource) + { + System.Console.WriteLine(new StringBuilder().Append("Public IP Address: ").Append(resource.Id) + .Append("Name: ").Append(resource.Name) + .Append("\n\tResource group: ").Append(resource.ResourceGroupName) + .Append("\n\tRegion: ").Append(resource.Region) + .Append("\n\tTags: ").Append(resource.Tags) + .Append("\n\tIP Address: ").Append(resource.IpAddress) + .Append("\n\tLeaf domain label: ").Append(resource.LeafDomainLabel) + .Append("\n\tFQDN: ").Append(resource.Fqdn) + .Append("\n\tReverse FQDN: ").Append(resource.ReverseFqdn) + .Append("\n\tIdle timeout (minutes): ").Append(resource.IdleTimeoutInMinutes) + .Append("\n\tIP allocation method: ").Append(resource.IpAllocationMethod.ToString()) + .ToString()); + } + } +} diff --git a/src/ResourceManagement/Azure/Azure.Tests/StorageAccountsTests.cs b/src/ResourceManagement/Azure/Azure.Tests/StorageAccountsTests.cs new file mode 100644 index 000000000..35867a4c9 --- /dev/null +++ b/src/ResourceManagement/Azure/Azure.Tests/StorageAccountsTests.cs @@ -0,0 +1,96 @@ +using Microsoft.Azure.Management.Compute.Models; +using Microsoft.Azure.Management.Storage.Models; +using Microsoft.Azure.Management.V2.Resource; +using Microsoft.Azure.Management.V2.Resource.Authentication; +using Microsoft.Azure.Management.V2.Resource.Core; +using Microsoft.Azure.Management.V2.Storage; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; +using Xunit; + +namespace Azure.Tests +{ + public class StorageAccountsTests + { + private string rgName = "rgstg123"; + private string stgName = "stgbnc732"; + + [Fact(Skip = "TODO: Convert to recorded tests")] + public void CanCRUDStorageAccount() + { + try + { + var storageManager = CreateStorageManager(); + + // Check name availability + CheckNameAvailabilityResult result = storageManager.StorageAccounts + .CheckNameAvailability(stgName); + + // Create + IStorageAccount storageAccount = storageManager.StorageAccounts + .Define(stgName) + .WithRegion(Region.US_EAST) + .WithNewResourceGroup(rgName) + .Create(); + Assert.True(string.Equals(storageAccount.ResourceGroupName, rgName)); + Assert.True(storageAccount.Sku.Name == SkuName.StandardGRS); + + // List + var accounts = storageManager.StorageAccounts.ListByGroup(rgName); + bool found = accounts.Any((IStorageAccount stg) => { return string.Equals(stg.Name, stgName); }); + Assert.True(found); + + // Get + storageAccount = storageManager.StorageAccounts.GetByGroup(rgName, stgName); + Assert.NotNull(storageAccount); + + // Get keys + Assert.True(storageAccount.Keys.Count() > 0); + + // Regen Key + StorageAccountKey oldKey = storageAccount.Keys.FirstOrDefault(); + var updatedKeys = storageAccount.RegenerateKey(oldKey.KeyName); + Assert.True(updatedKeys.Count() > 0); + var updatedKey = updatedKeys.FirstOrDefault((StorageAccountKey key) => { return string.Equals(key.KeyName, oldKey.KeyName); }); + Assert.NotNull(updatedKey); + Assert.NotEqual(updatedKey.Value, oldKey.Value); + + // Update + storageAccount = storageAccount.Update() + .WithSku(SkuName.StandardLRS) + .Apply(); + Assert.Equal(storageAccount.Sku.Name, SkuName.StandardLRS); + } + finally + { + try + { + CreateResourceManager().ResourceGroups.Delete(rgName); + } + catch + {} + } + } + + private IStorageManager CreateStorageManager() + { + ApplicationTokenCredentials credentials = new ApplicationTokenCredentials(@"C:\my.azureauth"); + return StorageManager + .Configure() + .withLogLevel(HttpLoggingDelegatingHandler.Level.BODY) + .Authenticate(credentials, credentials.DefaultSubscriptionId); + } + + private IResourceManager CreateResourceManager() + { + ApplicationTokenCredentials credentials = new ApplicationTokenCredentials(@"C:\my.azureauth"); + IResourceManager resourceManager = ResourceManager2.Configure() + .withLogLevel(HttpLoggingDelegatingHandler.Level.BODY) + .Authenticate(credentials) + .WithSubscription(credentials.DefaultSubscriptionId); + return resourceManager; + } + } +} diff --git a/src/ResourceManagement/Azure/Azure.Tests/StorageUsagesTests.cs b/src/ResourceManagement/Azure/Azure.Tests/StorageUsagesTests.cs new file mode 100644 index 000000000..d5facd015 --- /dev/null +++ b/src/ResourceManagement/Azure/Azure.Tests/StorageUsagesTests.cs @@ -0,0 +1,30 @@ +using Microsoft.Azure.Management.V2.Resource.Authentication; +using Microsoft.Azure.Management.V2.Resource.Core; +using Microsoft.Azure.Management.V2.Storage; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; +using Xunit; + +namespace Azure.Tests +{ + public class StorageUsagesTests + { + [Fact(Skip = "TODO: Convert to recorded tests")] + public void CanListUsages() + { + var storageManger = CreateStorageManager(); + var usages = storageManger.Usages.List(); + } + + private IStorageManager CreateStorageManager() + { + ApplicationTokenCredentials credentials = new ApplicationTokenCredentials(@"C:\my.azureauth"); + return StorageManager + .Configure() + .withLogLevel(HttpLoggingDelegatingHandler.Level.BODY) + .Authenticate(credentials, credentials.DefaultSubscriptionId); + } + } +} diff --git a/src/ResourceManagement/Azure/Azure.Tests/SubscriptionsTests.cs b/src/ResourceManagement/Azure/Azure.Tests/SubscriptionsTests.cs new file mode 100644 index 000000000..af0f3f226 --- /dev/null +++ b/src/ResourceManagement/Azure/Azure.Tests/SubscriptionsTests.cs @@ -0,0 +1,41 @@ +using Microsoft.Azure.Management.V2.Resource; +using Microsoft.Azure.Management.V2.Resource.Authentication; +using Microsoft.Azure.Management.V2.Resource.Core; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; +using Xunit; +using static Microsoft.Azure.Management.V2.Resource.ResourceManager2; + +namespace Azure.Tests +{ + public class SubscriptionsTests + { + [Fact(Skip = "TODO: Convert to recorded tests")] + public void CanListSubscriptions() + { + var resourceManager = CreateResourceManager(); + var subscriptions = resourceManager.Subscriptions.List(); + Assert.True(subscriptions.Count > 0); + } + + [Fact(Skip = "TODO: Convert to recorded tests")] + public void CanListLocations() + { + var resourceManager = CreateResourceManager(); + var subscription = resourceManager.Subscriptions.List().First(); + var locations = subscription.ListLocations(); + Assert.True(locations.Count > 0); + } + + private IAuthenticated CreateResourceManager() + { + ApplicationTokenCredentials credentials = new ApplicationTokenCredentials(@"C:\my.azureauth"); + IAuthenticated resourceManager = ResourceManager2.Configure() + .withLogLevel(HttpLoggingDelegatingHandler.Level.BODY) + .Authenticate(credentials); + return resourceManager; + } + } +} diff --git a/src/ResourceManagement/Azure/Azure.Tests/TenantsTests.cs b/src/ResourceManagement/Azure/Azure.Tests/TenantsTests.cs new file mode 100644 index 000000000..32a9dbb46 --- /dev/null +++ b/src/ResourceManagement/Azure/Azure.Tests/TenantsTests.cs @@ -0,0 +1,33 @@ +using Microsoft.Azure.Management.V2.Resource; +using Microsoft.Azure.Management.V2.Resource.Authentication; +using Microsoft.Azure.Management.V2.Resource.Core; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; +using Xunit; +using static Microsoft.Azure.Management.V2.Resource.ResourceManager2; + +namespace Azure.Tests +{ + public class TenantsTests + { + + [Fact(Skip = "TODO: Convert to recorded tests")] + public void CanListTenants() + { + var resourceManager = CreateResourceManager(); + var tenants = resourceManager.Tenants.List(); + Assert.True(tenants.Count > 0); + } + + private IAuthenticated CreateResourceManager() + { + ApplicationTokenCredentials credentials = new ApplicationTokenCredentials(@"C:\my.azureauth"); + IAuthenticated resourceManager = ResourceManager2.Configure() + .withLogLevel(HttpLoggingDelegatingHandler.Level.BODY) + .Authenticate(credentials); + return resourceManager; + } + } +} diff --git a/src/ResourceManagement/Azure/Azure.Tests/TestHelper.cs b/src/ResourceManagement/Azure/Azure.Tests/TestHelper.cs new file mode 100644 index 000000000..083cc2a2b --- /dev/null +++ b/src/ResourceManagement/Azure/Azure.Tests/TestHelper.cs @@ -0,0 +1,39 @@ +using Microsoft.Azure.Management.V2.Compute; +using Microsoft.Azure.Management.V2.Network; +using Microsoft.Azure.Management.V2.Resource; +using Microsoft.Azure.Management.V2.Resource.Authentication; +using Microsoft.Azure.Management.V2.Resource.Core; + +namespace Azure.Tests +{ + public class TestHelper + { + public static INetworkManager CreateNetworkManager() + { + ApplicationTokenCredentials credentials = new ApplicationTokenCredentials(@"C:\my.azureauth"); + return NetworkManager + .Configure() + .withLogLevel(HttpLoggingDelegatingHandler.Level.BODY) + .Authenticate(credentials, credentials.DefaultSubscriptionId); + } + + public static IComputeManager CreateComputeManager() + { + ApplicationTokenCredentials credentials = new ApplicationTokenCredentials(@"C:\my.azureauth"); + return ComputeManager + .Configure() + .withLogLevel(HttpLoggingDelegatingHandler.Level.BODY) + .Authenticate(credentials, credentials.DefaultSubscriptionId); + } + + public static IResourceManager CreateResourceManager() + { + ApplicationTokenCredentials credentials = new ApplicationTokenCredentials(@"C:\my.azureauth"); + IResourceManager resourceManager = ResourceManager2.Configure() + .withLogLevel(HttpLoggingDelegatingHandler.Level.BODY) + .Authenticate(credentials) + .WithSubscription(credentials.DefaultSubscriptionId); + return resourceManager; + } + } +} \ No newline at end of file diff --git a/src/ResourceManagement/Azure/Azure.Tests/VirtualMachineTests.cs b/src/ResourceManagement/Azure/Azure.Tests/VirtualMachineTests.cs new file mode 100644 index 000000000..25f4a1b34 --- /dev/null +++ b/src/ResourceManagement/Azure/Azure.Tests/VirtualMachineTests.cs @@ -0,0 +1,66 @@ +using Microsoft.Azure.Management.Compute.Models; +using Microsoft.Azure.Management.V2.Compute; +using Microsoft.Azure.Management.V2.Resource; +using Xunit; + +namespace Azure.Tests +{ + public class VirtualMachineTests + { + private const string RG_NAME = "javacsmrg"; + private const string LOCATION = "southcentralus"; + private const string VMNAME = "javavm3"; + + [Fact(Skip = "TODO: Convert to recorded tests")] + public void CanCreateVirtualMachine() + { + IComputeManager computeManager = TestHelper.CreateComputeManager(); + IResourceManager resourceManager = TestHelper.CreateResourceManager(); + + // Create + IVirtualMachine vm = computeManager.VirtualMachines + .Define(VMNAME) + .WithRegion(LOCATION) + .WithNewResourceGroup(RG_NAME) + .WithNewPrimaryNetwork("10.0.0.0/28") + .WithPrimaryPrivateIpAddressDynamic() + .WithoutPrimaryPublicIpAddress() + .WithPopularWindowsImage(KnownWindowsVirtualMachineImage.WINDOWS_SERVER_2012_DATACENTER) + .WithAdminUserName("Foo12") + .WithPassword("BaR@12!Foo") + .WithSize(VirtualMachineSizeTypes.StandardD3) + .WithOsDiskCaching(CachingTypes.ReadWrite) + .WithOsDiskName("javatest") + .Create(); + + IVirtualMachine foundedVM = null; + var vms = computeManager.VirtualMachines.ListByGroup(RG_NAME); + foreach (IVirtualMachine vm1 in vms) + { + if (vm1.Name.Equals(VMNAME)) + { + foundedVM = vm1; + break; + } + } + + Assert.NotNull(foundedVM); + Assert.Equal(LOCATION, foundedVM.RegionName); + // Get + foundedVM = computeManager.VirtualMachines.GetByGroup(RG_NAME, VMNAME); + Assert.NotNull(foundedVM); + Assert.Equal(LOCATION, foundedVM.RegionName); + + // Fetch instance view + PowerState? powerState = foundedVM.PowerState; + Assert.True(powerState == PowerState.RUNNING); + VirtualMachineInstanceView instanceView = foundedVM.InstanceView; + Assert.NotNull(instanceView); + Assert.NotNull(instanceView.Statuses.Count > 0); + + // Delete VM + computeManager.VirtualMachines.Delete(foundedVM.Id); + resourceManager.ResourceGroups.Delete(RG_NAME); + } + } +} \ No newline at end of file diff --git a/src/ResourceManagement/Azure/Azure.Tests/VirtualNetworkTests.cs b/src/ResourceManagement/Azure/Azure.Tests/VirtualNetworkTests.cs new file mode 100644 index 000000000..f2f3f3876 --- /dev/null +++ b/src/ResourceManagement/Azure/Azure.Tests/VirtualNetworkTests.cs @@ -0,0 +1,121 @@ + +using Microsoft.Azure.Management.Network.Models; +using Microsoft.Azure.Management.V2.Network; +using Microsoft.Azure.Management.V2.Resource; +using Microsoft.Azure.Management.V2.Resource.Authentication; +using Microsoft.Azure.Management.V2.Resource.Core; +/** +* +* Copyright (c) Microsoft Corporation. All rights reserved. +* Licensed under the MIT License. See License.txt in the project root for license information. +* +*/ +namespace Azure.Tests +{ + + public class ManageVirtualNetwork { + + /** + * Main entry point. + * @param args the parameters + */ + public void Test() { + string vnetName1 = ResourceNamer.RandomResourceName("vnet1", 20); + string vnetName2 = ResourceNamer.RandomResourceName("vnet2", 20); + string vnet1FrontEndSubnetName = "frontend"; + string vnet1BackEndSubnetName = "backend"; + string vnet1FrontEndSubnetNsgName = "frontendnsg"; + string vnet1BackEndSubnetNsgName = "backendnsg"; + string frontEndVMName = ResourceNamer.RandomResourceName("fevm", 24); + string backEndVMName = ResourceNamer.RandomResourceName("bevm", 24); + string publicIpAddressLeafDNSForFrontEndVM = ResourceNamer.RandomResourceName("pip1", 24); + + INetworkManager manager = this.CreateNetworkManager(); + + string rgName = ResourceNamer.RandomResourceName("rgNEMV", 24); + INetworkSecurityGroup backEndSubnetNsg = manager.NetworkSecurityGroups + .Define(vnet1BackEndSubnetNsgName) + .WithRegion(Region.US_EAST) + .WithExistingResourceGroup(rgName) + .DefineRule("DenyInternetInComing") + .DenyInbound() + .FromAddress("INTERNET") + .FromAnyPort() + .ToAnyAddress() + .ToAnyPort() + .WithAnyProtocol() + .Attach() + .DefineRule("DenyInternetOutGoing") + .DenyOutbound() + .FromAnyAddress() + .FromAnyPort() + .ToAddress("INTERNET") + .ToAnyPort() + .WithAnyProtocol() + .Attach() + .Create(); + + INetwork virtualNetwork1 = manager.Networks + .Define(vnetName1) + .WithRegion(Region.US_EAST) + .WithExistingResourceGroup(rgName) + .WithAddressSpace("192.168.0.0/16") + .WithSubnet(vnet1FrontEndSubnetName, "192.168.1.0/24") + .DefineSubnet(vnet1BackEndSubnetName) + .WithAddressPrefix("192.168.2.0/24") + .WithExistingNetworkSecurityGroup(backEndSubnetNsg) + .Attach() + .Create(); + + INetworkSecurityGroup frontEndSubnetNsg = manager.NetworkSecurityGroups + .Define(vnet1FrontEndSubnetNsgName) + .WithRegion(Region.US_EAST) + .WithExistingResourceGroup(rgName) + .DefineRule("AllowHttpInComing") + .AllowInbound() + .FromAddress("INTERNET") + .FromAnyPort() + .ToAnyAddress() + .ToPort(80) + .WithProtocol(SecurityRuleProtocol.Tcp) + .Attach() + .DefineRule("DenyInternetOutGoing") + .DenyOutbound() + .FromAnyAddress() + .FromAnyPort() + .ToAddress("INTERNET") + .ToAnyPort() + .WithAnyProtocol() + .Attach() + .Create(); + + virtualNetwork1.Update() + .UpdateSubnet(vnet1FrontEndSubnetName) + .WithExistingNetworkSecurityGroup(frontEndSubnetNsg) + .Parent() + .Apply(); + + INetwork virtualNetwork2 = manager.Networks + .Define(vnetName2) + .WithRegion(Region.US_EAST) + .WithNewResourceGroup(rgName) + .Create(); + + + foreach (INetwork virtualNetwork in manager.Networks.ListByGroup(rgName)) { + } + + + manager.Networks.Delete(virtualNetwork2.Id); + } + + public INetworkManager CreateNetworkManager() + { + ApplicationTokenCredentials credentials = new ApplicationTokenCredentials(@"C:\my.azureauth"); + return NetworkManager + .Configure() + .withLogLevel(HttpLoggingDelegatingHandler.Level.BODY) + .Authenticate(credentials, credentials.DefaultSubscriptionId); + } + } +} \ No newline at end of file diff --git a/src/ResourceManagement/Azure/Azure.Tests/project.json b/src/ResourceManagement/Azure/Azure.Tests/project.json new file mode 100644 index 000000000..08a306482 --- /dev/null +++ b/src/ResourceManagement/Azure/Azure.Tests/project.json @@ -0,0 +1,28 @@ +{ + "version": "1.0.0-*", + + "testRunner": "xunit", + "frameworks": { + "netcoreapp1.0": { + "imports": [ "dnxcore50"], + "dependencies": { + "System.Diagnostics.Tracing": "4.1.0" + } + } + }, + + "dependencies": { + "Microsoft.NETCore.App": { + "type": "platform", + "version": "1.0.0" + }, + "NETStandard.Library": "1.6.0", + "xunit": "2.2.0-beta2-build3300", + "dotnet-test-xunit": "2.2.0-preview2-build1029", + "Microsoft.Azure.Management.V2.Resource": "0.0.1-prerelease", + "Microsoft.Azure.Management.V2.Storage": "0.0.1-prerelease", + "Microsoft.Azure.Management.V2.Compute": "0.0.1-prerelease", + "Microsoft.Azure.Management": "1.0.0-*", + "Microsoft.Azure.Management.V2.Network": "0.0.1-prerelease" + } +} diff --git a/src/ResourceManagement/Azure/Azure.sln b/src/ResourceManagement/Azure/Azure.sln new file mode 100644 index 000000000..d4d7e1688 --- /dev/null +++ b/src/ResourceManagement/Azure/Azure.sln @@ -0,0 +1,58 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio 14 +VisualStudioVersion = 14.0.25420.1 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{8BB2217D-0F2D-49D1-97BC-3654ED321F3B}") = "Microsoft.Azure.Management.V2.Compute", "..\Compute\Microsoft.Azure.Management.V2.Compute\Microsoft.Azure.Management.V2.Compute.xproj", "{CBE97730-45F5-448E-88E9-55DF94D65B87}" +EndProject +Project("{8BB2217D-0F2D-49D1-97BC-3654ED321F3B}") = "Microsoft.Azure.Management.V2.Storage", "..\Storage\Microsoft.Azure.Management.V2.Storage\Microsoft.Azure.Management.V2.Storage.xproj", "{A9B44E1B-C26F-44AB-B13F-F22742371135}" +EndProject +Project("{8BB2217D-0F2D-49D1-97BC-3654ED321F3B}") = "Microsoft.Azure.Management.V2.Network", "..\Network\Microsoft.Azure.Management.V2.Network\Microsoft.Azure.Management.V2.Network.xproj", "{4F22B186-DEB4-4B95-BA58-0187F0E33003}" +EndProject +Project("{8BB2217D-0F2D-49D1-97BC-3654ED321F3B}") = "Microsoft.Azure.Management.V2.Resource", "..\Resource\Microsoft.Azure.Management.V2.Resource\Microsoft.Azure.Management.V2.Resource.xproj", "{A5986BDB-0D0D-48AA-9E49-ECE96BAC8AEE}" +EndProject +Project("{8BB2217D-0F2D-49D1-97BC-3654ED321F3B}") = "AzureTests", "Azure.Tests\AzureTests.xproj", "{BF7B919F-53F0-4216-84BC-722786A3AEA0}" +EndProject +Project("{8BB2217D-0F2D-49D1-97BC-3654ED321F3B}") = "Microsoft.Azure.Management", "Microsoft.Azure.Management\Microsoft.Azure.Management.xproj", "{B1032273-B366-4751-B216-36332A06CBC6}" +EndProject +Project("{8BB2217D-0F2D-49D1-97BC-3654ED321F3B}") = "Samples", "Samples\Samples.xproj", "{F47E6D07-2D06-4DDD-8DAA-C235FB192BE8}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {CBE97730-45F5-448E-88E9-55DF94D65B87}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {CBE97730-45F5-448E-88E9-55DF94D65B87}.Debug|Any CPU.Build.0 = Debug|Any CPU + {CBE97730-45F5-448E-88E9-55DF94D65B87}.Release|Any CPU.ActiveCfg = Release|Any CPU + {CBE97730-45F5-448E-88E9-55DF94D65B87}.Release|Any CPU.Build.0 = Release|Any CPU + {A9B44E1B-C26F-44AB-B13F-F22742371135}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {A9B44E1B-C26F-44AB-B13F-F22742371135}.Debug|Any CPU.Build.0 = Debug|Any CPU + {A9B44E1B-C26F-44AB-B13F-F22742371135}.Release|Any CPU.ActiveCfg = Release|Any CPU + {A9B44E1B-C26F-44AB-B13F-F22742371135}.Release|Any CPU.Build.0 = Release|Any CPU + {4F22B186-DEB4-4B95-BA58-0187F0E33003}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {4F22B186-DEB4-4B95-BA58-0187F0E33003}.Debug|Any CPU.Build.0 = Debug|Any CPU + {4F22B186-DEB4-4B95-BA58-0187F0E33003}.Release|Any CPU.ActiveCfg = Release|Any CPU + {4F22B186-DEB4-4B95-BA58-0187F0E33003}.Release|Any CPU.Build.0 = Release|Any CPU + {A5986BDB-0D0D-48AA-9E49-ECE96BAC8AEE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {A5986BDB-0D0D-48AA-9E49-ECE96BAC8AEE}.Debug|Any CPU.Build.0 = Debug|Any CPU + {A5986BDB-0D0D-48AA-9E49-ECE96BAC8AEE}.Release|Any CPU.ActiveCfg = Release|Any CPU + {A5986BDB-0D0D-48AA-9E49-ECE96BAC8AEE}.Release|Any CPU.Build.0 = Release|Any CPU + {BF7B919F-53F0-4216-84BC-722786A3AEA0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {BF7B919F-53F0-4216-84BC-722786A3AEA0}.Debug|Any CPU.Build.0 = Debug|Any CPU + {BF7B919F-53F0-4216-84BC-722786A3AEA0}.Release|Any CPU.ActiveCfg = Release|Any CPU + {BF7B919F-53F0-4216-84BC-722786A3AEA0}.Release|Any CPU.Build.0 = Release|Any CPU + {B1032273-B366-4751-B216-36332A06CBC6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {B1032273-B366-4751-B216-36332A06CBC6}.Debug|Any CPU.Build.0 = Debug|Any CPU + {B1032273-B366-4751-B216-36332A06CBC6}.Release|Any CPU.ActiveCfg = Release|Any CPU + {B1032273-B366-4751-B216-36332A06CBC6}.Release|Any CPU.Build.0 = Release|Any CPU + {F47E6D07-2D06-4DDD-8DAA-C235FB192BE8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {F47E6D07-2D06-4DDD-8DAA-C235FB192BE8}.Debug|Any CPU.Build.0 = Debug|Any CPU + {F47E6D07-2D06-4DDD-8DAA-C235FB192BE8}.Release|Any CPU.ActiveCfg = Release|Any CPU + {F47E6D07-2D06-4DDD-8DAA-C235FB192BE8}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/src/ResourceManagement/Azure/Microsoft.Azure.Management/Azure.cs b/src/ResourceManagement/Azure/Microsoft.Azure.Management/Azure.cs new file mode 100644 index 000000000..935128f97 --- /dev/null +++ b/src/ResourceManagement/Azure/Microsoft.Azure.Management/Azure.cs @@ -0,0 +1,277 @@ +using Microsoft.Azure.Management.V2.Compute; +using Microsoft.Azure.Management.V2.Network; +using Microsoft.Azure.Management.V2.Resource; +using Microsoft.Azure.Management.V2.Resource.Authentication; +using Microsoft.Azure.Management.V2.Resource.Core; +using Microsoft.Azure.Management.V2.Storage; +using Microsoft.Rest; +using System.Linq; + +namespace Microsoft.Azure.Management +{ + public class Azure : IAzure + { + #region Service Managers + + private IResourceManager resourceManager; + private IStorageManager storageManager; + private IComputeManager computeManager; + private INetworkManager networkManager; + + #endregion Service Managers + + #region Getters + + public string SubscriptionId + { + get; private set; + } + + public IResourceGroups ResourceGroups + { + get + { + return resourceManager.ResourceGroups; + } + } + + public IStorageAccounts StorageAccounts + { + get + { + return storageManager.StorageAccounts; + } + } + + public IVirtualMachines VirtualMachines + { + get + { + return computeManager.VirtualMachines; + } + } + + public INetworks Networks + { + get + { + return networkManager.Networks; + } + } + + public INetworkSecurityGroups NetworkSecurityGroups + { + get + { + return networkManager.NetworkSecurityGroups; + } + } + + public IPublicIpAddresses PublicIpAddresses + { + get + { + return networkManager.PublicIpAddresses; + } + } + + public INetworkInterfaces NetworkInterfaces + { + get + { + return networkManager.NetworkInterfaces; + } + } + + public IDeployments Deployments + { + get + { + return resourceManager.Deployments; + } + } + + public IVirtualMachineImages VirtualMachineImages + { + get + { + return computeManager.VirtualMachineImages; + } + } + + public IAvailabilitySets AvailabilitySets + { + get + { + return computeManager.AvailabilitySets; + } + } + + #endregion Getters + + #region ctrs + + private Azure(RestClient restClient, string subscriptionId) + { + resourceManager = ResourceManager2.Authenticate(restClient).WithSubscription(subscriptionId); + storageManager = StorageManager.Authenticate(restClient, subscriptionId); + computeManager = ComputeManager.Authenticate(restClient, subscriptionId); + networkManager = NetworkManager.Authenticate(restClient, subscriptionId); + SubscriptionId = subscriptionId; + } + + #endregion ctrs + + #region Azure builder + + public static IAuthenticated Authenticate(ServiceClientCredentials serviceClientCredentials) + { + return new Authenticated(RestClient.Configure() + .withEnvironment(AzureEnvironment.AzureGlobalCloud) + .withCredentials(serviceClientCredentials) + .build() + ); + } + + public static IAuthenticated Authenticate(string authFile) + { + ApplicationTokenCredentials credentials = new ApplicationTokenCredentials(authFile); + var authenticated = new Authenticated(RestClient.Configure() + .withEnvironment(AzureEnvironment.AzureGlobalCloud) + .withCredentials(credentials) + .build()); + authenticated.SetDefaultSubscription(credentials.DefaultSubscriptionId); + return authenticated; + } + + public static IAuthenticated Authenticate(RestClient restClient) + { + return new Authenticated(restClient); + } + + public static IConfigurable Configure() + { + return new Configurable(); + } + + #endregion Azure builder + + #region IAuthenticated and it's implementation + + public interface IAuthenticated + { + ITenants Tenants { get; } + + ISubscriptions Subscriptions { get; } + + IAzure WithSubscription(string subscriptionId); + + IAzure WithDefaultSubscription(); + } + + protected class Authenticated : IAuthenticated + { + private RestClient restClient; + private ResourceManager2.IAuthenticated resourceManagerAuthenticated; + private string defaultSubscription; + + public ITenants Tenants + { + get + { + return resourceManagerAuthenticated.Tenants; + } + } + + public ISubscriptions Subscriptions + { + get + { + return resourceManagerAuthenticated.Subscriptions; + } + } + + public Authenticated(RestClient restClient) + { + this.restClient = restClient; + resourceManagerAuthenticated = ResourceManager2.Authenticate(this.restClient); + } + + public void SetDefaultSubscription(string subscriptionId) + { + defaultSubscription = subscriptionId; + } + + public IAzure WithSubscription(string subscriptionId) + { + return new Azure(restClient, subscriptionId); + } + + public IAzure WithDefaultSubscription() + { + if (defaultSubscription != null) + { + return WithSubscription(defaultSubscription); + } + else + { + ISubscription subscription = Subscriptions.List().FirstOrDefault(); + if (subscription != null) + { + return WithSubscription(subscription.SubscriptionId); + } + else + { + return WithSubscription(null); + } + } + } + } + + #endregion IAuthenticated and it's implementation + + #region IConfigurable and it's implementation + + public interface IConfigurable : IAzureConfigurable + { + IAuthenticated Authenticate(ServiceClientCredentials serviceClientCredentials); + } + + protected class Configurable : + AzureConfigurable, + IConfigurable + { + IAuthenticated IConfigurable.Authenticate(ServiceClientCredentials credentials) + { + return new Authenticated(BuildRestClient(credentials)); + } + } + + #endregion IConfigurable and it's implementation + } + + public interface IAzure + { + string SubscriptionId { get; } + + IResourceGroups ResourceGroups { get; } + + IStorageAccounts StorageAccounts { get; } + + IVirtualMachines VirtualMachines { get; } + + INetworks Networks { get; } + + INetworkSecurityGroups NetworkSecurityGroups { get; } + + IPublicIpAddresses PublicIpAddresses { get; } + + INetworkInterfaces NetworkInterfaces { get; } + + IDeployments Deployments { get; } + + IVirtualMachineImages VirtualMachineImages { get; } + + IAvailabilitySets AvailabilitySets { get; } + } +} \ No newline at end of file diff --git a/src/ResourceManagement/Azure/Microsoft.Azure.Management/Microsoft.Azure.Management.xproj b/src/ResourceManagement/Azure/Microsoft.Azure.Management/Microsoft.Azure.Management.xproj new file mode 100644 index 000000000..6b5843b4a --- /dev/null +++ b/src/ResourceManagement/Azure/Microsoft.Azure.Management/Microsoft.Azure.Management.xproj @@ -0,0 +1,21 @@ + + + + 14.0 + $(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion) + + + + + b1032273-b366-4751-b216-36332a06cbc6 + Microsoft.Azure.Management + .\obj + .\bin\ + v4.5.2 + + + + 2.0 + + + diff --git a/src/ResourceManagement/Azure/Microsoft.Azure.Management/Properties/AssemblyInfo.cs b/src/ResourceManagement/Azure/Microsoft.Azure.Management/Properties/AssemblyInfo.cs new file mode 100644 index 000000000..ee1bbc07d --- /dev/null +++ b/src/ResourceManagement/Azure/Microsoft.Azure.Management/Properties/AssemblyInfo.cs @@ -0,0 +1,19 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("Microsoft.Azure.Management")] +[assembly: AssemblyTrademark("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("b1032273-b366-4751-b216-36332a06cbc6")] diff --git a/src/ResourceManagement/Azure/Microsoft.Azure.Management/project.json b/src/ResourceManagement/Azure/Microsoft.Azure.Management/project.json new file mode 100644 index 000000000..29969fa1f --- /dev/null +++ b/src/ResourceManagement/Azure/Microsoft.Azure.Management/project.json @@ -0,0 +1,17 @@ +{ + "version": "1.0.0-*", + + "dependencies": { + "Microsoft.Azure.Management.V2.Compute": "0.0.1-prerelease", + "Microsoft.Azure.Management.V2.Network": "0.0.1-prerelease", + "Microsoft.Azure.Management.V2.Resource": "0.0.1-prerelease", + "Microsoft.Azure.Management.V2.Storage": "0.0.1-prerelease", + "NETStandard.Library": "1.6.0" + }, + + "frameworks": { + "netstandard1.6": { + "imports": "dnxcore50" + } + } +} diff --git a/src/ResourceManagement/Azure/Microsoft.Azure/Microsoft.Azure.xproj b/src/ResourceManagement/Azure/Microsoft.Azure/Microsoft.Azure.xproj new file mode 100644 index 000000000..239eedd3b --- /dev/null +++ b/src/ResourceManagement/Azure/Microsoft.Azure/Microsoft.Azure.xproj @@ -0,0 +1,19 @@ + + + + 14.0 + $(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion) + + + + 5fafb0e4-8ee7-46d4-a0e2-4d5f4042e334 + Microsoft.Azure + .\obj + .\bin\ + + + + 2.0 + + + \ No newline at end of file diff --git a/src/ResourceManagement/Azure/Microsoft.Azure/project.json b/src/ResourceManagement/Azure/Microsoft.Azure/project.json new file mode 100644 index 000000000..1add89173 --- /dev/null +++ b/src/ResourceManagement/Azure/Microsoft.Azure/project.json @@ -0,0 +1,45 @@ +{ + "version": "0.0.1-prerelease", + "description": "TODOAzureDescription.", + "authors": [ "Microsoft" ], + + "packOptions": { + "summary": "TODOAzureDescription.", + "iconUrl": "http://go.microsoft.com/fwlink/?LinkID=288890", + "tags": [ "Microsoft Azure", "resource management", "resource", "virtual machine", "compute", "virtual network", "network", "storage accounts", "storage", "REST HTTP client", "azureofficial", "windowsazureofficial" ], + "projectUrl": "https://github.com/Azure/azure-sdk-for-net", + "licenseUrl": "https://raw.githubusercontent.com/Microsoft/dotnet/master/LICENSE", + "requireLicenseAcceptance": true + }, + + "buildOptions": { + "delaySign": true, + "publicSign": false, + "keyFile": "../../../../tools/MSSharedLibKey.snk" + }, + "frameworks": { + "net45": { + "dependencies": { + "Microsoft.Rest.ClientRuntime.Azure": "[3.1.0,4.0.0)" + } + }, + "netstandard1.5": { + "imports": ["dnxcore50"], + "dependencies": { + "Microsoft.NETCore.Platforms": "1.0.1", + "System.Diagnostics.Tools": "4.0.1", + "System.Net.Http": "4.1.0", + "System.Runtime.Serialization.Primitives": "4.1.1", + "System.Threading.Tasks": "4.0.11", + "Microsoft.Rest.ClientRuntime.Azure": "[3.3.1,4.0.0)" + } + }, + "netstandard1.1": { + "imports": ["dnxcore50"], + "dependencies": { + "System.Runtime.Serialization.Primitives": "4.1.1", + "Microsoft.Rest.ClientRuntime.Azure": "[3.3.1,4.0.0)" + } + } + } +} diff --git a/src/ResourceManagement/Azure/Samples/ARMTemplate/TemplateValue.json b/src/ResourceManagement/Azure/Samples/ARMTemplate/TemplateValue.json new file mode 100644 index 000000000..a6518ee09 --- /dev/null +++ b/src/ResourceManagement/Azure/Samples/ARMTemplate/TemplateValue.json @@ -0,0 +1,72 @@ +{ + "$schema": "http://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#", + "contentVersion": "1.0.0.0", + "parameters": { + "hostingPlanName": { + "type": "string", + "defaultValue": "" + }, + "skuName": { + "type": "string", + "defaultValue": "" + }, + "skuCapacity": { + "type": "int", + "defaultValue": 0 + }, + "webSiteName": { + "type": "string", + "defaultValue": "" + } + }, + "resources": [ + { + "apiVersion": "2015-08-01", + "name": "[parameters('hostingPlanName')]", + "type": "Microsoft.Web/serverfarms", + "location": "[resourceGroup().location]", + "tags": { + "displayName": "HostingPlan" + }, + "sku": { + "name": "[parameters('skuName')]", + "capacity": "[parameters('skuCapacity')]" + }, + "properties": { + "name": "[parameters('hostingPlanName')]" + } + }, + { + "apiVersion": "2015-08-01", + "name": "[parameters('webSiteName')]", + "type": "Microsoft.Web/sites", + "location": "[resourceGroup().location]", + "tags": { + "[concat('hidden-related:', resourceGroup().id, '/providers/Microsoft.Web/serverfarms/', parameters('hostingPlanName'))]": "Resource", + "displayName": "Website" + }, + "dependsOn": [ + "[concat('Microsoft.Web/serverfarms/', parameters('hostingPlanName'))]" + ], + "properties": { + "name": "[parameters('webSiteName')]", + "serverFarmId": "[resourceId('Microsoft.Web/serverfarms', parameters('hostingPlanName'))]" + }, + "resources": [ + { + "apiVersion": "2015-08-01", + "name": "web", + "type": "config", + "dependsOn": [ + "[concat('Microsoft.Web/sites/', parameters('webSiteName'))]" + ], + "properties": { + "javaVersion": "1.8", + "javaContainer": "TOMCAT", + "javaContainerVersion": "8.0" + } + } + ] + } + ] +} \ No newline at end of file diff --git a/src/ResourceManagement/Azure/Samples/DeployUsingArmTemplate.cs b/src/ResourceManagement/Azure/Samples/DeployUsingArmTemplate.cs new file mode 100644 index 000000000..0124d174c --- /dev/null +++ b/src/ResourceManagement/Azure/Samples/DeployUsingArmTemplate.cs @@ -0,0 +1,105 @@ +using Microsoft.Azure.Management; +using Microsoft.Azure.Management.V2.Resource; +using Microsoft.Azure.Management.V2.Resource.Authentication; +using Microsoft.Azure.Management.V2.Resource.Core; +using Newtonsoft.Json.Linq; +using System; + +namespace Samples +{ + public static class DeployUsingArmTemplate + { + public static void Deploy() + { + try + { + var rgName = ResourceNamer.RandomResourceName("rgRSAT", 24); + var deploymentName = ResourceNamer.RandomResourceName("dpRSAT", 24); + + try + { + //================================================================= + // Authenticate + + var tokenCredentials = new ApplicationTokenCredentials(Environment.GetEnvironmentVariable("AZURE_AUTH_LOCATION")); + + var azure = Azure + .Configure() + .withLogLevel(HttpLoggingDelegatingHandler.Level.BODY) + .Authenticate(tokenCredentials).WithSubscription(tokenCredentials.DefaultSubscriptionId); + + try + { + var templateJson = GetTemplate(); + + //============================================================= + // Create resource group. + + Console.WriteLine("Creating a resource group with name: " + rgName); + + azure.ResourceGroups.Define(rgName) + .WithRegion(Region.US_WEST) + .Create(); + + Console.WriteLine("Created a resource group with name: " + rgName); + + //============================================================= + // Create a deployment for an Azure App Service via an ARM + // template. + + Console.WriteLine("Starting a deployment for an Azure App Service: " + deploymentName); + + azure.Deployments.Define(deploymentName) + .WithExistingResourceGroup(rgName) + .WithTemplate(templateJson) + .WithParameters("{}") + .WithMode(Microsoft.Azure.Management.ResourceManager.Models.DeploymentMode.Incremental) + .Create(); + + Console.WriteLine("Completed the deployment: " + deploymentName); + } + catch (Exception ex) + { + Console.WriteLine(ex); + } + finally + { + try + { + Console.WriteLine("Deleting Resource Group: " + rgName); + azure.ResourceGroups.Delete(rgName); + Console.WriteLine("Deleted Resource Group: " + rgName); + } + catch (Exception ex) + { + Console.WriteLine(ex); + } + } + } + catch (Exception ex) + { + Console.WriteLine(ex); + } + } + catch (Exception ex) + { + Console.WriteLine(ex); + } + } + + private static string GetTemplate() + { + var hostingPlanName = ResourceNamer.RandomResourceName("hpRSAT", 24); + var webAppName = ResourceNamer.RandomResourceName("wnRSAT", 24); + var armTemplateString = System.IO.File.ReadAllText(@".\ARMTemplate\TemplateValue.json"); + + var parsedTemplate = JObject.Parse(armTemplateString); + parsedTemplate.SelectToken("parameters.hostingPlanName")["defaultValue"] = hostingPlanName; + parsedTemplate.SelectToken("parameters.webSiteName")["defaultValue"] = webAppName; + parsedTemplate.SelectToken("parameters.skuName")["defaultValue"] = "F1"; + parsedTemplate.SelectToken("parameters.skuCapacity")["defaultValue"] = 1; + + return parsedTemplate.ToString(); + } + } +} \ No newline at end of file diff --git a/src/ResourceManagement/Azure/Samples/ListVirtualMachineImages.cs b/src/ResourceManagement/Azure/Samples/ListVirtualMachineImages.cs new file mode 100644 index 000000000..89fc80bc4 --- /dev/null +++ b/src/ResourceManagement/Azure/Samples/ListVirtualMachineImages.cs @@ -0,0 +1,82 @@ +using Microsoft.Azure.Management; +using Microsoft.Azure.Management.V2.Resource.Authentication; +using Microsoft.Azure.Management.V2.Resource.Core; +using System; + +namespace Samples +{ + /** + * List all virtual machine image publishers and + * list all virtual machine images published by Canonical, Red Hat and + * SUSE by browsing through locations, publishers, offers, SKUs and images. + */ + + public class ListVirtualMachineImages + { + public static void TestListVirtualMachineImages() + { + try + { + //================================================================= + // Authenticate + + var tokenCredentials = new ApplicationTokenCredentials(Environment.GetEnvironmentVariable("AZURE_AUTH_LOCATION")); + + var azure = Azure + .Configure() + .withLogLevel(HttpLoggingDelegatingHandler.Level.BODY) + .Authenticate(tokenCredentials).WithSubscription(tokenCredentials.DefaultSubscriptionId); + + //================================================================= + // List all virtual machine image publishers and + // list all virtual machine images + // published by Canonical, Red Hat and SUSE + // by browsing through locations, publishers, offers, SKUs and images + + var publishers = azure + .VirtualMachineImages + .Publishers() + .ListByRegion(Region.US_EAST); + + Console.WriteLine("US East data center: printing list of \n" + + "a) Publishers and\n" + + "b) Images published by Canonical, Red Hat and Suse"); + Console.WriteLine("======================================================="); + Console.WriteLine("\n"); + + foreach (var publisher in publishers) + { + Console.WriteLine("Publisher - " + publisher.Name); + + if (StringComparer.OrdinalIgnoreCase.Equals(publisher.Name, "Canonical") + || StringComparer.OrdinalIgnoreCase.Equals(publisher.Name, "Suse") + || StringComparer.OrdinalIgnoreCase.Equals(publisher.Name, "RedHat")) + { + Console.WriteLine("\n\n"); + Console.WriteLine("======================================================="); + Console.WriteLine("Located " + publisher.Name); + Console.WriteLine("======================================================="); + Console.WriteLine("Printing entries as publisher/offer/sku/image/version"); + + foreach (var offer in publisher.Offers().List()) + { + foreach (var sku in offer.Skus().List()) + { + foreach (var image in sku.Images().List()) + { + Console.WriteLine($"Image - {publisher.Name}/{offer.Name}/{sku.Name}/{image.Version}"); + } + } + } + + Console.WriteLine("\n\n"); + } + } + } + catch (Exception ex) + { + Console.WriteLine(ex); + } + } + } +} \ No newline at end of file diff --git a/src/ResourceManagement/Azure/Samples/ManageAvailabilitySet.cs b/src/ResourceManagement/Azure/Samples/ManageAvailabilitySet.cs new file mode 100644 index 000000000..054d79f0e --- /dev/null +++ b/src/ResourceManagement/Azure/Samples/ManageAvailabilitySet.cs @@ -0,0 +1,193 @@ +using Microsoft.Azure.Management; +using Microsoft.Azure.Management.Compute.Models; +using Microsoft.Azure.Management.V2.Compute; +using Microsoft.Azure.Management.V2.Network; +using Microsoft.Azure.Management.V2.Resource.Authentication; +using Microsoft.Azure.Management.V2.Resource.Core; +using System; + +namespace Samples +{ + /** + * Azure Compute sample for managing availability sets - + * - Create an availability set + * - Create a VM in a new availability set + * - Create another VM in the same availability set + * - Update the availability set + * - Create another availability set + * - List availability sets + * - Delete an availability set. + */ + + public class ManageAvailabilitySet + { + public static void TestAvailabilitySet() + { + var rgName = Utilities.createRandomName("rgCOMA"); + var availSetName1 = Utilities.createRandomName("av1"); + var availSetName2 = Utilities.createRandomName("av2"); + var vm1Name = Utilities.createRandomName("vm1"); + var vm2Name = Utilities.createRandomName("vm2"); + var vnetName = Utilities.createRandomName("vnet"); + + var userName = "tirekicker"; + var password = "12NewPA$$w0rd!"; + + try + { + //============================================================= + // Authenticate + + var tokenCredentials = new ApplicationTokenCredentials(Environment.GetEnvironmentVariable("AZURE_AUTH_LOCATION")); + + var azure = Azure + .Configure() + .withLogLevel(HttpLoggingDelegatingHandler.Level.BODY) + .Authenticate(tokenCredentials).WithSubscription(tokenCredentials.DefaultSubscriptionId); + + // Print selected subscription + Console.WriteLine("Selected subscription: " + azure.SubscriptionId); + + try + { + //============================================================= + // Create an availability set + + Console.WriteLine("Creating an availability set"); + + var availSet1 = azure.AvailabilitySets.Define(availSetName1) + .WithRegion(Region.US_EAST) + .WithNewResourceGroup(rgName) + .WithFaultDomainCount(2) + .WithUpdateDomainCount(4) + .WithTag("cluster", "Windowslinux") + .WithTag("tag1", "tag1val") + .Create(); + + Console.WriteLine("Created first availability set: " + availSet1.Id); + Utilities.PrintAvailabilitySet(availSet1); + + //============================================================= + // Define a virtual network for the VMs in this availability set + var networkManager = NetworkManager + .Configure() + .withLogLevel(HttpLoggingDelegatingHandler.Level.BODY) + .Authenticate(tokenCredentials, tokenCredentials.DefaultSubscriptionId); ; + var network = networkManager.Networks + .Define(vnetName) + .WithRegion(Region.US_EAST) + .WithExistingResourceGroup(rgName) + .WithAddressSpace("10.0.0.0/28"); + + //============================================================= + // Create a Windows VM in the new availability set + + Console.WriteLine("Creating a Windows VM in the availability set"); + + var vm1 = azure.VirtualMachines.Define(vm1Name) + .WithRegion(Region.US_EAST) + .WithExistingResourceGroup(rgName) + .WithNewPrimaryNetwork(network) + .WithPrimaryPrivateIpAddressDynamic() + .WithoutPrimaryPublicIpAddress() + .WithPopularWindowsImage(KnownWindowsVirtualMachineImage.WINDOWS_SERVER_2012_R2_DATACENTER) + .WithAdminUserName(userName) + .WithPassword(password) + .WithSize(VirtualMachineSizeTypes.StandardD3V2) + .WithExistingAvailabilitySet(availSet1) + .Create(); + + Console.WriteLine("Created first VM:" + vm1.Id); + Utilities.PrintVirtualMachine(vm1); + + //============================================================= + // Create a Linux VM in the same availability set + + Console.WriteLine("Creating a Linux VM in the availability set"); + + var vm2 = azure.VirtualMachines.Define(vm2Name) + .WithRegion(Region.US_EAST) + .WithExistingResourceGroup(rgName) + .WithNewPrimaryNetwork(network) + .WithPrimaryPrivateIpAddressDynamic() + .WithoutPrimaryPublicIpAddress() + .WithPopularLinuxImage(KnownLinuxVirtualMachineImage.UBUNTU_SERVER_16_04_LTS) + .WithRootUserName(userName) + .WithPassword(password) + .WithSize(VirtualMachineSizeTypes.StandardD3V2) + .WithExistingAvailabilitySet(availSet1) + .Create(); + + Console.WriteLine("Created second VM: " + vm2.Id); + Utilities.PrintVirtualMachine(vm2); + + //============================================================= + // Update - Tag the availability set + + availSet1 = availSet1.Update() + .WithTag("server1", "nginx") + .WithTag("server2", "iis") + .WithoutTag("tag1") + .Apply(); + + Console.WriteLine("Tagged availability set: " + availSet1.Id); + + //============================================================= + // Create another availability set + + Console.WriteLine("Creating an availability set"); + + var availSet2 = azure.AvailabilitySets.Define(availSetName2) + .WithRegion(Region.US_EAST) + .WithExistingResourceGroup(rgName) + .Create(); + + Console.WriteLine("Created second availability set: " + availSet2.Id); + Utilities.PrintAvailabilitySet(availSet2); + + //============================================================= + // List availability sets + + var resourceGroupName = availSet1.ResourceGroupName; + + Console.WriteLine("Printing list of availability sets ======="); + + foreach (var availabilitySet in azure.AvailabilitySets.ListByGroup(resourceGroupName)) + { + Utilities.PrintAvailabilitySet(availabilitySet); + } + + //============================================================= + // Delete an availability set + + Console.WriteLine("Deleting an availability set: " + availSet2.Id); + + azure.AvailabilitySets.Delete(availSet2.Id); + + Console.WriteLine("Deleted availability set: " + availSet2.Id); + } + catch (Exception ex) + { + Console.WriteLine(ex); + } + finally + { + try + { + Console.WriteLine("Deleting Resource Group: " + rgName); + azure.ResourceGroups.Delete(rgName); + Console.WriteLine("Deleted Resource Group: " + rgName); + } + catch (Exception ex) + { + Console.WriteLine(ex); + } + } + } + catch (Exception ex) + { + Console.WriteLine(ex); + } + } + } +} \ No newline at end of file diff --git a/src/ResourceManagement/Azure/Samples/ManageResource.cs b/src/ResourceManagement/Azure/Samples/ManageResource.cs new file mode 100644 index 000000000..c78d01eb6 --- /dev/null +++ b/src/ResourceManagement/Azure/Samples/ManageResource.cs @@ -0,0 +1,129 @@ +using Microsoft.Azure.Management; +using Microsoft.Azure.Management.V2.Resource; +using Microsoft.Azure.Management.V2.Resource.Authentication; +using Microsoft.Azure.Management.V2.Resource.Core; +using System; + +namespace Samples +{ + public static class ManageResource + { + /** + * Azure Resource sample for managing resources - + * - Create a resource + * - Update a resource + * - Create another resource + * - List resources + * - Delete a resource. + */ + + public static void TestManageResource() + { + var rgName = ResourceNamer.RandomResourceName("rgRSMA", 24); + var resourceName1 = ResourceNamer.RandomResourceName("rn1", 24); + var resourceName2 = ResourceNamer.RandomResourceName("rn2", 24); + + try + { + //================================================================= + // Authenticate + + var tokenCredentials = new ApplicationTokenCredentials(Environment.GetEnvironmentVariable("AZURE_AUTH_LOCATION")); + + var azure = Azure + .Configure() + .withLogLevel(HttpLoggingDelegatingHandler.Level.BODY) + .Authenticate(tokenCredentials).WithSubscription(tokenCredentials.DefaultSubscriptionId); + + try + { + //============================================================= + // Create resource group. + + Console.WriteLine("Creating a resource group with name: " + rgName); + + azure.ResourceGroups + .Define(rgName) + .WithRegion(Region.US_WEST) + .Create(); + + //============================================================= + // Create storage account. + + Console.WriteLine("Creating a storage account with name: " + resourceName1); + + var storageAccount = azure.StorageAccounts + .Define(resourceName1) + .WithRegion(Region.US_WEST) + .WithExistingResourceGroup(rgName) + .Create(); + + Console.WriteLine("Storage account created: " + storageAccount.Id); + + //============================================================= + // Update - set the sku name + + Console.WriteLine("Updating the storage account with name: " + resourceName1); + + storageAccount.Update() + .WithSku(Microsoft.Azure.Management.Storage.Models.SkuName.StandardRAGRS) + .Apply(); + + Console.WriteLine("Updated the storage account with name: " + resourceName1); + + //============================================================= + // Create another storage account. + + Console.WriteLine("Creating another storage account with name: " + resourceName2); + + var storageAccount2 = azure.StorageAccounts.Define(resourceName2) + .WithRegion(Region.US_WEST) + .WithExistingResourceGroup(rgName) + .Create(); + + Console.WriteLine("Storage account created: " + storageAccount2.Id); + + //============================================================= + // List storage accounts. + + Console.WriteLine("Listing all storage accounts for resource group: " + rgName); + + foreach (var sAccount in azure.StorageAccounts.List()) + { + Console.WriteLine("Storage account: " + sAccount.Name); + } + + //============================================================= + // Delete a storage accounts. + + Console.WriteLine("Deleting storage account: " + resourceName2); + + azure.StorageAccounts.Delete(storageAccount2.Id); + + Console.WriteLine("Deleted storage account: " + resourceName2); + } + catch (Exception ex) + { + Console.WriteLine(ex); + } + finally + { + try + { + Console.WriteLine("Deleting Resource Group: " + rgName); + azure.ResourceGroups.Delete(rgName); + Console.WriteLine("Deleted Resource Group: " + rgName); + } + catch (Exception ex) + { + Console.WriteLine(ex); + } + } + } + catch (Exception ex) + { + Console.WriteLine(ex); + } + } + } +} \ No newline at end of file diff --git a/src/ResourceManagement/Azure/Samples/ManageResourceGroup.cs b/src/ResourceManagement/Azure/Samples/ManageResourceGroup.cs new file mode 100644 index 000000000..ea9cc8f91 --- /dev/null +++ b/src/ResourceManagement/Azure/Samples/ManageResourceGroup.cs @@ -0,0 +1,126 @@ +using Microsoft.Azure.Management; +using Microsoft.Azure.Management.V2.Resource; +using Microsoft.Azure.Management.V2.Resource.Authentication; +using Microsoft.Azure.Management.V2.Resource.Core; +using System; + +namespace Samples +{ + public static class ManageResourceGroup + { + /** + * Azure Resource sample for managing resource groups - + * - Create a resource group + * - Update a resource group + * - Create another resource group + * - List resource groups + * - Delete a resource group. + */ + + public static void TestManageResourceGroup() + { + try + { + var rgName = ResourceNamer.RandomResourceName("rgRSMA", 24); + var rgName2 = ResourceNamer.RandomResourceName("rgRSMA", 24); + var resourceTagName = ResourceNamer.RandomResourceName("rgRSTN", 24); + var resourceTagValue = ResourceNamer.RandomResourceName("rgRSTV", 24); + + try + { + //================================================================= + // Authenticate + + var tokenCredentials = new ApplicationTokenCredentials(Environment.GetEnvironmentVariable("AZURE_AUTH_LOCATION")); + + var azure = Azure + .Configure() + .withLogLevel(HttpLoggingDelegatingHandler.Level.BODY) + .Authenticate(tokenCredentials).WithSubscription(tokenCredentials.DefaultSubscriptionId); + + try + { + //============================================================= + // Create resource group. + + Console.WriteLine("Creating a resource group with name: " + rgName); + + var resourceGroup = azure.ResourceGroups + .Define(rgName) + .WithRegion(Region.US_WEST) + .Create(); + + Console.WriteLine("Created a resource group with name: " + rgName); + + //============================================================= + // Update the resource group. + + Console.WriteLine("Updating the resource group with name: " + rgName); + + resourceGroup.Update() + .WithTag(resourceTagName, resourceTagValue) + .Apply(); + + Console.WriteLine("Updated the resource group with name: " + rgName); + + //============================================================= + // Create another resource group. + + Console.WriteLine("Creating another resource group with name: " + rgName2); + + var resourceGroup2 = azure.ResourceGroups + .Define(rgName) + .WithRegion(Region.US_WEST) + .Create(); + + Console.WriteLine("Created another resource group with name: " + rgName2); + + //============================================================= + // List resource groups. + + Console.WriteLine("Listing all resource groups"); + + foreach (var rGroup in azure.ResourceGroups.List()) + { + Console.WriteLine("Resource group: " + rGroup.Name); + } + + //============================================================= + // Delete a resource group. + + Console.WriteLine("Deleting resource group: " + rgName2); + + azure.ResourceGroups.Delete(rgName2); + + Console.WriteLine("Deleted resource group: " + rgName2); + } + catch (Exception ex) + { + Console.WriteLine(ex); + } + finally + { + try + { + Console.WriteLine("Deleting Resource Group: " + rgName); + azure.ResourceGroups.Delete(rgName); + Console.WriteLine("Deleted Resource Group: " + rgName); + } + catch (Exception ex) + { + Console.WriteLine(ex); + } + } + } + catch (Exception ex) + { + Console.WriteLine(ex); + } + } + catch (Exception ex) + { + Console.WriteLine(ex); + } + } + } +} \ No newline at end of file diff --git a/src/ResourceManagement/Azure/Samples/ManageStorageAccount.cs b/src/ResourceManagement/Azure/Samples/ManageStorageAccount.cs new file mode 100644 index 000000000..5d06b4133 --- /dev/null +++ b/src/ResourceManagement/Azure/Samples/ManageStorageAccount.cs @@ -0,0 +1,127 @@ +using Microsoft.Azure.Management; +using Microsoft.Azure.Management.V2.Resource.Authentication; +using Microsoft.Azure.Management.V2.Resource.Core; +using System; + +namespace Samples +{ + /** + * Azure Storage sample for managing storage accounts - + * - Create a storage account + * - Get | regenerate storage account access keys + * - Create another storage account + * - List storage accounts + * - Delete a storage account. + */ + + public static class ManageStorageAccount + { + public static void TestStorageAccount() + { + var storageAccountName = Utilities.createRandomName("sa"); + var storageAccountName2 = Utilities.createRandomName("sa2"); + var rgName = Utilities.createRandomName("rgSTMS"); + + try + { + var tokenCredentials = new ApplicationTokenCredentials(Environment.GetEnvironmentVariable("AZURE_AUTH_LOCATION")); + + var azure = Azure + .Configure() + .withLogLevel(HttpLoggingDelegatingHandler.Level.BODY) + .Authenticate(tokenCredentials).WithSubscription(tokenCredentials.DefaultSubscriptionId); + + // Print selected subscription + Console.WriteLine("Selected subscription: " + azure.SubscriptionId); + + try + { + // ============================================================ + // Create a storage account + + Console.WriteLine("Creating a Storage Account"); + + var storageAccount = azure.StorageAccounts.Define(storageAccountName) + .WithRegion(Region.US_EAST) + .WithNewResourceGroup(rgName) + .Create(); + + Console.WriteLine("Created a Storage Account:"); + Utilities.PrintStorageAccount(storageAccount); + + // ============================================================ + // Get | regenerate storage account access keys + + Console.WriteLine("Getting storage account access keys"); + + var storageAccountKeys = storageAccount.Keys; + + Utilities.PrintStorageAccountKeys(storageAccountKeys); + + Console.WriteLine("Regenerating first storage account access key"); + + storageAccountKeys = storageAccount.RegenerateKey(storageAccountKeys[0].KeyName); + + Utilities.PrintStorageAccountKeys(storageAccountKeys); + + // ============================================================ + // Create another storage account + + Console.WriteLine("Creating a 2nd Storage Account"); + + var storageAccount2 = azure.StorageAccounts.Define(storageAccountName2) + .WithRegion(Region.US_EAST) + .WithNewResourceGroup(rgName) + .Create(); + + Console.WriteLine("Created a Storage Account:"); + Utilities.PrintStorageAccount(storageAccount2); + + // ============================================================ + // List storage accounts + + Console.WriteLine("Listing storage accounts"); + + var storageAccounts = azure.StorageAccounts; + + var accounts = storageAccounts.ListByGroup(rgName); + + foreach (var account in accounts) + { + Console.WriteLine($"Storage Account {account.Name} created @ {account.CreationTime}"); + } + + // ============================================================ + // Delete a storage account + + Console.WriteLine($"Deleting a storage account - {accounts[0].Name} created @ {accounts[0].CreationTime}"); + + azure.StorageAccounts.Delete(accounts[0].Id); + + Console.WriteLine("Deleted storage account"); + } + catch (Exception ex) + { + Console.WriteLine(ex); + } + finally + { + if (azure.ResourceGroups.GetByName(rgName) != null) + { + Console.WriteLine("Deleting Resource Group: " + rgName); + azure.ResourceGroups.Delete(rgName); + Console.WriteLine("Deleted Resource Group: " + rgName); + } + else + { + Console.WriteLine("Did not create any resources in Azure. No clean up is necessary"); + } + } + } + catch (Exception ex) + { + Console.WriteLine(ex); + } + } + } +} \ No newline at end of file diff --git a/src/ResourceManagement/Azure/Samples/ManageVirtualMachine.cs b/src/ResourceManagement/Azure/Samples/ManageVirtualMachine.cs new file mode 100644 index 000000000..6c6aafeb1 --- /dev/null +++ b/src/ResourceManagement/Azure/Samples/ManageVirtualMachine.cs @@ -0,0 +1,225 @@ +using Microsoft.Azure.Management; +using Microsoft.Azure.Management.Compute.Models; +using Microsoft.Azure.Management.V2.Compute; +using Microsoft.Azure.Management.V2.Resource; +using Microsoft.Azure.Management.V2.Resource.Authentication; +using Microsoft.Azure.Management.V2.Resource.Core; +using System; +using System.Linq; + +namespace Samples +{ + internal class ManageVirtualMachine + { + /** + * Azure Compute sample for managing virtual machines - + * - Create a virtual machine + * - Start a virtual machine + * - Stop a virtual machine + * - Restart a virtual machine + * - Update a virtual machine + * - Expand the OS drive + * - Tag a virtual machine (there are many possible variations here) + * - Attach data disks + * - Detach data disks + * - List virtual machines + * - Delete a virtual machine. + */ + + public static void TestVirtualMachine() + { + var windowsVMName = ResourceNamer.RandomResourceName("wVM", 24); + var linuxVMName = ResourceNamer.RandomResourceName("lVM", 24); + var rgName = ResourceNamer.RandomResourceName("rgCOMV", 24); + var userName = "tirekicker"; + var password = "12NewPA$$w0rd!"; + var dataDiskName = "disk2"; + + try + { + //============================================================= + // Authenticate + + var tokenCredentials = new ApplicationTokenCredentials(Environment.GetEnvironmentVariable("AZURE_AUTH_LOCATION")); + + var azure = Azure + .Configure() + .withLogLevel(HttpLoggingDelegatingHandler.Level.BODY) + .Authenticate(tokenCredentials).WithSubscription(tokenCredentials.DefaultSubscriptionId); + + // Print selected subscription + Console.WriteLine("Selected subscription: " + azure.SubscriptionId); + + try + { + var startTime = DateTimeOffset.Now.UtcDateTime; + + var windowsVM = azure.VirtualMachines.Define(windowsVMName) + .WithRegion(Region.US_EAST) + .WithNewResourceGroup(rgName) + .WithNewPrimaryNetwork("10.0.0.0/28") + .WithPrimaryPrivateIpAddressDynamic() + .WithoutPrimaryPublicIpAddress() + .WithPopularWindowsImage(KnownWindowsVirtualMachineImage.WINDOWS_SERVER_2012_R2_DATACENTER) + .WithAdminUserName(userName) + .WithPassword(password) + .WithSize(VirtualMachineSizeTypes.StandardD3V2) + .Create(); + var endTime = DateTimeOffset.Now.UtcDateTime; + + Console.WriteLine($"Created VM: took {(endTime - startTime).Seconds} seconds"); + + Utilities.PrintVirtualMachine(windowsVM); + + windowsVM.Update() + .WithTag("who-rocks", "java") + .WithTag("where", "on azure") + .Apply(); + + Console.WriteLine("Tagged VM: " + windowsVM.Id); + + //============================================================= + // Update - Attach data disks + + windowsVM.Update() + .WithNewDataDisk(10) + .DefineNewDataDisk(dataDiskName) + .WithSizeInGB(20) + .WithCaching(CachingTypes.ReadWrite) + .Attach() + .Apply(); + + Console.WriteLine("Attached a new data disk" + dataDiskName + " to VM" + windowsVM.Id); + Utilities.PrintVirtualMachine(windowsVM); + + windowsVM.Update() + .WithoutDataDisk(dataDiskName) + .Apply(); + + Console.WriteLine("Detached data disk " + dataDiskName + " from VM " + windowsVM.Id); + + //============================================================= + // Update - Resize (expand) the data disk + // First, deallocate the virtual machine and then proceed with resize + + Console.WriteLine("De-allocating VM: " + windowsVM.Id); + + windowsVM.Deallocate(); + + Console.WriteLine("De-allocated VM: " + windowsVM.Id); + + var dataDisk = windowsVM.DataDisks().First(); + + windowsVM.Update() + .UpdateDataDisk(dataDisk.Name) + .WithSizeInGB(30) + .Parent() + .Apply(); + + //============================================================= + // Update - Expand the OS drive size by 10 GB + + var osDiskSizeInGb = windowsVM.OsDiskSize.GetValueOrDefault(); + if (osDiskSizeInGb == 0) + { + // Server is not returning the OS Disk size, possible bug in server + Console.WriteLine("Server is not returning the OS disk size, possible bug in the server?"); + Console.WriteLine("Assuming that the OS disk size is 256 GB"); + osDiskSizeInGb = 256; + } + + windowsVM.Update() + .WithOsDiskSizeInGb(osDiskSizeInGb + 10) + .Apply(); + + Console.WriteLine("Expanded VM " + windowsVM.Id + "'s OS disk to " + (osDiskSizeInGb + 10)); + + //============================================================= + // Start the virtual machine + + Console.WriteLine("Starting VM " + windowsVM.Id); + + windowsVM.Start(); + + Console.WriteLine("Started VM: " + windowsVM.Id + "; state = " + windowsVM.PowerState); + + //============================================================= + // Restart the virtual machine + + Console.WriteLine("Restarting VM: " + windowsVM.Id); + + windowsVM.Restart(); + + Console.WriteLine("Restarted VM: " + windowsVM.Id + "; state = " + windowsVM.PowerState); + + //============================================================= + // Stop (powerOff) the virtual machine + + Console.WriteLine("Powering OFF VM: " + windowsVM.Id); + + windowsVM.PowerOff(); + + Console.WriteLine("Powered OFF VM: " + windowsVM.Id + "; state = " + windowsVM.PowerState); + + // Get the network where Windows VM is hosted + var network = windowsVM.PrimaryNetworkInterface().PrimaryNetwork(); + + //============================================================= + // Create a Linux VM in the same virtual network + + Console.WriteLine("Creating a Linux VM in the network"); + + var linuxVM = azure.VirtualMachines.Define(linuxVMName) + .WithRegion(Region.US_EAST) + .WithExistingResourceGroup(rgName) + .WithExistingPrimaryNetwork(network) + .WithSubnet("subnet1") // Referencing the default subnet name when no name specified at creation + .WithPrimaryPrivateIpAddressDynamic() + .WithoutPrimaryPublicIpAddress() + .WithPopularLinuxImage(KnownLinuxVirtualMachineImage.UBUNTU_SERVER_16_04_LTS) + .WithRootUserName(userName) + .WithPassword(password) + .WithSize(VirtualMachineSizeTypes.StandardD3V2) + .Create(); + + Console.WriteLine("Created a Linux VM (in the same virtual network): " + linuxVM.Id); + Utilities.PrintVirtualMachine(linuxVM); + + //============================================================= + // List virtual machines in the resource group + + var resourceGroupName = windowsVM.ResourceGroupName; + + Console.WriteLine("Printing list of VMs ======="); + + foreach (var virtualMachine in azure.VirtualMachines.ListByGroup(resourceGroupName)) + { + Utilities.PrintVirtualMachine(virtualMachine); + } + + //============================================================= + // Delete the virtual machine + Console.WriteLine("Deleting VM: " + windowsVM.Id); + + azure.VirtualMachines.Delete(windowsVM.Id); + + Console.WriteLine("Deleted VM: " + windowsVM.Id); + } + catch (Exception ex) + { + Console.WriteLine(ex); + } + finally + { + Console.WriteLine($"Deleting resource group : {rgName}"); + azure.ResourceGroups.Delete(rgName); + Console.WriteLine($"Deleted resource group : {rgName}"); + } + } + catch (Exception ex) + { + Console.WriteLine(ex); + } + } + } +} \ No newline at end of file diff --git a/src/ResourceManagement/Azure/Samples/Program.cs b/src/ResourceManagement/Azure/Samples/Program.cs new file mode 100644 index 000000000..abecd183b --- /dev/null +++ b/src/ResourceManagement/Azure/Samples/Program.cs @@ -0,0 +1,31 @@ +using System; + +namespace Samples +{ + public class Program + { + private static void Main(string[] args) + { + Console.WriteLine("Test Manage resource groups"); + ManageResourceGroup.TestManageResourceGroup(); + + Console.WriteLine("Test list virtual machine images"); + ListVirtualMachineImages.TestListVirtualMachineImages(); + + Console.WriteLine("Testing storage accounts now"); + ManageStorageAccount.TestStorageAccount(); + + Console.WriteLine("Availability sets"); + ManageAvailabilitySet.TestAvailabilitySet(); + + Console.WriteLine("Virtual machine tests"); + ManageVirtualMachine.TestVirtualMachine(); + + Console.WriteLine("Resource group deployment"); + DeployUsingArmTemplate.Deploy(); + + Console.WriteLine("Manage resources"); + ManageResource.TestManageResource(); + } + } +} \ No newline at end of file diff --git a/src/ResourceManagement/Azure/Samples/Properties/AssemblyInfo.cs b/src/ResourceManagement/Azure/Samples/Properties/AssemblyInfo.cs new file mode 100644 index 000000000..ef5875332 --- /dev/null +++ b/src/ResourceManagement/Azure/Samples/Properties/AssemblyInfo.cs @@ -0,0 +1,19 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("Samples")] +[assembly: AssemblyTrademark("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("f47e6d07-2d06-4ddd-8daa-c235fb192be8")] diff --git a/src/ResourceManagement/Azure/Samples/Samples.xproj b/src/ResourceManagement/Azure/Samples/Samples.xproj new file mode 100644 index 000000000..31541b10f --- /dev/null +++ b/src/ResourceManagement/Azure/Samples/Samples.xproj @@ -0,0 +1,19 @@ + + + + 14.0 + $(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion) + + + + f47e6d07-2d06-4ddd-8daa-c235fb192be8 + Samples + .\obj + .\bin\ + v4.5.2 + + + 2.0 + + + \ No newline at end of file diff --git a/src/ResourceManagement/Azure/Samples/Utilities.cs b/src/ResourceManagement/Azure/Samples/Utilities.cs new file mode 100644 index 000000000..d8e4b464d --- /dev/null +++ b/src/ResourceManagement/Azure/Samples/Utilities.cs @@ -0,0 +1,149 @@ +using Microsoft.Azure.Management.Storage.Models; +using Microsoft.Azure.Management.V2.Compute; +using Microsoft.Azure.Management.V2.Storage; +using System; +using System.Collections.Generic; +using System.Text; + +namespace Samples +{ + public static class Utilities + { + public static void PrintVirtualMachine(IVirtualMachine virtualMachine) + { + StringBuilder storageProfile = new StringBuilder().Append("\n\tStorageProfile: "); + if (virtualMachine.StorageProfile.ImageReference != null) + { + storageProfile.Append("\n\t\tImageReference:"); + storageProfile.Append("\n\t\t\tPublisher: ").Append(virtualMachine.StorageProfile.ImageReference.Publisher); + storageProfile.Append("\n\t\t\tOffer: ").Append(virtualMachine.StorageProfile.ImageReference.Offer); + storageProfile.Append("\n\t\t\tSKU: ").Append(virtualMachine.StorageProfile.ImageReference.Sku); + storageProfile.Append("\n\t\t\tVersion: ").Append(virtualMachine.StorageProfile.ImageReference.Version); + } + + if (virtualMachine.StorageProfile.OsDisk != null) + { + storageProfile.Append("\n\t\tOSDisk:"); + storageProfile.Append("\n\t\t\tOSType: ").Append(virtualMachine.StorageProfile.OsDisk.OsType); + storageProfile.Append("\n\t\t\tName: ").Append(virtualMachine.StorageProfile.OsDisk.Name); + storageProfile.Append("\n\t\t\tCaching: ").Append(virtualMachine.StorageProfile.OsDisk.Caching); + storageProfile.Append("\n\t\t\tCreateOption: ").Append(virtualMachine.StorageProfile.OsDisk.CreateOption); + storageProfile.Append("\n\t\t\tDiskSizeGB: ").Append(virtualMachine.StorageProfile.OsDisk.DiskSizeGB); + if (virtualMachine.StorageProfile.OsDisk.Image != null) + { + storageProfile.Append("\n\t\t\tImage Uri: ").Append(virtualMachine.StorageProfile.OsDisk.Image.Uri); + } + if (virtualMachine.StorageProfile.OsDisk.Vhd != null) + { + storageProfile.Append("\n\t\t\tVhd Uri: ").Append(virtualMachine.StorageProfile.OsDisk.Vhd.Uri); + } + if (virtualMachine.StorageProfile.OsDisk.EncryptionSettings != null) + { + storageProfile.Append("\n\t\t\tEncryptionSettings: "); + storageProfile.Append("\n\t\t\t\tEnabled: ").Append(virtualMachine.StorageProfile.OsDisk.EncryptionSettings.Enabled); + storageProfile.Append("\n\t\t\t\tDiskEncryptionKey Uri: ").Append(virtualMachine + .StorageProfile + .OsDisk + .EncryptionSettings + .DiskEncryptionKey.SecretUrl); + storageProfile.Append("\n\t\t\t\tKeyEncryptionKey Uri: ").Append(virtualMachine + .StorageProfile + .OsDisk + .EncryptionSettings + .KeyEncryptionKey.KeyUrl); + } + } + + if (virtualMachine.StorageProfile.DataDisks != null) + { + int i = 0; + foreach (var disk in virtualMachine.StorageProfile.DataDisks) + { + storageProfile.Append("\n\t\tDataDisk: #").Append(i++); + storageProfile.Append("\n\t\t\tName: ").Append(disk.Name); + storageProfile.Append("\n\t\t\tCaching: ").Append(disk.Caching); + storageProfile.Append("\n\t\t\tCreateOption: ").Append(disk.CreateOption); + storageProfile.Append("\n\t\t\tDiskSizeGB: ").Append(disk.DiskSizeGB); + storageProfile.Append("\n\t\t\tLun: ").Append(disk.Lun); + if (disk.Vhd.Uri != null) + { + storageProfile.Append("\n\t\t\tVhd Uri: ").Append(disk.Vhd.Uri); + } + if (disk.Image != null) + { + storageProfile.Append("\n\t\t\tImage Uri: ").Append(disk.Image.Uri); + } + } + } + + StringBuilder osProfile = new StringBuilder().Append("\n\tOSProfile: "); + osProfile.Append("\n\t\tComputerName:").Append(virtualMachine.OsProfile.ComputerName); + if (virtualMachine.OsProfile.WindowsConfiguration != null) + { + osProfile.Append("\n\t\t\tWindowsConfiguration: "); + osProfile.Append("\n\t\t\t\tProvisionVMAgent: ") + .Append(virtualMachine.OsProfile.WindowsConfiguration.ProvisionVMAgent); + osProfile.Append("\n\t\t\t\tEnableAutomaticUpdates: ") + .Append(virtualMachine.OsProfile.WindowsConfiguration.EnableAutomaticUpdates); + osProfile.Append("\n\t\t\t\tTimeZone: ") + .Append(virtualMachine.OsProfile.WindowsConfiguration.TimeZone); + } + + if (virtualMachine.OsProfile.LinuxConfiguration != null) + { + osProfile.Append("\n\t\t\tLinuxConfiguration: "); + osProfile.Append("\n\t\t\t\tDisablePasswordAuthentication: ") + .Append(virtualMachine.OsProfile.LinuxConfiguration.DisablePasswordAuthentication); + } + + StringBuilder networkProfile = new StringBuilder().Append("\n\tNetworkProfile: "); + foreach (var networkInterfaceId in virtualMachine.NetworkInterfaceIds) + { + networkProfile.Append("\n\t\tId:").Append(networkInterfaceId); + } + + Console.WriteLine(new StringBuilder().Append("Virtual Machine: ").Append(virtualMachine.Id) + .Append("Name: ").Append(virtualMachine.Name) + .Append("\n\tResource group: ").Append(virtualMachine.ResourceGroupName) + .Append("\n\tRegion: ").Append(virtualMachine.Region) + .Append("\n\tTags: ").Append(virtualMachine.Tags) + .Append("\n\tHardwareProfile: ") + .Append("\n\t\tSize: ").Append(virtualMachine.Size) + .Append(storageProfile) + .Append(osProfile) + .Append(networkProfile) + .ToString()); + } + + internal static void PrintStorageAccountKeys(IList storageAccountKeys) + { + foreach (var storageAccountKey in storageAccountKeys) + { + Console.WriteLine($"Key + {storageAccountKey.KeyName} = {storageAccountKey.Value}"); + } + } + + internal static void PrintStorageAccount(IStorageAccount storageAccount) + { + Console.WriteLine($"{storageAccount.Name} created @ {storageAccount.CreationTime}"); + } + + public static string createRandomName(String namePrefix) + { + var root = Guid.NewGuid().ToString().Replace("-", ""); + return $"{namePrefix}{root.ToLower().Substring(0, 3)}{(DateTime.UtcNow.Millisecond % 10000000L)}"; + } + + public static void PrintAvailabilitySet(IAvailabilitySet resource) + { + Console.WriteLine(new StringBuilder().Append("Availability Set: ").Append(resource.Id) + .Append("Name: ").Append(resource.Name) + .Append("\n\tResource group: ").Append(resource.ResourceGroupName) + .Append("\n\tRegion: ").Append(resource.Region) + .Append("\n\tTags: ").Append(resource.Tags) + .Append("\n\tFault domain count: ").Append(resource.FaultDomainCount) + .Append("\n\tUpdate domain count: ").Append(resource.UpdateDomainCount) + .ToString()); + } + } +} \ No newline at end of file diff --git a/src/ResourceManagement/Azure/Samples/project.json b/src/ResourceManagement/Azure/Samples/project.json new file mode 100644 index 000000000..5cd9bb2de --- /dev/null +++ b/src/ResourceManagement/Azure/Samples/project.json @@ -0,0 +1,20 @@ +{ + "version": "1.0.0-*", + "buildOptions": { + "emitEntryPoint": true + }, + + "dependencies": { + "Microsoft.Azure.Management": "1.0.0-*", + "Microsoft.NETCore.App": { + "type": "platform", + "version": "1.0.0" + } + }, + + "frameworks": { + "netcoreapp1.0": { + "imports": "dnxcore50" + } + } +} diff --git a/src/ResourceManagement/Azure/global.json b/src/ResourceManagement/Azure/global.json new file mode 100644 index 000000000..ba77cd4dd --- /dev/null +++ b/src/ResourceManagement/Azure/global.json @@ -0,0 +1,3 @@ +{ + "projects": [ "Microsoft.Azure", "../Resource", "../Storage", "../Compute", "../Network", "Samples" ] +} \ No newline at end of file diff --git a/src/ResourceManagement/Compute/Compute.sln b/src/ResourceManagement/Compute/Compute.sln new file mode 100644 index 000000000..1db348cca --- /dev/null +++ b/src/ResourceManagement/Compute/Compute.sln @@ -0,0 +1,40 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio 14 +VisualStudioVersion = 14.0.25420.1 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{8BB2217D-0F2D-49D1-97BC-3654ED321F3B}") = "Microsoft.Azure.Management.V2.Compute", "Microsoft.Azure.Management.V2.Compute\Microsoft.Azure.Management.V2.Compute.xproj", "{CBE97730-45F5-448E-88E9-55DF94D65B87}" +EndProject +Project("{8BB2217D-0F2D-49D1-97BC-3654ED321F3B}") = "Microsoft.Azure.Management.V2.Storage", "..\Storage\Microsoft.Azure.Management.V2.Storage\Microsoft.Azure.Management.V2.Storage.xproj", "{A9B44E1B-C26F-44AB-B13F-F22742371135}" +EndProject +Project("{8BB2217D-0F2D-49D1-97BC-3654ED321F3B}") = "Microsoft.Azure.Management.V2.Network", "..\Network\Microsoft.Azure.Management.V2.Network\Microsoft.Azure.Management.V2.Network.xproj", "{4F22B186-DEB4-4B95-BA58-0187F0E33003}" +EndProject +Project("{8BB2217D-0F2D-49D1-97BC-3654ED321F3B}") = "Microsoft.Azure.Management.V2.Resource", "..\Resource\Microsoft.Azure.Management.V2.Resource\Microsoft.Azure.Management.V2.Resource.xproj", "{A5986BDB-0D0D-48AA-9E49-ECE96BAC8AEE}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {CBE97730-45F5-448E-88E9-55DF94D65B87}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {CBE97730-45F5-448E-88E9-55DF94D65B87}.Debug|Any CPU.Build.0 = Debug|Any CPU + {CBE97730-45F5-448E-88E9-55DF94D65B87}.Release|Any CPU.ActiveCfg = Release|Any CPU + {CBE97730-45F5-448E-88E9-55DF94D65B87}.Release|Any CPU.Build.0 = Release|Any CPU + {A9B44E1B-C26F-44AB-B13F-F22742371135}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {A9B44E1B-C26F-44AB-B13F-F22742371135}.Debug|Any CPU.Build.0 = Debug|Any CPU + {A9B44E1B-C26F-44AB-B13F-F22742371135}.Release|Any CPU.ActiveCfg = Release|Any CPU + {A9B44E1B-C26F-44AB-B13F-F22742371135}.Release|Any CPU.Build.0 = Release|Any CPU + {4F22B186-DEB4-4B95-BA58-0187F0E33003}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {4F22B186-DEB4-4B95-BA58-0187F0E33003}.Debug|Any CPU.Build.0 = Debug|Any CPU + {4F22B186-DEB4-4B95-BA58-0187F0E33003}.Release|Any CPU.ActiveCfg = Release|Any CPU + {4F22B186-DEB4-4B95-BA58-0187F0E33003}.Release|Any CPU.Build.0 = Release|Any CPU + {A5986BDB-0D0D-48AA-9E49-ECE96BAC8AEE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {A5986BDB-0D0D-48AA-9E49-ECE96BAC8AEE}.Debug|Any CPU.Build.0 = Debug|Any CPU + {A5986BDB-0D0D-48AA-9E49-ECE96BAC8AEE}.Release|Any CPU.ActiveCfg = Release|Any CPU + {A5986BDB-0D0D-48AA-9E49-ECE96BAC8AEE}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/AvailabilitySetImpl.cs b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/AvailabilitySetImpl.cs new file mode 100644 index 000000000..e0321ce64 --- /dev/null +++ b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/AvailabilitySetImpl.cs @@ -0,0 +1,118 @@ +using Microsoft.Azure.Management.Compute; +using Microsoft.Azure.Management.Compute.Models; +using Microsoft.Azure.Management.V2.Resource; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; +using System.Threading; +using Microsoft.Azure.Management.V2.Compute.AvailabilitySet.Definition; +using Microsoft.Rest.Azure; + +namespace Microsoft.Azure.Management.V2.Compute +{ + public partial class AvailabilitySetImpl : GroupableResource, + IAvailabilitySet, + AvailabilitySet.Definition.IDefinition, + AvailabilitySet.Update.IUpdate + { + private IAvailabilitySetsOperations client; + private List idOfVMsInSet; + + internal AvailabilitySetImpl(string name, AvailabilitySetInner innerModel, + IAvailabilitySetsOperations client, + IComputeManager computeManager) : base(name, innerModel, computeManager) + { + this.client = client; + } + + #region Getters + + public int? FaultDomainCount + { + get + { + return Inner.PlatformFaultDomainCount; + } + } + + public IList Statuses + { + get + { + return Inner.Statuses; + } + } + + public int? UpdateDomainCount + { + get + { + return Inner.PlatformUpdateDomainCount; + } + } + + public IList VirtualMachineIds + { + get + { + if (idOfVMsInSet == null) + { + idOfVMsInSet = (from subresource in Inner.VirtualMachines + select subresource.Id).ToList(); + } + return idOfVMsInSet; + } + } + + #endregion + + public override async Task CreateResourceAsync(CancellationToken cancellationToken) + { + var availabilitySetInner = await client.CreateOrUpdateAsync(ResourceGroupName, Name, Inner); + SetInner(availabilitySetInner); + idOfVMsInSet = null; + return this; + } + + #region Implementation of IRefreshable + + public override async Task Refresh() + { + var availabilitySetInner = await client.GetAsync(ResourceGroupName, Name); + SetInner(availabilitySetInner); + idOfVMsInSet = null; + return this; + } + + #endregion + + #region Setters + + #region Definition Setters + + public IWithCreate WithFaultDomainCount(int faultDomainCount) + { + Inner.PlatformFaultDomainCount = faultDomainCount; + return this; + } + + public IWithCreate WithUpdateDomainCount(int updateDomainCount) + { + Inner.PlatformUpdateDomainCount = updateDomainCount; + return this; + } + + #endregion + + #endregion + } +} diff --git a/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/AvailabilitySetsImpl.cs b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/AvailabilitySetsImpl.cs new file mode 100644 index 000000000..43a6f7b4f --- /dev/null +++ b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/AvailabilitySetsImpl.cs @@ -0,0 +1,90 @@ +using Microsoft.Azure.Management.Compute; +using Microsoft.Azure.Management.Compute.Models; +using Microsoft.Azure.Management.V2.Compute.AvailabilitySet.Definition; +using Microsoft.Azure.Management.V2.Resource; +using Microsoft.Azure.Management.V2.Resource.Core; +using System; +using System.Threading; +using System.Threading.Tasks; + +namespace Microsoft.Azure.Management.V2.Compute +{ + public partial class AvailabilitySetsImpl : + GroupableResources, + IAvailabilitySets + { + internal AvailabilitySetsImpl(IAvailabilitySetsOperations client, IComputeManager computeManager) : base(client, computeManager) + {} + + public IBlank Define(string name) + { + return WrapModel(name); + } + + public void Delete(string id) + { + DeleteAsync(id).Wait(); + } + + public void Delete(string groupName, string name) + { + DeleteAsync(groupName, name).Wait(); + } + + public Task DeleteAsync(string id, CancellationToken cancellationToken = default(CancellationToken)) + { + return DeleteAsync(ResourceUtils.GroupFromResourceId(id), ResourceUtils.NameFromResourceId(id)); + } + + public Task DeleteAsync(string groupName, string name, CancellationToken cancellationToken = default(CancellationToken)) + { + return InnerCollection.DeleteAsync(groupName, name, cancellationToken); + } + + public PagedList List() + { + // There is no API supporting listing of availabiltiy set across subscription so enumerate all RGs and then + // flatten the "list of list of availibility sets" as "list of availibility sets" . + return new ChildListFlattener(MyManager.ResourceManager.ResourceGroups.List(), (IResourceGroup resourceGroup) => + { + return ListByGroup(resourceGroup.Name); + }).Flatten(); + } + + public PagedList ListByGroup(string resourceGroupName) + { + var pagedList = new PagedList(InnerCollection.List(resourceGroupName)); + return WrapList(pagedList); + } + + public Task> ListByGroupAsync(string resourceGroupName, CancellationToken cancellationToken = default(CancellationToken)) + { + // ListByGroupAsync sholud be removed + throw new NotSupportedException(); + } + + #region Implementation of Abstract members in GroupableResources + + public override async Task GetByGroupAsync(string groupName, string name) + { + var availabilitySetInner = await InnerCollection.GetAsync(groupName, name); + return WrapModel(availabilitySetInner); + } + + protected override IAvailabilitySet WrapModel(AvailabilitySetInner availabilitySetInner) + { + return new AvailabilitySetImpl(availabilitySetInner.Name, availabilitySetInner, InnerCollection, MyManager); + } + + protected override AvailabilitySetImpl WrapModel(string name) + { + return new AvailabilitySetImpl(name, new AvailabilitySetInner(), InnerCollection, MyManager); + } + + #endregion + } +} diff --git a/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/ComputeManager.cs b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/ComputeManager.cs new file mode 100644 index 000000000..24fd9f61d --- /dev/null +++ b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/ComputeManager.cs @@ -0,0 +1,141 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; +using Microsoft.Azure.Management.Compute; +using Microsoft.Azure.Management.V2.Resource.Core; +using Microsoft.Azure.Management.Compute.Models; +using Microsoft.Rest.Azure; +using Microsoft.Rest; +using Microsoft.Azure.Management.V2.Resource; +using Microsoft.Azure.Management.V2.Storage; +using Microsoft.Azure.Management.V2.Network; + +namespace Microsoft.Azure.Management.V2.Compute +{ + public class ComputeManager : ManagerBase, IComputeManager + { + private IStorageManager storageManager; + private INetworkManager networkManager; + + #region SDK clients + private ComputeManagementClient client; + #endregion + + #region Fluent private collections + private IVirtualMachines virtualMachines; + private IVirtualMachineImages virtualMachineImages; + private IAvailabilitySets availabilitySets; + #endregion + + #region ctrs + + public ComputeManager(RestClient restClient, string subscriptionId) : base(restClient, subscriptionId) + { + client = new ComputeManagementClient(new Uri(restClient.BaseUri), + restClient.Credentials, + restClient.RootHttpHandler, + restClient.Handlers.ToArray()); + client.SubscriptionId = subscriptionId; + storageManager = StorageManager.Authenticate(restClient, subscriptionId); + networkManager = NetworkManager.Authenticate(restClient, subscriptionId); + } + + #endregion + + #region ComputeManager builder + + public static IComputeManager Authenticate(ServiceClientCredentials serviceClientCredentials, string subscriptionId) + { + return new ComputeManager(RestClient.Configure() + .withEnvironment(AzureEnvironment.AzureGlobalCloud) + .withCredentials(serviceClientCredentials) + .build(), subscriptionId); + } + + public static IComputeManager Authenticate(RestClient restClient, string subscriptionId) + { + return new ComputeManager(restClient, subscriptionId); + } + + public static IConfigurable Configure() + { + return new Configurable(); + } + + #endregion + + + #region IConfigurable and it's implementation + + public interface IConfigurable : IAzureConfigurable + { + IComputeManager Authenticate(ServiceClientCredentials serviceClientCredentials, string subscriptionId); + } + + protected class Configurable : + AzureConfigurable, + IConfigurable + { + public IComputeManager Authenticate(ServiceClientCredentials credentials, string subscriptionId) + { + return new ComputeManager(BuildRestClient(credentials), subscriptionId); + } + } + + #endregion + + #region IComputeManager implementation + + public IVirtualMachines VirtualMachines + { + get + { + if (virtualMachines == null) + { + virtualMachines = new VirtualMachinesImpl( + client.VirtualMachines, + client.VirtualMachineSizes, + this, + storageManager, + networkManager); + } + + return virtualMachines; + } + } + + public IVirtualMachineImages VirtualMachineImages + { + get + { + if (virtualMachineImages == null) + { + virtualMachineImages = new VirtualMachineImagesImpl(client.VirtualMachineImages); + } + return virtualMachineImages; + } + } + + + public IAvailabilitySets AvailabilitySets + { + get + { + if (availabilitySets == null) + { + availabilitySets = new AvailabilitySetsImpl(client.AvailabilitySets, this); + } + return availabilitySets; + } + } + #endregion + } + + public interface IComputeManager : IManagerBase + { + IVirtualMachines VirtualMachines { get; } + IVirtualMachineImages VirtualMachineImages { get; } + IAvailabilitySets AvailabilitySets { get; } + } +} diff --git a/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/DataDiskImpl.cs b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/DataDiskImpl.cs new file mode 100644 index 000000000..84fc9bd61 --- /dev/null +++ b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/DataDiskImpl.cs @@ -0,0 +1,266 @@ +/** +* Copyright (c) Microsoft Corporation. All rights reserved. +* Licensed under the MIT License. See License.txt in the project root for +* license information. +*/ + +namespace Microsoft.Azure.Management.V2.Compute +{ + + using System.Collections.Generic; + using Microsoft.Azure.Management.Compute.Models; + using Microsoft.Azure.Management.V2.Compute.VirtualMachineDataDisk.Definition; + using Microsoft.Azure.Management.V2.Resource.Core.ChildResource.Update; + using Microsoft.Azure.Management.V2.Compute.VirtualMachineDataDisk.Update; + using Microsoft.Azure.Management.V2.Resource.Core.ChildResource.Definition; + using Microsoft.Azure.Management.V2.Storage; + using Microsoft.Azure.Management.V2.Resource.Core; + using Microsoft.Azure.Management.V2.Compute.VirtualMachine.Definition; + using Microsoft.Azure.Management.V2.Compute.VirtualMachine.Update; + using Resource.Core.ChildResourceActions; + using System; + + + /// + /// The implementation for {@link DataDisk} and its create and update interfaces. + /// + public partial class DataDiskImpl : + ChildResource, + IVirtualMachineDataDisk, + IDefinition, + IUpdateDefinition, + Microsoft.Azure.Management.V2.Compute.VirtualMachineDataDisk.Update.IUpdate + { + internal DataDiskImpl(DataDisk inner, IVirtualMachine parent) : + base(inner.Name, inner, parent) + { + } + + internal static DataDiskImpl PrepareDataDisk(string name, DiskCreateOptionTypes createOption, IVirtualMachine parent) + { + DataDisk dataDiskInner = new DataDisk(); + dataDiskInner.Lun = -1; + dataDiskInner.Name = name; + dataDiskInner.CreateOption = createOption; + dataDiskInner.Vhd = null; + return new DataDiskImpl(dataDiskInner, parent); + } + + internal static DataDiskImpl CreateNewDataDisk(int sizeInGB, IVirtualMachine parent) + { + + DataDiskImpl dataDiskImpl = PrepareDataDisk(null, DiskCreateOptionTypes.Empty, parent); + dataDiskImpl.Inner.DiskSizeGB = sizeInGB; + return dataDiskImpl; + } + + internal static DataDiskImpl CreateFromExistingDisk(string storageAccountName, string containerName, string vhdName, IVirtualMachine parent) + { + DataDiskImpl dataDiskImpl = PrepareDataDisk(null, DiskCreateOptionTypes.Attach, parent); + VirtualHardDisk diskVhd = new VirtualHardDisk(); + diskVhd.Uri = BlobUrl(storageAccountName, containerName, vhdName); + dataDiskImpl.Inner.Vhd = diskVhd; + return dataDiskImpl; + } + + public string Name + { + get + { + return this.Inner.Name; + } + } + public int? Size + { + get + { + return this.Inner.DiskSizeGB; + } + } + + public int? Lun + { + get + { + return this.Inner.Lun; + } + } + public string VhdUri + { + get + { + return this.Inner.Vhd.Uri; + } + } + + public CachingTypes? CachingType + { + get + { + return this.Inner.Caching; + } + } + + public string SourceImageUri + { + get + { + if (this.Inner.Image != null) + { + return this.Inner.Image.Uri; + + } + return null; + } + } + + public DiskCreateOptionTypes? CreateOption + { + get + { + return this.Inner.CreateOption; + } + } + + public DataDiskImpl From(string storageAccountName, string containerName, string vhdName) + { + this.Inner.Vhd = new VirtualHardDisk(); + //URL points to an existing data disk to be attached + this.Inner.Vhd.Uri = BlobUrl(storageAccountName, containerName, vhdName); + return this; + } + + public DataDiskImpl WithSizeInGB(int? sizeInGB) + { + // Note: Size can be specified only while attaching new blank disk. + // Size cannot be specified while attaching an existing disk. + // Once attached both type of data disk can be resized via VM update. + this.Inner.DiskSizeGB = sizeInGB; + return this; + } + + public DataDiskImpl StoreAt(string storageAccountName, string containerName, string vhdName) + { + this.Inner.Vhd = new VirtualHardDisk(); + // URL points to where the new data disk needs to be stored + this.Inner.Vhd.Uri = BlobUrl(storageAccountName, containerName, vhdName); + return this; + } + + public DataDiskImpl WithLun(int? lun) + { + this.Inner.Lun = lun.HasValue ? lun.Value : 0; + return this; + } + + public DataDiskImpl WithCaching(CachingTypes cachingType) + { + this.Inner.Caching = cachingType; + return this; + } + + public IVirtualMachine Attach() + { + this.Parent.DataDisks().Add(this); + return this.Parent; + } + + internal static void SetDataDisksDefaults(IList dataDisks, string namePrefix) + { + var usedLuns = new List(); + foreach (IVirtualMachineDataDisk dataDisk in dataDisks) + { + if (dataDisk.Lun != -1) + { + usedLuns.Add(dataDisk.Lun); + } + } + + foreach (IVirtualMachineDataDisk dataDisk in dataDisks) + { + if (dataDisk.Lun == -1) + { + int i = 0; + while (usedLuns.Contains(i)) + { + i++; + } + + dataDisk.Inner.Lun = i; + usedLuns.Add(i); + } + + if (dataDisk.Name == null) + { + dataDisk.Inner.Name = namePrefix + "-data-disk-" + dataDisk.Lun; + } + + if (dataDisk.Inner.Caching == null) + { + dataDisk.Inner.Caching = CachingTypes.ReadWrite; + } + } + } + + internal static void EnsureDisksVhdUri(IList dataDisks, IStorageAccount storageAccount, string namePrefix) + { + + foreach (IVirtualMachineDataDisk dataDisk in dataDisks) + { + if (dataDisk.CreateOption == DiskCreateOptionTypes.Empty) + { + //New data disk requires Vhd Uri to be set + if (dataDisk.Inner.Vhd == null) + { + dataDisk.Inner.Vhd =new VirtualHardDisk(); + dataDisk.Inner.Vhd.Uri = storageAccount.EndPoints.Primary.Blob + + "vhds/" + + namePrefix + "-data-disk-" + dataDisk.Lun + "-" + Guid.NewGuid().ToString() + ".vhd"; + } + } + } + } + + internal static void EnsureDisksVhdUri (IList dataDisks, string namePrefix) + { + string containerUrl = null; + foreach (IVirtualMachineDataDisk dataDisk in dataDisks) + { + if (dataDisk.CreateOption == DiskCreateOptionTypes.Empty && dataDisk.Inner.Vhd != null) + { + int idx = dataDisk.Inner.Vhd.Uri.LastIndexOf('/'); + containerUrl = dataDisk.Inner.Vhd.Uri.Substring(0, idx); + break; + } + } + if (containerUrl != null) + { + foreach (IVirtualMachineDataDisk dataDisk in dataDisks) + { + if (dataDisk.CreateOption == DiskCreateOptionTypes.Empty) + { + //New data disk requires Vhd Uri to be set + if (dataDisk.Inner.Vhd == null) + { + dataDisk.Inner.Vhd = new VirtualHardDisk(); + dataDisk.Inner.Vhd.Uri = containerUrl + + namePrefix + "-data-disk-" + dataDisk.Lun + "-" + Guid.NewGuid().ToString() + ".vhd"; + } + } + } + } + } + + private static string BlobUrl (string storageAccountName, string containerName, string blobName) + { + + // Future: Get the storage domain from the environment + return "https://" + storageAccountName + ".blob.core.windows.net" + "/" + containerName + "/" + blobName; + } + + VirtualMachine.Update.IUpdate ISettable.Parent() + { + return base.Parent as VirtualMachine.Update.IUpdate; + } + } +} \ No newline at end of file diff --git a/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Domain/AvailabilitySet/Definition/IDefinition.cs b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Domain/AvailabilitySet/Definition/IDefinition.cs new file mode 100644 index 000000000..dc788fdbd --- /dev/null +++ b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Domain/AvailabilitySet/Definition/IDefinition.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. +*/ + +namespace Microsoft.Azure.Management.V2.Compute.AvailabilitySet.Definition +{ + + using Microsoft.Azure.Management.V2.Resource.Core.GroupableResource.Definition; + using Microsoft.Azure.Management.V2.Compute; + using Microsoft.Azure.Management.V2.Resource.Core.Resource.Definition; + using Microsoft.Azure.Management.V2.Resource.Core.ResourceActions; + /// + /// The stage of the availability set definition allowing to specify the resource group. + /// + public interface IWithGroup : + Microsoft.Azure.Management.V2.Resource.Core.GroupableResource.Definition.IWithGroup + { + } + /// + /// Container interface for all the definitions. + /// + public interface IDefinition : + IBlank, + Microsoft.Azure.Management.V2.Compute.AvailabilitySet.Definition.IWithGroup, + IWithCreate + { + } + /// + /// The stage of an availability set definition which contains all the minimum required inputs for + /// the resource to be created (via {@link WithCreate#create()}), but also allows + /// for any other optional settings to be specified. + /// + public interface IWithCreate : + ICreatable, + IDefinitionWithTags, + IWithUpdateDomainCount, + IWithFaultDomainCount + { + } + /// + /// The stage of the availability set definition allowing to specify the fault domain count. + /// + public interface IWithFaultDomainCount + { + /// + /// Specifies the fault domain count for the availability set. + /// + /// faultDomainCount fault domain count + /// the next stage of the resource definition + IWithCreate WithFaultDomainCount (int faultDomainCount); + + } + /// + /// The stage of the availability set definition allowing to specify the update domain count. + /// + public interface IWithUpdateDomainCount + { + /// + /// Specifies the update domain count for the availability set. + /// + /// updateDomainCount update domain count + /// the next stage of the resource definition + IWithCreate WithUpdateDomainCount (int updateDomainCount); + + } + /// + /// The first stage of an availability set definition. + /// + public interface IBlank : + IDefinitionWithRegion + { + } +} \ No newline at end of file diff --git a/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Domain/AvailabilitySet/Update/IUpdate.cs b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Domain/AvailabilitySet/Update/IUpdate.cs new file mode 100644 index 000000000..26888d731 --- /dev/null +++ b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Domain/AvailabilitySet/Update/IUpdate.cs @@ -0,0 +1,24 @@ +/** +* Copyright (c) Microsoft Corporation. All rights reserved. +* Licensed under the MIT License. See License.txt in the project root for +* license information. +*/ + +namespace Microsoft.Azure.Management.V2.Compute.AvailabilitySet.Update +{ + + using Microsoft.Azure.Management.V2.Resource.Core.Resource.Update; + using Microsoft.Azure.Management.V2.Resource.Core.ResourceActions; + using Microsoft.Azure.Management.V2.Compute; + /// + /// The template for an availability set update operation, containing all the settings that + /// can be modified. + ///

+ /// Call {@link Update#apply()} to apply the changes to the resource in Azure. + ///

+ public interface IUpdate : + IAppliable, + IUpdateWithTags + { + } +} \ No newline at end of file diff --git a/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Domain/IAvailabilitySet.cs b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Domain/IAvailabilitySet.cs new file mode 100644 index 000000000..d164f956f --- /dev/null +++ b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Domain/IAvailabilitySet.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. +*/ + +namespace Microsoft.Azure.Management.V2.Compute +{ + + using Microsoft.Azure.Management.V2.Resource.Core.ResourceActions; + using Microsoft.Azure.Management.V2.Resource.Core; + using System.Collections.Generic; + using Microsoft.Azure.Management.V2.Compute.AvailabilitySet.Update; + using Microsoft.Azure.Management.Compute.Models; + /// + /// An immutable client-side representation of an Azure availability set. + /// + public interface IAvailabilitySet : + IGroupableResource, + IRefreshable, + IWrapper, + IUpdatable + { + /// + /// Returns the update domain count of an availability set. + ///

+ /// An update domain represents the group of virtual + /// machines and underlying physical hardware that can be rebooted at the same time. + ///

+ /// the update domain count + int? UpdateDomainCount { get; } + + /// + /// Returns the fault domain count of availability set. + ///

+ /// A fault domain represents the group of virtual + /// machines that shares common power source and network switch. + ///

+ /// the fault domain count + int? FaultDomainCount { get; } + + /// + /// Lists the resource IDs of the virtual machines in the availability set. + /// + /// list of resource ID strings + IList VirtualMachineIds { get; } + + /// + /// Lists the statuses of the existing virtual machines in the availability set. + /// + /// list of virtual machine statuses + IList Statuses { get; } + + } +} \ No newline at end of file diff --git a/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Domain/IAvailabilitySets.cs b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Domain/IAvailabilitySets.cs new file mode 100644 index 000000000..cb53cc231 --- /dev/null +++ b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Domain/IAvailabilitySets.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. +*/ + +namespace Microsoft.Azure.Management.V2.Compute +{ + + using Microsoft.Azure.Management.V2.Resource.Core.CollectionActions; + using Microsoft.Azure.Management.V2.Compute.AvailabilitySet.Definition; + /// + /// Entry point to availability set management API. + /// + public interface IAvailabilitySets : + ISupportsListingByGroup, + ISupportsGettingByGroup, + ISupportsGettingById, + ISupportsListing, + ISupportsCreating, + ISupportsDeleting, + ISupportsDeletingByGroup + { + } +} \ No newline at end of file diff --git a/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Domain/IVirtualMachine.cs b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Domain/IVirtualMachine.cs new file mode 100644 index 000000000..c26565697 --- /dev/null +++ b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Domain/IVirtualMachine.cs @@ -0,0 +1,173 @@ +/** +* Copyright (c) Microsoft Corporation. All rights reserved. +* Licensed under the MIT License. See License.txt in the project root for +* license information. +*/ + +namespace Microsoft.Azure.Management.V2.Compute +{ + + using Microsoft.Azure.Management.Compute.Models; + using Microsoft.Azure.Management.V2.Compute.VirtualMachine.Update; + using Microsoft.Azure.Management.V2.Resource.Core; + using System.Collections.Generic; + using Microsoft.Azure.Management.V2.Resource.Core.ResourceActions; + using Microsoft.Azure.Management.V2.Network; + /// + /// An immutable client-side representation of an Azure virtual machine. + /// + public interface IVirtualMachine : + IGroupableResource, + IRefreshable, + IWrapper, + IUpdatable, + ISupportsNetworkInterfaces + { + /// + /// Shuts down the Virtual Machine and releases the compute resources. + ///

+ /// You are not billed for the compute resources that this Virtual Machine uses + ///

+ void Deallocate (); + + /// + /// Generalize the Virtual Machine. + /// + void Generalize (); + + /// + /// Power off (stop) the virtual machine. + ///

+ /// You will be billed for the compute resources that this Virtual Machine uses. + ///

+ void PowerOff (); + + /// + /// Restart the virtual machine. + /// + void Restart (); + + /// + /// Start the virtual machine. + /// + void Start (); + + /// + /// Redeploy the virtual machine. + /// + void Redeploy (); + + /// + /// List of all available virtual machine sizes this virtual machine can resized to. + /// + /// the virtual machine sizes + PagedList AvailableSizes (); + + /// + /// Captures the virtual machine by copying virtual hard disks of the VM and returns template as json + /// string that can be used to create similar VMs. + /// + /// containerName destination container name to store the captured Vhd + /// overwriteVhd whether to overwrites destination vhd if it exists + /// the template as json string + string Capture (string containerName, bool overwriteVhd); + + /// + /// Refreshes the virtual machine instance view to sync with Azure. + ///

+ /// this will caches the instance view which can be later retrieved using {@link VirtualMachine#instanceView()}. + ///

+ /// the refreshed instance view + VirtualMachineInstanceView RefreshInstanceView(); + + /// name of this virtual machine + string ComputerName { get; } + + /// the virtual machine size + string Size { get; } + + /// the operating system of this virtual machine + OperatingSystemTypes? OsType { get; } + + /// the uri to the vhd file backing this virtual machine's operating system disk + string OsDiskVhdUri { get; } + + /// the operating system disk caching type, valid values are 'None', 'ReadOnly', 'ReadWrite' + CachingTypes? OsDiskCachingType { get; } + + /// the size of the operating system disk in GB + int? OsDiskSize { get; } + + /// the list of data disks attached to this virtual machine + IList DataDisks (); + + /// + /// Gets the public IP address associated with this virtual machine's primary network interface. + ///

+ /// note that this method makes a rest API call to fetch the resource. + ///

+ /// the public IP of the primary network interface + IPublicIpAddress PrimaryPublicIpAddress (); + + /// + /// Returns id to the availability set this virtual machine associated with. + ///

+ /// Having a set of virtual machines in an availability set ensures that during maintenance + /// event at least one virtual machine will be available. + ///

+ /// the availabilitySet reference id + string AvailabilitySetId { get; } + + /// the provisioningState value + string ProvisioningState { get; } + + /// the licenseType value + string LicenseType { get; } + + /// the resources value + IList Resources { get; } + + /// the plan value + Plan Plan { get; } + + /// + /// Returns the storage profile of an Azure virtual machine. + ///

+ /// The storage profile contains information such as the details of the VM image or user image + /// from which this virtual machine is created, the Azure storage account where the operating system + /// disk is stored, details of the data disk attached to the virtual machine. + ///

+ /// the storageProfile value + StorageProfile StorageProfile { get; } + + /// + /// Gets the operating system profile of an Azure virtual machine. + /// + /// the osProfile value + OSProfile OsProfile { get; } + + /// + /// Returns the diagnostics profile of an Azure virtual machine. + ///

+ /// Enabling diagnostic features in a virtual machine enable you to easily diagnose and recover + /// virtual machine from boot failures. + ///

+ /// the diagnosticsProfile value + DiagnosticsProfile DiagnosticsProfile { get; } + + /// the virtual machine unique id. + string VmId { get; } + + /// the power state of the virtual machine + PowerState? PowerState { get; } + + /// + /// Get the virtual machine instance view. + ///

+ /// this method returns the cached instance view, to refresh the cache call {@link VirtualMachine#refreshInstanceView()}. + ///

+ /// the virtual machine instance view + VirtualMachineInstanceView InstanceView { get; } + + } +} \ No newline at end of file diff --git a/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Domain/IVirtualMachineDataDisk.cs b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Domain/IVirtualMachineDataDisk.cs new file mode 100644 index 000000000..a88cac82c --- /dev/null +++ b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Domain/IVirtualMachineDataDisk.cs @@ -0,0 +1,58 @@ +/** +* Copyright (c) Microsoft Corporation. All rights reserved. +* Licensed under the MIT License. See License.txt in the project root for +* license information. +*/ + +namespace Microsoft.Azure.Management.V2.Compute +{ + + using Microsoft.Azure.Management.Compute.Models; + using Microsoft.Azure.Management.V2.Resource.Core; + /// + /// A data disk of a virtual machine. + /// + public interface IVirtualMachineDataDisk : + IWrapper, + IChildResource + { + /// the size of this data disk in GB + int? Size { get; } + + /// the logical unit number assigned to this data disk + int? Lun { get; } + + /// uri to the virtual hard disk backing this data disk + string VhdUri { get; } + + /// + /// Gets the disk caching type. + ///

+ /// possible values are: 'None', 'ReadOnly', 'ReadWrite' + ///

+ /// the caching type + CachingTypes? CachingType { get; } + + /// + /// Uri to the source virtual hard disk user image from which this disk was created. + ///

+ /// null will be returned if this disk is not based on an image + ///

+ /// the uri of the source vhd image + string SourceImageUri { get; } + + /// + /// Gets the create option used while creating this disk. + ///

+ /// Possible values include: 'fromImage', 'empty', 'attach' + /// 'fromImage' - if data disk was created from a user image + /// 'attach' - if an existing vhd was usd to back the data disk + /// 'empty' - if the disk was created as an empty disk + /// when disk is created using 'fromImage' option, a copy of user image vhd will be created first + /// and it will be used as the vhd to back the data disk. + ///

+ /// disk create option + DiskCreateOptionTypes? CreateOption { get; } + + } +} \ No newline at end of file diff --git a/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Domain/IVirtualMachineImage.cs b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Domain/IVirtualMachineImage.cs new file mode 100644 index 000000000..cc28f0457 --- /dev/null +++ b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Domain/IVirtualMachineImage.cs @@ -0,0 +1,47 @@ +/** +* Copyright (c) Microsoft Corporation. All rights reserved. +* Licensed under the MIT License. See License.txt in the project root for +* license information. +*/ + +namespace Microsoft.Azure.Management.V2.Compute +{ + + using Microsoft.Azure.Management.V2.Resource.Core; + using Microsoft.Azure.Management.Compute.Models; + using System.Collections.Generic; + /// + /// An immutable client-side representation of an Azure virtual machine image. + /// + public interface IVirtualMachineImage : + IWrapper + { + /// the region in which virtual machine image is available + Region? Location { get; } + + /// the publisher name of the virtual machine image + string PublisherName { get; } + + /// the name of the virtual machine image offer this image is part of + string Offer { get; } + + /// the commercial name of the virtual machine image (SKU) + string Sku { get; } + + /// the version of the virtual machine image + string Version { get; } + + /// the image reference representing publisher, offer, sku and version of the virtual machine image + ImageReference ImageReference { get; } + + /// the purchase plan for the virtual machine image. + PurchasePlan Plan { get; } + + /// description of the OS Disk image in the virtual machine image. + OSDiskImage OsDiskImage { get; } + + /// description of the Data disk images in the virtual machine. + IList DataDiskImages { get; } + + } +} \ No newline at end of file diff --git a/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Domain/IVirtualMachineImages.cs b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Domain/IVirtualMachineImages.cs new file mode 100644 index 000000000..555bf5dea --- /dev/null +++ b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Domain/IVirtualMachineImages.cs @@ -0,0 +1,40 @@ +/** +* Copyright (c) Microsoft Corporation. All rights reserved. +* Licensed under the MIT License. See License.txt in the project root for +* license information. +*/ + +namespace Microsoft.Azure.Management.V2.Compute +{ + + using Microsoft.Azure.Management.V2.Resource.Core; + using Microsoft.Azure.Management.V2.Resource.Core.CollectionActions; + /// + /// Entry point to virtual machine image management API. + /// + public interface IVirtualMachineImages : + ISupportsListingByRegion + { + /// entry point to virtual machine image publishers + IVirtualMachinePublishers Publishers (); + + /// + /// Lists all the virtual machine images available in a given region. + ///

+ /// Note this is a very long running call, as it enumerates through all publishers, offers and skus. + ///

+ /// list of virtual machine images + /// regionName the name of the region as used internally by Azure + PagedList ListByRegion (string regionName); + + /// + /// Lists all the virtual machine images available in a given region. + ///

+ /// Note this is a very long running call, as it enumerates through all publishers, offers and skus. + ///

+ /// list of virtual machine images + /// region the region to list the images from + PagedList ListByRegion (Region region); + + } +} \ No newline at end of file diff --git a/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Domain/IVirtualMachineImagesInSku.cs b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Domain/IVirtualMachineImagesInSku.cs new file mode 100644 index 000000000..ade4fc5ce --- /dev/null +++ b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Domain/IVirtualMachineImagesInSku.cs @@ -0,0 +1,18 @@ +/** +* Copyright (c) Microsoft Corporation. All rights reserved. +* Licensed under the MIT License. See License.txt in the project root for +* license information. +*/ + +namespace Microsoft.Azure.Management.V2.Compute +{ + + using Microsoft.Azure.Management.V2.Resource.Core.CollectionActions; + /// + /// Entry point to virtual machine sku images. + /// + public interface IVirtualMachineImagesInSku : + ISupportsListing + { + } +} \ No newline at end of file diff --git a/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Domain/IVirtualMachineOffer.cs b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Domain/IVirtualMachineOffer.cs new file mode 100644 index 000000000..ee879346e --- /dev/null +++ b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Domain/IVirtualMachineOffer.cs @@ -0,0 +1,29 @@ +/** +* Copyright (c) Microsoft Corporation. All rights reserved. +* Licensed under the MIT License. See License.txt in the project root for +* license information. +*/ + +namespace Microsoft.Azure.Management.V2.Compute +{ + + using Microsoft.Azure.Management.V2.Resource.Core; + /// + /// Represents a virtual machine image offer. + /// + public interface IVirtualMachineOffer + { + /// the region where this virtual machine image offer is available + Region? Region { get; } + + /// the publisher of this virtual machine image offer + IVirtualMachinePublisher Publisher (); + + /// the name of the virtual machine image offer + string Name { get; } + + /// Virtual machine image SKUs available in this offer. + IVirtualMachineSkus Skus (); + + } +} \ No newline at end of file diff --git a/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Domain/IVirtualMachineOffers.cs b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Domain/IVirtualMachineOffers.cs new file mode 100644 index 000000000..729e4ec6b --- /dev/null +++ b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Domain/IVirtualMachineOffers.cs @@ -0,0 +1,18 @@ +/** +* Copyright (c) Microsoft Corporation. All rights reserved. +* Licensed under the MIT License. See License.txt in the project root for +* license information. +*/ + +namespace Microsoft.Azure.Management.V2.Compute +{ + + using Microsoft.Azure.Management.V2.Resource.Core.CollectionActions; + /// + /// Entry point to virtual machine image offers. + /// + public interface IVirtualMachineOffers : + ISupportsListing + { + } +} \ No newline at end of file diff --git a/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Domain/IVirtualMachinePublisher.cs b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Domain/IVirtualMachinePublisher.cs new file mode 100644 index 000000000..85889c54e --- /dev/null +++ b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Domain/IVirtualMachinePublisher.cs @@ -0,0 +1,26 @@ +/** +* Copyright (c) Microsoft Corporation. All rights reserved. +* Licensed under the MIT License. See License.txt in the project root for +* license information. +*/ + +namespace Microsoft.Azure.Management.V2.Compute +{ + + using Microsoft.Azure.Management.V2.Resource.Core; + /// + /// Represents a virtual machine image publisher. + /// + public interface IVirtualMachinePublisher + { + /// the region where virtual machine images from this publisher is available + Region? Region { get; } + + /// the name of the publisher + string Name { get; } + + /// the offers from this publisher + IVirtualMachineOffers Offers (); + + } +} \ No newline at end of file diff --git a/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Domain/IVirtualMachinePublishers.cs b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Domain/IVirtualMachinePublishers.cs new file mode 100644 index 000000000..a4dc4d818 --- /dev/null +++ b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Domain/IVirtualMachinePublishers.cs @@ -0,0 +1,18 @@ +/** +* Copyright (c) Microsoft Corporation. All rights reserved. +* Licensed under the MIT License. See License.txt in the project root for +* license information. +*/ + +namespace Microsoft.Azure.Management.V2.Compute +{ + + using Microsoft.Azure.Management.V2.Resource.Core.CollectionActions; + /// + /// Entry point to virtual machine image publishers. + /// + public interface IVirtualMachinePublishers : + ISupportsListingByRegion + { + } +} \ No newline at end of file diff --git a/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Domain/IVirtualMachineSize.cs b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Domain/IVirtualMachineSize.cs new file mode 100644 index 000000000..62aa69e1f --- /dev/null +++ b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Domain/IVirtualMachineSize.cs @@ -0,0 +1,35 @@ +/** +* Copyright (c) Microsoft Corporation. All rights reserved. +* Licensed under the MIT License. See License.txt in the project root for +* license information. +*/ + +namespace Microsoft.Azure.Management.V2.Compute +{ + + + /// + /// A type representing virtual machine size available for a subscription in a region. + /// + public interface IVirtualMachineSize + { + /// the VM size name + string Name { get; } + + /// the Number of cores supported by a VM size + int? NumberOfCores { get; } + + /// the OS disk size allowed by a VM size + int? OsDiskSizeInMB { get; } + + /// resource disk size allowed by a VM size + int? ResourceDiskSizeInMB { get; } + + /// the memory size supported by a VM size + int? MemoryInMB { get; } + + /// the maximum number of data disks allowed by a VM size + int? MaxDataDiskCount { get; } + + } +} \ No newline at end of file diff --git a/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Domain/IVirtualMachineSizes.cs b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Domain/IVirtualMachineSizes.cs new file mode 100644 index 000000000..0eebe4979 --- /dev/null +++ b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Domain/IVirtualMachineSizes.cs @@ -0,0 +1,18 @@ +/** +* Copyright (c) Microsoft Corporation. All rights reserved. +* Licensed under the MIT License. See License.txt in the project root for +* license information. +*/ + +namespace Microsoft.Azure.Management.V2.Compute +{ + + using Microsoft.Azure.Management.V2.Resource.Core.CollectionActions; + /// + /// Entry point to virtual machine sizes API. + /// + public interface IVirtualMachineSizes : + ISupportsListingByRegion + { + } +} \ No newline at end of file diff --git a/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Domain/IVirtualMachineSku.cs b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Domain/IVirtualMachineSku.cs new file mode 100644 index 000000000..0450d57e5 --- /dev/null +++ b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Domain/IVirtualMachineSku.cs @@ -0,0 +1,32 @@ +/** +* Copyright (c) Microsoft Corporation. All rights reserved. +* Licensed under the MIT License. See License.txt in the project root for +* license information. +*/ + +namespace Microsoft.Azure.Management.V2.Compute +{ + + using Microsoft.Azure.Management.V2.Resource.Core; + /// + /// Represents a virtual machine image SKU. + /// + public interface IVirtualMachineSku + { + /// the region where this virtual machine image offer SKU is available + Region? Region { get; } + + /// the publisher of this virtual machine image offer SKU + IVirtualMachinePublisher Publisher (); + + /// the virtual machine offer name that this SKU belongs to + IVirtualMachineOffer Offer (); + + /// the commercial name of the virtual machine image (SKU) + string Name { get; } + + /// virtual machine images in the sku + IVirtualMachineImagesInSku Images (); + + } +} \ No newline at end of file diff --git a/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Domain/IVirtualMachineSkus.cs b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Domain/IVirtualMachineSkus.cs new file mode 100644 index 000000000..764fb7c90 --- /dev/null +++ b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Domain/IVirtualMachineSkus.cs @@ -0,0 +1,18 @@ +/** +* Copyright (c) Microsoft Corporation. All rights reserved. +* Licensed under the MIT License. See License.txt in the project root for +* license information. +*/ + +namespace Microsoft.Azure.Management.V2.Compute +{ + + using Microsoft.Azure.Management.V2.Resource.Core.CollectionActions; + /// + /// Entry point to virtual machine image offer skus. + /// + public interface IVirtualMachineSkus : + ISupportsListing + { + } +} \ No newline at end of file diff --git a/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Domain/IVirtualMachines.cs b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Domain/IVirtualMachines.cs new file mode 100644 index 000000000..8c11fddfb --- /dev/null +++ b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Domain/IVirtualMachines.cs @@ -0,0 +1,85 @@ +/** +* Copyright (c) Microsoft Corporation. All rights reserved. +* Licensed under the MIT License. See License.txt in the project root for +* license information. +*/ + +namespace Microsoft.Azure.Management.V2.Compute +{ + + using Microsoft.Azure.Management.V2.Resource.Core.CollectionActions; + using Microsoft.Azure.Management.V2.Compute.VirtualMachine.Definition; + /// + /// Entry point to virtual machine management API. + /// + public interface IVirtualMachines : + ISupportsListing, + ISupportsListingByGroup, + ISupportsGettingByGroup, + ISupportsGettingById, + ISupportsCreating, + ISupportsDeleting, + ISupportsDeletingByGroup + { + /// entry point to virtual machine sizes + IVirtualMachineSizes Sizes (); + + /// + /// Shuts down the Virtual Machine and releases the compute resources. + ///

+ /// You are not billed for the compute resources that this Virtual Machine uses + ///

+ /// groupName the resource group name + /// name the virtual machine name + void Deallocate (string groupName, string name); + + /// + /// Generalize the Virtual Machine. + /// + /// groupName the resource group name + /// name the virtual machine name + void Generalize (string groupName, string name); + + /// + /// Power off (stop) a virtual machine. + ///

+ /// You will be billed for the compute resources that this Virtual Machine uses + ///

+ /// groupName the resource group name + /// name the virtual machine name + void PowerOff (string groupName, string name); + + /// + /// Restart a virtual machine. + /// + /// groupName the resource group name + /// name the virtual machine name + void Restart (string groupName, string name); + + /// + /// Start a virtual machine. + /// + /// groupName the resource group name + /// name the virtual machine name + void Start (string groupName, string name); + + /// + /// Redeploy a virtual machine. + /// + /// groupName the resource group name + /// name the virtual machine name + void Redeploy (string groupName, string name); + + /// + /// Captures the virtual machine by copying virtual hard disks of the VM and returns template as json + /// string that can be used to create similar VMs. + /// + /// groupName the resource group name + /// name the virtual machine name + /// containerName destination container name to store the captured Vhd + /// overwriteVhd whether to overwrites destination vhd if it exists + /// the template as json string + string Capture (string groupName, string name, string containerName, bool overwriteVhd); + + } +} \ No newline at end of file diff --git a/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Domain/InterfaceImpl/AvailabilitySetImpl.cs b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Domain/InterfaceImpl/AvailabilitySetImpl.cs new file mode 100644 index 000000000..dad62f5bb --- /dev/null +++ b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Domain/InterfaceImpl/AvailabilitySetImpl.cs @@ -0,0 +1,116 @@ +/** +* Copyright (c) Microsoft Corporation. All rights reserved. +* Licensed under the MIT License. See License.txt in the project root for +* license information. +*/ + +namespace Microsoft.Azure.Management.V2.Compute +{ + + using Microsoft.Azure.Management.Compute.Models; + using Microsoft.Azure.Management.V2.Compute.AvailabilitySet.Definition; + using Microsoft.Rest; + using System.Threading; + using Microsoft.Azure.Management.V2.Resource.Core; + using System.Threading.Tasks; + using System.Collections.Generic; + using Microsoft.Azure.Management.V2.Resource; + using Microsoft.Azure.Management.V2.Compute.AvailabilitySet.Update; + using Microsoft.Azure.Management.V2.Resource.Core.ResourceActions; + public partial class AvailabilitySetImpl + { + /// + /// Returns the fault domain count of availability set. + ///

+ /// A fault domain represents the group of virtual + /// machines that shares common power source and network switch. + ///

+ /// the fault domain count + int? Microsoft.Azure.Management.V2.Compute.IAvailabilitySet.FaultDomainCount + { + get + { + return this.FaultDomainCount; + } + } + /// + /// Lists the statuses of the existing virtual machines in the availability set. + /// + /// list of virtual machine statuses + System.Collections.Generic.IList Microsoft.Azure.Management.V2.Compute.IAvailabilitySet.Statuses + { + get + { + return this.Statuses as System.Collections.Generic.IList; + } + } + /// + /// Lists the resource IDs of the virtual machines in the availability set. + /// + /// list of resource ID strings + System.Collections.Generic.IList Microsoft.Azure.Management.V2.Compute.IAvailabilitySet.VirtualMachineIds + { + get + { + return this.VirtualMachineIds as System.Collections.Generic.IList; + } + } + /// + /// Returns the update domain count of an availability set. + ///

+ /// An update domain represents the group of virtual + /// machines and underlying physical hardware that can be rebooted at the same time. + ///

+ /// the update domain count + int? Microsoft.Azure.Management.V2.Compute.IAvailabilitySet.UpdateDomainCount + { + get + { + return this.UpdateDomainCount; + } + } + /// + /// Refreshes the resource to sync with Azure. + /// + /// the refreshed resource + Microsoft.Azure.Management.V2.Compute.IAvailabilitySet Microsoft.Azure.Management.V2.Resource.Core.ResourceActions.IRefreshable.Refresh () { + return this.Refresh() as Microsoft.Azure.Management.V2.Compute.IAvailabilitySet; + } + + /// + /// Execute the update request asynchronously. + /// + /// cancellationToken the cancellation token + /// the handle to the REST call + async Task Microsoft.Azure.Management.V2.Resource.Core.ResourceActions.IAppliable.ApplyAsync (CancellationToken cancellationToken = default(CancellationToken), bool multiThreaded = true) { + return await this.ApplyAsync() as IAvailabilitySet; + } + + /// + /// Execute the update request. + /// + /// the updated resource + Microsoft.Azure.Management.V2.Compute.IAvailabilitySet Microsoft.Azure.Management.V2.Resource.Core.ResourceActions.IAppliable.Apply () { + return this.Apply() as Microsoft.Azure.Management.V2.Compute.IAvailabilitySet; + } + + /// + /// Specifies the fault domain count for the availability set. + /// + /// faultDomainCount fault domain count + /// the next stage of the resource definition + Microsoft.Azure.Management.V2.Compute.AvailabilitySet.Definition.IWithCreate Microsoft.Azure.Management.V2.Compute.AvailabilitySet.Definition.IWithFaultDomainCount.WithFaultDomainCount (int faultDomainCount) { + return this.WithFaultDomainCount( faultDomainCount) as Microsoft.Azure.Management.V2.Compute.AvailabilitySet.Definition.IWithCreate; + } + + /// + /// Specifies the update domain count for the availability set. + /// + /// updateDomainCount update domain count + /// the next stage of the resource definition + Microsoft.Azure.Management.V2.Compute.AvailabilitySet.Definition.IWithCreate Microsoft.Azure.Management.V2.Compute.AvailabilitySet.Definition.IWithUpdateDomainCount.WithUpdateDomainCount (int updateDomainCount) { + return this.WithUpdateDomainCount( updateDomainCount) as Microsoft.Azure.Management.V2.Compute.AvailabilitySet.Definition.IWithCreate; + } + + } +} \ No newline at end of file diff --git a/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Domain/InterfaceImpl/AvailabilitySetsImpl.cs b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Domain/InterfaceImpl/AvailabilitySetsImpl.cs new file mode 100644 index 000000000..0406d6b1f --- /dev/null +++ b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Domain/InterfaceImpl/AvailabilitySetsImpl.cs @@ -0,0 +1,81 @@ +/** +* Copyright (c) Microsoft Corporation. All rights reserved. +* Licensed under the MIT License. See License.txt in the project root for +* license information. +*/ + +namespace Microsoft.Azure.Management.V2.Compute +{ + + using Microsoft.Azure.Management.V2.Resource.Core.CollectionActions; + using Microsoft.Azure.Management.V2.Resource.Core; + using Microsoft.Azure.Management.Compute.Models; + using Microsoft.Azure.Management.V2.Resource; + public partial class AvailabilitySetsImpl + { + /// + /// Begins a definition for a new resource. + ///

+ /// This is the beginning of the builder pattern used to create top level resources + /// in Azure. The final method completing the definition and starting the actual resource creation + /// process in Azure is {@link Creatable#create()}. + ///

+ /// Note that the {@link Creatable#create()} method is + /// only available at the stage of the resource definition that has the minimum set of input + /// parameters specified. If you do not see {@link Creatable#create()} among the available methods, it + /// means you have not yet specified all the required input settings. Input settings generally begin + /// with the word "with", for example: .withNewResourceGroup() and return the next stage + /// of the resource definition, as an interface in the "fluent interface" style. + ///

+ /// name the name of the new resource + /// the first stage of the new resource definition + Microsoft.Azure.Management.V2.Compute.AvailabilitySet.Definition.IBlank Microsoft.Azure.Management.V2.Resource.Core.CollectionActions.ISupportsCreating.Define (string name) { + return this.Define( name) as Microsoft.Azure.Management.V2.Compute.AvailabilitySet.Definition.IBlank; + } + + /// + /// Deletes a resource from Azure, identifying it by its resource ID. + /// + /// id the resource ID of the resource to delete + void Microsoft.Azure.Management.V2.Resource.Core.CollectionActions.ISupportsDeleting.Delete (string id) { + this.Delete( id); + } + + /// + /// Lists resources of the specified type in the specified resource group. + /// + /// resourceGroupName the name of the resource group to list the resources from + /// the list of resources + Microsoft.Azure.Management.V2.Resource.Core.PagedList Microsoft.Azure.Management.V2.Resource.Core.CollectionActions.ISupportsListingByGroup.ListByGroup (string resourceGroupName) { + return this.ListByGroup( resourceGroupName) as Microsoft.Azure.Management.V2.Resource.Core.PagedList; + } + + /// + /// Gets the information about a resource from Azure based on the resource name and the name of its resource group. + /// + /// resourceGroupName the name of the resource group the resource is in + /// name the name of the resource. (Note, this is not the ID) + /// an immutable representation of the resource + Microsoft.Azure.Management.V2.Compute.IAvailabilitySet Microsoft.Azure.Management.V2.Resource.Core.CollectionActions.ISupportsGettingByGroup.GetByGroup (string resourceGroupName, string name) { + return this.GetByGroup( resourceGroupName, name) as Microsoft.Azure.Management.V2.Compute.IAvailabilitySet; + } + + /// + /// Deletes a resource from Azure, identifying it by its name and its resource group. + /// + /// groupName The group the resource is part of + /// name The name of the resource + void Microsoft.Azure.Management.V2.Resource.Core.CollectionActions.ISupportsDeletingByGroup.Delete (string groupName, string name) { + this.Delete( groupName, name); + } + + /// + /// Lists all the resources of the specified type in the currently selected subscription. + /// + /// list of resources + Microsoft.Azure.Management.V2.Resource.Core.PagedList Microsoft.Azure.Management.V2.Resource.Core.CollectionActions.ISupportsListing.List () { + return this.List() as Microsoft.Azure.Management.V2.Resource.Core.PagedList; + } + + } +} \ No newline at end of file diff --git a/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Domain/InterfaceImpl/DataDiskImpl.cs b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Domain/InterfaceImpl/DataDiskImpl.cs new file mode 100644 index 000000000..99d229576 --- /dev/null +++ b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Domain/InterfaceImpl/DataDiskImpl.cs @@ -0,0 +1,232 @@ +/** +* Copyright (c) Microsoft Corporation. All rights reserved. +* Licensed under the MIT License. See License.txt in the project root for +* license information. +*/ + +namespace Microsoft.Azure.Management.V2.Compute +{ + + using System.Collections.Generic; + using Microsoft.Azure.Management.Compute.Models; + using Microsoft.Azure.Management.V2.Compute.VirtualMachineDataDisk.Definition; + using Microsoft.Azure.Management.V2.Resource.Core.ChildResource.Update; + using Microsoft.Azure.Management.V2.Compute.VirtualMachineDataDisk.Update; + using Microsoft.Azure.Management.V2.Resource.Core.ChildResource.Definition; + using Microsoft.Azure.Management.V2.Storage; + using Microsoft.Azure.Management.V2.Resource.Core; + using Microsoft.Azure.Management.V2.Compute.VirtualMachine.Definition; + using Microsoft.Azure.Management.V2.Compute.VirtualMachine.Update; + public partial class DataDiskImpl + { + /// + /// Specifies an existing VHD that needs to be attached to the virtual machine as data disk. + /// + /// storageAccountName the storage account name + /// containerName the name of the container holding the VHD file + /// vhdName the name for the VHD file + /// the stage representing optional additional settings for the attachable data disk + Microsoft.Azure.Management.V2.Compute.VirtualMachineDataDisk.Update.IWithAttach Microsoft.Azure.Management.V2.Compute.VirtualMachineDataDisk.Update.IAttachExistingDataDisk.From (string storageAccountName, string containerName, string vhdName) { + return this.From( storageAccountName, containerName, vhdName) as Microsoft.Azure.Management.V2.Compute.VirtualMachineDataDisk.Update.IWithAttach; + } + + /// + /// Specifies an existing VHD that needs to be attached to the virtual machine as data disk. + /// + /// storageAccountName the storage account name + /// containerName the name of the container holding the VHD file + /// vhdName the name for the VHD file + /// the stage representing optional additional settings for the attachable data disk + Microsoft.Azure.Management.V2.Compute.VirtualMachineDataDisk.Definition.IWithAttach Microsoft.Azure.Management.V2.Compute.VirtualMachineDataDisk.Definition.IAttachExistingDataDisk.From (string storageAccountName, string containerName, string vhdName) { + return this.From( storageAccountName, containerName, vhdName) as Microsoft.Azure.Management.V2.Compute.VirtualMachineDataDisk.Definition.IWithAttach; + } + + /// uri to the virtual hard disk backing this data disk + string Microsoft.Azure.Management.V2.Compute.IVirtualMachineDataDisk.VhdUri + { + get + { + return this.VhdUri as string; + } + } + /// the logical unit number assigned to this data disk + int? Microsoft.Azure.Management.V2.Compute.IVirtualMachineDataDisk.Lun + { + get + { + return this.Lun; + } + } + /// + /// Gets the create option used while creating this disk. + ///

+ /// Possible values include: 'fromImage', 'empty', 'attach' + /// 'fromImage' - if data disk was created from a user image + /// 'attach' - if an existing vhd was usd to back the data disk + /// 'empty' - if the disk was created as an empty disk + /// when disk is created using 'fromImage' option, a copy of user image vhd will be created first + /// and it will be used as the vhd to back the data disk. + ///

+ /// disk create option + Microsoft.Azure.Management.Compute.Models.DiskCreateOptionTypes? Microsoft.Azure.Management.V2.Compute.IVirtualMachineDataDisk.CreateOption + { + get + { + return this.CreateOption; + } + } + /// + /// Gets the disk caching type. + ///

+ /// possible values are: 'None', 'ReadOnly', 'ReadWrite' + ///

+ /// the caching type + Microsoft.Azure.Management.Compute.Models.CachingTypes? Microsoft.Azure.Management.V2.Compute.IVirtualMachineDataDisk.CachingType + { + get + { + return this.CachingType; + } + } + /// the size of this data disk in GB + int? Microsoft.Azure.Management.V2.Compute.IVirtualMachineDataDisk.Size + { + get + { + return this.Size; + } + } + /// + /// Uri to the source virtual hard disk user image from which this disk was created. + ///

+ /// null will be returned if this disk is not based on an image + ///

+ /// the uri of the source vhd image + string Microsoft.Azure.Management.V2.Compute.IVirtualMachineDataDisk.SourceImageUri + { + get + { + return this.SourceImageUri as string; + } + } + Microsoft.Azure.Management.V2.Compute.VirtualMachine.Definition.IWithCreate Microsoft.Azure.Management.V2.Resource.Core.ChildResource.Update.IInUpdate.Attach () { + return this.Attach() as Microsoft.Azure.Management.V2.Compute.VirtualMachine.Definition.IWithCreate; + } + + /// + /// Specifies the new size in GB for data disk. + /// + /// sizeInGB the disk size in GB + /// the next stage of data disk update + Microsoft.Azure.Management.V2.Compute.VirtualMachineDataDisk.Update.IUpdate Microsoft.Azure.Management.V2.Compute.VirtualMachineDataDisk.Update.IUpdateStages.WithSizeInGB (int? sizeInGB) { + return this.WithSizeInGB( sizeInGB) as Microsoft.Azure.Management.V2.Compute.VirtualMachineDataDisk.Update.IUpdate; + } + + /// + /// Specifies the new logical unit number for the data disk. + /// + /// lun the logical unit number + /// the next stage of data disk update + Microsoft.Azure.Management.V2.Compute.VirtualMachineDataDisk.Update.IUpdate Microsoft.Azure.Management.V2.Compute.VirtualMachineDataDisk.Update.IUpdateStages.WithLun (int? lun) { + return this.WithLun( lun) as Microsoft.Azure.Management.V2.Compute.VirtualMachineDataDisk.Update.IUpdate; + } + + /// + /// Specifies the new caching type for the data disk. + /// + /// cachingType the disk caching type. Possible values include: 'None', 'ReadOnly', 'ReadWrite' + /// the next stage of data disk update + Microsoft.Azure.Management.V2.Compute.VirtualMachineDataDisk.Update.IUpdate Microsoft.Azure.Management.V2.Compute.VirtualMachineDataDisk.Update.IUpdateStages.WithCaching (CachingTypes cachingType) { + return this.WithCaching( cachingType) as Microsoft.Azure.Management.V2.Compute.VirtualMachineDataDisk.Update.IUpdate; + } + + /// + /// Specifies the initial disk size in GB for new blank data disk. + /// + /// sizeInGB the disk size in GB + /// the stage representing optional additional settings for the attachable data disk + Microsoft.Azure.Management.V2.Compute.VirtualMachineDataDisk.Update.IWithStoreAt Microsoft.Azure.Management.V2.Compute.VirtualMachineDataDisk.Update.IAttachNewDataDisk.WithSizeInGB (int? sizeInGB) { + return this.WithSizeInGB( sizeInGB) as Microsoft.Azure.Management.V2.Compute.VirtualMachineDataDisk.Update.IWithStoreAt; + } + + /// + /// Specifies the initial disk size in GB for new blank data disk. + /// + /// sizeInGB the disk size in GB + /// the stage representing optional additional settings for the attachable data disk + Microsoft.Azure.Management.V2.Compute.VirtualMachineDataDisk.Definition.IWithStoreAt Microsoft.Azure.Management.V2.Compute.VirtualMachineDataDisk.Definition.IAttachNewDataDisk.WithSizeInGB (int? sizeInGB) { + return this.WithSizeInGB( sizeInGB) as Microsoft.Azure.Management.V2.Compute.VirtualMachineDataDisk.Definition.IWithStoreAt; + } + + Microsoft.Azure.Management.V2.Compute.VirtualMachine.Update.IUpdate Microsoft.Azure.Management.V2.Resource.Core.ChildResource.Definition.IInDefinition.Attach () { + return this.Attach() as Microsoft.Azure.Management.V2.Compute.VirtualMachine.Update.IUpdate; + } + + /// the name of the child resource + string Microsoft.Azure.Management.V2.Resource.Core.IChildResource.Name + { + get + { + return this.Name as string; + } + } + /// + /// Specifies the logical unit number for the data disk. + /// + /// lun the logical unit number + /// the next stage of data disk definition + Microsoft.Azure.Management.V2.Compute.VirtualMachineDataDisk.Update.IWithAttach Microsoft.Azure.Management.V2.Compute.VirtualMachineDataDisk.Update.IWithAttach.WithLun (int? lun) { + return this.WithLun( lun) as Microsoft.Azure.Management.V2.Compute.VirtualMachineDataDisk.Update.IWithAttach; + } + + /// + /// Specifies the caching type for the data disk. + /// + /// cachingType the disk caching type. Possible values include: 'None', 'ReadOnly', 'ReadWrite' + /// the next stage of data disk definition + Microsoft.Azure.Management.V2.Compute.VirtualMachineDataDisk.Update.IWithAttach Microsoft.Azure.Management.V2.Compute.VirtualMachineDataDisk.Update.IWithAttach.WithCaching (CachingTypes cachingType) { + return this.WithCaching( cachingType) as Microsoft.Azure.Management.V2.Compute.VirtualMachineDataDisk.Update.IWithAttach; + } + + /// + /// Specifies the logical unit number for the data disk. + /// + /// lun the logical unit number + /// the next stage of data disk definition + Microsoft.Azure.Management.V2.Compute.VirtualMachineDataDisk.Definition.IWithAttach Microsoft.Azure.Management.V2.Compute.VirtualMachineDataDisk.Definition.IWithAttach.WithLun (int? lun) { + return this.WithLun( lun) as Microsoft.Azure.Management.V2.Compute.VirtualMachineDataDisk.Definition.IWithAttach; + } + + /// + /// Specifies the caching type for the data disk. + /// + /// cachingType the disk caching type. Possible values include: 'None', 'ReadOnly', 'ReadWrite' + /// the next stage of data disk definition + Microsoft.Azure.Management.V2.Compute.VirtualMachineDataDisk.Definition.IWithAttach Microsoft.Azure.Management.V2.Compute.VirtualMachineDataDisk.Definition.IWithAttach.WithCaching (CachingTypes cachingType) { + return this.WithCaching( cachingType) as Microsoft.Azure.Management.V2.Compute.VirtualMachineDataDisk.Definition.IWithAttach; + } + + /// + /// Specifies where the VHD associated with the new blank data disk needs to be stored. + /// + /// storageAccountName the storage account name + /// containerName the name of the container to hold the new VHD file + /// vhdName the name for the new VHD file + /// the stage representing optional additional configurations for the data disk + Microsoft.Azure.Management.V2.Compute.VirtualMachineDataDisk.Update.IWithAttach Microsoft.Azure.Management.V2.Compute.VirtualMachineDataDisk.Update.IWithStoreAt.StoreAt (string storageAccountName, string containerName, string vhdName) { + return this.StoreAt( storageAccountName, containerName, vhdName) as Microsoft.Azure.Management.V2.Compute.VirtualMachineDataDisk.Update.IWithAttach; + } + + /// + /// Specifies where the VHD associated with the new blank data disk needs to be stored. + /// + /// storageAccountName the storage account name + /// containerName the name of the container to hold the new VHD file + /// vhdName the name for the new VHD file + /// the stage representing optional additional configurations for the data disk + Microsoft.Azure.Management.V2.Compute.VirtualMachineDataDisk.Definition.IWithAttach Microsoft.Azure.Management.V2.Compute.VirtualMachineDataDisk.Definition.IWithStoreAt.StoreAt (string storageAccountName, string containerName, string vhdName) { + return this.StoreAt( storageAccountName, containerName, vhdName) as Microsoft.Azure.Management.V2.Compute.VirtualMachineDataDisk.Definition.IWithAttach; + } + + } +} \ No newline at end of file diff --git a/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Domain/InterfaceImpl/VirtualMachineImageImpl.cs b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Domain/InterfaceImpl/VirtualMachineImageImpl.cs new file mode 100644 index 000000000..9b6a0909b --- /dev/null +++ b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Domain/InterfaceImpl/VirtualMachineImageImpl.cs @@ -0,0 +1,88 @@ +/** +* Copyright (c) Microsoft Corporation. All rights reserved. +* Licensed under the MIT License. See License.txt in the project root for +* license information. +*/ + +namespace Microsoft.Azure.Management.V2.Compute +{ + + using System.Collections.Generic; + using Microsoft.Azure.Management.Compute.Models; + using Microsoft.Azure.Management.V2.Resource.Core; + public partial class VirtualMachineImageImpl + { + /// description of the OS Disk image in the virtual machine image. + Microsoft.Azure.Management.Compute.Models.OSDiskImage Microsoft.Azure.Management.V2.Compute.IVirtualMachineImage.OsDiskImage + { + get + { + return this.OsDiskImage as Microsoft.Azure.Management.Compute.Models.OSDiskImage; + } + } + /// the version of the virtual machine image + string Microsoft.Azure.Management.V2.Compute.IVirtualMachineImage.Version + { + get + { + return this.Version as string; + } + } + /// the publisher name of the virtual machine image + string Microsoft.Azure.Management.V2.Compute.IVirtualMachineImage.PublisherName + { + get + { + return this.PublisherName as string; + } + } + /// the commercial name of the virtual machine image (SKU) + string Microsoft.Azure.Management.V2.Compute.IVirtualMachineImage.Sku + { + get + { + return this.Sku as string; + } + } + /// the purchase plan for the virtual machine image. + Microsoft.Azure.Management.Compute.Models.PurchasePlan Microsoft.Azure.Management.V2.Compute.IVirtualMachineImage.Plan + { + get + { + return this.Plan as Microsoft.Azure.Management.Compute.Models.PurchasePlan; + } + } + /// description of the Data disk images in the virtual machine. + System.Collections.Generic.IList Microsoft.Azure.Management.V2.Compute.IVirtualMachineImage.DataDiskImages + { + get + { + return this.DataDiskImages as System.Collections.Generic.IList; + } + } + /// the name of the virtual machine image offer this image is part of + string Microsoft.Azure.Management.V2.Compute.IVirtualMachineImage.Offer + { + get + { + return this.Offer as string; + } + } + /// the region in which virtual machine image is available + Microsoft.Azure.Management.V2.Resource.Core.Region? Microsoft.Azure.Management.V2.Compute.IVirtualMachineImage.Location + { + get + { + return this.Location; + } + } + /// the image reference representing publisher, offer, sku and version of the virtual machine image + Microsoft.Azure.Management.Compute.Models.ImageReference Microsoft.Azure.Management.V2.Compute.IVirtualMachineImage.ImageReference + { + get + { + return this.ImageReference as Microsoft.Azure.Management.Compute.Models.ImageReference; + } + } + } +} \ No newline at end of file diff --git a/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Domain/InterfaceImpl/VirtualMachineImagesImpl.cs b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Domain/InterfaceImpl/VirtualMachineImagesImpl.cs new file mode 100644 index 000000000..5395fab72 --- /dev/null +++ b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Domain/InterfaceImpl/VirtualMachineImagesImpl.cs @@ -0,0 +1,42 @@ +/** +* Copyright (c) Microsoft Corporation. All rights reserved. +* Licensed under the MIT License. See License.txt in the project root for +* license information. +*/ + +namespace Microsoft.Azure.Management.V2.Compute +{ + + using Microsoft.Azure.Management.V2.Resource.Core; + using Microsoft.Azure.Management.Compute.Models; + public partial class VirtualMachineImagesImpl + { + /// + /// Lists all the virtual machine images available in a given region. + ///

+ /// Note this is a very long running call, as it enumerates through all publishers, offers and skus. + ///

+ /// list of virtual machine images + /// region the region to list the images from + Microsoft.Azure.Management.V2.Resource.Core.PagedList Microsoft.Azure.Management.V2.Compute.IVirtualMachineImages.ListByRegion (Region region) { + return this.ListByRegion( region) as Microsoft.Azure.Management.V2.Resource.Core.PagedList; + } + + /// + /// Lists all the virtual machine images available in a given region. + ///

+ /// Note this is a very long running call, as it enumerates through all publishers, offers and skus. + ///

+ /// list of virtual machine images + /// regionName the name of the region as used internally by Azure + Microsoft.Azure.Management.V2.Resource.Core.PagedList Microsoft.Azure.Management.V2.Compute.IVirtualMachineImages.ListByRegion (string regionName) { + return this.ListByRegion( regionName) as Microsoft.Azure.Management.V2.Resource.Core.PagedList; + } + + /// entry point to virtual machine image publishers + Microsoft.Azure.Management.V2.Compute.IVirtualMachinePublishers Microsoft.Azure.Management.V2.Compute.IVirtualMachineImages.Publishers () { + return this.Publishers() as Microsoft.Azure.Management.V2.Compute.IVirtualMachinePublishers; + } + + } +} \ No newline at end of file diff --git a/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Domain/InterfaceImpl/VirtualMachineImagesInSkuImpl.cs b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Domain/InterfaceImpl/VirtualMachineImagesInSkuImpl.cs new file mode 100644 index 000000000..a5b394cf7 --- /dev/null +++ b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Domain/InterfaceImpl/VirtualMachineImagesInSkuImpl.cs @@ -0,0 +1,24 @@ +/** +* Copyright (c) Microsoft Corporation. All rights reserved. +* Licensed under the MIT License. See License.txt in the project root for +* license information. +*/ + +namespace Microsoft.Azure.Management.V2.Compute +{ + + using Microsoft.Azure.Management.Compute.Models; + using Microsoft.Azure.Management.V2.Resource.Core; + using Microsoft.Azure.Management.V2.Resource.Core.CollectionActions; + public partial class VirtualMachineImagesInSkuImpl + { + /// + /// Lists all the resources of the specified type in the currently selected subscription. + /// + /// list of resources + Microsoft.Azure.Management.V2.Resource.Core.PagedList Microsoft.Azure.Management.V2.Resource.Core.CollectionActions.ISupportsListing.List () { + return this.List() as Microsoft.Azure.Management.V2.Resource.Core.PagedList; + } + + } +} \ No newline at end of file diff --git a/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Domain/InterfaceImpl/VirtualMachineImpl.cs b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Domain/InterfaceImpl/VirtualMachineImpl.cs new file mode 100644 index 000000000..e40a7fdd4 --- /dev/null +++ b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Domain/InterfaceImpl/VirtualMachineImpl.cs @@ -0,0 +1,929 @@ +/** +* Copyright (c) Microsoft Corporation. All rights reserved. +* Licensed under the MIT License. See License.txt in the project root for +* license information. +*/ + +namespace Microsoft.Azure.Management.V2.Compute +{ + + using Microsoft.Azure.Management.Compute.Models; + using Microsoft.Azure.Management.V2.Network; + using Microsoft.Azure.Management.V2.Network.NetworkInterface.Definition; + using Microsoft.Azure.Management.V2.Compute.VirtualMachine.Definition; + using System.Threading.Tasks; + using Microsoft.Azure.Management.V2.Resource.Core; + using System.Collections.Generic; + using Microsoft.Azure.Management.V2.Resource.Core.ResourceActions; + using Microsoft.Rest; + using Microsoft.Azure.Management.Storage.Models; + using Microsoft.Azure.Management.V2.Storage; + using Microsoft.Azure.Management.V2.Resource; + using System.Threading; + using Microsoft.Azure.Management.V2.Compute.VirtualMachine.Update; + using Microsoft.Azure.Management.Network.Models; + public partial class VirtualMachineImpl + { + /// + /// Specifies an existing VHD that needs to be attached to the virtual machine as data disk. + /// + /// storageAccountName the storage account name + /// containerName the name of the container holding the VHD file + /// vhdName the name for the VHD file + /// the stage representing creatable VM definition + Microsoft.Azure.Management.V2.Compute.VirtualMachine.Definition.IWithCreate Microsoft.Azure.Management.V2.Compute.VirtualMachine.Definition.IWithDataDisk.WithExistingDataDisk (string storageAccountName, string containerName, string vhdName) { + return this.WithExistingDataDisk( storageAccountName, containerName, vhdName) as Microsoft.Azure.Management.V2.Compute.VirtualMachine.Definition.IWithCreate; + } + + /// + /// Specifies a new blank data disk to be attached to the virtual machine along with it's configuration. + /// + /// name the name for the data disk + /// the stage representing configuration for the data disk + Microsoft.Azure.Management.V2.Compute.VirtualMachineDataDisk.Definition.IAttachNewDataDisk Microsoft.Azure.Management.V2.Compute.VirtualMachine.Definition.IWithDataDisk.DefineNewDataDisk (string name) { + return this.DefineNewDataDisk( name) as Microsoft.Azure.Management.V2.Compute.VirtualMachineDataDisk.Definition.IAttachNewDataDisk; + } + + /// + /// Specifies that a new blank data disk needs to be attached to virtual machine. + /// + /// sizeInGB the disk size in GB + /// the stage representing creatable VM definition + Microsoft.Azure.Management.V2.Compute.VirtualMachine.Definition.IWithCreate Microsoft.Azure.Management.V2.Compute.VirtualMachine.Definition.IWithDataDisk.WithNewDataDisk (int? sizeInGB) { + return this.WithNewDataDisk( sizeInGB) as Microsoft.Azure.Management.V2.Compute.VirtualMachine.Definition.IWithCreate; + } + + /// + /// Specifies an existing VHD that needs to be attached to the virtual machine as data disk along with + /// it's configuration. + /// + /// name the name for the data disk + /// the stage representing configuration for the data disk + Microsoft.Azure.Management.V2.Compute.VirtualMachineDataDisk.Definition.IAttachExistingDataDisk Microsoft.Azure.Management.V2.Compute.VirtualMachine.Definition.IWithDataDisk.DefineExistingDataDisk (string name) { + return this.DefineExistingDataDisk( name) as Microsoft.Azure.Management.V2.Compute.VirtualMachineDataDisk.Definition.IAttachExistingDataDisk; + } + + /// + /// Specifies an existing VHD that needs to be attached to the virtual machine as data disk. + /// + /// storageAccountName the storage account name + /// containerName the name of the container holding the VHD file + /// vhdName the name for the VHD file + /// the stage representing creatable VM definition + Microsoft.Azure.Management.V2.Compute.VirtualMachine.Update.IUpdate Microsoft.Azure.Management.V2.Compute.VirtualMachine.Update.IWithDataDisk.WithExistingDataDisk (string storageAccountName, string containerName, string vhdName) { + return this.WithExistingDataDisk( storageAccountName, containerName, vhdName) as Microsoft.Azure.Management.V2.Compute.VirtualMachine.Update.IUpdate; + } + + /// + /// Specifies a new blank data disk to be attached to the virtual machine along with it's configuration. + /// + /// name the name for the data disk + /// the stage representing configuration for the data disk + Microsoft.Azure.Management.V2.Compute.VirtualMachineDataDisk.Update.IAttachNewDataDisk Microsoft.Azure.Management.V2.Compute.VirtualMachine.Update.IWithDataDisk.DefineNewDataDisk (string name) { + return this.DefineNewDataDisk( name) as Microsoft.Azure.Management.V2.Compute.VirtualMachineDataDisk.Update.IAttachNewDataDisk; + } + + /// + /// Specifies that a new blank data disk needs to be attached to virtual machine. + /// + /// sizeInGB the disk size in GB + /// the stage representing creatable VM definition + Microsoft.Azure.Management.V2.Compute.VirtualMachine.Update.IUpdate Microsoft.Azure.Management.V2.Compute.VirtualMachine.Update.IWithDataDisk.WithNewDataDisk (int? sizeInGB) { + return this.WithNewDataDisk( sizeInGB) as Microsoft.Azure.Management.V2.Compute.VirtualMachine.Update.IUpdate; + } + + /// + /// Specifies an existing VHD that needs to be attached to the virtual machine as data disk along with + /// it's configuration. + /// + /// name the name for the data disk + /// the stage representing configuration for the data disk + Microsoft.Azure.Management.V2.Compute.VirtualMachineDataDisk.Update.IAttachExistingDataDisk Microsoft.Azure.Management.V2.Compute.VirtualMachine.Update.IWithDataDisk.DefineExistingDataDisk (string name) { + return this.DefineExistingDataDisk( name) as Microsoft.Azure.Management.V2.Compute.VirtualMachineDataDisk.Update.IAttachExistingDataDisk; + } + + /// + /// Detaches a data disk with the given name from the virtual machine. + /// + /// name the name of the data disk to remove + /// the stage representing updatable VM definition + Microsoft.Azure.Management.V2.Compute.VirtualMachine.Update.IUpdate Microsoft.Azure.Management.V2.Compute.VirtualMachine.Update.IWithDataDisk.WithoutDataDisk (string name) { + return this.WithoutDataDisk( name) as Microsoft.Azure.Management.V2.Compute.VirtualMachine.Update.IUpdate; + } + + /// + /// Detaches a data disk with the given logical unit number from the virtual machine. + /// + /// lun the logical unit number of the data disk to remove + /// the stage representing updatable VM definition + Microsoft.Azure.Management.V2.Compute.VirtualMachine.Update.IUpdate Microsoft.Azure.Management.V2.Compute.VirtualMachine.Update.IWithDataDisk.WithoutDataDisk (int lun) { + return this.WithoutDataDisk( lun) as Microsoft.Azure.Management.V2.Compute.VirtualMachine.Update.IUpdate; + } + + /// + /// Begins the description of an update of an existing data disk of this virtual machine. + /// + /// name the name of the disk + /// the stage representing updating configuration for data disk + Microsoft.Azure.Management.V2.Compute.VirtualMachineDataDisk.Update.IUpdate Microsoft.Azure.Management.V2.Compute.VirtualMachine.Update.IWithDataDisk.UpdateDataDisk (string name) { + return this.UpdateDataDisk( name) as Microsoft.Azure.Management.V2.Compute.VirtualMachineDataDisk.Update.IUpdate; + } + + /// + /// Returns id to the availability set this virtual machine associated with. + ///

+ /// Having a set of virtual machines in an availability set ensures that during maintenance + /// event at least one virtual machine will be available. + ///

+ /// the availabilitySet reference id + string Microsoft.Azure.Management.V2.Compute.IVirtualMachine.AvailabilitySetId + { + get + { + return this.AvailabilitySetId as string; + } + } + /// the resources value + System.Collections.Generic.IList Microsoft.Azure.Management.V2.Compute.IVirtualMachine.Resources + { + get + { + return this.Resources as System.Collections.Generic.IList; + } + } + /// the operating system disk caching type, valid values are 'None', 'ReadOnly', 'ReadWrite' + Microsoft.Azure.Management.Compute.Models.CachingTypes? Microsoft.Azure.Management.V2.Compute.IVirtualMachine.OsDiskCachingType + { + get + { + return this.OsDiskCachingType; + } + } + /// + /// Start the virtual machine. + /// + void Microsoft.Azure.Management.V2.Compute.IVirtualMachine.Start () { + this.Start(); + } + + /// the plan value + Microsoft.Azure.Management.Compute.Models.Plan Microsoft.Azure.Management.V2.Compute.IVirtualMachine.Plan + { + get + { + return this.Plan as Microsoft.Azure.Management.Compute.Models.Plan; + } + } + /// the virtual machine unique id. + string Microsoft.Azure.Management.V2.Compute.IVirtualMachine.VmId + { + get + { + return this.VmId as string; + } + } + /// + /// List of all available virtual machine sizes this virtual machine can resized to. + /// + /// the virtual machine sizes + Microsoft.Azure.Management.V2.Resource.Core.PagedList Microsoft.Azure.Management.V2.Compute.IVirtualMachine.AvailableSizes () { + return this.AvailableSizes() as Microsoft.Azure.Management.V2.Resource.Core.PagedList; + } + + /// the operating system of this virtual machine + Microsoft.Azure.Management.Compute.Models.OperatingSystemTypes? Microsoft.Azure.Management.V2.Compute.IVirtualMachine.OsType + { + get + { + return this.OsType; + } + } + /// + /// Shuts down the Virtual Machine and releases the compute resources. + ///

+ /// You are not billed for the compute resources that this Virtual Machine uses + ///

+ void Microsoft.Azure.Management.V2.Compute.IVirtualMachine.Deallocate () { + this.Deallocate(); + } + + /// the virtual machine size + string Microsoft.Azure.Management.V2.Compute.IVirtualMachine.Size + { + get + { + return this.Size as string; + } + } + /// + /// Power off (stop) the virtual machine. + ///

+ /// You will be billed for the compute resources that this Virtual Machine uses. + ///

+ void Microsoft.Azure.Management.V2.Compute.IVirtualMachine.PowerOff () { + this.PowerOff(); + } + + /// + /// Refreshes the virtual machine instance view to sync with Azure. + ///

+ /// this will caches the instance view which can be later retrieved using {@link VirtualMachine#instanceView()}. + ///

+ /// the refreshed instance view + Microsoft.Azure.Management.Compute.Models.VirtualMachineInstanceView Microsoft.Azure.Management.V2.Compute.IVirtualMachine.RefreshInstanceView() + { + return this.RefreshInstanceView() as Microsoft.Azure.Management.Compute.Models.VirtualMachineInstanceView; + } + + /// the provisioningState value + string Microsoft.Azure.Management.V2.Compute.IVirtualMachine.ProvisioningState + { + get + { + return this.ProvisioningState as string; + } + } + /// the uri to the vhd file backing this virtual machine's operating system disk + string Microsoft.Azure.Management.V2.Compute.IVirtualMachine.OsDiskVhdUri + { + get + { + return this.OsDiskVhdUri as string; + } + } + /// the power state of the virtual machine + Microsoft.Azure.Management.V2.Compute.PowerState? Microsoft.Azure.Management.V2.Compute.IVirtualMachine.PowerState + { + get + { + return this.PowerState; + } + } + /// name of this virtual machine + string Microsoft.Azure.Management.V2.Compute.IVirtualMachine.ComputerName + { + get + { + return this.ComputerName as string; + } + } + /// + /// Gets the operating system profile of an Azure virtual machine. + /// + /// the osProfile value + Microsoft.Azure.Management.Compute.Models.OSProfile Microsoft.Azure.Management.V2.Compute.IVirtualMachine.OsProfile + { + get + { + return this.OsProfile as Microsoft.Azure.Management.Compute.Models.OSProfile; + } + } + /// + /// Restart the virtual machine. + /// + void Microsoft.Azure.Management.V2.Compute.IVirtualMachine.Restart () { + this.Restart(); + } + + /// + /// Returns the diagnostics profile of an Azure virtual machine. + ///

+ /// Enabling diagnostic features in a virtual machine enable you to easily diagnose and recover + /// virtual machine from boot failures. + ///

+ /// the diagnosticsProfile value + Microsoft.Azure.Management.Compute.Models.DiagnosticsProfile Microsoft.Azure.Management.V2.Compute.IVirtualMachine.DiagnosticsProfile + { + get + { + return this.DiagnosticsProfile as Microsoft.Azure.Management.Compute.Models.DiagnosticsProfile; + } + } + /// + /// Redeploy the virtual machine. + /// + void Microsoft.Azure.Management.V2.Compute.IVirtualMachine.Redeploy () { + this.Redeploy(); + } + + /// + /// Captures the virtual machine by copying virtual hard disks of the VM and returns template as json + /// string that can be used to create similar VMs. + /// + /// containerName destination container name to store the captured Vhd + /// overwriteVhd whether to overwrites destination vhd if it exists + /// the template as json string + string Microsoft.Azure.Management.V2.Compute.IVirtualMachine.Capture (string containerName, bool overwriteVhd) { + return this.Capture( containerName, overwriteVhd) as string; + } + + /// the licenseType value + string Microsoft.Azure.Management.V2.Compute.IVirtualMachine.LicenseType + { + get + { + return this.LicenseType as string; + } + } + /// + /// Get the virtual machine instance view. + ///

+ /// this method returns the cached instance view, to refresh the cache call {@link VirtualMachine#refreshInstanceView()}. + ///

+ /// the virtual machine instance view + Microsoft.Azure.Management.Compute.Models.VirtualMachineInstanceView Microsoft.Azure.Management.V2.Compute.IVirtualMachine.InstanceView + { + get + { + return this.InstanceView as Microsoft.Azure.Management.Compute.Models.VirtualMachineInstanceView; + } + } + /// + /// Gets the public IP address associated with this virtual machine's primary network interface. + ///

+ /// note that this method makes a rest API call to fetch the resource. + ///

+ /// the public IP of the primary network interface + Microsoft.Azure.Management.V2.Network.IPublicIpAddress Microsoft.Azure.Management.V2.Compute.IVirtualMachine.PrimaryPublicIpAddress () { + return this.PrimaryPublicIpAddress() as Microsoft.Azure.Management.V2.Network.IPublicIpAddress; + } + + /// + /// Returns the storage profile of an Azure virtual machine. + ///

+ /// The storage profile contains information such as the details of the VM image or user image + /// from which this virtual machine is created, the Azure storage account where the operating system + /// disk is stored, details of the data disk attached to the virtual machine. + ///

+ /// the storageProfile value + Microsoft.Azure.Management.Compute.Models.StorageProfile Microsoft.Azure.Management.V2.Compute.IVirtualMachine.StorageProfile + { + get + { + return this.StorageProfile as Microsoft.Azure.Management.Compute.Models.StorageProfile; + } + } + /// + /// Generalize the Virtual Machine. + /// + void Microsoft.Azure.Management.V2.Compute.IVirtualMachine.Generalize () { + this.Generalize(); + } + + /// the size of the operating system disk in GB + int? Microsoft.Azure.Management.V2.Compute.IVirtualMachine.OsDiskSize + { + get + { + return this.OsDiskSize; + } + } + /// the list of data disks attached to this virtual machine + System.Collections.Generic.IList Microsoft.Azure.Management.V2.Compute.IVirtualMachine.DataDisks () { + return this.DataDisks() as System.Collections.Generic.IList; + } + + /// + /// Associate an existing network interface with the virtual machine. + /// Note this method's effect is additive, i.e. each time it is used, the new secondary + /// network interface added to the virtual machine. + /// + /// networkInterface an existing network interface + /// the stage representing creatable VM definition + Microsoft.Azure.Management.V2.Compute.VirtualMachine.Definition.IWithCreate Microsoft.Azure.Management.V2.Compute.VirtualMachine.Definition.IWithSecondaryNetworkInterface.WithExistingSecondaryNetworkInterface (INetworkInterface networkInterface) { + return this.WithExistingSecondaryNetworkInterface( networkInterface) as Microsoft.Azure.Management.V2.Compute.VirtualMachine.Definition.IWithCreate; + } + + /// + /// Create a new network interface to associate with the virtual machine, based on the + /// provided definition. + ///

+ /// Note this method's effect is additive, i.e. each time it is used, the new secondary + /// network interface added to the virtual machine. + ///

+ /// creatable a creatable definition for a new network interface + /// the stage representing creatable VM definition + Microsoft.Azure.Management.V2.Compute.VirtualMachine.Definition.IWithCreate Microsoft.Azure.Management.V2.Compute.VirtualMachine.Definition.IWithSecondaryNetworkInterface.WithNewSecondaryNetworkInterface (ICreatable creatable) { + return this.WithNewSecondaryNetworkInterface( creatable) as Microsoft.Azure.Management.V2.Compute.VirtualMachine.Definition.IWithCreate; + } + + /// + /// Removes a network interface associated with virtual machine. + /// + /// name the name of the secondary network interface to remove + /// the stage representing updatable VM definition + Microsoft.Azure.Management.V2.Compute.VirtualMachine.Update.IUpdate Microsoft.Azure.Management.V2.Compute.VirtualMachine.Update.IWithSecondaryNetworkInterface.WithoutSecondaryNetworkInterface (string name) { + return this.WithoutSecondaryNetworkInterface( name) as Microsoft.Azure.Management.V2.Compute.VirtualMachine.Update.IUpdate; + } + + /// + /// Associate an existing network interface with the virtual machine. + /// Note this method's effect is additive, i.e. each time it is used, the new secondary + /// network interface added to the virtual machine. + /// + /// networkInterface an existing network interface + /// the stage representing creatable VM definition + Microsoft.Azure.Management.V2.Compute.VirtualMachine.Update.IUpdate Microsoft.Azure.Management.V2.Compute.VirtualMachine.Update.IWithSecondaryNetworkInterface.WithExistingSecondaryNetworkInterface (INetworkInterface networkInterface) { + return this.WithExistingSecondaryNetworkInterface( networkInterface) as Microsoft.Azure.Management.V2.Compute.VirtualMachine.Update.IUpdate; + } + + /// + /// Create a new network interface to associate with the virtual machine, based on the + /// provided definition. + ///

+ /// Note this method's effect is additive, i.e. each time it is used, the new secondary + /// network interface added to the virtual machine. + ///

+ /// creatable a creatable definition for a new network interface + /// the stage representing creatable VM definition + Microsoft.Azure.Management.V2.Compute.VirtualMachine.Update.IUpdate Microsoft.Azure.Management.V2.Compute.VirtualMachine.Update.IWithSecondaryNetworkInterface.WithNewSecondaryNetworkInterface (ICreatable creatable) { + return this.WithNewSecondaryNetworkInterface( creatable) as Microsoft.Azure.Management.V2.Compute.VirtualMachine.Update.IUpdate; + } + + /// + /// Refreshes the resource to sync with Azure. + /// + /// the refreshed resource + Microsoft.Azure.Management.V2.Compute.IVirtualMachine Microsoft.Azure.Management.V2.Resource.Core.ResourceActions.IRefreshable.Refresh () { + return this.Refresh() as Microsoft.Azure.Management.V2.Compute.IVirtualMachine; + } + + /// + /// Specifies the root user name for the Linux virtual machine. + /// + /// rootUserName the Linux root user name. This must follow the required naming convention for Linux user name + /// the next stage of the Linux virtual machine definition + Microsoft.Azure.Management.V2.Compute.VirtualMachine.Definition.IWithLinuxCreate Microsoft.Azure.Management.V2.Compute.VirtualMachine.Definition.IWithRootUserName.WithRootUserName (string rootUserName) { + return this.WithRootUserName( rootUserName) as Microsoft.Azure.Management.V2.Compute.VirtualMachine.Definition.IWithLinuxCreate; + } + + /// + /// Specifies that no public IP needs to be associated with virtual machine. + /// + /// the next stage of the virtual machine definition + Microsoft.Azure.Management.V2.Compute.VirtualMachine.Definition.IWithOS Microsoft.Azure.Management.V2.Compute.VirtualMachine.Definition.IWithPublicIpAddress.WithoutPrimaryPublicIpAddress () { + return this.WithoutPrimaryPublicIpAddress() as Microsoft.Azure.Management.V2.Compute.VirtualMachine.Definition.IWithOS; + } + + /// + /// Create a new public IP address to associate with virtual machine primary network interface, based on the + /// provided definition. + /// + /// creatable a creatable definition for a new public IP + /// the next stage of the virtual machine definition + Microsoft.Azure.Management.V2.Compute.VirtualMachine.Definition.IWithOS Microsoft.Azure.Management.V2.Compute.VirtualMachine.Definition.IWithPublicIpAddress.WithNewPrimaryPublicIpAddress (ICreatable creatable) { + return this.WithNewPrimaryPublicIpAddress( creatable) as Microsoft.Azure.Management.V2.Compute.VirtualMachine.Definition.IWithOS; + } + + /// + /// Creates a new public IP address in the same region and group as the resource, with the specified DNS label + /// and associate it with the virtual machine's primary network interface. + ///

+ /// the internal name for the public IP address will be derived from the DNS label. + ///

+ /// leafDnsLabel the leaf domain label + /// the next stage of the virtual machine definition + Microsoft.Azure.Management.V2.Compute.VirtualMachine.Definition.IWithOS Microsoft.Azure.Management.V2.Compute.VirtualMachine.Definition.IWithPublicIpAddress.WithNewPrimaryPublicIpAddress (string leafDnsLabel) { + return this.WithNewPrimaryPublicIpAddress( leafDnsLabel) as Microsoft.Azure.Management.V2.Compute.VirtualMachine.Definition.IWithOS; + } + + /// + /// Associates an existing public IP address with the virtual machine's primary network interface. + /// + /// publicIpAddress an existing public IP address + /// the next stage of the virtual machine definition + Microsoft.Azure.Management.V2.Compute.VirtualMachine.Definition.IWithOS Microsoft.Azure.Management.V2.Compute.VirtualMachine.Definition.IWithPublicIpAddress.WithExistingPrimaryPublicIpAddress (IPublicIpAddress publicIpAddress) { + return this.WithExistingPrimaryPublicIpAddress( publicIpAddress) as Microsoft.Azure.Management.V2.Compute.VirtualMachine.Definition.IWithOS; + } + + /// + /// Specifies the SSH public key. + ///

+ /// Each call to this method adds the given public key to the list of VM's public keys. + ///

+ /// publicKey the SSH public key in PEM format. + /// the stage representing creatable Linux VM definition + Microsoft.Azure.Management.V2.Compute.VirtualMachine.Definition.IWithLinuxCreate Microsoft.Azure.Management.V2.Compute.VirtualMachine.Definition.IWithLinuxCreate.WithSsh (string publicKey) { + return this.WithSsh( publicKey) as Microsoft.Azure.Management.V2.Compute.VirtualMachine.Definition.IWithLinuxCreate; + } + + /// + /// Specifies the password for the virtual machine. + /// + /// password the password. This must follow the criteria for Azure VM password. + /// the stage representing creatable VM definition + Microsoft.Azure.Management.V2.Compute.VirtualMachine.Definition.IWithCreate Microsoft.Azure.Management.V2.Compute.VirtualMachine.Definition.IWithPassword.WithPassword (string password) { + return this.WithPassword( password) as Microsoft.Azure.Management.V2.Compute.VirtualMachine.Definition.IWithCreate; + } + + /// + /// Specifies the administrator user name for the Windows virtual machine. + /// + /// adminUserName the Windows administrator user name. This must follow the required naming convention for Windows user name. + /// the stage representing creatable Linux VM definition + Microsoft.Azure.Management.V2.Compute.VirtualMachine.Definition.IWithWindowsCreate Microsoft.Azure.Management.V2.Compute.VirtualMachine.Definition.IWithAdminUserName.WithAdminUserName (string adminUserName) { + return this.WithAdminUserName( adminUserName) as Microsoft.Azure.Management.V2.Compute.VirtualMachine.Definition.IWithWindowsCreate; + } + + /// + /// Create a new virtual network to associate with the virtual machine's primary network interface, based on + /// the provided definition. + /// + /// creatable a creatable definition for a new virtual network + /// the next stage of the virtual machine definition + Microsoft.Azure.Management.V2.Compute.VirtualMachine.Definition.IWithPrivateIp Microsoft.Azure.Management.V2.Compute.VirtualMachine.Definition.IWithNetwork.WithNewPrimaryNetwork (ICreatable creatable) { + return this.WithNewPrimaryNetwork( creatable) as Microsoft.Azure.Management.V2.Compute.VirtualMachine.Definition.IWithPrivateIp; + } + + /// + /// Creates a new virtual network to associate with the virtual machine's primary network interface. + ///

+ /// the virtual network will be created in the same resource group and region as of virtual machine, it will be + /// created with the specified address space and a default subnet covering the entirety of the network IP address space. + ///

+ /// addressSpace the address space for the virtual network + /// the next stage of the virtual machine definition + Microsoft.Azure.Management.V2.Compute.VirtualMachine.Definition.IWithPrivateIp Microsoft.Azure.Management.V2.Compute.VirtualMachine.Definition.IWithNetwork.WithNewPrimaryNetwork (string addressSpace) { + return this.WithNewPrimaryNetwork( addressSpace) as Microsoft.Azure.Management.V2.Compute.VirtualMachine.Definition.IWithPrivateIp; + } + + /// + /// Associate an existing virtual network with the the virtual machine's primary network interface. + /// + /// network an existing virtual network + /// the next stage of the virtual machine definition + Microsoft.Azure.Management.V2.Compute.VirtualMachine.Definition.IWithSubnet Microsoft.Azure.Management.V2.Compute.VirtualMachine.Definition.IWithNetwork.WithExistingPrimaryNetwork (INetwork network) { + return this.WithExistingPrimaryNetwork( network) as Microsoft.Azure.Management.V2.Compute.VirtualMachine.Definition.IWithSubnet; + } + + /// + /// Specifies definition of a not-yet-created storage account definition + /// to put the VM's OS and data disk VHDs in. + ///

+ /// Only the OS disk based on marketplace image will be stored in the new storage account. + /// An OS disk based on user image will be stored in the same storage account as user image. + ///

+ /// creatable the storage account in creatable stage + /// the stage representing creatable VM definition + Microsoft.Azure.Management.V2.Compute.VirtualMachine.Definition.IWithCreate Microsoft.Azure.Management.V2.Compute.VirtualMachine.Definition.IWithStorageAccount.WithNewStorageAccount (ICreatable creatable) { + return this.WithNewStorageAccount( creatable) as Microsoft.Azure.Management.V2.Compute.VirtualMachine.Definition.IWithCreate; + } + + /// + /// Specifies the name of a new storage account to put the VM's OS and data disk VHD in. + ///

+ /// Only the OS disk based on marketplace image will be stored in the new storage account, + /// an OS disk based on user image will be stored in the same storage account as user image. + ///

+ /// name the name of the storage account + /// the stage representing creatable VM definition + Microsoft.Azure.Management.V2.Compute.VirtualMachine.Definition.IWithCreate Microsoft.Azure.Management.V2.Compute.VirtualMachine.Definition.IWithStorageAccount.WithNewStorageAccount (string name) { + return this.WithNewStorageAccount( name) as Microsoft.Azure.Management.V2.Compute.VirtualMachine.Definition.IWithCreate; + } + + /// + /// Specifies an existing {@link StorageAccount} storage account to put the VM's OS and data disk VHD in. + ///

+ /// An OS disk based on marketplace or user image (generalized image) will be stored in this + /// storage account. + ///

+ /// storageAccount an existing storage account + /// the stage representing creatable VM definition + Microsoft.Azure.Management.V2.Compute.VirtualMachine.Definition.IWithCreate Microsoft.Azure.Management.V2.Compute.VirtualMachine.Definition.IWithStorageAccount.WithExistingStorageAccount (IStorageAccount storageAccount) { + return this.WithExistingStorageAccount( storageAccount) as Microsoft.Azure.Management.V2.Compute.VirtualMachine.Definition.IWithCreate; + } + + /// + /// Assigns the specified static private IP address within the specified existing virtual network subnet to the + /// virtual machine's primary network interface. + /// + /// staticPrivateIpAddress the static IP address within the specified subnet to assign to + /// the network interface + /// the next stage of the virtual machine definition + Microsoft.Azure.Management.V2.Compute.VirtualMachine.Definition.IWithPublicIpAddress Microsoft.Azure.Management.V2.Compute.VirtualMachine.Definition.IWithPrivateIp.WithPrimaryPrivateIpAddressStatic (string staticPrivateIpAddress) { + return this.WithPrimaryPrivateIpAddressStatic( staticPrivateIpAddress) as Microsoft.Azure.Management.V2.Compute.VirtualMachine.Definition.IWithPublicIpAddress; + } + + /// + /// Enables dynamic private IP address allocation within the specified existing virtual network subnet for + /// virtual machine's primary network interface. + /// + /// the next stage of the virtual machine definition + Microsoft.Azure.Management.V2.Compute.VirtualMachine.Definition.IWithPublicIpAddress Microsoft.Azure.Management.V2.Compute.VirtualMachine.Definition.IWithPrivateIp.WithPrimaryPrivateIpAddressDynamic () { + return this.WithPrimaryPrivateIpAddressDynamic() as Microsoft.Azure.Management.V2.Compute.VirtualMachine.Definition.IWithPublicIpAddress; + } + + /// + /// Specifies that the latest version of a marketplace Linux image needs to be used. + /// + /// publisher specifies the publisher of the image + /// offer specifies the offer of the image + /// sku specifies the SKU of the image + /// the next stage of the virtual machine definition + Microsoft.Azure.Management.V2.Compute.VirtualMachine.Definition.IWithRootUserName Microsoft.Azure.Management.V2.Compute.VirtualMachine.Definition.IWithOS.WithLatestLinuxImage (string publisher, string offer, string sku) { + return this.WithLatestLinuxImage( publisher, offer, sku) as Microsoft.Azure.Management.V2.Compute.VirtualMachine.Definition.IWithRootUserName; + } + + /// + /// Specifies the user (generalized) Linux image used for the virtual machine's OS. + /// + /// imageUrl the url the the VHD + /// the next stage of the virtual machine definition + Microsoft.Azure.Management.V2.Compute.VirtualMachine.Definition.IWithRootUserName Microsoft.Azure.Management.V2.Compute.VirtualMachine.Definition.IWithOS.WithStoredLinuxImage (string imageUrl) { + return this.WithStoredLinuxImage( imageUrl) as Microsoft.Azure.Management.V2.Compute.VirtualMachine.Definition.IWithRootUserName; + } + + /// + /// Specifies the version of a market-place Linux image needs to be used. + /// + /// imageReference describes publisher, offer, sku and version of the market-place image + /// the next stage of the virtual machine definition + Microsoft.Azure.Management.V2.Compute.VirtualMachine.Definition.IWithRootUserName Microsoft.Azure.Management.V2.Compute.VirtualMachine.Definition.IWithOS.WithSpecificLinuxImageVersion (ImageReference imageReference) { + return this.WithSpecificLinuxImageVersion( imageReference) as Microsoft.Azure.Management.V2.Compute.VirtualMachine.Definition.IWithRootUserName; + } + + /// + /// Specifies that the latest version of a marketplace Windows image needs to be used. + /// + /// publisher specifies the publisher of the image + /// offer specifies the offer of the image + /// sku specifies the SKU of the image + /// the next stage of the virtual machine definition + Microsoft.Azure.Management.V2.Compute.VirtualMachine.Definition.IWithAdminUserName Microsoft.Azure.Management.V2.Compute.VirtualMachine.Definition.IWithOS.WithLatestWindowsImage (string publisher, string offer, string sku) { + return this.WithLatestWindowsImage( publisher, offer, sku) as Microsoft.Azure.Management.V2.Compute.VirtualMachine.Definition.IWithAdminUserName; + } + + /// + /// Specifies the known marketplace Windows image used for the virtual machine's OS. + /// + /// knownImage enum value indicating known market-place image + /// the next stage of the virtual machine definition + Microsoft.Azure.Management.V2.Compute.VirtualMachine.Definition.IWithAdminUserName Microsoft.Azure.Management.V2.Compute.VirtualMachine.Definition.IWithOS.WithPopularWindowsImage (KnownWindowsVirtualMachineImage knownImage) { + return this.WithPopularWindowsImage( knownImage) as Microsoft.Azure.Management.V2.Compute.VirtualMachine.Definition.IWithAdminUserName; + } + + /// + /// Specifies the specialized operating system disk to be attached to the virtual machine. + /// + /// osDiskUrl osDiskUrl the url to the OS disk in the Azure Storage account + /// osType the OS type + /// the next stage of the Windows virtual machine definition + Microsoft.Azure.Management.V2.Compute.VirtualMachine.Definition.IWithCreate Microsoft.Azure.Management.V2.Compute.VirtualMachine.Definition.IWithOS.WithOsDisk (string osDiskUrl, OperatingSystemTypes osType) { + return this.WithOsDisk( osDiskUrl, osType) as Microsoft.Azure.Management.V2.Compute.VirtualMachine.Definition.IWithCreate; + } + + /// + /// Specifies the known marketplace Linux image used for the virtual machine's OS. + /// + /// knownImage enum value indicating known market-place image + /// the next stage of the virtual machine definition + Microsoft.Azure.Management.V2.Compute.VirtualMachine.Definition.IWithRootUserName Microsoft.Azure.Management.V2.Compute.VirtualMachine.Definition.IWithOS.WithPopularLinuxImage (KnownLinuxVirtualMachineImage knownImage) { + return this.WithPopularLinuxImage( knownImage) as Microsoft.Azure.Management.V2.Compute.VirtualMachine.Definition.IWithRootUserName; + } + + /// + /// Specifies the version of a marketplace Windows image needs to be used. + /// + /// imageReference describes publisher, offer, sku and version of the market-place image + /// the next stage of the virtual machine definition + Microsoft.Azure.Management.V2.Compute.VirtualMachine.Definition.IWithAdminUserName Microsoft.Azure.Management.V2.Compute.VirtualMachine.Definition.IWithOS.WithSpecificWindowsImageVersion (ImageReference imageReference) { + return this.WithSpecificWindowsImageVersion( imageReference) as Microsoft.Azure.Management.V2.Compute.VirtualMachine.Definition.IWithAdminUserName; + } + + /// + /// Specifies the user (generalized) Windows image used for the virtual machine's OS. + /// + /// imageUrl the url the the VHD + /// the next stage of the virtual machine definition + Microsoft.Azure.Management.V2.Compute.VirtualMachine.Definition.IWithAdminUserName Microsoft.Azure.Management.V2.Compute.VirtualMachine.Definition.IWithOS.WithStoredWindowsImage (string imageUrl) { + return this.WithStoredWindowsImage( imageUrl) as Microsoft.Azure.Management.V2.Compute.VirtualMachine.Definition.IWithAdminUserName; + } + + /// + /// Specifies the size of the OSDisk in GB. + /// + /// size the VHD size. + /// the stage representing updatable VM definition + Microsoft.Azure.Management.V2.Compute.VirtualMachine.Update.IUpdate Microsoft.Azure.Management.V2.Compute.VirtualMachine.Update.IUpdate.WithOsDiskSizeInGb (int? size) { + return this.WithOsDiskSizeInGb( size) as Microsoft.Azure.Management.V2.Compute.VirtualMachine.Update.IUpdate; + } + + /// + /// Specifies the caching type for the Operating System disk. + /// + /// cachingType the caching type. + /// the stage representing updatable VM definition + Microsoft.Azure.Management.V2.Compute.VirtualMachine.Update.IUpdate Microsoft.Azure.Management.V2.Compute.VirtualMachine.Update.IUpdate.WithOsDiskCaching (CachingTypes cachingType) { + return this.WithOsDiskCaching( cachingType) as Microsoft.Azure.Management.V2.Compute.VirtualMachine.Update.IUpdate; + } + + /// + /// Specifies the new size for the virtual machine. + /// + /// sizeName the name of the size for the virtual machine as text + /// the stage representing updatable VM definition + Microsoft.Azure.Management.V2.Compute.VirtualMachine.Update.IUpdate Microsoft.Azure.Management.V2.Compute.VirtualMachine.Update.IUpdate.WithSize (string sizeName) { + return this.WithSize( sizeName) as Microsoft.Azure.Management.V2.Compute.VirtualMachine.Update.IUpdate; + } + + /// + /// Specifies the WINRM listener. + ///

+ /// Each call to this method adds the given listener to the list of VM's WinRM listeners. + ///

+ /// listener the WinRmListener + /// the stage representing creatable Windows VM definition + Microsoft.Azure.Management.V2.Compute.VirtualMachine.Definition.IWithWindowsCreate Microsoft.Azure.Management.V2.Compute.VirtualMachine.Definition.IWithWindowsCreate.WithWinRm (WinRMListener listener) { + return this.WithWinRm( listener) as Microsoft.Azure.Management.V2.Compute.VirtualMachine.Definition.IWithWindowsCreate; + } + + /// + /// Specifies that automatic updates should be disabled. + /// + /// the stage representing creatable Windows VM definition + Microsoft.Azure.Management.V2.Compute.VirtualMachine.Definition.IWithWindowsCreate Microsoft.Azure.Management.V2.Compute.VirtualMachine.Definition.IWithWindowsCreate.DisableAutoUpdate() + { + return this.DisableAutoUpdate() as Microsoft.Azure.Management.V2.Compute.VirtualMachine.Definition.IWithWindowsCreate; + } + /// + /// Specifies that VM Agent should not be provisioned. + /// + /// the stage representing creatable Windows VM definition + Microsoft.Azure.Management.V2.Compute.VirtualMachine.Definition.IWithWindowsCreate Microsoft.Azure.Management.V2.Compute.VirtualMachine.Definition.IWithWindowsCreate.DisableVmAgent() + { + return this.DisableVmAgent() as IWithWindowsCreate; + } + /// + /// Specifies the time-zone. + /// + /// timeZone the timezone + /// the stage representing creatable Windows VM definition + Microsoft.Azure.Management.V2.Compute.VirtualMachine.Definition.IWithWindowsCreate Microsoft.Azure.Management.V2.Compute.VirtualMachine.Definition.IWithWindowsCreate.WithTimeZone (string timeZone) { + return this.WithTimeZone( timeZone) as Microsoft.Azure.Management.V2.Compute.VirtualMachine.Definition.IWithWindowsCreate; + } + + /// + /// Associate a subnet with the virtual machine primary network interface. + /// + /// name the subnet name + /// the next stage of the virtual machine definition + Microsoft.Azure.Management.V2.Compute.VirtualMachine.Definition.IWithPrivateIp Microsoft.Azure.Management.V2.Compute.VirtualMachine.Definition.IWithSubnet.WithSubnet (string name) { + return this.WithSubnet( name) as Microsoft.Azure.Management.V2.Compute.VirtualMachine.Definition.IWithPrivateIp; + } + + /// + /// Execute the update request asynchronously. + /// + /// cancellationToken the cancellation token + /// the handle to the REST call + async Task Microsoft.Azure.Management.V2.Resource.Core.ResourceActions.IAppliable.ApplyAsync (CancellationToken cancellationToken = default(CancellationToken), bool multiThreaded = true) { + return await this.ApplyAsync() as IVirtualMachine; + } + + /// + /// Execute the update request. + /// + /// the updated resource + Microsoft.Azure.Management.V2.Compute.IVirtualMachine Microsoft.Azure.Management.V2.Resource.Core.ResourceActions.IAppliable.Apply () { + return this.Apply() as Microsoft.Azure.Management.V2.Compute.IVirtualMachine; + } + + /// + /// Specifies the size of the OSDisk in GB. + /// + /// size the VHD size. + /// the stage representing creatable VM definition + Microsoft.Azure.Management.V2.Compute.VirtualMachine.Definition.IWithCreate Microsoft.Azure.Management.V2.Compute.VirtualMachine.Definition.IWithOsDiskSettings.WithOsDiskSizeInGb (int? size) { + return this.WithOsDiskSizeInGb( size) as Microsoft.Azure.Management.V2.Compute.VirtualMachine.Definition.IWithCreate; + } + + /// + /// Specifies the name for the OS Disk. + /// + /// name the OS Disk name. + /// the stage representing creatable VM definition + Microsoft.Azure.Management.V2.Compute.VirtualMachine.Definition.IWithCreate Microsoft.Azure.Management.V2.Compute.VirtualMachine.Definition.IWithOsDiskSettings.WithOsDiskName (string name) { + return this.WithOsDiskName( name) as Microsoft.Azure.Management.V2.Compute.VirtualMachine.Definition.IWithCreate; + } + + /// + /// Specifies the name of the OS Disk Vhd file and it's parent container. + /// + /// containerName the name of the container in the selected storage account. + /// vhdName the name for the OS Disk vhd. + /// the stage representing creatable VM definition + Microsoft.Azure.Management.V2.Compute.VirtualMachine.Definition.IWithCreate Microsoft.Azure.Management.V2.Compute.VirtualMachine.Definition.IWithOsDiskSettings.WithOsDiskVhdLocation (string containerName, string vhdName) { + return this.WithOsDiskVhdLocation( containerName, vhdName) as Microsoft.Azure.Management.V2.Compute.VirtualMachine.Definition.IWithCreate; + } + + /// + /// Specifies the caching type for the Operating System disk. + /// + /// cachingType the caching type. + /// the stage representing creatable VM definition + Microsoft.Azure.Management.V2.Compute.VirtualMachine.Definition.IWithCreate Microsoft.Azure.Management.V2.Compute.VirtualMachine.Definition.IWithOsDiskSettings.WithOsDiskCaching (CachingTypes cachingType) { + return this.WithOsDiskCaching( cachingType) as Microsoft.Azure.Management.V2.Compute.VirtualMachine.Definition.IWithCreate; + } + + /// + /// Specifies the encryption settings for the OS Disk. + /// + /// settings the encryption settings. + /// the stage representing creatable VM definition + Microsoft.Azure.Management.V2.Compute.VirtualMachine.Definition.IWithCreate Microsoft.Azure.Management.V2.Compute.VirtualMachine.Definition.IWithOsDiskSettings.WithOsDiskEncryptionSettings (DiskEncryptionSettings settings) { + return this.WithOsDiskEncryptionSettings( settings) as Microsoft.Azure.Management.V2.Compute.VirtualMachine.Definition.IWithCreate; + } + + /// + /// Specifies the virtual machine size. + /// + /// sizeName the name of the size for the virtual machine as text + /// the stage representing creatable VM definition + Microsoft.Azure.Management.V2.Compute.VirtualMachine.Definition.IWithCreate Microsoft.Azure.Management.V2.Compute.VirtualMachine.Definition.IWithVMSize.WithSize (string sizeName) { + return this.WithSize( sizeName) as Microsoft.Azure.Management.V2.Compute.VirtualMachine.Definition.IWithCreate; + } + + /// the resource id of the primary network interface associated with this resource + string Microsoft.Azure.Management.V2.Network.ISupportsNetworkInterfaces.PrimaryNetworkInterfaceId + { + get + { + return this.PrimaryNetworkInterfaceId as string; + } + } + /// the list of resource IDs of the network interfaces associated with this resource + System.Collections.Generic.IList Microsoft.Azure.Management.V2.Network.ISupportsNetworkInterfaces.NetworkInterfaceIds + { + get + { + return this.NetworkInterfaceIds as System.Collections.Generic.IList; + } + } + /// + /// Gets the primary network interface. + ///

+ /// Note that this method can result in a call to the cloud to fetch the network interface information. + ///

+ /// the primary network interface associated with this resource + Microsoft.Azure.Management.V2.Network.INetworkInterface Microsoft.Azure.Management.V2.Network.ISupportsNetworkInterfaces.PrimaryNetworkInterface () { + return this.PrimaryNetworkInterface() as Microsoft.Azure.Management.V2.Network.INetworkInterface; + } + + /// + /// Create a new network interface to associate the virtual machine with as it's primary network interface, + /// based on the provided definition. + /// + /// creatable a creatable definition for a new network interface + /// The next stage of the virtual machine definition + Microsoft.Azure.Management.V2.Compute.VirtualMachine.Definition.IWithOS Microsoft.Azure.Management.V2.Compute.VirtualMachine.Definition.IWithPrimaryNetworkInterface.WithNewPrimaryNetworkInterface (ICreatable creatable) { + return this.WithNewPrimaryNetworkInterface( creatable) as Microsoft.Azure.Management.V2.Compute.VirtualMachine.Definition.IWithOS; + } + + /// + /// Associate an existing network interface as the virtual machine with as it's primary network interface. + /// + /// networkInterface an existing network interface + /// The next stage of the virtual machine definition + Microsoft.Azure.Management.V2.Compute.VirtualMachine.Definition.IWithOS Microsoft.Azure.Management.V2.Compute.VirtualMachine.Definition.IWithPrimaryNetworkInterface.WithExistingPrimaryNetworkInterface (INetworkInterface networkInterface) { + return this.WithExistingPrimaryNetworkInterface( networkInterface) as Microsoft.Azure.Management.V2.Compute.VirtualMachine.Definition.IWithOS; + } + + /// + /// Specifies an existing {@link AvailabilitySet} availability set to to associate the virtual machine with. + ///

+ /// Adding virtual machines running your application to an availability set ensures that during + /// maintenance event at least one virtual machine will be available. + ///

+ /// availabilitySet an existing availability set + /// the stage representing creatable VM definition + Microsoft.Azure.Management.V2.Compute.VirtualMachine.Definition.IWithCreate Microsoft.Azure.Management.V2.Compute.VirtualMachine.Definition.IWithAvailabilitySet.WithExistingAvailabilitySet (IAvailabilitySet availabilitySet) { + return this.WithExistingAvailabilitySet( availabilitySet) as Microsoft.Azure.Management.V2.Compute.VirtualMachine.Definition.IWithCreate; + } + + /// + /// Specifies definition of a not-yet-created availability set definition + /// to associate the virtual machine with. + ///

+ /// Adding virtual machines running your application to an availability set ensures that during + /// maintenance event at least one virtual machine will be available. + ///

+ /// creatable the availability set in creatable stage + /// the stage representing creatable VM definition + Microsoft.Azure.Management.V2.Compute.VirtualMachine.Definition.IWithCreate Microsoft.Azure.Management.V2.Compute.VirtualMachine.Definition.IWithAvailabilitySet.WithNewAvailabilitySet (ICreatable creatable) { + return this.WithNewAvailabilitySet( creatable) as Microsoft.Azure.Management.V2.Compute.VirtualMachine.Definition.IWithCreate; + } + + /// + /// Specifies the name of a new availability set to associate the virtual machine with. + ///

+ /// Adding virtual machines running your application to an availability set ensures that during + /// maintenance event at least one virtual machine will be available. + ///

+ /// name the name of the availability set + /// the stage representing creatable VM definition + Microsoft.Azure.Management.V2.Compute.VirtualMachine.Definition.IWithCreate Microsoft.Azure.Management.V2.Compute.VirtualMachine.Definition.IWithAvailabilitySet.WithNewAvailabilitySet (string name) { + return this.WithNewAvailabilitySet( name) as Microsoft.Azure.Management.V2.Compute.VirtualMachine.Definition.IWithCreate; + } + + } +} \ No newline at end of file diff --git a/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Domain/InterfaceImpl/VirtualMachineOfferImpl.cs b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Domain/InterfaceImpl/VirtualMachineOfferImpl.cs new file mode 100644 index 000000000..3b8b949f8 --- /dev/null +++ b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Domain/InterfaceImpl/VirtualMachineOfferImpl.cs @@ -0,0 +1,41 @@ +/** +* Copyright (c) Microsoft Corporation. All rights reserved. +* Licensed under the MIT License. See License.txt in the project root for +* license information. +*/ + +namespace Microsoft.Azure.Management.V2.Compute +{ + + using Microsoft.Azure.Management.V2.Resource.Core; + using Microsoft.Azure.Management.Compute.Models; + public partial class VirtualMachineOfferImpl + { + /// the name of the virtual machine image offer + string Microsoft.Azure.Management.V2.Compute.IVirtualMachineOffer.Name + { + get + { + return this.Name as string; + } + } + /// Virtual machine image SKUs available in this offer. + Microsoft.Azure.Management.V2.Compute.IVirtualMachineSkus Microsoft.Azure.Management.V2.Compute.IVirtualMachineOffer.Skus () { + return this.Skus() as Microsoft.Azure.Management.V2.Compute.IVirtualMachineSkus; + } + + /// the publisher of this virtual machine image offer + Microsoft.Azure.Management.V2.Compute.IVirtualMachinePublisher Microsoft.Azure.Management.V2.Compute.IVirtualMachineOffer.Publisher () { + return this.Publisher() as Microsoft.Azure.Management.V2.Compute.IVirtualMachinePublisher; + } + + /// the region where this virtual machine image offer is available + Microsoft.Azure.Management.V2.Resource.Core.Region? Microsoft.Azure.Management.V2.Compute.IVirtualMachineOffer.Region + { + get + { + return this.Region; + } + } + } +} \ No newline at end of file diff --git a/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Domain/InterfaceImpl/VirtualMachineOffersImpl.cs b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Domain/InterfaceImpl/VirtualMachineOffersImpl.cs new file mode 100644 index 000000000..ce1955850 --- /dev/null +++ b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Domain/InterfaceImpl/VirtualMachineOffersImpl.cs @@ -0,0 +1,24 @@ +/** +* Copyright (c) Microsoft Corporation. All rights reserved. +* Licensed under the MIT License. See License.txt in the project root for +* license information. +*/ + +namespace Microsoft.Azure.Management.V2.Compute +{ + + using Microsoft.Azure.Management.Compute.Models; + using Microsoft.Azure.Management.V2.Resource.Core; + using Microsoft.Azure.Management.V2.Resource.Core.CollectionActions; + public partial class VirtualMachineOffersImpl + { + /// + /// Lists all the resources of the specified type in the currently selected subscription. + /// + /// list of resources + Microsoft.Azure.Management.V2.Resource.Core.PagedList Microsoft.Azure.Management.V2.Resource.Core.CollectionActions.ISupportsListing.List () { + return this.List() as Microsoft.Azure.Management.V2.Resource.Core.PagedList; + } + + } +} \ No newline at end of file diff --git a/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Domain/InterfaceImpl/VirtualMachinePublisherImpl.cs b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Domain/InterfaceImpl/VirtualMachinePublisherImpl.cs new file mode 100644 index 000000000..1325fdeef --- /dev/null +++ b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Domain/InterfaceImpl/VirtualMachinePublisherImpl.cs @@ -0,0 +1,36 @@ +/** +* Copyright (c) Microsoft Corporation. All rights reserved. +* Licensed under the MIT License. See License.txt in the project root for +* license information. +*/ + +namespace Microsoft.Azure.Management.V2.Compute +{ + + using Microsoft.Azure.Management.V2.Resource.Core; + using Microsoft.Azure.Management.Compute.Models; + public partial class VirtualMachinePublisherImpl + { + /// the name of the publisher + string Microsoft.Azure.Management.V2.Compute.IVirtualMachinePublisher.Name + { + get + { + return this.Name as string; + } + } + /// the offers from this publisher + Microsoft.Azure.Management.V2.Compute.IVirtualMachineOffers Microsoft.Azure.Management.V2.Compute.IVirtualMachinePublisher.Offers () { + return this.Offers() as Microsoft.Azure.Management.V2.Compute.IVirtualMachineOffers; + } + + /// the region where virtual machine images from this publisher is available + Microsoft.Azure.Management.V2.Resource.Core.Region? Microsoft.Azure.Management.V2.Compute.IVirtualMachinePublisher.Region + { + get + { + return this.Region; + } + } + } +} \ No newline at end of file diff --git a/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Domain/InterfaceImpl/VirtualMachinePublishersImpl.cs b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Domain/InterfaceImpl/VirtualMachinePublishersImpl.cs new file mode 100644 index 000000000..d38d114e9 --- /dev/null +++ b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Domain/InterfaceImpl/VirtualMachinePublishersImpl.cs @@ -0,0 +1,34 @@ +/** +* Copyright (c) Microsoft Corporation. All rights reserved. +* Licensed under the MIT License. See License.txt in the project root for +* license information. +*/ + +namespace Microsoft.Azure.Management.V2.Compute +{ + + using Microsoft.Azure.Management.Compute.Models; + using Microsoft.Azure.Management.V2.Resource.Core.CollectionActions; + using Microsoft.Azure.Management.V2.Resource.Core; + public partial class VirtualMachinePublishersImpl + { + /// + /// Lists all the resources of the specified type in the specified region. + /// + /// region the selected Azure region + /// list of resources + Microsoft.Azure.Management.V2.Resource.Core.PagedList Microsoft.Azure.Management.V2.Resource.Core.CollectionActions.ISupportsListingByRegion.ListByRegion (Region region) { + return this.ListByRegion( region) as Microsoft.Azure.Management.V2.Resource.Core.PagedList; + } + + /// + /// List all the resources of the specified type in the specified region. + /// + /// regionName the name of an Azure region + /// list of resources + Microsoft.Azure.Management.V2.Resource.Core.PagedList Microsoft.Azure.Management.V2.Resource.Core.CollectionActions.ISupportsListingByRegion.ListByRegion (string regionName) { + return this.ListByRegion( regionName) as Microsoft.Azure.Management.V2.Resource.Core.PagedList; + } + + } +} \ No newline at end of file diff --git a/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Domain/InterfaceImpl/VirtualMachineSizeImpl.cs b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Domain/InterfaceImpl/VirtualMachineSizeImpl.cs new file mode 100644 index 000000000..9ebc8b4e6 --- /dev/null +++ b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Domain/InterfaceImpl/VirtualMachineSizeImpl.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. +*/ + +namespace Microsoft.Azure.Management.V2.Compute +{ + + using Microsoft.Azure.Management.Compute.Models; + public partial class VirtualMachineSizeImpl + { + /// the maximum number of data disks allowed by a VM size + int? Microsoft.Azure.Management.V2.Compute.IVirtualMachineSize.MaxDataDiskCount + { + get + { + return this.MaxDataDiskCount; + } + } + /// the Number of cores supported by a VM size + int? Microsoft.Azure.Management.V2.Compute.IVirtualMachineSize.NumberOfCores + { + get + { + return this.NumberOfCores; + } + } + /// the OS disk size allowed by a VM size + int? Microsoft.Azure.Management.V2.Compute.IVirtualMachineSize.OsDiskSizeInMB + { + get + { + return this.OsDiskSizeInMB; + } + } + /// resource disk size allowed by a VM size + int? Microsoft.Azure.Management.V2.Compute.IVirtualMachineSize.ResourceDiskSizeInMB + { + get + { + return this.ResourceDiskSizeInMB; + } + } + /// the VM size name + string Microsoft.Azure.Management.V2.Compute.IVirtualMachineSize.Name + { + get + { + return this.Name as string; + } + } + /// the memory size supported by a VM size + int? Microsoft.Azure.Management.V2.Compute.IVirtualMachineSize.MemoryInMB + { + get + { + return this.MemoryInMB; + } + } + } +} \ No newline at end of file diff --git a/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Domain/InterfaceImpl/VirtualMachineSizesImpl.cs b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Domain/InterfaceImpl/VirtualMachineSizesImpl.cs new file mode 100644 index 000000000..d5591a1a9 --- /dev/null +++ b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Domain/InterfaceImpl/VirtualMachineSizesImpl.cs @@ -0,0 +1,34 @@ +/** +* Copyright (c) Microsoft Corporation. All rights reserved. +* Licensed under the MIT License. See License.txt in the project root for +* license information. +*/ + +namespace Microsoft.Azure.Management.V2.Compute +{ + + using Microsoft.Azure.Management.Compute.Models; + using Microsoft.Azure.Management.V2.Resource.Core; + using Microsoft.Azure.Management.V2.Resource.Core.CollectionActions; + public partial class VirtualMachineSizesImpl + { + /// + /// Lists all the resources of the specified type in the specified region. + /// + /// region the selected Azure region + /// list of resources + Microsoft.Azure.Management.V2.Resource.Core.PagedList Microsoft.Azure.Management.V2.Resource.Core.CollectionActions.ISupportsListingByRegion.ListByRegion (Region region) { + return this.ListByRegion( region) as Microsoft.Azure.Management.V2.Resource.Core.PagedList; + } + + /// + /// List all the resources of the specified type in the specified region. + /// + /// regionName the name of an Azure region + /// list of resources + Microsoft.Azure.Management.V2.Resource.Core.PagedList Microsoft.Azure.Management.V2.Resource.Core.CollectionActions.ISupportsListingByRegion.ListByRegion (string regionName) { + return this.ListByRegion( regionName) as Microsoft.Azure.Management.V2.Resource.Core.PagedList; + } + + } +} \ No newline at end of file diff --git a/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Domain/InterfaceImpl/VirtualMachineSkuImpl.cs b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Domain/InterfaceImpl/VirtualMachineSkuImpl.cs new file mode 100644 index 000000000..04c25c51e --- /dev/null +++ b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Domain/InterfaceImpl/VirtualMachineSkuImpl.cs @@ -0,0 +1,46 @@ +/** +* Copyright (c) Microsoft Corporation. All rights reserved. +* Licensed under the MIT License. See License.txt in the project root for +* license information. +*/ + +namespace Microsoft.Azure.Management.V2.Compute +{ + + using Microsoft.Azure.Management.Compute.Models; + using Microsoft.Azure.Management.V2.Resource.Core; + public partial class VirtualMachineSkuImpl + { + /// virtual machine images in the sku + Microsoft.Azure.Management.V2.Compute.IVirtualMachineImagesInSku Microsoft.Azure.Management.V2.Compute.IVirtualMachineSku.Images () { + return this.Images() as Microsoft.Azure.Management.V2.Compute.IVirtualMachineImagesInSku; + } + + /// the commercial name of the virtual machine image (SKU) + string Microsoft.Azure.Management.V2.Compute.IVirtualMachineSku.Name + { + get + { + return this.Name as string; + } + } + /// the virtual machine offer name that this SKU belongs to + Microsoft.Azure.Management.V2.Compute.IVirtualMachineOffer Microsoft.Azure.Management.V2.Compute.IVirtualMachineSku.Offer () { + return this.Offer() as Microsoft.Azure.Management.V2.Compute.IVirtualMachineOffer; + } + + /// the publisher of this virtual machine image offer SKU + Microsoft.Azure.Management.V2.Compute.IVirtualMachinePublisher Microsoft.Azure.Management.V2.Compute.IVirtualMachineSku.Publisher () { + return this.Publisher() as Microsoft.Azure.Management.V2.Compute.IVirtualMachinePublisher; + } + + /// the region where this virtual machine image offer SKU is available + Microsoft.Azure.Management.V2.Resource.Core.Region? Microsoft.Azure.Management.V2.Compute.IVirtualMachineSku.Region + { + get + { + return this.Region; + } + } + } +} \ No newline at end of file diff --git a/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Domain/InterfaceImpl/VirtualMachineSkusImpl.cs b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Domain/InterfaceImpl/VirtualMachineSkusImpl.cs new file mode 100644 index 000000000..f0450bcd8 --- /dev/null +++ b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Domain/InterfaceImpl/VirtualMachineSkusImpl.cs @@ -0,0 +1,24 @@ +/** +* Copyright (c) Microsoft Corporation. All rights reserved. +* Licensed under the MIT License. See License.txt in the project root for +* license information. +*/ + +namespace Microsoft.Azure.Management.V2.Compute +{ + + using Microsoft.Azure.Management.V2.Resource.Core; + using Microsoft.Azure.Management.Compute.Models; + using Microsoft.Azure.Management.V2.Resource.Core.CollectionActions; + public partial class VirtualMachineSkusImpl + { + /// + /// Lists all the resources of the specified type in the currently selected subscription. + /// + /// list of resources + Microsoft.Azure.Management.V2.Resource.Core.PagedList Microsoft.Azure.Management.V2.Resource.Core.CollectionActions.ISupportsListing.List () { + return this.List() as Microsoft.Azure.Management.V2.Resource.Core.PagedList; + } + + } +} \ No newline at end of file diff --git a/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Domain/InterfaceImpl/VirtualMachinesImpl.cs b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Domain/InterfaceImpl/VirtualMachinesImpl.cs new file mode 100644 index 000000000..1d3f560b2 --- /dev/null +++ b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Domain/InterfaceImpl/VirtualMachinesImpl.cs @@ -0,0 +1,174 @@ +/** +* Copyright (c) Microsoft Corporation. All rights reserved. +* Licensed under the MIT License. See License.txt in the project root for +* license information. +*/ + +namespace Microsoft.Azure.Management.V2.Compute +{ + + using Microsoft.Azure.Management.Compute.Models; + using Microsoft.Azure.Management.Network.Models; + using Microsoft.Azure.Management.V2.Resource.Core.CollectionActions; + using Microsoft.Azure.Management.V2.Resource; + using Microsoft.Azure.Management.V2.Resource.Core; + using Microsoft.Azure.Management.Storage.Models; + using Microsoft.Azure.Management.V2.Compute.VirtualMachine.Definition; + public partial class VirtualMachinesImpl + { + /// + /// Deletes a resource from Azure, identifying it by its resource ID. + /// + /// id the resource ID of the resource to delete + void Microsoft.Azure.Management.V2.Resource.Core.CollectionActions.ISupportsDeleting.Delete(string id) + { + this.Delete(id); + } + + /// + /// Begins a definition for a new resource. + ///

+ /// This is the beginning of the builder pattern used to create top level resources + /// in Azure. The final method completing the definition and starting the actual resource creation + /// process in Azure is {@link Creatable#create()}. + ///

+ /// Note that the {@link Creatable#create()} method is + /// only available at the stage of the resource definition that has the minimum set of input + /// parameters specified. If you do not see {@link Creatable#create()} among the available methods, it + /// means you have not yet specified all the required input settings. Input settings generally begin + /// with the word "with", for example: .withNewResourceGroup() and return the next stage + /// of the resource definition, as an interface in the "fluent interface" style. + ///

+ /// name the name of the new resource + /// the first stage of the new resource definition + Microsoft.Azure.Management.V2.Compute.VirtualMachine.Definition.IBlank Microsoft.Azure.Management.V2.Resource.Core.CollectionActions.ISupportsCreating.Define(string name) + { + return this.Define(name) as Microsoft.Azure.Management.V2.Compute.VirtualMachine.Definition.IBlank; + } + + /// + /// Lists resources of the specified type in the specified resource group. + /// + /// resourceGroupName the name of the resource group to list the resources from + /// the list of resources + Microsoft.Azure.Management.V2.Resource.Core.PagedList Microsoft.Azure.Management.V2.Resource.Core.CollectionActions.ISupportsListingByGroup.ListByGroup(string resourceGroupName) + { + return this.ListByGroup(resourceGroupName) as Microsoft.Azure.Management.V2.Resource.Core.PagedList; + } + + /// + /// Gets the information about a resource from Azure based on the resource name and the name of its resource group. + /// + /// resourceGroupName the name of the resource group the resource is in + /// name the name of the resource. (Note, this is not the ID) + /// an immutable representation of the resource + Microsoft.Azure.Management.V2.Compute.IVirtualMachine Microsoft.Azure.Management.V2.Resource.Core.CollectionActions.ISupportsGettingByGroup.GetByGroup(string resourceGroupName, string name) + { + return this.GetByGroup(resourceGroupName, name) as Microsoft.Azure.Management.V2.Compute.IVirtualMachine; + } + + /// + /// Deletes a resource from Azure, identifying it by its name and its resource group. + /// + /// groupName The group the resource is part of + /// name The name of the resource + void Microsoft.Azure.Management.V2.Resource.Core.CollectionActions.ISupportsDeletingByGroup.Delete(string groupName, string name) + { + this.Delete(groupName, name); + } + + /// + /// Lists all the resources of the specified type in the currently selected subscription. + /// + /// list of resources + Microsoft.Azure.Management.V2.Resource.Core.PagedList Microsoft.Azure.Management.V2.Resource.Core.CollectionActions.ISupportsListing.List() + { + return this.List() as Microsoft.Azure.Management.V2.Resource.Core.PagedList; + } + + /// + /// Start a virtual machine. + /// + /// groupName the resource group name + /// name the virtual machine name + void Microsoft.Azure.Management.V2.Compute.IVirtualMachines.Start(string groupName, string name) + { + this.Start(groupName, name); + } + + /// + /// Power off (stop) a virtual machine. + ///

+ /// You will be billed for the compute resources that this Virtual Machine uses + ///

+ /// groupName the resource group name + /// name the virtual machine name + void Microsoft.Azure.Management.V2.Compute.IVirtualMachines.PowerOff(string groupName, string name) + { + this.PowerOff(groupName, name); + } + + /// + /// Generalize the Virtual Machine. + /// + /// groupName the resource group name + /// name the virtual machine name + void Microsoft.Azure.Management.V2.Compute.IVirtualMachines.Generalize(string groupName, string name) + { + this.Generalize(groupName, name); + } + + /// + /// Redeploy a virtual machine. + /// + /// groupName the resource group name + /// name the virtual machine name + void Microsoft.Azure.Management.V2.Compute.IVirtualMachines.Redeploy(string groupName, string name) + { + this.Redeploy(groupName, name); + } + + /// + /// Captures the virtual machine by copying virtual hard disks of the VM and returns template as json + /// string that can be used to create similar VMs. + /// + /// groupName the resource group name + /// name the virtual machine name + /// containerName destination container name to store the captured Vhd + /// overwriteVhd whether to overwrites destination vhd if it exists + /// the template as json string + string Microsoft.Azure.Management.V2.Compute.IVirtualMachines.Capture(string groupName, string name, string containerName, bool overwriteVhd) + { + return this.Capture(groupName, name, containerName, overwriteVhd) as string; + } + + /// + /// Shuts down the Virtual Machine and releases the compute resources. + ///

+ /// You are not billed for the compute resources that this Virtual Machine uses + ///

+ /// groupName the resource group name + /// name the virtual machine name + void Microsoft.Azure.Management.V2.Compute.IVirtualMachines.Deallocate(string groupName, string name) + { + this.Deallocate(groupName, name); + } + + /// + /// Restart a virtual machine. + /// + /// groupName the resource group name + /// name the virtual machine name + void Microsoft.Azure.Management.V2.Compute.IVirtualMachines.Restart(string groupName, string name) + { + this.Restart(groupName, name); + } + + /// entry point to virtual machine sizes + Microsoft.Azure.Management.V2.Compute.IVirtualMachineSizes Microsoft.Azure.Management.V2.Compute.IVirtualMachines.Sizes() + { + return this.Sizes() as Microsoft.Azure.Management.V2.Compute.IVirtualMachineSizes; + } + + } +} \ No newline at end of file diff --git a/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Domain/VirtualMachine/Definition/IDefinition.cs b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Domain/VirtualMachine/Definition/IDefinition.cs new file mode 100644 index 000000000..4ed480e9a --- /dev/null +++ b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Domain/VirtualMachine/Definition/IDefinition.cs @@ -0,0 +1,554 @@ +/** +* Copyright (c) Microsoft Corporation. All rights reserved. +* Licensed under the MIT License. See License.txt in the project root for +* license information. +*/ + +namespace Microsoft.Azure.Management.V2.Compute.VirtualMachine.Definition +{ + + using Microsoft.Azure.Management.V2.Network; + using Microsoft.Azure.Management.V2.Resource.Core.ResourceActions; + using Microsoft.Azure.Management.Compute.Models; + using Microsoft.Azure.Management.V2.Storage; + using Microsoft.Azure.Management.V2.Compute; + using Microsoft.Azure.Management.V2.Resource.Core.Resource.Definition; + using Microsoft.Azure.Management.V2.Resource.Core.GroupableResource.Definition; + using Microsoft.Azure.Management.V2.Compute.VirtualMachineDataDisk.Definition; + /// + /// The stage of the virtual machine definition allowing to associate public IP address with it's primary network interface. + /// + public interface IWithPublicIpAddress + { + /// + /// Create a new public IP address to associate with virtual machine primary network interface, based on the + /// provided definition. + /// + /// creatable a creatable definition for a new public IP + /// the next stage of the virtual machine definition + IWithOS WithNewPrimaryPublicIpAddress (ICreatable creatable); + + /// + /// Creates a new public IP address in the same region and group as the resource, with the specified DNS label + /// and associate it with the virtual machine's primary network interface. + ///

+ /// the internal name for the public IP address will be derived from the DNS label. + ///

+ /// leafDnsLabel the leaf domain label + /// the next stage of the virtual machine definition + IWithOS WithNewPrimaryPublicIpAddress (string leafDnsLabel); + + /// + /// Associates an existing public IP address with the virtual machine's primary network interface. + /// + /// publicIpAddress an existing public IP address + /// the next stage of the virtual machine definition + IWithOS WithExistingPrimaryPublicIpAddress (IPublicIpAddress publicIpAddress); + + /// + /// Specifies that no public IP needs to be associated with virtual machine. + /// + /// the next stage of the virtual machine definition + IWithOS WithoutPrimaryPublicIpAddress (); + + } + /// + /// The entirety of the virtual machine definition. + /// + public interface IDefinition : + IBlank, + Microsoft.Azure.Management.V2.Compute.VirtualMachine.Definition.IWithGroup, + IWithNetwork, + IWithSubnet, + IWithPrivateIp, + IWithPublicIpAddress, + IWithPrimaryNetworkInterface, + IWithOS, + IWithRootUserName, + IWithAdminUserName, + IWithLinuxCreate, + IWithWindowsCreate, + IWithCreate + { + } + /// + /// The stage of the virtual machine definition allowing to specify the Operation System image. + /// + public interface IWithOS + { + /// + /// Specifies the known marketplace Windows image used for the virtual machine's OS. + /// + /// knownImage enum value indicating known market-place image + /// the next stage of the virtual machine definition + IWithAdminUserName WithPopularWindowsImage (KnownWindowsVirtualMachineImage knownImage); + + /// + /// Specifies that the latest version of a marketplace Windows image needs to be used. + /// + /// publisher specifies the publisher of the image + /// offer specifies the offer of the image + /// sku specifies the SKU of the image + /// the next stage of the virtual machine definition + IWithAdminUserName WithLatestWindowsImage (string publisher, string offer, string sku); + + /// + /// Specifies the version of a marketplace Windows image needs to be used. + /// + /// imageReference describes publisher, offer, sku and version of the market-place image + /// the next stage of the virtual machine definition + IWithAdminUserName WithSpecificWindowsImageVersion (ImageReference imageReference); + + /// + /// Specifies the user (generalized) Windows image used for the virtual machine's OS. + /// + /// imageUrl the url the the VHD + /// the next stage of the virtual machine definition + IWithAdminUserName WithStoredWindowsImage (string imageUrl); + + /// + /// Specifies the known marketplace Linux image used for the virtual machine's OS. + /// + /// knownImage enum value indicating known market-place image + /// the next stage of the virtual machine definition + IWithRootUserName WithPopularLinuxImage (KnownLinuxVirtualMachineImage knownImage); + + /// + /// Specifies that the latest version of a marketplace Linux image needs to be used. + /// + /// publisher specifies the publisher of the image + /// offer specifies the offer of the image + /// sku specifies the SKU of the image + /// the next stage of the virtual machine definition + IWithRootUserName WithLatestLinuxImage (string publisher, string offer, string sku); + + /// + /// Specifies the version of a market-place Linux image needs to be used. + /// + /// imageReference describes publisher, offer, sku and version of the market-place image + /// the next stage of the virtual machine definition + IWithRootUserName WithSpecificLinuxImageVersion (ImageReference imageReference); + + /// + /// Specifies the user (generalized) Linux image used for the virtual machine's OS. + /// + /// imageUrl the url the the VHD + /// the next stage of the virtual machine definition + IWithRootUserName WithStoredLinuxImage (string imageUrl); + + /// + /// Specifies the specialized operating system disk to be attached to the virtual machine. + /// + /// osDiskUrl osDiskUrl the url to the OS disk in the Azure Storage account + /// osType the OS type + /// the next stage of the Windows virtual machine definition + IWithCreate WithOsDisk (string osDiskUrl, OperatingSystemTypes osType); + + } + /// + /// The stage of the virtual machine definition allowing to specify the primary network interface. + /// + public interface IWithPrimaryNetworkInterface + { + /// + /// Create a new network interface to associate the virtual machine with as it's primary network interface, + /// based on the provided definition. + /// + /// creatable a creatable definition for a new network interface + /// The next stage of the virtual machine definition + IWithOS WithNewPrimaryNetworkInterface (ICreatable creatable); + + /// + /// Associate an existing network interface as the virtual machine with as it's primary network interface. + /// + /// networkInterface an existing network interface + /// The next stage of the virtual machine definition + IWithOS WithExistingPrimaryNetworkInterface (INetworkInterface networkInterface); + + } + /// + /// The stage of the virtual machine definition allowing to specify virtual network for the new primary network + /// interface or to use a creatable or existing network interface. + /// + public interface IWithNetwork : + IWithPrimaryNetworkInterface + { + /// + /// Create a new virtual network to associate with the virtual machine's primary network interface, based on + /// the provided definition. + /// + /// creatable a creatable definition for a new virtual network + /// the next stage of the virtual machine definition + IWithPrivateIp WithNewPrimaryNetwork (ICreatable creatable); + + /// + /// Creates a new virtual network to associate with the virtual machine's primary network interface. + ///

+ /// the virtual network will be created in the same resource group and region as of virtual machine, it will be + /// created with the specified address space and a default subnet covering the entirety of the network IP address space. + ///

+ /// addressSpace the address space for the virtual network + /// the next stage of the virtual machine definition + IWithPrivateIp WithNewPrimaryNetwork (string addressSpace); + + /// + /// Associate an existing virtual network with the the virtual machine's primary network interface. + /// + /// network an existing virtual network + /// the next stage of the virtual machine definition + IWithSubnet WithExistingPrimaryNetwork (INetwork network); + + } + /// + /// The stage of the Linux virtual machine definition which contains all the minimum required inputs for + /// the resource to be created (via {@link WithCreate#create()}), but also allows + /// for any other optional settings to be specified. + /// + public interface IWithLinuxCreate : + IWithCreate + { + /// + /// Specifies the SSH public key. + ///

+ /// Each call to this method adds the given public key to the list of VM's public keys. + ///

+ /// publicKey the SSH public key in PEM format. + /// the stage representing creatable Linux VM definition + IWithLinuxCreate WithSsh (string publicKey); + + } + /// + /// The stage of the virtual machine definition allowing to specify virtual network subnet for the new primary network interface. + /// + public interface IWithSubnet + { + /// + /// Associate a subnet with the virtual machine primary network interface. + /// + /// name the subnet name + /// the next stage of the virtual machine definition + IWithPrivateIp WithSubnet (string name); + + } + /// + /// The stage of virtual machine definition allowing to specify additional network interfaces. + /// + public interface IWithSecondaryNetworkInterface + { + /// + /// Create a new network interface to associate with the virtual machine, based on the + /// provided definition. + ///

+ /// Note this method's effect is additive, i.e. each time it is used, the new secondary + /// network interface added to the virtual machine. + ///

+ /// creatable a creatable definition for a new network interface + /// the stage representing creatable VM definition + IWithCreate WithNewSecondaryNetworkInterface (ICreatable creatable); + + /// + /// Associate an existing network interface with the virtual machine. + /// Note this method's effect is additive, i.e. each time it is used, the new secondary + /// network interface added to the virtual machine. + /// + /// networkInterface an existing network interface + /// the stage representing creatable VM definition + IWithCreate WithExistingSecondaryNetworkInterface (INetworkInterface networkInterface); + + } + /// + /// The stage of the Linux virtual machine definition allowing to specify root user name. + /// + public interface IWithRootUserName + { + /// + /// Specifies the root user name for the Linux virtual machine. + /// + /// rootUserName the Linux root user name. This must follow the required naming convention for Linux user name + /// the next stage of the Linux virtual machine definition + IWithLinuxCreate WithRootUserName (string rootUserName); + + } + /// + /// The stage of the virtual machine definition allowing to specify VM size. + /// + public interface IWithVMSize + { + /// + /// Specifies the virtual machine size. + /// + /// sizeName the name of the size for the virtual machine as text + /// the stage representing creatable VM definition + IWithCreate WithSize (string sizeName); + } + + /// + /// The stage of the Windows virtual machine definition which contains all the minimum required inputs for + /// the resource to be created (via {@link WithCreate#create()}, but also allows + /// for any other optional settings to be specified. + /// + public interface IWithWindowsCreate : + IWithCreate + { + /// + /// Specifies that VM Agent should not be provisioned. + /// + /// the stage representing creatable Windows VM definition + IWithWindowsCreate DisableVmAgent(); + + /// + /// Specifies that automatic updates should be disabled. + /// + /// the stage representing creatable Windows VM definition + IWithWindowsCreate DisableAutoUpdate(); + + /// + /// Specifies the time-zone. + /// + /// timeZone the timezone + /// the stage representing creatable Windows VM definition + IWithWindowsCreate WithTimeZone (string timeZone); + + /// + /// Specifies the WINRM listener. + ///

+ /// Each call to this method adds the given listener to the list of VM's WinRM listeners. + ///

+ /// listener the WinRmListener + /// the stage representing creatable Windows VM definition + IWithWindowsCreate WithWinRm (WinRMListener listener); + + } + /// + /// The stage of the virtual machine definition allowing to specify OS disk configurations. + /// + public interface IWithOsDiskSettings + { + /// + /// Specifies the caching type for the Operating System disk. + /// + /// cachingType the caching type. + /// the stage representing creatable VM definition + IWithCreate WithOsDiskCaching (CachingTypes cachingType); + + /// + /// Specifies the name of the OS Disk Vhd file and it's parent container. + /// + /// containerName the name of the container in the selected storage account. + /// vhdName the name for the OS Disk vhd. + /// the stage representing creatable VM definition + IWithCreate WithOsDiskVhdLocation (string containerName, string vhdName); + + /// + /// Specifies the encryption settings for the OS Disk. + /// + /// settings the encryption settings. + /// the stage representing creatable VM definition + IWithCreate WithOsDiskEncryptionSettings (DiskEncryptionSettings settings); + + /// + /// Specifies the size of the OSDisk in GB. + /// + /// size the VHD size. + /// the stage representing creatable VM definition + IWithCreate WithOsDiskSizeInGb (int? size); + + /// + /// Specifies the name for the OS Disk. + /// + /// name the OS Disk name. + /// the stage representing creatable VM definition + IWithCreate WithOsDiskName (string name); + + } + /// + /// The stage of the Windows virtual machine definition allowing to specify administrator user name. + /// + public interface IWithAdminUserName + { + /// + /// Specifies the administrator user name for the Windows virtual machine. + /// + /// adminUserName the Windows administrator user name. This must follow the required naming convention for Windows user name. + /// the stage representing creatable Linux VM definition + IWithWindowsCreate WithAdminUserName (string adminUserName); + + } + /// + /// The stage of the virtual machine definition allowing to specify storage account. + /// + public interface IWithStorageAccount + { + /// + /// Specifies the name of a new storage account to put the VM's OS and data disk VHD in. + ///

+ /// Only the OS disk based on marketplace image will be stored in the new storage account, + /// an OS disk based on user image will be stored in the same storage account as user image. + ///

+ /// name the name of the storage account + /// the stage representing creatable VM definition + IWithCreate WithNewStorageAccount (string name); + + /// + /// Specifies definition of a not-yet-created storage account definition + /// to put the VM's OS and data disk VHDs in. + ///

+ /// Only the OS disk based on marketplace image will be stored in the new storage account. + /// An OS disk based on user image will be stored in the same storage account as user image. + ///

+ /// creatable the storage account in creatable stage + /// the stage representing creatable VM definition + IWithCreate WithNewStorageAccount (ICreatable creatable); + + /// + /// Specifies an existing {@link StorageAccount} storage account to put the VM's OS and data disk VHD in. + ///

+ /// An OS disk based on marketplace or user image (generalized image) will be stored in this + /// storage account. + ///

+ /// storageAccount an existing storage account + /// the stage representing creatable VM definition + IWithCreate WithExistingStorageAccount (IStorageAccount storageAccount); + + } + /// + /// The stage of the definition which contains all the minimum required inputs for + /// the resource to be created (via {@link WithCreate#create()}), but also allows + /// for any other optional settings to be specified. + /// + public interface IWithCreate : + ICreatable, + IDefinitionWithTags, + IWithPassword, + IWithOsDiskSettings, + IWithVMSize, + IWithStorageAccount, + IWithDataDisk, + IWithAvailabilitySet, + IWithSecondaryNetworkInterface + { + } + /// + /// The stage of the virtual machine definition allowing to specify the resource group. + /// + public interface IWithGroup : + Microsoft.Azure.Management.V2.Resource.Core.GroupableResource.Definition.IWithGroup + { + } + /// + /// The stage of the virtual machine definition allowing to specify data disk configuration. + /// + public interface IWithDataDisk + { + /// + /// Specifies that a new blank data disk needs to be attached to virtual machine. + /// + /// sizeInGB the disk size in GB + /// the stage representing creatable VM definition + IWithCreate WithNewDataDisk (int? sizeInGB); + + /// + /// Specifies an existing VHD that needs to be attached to the virtual machine as data disk. + /// + /// storageAccountName the storage account name + /// containerName the name of the container holding the VHD file + /// vhdName the name for the VHD file + /// the stage representing creatable VM definition + IWithCreate WithExistingDataDisk (string storageAccountName, string containerName, string vhdName); + + /// + /// Specifies a new blank data disk to be attached to the virtual machine along with it's configuration. + /// + /// name the name for the data disk + /// the stage representing configuration for the data disk + IAttachNewDataDisk DefineNewDataDisk (string name); + + /// + /// Specifies an existing VHD that needs to be attached to the virtual machine as data disk along with + /// it's configuration. + /// + /// name the name for the data disk + /// the stage representing configuration for the data disk + IAttachExistingDataDisk DefineExistingDataDisk (string name); + + } + /// + /// The stage of the virtual machine definition allowing to specify availability set. + /// + public interface IWithAvailabilitySet + { + /// + /// Specifies the name of a new availability set to associate the virtual machine with. + ///

+ /// Adding virtual machines running your application to an availability set ensures that during + /// maintenance event at least one virtual machine will be available. + ///

+ /// name the name of the availability set + /// the stage representing creatable VM definition + IWithCreate WithNewAvailabilitySet (string name); + + /// + /// Specifies definition of a not-yet-created availability set definition + /// to associate the virtual machine with. + ///

+ /// Adding virtual machines running your application to an availability set ensures that during + /// maintenance event at least one virtual machine will be available. + ///

+ /// creatable the availability set in creatable stage + /// the stage representing creatable VM definition + IWithCreate WithNewAvailabilitySet (ICreatable creatable); + + /// + /// Specifies an existing {@link AvailabilitySet} availability set to to associate the virtual machine with. + ///

+ /// Adding virtual machines running your application to an availability set ensures that during + /// maintenance event at least one virtual machine will be available. + ///

+ /// availabilitySet an existing availability set + /// the stage representing creatable VM definition + IWithCreate WithExistingAvailabilitySet (IAvailabilitySet availabilitySet); + + } + /// + /// The stage of the virtual machine definition allowing to specify private IP address within a virtual network subnet. + /// + public interface IWithPrivateIp + { + /// + /// Enables dynamic private IP address allocation within the specified existing virtual network subnet for + /// virtual machine's primary network interface. + /// + /// the next stage of the virtual machine definition + IWithPublicIpAddress WithPrimaryPrivateIpAddressDynamic (); + + /// + /// Assigns the specified static private IP address within the specified existing virtual network subnet to the + /// virtual machine's primary network interface. + /// + /// staticPrivateIpAddress the static IP address within the specified subnet to assign to + /// the network interface + /// the next stage of the virtual machine definition + IWithPublicIpAddress WithPrimaryPrivateIpAddressStatic (string staticPrivateIpAddress); + + } + /// + /// The stage of the virtual machine definition allowing to specify password. + /// + public interface IWithPassword + { + /// + /// Specifies the password for the virtual machine. + /// + /// password the password. This must follow the criteria for Azure VM password. + /// the stage representing creatable VM definition + IWithCreate WithPassword (string password); + + } + /// + /// The first stage of a virtual machine definition. + /// + public interface IBlank : + IDefinitionWithRegion + { + } +} \ No newline at end of file diff --git a/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Domain/VirtualMachine/Update/IUpdate.cs b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Domain/VirtualMachine/Update/IUpdate.cs new file mode 100644 index 000000000..7e46a59d8 --- /dev/null +++ b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Domain/VirtualMachine/Update/IUpdate.cs @@ -0,0 +1,140 @@ +/** +* Copyright (c) Microsoft Corporation. All rights reserved. +* Licensed under the MIT License. See License.txt in the project root for +* license information. +*/ + +namespace Microsoft.Azure.Management.V2.Compute.VirtualMachine.Update +{ + + using Microsoft.Azure.Management.V2.Resource.Core.ResourceActions; + using Microsoft.Azure.Management.V2.Network; + using Microsoft.Azure.Management.Compute.Models; + using Microsoft.Azure.Management.V2.Resource.Core.Resource.Update; + using Microsoft.Azure.Management.V2.Compute; + using Microsoft.Azure.Management.V2.Compute.VirtualMachineDataDisk.Update; + /// + /// The stage of virtual machine definition allowing to specify additional network interfaces. + /// + public interface IWithSecondaryNetworkInterface + { + /// + /// Create a new network interface to associate with the virtual machine, based on the + /// provided definition. + ///

+ /// Note this method's effect is additive, i.e. each time it is used, the new secondary + /// network interface added to the virtual machine. + ///

+ /// creatable a creatable definition for a new network interface + /// the stage representing creatable VM definition + Microsoft.Azure.Management.V2.Compute.VirtualMachine.Update.IUpdate WithNewSecondaryNetworkInterface (ICreatable creatable); + + /// + /// Associate an existing network interface with the virtual machine. + /// Note this method's effect is additive, i.e. each time it is used, the new secondary + /// network interface added to the virtual machine. + /// + /// networkInterface an existing network interface + /// the stage representing creatable VM definition + Microsoft.Azure.Management.V2.Compute.VirtualMachine.Update.IUpdate WithExistingSecondaryNetworkInterface (INetworkInterface networkInterface); + + /// + /// Removes a network interface associated with virtual machine. + /// + /// name the name of the secondary network interface to remove + /// the stage representing updatable VM definition + Microsoft.Azure.Management.V2.Compute.VirtualMachine.Update.IUpdate WithoutSecondaryNetworkInterface (string name); + + } + /// + /// The template for an update operation, containing all the settings that + /// can be modified. + ///

+ /// Call {@link Update#apply()} to apply the changes to the resource in Azure. + ///

+ public interface IUpdate : + IAppliable, + IUpdateWithTags, + IWithDataDisk, + IWithSecondaryNetworkInterface + { + /// + /// Specifies the caching type for the Operating System disk. + /// + /// cachingType the caching type. + /// the stage representing updatable VM definition + Microsoft.Azure.Management.V2.Compute.VirtualMachine.Update.IUpdate WithOsDiskCaching (CachingTypes cachingType); + + /// + /// Specifies the size of the OSDisk in GB. + /// + /// size the VHD size. + /// the stage representing updatable VM definition + Microsoft.Azure.Management.V2.Compute.VirtualMachine.Update.IUpdate WithOsDiskSizeInGb (int? size); + + /// + /// Specifies the new size for the virtual machine. + /// + /// sizeName the name of the size for the virtual machine as text + /// the stage representing updatable VM definition + Microsoft.Azure.Management.V2.Compute.VirtualMachine.Update.IUpdate WithSize (string sizeName); + } + /// + /// The stage of the virtual machine definition allowing to specify data disk configuration. + /// + public interface IWithDataDisk + { + /// + /// Specifies that a new blank data disk needs to be attached to virtual machine. + /// + /// sizeInGB the disk size in GB + /// the stage representing creatable VM definition + Microsoft.Azure.Management.V2.Compute.VirtualMachine.Update.IUpdate WithNewDataDisk (int? sizeInGB); + + /// + /// Specifies an existing VHD that needs to be attached to the virtual machine as data disk. + /// + /// storageAccountName the storage account name + /// containerName the name of the container holding the VHD file + /// vhdName the name for the VHD file + /// the stage representing creatable VM definition + Microsoft.Azure.Management.V2.Compute.VirtualMachine.Update.IUpdate WithExistingDataDisk (string storageAccountName, string containerName, string vhdName); + + /// + /// Specifies a new blank data disk to be attached to the virtual machine along with it's configuration. + /// + /// name the name for the data disk + /// the stage representing configuration for the data disk + IAttachNewDataDisk DefineNewDataDisk (string name); + + /// + /// Specifies an existing VHD that needs to be attached to the virtual machine as data disk along with + /// it's configuration. + /// + /// name the name for the data disk + /// the stage representing configuration for the data disk + IAttachExistingDataDisk DefineExistingDataDisk (string name); + + /// + /// Begins the description of an update of an existing data disk of this virtual machine. + /// + /// name the name of the disk + /// the stage representing updating configuration for data disk + Microsoft.Azure.Management.V2.Compute.VirtualMachineDataDisk.Update.IUpdate UpdateDataDisk (string name); + + /// + /// Detaches a data disk with the given name from the virtual machine. + /// + /// name the name of the data disk to remove + /// the stage representing updatable VM definition + Microsoft.Azure.Management.V2.Compute.VirtualMachine.Update.IUpdate WithoutDataDisk (string name); + + /// + /// Detaches a data disk with the given logical unit number from the virtual machine. + /// + /// lun the logical unit number of the data disk to remove + /// the stage representing updatable VM definition + Microsoft.Azure.Management.V2.Compute.VirtualMachine.Update.IUpdate WithoutDataDisk (int lun); + + } +} \ No newline at end of file diff --git a/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Domain/VirtualMachineDataDisk/Definition/IDefinition.cs b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Domain/VirtualMachineDataDisk/Definition/IDefinition.cs new file mode 100644 index 000000000..dfdc980dc --- /dev/null +++ b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Domain/VirtualMachineDataDisk/Definition/IDefinition.cs @@ -0,0 +1,115 @@ +/** +* Copyright (c) Microsoft Corporation. All rights reserved. +* Licensed under the MIT License. See License.txt in the project root for +* license information. +*/ + +namespace Microsoft.Azure.Management.V2.Compute.VirtualMachineDataDisk.Definition +{ + + using Microsoft.Azure.Management.Compute.Models; + using Microsoft.Azure.Management.V2.Resource.Core.ChildResource.Update; + /// + /// The first stage of a data disk definition. + /// @param the return type of the final {@link WithAttach#attach()} + /// + public interface IBlank : + IWithDataDisk + { + } + /// + /// The entirety of a data disk definition. + /// @param the return type of the final {@link Attachable#attach()} + /// + public interface IDefinition : + IBlank, + IWithAttach, + IWithStoreAt + { + } + /// + /// The first stage of attaching an existing disk as data disk and configuring it. + /// + /// @param the return type of the final {@link WithAttach#attach()} + /// + public interface IAttachExistingDataDisk + { + /// + /// Specifies an existing VHD that needs to be attached to the virtual machine as data disk. + /// + /// storageAccountName the storage account name + /// containerName the name of the container holding the VHD file + /// vhdName the name for the VHD file + /// the stage representing optional additional settings for the attachable data disk + IWithAttach From (string storageAccountName, string containerName, string vhdName); + + } + /// + /// The first stage of new data disk configuration. + /// + /// @param the return type of the final {@link WithAttach#attach()} + /// + public interface IAttachNewDataDisk + { + /// + /// Specifies the initial disk size in GB for new blank data disk. + /// + /// sizeInGB the disk size in GB + /// the stage representing optional additional settings for the attachable data disk + IWithStoreAt WithSizeInGB (int? sizeInGB); + + } + /// + /// The stage of the new data disk configuration allowing to specify location to store the VHD. + /// + /// @param the return type of the final {@link WithAttach#attach()} + /// + public interface IWithStoreAt : + IWithAttach + { + /// + /// Specifies where the VHD associated with the new blank data disk needs to be stored. + /// + /// storageAccountName the storage account name + /// containerName the name of the container to hold the new VHD file + /// vhdName the name for the new VHD file + /// the stage representing optional additional configurations for the data disk + IWithAttach StoreAt (string storageAccountName, string containerName, string vhdName); + + } + /// + /// The final stage of the data disk definition. + ///

+ /// At this stage, any remaining optional settings can be specified, or the data disk definition + /// can be attached to the parent virtual machine definition using {@link WithAttach#attach()}. + /// @param the return type of {@link WithAttach#attach()} + ///

+ public interface IWithAttach : + IInUpdate + { + /// + /// Specifies the logical unit number for the data disk. + /// + /// lun the logical unit number + /// the next stage of data disk definition + IWithAttach WithLun (int? lun); + + /// + /// Specifies the caching type for the data disk. + /// + /// cachingType the disk caching type. Possible values include: 'None', 'ReadOnly', 'ReadWrite' + /// the next stage of data disk definition + IWithAttach WithCaching (CachingTypes cachingType); + + } + /// + /// The stage allowing to choose configuring new or existing data disk. + /// + /// @param the return type of the final {@link WithAttach#attach()} + /// + public interface IWithDataDisk : + IAttachNewDataDisk, + IAttachExistingDataDisk + { + } +} \ No newline at end of file diff --git a/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Domain/VirtualMachineDataDisk/Update/IUpdate.cs b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Domain/VirtualMachineDataDisk/Update/IUpdate.cs new file mode 100644 index 000000000..0d48767ac --- /dev/null +++ b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Domain/VirtualMachineDataDisk/Update/IUpdate.cs @@ -0,0 +1,48 @@ +/** +* Copyright (c) Microsoft Corporation. All rights reserved. +* Licensed under the MIT License. See License.txt in the project root for +* license information. +*/ + +namespace Microsoft.Azure.Management.V2.Compute.VirtualMachineDataDisk.Update +{ + + using Microsoft.Azure.Management.V2.Resource.Core.ChildResourceActions; + using Microsoft.Azure.Management.V2.Compute.VirtualMachine.Update; + using Microsoft.Azure.Management.Compute.Models; + /// + /// The entirety of a data disk update as part of a virtual machine update. + /// + public interface IUpdate : + IUpdateStages, + ISettable + { + } + /// + /// Grouping of data disk update stages. + /// + public interface IUpdateStages + { + /// + /// Specifies the new size in GB for data disk. + /// + /// sizeInGB the disk size in GB + /// the next stage of data disk update + Microsoft.Azure.Management.V2.Compute.VirtualMachineDataDisk.Update.IUpdate WithSizeInGB (int? sizeInGB); + + /// + /// Specifies the new logical unit number for the data disk. + /// + /// lun the logical unit number + /// the next stage of data disk update + Microsoft.Azure.Management.V2.Compute.VirtualMachineDataDisk.Update.IUpdate WithLun (int? lun); + + /// + /// Specifies the new caching type for the data disk. + /// + /// cachingType the disk caching type. Possible values include: 'None', 'ReadOnly', 'ReadWrite' + /// the next stage of data disk update + Microsoft.Azure.Management.V2.Compute.VirtualMachineDataDisk.Update.IUpdate WithCaching (CachingTypes cachingType); + + } +} \ No newline at end of file diff --git a/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Domain/VirtualMachineDataDisk/Update/IUpdateDefinition.cs b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Domain/VirtualMachineDataDisk/Update/IUpdateDefinition.cs new file mode 100644 index 000000000..883f0f17b --- /dev/null +++ b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Domain/VirtualMachineDataDisk/Update/IUpdateDefinition.cs @@ -0,0 +1,115 @@ +/** +* Copyright (c) Microsoft Corporation. All rights reserved. +* Licensed under the MIT License. See License.txt in the project root for +* license information. +*/ + +namespace Microsoft.Azure.Management.V2.Compute.VirtualMachineDataDisk.Update +{ + + using Microsoft.Azure.Management.V2.Resource.Core.ChildResource.Definition; + using Microsoft.Azure.Management.Compute.Models; + /// + /// The first stage of a data disk definition. + /// @param the return type of the final {@link WithAttach#attach()} + /// + public interface IBlank : + IWithDataDisk + { + } + /// + /// The stage allowing to choose configuring new or existing data disk. + /// + /// @param the return type of the final {@link WithAttach#attach()} + /// + public interface IWithDataDisk : + IAttachNewDataDisk, + IAttachExistingDataDisk + { + } + /// + /// The final stage of the data disk definition. + ///

+ /// At this stage, any remaining optional settings can be specified, or the data disk definition + /// can be attached to the parent virtual machine definition using {@link WithAttach#attach()}. + /// @param the return type of {@link WithAttach#attach()} + ///

+ public interface IWithAttach : + IInDefinition + { + /// + /// Specifies the logical unit number for the data disk. + /// + /// lun the logical unit number + /// the next stage of data disk definition + IWithAttach WithLun (int? lun); + + /// + /// Specifies the caching type for the data disk. + /// + /// cachingType the disk caching type. Possible values include: 'None', 'ReadOnly', 'ReadWrite' + /// the next stage of data disk definition + IWithAttach WithCaching (CachingTypes cachingType); + + } + /// + /// The entirety of a data disk definition as part of a virtual machine update. + /// @param the return type of the final {@link UpdateDefinitionStages.WithAttach#attach()} + /// + public interface IUpdateDefinition : + IBlank, + IWithAttach, + IWithStoreAt + { + } + /// + /// The first stage of attaching an existing disk as data disk and configuring it. + /// + /// @param the return type of the final {@link WithAttach#attach()} + /// + public interface IAttachExistingDataDisk + { + /// + /// Specifies an existing VHD that needs to be attached to the virtual machine as data disk. + /// + /// storageAccountName the storage account name + /// containerName the name of the container holding the VHD file + /// vhdName the name for the VHD file + /// the stage representing optional additional settings for the attachable data disk + IWithAttach From (string storageAccountName, string containerName, string vhdName); + + } + /// + /// The first stage of new data disk configuration. + /// + /// @param the return type of the final {@link WithAttach#attach()} + /// + public interface IAttachNewDataDisk + { + /// + /// Specifies the initial disk size in GB for new blank data disk. + /// + /// sizeInGB the disk size in GB + /// the stage representing optional additional settings for the attachable data disk + IWithStoreAt WithSizeInGB (int? sizeInGB); + + } + /// + /// The stage of the new data disk configuration allowing to specify location to store the VHD. + /// + /// @param the return type of the final {@link WithAttach#attach()} + /// + public interface IWithStoreAt : + IWithAttach + { + /// + /// Specifies where the VHD associated with the new blank data disk needs to be stored. + /// + /// storageAccountName the storage account name + /// containerName the name of the container to hold the new VHD file + /// vhdName the name for the new VHD file + /// the stage representing optional additional configurations for the data disk + IWithAttach StoreAt (string storageAccountName, string containerName, string vhdName); + + } +} \ No newline at end of file diff --git a/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/AvailabilitySetsOperations.cs b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/AvailabilitySetsOperations.cs new file mode 100644 index 000000000..380c28d20 --- /dev/null +++ b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/AvailabilitySetsOperations.cs @@ -0,0 +1,977 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.Compute +{ + using System.Linq; + using Microsoft.Rest; + using Microsoft.Rest.Azure; + using Models; + + /// + /// AvailabilitySetsOperations operations. + /// + internal partial class AvailabilitySetsOperations : Microsoft.Rest.IServiceOperations, IAvailabilitySetsOperations + { + /// + /// Initializes a new instance of the AvailabilitySetsOperations class. + /// + /// + /// Reference to the service client. + /// + /// + /// Thrown when a required parameter is null + /// + internal AvailabilitySetsOperations(ComputeManagementClient client) + { + if (client == null) + { + throw new System.ArgumentNullException("client"); + } + this.Client = client; + } + + /// + /// Gets a reference to the ComputeManagementClient + /// + public ComputeManagementClient Client { get; private set; } + + /// + /// The operation to create or update the availability set. + /// + /// + /// The name of the resource group. + /// + /// + /// Parameters supplied to the Create Availability Set operation. + /// + /// + /// Parameters supplied to the Create Availability Set 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 + /// + /// + /// A response object containing the response body and response headers. + /// + public async System.Threading.Tasks.Task> CreateOrUpdateWithHttpMessagesAsync(string resourceGroupName, string name, AvailabilitySetInner parameters, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + if (resourceGroupName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "resourceGroupName"); + } + if (name == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "name"); + } + if (parameters == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "parameters"); + } + if (this.Client.ApiVersion == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.ApiVersion"); + } + if (this.Client.SubscriptionId == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.SubscriptionId"); + } + // 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("name", name); + tracingParameters.Add("parameters", parameters); + tracingParameters.Add("cancellationToken", cancellationToken); + Microsoft.Rest.ServiceClientTracing.Enter(_invocationId, this, "CreateOrUpdate", 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.Compute/availabilitySets/{name}").ToString(); + _url = _url.Replace("{resourceGroupName}", System.Uri.EscapeDataString(resourceGroupName)); + _url = _url.Replace("{name}", System.Uri.EscapeDataString(name)); + _url = _url.Replace("{subscriptionId}", System.Uri.EscapeDataString(this.Client.SubscriptionId)); + System.Collections.Generic.List _queryParameters = new System.Collections.Generic.List(); + if (this.Client.ApiVersion != null) + { + _queryParameters.Add(string.Format("api-version={0}", System.Uri.EscapeDataString(this.Client.ApiVersion))); + } + if (_queryParameters.Count > 0) + { + _url += "?" + string.Join("&", _queryParameters); + } + // Create HTTP transport objects + System.Net.Http.HttpRequestMessage _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) + { + 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); + CloudError _errorBody = Microsoft.Rest.Serialization.SafeJsonConvert.DeserializeObject(_responseContent, this.Client.DeserializationSettings); + if (_errorBody != null) + { + ex = new Microsoft.Rest.Azure.CloudException(_errorBody.Message); + 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 (_httpResponse.Headers.Contains("x-ms-request-id")) + { + ex.RequestId = _httpResponse.Headers.GetValues("x-ms-request-id").FirstOrDefault(); + } + 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; + } + + /// + /// The operation to delete the availability set. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the availability set. + /// + /// + /// 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 + /// + /// + /// A response object containing the response body and response headers. + /// + public async System.Threading.Tasks.Task DeleteWithHttpMessagesAsync(string resourceGroupName, string availabilitySetName, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + if (resourceGroupName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "resourceGroupName"); + } + if (availabilitySetName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "availabilitySetName"); + } + if (this.Client.ApiVersion == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.ApiVersion"); + } + if (this.Client.SubscriptionId == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.SubscriptionId"); + } + // 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("availabilitySetName", availabilitySetName); + tracingParameters.Add("cancellationToken", cancellationToken); + Microsoft.Rest.ServiceClientTracing.Enter(_invocationId, this, "Delete", 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.Compute/availabilitySets/{availabilitySetName}").ToString(); + _url = _url.Replace("{resourceGroupName}", System.Uri.EscapeDataString(resourceGroupName)); + _url = _url.Replace("{availabilitySetName}", System.Uri.EscapeDataString(availabilitySetName)); + _url = _url.Replace("{subscriptionId}", System.Uri.EscapeDataString(this.Client.SubscriptionId)); + System.Collections.Generic.List _queryParameters = new System.Collections.Generic.List(); + if (this.Client.ApiVersion != null) + { + _queryParameters.Add(string.Format("api-version={0}", System.Uri.EscapeDataString(this.Client.ApiVersion))); + } + if (_queryParameters.Count > 0) + { + _url += "?" + string.Join("&", _queryParameters); + } + // Create HTTP transport objects + System.Net.Http.HttpRequestMessage _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 != 200 && (int)_statusCode != 204) + { + var ex = new Microsoft.Rest.Azure.CloudException(string.Format("Operation returned an invalid status code '{0}'", _statusCode)); + if (_httpResponse.Content != null) { + _responseContent = await _httpResponse.Content.ReadAsStringAsync().ConfigureAwait(false); + } + else { + _responseContent = string.Empty; + } + ex.Request = new Microsoft.Rest.HttpRequestMessageWrapper(_httpRequest, _requestContent); + ex.Response = new Microsoft.Rest.HttpResponseMessageWrapper(_httpResponse, _responseContent); + if (_httpResponse.Headers.Contains("x-ms-request-id")) + { + ex.RequestId = _httpResponse.Headers.GetValues("x-ms-request-id").FirstOrDefault(); + } + 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(); + } + if (_shouldTrace) + { + Microsoft.Rest.ServiceClientTracing.Exit(_invocationId, _result); + } + return _result; + } + + /// + /// The operation to get the availability set. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the availability set. + /// + /// + /// 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 + /// + /// + /// A response object containing the response body and response headers. + /// + public async System.Threading.Tasks.Task> GetWithHttpMessagesAsync(string resourceGroupName, string availabilitySetName, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + if (resourceGroupName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "resourceGroupName"); + } + if (availabilitySetName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "availabilitySetName"); + } + if (this.Client.ApiVersion == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.ApiVersion"); + } + if (this.Client.SubscriptionId == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.SubscriptionId"); + } + // 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("availabilitySetName", availabilitySetName); + 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.Compute/availabilitySets/{availabilitySetName}").ToString(); + _url = _url.Replace("{resourceGroupName}", System.Uri.EscapeDataString(resourceGroupName)); + _url = _url.Replace("{availabilitySetName}", System.Uri.EscapeDataString(availabilitySetName)); + _url = _url.Replace("{subscriptionId}", System.Uri.EscapeDataString(this.Client.SubscriptionId)); + System.Collections.Generic.List _queryParameters = new System.Collections.Generic.List(); + if (this.Client.ApiVersion != null) + { + _queryParameters.Add(string.Format("api-version={0}", System.Uri.EscapeDataString(this.Client.ApiVersion))); + } + if (_queryParameters.Count > 0) + { + _url += "?" + string.Join("&", _queryParameters); + } + // Create HTTP transport objects + System.Net.Http.HttpRequestMessage _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); + CloudError _errorBody = Microsoft.Rest.Serialization.SafeJsonConvert.DeserializeObject(_responseContent, this.Client.DeserializationSettings); + if (_errorBody != null) + { + ex = new Microsoft.Rest.Azure.CloudException(_errorBody.Message); + 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 (_httpResponse.Headers.Contains("x-ms-request-id")) + { + ex.RequestId = _httpResponse.Headers.GetValues("x-ms-request-id").FirstOrDefault(); + } + 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; + } + + /// + /// The operation to list the availability sets. + /// + /// + /// The name of the resource group. + /// + /// + /// 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 + /// + /// + /// A response object containing the response body and response headers. + /// + public async System.Threading.Tasks.Task>> ListWithHttpMessagesAsync(string resourceGroupName, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + if (resourceGroupName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "resourceGroupName"); + } + if (this.Client.ApiVersion == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.ApiVersion"); + } + if (this.Client.SubscriptionId == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.SubscriptionId"); + } + // 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("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.Compute/availabilitySets").ToString(); + _url = _url.Replace("{resourceGroupName}", System.Uri.EscapeDataString(resourceGroupName)); + _url = _url.Replace("{subscriptionId}", System.Uri.EscapeDataString(this.Client.SubscriptionId)); + System.Collections.Generic.List _queryParameters = new System.Collections.Generic.List(); + if (this.Client.ApiVersion != null) + { + _queryParameters.Add(string.Format("api-version={0}", System.Uri.EscapeDataString(this.Client.ApiVersion))); + } + if (_queryParameters.Count > 0) + { + _url += "?" + string.Join("&", _queryParameters); + } + // Create HTTP transport objects + System.Net.Http.HttpRequestMessage _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); + CloudError _errorBody = Microsoft.Rest.Serialization.SafeJsonConvert.DeserializeObject(_responseContent, this.Client.DeserializationSettings); + if (_errorBody != null) + { + ex = new Microsoft.Rest.Azure.CloudException(_errorBody.Message); + 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 (_httpResponse.Headers.Contains("x-ms-request-id")) + { + ex.RequestId = _httpResponse.Headers.GetValues("x-ms-request-id").FirstOrDefault(); + } + 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; + } + + /// + /// Lists all available virtual machine sizes that can be used to create a new + /// virtual machine in an existing availability set. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the availability set. + /// + /// + /// 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 + /// + /// + /// A response object containing the response body and response headers. + /// + public async System.Threading.Tasks.Task>> ListAvailableSizesWithHttpMessagesAsync(string resourceGroupName, string availabilitySetName, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + if (resourceGroupName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "resourceGroupName"); + } + if (availabilitySetName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "availabilitySetName"); + } + if (this.Client.ApiVersion == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.ApiVersion"); + } + if (this.Client.SubscriptionId == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.SubscriptionId"); + } + // 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("availabilitySetName", availabilitySetName); + tracingParameters.Add("cancellationToken", cancellationToken); + Microsoft.Rest.ServiceClientTracing.Enter(_invocationId, this, "ListAvailableSizes", 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.Compute/availabilitySets/{availabilitySetName}/vmSizes").ToString(); + _url = _url.Replace("{resourceGroupName}", System.Uri.EscapeDataString(resourceGroupName)); + _url = _url.Replace("{availabilitySetName}", System.Uri.EscapeDataString(availabilitySetName)); + _url = _url.Replace("{subscriptionId}", System.Uri.EscapeDataString(this.Client.SubscriptionId)); + System.Collections.Generic.List _queryParameters = new System.Collections.Generic.List(); + if (this.Client.ApiVersion != null) + { + _queryParameters.Add(string.Format("api-version={0}", System.Uri.EscapeDataString(this.Client.ApiVersion))); + } + if (_queryParameters.Count > 0) + { + _url += "?" + string.Join("&", _queryParameters); + } + // Create HTTP transport objects + System.Net.Http.HttpRequestMessage _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); + CloudError _errorBody = Microsoft.Rest.Serialization.SafeJsonConvert.DeserializeObject(_responseContent, this.Client.DeserializationSettings); + if (_errorBody != null) + { + ex = new Microsoft.Rest.Azure.CloudException(_errorBody.Message); + 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 (_httpResponse.Headers.Contains("x-ms-request-id")) + { + ex.RequestId = _httpResponse.Headers.GetValues("x-ms-request-id").FirstOrDefault(); + } + 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; + } + + } +} diff --git a/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/AvailabilitySetsOperationsExtensions.cs b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/AvailabilitySetsOperationsExtensions.cs new file mode 100644 index 000000000..7c8f53e89 --- /dev/null +++ b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/AvailabilitySetsOperationsExtensions.cs @@ -0,0 +1,220 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.Compute +{ + using System.Threading.Tasks; + using Microsoft.Rest.Azure; + using Models; + + /// + /// Extension methods for AvailabilitySetsOperations. + /// + public static partial class AvailabilitySetsOperationsExtensions + { + /// + /// The operation to create or update the availability set. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// Parameters supplied to the Create Availability Set operation. + /// + /// + /// Parameters supplied to the Create Availability Set operation. + /// + public static AvailabilitySetInner CreateOrUpdate(this IAvailabilitySetsOperations operations, string resourceGroupName, string name, AvailabilitySetInner parameters) + { + return System.Threading.Tasks.Task.Factory.StartNew(s => ((IAvailabilitySetsOperations)s).CreateOrUpdateAsync(resourceGroupName, name, parameters), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// The operation to create or update the availability set. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// Parameters supplied to the Create Availability Set operation. + /// + /// + /// Parameters supplied to the Create Availability Set operation. + /// + /// + /// The cancellation token. + /// + public static async System.Threading.Tasks.Task CreateOrUpdateAsync(this IAvailabilitySetsOperations operations, string resourceGroupName, string name, AvailabilitySetInner parameters, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + using (var _result = await operations.CreateOrUpdateWithHttpMessagesAsync(resourceGroupName, name, parameters, null, cancellationToken).ConfigureAwait(false)) + { + return _result.Body; + } + } + + /// + /// The operation to delete the availability set. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the availability set. + /// + public static void Delete(this IAvailabilitySetsOperations operations, string resourceGroupName, string availabilitySetName) + { + System.Threading.Tasks.Task.Factory.StartNew(s => ((IAvailabilitySetsOperations)s).DeleteAsync(resourceGroupName, availabilitySetName), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// The operation to delete the availability set. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the availability set. + /// + /// + /// The cancellation token. + /// + public static async System.Threading.Tasks.Task DeleteAsync(this IAvailabilitySetsOperations operations, string resourceGroupName, string availabilitySetName, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + await operations.DeleteWithHttpMessagesAsync(resourceGroupName, availabilitySetName, null, cancellationToken).ConfigureAwait(false); + } + + /// + /// The operation to get the availability set. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the availability set. + /// + public static AvailabilitySetInner Get(this IAvailabilitySetsOperations operations, string resourceGroupName, string availabilitySetName) + { + return System.Threading.Tasks.Task.Factory.StartNew(s => ((IAvailabilitySetsOperations)s).GetAsync(resourceGroupName, availabilitySetName), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// The operation to get the availability set. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the availability set. + /// + /// + /// The cancellation token. + /// + public static async System.Threading.Tasks.Task GetAsync(this IAvailabilitySetsOperations operations, string resourceGroupName, string availabilitySetName, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + using (var _result = await operations.GetWithHttpMessagesAsync(resourceGroupName, availabilitySetName, null, cancellationToken).ConfigureAwait(false)) + { + return _result.Body; + } + } + + /// + /// The operation to list the availability sets. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + public static System.Collections.Generic.IEnumerable List(this IAvailabilitySetsOperations operations, string resourceGroupName) + { + return System.Threading.Tasks.Task.Factory.StartNew(s => ((IAvailabilitySetsOperations)s).ListAsync(resourceGroupName), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// The operation to list the availability sets. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The cancellation token. + /// + public static async Task> ListAsync(this IAvailabilitySetsOperations operations, string resourceGroupName, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + using (var _result = await operations.ListWithHttpMessagesAsync(resourceGroupName, null, cancellationToken).ConfigureAwait(false)) + { + return _result.Body; + } + } + + /// + /// Lists all available virtual machine sizes that can be used to create a new + /// virtual machine in an existing availability set. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the availability set. + /// + public static System.Collections.Generic.IEnumerable ListAvailableSizes(this IAvailabilitySetsOperations operations, string resourceGroupName, string availabilitySetName) + { + return System.Threading.Tasks.Task.Factory.StartNew(s => ((IAvailabilitySetsOperations)s).ListAvailableSizesAsync(resourceGroupName, availabilitySetName), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// Lists all available virtual machine sizes that can be used to create a new + /// virtual machine in an existing availability set. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the availability set. + /// + /// + /// The cancellation token. + /// + public static async Task> ListAvailableSizesAsync(this IAvailabilitySetsOperations operations, string resourceGroupName, string availabilitySetName, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + using (var _result = await operations.ListAvailableSizesWithHttpMessagesAsync(resourceGroupName, availabilitySetName, null, cancellationToken).ConfigureAwait(false)) + { + return _result.Body; + } + } + + } +} diff --git a/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/ComputeManagementClient.cs b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/ComputeManagementClient.cs new file mode 100644 index 000000000..fbef99f30 --- /dev/null +++ b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/ComputeManagementClient.cs @@ -0,0 +1,360 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.Compute +{ + using System.Linq; + using Microsoft.Rest.Azure; + using Models; + + /// + /// The Compute Management Client. + /// + public partial class ComputeManagementClient : Microsoft.Rest.ServiceClient, IComputeManagementClient, IAzureClient + { + /// + /// The base URI of the service. + /// + public System.Uri BaseUri { get; set; } + + /// + /// Gets or sets json serialization settings. + /// + public Newtonsoft.Json.JsonSerializerSettings SerializationSettings { get; private set; } + + /// + /// Gets or sets json deserialization settings. + /// + public Newtonsoft.Json.JsonSerializerSettings DeserializationSettings { get; private set; } + + /// + /// Credentials needed for the client to connect to Azure. + /// + public Microsoft.Rest.ServiceClientCredentials Credentials { get; private set; } + + /// + /// subscription credentials which uniquely identify Microsoft Azure + /// subscription. The subscription ID forms part of the URI for every service + /// call. + /// + public string SubscriptionId { get; set; } + + /// + /// Client Api Version. + /// + public string ApiVersion { get; private set; } + + /// + /// Gets or sets the preferred language for the response. + /// + public string AcceptLanguage { get; set; } + + /// + /// Gets or sets the retry timeout in seconds for Long Running Operations. + /// Default value is 30. + /// + public int? LongRunningOperationRetryTimeout { get; set; } + + /// + /// When set to true a unique x-ms-client-request-id value is generated and + /// included in each request. Default is true. + /// + public bool? GenerateClientRequestId { get; set; } + + /// + /// Gets the IAvailabilitySetsOperations. + /// + public virtual IAvailabilitySetsOperations AvailabilitySets { get; private set; } + + /// + /// Gets the IVirtualMachineExtensionImagesOperations. + /// + public virtual IVirtualMachineExtensionImagesOperations VirtualMachineExtensionImages { get; private set; } + + /// + /// Gets the IVirtualMachineExtensionsOperations. + /// + public virtual IVirtualMachineExtensionsOperations VirtualMachineExtensions { get; private set; } + + /// + /// Gets the IVirtualMachineImagesOperations. + /// + public virtual IVirtualMachineImagesOperations VirtualMachineImages { get; private set; } + + /// + /// Gets the IUsageOperations. + /// + public virtual IUsageOperations Usage { get; private set; } + + /// + /// Gets the IVirtualMachineSizesOperations. + /// + public virtual IVirtualMachineSizesOperations VirtualMachineSizes { get; private set; } + + /// + /// Gets the IVirtualMachinesOperations. + /// + public virtual IVirtualMachinesOperations VirtualMachines { get; private set; } + + /// + /// Gets the IVirtualMachineScaleSetsOperations. + /// + public virtual IVirtualMachineScaleSetsOperations VirtualMachineScaleSets { get; private set; } + + /// + /// Gets the IVirtualMachineScaleSetVMsOperations. + /// + public virtual IVirtualMachineScaleSetVMsOperations VirtualMachineScaleSetVMs { get; private set; } + + /// + /// Initializes a new instance of the ComputeManagementClient class. + /// + /// + /// Optional. The delegating handlers to add to the http client pipeline. + /// + protected ComputeManagementClient(params System.Net.Http.DelegatingHandler[] handlers) : base(handlers) + { + this.Initialize(); + } + + /// + /// Initializes a new instance of the ComputeManagementClient class. + /// + /// + /// Optional. The http client handler used to handle http transport. + /// + /// + /// Optional. The delegating handlers to add to the http client pipeline. + /// + protected ComputeManagementClient(System.Net.Http.HttpClientHandler rootHandler, params System.Net.Http.DelegatingHandler[] handlers) : base(rootHandler, handlers) + { + this.Initialize(); + } + + /// + /// Initializes a new instance of the ComputeManagementClient class. + /// + /// + /// Optional. The base URI of the service. + /// + /// + /// Optional. The delegating handlers to add to the http client pipeline. + /// + /// + /// Thrown when a required parameter is null + /// + protected ComputeManagementClient(System.Uri baseUri, params System.Net.Http.DelegatingHandler[] handlers) : this(handlers) + { + if (baseUri == null) + { + throw new System.ArgumentNullException("baseUri"); + } + this.BaseUri = baseUri; + } + + /// + /// Initializes a new instance of the ComputeManagementClient class. + /// + /// + /// Optional. The base URI of the service. + /// + /// + /// Optional. The http client handler used to handle http transport. + /// + /// + /// Optional. The delegating handlers to add to the http client pipeline. + /// + /// + /// Thrown when a required parameter is null + /// + protected ComputeManagementClient(System.Uri baseUri, System.Net.Http.HttpClientHandler rootHandler, params System.Net.Http.DelegatingHandler[] handlers) : this(rootHandler, handlers) + { + if (baseUri == null) + { + throw new System.ArgumentNullException("baseUri"); + } + this.BaseUri = baseUri; + } + + /// + /// Initializes a new instance of the ComputeManagementClient class. + /// + /// + /// Required. Credentials needed for the client to connect to Azure. + /// + /// + /// Optional. The delegating handlers to add to the http client pipeline. + /// + /// + /// Thrown when a required parameter is null + /// + public ComputeManagementClient(Microsoft.Rest.ServiceClientCredentials credentials, params System.Net.Http.DelegatingHandler[] handlers) : this(handlers) + { + if (credentials == null) + { + throw new System.ArgumentNullException("credentials"); + } + this.Credentials = credentials; + if (this.Credentials != null) + { + this.Credentials.InitializeServiceClient(this); + } + } + + /// + /// Initializes a new instance of the ComputeManagementClient class. + /// + /// + /// Required. Credentials needed for the client to connect to Azure. + /// + /// + /// Optional. The http client handler used to handle http transport. + /// + /// + /// Optional. The delegating handlers to add to the http client pipeline. + /// + /// + /// Thrown when a required parameter is null + /// + public ComputeManagementClient(Microsoft.Rest.ServiceClientCredentials credentials, System.Net.Http.HttpClientHandler rootHandler, params System.Net.Http.DelegatingHandler[] handlers) : this(rootHandler, handlers) + { + if (credentials == null) + { + throw new System.ArgumentNullException("credentials"); + } + this.Credentials = credentials; + if (this.Credentials != null) + { + this.Credentials.InitializeServiceClient(this); + } + } + + /// + /// Initializes a new instance of the ComputeManagementClient class. + /// + /// + /// Optional. The base URI of the service. + /// + /// + /// Required. Credentials needed for the client to connect to Azure. + /// + /// + /// Optional. The delegating handlers to add to the http client pipeline. + /// + /// + /// Thrown when a required parameter is null + /// + public ComputeManagementClient(System.Uri baseUri, Microsoft.Rest.ServiceClientCredentials credentials, params System.Net.Http.DelegatingHandler[] handlers) : this(handlers) + { + if (baseUri == null) + { + throw new System.ArgumentNullException("baseUri"); + } + if (credentials == null) + { + throw new System.ArgumentNullException("credentials"); + } + this.BaseUri = baseUri; + this.Credentials = credentials; + if (this.Credentials != null) + { + this.Credentials.InitializeServiceClient(this); + } + } + + /// + /// Initializes a new instance of the ComputeManagementClient class. + /// + /// + /// Optional. The base URI of the service. + /// + /// + /// Required. Credentials needed for the client to connect to Azure. + /// + /// + /// Optional. The http client handler used to handle http transport. + /// + /// + /// Optional. The delegating handlers to add to the http client pipeline. + /// + /// + /// Thrown when a required parameter is null + /// + public ComputeManagementClient(System.Uri baseUri, Microsoft.Rest.ServiceClientCredentials credentials, System.Net.Http.HttpClientHandler rootHandler, params System.Net.Http.DelegatingHandler[] handlers) : this(rootHandler, handlers) + { + if (baseUri == null) + { + throw new System.ArgumentNullException("baseUri"); + } + if (credentials == null) + { + throw new System.ArgumentNullException("credentials"); + } + this.BaseUri = baseUri; + this.Credentials = credentials; + if (this.Credentials != null) + { + this.Credentials.InitializeServiceClient(this); + } + } + + /// + /// An optional partial-method to perform custom initialization. + /// + partial void CustomInitialize(); + /// + /// Initializes client properties. + /// + private void Initialize() + { + this.AvailabilitySets = new AvailabilitySetsOperations(this); + this.VirtualMachineExtensionImages = new VirtualMachineExtensionImagesOperations(this); + this.VirtualMachineExtensions = new VirtualMachineExtensionsOperations(this); + this.VirtualMachineImages = new VirtualMachineImagesOperations(this); + this.Usage = new UsageOperations(this); + this.VirtualMachineSizes = new VirtualMachineSizesOperations(this); + this.VirtualMachines = new VirtualMachinesOperations(this); + this.VirtualMachineScaleSets = new VirtualMachineScaleSetsOperations(this); + this.VirtualMachineScaleSetVMs = new VirtualMachineScaleSetVMsOperations(this); + this.BaseUri = new System.Uri("https://management.azure.com"); + this.ApiVersion = "2016-03-30"; + this.AcceptLanguage = "en-US"; + this.LongRunningOperationRetryTimeout = 30; + this.GenerateClientRequestId = true; + SerializationSettings = new Newtonsoft.Json.JsonSerializerSettings + { + Formatting = Newtonsoft.Json.Formatting.Indented, + DateFormatHandling = Newtonsoft.Json.DateFormatHandling.IsoDateFormat, + DateTimeZoneHandling = Newtonsoft.Json.DateTimeZoneHandling.Utc, + NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore, + ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Serialize, + ContractResolver = new Microsoft.Rest.Serialization.ReadOnlyJsonContractResolver(), + Converters = new System.Collections.Generic.List + { + new Microsoft.Rest.Serialization.Iso8601TimeSpanConverter() + } + }; + SerializationSettings.Converters.Add(new Microsoft.Rest.Serialization.TransformationJsonConverter()); + DeserializationSettings = new Newtonsoft.Json.JsonSerializerSettings + { + DateFormatHandling = Newtonsoft.Json.DateFormatHandling.IsoDateFormat, + DateTimeZoneHandling = Newtonsoft.Json.DateTimeZoneHandling.Utc, + NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore, + ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Serialize, + ContractResolver = new Microsoft.Rest.Serialization.ReadOnlyJsonContractResolver(), + Converters = new System.Collections.Generic.List + { + new Microsoft.Rest.Serialization.Iso8601TimeSpanConverter() + } + }; + CustomInitialize(); + DeserializationSettings.Converters.Add(new Microsoft.Rest.Serialization.TransformationJsonConverter()); + DeserializationSettings.Converters.Add(new Microsoft.Rest.Azure.CloudErrorJsonConverter()); + } + } +} diff --git a/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/IAvailabilitySetsOperations.cs b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/IAvailabilitySetsOperations.cs new file mode 100644 index 000000000..768b80ac8 --- /dev/null +++ b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/IAvailabilitySetsOperations.cs @@ -0,0 +1,143 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.Compute +{ + using Microsoft.Rest.Azure; + using Models; + + /// + /// AvailabilitySetsOperations operations. + /// + public partial interface IAvailabilitySetsOperations + { + /// + /// The operation to create or update the availability set. + /// + /// + /// The name of the resource group. + /// + /// + /// Parameters supplied to the Create Availability Set operation. + /// + /// + /// Parameters supplied to the Create Availability Set 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 + /// + /// + /// Thrown when a required parameter is null + /// + System.Threading.Tasks.Task> CreateOrUpdateWithHttpMessagesAsync(string resourceGroupName, string name, AvailabilitySetInner parameters, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + /// + /// The operation to delete the availability set. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the availability set. + /// + /// + /// The 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 + /// + System.Threading.Tasks.Task DeleteWithHttpMessagesAsync(string resourceGroupName, string availabilitySetName, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + /// + /// The operation to get the availability set. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the availability set. + /// + /// + /// 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 + /// + /// + /// Thrown when a required parameter is null + /// + System.Threading.Tasks.Task> GetWithHttpMessagesAsync(string resourceGroupName, string availabilitySetName, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + /// + /// The operation to list the availability sets. + /// + /// + /// The name of the resource group. + /// + /// + /// 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 + /// + /// + /// Thrown when a required parameter is null + /// + System.Threading.Tasks.Task>> ListWithHttpMessagesAsync(string resourceGroupName, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + /// + /// Lists all available virtual machine sizes that can be used to + /// create a new virtual machine in an existing availability set. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the availability set. + /// + /// + /// 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 + /// + /// + /// Thrown when a required parameter is null + /// + System.Threading.Tasks.Task>> ListAvailableSizesWithHttpMessagesAsync(string resourceGroupName, string availabilitySetName, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + } +} diff --git a/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/IComputeManagementClient.cs b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/IComputeManagementClient.cs new file mode 100644 index 000000000..7c869000e --- /dev/null +++ b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/IComputeManagementClient.cs @@ -0,0 +1,115 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.Compute +{ + using Microsoft.Rest.Azure; + using Models; + + /// + /// The Compute Management Client. + /// + public partial interface IComputeManagementClient : System.IDisposable + { + /// + /// The base URI of the service. + /// + System.Uri BaseUri { get; set; } + + /// + /// Gets or sets json serialization settings. + /// + Newtonsoft.Json.JsonSerializerSettings SerializationSettings { get; } + + /// + /// Gets or sets json deserialization settings. + /// + Newtonsoft.Json.JsonSerializerSettings DeserializationSettings { get; } + + /// + /// Credentials needed for the client to connect to Azure. + /// + Microsoft.Rest.ServiceClientCredentials Credentials { get; } + + /// + /// subscription credentials which uniquely identify Microsoft Azure + /// subscription. The subscription ID forms part of the URI for every + /// service call. + /// + string SubscriptionId { get; set; } + + /// + /// Client Api Version. + /// + string ApiVersion { get; } + + /// + /// Gets or sets the preferred language for the response. + /// + string AcceptLanguage { get; set; } + + /// + /// Gets or sets the retry timeout in seconds for Long Running + /// Operations. Default value is 30. + /// + int? LongRunningOperationRetryTimeout { get; set; } + + /// + /// When set to true a unique x-ms-client-request-id value is + /// generated and included in each request. Default is true. + /// + bool? GenerateClientRequestId { get; set; } + + + /// + /// Gets the IAvailabilitySetsOperations. + /// + IAvailabilitySetsOperations AvailabilitySets { get; } + + /// + /// Gets the IVirtualMachineExtensionImagesOperations. + /// + IVirtualMachineExtensionImagesOperations VirtualMachineExtensionImages { get; } + + /// + /// Gets the IVirtualMachineExtensionsOperations. + /// + IVirtualMachineExtensionsOperations VirtualMachineExtensions { get; } + + /// + /// Gets the IVirtualMachineImagesOperations. + /// + IVirtualMachineImagesOperations VirtualMachineImages { get; } + + /// + /// Gets the IUsageOperations. + /// + IUsageOperations Usage { get; } + + /// + /// Gets the IVirtualMachineSizesOperations. + /// + IVirtualMachineSizesOperations VirtualMachineSizes { get; } + + /// + /// Gets the IVirtualMachinesOperations. + /// + IVirtualMachinesOperations VirtualMachines { get; } + + /// + /// Gets the IVirtualMachineScaleSetsOperations. + /// + IVirtualMachineScaleSetsOperations VirtualMachineScaleSets { get; } + + /// + /// Gets the IVirtualMachineScaleSetVMsOperations. + /// + IVirtualMachineScaleSetVMsOperations VirtualMachineScaleSetVMs { get; } + + } +} diff --git a/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/IUsageOperations.cs b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/IUsageOperations.cs new file mode 100644 index 000000000..cf9c6ea2c --- /dev/null +++ b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/IUsageOperations.cs @@ -0,0 +1,64 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.Compute +{ + using Microsoft.Rest.Azure; + using Models; + + /// + /// UsageOperations operations. + /// + public partial interface IUsageOperations + { + /// + /// Lists compute usages for a subscription. + /// + /// + /// The location upon which resource usage is queried. + /// + /// + /// 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 + /// + /// + /// Thrown when a required parameter is null + /// + System.Threading.Tasks.Task>> ListWithHttpMessagesAsync(string location, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + /// + /// Lists compute usages for a subscription. + /// + /// + /// 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 + /// + /// + /// Thrown when a required parameter is null + /// + System.Threading.Tasks.Task>> ListNextWithHttpMessagesAsync(string nextPageLink, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + } +} diff --git a/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/IVirtualMachineExtensionImagesOperations.cs b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/IVirtualMachineExtensionImagesOperations.cs new file mode 100644 index 000000000..9d67ca452 --- /dev/null +++ b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/IVirtualMachineExtensionImagesOperations.cs @@ -0,0 +1,98 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.Compute +{ + using Microsoft.Rest.Azure; + using Models; + + /// + /// VirtualMachineExtensionImagesOperations operations. + /// + public partial interface IVirtualMachineExtensionImagesOperations + { + /// + /// Gets a virtual machine extension image. + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// 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 + /// + /// + /// Thrown when a required parameter is null + /// + System.Threading.Tasks.Task> GetWithHttpMessagesAsync(string location, string publisherName, string type, string version, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + /// + /// Gets a list of virtual machine extension image types. + /// + /// + /// + /// + /// + /// + /// 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 + /// + /// + /// Thrown when a required parameter is null + /// + System.Threading.Tasks.Task>> ListTypesWithHttpMessagesAsync(string location, string publisherName, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + /// + /// Gets a list of virtual machine extension image versions. + /// + /// + /// + /// + /// + /// + /// + /// + /// OData parameters to apply to the 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 + /// + /// + /// Thrown when a required parameter is null + /// + System.Threading.Tasks.Task>> ListVersionsWithHttpMessagesAsync(string location, string publisherName, string type, Microsoft.Rest.Azure.OData.ODataQuery odataQuery = default(Microsoft.Rest.Azure.OData.ODataQuery), System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + } +} diff --git a/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/IVirtualMachineExtensionsOperations.cs b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/IVirtualMachineExtensionsOperations.cs new file mode 100644 index 000000000..cc9fc8a40 --- /dev/null +++ b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/IVirtualMachineExtensionsOperations.cs @@ -0,0 +1,169 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.Compute +{ + using Microsoft.Rest.Azure; + using Models; + + /// + /// VirtualMachineExtensionsOperations operations. + /// + public partial interface IVirtualMachineExtensionsOperations + { + /// + /// The operation to create or update the extension. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual machine where the extension should be + /// create or updated. + /// + /// + /// The name of the virtual machine extension. + /// + /// + /// Parameters supplied to the Create Virtual Machine Extension + /// 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 + /// + /// + /// Thrown when a required parameter is null + /// + System.Threading.Tasks.Task> CreateOrUpdateWithHttpMessagesAsync(string resourceGroupName, string vmName, string vmExtensionName, VirtualMachineExtensionInner extensionParameters, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + /// + /// The operation to create or update the extension. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual machine where the extension should be + /// create or updated. + /// + /// + /// The name of the virtual machine extension. + /// + /// + /// Parameters supplied to the Create Virtual Machine Extension + /// 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 + /// + /// + /// Thrown when a required parameter is null + /// + System.Threading.Tasks.Task> BeginCreateOrUpdateWithHttpMessagesAsync(string resourceGroupName, string vmName, string vmExtensionName, VirtualMachineExtensionInner extensionParameters, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + /// + /// The operation to delete the extension. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual machine where the extension should be + /// deleted. + /// + /// + /// The name of the virtual machine extension. + /// + /// + /// The 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 + /// + System.Threading.Tasks.Task DeleteWithHttpMessagesAsync(string resourceGroupName, string vmName, string vmExtensionName, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + /// + /// The operation to delete the extension. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual machine where the extension should be + /// deleted. + /// + /// + /// The name of the virtual machine extension. + /// + /// + /// The 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 + /// + System.Threading.Tasks.Task BeginDeleteWithHttpMessagesAsync(string resourceGroupName, string vmName, string vmExtensionName, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + /// + /// The operation to get the extension. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual machine containing the extension. + /// + /// + /// The name of the virtual machine extension. + /// + /// + /// The expand expression to apply on the 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 + /// + /// + /// Thrown when a required parameter is null + /// + System.Threading.Tasks.Task> GetWithHttpMessagesAsync(string resourceGroupName, string vmName, string vmExtensionName, string expand = default(string), System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + } +} diff --git a/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/IVirtualMachineImagesOperations.cs b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/IVirtualMachineImagesOperations.cs new file mode 100644 index 000000000..32040f147 --- /dev/null +++ b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/IVirtualMachineImagesOperations.cs @@ -0,0 +1,148 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.Compute +{ + using Microsoft.Rest.Azure; + using Models; + + /// + /// VirtualMachineImagesOperations operations. + /// + public partial interface IVirtualMachineImagesOperations + { + /// + /// Gets a virtual machine image. + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// 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 + /// + /// + /// Thrown when a required parameter is null + /// + System.Threading.Tasks.Task> GetWithHttpMessagesAsync(string location, string publisherName, string offer, string skus, string version, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + /// + /// Gets a list of virtual machine images. + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// OData parameters to apply to the 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 + /// + /// + /// Thrown when a required parameter is null + /// + System.Threading.Tasks.Task>> ListWithHttpMessagesAsync(string location, string publisherName, string offer, string skus, Microsoft.Rest.Azure.OData.ODataQuery odataQuery = default(Microsoft.Rest.Azure.OData.ODataQuery), System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + /// + /// Gets a list of virtual machine image offers. + /// + /// + /// + /// + /// + /// + /// 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 + /// + /// + /// Thrown when a required parameter is null + /// + System.Threading.Tasks.Task>> ListOffersWithHttpMessagesAsync(string location, string publisherName, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + /// + /// Gets a list of virtual machine image publishers. + /// + /// + /// + /// + /// 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 + /// + /// + /// Thrown when a required parameter is null + /// + System.Threading.Tasks.Task>> ListPublishersWithHttpMessagesAsync(string location, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + /// + /// Gets a list of virtual machine image skus. + /// + /// + /// + /// + /// + /// + /// + /// + /// 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 + /// + /// + /// Thrown when a required parameter is null + /// + System.Threading.Tasks.Task>> ListSkusWithHttpMessagesAsync(string location, string publisherName, string offer, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + } +} diff --git a/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/IVirtualMachineScaleSetVMsOperations.cs b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/IVirtualMachineScaleSetVMsOperations.cs new file mode 100644 index 000000000..e9648a692 --- /dev/null +++ b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/IVirtualMachineScaleSetVMsOperations.cs @@ -0,0 +1,438 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.Compute +{ + using Microsoft.Rest.Azure; + using Models; + + /// + /// VirtualMachineScaleSetVMsOperations operations. + /// + public partial interface IVirtualMachineScaleSetVMsOperations + { + /// + /// Allows you to re-image(update the version of the installed + /// operating system) a virtual machine scale set instance. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual machine scale set. + /// + /// + /// The instance id of the virtual machine. + /// + /// + /// The 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 + /// + System.Threading.Tasks.Task ReimageWithHttpMessagesAsync(string resourceGroupName, string vmScaleSetName, string instanceId, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + /// + /// Allows you to re-image(update the version of the installed + /// operating system) a virtual machine scale set instance. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual machine scale set. + /// + /// + /// The instance id of the virtual machine. + /// + /// + /// The 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 + /// + System.Threading.Tasks.Task BeginReimageWithHttpMessagesAsync(string resourceGroupName, string vmScaleSetName, string instanceId, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + /// + /// Allows you to deallocate a virtual machine scale set virtual + /// machine. Shuts down the virtual machine and releases the compute + /// resources. You are not billed for the compute resources that this + /// virtual machine uses. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual machine scale set. + /// + /// + /// The instance id of the virtual machine. + /// + /// + /// The 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 + /// + System.Threading.Tasks.Task DeallocateWithHttpMessagesAsync(string resourceGroupName, string vmScaleSetName, string instanceId, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + /// + /// Allows you to deallocate a virtual machine scale set virtual + /// machine. Shuts down the virtual machine and releases the compute + /// resources. You are not billed for the compute resources that this + /// virtual machine uses. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual machine scale set. + /// + /// + /// The instance id of the virtual machine. + /// + /// + /// The 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 + /// + System.Threading.Tasks.Task BeginDeallocateWithHttpMessagesAsync(string resourceGroupName, string vmScaleSetName, string instanceId, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + /// + /// Allows you to delete a virtual machine scale set. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual machine scale set. + /// + /// + /// The instance id of the virtual machine. + /// + /// + /// The 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 + /// + System.Threading.Tasks.Task DeleteWithHttpMessagesAsync(string resourceGroupName, string vmScaleSetName, string instanceId, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + /// + /// Allows you to delete a virtual machine scale set. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual machine scale set. + /// + /// + /// The instance id of the virtual machine. + /// + /// + /// The 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 + /// + System.Threading.Tasks.Task BeginDeleteWithHttpMessagesAsync(string resourceGroupName, string vmScaleSetName, string instanceId, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + /// + /// Displays information about a virtual machine scale set virtual + /// machine. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual machine scale set. + /// + /// + /// The instance id of the virtual machine. + /// + /// + /// 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 + /// + /// + /// Thrown when a required parameter is null + /// + System.Threading.Tasks.Task> GetWithHttpMessagesAsync(string resourceGroupName, string vmScaleSetName, string instanceId, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + /// + /// Displays the status of a virtual machine scale set virtual machine. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual machine scale set. + /// + /// + /// The instance id of the virtual machine. + /// + /// + /// 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 + /// + /// + /// Thrown when a required parameter is null + /// + System.Threading.Tasks.Task> GetInstanceViewWithHttpMessagesAsync(string resourceGroupName, string vmScaleSetName, string instanceId, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + /// + /// Lists all virtual machines in a VM scale sets. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual machine scale set. + /// + /// + /// OData parameters to apply to the operation. + /// + /// + /// The list parameters. + /// + /// + /// 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 + /// + /// + /// Thrown when a required parameter is null + /// + System.Threading.Tasks.Task>> ListWithHttpMessagesAsync(string resourceGroupName, string virtualMachineScaleSetName, Microsoft.Rest.Azure.OData.ODataQuery odataQuery = default(Microsoft.Rest.Azure.OData.ODataQuery), string select = default(string), System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + /// + /// Allows you to power off (stop) a virtual machine in a VM scale set. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual machine scale set. + /// + /// + /// The instance id of the virtual machine. + /// + /// + /// The 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 + /// + System.Threading.Tasks.Task PowerOffWithHttpMessagesAsync(string resourceGroupName, string vmScaleSetName, string instanceId, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + /// + /// Allows you to power off (stop) a virtual machine in a VM scale set. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual machine scale set. + /// + /// + /// The instance id of the virtual machine. + /// + /// + /// The 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 + /// + System.Threading.Tasks.Task BeginPowerOffWithHttpMessagesAsync(string resourceGroupName, string vmScaleSetName, string instanceId, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + /// + /// Allows you to restart a virtual machine in a VM scale set. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual machine scale set. + /// + /// + /// The instance id of the virtual machine. + /// + /// + /// The 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 + /// + System.Threading.Tasks.Task RestartWithHttpMessagesAsync(string resourceGroupName, string vmScaleSetName, string instanceId, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + /// + /// Allows you to restart a virtual machine in a VM scale set. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual machine scale set. + /// + /// + /// The instance id of the virtual machine. + /// + /// + /// The 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 + /// + System.Threading.Tasks.Task BeginRestartWithHttpMessagesAsync(string resourceGroupName, string vmScaleSetName, string instanceId, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + /// + /// Allows you to start a virtual machine in a VM scale set. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual machine scale set. + /// + /// + /// The instance id of the virtual machine. + /// + /// + /// The 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 + /// + System.Threading.Tasks.Task StartWithHttpMessagesAsync(string resourceGroupName, string vmScaleSetName, string instanceId, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + /// + /// Allows you to start a virtual machine in a VM scale set. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual machine scale set. + /// + /// + /// The instance id of the virtual machine. + /// + /// + /// The 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 + /// + System.Threading.Tasks.Task BeginStartWithHttpMessagesAsync(string resourceGroupName, string vmScaleSetName, string instanceId, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + /// + /// Lists all virtual machines in a VM scale sets. + /// + /// + /// 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 + /// + /// + /// Thrown when a required parameter is null + /// + System.Threading.Tasks.Task>> ListNextWithHttpMessagesAsync(string nextPageLink, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + } +} diff --git a/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/IVirtualMachineScaleSetsOperations.cs b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/IVirtualMachineScaleSetsOperations.cs new file mode 100644 index 000000000..21225f93a --- /dev/null +++ b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/IVirtualMachineScaleSetsOperations.cs @@ -0,0 +1,684 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.Compute +{ + using Microsoft.Rest.Azure; + using Models; + + /// + /// VirtualMachineScaleSetsOperations operations. + /// + public partial interface IVirtualMachineScaleSetsOperations + { + /// + /// Allows you to create or update a virtual machine scale set by + /// providing parameters or a path to pre-configured parameter file. + /// + /// + /// The name of the resource group. + /// + /// + /// Parameters supplied to the Create Virtual Machine Scale Set + /// operation. + /// + /// + /// Parameters supplied to the Create Virtual Machine Scale Set + /// 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 + /// + /// + /// Thrown when a required parameter is null + /// + System.Threading.Tasks.Task> CreateOrUpdateWithHttpMessagesAsync(string resourceGroupName, string name, VirtualMachineScaleSetInner parameters, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + /// + /// Allows you to create or update a virtual machine scale set by + /// providing parameters or a path to pre-configured parameter file. + /// + /// + /// The name of the resource group. + /// + /// + /// Parameters supplied to the Create Virtual Machine Scale Set + /// operation. + /// + /// + /// Parameters supplied to the Create Virtual Machine Scale Set + /// 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 + /// + /// + /// Thrown when a required parameter is null + /// + System.Threading.Tasks.Task> BeginCreateOrUpdateWithHttpMessagesAsync(string resourceGroupName, string name, VirtualMachineScaleSetInner parameters, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + /// + /// Allows you to deallocate virtual machines in a virtual machine + /// scale set. Shuts down the virtual machines and releases the + /// compute resources. You are not billed for the compute resources + /// that this virtual machine scale set uses. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual machine scale set. + /// + /// + /// the virtual machine scale set instance ids. + /// + /// + /// The 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 + /// + System.Threading.Tasks.Task DeallocateWithHttpMessagesAsync(string resourceGroupName, string vmScaleSetName, System.Collections.Generic.IList instanceIds = default(System.Collections.Generic.IList), System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + /// + /// Allows you to deallocate virtual machines in a virtual machine + /// scale set. Shuts down the virtual machines and releases the + /// compute resources. You are not billed for the compute resources + /// that this virtual machine scale set uses. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual machine scale set. + /// + /// + /// the virtual machine scale set instance ids. + /// + /// + /// The 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 + /// + System.Threading.Tasks.Task BeginDeallocateWithHttpMessagesAsync(string resourceGroupName, string vmScaleSetName, System.Collections.Generic.IList instanceIds = default(System.Collections.Generic.IList), System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + /// + /// Allows you to delete a virtual machine scale set. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual machine scale set. + /// + /// + /// The 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 + /// + System.Threading.Tasks.Task DeleteWithHttpMessagesAsync(string resourceGroupName, string vmScaleSetName, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + /// + /// Allows you to delete a virtual machine scale set. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual machine scale set. + /// + /// + /// The 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 + /// + System.Threading.Tasks.Task BeginDeleteWithHttpMessagesAsync(string resourceGroupName, string vmScaleSetName, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + /// + /// Display information about a virtual machine scale set. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual machine scale set. + /// + /// + /// 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 + /// + /// + /// Thrown when a required parameter is null + /// + System.Threading.Tasks.Task> GetWithHttpMessagesAsync(string resourceGroupName, string vmScaleSetName, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + /// + /// Allows you to delete virtual machines in a virtual machine scale + /// set. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual machine scale set. + /// + /// + /// the virtual machine scale set instance ids. + /// + /// + /// The 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 + /// + System.Threading.Tasks.Task DeleteInstancesWithHttpMessagesAsync(string resourceGroupName, string vmScaleSetName, System.Collections.Generic.IList instanceIds, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + /// + /// Allows you to delete virtual machines in a virtual machine scale + /// set. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual machine scale set. + /// + /// + /// the virtual machine scale set instance ids. + /// + /// + /// The 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 + /// + System.Threading.Tasks.Task BeginDeleteInstancesWithHttpMessagesAsync(string resourceGroupName, string vmScaleSetName, System.Collections.Generic.IList instanceIds, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + /// + /// Displays status of a virtual machine scale set instance. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual machine scale set. + /// + /// + /// 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 + /// + /// + /// Thrown when a required parameter is null + /// + System.Threading.Tasks.Task> GetInstanceViewWithHttpMessagesAsync(string resourceGroupName, string vmScaleSetName, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + /// + /// Lists all virtual machine scale sets under a resource group. + /// + /// + /// The name of the resource group. + /// + /// + /// 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 + /// + /// + /// Thrown when a required parameter is null + /// + System.Threading.Tasks.Task>> ListWithHttpMessagesAsync(string resourceGroupName, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + /// + /// Lists all Virtual Machine Scale Sets in the subscription. Use + /// nextLink property in the response to get the next page of Virtual + /// Machine Scale Sets. Do this till nextLink is not null to fetch + /// all the Virtual Machine Scale Sets. + /// + /// + /// 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 + /// + /// + /// Thrown when a required parameter is null + /// + System.Threading.Tasks.Task>> ListAllWithHttpMessagesAsync(System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + /// + /// Displays available skus for your virtual machine scale set + /// including the minimum and maximum vm instances allowed for a + /// particular sku. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual machine scale set. + /// + /// + /// 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 + /// + /// + /// Thrown when a required parameter is null + /// + System.Threading.Tasks.Task>> ListSkusWithHttpMessagesAsync(string resourceGroupName, string vmScaleSetName, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + /// + /// Allows you to power off (stop) virtual machines in a virtual + /// machine scale set. Note that resources are still attached and you + /// are getting charged for the resources. Use deallocate to release + /// resources. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual machine scale set. + /// + /// + /// the virtual machine scale set instance ids. + /// + /// + /// The 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 + /// + System.Threading.Tasks.Task PowerOffWithHttpMessagesAsync(string resourceGroupName, string vmScaleSetName, System.Collections.Generic.IList instanceIds = default(System.Collections.Generic.IList), System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + /// + /// Allows you to power off (stop) virtual machines in a virtual + /// machine scale set. Note that resources are still attached and you + /// are getting charged for the resources. Use deallocate to release + /// resources. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual machine scale set. + /// + /// + /// the virtual machine scale set instance ids. + /// + /// + /// The 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 + /// + System.Threading.Tasks.Task BeginPowerOffWithHttpMessagesAsync(string resourceGroupName, string vmScaleSetName, System.Collections.Generic.IList instanceIds = default(System.Collections.Generic.IList), System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + /// + /// Allows you to restart virtual machines in a virtual machine scale + /// set. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual machine scale set. + /// + /// + /// the virtual machine scale set instance ids. + /// + /// + /// The 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 + /// + System.Threading.Tasks.Task RestartWithHttpMessagesAsync(string resourceGroupName, string vmScaleSetName, System.Collections.Generic.IList instanceIds = default(System.Collections.Generic.IList), System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + /// + /// Allows you to restart virtual machines in a virtual machine scale + /// set. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual machine scale set. + /// + /// + /// the virtual machine scale set instance ids. + /// + /// + /// The 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 + /// + System.Threading.Tasks.Task BeginRestartWithHttpMessagesAsync(string resourceGroupName, string vmScaleSetName, System.Collections.Generic.IList instanceIds = default(System.Collections.Generic.IList), System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + /// + /// Allows you to start virtual machines in a virtual machine scale + /// set. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual machine scale set. + /// + /// + /// the virtual machine scale set instance ids. + /// + /// + /// The 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 + /// + System.Threading.Tasks.Task StartWithHttpMessagesAsync(string resourceGroupName, string vmScaleSetName, System.Collections.Generic.IList instanceIds = default(System.Collections.Generic.IList), System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + /// + /// Allows you to start virtual machines in a virtual machine scale + /// set. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual machine scale set. + /// + /// + /// the virtual machine scale set instance ids. + /// + /// + /// The 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 + /// + System.Threading.Tasks.Task BeginStartWithHttpMessagesAsync(string resourceGroupName, string vmScaleSetName, System.Collections.Generic.IList instanceIds = default(System.Collections.Generic.IList), System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + /// + /// Allows you to manually upgrade virtual machines in a virtual + /// machine scale set. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual machine scale set. + /// + /// + /// the virtual machine scale set instance ids. + /// + /// + /// The 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 + /// + System.Threading.Tasks.Task UpdateInstancesWithHttpMessagesAsync(string resourceGroupName, string vmScaleSetName, System.Collections.Generic.IList instanceIds, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + /// + /// Allows you to manually upgrade virtual machines in a virtual + /// machine scale set. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual machine scale set. + /// + /// + /// the virtual machine scale set instance ids. + /// + /// + /// The 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 + /// + System.Threading.Tasks.Task BeginUpdateInstancesWithHttpMessagesAsync(string resourceGroupName, string vmScaleSetName, System.Collections.Generic.IList instanceIds, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + /// + /// Allows you to re-image(update the version of the installed + /// operating system) virtual machines in a virtual machine scale set. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual machine scale set. + /// + /// + /// The 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 + /// + System.Threading.Tasks.Task ReimageWithHttpMessagesAsync(string resourceGroupName, string vmScaleSetName, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + /// + /// Allows you to re-image(update the version of the installed + /// operating system) virtual machines in a virtual machine scale set. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual machine scale set. + /// + /// + /// The 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 + /// + System.Threading.Tasks.Task BeginReimageWithHttpMessagesAsync(string resourceGroupName, string vmScaleSetName, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + /// + /// Lists all virtual machine scale sets under a resource group. + /// + /// + /// 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 + /// + /// + /// Thrown when a required parameter is null + /// + System.Threading.Tasks.Task>> ListNextWithHttpMessagesAsync(string nextPageLink, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + /// + /// Lists all Virtual Machine Scale Sets in the subscription. Use + /// nextLink property in the response to get the next page of Virtual + /// Machine Scale Sets. Do this till nextLink is not null to fetch + /// all the Virtual Machine Scale Sets. + /// + /// + /// 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 + /// + /// + /// Thrown when a required parameter is null + /// + System.Threading.Tasks.Task>> ListAllNextWithHttpMessagesAsync(string nextPageLink, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + /// + /// Displays available skus for your virtual machine scale set + /// including the minimum and maximum vm instances allowed for a + /// particular sku. + /// + /// + /// 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 + /// + /// + /// Thrown when a required parameter is null + /// + System.Threading.Tasks.Task>> ListSkusNextWithHttpMessagesAsync(string nextPageLink, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + } +} diff --git a/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/IVirtualMachineSizesOperations.cs b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/IVirtualMachineSizesOperations.cs new file mode 100644 index 000000000..d5a564c44 --- /dev/null +++ b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/IVirtualMachineSizesOperations.cs @@ -0,0 +1,43 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.Compute +{ + using Microsoft.Rest.Azure; + using Models; + + /// + /// VirtualMachineSizesOperations operations. + /// + public partial interface IVirtualMachineSizesOperations + { + /// + /// Lists all available virtual machine sizes for a subscription in a + /// location. + /// + /// + /// The location upon which virtual-machine-sizes is queried. + /// + /// + /// 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 + /// + /// + /// Thrown when a required parameter is null + /// + System.Threading.Tasks.Task>> ListWithHttpMessagesAsync(string location, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + } +} diff --git a/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/IVirtualMachinesOperations.cs b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/IVirtualMachinesOperations.cs new file mode 100644 index 000000000..300f4b074 --- /dev/null +++ b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/IVirtualMachinesOperations.cs @@ -0,0 +1,570 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.Compute +{ + using Microsoft.Rest.Azure; + using Models; + + /// + /// VirtualMachinesOperations operations. + /// + public partial interface IVirtualMachinesOperations + { + /// + /// Captures the VM by copying virtual hard disks of the VM and + /// outputs a template that can be used to create similar VMs. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual machine. + /// + /// + /// Parameters supplied to the Capture Virtual Machine 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 + /// + /// + /// Thrown when a required parameter is null + /// + System.Threading.Tasks.Task> CaptureWithHttpMessagesAsync(string resourceGroupName, string vmName, VirtualMachineCaptureParametersInner parameters, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + /// + /// Captures the VM by copying virtual hard disks of the VM and + /// outputs a template that can be used to create similar VMs. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual machine. + /// + /// + /// Parameters supplied to the Capture Virtual Machine 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 + /// + /// + /// Thrown when a required parameter is null + /// + System.Threading.Tasks.Task> BeginCaptureWithHttpMessagesAsync(string resourceGroupName, string vmName, VirtualMachineCaptureParametersInner parameters, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + /// + /// The operation to create or update a virtual machine. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual machine. + /// + /// + /// Parameters supplied to the Create Virtual Machine 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 + /// + /// + /// Thrown when a required parameter is null + /// + System.Threading.Tasks.Task> CreateOrUpdateWithHttpMessagesAsync(string resourceGroupName, string vmName, VirtualMachineInner parameters, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + /// + /// The operation to create or update a virtual machine. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual machine. + /// + /// + /// Parameters supplied to the Create Virtual Machine 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 + /// + /// + /// Thrown when a required parameter is null + /// + System.Threading.Tasks.Task> BeginCreateOrUpdateWithHttpMessagesAsync(string resourceGroupName, string vmName, VirtualMachineInner parameters, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + /// + /// The operation to delete a virtual machine. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual machine. + /// + /// + /// The 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 + /// + System.Threading.Tasks.Task DeleteWithHttpMessagesAsync(string resourceGroupName, string vmName, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + /// + /// The operation to delete a virtual machine. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual machine. + /// + /// + /// The 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 + /// + System.Threading.Tasks.Task BeginDeleteWithHttpMessagesAsync(string resourceGroupName, string vmName, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + /// + /// The operation to get a virtual machine. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual machine. + /// + /// + /// The expand expression to apply on the operation. Possible values + /// include: 'instanceView' + /// + /// + /// 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 + /// + /// + /// Thrown when a required parameter is null + /// + System.Threading.Tasks.Task> GetWithHttpMessagesAsync(string resourceGroupName, string vmName, InstanceViewTypes? expand = default(InstanceViewTypes?), System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + /// + /// Shuts down the Virtual Machine and releases the compute resources. + /// You are not billed for the compute resources that this Virtual + /// Machine uses. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual machine. + /// + /// + /// The 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 + /// + System.Threading.Tasks.Task DeallocateWithHttpMessagesAsync(string resourceGroupName, string vmName, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + /// + /// Shuts down the Virtual Machine and releases the compute resources. + /// You are not billed for the compute resources that this Virtual + /// Machine uses. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual machine. + /// + /// + /// The 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 + /// + System.Threading.Tasks.Task BeginDeallocateWithHttpMessagesAsync(string resourceGroupName, string vmName, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + /// + /// Sets the state of the VM as Generalized. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual machine. + /// + /// + /// The 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 + /// + System.Threading.Tasks.Task GeneralizeWithHttpMessagesAsync(string resourceGroupName, string vmName, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + /// + /// The operation to list virtual machines under a resource group. + /// + /// + /// The name of the resource group. + /// + /// + /// 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 + /// + /// + /// Thrown when a required parameter is null + /// + System.Threading.Tasks.Task>> ListWithHttpMessagesAsync(string resourceGroupName, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + /// + /// Gets the list of Virtual Machines in the subscription. Use + /// nextLink property in the response to get the next page of Virtual + /// Machines. Do this till nextLink is not null to fetch all the + /// Virtual Machines. + /// + /// + /// 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 + /// + /// + /// Thrown when a required parameter is null + /// + System.Threading.Tasks.Task>> ListAllWithHttpMessagesAsync(System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + /// + /// Lists all available virtual machine sizes it can be resized to for + /// a virtual machine. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual machine. + /// + /// + /// 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 + /// + /// + /// Thrown when a required parameter is null + /// + System.Threading.Tasks.Task>> ListAvailableSizesWithHttpMessagesAsync(string resourceGroupName, string vmName, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + /// + /// The operation to power off (stop) a virtual machine. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual machine. + /// + /// + /// The 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 + /// + System.Threading.Tasks.Task PowerOffWithHttpMessagesAsync(string resourceGroupName, string vmName, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + /// + /// The operation to power off (stop) a virtual machine. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual machine. + /// + /// + /// The 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 + /// + System.Threading.Tasks.Task BeginPowerOffWithHttpMessagesAsync(string resourceGroupName, string vmName, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + /// + /// The operation to restart a virtual machine. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual machine. + /// + /// + /// The 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 + /// + System.Threading.Tasks.Task RestartWithHttpMessagesAsync(string resourceGroupName, string vmName, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + /// + /// The operation to restart a virtual machine. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual machine. + /// + /// + /// The 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 + /// + System.Threading.Tasks.Task BeginRestartWithHttpMessagesAsync(string resourceGroupName, string vmName, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + /// + /// The operation to start a virtual machine. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual machine. + /// + /// + /// The 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 + /// + System.Threading.Tasks.Task StartWithHttpMessagesAsync(string resourceGroupName, string vmName, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + /// + /// The operation to start a virtual machine. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual machine. + /// + /// + /// The 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 + /// + System.Threading.Tasks.Task BeginStartWithHttpMessagesAsync(string resourceGroupName, string vmName, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + /// + /// The operation to redeploy a virtual machine. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual machine. + /// + /// + /// The 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 + /// + System.Threading.Tasks.Task RedeployWithHttpMessagesAsync(string resourceGroupName, string vmName, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + /// + /// The operation to redeploy a virtual machine. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual machine. + /// + /// + /// The 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 + /// + System.Threading.Tasks.Task BeginRedeployWithHttpMessagesAsync(string resourceGroupName, string vmName, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + /// + /// The operation to list virtual machines under a resource group. + /// + /// + /// 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 + /// + /// + /// Thrown when a required parameter is null + /// + System.Threading.Tasks.Task>> ListNextWithHttpMessagesAsync(string nextPageLink, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + /// + /// Gets the list of Virtual Machines in the subscription. Use + /// nextLink property in the response to get the next page of Virtual + /// Machines. Do this till nextLink is not null to fetch all the + /// Virtual Machines. + /// + /// + /// 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 + /// + /// + /// Thrown when a required parameter is null + /// + System.Threading.Tasks.Task>> ListAllNextWithHttpMessagesAsync(string nextPageLink, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + } +} diff --git a/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/AdditionalUnattendContent.cs b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/AdditionalUnattendContent.cs new file mode 100644 index 000000000..e38fe52de --- /dev/null +++ b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/AdditionalUnattendContent.cs @@ -0,0 +1,82 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.Compute.Models +{ + using System.Linq; + + /// + /// additional XML formatted information that can be included in the + /// Unattend.xml file, which is used by Windows Setup. Contents are + /// defined by setting name, component name, and the pass in which the + /// content is a applied. + /// + public partial class AdditionalUnattendContent + { + /// + /// Initializes a new instance of the AdditionalUnattendContent class. + /// + public AdditionalUnattendContent() { } + + /// + /// Initializes a new instance of the AdditionalUnattendContent class. + /// + /// the pass name. Currently, the only + /// allowable value is oobeSystem. Possible values include: + /// 'oobeSystem' + /// the component name. Currently, the + /// only allowable value is Microsoft-Windows-Shell-Setup. Possible + /// values include: 'Microsoft-Windows-Shell-Setup' + /// setting name (e.g. FirstLogonCommands, + /// AutoLogon ). Possible values include: 'AutoLogon', + /// 'FirstLogonCommands' + /// XML formatted content that is added to the + /// unattend.xml file in the specified pass and component.The XML + /// must be less than 4 KB and must include the root element for the + /// setting or feature that is being inserted. + public AdditionalUnattendContent(PassNames? passName = default(PassNames?), ComponentNames? componentName = default(ComponentNames?), SettingNames? settingName = default(SettingNames?), string content = default(string)) + { + PassName = passName; + ComponentName = componentName; + SettingName = settingName; + Content = content; + } + + /// + /// Gets or sets the pass name. Currently, the only allowable value is + /// oobeSystem. Possible values include: 'oobeSystem' + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "passName")] + public PassNames? PassName { get; set; } + + /// + /// Gets or sets the component name. Currently, the only allowable + /// value is Microsoft-Windows-Shell-Setup. Possible values include: + /// 'Microsoft-Windows-Shell-Setup' + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "componentName")] + public ComponentNames? ComponentName { get; set; } + + /// + /// Gets or sets setting name (e.g. FirstLogonCommands, AutoLogon ). + /// Possible values include: 'AutoLogon', 'FirstLogonCommands' + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "settingName")] + public SettingNames? SettingName { get; set; } + + /// + /// Gets or sets XML formatted content that is added to the + /// unattend.xml file in the specified pass and component.The XML + /// must be less than 4 KB and must include the root element for the + /// setting or feature that is being inserted. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "content")] + public string Content { get; set; } + + } +} diff --git a/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/ApiEntityReference.cs b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/ApiEntityReference.cs new file mode 100644 index 000000000..a2880f82f --- /dev/null +++ b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/ApiEntityReference.cs @@ -0,0 +1,41 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.Compute.Models +{ + using System.Linq; + + /// + /// The API entity reference. + /// + public partial class ApiEntityReference + { + /// + /// Initializes a new instance of the ApiEntityReference class. + /// + public ApiEntityReference() { } + + /// + /// Initializes a new instance of the ApiEntityReference class. + /// + /// the ARM resource id in the form of + /// /subscriptions/{SubcriptionId}/resourceGroups/{ResourceGroupName}/... + public ApiEntityReference(string id = default(string)) + { + Id = id; + } + + /// + /// Gets or sets the ARM resource id in the form of + /// /subscriptions/{SubcriptionId}/resourceGroups/{ResourceGroupName}/... + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "id")] + public string Id { get; set; } + + } +} diff --git a/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/ApiError.cs b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/ApiError.cs new file mode 100644 index 000000000..f40582837 --- /dev/null +++ b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/ApiError.cs @@ -0,0 +1,71 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.Compute.Models +{ + using System.Linq; + + /// + /// Api error. + /// + public partial class ApiError + { + /// + /// Initializes a new instance of the ApiError class. + /// + public ApiError() { } + + /// + /// Initializes a new instance of the ApiError class. + /// + /// the Api error details + /// the Api inner error + /// the error code. + /// the target of the particular error. + /// the error message. + public ApiError(System.Collections.Generic.IList details = default(System.Collections.Generic.IList), InnerError innererror = default(InnerError), string code = default(string), string target = default(string), string message = default(string)) + { + Details = details; + Innererror = innererror; + Code = code; + Target = target; + Message = message; + } + + /// + /// Gets or sets the Api error details + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "details")] + public System.Collections.Generic.IList Details { get; set; } + + /// + /// Gets or sets the Api inner error + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "innererror")] + public InnerError Innererror { get; set; } + + /// + /// Gets or sets the error code. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "code")] + public string Code { get; set; } + + /// + /// Gets or sets the target of the particular error. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "target")] + public string Target { get; set; } + + /// + /// Gets or sets the error message. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "message")] + public string Message { get; set; } + + } +} diff --git a/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/ApiErrorBase.cs b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/ApiErrorBase.cs new file mode 100644 index 000000000..038935662 --- /dev/null +++ b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/ApiErrorBase.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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.Compute.Models +{ + using System.Linq; + + /// + /// Api error base. + /// + public partial class ApiErrorBase + { + /// + /// Initializes a new instance of the ApiErrorBase class. + /// + public ApiErrorBase() { } + + /// + /// Initializes a new instance of the ApiErrorBase class. + /// + /// the error code. + /// the target of the particular error. + /// the error message. + public ApiErrorBase(string code = default(string), string target = default(string), string message = default(string)) + { + Code = code; + Target = target; + Message = message; + } + + /// + /// Gets or sets the error code. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "code")] + public string Code { get; set; } + + /// + /// Gets or sets the target of the particular error. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "target")] + public string Target { get; set; } + + /// + /// Gets or sets the error message. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "message")] + public string Message { get; set; } + + } +} diff --git a/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/AvailabilitySetInner.cs b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/AvailabilitySetInner.cs new file mode 100644 index 000000000..bb4673d29 --- /dev/null +++ b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/AvailabilitySetInner.cs @@ -0,0 +1,68 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.Compute.Models +{ + using System.Linq; + + /// + /// Create or update Availability Set parameters. + /// + [Microsoft.Rest.Serialization.JsonTransformation] + public partial class AvailabilitySetInner : Microsoft.Rest.Azure.Resource + { + /// + /// Initializes a new instance of the AvailabilitySetInner class. + /// + public AvailabilitySetInner() { } + + /// + /// Initializes a new instance of the AvailabilitySetInner class. + /// + /// Update Domain + /// count. + /// Fault Domain count. + /// a list containing reference to all + /// Virtual Machines created under this Availability Set. + /// the resource status information. + public AvailabilitySetInner(string location = default(string), string id = default(string), string name = default(string), string type = default(string), System.Collections.Generic.IDictionary tags = default(System.Collections.Generic.IDictionary), int? platformUpdateDomainCount = default(int?), int? platformFaultDomainCount = default(int?), System.Collections.Generic.IList virtualMachines = default(System.Collections.Generic.IList), System.Collections.Generic.IList statuses = default(System.Collections.Generic.IList)) + : base(location, id, name, type, tags) + { + PlatformUpdateDomainCount = platformUpdateDomainCount; + PlatformFaultDomainCount = platformFaultDomainCount; + VirtualMachines = virtualMachines; + Statuses = statuses; + } + + /// + /// Gets or sets update Domain count. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.platformUpdateDomainCount")] + public int? PlatformUpdateDomainCount { get; set; } + + /// + /// Gets or sets fault Domain count. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.platformFaultDomainCount")] + public int? PlatformFaultDomainCount { get; set; } + + /// + /// Gets or sets a list containing reference to all Virtual Machines + /// created under this Availability Set. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.virtualMachines")] + public System.Collections.Generic.IList VirtualMachines { get; set; } + + /// + /// Gets or sets the resource status information. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.statuses")] + public System.Collections.Generic.IList Statuses { get; set; } + + } +} diff --git a/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/AvailabilitySetListResultInner.cs b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/AvailabilitySetListResultInner.cs new file mode 100644 index 000000000..eff7c0b27 --- /dev/null +++ b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/AvailabilitySetListResultInner.cs @@ -0,0 +1,41 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.Compute.Models +{ + using System.Linq; + + /// + /// The List Availability Set operation response. + /// + public partial class AvailabilitySetListResultInner + { + /// + /// Initializes a new instance of the AvailabilitySetListResultInner + /// class. + /// + public AvailabilitySetListResultInner() { } + + /// + /// Initializes a new instance of the AvailabilitySetListResultInner + /// class. + /// + /// the list of availability sets + public AvailabilitySetListResultInner(System.Collections.Generic.IList value = default(System.Collections.Generic.IList)) + { + Value = value; + } + + /// + /// Gets or sets the list of availability sets + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "value")] + public System.Collections.Generic.IList Value { get; set; } + + } +} diff --git a/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/BootDiagnostics.cs b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/BootDiagnostics.cs new file mode 100644 index 000000000..1e5797399 --- /dev/null +++ b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/BootDiagnostics.cs @@ -0,0 +1,51 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.Compute.Models +{ + using System.Linq; + + /// + /// Describes Boot Diagnostics. + /// + public partial class BootDiagnostics + { + /// + /// Initializes a new instance of the BootDiagnostics class. + /// + public BootDiagnostics() { } + + /// + /// Initializes a new instance of the BootDiagnostics class. + /// + /// whether boot diagnostics should be enabled + /// on the Virtual Machine. + /// the boot diagnostics storage Uri. It + /// should be a valid Uri + public BootDiagnostics(bool? enabled = default(bool?), string storageUri = default(string)) + { + Enabled = enabled; + StorageUri = storageUri; + } + + /// + /// Gets or sets whether boot diagnostics should be enabled on the + /// Virtual Machine. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "enabled")] + public bool? Enabled { get; set; } + + /// + /// Gets or sets the boot diagnostics storage Uri. It should be a + /// valid Uri + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "storageUri")] + public string StorageUri { get; set; } + + } +} diff --git a/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/BootDiagnosticsInstanceView.cs b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/BootDiagnosticsInstanceView.cs new file mode 100644 index 000000000..4455ee47f --- /dev/null +++ b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/BootDiagnosticsInstanceView.cs @@ -0,0 +1,51 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.Compute.Models +{ + using System.Linq; + + /// + /// The instance view of a virtual machine boot diagnostics. + /// + public partial class BootDiagnosticsInstanceView + { + /// + /// Initializes a new instance of the BootDiagnosticsInstanceView + /// class. + /// + public BootDiagnosticsInstanceView() { } + + /// + /// Initializes a new instance of the BootDiagnosticsInstanceView + /// class. + /// + /// the console screenshot blob + /// Uri. + /// the Linux serial console log + /// blob Uri. + public BootDiagnosticsInstanceView(string consoleScreenshotBlobUri = default(string), string serialConsoleLogBlobUri = default(string)) + { + ConsoleScreenshotBlobUri = consoleScreenshotBlobUri; + SerialConsoleLogBlobUri = serialConsoleLogBlobUri; + } + + /// + /// Gets or sets the console screenshot blob Uri. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "consoleScreenshotBlobUri")] + public string ConsoleScreenshotBlobUri { get; set; } + + /// + /// Gets or sets the Linux serial console log blob Uri. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "serialConsoleLogBlobUri")] + public string SerialConsoleLogBlobUri { get; set; } + + } +} diff --git a/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/CachingTypes.cs b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/CachingTypes.cs new file mode 100644 index 000000000..d2c1f694d --- /dev/null +++ b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/CachingTypes.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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.Compute.Models +{ + + /// + /// Defines values for CachingTypes. + /// + [Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.StringEnumConverter))] + public enum CachingTypes + { + [System.Runtime.Serialization.EnumMember(Value = "None")] + None, + [System.Runtime.Serialization.EnumMember(Value = "ReadOnly")] + ReadOnly, + [System.Runtime.Serialization.EnumMember(Value = "ReadWrite")] + ReadWrite + } +} diff --git a/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/ComponentNames.cs b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/ComponentNames.cs new file mode 100644 index 000000000..be6ab359e --- /dev/null +++ b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/ComponentNames.cs @@ -0,0 +1,21 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.Compute.Models +{ + + /// + /// Defines values for ComponentNames. + /// + [Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.StringEnumConverter))] + public enum ComponentNames + { + [System.Runtime.Serialization.EnumMember(Value = "Microsoft-Windows-Shell-Setup")] + MicrosoftWindowsShellSetup + } +} diff --git a/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/ComputeLongRunningOperationProperties.cs b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/ComputeLongRunningOperationProperties.cs new file mode 100644 index 000000000..f276d95ae --- /dev/null +++ b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/ComputeLongRunningOperationProperties.cs @@ -0,0 +1,41 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.Compute.Models +{ + using System.Linq; + + /// + /// Compute-specific operation properties, including output + /// + public partial class ComputeLongRunningOperationProperties + { + /// + /// Initializes a new instance of the + /// ComputeLongRunningOperationProperties class. + /// + public ComputeLongRunningOperationProperties() { } + + /// + /// Initializes a new instance of the + /// ComputeLongRunningOperationProperties class. + /// + /// Operation output data (raw JSON) + public ComputeLongRunningOperationProperties(object output = default(object)) + { + Output = output; + } + + /// + /// Gets or sets operation output data (raw JSON) + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "output")] + public object Output { get; set; } + + } +} diff --git a/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/DataDisk.cs b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/DataDisk.cs new file mode 100644 index 000000000..602be1784 --- /dev/null +++ b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/DataDisk.cs @@ -0,0 +1,117 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.Compute.Models +{ + using System.Linq; + + /// + /// Describes a data disk. + /// + public partial class DataDisk + { + /// + /// Initializes a new instance of the DataDisk class. + /// + public DataDisk() { } + + /// + /// Initializes a new instance of the DataDisk class. + /// + /// the logical unit number. + /// the disk name. + /// the Virtual Hard Disk. + /// the create option. Possible values + /// include: 'fromImage', 'empty', 'attach' + /// the Source User Image VirtualHardDisk. This + /// VirtualHardDisk will be copied before using it to attach to the + /// Virtual Machine.If SourceImage is provided, the destination + /// VirtualHardDisk should not exist. + /// the caching type. Possible values include: + /// 'None', 'ReadOnly', 'ReadWrite' + /// the initial disk size in GB for blank + /// data disks, and the new desired size for existing OS and Data + /// disks. + public DataDisk(int lun, string name, VirtualHardDisk vhd, DiskCreateOptionTypes createOption, VirtualHardDisk image = default(VirtualHardDisk), CachingTypes? caching = default(CachingTypes?), int? diskSizeGB = default(int?)) + { + Lun = lun; + Name = name; + Vhd = vhd; + Image = image; + Caching = caching; + CreateOption = createOption; + DiskSizeGB = diskSizeGB; + } + + /// + /// Gets or sets the logical unit number. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "lun")] + public int Lun { get; set; } + + /// + /// Gets or sets the disk name. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "name")] + public string Name { get; set; } + + /// + /// Gets or sets the Virtual Hard Disk. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "vhd")] + public VirtualHardDisk Vhd { get; set; } + + /// + /// Gets or sets the Source User Image VirtualHardDisk. This + /// VirtualHardDisk will be copied before using it to attach to the + /// Virtual Machine.If SourceImage is provided, the destination + /// VirtualHardDisk should not exist. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "image")] + public VirtualHardDisk Image { get; set; } + + /// + /// Gets or sets the caching type. Possible values include: 'None', + /// 'ReadOnly', 'ReadWrite' + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "caching")] + public CachingTypes? Caching { get; set; } + + /// + /// Gets or sets the create option. Possible values include: + /// 'fromImage', 'empty', 'attach' + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "createOption")] + public DiskCreateOptionTypes CreateOption { get; set; } + + /// + /// Gets or sets the initial disk size in GB for blank data disks, and + /// the new desired size for existing OS and Data disks. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "diskSizeGB")] + public int? DiskSizeGB { get; set; } + + /// + /// Validate the object. + /// + /// + /// Thrown if validation fails + /// + public virtual void Validate() + { + if (Name == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "Name"); + } + if (Vhd == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "Vhd"); + } + } + } +} diff --git a/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/DataDiskImage.cs b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/DataDiskImage.cs new file mode 100644 index 000000000..05255d3dc --- /dev/null +++ b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/DataDiskImage.cs @@ -0,0 +1,44 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.Compute.Models +{ + using System.Linq; + + /// + /// Contains the data disk images information. + /// + public partial class DataDiskImage + { + /// + /// Initializes a new instance of the DataDiskImage class. + /// + public DataDiskImage() { } + + /// + /// Initializes a new instance of the DataDiskImage class. + /// + /// the LUN number for a data disk.This value is + /// used to identify data disk image inside the VMImage therefore it + /// must be unique for each data disk.The allowed character for the + /// value is digit. + public DataDiskImage(int? lun = default(int?)) + { + Lun = lun; + } + + /// + /// Gets the LUN number for a data disk.This value is used to identify + /// data disk image inside the VMImage therefore it must be unique + /// for each data disk.The allowed character for the value is digit. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "lun")] + public int? Lun { get; private set; } + + } +} diff --git a/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/DiagnosticsProfile.cs b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/DiagnosticsProfile.cs new file mode 100644 index 000000000..b22647938 --- /dev/null +++ b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/DiagnosticsProfile.cs @@ -0,0 +1,39 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.Compute.Models +{ + using System.Linq; + + /// + /// Describes a diagnostics profile. + /// + public partial class DiagnosticsProfile + { + /// + /// Initializes a new instance of the DiagnosticsProfile class. + /// + public DiagnosticsProfile() { } + + /// + /// Initializes a new instance of the DiagnosticsProfile class. + /// + /// the boot diagnostics. + public DiagnosticsProfile(BootDiagnostics bootDiagnostics = default(BootDiagnostics)) + { + BootDiagnostics = bootDiagnostics; + } + + /// + /// Gets or sets the boot diagnostics. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "bootDiagnostics")] + public BootDiagnostics BootDiagnostics { get; set; } + + } +} diff --git a/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/DiskCreateOptionTypes.cs b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/DiskCreateOptionTypes.cs new file mode 100644 index 000000000..210da4b9f --- /dev/null +++ b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/DiskCreateOptionTypes.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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.Compute.Models +{ + + /// + /// Defines values for DiskCreateOptionTypes. + /// + [Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.StringEnumConverter))] + public enum DiskCreateOptionTypes + { + [System.Runtime.Serialization.EnumMember(Value = "fromImage")] + FromImage, + [System.Runtime.Serialization.EnumMember(Value = "empty")] + Empty, + [System.Runtime.Serialization.EnumMember(Value = "attach")] + Attach + } +} diff --git a/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/DiskEncryptionSettings.cs b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/DiskEncryptionSettings.cs new file mode 100644 index 000000000..24e4ba6d5 --- /dev/null +++ b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/DiskEncryptionSettings.cs @@ -0,0 +1,76 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.Compute.Models +{ + using System.Linq; + + /// + /// Describes a Encryption Settings for a Disk + /// + public partial class DiskEncryptionSettings + { + /// + /// Initializes a new instance of the DiskEncryptionSettings class. + /// + public DiskEncryptionSettings() { } + + /// + /// Initializes a new instance of the DiskEncryptionSettings class. + /// + /// the disk encryption key which is a + /// KeyVault Secret. + /// the key encryption key which is + /// KeyVault Key. + /// whether disk encryption should be enabled on + /// the Virtual Machine. + public DiskEncryptionSettings(KeyVaultSecretReference diskEncryptionKey = default(KeyVaultSecretReference), KeyVaultKeyReference keyEncryptionKey = default(KeyVaultKeyReference), bool? enabled = default(bool?)) + { + DiskEncryptionKey = diskEncryptionKey; + KeyEncryptionKey = keyEncryptionKey; + Enabled = enabled; + } + + /// + /// Gets or sets the disk encryption key which is a KeyVault Secret. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "diskEncryptionKey")] + public KeyVaultSecretReference DiskEncryptionKey { get; set; } + + /// + /// Gets or sets the key encryption key which is KeyVault Key. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "keyEncryptionKey")] + public KeyVaultKeyReference KeyEncryptionKey { get; set; } + + /// + /// Gets or sets whether disk encryption should be enabled on the + /// Virtual Machine. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "enabled")] + public bool? Enabled { get; set; } + + /// + /// Validate the object. + /// + /// + /// Thrown if validation fails + /// + public virtual void Validate() + { + if (this.DiskEncryptionKey != null) + { + this.DiskEncryptionKey.Validate(); + } + if (this.KeyEncryptionKey != null) + { + this.KeyEncryptionKey.Validate(); + } + } + } +} diff --git a/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/DiskInstanceView.cs b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/DiskInstanceView.cs new file mode 100644 index 000000000..8cfe43996 --- /dev/null +++ b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/DiskInstanceView.cs @@ -0,0 +1,47 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.Compute.Models +{ + using System.Linq; + + /// + /// The instance view of the disk. + /// + public partial class DiskInstanceView + { + /// + /// Initializes a new instance of the DiskInstanceView class. + /// + public DiskInstanceView() { } + + /// + /// Initializes a new instance of the DiskInstanceView class. + /// + /// the disk name. + /// the resource status information. + public DiskInstanceView(string name = default(string), System.Collections.Generic.IList statuses = default(System.Collections.Generic.IList)) + { + Name = name; + Statuses = statuses; + } + + /// + /// Gets or sets the disk name. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "name")] + public string Name { get; set; } + + /// + /// Gets or sets the resource status information. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "statuses")] + public System.Collections.Generic.IList Statuses { get; set; } + + } +} diff --git a/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/HardwareProfile.cs b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/HardwareProfile.cs new file mode 100644 index 000000000..c2ed6e466 --- /dev/null +++ b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/HardwareProfile.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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.Compute.Models +{ + using System.Linq; + + /// + /// Describes a hardware profile. + /// + public partial class HardwareProfile + { + /// + /// Initializes a new instance of the HardwareProfile class. + /// + public HardwareProfile() { } + + /// + /// Initializes a new instance of the HardwareProfile class. + /// + /// The virtual machine size name. Possible + /// values include: 'Basic_A0', 'Basic_A1', 'Basic_A2', 'Basic_A3', + /// 'Basic_A4', 'Standard_A0', 'Standard_A1', 'Standard_A2', + /// 'Standard_A3', 'Standard_A4', 'Standard_A5', 'Standard_A6', + /// 'Standard_A7', 'Standard_A8', 'Standard_A9', 'Standard_A10', + /// 'Standard_A11', 'Standard_D1', 'Standard_D2', 'Standard_D3', + /// 'Standard_D4', 'Standard_D11', 'Standard_D12', 'Standard_D13', + /// 'Standard_D14', 'Standard_D1_v2', 'Standard_D2_v2', + /// 'Standard_D3_v2', 'Standard_D4_v2', 'Standard_D5_v2', + /// 'Standard_D11_v2', 'Standard_D12_v2', 'Standard_D13_v2', + /// 'Standard_D14_v2', 'Standard_D15_v2', 'Standard_DS1', + /// 'Standard_DS2', 'Standard_DS3', 'Standard_DS4', 'Standard_DS11', + /// 'Standard_DS12', 'Standard_DS13', 'Standard_DS14', + /// 'Standard_DS1_v2', 'Standard_DS2_v2', 'Standard_DS3_v2', + /// 'Standard_DS4_v2', 'Standard_DS5_v2', 'Standard_DS11_v2', + /// 'Standard_DS12_v2', 'Standard_DS13_v2', 'Standard_DS14_v2', + /// 'Standard_DS15_v2', 'Standard_G1', 'Standard_G2', 'Standard_G3', + /// 'Standard_G4', 'Standard_G5', 'Standard_GS1', 'Standard_GS2', + /// 'Standard_GS3', 'Standard_GS4', 'Standard_GS5' + public HardwareProfile(string vmSize = default(string)) + { + VmSize = vmSize; + } + + /// + /// Gets or sets the virtual machine size name. Possible values + /// include: 'Basic_A0', 'Basic_A1', 'Basic_A2', 'Basic_A3', + /// 'Basic_A4', 'Standard_A0', 'Standard_A1', 'Standard_A2', + /// 'Standard_A3', 'Standard_A4', 'Standard_A5', 'Standard_A6', + /// 'Standard_A7', 'Standard_A8', 'Standard_A9', 'Standard_A10', + /// 'Standard_A11', 'Standard_D1', 'Standard_D2', 'Standard_D3', + /// 'Standard_D4', 'Standard_D11', 'Standard_D12', 'Standard_D13', + /// 'Standard_D14', 'Standard_D1_v2', 'Standard_D2_v2', + /// 'Standard_D3_v2', 'Standard_D4_v2', 'Standard_D5_v2', + /// 'Standard_D11_v2', 'Standard_D12_v2', 'Standard_D13_v2', + /// 'Standard_D14_v2', 'Standard_D15_v2', 'Standard_DS1', + /// 'Standard_DS2', 'Standard_DS3', 'Standard_DS4', 'Standard_DS11', + /// 'Standard_DS12', 'Standard_DS13', 'Standard_DS14', + /// 'Standard_DS1_v2', 'Standard_DS2_v2', 'Standard_DS3_v2', + /// 'Standard_DS4_v2', 'Standard_DS5_v2', 'Standard_DS11_v2', + /// 'Standard_DS12_v2', 'Standard_DS13_v2', 'Standard_DS14_v2', + /// 'Standard_DS15_v2', 'Standard_G1', 'Standard_G2', 'Standard_G3', + /// 'Standard_G4', 'Standard_G5', 'Standard_GS1', 'Standard_GS2', + /// 'Standard_GS3', 'Standard_GS4', 'Standard_GS5' + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "vmSize")] + public string VmSize { get; set; } + + } +} diff --git a/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/ImageReference.cs b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/ImageReference.cs new file mode 100644 index 000000000..6f6eff317 --- /dev/null +++ b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/ImageReference.cs @@ -0,0 +1,69 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.Compute.Models +{ + using System.Linq; + + /// + /// The image reference. + /// + public partial class ImageReference + { + /// + /// Initializes a new instance of the ImageReference class. + /// + public ImageReference() { } + + /// + /// Initializes a new instance of the ImageReference class. + /// + /// the image publisher. + /// the image offer. + /// the image sku. + /// the image version. The allowed formats are + /// Major.Minor.Build or 'latest'. Major, Minor and Build being + /// decimal numbers. Specify 'latest' to use the latest version of + /// image. + public ImageReference(string publisher = default(string), string offer = default(string), string sku = default(string), string version = default(string)) + { + Publisher = publisher; + Offer = offer; + Sku = sku; + Version = version; + } + + /// + /// Gets or sets the image publisher. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "publisher")] + public string Publisher { get; set; } + + /// + /// Gets or sets the image offer. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "offer")] + public string Offer { get; set; } + + /// + /// Gets or sets the image sku. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "sku")] + public string Sku { get; set; } + + /// + /// Gets or sets the image version. The allowed formats are + /// Major.Minor.Build or 'latest'. Major, Minor and Build being + /// decimal numbers. Specify 'latest' to use the latest version of + /// image. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "version")] + public string Version { get; set; } + + } +} diff --git a/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/InnerError.cs b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/InnerError.cs new file mode 100644 index 000000000..a4c77d90d --- /dev/null +++ b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/InnerError.cs @@ -0,0 +1,48 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.Compute.Models +{ + using System.Linq; + + /// + /// Inner error details. + /// + public partial class InnerError + { + /// + /// Initializes a new instance of the InnerError class. + /// + public InnerError() { } + + /// + /// Initializes a new instance of the InnerError class. + /// + /// the exception type. + /// the internal error message or exception + /// dump. + public InnerError(string exceptiontype = default(string), string errordetail = default(string)) + { + Exceptiontype = exceptiontype; + Errordetail = errordetail; + } + + /// + /// Gets or sets the exception type. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "exceptiontype")] + public string Exceptiontype { get; set; } + + /// + /// Gets or sets the internal error message or exception dump. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "errordetail")] + public string Errordetail { get; set; } + + } +} diff --git a/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/InstanceViewStatus.cs b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/InstanceViewStatus.cs new file mode 100644 index 000000000..fc2001a9e --- /dev/null +++ b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/InstanceViewStatus.cs @@ -0,0 +1,76 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.Compute.Models +{ + using System.Linq; + + /// + /// Instance view status. + /// + public partial class InstanceViewStatus + { + /// + /// Initializes a new instance of the InstanceViewStatus class. + /// + public InstanceViewStatus() { } + + /// + /// Initializes a new instance of the InstanceViewStatus class. + /// + /// the status Code. + /// the level Code. Possible values include: + /// 'Info', 'Warning', 'Error' + /// the short localizable label for the + /// status. + /// the detailed Message, including for alerts + /// and error messages. + /// the time of the status. + public InstanceViewStatus(string code = default(string), StatusLevelTypes? level = default(StatusLevelTypes?), string displayStatus = default(string), string message = default(string), System.DateTime? time = default(System.DateTime?)) + { + Code = code; + Level = level; + DisplayStatus = displayStatus; + Message = message; + Time = time; + } + + /// + /// Gets or sets the status Code. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "code")] + public string Code { get; set; } + + /// + /// Gets or sets the level Code. Possible values include: 'Info', + /// 'Warning', 'Error' + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "level")] + public StatusLevelTypes? Level { get; set; } + + /// + /// Gets or sets the short localizable label for the status. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "displayStatus")] + public string DisplayStatus { get; set; } + + /// + /// Gets or sets the detailed Message, including for alerts and error + /// messages. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "message")] + public string Message { get; set; } + + /// + /// Gets or sets the time of the status. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "time")] + public System.DateTime? Time { get; set; } + + } +} diff --git a/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/InstanceViewTypes.cs b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/InstanceViewTypes.cs new file mode 100644 index 000000000..980b6014f --- /dev/null +++ b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/InstanceViewTypes.cs @@ -0,0 +1,21 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.Compute.Models +{ + + /// + /// Defines values for InstanceViewTypes. + /// + [Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.StringEnumConverter))] + public enum InstanceViewTypes + { + [System.Runtime.Serialization.EnumMember(Value = "instanceView")] + InstanceView + } +} diff --git a/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/KeyVaultKeyReference.cs b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/KeyVaultKeyReference.cs new file mode 100644 index 000000000..6a0a34361 --- /dev/null +++ b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/KeyVaultKeyReference.cs @@ -0,0 +1,66 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.Compute.Models +{ + using System.Linq; + + /// + /// Describes a reference to Key Vault Key + /// + public partial class KeyVaultKeyReference + { + /// + /// Initializes a new instance of the KeyVaultKeyReference class. + /// + public KeyVaultKeyReference() { } + + /// + /// Initializes a new instance of the KeyVaultKeyReference class. + /// + /// the URL referencing a key in a Key + /// Vault. + /// the Relative URL of the Key Vault + /// containing the key + public KeyVaultKeyReference(string keyUrl, Microsoft.Rest.Azure.SubResource sourceVault) + { + KeyUrl = keyUrl; + SourceVault = sourceVault; + } + + /// + /// Gets or sets the URL referencing a key in a Key Vault. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "keyUrl")] + public string KeyUrl { get; set; } + + /// + /// Gets or sets the Relative URL of the Key Vault containing the key + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "sourceVault")] + public Microsoft.Rest.Azure.SubResource SourceVault { get; set; } + + /// + /// Validate the object. + /// + /// + /// Thrown if validation fails + /// + public virtual void Validate() + { + if (KeyUrl == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "KeyUrl"); + } + if (SourceVault == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "SourceVault"); + } + } + } +} diff --git a/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/KeyVaultSecretReference.cs b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/KeyVaultSecretReference.cs new file mode 100644 index 000000000..8eb4f015e --- /dev/null +++ b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/KeyVaultSecretReference.cs @@ -0,0 +1,67 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.Compute.Models +{ + using System.Linq; + + /// + /// Describes a reference to Key Vault Secret + /// + public partial class KeyVaultSecretReference + { + /// + /// Initializes a new instance of the KeyVaultSecretReference class. + /// + public KeyVaultSecretReference() { } + + /// + /// Initializes a new instance of the KeyVaultSecretReference class. + /// + /// the URL referencing a secret in a Key + /// Vault. + /// the Relative URL of the Key Vault + /// containing the secret. + public KeyVaultSecretReference(string secretUrl, Microsoft.Rest.Azure.SubResource sourceVault) + { + SecretUrl = secretUrl; + SourceVault = sourceVault; + } + + /// + /// Gets or sets the URL referencing a secret in a Key Vault. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "secretUrl")] + public string SecretUrl { get; set; } + + /// + /// Gets or sets the Relative URL of the Key Vault containing the + /// secret. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "sourceVault")] + public Microsoft.Rest.Azure.SubResource SourceVault { get; set; } + + /// + /// Validate the object. + /// + /// + /// Thrown if validation fails + /// + public virtual void Validate() + { + if (SecretUrl == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "SecretUrl"); + } + if (SourceVault == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "SourceVault"); + } + } + } +} diff --git a/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/LinuxConfiguration.cs b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/LinuxConfiguration.cs new file mode 100644 index 000000000..d60759932 --- /dev/null +++ b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/LinuxConfiguration.cs @@ -0,0 +1,49 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.Compute.Models +{ + using System.Linq; + + /// + /// Describes Windows Configuration of the OS Profile. + /// + public partial class LinuxConfiguration + { + /// + /// Initializes a new instance of the LinuxConfiguration class. + /// + public LinuxConfiguration() { } + + /// + /// Initializes a new instance of the LinuxConfiguration class. + /// + /// whether Authentication + /// using user name and password is allowed or not + /// the SSH configuration for linux VMs + public LinuxConfiguration(bool? disablePasswordAuthentication = default(bool?), SshConfiguration ssh = default(SshConfiguration)) + { + DisablePasswordAuthentication = disablePasswordAuthentication; + Ssh = ssh; + } + + /// + /// Gets or sets whether Authentication using user name and password + /// is allowed or not + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "disablePasswordAuthentication")] + public bool? DisablePasswordAuthentication { get; set; } + + /// + /// Gets or sets the SSH configuration for linux VMs + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "ssh")] + public SshConfiguration Ssh { get; set; } + + } +} diff --git a/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/ListUsagesResultInner.cs b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/ListUsagesResultInner.cs new file mode 100644 index 000000000..ba655d375 --- /dev/null +++ b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/ListUsagesResultInner.cs @@ -0,0 +1,51 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.Compute.Models +{ + using System.Linq; + + /// + /// The List Usages operation response. + /// + public partial class ListUsagesResultInner + { + /// + /// Initializes a new instance of the ListUsagesResultInner class. + /// + public ListUsagesResultInner() { } + + /// + /// Initializes a new instance of the ListUsagesResultInner class. + /// + /// the list Compute Resource Usages. + /// the uri to fetch the next page of Compute + /// Resource Usages. Call ListNext() with this to fetch the next page + /// of Compute Resource Usages. + public ListUsagesResultInner(System.Collections.Generic.IList value = default(System.Collections.Generic.IList), string nextLink = default(string)) + { + Value = value; + NextLink = nextLink; + } + + /// + /// Gets or sets the list Compute Resource Usages. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "value")] + public System.Collections.Generic.IList Value { get; set; } + + /// + /// Gets or sets the uri to fetch the next page of Compute Resource + /// Usages. Call ListNext() with this to fetch the next page of + /// Compute Resource Usages. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "nextLink")] + public string NextLink { get; set; } + + } +} diff --git a/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/NetworkInterfaceReferenceInner.cs b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/NetworkInterfaceReferenceInner.cs new file mode 100644 index 000000000..a83031af5 --- /dev/null +++ b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/NetworkInterfaceReferenceInner.cs @@ -0,0 +1,44 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.Compute.Models +{ + using System.Linq; + + /// + /// Describes a network interface reference. + /// + [Microsoft.Rest.Serialization.JsonTransformation] + public partial class NetworkInterfaceReferenceInner : Microsoft.Rest.Azure.SubResource + { + /// + /// Initializes a new instance of the NetworkInterfaceReferenceInner + /// class. + /// + public NetworkInterfaceReferenceInner() { } + + /// + /// Initializes a new instance of the NetworkInterfaceReferenceInner + /// class. + /// + /// whether this is a primary NIC on a virtual + /// machine + public NetworkInterfaceReferenceInner(string id = default(string), bool? primary = default(bool?)) + : base(id) + { + Primary = primary; + } + + /// + /// Gets or sets whether this is a primary NIC on a virtual machine + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.primary")] + public bool? Primary { get; set; } + + } +} diff --git a/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/NetworkProfile.cs b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/NetworkProfile.cs new file mode 100644 index 000000000..e7ecff249 --- /dev/null +++ b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/NetworkProfile.cs @@ -0,0 +1,39 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.Compute.Models +{ + using System.Linq; + + /// + /// Describes a network profile. + /// + public partial class NetworkProfile + { + /// + /// Initializes a new instance of the NetworkProfile class. + /// + public NetworkProfile() { } + + /// + /// Initializes a new instance of the NetworkProfile class. + /// + /// the network interfaces. + public NetworkProfile(System.Collections.Generic.IList networkInterfaces = default(System.Collections.Generic.IList)) + { + NetworkInterfaces = networkInterfaces; + } + + /// + /// Gets or sets the network interfaces. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "networkInterfaces")] + public System.Collections.Generic.IList NetworkInterfaces { get; set; } + + } +} diff --git a/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/OSDisk.cs b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/OSDisk.cs new file mode 100644 index 000000000..061681e62 --- /dev/null +++ b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/OSDisk.cs @@ -0,0 +1,132 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.Compute.Models +{ + using System.Linq; + + /// + /// Describes an Operating System disk. + /// + public partial class OSDisk + { + /// + /// Initializes a new instance of the OSDisk class. + /// + public OSDisk() { } + + /// + /// Initializes a new instance of the OSDisk class. + /// + /// the disk name. + /// the Virtual Hard Disk. + /// the create option. Possible values + /// include: 'fromImage', 'empty', 'attach' + /// the Operating System type. Possible values + /// include: 'Windows', 'Linux' + /// the disk encryption + /// settings. + /// the Source User Image VirtualHardDisk. This + /// VirtualHardDisk will be copied before using it to attach to the + /// Virtual Machine.If SourceImage is provided, the destination + /// VirtualHardDisk should not exist. + /// the caching type. Possible values include: + /// 'None', 'ReadOnly', 'ReadWrite' + /// the initial disk size in GB for blank + /// data disks, and the new desired size for existing OS and Data + /// disks. + public OSDisk(string name, VirtualHardDisk vhd, DiskCreateOptionTypes createOption, OperatingSystemTypes? osType = default(OperatingSystemTypes?), DiskEncryptionSettings encryptionSettings = default(DiskEncryptionSettings), VirtualHardDisk image = default(VirtualHardDisk), CachingTypes? caching = default(CachingTypes?), int? diskSizeGB = default(int?)) + { + OsType = osType; + EncryptionSettings = encryptionSettings; + Name = name; + Vhd = vhd; + Image = image; + Caching = caching; + CreateOption = createOption; + DiskSizeGB = diskSizeGB; + } + + /// + /// Gets or sets the Operating System type. Possible values include: + /// 'Windows', 'Linux' + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "osType")] + public OperatingSystemTypes? OsType { get; set; } + + /// + /// Gets or sets the disk encryption settings. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "encryptionSettings")] + public DiskEncryptionSettings EncryptionSettings { get; set; } + + /// + /// Gets or sets the disk name. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "name")] + public string Name { get; set; } + + /// + /// Gets or sets the Virtual Hard Disk. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "vhd")] + public VirtualHardDisk Vhd { get; set; } + + /// + /// Gets or sets the Source User Image VirtualHardDisk. This + /// VirtualHardDisk will be copied before using it to attach to the + /// Virtual Machine.If SourceImage is provided, the destination + /// VirtualHardDisk should not exist. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "image")] + public VirtualHardDisk Image { get; set; } + + /// + /// Gets or sets the caching type. Possible values include: 'None', + /// 'ReadOnly', 'ReadWrite' + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "caching")] + public CachingTypes? Caching { get; set; } + + /// + /// Gets or sets the create option. Possible values include: + /// 'fromImage', 'empty', 'attach' + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "createOption")] + public DiskCreateOptionTypes CreateOption { get; set; } + + /// + /// Gets or sets the initial disk size in GB for blank data disks, and + /// the new desired size for existing OS and Data disks. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "diskSizeGB")] + public int? DiskSizeGB { get; set; } + + /// + /// Validate the object. + /// + /// + /// Thrown if validation fails + /// + public virtual void Validate() + { + if (Name == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "Name"); + } + if (Vhd == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "Vhd"); + } + if (this.EncryptionSettings != null) + { + this.EncryptionSettings.Validate(); + } + } + } +} diff --git a/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/OSDiskImage.cs b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/OSDiskImage.cs new file mode 100644 index 000000000..837755085 --- /dev/null +++ b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/OSDiskImage.cs @@ -0,0 +1,50 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.Compute.Models +{ + using System.Linq; + + /// + /// Contains the os disk image information. + /// + public partial class OSDiskImage + { + /// + /// Initializes a new instance of the OSDiskImage class. + /// + public OSDiskImage() { } + + /// + /// Initializes a new instance of the OSDiskImage class. + /// + /// the operating system of the + /// osDiskImage. Possible values include: 'Windows', 'Linux' + public OSDiskImage(OperatingSystemTypes? operatingSystem) + { + OperatingSystem = operatingSystem; + } + + /// + /// Gets or sets the operating system of the osDiskImage. Possible + /// values include: 'Windows', 'Linux' + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "operatingSystem")] + public OperatingSystemTypes? OperatingSystem { get; set; } + + /// + /// Validate the object. + /// + /// + /// Thrown if validation fails + /// + public virtual void Validate() + { + } + } +} diff --git a/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/OSProfile.cs b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/OSProfile.cs new file mode 100644 index 000000000..1d95d45e1 --- /dev/null +++ b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/OSProfile.cs @@ -0,0 +1,91 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.Compute.Models +{ + using System.Linq; + + /// + /// Describes an OS profile. + /// + public partial class OSProfile + { + /// + /// Initializes a new instance of the OSProfile class. + /// + public OSProfile() { } + + /// + /// Initializes a new instance of the OSProfile class. + /// + /// the computer name. + /// the admin user name. + /// the admin user password. + /// a base-64 encoded string of custom + /// data. + /// the Windows Configuration of + /// the OS profile. + /// the Linux Configuration of the OS + /// profile. + /// the List of certificates for addition to the + /// VM. + public OSProfile(string computerName = default(string), string adminUsername = default(string), string adminPassword = default(string), string customData = default(string), WindowsConfiguration windowsConfiguration = default(WindowsConfiguration), LinuxConfiguration linuxConfiguration = default(LinuxConfiguration), System.Collections.Generic.IList secrets = default(System.Collections.Generic.IList)) + { + ComputerName = computerName; + AdminUsername = adminUsername; + AdminPassword = adminPassword; + CustomData = customData; + WindowsConfiguration = windowsConfiguration; + LinuxConfiguration = linuxConfiguration; + Secrets = secrets; + } + + /// + /// Gets or sets the computer name. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "computerName")] + public string ComputerName { get; set; } + + /// + /// Gets or sets the admin user name. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "adminUsername")] + public string AdminUsername { get; set; } + + /// + /// Gets or sets the admin user password. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "adminPassword")] + public string AdminPassword { get; set; } + + /// + /// Gets or sets a base-64 encoded string of custom data. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "customData")] + public string CustomData { get; set; } + + /// + /// Gets or sets the Windows Configuration of the OS profile. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "windowsConfiguration")] + public WindowsConfiguration WindowsConfiguration { get; set; } + + /// + /// Gets or sets the Linux Configuration of the OS profile. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "linuxConfiguration")] + public LinuxConfiguration LinuxConfiguration { get; set; } + + /// + /// Gets or sets the List of certificates for addition to the VM. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "secrets")] + public System.Collections.Generic.IList Secrets { get; set; } + + } +} diff --git a/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/OperatingSystemTypes.cs b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/OperatingSystemTypes.cs new file mode 100644 index 000000000..873fd3735 --- /dev/null +++ b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/OperatingSystemTypes.cs @@ -0,0 +1,23 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.Compute.Models +{ + + /// + /// Defines values for OperatingSystemTypes. + /// + [Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.StringEnumConverter))] + public enum OperatingSystemTypes + { + [System.Runtime.Serialization.EnumMember(Value = "Windows")] + Windows, + [System.Runtime.Serialization.EnumMember(Value = "Linux")] + Linux + } +} diff --git a/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/Page.cs b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/Page.cs new file mode 100644 index 000000000..0f896a8b0 --- /dev/null +++ b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/Page.cs @@ -0,0 +1,46 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.Compute.Models +{ + + /// + /// Defines a page in Azure responses. + /// + /// Type of the page content items + [Newtonsoft.Json.JsonObject] + public class Page : Microsoft.Rest.Azure.IPage + { + /// + /// Gets the link to the next page. + /// + [Newtonsoft.Json.JsonProperty("")] + public System.String NextPageLink { get; private set; } + + [Newtonsoft.Json.JsonProperty("value")] + private System.Collections.Generic.IList Items{ get; set; } + + /// + /// Returns an enumerator that iterates through the collection. + /// + /// A an enumerator that can be used to iterate through the collection. + public System.Collections.Generic.IEnumerator GetEnumerator() + { + return (Items == null) ? System.Linq.Enumerable.Empty().GetEnumerator() : Items.GetEnumerator(); + } + + /// + /// Returns an enumerator that iterates through the collection. + /// + /// A an enumerator that can be used to iterate through the collection. + System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator() + { + return GetEnumerator(); + } + } +} diff --git a/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/Page1.cs b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/Page1.cs new file mode 100644 index 000000000..0eb652c97 --- /dev/null +++ b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/Page1.cs @@ -0,0 +1,46 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.Compute.Models +{ + + /// + /// Defines a page in Azure responses. + /// + /// Type of the page content items + [Newtonsoft.Json.JsonObject] + public class Page1 : Microsoft.Rest.Azure.IPage + { + /// + /// Gets the link to the next page. + /// + [Newtonsoft.Json.JsonProperty("nextLink")] + public System.String NextPageLink { get; private set; } + + [Newtonsoft.Json.JsonProperty("value")] + private System.Collections.Generic.IList Items{ get; set; } + + /// + /// Returns an enumerator that iterates through the collection. + /// + /// A an enumerator that can be used to iterate through the collection. + public System.Collections.Generic.IEnumerator GetEnumerator() + { + return (Items == null) ? System.Linq.Enumerable.Empty().GetEnumerator() : Items.GetEnumerator(); + } + + /// + /// Returns an enumerator that iterates through the collection. + /// + /// A an enumerator that can be used to iterate through the collection. + System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator() + { + return GetEnumerator(); + } + } +} diff --git a/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/PassNames.cs b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/PassNames.cs new file mode 100644 index 000000000..d7748f2f9 --- /dev/null +++ b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/PassNames.cs @@ -0,0 +1,21 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.Compute.Models +{ + + /// + /// Defines values for PassNames. + /// + [Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.StringEnumConverter))] + public enum PassNames + { + [System.Runtime.Serialization.EnumMember(Value = "oobeSystem")] + OobeSystem + } +} diff --git a/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/Plan.cs b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/Plan.cs new file mode 100644 index 000000000..342b862f6 --- /dev/null +++ b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/Plan.cs @@ -0,0 +1,63 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.Compute.Models +{ + using System.Linq; + + /// + /// Plan for the resource. + /// + public partial class Plan + { + /// + /// Initializes a new instance of the Plan class. + /// + public Plan() { } + + /// + /// Initializes a new instance of the Plan class. + /// + /// the plan ID. + /// the publisher ID. + /// the offer ID. + /// the promotion code. + public Plan(string name = default(string), string publisher = default(string), string product = default(string), string promotionCode = default(string)) + { + Name = name; + Publisher = publisher; + Product = product; + PromotionCode = promotionCode; + } + + /// + /// Gets or sets the plan ID. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "name")] + public string Name { get; set; } + + /// + /// Gets or sets the publisher ID. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "publisher")] + public string Publisher { get; set; } + + /// + /// Gets or sets the offer ID. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "product")] + public string Product { get; set; } + + /// + /// Gets or sets the promotion code. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "promotionCode")] + public string PromotionCode { get; set; } + + } +} diff --git a/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/ProtocolTypes.cs b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/ProtocolTypes.cs new file mode 100644 index 000000000..77da12779 --- /dev/null +++ b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/ProtocolTypes.cs @@ -0,0 +1,23 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.Compute.Models +{ + + /// + /// Defines values for ProtocolTypes. + /// + [Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.StringEnumConverter))] + public enum ProtocolTypes + { + [System.Runtime.Serialization.EnumMember(Value = "Http")] + Http, + [System.Runtime.Serialization.EnumMember(Value = "Https")] + Https + } +} diff --git a/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/PurchasePlan.cs b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/PurchasePlan.cs new file mode 100644 index 000000000..894430d93 --- /dev/null +++ b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/PurchasePlan.cs @@ -0,0 +1,77 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.Compute.Models +{ + using System.Linq; + + /// + /// Used for establishing the purchase context of any 3rd Party artifact + /// through MarketPlace. + /// + public partial class PurchasePlan + { + /// + /// Initializes a new instance of the PurchasePlan class. + /// + public PurchasePlan() { } + + /// + /// Initializes a new instance of the PurchasePlan class. + /// + /// the publisher ID. + /// the plan ID. + /// the product ID. + public PurchasePlan(string publisher, string name, string product) + { + Publisher = publisher; + Name = name; + Product = product; + } + + /// + /// Gets or sets the publisher ID. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "publisher")] + public string Publisher { get; set; } + + /// + /// Gets or sets the plan ID. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "name")] + public string Name { get; set; } + + /// + /// Gets or sets the product ID. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "product")] + public string Product { get; set; } + + /// + /// Validate the object. + /// + /// + /// Thrown if validation fails + /// + public virtual void Validate() + { + if (Publisher == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "Publisher"); + } + if (Name == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "Name"); + } + if (Product == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "Product"); + } + } + } +} diff --git a/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/SettingNames.cs b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/SettingNames.cs new file mode 100644 index 000000000..7f6648ae3 --- /dev/null +++ b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/SettingNames.cs @@ -0,0 +1,23 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.Compute.Models +{ + + /// + /// Defines values for SettingNames. + /// + [Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.StringEnumConverter))] + public enum SettingNames + { + [System.Runtime.Serialization.EnumMember(Value = "AutoLogon")] + AutoLogon, + [System.Runtime.Serialization.EnumMember(Value = "FirstLogonCommands")] + FirstLogonCommands + } +} diff --git a/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/Sku.cs b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/Sku.cs new file mode 100644 index 000000000..628ee36b9 --- /dev/null +++ b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/Sku.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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.Compute.Models +{ + using System.Linq; + + /// + /// Describes a virtual machine scale set sku. + /// + public partial class Sku + { + /// + /// Initializes a new instance of the Sku class. + /// + public Sku() { } + + /// + /// Initializes a new instance of the Sku class. + /// + /// the sku name. + /// the sku tier. + /// the sku capacity. + public Sku(string name = default(string), string tier = default(string), long? capacity = default(long?)) + { + Name = name; + Tier = tier; + Capacity = capacity; + } + + /// + /// Gets or sets the sku name. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "name")] + public string Name { get; set; } + + /// + /// Gets or sets the sku tier. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "tier")] + public string Tier { get; set; } + + /// + /// Gets or sets the sku capacity. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "capacity")] + public long? Capacity { get; set; } + + } +} diff --git a/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/SshConfiguration.cs b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/SshConfiguration.cs new file mode 100644 index 000000000..71d6823c6 --- /dev/null +++ b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/SshConfiguration.cs @@ -0,0 +1,41 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.Compute.Models +{ + using System.Linq; + + /// + /// SSH configuration for Linux based VMs running on Azure + /// + public partial class SshConfiguration + { + /// + /// Initializes a new instance of the SshConfiguration class. + /// + public SshConfiguration() { } + + /// + /// Initializes a new instance of the SshConfiguration class. + /// + /// the list of SSH public keys used to + /// authenticate with linux based VMs + public SshConfiguration(System.Collections.Generic.IList publicKeys = default(System.Collections.Generic.IList)) + { + PublicKeys = publicKeys; + } + + /// + /// Gets or sets the list of SSH public keys used to authenticate with + /// linux based VMs + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "publicKeys")] + public System.Collections.Generic.IList PublicKeys { get; set; } + + } +} diff --git a/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/SshPublicKey.cs b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/SshPublicKey.cs new file mode 100644 index 000000000..e2eababfb --- /dev/null +++ b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/SshPublicKey.cs @@ -0,0 +1,56 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.Compute.Models +{ + using System.Linq; + + /// + /// Contains information about SSH certificate public key and the path on + /// the Linux VM where the public key is placed. + /// + public partial class SshPublicKey + { + /// + /// Initializes a new instance of the SshPublicKey class. + /// + public SshPublicKey() { } + + /// + /// Initializes a new instance of the SshPublicKey class. + /// + /// the full path on the created VM where SSH + /// public key is stored. If the file already exists, the specified + /// key is appended to the file. + /// Certificate public key used to authenticate + /// with VM through SSH.The certificate must be in Pem format with or + /// without headers. + public SshPublicKey(string path = default(string), string keyData = default(string)) + { + Path = path; + KeyData = keyData; + } + + /// + /// Gets or sets the full path on the created VM where SSH public key + /// is stored. If the file already exists, the specified key is + /// appended to the file. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "path")] + public string Path { get; set; } + + /// + /// Gets or sets certificate public key used to authenticate with VM + /// through SSH.The certificate must be in Pem format with or without + /// headers. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "keyData")] + public string KeyData { get; set; } + + } +} diff --git a/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/StatusLevelTypes.cs b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/StatusLevelTypes.cs new file mode 100644 index 000000000..fc855b1a6 --- /dev/null +++ b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/StatusLevelTypes.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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.Compute.Models +{ + + /// + /// Defines values for StatusLevelTypes. + /// + [Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.StringEnumConverter))] + public enum StatusLevelTypes + { + [System.Runtime.Serialization.EnumMember(Value = "Info")] + Info, + [System.Runtime.Serialization.EnumMember(Value = "Warning")] + Warning, + [System.Runtime.Serialization.EnumMember(Value = "Error")] + Error + } +} diff --git a/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/StorageProfile.cs b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/StorageProfile.cs new file mode 100644 index 000000000..bcd8dac6e --- /dev/null +++ b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/StorageProfile.cs @@ -0,0 +1,78 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.Compute.Models +{ + using System.Linq; + + /// + /// Describes a storage profile. + /// + public partial class StorageProfile + { + /// + /// Initializes a new instance of the StorageProfile class. + /// + public StorageProfile() { } + + /// + /// Initializes a new instance of the StorageProfile class. + /// + /// the image reference. + /// the OS disk. + /// the data disks. + public StorageProfile(ImageReference imageReference = default(ImageReference), OSDisk osDisk = default(OSDisk), System.Collections.Generic.IList dataDisks = default(System.Collections.Generic.IList)) + { + ImageReference = imageReference; + OsDisk = osDisk; + DataDisks = dataDisks; + } + + /// + /// Gets or sets the image reference. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "imageReference")] + public ImageReference ImageReference { get; set; } + + /// + /// Gets or sets the OS disk. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "osDisk")] + public OSDisk OsDisk { get; set; } + + /// + /// Gets or sets the data disks. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "dataDisks")] + public System.Collections.Generic.IList DataDisks { get; set; } + + /// + /// Validate the object. + /// + /// + /// Thrown if validation fails + /// + public virtual void Validate() + { + if (this.OsDisk != null) + { + this.OsDisk.Validate(); + } + if (this.DataDisks != null) + { + foreach (var element in this.DataDisks) + { + if (element != null) + { + element.Validate(); + } + } + } + } + } +} diff --git a/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/UpgradeMode.cs b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/UpgradeMode.cs new file mode 100644 index 000000000..7b913de3c --- /dev/null +++ b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/UpgradeMode.cs @@ -0,0 +1,23 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.Compute.Models +{ + + /// + /// Defines values for UpgradeMode. + /// + [Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.StringEnumConverter))] + public enum UpgradeMode + { + [System.Runtime.Serialization.EnumMember(Value = "Automatic")] + Automatic, + [System.Runtime.Serialization.EnumMember(Value = "Manual")] + Manual + } +} diff --git a/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/UpgradePolicy.cs b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/UpgradePolicy.cs new file mode 100644 index 000000000..174fa2a2d --- /dev/null +++ b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/UpgradePolicy.cs @@ -0,0 +1,41 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.Compute.Models +{ + using System.Linq; + + /// + /// Describes an upgrade policy - automatic or manual. + /// + public partial class UpgradePolicy + { + /// + /// Initializes a new instance of the UpgradePolicy class. + /// + public UpgradePolicy() { } + + /// + /// Initializes a new instance of the UpgradePolicy class. + /// + /// the upgrade mode. Possible values include: + /// 'Automatic', 'Manual' + public UpgradePolicy(UpgradeMode? mode = default(UpgradeMode?)) + { + Mode = mode; + } + + /// + /// Gets or sets the upgrade mode. Possible values include: + /// 'Automatic', 'Manual' + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "mode")] + public UpgradeMode? Mode { get; set; } + + } +} diff --git a/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/Usage.cs b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/Usage.cs new file mode 100644 index 000000000..92461c53f --- /dev/null +++ b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/Usage.cs @@ -0,0 +1,81 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.Compute.Models +{ + using System.Linq; + + /// + /// Describes Compute Resource Usage. + /// + public partial class Usage + { + /// + /// Initializes a new instance of the Usage class. + /// + public Usage() { } + + /// + /// Initializes a new instance of the Usage class. + /// + /// the current value of the usage. + /// the limit of usage. + /// the name of the type of usage. + public Usage(int currentValue, long limit, UsageName name) + { + CurrentValue = currentValue; + Limit = limit; + Name = name; + } + /// + /// Static constructor for Usage class. + /// + static Usage() + { + Unit = "Count"; + } + + /// + /// Gets or sets the current value of the usage. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "currentValue")] + public int CurrentValue { get; set; } + + /// + /// Gets or sets the limit of usage. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "limit")] + public long Limit { get; set; } + + /// + /// Gets or sets the name of the type of usage. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "name")] + public UsageName Name { get; set; } + + /// + /// an enum describing the unit of measurement. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "unit")] + public static string Unit { get; private set; } + + /// + /// Validate the object. + /// + /// + /// Thrown if validation fails + /// + public virtual void Validate() + { + if (Name == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "Name"); + } + } + } +} diff --git a/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/UsageName.cs b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/UsageName.cs new file mode 100644 index 000000000..4a1c4f97d --- /dev/null +++ b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/UsageName.cs @@ -0,0 +1,48 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.Compute.Models +{ + using System.Linq; + + /// + /// The Usage Names. + /// + public partial class UsageName + { + /// + /// Initializes a new instance of the UsageName class. + /// + public UsageName() { } + + /// + /// Initializes a new instance of the UsageName class. + /// + /// a string describing the resource name. + /// a localized string describing the + /// resource name. + public UsageName(string value = default(string), string localizedValue = default(string)) + { + Value = value; + LocalizedValue = localizedValue; + } + + /// + /// Gets or sets a string describing the resource name. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "value")] + public string Value { get; set; } + + /// + /// Gets or sets a localized string describing the resource name. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "localizedValue")] + public string LocalizedValue { get; set; } + + } +} diff --git a/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/VaultCertificate.cs b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/VaultCertificate.cs new file mode 100644 index 000000000..c8b91f6f4 --- /dev/null +++ b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/VaultCertificate.cs @@ -0,0 +1,53 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.Compute.Models +{ + using System.Linq; + + /// + /// Describes a single certificate reference in a Key Vault, and where the + /// certificate should reside on the VM. + /// + public partial class VaultCertificate + { + /// + /// Initializes a new instance of the VaultCertificate class. + /// + public VaultCertificate() { } + + /// + /// Initializes a new instance of the VaultCertificate class. + /// + /// the URL referencing a secret in a Key + /// Vault which contains a properly formatted certificate. + /// the Certificate store in + /// LocalMachine to add the certificate to on Windows, leave empty on + /// Linux. + public VaultCertificate(string certificateUrl = default(string), string certificateStore = default(string)) + { + CertificateUrl = certificateUrl; + CertificateStore = certificateStore; + } + + /// + /// Gets or sets the URL referencing a secret in a Key Vault which + /// contains a properly formatted certificate. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "certificateUrl")] + public string CertificateUrl { get; set; } + + /// + /// Gets or sets the Certificate store in LocalMachine to add the + /// certificate to on Windows, leave empty on Linux. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "certificateStore")] + public string CertificateStore { get; set; } + + } +} diff --git a/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/VaultSecretGroup.cs b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/VaultSecretGroup.cs new file mode 100644 index 000000000..297026412 --- /dev/null +++ b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/VaultSecretGroup.cs @@ -0,0 +1,51 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.Compute.Models +{ + using System.Linq; + + /// + /// Describes a set of certificates which are all in the same Key Vault. + /// + public partial class VaultSecretGroup + { + /// + /// Initializes a new instance of the VaultSecretGroup class. + /// + public VaultSecretGroup() { } + + /// + /// Initializes a new instance of the VaultSecretGroup class. + /// + /// the Relative URL of the Key Vault + /// containing all of the certificates in VaultCertificates. + /// the list of key vault references + /// in SourceVault which contain certificates + public VaultSecretGroup(Microsoft.Rest.Azure.SubResource sourceVault = default(Microsoft.Rest.Azure.SubResource), System.Collections.Generic.IList vaultCertificates = default(System.Collections.Generic.IList)) + { + SourceVault = sourceVault; + VaultCertificates = vaultCertificates; + } + + /// + /// Gets or sets the Relative URL of the Key Vault containing all of + /// the certificates in VaultCertificates. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "sourceVault")] + public Microsoft.Rest.Azure.SubResource SourceVault { get; set; } + + /// + /// Gets or sets the list of key vault references in SourceVault which + /// contain certificates + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "vaultCertificates")] + public System.Collections.Generic.IList VaultCertificates { get; set; } + + } +} diff --git a/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/VirtualHardDisk.cs b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/VirtualHardDisk.cs new file mode 100644 index 000000000..e701924a2 --- /dev/null +++ b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/VirtualHardDisk.cs @@ -0,0 +1,41 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.Compute.Models +{ + using System.Linq; + + /// + /// Describes the uri of a disk. + /// + public partial class VirtualHardDisk + { + /// + /// Initializes a new instance of the VirtualHardDisk class. + /// + public VirtualHardDisk() { } + + /// + /// Initializes a new instance of the VirtualHardDisk class. + /// + /// the virtual hard disk's uri. It should be a + /// valid Uri to a virtual hard disk. + public VirtualHardDisk(string uri = default(string)) + { + Uri = uri; + } + + /// + /// Gets or sets the virtual hard disk's uri. It should be a valid Uri + /// to a virtual hard disk. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "uri")] + public string Uri { get; set; } + + } +} diff --git a/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/VirtualMachineAgentInstanceView.cs b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/VirtualMachineAgentInstanceView.cs new file mode 100644 index 000000000..f4a7e0e17 --- /dev/null +++ b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/VirtualMachineAgentInstanceView.cs @@ -0,0 +1,58 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.Compute.Models +{ + using System.Linq; + + /// + /// The instance view of the VM Agent running on the virtual machine. + /// + public partial class VirtualMachineAgentInstanceView + { + /// + /// Initializes a new instance of the VirtualMachineAgentInstanceView + /// class. + /// + public VirtualMachineAgentInstanceView() { } + + /// + /// Initializes a new instance of the VirtualMachineAgentInstanceView + /// class. + /// + /// the VM Agent full version. + /// the virtual machine extension + /// handler instance view. + /// the resource status information. + public VirtualMachineAgentInstanceView(string vmAgentVersion = default(string), System.Collections.Generic.IList extensionHandlers = default(System.Collections.Generic.IList), System.Collections.Generic.IList statuses = default(System.Collections.Generic.IList)) + { + VmAgentVersion = vmAgentVersion; + ExtensionHandlers = extensionHandlers; + Statuses = statuses; + } + + /// + /// Gets or sets the VM Agent full version. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "vmAgentVersion")] + public string VmAgentVersion { get; set; } + + /// + /// Gets or sets the virtual machine extension handler instance view. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "extensionHandlers")] + public System.Collections.Generic.IList ExtensionHandlers { get; set; } + + /// + /// Gets or sets the resource status information. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "statuses")] + public System.Collections.Generic.IList Statuses { get; set; } + + } +} diff --git a/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/VirtualMachineCaptureParametersInner.cs b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/VirtualMachineCaptureParametersInner.cs new file mode 100644 index 000000000..218b38f74 --- /dev/null +++ b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/VirtualMachineCaptureParametersInner.cs @@ -0,0 +1,78 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.Compute.Models +{ + using System.Linq; + + /// + /// Capture Virtual Machine parameters. + /// + public partial class VirtualMachineCaptureParametersInner + { + /// + /// Initializes a new instance of the + /// VirtualMachineCaptureParametersInner class. + /// + public VirtualMachineCaptureParametersInner() { } + + /// + /// Initializes a new instance of the + /// VirtualMachineCaptureParametersInner class. + /// + /// the captured VirtualHardDisk's name + /// prefix. + /// the destination container + /// name. + /// whether it overwrites destination + /// VirtualHardDisk if true, in case of conflict. + public VirtualMachineCaptureParametersInner(string vhdPrefix, string destinationContainerName, bool overwriteVhds) + { + VhdPrefix = vhdPrefix; + DestinationContainerName = destinationContainerName; + OverwriteVhds = overwriteVhds; + } + + /// + /// Gets or sets the captured VirtualHardDisk's name prefix. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "vhdPrefix")] + public string VhdPrefix { get; set; } + + /// + /// Gets or sets the destination container name. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "destinationContainerName")] + public string DestinationContainerName { get; set; } + + /// + /// Gets or sets whether it overwrites destination VirtualHardDisk if + /// true, in case of conflict. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "overwriteVhds")] + public bool OverwriteVhds { get; set; } + + /// + /// Validate the object. + /// + /// + /// Thrown if validation fails + /// + public virtual void Validate() + { + if (VhdPrefix == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "VhdPrefix"); + } + if (DestinationContainerName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "DestinationContainerName"); + } + } + } +} diff --git a/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/VirtualMachineCaptureResultInner.cs b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/VirtualMachineCaptureResultInner.cs new file mode 100644 index 000000000..8a366f051 --- /dev/null +++ b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/VirtualMachineCaptureResultInner.cs @@ -0,0 +1,43 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.Compute.Models +{ + using System.Linq; + + /// + /// Resource Id. + /// + [Microsoft.Rest.Serialization.JsonTransformation] + public partial class VirtualMachineCaptureResultInner : Microsoft.Rest.Azure.SubResource + { + /// + /// Initializes a new instance of the VirtualMachineCaptureResultInner + /// class. + /// + public VirtualMachineCaptureResultInner() { } + + /// + /// Initializes a new instance of the VirtualMachineCaptureResultInner + /// class. + /// + /// Operation output data (raw JSON) + public VirtualMachineCaptureResultInner(string id = default(string), object output = default(object)) + : base(id) + { + Output = output; + } + + /// + /// Gets or sets operation output data (raw JSON) + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.output")] + public object Output { get; set; } + + } +} diff --git a/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/VirtualMachineExtensionHandlerInstanceView.cs b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/VirtualMachineExtensionHandlerInstanceView.cs new file mode 100644 index 000000000..8afde0b1e --- /dev/null +++ b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/VirtualMachineExtensionHandlerInstanceView.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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.Compute.Models +{ + using System.Linq; + + /// + /// The instance view of a virtual machine extension handler. + /// + public partial class VirtualMachineExtensionHandlerInstanceView + { + /// + /// Initializes a new instance of the + /// VirtualMachineExtensionHandlerInstanceView class. + /// + public VirtualMachineExtensionHandlerInstanceView() { } + + /// + /// Initializes a new instance of the + /// VirtualMachineExtensionHandlerInstanceView class. + /// + /// full type of the extension handler which + /// includes both publisher and type. + /// the type version of the extension + /// handler. + /// the extension handler status. + public VirtualMachineExtensionHandlerInstanceView(string type = default(string), string typeHandlerVersion = default(string), InstanceViewStatus status = default(InstanceViewStatus)) + { + Type = type; + TypeHandlerVersion = typeHandlerVersion; + Status = status; + } + + /// + /// Gets or sets full type of the extension handler which includes + /// both publisher and type. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "type")] + public string Type { get; set; } + + /// + /// Gets or sets the type version of the extension handler. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "typeHandlerVersion")] + public string TypeHandlerVersion { get; set; } + + /// + /// Gets or sets the extension handler status. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "status")] + public InstanceViewStatus Status { get; set; } + + } +} diff --git a/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/VirtualMachineExtensionImageInner.cs b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/VirtualMachineExtensionImageInner.cs new file mode 100644 index 000000000..629ad096c --- /dev/null +++ b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/VirtualMachineExtensionImageInner.cs @@ -0,0 +1,111 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.Compute.Models +{ + using System.Linq; + + /// + /// Describes a Virtual Machine Extension Image. + /// + [Microsoft.Rest.Serialization.JsonTransformation] + public partial class VirtualMachineExtensionImageInner : Microsoft.Rest.Azure.Resource + { + /// + /// Initializes a new instance of the + /// VirtualMachineExtensionImageInner class. + /// + public VirtualMachineExtensionImageInner() { } + + /// + /// Initializes a new instance of the + /// VirtualMachineExtensionImageInner class. + /// + /// the operating system this extension + /// supports. + /// the type of role (IaaS or PaaS) this + /// extension supports. + /// the schema defined by publisher, where + /// extension consumers should provide settings in a matching + /// schema. + /// whether the extension can be used + /// on xRP VMScaleSets.By default existing extensions are usable on + /// scalesets, but there might be cases where a publisher wants to + /// explicitly indicate the extension is only enabled for CRP VMs but + /// not VMSS. + /// whether the handler can + /// support multiple extensions. + public VirtualMachineExtensionImageInner(string operatingSystem, string computeRole, string handlerSchema, string location = default(string), string id = default(string), string name = default(string), string type = default(string), System.Collections.Generic.IDictionary tags = default(System.Collections.Generic.IDictionary), bool? vmScaleSetEnabled = default(bool?), bool? supportsMultipleExtensions = default(bool?)) + : base(location, id, name, type, tags) + { + OperatingSystem = operatingSystem; + ComputeRole = computeRole; + HandlerSchema = handlerSchema; + VmScaleSetEnabled = vmScaleSetEnabled; + SupportsMultipleExtensions = supportsMultipleExtensions; + } + + /// + /// Gets or sets the operating system this extension supports. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.operatingSystem")] + public string OperatingSystem { get; set; } + + /// + /// Gets or sets the type of role (IaaS or PaaS) this extension + /// supports. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.computeRole")] + public string ComputeRole { get; set; } + + /// + /// Gets or sets the schema defined by publisher, where extension + /// consumers should provide settings in a matching schema. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.handlerSchema")] + public string HandlerSchema { get; set; } + + /// + /// Gets or sets whether the extension can be used on xRP + /// VMScaleSets.By default existing extensions are usable on + /// scalesets, but there might be cases where a publisher wants to + /// explicitly indicate the extension is only enabled for CRP VMs but + /// not VMSS. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.vmScaleSetEnabled")] + public bool? VmScaleSetEnabled { get; set; } + + /// + /// Gets or sets whether the handler can support multiple extensions. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.supportsMultipleExtensions")] + public bool? SupportsMultipleExtensions { get; set; } + + /// + /// Validate the object. + /// + /// + /// Thrown if validation fails + /// + public virtual void Validate() + { + if (OperatingSystem == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "OperatingSystem"); + } + if (ComputeRole == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "ComputeRole"); + } + if (HandlerSchema == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "HandlerSchema"); + } + } + } +} diff --git a/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/VirtualMachineExtensionInner.cs b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/VirtualMachineExtensionInner.cs new file mode 100644 index 000000000..265762b61 --- /dev/null +++ b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/VirtualMachineExtensionInner.cs @@ -0,0 +1,120 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.Compute.Models +{ + using System.Linq; + + /// + /// Describes a Virtual Machine Extension. + /// + [Microsoft.Rest.Serialization.JsonTransformation] + public partial class VirtualMachineExtensionInner : Microsoft.Rest.Azure.Resource + { + /// + /// Initializes a new instance of the VirtualMachineExtensionInner + /// class. + /// + public VirtualMachineExtensionInner() { } + + /// + /// Initializes a new instance of the VirtualMachineExtensionInner + /// class. + /// + /// how the extension handler should be + /// forced to update even if the extension configuration has not + /// changed. + /// the name of the extension handler + /// publisher. + /// the type of the + /// extension handler. + /// the type version of the extension + /// handler. + /// whether the extension + /// handler should be automatically upgraded across minor + /// versions. + /// Json formatted public settings for the + /// extension. + /// Json formatted protected settings + /// for the extension. + /// the provisioning state, which only + /// appears in the response. + /// the virtual machine extension instance + /// view. + public VirtualMachineExtensionInner(string location = default(string), string id = default(string), string name = default(string), string type = default(string), System.Collections.Generic.IDictionary tags = default(System.Collections.Generic.IDictionary), string forceUpdateTag = default(string), string publisher = default(string), string virtualMachineExtensionType = default(string), string typeHandlerVersion = default(string), bool? autoUpgradeMinorVersion = default(bool?), object settings = default(object), object protectedSettings = default(object), string provisioningState = default(string), VirtualMachineExtensionInstanceView instanceView = default(VirtualMachineExtensionInstanceView)) + : base(location, id, name, type, tags) + { + ForceUpdateTag = forceUpdateTag; + Publisher = publisher; + VirtualMachineExtensionType = virtualMachineExtensionType; + TypeHandlerVersion = typeHandlerVersion; + AutoUpgradeMinorVersion = autoUpgradeMinorVersion; + Settings = settings; + ProtectedSettings = protectedSettings; + ProvisioningState = provisioningState; + InstanceView = instanceView; + } + + /// + /// Gets or sets how the extension handler should be forced to update + /// even if the extension configuration has not changed. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.forceUpdateTag")] + public string ForceUpdateTag { get; set; } + + /// + /// Gets or sets the name of the extension handler publisher. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.publisher")] + public string Publisher { get; set; } + + /// + /// Gets or sets the type of the extension handler. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.type")] + public string VirtualMachineExtensionType { get; set; } + + /// + /// Gets or sets the type version of the extension handler. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.typeHandlerVersion")] + public string TypeHandlerVersion { get; set; } + + /// + /// Gets or sets whether the extension handler should be automatically + /// upgraded across minor versions. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.autoUpgradeMinorVersion")] + public bool? AutoUpgradeMinorVersion { get; set; } + + /// + /// Gets or sets json formatted public settings for the extension. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.settings")] + public object Settings { get; set; } + + /// + /// Gets or sets json formatted protected settings for the extension. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.protectedSettings")] + public object ProtectedSettings { get; set; } + + /// + /// Gets the provisioning state, which only appears in the response. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.provisioningState")] + public string ProvisioningState { get; private set; } + + /// + /// Gets or sets the virtual machine extension instance view. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.instanceView")] + public VirtualMachineExtensionInstanceView InstanceView { get; set; } + + } +} diff --git a/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/VirtualMachineExtensionInstanceView.cs b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/VirtualMachineExtensionInstanceView.cs new file mode 100644 index 000000000..9738f07a9 --- /dev/null +++ b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/VirtualMachineExtensionInstanceView.cs @@ -0,0 +1,76 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.Compute.Models +{ + using System.Linq; + + /// + /// The instance view of a virtual machine extension. + /// + public partial class VirtualMachineExtensionInstanceView + { + /// + /// Initializes a new instance of the + /// VirtualMachineExtensionInstanceView class. + /// + public VirtualMachineExtensionInstanceView() { } + + /// + /// Initializes a new instance of the + /// VirtualMachineExtensionInstanceView class. + /// + /// the virtual machine extension name. + /// the full type of the extension handler which + /// includes both publisher and type. + /// the type version of the extension + /// handler. + /// the resource status information. + /// the resource status information. + public VirtualMachineExtensionInstanceView(string name = default(string), string type = default(string), string typeHandlerVersion = default(string), System.Collections.Generic.IList substatuses = default(System.Collections.Generic.IList), System.Collections.Generic.IList statuses = default(System.Collections.Generic.IList)) + { + Name = name; + Type = type; + TypeHandlerVersion = typeHandlerVersion; + Substatuses = substatuses; + Statuses = statuses; + } + + /// + /// Gets or sets the virtual machine extension name. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "name")] + public string Name { get; set; } + + /// + /// Gets or sets the full type of the extension handler which includes + /// both publisher and type. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "type")] + public string Type { get; set; } + + /// + /// Gets or sets the type version of the extension handler. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "typeHandlerVersion")] + public string TypeHandlerVersion { get; set; } + + /// + /// Gets or sets the resource status information. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "substatuses")] + public System.Collections.Generic.IList Substatuses { get; set; } + + /// + /// Gets or sets the resource status information. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "statuses")] + public System.Collections.Generic.IList Statuses { get; set; } + + } +} diff --git a/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/VirtualMachineImageInner.cs b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/VirtualMachineImageInner.cs new file mode 100644 index 000000000..b68c0e38b --- /dev/null +++ b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/VirtualMachineImageInner.cs @@ -0,0 +1,72 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.Compute.Models +{ + using System.Linq; + + /// + /// Describes a Virtual Machine Image. + /// + [Microsoft.Rest.Serialization.JsonTransformation] + public partial class VirtualMachineImageInner : VirtualMachineImageResourceInner + { + /// + /// Initializes a new instance of the VirtualMachineImageInner class. + /// + public VirtualMachineImageInner() { } + + /// + /// Initializes a new instance of the VirtualMachineImageInner class. + /// + /// the name of the resource. + /// the location of the resource. + /// the tags attached to the resource. + public VirtualMachineImageInner(string name, string location, string id = default(string), System.Collections.Generic.IDictionary tags = default(System.Collections.Generic.IDictionary), PurchasePlan plan = default(PurchasePlan), OSDiskImage osDiskImage = default(OSDiskImage), System.Collections.Generic.IList dataDiskImages = default(System.Collections.Generic.IList)) + : base(name, location, id, tags) + { + Plan = plan; + OsDiskImage = osDiskImage; + DataDiskImages = dataDiskImages; + } + + /// + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.plan")] + public PurchasePlan Plan { get; set; } + + /// + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.osDiskImage")] + public OSDiskImage OsDiskImage { get; set; } + + /// + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.dataDiskImages")] + public System.Collections.Generic.IList DataDiskImages { get; set; } + + /// + /// Validate the object. + /// + /// + /// Thrown if validation fails + /// + public override void Validate() + { + base.Validate(); + if (this.Plan != null) + { + this.Plan.Validate(); + } + if (this.OsDiskImage != null) + { + this.OsDiskImage.Validate(); + } + } + } +} diff --git a/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/VirtualMachineImageResourceInner.cs b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/VirtualMachineImageResourceInner.cs new file mode 100644 index 000000000..9917a12b7 --- /dev/null +++ b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/VirtualMachineImageResourceInner.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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.Compute.Models +{ + using System.Linq; + + /// + /// Virtual machine image resource information. + /// + public partial class VirtualMachineImageResourceInner : Microsoft.Rest.Azure.SubResource + { + /// + /// Initializes a new instance of the VirtualMachineImageResourceInner + /// class. + /// + public VirtualMachineImageResourceInner() { } + + /// + /// Initializes a new instance of the VirtualMachineImageResourceInner + /// class. + /// + /// the name of the resource. + /// the location of the resource. + /// the tags attached to the resource. + public VirtualMachineImageResourceInner(string name, string location, string id = default(string), System.Collections.Generic.IDictionary tags = default(System.Collections.Generic.IDictionary)) + : base(id) + { + Name = name; + Location = location; + Tags = tags; + } + + /// + /// Gets or sets the name of the resource. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "name")] + public string Name { get; set; } + + /// + /// Gets or sets the location of the resource. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "location")] + public string Location { get; set; } + + /// + /// Gets or sets the tags attached to the resource. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "tags")] + public System.Collections.Generic.IDictionary Tags { get; set; } + + /// + /// Validate the object. + /// + /// + /// Thrown if validation fails + /// + public virtual void Validate() + { + if (Name == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "Name"); + } + if (Location == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "Location"); + } + } + } +} diff --git a/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/VirtualMachineInner.cs b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/VirtualMachineInner.cs new file mode 100644 index 000000000..8e61e09f5 --- /dev/null +++ b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/VirtualMachineInner.cs @@ -0,0 +1,151 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.Compute.Models +{ + using System.Linq; + + /// + /// Describes a Virtual Machine. + /// + [Microsoft.Rest.Serialization.JsonTransformation] + public partial class VirtualMachineInner : Microsoft.Rest.Azure.Resource + { + /// + /// Initializes a new instance of the VirtualMachineInner class. + /// + public VirtualMachineInner() { } + + /// + /// Initializes a new instance of the VirtualMachineInner class. + /// + /// the purchase plan when deploying virtual + /// machine from VM Marketplace images. + /// the hardware profile. + /// the storage profile. + /// the OS profile. + /// the network profile. + /// the diagnostics profile. + /// the reference Id of the availability + /// set to which this virtual machine belongs. + /// the provisioning state, which only + /// appears in the response. + /// the virtual machine instance + /// view. + /// the license type, which is for bring + /// your own license scenario. + /// the virtual machine unique id. + /// the virtual machine child extension + /// resources. + public VirtualMachineInner(string location = default(string), string id = default(string), string name = default(string), string type = default(string), System.Collections.Generic.IDictionary tags = default(System.Collections.Generic.IDictionary), Plan plan = default(Plan), HardwareProfile hardwareProfile = default(HardwareProfile), StorageProfile storageProfile = default(StorageProfile), OSProfile osProfile = default(OSProfile), NetworkProfile networkProfile = default(NetworkProfile), DiagnosticsProfile diagnosticsProfile = default(DiagnosticsProfile), Microsoft.Rest.Azure.SubResource availabilitySet = default(Microsoft.Rest.Azure.SubResource), string provisioningState = default(string), VirtualMachineInstanceView instanceView = default(VirtualMachineInstanceView), string licenseType = default(string), string vmId = default(string), System.Collections.Generic.IList resources = default(System.Collections.Generic.IList)) + : base(location, id, name, type, tags) + { + Plan = plan; + HardwareProfile = hardwareProfile; + StorageProfile = storageProfile; + OsProfile = osProfile; + NetworkProfile = networkProfile; + DiagnosticsProfile = diagnosticsProfile; + AvailabilitySet = availabilitySet; + ProvisioningState = provisioningState; + InstanceView = instanceView; + LicenseType = licenseType; + VmId = vmId; + Resources = resources; + } + + /// + /// Gets or sets the purchase plan when deploying virtual machine from + /// VM Marketplace images. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "plan")] + public Plan Plan { get; set; } + + /// + /// Gets or sets the hardware profile. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.hardwareProfile")] + public HardwareProfile HardwareProfile { get; set; } + + /// + /// Gets or sets the storage profile. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.storageProfile")] + public StorageProfile StorageProfile { get; set; } + + /// + /// Gets or sets the OS profile. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.osProfile")] + public OSProfile OsProfile { get; set; } + + /// + /// Gets or sets the network profile. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.networkProfile")] + public NetworkProfile NetworkProfile { get; set; } + + /// + /// Gets or sets the diagnostics profile. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.diagnosticsProfile")] + public DiagnosticsProfile DiagnosticsProfile { get; set; } + + /// + /// Gets or sets the reference Id of the availability set to which + /// this virtual machine belongs. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.availabilitySet")] + public Microsoft.Rest.Azure.SubResource AvailabilitySet { get; set; } + + /// + /// Gets the provisioning state, which only appears in the response. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.provisioningState")] + public string ProvisioningState { get; private set; } + + /// + /// Gets the virtual machine instance view. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.instanceView")] + public VirtualMachineInstanceView InstanceView { get; private set; } + + /// + /// Gets or sets the license type, which is for bring your own license + /// scenario. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.licenseType")] + public string LicenseType { get; set; } + + /// + /// Gets the virtual machine unique id. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.vmId")] + public string VmId { get; private set; } + + /// + /// Gets the virtual machine child extension resources. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "resources")] + public System.Collections.Generic.IList Resources { get; private set; } + + /// + /// Validate the object. + /// + /// + /// Thrown if validation fails + /// + public virtual void Validate() + { + if (this.StorageProfile != null) + { + this.StorageProfile.Validate(); + } + } + } +} diff --git a/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/VirtualMachineInstanceView.cs b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/VirtualMachineInstanceView.cs new file mode 100644 index 000000000..bf4c32216 --- /dev/null +++ b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/VirtualMachineInstanceView.cs @@ -0,0 +1,97 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.Compute.Models +{ + using System.Linq; + + /// + /// The instance view of a virtual machine. + /// + public partial class VirtualMachineInstanceView + { + /// + /// Initializes a new instance of the VirtualMachineInstanceView class. + /// + public VirtualMachineInstanceView() { } + + /// + /// Initializes a new instance of the VirtualMachineInstanceView class. + /// + /// the Update Domain count. + /// the Fault Domain count. + /// the Remote desktop certificate + /// thumbprint. + /// the VM Agent running on the virtual + /// machine. + /// the disks information. + /// the extensions information. + /// the boot diagnostics. + /// the resource status information. + public VirtualMachineInstanceView(int? platformUpdateDomain = default(int?), int? platformFaultDomain = default(int?), string rdpThumbPrint = default(string), VirtualMachineAgentInstanceView vmAgent = default(VirtualMachineAgentInstanceView), System.Collections.Generic.IList disks = default(System.Collections.Generic.IList), System.Collections.Generic.IList extensions = default(System.Collections.Generic.IList), BootDiagnosticsInstanceView bootDiagnostics = default(BootDiagnosticsInstanceView), System.Collections.Generic.IList statuses = default(System.Collections.Generic.IList)) + { + PlatformUpdateDomain = platformUpdateDomain; + PlatformFaultDomain = platformFaultDomain; + RdpThumbPrint = rdpThumbPrint; + VmAgent = vmAgent; + Disks = disks; + Extensions = extensions; + BootDiagnostics = bootDiagnostics; + Statuses = statuses; + } + + /// + /// Gets or sets the Update Domain count. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "platformUpdateDomain")] + public int? PlatformUpdateDomain { get; set; } + + /// + /// Gets or sets the Fault Domain count. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "platformFaultDomain")] + public int? PlatformFaultDomain { get; set; } + + /// + /// Gets or sets the Remote desktop certificate thumbprint. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "rdpThumbPrint")] + public string RdpThumbPrint { get; set; } + + /// + /// Gets or sets the VM Agent running on the virtual machine. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "vmAgent")] + public VirtualMachineAgentInstanceView VmAgent { get; set; } + + /// + /// Gets or sets the disks information. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "disks")] + public System.Collections.Generic.IList Disks { get; set; } + + /// + /// Gets or sets the extensions information. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "extensions")] + public System.Collections.Generic.IList Extensions { get; set; } + + /// + /// Gets or sets the boot diagnostics. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "bootDiagnostics")] + public BootDiagnosticsInstanceView BootDiagnostics { get; set; } + + /// + /// Gets or sets the resource status information. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "statuses")] + public System.Collections.Generic.IList Statuses { get; set; } + + } +} diff --git a/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/VirtualMachineListResultInner.cs b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/VirtualMachineListResultInner.cs new file mode 100644 index 000000000..950b9507a --- /dev/null +++ b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/VirtualMachineListResultInner.cs @@ -0,0 +1,52 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.Compute.Models +{ + using System.Linq; + + /// + /// The List Virtual Machine operation response. + /// + public partial class VirtualMachineListResultInner + { + /// + /// Initializes a new instance of the VirtualMachineListResultInner + /// class. + /// + public VirtualMachineListResultInner() { } + + /// + /// Initializes a new instance of the VirtualMachineListResultInner + /// class. + /// + /// the list of virtual machines. + /// the uri to fetch the next page of VMs. Call + /// ListNext() with this to fetch the next page of Virtual + /// Machines. + public VirtualMachineListResultInner(System.Collections.Generic.IList value = default(System.Collections.Generic.IList), string nextLink = default(string)) + { + Value = value; + NextLink = nextLink; + } + + /// + /// Gets or sets the list of virtual machines. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "value")] + public System.Collections.Generic.IList Value { get; set; } + + /// + /// Gets or sets the uri to fetch the next page of VMs. Call + /// ListNext() with this to fetch the next page of Virtual Machines. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "nextLink")] + public string NextLink { get; set; } + + } +} diff --git a/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/VirtualMachineScaleSetExtensionInner.cs b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/VirtualMachineScaleSetExtensionInner.cs new file mode 100644 index 000000000..641d19fcf --- /dev/null +++ b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/VirtualMachineScaleSetExtensionInner.cs @@ -0,0 +1,107 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.Compute.Models +{ + using System.Linq; + + /// + /// Describes a Virtual Machine Scale Set Extension. + /// + [Microsoft.Rest.Serialization.JsonTransformation] + public partial class VirtualMachineScaleSetExtensionInner : Microsoft.Rest.Azure.SubResource + { + /// + /// Initializes a new instance of the + /// VirtualMachineScaleSetExtensionInner class. + /// + public VirtualMachineScaleSetExtensionInner() { } + + /// + /// Initializes a new instance of the + /// VirtualMachineScaleSetExtensionInner class. + /// + /// the name of the extension. + /// the name of the extension handler + /// publisher. + /// the type of the extension handler. + /// the type version of the extension + /// handler. + /// whether the extension + /// handler should be automatically upgraded across minor + /// versions. + /// Json formatted public settings for the + /// extension. + /// Json formatted protected settings + /// for the extension. + /// the provisioning state, which only + /// appears in the response. + public VirtualMachineScaleSetExtensionInner(string id = default(string), string name = default(string), string publisher = default(string), string type = default(string), string typeHandlerVersion = default(string), bool? autoUpgradeMinorVersion = default(bool?), object settings = default(object), object protectedSettings = default(object), string provisioningState = default(string)) + : base(id) + { + Name = name; + Publisher = publisher; + Type = type; + TypeHandlerVersion = typeHandlerVersion; + AutoUpgradeMinorVersion = autoUpgradeMinorVersion; + Settings = settings; + ProtectedSettings = protectedSettings; + ProvisioningState = provisioningState; + } + + /// + /// Gets or sets the name of the extension. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "name")] + public string Name { get; set; } + + /// + /// Gets or sets the name of the extension handler publisher. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.publisher")] + public string Publisher { get; set; } + + /// + /// Gets or sets the type of the extension handler. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.type")] + public string Type { get; set; } + + /// + /// Gets or sets the type version of the extension handler. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.typeHandlerVersion")] + public string TypeHandlerVersion { get; set; } + + /// + /// Gets or sets whether the extension handler should be automatically + /// upgraded across minor versions. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.autoUpgradeMinorVersion")] + public bool? AutoUpgradeMinorVersion { get; set; } + + /// + /// Gets or sets json formatted public settings for the extension. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.settings")] + public object Settings { get; set; } + + /// + /// Gets or sets json formatted protected settings for the extension. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.protectedSettings")] + public object ProtectedSettings { get; set; } + + /// + /// Gets the provisioning state, which only appears in the response. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.provisioningState")] + public string ProvisioningState { get; private set; } + + } +} diff --git a/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/VirtualMachineScaleSetExtensionProfile.cs b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/VirtualMachineScaleSetExtensionProfile.cs new file mode 100644 index 000000000..11be7163d --- /dev/null +++ b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/VirtualMachineScaleSetExtensionProfile.cs @@ -0,0 +1,43 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.Compute.Models +{ + using System.Linq; + + /// + /// Describes a virtual machine scale set extension profile. + /// + public partial class VirtualMachineScaleSetExtensionProfile + { + /// + /// Initializes a new instance of the + /// VirtualMachineScaleSetExtensionProfile class. + /// + public VirtualMachineScaleSetExtensionProfile() { } + + /// + /// Initializes a new instance of the + /// VirtualMachineScaleSetExtensionProfile class. + /// + /// the virtual machine scale set child + /// extension resources. + public VirtualMachineScaleSetExtensionProfile(System.Collections.Generic.IList extensions = default(System.Collections.Generic.IList)) + { + Extensions = extensions; + } + + /// + /// Gets or sets the virtual machine scale set child extension + /// resources. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "extensions")] + public System.Collections.Generic.IList Extensions { get; set; } + + } +} diff --git a/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/VirtualMachineScaleSetIPConfigurationInner.cs b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/VirtualMachineScaleSetIPConfigurationInner.cs new file mode 100644 index 000000000..2cf535d61 --- /dev/null +++ b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/VirtualMachineScaleSetIPConfigurationInner.cs @@ -0,0 +1,96 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.Compute.Models +{ + using System.Linq; + + /// + /// Describes a virtual machine scale set network profile's IP + /// configuration. + /// + [Microsoft.Rest.Serialization.JsonTransformation] + public partial class VirtualMachineScaleSetIPConfigurationInner : Microsoft.Rest.Azure.SubResource + { + /// + /// Initializes a new instance of the + /// VirtualMachineScaleSetIPConfigurationInner class. + /// + public VirtualMachineScaleSetIPConfigurationInner() { } + + /// + /// Initializes a new instance of the + /// VirtualMachineScaleSetIPConfigurationInner class. + /// + /// the IP configuration name. + /// the subnet. + /// the + /// application gateway backend address pools. + /// the load balancer + /// backend address pools. + /// the load balancer + /// inbound nat pools. + public VirtualMachineScaleSetIPConfigurationInner(string name, ApiEntityReference subnet, string id = default(string), System.Collections.Generic.IList applicationGatewayBackendAddressPools = default(System.Collections.Generic.IList), System.Collections.Generic.IList loadBalancerBackendAddressPools = default(System.Collections.Generic.IList), System.Collections.Generic.IList loadBalancerInboundNatPools = default(System.Collections.Generic.IList)) + : base(id) + { + Name = name; + Subnet = subnet; + ApplicationGatewayBackendAddressPools = applicationGatewayBackendAddressPools; + LoadBalancerBackendAddressPools = loadBalancerBackendAddressPools; + LoadBalancerInboundNatPools = loadBalancerInboundNatPools; + } + + /// + /// Gets or sets the IP configuration name. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "name")] + public string Name { get; set; } + + /// + /// Gets or sets the subnet. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.subnet")] + public ApiEntityReference Subnet { get; set; } + + /// + /// Gets or sets the application gateway backend address pools. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.applicationGatewayBackendAddressPools")] + public System.Collections.Generic.IList ApplicationGatewayBackendAddressPools { get; set; } + + /// + /// Gets or sets the load balancer backend address pools. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.loadBalancerBackendAddressPools")] + public System.Collections.Generic.IList LoadBalancerBackendAddressPools { get; set; } + + /// + /// Gets or sets the load balancer inbound nat pools. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.loadBalancerInboundNatPools")] + public System.Collections.Generic.IList LoadBalancerInboundNatPools { get; set; } + + /// + /// Validate the object. + /// + /// + /// Thrown if validation fails + /// + public virtual void Validate() + { + if (Name == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "Name"); + } + if (Subnet == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "Subnet"); + } + } + } +} diff --git a/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/VirtualMachineScaleSetInner.cs b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/VirtualMachineScaleSetInner.cs new file mode 100644 index 000000000..10c6974cd --- /dev/null +++ b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/VirtualMachineScaleSetInner.cs @@ -0,0 +1,92 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.Compute.Models +{ + using System.Linq; + + /// + /// Describes a Virtual Machine Scale Set. + /// + [Microsoft.Rest.Serialization.JsonTransformation] + public partial class VirtualMachineScaleSetInner : Microsoft.Rest.Azure.Resource + { + /// + /// Initializes a new instance of the VirtualMachineScaleSetInner + /// class. + /// + public VirtualMachineScaleSetInner() { } + + /// + /// Initializes a new instance of the VirtualMachineScaleSetInner + /// class. + /// + /// the virtual machine scale set sku. + /// the upgrade policy. + /// the virtual machine + /// profile. + /// the provisioning state, which only + /// appears in the response. + /// Specifies whether the Virtual Machine + /// Scale Set should be overprovisioned. + public VirtualMachineScaleSetInner(string location = default(string), string id = default(string), string name = default(string), string type = default(string), System.Collections.Generic.IDictionary tags = default(System.Collections.Generic.IDictionary), Sku sku = default(Sku), UpgradePolicy upgradePolicy = default(UpgradePolicy), VirtualMachineScaleSetVMProfile virtualMachineProfile = default(VirtualMachineScaleSetVMProfile), string provisioningState = default(string), bool? overProvision = default(bool?)) + : base(location, id, name, type, tags) + { + Sku = sku; + UpgradePolicy = upgradePolicy; + VirtualMachineProfile = virtualMachineProfile; + ProvisioningState = provisioningState; + OverProvision = overProvision; + } + + /// + /// Gets or sets the virtual machine scale set sku. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "sku")] + public Sku Sku { get; set; } + + /// + /// Gets or sets the upgrade policy. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.upgradePolicy")] + public UpgradePolicy UpgradePolicy { get; set; } + + /// + /// Gets or sets the virtual machine profile. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.virtualMachineProfile")] + public VirtualMachineScaleSetVMProfile VirtualMachineProfile { get; set; } + + /// + /// Gets the provisioning state, which only appears in the response. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.provisioningState")] + public string ProvisioningState { get; private set; } + + /// + /// Gets or sets specifies whether the Virtual Machine Scale Set + /// should be overprovisioned. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.overProvision")] + public bool? OverProvision { get; set; } + + /// + /// Validate the object. + /// + /// + /// Thrown if validation fails + /// + public virtual void Validate() + { + if (this.VirtualMachineProfile != null) + { + this.VirtualMachineProfile.Validate(); + } + } + } +} diff --git a/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/VirtualMachineScaleSetInstanceViewInner.cs b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/VirtualMachineScaleSetInstanceViewInner.cs new file mode 100644 index 000000000..d94723163 --- /dev/null +++ b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/VirtualMachineScaleSetInstanceViewInner.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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.Compute.Models +{ + using System.Linq; + + /// + /// The instance view of a virtual machine scale set. + /// + public partial class VirtualMachineScaleSetInstanceViewInner + { + /// + /// Initializes a new instance of the + /// VirtualMachineScaleSetInstanceViewInner class. + /// + public VirtualMachineScaleSetInstanceViewInner() { } + + /// + /// Initializes a new instance of the + /// VirtualMachineScaleSetInstanceViewInner class. + /// + /// the instance view status summary for + /// the virtual machine scale set. + /// the extensions information. + /// the resource status information. + public VirtualMachineScaleSetInstanceViewInner(VirtualMachineScaleSetInstanceViewStatusesSummary virtualMachine = default(VirtualMachineScaleSetInstanceViewStatusesSummary), System.Collections.Generic.IList extensions = default(System.Collections.Generic.IList), System.Collections.Generic.IList statuses = default(System.Collections.Generic.IList)) + { + VirtualMachine = virtualMachine; + Extensions = extensions; + Statuses = statuses; + } + + /// + /// Gets the instance view status summary for the virtual machine + /// scale set. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "virtualMachine")] + public VirtualMachineScaleSetInstanceViewStatusesSummary VirtualMachine { get; private set; } + + /// + /// Gets the extensions information. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "extensions")] + public System.Collections.Generic.IList Extensions { get; private set; } + + /// + /// Gets or sets the resource status information. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "statuses")] + public System.Collections.Generic.IList Statuses { get; set; } + + } +} diff --git a/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/VirtualMachineScaleSetInstanceViewStatusesSummary.cs b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/VirtualMachineScaleSetInstanceViewStatusesSummary.cs new file mode 100644 index 000000000..61bede8b1 --- /dev/null +++ b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/VirtualMachineScaleSetInstanceViewStatusesSummary.cs @@ -0,0 +1,42 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.Compute.Models +{ + using System.Linq; + + /// + /// Instance view statuses summary for virtual machines of a virtual + /// machine scale set. + /// + public partial class VirtualMachineScaleSetInstanceViewStatusesSummary + { + /// + /// Initializes a new instance of the + /// VirtualMachineScaleSetInstanceViewStatusesSummary class. + /// + public VirtualMachineScaleSetInstanceViewStatusesSummary() { } + + /// + /// Initializes a new instance of the + /// VirtualMachineScaleSetInstanceViewStatusesSummary class. + /// + /// the extensions information. + public VirtualMachineScaleSetInstanceViewStatusesSummary(System.Collections.Generic.IList statusesSummary = default(System.Collections.Generic.IList)) + { + StatusesSummary = statusesSummary; + } + + /// + /// Gets the extensions information. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "statusesSummary")] + public System.Collections.Generic.IList StatusesSummary { get; private set; } + + } +} diff --git a/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/VirtualMachineScaleSetListResultInner.cs b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/VirtualMachineScaleSetListResultInner.cs new file mode 100644 index 000000000..5606b8262 --- /dev/null +++ b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/VirtualMachineScaleSetListResultInner.cs @@ -0,0 +1,53 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.Compute.Models +{ + using System.Linq; + + /// + /// The List Virtual Machine operation response. + /// + public partial class VirtualMachineScaleSetListResultInner + { + /// + /// Initializes a new instance of the + /// VirtualMachineScaleSetListResultInner class. + /// + public VirtualMachineScaleSetListResultInner() { } + + /// + /// Initializes a new instance of the + /// VirtualMachineScaleSetListResultInner class. + /// + /// the list of virtual machine scale sets. + /// the uri to fetch the next page of Virtual + /// Machine Scale Sets. Call ListNext() with this to fetch the next + /// page of VMSS. + public VirtualMachineScaleSetListResultInner(System.Collections.Generic.IList value = default(System.Collections.Generic.IList), string nextLink = default(string)) + { + Value = value; + NextLink = nextLink; + } + + /// + /// Gets or sets the list of virtual machine scale sets. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "value")] + public System.Collections.Generic.IList Value { get; set; } + + /// + /// Gets or sets the uri to fetch the next page of Virtual Machine + /// Scale Sets. Call ListNext() with this to fetch the next page of + /// VMSS. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "nextLink")] + public string NextLink { get; set; } + + } +} diff --git a/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/VirtualMachineScaleSetListSkusResultInner.cs b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/VirtualMachineScaleSetListSkusResultInner.cs new file mode 100644 index 000000000..9eba6ecaa --- /dev/null +++ b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/VirtualMachineScaleSetListSkusResultInner.cs @@ -0,0 +1,54 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.Compute.Models +{ + using System.Linq; + + /// + /// The Virtual Machine Scale Set List Skus operation response. + /// + public partial class VirtualMachineScaleSetListSkusResultInner + { + /// + /// Initializes a new instance of the + /// VirtualMachineScaleSetListSkusResultInner class. + /// + public VirtualMachineScaleSetListSkusResultInner() { } + + /// + /// Initializes a new instance of the + /// VirtualMachineScaleSetListSkusResultInner class. + /// + /// the list of skus available for the virtual + /// machine scale set. + /// the uri to fetch the next page of Virtual + /// Machine Scale Set Skus. Call ListNext() with this to fetch the + /// next page of VMSS Skus. + public VirtualMachineScaleSetListSkusResultInner(System.Collections.Generic.IList value = default(System.Collections.Generic.IList), string nextLink = default(string)) + { + Value = value; + NextLink = nextLink; + } + + /// + /// Gets the list of skus available for the virtual machine scale set. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "value")] + public System.Collections.Generic.IList Value { get; private set; } + + /// + /// Gets or sets the uri to fetch the next page of Virtual Machine + /// Scale Set Skus. Call ListNext() with this to fetch the next page + /// of VMSS Skus. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "nextLink")] + public string NextLink { get; set; } + + } +} diff --git a/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/VirtualMachineScaleSetListWithLinkResultInner.cs b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/VirtualMachineScaleSetListWithLinkResultInner.cs new file mode 100644 index 000000000..dbd9185af --- /dev/null +++ b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/VirtualMachineScaleSetListWithLinkResultInner.cs @@ -0,0 +1,53 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.Compute.Models +{ + using System.Linq; + + /// + /// The List Virtual Machine operation response. + /// + public partial class VirtualMachineScaleSetListWithLinkResultInner + { + /// + /// Initializes a new instance of the + /// VirtualMachineScaleSetListWithLinkResultInner class. + /// + public VirtualMachineScaleSetListWithLinkResultInner() { } + + /// + /// Initializes a new instance of the + /// VirtualMachineScaleSetListWithLinkResultInner class. + /// + /// the list of virtual machine scale sets. + /// the uri to fetch the next page of Virtual + /// Machine Scale Sets. Call ListNext() with this to fetch the next + /// page of Virtual Machine Scale Sets. + public VirtualMachineScaleSetListWithLinkResultInner(System.Collections.Generic.IList value = default(System.Collections.Generic.IList), string nextLink = default(string)) + { + Value = value; + NextLink = nextLink; + } + + /// + /// Gets or sets the list of virtual machine scale sets. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "value")] + public System.Collections.Generic.IList Value { get; set; } + + /// + /// Gets or sets the uri to fetch the next page of Virtual Machine + /// Scale Sets. Call ListNext() with this to fetch the next page of + /// Virtual Machine Scale Sets. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "nextLink")] + public string NextLink { get; set; } + + } +} diff --git a/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/VirtualMachineScaleSetNetworkConfigurationInner.cs b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/VirtualMachineScaleSetNetworkConfigurationInner.cs new file mode 100644 index 000000000..74b9b248a --- /dev/null +++ b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/VirtualMachineScaleSetNetworkConfigurationInner.cs @@ -0,0 +1,89 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.Compute.Models +{ + using System.Linq; + + /// + /// Describes a virtual machine scale set network profile's network + /// configurations. + /// + [Microsoft.Rest.Serialization.JsonTransformation] + public partial class VirtualMachineScaleSetNetworkConfigurationInner : Microsoft.Rest.Azure.SubResource + { + /// + /// Initializes a new instance of the + /// VirtualMachineScaleSetNetworkConfigurationInner class. + /// + public VirtualMachineScaleSetNetworkConfigurationInner() { } + + /// + /// Initializes a new instance of the + /// VirtualMachineScaleSetNetworkConfigurationInner class. + /// + /// the network configuration name. + /// the virtual machine scale set IP + /// Configuration. + /// whether this is a primary NIC on a virtual + /// machine. + public VirtualMachineScaleSetNetworkConfigurationInner(string name, System.Collections.Generic.IList ipConfigurations, string id = default(string), bool? primary = default(bool?)) + : base(id) + { + Name = name; + Primary = primary; + IpConfigurations = ipConfigurations; + } + + /// + /// Gets or sets the network configuration name. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "name")] + public string Name { get; set; } + + /// + /// Gets or sets whether this is a primary NIC on a virtual machine. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.primary")] + public bool? Primary { get; set; } + + /// + /// Gets or sets the virtual machine scale set IP Configuration. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.ipConfigurations")] + public System.Collections.Generic.IList IpConfigurations { get; set; } + + /// + /// Validate the object. + /// + /// + /// Thrown if validation fails + /// + public virtual void Validate() + { + if (Name == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "Name"); + } + if (IpConfigurations == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "IpConfigurations"); + } + if (this.IpConfigurations != null) + { + foreach (var element in this.IpConfigurations) + { + if (element != null) + { + element.Validate(); + } + } + } + } + } +} diff --git a/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/VirtualMachineScaleSetNetworkProfile.cs b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/VirtualMachineScaleSetNetworkProfile.cs new file mode 100644 index 000000000..9eb6c5734 --- /dev/null +++ b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/VirtualMachineScaleSetNetworkProfile.cs @@ -0,0 +1,42 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.Compute.Models +{ + using System.Linq; + + /// + /// Describes a virtual machine scale set network profile. + /// + public partial class VirtualMachineScaleSetNetworkProfile + { + /// + /// Initializes a new instance of the + /// VirtualMachineScaleSetNetworkProfile class. + /// + public VirtualMachineScaleSetNetworkProfile() { } + + /// + /// Initializes a new instance of the + /// VirtualMachineScaleSetNetworkProfile class. + /// + /// the list of network + /// configurations. + public VirtualMachineScaleSetNetworkProfile(System.Collections.Generic.IList networkInterfaceConfigurations = default(System.Collections.Generic.IList)) + { + NetworkInterfaceConfigurations = networkInterfaceConfigurations; + } + + /// + /// Gets or sets the list of network configurations. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "networkInterfaceConfigurations")] + public System.Collections.Generic.IList NetworkInterfaceConfigurations { get; set; } + + } +} diff --git a/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/VirtualMachineScaleSetOSDisk.cs b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/VirtualMachineScaleSetOSDisk.cs new file mode 100644 index 000000000..d2f093191 --- /dev/null +++ b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/VirtualMachineScaleSetOSDisk.cs @@ -0,0 +1,107 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.Compute.Models +{ + using System.Linq; + + /// + /// Describes a virtual machine scale set operating system disk. + /// + public partial class VirtualMachineScaleSetOSDisk + { + /// + /// Initializes a new instance of the VirtualMachineScaleSetOSDisk + /// class. + /// + public VirtualMachineScaleSetOSDisk() { } + + /// + /// Initializes a new instance of the VirtualMachineScaleSetOSDisk + /// class. + /// + /// the disk name. + /// the create option. Possible values + /// include: 'fromImage', 'empty', 'attach' + /// the caching type. Possible values include: + /// 'None', 'ReadOnly', 'ReadWrite' + /// the Operating System type. Possible values + /// include: 'Windows', 'Linux' + /// the Source User Image VirtualHardDisk. This + /// VirtualHardDisk will be copied before using it to attach to the + /// Virtual Machine.If SourceImage is provided, the destination + /// VirtualHardDisk should not exist. + /// the list of virtual hard disk + /// container uris. + public VirtualMachineScaleSetOSDisk(string name, DiskCreateOptionTypes createOption, CachingTypes? caching = default(CachingTypes?), OperatingSystemTypes? osType = default(OperatingSystemTypes?), VirtualHardDisk image = default(VirtualHardDisk), System.Collections.Generic.IList vhdContainers = default(System.Collections.Generic.IList)) + { + Name = name; + Caching = caching; + CreateOption = createOption; + OsType = osType; + Image = image; + VhdContainers = vhdContainers; + } + + /// + /// Gets or sets the disk name. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "name")] + public string Name { get; set; } + + /// + /// Gets or sets the caching type. Possible values include: 'None', + /// 'ReadOnly', 'ReadWrite' + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "caching")] + public CachingTypes? Caching { get; set; } + + /// + /// Gets or sets the create option. Possible values include: + /// 'fromImage', 'empty', 'attach' + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "createOption")] + public DiskCreateOptionTypes CreateOption { get; set; } + + /// + /// Gets or sets the Operating System type. Possible values include: + /// 'Windows', 'Linux' + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "osType")] + public OperatingSystemTypes? OsType { get; set; } + + /// + /// Gets or sets the Source User Image VirtualHardDisk. This + /// VirtualHardDisk will be copied before using it to attach to the + /// Virtual Machine.If SourceImage is provided, the destination + /// VirtualHardDisk should not exist. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "image")] + public VirtualHardDisk Image { get; set; } + + /// + /// Gets or sets the list of virtual hard disk container uris. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "vhdContainers")] + public System.Collections.Generic.IList VhdContainers { get; set; } + + /// + /// Validate the object. + /// + /// + /// Thrown if validation fails + /// + public virtual void Validate() + { + if (Name == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "Name"); + } + } + } +} diff --git a/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/VirtualMachineScaleSetOSProfile.cs b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/VirtualMachineScaleSetOSProfile.cs new file mode 100644 index 000000000..abbc9c601 --- /dev/null +++ b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/VirtualMachineScaleSetOSProfile.cs @@ -0,0 +1,93 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.Compute.Models +{ + using System.Linq; + + /// + /// Describes a virtual machine scale set OS profile. + /// + public partial class VirtualMachineScaleSetOSProfile + { + /// + /// Initializes a new instance of the VirtualMachineScaleSetOSProfile + /// class. + /// + public VirtualMachineScaleSetOSProfile() { } + + /// + /// Initializes a new instance of the VirtualMachineScaleSetOSProfile + /// class. + /// + /// the computer name prefix. + /// the admin user name. + /// the admin user password. + /// a base-64 encoded string of custom + /// data. + /// the Windows Configuration of + /// the OS profile. + /// the Linux Configuration of the OS + /// profile. + /// the List of certificates for addition to the + /// VM. + public VirtualMachineScaleSetOSProfile(string computerNamePrefix = default(string), string adminUsername = default(string), string adminPassword = default(string), string customData = default(string), WindowsConfiguration windowsConfiguration = default(WindowsConfiguration), LinuxConfiguration linuxConfiguration = default(LinuxConfiguration), System.Collections.Generic.IList secrets = default(System.Collections.Generic.IList)) + { + ComputerNamePrefix = computerNamePrefix; + AdminUsername = adminUsername; + AdminPassword = adminPassword; + CustomData = customData; + WindowsConfiguration = windowsConfiguration; + LinuxConfiguration = linuxConfiguration; + Secrets = secrets; + } + + /// + /// Gets or sets the computer name prefix. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "computerNamePrefix")] + public string ComputerNamePrefix { get; set; } + + /// + /// Gets or sets the admin user name. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "adminUsername")] + public string AdminUsername { get; set; } + + /// + /// Gets or sets the admin user password. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "adminPassword")] + public string AdminPassword { get; set; } + + /// + /// Gets or sets a base-64 encoded string of custom data. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "customData")] + public string CustomData { get; set; } + + /// + /// Gets or sets the Windows Configuration of the OS profile. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "windowsConfiguration")] + public WindowsConfiguration WindowsConfiguration { get; set; } + + /// + /// Gets or sets the Linux Configuration of the OS profile. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "linuxConfiguration")] + public LinuxConfiguration LinuxConfiguration { get; set; } + + /// + /// Gets or sets the List of certificates for addition to the VM. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "secrets")] + public System.Collections.Generic.IList Secrets { get; set; } + + } +} diff --git a/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/VirtualMachineScaleSetSku.cs b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/VirtualMachineScaleSetSku.cs new file mode 100644 index 000000000..8839ddb63 --- /dev/null +++ b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/VirtualMachineScaleSetSku.cs @@ -0,0 +1,56 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.Compute.Models +{ + using System.Linq; + + /// + /// Describes an available virtual machine scale set sku. + /// + public partial class VirtualMachineScaleSetSku + { + /// + /// Initializes a new instance of the VirtualMachineScaleSetSku class. + /// + public VirtualMachineScaleSetSku() { } + + /// + /// Initializes a new instance of the VirtualMachineScaleSetSku class. + /// + /// the type of resource the sku applies + /// to. + /// the Sku. + /// available scaling information. + public VirtualMachineScaleSetSku(string resourceType = default(string), Sku sku = default(Sku), VirtualMachineScaleSetSkuCapacity capacity = default(VirtualMachineScaleSetSkuCapacity)) + { + ResourceType = resourceType; + Sku = sku; + Capacity = capacity; + } + + /// + /// Gets the type of resource the sku applies to. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "resourceType")] + public string ResourceType { get; private set; } + + /// + /// Gets the Sku. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "sku")] + public Sku Sku { get; private set; } + + /// + /// Gets available scaling information. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "capacity")] + public VirtualMachineScaleSetSkuCapacity Capacity { get; private set; } + + } +} diff --git a/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/VirtualMachineScaleSetSkuCapacity.cs b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/VirtualMachineScaleSetSkuCapacity.cs new file mode 100644 index 000000000..21bd2de7e --- /dev/null +++ b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/VirtualMachineScaleSetSkuCapacity.cs @@ -0,0 +1,67 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.Compute.Models +{ + using System.Linq; + + /// + /// Describes scaling information of a sku. + /// + public partial class VirtualMachineScaleSetSkuCapacity + { + /// + /// Initializes a new instance of the + /// VirtualMachineScaleSetSkuCapacity class. + /// + public VirtualMachineScaleSetSkuCapacity() { } + + /// + /// Initializes a new instance of the + /// VirtualMachineScaleSetSkuCapacity class. + /// + /// the minimum capacity. + /// the maximum capacity that can be set. + /// the default capacity. + /// the scale type applicable to the sku. + /// Possible values include: 'Automatic', 'None' + public VirtualMachineScaleSetSkuCapacity(long? minimum = default(long?), long? maximum = default(long?), long? defaultCapacity = default(long?), VirtualMachineScaleSetSkuScaleType? scaleType = default(VirtualMachineScaleSetSkuScaleType?)) + { + Minimum = minimum; + Maximum = maximum; + DefaultCapacity = defaultCapacity; + ScaleType = scaleType; + } + + /// + /// Gets the minimum capacity. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "minimum")] + public long? Minimum { get; private set; } + + /// + /// Gets the maximum capacity that can be set. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "maximum")] + public long? Maximum { get; private set; } + + /// + /// Gets the default capacity. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "defaultCapacity")] + public long? DefaultCapacity { get; private set; } + + /// + /// Gets the scale type applicable to the sku. Possible values + /// include: 'Automatic', 'None' + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "scaleType")] + public VirtualMachineScaleSetSkuScaleType? ScaleType { get; private set; } + + } +} diff --git a/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/VirtualMachineScaleSetSkuScaleType.cs b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/VirtualMachineScaleSetSkuScaleType.cs new file mode 100644 index 000000000..0360deaee --- /dev/null +++ b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/VirtualMachineScaleSetSkuScaleType.cs @@ -0,0 +1,23 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.Compute.Models +{ + + /// + /// Defines values for VirtualMachineScaleSetSkuScaleType. + /// + [Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.StringEnumConverter))] + public enum VirtualMachineScaleSetSkuScaleType + { + [System.Runtime.Serialization.EnumMember(Value = "Automatic")] + Automatic, + [System.Runtime.Serialization.EnumMember(Value = "None")] + None + } +} diff --git a/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/VirtualMachineScaleSetStorageProfile.cs b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/VirtualMachineScaleSetStorageProfile.cs new file mode 100644 index 000000000..ee66cdbfb --- /dev/null +++ b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/VirtualMachineScaleSetStorageProfile.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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.Compute.Models +{ + using System.Linq; + + /// + /// Describes a virtual machine scale set storage profile. + /// + public partial class VirtualMachineScaleSetStorageProfile + { + /// + /// Initializes a new instance of the + /// VirtualMachineScaleSetStorageProfile class. + /// + public VirtualMachineScaleSetStorageProfile() { } + + /// + /// Initializes a new instance of the + /// VirtualMachineScaleSetStorageProfile class. + /// + /// the image reference. + /// the OS disk. + public VirtualMachineScaleSetStorageProfile(ImageReference imageReference = default(ImageReference), VirtualMachineScaleSetOSDisk osDisk = default(VirtualMachineScaleSetOSDisk)) + { + ImageReference = imageReference; + OsDisk = osDisk; + } + + /// + /// Gets or sets the image reference. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "imageReference")] + public ImageReference ImageReference { get; set; } + + /// + /// Gets or sets the OS disk. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "osDisk")] + public VirtualMachineScaleSetOSDisk OsDisk { get; set; } + + /// + /// Validate the object. + /// + /// + /// Thrown if validation fails + /// + public virtual void Validate() + { + if (this.OsDisk != null) + { + this.OsDisk.Validate(); + } + } + } +} diff --git a/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/VirtualMachineScaleSetVMExtensionsSummary.cs b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/VirtualMachineScaleSetVMExtensionsSummary.cs new file mode 100644 index 000000000..38b3d1a9d --- /dev/null +++ b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/VirtualMachineScaleSetVMExtensionsSummary.cs @@ -0,0 +1,49 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.Compute.Models +{ + using System.Linq; + + /// + /// Extensions summary for virtual machines of a virtual machine scale set. + /// + public partial class VirtualMachineScaleSetVMExtensionsSummary + { + /// + /// Initializes a new instance of the + /// VirtualMachineScaleSetVMExtensionsSummary class. + /// + public VirtualMachineScaleSetVMExtensionsSummary() { } + + /// + /// Initializes a new instance of the + /// VirtualMachineScaleSetVMExtensionsSummary class. + /// + /// the extension name. + /// the extensions information. + public VirtualMachineScaleSetVMExtensionsSummary(string name = default(string), System.Collections.Generic.IList statusesSummary = default(System.Collections.Generic.IList)) + { + Name = name; + StatusesSummary = statusesSummary; + } + + /// + /// Gets the extension name. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "name")] + public string Name { get; private set; } + + /// + /// Gets the extensions information. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "statusesSummary")] + public System.Collections.Generic.IList StatusesSummary { get; private set; } + + } +} diff --git a/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/VirtualMachineScaleSetVMInner.cs b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/VirtualMachineScaleSetVMInner.cs new file mode 100644 index 000000000..2f75f2f0a --- /dev/null +++ b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/VirtualMachineScaleSetVMInner.cs @@ -0,0 +1,171 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.Compute.Models +{ + using System.Linq; + + /// + /// Describes a virtual machine scale set virtual machine. + /// + [Microsoft.Rest.Serialization.JsonTransformation] + public partial class VirtualMachineScaleSetVMInner : Microsoft.Rest.Azure.Resource + { + /// + /// Initializes a new instance of the VirtualMachineScaleSetVMInner + /// class. + /// + public VirtualMachineScaleSetVMInner() { } + + /// + /// Initializes a new instance of the VirtualMachineScaleSetVMInner + /// class. + /// + /// the virtual machine instance id. + /// the virtual machine sku. + /// Specifies whether the latest + /// model has been applied to the virtual machine. + /// the virtual machine instance + /// view. + /// the hardware profile. + /// the storage profile. + /// the OS profile. + /// the network profile. + /// the diagnostics profile. + /// the reference Id of the availability + /// set to which this virtual machine belongs. + /// the provisioning state, which only + /// appears in the response. + /// the license type, which is for bring + /// your own license scenario. + /// the purchase plan when deploying virtual + /// machine from VM Marketplace images. + /// the virtual machine child extension + /// resources. + public VirtualMachineScaleSetVMInner(string location = default(string), string id = default(string), string name = default(string), string type = default(string), System.Collections.Generic.IDictionary tags = default(System.Collections.Generic.IDictionary), string instanceId = default(string), Sku sku = default(Sku), bool? latestModelApplied = default(bool?), VirtualMachineInstanceView instanceView = default(VirtualMachineInstanceView), HardwareProfile hardwareProfile = default(HardwareProfile), StorageProfile storageProfile = default(StorageProfile), OSProfile osProfile = default(OSProfile), NetworkProfile networkProfile = default(NetworkProfile), DiagnosticsProfile diagnosticsProfile = default(DiagnosticsProfile), Microsoft.Rest.Azure.SubResource availabilitySet = default(Microsoft.Rest.Azure.SubResource), string provisioningState = default(string), string licenseType = default(string), Plan plan = default(Plan), System.Collections.Generic.IList resources = default(System.Collections.Generic.IList)) + : base(location, id, name, type, tags) + { + InstanceId = instanceId; + Sku = sku; + LatestModelApplied = latestModelApplied; + InstanceView = instanceView; + HardwareProfile = hardwareProfile; + StorageProfile = storageProfile; + OsProfile = osProfile; + NetworkProfile = networkProfile; + DiagnosticsProfile = diagnosticsProfile; + AvailabilitySet = availabilitySet; + ProvisioningState = provisioningState; + LicenseType = licenseType; + Plan = plan; + Resources = resources; + } + + /// + /// Gets the virtual machine instance id. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "instanceId")] + public string InstanceId { get; private set; } + + /// + /// Gets the virtual machine sku. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "sku")] + public Sku Sku { get; private set; } + + /// + /// Gets specifies whether the latest model has been applied to the + /// virtual machine. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.latestModelApplied")] + public bool? LatestModelApplied { get; private set; } + + /// + /// Gets the virtual machine instance view. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.instanceView")] + public VirtualMachineInstanceView InstanceView { get; private set; } + + /// + /// Gets or sets the hardware profile. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.hardwareProfile")] + public HardwareProfile HardwareProfile { get; set; } + + /// + /// Gets or sets the storage profile. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.storageProfile")] + public StorageProfile StorageProfile { get; set; } + + /// + /// Gets or sets the OS profile. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.osProfile")] + public OSProfile OsProfile { get; set; } + + /// + /// Gets or sets the network profile. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.networkProfile")] + public NetworkProfile NetworkProfile { get; set; } + + /// + /// Gets or sets the diagnostics profile. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.diagnosticsProfile")] + public DiagnosticsProfile DiagnosticsProfile { get; set; } + + /// + /// Gets or sets the reference Id of the availability set to which + /// this virtual machine belongs. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.availabilitySet")] + public Microsoft.Rest.Azure.SubResource AvailabilitySet { get; set; } + + /// + /// Gets the provisioning state, which only appears in the response. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.provisioningState")] + public string ProvisioningState { get; private set; } + + /// + /// Gets or sets the license type, which is for bring your own license + /// scenario. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.licenseType")] + public string LicenseType { get; set; } + + /// + /// Gets or sets the purchase plan when deploying virtual machine from + /// VM Marketplace images. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "plan")] + public Plan Plan { get; set; } + + /// + /// Gets the virtual machine child extension resources. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "resources")] + public System.Collections.Generic.IList Resources { get; private set; } + + /// + /// Validate the object. + /// + /// + /// Thrown if validation fails + /// + public virtual void Validate() + { + if (this.StorageProfile != null) + { + this.StorageProfile.Validate(); + } + } + } +} diff --git a/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/VirtualMachineScaleSetVMInstanceIDs.cs b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/VirtualMachineScaleSetVMInstanceIDs.cs new file mode 100644 index 000000000..ea889d21d --- /dev/null +++ b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/VirtualMachineScaleSetVMInstanceIDs.cs @@ -0,0 +1,42 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.Compute.Models +{ + using System.Linq; + + /// + /// Specifies the list of virtual machine scale set instance IDs. + /// + public partial class VirtualMachineScaleSetVMInstanceIDs + { + /// + /// Initializes a new instance of the + /// VirtualMachineScaleSetVMInstanceIDs class. + /// + public VirtualMachineScaleSetVMInstanceIDs() { } + + /// + /// Initializes a new instance of the + /// VirtualMachineScaleSetVMInstanceIDs class. + /// + /// the virtual machine scale set instance + /// ids. + public VirtualMachineScaleSetVMInstanceIDs(System.Collections.Generic.IList instanceIds = default(System.Collections.Generic.IList)) + { + InstanceIds = instanceIds; + } + + /// + /// Gets or sets the virtual machine scale set instance ids. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "instanceIds")] + public System.Collections.Generic.IList InstanceIds { get; set; } + + } +} diff --git a/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/VirtualMachineScaleSetVMInstanceRequiredIDs.cs b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/VirtualMachineScaleSetVMInstanceRequiredIDs.cs new file mode 100644 index 000000000..0ea046758 --- /dev/null +++ b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/VirtualMachineScaleSetVMInstanceRequiredIDs.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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.Compute.Models +{ + using System.Linq; + + /// + /// Specifies the list of virtual machine scale set instance IDs. + /// + public partial class VirtualMachineScaleSetVMInstanceRequiredIDs + { + /// + /// Initializes a new instance of the + /// VirtualMachineScaleSetVMInstanceRequiredIDs class. + /// + public VirtualMachineScaleSetVMInstanceRequiredIDs() { } + + /// + /// Initializes a new instance of the + /// VirtualMachineScaleSetVMInstanceRequiredIDs class. + /// + /// the virtual machine scale set instance + /// ids. + public VirtualMachineScaleSetVMInstanceRequiredIDs(System.Collections.Generic.IList instanceIds) + { + InstanceIds = instanceIds; + } + + /// + /// Gets or sets the virtual machine scale set instance ids. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "instanceIds")] + public System.Collections.Generic.IList InstanceIds { get; set; } + + /// + /// Validate the object. + /// + /// + /// Thrown if validation fails + /// + public virtual void Validate() + { + if (InstanceIds == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "InstanceIds"); + } + } + } +} diff --git a/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/VirtualMachineScaleSetVMInstanceViewInner.cs b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/VirtualMachineScaleSetVMInstanceViewInner.cs new file mode 100644 index 000000000..b0403d04d --- /dev/null +++ b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/VirtualMachineScaleSetVMInstanceViewInner.cs @@ -0,0 +1,99 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.Compute.Models +{ + using System.Linq; + + /// + /// The instance view of a virtual machine scale set VM. + /// + public partial class VirtualMachineScaleSetVMInstanceViewInner + { + /// + /// Initializes a new instance of the + /// VirtualMachineScaleSetVMInstanceViewInner class. + /// + public VirtualMachineScaleSetVMInstanceViewInner() { } + + /// + /// Initializes a new instance of the + /// VirtualMachineScaleSetVMInstanceViewInner class. + /// + /// the Update Domain count. + /// the Fault Domain count. + /// the Remote desktop certificate + /// thumbprint. + /// the VM Agent running on the virtual + /// machine. + /// the disks information. + /// the extensions information. + /// the boot diagnostics. + /// the resource status information. + public VirtualMachineScaleSetVMInstanceViewInner(int? platformUpdateDomain = default(int?), int? platformFaultDomain = default(int?), string rdpThumbPrint = default(string), VirtualMachineAgentInstanceView vmAgent = default(VirtualMachineAgentInstanceView), System.Collections.Generic.IList disks = default(System.Collections.Generic.IList), System.Collections.Generic.IList extensions = default(System.Collections.Generic.IList), BootDiagnosticsInstanceView bootDiagnostics = default(BootDiagnosticsInstanceView), System.Collections.Generic.IList statuses = default(System.Collections.Generic.IList)) + { + PlatformUpdateDomain = platformUpdateDomain; + PlatformFaultDomain = platformFaultDomain; + RdpThumbPrint = rdpThumbPrint; + VmAgent = vmAgent; + Disks = disks; + Extensions = extensions; + BootDiagnostics = bootDiagnostics; + Statuses = statuses; + } + + /// + /// Gets or sets the Update Domain count. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "platformUpdateDomain")] + public int? PlatformUpdateDomain { get; set; } + + /// + /// Gets or sets the Fault Domain count. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "platformFaultDomain")] + public int? PlatformFaultDomain { get; set; } + + /// + /// Gets or sets the Remote desktop certificate thumbprint. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "rdpThumbPrint")] + public string RdpThumbPrint { get; set; } + + /// + /// Gets or sets the VM Agent running on the virtual machine. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "vmAgent")] + public VirtualMachineAgentInstanceView VmAgent { get; set; } + + /// + /// Gets or sets the disks information. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "disks")] + public System.Collections.Generic.IList Disks { get; set; } + + /// + /// Gets or sets the extensions information. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "extensions")] + public System.Collections.Generic.IList Extensions { get; set; } + + /// + /// Gets or sets the boot diagnostics. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "bootDiagnostics")] + public BootDiagnosticsInstanceView BootDiagnostics { get; set; } + + /// + /// Gets or sets the resource status information. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "statuses")] + public System.Collections.Generic.IList Statuses { get; set; } + + } +} diff --git a/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/VirtualMachineScaleSetVMListResultInner.cs b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/VirtualMachineScaleSetVMListResultInner.cs new file mode 100644 index 000000000..73aa521dc --- /dev/null +++ b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/VirtualMachineScaleSetVMListResultInner.cs @@ -0,0 +1,54 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.Compute.Models +{ + using System.Linq; + + /// + /// The List Virtual Machine Scale Set VMs operation response. + /// + public partial class VirtualMachineScaleSetVMListResultInner + { + /// + /// Initializes a new instance of the + /// VirtualMachineScaleSetVMListResultInner class. + /// + public VirtualMachineScaleSetVMListResultInner() { } + + /// + /// Initializes a new instance of the + /// VirtualMachineScaleSetVMListResultInner class. + /// + /// the list of virtual machine scale sets + /// VMs. + /// the uri to fetch the next page of Virtual + /// Machine Scale Set VMs. Call ListNext() with this to fetch the + /// next page of VMSS VMs + public VirtualMachineScaleSetVMListResultInner(System.Collections.Generic.IList value = default(System.Collections.Generic.IList), string nextLink = default(string)) + { + Value = value; + NextLink = nextLink; + } + + /// + /// Gets or sets the list of virtual machine scale sets VMs. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "value")] + public System.Collections.Generic.IList Value { get; set; } + + /// + /// Gets or sets the uri to fetch the next page of Virtual Machine + /// Scale Set VMs. Call ListNext() with this to fetch the next page + /// of VMSS VMs + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "nextLink")] + public string NextLink { get; set; } + + } +} diff --git a/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/VirtualMachineScaleSetVMProfile.cs b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/VirtualMachineScaleSetVMProfile.cs new file mode 100644 index 000000000..51ca7b570 --- /dev/null +++ b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/VirtualMachineScaleSetVMProfile.cs @@ -0,0 +1,82 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.Compute.Models +{ + using System.Linq; + + /// + /// Describes a virtual machine scale set virtual machine profile. + /// + public partial class VirtualMachineScaleSetVMProfile + { + /// + /// Initializes a new instance of the VirtualMachineScaleSetVMProfile + /// class. + /// + public VirtualMachineScaleSetVMProfile() { } + + /// + /// Initializes a new instance of the VirtualMachineScaleSetVMProfile + /// class. + /// + /// the virtual machine scale set OS + /// profile. + /// the virtual machine scale set storage + /// profile. + /// the virtual machine scale set network + /// profile. + /// the virtual machine scale set + /// extension profile. + public VirtualMachineScaleSetVMProfile(VirtualMachineScaleSetOSProfile osProfile = default(VirtualMachineScaleSetOSProfile), VirtualMachineScaleSetStorageProfile storageProfile = default(VirtualMachineScaleSetStorageProfile), VirtualMachineScaleSetNetworkProfile networkProfile = default(VirtualMachineScaleSetNetworkProfile), VirtualMachineScaleSetExtensionProfile extensionProfile = default(VirtualMachineScaleSetExtensionProfile)) + { + OsProfile = osProfile; + StorageProfile = storageProfile; + NetworkProfile = networkProfile; + ExtensionProfile = extensionProfile; + } + + /// + /// Gets or sets the virtual machine scale set OS profile. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "osProfile")] + public VirtualMachineScaleSetOSProfile OsProfile { get; set; } + + /// + /// Gets or sets the virtual machine scale set storage profile. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "storageProfile")] + public VirtualMachineScaleSetStorageProfile StorageProfile { get; set; } + + /// + /// Gets or sets the virtual machine scale set network profile. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "networkProfile")] + public VirtualMachineScaleSetNetworkProfile NetworkProfile { get; set; } + + /// + /// Gets or sets the virtual machine scale set extension profile. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "extensionProfile")] + public VirtualMachineScaleSetExtensionProfile ExtensionProfile { get; set; } + + /// + /// Validate the object. + /// + /// + /// Thrown if validation fails + /// + public virtual void Validate() + { + if (this.StorageProfile != null) + { + this.StorageProfile.Validate(); + } + } + } +} diff --git a/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/VirtualMachineSize.cs b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/VirtualMachineSize.cs new file mode 100644 index 000000000..99ab7daab --- /dev/null +++ b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/VirtualMachineSize.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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.Compute.Models +{ + using System.Linq; + + /// + /// Describes the properties of a VM size. + /// + public partial class VirtualMachineSize + { + /// + /// Initializes a new instance of the VirtualMachineSize class. + /// + public VirtualMachineSize() { } + + /// + /// Initializes a new instance of the VirtualMachineSize class. + /// + /// the VM size name. + /// the Number of cores supported by a VM + /// size. + /// the OS disk size allowed by a VM + /// size. + /// the Resource disk size allowed + /// by a VM size. + /// the Memory size supported by a VM + /// size. + /// the Maximum number of data disks + /// allowed by a VM size. + public VirtualMachineSize(string name = default(string), int? numberOfCores = default(int?), int? osDiskSizeInMB = default(int?), int? resourceDiskSizeInMB = default(int?), int? memoryInMB = default(int?), int? maxDataDiskCount = default(int?)) + { + Name = name; + NumberOfCores = numberOfCores; + OsDiskSizeInMB = osDiskSizeInMB; + ResourceDiskSizeInMB = resourceDiskSizeInMB; + MemoryInMB = memoryInMB; + MaxDataDiskCount = maxDataDiskCount; + } + + /// + /// Gets or sets the VM size name. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "name")] + public string Name { get; set; } + + /// + /// Gets or sets the Number of cores supported by a VM size. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "numberOfCores")] + public int? NumberOfCores { get; set; } + + /// + /// Gets or sets the OS disk size allowed by a VM size. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "osDiskSizeInMB")] + public int? OsDiskSizeInMB { get; set; } + + /// + /// Gets or sets the Resource disk size allowed by a VM size. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "resourceDiskSizeInMB")] + public int? ResourceDiskSizeInMB { get; set; } + + /// + /// Gets or sets the Memory size supported by a VM size. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "memoryInMB")] + public int? MemoryInMB { get; set; } + + /// + /// Gets or sets the Maximum number of data disks allowed by a VM size. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "maxDataDiskCount")] + public int? MaxDataDiskCount { get; set; } + + } +} diff --git a/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/VirtualMachineSizeListResultInner.cs b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/VirtualMachineSizeListResultInner.cs new file mode 100644 index 000000000..e957ff009 --- /dev/null +++ b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/VirtualMachineSizeListResultInner.cs @@ -0,0 +1,41 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.Compute.Models +{ + using System.Linq; + + /// + /// The List Virtual Machine operation response. + /// + public partial class VirtualMachineSizeListResultInner + { + /// + /// Initializes a new instance of the + /// VirtualMachineSizeListResultInner class. + /// + public VirtualMachineSizeListResultInner() { } + + /// + /// Initializes a new instance of the + /// VirtualMachineSizeListResultInner class. + /// + /// the list of virtual machine sizes. + public VirtualMachineSizeListResultInner(System.Collections.Generic.IList value = default(System.Collections.Generic.IList)) + { + Value = value; + } + + /// + /// Gets or sets the list of virtual machine sizes. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "value")] + public System.Collections.Generic.IList Value { get; set; } + + } +} diff --git a/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/VirtualMachineSizeTypes.cs b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/VirtualMachineSizeTypes.cs new file mode 100644 index 000000000..d2a42b18a --- /dev/null +++ b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/VirtualMachineSizeTypes.cs @@ -0,0 +1,81 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.Compute.Models +{ + + /// + /// Defines values for VirtualMachineSizeTypes. + /// + public static class VirtualMachineSizeTypes + { + public const string BasicA0 = "Basic_A0"; + public const string BasicA1 = "Basic_A1"; + public const string BasicA2 = "Basic_A2"; + public const string BasicA3 = "Basic_A3"; + public const string BasicA4 = "Basic_A4"; + public const string StandardA0 = "Standard_A0"; + public const string StandardA1 = "Standard_A1"; + public const string StandardA2 = "Standard_A2"; + public const string StandardA3 = "Standard_A3"; + public const string StandardA4 = "Standard_A4"; + public const string StandardA5 = "Standard_A5"; + public const string StandardA6 = "Standard_A6"; + public const string StandardA7 = "Standard_A7"; + public const string StandardA8 = "Standard_A8"; + public const string StandardA9 = "Standard_A9"; + public const string StandardA10 = "Standard_A10"; + public const string StandardA11 = "Standard_A11"; + public const string StandardD1 = "Standard_D1"; + public const string StandardD2 = "Standard_D2"; + public const string StandardD3 = "Standard_D3"; + public const string StandardD4 = "Standard_D4"; + public const string StandardD11 = "Standard_D11"; + public const string StandardD12 = "Standard_D12"; + public const string StandardD13 = "Standard_D13"; + public const string StandardD14 = "Standard_D14"; + public const string StandardD1V2 = "Standard_D1_v2"; + public const string StandardD2V2 = "Standard_D2_v2"; + public const string StandardD3V2 = "Standard_D3_v2"; + public const string StandardD4V2 = "Standard_D4_v2"; + public const string StandardD5V2 = "Standard_D5_v2"; + public const string StandardD11V2 = "Standard_D11_v2"; + public const string StandardD12V2 = "Standard_D12_v2"; + public const string StandardD13V2 = "Standard_D13_v2"; + public const string StandardD14V2 = "Standard_D14_v2"; + public const string StandardD15V2 = "Standard_D15_v2"; + public const string StandardDS1 = "Standard_DS1"; + public const string StandardDS2 = "Standard_DS2"; + public const string StandardDS3 = "Standard_DS3"; + public const string StandardDS4 = "Standard_DS4"; + public const string StandardDS11 = "Standard_DS11"; + public const string StandardDS12 = "Standard_DS12"; + public const string StandardDS13 = "Standard_DS13"; + public const string StandardDS14 = "Standard_DS14"; + public const string StandardDS1V2 = "Standard_DS1_v2"; + public const string StandardDS2V2 = "Standard_DS2_v2"; + public const string StandardDS3V2 = "Standard_DS3_v2"; + public const string StandardDS4V2 = "Standard_DS4_v2"; + public const string StandardDS5V2 = "Standard_DS5_v2"; + public const string StandardDS11V2 = "Standard_DS11_v2"; + public const string StandardDS12V2 = "Standard_DS12_v2"; + public const string StandardDS13V2 = "Standard_DS13_v2"; + public const string StandardDS14V2 = "Standard_DS14_v2"; + public const string StandardDS15V2 = "Standard_DS15_v2"; + public const string StandardG1 = "Standard_G1"; + public const string StandardG2 = "Standard_G2"; + public const string StandardG3 = "Standard_G3"; + public const string StandardG4 = "Standard_G4"; + public const string StandardG5 = "Standard_G5"; + public const string StandardGS1 = "Standard_GS1"; + public const string StandardGS2 = "Standard_GS2"; + public const string StandardGS3 = "Standard_GS3"; + public const string StandardGS4 = "Standard_GS4"; + public const string StandardGS5 = "Standard_GS5"; + } +} diff --git a/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/VirtualMachineStatusCodeCount.cs b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/VirtualMachineStatusCodeCount.cs new file mode 100644 index 000000000..e4fa76e26 --- /dev/null +++ b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/VirtualMachineStatusCodeCount.cs @@ -0,0 +1,51 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.Compute.Models +{ + using System.Linq; + + /// + /// The status code and count of the virtual machine scale set instance + /// view status summary. + /// + public partial class VirtualMachineStatusCodeCount + { + /// + /// Initializes a new instance of the VirtualMachineStatusCodeCount + /// class. + /// + public VirtualMachineStatusCodeCount() { } + + /// + /// Initializes a new instance of the VirtualMachineStatusCodeCount + /// class. + /// + /// the instance view status code. + /// the number of instances having a particular + /// status code. + public VirtualMachineStatusCodeCount(string code = default(string), int? count = default(int?)) + { + Code = code; + Count = count; + } + + /// + /// Gets the instance view status code. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "code")] + public string Code { get; private set; } + + /// + /// Gets the number of instances having a particular status code. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "count")] + public int? Count { get; private set; } + + } +} diff --git a/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/WinRMConfiguration.cs b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/WinRMConfiguration.cs new file mode 100644 index 000000000..78a88dc2e --- /dev/null +++ b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/WinRMConfiguration.cs @@ -0,0 +1,40 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.Compute.Models +{ + using System.Linq; + + /// + /// Describes Windows Remote Management configuration of the VM + /// + public partial class WinRMConfiguration + { + /// + /// Initializes a new instance of the WinRMConfiguration class. + /// + public WinRMConfiguration() { } + + /// + /// Initializes a new instance of the WinRMConfiguration class. + /// + /// the list of Windows Remote Management + /// listeners + public WinRMConfiguration(System.Collections.Generic.IList listeners = default(System.Collections.Generic.IList)) + { + Listeners = listeners; + } + + /// + /// Gets or sets the list of Windows Remote Management listeners + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "listeners")] + public System.Collections.Generic.IList Listeners { get; set; } + + } +} diff --git a/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/WinRMListener.cs b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/WinRMListener.cs new file mode 100644 index 000000000..e223d3eac --- /dev/null +++ b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/WinRMListener.cs @@ -0,0 +1,53 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.Compute.Models +{ + using System.Linq; + + /// + /// Describes Protocol and thumbprint of Windows Remote Management listener + /// + public partial class WinRMListener + { + /// + /// Initializes a new instance of the WinRMListener class. + /// + public WinRMListener() { } + + /// + /// Initializes a new instance of the WinRMListener class. + /// + /// the Protocol used by WinRM listener. + /// Currently only Http and Https are supported. Possible values + /// include: 'Http', 'Https' + /// the Certificate URL in KMS for Https + /// listeners. Should be null for Http listeners. + public WinRMListener(ProtocolTypes? protocol = default(ProtocolTypes?), string certificateUrl = default(string)) + { + Protocol = protocol; + CertificateUrl = certificateUrl; + } + + /// + /// Gets or sets the Protocol used by WinRM listener. Currently only + /// Http and Https are supported. Possible values include: 'Http', + /// 'Https' + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "protocol")] + public ProtocolTypes? Protocol { get; set; } + + /// + /// Gets or sets the Certificate URL in KMS for Https listeners. + /// Should be null for Http listeners. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "certificateUrl")] + public string CertificateUrl { get; set; } + + } +} diff --git a/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/WindowsConfiguration.cs b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/WindowsConfiguration.cs new file mode 100644 index 000000000..798bc129d --- /dev/null +++ b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/Models/WindowsConfiguration.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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.Compute.Models +{ + using System.Linq; + + /// + /// Describes Windows Configuration of the OS Profile. + /// + public partial class WindowsConfiguration + { + /// + /// Initializes a new instance of the WindowsConfiguration class. + /// + public WindowsConfiguration() { } + + /// + /// Initializes a new instance of the WindowsConfiguration class. + /// + /// whether VM Agent should be + /// provisioned on the Virtual Machine. + /// whether Windows updates are + /// automatically installed on the VM + /// the Time Zone of the VM + /// the additional base-64 + /// encoded XML formatted information that can be included in the + /// Unattend.xml file. + /// the Windows Remote Management configuration of + /// the VM + public WindowsConfiguration(bool? provisionVMAgent = default(bool?), bool? enableAutomaticUpdates = default(bool?), string timeZone = default(string), System.Collections.Generic.IList additionalUnattendContent = default(System.Collections.Generic.IList), WinRMConfiguration winRM = default(WinRMConfiguration)) + { + ProvisionVMAgent = provisionVMAgent; + EnableAutomaticUpdates = enableAutomaticUpdates; + TimeZone = timeZone; + AdditionalUnattendContent = additionalUnattendContent; + WinRM = winRM; + } + + /// + /// Gets or sets whether VM Agent should be provisioned on the Virtual + /// Machine. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "provisionVMAgent")] + public bool? ProvisionVMAgent { get; set; } + + /// + /// Gets or sets whether Windows updates are automatically installed + /// on the VM + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "enableAutomaticUpdates")] + public bool? EnableAutomaticUpdates { get; set; } + + /// + /// Gets or sets the Time Zone of the VM + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "timeZone")] + public string TimeZone { get; set; } + + /// + /// Gets or sets the additional base-64 encoded XML formatted + /// information that can be included in the Unattend.xml file. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "additionalUnattendContent")] + public System.Collections.Generic.IList AdditionalUnattendContent { get; set; } + + /// + /// Gets or sets the Windows Remote Management configuration of the VM + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "winRM")] + public WinRMConfiguration WinRM { get; set; } + + } +} diff --git a/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/UsageOperations.cs b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/UsageOperations.cs new file mode 100644 index 000000000..313ed8ec0 --- /dev/null +++ b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/UsageOperations.cs @@ -0,0 +1,402 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.Compute +{ + using System.Linq; + using Microsoft.Rest; + using Microsoft.Rest.Azure; + using Models; + + /// + /// UsageOperations operations. + /// + internal partial class UsageOperations : Microsoft.Rest.IServiceOperations, IUsageOperations + { + /// + /// Initializes a new instance of the UsageOperations class. + /// + /// + /// Reference to the service client. + /// + /// + /// Thrown when a required parameter is null + /// + internal UsageOperations(ComputeManagementClient client) + { + if (client == null) + { + throw new System.ArgumentNullException("client"); + } + this.Client = client; + } + + /// + /// Gets a reference to the ComputeManagementClient + /// + public ComputeManagementClient Client { get; private set; } + + /// + /// Lists compute usages for a subscription. + /// + /// + /// The location upon which resource usage is queried. + /// + /// + /// 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 + /// + /// + /// A response object containing the response body and response headers. + /// + public async System.Threading.Tasks.Task>> ListWithHttpMessagesAsync(string location, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + if (location == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "location"); + } + if (location != null) + { + if (!System.Text.RegularExpressions.Regex.IsMatch(location, "^[-\\w\\._]+$")) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.Pattern, "location", "^[-\\w\\._]+$"); + } + } + if (this.Client.ApiVersion == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.ApiVersion"); + } + if (this.Client.SubscriptionId == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.SubscriptionId"); + } + // 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("location", location); + 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}/providers/Microsoft.Compute/locations/{location}/usages").ToString(); + _url = _url.Replace("{location}", System.Uri.EscapeDataString(location)); + _url = _url.Replace("{subscriptionId}", System.Uri.EscapeDataString(this.Client.SubscriptionId)); + System.Collections.Generic.List _queryParameters = new System.Collections.Generic.List(); + if (this.Client.ApiVersion != null) + { + _queryParameters.Add(string.Format("api-version={0}", System.Uri.EscapeDataString(this.Client.ApiVersion))); + } + if (_queryParameters.Count > 0) + { + _url += "?" + string.Join("&", _queryParameters); + } + // Create HTTP transport objects + System.Net.Http.HttpRequestMessage _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); + CloudError _errorBody = Microsoft.Rest.Serialization.SafeJsonConvert.DeserializeObject(_responseContent, this.Client.DeserializationSettings); + if (_errorBody != null) + { + ex = new Microsoft.Rest.Azure.CloudException(_errorBody.Message); + 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 (_httpResponse.Headers.Contains("x-ms-request-id")) + { + ex.RequestId = _httpResponse.Headers.GetValues("x-ms-request-id").FirstOrDefault(); + } + 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; + } + + /// + /// Lists compute usages for a subscription. + /// + /// + /// 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 + /// + /// + /// 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 += "?" + string.Join("&", _queryParameters); + } + // Create HTTP transport objects + System.Net.Http.HttpRequestMessage _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); + CloudError _errorBody = Microsoft.Rest.Serialization.SafeJsonConvert.DeserializeObject(_responseContent, this.Client.DeserializationSettings); + if (_errorBody != null) + { + ex = new Microsoft.Rest.Azure.CloudException(_errorBody.Message); + 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 (_httpResponse.Headers.Contains("x-ms-request-id")) + { + ex.RequestId = _httpResponse.Headers.GetValues("x-ms-request-id").FirstOrDefault(); + } + 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; + } + + } +} diff --git a/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/UsageOperationsExtensions.cs b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/UsageOperationsExtensions.cs new file mode 100644 index 000000000..b0f9b9d96 --- /dev/null +++ b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/UsageOperationsExtensions.cs @@ -0,0 +1,89 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.Compute +{ + using System.Threading.Tasks; + using Microsoft.Rest.Azure; + using Models; + + /// + /// Extension methods for UsageOperations. + /// + public static partial class UsageOperationsExtensions + { + /// + /// Lists compute usages for a subscription. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The location upon which resource usage is queried. + /// + public static Microsoft.Rest.Azure.IPage List(this IUsageOperations operations, string location) + { + return System.Threading.Tasks.Task.Factory.StartNew(s => ((IUsageOperations)s).ListAsync(location), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// Lists compute usages for a subscription. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The location upon which resource usage is queried. + /// + /// + /// The cancellation token. + /// + public static async Task> ListAsync(this IUsageOperations operations, string location, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + using (var _result = await operations.ListWithHttpMessagesAsync(location, null, cancellationToken).ConfigureAwait(false)) + { + return _result.Body; + } + } + + /// + /// Lists compute usages for a subscription. + /// + /// + /// 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 IUsageOperations operations, string nextPageLink) + { + return System.Threading.Tasks.Task.Factory.StartNew(s => ((IUsageOperations)s).ListNextAsync(nextPageLink), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// Lists compute usages for a subscription. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The NextLink from the previous successful call to List operation. + /// + /// + /// The cancellation token. + /// + public static async Task> ListNextAsync(this IUsageOperations 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/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/VirtualMachineExtensionImagesOperations.cs b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/VirtualMachineExtensionImagesOperations.cs new file mode 100644 index 000000000..04cc50322 --- /dev/null +++ b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/VirtualMachineExtensionImagesOperations.cs @@ -0,0 +1,648 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.Compute +{ + using System.Linq; + using Microsoft.Rest; + using Microsoft.Rest.Azure; + using Models; + + /// + /// VirtualMachineExtensionImagesOperations operations. + /// + internal partial class VirtualMachineExtensionImagesOperations : Microsoft.Rest.IServiceOperations, IVirtualMachineExtensionImagesOperations + { + /// + /// Initializes a new instance of the VirtualMachineExtensionImagesOperations class. + /// + /// + /// Reference to the service client. + /// + /// + /// Thrown when a required parameter is null + /// + internal VirtualMachineExtensionImagesOperations(ComputeManagementClient client) + { + if (client == null) + { + throw new System.ArgumentNullException("client"); + } + this.Client = client; + } + + /// + /// Gets a reference to the ComputeManagementClient + /// + public ComputeManagementClient Client { get; private set; } + + /// + /// Gets a virtual machine extension image. + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// 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 + /// + /// + /// A response object containing the response body and response headers. + /// + public async System.Threading.Tasks.Task> GetWithHttpMessagesAsync(string location, string publisherName, string type, string version, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + if (location == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "location"); + } + if (publisherName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "publisherName"); + } + if (type == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "type"); + } + if (version == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "version"); + } + if (this.Client.ApiVersion == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.ApiVersion"); + } + if (this.Client.SubscriptionId == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.SubscriptionId"); + } + // 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("location", location); + tracingParameters.Add("publisherName", publisherName); + tracingParameters.Add("type", type); + tracingParameters.Add("version", version); + 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}/providers/Microsoft.Compute/locations/{location}/publishers/{publisherName}/artifacttypes/vmextension/types/{type}/versions/{version}").ToString(); + _url = _url.Replace("{location}", System.Uri.EscapeDataString(location)); + _url = _url.Replace("{publisherName}", System.Uri.EscapeDataString(publisherName)); + _url = _url.Replace("{type}", System.Uri.EscapeDataString(type)); + _url = _url.Replace("{version}", System.Uri.EscapeDataString(version)); + _url = _url.Replace("{subscriptionId}", System.Uri.EscapeDataString(this.Client.SubscriptionId)); + System.Collections.Generic.List _queryParameters = new System.Collections.Generic.List(); + if (this.Client.ApiVersion != null) + { + _queryParameters.Add(string.Format("api-version={0}", System.Uri.EscapeDataString(this.Client.ApiVersion))); + } + if (_queryParameters.Count > 0) + { + _url += "?" + string.Join("&", _queryParameters); + } + // Create HTTP transport objects + System.Net.Http.HttpRequestMessage _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); + CloudError _errorBody = Microsoft.Rest.Serialization.SafeJsonConvert.DeserializeObject(_responseContent, this.Client.DeserializationSettings); + if (_errorBody != null) + { + ex = new Microsoft.Rest.Azure.CloudException(_errorBody.Message); + 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 (_httpResponse.Headers.Contains("x-ms-request-id")) + { + ex.RequestId = _httpResponse.Headers.GetValues("x-ms-request-id").FirstOrDefault(); + } + 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 a list of virtual machine extension image types. + /// + /// + /// + /// + /// + /// + /// 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 + /// + /// + /// A response object containing the response body and response headers. + /// + public async System.Threading.Tasks.Task>> ListTypesWithHttpMessagesAsync(string location, string publisherName, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + if (location == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "location"); + } + if (publisherName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "publisherName"); + } + if (this.Client.ApiVersion == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.ApiVersion"); + } + if (this.Client.SubscriptionId == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.SubscriptionId"); + } + // 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("location", location); + tracingParameters.Add("publisherName", publisherName); + tracingParameters.Add("cancellationToken", cancellationToken); + Microsoft.Rest.ServiceClientTracing.Enter(_invocationId, this, "ListTypes", tracingParameters); + } + // Construct URL + var _baseUrl = this.Client.BaseUri.AbsoluteUri; + var _url = new System.Uri(new System.Uri(_baseUrl + (_baseUrl.EndsWith("/") ? "" : "/")), "subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/publishers/{publisherName}/artifacttypes/vmextension/types").ToString(); + _url = _url.Replace("{location}", System.Uri.EscapeDataString(location)); + _url = _url.Replace("{publisherName}", System.Uri.EscapeDataString(publisherName)); + _url = _url.Replace("{subscriptionId}", System.Uri.EscapeDataString(this.Client.SubscriptionId)); + System.Collections.Generic.List _queryParameters = new System.Collections.Generic.List(); + if (this.Client.ApiVersion != null) + { + _queryParameters.Add(string.Format("api-version={0}", System.Uri.EscapeDataString(this.Client.ApiVersion))); + } + if (_queryParameters.Count > 0) + { + _url += "?" + string.Join("&", _queryParameters); + } + // Create HTTP transport objects + System.Net.Http.HttpRequestMessage _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); + CloudError _errorBody = Microsoft.Rest.Serialization.SafeJsonConvert.DeserializeObject(_responseContent, this.Client.DeserializationSettings); + if (_errorBody != null) + { + ex = new Microsoft.Rest.Azure.CloudException(_errorBody.Message); + 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 (_httpResponse.Headers.Contains("x-ms-request-id")) + { + ex.RequestId = _httpResponse.Headers.GetValues("x-ms-request-id").FirstOrDefault(); + } + 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 a list of virtual machine extension image versions. + /// + /// + /// + /// + /// + /// + /// + /// + /// OData parameters to apply to the 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 + /// + /// + /// A response object containing the response body and response headers. + /// + public async System.Threading.Tasks.Task>> ListVersionsWithHttpMessagesAsync(string location, string publisherName, string type, Microsoft.Rest.Azure.OData.ODataQuery odataQuery = default(Microsoft.Rest.Azure.OData.ODataQuery), System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + if (location == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "location"); + } + if (publisherName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "publisherName"); + } + if (type == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "type"); + } + if (this.Client.ApiVersion == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.ApiVersion"); + } + if (this.Client.SubscriptionId == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.SubscriptionId"); + } + // 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("odataQuery", odataQuery); + tracingParameters.Add("location", location); + tracingParameters.Add("publisherName", publisherName); + tracingParameters.Add("type", type); + tracingParameters.Add("cancellationToken", cancellationToken); + Microsoft.Rest.ServiceClientTracing.Enter(_invocationId, this, "ListVersions", tracingParameters); + } + // Construct URL + var _baseUrl = this.Client.BaseUri.AbsoluteUri; + var _url = new System.Uri(new System.Uri(_baseUrl + (_baseUrl.EndsWith("/") ? "" : "/")), "subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/publishers/{publisherName}/artifacttypes/vmextension/types/{type}/versions").ToString(); + _url = _url.Replace("{location}", System.Uri.EscapeDataString(location)); + _url = _url.Replace("{publisherName}", System.Uri.EscapeDataString(publisherName)); + _url = _url.Replace("{type}", System.Uri.EscapeDataString(type)); + _url = _url.Replace("{subscriptionId}", System.Uri.EscapeDataString(this.Client.SubscriptionId)); + System.Collections.Generic.List _queryParameters = new System.Collections.Generic.List(); + if (odataQuery != null) + { + var _odataFilter = odataQuery.ToString(); + if (!string.IsNullOrEmpty(_odataFilter)) + { + _queryParameters.Add(_odataFilter); + } + } + if (this.Client.ApiVersion != null) + { + _queryParameters.Add(string.Format("api-version={0}", System.Uri.EscapeDataString(this.Client.ApiVersion))); + } + if (_queryParameters.Count > 0) + { + _url += "?" + string.Join("&", _queryParameters); + } + // Create HTTP transport objects + System.Net.Http.HttpRequestMessage _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); + CloudError _errorBody = Microsoft.Rest.Serialization.SafeJsonConvert.DeserializeObject(_responseContent, this.Client.DeserializationSettings); + if (_errorBody != null) + { + ex = new Microsoft.Rest.Azure.CloudException(_errorBody.Message); + 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 (_httpResponse.Headers.Contains("x-ms-request-id")) + { + ex.RequestId = _httpResponse.Headers.GetValues("x-ms-request-id").FirstOrDefault(); + } + 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; + } + + } +} diff --git a/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/VirtualMachineExtensionImagesOperationsExtensions.cs b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/VirtualMachineExtensionImagesOperationsExtensions.cs new file mode 100644 index 000000000..772ee3b4b --- /dev/null +++ b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/VirtualMachineExtensionImagesOperationsExtensions.cs @@ -0,0 +1,147 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.Compute +{ + using System.Threading.Tasks; + using Microsoft.Rest.Azure; + using Models; + + /// + /// Extension methods for VirtualMachineExtensionImagesOperations. + /// + public static partial class VirtualMachineExtensionImagesOperationsExtensions + { + /// + /// Gets a virtual machine extension image. + /// + /// + /// The operations group for this extension method. + /// + /// + /// + /// + /// + /// + /// + /// + /// + public static VirtualMachineExtensionImageInner Get(this IVirtualMachineExtensionImagesOperations operations, string location, string publisherName, string type, string version) + { + return System.Threading.Tasks.Task.Factory.StartNew(s => ((IVirtualMachineExtensionImagesOperations)s).GetAsync(location, publisherName, type, version), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// Gets a virtual machine extension image. + /// + /// + /// The operations group for this extension method. + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// The cancellation token. + /// + public static async System.Threading.Tasks.Task GetAsync(this IVirtualMachineExtensionImagesOperations operations, string location, string publisherName, string type, string version, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + using (var _result = await operations.GetWithHttpMessagesAsync(location, publisherName, type, version, null, cancellationToken).ConfigureAwait(false)) + { + return _result.Body; + } + } + + /// + /// Gets a list of virtual machine extension image types. + /// + /// + /// The operations group for this extension method. + /// + /// + /// + /// + /// + public static System.Collections.Generic.IList ListTypes(this IVirtualMachineExtensionImagesOperations operations, string location, string publisherName) + { + return System.Threading.Tasks.Task.Factory.StartNew(s => ((IVirtualMachineExtensionImagesOperations)s).ListTypesAsync(location, publisherName), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// Gets a list of virtual machine extension image types. + /// + /// + /// The operations group for this extension method. + /// + /// + /// + /// + /// + /// + /// The cancellation token. + /// + public static async System.Threading.Tasks.Task> ListTypesAsync(this IVirtualMachineExtensionImagesOperations operations, string location, string publisherName, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + using (var _result = await operations.ListTypesWithHttpMessagesAsync(location, publisherName, null, cancellationToken).ConfigureAwait(false)) + { + return _result.Body; + } + } + + /// + /// Gets a list of virtual machine extension image versions. + /// + /// + /// The operations group for this extension method. + /// + /// + /// + /// + /// + /// + /// + /// + /// OData parameters to apply to the operation. + /// + public static System.Collections.Generic.IList ListVersions(this IVirtualMachineExtensionImagesOperations operations, string location, string publisherName, string type, Microsoft.Rest.Azure.OData.ODataQuery odataQuery = default(Microsoft.Rest.Azure.OData.ODataQuery)) + { + return System.Threading.Tasks.Task.Factory.StartNew(s => ((IVirtualMachineExtensionImagesOperations)s).ListVersionsAsync(location, publisherName, type, odataQuery), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// Gets a list of virtual machine extension image versions. + /// + /// + /// The operations group for this extension method. + /// + /// + /// + /// + /// + /// + /// + /// + /// OData parameters to apply to the operation. + /// + /// + /// The cancellation token. + /// + public static async System.Threading.Tasks.Task> ListVersionsAsync(this IVirtualMachineExtensionImagesOperations operations, string location, string publisherName, string type, Microsoft.Rest.Azure.OData.ODataQuery odataQuery = default(Microsoft.Rest.Azure.OData.ODataQuery), System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + using (var _result = await operations.ListVersionsWithHttpMessagesAsync(location, publisherName, type, odataQuery, null, cancellationToken).ConfigureAwait(false)) + { + return _result.Body; + } + } + + } +} diff --git a/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/VirtualMachineExtensionsOperations.cs b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/VirtualMachineExtensionsOperations.cs new file mode 100644 index 000000000..7c29ffa6a --- /dev/null +++ b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/VirtualMachineExtensionsOperations.cs @@ -0,0 +1,715 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.Compute +{ + using System.Linq; + using Microsoft.Rest; + using Microsoft.Rest.Azure; + using Models; + + /// + /// VirtualMachineExtensionsOperations operations. + /// + internal partial class VirtualMachineExtensionsOperations : Microsoft.Rest.IServiceOperations, IVirtualMachineExtensionsOperations + { + /// + /// Initializes a new instance of the VirtualMachineExtensionsOperations class. + /// + /// + /// Reference to the service client. + /// + /// + /// Thrown when a required parameter is null + /// + internal VirtualMachineExtensionsOperations(ComputeManagementClient client) + { + if (client == null) + { + throw new System.ArgumentNullException("client"); + } + this.Client = client; + } + + /// + /// Gets a reference to the ComputeManagementClient + /// + public ComputeManagementClient Client { get; private set; } + + /// + /// The operation to create or update the extension. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual machine where the extension should be create or + /// updated. + /// + /// + /// The name of the virtual machine extension. + /// + /// + /// Parameters supplied to the Create Virtual Machine Extension operation. + /// + /// + /// The headers that will be added to request. + /// + /// + /// The cancellation token. + /// + public async System.Threading.Tasks.Task> CreateOrUpdateWithHttpMessagesAsync(string resourceGroupName, string vmName, string vmExtensionName, VirtualMachineExtensionInner extensionParameters, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + // Send Request + Microsoft.Rest.Azure.AzureOperationResponse _response = await BeginCreateOrUpdateWithHttpMessagesAsync( + resourceGroupName, vmName, vmExtensionName, extensionParameters, customHeaders, cancellationToken); + return await this.Client.GetPutOrPatchOperationResultAsync(_response, + customHeaders, + cancellationToken); + } + + /// + /// The operation to create or update the extension. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual machine where the extension should be create or + /// updated. + /// + /// + /// The name of the virtual machine extension. + /// + /// + /// Parameters supplied to the Create Virtual Machine Extension 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 + /// + /// + /// A response object containing the response body and response headers. + /// + public async System.Threading.Tasks.Task> BeginCreateOrUpdateWithHttpMessagesAsync(string resourceGroupName, string vmName, string vmExtensionName, VirtualMachineExtensionInner extensionParameters, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + if (resourceGroupName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "resourceGroupName"); + } + if (vmName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "vmName"); + } + if (vmExtensionName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "vmExtensionName"); + } + if (extensionParameters == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "extensionParameters"); + } + if (this.Client.ApiVersion == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.ApiVersion"); + } + if (this.Client.SubscriptionId == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.SubscriptionId"); + } + // 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("vmName", vmName); + tracingParameters.Add("vmExtensionName", vmExtensionName); + tracingParameters.Add("extensionParameters", extensionParameters); + 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.Compute/virtualMachines/{vmName}/extensions/{vmExtensionName}").ToString(); + _url = _url.Replace("{resourceGroupName}", System.Uri.EscapeDataString(resourceGroupName)); + _url = _url.Replace("{vmName}", System.Uri.EscapeDataString(vmName)); + _url = _url.Replace("{vmExtensionName}", System.Uri.EscapeDataString(vmExtensionName)); + _url = _url.Replace("{subscriptionId}", System.Uri.EscapeDataString(this.Client.SubscriptionId)); + System.Collections.Generic.List _queryParameters = new System.Collections.Generic.List(); + if (this.Client.ApiVersion != null) + { + _queryParameters.Add(string.Format("api-version={0}", System.Uri.EscapeDataString(this.Client.ApiVersion))); + } + if (_queryParameters.Count > 0) + { + _url += "?" + string.Join("&", _queryParameters); + } + // Create HTTP transport objects + System.Net.Http.HttpRequestMessage _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(extensionParameters != null) + { + _requestContent = Microsoft.Rest.Serialization.SafeJsonConvert.SerializeObject(extensionParameters, 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); + CloudError _errorBody = Microsoft.Rest.Serialization.SafeJsonConvert.DeserializeObject(_responseContent, this.Client.DeserializationSettings); + if (_errorBody != null) + { + ex = new Microsoft.Rest.Azure.CloudException(_errorBody.Message); + 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 (_httpResponse.Headers.Contains("x-ms-request-id")) + { + ex.RequestId = _httpResponse.Headers.GetValues("x-ms-request-id").FirstOrDefault(); + } + 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); + } + } + if (_shouldTrace) + { + Microsoft.Rest.ServiceClientTracing.Exit(_invocationId, _result); + } + return _result; + } + + /// + /// The operation to delete the extension. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual machine where the extension should be deleted. + /// + /// + /// The name of the virtual machine extension. + /// + /// + /// The headers that will be added to request. + /// + /// + /// The cancellation token. + /// + public async System.Threading.Tasks.Task DeleteWithHttpMessagesAsync(string resourceGroupName, string vmName, string vmExtensionName, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + // Send request + Microsoft.Rest.Azure.AzureOperationResponse _response = await BeginDeleteWithHttpMessagesAsync( + resourceGroupName, vmName, vmExtensionName, customHeaders, cancellationToken); + return await this.Client.GetPostOrDeleteOperationResultAsync(_response, customHeaders, cancellationToken); + } + + /// + /// The operation to delete the extension. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual machine where the extension should be deleted. + /// + /// + /// The name of the virtual machine extension. + /// + /// + /// 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 + /// + /// + /// A response object containing the response body and response headers. + /// + public async System.Threading.Tasks.Task BeginDeleteWithHttpMessagesAsync(string resourceGroupName, string vmName, string vmExtensionName, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + if (resourceGroupName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "resourceGroupName"); + } + if (vmName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "vmName"); + } + if (vmExtensionName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "vmExtensionName"); + } + if (this.Client.ApiVersion == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.ApiVersion"); + } + if (this.Client.SubscriptionId == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.SubscriptionId"); + } + // 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("vmName", vmName); + tracingParameters.Add("vmExtensionName", vmExtensionName); + 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.Compute/virtualMachines/{vmName}/extensions/{vmExtensionName}").ToString(); + _url = _url.Replace("{resourceGroupName}", System.Uri.EscapeDataString(resourceGroupName)); + _url = _url.Replace("{vmName}", System.Uri.EscapeDataString(vmName)); + _url = _url.Replace("{vmExtensionName}", System.Uri.EscapeDataString(vmExtensionName)); + _url = _url.Replace("{subscriptionId}", System.Uri.EscapeDataString(this.Client.SubscriptionId)); + System.Collections.Generic.List _queryParameters = new System.Collections.Generic.List(); + if (this.Client.ApiVersion != null) + { + _queryParameters.Add(string.Format("api-version={0}", System.Uri.EscapeDataString(this.Client.ApiVersion))); + } + if (_queryParameters.Count > 0) + { + _url += "?" + string.Join("&", _queryParameters); + } + // Create HTTP transport objects + System.Net.Http.HttpRequestMessage _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)); + if (_httpResponse.Content != null) { + _responseContent = await _httpResponse.Content.ReadAsStringAsync().ConfigureAwait(false); + } + else { + _responseContent = string.Empty; + } + ex.Request = new Microsoft.Rest.HttpRequestMessageWrapper(_httpRequest, _requestContent); + ex.Response = new Microsoft.Rest.HttpResponseMessageWrapper(_httpResponse, _responseContent); + if (_httpResponse.Headers.Contains("x-ms-request-id")) + { + ex.RequestId = _httpResponse.Headers.GetValues("x-ms-request-id").FirstOrDefault(); + } + 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(); + } + if (_shouldTrace) + { + Microsoft.Rest.ServiceClientTracing.Exit(_invocationId, _result); + } + return _result; + } + + /// + /// The operation to get the extension. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual machine containing the extension. + /// + /// + /// The name of the virtual machine extension. + /// + /// + /// The expand expression to apply on the 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 + /// + /// + /// A response object containing the response body and response headers. + /// + public async System.Threading.Tasks.Task> GetWithHttpMessagesAsync(string resourceGroupName, string vmName, string vmExtensionName, string expand = default(string), System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + if (resourceGroupName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "resourceGroupName"); + } + if (vmName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "vmName"); + } + if (vmExtensionName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "vmExtensionName"); + } + if (this.Client.ApiVersion == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.ApiVersion"); + } + if (this.Client.SubscriptionId == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.SubscriptionId"); + } + // 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("vmName", vmName); + tracingParameters.Add("vmExtensionName", vmExtensionName); + tracingParameters.Add("expand", expand); + 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.Compute/virtualMachines/{vmName}/extensions/{vmExtensionName}").ToString(); + _url = _url.Replace("{resourceGroupName}", System.Uri.EscapeDataString(resourceGroupName)); + _url = _url.Replace("{vmName}", System.Uri.EscapeDataString(vmName)); + _url = _url.Replace("{vmExtensionName}", System.Uri.EscapeDataString(vmExtensionName)); + _url = _url.Replace("{subscriptionId}", System.Uri.EscapeDataString(this.Client.SubscriptionId)); + System.Collections.Generic.List _queryParameters = new System.Collections.Generic.List(); + if (expand != null) + { + _queryParameters.Add(string.Format("$expand={0}", System.Uri.EscapeDataString(expand))); + } + if (this.Client.ApiVersion != null) + { + _queryParameters.Add(string.Format("api-version={0}", System.Uri.EscapeDataString(this.Client.ApiVersion))); + } + if (_queryParameters.Count > 0) + { + _url += "?" + string.Join("&", _queryParameters); + } + // Create HTTP transport objects + System.Net.Http.HttpRequestMessage _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); + CloudError _errorBody = Microsoft.Rest.Serialization.SafeJsonConvert.DeserializeObject(_responseContent, this.Client.DeserializationSettings); + if (_errorBody != null) + { + ex = new Microsoft.Rest.Azure.CloudException(_errorBody.Message); + 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 (_httpResponse.Headers.Contains("x-ms-request-id")) + { + ex.RequestId = _httpResponse.Headers.GetValues("x-ms-request-id").FirstOrDefault(); + } + 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; + } + + } +} diff --git a/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/VirtualMachineExtensionsOperationsExtensions.cs b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/VirtualMachineExtensionsOperationsExtensions.cs new file mode 100644 index 000000000..da2bae787 --- /dev/null +++ b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/VirtualMachineExtensionsOperationsExtensions.cs @@ -0,0 +1,267 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.Compute +{ + using System.Threading.Tasks; + using Microsoft.Rest.Azure; + using Models; + + /// + /// Extension methods for VirtualMachineExtensionsOperations. + /// + public static partial class VirtualMachineExtensionsOperationsExtensions + { + /// + /// The operation to create or update the extension. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual machine where the extension should be create or + /// updated. + /// + /// + /// The name of the virtual machine extension. + /// + /// + /// Parameters supplied to the Create Virtual Machine Extension operation. + /// + public static VirtualMachineExtensionInner CreateOrUpdate(this IVirtualMachineExtensionsOperations operations, string resourceGroupName, string vmName, string vmExtensionName, VirtualMachineExtensionInner extensionParameters) + { + return System.Threading.Tasks.Task.Factory.StartNew(s => ((IVirtualMachineExtensionsOperations)s).CreateOrUpdateAsync(resourceGroupName, vmName, vmExtensionName, extensionParameters), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// The operation to create or update the extension. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual machine where the extension should be create or + /// updated. + /// + /// + /// The name of the virtual machine extension. + /// + /// + /// Parameters supplied to the Create Virtual Machine Extension operation. + /// + /// + /// The cancellation token. + /// + public static async System.Threading.Tasks.Task CreateOrUpdateAsync(this IVirtualMachineExtensionsOperations operations, string resourceGroupName, string vmName, string vmExtensionName, VirtualMachineExtensionInner extensionParameters, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + using (var _result = await operations.CreateOrUpdateWithHttpMessagesAsync(resourceGroupName, vmName, vmExtensionName, extensionParameters, null, cancellationToken).ConfigureAwait(false)) + { + return _result.Body; + } + } + + /// + /// The operation to create or update the extension. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual machine where the extension should be create or + /// updated. + /// + /// + /// The name of the virtual machine extension. + /// + /// + /// Parameters supplied to the Create Virtual Machine Extension operation. + /// + public static VirtualMachineExtensionInner BeginCreateOrUpdate(this IVirtualMachineExtensionsOperations operations, string resourceGroupName, string vmName, string vmExtensionName, VirtualMachineExtensionInner extensionParameters) + { + return System.Threading.Tasks.Task.Factory.StartNew(s => ((IVirtualMachineExtensionsOperations)s).BeginCreateOrUpdateAsync(resourceGroupName, vmName, vmExtensionName, extensionParameters), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// The operation to create or update the extension. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual machine where the extension should be create or + /// updated. + /// + /// + /// The name of the virtual machine extension. + /// + /// + /// Parameters supplied to the Create Virtual Machine Extension operation. + /// + /// + /// The cancellation token. + /// + public static async System.Threading.Tasks.Task BeginCreateOrUpdateAsync(this IVirtualMachineExtensionsOperations operations, string resourceGroupName, string vmName, string vmExtensionName, VirtualMachineExtensionInner extensionParameters, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + using (var _result = await operations.BeginCreateOrUpdateWithHttpMessagesAsync(resourceGroupName, vmName, vmExtensionName, extensionParameters, null, cancellationToken).ConfigureAwait(false)) + { + return _result.Body; + } + } + + /// + /// The operation to delete the extension. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual machine where the extension should be deleted. + /// + /// + /// The name of the virtual machine extension. + /// + public static void Delete(this IVirtualMachineExtensionsOperations operations, string resourceGroupName, string vmName, string vmExtensionName) + { + System.Threading.Tasks.Task.Factory.StartNew(s => ((IVirtualMachineExtensionsOperations)s).DeleteAsync(resourceGroupName, vmName, vmExtensionName), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// The operation to delete the extension. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual machine where the extension should be deleted. + /// + /// + /// The name of the virtual machine extension. + /// + /// + /// The cancellation token. + /// + public static async System.Threading.Tasks.Task DeleteAsync(this IVirtualMachineExtensionsOperations operations, string resourceGroupName, string vmName, string vmExtensionName, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + await operations.DeleteWithHttpMessagesAsync(resourceGroupName, vmName, vmExtensionName, null, cancellationToken).ConfigureAwait(false); + } + + /// + /// The operation to delete the extension. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual machine where the extension should be deleted. + /// + /// + /// The name of the virtual machine extension. + /// + public static void BeginDelete(this IVirtualMachineExtensionsOperations operations, string resourceGroupName, string vmName, string vmExtensionName) + { + System.Threading.Tasks.Task.Factory.StartNew(s => ((IVirtualMachineExtensionsOperations)s).BeginDeleteAsync(resourceGroupName, vmName, vmExtensionName), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// The operation to delete the extension. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual machine where the extension should be deleted. + /// + /// + /// The name of the virtual machine extension. + /// + /// + /// The cancellation token. + /// + public static async System.Threading.Tasks.Task BeginDeleteAsync(this IVirtualMachineExtensionsOperations operations, string resourceGroupName, string vmName, string vmExtensionName, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + await operations.BeginDeleteWithHttpMessagesAsync(resourceGroupName, vmName, vmExtensionName, null, cancellationToken).ConfigureAwait(false); + } + + /// + /// The operation to get the extension. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual machine containing the extension. + /// + /// + /// The name of the virtual machine extension. + /// + /// + /// The expand expression to apply on the operation. + /// + public static VirtualMachineExtensionInner Get(this IVirtualMachineExtensionsOperations operations, string resourceGroupName, string vmName, string vmExtensionName, string expand = default(string)) + { + return System.Threading.Tasks.Task.Factory.StartNew(s => ((IVirtualMachineExtensionsOperations)s).GetAsync(resourceGroupName, vmName, vmExtensionName, expand), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// The operation to get the extension. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual machine containing the extension. + /// + /// + /// The name of the virtual machine extension. + /// + /// + /// The expand expression to apply on the operation. + /// + /// + /// The cancellation token. + /// + public static async System.Threading.Tasks.Task GetAsync(this IVirtualMachineExtensionsOperations operations, string resourceGroupName, string vmName, string vmExtensionName, string expand = default(string), System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + using (var _result = await operations.GetWithHttpMessagesAsync(resourceGroupName, vmName, vmExtensionName, expand, null, cancellationToken).ConfigureAwait(false)) + { + return _result.Body; + } + } + + } +} diff --git a/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/VirtualMachineImagesOperations.cs b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/VirtualMachineImagesOperations.cs new file mode 100644 index 000000000..d29076756 --- /dev/null +++ b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/VirtualMachineImagesOperations.cs @@ -0,0 +1,1042 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.Compute +{ + using System.Linq; + using Microsoft.Rest; + using Microsoft.Rest.Azure; + using Models; + + /// + /// VirtualMachineImagesOperations operations. + /// + internal partial class VirtualMachineImagesOperations : Microsoft.Rest.IServiceOperations, IVirtualMachineImagesOperations + { + /// + /// Initializes a new instance of the VirtualMachineImagesOperations class. + /// + /// + /// Reference to the service client. + /// + /// + /// Thrown when a required parameter is null + /// + internal VirtualMachineImagesOperations(ComputeManagementClient client) + { + if (client == null) + { + throw new System.ArgumentNullException("client"); + } + this.Client = client; + } + + /// + /// Gets a reference to the ComputeManagementClient + /// + public ComputeManagementClient Client { get; private set; } + + /// + /// Gets a virtual machine image. + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// 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 + /// + /// + /// A response object containing the response body and response headers. + /// + public async System.Threading.Tasks.Task> GetWithHttpMessagesAsync(string location, string publisherName, string offer, string skus, string version, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + if (location == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "location"); + } + if (publisherName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "publisherName"); + } + if (offer == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "offer"); + } + if (skus == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "skus"); + } + if (version == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "version"); + } + if (this.Client.ApiVersion == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.ApiVersion"); + } + if (this.Client.SubscriptionId == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.SubscriptionId"); + } + // 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("location", location); + tracingParameters.Add("publisherName", publisherName); + tracingParameters.Add("offer", offer); + tracingParameters.Add("skus", skus); + tracingParameters.Add("version", version); + 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}/providers/Microsoft.Compute/locations/{location}/publishers/{publisherName}/artifacttypes/vmimage/offers/{offer}/skus/{skus}/versions/{version}").ToString(); + _url = _url.Replace("{location}", System.Uri.EscapeDataString(location)); + _url = _url.Replace("{publisherName}", System.Uri.EscapeDataString(publisherName)); + _url = _url.Replace("{offer}", System.Uri.EscapeDataString(offer)); + _url = _url.Replace("{skus}", System.Uri.EscapeDataString(skus)); + _url = _url.Replace("{version}", System.Uri.EscapeDataString(version)); + _url = _url.Replace("{subscriptionId}", System.Uri.EscapeDataString(this.Client.SubscriptionId)); + System.Collections.Generic.List _queryParameters = new System.Collections.Generic.List(); + if (this.Client.ApiVersion != null) + { + _queryParameters.Add(string.Format("api-version={0}", System.Uri.EscapeDataString(this.Client.ApiVersion))); + } + if (_queryParameters.Count > 0) + { + _url += "?" + string.Join("&", _queryParameters); + } + // Create HTTP transport objects + System.Net.Http.HttpRequestMessage _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); + CloudError _errorBody = Microsoft.Rest.Serialization.SafeJsonConvert.DeserializeObject(_responseContent, this.Client.DeserializationSettings); + if (_errorBody != null) + { + ex = new Microsoft.Rest.Azure.CloudException(_errorBody.Message); + 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 (_httpResponse.Headers.Contains("x-ms-request-id")) + { + ex.RequestId = _httpResponse.Headers.GetValues("x-ms-request-id").FirstOrDefault(); + } + 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 a list of virtual machine images. + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// OData parameters to apply to the 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 + /// + /// + /// A response object containing the response body and response headers. + /// + public async System.Threading.Tasks.Task>> ListWithHttpMessagesAsync(string location, string publisherName, string offer, string skus, Microsoft.Rest.Azure.OData.ODataQuery odataQuery = default(Microsoft.Rest.Azure.OData.ODataQuery), System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + if (location == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "location"); + } + if (publisherName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "publisherName"); + } + if (offer == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "offer"); + } + if (skus == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "skus"); + } + if (this.Client.ApiVersion == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.ApiVersion"); + } + if (this.Client.SubscriptionId == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.SubscriptionId"); + } + // 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("odataQuery", odataQuery); + tracingParameters.Add("location", location); + tracingParameters.Add("publisherName", publisherName); + tracingParameters.Add("offer", offer); + tracingParameters.Add("skus", skus); + 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}/providers/Microsoft.Compute/locations/{location}/publishers/{publisherName}/artifacttypes/vmimage/offers/{offer}/skus/{skus}/versions").ToString(); + _url = _url.Replace("{location}", System.Uri.EscapeDataString(location)); + _url = _url.Replace("{publisherName}", System.Uri.EscapeDataString(publisherName)); + _url = _url.Replace("{offer}", System.Uri.EscapeDataString(offer)); + _url = _url.Replace("{skus}", System.Uri.EscapeDataString(skus)); + _url = _url.Replace("{subscriptionId}", System.Uri.EscapeDataString(this.Client.SubscriptionId)); + System.Collections.Generic.List _queryParameters = new System.Collections.Generic.List(); + if (odataQuery != null) + { + var _odataFilter = odataQuery.ToString(); + if (!string.IsNullOrEmpty(_odataFilter)) + { + _queryParameters.Add(_odataFilter); + } + } + if (this.Client.ApiVersion != null) + { + _queryParameters.Add(string.Format("api-version={0}", System.Uri.EscapeDataString(this.Client.ApiVersion))); + } + if (_queryParameters.Count > 0) + { + _url += "?" + string.Join("&", _queryParameters); + } + // Create HTTP transport objects + System.Net.Http.HttpRequestMessage _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); + CloudError _errorBody = Microsoft.Rest.Serialization.SafeJsonConvert.DeserializeObject(_responseContent, this.Client.DeserializationSettings); + if (_errorBody != null) + { + ex = new Microsoft.Rest.Azure.CloudException(_errorBody.Message); + 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 (_httpResponse.Headers.Contains("x-ms-request-id")) + { + ex.RequestId = _httpResponse.Headers.GetValues("x-ms-request-id").FirstOrDefault(); + } + 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 a list of virtual machine image offers. + /// + /// + /// + /// + /// + /// + /// 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 + /// + /// + /// A response object containing the response body and response headers. + /// + public async System.Threading.Tasks.Task>> ListOffersWithHttpMessagesAsync(string location, string publisherName, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + if (location == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "location"); + } + if (publisherName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "publisherName"); + } + if (this.Client.ApiVersion == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.ApiVersion"); + } + if (this.Client.SubscriptionId == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.SubscriptionId"); + } + // 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("location", location); + tracingParameters.Add("publisherName", publisherName); + tracingParameters.Add("cancellationToken", cancellationToken); + Microsoft.Rest.ServiceClientTracing.Enter(_invocationId, this, "ListOffers", tracingParameters); + } + // Construct URL + var _baseUrl = this.Client.BaseUri.AbsoluteUri; + var _url = new System.Uri(new System.Uri(_baseUrl + (_baseUrl.EndsWith("/") ? "" : "/")), "subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/publishers/{publisherName}/artifacttypes/vmimage/offers").ToString(); + _url = _url.Replace("{location}", System.Uri.EscapeDataString(location)); + _url = _url.Replace("{publisherName}", System.Uri.EscapeDataString(publisherName)); + _url = _url.Replace("{subscriptionId}", System.Uri.EscapeDataString(this.Client.SubscriptionId)); + System.Collections.Generic.List _queryParameters = new System.Collections.Generic.List(); + if (this.Client.ApiVersion != null) + { + _queryParameters.Add(string.Format("api-version={0}", System.Uri.EscapeDataString(this.Client.ApiVersion))); + } + if (_queryParameters.Count > 0) + { + _url += "?" + string.Join("&", _queryParameters); + } + // Create HTTP transport objects + System.Net.Http.HttpRequestMessage _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); + CloudError _errorBody = Microsoft.Rest.Serialization.SafeJsonConvert.DeserializeObject(_responseContent, this.Client.DeserializationSettings); + if (_errorBody != null) + { + ex = new Microsoft.Rest.Azure.CloudException(_errorBody.Message); + 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 (_httpResponse.Headers.Contains("x-ms-request-id")) + { + ex.RequestId = _httpResponse.Headers.GetValues("x-ms-request-id").FirstOrDefault(); + } + 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 a list of virtual machine image publishers. + /// + /// + /// + /// + /// 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 + /// + /// + /// A response object containing the response body and response headers. + /// + public async System.Threading.Tasks.Task>> ListPublishersWithHttpMessagesAsync(string location, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + if (location == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "location"); + } + if (this.Client.ApiVersion == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.ApiVersion"); + } + if (this.Client.SubscriptionId == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.SubscriptionId"); + } + // 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("location", location); + tracingParameters.Add("cancellationToken", cancellationToken); + Microsoft.Rest.ServiceClientTracing.Enter(_invocationId, this, "ListPublishers", tracingParameters); + } + // Construct URL + var _baseUrl = this.Client.BaseUri.AbsoluteUri; + var _url = new System.Uri(new System.Uri(_baseUrl + (_baseUrl.EndsWith("/") ? "" : "/")), "subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/publishers").ToString(); + _url = _url.Replace("{location}", System.Uri.EscapeDataString(location)); + _url = _url.Replace("{subscriptionId}", System.Uri.EscapeDataString(this.Client.SubscriptionId)); + System.Collections.Generic.List _queryParameters = new System.Collections.Generic.List(); + if (this.Client.ApiVersion != null) + { + _queryParameters.Add(string.Format("api-version={0}", System.Uri.EscapeDataString(this.Client.ApiVersion))); + } + if (_queryParameters.Count > 0) + { + _url += "?" + string.Join("&", _queryParameters); + } + // Create HTTP transport objects + System.Net.Http.HttpRequestMessage _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); + CloudError _errorBody = Microsoft.Rest.Serialization.SafeJsonConvert.DeserializeObject(_responseContent, this.Client.DeserializationSettings); + if (_errorBody != null) + { + ex = new Microsoft.Rest.Azure.CloudException(_errorBody.Message); + 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 (_httpResponse.Headers.Contains("x-ms-request-id")) + { + ex.RequestId = _httpResponse.Headers.GetValues("x-ms-request-id").FirstOrDefault(); + } + 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 a list of virtual machine image skus. + /// + /// + /// + /// + /// + /// + /// + /// + /// 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 + /// + /// + /// A response object containing the response body and response headers. + /// + public async System.Threading.Tasks.Task>> ListSkusWithHttpMessagesAsync(string location, string publisherName, string offer, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + if (location == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "location"); + } + if (publisherName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "publisherName"); + } + if (offer == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "offer"); + } + if (this.Client.ApiVersion == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.ApiVersion"); + } + if (this.Client.SubscriptionId == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.SubscriptionId"); + } + // 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("location", location); + tracingParameters.Add("publisherName", publisherName); + tracingParameters.Add("offer", offer); + tracingParameters.Add("cancellationToken", cancellationToken); + Microsoft.Rest.ServiceClientTracing.Enter(_invocationId, this, "ListSkus", tracingParameters); + } + // Construct URL + var _baseUrl = this.Client.BaseUri.AbsoluteUri; + var _url = new System.Uri(new System.Uri(_baseUrl + (_baseUrl.EndsWith("/") ? "" : "/")), "subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/publishers/{publisherName}/artifacttypes/vmimage/offers/{offer}/skus").ToString(); + _url = _url.Replace("{location}", System.Uri.EscapeDataString(location)); + _url = _url.Replace("{publisherName}", System.Uri.EscapeDataString(publisherName)); + _url = _url.Replace("{offer}", System.Uri.EscapeDataString(offer)); + _url = _url.Replace("{subscriptionId}", System.Uri.EscapeDataString(this.Client.SubscriptionId)); + System.Collections.Generic.List _queryParameters = new System.Collections.Generic.List(); + if (this.Client.ApiVersion != null) + { + _queryParameters.Add(string.Format("api-version={0}", System.Uri.EscapeDataString(this.Client.ApiVersion))); + } + if (_queryParameters.Count > 0) + { + _url += "?" + string.Join("&", _queryParameters); + } + // Create HTTP transport objects + System.Net.Http.HttpRequestMessage _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); + CloudError _errorBody = Microsoft.Rest.Serialization.SafeJsonConvert.DeserializeObject(_responseContent, this.Client.DeserializationSettings); + if (_errorBody != null) + { + ex = new Microsoft.Rest.Azure.CloudException(_errorBody.Message); + 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 (_httpResponse.Headers.Contains("x-ms-request-id")) + { + ex.RequestId = _httpResponse.Headers.GetValues("x-ms-request-id").FirstOrDefault(); + } + 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; + } + + } +} diff --git a/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/VirtualMachineImagesOperationsExtensions.cs b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/VirtualMachineImagesOperationsExtensions.cs new file mode 100644 index 000000000..77c614f55 --- /dev/null +++ b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/VirtualMachineImagesOperationsExtensions.cs @@ -0,0 +1,227 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.Compute +{ + using System.Threading.Tasks; + using Microsoft.Rest.Azure; + using Models; + + /// + /// Extension methods for VirtualMachineImagesOperations. + /// + public static partial class VirtualMachineImagesOperationsExtensions + { + /// + /// Gets a virtual machine image. + /// + /// + /// The operations group for this extension method. + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + public static VirtualMachineImageInner Get(this IVirtualMachineImagesOperations operations, string location, string publisherName, string offer, string skus, string version) + { + return System.Threading.Tasks.Task.Factory.StartNew(s => ((IVirtualMachineImagesOperations)s).GetAsync(location, publisherName, offer, skus, version), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// Gets a virtual machine image. + /// + /// + /// The operations group for this extension method. + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// The cancellation token. + /// + public static async System.Threading.Tasks.Task GetAsync(this IVirtualMachineImagesOperations operations, string location, string publisherName, string offer, string skus, string version, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + using (var _result = await operations.GetWithHttpMessagesAsync(location, publisherName, offer, skus, version, null, cancellationToken).ConfigureAwait(false)) + { + return _result.Body; + } + } + + /// + /// Gets a list of virtual machine images. + /// + /// + /// The operations group for this extension method. + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// OData parameters to apply to the operation. + /// + public static System.Collections.Generic.IList List(this IVirtualMachineImagesOperations operations, string location, string publisherName, string offer, string skus, Microsoft.Rest.Azure.OData.ODataQuery odataQuery = default(Microsoft.Rest.Azure.OData.ODataQuery)) + { + return System.Threading.Tasks.Task.Factory.StartNew(s => ((IVirtualMachineImagesOperations)s).ListAsync(location, publisherName, offer, skus, odataQuery), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// Gets a list of virtual machine images. + /// + /// + /// The operations group for this extension method. + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// OData parameters to apply to the operation. + /// + /// + /// The cancellation token. + /// + public static async System.Threading.Tasks.Task> ListAsync(this IVirtualMachineImagesOperations operations, string location, string publisherName, string offer, string skus, Microsoft.Rest.Azure.OData.ODataQuery odataQuery = default(Microsoft.Rest.Azure.OData.ODataQuery), System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + using (var _result = await operations.ListWithHttpMessagesAsync(location, publisherName, offer, skus, odataQuery, null, cancellationToken).ConfigureAwait(false)) + { + return _result.Body; + } + } + + /// + /// Gets a list of virtual machine image offers. + /// + /// + /// The operations group for this extension method. + /// + /// + /// + /// + /// + public static System.Collections.Generic.IList ListOffers(this IVirtualMachineImagesOperations operations, string location, string publisherName) + { + return System.Threading.Tasks.Task.Factory.StartNew(s => ((IVirtualMachineImagesOperations)s).ListOffersAsync(location, publisherName), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// Gets a list of virtual machine image offers. + /// + /// + /// The operations group for this extension method. + /// + /// + /// + /// + /// + /// + /// The cancellation token. + /// + public static async System.Threading.Tasks.Task> ListOffersAsync(this IVirtualMachineImagesOperations operations, string location, string publisherName, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + using (var _result = await operations.ListOffersWithHttpMessagesAsync(location, publisherName, null, cancellationToken).ConfigureAwait(false)) + { + return _result.Body; + } + } + + /// + /// Gets a list of virtual machine image publishers. + /// + /// + /// The operations group for this extension method. + /// + /// + /// + public static System.Collections.Generic.IList ListPublishers(this IVirtualMachineImagesOperations operations, string location) + { + return System.Threading.Tasks.Task.Factory.StartNew(s => ((IVirtualMachineImagesOperations)s).ListPublishersAsync(location), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// Gets a list of virtual machine image publishers. + /// + /// + /// The operations group for this extension method. + /// + /// + /// + /// + /// The cancellation token. + /// + public static async System.Threading.Tasks.Task> ListPublishersAsync(this IVirtualMachineImagesOperations operations, string location, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + using (var _result = await operations.ListPublishersWithHttpMessagesAsync(location, null, cancellationToken).ConfigureAwait(false)) + { + return _result.Body; + } + } + + /// + /// Gets a list of virtual machine image skus. + /// + /// + /// The operations group for this extension method. + /// + /// + /// + /// + /// + /// + /// + public static System.Collections.Generic.IList ListSkus(this IVirtualMachineImagesOperations operations, string location, string publisherName, string offer) + { + return System.Threading.Tasks.Task.Factory.StartNew(s => ((IVirtualMachineImagesOperations)s).ListSkusAsync(location, publisherName, offer), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// Gets a list of virtual machine image skus. + /// + /// + /// The operations group for this extension method. + /// + /// + /// + /// + /// + /// + /// + /// + /// The cancellation token. + /// + public static async System.Threading.Tasks.Task> ListSkusAsync(this IVirtualMachineImagesOperations operations, string location, string publisherName, string offer, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + using (var _result = await operations.ListSkusWithHttpMessagesAsync(location, publisherName, offer, null, cancellationToken).ConfigureAwait(false)) + { + return _result.Body; + } + } + + } +} diff --git a/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/VirtualMachineScaleSetVMsOperations.cs b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/VirtualMachineScaleSetVMsOperations.cs new file mode 100644 index 000000000..430771358 --- /dev/null +++ b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/VirtualMachineScaleSetVMsOperations.cs @@ -0,0 +1,2012 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.Compute +{ + using System.Linq; + using Microsoft.Rest; + using Microsoft.Rest.Azure; + using Models; + + /// + /// VirtualMachineScaleSetVMsOperations operations. + /// + internal partial class VirtualMachineScaleSetVMsOperations : Microsoft.Rest.IServiceOperations, IVirtualMachineScaleSetVMsOperations + { + /// + /// Initializes a new instance of the VirtualMachineScaleSetVMsOperations class. + /// + /// + /// Reference to the service client. + /// + /// + /// Thrown when a required parameter is null + /// + internal VirtualMachineScaleSetVMsOperations(ComputeManagementClient client) + { + if (client == null) + { + throw new System.ArgumentNullException("client"); + } + this.Client = client; + } + + /// + /// Gets a reference to the ComputeManagementClient + /// + public ComputeManagementClient Client { get; private set; } + + /// + /// Allows you to re-image(update the version of the installed operating + /// system) a virtual machine scale set instance. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual machine scale set. + /// + /// + /// The instance id of the virtual machine. + /// + /// + /// The headers that will be added to request. + /// + /// + /// The cancellation token. + /// + public async System.Threading.Tasks.Task ReimageWithHttpMessagesAsync(string resourceGroupName, string vmScaleSetName, string instanceId, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + // Send request + Microsoft.Rest.Azure.AzureOperationResponse _response = await BeginReimageWithHttpMessagesAsync( + resourceGroupName, vmScaleSetName, instanceId, customHeaders, cancellationToken); + return await this.Client.GetPostOrDeleteOperationResultAsync(_response, customHeaders, cancellationToken); + } + + /// + /// Allows you to re-image(update the version of the installed operating + /// system) a virtual machine scale set instance. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual machine scale set. + /// + /// + /// The instance id of the virtual machine. + /// + /// + /// 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 + /// + /// + /// A response object containing the response body and response headers. + /// + public async System.Threading.Tasks.Task BeginReimageWithHttpMessagesAsync(string resourceGroupName, string vmScaleSetName, string instanceId, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + if (resourceGroupName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "resourceGroupName"); + } + if (vmScaleSetName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "vmScaleSetName"); + } + if (instanceId == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "instanceId"); + } + if (this.Client.ApiVersion == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.ApiVersion"); + } + if (this.Client.SubscriptionId == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.SubscriptionId"); + } + // 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("vmScaleSetName", vmScaleSetName); + tracingParameters.Add("instanceId", instanceId); + tracingParameters.Add("cancellationToken", cancellationToken); + Microsoft.Rest.ServiceClientTracing.Enter(_invocationId, this, "BeginReimage", 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.Compute/virtualMachineScaleSets/{vmScaleSetName}/virtualmachines/{instanceId}/reimage").ToString(); + _url = _url.Replace("{resourceGroupName}", System.Uri.EscapeDataString(resourceGroupName)); + _url = _url.Replace("{vmScaleSetName}", System.Uri.EscapeDataString(vmScaleSetName)); + _url = _url.Replace("{instanceId}", System.Uri.EscapeDataString(instanceId)); + _url = _url.Replace("{subscriptionId}", System.Uri.EscapeDataString(this.Client.SubscriptionId)); + System.Collections.Generic.List _queryParameters = new System.Collections.Generic.List(); + if (this.Client.ApiVersion != null) + { + _queryParameters.Add(string.Format("api-version={0}", System.Uri.EscapeDataString(this.Client.ApiVersion))); + } + if (_queryParameters.Count > 0) + { + _url += "?" + string.Join("&", _queryParameters); + } + // Create HTTP transport objects + System.Net.Http.HttpRequestMessage _httpRequest = new System.Net.Http.HttpRequestMessage(); + System.Net.Http.HttpResponseMessage _httpResponse = null; + _httpRequest.Method = new System.Net.Http.HttpMethod("POST"); + _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) + { + var ex = new Microsoft.Rest.Azure.CloudException(string.Format("Operation returned an invalid status code '{0}'", _statusCode)); + if (_httpResponse.Content != null) { + _responseContent = await _httpResponse.Content.ReadAsStringAsync().ConfigureAwait(false); + } + else { + _responseContent = string.Empty; + } + ex.Request = new Microsoft.Rest.HttpRequestMessageWrapper(_httpRequest, _requestContent); + ex.Response = new Microsoft.Rest.HttpResponseMessageWrapper(_httpResponse, _responseContent); + if (_httpResponse.Headers.Contains("x-ms-request-id")) + { + ex.RequestId = _httpResponse.Headers.GetValues("x-ms-request-id").FirstOrDefault(); + } + 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(); + } + if (_shouldTrace) + { + Microsoft.Rest.ServiceClientTracing.Exit(_invocationId, _result); + } + return _result; + } + + /// + /// Allows you to deallocate a virtual machine scale set virtual machine. + /// Shuts down the virtual machine and releases the compute resources. You + /// are not billed for the compute resources that this virtual machine uses. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual machine scale set. + /// + /// + /// The instance id of the virtual machine. + /// + /// + /// The headers that will be added to request. + /// + /// + /// The cancellation token. + /// + public async System.Threading.Tasks.Task DeallocateWithHttpMessagesAsync(string resourceGroupName, string vmScaleSetName, string instanceId, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + // Send request + Microsoft.Rest.Azure.AzureOperationResponse _response = await BeginDeallocateWithHttpMessagesAsync( + resourceGroupName, vmScaleSetName, instanceId, customHeaders, cancellationToken); + return await this.Client.GetPostOrDeleteOperationResultAsync(_response, customHeaders, cancellationToken); + } + + /// + /// Allows you to deallocate a virtual machine scale set virtual machine. + /// Shuts down the virtual machine and releases the compute resources. You + /// are not billed for the compute resources that this virtual machine uses. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual machine scale set. + /// + /// + /// The instance id of the virtual machine. + /// + /// + /// 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 + /// + /// + /// A response object containing the response body and response headers. + /// + public async System.Threading.Tasks.Task BeginDeallocateWithHttpMessagesAsync(string resourceGroupName, string vmScaleSetName, string instanceId, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + if (resourceGroupName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "resourceGroupName"); + } + if (vmScaleSetName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "vmScaleSetName"); + } + if (instanceId == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "instanceId"); + } + if (this.Client.ApiVersion == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.ApiVersion"); + } + if (this.Client.SubscriptionId == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.SubscriptionId"); + } + // 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("vmScaleSetName", vmScaleSetName); + tracingParameters.Add("instanceId", instanceId); + tracingParameters.Add("cancellationToken", cancellationToken); + Microsoft.Rest.ServiceClientTracing.Enter(_invocationId, this, "BeginDeallocate", 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.Compute/virtualMachineScaleSets/{vmScaleSetName}/virtualmachines/{instanceId}/deallocate").ToString(); + _url = _url.Replace("{resourceGroupName}", System.Uri.EscapeDataString(resourceGroupName)); + _url = _url.Replace("{vmScaleSetName}", System.Uri.EscapeDataString(vmScaleSetName)); + _url = _url.Replace("{instanceId}", System.Uri.EscapeDataString(instanceId)); + _url = _url.Replace("{subscriptionId}", System.Uri.EscapeDataString(this.Client.SubscriptionId)); + System.Collections.Generic.List _queryParameters = new System.Collections.Generic.List(); + if (this.Client.ApiVersion != null) + { + _queryParameters.Add(string.Format("api-version={0}", System.Uri.EscapeDataString(this.Client.ApiVersion))); + } + if (_queryParameters.Count > 0) + { + _url += "?" + string.Join("&", _queryParameters); + } + // Create HTTP transport objects + System.Net.Http.HttpRequestMessage _httpRequest = new System.Net.Http.HttpRequestMessage(); + System.Net.Http.HttpResponseMessage _httpResponse = null; + _httpRequest.Method = new System.Net.Http.HttpMethod("POST"); + _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) + { + var ex = new Microsoft.Rest.Azure.CloudException(string.Format("Operation returned an invalid status code '{0}'", _statusCode)); + if (_httpResponse.Content != null) { + _responseContent = await _httpResponse.Content.ReadAsStringAsync().ConfigureAwait(false); + } + else { + _responseContent = string.Empty; + } + ex.Request = new Microsoft.Rest.HttpRequestMessageWrapper(_httpRequest, _requestContent); + ex.Response = new Microsoft.Rest.HttpResponseMessageWrapper(_httpResponse, _responseContent); + if (_httpResponse.Headers.Contains("x-ms-request-id")) + { + ex.RequestId = _httpResponse.Headers.GetValues("x-ms-request-id").FirstOrDefault(); + } + 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(); + } + if (_shouldTrace) + { + Microsoft.Rest.ServiceClientTracing.Exit(_invocationId, _result); + } + return _result; + } + + /// + /// Allows you to delete a virtual machine scale set. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual machine scale set. + /// + /// + /// The instance id of the virtual machine. + /// + /// + /// The headers that will be added to request. + /// + /// + /// The cancellation token. + /// + public async System.Threading.Tasks.Task DeleteWithHttpMessagesAsync(string resourceGroupName, string vmScaleSetName, string instanceId, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + // Send request + Microsoft.Rest.Azure.AzureOperationResponse _response = await BeginDeleteWithHttpMessagesAsync( + resourceGroupName, vmScaleSetName, instanceId, customHeaders, cancellationToken); + return await this.Client.GetPostOrDeleteOperationResultAsync(_response, customHeaders, cancellationToken); + } + + /// + /// Allows you to delete a virtual machine scale set. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual machine scale set. + /// + /// + /// The instance id of the virtual machine. + /// + /// + /// 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 + /// + /// + /// A response object containing the response body and response headers. + /// + public async System.Threading.Tasks.Task BeginDeleteWithHttpMessagesAsync(string resourceGroupName, string vmScaleSetName, string instanceId, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + if (resourceGroupName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "resourceGroupName"); + } + if (vmScaleSetName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "vmScaleSetName"); + } + if (instanceId == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "instanceId"); + } + if (this.Client.ApiVersion == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.ApiVersion"); + } + if (this.Client.SubscriptionId == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.SubscriptionId"); + } + // 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("vmScaleSetName", vmScaleSetName); + tracingParameters.Add("instanceId", instanceId); + 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.Compute/virtualMachineScaleSets/{vmScaleSetName}/virtualmachines/{instanceId}").ToString(); + _url = _url.Replace("{resourceGroupName}", System.Uri.EscapeDataString(resourceGroupName)); + _url = _url.Replace("{vmScaleSetName}", System.Uri.EscapeDataString(vmScaleSetName)); + _url = _url.Replace("{instanceId}", System.Uri.EscapeDataString(instanceId)); + _url = _url.Replace("{subscriptionId}", System.Uri.EscapeDataString(this.Client.SubscriptionId)); + System.Collections.Generic.List _queryParameters = new System.Collections.Generic.List(); + if (this.Client.ApiVersion != null) + { + _queryParameters.Add(string.Format("api-version={0}", System.Uri.EscapeDataString(this.Client.ApiVersion))); + } + if (_queryParameters.Count > 0) + { + _url += "?" + string.Join("&", _queryParameters); + } + // Create HTTP transport objects + System.Net.Http.HttpRequestMessage _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 != 200 && (int)_statusCode != 202 && (int)_statusCode != 204) + { + var ex = new Microsoft.Rest.Azure.CloudException(string.Format("Operation returned an invalid status code '{0}'", _statusCode)); + if (_httpResponse.Content != null) { + _responseContent = await _httpResponse.Content.ReadAsStringAsync().ConfigureAwait(false); + } + else { + _responseContent = string.Empty; + } + ex.Request = new Microsoft.Rest.HttpRequestMessageWrapper(_httpRequest, _requestContent); + ex.Response = new Microsoft.Rest.HttpResponseMessageWrapper(_httpResponse, _responseContent); + if (_httpResponse.Headers.Contains("x-ms-request-id")) + { + ex.RequestId = _httpResponse.Headers.GetValues("x-ms-request-id").FirstOrDefault(); + } + 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(); + } + if (_shouldTrace) + { + Microsoft.Rest.ServiceClientTracing.Exit(_invocationId, _result); + } + return _result; + } + + /// + /// Displays information about a virtual machine scale set virtual machine. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual machine scale set. + /// + /// + /// The instance id of the virtual machine. + /// + /// + /// 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 + /// + /// + /// A response object containing the response body and response headers. + /// + public async System.Threading.Tasks.Task> GetWithHttpMessagesAsync(string resourceGroupName, string vmScaleSetName, string instanceId, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + if (resourceGroupName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "resourceGroupName"); + } + if (vmScaleSetName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "vmScaleSetName"); + } + if (instanceId == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "instanceId"); + } + if (this.Client.ApiVersion == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.ApiVersion"); + } + if (this.Client.SubscriptionId == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.SubscriptionId"); + } + // 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("vmScaleSetName", vmScaleSetName); + tracingParameters.Add("instanceId", instanceId); + 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.Compute/virtualMachineScaleSets/{vmScaleSetName}/virtualmachines/{instanceId}").ToString(); + _url = _url.Replace("{resourceGroupName}", System.Uri.EscapeDataString(resourceGroupName)); + _url = _url.Replace("{vmScaleSetName}", System.Uri.EscapeDataString(vmScaleSetName)); + _url = _url.Replace("{instanceId}", System.Uri.EscapeDataString(instanceId)); + _url = _url.Replace("{subscriptionId}", System.Uri.EscapeDataString(this.Client.SubscriptionId)); + System.Collections.Generic.List _queryParameters = new System.Collections.Generic.List(); + if (this.Client.ApiVersion != null) + { + _queryParameters.Add(string.Format("api-version={0}", System.Uri.EscapeDataString(this.Client.ApiVersion))); + } + if (_queryParameters.Count > 0) + { + _url += "?" + string.Join("&", _queryParameters); + } + // Create HTTP transport objects + System.Net.Http.HttpRequestMessage _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); + CloudError _errorBody = Microsoft.Rest.Serialization.SafeJsonConvert.DeserializeObject(_responseContent, this.Client.DeserializationSettings); + if (_errorBody != null) + { + ex = new Microsoft.Rest.Azure.CloudException(_errorBody.Message); + 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 (_httpResponse.Headers.Contains("x-ms-request-id")) + { + ex.RequestId = _httpResponse.Headers.GetValues("x-ms-request-id").FirstOrDefault(); + } + 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; + } + + /// + /// Displays the status of a virtual machine scale set virtual machine. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual machine scale set. + /// + /// + /// The instance id of the virtual machine. + /// + /// + /// 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 + /// + /// + /// A response object containing the response body and response headers. + /// + public async System.Threading.Tasks.Task> GetInstanceViewWithHttpMessagesAsync(string resourceGroupName, string vmScaleSetName, string instanceId, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + if (resourceGroupName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "resourceGroupName"); + } + if (vmScaleSetName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "vmScaleSetName"); + } + if (instanceId == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "instanceId"); + } + if (this.Client.ApiVersion == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.ApiVersion"); + } + if (this.Client.SubscriptionId == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.SubscriptionId"); + } + // 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("vmScaleSetName", vmScaleSetName); + tracingParameters.Add("instanceId", instanceId); + tracingParameters.Add("cancellationToken", cancellationToken); + Microsoft.Rest.ServiceClientTracing.Enter(_invocationId, this, "GetInstanceView", 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.Compute/virtualMachineScaleSets/{vmScaleSetName}/virtualmachines/{instanceId}/instanceView").ToString(); + _url = _url.Replace("{resourceGroupName}", System.Uri.EscapeDataString(resourceGroupName)); + _url = _url.Replace("{vmScaleSetName}", System.Uri.EscapeDataString(vmScaleSetName)); + _url = _url.Replace("{instanceId}", System.Uri.EscapeDataString(instanceId)); + _url = _url.Replace("{subscriptionId}", System.Uri.EscapeDataString(this.Client.SubscriptionId)); + System.Collections.Generic.List _queryParameters = new System.Collections.Generic.List(); + if (this.Client.ApiVersion != null) + { + _queryParameters.Add(string.Format("api-version={0}", System.Uri.EscapeDataString(this.Client.ApiVersion))); + } + if (_queryParameters.Count > 0) + { + _url += "?" + string.Join("&", _queryParameters); + } + // Create HTTP transport objects + System.Net.Http.HttpRequestMessage _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); + CloudError _errorBody = Microsoft.Rest.Serialization.SafeJsonConvert.DeserializeObject(_responseContent, this.Client.DeserializationSettings); + if (_errorBody != null) + { + ex = new Microsoft.Rest.Azure.CloudException(_errorBody.Message); + 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 (_httpResponse.Headers.Contains("x-ms-request-id")) + { + ex.RequestId = _httpResponse.Headers.GetValues("x-ms-request-id").FirstOrDefault(); + } + 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; + } + + /// + /// Lists all virtual machines in a VM scale sets. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual machine scale set. + /// + /// + /// OData parameters to apply to the operation. + /// + /// + /// The list parameters. + /// + /// + /// 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 + /// + /// + /// A response object containing the response body and response headers. + /// + public async System.Threading.Tasks.Task>> ListWithHttpMessagesAsync(string resourceGroupName, string virtualMachineScaleSetName, Microsoft.Rest.Azure.OData.ODataQuery odataQuery = default(Microsoft.Rest.Azure.OData.ODataQuery), string select = default(string), System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + if (resourceGroupName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "resourceGroupName"); + } + if (virtualMachineScaleSetName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "virtualMachineScaleSetName"); + } + if (this.Client.ApiVersion == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.ApiVersion"); + } + if (this.Client.SubscriptionId == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.SubscriptionId"); + } + // 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("odataQuery", odataQuery); + tracingParameters.Add("resourceGroupName", resourceGroupName); + tracingParameters.Add("virtualMachineScaleSetName", virtualMachineScaleSetName); + tracingParameters.Add("select", select); + 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.Compute/virtualMachineScaleSets/{virtualMachineScaleSetName}/virtualMachines").ToString(); + _url = _url.Replace("{resourceGroupName}", System.Uri.EscapeDataString(resourceGroupName)); + _url = _url.Replace("{virtualMachineScaleSetName}", System.Uri.EscapeDataString(virtualMachineScaleSetName)); + _url = _url.Replace("{subscriptionId}", System.Uri.EscapeDataString(this.Client.SubscriptionId)); + System.Collections.Generic.List _queryParameters = new System.Collections.Generic.List(); + if (odataQuery != null) + { + var _odataFilter = odataQuery.ToString(); + if (!string.IsNullOrEmpty(_odataFilter)) + { + _queryParameters.Add(_odataFilter); + } + } + if (select != null) + { + _queryParameters.Add(string.Format("$select={0}", System.Uri.EscapeDataString(select))); + } + if (this.Client.ApiVersion != null) + { + _queryParameters.Add(string.Format("api-version={0}", System.Uri.EscapeDataString(this.Client.ApiVersion))); + } + if (_queryParameters.Count > 0) + { + _url += "?" + string.Join("&", _queryParameters); + } + // Create HTTP transport objects + System.Net.Http.HttpRequestMessage _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); + CloudError _errorBody = Microsoft.Rest.Serialization.SafeJsonConvert.DeserializeObject(_responseContent, this.Client.DeserializationSettings); + if (_errorBody != null) + { + ex = new Microsoft.Rest.Azure.CloudException(_errorBody.Message); + 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 (_httpResponse.Headers.Contains("x-ms-request-id")) + { + ex.RequestId = _httpResponse.Headers.GetValues("x-ms-request-id").FirstOrDefault(); + } + 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; + } + + /// + /// Allows you to power off (stop) a virtual machine in a VM scale set. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual machine scale set. + /// + /// + /// The instance id of the virtual machine. + /// + /// + /// The headers that will be added to request. + /// + /// + /// The cancellation token. + /// + public async System.Threading.Tasks.Task PowerOffWithHttpMessagesAsync(string resourceGroupName, string vmScaleSetName, string instanceId, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + // Send request + Microsoft.Rest.Azure.AzureOperationResponse _response = await BeginPowerOffWithHttpMessagesAsync( + resourceGroupName, vmScaleSetName, instanceId, customHeaders, cancellationToken); + return await this.Client.GetPostOrDeleteOperationResultAsync(_response, customHeaders, cancellationToken); + } + + /// + /// Allows you to power off (stop) a virtual machine in a VM scale set. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual machine scale set. + /// + /// + /// The instance id of the virtual machine. + /// + /// + /// 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 + /// + /// + /// A response object containing the response body and response headers. + /// + public async System.Threading.Tasks.Task BeginPowerOffWithHttpMessagesAsync(string resourceGroupName, string vmScaleSetName, string instanceId, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + if (resourceGroupName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "resourceGroupName"); + } + if (vmScaleSetName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "vmScaleSetName"); + } + if (instanceId == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "instanceId"); + } + if (this.Client.ApiVersion == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.ApiVersion"); + } + if (this.Client.SubscriptionId == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.SubscriptionId"); + } + // 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("vmScaleSetName", vmScaleSetName); + tracingParameters.Add("instanceId", instanceId); + tracingParameters.Add("cancellationToken", cancellationToken); + Microsoft.Rest.ServiceClientTracing.Enter(_invocationId, this, "BeginPowerOff", 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.Compute/virtualMachineScaleSets/{vmScaleSetName}/virtualmachines/{instanceId}/poweroff").ToString(); + _url = _url.Replace("{resourceGroupName}", System.Uri.EscapeDataString(resourceGroupName)); + _url = _url.Replace("{vmScaleSetName}", System.Uri.EscapeDataString(vmScaleSetName)); + _url = _url.Replace("{instanceId}", System.Uri.EscapeDataString(instanceId)); + _url = _url.Replace("{subscriptionId}", System.Uri.EscapeDataString(this.Client.SubscriptionId)); + System.Collections.Generic.List _queryParameters = new System.Collections.Generic.List(); + if (this.Client.ApiVersion != null) + { + _queryParameters.Add(string.Format("api-version={0}", System.Uri.EscapeDataString(this.Client.ApiVersion))); + } + if (_queryParameters.Count > 0) + { + _url += "?" + string.Join("&", _queryParameters); + } + // Create HTTP transport objects + System.Net.Http.HttpRequestMessage _httpRequest = new System.Net.Http.HttpRequestMessage(); + System.Net.Http.HttpResponseMessage _httpResponse = null; + _httpRequest.Method = new System.Net.Http.HttpMethod("POST"); + _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) + { + var ex = new Microsoft.Rest.Azure.CloudException(string.Format("Operation returned an invalid status code '{0}'", _statusCode)); + if (_httpResponse.Content != null) { + _responseContent = await _httpResponse.Content.ReadAsStringAsync().ConfigureAwait(false); + } + else { + _responseContent = string.Empty; + } + ex.Request = new Microsoft.Rest.HttpRequestMessageWrapper(_httpRequest, _requestContent); + ex.Response = new Microsoft.Rest.HttpResponseMessageWrapper(_httpResponse, _responseContent); + if (_httpResponse.Headers.Contains("x-ms-request-id")) + { + ex.RequestId = _httpResponse.Headers.GetValues("x-ms-request-id").FirstOrDefault(); + } + 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(); + } + if (_shouldTrace) + { + Microsoft.Rest.ServiceClientTracing.Exit(_invocationId, _result); + } + return _result; + } + + /// + /// Allows you to restart a virtual machine in a VM scale set. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual machine scale set. + /// + /// + /// The instance id of the virtual machine. + /// + /// + /// The headers that will be added to request. + /// + /// + /// The cancellation token. + /// + public async System.Threading.Tasks.Task RestartWithHttpMessagesAsync(string resourceGroupName, string vmScaleSetName, string instanceId, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + // Send request + Microsoft.Rest.Azure.AzureOperationResponse _response = await BeginRestartWithHttpMessagesAsync( + resourceGroupName, vmScaleSetName, instanceId, customHeaders, cancellationToken); + return await this.Client.GetPostOrDeleteOperationResultAsync(_response, customHeaders, cancellationToken); + } + + /// + /// Allows you to restart a virtual machine in a VM scale set. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual machine scale set. + /// + /// + /// The instance id of the virtual machine. + /// + /// + /// 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 + /// + /// + /// A response object containing the response body and response headers. + /// + public async System.Threading.Tasks.Task BeginRestartWithHttpMessagesAsync(string resourceGroupName, string vmScaleSetName, string instanceId, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + if (resourceGroupName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "resourceGroupName"); + } + if (vmScaleSetName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "vmScaleSetName"); + } + if (instanceId == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "instanceId"); + } + if (this.Client.ApiVersion == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.ApiVersion"); + } + if (this.Client.SubscriptionId == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.SubscriptionId"); + } + // 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("vmScaleSetName", vmScaleSetName); + tracingParameters.Add("instanceId", instanceId); + tracingParameters.Add("cancellationToken", cancellationToken); + Microsoft.Rest.ServiceClientTracing.Enter(_invocationId, this, "BeginRestart", 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.Compute/virtualMachineScaleSets/{vmScaleSetName}/virtualmachines/{instanceId}/restart").ToString(); + _url = _url.Replace("{resourceGroupName}", System.Uri.EscapeDataString(resourceGroupName)); + _url = _url.Replace("{vmScaleSetName}", System.Uri.EscapeDataString(vmScaleSetName)); + _url = _url.Replace("{instanceId}", System.Uri.EscapeDataString(instanceId)); + _url = _url.Replace("{subscriptionId}", System.Uri.EscapeDataString(this.Client.SubscriptionId)); + System.Collections.Generic.List _queryParameters = new System.Collections.Generic.List(); + if (this.Client.ApiVersion != null) + { + _queryParameters.Add(string.Format("api-version={0}", System.Uri.EscapeDataString(this.Client.ApiVersion))); + } + if (_queryParameters.Count > 0) + { + _url += "?" + string.Join("&", _queryParameters); + } + // Create HTTP transport objects + System.Net.Http.HttpRequestMessage _httpRequest = new System.Net.Http.HttpRequestMessage(); + System.Net.Http.HttpResponseMessage _httpResponse = null; + _httpRequest.Method = new System.Net.Http.HttpMethod("POST"); + _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) + { + var ex = new Microsoft.Rest.Azure.CloudException(string.Format("Operation returned an invalid status code '{0}'", _statusCode)); + if (_httpResponse.Content != null) { + _responseContent = await _httpResponse.Content.ReadAsStringAsync().ConfigureAwait(false); + } + else { + _responseContent = string.Empty; + } + ex.Request = new Microsoft.Rest.HttpRequestMessageWrapper(_httpRequest, _requestContent); + ex.Response = new Microsoft.Rest.HttpResponseMessageWrapper(_httpResponse, _responseContent); + if (_httpResponse.Headers.Contains("x-ms-request-id")) + { + ex.RequestId = _httpResponse.Headers.GetValues("x-ms-request-id").FirstOrDefault(); + } + 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(); + } + if (_shouldTrace) + { + Microsoft.Rest.ServiceClientTracing.Exit(_invocationId, _result); + } + return _result; + } + + /// + /// Allows you to start a virtual machine in a VM scale set. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual machine scale set. + /// + /// + /// The instance id of the virtual machine. + /// + /// + /// The headers that will be added to request. + /// + /// + /// The cancellation token. + /// + public async System.Threading.Tasks.Task StartWithHttpMessagesAsync(string resourceGroupName, string vmScaleSetName, string instanceId, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + // Send request + Microsoft.Rest.Azure.AzureOperationResponse _response = await BeginStartWithHttpMessagesAsync( + resourceGroupName, vmScaleSetName, instanceId, customHeaders, cancellationToken); + return await this.Client.GetPostOrDeleteOperationResultAsync(_response, customHeaders, cancellationToken); + } + + /// + /// Allows you to start a virtual machine in a VM scale set. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual machine scale set. + /// + /// + /// The instance id of the virtual machine. + /// + /// + /// 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 + /// + /// + /// A response object containing the response body and response headers. + /// + public async System.Threading.Tasks.Task BeginStartWithHttpMessagesAsync(string resourceGroupName, string vmScaleSetName, string instanceId, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + if (resourceGroupName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "resourceGroupName"); + } + if (vmScaleSetName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "vmScaleSetName"); + } + if (instanceId == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "instanceId"); + } + if (this.Client.ApiVersion == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.ApiVersion"); + } + if (this.Client.SubscriptionId == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.SubscriptionId"); + } + // 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("vmScaleSetName", vmScaleSetName); + tracingParameters.Add("instanceId", instanceId); + tracingParameters.Add("cancellationToken", cancellationToken); + Microsoft.Rest.ServiceClientTracing.Enter(_invocationId, this, "BeginStart", 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.Compute/virtualMachineScaleSets/{vmScaleSetName}/virtualmachines/{instanceId}/start").ToString(); + _url = _url.Replace("{resourceGroupName}", System.Uri.EscapeDataString(resourceGroupName)); + _url = _url.Replace("{vmScaleSetName}", System.Uri.EscapeDataString(vmScaleSetName)); + _url = _url.Replace("{instanceId}", System.Uri.EscapeDataString(instanceId)); + _url = _url.Replace("{subscriptionId}", System.Uri.EscapeDataString(this.Client.SubscriptionId)); + System.Collections.Generic.List _queryParameters = new System.Collections.Generic.List(); + if (this.Client.ApiVersion != null) + { + _queryParameters.Add(string.Format("api-version={0}", System.Uri.EscapeDataString(this.Client.ApiVersion))); + } + if (_queryParameters.Count > 0) + { + _url += "?" + string.Join("&", _queryParameters); + } + // Create HTTP transport objects + System.Net.Http.HttpRequestMessage _httpRequest = new System.Net.Http.HttpRequestMessage(); + System.Net.Http.HttpResponseMessage _httpResponse = null; + _httpRequest.Method = new System.Net.Http.HttpMethod("POST"); + _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) + { + var ex = new Microsoft.Rest.Azure.CloudException(string.Format("Operation returned an invalid status code '{0}'", _statusCode)); + if (_httpResponse.Content != null) { + _responseContent = await _httpResponse.Content.ReadAsStringAsync().ConfigureAwait(false); + } + else { + _responseContent = string.Empty; + } + ex.Request = new Microsoft.Rest.HttpRequestMessageWrapper(_httpRequest, _requestContent); + ex.Response = new Microsoft.Rest.HttpResponseMessageWrapper(_httpResponse, _responseContent); + if (_httpResponse.Headers.Contains("x-ms-request-id")) + { + ex.RequestId = _httpResponse.Headers.GetValues("x-ms-request-id").FirstOrDefault(); + } + 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(); + } + if (_shouldTrace) + { + Microsoft.Rest.ServiceClientTracing.Exit(_invocationId, _result); + } + return _result; + } + + /// + /// Lists all virtual machines in a VM scale sets. + /// + /// + /// 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 + /// + /// + /// 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 += "?" + string.Join("&", _queryParameters); + } + // Create HTTP transport objects + System.Net.Http.HttpRequestMessage _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); + CloudError _errorBody = Microsoft.Rest.Serialization.SafeJsonConvert.DeserializeObject(_responseContent, this.Client.DeserializationSettings); + if (_errorBody != null) + { + ex = new Microsoft.Rest.Azure.CloudException(_errorBody.Message); + 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 (_httpResponse.Headers.Contains("x-ms-request-id")) + { + ex.RequestId = _httpResponse.Headers.GetValues("x-ms-request-id").FirstOrDefault(); + } + 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; + } + + } +} diff --git a/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/VirtualMachineScaleSetVMsOperationsExtensions.cs b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/VirtualMachineScaleSetVMsOperationsExtensions.cs new file mode 100644 index 000000000..84b6d48da --- /dev/null +++ b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/VirtualMachineScaleSetVMsOperationsExtensions.cs @@ -0,0 +1,727 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.Compute +{ + using System.Threading.Tasks; + using Microsoft.Rest.Azure; + using Models; + + /// + /// Extension methods for VirtualMachineScaleSetVMsOperations. + /// + public static partial class VirtualMachineScaleSetVMsOperationsExtensions + { + /// + /// Allows you to re-image(update the version of the installed operating + /// system) a virtual machine scale set instance. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual machine scale set. + /// + /// + /// The instance id of the virtual machine. + /// + public static void Reimage(this IVirtualMachineScaleSetVMsOperations operations, string resourceGroupName, string vmScaleSetName, string instanceId) + { + System.Threading.Tasks.Task.Factory.StartNew(s => ((IVirtualMachineScaleSetVMsOperations)s).ReimageAsync(resourceGroupName, vmScaleSetName, instanceId), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// Allows you to re-image(update the version of the installed operating + /// system) a virtual machine scale set instance. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual machine scale set. + /// + /// + /// The instance id of the virtual machine. + /// + /// + /// The cancellation token. + /// + public static async System.Threading.Tasks.Task ReimageAsync(this IVirtualMachineScaleSetVMsOperations operations, string resourceGroupName, string vmScaleSetName, string instanceId, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + await operations.ReimageWithHttpMessagesAsync(resourceGroupName, vmScaleSetName, instanceId, null, cancellationToken).ConfigureAwait(false); + } + + /// + /// Allows you to re-image(update the version of the installed operating + /// system) a virtual machine scale set instance. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual machine scale set. + /// + /// + /// The instance id of the virtual machine. + /// + public static void BeginReimage(this IVirtualMachineScaleSetVMsOperations operations, string resourceGroupName, string vmScaleSetName, string instanceId) + { + System.Threading.Tasks.Task.Factory.StartNew(s => ((IVirtualMachineScaleSetVMsOperations)s).BeginReimageAsync(resourceGroupName, vmScaleSetName, instanceId), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// Allows you to re-image(update the version of the installed operating + /// system) a virtual machine scale set instance. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual machine scale set. + /// + /// + /// The instance id of the virtual machine. + /// + /// + /// The cancellation token. + /// + public static async System.Threading.Tasks.Task BeginReimageAsync(this IVirtualMachineScaleSetVMsOperations operations, string resourceGroupName, string vmScaleSetName, string instanceId, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + await operations.BeginReimageWithHttpMessagesAsync(resourceGroupName, vmScaleSetName, instanceId, null, cancellationToken).ConfigureAwait(false); + } + + /// + /// Allows you to deallocate a virtual machine scale set virtual machine. + /// Shuts down the virtual machine and releases the compute resources. You + /// are not billed for the compute resources that this virtual machine uses. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual machine scale set. + /// + /// + /// The instance id of the virtual machine. + /// + public static void Deallocate(this IVirtualMachineScaleSetVMsOperations operations, string resourceGroupName, string vmScaleSetName, string instanceId) + { + System.Threading.Tasks.Task.Factory.StartNew(s => ((IVirtualMachineScaleSetVMsOperations)s).DeallocateAsync(resourceGroupName, vmScaleSetName, instanceId), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// Allows you to deallocate a virtual machine scale set virtual machine. + /// Shuts down the virtual machine and releases the compute resources. You + /// are not billed for the compute resources that this virtual machine uses. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual machine scale set. + /// + /// + /// The instance id of the virtual machine. + /// + /// + /// The cancellation token. + /// + public static async System.Threading.Tasks.Task DeallocateAsync(this IVirtualMachineScaleSetVMsOperations operations, string resourceGroupName, string vmScaleSetName, string instanceId, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + await operations.DeallocateWithHttpMessagesAsync(resourceGroupName, vmScaleSetName, instanceId, null, cancellationToken).ConfigureAwait(false); + } + + /// + /// Allows you to deallocate a virtual machine scale set virtual machine. + /// Shuts down the virtual machine and releases the compute resources. You + /// are not billed for the compute resources that this virtual machine uses. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual machine scale set. + /// + /// + /// The instance id of the virtual machine. + /// + public static void BeginDeallocate(this IVirtualMachineScaleSetVMsOperations operations, string resourceGroupName, string vmScaleSetName, string instanceId) + { + System.Threading.Tasks.Task.Factory.StartNew(s => ((IVirtualMachineScaleSetVMsOperations)s).BeginDeallocateAsync(resourceGroupName, vmScaleSetName, instanceId), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// Allows you to deallocate a virtual machine scale set virtual machine. + /// Shuts down the virtual machine and releases the compute resources. You + /// are not billed for the compute resources that this virtual machine uses. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual machine scale set. + /// + /// + /// The instance id of the virtual machine. + /// + /// + /// The cancellation token. + /// + public static async System.Threading.Tasks.Task BeginDeallocateAsync(this IVirtualMachineScaleSetVMsOperations operations, string resourceGroupName, string vmScaleSetName, string instanceId, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + await operations.BeginDeallocateWithHttpMessagesAsync(resourceGroupName, vmScaleSetName, instanceId, null, cancellationToken).ConfigureAwait(false); + } + + /// + /// Allows you to delete a virtual machine scale set. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual machine scale set. + /// + /// + /// The instance id of the virtual machine. + /// + public static void Delete(this IVirtualMachineScaleSetVMsOperations operations, string resourceGroupName, string vmScaleSetName, string instanceId) + { + System.Threading.Tasks.Task.Factory.StartNew(s => ((IVirtualMachineScaleSetVMsOperations)s).DeleteAsync(resourceGroupName, vmScaleSetName, instanceId), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// Allows you to delete a virtual machine scale set. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual machine scale set. + /// + /// + /// The instance id of the virtual machine. + /// + /// + /// The cancellation token. + /// + public static async System.Threading.Tasks.Task DeleteAsync(this IVirtualMachineScaleSetVMsOperations operations, string resourceGroupName, string vmScaleSetName, string instanceId, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + await operations.DeleteWithHttpMessagesAsync(resourceGroupName, vmScaleSetName, instanceId, null, cancellationToken).ConfigureAwait(false); + } + + /// + /// Allows you to delete a virtual machine scale set. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual machine scale set. + /// + /// + /// The instance id of the virtual machine. + /// + public static void BeginDelete(this IVirtualMachineScaleSetVMsOperations operations, string resourceGroupName, string vmScaleSetName, string instanceId) + { + System.Threading.Tasks.Task.Factory.StartNew(s => ((IVirtualMachineScaleSetVMsOperations)s).BeginDeleteAsync(resourceGroupName, vmScaleSetName, instanceId), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// Allows you to delete a virtual machine scale set. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual machine scale set. + /// + /// + /// The instance id of the virtual machine. + /// + /// + /// The cancellation token. + /// + public static async System.Threading.Tasks.Task BeginDeleteAsync(this IVirtualMachineScaleSetVMsOperations operations, string resourceGroupName, string vmScaleSetName, string instanceId, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + await operations.BeginDeleteWithHttpMessagesAsync(resourceGroupName, vmScaleSetName, instanceId, null, cancellationToken).ConfigureAwait(false); + } + + /// + /// Displays information about a virtual machine scale set virtual machine. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual machine scale set. + /// + /// + /// The instance id of the virtual machine. + /// + public static VirtualMachineScaleSetVMInner Get(this IVirtualMachineScaleSetVMsOperations operations, string resourceGroupName, string vmScaleSetName, string instanceId) + { + return System.Threading.Tasks.Task.Factory.StartNew(s => ((IVirtualMachineScaleSetVMsOperations)s).GetAsync(resourceGroupName, vmScaleSetName, instanceId), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// Displays information about a virtual machine scale set virtual machine. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual machine scale set. + /// + /// + /// The instance id of the virtual machine. + /// + /// + /// The cancellation token. + /// + public static async System.Threading.Tasks.Task GetAsync(this IVirtualMachineScaleSetVMsOperations operations, string resourceGroupName, string vmScaleSetName, string instanceId, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + using (var _result = await operations.GetWithHttpMessagesAsync(resourceGroupName, vmScaleSetName, instanceId, null, cancellationToken).ConfigureAwait(false)) + { + return _result.Body; + } + } + + /// + /// Displays the status of a virtual machine scale set virtual machine. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual machine scale set. + /// + /// + /// The instance id of the virtual machine. + /// + public static VirtualMachineScaleSetVMInstanceViewInner GetInstanceView(this IVirtualMachineScaleSetVMsOperations operations, string resourceGroupName, string vmScaleSetName, string instanceId) + { + return System.Threading.Tasks.Task.Factory.StartNew(s => ((IVirtualMachineScaleSetVMsOperations)s).GetInstanceViewAsync(resourceGroupName, vmScaleSetName, instanceId), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// Displays the status of a virtual machine scale set virtual machine. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual machine scale set. + /// + /// + /// The instance id of the virtual machine. + /// + /// + /// The cancellation token. + /// + public static async System.Threading.Tasks.Task GetInstanceViewAsync(this IVirtualMachineScaleSetVMsOperations operations, string resourceGroupName, string vmScaleSetName, string instanceId, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + using (var _result = await operations.GetInstanceViewWithHttpMessagesAsync(resourceGroupName, vmScaleSetName, instanceId, null, cancellationToken).ConfigureAwait(false)) + { + return _result.Body; + } + } + + /// + /// Lists all virtual machines in a VM scale sets. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual machine scale set. + /// + /// + /// OData parameters to apply to the operation. + /// + /// + /// The list parameters. + /// + public static Microsoft.Rest.Azure.IPage List(this IVirtualMachineScaleSetVMsOperations operations, string resourceGroupName, string virtualMachineScaleSetName, Microsoft.Rest.Azure.OData.ODataQuery odataQuery = default(Microsoft.Rest.Azure.OData.ODataQuery), string select = default(string)) + { + return System.Threading.Tasks.Task.Factory.StartNew(s => ((IVirtualMachineScaleSetVMsOperations)s).ListAsync(resourceGroupName, virtualMachineScaleSetName, odataQuery, select), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// Lists all virtual machines in a VM scale sets. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual machine scale set. + /// + /// + /// OData parameters to apply to the operation. + /// + /// + /// The list parameters. + /// + /// + /// The cancellation token. + /// + public static async Task> ListAsync(this IVirtualMachineScaleSetVMsOperations operations, string resourceGroupName, string virtualMachineScaleSetName, Microsoft.Rest.Azure.OData.ODataQuery odataQuery = default(Microsoft.Rest.Azure.OData.ODataQuery), string select = default(string), System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + using (var _result = await operations.ListWithHttpMessagesAsync(resourceGroupName, virtualMachineScaleSetName, odataQuery, select, null, cancellationToken).ConfigureAwait(false)) + { + return _result.Body; + } + } + + /// + /// Allows you to power off (stop) a virtual machine in a VM scale set. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual machine scale set. + /// + /// + /// The instance id of the virtual machine. + /// + public static void PowerOff(this IVirtualMachineScaleSetVMsOperations operations, string resourceGroupName, string vmScaleSetName, string instanceId) + { + System.Threading.Tasks.Task.Factory.StartNew(s => ((IVirtualMachineScaleSetVMsOperations)s).PowerOffAsync(resourceGroupName, vmScaleSetName, instanceId), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// Allows you to power off (stop) a virtual machine in a VM scale set. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual machine scale set. + /// + /// + /// The instance id of the virtual machine. + /// + /// + /// The cancellation token. + /// + public static async System.Threading.Tasks.Task PowerOffAsync(this IVirtualMachineScaleSetVMsOperations operations, string resourceGroupName, string vmScaleSetName, string instanceId, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + await operations.PowerOffWithHttpMessagesAsync(resourceGroupName, vmScaleSetName, instanceId, null, cancellationToken).ConfigureAwait(false); + } + + /// + /// Allows you to power off (stop) a virtual machine in a VM scale set. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual machine scale set. + /// + /// + /// The instance id of the virtual machine. + /// + public static void BeginPowerOff(this IVirtualMachineScaleSetVMsOperations operations, string resourceGroupName, string vmScaleSetName, string instanceId) + { + System.Threading.Tasks.Task.Factory.StartNew(s => ((IVirtualMachineScaleSetVMsOperations)s).BeginPowerOffAsync(resourceGroupName, vmScaleSetName, instanceId), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// Allows you to power off (stop) a virtual machine in a VM scale set. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual machine scale set. + /// + /// + /// The instance id of the virtual machine. + /// + /// + /// The cancellation token. + /// + public static async System.Threading.Tasks.Task BeginPowerOffAsync(this IVirtualMachineScaleSetVMsOperations operations, string resourceGroupName, string vmScaleSetName, string instanceId, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + await operations.BeginPowerOffWithHttpMessagesAsync(resourceGroupName, vmScaleSetName, instanceId, null, cancellationToken).ConfigureAwait(false); + } + + /// + /// Allows you to restart a virtual machine in a VM scale set. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual machine scale set. + /// + /// + /// The instance id of the virtual machine. + /// + public static void Restart(this IVirtualMachineScaleSetVMsOperations operations, string resourceGroupName, string vmScaleSetName, string instanceId) + { + System.Threading.Tasks.Task.Factory.StartNew(s => ((IVirtualMachineScaleSetVMsOperations)s).RestartAsync(resourceGroupName, vmScaleSetName, instanceId), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// Allows you to restart a virtual machine in a VM scale set. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual machine scale set. + /// + /// + /// The instance id of the virtual machine. + /// + /// + /// The cancellation token. + /// + public static async System.Threading.Tasks.Task RestartAsync(this IVirtualMachineScaleSetVMsOperations operations, string resourceGroupName, string vmScaleSetName, string instanceId, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + await operations.RestartWithHttpMessagesAsync(resourceGroupName, vmScaleSetName, instanceId, null, cancellationToken).ConfigureAwait(false); + } + + /// + /// Allows you to restart a virtual machine in a VM scale set. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual machine scale set. + /// + /// + /// The instance id of the virtual machine. + /// + public static void BeginRestart(this IVirtualMachineScaleSetVMsOperations operations, string resourceGroupName, string vmScaleSetName, string instanceId) + { + System.Threading.Tasks.Task.Factory.StartNew(s => ((IVirtualMachineScaleSetVMsOperations)s).BeginRestartAsync(resourceGroupName, vmScaleSetName, instanceId), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// Allows you to restart a virtual machine in a VM scale set. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual machine scale set. + /// + /// + /// The instance id of the virtual machine. + /// + /// + /// The cancellation token. + /// + public static async System.Threading.Tasks.Task BeginRestartAsync(this IVirtualMachineScaleSetVMsOperations operations, string resourceGroupName, string vmScaleSetName, string instanceId, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + await operations.BeginRestartWithHttpMessagesAsync(resourceGroupName, vmScaleSetName, instanceId, null, cancellationToken).ConfigureAwait(false); + } + + /// + /// Allows you to start a virtual machine in a VM scale set. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual machine scale set. + /// + /// + /// The instance id of the virtual machine. + /// + public static void Start(this IVirtualMachineScaleSetVMsOperations operations, string resourceGroupName, string vmScaleSetName, string instanceId) + { + System.Threading.Tasks.Task.Factory.StartNew(s => ((IVirtualMachineScaleSetVMsOperations)s).StartAsync(resourceGroupName, vmScaleSetName, instanceId), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// Allows you to start a virtual machine in a VM scale set. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual machine scale set. + /// + /// + /// The instance id of the virtual machine. + /// + /// + /// The cancellation token. + /// + public static async System.Threading.Tasks.Task StartAsync(this IVirtualMachineScaleSetVMsOperations operations, string resourceGroupName, string vmScaleSetName, string instanceId, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + await operations.StartWithHttpMessagesAsync(resourceGroupName, vmScaleSetName, instanceId, null, cancellationToken).ConfigureAwait(false); + } + + /// + /// Allows you to start a virtual machine in a VM scale set. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual machine scale set. + /// + /// + /// The instance id of the virtual machine. + /// + public static void BeginStart(this IVirtualMachineScaleSetVMsOperations operations, string resourceGroupName, string vmScaleSetName, string instanceId) + { + System.Threading.Tasks.Task.Factory.StartNew(s => ((IVirtualMachineScaleSetVMsOperations)s).BeginStartAsync(resourceGroupName, vmScaleSetName, instanceId), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// Allows you to start a virtual machine in a VM scale set. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual machine scale set. + /// + /// + /// The instance id of the virtual machine. + /// + /// + /// The cancellation token. + /// + public static async System.Threading.Tasks.Task BeginStartAsync(this IVirtualMachineScaleSetVMsOperations operations, string resourceGroupName, string vmScaleSetName, string instanceId, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + await operations.BeginStartWithHttpMessagesAsync(resourceGroupName, vmScaleSetName, instanceId, null, cancellationToken).ConfigureAwait(false); + } + + /// + /// Lists all virtual machines in a VM scale sets. + /// + /// + /// 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 IVirtualMachineScaleSetVMsOperations operations, string nextPageLink) + { + return System.Threading.Tasks.Task.Factory.StartNew(s => ((IVirtualMachineScaleSetVMsOperations)s).ListNextAsync(nextPageLink), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// Lists all virtual machines in a VM scale sets. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The NextLink from the previous successful call to List operation. + /// + /// + /// The cancellation token. + /// + public static async Task> ListNextAsync(this IVirtualMachineScaleSetVMsOperations 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/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/VirtualMachineScaleSetsOperations.cs b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/VirtualMachineScaleSetsOperations.cs new file mode 100644 index 000000000..61cd78981 --- /dev/null +++ b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/VirtualMachineScaleSetsOperations.cs @@ -0,0 +1,3356 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.Compute +{ + using System.Linq; + using Microsoft.Rest; + using Microsoft.Rest.Azure; + using Models; + + /// + /// VirtualMachineScaleSetsOperations operations. + /// + internal partial class VirtualMachineScaleSetsOperations : Microsoft.Rest.IServiceOperations, IVirtualMachineScaleSetsOperations + { + /// + /// Initializes a new instance of the VirtualMachineScaleSetsOperations class. + /// + /// + /// Reference to the service client. + /// + /// + /// Thrown when a required parameter is null + /// + internal VirtualMachineScaleSetsOperations(ComputeManagementClient client) + { + if (client == null) + { + throw new System.ArgumentNullException("client"); + } + this.Client = client; + } + + /// + /// Gets a reference to the ComputeManagementClient + /// + public ComputeManagementClient Client { get; private set; } + + /// + /// Allows you to create or update a virtual machine scale set by providing + /// parameters or a path to pre-configured parameter file. + /// + /// + /// The name of the resource group. + /// + /// + /// Parameters supplied to the Create Virtual Machine Scale Set operation. + /// + /// + /// Parameters supplied to the Create Virtual Machine Scale Set operation. + /// + /// + /// The headers that will be added to request. + /// + /// + /// The cancellation token. + /// + public async System.Threading.Tasks.Task> CreateOrUpdateWithHttpMessagesAsync(string resourceGroupName, string name, VirtualMachineScaleSetInner 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, name, parameters, customHeaders, cancellationToken); + return await this.Client.GetPutOrPatchOperationResultAsync(_response, + customHeaders, + cancellationToken); + } + + /// + /// Allows you to create or update a virtual machine scale set by providing + /// parameters or a path to pre-configured parameter file. + /// + /// + /// The name of the resource group. + /// + /// + /// Parameters supplied to the Create Virtual Machine Scale Set operation. + /// + /// + /// Parameters supplied to the Create Virtual Machine Scale Set 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 + /// + /// + /// A response object containing the response body and response headers. + /// + public async System.Threading.Tasks.Task> BeginCreateOrUpdateWithHttpMessagesAsync(string resourceGroupName, string name, VirtualMachineScaleSetInner parameters, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + if (resourceGroupName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "resourceGroupName"); + } + if (name == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "name"); + } + if (parameters == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "parameters"); + } + if (parameters != null) + { + parameters.Validate(); + } + if (this.Client.ApiVersion == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.ApiVersion"); + } + if (this.Client.SubscriptionId == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.SubscriptionId"); + } + // 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("name", name); + 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.Compute/virtualMachineScaleSets/{name}").ToString(); + _url = _url.Replace("{resourceGroupName}", System.Uri.EscapeDataString(resourceGroupName)); + _url = _url.Replace("{name}", System.Uri.EscapeDataString(name)); + _url = _url.Replace("{subscriptionId}", System.Uri.EscapeDataString(this.Client.SubscriptionId)); + System.Collections.Generic.List _queryParameters = new System.Collections.Generic.List(); + if (this.Client.ApiVersion != null) + { + _queryParameters.Add(string.Format("api-version={0}", System.Uri.EscapeDataString(this.Client.ApiVersion))); + } + if (_queryParameters.Count > 0) + { + _url += "?" + string.Join("&", _queryParameters); + } + // Create HTTP transport objects + System.Net.Http.HttpRequestMessage _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); + CloudError _errorBody = Microsoft.Rest.Serialization.SafeJsonConvert.DeserializeObject(_responseContent, this.Client.DeserializationSettings); + if (_errorBody != null) + { + ex = new Microsoft.Rest.Azure.CloudException(_errorBody.Message); + 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 (_httpResponse.Headers.Contains("x-ms-request-id")) + { + ex.RequestId = _httpResponse.Headers.GetValues("x-ms-request-id").FirstOrDefault(); + } + 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); + } + } + if (_shouldTrace) + { + Microsoft.Rest.ServiceClientTracing.Exit(_invocationId, _result); + } + return _result; + } + + /// + /// Allows you to deallocate virtual machines in a virtual machine scale set. + /// Shuts down the virtual machines and releases the compute resources. You + /// are not billed for the compute resources that this virtual machine scale + /// set uses. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual machine scale set. + /// + /// + /// the virtual machine scale set instance ids. + /// + /// + /// The headers that will be added to request. + /// + /// + /// The cancellation token. + /// + public async System.Threading.Tasks.Task DeallocateWithHttpMessagesAsync(string resourceGroupName, string vmScaleSetName, System.Collections.Generic.IList instanceIds = default(System.Collections.Generic.IList), System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + // Send request + Microsoft.Rest.Azure.AzureOperationResponse _response = await BeginDeallocateWithHttpMessagesAsync( + resourceGroupName, vmScaleSetName, instanceIds, customHeaders, cancellationToken); + return await this.Client.GetPostOrDeleteOperationResultAsync(_response, customHeaders, cancellationToken); + } + + /// + /// Allows you to deallocate virtual machines in a virtual machine scale set. + /// Shuts down the virtual machines and releases the compute resources. You + /// are not billed for the compute resources that this virtual machine scale + /// set uses. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual machine scale set. + /// + /// + /// the virtual machine scale set instance ids. + /// + /// + /// 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 + /// + /// + /// A response object containing the response body and response headers. + /// + public async System.Threading.Tasks.Task BeginDeallocateWithHttpMessagesAsync(string resourceGroupName, string vmScaleSetName, System.Collections.Generic.IList instanceIds = default(System.Collections.Generic.IList), System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + if (resourceGroupName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "resourceGroupName"); + } + if (vmScaleSetName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "vmScaleSetName"); + } + if (this.Client.ApiVersion == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.ApiVersion"); + } + if (this.Client.SubscriptionId == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.SubscriptionId"); + } + VirtualMachineScaleSetVMInstanceIDs vmInstanceIDs = default(VirtualMachineScaleSetVMInstanceIDs); + if (instanceIds != null) + { + vmInstanceIDs = new VirtualMachineScaleSetVMInstanceIDs(); + vmInstanceIDs.InstanceIds = instanceIds; + } + // 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("vmScaleSetName", vmScaleSetName); + tracingParameters.Add("vmInstanceIDs", vmInstanceIDs); + tracingParameters.Add("cancellationToken", cancellationToken); + Microsoft.Rest.ServiceClientTracing.Enter(_invocationId, this, "BeginDeallocate", 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.Compute/virtualMachineScaleSets/{vmScaleSetName}/deallocate").ToString(); + _url = _url.Replace("{resourceGroupName}", System.Uri.EscapeDataString(resourceGroupName)); + _url = _url.Replace("{vmScaleSetName}", System.Uri.EscapeDataString(vmScaleSetName)); + _url = _url.Replace("{subscriptionId}", System.Uri.EscapeDataString(this.Client.SubscriptionId)); + System.Collections.Generic.List _queryParameters = new System.Collections.Generic.List(); + if (this.Client.ApiVersion != null) + { + _queryParameters.Add(string.Format("api-version={0}", System.Uri.EscapeDataString(this.Client.ApiVersion))); + } + if (_queryParameters.Count > 0) + { + _url += "?" + string.Join("&", _queryParameters); + } + // Create HTTP transport objects + System.Net.Http.HttpRequestMessage _httpRequest = new System.Net.Http.HttpRequestMessage(); + System.Net.Http.HttpResponseMessage _httpResponse = null; + _httpRequest.Method = new System.Net.Http.HttpMethod("POST"); + _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(vmInstanceIDs != null) + { + _requestContent = Microsoft.Rest.Serialization.SafeJsonConvert.SerializeObject(vmInstanceIDs, 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 != 202) + { + var ex = new Microsoft.Rest.Azure.CloudException(string.Format("Operation returned an invalid status code '{0}'", _statusCode)); + if (_httpResponse.Content != null) { + _responseContent = await _httpResponse.Content.ReadAsStringAsync().ConfigureAwait(false); + } + else { + _responseContent = string.Empty; + } + ex.Request = new Microsoft.Rest.HttpRequestMessageWrapper(_httpRequest, _requestContent); + ex.Response = new Microsoft.Rest.HttpResponseMessageWrapper(_httpResponse, _responseContent); + if (_httpResponse.Headers.Contains("x-ms-request-id")) + { + ex.RequestId = _httpResponse.Headers.GetValues("x-ms-request-id").FirstOrDefault(); + } + 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(); + } + if (_shouldTrace) + { + Microsoft.Rest.ServiceClientTracing.Exit(_invocationId, _result); + } + return _result; + } + + /// + /// Allows you to delete a virtual machine scale set. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual machine scale set. + /// + /// + /// The headers that will be added to request. + /// + /// + /// The cancellation token. + /// + public async System.Threading.Tasks.Task DeleteWithHttpMessagesAsync(string resourceGroupName, string vmScaleSetName, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + // Send request + Microsoft.Rest.Azure.AzureOperationResponse _response = await BeginDeleteWithHttpMessagesAsync( + resourceGroupName, vmScaleSetName, customHeaders, cancellationToken); + return await this.Client.GetPostOrDeleteOperationResultAsync(_response, customHeaders, cancellationToken); + } + + /// + /// Allows you to delete a virtual machine scale set. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual machine scale set. + /// + /// + /// 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 + /// + /// + /// A response object containing the response body and response headers. + /// + public async System.Threading.Tasks.Task BeginDeleteWithHttpMessagesAsync(string resourceGroupName, string vmScaleSetName, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + if (resourceGroupName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "resourceGroupName"); + } + if (vmScaleSetName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "vmScaleSetName"); + } + if (this.Client.ApiVersion == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.ApiVersion"); + } + if (this.Client.SubscriptionId == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.SubscriptionId"); + } + // 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("vmScaleSetName", vmScaleSetName); + 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.Compute/virtualMachineScaleSets/{vmScaleSetName}").ToString(); + _url = _url.Replace("{resourceGroupName}", System.Uri.EscapeDataString(resourceGroupName)); + _url = _url.Replace("{vmScaleSetName}", System.Uri.EscapeDataString(vmScaleSetName)); + _url = _url.Replace("{subscriptionId}", System.Uri.EscapeDataString(this.Client.SubscriptionId)); + System.Collections.Generic.List _queryParameters = new System.Collections.Generic.List(); + if (this.Client.ApiVersion != null) + { + _queryParameters.Add(string.Format("api-version={0}", System.Uri.EscapeDataString(this.Client.ApiVersion))); + } + if (_queryParameters.Count > 0) + { + _url += "?" + string.Join("&", _queryParameters); + } + // Create HTTP transport objects + System.Net.Http.HttpRequestMessage _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 != 200 && (int)_statusCode != 202 && (int)_statusCode != 204) + { + var ex = new Microsoft.Rest.Azure.CloudException(string.Format("Operation returned an invalid status code '{0}'", _statusCode)); + if (_httpResponse.Content != null) { + _responseContent = await _httpResponse.Content.ReadAsStringAsync().ConfigureAwait(false); + } + else { + _responseContent = string.Empty; + } + ex.Request = new Microsoft.Rest.HttpRequestMessageWrapper(_httpRequest, _requestContent); + ex.Response = new Microsoft.Rest.HttpResponseMessageWrapper(_httpResponse, _responseContent); + if (_httpResponse.Headers.Contains("x-ms-request-id")) + { + ex.RequestId = _httpResponse.Headers.GetValues("x-ms-request-id").FirstOrDefault(); + } + 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(); + } + if (_shouldTrace) + { + Microsoft.Rest.ServiceClientTracing.Exit(_invocationId, _result); + } + return _result; + } + + /// + /// Display information about a virtual machine scale set. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual machine scale set. + /// + /// + /// 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 + /// + /// + /// A response object containing the response body and response headers. + /// + public async System.Threading.Tasks.Task> GetWithHttpMessagesAsync(string resourceGroupName, string vmScaleSetName, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + if (resourceGroupName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "resourceGroupName"); + } + if (vmScaleSetName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "vmScaleSetName"); + } + if (this.Client.ApiVersion == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.ApiVersion"); + } + if (this.Client.SubscriptionId == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.SubscriptionId"); + } + // 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("vmScaleSetName", vmScaleSetName); + 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.Compute/virtualMachineScaleSets/{vmScaleSetName}").ToString(); + _url = _url.Replace("{resourceGroupName}", System.Uri.EscapeDataString(resourceGroupName)); + _url = _url.Replace("{vmScaleSetName}", System.Uri.EscapeDataString(vmScaleSetName)); + _url = _url.Replace("{subscriptionId}", System.Uri.EscapeDataString(this.Client.SubscriptionId)); + System.Collections.Generic.List _queryParameters = new System.Collections.Generic.List(); + if (this.Client.ApiVersion != null) + { + _queryParameters.Add(string.Format("api-version={0}", System.Uri.EscapeDataString(this.Client.ApiVersion))); + } + if (_queryParameters.Count > 0) + { + _url += "?" + string.Join("&", _queryParameters); + } + // Create HTTP transport objects + System.Net.Http.HttpRequestMessage _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); + CloudError _errorBody = Microsoft.Rest.Serialization.SafeJsonConvert.DeserializeObject(_responseContent, this.Client.DeserializationSettings); + if (_errorBody != null) + { + ex = new Microsoft.Rest.Azure.CloudException(_errorBody.Message); + 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 (_httpResponse.Headers.Contains("x-ms-request-id")) + { + ex.RequestId = _httpResponse.Headers.GetValues("x-ms-request-id").FirstOrDefault(); + } + 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; + } + + /// + /// Allows you to delete virtual machines in a virtual machine scale set. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual machine scale set. + /// + /// + /// the virtual machine scale set instance ids. + /// + /// + /// The headers that will be added to request. + /// + /// + /// The cancellation token. + /// + public async System.Threading.Tasks.Task DeleteInstancesWithHttpMessagesAsync(string resourceGroupName, string vmScaleSetName, System.Collections.Generic.IList instanceIds, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + // Send request + Microsoft.Rest.Azure.AzureOperationResponse _response = await BeginDeleteInstancesWithHttpMessagesAsync( + resourceGroupName, vmScaleSetName, instanceIds, customHeaders, cancellationToken); + return await this.Client.GetPostOrDeleteOperationResultAsync(_response, customHeaders, cancellationToken); + } + + /// + /// Allows you to delete virtual machines in a virtual machine scale set. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual machine scale set. + /// + /// + /// the virtual machine scale set instance ids. + /// + /// + /// 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 + /// + /// + /// A response object containing the response body and response headers. + /// + public async System.Threading.Tasks.Task BeginDeleteInstancesWithHttpMessagesAsync(string resourceGroupName, string vmScaleSetName, System.Collections.Generic.IList instanceIds, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + if (resourceGroupName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "resourceGroupName"); + } + if (vmScaleSetName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "vmScaleSetName"); + } + if (this.Client.ApiVersion == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.ApiVersion"); + } + if (this.Client.SubscriptionId == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.SubscriptionId"); + } + if (instanceIds == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "instanceIds"); + } + VirtualMachineScaleSetVMInstanceRequiredIDs vmInstanceIDs = new VirtualMachineScaleSetVMInstanceRequiredIDs(); + if (instanceIds != null) + { + vmInstanceIDs.InstanceIds = instanceIds; + } + // 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("vmScaleSetName", vmScaleSetName); + tracingParameters.Add("vmInstanceIDs", vmInstanceIDs); + tracingParameters.Add("cancellationToken", cancellationToken); + Microsoft.Rest.ServiceClientTracing.Enter(_invocationId, this, "BeginDeleteInstances", 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.Compute/virtualMachineScaleSets/{vmScaleSetName}/delete").ToString(); + _url = _url.Replace("{resourceGroupName}", System.Uri.EscapeDataString(resourceGroupName)); + _url = _url.Replace("{vmScaleSetName}", System.Uri.EscapeDataString(vmScaleSetName)); + _url = _url.Replace("{subscriptionId}", System.Uri.EscapeDataString(this.Client.SubscriptionId)); + System.Collections.Generic.List _queryParameters = new System.Collections.Generic.List(); + if (this.Client.ApiVersion != null) + { + _queryParameters.Add(string.Format("api-version={0}", System.Uri.EscapeDataString(this.Client.ApiVersion))); + } + if (_queryParameters.Count > 0) + { + _url += "?" + string.Join("&", _queryParameters); + } + // Create HTTP transport objects + System.Net.Http.HttpRequestMessage _httpRequest = new System.Net.Http.HttpRequestMessage(); + System.Net.Http.HttpResponseMessage _httpResponse = null; + _httpRequest.Method = new System.Net.Http.HttpMethod("POST"); + _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(vmInstanceIDs != null) + { + _requestContent = Microsoft.Rest.Serialization.SafeJsonConvert.SerializeObject(vmInstanceIDs, 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 != 202) + { + var ex = new Microsoft.Rest.Azure.CloudException(string.Format("Operation returned an invalid status code '{0}'", _statusCode)); + if (_httpResponse.Content != null) { + _responseContent = await _httpResponse.Content.ReadAsStringAsync().ConfigureAwait(false); + } + else { + _responseContent = string.Empty; + } + ex.Request = new Microsoft.Rest.HttpRequestMessageWrapper(_httpRequest, _requestContent); + ex.Response = new Microsoft.Rest.HttpResponseMessageWrapper(_httpResponse, _responseContent); + if (_httpResponse.Headers.Contains("x-ms-request-id")) + { + ex.RequestId = _httpResponse.Headers.GetValues("x-ms-request-id").FirstOrDefault(); + } + 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(); + } + if (_shouldTrace) + { + Microsoft.Rest.ServiceClientTracing.Exit(_invocationId, _result); + } + return _result; + } + + /// + /// Displays status of a virtual machine scale set instance. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual machine scale set. + /// + /// + /// 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 + /// + /// + /// A response object containing the response body and response headers. + /// + public async System.Threading.Tasks.Task> GetInstanceViewWithHttpMessagesAsync(string resourceGroupName, string vmScaleSetName, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + if (resourceGroupName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "resourceGroupName"); + } + if (vmScaleSetName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "vmScaleSetName"); + } + if (this.Client.ApiVersion == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.ApiVersion"); + } + if (this.Client.SubscriptionId == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.SubscriptionId"); + } + // 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("vmScaleSetName", vmScaleSetName); + tracingParameters.Add("cancellationToken", cancellationToken); + Microsoft.Rest.ServiceClientTracing.Enter(_invocationId, this, "GetInstanceView", 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.Compute/virtualMachineScaleSets/{vmScaleSetName}/instanceView").ToString(); + _url = _url.Replace("{resourceGroupName}", System.Uri.EscapeDataString(resourceGroupName)); + _url = _url.Replace("{vmScaleSetName}", System.Uri.EscapeDataString(vmScaleSetName)); + _url = _url.Replace("{subscriptionId}", System.Uri.EscapeDataString(this.Client.SubscriptionId)); + System.Collections.Generic.List _queryParameters = new System.Collections.Generic.List(); + if (this.Client.ApiVersion != null) + { + _queryParameters.Add(string.Format("api-version={0}", System.Uri.EscapeDataString(this.Client.ApiVersion))); + } + if (_queryParameters.Count > 0) + { + _url += "?" + string.Join("&", _queryParameters); + } + // Create HTTP transport objects + System.Net.Http.HttpRequestMessage _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); + CloudError _errorBody = Microsoft.Rest.Serialization.SafeJsonConvert.DeserializeObject(_responseContent, this.Client.DeserializationSettings); + if (_errorBody != null) + { + ex = new Microsoft.Rest.Azure.CloudException(_errorBody.Message); + 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 (_httpResponse.Headers.Contains("x-ms-request-id")) + { + ex.RequestId = _httpResponse.Headers.GetValues("x-ms-request-id").FirstOrDefault(); + } + 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; + } + + /// + /// Lists all virtual machine scale sets under a resource group. + /// + /// + /// The name of the resource group. + /// + /// + /// 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 + /// + /// + /// A response object containing the response body and response headers. + /// + public async System.Threading.Tasks.Task>> ListWithHttpMessagesAsync(string resourceGroupName, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + if (resourceGroupName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "resourceGroupName"); + } + if (this.Client.ApiVersion == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.ApiVersion"); + } + if (this.Client.SubscriptionId == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.SubscriptionId"); + } + // 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("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.Compute/virtualMachineScaleSets").ToString(); + _url = _url.Replace("{resourceGroupName}", System.Uri.EscapeDataString(resourceGroupName)); + _url = _url.Replace("{subscriptionId}", System.Uri.EscapeDataString(this.Client.SubscriptionId)); + System.Collections.Generic.List _queryParameters = new System.Collections.Generic.List(); + if (this.Client.ApiVersion != null) + { + _queryParameters.Add(string.Format("api-version={0}", System.Uri.EscapeDataString(this.Client.ApiVersion))); + } + if (_queryParameters.Count > 0) + { + _url += "?" + string.Join("&", _queryParameters); + } + // Create HTTP transport objects + System.Net.Http.HttpRequestMessage _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); + CloudError _errorBody = Microsoft.Rest.Serialization.SafeJsonConvert.DeserializeObject(_responseContent, this.Client.DeserializationSettings); + if (_errorBody != null) + { + ex = new Microsoft.Rest.Azure.CloudException(_errorBody.Message); + 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 (_httpResponse.Headers.Contains("x-ms-request-id")) + { + ex.RequestId = _httpResponse.Headers.GetValues("x-ms-request-id").FirstOrDefault(); + } + 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; + } + + /// + /// Lists all Virtual Machine Scale Sets in the subscription. Use nextLink + /// property in the response to get the next page of Virtual Machine Scale + /// Sets. Do this till nextLink is not null to fetch all the Virtual Machine + /// Scale Sets. + /// + /// + /// 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 + /// + /// + /// A response object containing the response body and response headers. + /// + public async System.Threading.Tasks.Task>> ListAllWithHttpMessagesAsync(System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + if (this.Client.ApiVersion == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.ApiVersion"); + } + if (this.Client.SubscriptionId == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.SubscriptionId"); + } + // 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("cancellationToken", cancellationToken); + Microsoft.Rest.ServiceClientTracing.Enter(_invocationId, this, "ListAll", tracingParameters); + } + // Construct URL + var _baseUrl = this.Client.BaseUri.AbsoluteUri; + var _url = new System.Uri(new System.Uri(_baseUrl + (_baseUrl.EndsWith("/") ? "" : "/")), "subscriptions/{subscriptionId}/providers/Microsoft.Compute/virtualMachineScaleSets").ToString(); + _url = _url.Replace("{subscriptionId}", System.Uri.EscapeDataString(this.Client.SubscriptionId)); + System.Collections.Generic.List _queryParameters = new System.Collections.Generic.List(); + if (this.Client.ApiVersion != null) + { + _queryParameters.Add(string.Format("api-version={0}", System.Uri.EscapeDataString(this.Client.ApiVersion))); + } + if (_queryParameters.Count > 0) + { + _url += "?" + string.Join("&", _queryParameters); + } + // Create HTTP transport objects + System.Net.Http.HttpRequestMessage _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); + CloudError _errorBody = Microsoft.Rest.Serialization.SafeJsonConvert.DeserializeObject(_responseContent, this.Client.DeserializationSettings); + if (_errorBody != null) + { + ex = new Microsoft.Rest.Azure.CloudException(_errorBody.Message); + 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 (_httpResponse.Headers.Contains("x-ms-request-id")) + { + ex.RequestId = _httpResponse.Headers.GetValues("x-ms-request-id").FirstOrDefault(); + } + 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; + } + + /// + /// Displays available skus for your virtual machine scale set including the + /// minimum and maximum vm instances allowed for a particular sku. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual machine scale set. + /// + /// + /// 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 + /// + /// + /// A response object containing the response body and response headers. + /// + public async System.Threading.Tasks.Task>> ListSkusWithHttpMessagesAsync(string resourceGroupName, string vmScaleSetName, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + if (resourceGroupName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "resourceGroupName"); + } + if (vmScaleSetName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "vmScaleSetName"); + } + if (this.Client.ApiVersion == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.ApiVersion"); + } + if (this.Client.SubscriptionId == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.SubscriptionId"); + } + // 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("vmScaleSetName", vmScaleSetName); + tracingParameters.Add("cancellationToken", cancellationToken); + Microsoft.Rest.ServiceClientTracing.Enter(_invocationId, this, "ListSkus", 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.Compute/virtualMachineScaleSets/{vmScaleSetName}/skus").ToString(); + _url = _url.Replace("{resourceGroupName}", System.Uri.EscapeDataString(resourceGroupName)); + _url = _url.Replace("{vmScaleSetName}", System.Uri.EscapeDataString(vmScaleSetName)); + _url = _url.Replace("{subscriptionId}", System.Uri.EscapeDataString(this.Client.SubscriptionId)); + System.Collections.Generic.List _queryParameters = new System.Collections.Generic.List(); + if (this.Client.ApiVersion != null) + { + _queryParameters.Add(string.Format("api-version={0}", System.Uri.EscapeDataString(this.Client.ApiVersion))); + } + if (_queryParameters.Count > 0) + { + _url += "?" + string.Join("&", _queryParameters); + } + // Create HTTP transport objects + System.Net.Http.HttpRequestMessage _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); + CloudError _errorBody = Microsoft.Rest.Serialization.SafeJsonConvert.DeserializeObject(_responseContent, this.Client.DeserializationSettings); + if (_errorBody != null) + { + ex = new Microsoft.Rest.Azure.CloudException(_errorBody.Message); + 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 (_httpResponse.Headers.Contains("x-ms-request-id")) + { + ex.RequestId = _httpResponse.Headers.GetValues("x-ms-request-id").FirstOrDefault(); + } + 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; + } + + /// + /// Allows you to power off (stop) virtual machines in a virtual machine scale + /// set. Note that resources are still attached and you are getting charged + /// for the resources. Use deallocate to release resources. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual machine scale set. + /// + /// + /// the virtual machine scale set instance ids. + /// + /// + /// The headers that will be added to request. + /// + /// + /// The cancellation token. + /// + public async System.Threading.Tasks.Task PowerOffWithHttpMessagesAsync(string resourceGroupName, string vmScaleSetName, System.Collections.Generic.IList instanceIds = default(System.Collections.Generic.IList), System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + // Send request + Microsoft.Rest.Azure.AzureOperationResponse _response = await BeginPowerOffWithHttpMessagesAsync( + resourceGroupName, vmScaleSetName, instanceIds, customHeaders, cancellationToken); + return await this.Client.GetPostOrDeleteOperationResultAsync(_response, customHeaders, cancellationToken); + } + + /// + /// Allows you to power off (stop) virtual machines in a virtual machine scale + /// set. Note that resources are still attached and you are getting charged + /// for the resources. Use deallocate to release resources. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual machine scale set. + /// + /// + /// the virtual machine scale set instance ids. + /// + /// + /// 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 + /// + /// + /// A response object containing the response body and response headers. + /// + public async System.Threading.Tasks.Task BeginPowerOffWithHttpMessagesAsync(string resourceGroupName, string vmScaleSetName, System.Collections.Generic.IList instanceIds = default(System.Collections.Generic.IList), System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + if (resourceGroupName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "resourceGroupName"); + } + if (vmScaleSetName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "vmScaleSetName"); + } + if (this.Client.ApiVersion == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.ApiVersion"); + } + if (this.Client.SubscriptionId == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.SubscriptionId"); + } + VirtualMachineScaleSetVMInstanceIDs vmInstanceIDs = default(VirtualMachineScaleSetVMInstanceIDs); + if (instanceIds != null) + { + vmInstanceIDs = new VirtualMachineScaleSetVMInstanceIDs(); + vmInstanceIDs.InstanceIds = instanceIds; + } + // 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("vmScaleSetName", vmScaleSetName); + tracingParameters.Add("vmInstanceIDs", vmInstanceIDs); + tracingParameters.Add("cancellationToken", cancellationToken); + Microsoft.Rest.ServiceClientTracing.Enter(_invocationId, this, "BeginPowerOff", 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.Compute/virtualMachineScaleSets/{vmScaleSetName}/poweroff").ToString(); + _url = _url.Replace("{resourceGroupName}", System.Uri.EscapeDataString(resourceGroupName)); + _url = _url.Replace("{vmScaleSetName}", System.Uri.EscapeDataString(vmScaleSetName)); + _url = _url.Replace("{subscriptionId}", System.Uri.EscapeDataString(this.Client.SubscriptionId)); + System.Collections.Generic.List _queryParameters = new System.Collections.Generic.List(); + if (this.Client.ApiVersion != null) + { + _queryParameters.Add(string.Format("api-version={0}", System.Uri.EscapeDataString(this.Client.ApiVersion))); + } + if (_queryParameters.Count > 0) + { + _url += "?" + string.Join("&", _queryParameters); + } + // Create HTTP transport objects + System.Net.Http.HttpRequestMessage _httpRequest = new System.Net.Http.HttpRequestMessage(); + System.Net.Http.HttpResponseMessage _httpResponse = null; + _httpRequest.Method = new System.Net.Http.HttpMethod("POST"); + _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(vmInstanceIDs != null) + { + _requestContent = Microsoft.Rest.Serialization.SafeJsonConvert.SerializeObject(vmInstanceIDs, 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 != 202) + { + var ex = new Microsoft.Rest.Azure.CloudException(string.Format("Operation returned an invalid status code '{0}'", _statusCode)); + if (_httpResponse.Content != null) { + _responseContent = await _httpResponse.Content.ReadAsStringAsync().ConfigureAwait(false); + } + else { + _responseContent = string.Empty; + } + ex.Request = new Microsoft.Rest.HttpRequestMessageWrapper(_httpRequest, _requestContent); + ex.Response = new Microsoft.Rest.HttpResponseMessageWrapper(_httpResponse, _responseContent); + if (_httpResponse.Headers.Contains("x-ms-request-id")) + { + ex.RequestId = _httpResponse.Headers.GetValues("x-ms-request-id").FirstOrDefault(); + } + 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(); + } + if (_shouldTrace) + { + Microsoft.Rest.ServiceClientTracing.Exit(_invocationId, _result); + } + return _result; + } + + /// + /// Allows you to restart virtual machines in a virtual machine scale set. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual machine scale set. + /// + /// + /// the virtual machine scale set instance ids. + /// + /// + /// The headers that will be added to request. + /// + /// + /// The cancellation token. + /// + public async System.Threading.Tasks.Task RestartWithHttpMessagesAsync(string resourceGroupName, string vmScaleSetName, System.Collections.Generic.IList instanceIds = default(System.Collections.Generic.IList), System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + // Send request + Microsoft.Rest.Azure.AzureOperationResponse _response = await BeginRestartWithHttpMessagesAsync( + resourceGroupName, vmScaleSetName, instanceIds, customHeaders, cancellationToken); + return await this.Client.GetPostOrDeleteOperationResultAsync(_response, customHeaders, cancellationToken); + } + + /// + /// Allows you to restart virtual machines in a virtual machine scale set. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual machine scale set. + /// + /// + /// the virtual machine scale set instance ids. + /// + /// + /// 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 + /// + /// + /// A response object containing the response body and response headers. + /// + public async System.Threading.Tasks.Task BeginRestartWithHttpMessagesAsync(string resourceGroupName, string vmScaleSetName, System.Collections.Generic.IList instanceIds = default(System.Collections.Generic.IList), System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + if (resourceGroupName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "resourceGroupName"); + } + if (vmScaleSetName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "vmScaleSetName"); + } + if (this.Client.ApiVersion == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.ApiVersion"); + } + if (this.Client.SubscriptionId == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.SubscriptionId"); + } + VirtualMachineScaleSetVMInstanceIDs vmInstanceIDs = default(VirtualMachineScaleSetVMInstanceIDs); + if (instanceIds != null) + { + vmInstanceIDs = new VirtualMachineScaleSetVMInstanceIDs(); + vmInstanceIDs.InstanceIds = instanceIds; + } + // 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("vmScaleSetName", vmScaleSetName); + tracingParameters.Add("vmInstanceIDs", vmInstanceIDs); + tracingParameters.Add("cancellationToken", cancellationToken); + Microsoft.Rest.ServiceClientTracing.Enter(_invocationId, this, "BeginRestart", 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.Compute/virtualMachineScaleSets/{vmScaleSetName}/restart").ToString(); + _url = _url.Replace("{resourceGroupName}", System.Uri.EscapeDataString(resourceGroupName)); + _url = _url.Replace("{vmScaleSetName}", System.Uri.EscapeDataString(vmScaleSetName)); + _url = _url.Replace("{subscriptionId}", System.Uri.EscapeDataString(this.Client.SubscriptionId)); + System.Collections.Generic.List _queryParameters = new System.Collections.Generic.List(); + if (this.Client.ApiVersion != null) + { + _queryParameters.Add(string.Format("api-version={0}", System.Uri.EscapeDataString(this.Client.ApiVersion))); + } + if (_queryParameters.Count > 0) + { + _url += "?" + string.Join("&", _queryParameters); + } + // Create HTTP transport objects + System.Net.Http.HttpRequestMessage _httpRequest = new System.Net.Http.HttpRequestMessage(); + System.Net.Http.HttpResponseMessage _httpResponse = null; + _httpRequest.Method = new System.Net.Http.HttpMethod("POST"); + _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(vmInstanceIDs != null) + { + _requestContent = Microsoft.Rest.Serialization.SafeJsonConvert.SerializeObject(vmInstanceIDs, 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 != 202) + { + var ex = new Microsoft.Rest.Azure.CloudException(string.Format("Operation returned an invalid status code '{0}'", _statusCode)); + if (_httpResponse.Content != null) { + _responseContent = await _httpResponse.Content.ReadAsStringAsync().ConfigureAwait(false); + } + else { + _responseContent = string.Empty; + } + ex.Request = new Microsoft.Rest.HttpRequestMessageWrapper(_httpRequest, _requestContent); + ex.Response = new Microsoft.Rest.HttpResponseMessageWrapper(_httpResponse, _responseContent); + if (_httpResponse.Headers.Contains("x-ms-request-id")) + { + ex.RequestId = _httpResponse.Headers.GetValues("x-ms-request-id").FirstOrDefault(); + } + 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(); + } + if (_shouldTrace) + { + Microsoft.Rest.ServiceClientTracing.Exit(_invocationId, _result); + } + return _result; + } + + /// + /// Allows you to start virtual machines in a virtual machine scale set. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual machine scale set. + /// + /// + /// the virtual machine scale set instance ids. + /// + /// + /// The headers that will be added to request. + /// + /// + /// The cancellation token. + /// + public async System.Threading.Tasks.Task StartWithHttpMessagesAsync(string resourceGroupName, string vmScaleSetName, System.Collections.Generic.IList instanceIds = default(System.Collections.Generic.IList), System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + // Send request + Microsoft.Rest.Azure.AzureOperationResponse _response = await BeginStartWithHttpMessagesAsync( + resourceGroupName, vmScaleSetName, instanceIds, customHeaders, cancellationToken); + return await this.Client.GetPostOrDeleteOperationResultAsync(_response, customHeaders, cancellationToken); + } + + /// + /// Allows you to start virtual machines in a virtual machine scale set. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual machine scale set. + /// + /// + /// the virtual machine scale set instance ids. + /// + /// + /// 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 + /// + /// + /// A response object containing the response body and response headers. + /// + public async System.Threading.Tasks.Task BeginStartWithHttpMessagesAsync(string resourceGroupName, string vmScaleSetName, System.Collections.Generic.IList instanceIds = default(System.Collections.Generic.IList), System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + if (resourceGroupName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "resourceGroupName"); + } + if (vmScaleSetName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "vmScaleSetName"); + } + if (this.Client.ApiVersion == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.ApiVersion"); + } + if (this.Client.SubscriptionId == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.SubscriptionId"); + } + VirtualMachineScaleSetVMInstanceIDs vmInstanceIDs = default(VirtualMachineScaleSetVMInstanceIDs); + if (instanceIds != null) + { + vmInstanceIDs = new VirtualMachineScaleSetVMInstanceIDs(); + vmInstanceIDs.InstanceIds = instanceIds; + } + // 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("vmScaleSetName", vmScaleSetName); + tracingParameters.Add("vmInstanceIDs", vmInstanceIDs); + tracingParameters.Add("cancellationToken", cancellationToken); + Microsoft.Rest.ServiceClientTracing.Enter(_invocationId, this, "BeginStart", 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.Compute/virtualMachineScaleSets/{vmScaleSetName}/start").ToString(); + _url = _url.Replace("{resourceGroupName}", System.Uri.EscapeDataString(resourceGroupName)); + _url = _url.Replace("{vmScaleSetName}", System.Uri.EscapeDataString(vmScaleSetName)); + _url = _url.Replace("{subscriptionId}", System.Uri.EscapeDataString(this.Client.SubscriptionId)); + System.Collections.Generic.List _queryParameters = new System.Collections.Generic.List(); + if (this.Client.ApiVersion != null) + { + _queryParameters.Add(string.Format("api-version={0}", System.Uri.EscapeDataString(this.Client.ApiVersion))); + } + if (_queryParameters.Count > 0) + { + _url += "?" + string.Join("&", _queryParameters); + } + // Create HTTP transport objects + System.Net.Http.HttpRequestMessage _httpRequest = new System.Net.Http.HttpRequestMessage(); + System.Net.Http.HttpResponseMessage _httpResponse = null; + _httpRequest.Method = new System.Net.Http.HttpMethod("POST"); + _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(vmInstanceIDs != null) + { + _requestContent = Microsoft.Rest.Serialization.SafeJsonConvert.SerializeObject(vmInstanceIDs, 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 != 202) + { + var ex = new Microsoft.Rest.Azure.CloudException(string.Format("Operation returned an invalid status code '{0}'", _statusCode)); + if (_httpResponse.Content != null) { + _responseContent = await _httpResponse.Content.ReadAsStringAsync().ConfigureAwait(false); + } + else { + _responseContent = string.Empty; + } + ex.Request = new Microsoft.Rest.HttpRequestMessageWrapper(_httpRequest, _requestContent); + ex.Response = new Microsoft.Rest.HttpResponseMessageWrapper(_httpResponse, _responseContent); + if (_httpResponse.Headers.Contains("x-ms-request-id")) + { + ex.RequestId = _httpResponse.Headers.GetValues("x-ms-request-id").FirstOrDefault(); + } + 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(); + } + if (_shouldTrace) + { + Microsoft.Rest.ServiceClientTracing.Exit(_invocationId, _result); + } + return _result; + } + + /// + /// Allows you to manually upgrade virtual machines in a virtual machine scale + /// set. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual machine scale set. + /// + /// + /// the virtual machine scale set instance ids. + /// + /// + /// The headers that will be added to request. + /// + /// + /// The cancellation token. + /// + public async System.Threading.Tasks.Task UpdateInstancesWithHttpMessagesAsync(string resourceGroupName, string vmScaleSetName, System.Collections.Generic.IList instanceIds, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + // Send request + Microsoft.Rest.Azure.AzureOperationResponse _response = await BeginUpdateInstancesWithHttpMessagesAsync( + resourceGroupName, vmScaleSetName, instanceIds, customHeaders, cancellationToken); + return await this.Client.GetPostOrDeleteOperationResultAsync(_response, customHeaders, cancellationToken); + } + + /// + /// Allows you to manually upgrade virtual machines in a virtual machine scale + /// set. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual machine scale set. + /// + /// + /// the virtual machine scale set instance ids. + /// + /// + /// 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 + /// + /// + /// A response object containing the response body and response headers. + /// + public async System.Threading.Tasks.Task BeginUpdateInstancesWithHttpMessagesAsync(string resourceGroupName, string vmScaleSetName, System.Collections.Generic.IList instanceIds, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + if (resourceGroupName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "resourceGroupName"); + } + if (vmScaleSetName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "vmScaleSetName"); + } + if (this.Client.ApiVersion == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.ApiVersion"); + } + if (this.Client.SubscriptionId == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.SubscriptionId"); + } + if (instanceIds == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "instanceIds"); + } + VirtualMachineScaleSetVMInstanceRequiredIDs vmInstanceIDs = new VirtualMachineScaleSetVMInstanceRequiredIDs(); + if (instanceIds != null) + { + vmInstanceIDs.InstanceIds = instanceIds; + } + // 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("vmScaleSetName", vmScaleSetName); + tracingParameters.Add("vmInstanceIDs", vmInstanceIDs); + tracingParameters.Add("cancellationToken", cancellationToken); + Microsoft.Rest.ServiceClientTracing.Enter(_invocationId, this, "BeginUpdateInstances", 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.Compute/virtualMachineScaleSets/{vmScaleSetName}/manualupgrade").ToString(); + _url = _url.Replace("{resourceGroupName}", System.Uri.EscapeDataString(resourceGroupName)); + _url = _url.Replace("{vmScaleSetName}", System.Uri.EscapeDataString(vmScaleSetName)); + _url = _url.Replace("{subscriptionId}", System.Uri.EscapeDataString(this.Client.SubscriptionId)); + System.Collections.Generic.List _queryParameters = new System.Collections.Generic.List(); + if (this.Client.ApiVersion != null) + { + _queryParameters.Add(string.Format("api-version={0}", System.Uri.EscapeDataString(this.Client.ApiVersion))); + } + if (_queryParameters.Count > 0) + { + _url += "?" + string.Join("&", _queryParameters); + } + // Create HTTP transport objects + System.Net.Http.HttpRequestMessage _httpRequest = new System.Net.Http.HttpRequestMessage(); + System.Net.Http.HttpResponseMessage _httpResponse = null; + _httpRequest.Method = new System.Net.Http.HttpMethod("POST"); + _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(vmInstanceIDs != null) + { + _requestContent = Microsoft.Rest.Serialization.SafeJsonConvert.SerializeObject(vmInstanceIDs, 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 != 202) + { + var ex = new Microsoft.Rest.Azure.CloudException(string.Format("Operation returned an invalid status code '{0}'", _statusCode)); + if (_httpResponse.Content != null) { + _responseContent = await _httpResponse.Content.ReadAsStringAsync().ConfigureAwait(false); + } + else { + _responseContent = string.Empty; + } + ex.Request = new Microsoft.Rest.HttpRequestMessageWrapper(_httpRequest, _requestContent); + ex.Response = new Microsoft.Rest.HttpResponseMessageWrapper(_httpResponse, _responseContent); + if (_httpResponse.Headers.Contains("x-ms-request-id")) + { + ex.RequestId = _httpResponse.Headers.GetValues("x-ms-request-id").FirstOrDefault(); + } + 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(); + } + if (_shouldTrace) + { + Microsoft.Rest.ServiceClientTracing.Exit(_invocationId, _result); + } + return _result; + } + + /// + /// Allows you to re-image(update the version of the installed operating + /// system) virtual machines in a virtual machine scale set. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual machine scale set. + /// + /// + /// The headers that will be added to request. + /// + /// + /// The cancellation token. + /// + public async System.Threading.Tasks.Task ReimageWithHttpMessagesAsync(string resourceGroupName, string vmScaleSetName, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + // Send request + Microsoft.Rest.Azure.AzureOperationResponse _response = await BeginReimageWithHttpMessagesAsync( + resourceGroupName, vmScaleSetName, customHeaders, cancellationToken); + return await this.Client.GetPostOrDeleteOperationResultAsync(_response, customHeaders, cancellationToken); + } + + /// + /// Allows you to re-image(update the version of the installed operating + /// system) virtual machines in a virtual machine scale set. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual machine scale set. + /// + /// + /// 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 + /// + /// + /// A response object containing the response body and response headers. + /// + public async System.Threading.Tasks.Task BeginReimageWithHttpMessagesAsync(string resourceGroupName, string vmScaleSetName, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + if (resourceGroupName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "resourceGroupName"); + } + if (vmScaleSetName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "vmScaleSetName"); + } + if (this.Client.ApiVersion == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.ApiVersion"); + } + if (this.Client.SubscriptionId == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.SubscriptionId"); + } + // 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("vmScaleSetName", vmScaleSetName); + tracingParameters.Add("cancellationToken", cancellationToken); + Microsoft.Rest.ServiceClientTracing.Enter(_invocationId, this, "BeginReimage", 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.Compute/virtualMachineScaleSets/{vmScaleSetName}/reimage").ToString(); + _url = _url.Replace("{resourceGroupName}", System.Uri.EscapeDataString(resourceGroupName)); + _url = _url.Replace("{vmScaleSetName}", System.Uri.EscapeDataString(vmScaleSetName)); + _url = _url.Replace("{subscriptionId}", System.Uri.EscapeDataString(this.Client.SubscriptionId)); + System.Collections.Generic.List _queryParameters = new System.Collections.Generic.List(); + if (this.Client.ApiVersion != null) + { + _queryParameters.Add(string.Format("api-version={0}", System.Uri.EscapeDataString(this.Client.ApiVersion))); + } + if (_queryParameters.Count > 0) + { + _url += "?" + string.Join("&", _queryParameters); + } + // Create HTTP transport objects + System.Net.Http.HttpRequestMessage _httpRequest = new System.Net.Http.HttpRequestMessage(); + System.Net.Http.HttpResponseMessage _httpResponse = null; + _httpRequest.Method = new System.Net.Http.HttpMethod("POST"); + _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) + { + var ex = new Microsoft.Rest.Azure.CloudException(string.Format("Operation returned an invalid status code '{0}'", _statusCode)); + if (_httpResponse.Content != null) { + _responseContent = await _httpResponse.Content.ReadAsStringAsync().ConfigureAwait(false); + } + else { + _responseContent = string.Empty; + } + ex.Request = new Microsoft.Rest.HttpRequestMessageWrapper(_httpRequest, _requestContent); + ex.Response = new Microsoft.Rest.HttpResponseMessageWrapper(_httpResponse, _responseContent); + if (_httpResponse.Headers.Contains("x-ms-request-id")) + { + ex.RequestId = _httpResponse.Headers.GetValues("x-ms-request-id").FirstOrDefault(); + } + 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(); + } + if (_shouldTrace) + { + Microsoft.Rest.ServiceClientTracing.Exit(_invocationId, _result); + } + return _result; + } + + /// + /// Lists all virtual machine scale sets under a resource group. + /// + /// + /// 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 + /// + /// + /// 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 += "?" + string.Join("&", _queryParameters); + } + // Create HTTP transport objects + System.Net.Http.HttpRequestMessage _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); + CloudError _errorBody = Microsoft.Rest.Serialization.SafeJsonConvert.DeserializeObject(_responseContent, this.Client.DeserializationSettings); + if (_errorBody != null) + { + ex = new Microsoft.Rest.Azure.CloudException(_errorBody.Message); + 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 (_httpResponse.Headers.Contains("x-ms-request-id")) + { + ex.RequestId = _httpResponse.Headers.GetValues("x-ms-request-id").FirstOrDefault(); + } + 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; + } + + /// + /// Lists all Virtual Machine Scale Sets in the subscription. Use nextLink + /// property in the response to get the next page of Virtual Machine Scale + /// Sets. Do this till nextLink is not null to fetch all the Virtual Machine + /// Scale Sets. + /// + /// + /// 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 + /// + /// + /// A response object containing the response body and response headers. + /// + public async System.Threading.Tasks.Task>> ListAllNextWithHttpMessagesAsync(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, "ListAllNext", 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 += "?" + string.Join("&", _queryParameters); + } + // Create HTTP transport objects + System.Net.Http.HttpRequestMessage _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); + CloudError _errorBody = Microsoft.Rest.Serialization.SafeJsonConvert.DeserializeObject(_responseContent, this.Client.DeserializationSettings); + if (_errorBody != null) + { + ex = new Microsoft.Rest.Azure.CloudException(_errorBody.Message); + 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 (_httpResponse.Headers.Contains("x-ms-request-id")) + { + ex.RequestId = _httpResponse.Headers.GetValues("x-ms-request-id").FirstOrDefault(); + } + 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; + } + + /// + /// Displays available skus for your virtual machine scale set including the + /// minimum and maximum vm instances allowed for a particular sku. + /// + /// + /// 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 + /// + /// + /// A response object containing the response body and response headers. + /// + public async System.Threading.Tasks.Task>> ListSkusNextWithHttpMessagesAsync(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, "ListSkusNext", 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 += "?" + string.Join("&", _queryParameters); + } + // Create HTTP transport objects + System.Net.Http.HttpRequestMessage _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); + CloudError _errorBody = Microsoft.Rest.Serialization.SafeJsonConvert.DeserializeObject(_responseContent, this.Client.DeserializationSettings); + if (_errorBody != null) + { + ex = new Microsoft.Rest.Azure.CloudException(_errorBody.Message); + 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 (_httpResponse.Headers.Contains("x-ms-request-id")) + { + ex.RequestId = _httpResponse.Headers.GetValues("x-ms-request-id").FirstOrDefault(); + } + 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; + } + + } +} diff --git a/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/VirtualMachineScaleSetsOperationsExtensions.cs b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/VirtualMachineScaleSetsOperationsExtensions.cs new file mode 100644 index 000000000..8e52dc5c4 --- /dev/null +++ b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/VirtualMachineScaleSetsOperationsExtensions.cs @@ -0,0 +1,1109 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.Compute +{ + using System.Threading.Tasks; + using Microsoft.Rest.Azure; + using Models; + + /// + /// Extension methods for VirtualMachineScaleSetsOperations. + /// + public static partial class VirtualMachineScaleSetsOperationsExtensions + { + /// + /// Allows you to create or update a virtual machine scale set by providing + /// parameters or a path to pre-configured parameter file. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// Parameters supplied to the Create Virtual Machine Scale Set operation. + /// + /// + /// Parameters supplied to the Create Virtual Machine Scale Set operation. + /// + public static VirtualMachineScaleSetInner CreateOrUpdate(this IVirtualMachineScaleSetsOperations operations, string resourceGroupName, string name, VirtualMachineScaleSetInner parameters) + { + return System.Threading.Tasks.Task.Factory.StartNew(s => ((IVirtualMachineScaleSetsOperations)s).CreateOrUpdateAsync(resourceGroupName, name, parameters), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// Allows you to create or update a virtual machine scale set by providing + /// parameters or a path to pre-configured parameter file. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// Parameters supplied to the Create Virtual Machine Scale Set operation. + /// + /// + /// Parameters supplied to the Create Virtual Machine Scale Set operation. + /// + /// + /// The cancellation token. + /// + public static async System.Threading.Tasks.Task CreateOrUpdateAsync(this IVirtualMachineScaleSetsOperations operations, string resourceGroupName, string name, VirtualMachineScaleSetInner parameters, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + using (var _result = await operations.CreateOrUpdateWithHttpMessagesAsync(resourceGroupName, name, parameters, null, cancellationToken).ConfigureAwait(false)) + { + return _result.Body; + } + } + + /// + /// Allows you to create or update a virtual machine scale set by providing + /// parameters or a path to pre-configured parameter file. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// Parameters supplied to the Create Virtual Machine Scale Set operation. + /// + /// + /// Parameters supplied to the Create Virtual Machine Scale Set operation. + /// + public static VirtualMachineScaleSetInner BeginCreateOrUpdate(this IVirtualMachineScaleSetsOperations operations, string resourceGroupName, string name, VirtualMachineScaleSetInner parameters) + { + return System.Threading.Tasks.Task.Factory.StartNew(s => ((IVirtualMachineScaleSetsOperations)s).BeginCreateOrUpdateAsync(resourceGroupName, name, parameters), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// Allows you to create or update a virtual machine scale set by providing + /// parameters or a path to pre-configured parameter file. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// Parameters supplied to the Create Virtual Machine Scale Set operation. + /// + /// + /// Parameters supplied to the Create Virtual Machine Scale Set operation. + /// + /// + /// The cancellation token. + /// + public static async System.Threading.Tasks.Task BeginCreateOrUpdateAsync(this IVirtualMachineScaleSetsOperations operations, string resourceGroupName, string name, VirtualMachineScaleSetInner parameters, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + using (var _result = await operations.BeginCreateOrUpdateWithHttpMessagesAsync(resourceGroupName, name, parameters, null, cancellationToken).ConfigureAwait(false)) + { + return _result.Body; + } + } + + /// + /// Allows you to deallocate virtual machines in a virtual machine scale set. + /// Shuts down the virtual machines and releases the compute resources. You + /// are not billed for the compute resources that this virtual machine scale + /// set uses. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual machine scale set. + /// + /// + /// the virtual machine scale set instance ids. + /// + public static void Deallocate(this IVirtualMachineScaleSetsOperations operations, string resourceGroupName, string vmScaleSetName, System.Collections.Generic.IList instanceIds = default(System.Collections.Generic.IList)) + { + System.Threading.Tasks.Task.Factory.StartNew(s => ((IVirtualMachineScaleSetsOperations)s).DeallocateAsync(resourceGroupName, vmScaleSetName, instanceIds), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// Allows you to deallocate virtual machines in a virtual machine scale set. + /// Shuts down the virtual machines and releases the compute resources. You + /// are not billed for the compute resources that this virtual machine scale + /// set uses. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual machine scale set. + /// + /// + /// the virtual machine scale set instance ids. + /// + /// + /// The cancellation token. + /// + public static async System.Threading.Tasks.Task DeallocateAsync(this IVirtualMachineScaleSetsOperations operations, string resourceGroupName, string vmScaleSetName, System.Collections.Generic.IList instanceIds = default(System.Collections.Generic.IList), System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + await operations.DeallocateWithHttpMessagesAsync(resourceGroupName, vmScaleSetName, instanceIds, null, cancellationToken).ConfigureAwait(false); + } + + /// + /// Allows you to deallocate virtual machines in a virtual machine scale set. + /// Shuts down the virtual machines and releases the compute resources. You + /// are not billed for the compute resources that this virtual machine scale + /// set uses. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual machine scale set. + /// + /// + /// the virtual machine scale set instance ids. + /// + public static void BeginDeallocate(this IVirtualMachineScaleSetsOperations operations, string resourceGroupName, string vmScaleSetName, System.Collections.Generic.IList instanceIds = default(System.Collections.Generic.IList)) + { + System.Threading.Tasks.Task.Factory.StartNew(s => ((IVirtualMachineScaleSetsOperations)s).BeginDeallocateAsync(resourceGroupName, vmScaleSetName, instanceIds), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// Allows you to deallocate virtual machines in a virtual machine scale set. + /// Shuts down the virtual machines and releases the compute resources. You + /// are not billed for the compute resources that this virtual machine scale + /// set uses. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual machine scale set. + /// + /// + /// the virtual machine scale set instance ids. + /// + /// + /// The cancellation token. + /// + public static async System.Threading.Tasks.Task BeginDeallocateAsync(this IVirtualMachineScaleSetsOperations operations, string resourceGroupName, string vmScaleSetName, System.Collections.Generic.IList instanceIds = default(System.Collections.Generic.IList), System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + await operations.BeginDeallocateWithHttpMessagesAsync(resourceGroupName, vmScaleSetName, instanceIds, null, cancellationToken).ConfigureAwait(false); + } + + /// + /// Allows you to delete a virtual machine scale set. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual machine scale set. + /// + public static void Delete(this IVirtualMachineScaleSetsOperations operations, string resourceGroupName, string vmScaleSetName) + { + System.Threading.Tasks.Task.Factory.StartNew(s => ((IVirtualMachineScaleSetsOperations)s).DeleteAsync(resourceGroupName, vmScaleSetName), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// Allows you to delete a virtual machine scale set. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual machine scale set. + /// + /// + /// The cancellation token. + /// + public static async System.Threading.Tasks.Task DeleteAsync(this IVirtualMachineScaleSetsOperations operations, string resourceGroupName, string vmScaleSetName, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + await operations.DeleteWithHttpMessagesAsync(resourceGroupName, vmScaleSetName, null, cancellationToken).ConfigureAwait(false); + } + + /// + /// Allows you to delete a virtual machine scale set. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual machine scale set. + /// + public static void BeginDelete(this IVirtualMachineScaleSetsOperations operations, string resourceGroupName, string vmScaleSetName) + { + System.Threading.Tasks.Task.Factory.StartNew(s => ((IVirtualMachineScaleSetsOperations)s).BeginDeleteAsync(resourceGroupName, vmScaleSetName), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// Allows you to delete a virtual machine scale set. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual machine scale set. + /// + /// + /// The cancellation token. + /// + public static async System.Threading.Tasks.Task BeginDeleteAsync(this IVirtualMachineScaleSetsOperations operations, string resourceGroupName, string vmScaleSetName, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + await operations.BeginDeleteWithHttpMessagesAsync(resourceGroupName, vmScaleSetName, null, cancellationToken).ConfigureAwait(false); + } + + /// + /// Display information about a virtual machine scale set. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual machine scale set. + /// + public static VirtualMachineScaleSetInner Get(this IVirtualMachineScaleSetsOperations operations, string resourceGroupName, string vmScaleSetName) + { + return System.Threading.Tasks.Task.Factory.StartNew(s => ((IVirtualMachineScaleSetsOperations)s).GetAsync(resourceGroupName, vmScaleSetName), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// Display information about a virtual machine scale set. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual machine scale set. + /// + /// + /// The cancellation token. + /// + public static async System.Threading.Tasks.Task GetAsync(this IVirtualMachineScaleSetsOperations operations, string resourceGroupName, string vmScaleSetName, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + using (var _result = await operations.GetWithHttpMessagesAsync(resourceGroupName, vmScaleSetName, null, cancellationToken).ConfigureAwait(false)) + { + return _result.Body; + } + } + + /// + /// Allows you to delete virtual machines in a virtual machine scale set. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual machine scale set. + /// + /// + /// the virtual machine scale set instance ids. + /// + public static void DeleteInstances(this IVirtualMachineScaleSetsOperations operations, string resourceGroupName, string vmScaleSetName, System.Collections.Generic.IList instanceIds) + { + System.Threading.Tasks.Task.Factory.StartNew(s => ((IVirtualMachineScaleSetsOperations)s).DeleteInstancesAsync(resourceGroupName, vmScaleSetName, instanceIds), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// Allows you to delete virtual machines in a virtual machine scale set. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual machine scale set. + /// + /// + /// the virtual machine scale set instance ids. + /// + /// + /// The cancellation token. + /// + public static async System.Threading.Tasks.Task DeleteInstancesAsync(this IVirtualMachineScaleSetsOperations operations, string resourceGroupName, string vmScaleSetName, System.Collections.Generic.IList instanceIds, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + await operations.DeleteInstancesWithHttpMessagesAsync(resourceGroupName, vmScaleSetName, instanceIds, null, cancellationToken).ConfigureAwait(false); + } + + /// + /// Allows you to delete virtual machines in a virtual machine scale set. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual machine scale set. + /// + /// + /// the virtual machine scale set instance ids. + /// + public static void BeginDeleteInstances(this IVirtualMachineScaleSetsOperations operations, string resourceGroupName, string vmScaleSetName, System.Collections.Generic.IList instanceIds) + { + System.Threading.Tasks.Task.Factory.StartNew(s => ((IVirtualMachineScaleSetsOperations)s).BeginDeleteInstancesAsync(resourceGroupName, vmScaleSetName, instanceIds), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// Allows you to delete virtual machines in a virtual machine scale set. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual machine scale set. + /// + /// + /// the virtual machine scale set instance ids. + /// + /// + /// The cancellation token. + /// + public static async System.Threading.Tasks.Task BeginDeleteInstancesAsync(this IVirtualMachineScaleSetsOperations operations, string resourceGroupName, string vmScaleSetName, System.Collections.Generic.IList instanceIds, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + await operations.BeginDeleteInstancesWithHttpMessagesAsync(resourceGroupName, vmScaleSetName, instanceIds, null, cancellationToken).ConfigureAwait(false); + } + + /// + /// Displays status of a virtual machine scale set instance. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual machine scale set. + /// + public static VirtualMachineScaleSetInstanceViewInner GetInstanceView(this IVirtualMachineScaleSetsOperations operations, string resourceGroupName, string vmScaleSetName) + { + return System.Threading.Tasks.Task.Factory.StartNew(s => ((IVirtualMachineScaleSetsOperations)s).GetInstanceViewAsync(resourceGroupName, vmScaleSetName), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// Displays status of a virtual machine scale set instance. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual machine scale set. + /// + /// + /// The cancellation token. + /// + public static async System.Threading.Tasks.Task GetInstanceViewAsync(this IVirtualMachineScaleSetsOperations operations, string resourceGroupName, string vmScaleSetName, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + using (var _result = await operations.GetInstanceViewWithHttpMessagesAsync(resourceGroupName, vmScaleSetName, null, cancellationToken).ConfigureAwait(false)) + { + return _result.Body; + } + } + + /// + /// Lists all virtual machine scale sets under a resource group. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + public static Microsoft.Rest.Azure.IPage List(this IVirtualMachineScaleSetsOperations operations, string resourceGroupName) + { + return System.Threading.Tasks.Task.Factory.StartNew(s => ((IVirtualMachineScaleSetsOperations)s).ListAsync(resourceGroupName), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// Lists all virtual machine scale sets under a resource group. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The cancellation token. + /// + public static async Task> ListAsync(this IVirtualMachineScaleSetsOperations operations, string resourceGroupName, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + using (var _result = await operations.ListWithHttpMessagesAsync(resourceGroupName, null, cancellationToken).ConfigureAwait(false)) + { + return _result.Body; + } + } + + /// + /// Lists all Virtual Machine Scale Sets in the subscription. Use nextLink + /// property in the response to get the next page of Virtual Machine Scale + /// Sets. Do this till nextLink is not null to fetch all the Virtual Machine + /// Scale Sets. + /// + /// + /// The operations group for this extension method. + /// + public static Microsoft.Rest.Azure.IPage ListAll(this IVirtualMachineScaleSetsOperations operations) + { + return System.Threading.Tasks.Task.Factory.StartNew(s => ((IVirtualMachineScaleSetsOperations)s).ListAllAsync(), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// Lists all Virtual Machine Scale Sets in the subscription. Use nextLink + /// property in the response to get the next page of Virtual Machine Scale + /// Sets. Do this till nextLink is not null to fetch all the Virtual Machine + /// Scale Sets. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The cancellation token. + /// + public static async Task> ListAllAsync(this IVirtualMachineScaleSetsOperations operations, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + using (var _result = await operations.ListAllWithHttpMessagesAsync(null, cancellationToken).ConfigureAwait(false)) + { + return _result.Body; + } + } + + /// + /// Displays available skus for your virtual machine scale set including the + /// minimum and maximum vm instances allowed for a particular sku. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual machine scale set. + /// + public static Microsoft.Rest.Azure.IPage ListSkus(this IVirtualMachineScaleSetsOperations operations, string resourceGroupName, string vmScaleSetName) + { + return System.Threading.Tasks.Task.Factory.StartNew(s => ((IVirtualMachineScaleSetsOperations)s).ListSkusAsync(resourceGroupName, vmScaleSetName), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// Displays available skus for your virtual machine scale set including the + /// minimum and maximum vm instances allowed for a particular sku. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual machine scale set. + /// + /// + /// The cancellation token. + /// + public static async Task> ListSkusAsync(this IVirtualMachineScaleSetsOperations operations, string resourceGroupName, string vmScaleSetName, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + using (var _result = await operations.ListSkusWithHttpMessagesAsync(resourceGroupName, vmScaleSetName, null, cancellationToken).ConfigureAwait(false)) + { + return _result.Body; + } + } + + /// + /// Allows you to power off (stop) virtual machines in a virtual machine scale + /// set. Note that resources are still attached and you are getting charged + /// for the resources. Use deallocate to release resources. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual machine scale set. + /// + /// + /// the virtual machine scale set instance ids. + /// + public static void PowerOff(this IVirtualMachineScaleSetsOperations operations, string resourceGroupName, string vmScaleSetName, System.Collections.Generic.IList instanceIds = default(System.Collections.Generic.IList)) + { + System.Threading.Tasks.Task.Factory.StartNew(s => ((IVirtualMachineScaleSetsOperations)s).PowerOffAsync(resourceGroupName, vmScaleSetName, instanceIds), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// Allows you to power off (stop) virtual machines in a virtual machine scale + /// set. Note that resources are still attached and you are getting charged + /// for the resources. Use deallocate to release resources. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual machine scale set. + /// + /// + /// the virtual machine scale set instance ids. + /// + /// + /// The cancellation token. + /// + public static async System.Threading.Tasks.Task PowerOffAsync(this IVirtualMachineScaleSetsOperations operations, string resourceGroupName, string vmScaleSetName, System.Collections.Generic.IList instanceIds = default(System.Collections.Generic.IList), System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + await operations.PowerOffWithHttpMessagesAsync(resourceGroupName, vmScaleSetName, instanceIds, null, cancellationToken).ConfigureAwait(false); + } + + /// + /// Allows you to power off (stop) virtual machines in a virtual machine scale + /// set. Note that resources are still attached and you are getting charged + /// for the resources. Use deallocate to release resources. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual machine scale set. + /// + /// + /// the virtual machine scale set instance ids. + /// + public static void BeginPowerOff(this IVirtualMachineScaleSetsOperations operations, string resourceGroupName, string vmScaleSetName, System.Collections.Generic.IList instanceIds = default(System.Collections.Generic.IList)) + { + System.Threading.Tasks.Task.Factory.StartNew(s => ((IVirtualMachineScaleSetsOperations)s).BeginPowerOffAsync(resourceGroupName, vmScaleSetName, instanceIds), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// Allows you to power off (stop) virtual machines in a virtual machine scale + /// set. Note that resources are still attached and you are getting charged + /// for the resources. Use deallocate to release resources. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual machine scale set. + /// + /// + /// the virtual machine scale set instance ids. + /// + /// + /// The cancellation token. + /// + public static async System.Threading.Tasks.Task BeginPowerOffAsync(this IVirtualMachineScaleSetsOperations operations, string resourceGroupName, string vmScaleSetName, System.Collections.Generic.IList instanceIds = default(System.Collections.Generic.IList), System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + await operations.BeginPowerOffWithHttpMessagesAsync(resourceGroupName, vmScaleSetName, instanceIds, null, cancellationToken).ConfigureAwait(false); + } + + /// + /// Allows you to restart virtual machines in a virtual machine scale set. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual machine scale set. + /// + /// + /// the virtual machine scale set instance ids. + /// + public static void Restart(this IVirtualMachineScaleSetsOperations operations, string resourceGroupName, string vmScaleSetName, System.Collections.Generic.IList instanceIds = default(System.Collections.Generic.IList)) + { + System.Threading.Tasks.Task.Factory.StartNew(s => ((IVirtualMachineScaleSetsOperations)s).RestartAsync(resourceGroupName, vmScaleSetName, instanceIds), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// Allows you to restart virtual machines in a virtual machine scale set. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual machine scale set. + /// + /// + /// the virtual machine scale set instance ids. + /// + /// + /// The cancellation token. + /// + public static async System.Threading.Tasks.Task RestartAsync(this IVirtualMachineScaleSetsOperations operations, string resourceGroupName, string vmScaleSetName, System.Collections.Generic.IList instanceIds = default(System.Collections.Generic.IList), System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + await operations.RestartWithHttpMessagesAsync(resourceGroupName, vmScaleSetName, instanceIds, null, cancellationToken).ConfigureAwait(false); + } + + /// + /// Allows you to restart virtual machines in a virtual machine scale set. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual machine scale set. + /// + /// + /// the virtual machine scale set instance ids. + /// + public static void BeginRestart(this IVirtualMachineScaleSetsOperations operations, string resourceGroupName, string vmScaleSetName, System.Collections.Generic.IList instanceIds = default(System.Collections.Generic.IList)) + { + System.Threading.Tasks.Task.Factory.StartNew(s => ((IVirtualMachineScaleSetsOperations)s).BeginRestartAsync(resourceGroupName, vmScaleSetName, instanceIds), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// Allows you to restart virtual machines in a virtual machine scale set. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual machine scale set. + /// + /// + /// the virtual machine scale set instance ids. + /// + /// + /// The cancellation token. + /// + public static async System.Threading.Tasks.Task BeginRestartAsync(this IVirtualMachineScaleSetsOperations operations, string resourceGroupName, string vmScaleSetName, System.Collections.Generic.IList instanceIds = default(System.Collections.Generic.IList), System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + await operations.BeginRestartWithHttpMessagesAsync(resourceGroupName, vmScaleSetName, instanceIds, null, cancellationToken).ConfigureAwait(false); + } + + /// + /// Allows you to start virtual machines in a virtual machine scale set. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual machine scale set. + /// + /// + /// the virtual machine scale set instance ids. + /// + public static void Start(this IVirtualMachineScaleSetsOperations operations, string resourceGroupName, string vmScaleSetName, System.Collections.Generic.IList instanceIds = default(System.Collections.Generic.IList)) + { + System.Threading.Tasks.Task.Factory.StartNew(s => ((IVirtualMachineScaleSetsOperations)s).StartAsync(resourceGroupName, vmScaleSetName, instanceIds), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// Allows you to start virtual machines in a virtual machine scale set. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual machine scale set. + /// + /// + /// the virtual machine scale set instance ids. + /// + /// + /// The cancellation token. + /// + public static async System.Threading.Tasks.Task StartAsync(this IVirtualMachineScaleSetsOperations operations, string resourceGroupName, string vmScaleSetName, System.Collections.Generic.IList instanceIds = default(System.Collections.Generic.IList), System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + await operations.StartWithHttpMessagesAsync(resourceGroupName, vmScaleSetName, instanceIds, null, cancellationToken).ConfigureAwait(false); + } + + /// + /// Allows you to start virtual machines in a virtual machine scale set. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual machine scale set. + /// + /// + /// the virtual machine scale set instance ids. + /// + public static void BeginStart(this IVirtualMachineScaleSetsOperations operations, string resourceGroupName, string vmScaleSetName, System.Collections.Generic.IList instanceIds = default(System.Collections.Generic.IList)) + { + System.Threading.Tasks.Task.Factory.StartNew(s => ((IVirtualMachineScaleSetsOperations)s).BeginStartAsync(resourceGroupName, vmScaleSetName, instanceIds), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// Allows you to start virtual machines in a virtual machine scale set. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual machine scale set. + /// + /// + /// the virtual machine scale set instance ids. + /// + /// + /// The cancellation token. + /// + public static async System.Threading.Tasks.Task BeginStartAsync(this IVirtualMachineScaleSetsOperations operations, string resourceGroupName, string vmScaleSetName, System.Collections.Generic.IList instanceIds = default(System.Collections.Generic.IList), System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + await operations.BeginStartWithHttpMessagesAsync(resourceGroupName, vmScaleSetName, instanceIds, null, cancellationToken).ConfigureAwait(false); + } + + /// + /// Allows you to manually upgrade virtual machines in a virtual machine scale + /// set. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual machine scale set. + /// + /// + /// the virtual machine scale set instance ids. + /// + public static void UpdateInstances(this IVirtualMachineScaleSetsOperations operations, string resourceGroupName, string vmScaleSetName, System.Collections.Generic.IList instanceIds) + { + System.Threading.Tasks.Task.Factory.StartNew(s => ((IVirtualMachineScaleSetsOperations)s).UpdateInstancesAsync(resourceGroupName, vmScaleSetName, instanceIds), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// Allows you to manually upgrade virtual machines in a virtual machine scale + /// set. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual machine scale set. + /// + /// + /// the virtual machine scale set instance ids. + /// + /// + /// The cancellation token. + /// + public static async System.Threading.Tasks.Task UpdateInstancesAsync(this IVirtualMachineScaleSetsOperations operations, string resourceGroupName, string vmScaleSetName, System.Collections.Generic.IList instanceIds, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + await operations.UpdateInstancesWithHttpMessagesAsync(resourceGroupName, vmScaleSetName, instanceIds, null, cancellationToken).ConfigureAwait(false); + } + + /// + /// Allows you to manually upgrade virtual machines in a virtual machine scale + /// set. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual machine scale set. + /// + /// + /// the virtual machine scale set instance ids. + /// + public static void BeginUpdateInstances(this IVirtualMachineScaleSetsOperations operations, string resourceGroupName, string vmScaleSetName, System.Collections.Generic.IList instanceIds) + { + System.Threading.Tasks.Task.Factory.StartNew(s => ((IVirtualMachineScaleSetsOperations)s).BeginUpdateInstancesAsync(resourceGroupName, vmScaleSetName, instanceIds), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// Allows you to manually upgrade virtual machines in a virtual machine scale + /// set. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual machine scale set. + /// + /// + /// the virtual machine scale set instance ids. + /// + /// + /// The cancellation token. + /// + public static async System.Threading.Tasks.Task BeginUpdateInstancesAsync(this IVirtualMachineScaleSetsOperations operations, string resourceGroupName, string vmScaleSetName, System.Collections.Generic.IList instanceIds, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + await operations.BeginUpdateInstancesWithHttpMessagesAsync(resourceGroupName, vmScaleSetName, instanceIds, null, cancellationToken).ConfigureAwait(false); + } + + /// + /// Allows you to re-image(update the version of the installed operating + /// system) virtual machines in a virtual machine scale set. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual machine scale set. + /// + public static void Reimage(this IVirtualMachineScaleSetsOperations operations, string resourceGroupName, string vmScaleSetName) + { + System.Threading.Tasks.Task.Factory.StartNew(s => ((IVirtualMachineScaleSetsOperations)s).ReimageAsync(resourceGroupName, vmScaleSetName), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// Allows you to re-image(update the version of the installed operating + /// system) virtual machines in a virtual machine scale set. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual machine scale set. + /// + /// + /// The cancellation token. + /// + public static async System.Threading.Tasks.Task ReimageAsync(this IVirtualMachineScaleSetsOperations operations, string resourceGroupName, string vmScaleSetName, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + await operations.ReimageWithHttpMessagesAsync(resourceGroupName, vmScaleSetName, null, cancellationToken).ConfigureAwait(false); + } + + /// + /// Allows you to re-image(update the version of the installed operating + /// system) virtual machines in a virtual machine scale set. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual machine scale set. + /// + public static void BeginReimage(this IVirtualMachineScaleSetsOperations operations, string resourceGroupName, string vmScaleSetName) + { + System.Threading.Tasks.Task.Factory.StartNew(s => ((IVirtualMachineScaleSetsOperations)s).BeginReimageAsync(resourceGroupName, vmScaleSetName), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// Allows you to re-image(update the version of the installed operating + /// system) virtual machines in a virtual machine scale set. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual machine scale set. + /// + /// + /// The cancellation token. + /// + public static async System.Threading.Tasks.Task BeginReimageAsync(this IVirtualMachineScaleSetsOperations operations, string resourceGroupName, string vmScaleSetName, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + await operations.BeginReimageWithHttpMessagesAsync(resourceGroupName, vmScaleSetName, null, cancellationToken).ConfigureAwait(false); + } + + /// + /// Lists all virtual machine scale sets under a resource group. + /// + /// + /// 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 IVirtualMachineScaleSetsOperations operations, string nextPageLink) + { + return System.Threading.Tasks.Task.Factory.StartNew(s => ((IVirtualMachineScaleSetsOperations)s).ListNextAsync(nextPageLink), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// Lists all virtual machine scale sets under a resource group. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The NextLink from the previous successful call to List operation. + /// + /// + /// The cancellation token. + /// + public static async Task> ListNextAsync(this IVirtualMachineScaleSetsOperations 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; + } + } + + /// + /// Lists all Virtual Machine Scale Sets in the subscription. Use nextLink + /// property in the response to get the next page of Virtual Machine Scale + /// Sets. Do this till nextLink is not null to fetch all the Virtual Machine + /// Scale Sets. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The NextLink from the previous successful call to List operation. + /// + public static Microsoft.Rest.Azure.IPage ListAllNext(this IVirtualMachineScaleSetsOperations operations, string nextPageLink) + { + return System.Threading.Tasks.Task.Factory.StartNew(s => ((IVirtualMachineScaleSetsOperations)s).ListAllNextAsync(nextPageLink), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// Lists all Virtual Machine Scale Sets in the subscription. Use nextLink + /// property in the response to get the next page of Virtual Machine Scale + /// Sets. Do this till nextLink is not null to fetch all the Virtual Machine + /// Scale Sets. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The NextLink from the previous successful call to List operation. + /// + /// + /// The cancellation token. + /// + public static async Task> ListAllNextAsync(this IVirtualMachineScaleSetsOperations operations, string nextPageLink, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + using (var _result = await operations.ListAllNextWithHttpMessagesAsync(nextPageLink, null, cancellationToken).ConfigureAwait(false)) + { + return _result.Body; + } + } + + /// + /// Displays available skus for your virtual machine scale set including the + /// minimum and maximum vm instances allowed for a particular sku. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The NextLink from the previous successful call to List operation. + /// + public static Microsoft.Rest.Azure.IPage ListSkusNext(this IVirtualMachineScaleSetsOperations operations, string nextPageLink) + { + return System.Threading.Tasks.Task.Factory.StartNew(s => ((IVirtualMachineScaleSetsOperations)s).ListSkusNextAsync(nextPageLink), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// Displays available skus for your virtual machine scale set including the + /// minimum and maximum vm instances allowed for a particular sku. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The NextLink from the previous successful call to List operation. + /// + /// + /// The cancellation token. + /// + public static async Task> ListSkusNextAsync(this IVirtualMachineScaleSetsOperations operations, string nextPageLink, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + using (var _result = await operations.ListSkusNextWithHttpMessagesAsync(nextPageLink, null, cancellationToken).ConfigureAwait(false)) + { + return _result.Body; + } + } + + } +} diff --git a/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/VirtualMachineSizesOperations.cs b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/VirtualMachineSizesOperations.cs new file mode 100644 index 000000000..e2db254c7 --- /dev/null +++ b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/VirtualMachineSizesOperations.cs @@ -0,0 +1,234 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.Compute +{ + using System.Linq; + using Microsoft.Rest; + using Microsoft.Rest.Azure; + using Models; + + /// + /// VirtualMachineSizesOperations operations. + /// + internal partial class VirtualMachineSizesOperations : Microsoft.Rest.IServiceOperations, IVirtualMachineSizesOperations + { + /// + /// Initializes a new instance of the VirtualMachineSizesOperations class. + /// + /// + /// Reference to the service client. + /// + /// + /// Thrown when a required parameter is null + /// + internal VirtualMachineSizesOperations(ComputeManagementClient client) + { + if (client == null) + { + throw new System.ArgumentNullException("client"); + } + this.Client = client; + } + + /// + /// Gets a reference to the ComputeManagementClient + /// + public ComputeManagementClient Client { get; private set; } + + /// + /// Lists all available virtual machine sizes for a subscription in a location. + /// + /// + /// The location upon which virtual-machine-sizes is queried. + /// + /// + /// 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 + /// + /// + /// A response object containing the response body and response headers. + /// + public async System.Threading.Tasks.Task>> ListWithHttpMessagesAsync(string location, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + if (location == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "location"); + } + if (location != null) + { + if (!System.Text.RegularExpressions.Regex.IsMatch(location, "^[-\\w\\._]+$")) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.Pattern, "location", "^[-\\w\\._]+$"); + } + } + if (this.Client.ApiVersion == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.ApiVersion"); + } + if (this.Client.SubscriptionId == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.SubscriptionId"); + } + // 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("location", location); + 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}/providers/Microsoft.Compute/locations/{location}/vmSizes").ToString(); + _url = _url.Replace("{location}", System.Uri.EscapeDataString(location)); + _url = _url.Replace("{subscriptionId}", System.Uri.EscapeDataString(this.Client.SubscriptionId)); + System.Collections.Generic.List _queryParameters = new System.Collections.Generic.List(); + if (this.Client.ApiVersion != null) + { + _queryParameters.Add(string.Format("api-version={0}", System.Uri.EscapeDataString(this.Client.ApiVersion))); + } + if (_queryParameters.Count > 0) + { + _url += "?" + string.Join("&", _queryParameters); + } + // Create HTTP transport objects + System.Net.Http.HttpRequestMessage _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); + CloudError _errorBody = Microsoft.Rest.Serialization.SafeJsonConvert.DeserializeObject(_responseContent, this.Client.DeserializationSettings); + if (_errorBody != null) + { + ex = new Microsoft.Rest.Azure.CloudException(_errorBody.Message); + 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 (_httpResponse.Headers.Contains("x-ms-request-id")) + { + ex.RequestId = _httpResponse.Headers.GetValues("x-ms-request-id").FirstOrDefault(); + } + 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; + } + + } +} diff --git a/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/VirtualMachineSizesOperationsExtensions.cs b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/VirtualMachineSizesOperationsExtensions.cs new file mode 100644 index 000000000..0e7c048ec --- /dev/null +++ b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/VirtualMachineSizesOperationsExtensions.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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.Compute +{ + using System.Threading.Tasks; + using Microsoft.Rest.Azure; + using Models; + + /// + /// Extension methods for VirtualMachineSizesOperations. + /// + public static partial class VirtualMachineSizesOperationsExtensions + { + /// + /// Lists all available virtual machine sizes for a subscription in a location. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The location upon which virtual-machine-sizes is queried. + /// + public static System.Collections.Generic.IEnumerable List(this IVirtualMachineSizesOperations operations, string location) + { + return System.Threading.Tasks.Task.Factory.StartNew(s => ((IVirtualMachineSizesOperations)s).ListAsync(location), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// Lists all available virtual machine sizes for a subscription in a location. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The location upon which virtual-machine-sizes is queried. + /// + /// + /// The cancellation token. + /// + public static async Task> ListAsync(this IVirtualMachineSizesOperations operations, string location, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + using (var _result = await operations.ListWithHttpMessagesAsync(location, null, cancellationToken).ConfigureAwait(false)) + { + return _result.Body; + } + } + + } +} diff --git a/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/VirtualMachinesOperations.cs b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/VirtualMachinesOperations.cs new file mode 100644 index 000000000..aa75caaea --- /dev/null +++ b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/VirtualMachinesOperations.cs @@ -0,0 +1,2898 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.Compute +{ + using System.Linq; + using Microsoft.Rest; + using Microsoft.Rest.Azure; + using Models; + + /// + /// VirtualMachinesOperations operations. + /// + internal partial class VirtualMachinesOperations : Microsoft.Rest.IServiceOperations, IVirtualMachinesOperations + { + /// + /// Initializes a new instance of the VirtualMachinesOperations class. + /// + /// + /// Reference to the service client. + /// + /// + /// Thrown when a required parameter is null + /// + internal VirtualMachinesOperations(ComputeManagementClient client) + { + if (client == null) + { + throw new System.ArgumentNullException("client"); + } + this.Client = client; + } + + /// + /// Gets a reference to the ComputeManagementClient + /// + public ComputeManagementClient Client { get; private set; } + + /// + /// Captures the VM by copying virtual hard disks of the VM and outputs a + /// template that can be used to create similar VMs. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual machine. + /// + /// + /// Parameters supplied to the Capture Virtual Machine operation. + /// + /// + /// The headers that will be added to request. + /// + /// + /// The cancellation token. + /// + public async System.Threading.Tasks.Task> CaptureWithHttpMessagesAsync(string resourceGroupName, string vmName, VirtualMachineCaptureParametersInner parameters, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + // Send request + Microsoft.Rest.Azure.AzureOperationResponse _response = await BeginCaptureWithHttpMessagesAsync( + resourceGroupName, vmName, parameters, customHeaders, cancellationToken); + return await this.Client.GetPostOrDeleteOperationResultAsync(_response, customHeaders, cancellationToken); + } + + /// + /// Captures the VM by copying virtual hard disks of the VM and outputs a + /// template that can be used to create similar VMs. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual machine. + /// + /// + /// Parameters supplied to the Capture Virtual Machine 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 + /// + /// + /// A response object containing the response body and response headers. + /// + public async System.Threading.Tasks.Task> BeginCaptureWithHttpMessagesAsync(string resourceGroupName, string vmName, VirtualMachineCaptureParametersInner parameters, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + if (resourceGroupName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "resourceGroupName"); + } + if (vmName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "vmName"); + } + if (parameters == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "parameters"); + } + if (parameters != null) + { + parameters.Validate(); + } + if (this.Client.ApiVersion == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.ApiVersion"); + } + if (this.Client.SubscriptionId == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.SubscriptionId"); + } + // 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("vmName", vmName); + tracingParameters.Add("parameters", parameters); + tracingParameters.Add("cancellationToken", cancellationToken); + Microsoft.Rest.ServiceClientTracing.Enter(_invocationId, this, "BeginCapture", 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.Compute/virtualMachines/{vmName}/capture").ToString(); + _url = _url.Replace("{resourceGroupName}", System.Uri.EscapeDataString(resourceGroupName)); + _url = _url.Replace("{vmName}", System.Uri.EscapeDataString(vmName)); + _url = _url.Replace("{subscriptionId}", System.Uri.EscapeDataString(this.Client.SubscriptionId)); + System.Collections.Generic.List _queryParameters = new System.Collections.Generic.List(); + if (this.Client.ApiVersion != null) + { + _queryParameters.Add(string.Format("api-version={0}", System.Uri.EscapeDataString(this.Client.ApiVersion))); + } + if (_queryParameters.Count > 0) + { + _url += "?" + string.Join("&", _queryParameters); + } + // Create HTTP transport objects + System.Net.Http.HttpRequestMessage _httpRequest = new System.Net.Http.HttpRequestMessage(); + System.Net.Http.HttpResponseMessage _httpResponse = null; + _httpRequest.Method = new System.Net.Http.HttpMethod("POST"); + _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 != 202) + { + 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); + CloudError _errorBody = Microsoft.Rest.Serialization.SafeJsonConvert.DeserializeObject(_responseContent, this.Client.DeserializationSettings); + if (_errorBody != null) + { + ex = new Microsoft.Rest.Azure.CloudException(_errorBody.Message); + 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 (_httpResponse.Headers.Contains("x-ms-request-id")) + { + ex.RequestId = _httpResponse.Headers.GetValues("x-ms-request-id").FirstOrDefault(); + } + 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; + } + + /// + /// The operation to create or update a virtual machine. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual machine. + /// + /// + /// Parameters supplied to the Create Virtual Machine operation. + /// + /// + /// The headers that will be added to request. + /// + /// + /// The cancellation token. + /// + public async System.Threading.Tasks.Task> CreateOrUpdateWithHttpMessagesAsync(string resourceGroupName, string vmName, VirtualMachineInner 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, vmName, parameters, customHeaders, cancellationToken); + return await this.Client.GetPutOrPatchOperationResultAsync(_response, + customHeaders, + cancellationToken); + } + + /// + /// The operation to create or update a virtual machine. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual machine. + /// + /// + /// Parameters supplied to the Create Virtual Machine 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 + /// + /// + /// A response object containing the response body and response headers. + /// + public async System.Threading.Tasks.Task> BeginCreateOrUpdateWithHttpMessagesAsync(string resourceGroupName, string vmName, VirtualMachineInner parameters, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + if (resourceGroupName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "resourceGroupName"); + } + if (vmName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "vmName"); + } + if (parameters == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "parameters"); + } + if (parameters != null) + { + parameters.Validate(); + } + if (this.Client.ApiVersion == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.ApiVersion"); + } + if (this.Client.SubscriptionId == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.SubscriptionId"); + } + // 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("vmName", vmName); + 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.Compute/virtualMachines/{vmName}").ToString(); + _url = _url.Replace("{resourceGroupName}", System.Uri.EscapeDataString(resourceGroupName)); + _url = _url.Replace("{vmName}", System.Uri.EscapeDataString(vmName)); + _url = _url.Replace("{subscriptionId}", System.Uri.EscapeDataString(this.Client.SubscriptionId)); + System.Collections.Generic.List _queryParameters = new System.Collections.Generic.List(); + if (this.Client.ApiVersion != null) + { + _queryParameters.Add(string.Format("api-version={0}", System.Uri.EscapeDataString(this.Client.ApiVersion))); + } + if (_queryParameters.Count > 0) + { + _url += "?" + string.Join("&", _queryParameters); + } + // Create HTTP transport objects + System.Net.Http.HttpRequestMessage _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); + CloudError _errorBody = Microsoft.Rest.Serialization.SafeJsonConvert.DeserializeObject(_responseContent, this.Client.DeserializationSettings); + if (_errorBody != null) + { + ex = new Microsoft.Rest.Azure.CloudException(_errorBody.Message); + 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 (_httpResponse.Headers.Contains("x-ms-request-id")) + { + ex.RequestId = _httpResponse.Headers.GetValues("x-ms-request-id").FirstOrDefault(); + } + 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); + } + } + if (_shouldTrace) + { + Microsoft.Rest.ServiceClientTracing.Exit(_invocationId, _result); + } + return _result; + } + + /// + /// The operation to delete a virtual machine. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual machine. + /// + /// + /// The headers that will be added to request. + /// + /// + /// The cancellation token. + /// + public async System.Threading.Tasks.Task DeleteWithHttpMessagesAsync(string resourceGroupName, string vmName, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + // Send request + Microsoft.Rest.Azure.AzureOperationResponse _response = await BeginDeleteWithHttpMessagesAsync( + resourceGroupName, vmName, customHeaders, cancellationToken); + return await this.Client.GetPostOrDeleteOperationResultAsync(_response, customHeaders, cancellationToken); + } + + /// + /// The operation to delete a virtual machine. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual machine. + /// + /// + /// 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 + /// + /// + /// A response object containing the response body and response headers. + /// + public async System.Threading.Tasks.Task BeginDeleteWithHttpMessagesAsync(string resourceGroupName, string vmName, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + if (resourceGroupName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "resourceGroupName"); + } + if (vmName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "vmName"); + } + if (this.Client.ApiVersion == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.ApiVersion"); + } + if (this.Client.SubscriptionId == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.SubscriptionId"); + } + // 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("vmName", vmName); + 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.Compute/virtualMachines/{vmName}").ToString(); + _url = _url.Replace("{resourceGroupName}", System.Uri.EscapeDataString(resourceGroupName)); + _url = _url.Replace("{vmName}", System.Uri.EscapeDataString(vmName)); + _url = _url.Replace("{subscriptionId}", System.Uri.EscapeDataString(this.Client.SubscriptionId)); + System.Collections.Generic.List _queryParameters = new System.Collections.Generic.List(); + if (this.Client.ApiVersion != null) + { + _queryParameters.Add(string.Format("api-version={0}", System.Uri.EscapeDataString(this.Client.ApiVersion))); + } + if (_queryParameters.Count > 0) + { + _url += "?" + string.Join("&", _queryParameters); + } + // Create HTTP transport objects + System.Net.Http.HttpRequestMessage _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)); + if (_httpResponse.Content != null) { + _responseContent = await _httpResponse.Content.ReadAsStringAsync().ConfigureAwait(false); + } + else { + _responseContent = string.Empty; + } + ex.Request = new Microsoft.Rest.HttpRequestMessageWrapper(_httpRequest, _requestContent); + ex.Response = new Microsoft.Rest.HttpResponseMessageWrapper(_httpResponse, _responseContent); + if (_httpResponse.Headers.Contains("x-ms-request-id")) + { + ex.RequestId = _httpResponse.Headers.GetValues("x-ms-request-id").FirstOrDefault(); + } + 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(); + } + if (_shouldTrace) + { + Microsoft.Rest.ServiceClientTracing.Exit(_invocationId, _result); + } + return _result; + } + + /// + /// The operation to get a virtual machine. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual machine. + /// + /// + /// The expand expression to apply on the operation. Possible values include: + /// 'instanceView' + /// + /// + /// 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 + /// + /// + /// A response object containing the response body and response headers. + /// + public async System.Threading.Tasks.Task> GetWithHttpMessagesAsync(string resourceGroupName, string vmName, InstanceViewTypes? expand = default(InstanceViewTypes?), System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + if (resourceGroupName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "resourceGroupName"); + } + if (vmName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "vmName"); + } + if (this.Client.ApiVersion == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.ApiVersion"); + } + if (this.Client.SubscriptionId == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.SubscriptionId"); + } + // 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("vmName", vmName); + tracingParameters.Add("expand", expand); + 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.Compute/virtualMachines/{vmName}").ToString(); + _url = _url.Replace("{resourceGroupName}", System.Uri.EscapeDataString(resourceGroupName)); + _url = _url.Replace("{vmName}", System.Uri.EscapeDataString(vmName)); + _url = _url.Replace("{subscriptionId}", System.Uri.EscapeDataString(this.Client.SubscriptionId)); + System.Collections.Generic.List _queryParameters = new System.Collections.Generic.List(); + if (expand != null) + { + _queryParameters.Add(string.Format("$expand={0}", System.Uri.EscapeDataString(Microsoft.Rest.Serialization.SafeJsonConvert.SerializeObject(expand, this.Client.SerializationSettings).Trim('"')))); + } + if (this.Client.ApiVersion != null) + { + _queryParameters.Add(string.Format("api-version={0}", System.Uri.EscapeDataString(this.Client.ApiVersion))); + } + if (_queryParameters.Count > 0) + { + _url += "?" + string.Join("&", _queryParameters); + } + // Create HTTP transport objects + System.Net.Http.HttpRequestMessage _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); + CloudError _errorBody = Microsoft.Rest.Serialization.SafeJsonConvert.DeserializeObject(_responseContent, this.Client.DeserializationSettings); + if (_errorBody != null) + { + ex = new Microsoft.Rest.Azure.CloudException(_errorBody.Message); + 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 (_httpResponse.Headers.Contains("x-ms-request-id")) + { + ex.RequestId = _httpResponse.Headers.GetValues("x-ms-request-id").FirstOrDefault(); + } + 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; + } + + /// + /// Shuts down the Virtual Machine and releases the compute resources. You are + /// not billed for the compute resources that this Virtual Machine uses. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual machine. + /// + /// + /// The headers that will be added to request. + /// + /// + /// The cancellation token. + /// + public async System.Threading.Tasks.Task DeallocateWithHttpMessagesAsync(string resourceGroupName, string vmName, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + // Send request + Microsoft.Rest.Azure.AzureOperationResponse _response = await BeginDeallocateWithHttpMessagesAsync( + resourceGroupName, vmName, customHeaders, cancellationToken); + return await this.Client.GetPostOrDeleteOperationResultAsync(_response, customHeaders, cancellationToken); + } + + /// + /// Shuts down the Virtual Machine and releases the compute resources. You are + /// not billed for the compute resources that this Virtual Machine uses. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual machine. + /// + /// + /// 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 + /// + /// + /// A response object containing the response body and response headers. + /// + public async System.Threading.Tasks.Task BeginDeallocateWithHttpMessagesAsync(string resourceGroupName, string vmName, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + if (resourceGroupName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "resourceGroupName"); + } + if (vmName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "vmName"); + } + if (this.Client.ApiVersion == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.ApiVersion"); + } + if (this.Client.SubscriptionId == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.SubscriptionId"); + } + // 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("vmName", vmName); + tracingParameters.Add("cancellationToken", cancellationToken); + Microsoft.Rest.ServiceClientTracing.Enter(_invocationId, this, "BeginDeallocate", 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.Compute/virtualMachines/{vmName}/deallocate").ToString(); + _url = _url.Replace("{resourceGroupName}", System.Uri.EscapeDataString(resourceGroupName)); + _url = _url.Replace("{vmName}", System.Uri.EscapeDataString(vmName)); + _url = _url.Replace("{subscriptionId}", System.Uri.EscapeDataString(this.Client.SubscriptionId)); + System.Collections.Generic.List _queryParameters = new System.Collections.Generic.List(); + if (this.Client.ApiVersion != null) + { + _queryParameters.Add(string.Format("api-version={0}", System.Uri.EscapeDataString(this.Client.ApiVersion))); + } + if (_queryParameters.Count > 0) + { + _url += "?" + string.Join("&", _queryParameters); + } + // Create HTTP transport objects + System.Net.Http.HttpRequestMessage _httpRequest = new System.Net.Http.HttpRequestMessage(); + System.Net.Http.HttpResponseMessage _httpResponse = null; + _httpRequest.Method = new System.Net.Http.HttpMethod("POST"); + _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) + { + var ex = new Microsoft.Rest.Azure.CloudException(string.Format("Operation returned an invalid status code '{0}'", _statusCode)); + if (_httpResponse.Content != null) { + _responseContent = await _httpResponse.Content.ReadAsStringAsync().ConfigureAwait(false); + } + else { + _responseContent = string.Empty; + } + ex.Request = new Microsoft.Rest.HttpRequestMessageWrapper(_httpRequest, _requestContent); + ex.Response = new Microsoft.Rest.HttpResponseMessageWrapper(_httpResponse, _responseContent); + if (_httpResponse.Headers.Contains("x-ms-request-id")) + { + ex.RequestId = _httpResponse.Headers.GetValues("x-ms-request-id").FirstOrDefault(); + } + 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(); + } + if (_shouldTrace) + { + Microsoft.Rest.ServiceClientTracing.Exit(_invocationId, _result); + } + return _result; + } + + /// + /// Sets the state of the VM as Generalized. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual machine. + /// + /// + /// 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 + /// + /// + /// A response object containing the response body and response headers. + /// + public async System.Threading.Tasks.Task GeneralizeWithHttpMessagesAsync(string resourceGroupName, string vmName, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + if (resourceGroupName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "resourceGroupName"); + } + if (vmName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "vmName"); + } + if (this.Client.ApiVersion == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.ApiVersion"); + } + if (this.Client.SubscriptionId == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.SubscriptionId"); + } + // 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("vmName", vmName); + tracingParameters.Add("cancellationToken", cancellationToken); + Microsoft.Rest.ServiceClientTracing.Enter(_invocationId, this, "Generalize", 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.Compute/virtualMachines/{vmName}/generalize").ToString(); + _url = _url.Replace("{resourceGroupName}", System.Uri.EscapeDataString(resourceGroupName)); + _url = _url.Replace("{vmName}", System.Uri.EscapeDataString(vmName)); + _url = _url.Replace("{subscriptionId}", System.Uri.EscapeDataString(this.Client.SubscriptionId)); + System.Collections.Generic.List _queryParameters = new System.Collections.Generic.List(); + if (this.Client.ApiVersion != null) + { + _queryParameters.Add(string.Format("api-version={0}", System.Uri.EscapeDataString(this.Client.ApiVersion))); + } + if (_queryParameters.Count > 0) + { + _url += "?" + string.Join("&", _queryParameters); + } + // Create HTTP transport objects + System.Net.Http.HttpRequestMessage _httpRequest = new System.Net.Http.HttpRequestMessage(); + System.Net.Http.HttpResponseMessage _httpResponse = null; + _httpRequest.Method = new System.Net.Http.HttpMethod("POST"); + _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)); + if (_httpResponse.Content != null) { + _responseContent = await _httpResponse.Content.ReadAsStringAsync().ConfigureAwait(false); + } + else { + _responseContent = string.Empty; + } + ex.Request = new Microsoft.Rest.HttpRequestMessageWrapper(_httpRequest, _requestContent); + ex.Response = new Microsoft.Rest.HttpResponseMessageWrapper(_httpResponse, _responseContent); + if (_httpResponse.Headers.Contains("x-ms-request-id")) + { + ex.RequestId = _httpResponse.Headers.GetValues("x-ms-request-id").FirstOrDefault(); + } + 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(); + } + if (_shouldTrace) + { + Microsoft.Rest.ServiceClientTracing.Exit(_invocationId, _result); + } + return _result; + } + + /// + /// The operation to list virtual machines under a resource group. + /// + /// + /// The name of the resource group. + /// + /// + /// 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 + /// + /// + /// A response object containing the response body and response headers. + /// + public async System.Threading.Tasks.Task>> ListWithHttpMessagesAsync(string resourceGroupName, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + if (resourceGroupName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "resourceGroupName"); + } + if (this.Client.ApiVersion == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.ApiVersion"); + } + if (this.Client.SubscriptionId == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.SubscriptionId"); + } + // 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("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.Compute/virtualMachines").ToString(); + _url = _url.Replace("{resourceGroupName}", System.Uri.EscapeDataString(resourceGroupName)); + _url = _url.Replace("{subscriptionId}", System.Uri.EscapeDataString(this.Client.SubscriptionId)); + System.Collections.Generic.List _queryParameters = new System.Collections.Generic.List(); + if (this.Client.ApiVersion != null) + { + _queryParameters.Add(string.Format("api-version={0}", System.Uri.EscapeDataString(this.Client.ApiVersion))); + } + if (_queryParameters.Count > 0) + { + _url += "?" + string.Join("&", _queryParameters); + } + // Create HTTP transport objects + System.Net.Http.HttpRequestMessage _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); + CloudError _errorBody = Microsoft.Rest.Serialization.SafeJsonConvert.DeserializeObject(_responseContent, this.Client.DeserializationSettings); + if (_errorBody != null) + { + ex = new Microsoft.Rest.Azure.CloudException(_errorBody.Message); + 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 (_httpResponse.Headers.Contains("x-ms-request-id")) + { + ex.RequestId = _httpResponse.Headers.GetValues("x-ms-request-id").FirstOrDefault(); + } + 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 list of Virtual Machines in the subscription. Use nextLink + /// property in the response to get the next page of Virtual Machines. Do + /// this till nextLink is not null to fetch all the Virtual Machines. + /// + /// + /// 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 + /// + /// + /// A response object containing the response body and response headers. + /// + public async System.Threading.Tasks.Task>> ListAllWithHttpMessagesAsync(System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + if (this.Client.ApiVersion == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.ApiVersion"); + } + if (this.Client.SubscriptionId == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.SubscriptionId"); + } + // 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("cancellationToken", cancellationToken); + Microsoft.Rest.ServiceClientTracing.Enter(_invocationId, this, "ListAll", tracingParameters); + } + // Construct URL + var _baseUrl = this.Client.BaseUri.AbsoluteUri; + var _url = new System.Uri(new System.Uri(_baseUrl + (_baseUrl.EndsWith("/") ? "" : "/")), "subscriptions/{subscriptionId}/providers/Microsoft.Compute/virtualMachines").ToString(); + _url = _url.Replace("{subscriptionId}", System.Uri.EscapeDataString(this.Client.SubscriptionId)); + System.Collections.Generic.List _queryParameters = new System.Collections.Generic.List(); + if (this.Client.ApiVersion != null) + { + _queryParameters.Add(string.Format("api-version={0}", System.Uri.EscapeDataString(this.Client.ApiVersion))); + } + if (_queryParameters.Count > 0) + { + _url += "?" + string.Join("&", _queryParameters); + } + // Create HTTP transport objects + System.Net.Http.HttpRequestMessage _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); + CloudError _errorBody = Microsoft.Rest.Serialization.SafeJsonConvert.DeserializeObject(_responseContent, this.Client.DeserializationSettings); + if (_errorBody != null) + { + ex = new Microsoft.Rest.Azure.CloudException(_errorBody.Message); + 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 (_httpResponse.Headers.Contains("x-ms-request-id")) + { + ex.RequestId = _httpResponse.Headers.GetValues("x-ms-request-id").FirstOrDefault(); + } + 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; + } + + /// + /// Lists all available virtual machine sizes it can be resized to for a + /// virtual machine. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual machine. + /// + /// + /// 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 + /// + /// + /// A response object containing the response body and response headers. + /// + public async System.Threading.Tasks.Task>> ListAvailableSizesWithHttpMessagesAsync(string resourceGroupName, string vmName, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + if (resourceGroupName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "resourceGroupName"); + } + if (vmName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "vmName"); + } + if (this.Client.ApiVersion == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.ApiVersion"); + } + if (this.Client.SubscriptionId == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.SubscriptionId"); + } + // 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("vmName", vmName); + tracingParameters.Add("cancellationToken", cancellationToken); + Microsoft.Rest.ServiceClientTracing.Enter(_invocationId, this, "ListAvailableSizes", 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.Compute/virtualMachines/{vmName}/vmSizes").ToString(); + _url = _url.Replace("{resourceGroupName}", System.Uri.EscapeDataString(resourceGroupName)); + _url = _url.Replace("{vmName}", System.Uri.EscapeDataString(vmName)); + _url = _url.Replace("{subscriptionId}", System.Uri.EscapeDataString(this.Client.SubscriptionId)); + System.Collections.Generic.List _queryParameters = new System.Collections.Generic.List(); + if (this.Client.ApiVersion != null) + { + _queryParameters.Add(string.Format("api-version={0}", System.Uri.EscapeDataString(this.Client.ApiVersion))); + } + if (_queryParameters.Count > 0) + { + _url += "?" + string.Join("&", _queryParameters); + } + // Create HTTP transport objects + System.Net.Http.HttpRequestMessage _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); + CloudError _errorBody = Microsoft.Rest.Serialization.SafeJsonConvert.DeserializeObject(_responseContent, this.Client.DeserializationSettings); + if (_errorBody != null) + { + ex = new Microsoft.Rest.Azure.CloudException(_errorBody.Message); + 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 (_httpResponse.Headers.Contains("x-ms-request-id")) + { + ex.RequestId = _httpResponse.Headers.GetValues("x-ms-request-id").FirstOrDefault(); + } + 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; + } + + /// + /// The operation to power off (stop) a virtual machine. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual machine. + /// + /// + /// The headers that will be added to request. + /// + /// + /// The cancellation token. + /// + public async System.Threading.Tasks.Task PowerOffWithHttpMessagesAsync(string resourceGroupName, string vmName, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + // Send request + Microsoft.Rest.Azure.AzureOperationResponse _response = await BeginPowerOffWithHttpMessagesAsync( + resourceGroupName, vmName, customHeaders, cancellationToken); + return await this.Client.GetPostOrDeleteOperationResultAsync(_response, customHeaders, cancellationToken); + } + + /// + /// The operation to power off (stop) a virtual machine. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual machine. + /// + /// + /// 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 + /// + /// + /// A response object containing the response body and response headers. + /// + public async System.Threading.Tasks.Task BeginPowerOffWithHttpMessagesAsync(string resourceGroupName, string vmName, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + if (resourceGroupName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "resourceGroupName"); + } + if (vmName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "vmName"); + } + if (this.Client.ApiVersion == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.ApiVersion"); + } + if (this.Client.SubscriptionId == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.SubscriptionId"); + } + // 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("vmName", vmName); + tracingParameters.Add("cancellationToken", cancellationToken); + Microsoft.Rest.ServiceClientTracing.Enter(_invocationId, this, "BeginPowerOff", 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.Compute/virtualMachines/{vmName}/powerOff").ToString(); + _url = _url.Replace("{resourceGroupName}", System.Uri.EscapeDataString(resourceGroupName)); + _url = _url.Replace("{vmName}", System.Uri.EscapeDataString(vmName)); + _url = _url.Replace("{subscriptionId}", System.Uri.EscapeDataString(this.Client.SubscriptionId)); + System.Collections.Generic.List _queryParameters = new System.Collections.Generic.List(); + if (this.Client.ApiVersion != null) + { + _queryParameters.Add(string.Format("api-version={0}", System.Uri.EscapeDataString(this.Client.ApiVersion))); + } + if (_queryParameters.Count > 0) + { + _url += "?" + string.Join("&", _queryParameters); + } + // Create HTTP transport objects + System.Net.Http.HttpRequestMessage _httpRequest = new System.Net.Http.HttpRequestMessage(); + System.Net.Http.HttpResponseMessage _httpResponse = null; + _httpRequest.Method = new System.Net.Http.HttpMethod("POST"); + _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) + { + var ex = new Microsoft.Rest.Azure.CloudException(string.Format("Operation returned an invalid status code '{0}'", _statusCode)); + if (_httpResponse.Content != null) { + _responseContent = await _httpResponse.Content.ReadAsStringAsync().ConfigureAwait(false); + } + else { + _responseContent = string.Empty; + } + ex.Request = new Microsoft.Rest.HttpRequestMessageWrapper(_httpRequest, _requestContent); + ex.Response = new Microsoft.Rest.HttpResponseMessageWrapper(_httpResponse, _responseContent); + if (_httpResponse.Headers.Contains("x-ms-request-id")) + { + ex.RequestId = _httpResponse.Headers.GetValues("x-ms-request-id").FirstOrDefault(); + } + 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(); + } + if (_shouldTrace) + { + Microsoft.Rest.ServiceClientTracing.Exit(_invocationId, _result); + } + return _result; + } + + /// + /// The operation to restart a virtual machine. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual machine. + /// + /// + /// The headers that will be added to request. + /// + /// + /// The cancellation token. + /// + public async System.Threading.Tasks.Task RestartWithHttpMessagesAsync(string resourceGroupName, string vmName, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + // Send request + Microsoft.Rest.Azure.AzureOperationResponse _response = await BeginRestartWithHttpMessagesAsync( + resourceGroupName, vmName, customHeaders, cancellationToken); + return await this.Client.GetPostOrDeleteOperationResultAsync(_response, customHeaders, cancellationToken); + } + + /// + /// The operation to restart a virtual machine. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual machine. + /// + /// + /// 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 + /// + /// + /// A response object containing the response body and response headers. + /// + public async System.Threading.Tasks.Task BeginRestartWithHttpMessagesAsync(string resourceGroupName, string vmName, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + if (resourceGroupName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "resourceGroupName"); + } + if (vmName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "vmName"); + } + if (this.Client.ApiVersion == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.ApiVersion"); + } + if (this.Client.SubscriptionId == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.SubscriptionId"); + } + // 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("vmName", vmName); + tracingParameters.Add("cancellationToken", cancellationToken); + Microsoft.Rest.ServiceClientTracing.Enter(_invocationId, this, "BeginRestart", 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.Compute/virtualMachines/{vmName}/restart").ToString(); + _url = _url.Replace("{resourceGroupName}", System.Uri.EscapeDataString(resourceGroupName)); + _url = _url.Replace("{vmName}", System.Uri.EscapeDataString(vmName)); + _url = _url.Replace("{subscriptionId}", System.Uri.EscapeDataString(this.Client.SubscriptionId)); + System.Collections.Generic.List _queryParameters = new System.Collections.Generic.List(); + if (this.Client.ApiVersion != null) + { + _queryParameters.Add(string.Format("api-version={0}", System.Uri.EscapeDataString(this.Client.ApiVersion))); + } + if (_queryParameters.Count > 0) + { + _url += "?" + string.Join("&", _queryParameters); + } + // Create HTTP transport objects + System.Net.Http.HttpRequestMessage _httpRequest = new System.Net.Http.HttpRequestMessage(); + System.Net.Http.HttpResponseMessage _httpResponse = null; + _httpRequest.Method = new System.Net.Http.HttpMethod("POST"); + _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) + { + var ex = new Microsoft.Rest.Azure.CloudException(string.Format("Operation returned an invalid status code '{0}'", _statusCode)); + if (_httpResponse.Content != null) { + _responseContent = await _httpResponse.Content.ReadAsStringAsync().ConfigureAwait(false); + } + else { + _responseContent = string.Empty; + } + ex.Request = new Microsoft.Rest.HttpRequestMessageWrapper(_httpRequest, _requestContent); + ex.Response = new Microsoft.Rest.HttpResponseMessageWrapper(_httpResponse, _responseContent); + if (_httpResponse.Headers.Contains("x-ms-request-id")) + { + ex.RequestId = _httpResponse.Headers.GetValues("x-ms-request-id").FirstOrDefault(); + } + 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(); + } + if (_shouldTrace) + { + Microsoft.Rest.ServiceClientTracing.Exit(_invocationId, _result); + } + return _result; + } + + /// + /// The operation to start a virtual machine. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual machine. + /// + /// + /// The headers that will be added to request. + /// + /// + /// The cancellation token. + /// + public async System.Threading.Tasks.Task StartWithHttpMessagesAsync(string resourceGroupName, string vmName, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + // Send request + Microsoft.Rest.Azure.AzureOperationResponse _response = await BeginStartWithHttpMessagesAsync( + resourceGroupName, vmName, customHeaders, cancellationToken); + return await this.Client.GetPostOrDeleteOperationResultAsync(_response, customHeaders, cancellationToken); + } + + /// + /// The operation to start a virtual machine. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual machine. + /// + /// + /// 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 + /// + /// + /// A response object containing the response body and response headers. + /// + public async System.Threading.Tasks.Task BeginStartWithHttpMessagesAsync(string resourceGroupName, string vmName, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + if (resourceGroupName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "resourceGroupName"); + } + if (vmName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "vmName"); + } + if (this.Client.ApiVersion == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.ApiVersion"); + } + if (this.Client.SubscriptionId == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.SubscriptionId"); + } + // 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("vmName", vmName); + tracingParameters.Add("cancellationToken", cancellationToken); + Microsoft.Rest.ServiceClientTracing.Enter(_invocationId, this, "BeginStart", 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.Compute/virtualMachines/{vmName}/start").ToString(); + _url = _url.Replace("{resourceGroupName}", System.Uri.EscapeDataString(resourceGroupName)); + _url = _url.Replace("{vmName}", System.Uri.EscapeDataString(vmName)); + _url = _url.Replace("{subscriptionId}", System.Uri.EscapeDataString(this.Client.SubscriptionId)); + System.Collections.Generic.List _queryParameters = new System.Collections.Generic.List(); + if (this.Client.ApiVersion != null) + { + _queryParameters.Add(string.Format("api-version={0}", System.Uri.EscapeDataString(this.Client.ApiVersion))); + } + if (_queryParameters.Count > 0) + { + _url += "?" + string.Join("&", _queryParameters); + } + // Create HTTP transport objects + System.Net.Http.HttpRequestMessage _httpRequest = new System.Net.Http.HttpRequestMessage(); + System.Net.Http.HttpResponseMessage _httpResponse = null; + _httpRequest.Method = new System.Net.Http.HttpMethod("POST"); + _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) + { + var ex = new Microsoft.Rest.Azure.CloudException(string.Format("Operation returned an invalid status code '{0}'", _statusCode)); + if (_httpResponse.Content != null) { + _responseContent = await _httpResponse.Content.ReadAsStringAsync().ConfigureAwait(false); + } + else { + _responseContent = string.Empty; + } + ex.Request = new Microsoft.Rest.HttpRequestMessageWrapper(_httpRequest, _requestContent); + ex.Response = new Microsoft.Rest.HttpResponseMessageWrapper(_httpResponse, _responseContent); + if (_httpResponse.Headers.Contains("x-ms-request-id")) + { + ex.RequestId = _httpResponse.Headers.GetValues("x-ms-request-id").FirstOrDefault(); + } + 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(); + } + if (_shouldTrace) + { + Microsoft.Rest.ServiceClientTracing.Exit(_invocationId, _result); + } + return _result; + } + + /// + /// The operation to redeploy a virtual machine. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual machine. + /// + /// + /// The headers that will be added to request. + /// + /// + /// The cancellation token. + /// + public async System.Threading.Tasks.Task RedeployWithHttpMessagesAsync(string resourceGroupName, string vmName, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + // Send request + Microsoft.Rest.Azure.AzureOperationResponse _response = await BeginRedeployWithHttpMessagesAsync( + resourceGroupName, vmName, customHeaders, cancellationToken); + return await this.Client.GetPostOrDeleteOperationResultAsync(_response, customHeaders, cancellationToken); + } + + /// + /// The operation to redeploy a virtual machine. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual machine. + /// + /// + /// 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 + /// + /// + /// A response object containing the response body and response headers. + /// + public async System.Threading.Tasks.Task BeginRedeployWithHttpMessagesAsync(string resourceGroupName, string vmName, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + if (resourceGroupName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "resourceGroupName"); + } + if (vmName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "vmName"); + } + if (this.Client.ApiVersion == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.ApiVersion"); + } + if (this.Client.SubscriptionId == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.SubscriptionId"); + } + // 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("vmName", vmName); + tracingParameters.Add("cancellationToken", cancellationToken); + Microsoft.Rest.ServiceClientTracing.Enter(_invocationId, this, "BeginRedeploy", 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.Compute/virtualMachines/{vmName}/redeploy").ToString(); + _url = _url.Replace("{resourceGroupName}", System.Uri.EscapeDataString(resourceGroupName)); + _url = _url.Replace("{vmName}", System.Uri.EscapeDataString(vmName)); + _url = _url.Replace("{subscriptionId}", System.Uri.EscapeDataString(this.Client.SubscriptionId)); + System.Collections.Generic.List _queryParameters = new System.Collections.Generic.List(); + if (this.Client.ApiVersion != null) + { + _queryParameters.Add(string.Format("api-version={0}", System.Uri.EscapeDataString(this.Client.ApiVersion))); + } + if (_queryParameters.Count > 0) + { + _url += "?" + string.Join("&", _queryParameters); + } + // Create HTTP transport objects + System.Net.Http.HttpRequestMessage _httpRequest = new System.Net.Http.HttpRequestMessage(); + System.Net.Http.HttpResponseMessage _httpResponse = null; + _httpRequest.Method = new System.Net.Http.HttpMethod("POST"); + _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) + { + var ex = new Microsoft.Rest.Azure.CloudException(string.Format("Operation returned an invalid status code '{0}'", _statusCode)); + if (_httpResponse.Content != null) { + _responseContent = await _httpResponse.Content.ReadAsStringAsync().ConfigureAwait(false); + } + else { + _responseContent = string.Empty; + } + ex.Request = new Microsoft.Rest.HttpRequestMessageWrapper(_httpRequest, _requestContent); + ex.Response = new Microsoft.Rest.HttpResponseMessageWrapper(_httpResponse, _responseContent); + if (_httpResponse.Headers.Contains("x-ms-request-id")) + { + ex.RequestId = _httpResponse.Headers.GetValues("x-ms-request-id").FirstOrDefault(); + } + 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(); + } + if (_shouldTrace) + { + Microsoft.Rest.ServiceClientTracing.Exit(_invocationId, _result); + } + return _result; + } + + /// + /// The operation to list virtual machines under a resource group. + /// + /// + /// 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 + /// + /// + /// 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 += "?" + string.Join("&", _queryParameters); + } + // Create HTTP transport objects + System.Net.Http.HttpRequestMessage _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); + CloudError _errorBody = Microsoft.Rest.Serialization.SafeJsonConvert.DeserializeObject(_responseContent, this.Client.DeserializationSettings); + if (_errorBody != null) + { + ex = new Microsoft.Rest.Azure.CloudException(_errorBody.Message); + 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 (_httpResponse.Headers.Contains("x-ms-request-id")) + { + ex.RequestId = _httpResponse.Headers.GetValues("x-ms-request-id").FirstOrDefault(); + } + 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 list of Virtual Machines in the subscription. Use nextLink + /// property in the response to get the next page of Virtual Machines. Do + /// this till nextLink is not null to fetch all the Virtual Machines. + /// + /// + /// 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 + /// + /// + /// A response object containing the response body and response headers. + /// + public async System.Threading.Tasks.Task>> ListAllNextWithHttpMessagesAsync(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, "ListAllNext", 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 += "?" + string.Join("&", _queryParameters); + } + // Create HTTP transport objects + System.Net.Http.HttpRequestMessage _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); + CloudError _errorBody = Microsoft.Rest.Serialization.SafeJsonConvert.DeserializeObject(_responseContent, this.Client.DeserializationSettings); + if (_errorBody != null) + { + ex = new Microsoft.Rest.Azure.CloudException(_errorBody.Message); + 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 (_httpResponse.Headers.Contains("x-ms-request-id")) + { + ex.RequestId = _httpResponse.Headers.GetValues("x-ms-request-id").FirstOrDefault(); + } + 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; + } + + } +} diff --git a/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/VirtualMachinesOperationsExtensions.cs b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/VirtualMachinesOperationsExtensions.cs new file mode 100644 index 000000000..0575d784c --- /dev/null +++ b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Generated/VirtualMachinesOperationsExtensions.cs @@ -0,0 +1,922 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.Compute +{ + using System.Threading.Tasks; + using Microsoft.Rest.Azure; + using Models; + + /// + /// Extension methods for VirtualMachinesOperations. + /// + public static partial class VirtualMachinesOperationsExtensions + { + /// + /// Captures the VM by copying virtual hard disks of the VM and outputs a + /// template that can be used to create similar VMs. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual machine. + /// + /// + /// Parameters supplied to the Capture Virtual Machine operation. + /// + public static VirtualMachineCaptureResultInner Capture(this IVirtualMachinesOperations operations, string resourceGroupName, string vmName, VirtualMachineCaptureParametersInner parameters) + { + return System.Threading.Tasks.Task.Factory.StartNew(s => ((IVirtualMachinesOperations)s).CaptureAsync(resourceGroupName, vmName, parameters), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// Captures the VM by copying virtual hard disks of the VM and outputs a + /// template that can be used to create similar VMs. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual machine. + /// + /// + /// Parameters supplied to the Capture Virtual Machine operation. + /// + /// + /// The cancellation token. + /// + public static async System.Threading.Tasks.Task CaptureAsync(this IVirtualMachinesOperations operations, string resourceGroupName, string vmName, VirtualMachineCaptureParametersInner parameters, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + using (var _result = await operations.CaptureWithHttpMessagesAsync(resourceGroupName, vmName, parameters, null, cancellationToken).ConfigureAwait(false)) + { + return _result.Body; + } + } + + /// + /// Captures the VM by copying virtual hard disks of the VM and outputs a + /// template that can be used to create similar VMs. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual machine. + /// + /// + /// Parameters supplied to the Capture Virtual Machine operation. + /// + public static VirtualMachineCaptureResultInner BeginCapture(this IVirtualMachinesOperations operations, string resourceGroupName, string vmName, VirtualMachineCaptureParametersInner parameters) + { + return System.Threading.Tasks.Task.Factory.StartNew(s => ((IVirtualMachinesOperations)s).BeginCaptureAsync(resourceGroupName, vmName, parameters), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// Captures the VM by copying virtual hard disks of the VM and outputs a + /// template that can be used to create similar VMs. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual machine. + /// + /// + /// Parameters supplied to the Capture Virtual Machine operation. + /// + /// + /// The cancellation token. + /// + public static async System.Threading.Tasks.Task BeginCaptureAsync(this IVirtualMachinesOperations operations, string resourceGroupName, string vmName, VirtualMachineCaptureParametersInner parameters, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + using (var _result = await operations.BeginCaptureWithHttpMessagesAsync(resourceGroupName, vmName, parameters, null, cancellationToken).ConfigureAwait(false)) + { + return _result.Body; + } + } + + /// + /// The operation to create or update a virtual machine. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual machine. + /// + /// + /// Parameters supplied to the Create Virtual Machine operation. + /// + public static VirtualMachineInner CreateOrUpdate(this IVirtualMachinesOperations operations, string resourceGroupName, string vmName, VirtualMachineInner parameters) + { + return System.Threading.Tasks.Task.Factory.StartNew(s => ((IVirtualMachinesOperations)s).CreateOrUpdateAsync(resourceGroupName, vmName, parameters), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// The operation to create or update a virtual machine. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual machine. + /// + /// + /// Parameters supplied to the Create Virtual Machine operation. + /// + /// + /// The cancellation token. + /// + public static async System.Threading.Tasks.Task CreateOrUpdateAsync(this IVirtualMachinesOperations operations, string resourceGroupName, string vmName, VirtualMachineInner parameters, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + using (var _result = await operations.CreateOrUpdateWithHttpMessagesAsync(resourceGroupName, vmName, parameters, null, cancellationToken).ConfigureAwait(false)) + { + return _result.Body; + } + } + + /// + /// The operation to create or update a virtual machine. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual machine. + /// + /// + /// Parameters supplied to the Create Virtual Machine operation. + /// + public static VirtualMachineInner BeginCreateOrUpdate(this IVirtualMachinesOperations operations, string resourceGroupName, string vmName, VirtualMachineInner parameters) + { + return System.Threading.Tasks.Task.Factory.StartNew(s => ((IVirtualMachinesOperations)s).BeginCreateOrUpdateAsync(resourceGroupName, vmName, parameters), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// The operation to create or update a virtual machine. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual machine. + /// + /// + /// Parameters supplied to the Create Virtual Machine operation. + /// + /// + /// The cancellation token. + /// + public static async System.Threading.Tasks.Task BeginCreateOrUpdateAsync(this IVirtualMachinesOperations operations, string resourceGroupName, string vmName, VirtualMachineInner parameters, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + using (var _result = await operations.BeginCreateOrUpdateWithHttpMessagesAsync(resourceGroupName, vmName, parameters, null, cancellationToken).ConfigureAwait(false)) + { + return _result.Body; + } + } + + /// + /// The operation to delete a virtual machine. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual machine. + /// + public static void Delete(this IVirtualMachinesOperations operations, string resourceGroupName, string vmName) + { + System.Threading.Tasks.Task.Factory.StartNew(s => ((IVirtualMachinesOperations)s).DeleteAsync(resourceGroupName, vmName), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// The operation to delete a virtual machine. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual machine. + /// + /// + /// The cancellation token. + /// + public static async System.Threading.Tasks.Task DeleteAsync(this IVirtualMachinesOperations operations, string resourceGroupName, string vmName, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + await operations.DeleteWithHttpMessagesAsync(resourceGroupName, vmName, null, cancellationToken).ConfigureAwait(false); + } + + /// + /// The operation to delete a virtual machine. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual machine. + /// + public static void BeginDelete(this IVirtualMachinesOperations operations, string resourceGroupName, string vmName) + { + System.Threading.Tasks.Task.Factory.StartNew(s => ((IVirtualMachinesOperations)s).BeginDeleteAsync(resourceGroupName, vmName), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// The operation to delete a virtual machine. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual machine. + /// + /// + /// The cancellation token. + /// + public static async System.Threading.Tasks.Task BeginDeleteAsync(this IVirtualMachinesOperations operations, string resourceGroupName, string vmName, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + await operations.BeginDeleteWithHttpMessagesAsync(resourceGroupName, vmName, null, cancellationToken).ConfigureAwait(false); + } + + /// + /// The operation to get a virtual machine. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual machine. + /// + /// + /// The expand expression to apply on the operation. Possible values include: + /// 'instanceView' + /// + public static VirtualMachineInner Get(this IVirtualMachinesOperations operations, string resourceGroupName, string vmName, InstanceViewTypes? expand = default(InstanceViewTypes?)) + { + return System.Threading.Tasks.Task.Factory.StartNew(s => ((IVirtualMachinesOperations)s).GetAsync(resourceGroupName, vmName, expand), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// The operation to get a virtual machine. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual machine. + /// + /// + /// The expand expression to apply on the operation. Possible values include: + /// 'instanceView' + /// + /// + /// The cancellation token. + /// + public static async System.Threading.Tasks.Task GetAsync(this IVirtualMachinesOperations operations, string resourceGroupName, string vmName, InstanceViewTypes? expand = default(InstanceViewTypes?), System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + using (var _result = await operations.GetWithHttpMessagesAsync(resourceGroupName, vmName, expand, null, cancellationToken).ConfigureAwait(false)) + { + return _result.Body; + } + } + + /// + /// Shuts down the Virtual Machine and releases the compute resources. You are + /// not billed for the compute resources that this Virtual Machine uses. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual machine. + /// + public static void Deallocate(this IVirtualMachinesOperations operations, string resourceGroupName, string vmName) + { + System.Threading.Tasks.Task.Factory.StartNew(s => ((IVirtualMachinesOperations)s).DeallocateAsync(resourceGroupName, vmName), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// Shuts down the Virtual Machine and releases the compute resources. You are + /// not billed for the compute resources that this Virtual Machine uses. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual machine. + /// + /// + /// The cancellation token. + /// + public static async System.Threading.Tasks.Task DeallocateAsync(this IVirtualMachinesOperations operations, string resourceGroupName, string vmName, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + await operations.DeallocateWithHttpMessagesAsync(resourceGroupName, vmName, null, cancellationToken).ConfigureAwait(false); + } + + /// + /// Shuts down the Virtual Machine and releases the compute resources. You are + /// not billed for the compute resources that this Virtual Machine uses. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual machine. + /// + public static void BeginDeallocate(this IVirtualMachinesOperations operations, string resourceGroupName, string vmName) + { + System.Threading.Tasks.Task.Factory.StartNew(s => ((IVirtualMachinesOperations)s).BeginDeallocateAsync(resourceGroupName, vmName), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// Shuts down the Virtual Machine and releases the compute resources. You are + /// not billed for the compute resources that this Virtual Machine uses. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual machine. + /// + /// + /// The cancellation token. + /// + public static async System.Threading.Tasks.Task BeginDeallocateAsync(this IVirtualMachinesOperations operations, string resourceGroupName, string vmName, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + await operations.BeginDeallocateWithHttpMessagesAsync(resourceGroupName, vmName, null, cancellationToken).ConfigureAwait(false); + } + + /// + /// Sets the state of the VM as Generalized. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual machine. + /// + public static void Generalize(this IVirtualMachinesOperations operations, string resourceGroupName, string vmName) + { + System.Threading.Tasks.Task.Factory.StartNew(s => ((IVirtualMachinesOperations)s).GeneralizeAsync(resourceGroupName, vmName), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// Sets the state of the VM as Generalized. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual machine. + /// + /// + /// The cancellation token. + /// + public static async System.Threading.Tasks.Task GeneralizeAsync(this IVirtualMachinesOperations operations, string resourceGroupName, string vmName, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + await operations.GeneralizeWithHttpMessagesAsync(resourceGroupName, vmName, null, cancellationToken).ConfigureAwait(false); + } + + /// + /// The operation to list virtual machines under a resource group. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + public static Microsoft.Rest.Azure.IPage List(this IVirtualMachinesOperations operations, string resourceGroupName) + { + return System.Threading.Tasks.Task.Factory.StartNew(s => ((IVirtualMachinesOperations)s).ListAsync(resourceGroupName), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// The operation to list virtual machines under a resource group. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The cancellation token. + /// + public static async Task> ListAsync(this IVirtualMachinesOperations operations, string resourceGroupName, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + using (var _result = await operations.ListWithHttpMessagesAsync(resourceGroupName, null, cancellationToken).ConfigureAwait(false)) + { + return _result.Body; + } + } + + /// + /// Gets the list of Virtual Machines in the subscription. Use nextLink + /// property in the response to get the next page of Virtual Machines. Do + /// this till nextLink is not null to fetch all the Virtual Machines. + /// + /// + /// The operations group for this extension method. + /// + public static Microsoft.Rest.Azure.IPage ListAll(this IVirtualMachinesOperations operations) + { + return System.Threading.Tasks.Task.Factory.StartNew(s => ((IVirtualMachinesOperations)s).ListAllAsync(), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// Gets the list of Virtual Machines in the subscription. Use nextLink + /// property in the response to get the next page of Virtual Machines. Do + /// this till nextLink is not null to fetch all the Virtual Machines. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The cancellation token. + /// + public static async Task> ListAllAsync(this IVirtualMachinesOperations operations, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + using (var _result = await operations.ListAllWithHttpMessagesAsync(null, cancellationToken).ConfigureAwait(false)) + { + return _result.Body; + } + } + + /// + /// Lists all available virtual machine sizes it can be resized to for a + /// virtual machine. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual machine. + /// + public static System.Collections.Generic.IEnumerable ListAvailableSizes(this IVirtualMachinesOperations operations, string resourceGroupName, string vmName) + { + return System.Threading.Tasks.Task.Factory.StartNew(s => ((IVirtualMachinesOperations)s).ListAvailableSizesAsync(resourceGroupName, vmName), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// Lists all available virtual machine sizes it can be resized to for a + /// virtual machine. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual machine. + /// + /// + /// The cancellation token. + /// + public static async Task> ListAvailableSizesAsync(this IVirtualMachinesOperations operations, string resourceGroupName, string vmName, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + using (var _result = await operations.ListAvailableSizesWithHttpMessagesAsync(resourceGroupName, vmName, null, cancellationToken).ConfigureAwait(false)) + { + return _result.Body; + } + } + + /// + /// The operation to power off (stop) a virtual machine. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual machine. + /// + public static void PowerOff(this IVirtualMachinesOperations operations, string resourceGroupName, string vmName) + { + System.Threading.Tasks.Task.Factory.StartNew(s => ((IVirtualMachinesOperations)s).PowerOffAsync(resourceGroupName, vmName), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// The operation to power off (stop) a virtual machine. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual machine. + /// + /// + /// The cancellation token. + /// + public static async System.Threading.Tasks.Task PowerOffAsync(this IVirtualMachinesOperations operations, string resourceGroupName, string vmName, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + await operations.PowerOffWithHttpMessagesAsync(resourceGroupName, vmName, null, cancellationToken).ConfigureAwait(false); + } + + /// + /// The operation to power off (stop) a virtual machine. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual machine. + /// + public static void BeginPowerOff(this IVirtualMachinesOperations operations, string resourceGroupName, string vmName) + { + System.Threading.Tasks.Task.Factory.StartNew(s => ((IVirtualMachinesOperations)s).BeginPowerOffAsync(resourceGroupName, vmName), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// The operation to power off (stop) a virtual machine. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual machine. + /// + /// + /// The cancellation token. + /// + public static async System.Threading.Tasks.Task BeginPowerOffAsync(this IVirtualMachinesOperations operations, string resourceGroupName, string vmName, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + await operations.BeginPowerOffWithHttpMessagesAsync(resourceGroupName, vmName, null, cancellationToken).ConfigureAwait(false); + } + + /// + /// The operation to restart a virtual machine. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual machine. + /// + public static void Restart(this IVirtualMachinesOperations operations, string resourceGroupName, string vmName) + { + System.Threading.Tasks.Task.Factory.StartNew(s => ((IVirtualMachinesOperations)s).RestartAsync(resourceGroupName, vmName), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// The operation to restart a virtual machine. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual machine. + /// + /// + /// The cancellation token. + /// + public static async System.Threading.Tasks.Task RestartAsync(this IVirtualMachinesOperations operations, string resourceGroupName, string vmName, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + await operations.RestartWithHttpMessagesAsync(resourceGroupName, vmName, null, cancellationToken).ConfigureAwait(false); + } + + /// + /// The operation to restart a virtual machine. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual machine. + /// + public static void BeginRestart(this IVirtualMachinesOperations operations, string resourceGroupName, string vmName) + { + System.Threading.Tasks.Task.Factory.StartNew(s => ((IVirtualMachinesOperations)s).BeginRestartAsync(resourceGroupName, vmName), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// The operation to restart a virtual machine. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual machine. + /// + /// + /// The cancellation token. + /// + public static async System.Threading.Tasks.Task BeginRestartAsync(this IVirtualMachinesOperations operations, string resourceGroupName, string vmName, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + await operations.BeginRestartWithHttpMessagesAsync(resourceGroupName, vmName, null, cancellationToken).ConfigureAwait(false); + } + + /// + /// The operation to start a virtual machine. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual machine. + /// + public static void Start(this IVirtualMachinesOperations operations, string resourceGroupName, string vmName) + { + System.Threading.Tasks.Task.Factory.StartNew(s => ((IVirtualMachinesOperations)s).StartAsync(resourceGroupName, vmName), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// The operation to start a virtual machine. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual machine. + /// + /// + /// The cancellation token. + /// + public static async System.Threading.Tasks.Task StartAsync(this IVirtualMachinesOperations operations, string resourceGroupName, string vmName, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + await operations.StartWithHttpMessagesAsync(resourceGroupName, vmName, null, cancellationToken).ConfigureAwait(false); + } + + /// + /// The operation to start a virtual machine. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual machine. + /// + public static void BeginStart(this IVirtualMachinesOperations operations, string resourceGroupName, string vmName) + { + System.Threading.Tasks.Task.Factory.StartNew(s => ((IVirtualMachinesOperations)s).BeginStartAsync(resourceGroupName, vmName), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// The operation to start a virtual machine. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual machine. + /// + /// + /// The cancellation token. + /// + public static async System.Threading.Tasks.Task BeginStartAsync(this IVirtualMachinesOperations operations, string resourceGroupName, string vmName, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + await operations.BeginStartWithHttpMessagesAsync(resourceGroupName, vmName, null, cancellationToken).ConfigureAwait(false); + } + + /// + /// The operation to redeploy a virtual machine. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual machine. + /// + public static void Redeploy(this IVirtualMachinesOperations operations, string resourceGroupName, string vmName) + { + System.Threading.Tasks.Task.Factory.StartNew(s => ((IVirtualMachinesOperations)s).RedeployAsync(resourceGroupName, vmName), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// The operation to redeploy a virtual machine. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual machine. + /// + /// + /// The cancellation token. + /// + public static async System.Threading.Tasks.Task RedeployAsync(this IVirtualMachinesOperations operations, string resourceGroupName, string vmName, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + await operations.RedeployWithHttpMessagesAsync(resourceGroupName, vmName, null, cancellationToken).ConfigureAwait(false); + } + + /// + /// The operation to redeploy a virtual machine. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual machine. + /// + public static void BeginRedeploy(this IVirtualMachinesOperations operations, string resourceGroupName, string vmName) + { + System.Threading.Tasks.Task.Factory.StartNew(s => ((IVirtualMachinesOperations)s).BeginRedeployAsync(resourceGroupName, vmName), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// The operation to redeploy a virtual machine. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual machine. + /// + /// + /// The cancellation token. + /// + public static async System.Threading.Tasks.Task BeginRedeployAsync(this IVirtualMachinesOperations operations, string resourceGroupName, string vmName, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + await operations.BeginRedeployWithHttpMessagesAsync(resourceGroupName, vmName, null, cancellationToken).ConfigureAwait(false); + } + + /// + /// The operation to list virtual machines under a resource group. + /// + /// + /// 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 IVirtualMachinesOperations operations, string nextPageLink) + { + return System.Threading.Tasks.Task.Factory.StartNew(s => ((IVirtualMachinesOperations)s).ListNextAsync(nextPageLink), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// The operation to list virtual machines under a resource group. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The NextLink from the previous successful call to List operation. + /// + /// + /// The cancellation token. + /// + public static async Task> ListNextAsync(this IVirtualMachinesOperations 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; + } + } + + /// + /// Gets the list of Virtual Machines in the subscription. Use nextLink + /// property in the response to get the next page of Virtual Machines. Do + /// this till nextLink is not null to fetch all the Virtual Machines. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The NextLink from the previous successful call to List operation. + /// + public static Microsoft.Rest.Azure.IPage ListAllNext(this IVirtualMachinesOperations operations, string nextPageLink) + { + return System.Threading.Tasks.Task.Factory.StartNew(s => ((IVirtualMachinesOperations)s).ListAllNextAsync(nextPageLink), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// Gets the list of Virtual Machines in the subscription. Use nextLink + /// property in the response to get the next page of Virtual Machines. Do + /// this till nextLink is not null to fetch all the Virtual Machines. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The NextLink from the previous successful call to List operation. + /// + /// + /// The cancellation token. + /// + public static async Task> ListAllNextAsync(this IVirtualMachinesOperations operations, string nextPageLink, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + using (var _result = await operations.ListAllNextWithHttpMessagesAsync(nextPageLink, null, cancellationToken).ConfigureAwait(false)) + { + return _result.Body; + } + } + + } +} diff --git a/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/KnownLinuxVirtualMachineImage.cs b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/KnownLinuxVirtualMachineImage.cs new file mode 100644 index 000000000..a0f34c3d9 --- /dev/null +++ b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/KnownLinuxVirtualMachineImage.cs @@ -0,0 +1,20 @@ +using Microsoft.Azure.Management.V2.Resource.Core; + +namespace Microsoft.Azure.Management.V2.Compute +{ + public enum KnownLinuxVirtualMachineImage + { + [EnumName("Canonical UbuntuServer 14.04.4-LTS")] + UBUNTU_SERVER_14_04_LTS, + [EnumName("Canonical UbuntuServer 16.04.0-LTS")] + UBUNTU_SERVER_16_04_LTS, + [EnumName("credativ Debian 8")] + DEBIAN_8, + [EnumName("OpenLogic CentOS 7.2")] + CENTOS_7_2, + [EnumName("SUSE openSUSE-Leap 42.1")] + OPENSUSE_LEAP_42_1, + [EnumName("SUSE SLES 12-SP1")] + SLES_12_SP1 + } +} diff --git a/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/KnownWindowsVirtualMachineImage.cs b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/KnownWindowsVirtualMachineImage.cs new file mode 100644 index 000000000..d1b85a28f --- /dev/null +++ b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/KnownWindowsVirtualMachineImage.cs @@ -0,0 +1,18 @@ +using Microsoft.Azure.Management.V2.Resource.Core; + +namespace Microsoft.Azure.Management.V2.Compute +{ + public enum KnownWindowsVirtualMachineImage + { + [EnumName("MicrosoftWindowsServer WindowsServer 2008-R2-SP1")] + WINDOWS_SERVER_2008_R2_SP1, + [EnumName("MicrosoftWindowsServer WindowsServer 2012-Datacenter")] + WINDOWS_SERVER_2012_DATACENTER, + [EnumName("MicrosoftWindowsServer WindowsServer 2012-R2-Datacenter")] + WINDOWS_SERVER_2012_R2_DATACENTER, + [EnumName("MicrosoftWindowsServer WindowsServer 2016-Technical-Preview-with-Containers")] + WINDOWS_SERVER_2016_TECHNICAL_PREVIEW_WITH_CONTAINERS, + [EnumName("MicrosoftWindowsServer WindowsServer Windows-Server-Technical-Preview")] + WINDOWS_SERVER_TECHNICAL_PREVIEW + } +} diff --git a/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Microsoft.Azure.Management.V2.Compute.xproj b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Microsoft.Azure.Management.V2.Compute.xproj new file mode 100644 index 000000000..b8caae1a2 --- /dev/null +++ b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/Microsoft.Azure.Management.V2.Compute.xproj @@ -0,0 +1,18 @@ + + + + 14.0 + $(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion) + + + + cbe97730-45f5-448e-88e9-55df94d65b87 + Microsoft.Azure.Management.V2.Compute + .\obj + .\bin\ + + + 2.0 + + + \ No newline at end of file diff --git a/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/PowerState.cs b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/PowerState.cs new file mode 100644 index 000000000..861dbcc81 --- /dev/null +++ b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/PowerState.cs @@ -0,0 +1,16 @@ +using Microsoft.Azure.Management.V2.Resource.Core; + +namespace Microsoft.Azure.Management.V2.Compute +{ + public enum PowerState + { + [EnumName("PowerState/running")] + RUNNING, + [EnumName("PowerState/deallocating")] + DEALLOCATING, + [EnumName("PowerState/deallocated")] + DEALLOCATED, + [EnumName("PowerState/starting")] + STARTING + } +} diff --git a/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/VirtualMachineImageEnumExtensions.cs b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/VirtualMachineImageEnumExtensions.cs new file mode 100644 index 000000000..6ab2cca74 --- /dev/null +++ b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/VirtualMachineImageEnumExtensions.cs @@ -0,0 +1,38 @@ +using Microsoft.Azure.Management.Compute.Models; +using Microsoft.Azure.Management.V2.Resource.Core; +using System; +using System.Linq; + +namespace Microsoft.Azure.Management.V2.Compute +{ + public static class VirtualMachineImageEnumExtensions + { + public static ImageReference ImageReference(this KnownLinuxVirtualMachineImage image) + { + string referenceString = EnumNameAttribute.GetName(image); + return GetImageReference(referenceString, image.ToString()); + } + + public static ImageReference ImageReference(this KnownWindowsVirtualMachineImage image) + { + string referenceString = EnumNameAttribute.GetName(image); + return GetImageReference(referenceString, image.ToString()); + } + + private static ImageReference GetImageReference(string referenceString, string enumAsString) + { + var parts = referenceString.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries); + if (parts.Count() != 3) + { + throw new ArgumentException("The EnumNameAttribute for " + enumAsString + " is not in correct format"); + } + return new ImageReference + { + Publisher = parts[0], + Offer = parts[1], + Sku = parts[2], + Version = "latest" + }; + } + } +} diff --git a/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/VirtualMachineImageImpl.cs b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/VirtualMachineImageImpl.cs new file mode 100644 index 000000000..d8ed0e341 --- /dev/null +++ b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/VirtualMachineImageImpl.cs @@ -0,0 +1,89 @@ +using Microsoft.Azure.Management.Compute.Models; +using Microsoft.Azure.Management.V2.Resource.Core; +using System.Collections.Generic; + +namespace Microsoft.Azure.Management.V2.Compute +{ + public partial class VirtualMachineImageImpl : IndexableWrapper, IVirtualMachineImage + { + internal VirtualMachineImageImpl(Region location, string publisher, string offer, string sku, string version, VirtualMachineImageInner inner) : base(inner.Name, inner) + { + Location = location; + ImageReference = new ImageReference + { + Publisher = publisher, + Offer = offer, + Sku = sku, + Version = version + }; + } + + public IList DataDiskImages + { + get + { + return Inner.DataDiskImages; + } + } + + public ImageReference ImageReference + { + get; + private set; + } + + public Region? Location + { + get; + private set; + } + + public string Offer + { + get + { + return ImageReference.Offer; + } + } + + public OSDiskImage OsDiskImage + { + get + { + return Inner.OsDiskImage; + } + } + + public PurchasePlan Plan + { + get + { + return Inner.Plan; + } + } + + public string PublisherName + { + get + { + return ImageReference.Publisher; + } + } + + public string Sku + { + get + { + return ImageReference.Sku; + } + } + + public string Version + { + get + { + return ImageReference.Version; + } + } + } +} diff --git a/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/VirtualMachineImagesImpl.cs b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/VirtualMachineImagesImpl.cs new file mode 100644 index 000000000..4fe5fa65d --- /dev/null +++ b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/VirtualMachineImagesImpl.cs @@ -0,0 +1,50 @@ +using Microsoft.Azure.Management.Compute; +using Microsoft.Azure.Management.V2.Resource.Core; + +namespace Microsoft.Azure.Management.V2.Compute +{ + public partial class VirtualMachineImagesImpl : IVirtualMachineImages + { + private IVirtualMachinePublishers publishers; + + internal VirtualMachineImagesImpl(IVirtualMachineImagesOperations client) + { + publishers = new VirtualMachinePublishersImpl(client); + } + + public PagedList ListByRegion(Region region) + { + return ListByRegion(EnumNameAttribute.GetName(region)); + } + + public PagedList ListByRegion(string regionName) + { + PagedList publishers = Publishers().ListByRegion(regionName); + + PagedList offers = new ChildListFlattener(publishers, + (IVirtualMachinePublisher publisher) => + { + return publisher.Offers().List(); + }).Flatten(); + + PagedList skus = new ChildListFlattener(offers, + (IVirtualMachineOffer offer) => + { + return offer.Skus().List(); + }).Flatten(); + + PagedList images = new ChildListFlattener(skus, + (IVirtualMachineSku sku) => + { + return sku.Images().List(); + }).Flatten(); + + return images; + } + + public IVirtualMachinePublishers Publishers() + { + return publishers; + } + } +} diff --git a/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/VirtualMachineImagesInSkuImpl.cs b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/VirtualMachineImagesInSkuImpl.cs new file mode 100644 index 000000000..23a8bef57 --- /dev/null +++ b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/VirtualMachineImagesInSkuImpl.cs @@ -0,0 +1,35 @@ +using Microsoft.Azure.Management.Compute; +using Microsoft.Azure.Management.V2.Resource.Core; +using System.Collections.Generic; + +namespace Microsoft.Azure.Management.V2.Compute +{ + public partial class VirtualMachineImagesInSkuImpl : IVirtualMachineImagesInSku + { + private IVirtualMachineSku sku; + private IVirtualMachineImagesOperations innerCollection; + + internal VirtualMachineImagesInSkuImpl(IVirtualMachineSku sku, IVirtualMachineImagesOperations innerCollection) + { + this.sku = sku; + this.innerCollection = innerCollection; + } + + public PagedList List() + { + List firstPage = new List(); + var innerImages = innerCollection.List(EnumNameAttribute.GetName(sku.Region), sku.Publisher().Name, sku.Offer().Name, sku.Name); + foreach(var innerImage in innerImages) + { + var version = innerImage.Name; + firstPage.Add(new VirtualMachineImageImpl(sku.Region.Value, + sku.Publisher().Name, + sku.Offer().Name, + sku.Name, + version, + innerCollection.Get(EnumNameAttribute.GetName(sku.Region), sku.Publisher().Name, sku.Offer().Name, sku.Name, version))); + } + return new PagedList(firstPage); + } + } +} diff --git a/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/VirtualMachineImpl.cs b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/VirtualMachineImpl.cs new file mode 100644 index 000000000..00457f8d5 --- /dev/null +++ b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/VirtualMachineImpl.cs @@ -0,0 +1,1236 @@ +/** +* Copyright (c) Microsoft Corporation. All rights reserved. +* Licensed under the MIT License. See License.txt in the project root for +* license information. +*/ + +namespace Microsoft.Azure.Management.V2.Compute +{ + + using Microsoft.Azure.Management.Compute.Models; + using Microsoft.Azure.Management.V2.Network; + using Microsoft.Azure.Management.V2.Network.NetworkInterface.Definition; + using Microsoft.Azure.Management.V2.Compute.VirtualMachine.Definition; + using System.Threading.Tasks; + using Microsoft.Azure.Management.V2.Resource.Core; + using System.Collections.Generic; + using Microsoft.Azure.Management.V2.Resource.Core.ResourceActions; + using Microsoft.Rest; + using Microsoft.Azure.Management.Storage.Models; + using Microsoft.Azure.Management.V2.Storage; + using Microsoft.Azure.Management.V2.Resource; + using Microsoft.Azure.Management.V2.Compute.VirtualMachine.Update; + using System.Threading; + using Microsoft.Azure.Management.Network.Models; + using Management.Compute; + using System; + using System.Text.RegularExpressions; + + /// + /// The implementation for {@link VirtualMachine} and its create and update interfaces. + /// + public partial class VirtualMachineImpl : + GroupableResource, + IVirtualMachine, + VirtualMachine.Definition.IDefinition, + IUpdate + { + private IVirtualMachinesOperations client; + private IStorageManager storageManager; + private INetworkManager networkManager; + private string vmName; + private ResourceNamer namer; + private string creatableStorageAccountKey; + private string creatableAvailabilitySetKey; + private string creatablePrimaryNetworkInterfaceKey; + private IList creatableSecondaryNetworkInterfaceKeys; + private IStorageAccount existingStorageAccountToAssociate; + private IAvailabilitySet existingAvailabilitySetToAssociate; + private INetworkInterface existingPrimaryNetworkInterfaceToAssociate; + private IList existingSecondaryNetworkInterfacesToAssociate; + private INetworkInterface primaryNetworkInterface; + private IPublicIpAddress primaryPublicIpAddress; + private VirtualMachineInstanceView virtualMachineInstanceView; + private bool isMarketplaceLinuxImage; + private IList dataDisks; + private IWithPrimaryPrivateIp nicDefinitionWithPrivateIp; + private IWithPrimaryNetworkSubnet nicDefinitionWithSubnet; + private Network.NetworkInterface.Definition.IWithCreate nicDefinitionWithCreate; + + //private PagedListConverter virtualMachineSizeConverter; + + internal VirtualMachineImpl(string name, + VirtualMachineInner innerModel, + IVirtualMachinesOperations client, + IComputeManager computeManager, + IStorageManager storageManager, + INetworkManager networkManager) : + base(name, innerModel, computeManager) + { + + this.client = client; + this.storageManager = storageManager; + this.networkManager = networkManager; + this.vmName = name; + this.isMarketplaceLinuxImage = false; + this.namer = new ResourceNamer(this.vmName); + this.creatableSecondaryNetworkInterfaceKeys = new List(); + this.existingSecondaryNetworkInterfacesToAssociate = new List(); + // this.virtualMachineSizeConverter = new PagedListConverter() { + // @Override + // public VirtualMachineSize typeConvert(VirtualMachineSizeInner inner) { + // return new VirtualMachineSizeImpl(inner); + // } + // }; + InitializeDataDisks(); + // } + } + + public async override Task Refresh() + { + var response = await client.GetWithHttpMessagesAsync(this.ResourceGroupName, + this.Name); + SetInner(response.Body); + return this; + } + + public void Deallocate() + { + this.client.Deallocate(this.ResourceGroupName, this.Name); + } + + public void Generalize() + { + this.client.Generalize(this.ResourceGroupName, this.Name); + } + + public void PowerOff() + { + this.client.PowerOff(this.ResourceGroupName, this.Name); + } + + public void Restart() + { + this.client.Restart(this.ResourceGroupName, this.Name); + } + + public void Start() + { + this.client.Start(this.ResourceGroupName, this.Name); + } + + public void Redeploy() + { + this.client.Redeploy(this.ResourceGroupName, this.Name); + } + + public PagedList AvailableSizes() + { + // PageImpl page = new PageImpl<>(); + // page.setItems(this.client.listAvailableSizes(this.ResourceGroupName, this.Name).getBody()); + // page.setNextPageLink(null); + // return this.virtualMachineSizeConverter.convert(new PagedList(page) { + // @Override + // public Page nextPage(String nextPageLink) throws RestException, IOException { + // return null; + // } + // }); + + return null; + } + + public string Capture(string containerName, bool overwriteVhd) + { + VirtualMachineCaptureParametersInner parameters = new VirtualMachineCaptureParametersInner(); + parameters.DestinationContainerName = containerName; + parameters.OverwriteVhds = overwriteVhd; + VirtualMachineCaptureResultInner captureResult = this.client.Capture(this.ResourceGroupName, this.Name, parameters); + return captureResult.ToString(); + } + + public VirtualMachineInstanceView RefreshInstanceView() + { + this.virtualMachineInstanceView = this.client.Get(this.ResourceGroupName, + this.Name, + InstanceViewTypes.InstanceView).InstanceView; + return this.virtualMachineInstanceView; + } + + /// + /// . + /// Setters + /// + public VirtualMachineImpl WithNewPrimaryNetwork(ICreatable creatable) + { + this.nicDefinitionWithPrivateIp = this.PreparePrimaryNetworkInterface(this.namer.RandomName("nic", 20)) + .WithNewPrimaryNetwork(creatable); + return this; + } + + public VirtualMachineImpl WithNewPrimaryNetwork(string addressSpace) + { + this.nicDefinitionWithPrivateIp = this.PreparePrimaryNetworkInterface(this.namer.RandomName("nic", 20)) + .WithNewPrimaryNetwork(addressSpace); + return this; + } + + public VirtualMachineImpl WithExistingPrimaryNetwork(INetwork network) + { + this.nicDefinitionWithSubnet = this.PreparePrimaryNetworkInterface(this.namer.RandomName("nic", 20)) + .WithExistingPrimaryNetwork(network); + return this; + } + + public VirtualMachineImpl WithSubnet(string name) + { + this.nicDefinitionWithPrivateIp = this.nicDefinitionWithSubnet + .WithSubnet(name); + return this; + } + + public VirtualMachineImpl WithPrimaryPrivateIpAddressDynamic() + { + this.nicDefinitionWithCreate = this.nicDefinitionWithPrivateIp + .WithPrimaryPrivateIpAddressDynamic(); + return this; + } + + public VirtualMachineImpl WithPrimaryPrivateIpAddressStatic(string staticPrivateIpAddress) + { + this.nicDefinitionWithCreate = this.nicDefinitionWithPrivateIp + .WithPrimaryPrivateIpAddressStatic(staticPrivateIpAddress); + return this; + } + + public VirtualMachineImpl WithNewPrimaryPublicIpAddress(ICreatable creatable) + { + var nicCreatable = this.nicDefinitionWithCreate + .WithNewPrimaryPublicIpAddress(creatable); + this.AddCreatableDependency(nicCreatable as IResourceCreator); + return this; + } + + public VirtualMachineImpl WithNewPrimaryPublicIpAddress(string leafDnsLabel) + { + var nicCreatable = this.nicDefinitionWithCreate + .WithNewPrimaryPublicIpAddress(leafDnsLabel); + this.creatablePrimaryNetworkInterfaceKey = nicCreatable.Key; + this.AddCreatableDependency(nicCreatable as IResourceCreator); + return this; + } + + public VirtualMachineImpl WithExistingPrimaryPublicIpAddress(IPublicIpAddress publicIpAddress) + { + var nicCreatable = this.nicDefinitionWithCreate + .WithExistingPrimaryPublicIpAddress(publicIpAddress); + this.creatablePrimaryNetworkInterfaceKey = nicCreatable.Key; + this.AddCreatableDependency(nicCreatable as IResourceCreator); + return this; + } + + public VirtualMachineImpl WithoutPrimaryPublicIpAddress() + { + var nicCreatable = this.nicDefinitionWithCreate; + this.creatablePrimaryNetworkInterfaceKey = nicCreatable.Key; + this.AddCreatableDependency(nicCreatable as IResourceCreator); + return this; + } + + public VirtualMachineImpl WithNewPrimaryNetworkInterface(ICreatable creatable) + { + this.creatablePrimaryNetworkInterfaceKey = creatable.Key; + this.AddCreatableDependency(creatable as IResourceCreator); + return this; + } + + public VirtualMachineImpl WithNewPrimaryNetworkInterface(string name, string publicDnsNameLabel) + { + var definitionCreatable = PrepareNetworkInterface(name) + .WithNewPrimaryPublicIpAddress(publicDnsNameLabel); + return WithNewPrimaryNetworkInterface(definitionCreatable); + } + + public VirtualMachineImpl WithExistingPrimaryNetworkInterface(INetworkInterface networkInterface) + { + this.existingPrimaryNetworkInterfaceToAssociate = networkInterface; + return this; + } + + public VirtualMachineImpl WithStoredWindowsImage(string imageUrl) + { + VirtualHardDisk userImageVhd = new VirtualHardDisk(); + userImageVhd.Uri = imageUrl; + this.Inner.StorageProfile.OsDisk.CreateOption = DiskCreateOptionTypes.FromImage; + this.Inner.StorageProfile.OsDisk.Image = userImageVhd; + // For platform image osType will be null, azure will pick it from the image metadata. + this.Inner.StorageProfile.OsDisk.OsType = OperatingSystemTypes.Windows; + this.Inner.OsProfile.WindowsConfiguration = new WindowsConfiguration(); + // sets defaults for "Stored(User)Image" or "VM(Platform)Image" + this.Inner.OsProfile.WindowsConfiguration.ProvisionVMAgent = true; + this.Inner.OsProfile.WindowsConfiguration.EnableAutomaticUpdates = true; + return this; + } + + public VirtualMachineImpl WithStoredLinuxImage(string imageUrl) + { + VirtualHardDisk userImageVhd = new VirtualHardDisk(); + userImageVhd.Uri = imageUrl; + this.Inner.StorageProfile.OsDisk.CreateOption = DiskCreateOptionTypes.FromImage; + this.Inner.StorageProfile.OsDisk.Image = userImageVhd; + // For platform image osType will be null, azure will pick it from the image metadata. + this.Inner.StorageProfile.OsDisk.OsType = OperatingSystemTypes.Linux; + this.Inner.OsProfile.LinuxConfiguration = new LinuxConfiguration(); + return this; + } + + public VirtualMachineImpl WithPopularWindowsImage(KnownWindowsVirtualMachineImage knownImage) + { + return WithSpecificWindowsImageVersion(knownImage.ImageReference()); + } + + public VirtualMachineImpl WithPopularLinuxImage(KnownLinuxVirtualMachineImage knownImage) + { + return WithSpecificLinuxImageVersion(knownImage.ImageReference()); + } + + public VirtualMachineImpl WithSpecificWindowsImageVersion(ImageReference imageReference) + { + this.Inner.StorageProfile.OsDisk.CreateOption = DiskCreateOptionTypes.FromImage; + this.Inner.StorageProfile.ImageReference = imageReference; + this.Inner.OsProfile.WindowsConfiguration = new WindowsConfiguration(); + // sets defaults for "Stored(User)Image" or "VM(Platform)Image" + this.Inner.OsProfile.WindowsConfiguration.ProvisionVMAgent = true; + this.Inner.OsProfile.WindowsConfiguration.EnableAutomaticUpdates = true; + return this; + } + + public VirtualMachineImpl WithSpecificLinuxImageVersion(ImageReference imageReference) + { + this.Inner.StorageProfile.OsDisk.CreateOption = DiskCreateOptionTypes.FromImage; + this.Inner.StorageProfile.ImageReference = imageReference; + this.Inner.OsProfile.LinuxConfiguration = new LinuxConfiguration(); + this.isMarketplaceLinuxImage = true; + return this; + } + + public VirtualMachineImpl WithLatestWindowsImage(string publisher, string offer, string sku) + { + ImageReference imageReference = new ImageReference(); + imageReference.Publisher = publisher; + imageReference.Offer = offer; + imageReference.Sku = sku; + imageReference.Version = "latest"; + return WithSpecificWindowsImageVersion(imageReference); + } + + public VirtualMachineImpl WithLatestLinuxImage(string publisher, string offer, string sku) + { + ImageReference imageReference = new ImageReference(); + imageReference.Publisher = publisher; + imageReference.Offer = offer; + imageReference.Sku = sku; + imageReference.Version = "latest"; + return WithSpecificLinuxImageVersion(imageReference); + } + + public VirtualMachineImpl WithOsDisk(string osDiskUrl, OperatingSystemTypes osType) + { + VirtualHardDisk osDisk = new VirtualHardDisk(); + osDisk.Uri = osDiskUrl; + this.Inner.StorageProfile.OsDisk.CreateOption = DiskCreateOptionTypes.Attach; + this.Inner.StorageProfile.OsDisk.Vhd = osDisk; + this.Inner.StorageProfile.OsDisk.OsType = osType; + return this; + } + + public VirtualMachineImpl WithRootUserName(string rootUserName) + { + this.Inner.OsProfile.AdminUsername = rootUserName; + return this; + } + + public VirtualMachineImpl WithAdminUserName(string adminUserName) + { + this.Inner.OsProfile.AdminUsername = adminUserName; + return this; + } + + public VirtualMachineImpl WithSsh(string publicKeyData) + { + OSProfile osProfile = this.Inner.OsProfile; + if (osProfile.LinuxConfiguration.Ssh == null) + { + SshConfiguration sshConfiguration = new SshConfiguration(); + sshConfiguration.PublicKeys = new List(); + osProfile.LinuxConfiguration.Ssh = sshConfiguration; + } + + SshPublicKey sshPublicKey = new SshPublicKey(); + sshPublicKey.KeyData = publicKeyData; + sshPublicKey.Path = "/home/" + osProfile.AdminUsername + "/.ssh/authorized_keys"; + osProfile.LinuxConfiguration.Ssh.PublicKeys.Add(sshPublicKey); + return this; + } + + public VirtualMachineImpl DisableVmAgent() + { + this.Inner.OsProfile.WindowsConfiguration.ProvisionVMAgent = false; + return this; + } + + public VirtualMachineImpl DisableAutoUpdate() + { + this.Inner.OsProfile.WindowsConfiguration.EnableAutomaticUpdates = false; + return this; + } + + public VirtualMachineImpl WithTimeZone(string timeZone) + { + this.Inner.OsProfile.WindowsConfiguration.TimeZone = timeZone; + return this; + } + + public VirtualMachineImpl WithWinRm(WinRMListener listener) + { + if (this.Inner.OsProfile.WindowsConfiguration.WinRM == null) + { + WinRMConfiguration winRMConfiguration = new WinRMConfiguration(); + this.Inner.OsProfile.WindowsConfiguration.WinRM = winRMConfiguration; + } + + this.Inner.OsProfile + .WindowsConfiguration + .WinRM + .Listeners + .Add(listener); + return this; + } + + public VirtualMachineImpl WithPassword(string password) + { + this.Inner.OsProfile.AdminPassword = password; + return this; + } + + public VirtualMachineImpl WithSize(string sizeName) + { + this.Inner.HardwareProfile.VmSize = sizeName; + return this; + } + + public VirtualMachineImpl WithOsDiskCaching(CachingTypes cachingType) + { + this.Inner.StorageProfile.OsDisk.Caching = cachingType; + return this; + } + + public VirtualMachineImpl WithOsDiskVhdLocation(string containerName, string vhdName) + { + VirtualHardDisk osVhd = new VirtualHardDisk(); + osVhd.Uri = this.TemporaryBlobUrl(containerName, vhdName); + this.Inner.StorageProfile.OsDisk.Vhd = osVhd; + return this; + } + + public VirtualMachineImpl WithOsDiskEncryptionSettings(DiskEncryptionSettings settings) + { + this.Inner.StorageProfile.OsDisk.EncryptionSettings = settings; + return this; + } + + public VirtualMachineImpl WithOsDiskSizeInGb(int? size) + { + this.Inner.StorageProfile.OsDisk.DiskSizeGB = size; + return this; + } + + public VirtualMachineImpl WithOsDiskName(string name) + { + this.Inner.StorageProfile.OsDisk.Name = name; + return this; + } + + public DataDiskImpl DefineNewDataDisk(string name) + { + return DataDiskImpl.PrepareDataDisk(name, DiskCreateOptionTypes.Empty, this); + } + + public DataDiskImpl DefineExistingDataDisk(string name) + { + + return DataDiskImpl.PrepareDataDisk(name, DiskCreateOptionTypes.Attach, this); + } + + public VirtualMachineImpl WithNewDataDisk(int? sizeInGB) + { + return WithDataDisk(DataDiskImpl.CreateNewDataDisk(sizeInGB.HasValue ? sizeInGB.Value : 0, this)); + } + + public VirtualMachineImpl WithExistingDataDisk(string storageAccountName, string containerName, string vhdName) + { + return WithDataDisk(DataDiskImpl.CreateFromExistingDisk(storageAccountName, containerName, vhdName, this)); + } + + public VirtualMachineImpl WithNewStorageAccount(ICreatable creatable) + { + // This method's effect is NOT additive. + if (this.creatableStorageAccountKey == null) + { + this.creatableStorageAccountKey = creatable.Key; + this.AddCreatableDependency(creatable as IResourceCreator); + } + return this; + } + + public VirtualMachineImpl WithNewStorageAccount(string name) + { + + Storage.StorageAccount.Definition.IWithGroup definitionWithGroup = this.storageManager + .StorageAccounts + .Define(name) + .WithRegion(this.RegionName); + Storage.StorageAccount.Definition.IWithCreate definitionAfterGroup; + if (this.newGroup != null) { + definitionAfterGroup = definitionWithGroup.WithNewResourceGroup(this.newGroup); + } else { + definitionAfterGroup = definitionWithGroup.WithExistingResourceGroup(this.ResourceGroupName); + } + + return WithNewStorageAccount(definitionAfterGroup); + } + + public VirtualMachineImpl WithExistingStorageAccount(IStorageAccount storageAccount) + { + this.existingStorageAccountToAssociate = storageAccount; + return this; + } + + public VirtualMachineImpl WithNewAvailabilitySet(ICreatable creatable) + { + + // This method's effect is NOT additive. + if (this.creatableAvailabilitySetKey == null) + { + this.creatableAvailabilitySetKey = creatable.Key; + this.AddCreatableDependency(creatable as IResourceCreator); + } + return this; + } + + public VirtualMachineImpl WithNewAvailabilitySet(string name) + { + return WithNewAvailabilitySet(base.MyManager.AvailabilitySets.Define(name) + .WithRegion(this.RegionName) + .WithExistingResourceGroup(this.ResourceGroupName)); + } + + public VirtualMachineImpl WithExistingAvailabilitySet(IAvailabilitySet availabilitySet) + { + this.existingAvailabilitySetToAssociate = availabilitySet; + return this; + } + + public VirtualMachineImpl WithNewSecondaryNetworkInterface(ICreatable creatable) + { + this.creatableSecondaryNetworkInterfaceKeys.Add(creatable.Key); + this.AddCreatableDependency(creatable as IResourceCreator); + return this; + } + + public VirtualMachineImpl WithExistingSecondaryNetworkInterface(INetworkInterface networkInterface) + { + this.existingSecondaryNetworkInterfacesToAssociate.Add(networkInterface); + return this; + } + + public VirtualMachineImpl WithoutDataDisk(string name) + { + int idx = -1; + foreach (IVirtualMachineDataDisk dataDisk in this.dataDisks) + { + idx++; + if (dataDisk.Name.Equals(name, System.StringComparison.OrdinalIgnoreCase)) + { + this.dataDisks.RemoveAt(idx); + this.Inner.StorageProfile.DataDisks.RemoveAt(idx); + break; + } + } + + return this; + } + + public VirtualMachineImpl WithoutDataDisk(int lun) + { + int idx = -1; + foreach (IVirtualMachineDataDisk dataDisk in this.dataDisks) + { + idx++; + if (dataDisk.Lun == lun) + { + this.dataDisks.RemoveAt(idx); + this.Inner.StorageProfile.DataDisks.RemoveAt(idx); + break; + } + } + + return this; + } + + public DataDiskImpl UpdateDataDisk(string name) + { + foreach (IVirtualMachineDataDisk dataDisk in this.dataDisks) + { + if (dataDisk.Name.Equals(name, System.StringComparison.OrdinalIgnoreCase)) + { + return (DataDiskImpl)dataDisk; + } + } + + throw new Exception("A data disk with name '" + name + "' not found"); + } + + public VirtualMachineImpl WithoutSecondaryNetworkInterface(string name) + { + if (this.Inner.NetworkProfile != null + && this.Inner.NetworkProfile.NetworkInterfaces != null) + { + int idx = -1; + foreach (NetworkInterfaceReferenceInner nicReference in this.Inner.NetworkProfile.NetworkInterfaces) + { + idx++; + if (!nicReference.Primary == true + && name.Equals(ResourceUtils.NameFromResourceId(nicReference.Id), StringComparison.OrdinalIgnoreCase)) { + this.Inner.NetworkProfile.NetworkInterfaces.RemoveAt(idx); + break; + } + } + } + return this; + } + + /// + /// . + /// Getters + /// + public string ComputerName + { + get + { + return Inner.OsProfile.ComputerName; + } + } + public string Size + { + get + { + return Inner.HardwareProfile.VmSize; + } + } + public OperatingSystemTypes? OsType + { + get + { + return Inner.StorageProfile.OsDisk.OsType; + } + } + public string OsDiskVhdUri + { + get + { + return Inner.StorageProfile.OsDisk.Vhd.Uri; + } + } + public CachingTypes? OsDiskCachingType + { + get + { + return Inner.StorageProfile.OsDisk.Caching; + } + } + + public int? OsDiskSize + { + get + { + if (Inner.StorageProfile.OsDisk.DiskSizeGB == null) + { + // Server returns OS disk size as 0 for auto-created disks for which + // size was not explicitly set by the user. + return 0; + } + + return Inner.StorageProfile.OsDisk.DiskSizeGB; + } + } + + public IList DataDisks() + { + + return this.dataDisks; + } + + public INetworkInterface PrimaryNetworkInterface() + { + if (this.primaryNetworkInterface == null) + { + String primaryNicId = this.PrimaryNetworkInterfaceId; + this.primaryNetworkInterface = this.networkManager.NetworkInterfaces.GetById(primaryNicId); + } + + return this.primaryNetworkInterface; + } + + public IPublicIpAddress PrimaryPublicIpAddress() + { + if (this.primaryPublicIpAddress == null) + { + this.primaryPublicIpAddress = this.PrimaryNetworkInterface().PrimaryPublicIpAddress(); + } + + return this.primaryPublicIpAddress; + } + + public IList NetworkInterfaceIds + { + get + { + List nicIds = new List(); + foreach (NetworkInterfaceReferenceInner nicRef in Inner.NetworkProfile.NetworkInterfaces) + { + nicIds.Add(nicRef.Id); + } + return nicIds; + } + } + + public string PrimaryNetworkInterfaceId + { + get + { + IList nicRefs = this.Inner.NetworkProfile.NetworkInterfaces; + String primaryNicRefId = null; + + if (nicRefs.Count == 1) + { + // One NIC so assume it to be primary + primaryNicRefId = nicRefs[0].Id; + } + else if (nicRefs.Count == 0) + { + // No NICs so null + primaryNicRefId = null; + } + else + { + // Find primary interface as flagged by Azure + foreach (NetworkInterfaceReferenceInner nicRef in Inner.NetworkProfile.NetworkInterfaces) + { + if (nicRef.Primary != null && nicRef.Primary == true) + { + primaryNicRefId = nicRef.Id; + break; + } + } + + // If Azure didn't flag any NIC as primary then assume the first one + if (primaryNicRefId == null) + { + primaryNicRefId = nicRefs[0].Id; + } + } + + return primaryNicRefId; + } + } + + public string AvailabilitySetId + { + get + { + if (Inner.AvailabilitySet != null) + { + return Inner.AvailabilitySet.Id; + } + + return null; + } + } + + public string ProvisioningState + { + get + { + return Inner.ProvisioningState; + } + } + + public string LicenseType + { + get + { + return Inner.LicenseType; + } + } + public IList Resources + { + get + { + return Inner.Resources; + } + } + + public Plan Plan + { + get + { + return Inner.Plan; + } + } + + public StorageProfile StorageProfile + { + get + { + return Inner.StorageProfile; + } + } + + public OSProfile OsProfile + { + get + { + return Inner.OsProfile; + } + } + + public DiagnosticsProfile DiagnosticsProfile + { + get + { + return Inner.DiagnosticsProfile; + } + } + + public string VmId + { + get + { + return Inner.VmId; + } + } + public VirtualMachineInstanceView InstanceView + { + get + { + if (this.virtualMachineInstanceView == null) + { + this.RefreshInstanceView(); + } + + return this.virtualMachineInstanceView; + } + } + public PowerState? PowerState + { + get + { + string powerStateCode = this.GetStatusCodeFromInstanceView("PowerState"); + if (powerStateCode != null) + { + return (PowerState)Enum.Parse(typeof(Microsoft.Azure.Management.V2.Compute.PowerState), powerStateCode); + } + + return null; + } + } + public override IVirtualMachine CreateResource() + { + return this.CreateResourceAsync().Result; + } + + public override async Task CreateResourceAsync(CancellationToken cancellationToken = default(CancellationToken)) + { + if (IsInCreateMode) { + SetOSDiskAndOSProfileDefaults(); + SetHardwareProfileDefaults(); + } + + DataDiskImpl.SetDataDisksDefaults(this.dataDisks, this.vmName); + await HandleStorageSettingsAsync(); + HandleNetworkSettings(); + HandleAvailabilitySettings(); + var response = await client.CreateOrUpdateAsync(ResourceGroupName, vmName, Inner); + this.SetInner(response); + ClearCachedRelatedResources(); + InitializeDataDisks(); + return this; + } + + private VirtualMachineImpl WithDataDisk(DataDiskImpl dataDisk) + { + this.Inner + .StorageProfile + .DataDisks + .Add(dataDisk.Inner); + this.dataDisks.Add(dataDisk); + return this; + } + + private void SetOSDiskAndOSProfileDefaults() + { + + if (!IsInCreateMode) + { + return; + } + + OSDisk osDisk = this.Inner.StorageProfile.OsDisk; + if (IsOSDiskFromImage(osDisk)) + { + if (osDisk.Vhd == null) + { + // Sets the OS disk VHD for "UserImage" and "VM(Platform)Image" + WithOsDiskVhdLocation("vhds", this.vmName + "-os-disk-" + Guid.NewGuid().ToString() + ".vhd"); + } + OSProfile osProfile = this.Inner.OsProfile; + if (osDisk.OsType == OperatingSystemTypes.Linux || this.isMarketplaceLinuxImage) + { + // linux image: User or marketplace linux image + if (osProfile.LinuxConfiguration == null) + { + osProfile.LinuxConfiguration = new LinuxConfiguration(); + } + this.Inner.OsProfile.LinuxConfiguration.DisablePasswordAuthentication = osProfile.AdminPassword == null; + } + } + + if (osDisk.Caching == null) + { + WithOsDiskCaching(CachingTypes.ReadWrite); + } + + if (osDisk.Name == null) + { + this.WithOsDiskName(this.vmName + "-os-disk"); + } + + if (this.Inner.OsProfile.ComputerName == null) + { + // VM name cannot contain only numeric values and cannot exceed 15 chars + if ((new Regex(@"^\d+$")).IsMatch(vmName)) + { + this.Inner.OsProfile.ComputerName = ResourceNamer.RandomResourceName("vm", 15); + } + else if (vmName.Length <= 15) + { + this.Inner.OsProfile.ComputerName = vmName; + } + else + { + this.Inner.OsProfile.ComputerName = ResourceNamer.RandomResourceName("vm", 15); + } + } + } + + private void SetHardwareProfileDefaults() + { + if (!IsInCreateMode) + { + return; + } + + HardwareProfile hardwareProfile = this.Inner.HardwareProfile; + if (hardwareProfile.VmSize == null) + { + hardwareProfile.VmSize = VirtualMachineSizeTypes.BasicA0; + } + } + + private void HandleStorageSettings() + { + this.HandleStorageSettingsAsync().Wait(); + } + + private async Task HandleStorageSettingsAsync(CancellationToken cancellationToken = default(CancellationToken)) + { + IStorageAccount storageAccount = null; + if (this.creatableStorageAccountKey != null) + { + storageAccount = (IStorageAccount)this.CreatedResource(this.creatableStorageAccountKey); + } + else if (this.existingStorageAccountToAssociate != null) + { + storageAccount = this.existingStorageAccountToAssociate; + } + else if (this.OsDiskRequiresImplicitStorageAccountCreation == true || + this.DataDisksRequiresImplicitStorageAccountCreation == true) + { + storageAccount = await this.storageManager.StorageAccounts + .Define(this.namer.RandomName("stg", 24)) + .WithRegion(this.RegionName) + .WithExistingResourceGroup(this.ResourceGroupName) + .CreateAsync(); + } + + if (IsInCreateMode) + { + if (this.IsOSDiskFromImage(this.Inner.StorageProfile.OsDisk)) + { + string uri = this.Inner.StorageProfile.OsDisk.Vhd.Uri; + if (uri.StartsWith("{storage-base-url}")) + { + uri = uri.Remove(0, "{storage-base-url}".Length).Insert(0, + storageAccount.EndPoints.Primary.Blob); + + } + + this.Inner.StorageProfile.OsDisk.Vhd.Uri = uri; + } + + DataDiskImpl.EnsureDisksVhdUri(this.dataDisks, storageAccount, this.vmName); + } + else + { + if (storageAccount != null) + { + DataDiskImpl.EnsureDisksVhdUri(this.dataDisks, storageAccount, this.vmName); + } + else + { + DataDiskImpl.EnsureDisksVhdUri(this.dataDisks, this.vmName); + } + } + } + + private void HandleNetworkSettings() + { + if (IsInCreateMode) + { + INetworkInterface primaryNetworkInterface = null; + if (this.creatablePrimaryNetworkInterfaceKey != null) + { + primaryNetworkInterface = (INetworkInterface)this.CreatedResource(this.creatablePrimaryNetworkInterfaceKey); + } + else if (this.existingPrimaryNetworkInterfaceToAssociate != null) + { + primaryNetworkInterface = this.existingPrimaryNetworkInterfaceToAssociate; + } + + if (primaryNetworkInterface != null) + { + NetworkInterfaceReferenceInner nicReference = new NetworkInterfaceReferenceInner(); + nicReference.Primary = true; + nicReference.Id = primaryNetworkInterface.Id; + this.Inner.NetworkProfile.NetworkInterfaces.Add(nicReference); + } + } + + // sets the virtual machine secondary network interfaces + // + foreach (string creatableSecondaryNetworkInterfaceKey in this.creatableSecondaryNetworkInterfaceKeys) + { + INetworkInterface secondaryNetworkInterface = (INetworkInterface)this.CreatedResource(creatableSecondaryNetworkInterfaceKey); + NetworkInterfaceReferenceInner nicReference = new NetworkInterfaceReferenceInner(); + nicReference.Primary = false; + nicReference.Id = secondaryNetworkInterface.Id; + this.Inner.NetworkProfile.NetworkInterfaces.Add(nicReference); + } + + foreach (INetworkInterface secondaryNetworkInterface in this.existingSecondaryNetworkInterfacesToAssociate) + { + NetworkInterfaceReferenceInner nicReference = new NetworkInterfaceReferenceInner(); + nicReference.Primary = false; + nicReference.Id = secondaryNetworkInterface.Id; + this.Inner.NetworkProfile.NetworkInterfaces.Add(nicReference); + } + } + + private void HandleAvailabilitySettings() + { + if (!IsInCreateMode) + { + return; + } + + IAvailabilitySet availabilitySet = null; + if (this.creatableAvailabilitySetKey != null) + { + availabilitySet = (IAvailabilitySet)this.CreatedResource(this.creatableAvailabilitySetKey); + } + else if (this.existingAvailabilitySetToAssociate != null) + { + availabilitySet = this.existingAvailabilitySetToAssociate; + } + + if (availabilitySet != null) + { + if (this.Inner.AvailabilitySet == null) + { + this.Inner.AvailabilitySet = new Rest.Azure.SubResource(); + } + + this.Inner.AvailabilitySet.Id = availabilitySet.Id; + } + } + + private bool? OsDiskRequiresImplicitStorageAccountCreation + { + get + { + if (this.creatableStorageAccountKey != null + || this.existingStorageAccountToAssociate != null + || !this.IsInCreateMode) + { + return false; + } + + return this.IsOSDiskFromImage(this.Inner.StorageProfile.OsDisk); + } + } + + private bool DataDisksRequiresImplicitStorageAccountCreation + { + get + { + if (this.creatableStorageAccountKey != null + || this.existingStorageAccountToAssociate != null + || this.dataDisks.Count == 0) + { + return false; + } + + bool hasEmptyVhd = false; + foreach (IVirtualMachineDataDisk dataDisk in this.dataDisks) + { + if (dataDisk.CreateOption == DiskCreateOptionTypes.Empty) + { + if (dataDisk.Inner.Vhd == null) + { + hasEmptyVhd = true; + break; + } + } + } + + if (IsInCreateMode) + { + return hasEmptyVhd; + } + + if (hasEmptyVhd) + { + // In update mode, if any of the data disk has vhd uri set then use same container + // to store this disk, no need to create a storage account implicitly. + foreach (IVirtualMachineDataDisk dataDisk in this.dataDisks) + { + if (dataDisk.CreateOption == DiskCreateOptionTypes.Attach && dataDisk.Inner.Vhd != null) + { + return false; + } + } + return true; + } + + return false; + } + } + + private bool IsOSDiskAttached(OSDisk osDisk) + { + return osDisk.CreateOption == DiskCreateOptionTypes.Attach; + } + + private bool IsOSDiskFromImage(OSDisk osDisk) + { + return !this.IsOSDiskAttached(osDisk); + } + + private string TemporaryBlobUrl(string containerName, string blobName) + { + return "{storage-base-url}" + containerName + "/" + blobName; + } + + private IWithPrimaryPublicIpAddress PrepareNetworkInterface(string name) + { + Network.NetworkInterface.Definition.IWithGroup definitionWithGroup = this.networkManager.NetworkInterfaces + .Define(name) + .WithRegion(this.RegionName); + Network.NetworkInterface.Definition.IWithPrimaryNetwork definitionWithNetwork; + if (this.newGroup != null) + { + definitionWithNetwork = definitionWithGroup.WithNewResourceGroup(this.newGroup); + } + else + { + definitionWithNetwork = definitionWithGroup.WithExistingResourceGroup(this.ResourceGroupName); + } + return definitionWithNetwork + .WithNewPrimaryNetwork("vnet" + name) + .WithPrimaryPrivateIpAddressDynamic(); + } + + private void InitializeDataDisks() + { + if (this.Inner.StorageProfile.DataDisks == null) + { + this.Inner + .StorageProfile + .DataDisks = new List(); + } + + this.dataDisks = new List(); + foreach (DataDisk dataDiskInner in this.StorageProfile.DataDisks) + { + this.dataDisks.Add(new DataDiskImpl(dataDiskInner, this)); + } + } + + private IWithPrimaryNetwork PreparePrimaryNetworkInterface(string name) + { + Network.NetworkInterface.Definition.IWithGroup definitionWithGroup = this.networkManager.NetworkInterfaces + .Define(name) + .WithRegion(this.RegionName); + Network.NetworkInterface.Definition.IWithPrimaryNetwork definitionAfterGroup; + if (this.newGroup != null) + { + definitionAfterGroup = definitionWithGroup.WithNewResourceGroup(this.newGroup); + } + else + { + definitionAfterGroup = definitionWithGroup.WithExistingResourceGroup(this.ResourceGroupName); + } + + return definitionAfterGroup; + } + + private string GetStatusCodeFromInstanceView(string codePrefix) + { + foreach (InstanceViewStatus status in this.InstanceView.Statuses) + { + if (status.Code != null && status.Code.StartsWith(codePrefix)) + { + return status.Code.Substring(codePrefix.Length + 1).ToUpper(); + } + } + + return null; + } + + private void ClearCachedRelatedResources() + { + this.primaryNetworkInterface = null; + this.primaryPublicIpAddress = null; + this.virtualMachineInstanceView = null; + } + + } +} \ No newline at end of file diff --git a/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/VirtualMachineOfferImpl.cs b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/VirtualMachineOfferImpl.cs new file mode 100644 index 000000000..ad5f3eb0f --- /dev/null +++ b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/VirtualMachineOfferImpl.cs @@ -0,0 +1,41 @@ +using Microsoft.Azure.Management.Compute; +using Microsoft.Azure.Management.V2.Resource.Core; + +namespace Microsoft.Azure.Management.V2.Compute +{ + public partial class VirtualMachineOfferImpl : IVirtualMachineOffer + { + private IVirtualMachinePublisher publisher; + private IVirtualMachineSkus skus; + + internal VirtualMachineOfferImpl(IVirtualMachinePublisher publisher, string offer, IVirtualMachineImagesOperations client) + { + this.publisher = publisher; + Name = offer; + skus = new VirtualMachineSkusImpl(this, client); + } + + public string Name + { + get; private set; + } + + public Region? Region + { + get + { + return publisher.Region; + } + } + + public IVirtualMachinePublisher Publisher() + { + return publisher; + } + + public IVirtualMachineSkus Skus() + { + return skus; + } + } +} diff --git a/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/VirtualMachineOffersImpl.cs b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/VirtualMachineOffersImpl.cs new file mode 100644 index 000000000..3434a56b0 --- /dev/null +++ b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/VirtualMachineOffersImpl.cs @@ -0,0 +1,34 @@ +using Microsoft.Azure.Management.Compute; +using Microsoft.Azure.Management.Compute.Models; +using Microsoft.Azure.Management.V2.Resource.Core; +using System.Collections.Generic; + +namespace Microsoft.Azure.Management.V2.Compute +{ + public partial class VirtualMachineOffersImpl : + ReadableWrappers, + IVirtualMachineOffers + { + private IVirtualMachineImagesOperations innerCollection; + private IVirtualMachinePublisher publisher; + + internal VirtualMachineOffersImpl(IVirtualMachineImagesOperations innerCollection, IVirtualMachinePublisher publisher) + { + this.publisher = publisher; + this.innerCollection = innerCollection; + } + + public PagedList List() + { + IEnumerable innerOffers = + innerCollection.ListOffers(EnumNameAttribute.GetName(publisher.Region), publisher.Name); + var pagedList = new PagedList(innerOffers); + return WrapList(pagedList); + } + + protected override IVirtualMachineOffer WrapModel(VirtualMachineImageResourceInner inner) + { + return new VirtualMachineOfferImpl(publisher, inner.Name, innerCollection); + } + } +} \ No newline at end of file diff --git a/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/VirtualMachinePublisherImpl.cs b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/VirtualMachinePublisherImpl.cs new file mode 100644 index 000000000..ac1556ba1 --- /dev/null +++ b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/VirtualMachinePublisherImpl.cs @@ -0,0 +1,32 @@ +using Microsoft.Azure.Management.Compute; +using Microsoft.Azure.Management.V2.Resource.Core; + +namespace Microsoft.Azure.Management.V2.Compute +{ + public partial class VirtualMachinePublisherImpl : IVirtualMachinePublisher + { + private IVirtualMachineOffers offers; + + internal VirtualMachinePublisherImpl(Region location, string publisher, IVirtualMachineImagesOperations client) + { + Region = location; + Name = publisher; + offers = new VirtualMachineOffersImpl(client, this); + } + + public string Name + { + get; private set; + } + + public Region? Region + { + get; private set; + } + + public IVirtualMachineOffers Offers() + { + return offers; + } + } +} diff --git a/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/VirtualMachinePublishersImpl.cs b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/VirtualMachinePublishersImpl.cs new file mode 100644 index 000000000..ea89ee0bd --- /dev/null +++ b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/VirtualMachinePublishersImpl.cs @@ -0,0 +1,36 @@ +using Microsoft.Azure.Management.Compute; +using Microsoft.Azure.Management.Compute.Models; +using Microsoft.Azure.Management.V2.Resource.Core; +using System.Collections.Generic; + +namespace Microsoft.Azure.Management.V2.Compute +{ + public partial class VirtualMachinePublishersImpl + : ReadableWrappers, + IVirtualMachinePublishers + { + private IVirtualMachineImagesOperations innerCollection; + + internal VirtualMachinePublishersImpl(IVirtualMachineImagesOperations innerCollection) + { + this.innerCollection = innerCollection; + } + + public PagedList ListByRegion(string regionName) + { + IEnumerable innerPublishers = innerCollection.ListPublishers(regionName); + var pagedList = new PagedList(innerPublishers); + return WrapList(pagedList); + } + + public PagedList ListByRegion(Region region) + { + return this.ListByRegion(EnumNameAttribute.GetName(region)); + } + + protected override IVirtualMachinePublisher WrapModel(VirtualMachineImageResourceInner inner) + { + return new VirtualMachinePublisherImpl(EnumNameAttribute.FromName(inner.Location), inner.Name, this.innerCollection); + } + } +} diff --git a/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/VirtualMachineSizeImpl.cs b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/VirtualMachineSizeImpl.cs new file mode 100644 index 000000000..367c5517d --- /dev/null +++ b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/VirtualMachineSizeImpl.cs @@ -0,0 +1,73 @@ +/** +* Copyright (c) Microsoft Corporation. All rights reserved. +* Licensed under the MIT License. See License.txt in the project root for +* license information. +*/ + +namespace Microsoft.Azure.Management.V2.Compute +{ + + using Microsoft.Azure.Management.Compute.Models; + /// + /// The implementation for {@link VirtualMachineSize}. + /// + public partial class VirtualMachineSizeImpl : + IVirtualMachineSize + { + private VirtualMachineSize innerModel; + + internal VirtualMachineSizeImpl (VirtualMachineSize innerModel) + { + + // this.innerModel = innerModel; + // } + + } + + public string Name + { + get + { + return innerModel.Name; + } + } + public int? NumberOfCores + { + get + { + return innerModel.NumberOfCores; + } + } + public int? OsDiskSizeInMB + { + get + { + return innerModel.OsDiskSizeInMB; + } + } + + public int? ResourceDiskSizeInMB + { + get + { + return innerModel.ResourceDiskSizeInMB; + } + } + + public int? MemoryInMB + { + get + { + return innerModel.MemoryInMB; + } + } + + public int? MaxDataDiskCount + { + get + { + return innerModel.MaxDataDiskCount; + } + } + } +} \ No newline at end of file diff --git a/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/VirtualMachineSizesImpl.cs b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/VirtualMachineSizesImpl.cs new file mode 100644 index 000000000..99487d575 --- /dev/null +++ b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/VirtualMachineSizesImpl.cs @@ -0,0 +1,45 @@ +/** +* Copyright (c) Microsoft Corporation. All rights reserved. +* Licensed under the MIT License. See License.txt in the project root for +* license information. +*/ + +namespace Microsoft.Azure.Management.V2.Compute +{ + using Management.Compute; + using Microsoft.Azure.Management.Compute.Models; + using Microsoft.Azure.Management.V2.Resource.Core; + using Microsoft.Azure.Management.V2.Resource.Core.CollectionActions; + /// + /// The implementation for {@link VirtualMachineSizes}. + /// + public partial class VirtualMachineSizesImpl : + ReadableWrappers, + IVirtualMachineSizes + { + private IVirtualMachineSizesOperations innerCollection; + + internal VirtualMachineSizesImpl(IVirtualMachineSizesOperations innerCollection) + { + this.innerCollection = innerCollection; + } + + public PagedList ListByRegion(Region region) + { + return ListByRegion(region.ToString()); + } + + protected override IVirtualMachineSize WrapModel(VirtualMachineSize inner) + { + return new VirtualMachineSizeImpl(inner); + } + + public PagedList ListByRegion(string regionName) + { + var data = innerCollection.List(regionName); + return WrapList(new PagedList(data)); + + } + + } +} \ No newline at end of file diff --git a/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/VirtualMachineSkuImpl.cs b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/VirtualMachineSkuImpl.cs new file mode 100644 index 000000000..698ca1c1a --- /dev/null +++ b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/VirtualMachineSkuImpl.cs @@ -0,0 +1,46 @@ +using Microsoft.Azure.Management.Compute; +using Microsoft.Azure.Management.V2.Resource.Core; + +namespace Microsoft.Azure.Management.V2.Compute +{ + public partial class VirtualMachineSkuImpl : IVirtualMachineSku + { + private IVirtualMachineOffer offer; + private IVirtualMachineImagesInSku imagesInSku; + + internal VirtualMachineSkuImpl(IVirtualMachineOffer offer, string skuName, IVirtualMachineImagesOperations client) + { + this.offer = offer; + Name = skuName; + imagesInSku = new VirtualMachineImagesInSkuImpl(this, client); + } + + public string Name + { + get; private set; + } + + public Region? Region + { + get + { + return offer.Region; + } + } + + public IVirtualMachineImagesInSku Images() + { + return imagesInSku; + } + + public IVirtualMachineOffer Offer() + { + return offer; + } + + public IVirtualMachinePublisher Publisher() + { + return offer.Publisher(); + } + } +} diff --git a/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/VirtualMachineSkusImpl.cs b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/VirtualMachineSkusImpl.cs new file mode 100644 index 000000000..a46be9bfb --- /dev/null +++ b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/VirtualMachineSkusImpl.cs @@ -0,0 +1,31 @@ +using Microsoft.Azure.Management.Compute; +using Microsoft.Azure.Management.Compute.Models; +using Microsoft.Azure.Management.V2.Resource.Core; +using System.Collections.Generic; + +namespace Microsoft.Azure.Management.V2.Compute +{ + public partial class VirtualMachineSkusImpl : ReadableWrappers, IVirtualMachineSkus + { + private IVirtualMachineImagesOperations innerCollection; + private IVirtualMachineOffer offer; + + internal VirtualMachineSkusImpl(IVirtualMachineOffer offer, IVirtualMachineImagesOperations innerCollection) + { + this.offer = offer; + this.innerCollection = innerCollection; + } + + public PagedList List() + { + IEnumerable innerSkus = innerCollection.ListSkus(EnumNameAttribute.GetName(offer.Region), offer.Publisher().Name, offer.Name); + var pagedList = new PagedList(innerSkus); + return WrapList(pagedList); + } + + protected override IVirtualMachineSku WrapModel(VirtualMachineImageResourceInner inner) + { + return new VirtualMachineSkuImpl(this.offer, inner.Name, innerCollection); + } + } +} diff --git a/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/VirtualMachinesImpl.cs b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/VirtualMachinesImpl.cs new file mode 100644 index 000000000..7a5287f85 --- /dev/null +++ b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/VirtualMachinesImpl.cs @@ -0,0 +1,178 @@ +/** +* Copyright (c) Microsoft Corporation. All rights reserved. +* Licensed under the MIT License. See License.txt in the project root for +* license information. +*/ + +namespace Microsoft.Azure.Management.V2.Compute +{ + + using Microsoft.Azure.Management.Compute.Models; + using Microsoft.Azure.Management.Network.Models; + using Microsoft.Azure.Management.V2.Resource.Core.CollectionActions; + using Microsoft.Azure.Management.V2.Resource; + using Microsoft.Azure.Management.V2.Resource.Core; + using Microsoft.Azure.Management.Storage.Models; + using Microsoft.Azure.Management.V2.Compute.VirtualMachine.Definition; + using Management.Compute; + using Storage; + using Network; + using System.Threading.Tasks; + using System.Threading; + using System; + using System.Collections.Generic; + + /// + /// The implementation for {@link VirtualMachines}. + /// + public partial class VirtualMachinesImpl : + GroupableResources, + IVirtualMachines + { + private IStorageManager storageManager; + private INetworkManager networkManager; + private VirtualMachineSizesImpl vmSizes; + + internal VirtualMachinesImpl(IVirtualMachinesOperations client, IVirtualMachineSizesOperations virtualMachineSizesClient, ComputeManager computeManager, IStorageManager storageManager, INetworkManager networkManager) : + base(client, computeManager) + { + this.storageManager = storageManager; + this.networkManager = networkManager; + this.vmSizes = new VirtualMachineSizesImpl(virtualMachineSizesClient); + } + + public PagedList List() + { + // There is no API supporting listing of availabiltiy set across subscription so enumerate all RGs and then + // flatten the "list of list of availibility sets" as "list of availibility sets" . + return new ChildListFlattener(MyManager.ResourceManager.ResourceGroups.List(), (IResourceGroup resourceGroup) => + { + return ListByGroup(resourceGroup.Name); + }).Flatten(); + } + + public PagedList ListByGroup(string resourceGroupName) + { + var pagedList = new PagedList(this.InnerCollection.List(resourceGroupName)); + return WrapList(pagedList); + } + + public void Delete(string id) + { + DeleteAsync(id).Wait(); + } + + public void Delete(string groupName, string name) + { + DeleteAsync(groupName, name).Wait(); + } + + public IBlank Define(string name) + { + return WrapModel(name); + } + + public void Deallocate(string groupName, string name) + { + this.InnerCollection.Deallocate(groupName, name); + } + + public void Generalize(string groupName, string name) + { + this.InnerCollection.Generalize(groupName, name); + } + + public void PowerOff(string groupName, string name) + { + this.InnerCollection.PowerOff(groupName, name); + } + + public void Restart(string groupName, string name) + { + this.InnerCollection.Restart(groupName, name); + } + + public void Start(string groupName, string name) + { + this.InnerCollection.Start(groupName, name); + } + + public void Redeploy(string groupName, string name) + { + this.InnerCollection.Redeploy(groupName, name); + } + + public string Capture(string groupName, string name, string containerName, bool overwriteVhd) + { + VirtualMachineCaptureParametersInner parameters = new VirtualMachineCaptureParametersInner(); + parameters.DestinationContainerName = containerName; + parameters.OverwriteVhds = overwriteVhd; + VirtualMachineCaptureResultInner captureResult = this.InnerCollection.Capture(groupName, name, parameters); + return captureResult.Output.ToString(); + } + + public IVirtualMachineSizes Sizes() + { + return this.vmSizes; + } + + protected override VirtualMachineImpl WrapModel(string name) + { + var osDisk = new OSDisk(); + var storageProfile = new StorageProfile(); + storageProfile.OsDisk = osDisk; + storageProfile.DataDisks = new List(); + var networkProfile = new NetworkProfile(); + networkProfile.NetworkInterfaces = new List(); + + VirtualMachineInner inner = new VirtualMachineInner(); + inner.StorageProfile = storageProfile; + inner.OsProfile = new OSProfile(); + inner.HardwareProfile = new HardwareProfile(); + inner.NetworkProfile = networkProfile; + + return new VirtualMachineImpl(name, + inner, + this.InnerCollection, + base.MyManager, + this.storageManager, + this.networkManager); + } + + protected override IVirtualMachine WrapModel(VirtualMachineInner virtualMachineInner) + { + return new VirtualMachineImpl(virtualMachineInner.Name, + virtualMachineInner, + this.InnerCollection, + base.MyManager, + this.storageManager, + this.networkManager); + } + + public Task DeleteAsync(string id, CancellationToken cancellationToken = default(CancellationToken)) + { + return ((ISupportsDeletingByGroup)this).DeleteAsync(ResourceUtils.GroupFromResourceId(id), ResourceUtils.NameFromResourceId(id)); + } + + public async Task DeleteAsync(string groupName, string name, CancellationToken cancellationToken = default(CancellationToken)) + { + await this.InnerCollection.DeleteAsync(groupName, name, cancellationToken); + } + + public async Task> ListByGroupAsync(string resourceGroupName, CancellationToken cancellationToken) + { + var data = await this.InnerCollection.ListAsync(resourceGroupName); + return WrapList(new PagedList(data)); + } + + public async override Task GetByGroupAsync(string groupName, string name) + { + var data = await this.InnerCollection.GetAsync(groupName, name); + return this.WrapModel(data); + } + } +} \ No newline at end of file diff --git a/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/project.json b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/project.json new file mode 100644 index 000000000..ed056152e --- /dev/null +++ b/src/ResourceManagement/Compute/Microsoft.Azure.Management.V2.Compute/project.json @@ -0,0 +1,48 @@ +{ + "version": "0.0.1-prerelease", + "description": "TODOComputeV2Description.", + "authors": [ "Microsoft" ], + "packOptions": { + "summary": "TODOComputeV2Description.", + "iconUrl": "http://go.microsoft.com/fwlink/?LinkID=288890", + "tags": [ "Microsoft Azure Compute management", "virtual machine", "compute", "REST HTTP client", "azureofficial", "windowsazureofficial" ], + "projectUrl": "https://github.com/Azure/azure-sdk-for-net", + "licenseUrl": "https://raw.githubusercontent.com/Microsoft/dotnet/master/LICENSE", + "requireLicenseAcceptance": true + }, + "buildOptions": { + "delaySign": true, + "publicSign": false, + "keyFile": "../../../../tools/MSSharedLibKey.snk" + }, + "frameworks": { + "net45": { + "dependencies": { + "Microsoft.Rest.ClientRuntime.Azure": "[3.1.0,4.0.0)" + } + }, + "netstandard1.5": { + "imports": [ "dnxcore50" ], + "dependencies": { + "Microsoft.NETCore.Platforms": "1.0.1", + "System.Diagnostics.Tools": "4.0.1", + "System.Net.Http": "4.1.0", + "System.Runtime.Serialization.Primitives": "4.1.1", + "System.Threading.Tasks": "4.0.11", + "Microsoft.Rest.ClientRuntime.Azure": "[3.3.1,4.0.0)" + } + }, + "netstandard1.1": { + "imports": [ "dnxcore50" ], + "dependencies": { + "System.Runtime.Serialization.Primitives": "4.1.1", + "Microsoft.Rest.ClientRuntime.Azure": "[3.3.1,4.0.0)" + } + } + }, + "dependencies": { + "Microsoft.Azure.Management.V2.Network": "0.0.1-prerelease", + "Microsoft.Azure.Management.V2.Resource": "0.0.1-prerelease", + "Microsoft.Azure.Management.V2.Storage": "0.0.1-prerelease" + } +} diff --git a/src/ResourceManagement/Compute/global.json b/src/ResourceManagement/Compute/global.json new file mode 100644 index 000000000..d1eec5455 --- /dev/null +++ b/src/ResourceManagement/Compute/global.json @@ -0,0 +1,3 @@ +{ + "projects": [ "Microsoft.Azure.Management.V2.Compute", "../Network", "../Resource", "../Storage" ] +} \ No newline at end of file diff --git a/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Domain/ILoadBalancer.cs b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Domain/ILoadBalancer.cs new file mode 100644 index 000000000..850c08c8d --- /dev/null +++ b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Domain/ILoadBalancer.cs @@ -0,0 +1,28 @@ +/** +* Copyright (c) Microsoft Corporation. All rights reserved. +* Licensed under the MIT License. See License.txt in the project root for +* license information. +*/ + +namespace Microsoft.Azure.Management.V2.Network +{ + + using Microsoft.Azure.Management.Network.Models; + using Microsoft.Azure.Management.V2.Network.LoadBalancer.Update; + using Microsoft.Azure.Management.V2.Resource.Core; + using System.Collections.Generic; + using Microsoft.Azure.Management.V2.Resource.Core.ResourceActions; + /// + /// Entry point for load balancer management API in Azure. + /// + public interface ILoadBalancer : + IGroupableResource, + IRefreshable, + IWrapper, + IUpdatable + { + /// resource IDs of the public IP addresses assigned to the front end of this load balancer + IList PublicIpAddressIds { get; } + + } +} \ No newline at end of file diff --git a/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Domain/ILoadBalancers.cs b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Domain/ILoadBalancers.cs new file mode 100644 index 000000000..b585a1034 --- /dev/null +++ b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Domain/ILoadBalancers.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. +*/ + +namespace Microsoft.Azure.Management.V2.Network +{ + + using Microsoft.Azure.Management.V2.Resource.Core.CollectionActions; + using Microsoft.Azure.Management.V2.Network.LoadBalancer.Definition; + /// + /// Entry point to load balancer management API in Azure. + /// + public interface ILoadBalancers : + ISupportsCreating, + ISupportsListing, + ISupportsListingByGroup, + ISupportsGettingByGroup, + ISupportsGettingById, + ISupportsDeleting, + ISupportsDeletingByGroup + { + } +} \ No newline at end of file diff --git a/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Domain/INetwork.cs b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Domain/INetwork.cs new file mode 100644 index 000000000..8a9c3bb3d --- /dev/null +++ b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Domain/INetwork.cs @@ -0,0 +1,36 @@ +/** +* Copyright (c) Microsoft Corporation. All rights reserved. +* Licensed under the MIT License. See License.txt in the project root for +* license information. +*/ + +namespace Microsoft.Azure.Management.V2.Network +{ + + using System.Collections.Generic; + using Microsoft.Azure.Management.V2.Resource.Core.ResourceActions; + using Microsoft.Azure.Management.Network.Models; + using Microsoft.Azure.Management.V2.Resource.Core; + using Microsoft.Azure.Management.V2.Network.Network.Update; + /// + /// Entry point for Virtual Network management API in Azure. + /// + public interface INetwork : + IGroupableResource, + IRefreshable, + IWrapper, + IUpdatable + { + /// list of address spaces associated with this virtual network, in the CIDR notation + IList AddressSpaces { get; } + + /// list of DNS server IP addresses associated with this virtual network + IList DnsServerIPs { get; } + + /// subnets of this virtual network as a map indexed by subnet name + ///

Note that when a virtual network is created with no subnets explicitly defined, a default subnet is + /// automatically created with the name "subnet1". + IDictionary Subnets (); + + } +} \ No newline at end of file diff --git a/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Domain/INetworkInterface.cs b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Domain/INetworkInterface.cs new file mode 100644 index 000000000..5e6bdb4cb --- /dev/null +++ b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Domain/INetworkInterface.cs @@ -0,0 +1,94 @@ +/** +* Copyright (c) Microsoft Corporation. All rights reserved. +* Licensed under the MIT License. See License.txt in the project root for +* license information. +*/ + +namespace Microsoft.Azure.Management.V2.Network +{ + + using Microsoft.Azure.Management.V2.Resource.Core.ResourceActions; + using Microsoft.Azure.Management.V2.Resource.Core; + using System.Collections.Generic; + using Microsoft.Azure.Management.Network.Models; + using Microsoft.Azure.Management.V2.Network.NetworkInterface.Update; + ///

+ /// Network interface. + /// + public interface INetworkInterface : + IGroupableResource, + IRefreshable, + IWrapper, + IUpdatable + { + /// true if IP forwarding is enabled in this network interface + bool? IsIpForwardingEnabled { get; } + + /// the MAC Address of the network interface + string MacAddress { get; } + + /// the Internal DNS name assigned to this network interface + string InternalDnsNameLabel { get; } + + /// + /// Gets the fully qualified domain name of this network interface. + ///

+ /// A network interface receives FQDN as a part of assigning it to a virtual machine. + ///

+ /// the qualified domain name + string InternalFqdn { get; } + + /// IP addresses of this network interface's DNS servers + IList DnsServers { get; } + + /// + /// Gets the public IP address associated with this network interface. + ///

+ /// This method makes a rest API call to fetch the public IP. + ///

+ /// the public IP associated with this network interface + IPublicIpAddress PrimaryPublicIpAddress (); + + /// the resource id of the virtual network subnet associated with this network interface. + string PrimarySubnetId { get; } + + /// + /// Gets the virtual network associated this network interface's primary IP configuration. + ///

+ /// This method makes a rest API call to fetch the virtual network. + ///

+ /// the virtual network associated with this network interface. + INetwork PrimaryNetwork (); + + /// + /// Gets the private IP address allocated to this network interface's primary IP configuration. + ///

+ /// The private IP will be within the virtual network subnet of this network interface. + ///

+ /// the private IP addresses + string PrimaryPrivateIp { get; } + + /// the private IP allocation method (Dynamic, Static) of this network interface's + /// primary IP configuration. + string PrimaryPrivateIpAllocationMethod { get; } + + /// the IP configurations of this network interface + IList IpConfigurations (); + + /// the primary IP configuration of this network interface + INicIpConfiguration PrimaryIpConfiguration (); + + /// the network security group resource id or null if there is no network security group + /// associated with this network interface. + string NetworkSecurityGroupId { get; } + + /// + /// Gets the network security group associated this network interface. + ///

+ /// This method makes a rest API call to fetch the Network Security Group resource. + ///

+ /// the network security group associated with this network interface. + INetworkSecurityGroup NetworkSecurityGroup (); + + } +} \ No newline at end of file diff --git a/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Domain/INetworkInterfaces.cs b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Domain/INetworkInterfaces.cs new file mode 100644 index 000000000..5e2a48fac --- /dev/null +++ b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Domain/INetworkInterfaces.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. +*/ + +namespace Microsoft.Azure.Management.V2.Network +{ + + using Microsoft.Azure.Management.V2.Resource.Core.CollectionActions; + using Microsoft.Azure.Management.V2.Network.NetworkInterface.Definition; + /// + /// Entry point to network interface management. + /// + public interface INetworkInterfaces : + ISupportsCreating, + ISupportsListing, + ISupportsListingByGroup, + ISupportsGettingByGroup, + ISupportsGettingById, + ISupportsDeleting, + ISupportsDeletingByGroup + { + } +} \ No newline at end of file diff --git a/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Domain/INetworkSecurityGroup.cs b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Domain/INetworkSecurityGroup.cs new file mode 100644 index 000000000..b0e9c3652 --- /dev/null +++ b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Domain/INetworkSecurityGroup.cs @@ -0,0 +1,34 @@ +/** +* Copyright (c) Microsoft Corporation. All rights reserved. +* Licensed under the MIT License. See License.txt in the project root for +* license information. +*/ + +namespace Microsoft.Azure.Management.V2.Network +{ + + using Microsoft.Azure.Management.Network.Models; + using Microsoft.Azure.Management.V2.Resource.Core; + using System.Collections.Generic; + using Microsoft.Azure.Management.V2.Resource.Core.ResourceActions; + using Microsoft.Azure.Management.V2.Network.NetworkSecurityGroup.Update; + /// + /// Network security group. + /// + public interface INetworkSecurityGroup : + IGroupableResource, + IRefreshable, + IWrapper, + IUpdatable + { + /// list of security rules associated with this network security group + IList SecurityRules (); + + /// list of default security rules associated with this network security group + IList DefaultSecurityRules (); + + /// list of the ids of the network interfaces associated with this network security group + IList NetworkInterfaceIds { get; } + + } +} \ No newline at end of file diff --git a/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Domain/INetworkSecurityGroups.cs b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Domain/INetworkSecurityGroups.cs new file mode 100644 index 000000000..6918fb334 --- /dev/null +++ b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Domain/INetworkSecurityGroups.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. +*/ + +namespace Microsoft.Azure.Management.V2.Network +{ + + using Microsoft.Azure.Management.V2.Resource.Core.CollectionActions; + using Microsoft.Azure.Management.V2.Network.NetworkSecurityGroup.Definition; + /// + /// Entry point to network security group management. + /// + public interface INetworkSecurityGroups : + ISupportsCreating, + ISupportsListing, + ISupportsListingByGroup, + ISupportsGettingByGroup, + ISupportsGettingById, + ISupportsDeleting, + ISupportsDeletingByGroup + { + } +} \ No newline at end of file diff --git a/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Domain/INetworkSecurityRule.cs b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Domain/INetworkSecurityRule.cs new file mode 100644 index 000000000..8ae5c0135 --- /dev/null +++ b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Domain/INetworkSecurityRule.cs @@ -0,0 +1,50 @@ +/** +* Copyright (c) Microsoft Corporation. All rights reserved. +* Licensed under the MIT License. See License.txt in the project root for +* license information. +*/ + +namespace Microsoft.Azure.Management.V2.Network +{ + + using Microsoft.Azure.Management.V2.Resource.Core; + using Microsoft.Azure.Management.Network.Models; + /// + /// A network security rule in a network security group. + /// + public interface INetworkSecurityRule : + IWrapper, + IChildResource + { + /// the network traffic direction the rule applies to + string Direction { get; } + + /// the network protocol the rule applies to + string Protocol { get; } + + /// the user-defined description of the security rule + string Description { get; } + + /// the type of access the rule enforces + string Access { get; } + + /// the source address prefix the rule applies to, expressed using the CIDR notation in the format: "###.###.###.###/##", + /// and "*" means "any" + string SourceAddressPrefix { get; } + + /// the source port range that the rule applies to, in the format "##-##", where "*" means "any" + string SourcePortRange { get; } + + /// the destination address prefix the rule applies to, expressed using the CIDR notation in the format: "###.###.###.###/##", + /// and "*" means "any" + string DestinationAddressPrefix { get; } + + /// the destination port range that the rule applies to, in the format "##-##", where "*" means any + string DestinationPortRange { get; } + + /// the priority number of this rule based on which this rule will be applied relative to the priority numbers of any other rules specified + /// for this network security group + int? Priority { get; } + + } +} \ No newline at end of file diff --git a/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Domain/INetworks.cs b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Domain/INetworks.cs new file mode 100644 index 000000000..d82342bc8 --- /dev/null +++ b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Domain/INetworks.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. +*/ + +namespace Microsoft.Azure.Management.V2.Network +{ + + using Microsoft.Azure.Management.V2.Resource.Core.CollectionActions; + using Microsoft.Azure.Management.V2.Network.Network.Definition; + /// + /// Entry point to virtual network management API in Azure. + /// + public interface INetworks : + ISupportsCreating, + ISupportsListing, + ISupportsListingByGroup, + ISupportsGettingByGroup, + ISupportsGettingById, + ISupportsDeleting, + ISupportsDeletingByGroup + { + } +} \ No newline at end of file diff --git a/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Domain/INicIpConfiguration.cs b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Domain/INicIpConfiguration.cs new file mode 100644 index 000000000..91dbf9995 --- /dev/null +++ b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Domain/INicIpConfiguration.cs @@ -0,0 +1,56 @@ +/** +* Copyright (c) Microsoft Corporation. All rights reserved. +* Licensed under the MIT License. See License.txt in the project root for +* license information. +*/ + +namespace Microsoft.Azure.Management.V2.Network +{ + + using Microsoft.Azure.Management.V2.Resource.Core; + using Microsoft.Azure.Management.Network.Models; + /// + /// An IP configuration in a network interface. + /// + public interface INicIpConfiguration : + IWrapper, + IChildResource + { + /// + /// Gets the resource id of the public IP address associated with this IP configuration. + /// + /// public IP resource ID or null if there is no public IP associated + string PublicIpAddressId { get; } + + /// + /// Gets the public IP address associated with this IP configuration. + ///

+ /// This method makes a rest API call to fetch the public IP. + ///

+ /// the public IP associated with this IP configuration or null if there is no public IP associated + IPublicIpAddress PublicIpAddress (); + + /// the resource id of the virtual network subnet associated with this IP configuration. + string SubnetId { get; } + + /// + /// Gets the virtual network associated with this IP configuration. + ///

+ /// This method makes a rest API call to fetch the public IP. + ///

+ /// the virtual network associated with this this IP configuration. + INetwork Network (); + + /// + /// Gets the private IP address allocated to this IP configuration. + ///

+ /// The private IP will be within the virtual network subnet of this IP configuration. + ///

+ /// the private IP addresses + string PrivateIp { get; } + + /// the private IP allocation method (Dynamic, Static) + string PrivateIpAllocationMethod { get; } + + } +} \ No newline at end of file diff --git a/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Domain/IPublicIpAddress.cs b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Domain/IPublicIpAddress.cs new file mode 100644 index 000000000..9c1cf9282 --- /dev/null +++ b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Domain/IPublicIpAddress.cs @@ -0,0 +1,42 @@ +/** +* Copyright (c) Microsoft Corporation. All rights reserved. +* Licensed under the MIT License. See License.txt in the project root for +* license information. +*/ + +namespace Microsoft.Azure.Management.V2.Network +{ + + using Microsoft.Azure.Management.V2.Network.PublicIpAddress.Update; + using Microsoft.Azure.Management.V2.Resource.Core; + using Microsoft.Azure.Management.Network.Models; + using Microsoft.Azure.Management.V2.Resource.Core.ResourceActions; + /// + /// Public IP address. + /// + public interface IPublicIpAddress : + IGroupableResource, + IRefreshable, + IWrapper, + IUpdatable + { + /// the assigned IP address + string IpAddress { get; } + + /// the assigned leaf domain label + string LeafDomainLabel { get; } + + /// the assigned FQDN (fully qualified domain name) + string Fqdn { get; } + + /// the assigned reverse FQDN, if any + string ReverseFqdn { get; } + + /// the IP address allocation method (Static/Dynamic) + string IpAllocationMethod { get; } + + /// the idle connection timeout setting (in minutes) + int? IdleTimeoutInMinutes { get; } + + } +} \ No newline at end of file diff --git a/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Domain/IPublicIpAddresses.cs b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Domain/IPublicIpAddresses.cs new file mode 100644 index 000000000..b4a48175f --- /dev/null +++ b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Domain/IPublicIpAddresses.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. +*/ + +namespace Microsoft.Azure.Management.V2.Network +{ + + using Microsoft.Azure.Management.V2.Resource.Core.CollectionActions; + using Microsoft.Azure.Management.V2.Network.PublicIpAddress.Definition; + /// + /// Entry point to public IP address management. + /// + public interface IPublicIpAddresses : + ISupportsListing, + ISupportsCreating, + ISupportsDeleting, + ISupportsListingByGroup, + ISupportsGettingByGroup, + ISupportsGettingById, + ISupportsDeletingByGroup + { + } +} \ No newline at end of file diff --git a/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Domain/ISubnet.cs b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Domain/ISubnet.cs new file mode 100644 index 000000000..97b188cf6 --- /dev/null +++ b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Domain/ISubnet.cs @@ -0,0 +1,28 @@ +/** +* Copyright (c) Microsoft Corporation. All rights reserved. +* Licensed under the MIT License. See License.txt in the project root for +* license information. +*/ + +namespace Microsoft.Azure.Management.V2.Network +{ + + using Microsoft.Azure.Management.Network.Models; + using Microsoft.Azure.Management.V2.Resource.Core; + /// + /// An immutable client-side representation of a subnet of a virtual network. + /// + public interface ISubnet : + IWrapper, + IChildResource + { + /// the address space prefix, in CIDR notation, assigned to this subnet + string AddressPrefix { get; } + + /// the network security group associated with this subnet + ///

+ /// Note that this method will result in a call to Azure each time it is invoked. + INetworkSecurityGroup NetworkSecurityGroup (); + + } +} \ No newline at end of file diff --git a/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Domain/ISupportsNetworkInterfaces.cs b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Domain/ISupportsNetworkInterfaces.cs new file mode 100644 index 000000000..e56f7d630 --- /dev/null +++ b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Domain/ISupportsNetworkInterfaces.cs @@ -0,0 +1,31 @@ +/** +* Copyright (c) Microsoft Corporation. All rights reserved. +* Licensed under the MIT License. See License.txt in the project root for +* license information. +*/ + +namespace Microsoft.Azure.Management.V2.Network +{ + + using System.Collections.Generic; + ///

+ /// Interface exposing a list of network interfaces. + /// + public interface ISupportsNetworkInterfaces + { + /// + /// Gets the primary network interface. + ///

+ /// Note that this method can result in a call to the cloud to fetch the network interface information. + ///

+ /// the primary network interface associated with this resource + INetworkInterface PrimaryNetworkInterface (); + + /// the resource id of the primary network interface associated with this resource + string PrimaryNetworkInterfaceId { get; } + + /// the list of resource IDs of the network interfaces associated with this resource + IList NetworkInterfaceIds { get; } + + } +} \ No newline at end of file diff --git a/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Domain/InterfaceImpl/NetworkImpl.cs b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Domain/InterfaceImpl/NetworkImpl.cs new file mode 100644 index 000000000..f95d98e94 --- /dev/null +++ b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Domain/InterfaceImpl/NetworkImpl.cs @@ -0,0 +1,210 @@ +/** +* Copyright (c) Microsoft Corporation. All rights reserved. +* Licensed under the MIT License. See License.txt in the project root for +* license information. +*/ + +namespace Microsoft.Azure.Management.V2.Network +{ + + using Microsoft.Azure.Management.Network.Models; + using Microsoft.Azure.Management.V2.Network.Network.Update; + using System.Collections.Generic; + using System.Threading.Tasks; + using Microsoft.Azure.Management.V2.Resource.Core.ResourceActions; + using Microsoft.Rest; + using Microsoft.Azure.Management.V2.Resource.Core; + using Microsoft.Azure.Management.V2.Network.Network.Definition; + using System.Threading; + using Microsoft.Azure.Management.V2.Resource; + public partial class NetworkImpl + { + /// + /// Explicitly adds an address space to the virtual network. + ///

+ /// Note this method's effect is additive, i.e. each time it is used, a new address space is added to the network. + ///

+ /// This method does not check for conflicts or overlaps with other address spaces. If there is a conflict, + /// a cloud exception may be thrown after the update is applied. + ///

+ /// cidr the CIDR representation of the address space + /// the next stage of the virtual network update + Microsoft.Azure.Management.V2.Network.Network.Update.IUpdate Microsoft.Azure.Management.V2.Network.Network.Update.IWithAddressSpace.WithAddressSpace (string cidr) { + return this.WithAddressSpace( cidr) as Microsoft.Azure.Management.V2.Network.Network.Update.IUpdate; + } + + /// + /// Refreshes the resource to sync with Azure. + /// + /// the refreshed resource + Microsoft.Azure.Management.V2.Network.INetwork Microsoft.Azure.Management.V2.Resource.Core.ResourceActions.IRefreshable.Refresh () { + return this.Refresh() as Microsoft.Azure.Management.V2.Network.INetwork; + } + + /// + /// Execute the update request asynchronously. + /// + /// cancellationToken the cancellation token + /// the handle to the REST call + async Task Microsoft.Azure.Management.V2.Resource.Core.ResourceActions.IAppliable.ApplyAsync (CancellationToken cancellationToken = default(CancellationToken), bool multiThreaded = true) { + return await this.ApplyAsync() as INetwork; + } + + /// + /// Execute the update request. + /// + /// the updated resource + Microsoft.Azure.Management.V2.Network.INetwork Microsoft.Azure.Management.V2.Resource.Core.ResourceActions.IAppliable.Apply () { + return this.Apply() as Microsoft.Azure.Management.V2.Network.INetwork; + } + + /// + /// Begins the description of an update of an existing subnet of this network. + /// + /// name the name of an existing subnet + /// the first stage of the subnet update description + Microsoft.Azure.Management.V2.Network.Subnet.Update.IUpdate Microsoft.Azure.Management.V2.Network.Network.Update.IWithSubnet.UpdateSubnet (string name) { + return this.UpdateSubnet( name) as Microsoft.Azure.Management.V2.Network.Subnet.Update.IUpdate; + } + + /// + /// Begins the definition of a new subnet to be added to this virtual network. + /// + /// name the name of the new subnet + /// the first stage of the new subnet definition + Microsoft.Azure.Management.V2.Network.Subnet.UpdateDefinition.IBlank Microsoft.Azure.Management.V2.Network.Network.Update.IWithSubnet.DefineSubnet (string name) { + return this.DefineSubnet( name) as Microsoft.Azure.Management.V2.Network.Subnet.UpdateDefinition.IBlank; + } + + /// + /// Explicitly adds a subnet to the virtual network. + ///

+ /// Note this method's effect is additive, i.e. each time it is used, a new subnet is added to the network. + ///

+ /// name the name to assign to the subnet + /// cidr the address space of the subnet, within the address space of the network, using the CIDR notation + /// the next stage of the virtual network update + Microsoft.Azure.Management.V2.Network.Network.Update.IUpdate Microsoft.Azure.Management.V2.Network.Network.Update.IWithSubnet.WithSubnet (string name, string cidr) { + return this.WithSubnet( name, cidr) as Microsoft.Azure.Management.V2.Network.Network.Update.IUpdate; + } + + /// + /// Explicitly defines all the subnets in the virtual network based on the provided map. + ///

+ /// This replaces any previously existing subnets. + ///

+ /// nameCidrPairs a {@link Map} of CIDR addresses for the subnets, indexed by the name of each subnet to be added + /// the next stage of the virtual network update + Microsoft.Azure.Management.V2.Network.Network.Update.IUpdate Microsoft.Azure.Management.V2.Network.Network.Update.IWithSubnet.WithSubnets (IDictionary nameCidrPairs) { + return this.WithSubnets( nameCidrPairs) as Microsoft.Azure.Management.V2.Network.Network.Update.IUpdate; + } + + /// + /// Removes a subnet from the virtual network. + /// + /// name name of the subnet to remove + /// the next stage of the virtual network update + Microsoft.Azure.Management.V2.Network.Network.Update.IUpdate Microsoft.Azure.Management.V2.Network.Network.Update.IWithSubnet.WithoutSubnet (string name) { + return this.WithoutSubnet( name) as Microsoft.Azure.Management.V2.Network.Network.Update.IUpdate; + } + + /// + /// Begins the definition of a new subnet to add to the virtual network. + ///

+ /// The definition must be completed with a call to {@link Subnet.DefinitionStages.WithAttach#attach()} + ///

+ /// name the name of the subnet + /// the first stage of the new subnet definition + Microsoft.Azure.Management.V2.Network.Subnet.Definition.IBlank Microsoft.Azure.Management.V2.Network.Network.Definition.IWithSubnet.DefineSubnet (string name) { + return this.DefineSubnet( name) as Microsoft.Azure.Management.V2.Network.Subnet.Definition.IBlank; + } + + /// + /// Explicitly adds a subnet to the virtual network. + ///

+ /// If no subnets are explicitly specified, a default subnet called "subnet1" covering the + /// entire first address space will be created. + ///

+ /// Note this method's effect is additive, i.e. each time it is used, a new subnet is added to the network. + ///

+ /// name the name to assign to the subnet + /// cidr the address space of the subnet, within the address space of the network, using the CIDR notation + /// the next stage of the virtual network definition + Microsoft.Azure.Management.V2.Network.Network.Definition.IWithCreateAndSubnet Microsoft.Azure.Management.V2.Network.Network.Definition.IWithSubnet.WithSubnet (string name, string cidr) { + return this.WithSubnet( name, cidr) as Microsoft.Azure.Management.V2.Network.Network.Definition.IWithCreateAndSubnet; + } + + /// + /// Explicitly defines subnets in the virtual network based on the provided map. + /// + /// nameCidrPairs a {@link Map} of CIDR addresses for the subnets, indexed by the name of each subnet to be defined + /// the next stage of the virtual network definition + Microsoft.Azure.Management.V2.Network.Network.Definition.IWithCreateAndSubnet Microsoft.Azure.Management.V2.Network.Network.Definition.IWithSubnet.WithSubnets (IDictionary nameCidrPairs) { + return this.WithSubnets( nameCidrPairs) as Microsoft.Azure.Management.V2.Network.Network.Definition.IWithCreateAndSubnet; + } + + /// + /// Specifies the IP address of the DNS server to associate with the virtual network. + ///

+ /// Note this method's effect is additive, i.e. each time it is used, a new DNS server is + /// added to the network + ///

+ /// ipAddress the IP address of the DNS server + /// the next stage of the virtual network update + Microsoft.Azure.Management.V2.Network.Network.Update.IUpdate Microsoft.Azure.Management.V2.Network.Network.Update.IWithDnsServer.WithDnsServer (string ipAddress) { + return this.WithDnsServer( ipAddress) as Microsoft.Azure.Management.V2.Network.Network.Update.IUpdate; + } + + /// list of DNS server IP addresses associated with this virtual network + System.Collections.Generic.IList Microsoft.Azure.Management.V2.Network.INetwork.DnsServerIPs + { + get + { + return this.DnsServerIPs as System.Collections.Generic.IList; + } + } + /// subnets of this virtual network as a map indexed by subnet name + ///

Note that when a virtual network is created with no subnets explicitly defined, a default subnet is + /// automatically created with the name "subnet1". + System.Collections.Generic.IDictionary Microsoft.Azure.Management.V2.Network.INetwork.Subnets () { + return this.Subnets() as System.Collections.Generic.IDictionary; + } + + /// list of address spaces associated with this virtual network, in the CIDR notation + System.Collections.Generic.IList Microsoft.Azure.Management.V2.Network.INetwork.AddressSpaces + { + get + { + return this.AddressSpaces as System.Collections.Generic.IList; + } + } + ///

+ /// Explicitly adds an address space to the virtual network. + ///

+ /// If no address spaces are explicitly specified, a default address space with the CIDR "10.0.0.0/16" will be + /// assigned to the virtual network. + ///

+ /// Note that this method's effect is additive, i.e. each time it is used, a new address space is added to the network. + /// This method does not check for conflicts or overlaps with other address spaces. If there is a conflict, + /// a cloud exception may be thrown at the time the network is created. + ///

+ /// cidr the CIDR representation of the address space + /// the next stage of the virtual network definition + Microsoft.Azure.Management.V2.Network.Network.Definition.IWithCreateAndSubnet Microsoft.Azure.Management.V2.Network.Network.Definition.IWithCreate.WithAddressSpace (string cidr) { + return this.WithAddressSpace( cidr) as Microsoft.Azure.Management.V2.Network.Network.Definition.IWithCreateAndSubnet; + } + + /// + /// Specifies the IP address of an existing DNS server to associate with the virtual network. + ///

+ /// Note this method's effect is additive, i.e. each time it is used, a new dns server is added + /// to the network. + ///

+ /// ipAddress the IP address of the DNS server + /// the next stage of the virtual network definition + Microsoft.Azure.Management.V2.Network.Network.Definition.IWithCreate Microsoft.Azure.Management.V2.Network.Network.Definition.IWithCreate.WithDnsServer (string ipAddress) { + return this.WithDnsServer( ipAddress) as Microsoft.Azure.Management.V2.Network.Network.Definition.IWithCreate; + } + + } +} \ No newline at end of file diff --git a/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Domain/InterfaceImpl/NetworkInterfaceImpl.cs b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Domain/InterfaceImpl/NetworkInterfaceImpl.cs new file mode 100644 index 000000000..fbb849232 --- /dev/null +++ b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Domain/InterfaceImpl/NetworkInterfaceImpl.cs @@ -0,0 +1,521 @@ +/** +* Copyright (c) Microsoft Corporation. All rights reserved. +* Licensed under the MIT License. See License.txt in the project root for +* license information. +*/ + +namespace Microsoft.Azure.Management.V2.Network +{ + + using Microsoft.Azure.Management.V2.Resource.Core; + using Microsoft.Azure.Management.Network.Models; + using Microsoft.Azure.Management.V2.Network.NetworkInterface.Definition; + using System.Threading; + using Microsoft.Rest; + using Microsoft.Azure.Management.V2.Resource.Core.ResourceActions; + using System.Collections.Generic; + using Microsoft.Azure.Management.V2.Resource; + using Microsoft.Azure.Management.V2.Network.NetworkInterface.Update; + using System.Threading.Tasks; + public partial class NetworkInterfaceImpl + { + /// + /// Removes a DNS server associated with the network interface. + /// + /// ipAddress the IP address of the DNS server + /// the next stage of the network interface update + Microsoft.Azure.Management.V2.Network.NetworkInterface.Update.IUpdate Microsoft.Azure.Management.V2.Network.NetworkInterface.Update.IWithDnsServer.WithoutDnsServer (string ipAddress) { + return this.WithoutDnsServer( ipAddress) as Microsoft.Azure.Management.V2.Network.NetworkInterface.Update.IUpdate; + } + + /// + /// Specifies the IP address of the custom DNS server to associate with the network interface. + ///

+ /// Note this method's effect is additive, i.e. each time it is used, the new dns server is + /// added to the network interface. + ///

+ /// ipAddress the IP address of the DNS server + /// the next stage of the network interface update + Microsoft.Azure.Management.V2.Network.NetworkInterface.Update.IUpdate Microsoft.Azure.Management.V2.Network.NetworkInterface.Update.IWithDnsServer.WithDnsServer (string ipAddress) { + return this.WithDnsServer( ipAddress) as Microsoft.Azure.Management.V2.Network.NetworkInterface.Update.IUpdate; + } + + /// + /// Specifies to use the default Azure DNS server for the network interface. + ///

+ /// Using azure DNS server will remove any custom DNS server associated with this network interface. + ///

+ /// the next stage of the network interface update + Microsoft.Azure.Management.V2.Network.NetworkInterface.Update.IUpdate Microsoft.Azure.Management.V2.Network.NetworkInterface.Update.IWithDnsServer.WithAzureDnsServer () { + return this.WithAzureDnsServer() as Microsoft.Azure.Management.V2.Network.NetworkInterface.Update.IUpdate; + } + + /// + /// Associates an existing network security group with the network interface. + /// + /// networkSecurityGroup an existing network security group + /// the next stage of the network interface update + Microsoft.Azure.Management.V2.Network.NetworkInterface.Update.IUpdate Microsoft.Azure.Management.V2.Network.NetworkInterface.Update.IWithNetworkSecurityGroup.WithExistingNetworkSecurityGroup (INetworkSecurityGroup networkSecurityGroup) { + return this.WithExistingNetworkSecurityGroup( networkSecurityGroup) as Microsoft.Azure.Management.V2.Network.NetworkInterface.Update.IUpdate; + } + + /// + /// Specifies that remove any network security group associated with the network interface. + /// + /// the next stage of the network interface update + Microsoft.Azure.Management.V2.Network.NetworkInterface.Update.IUpdate Microsoft.Azure.Management.V2.Network.NetworkInterface.Update.IWithNetworkSecurityGroup.WithoutNetworkSecurityGroup () { + return this.WithoutNetworkSecurityGroup() as Microsoft.Azure.Management.V2.Network.NetworkInterface.Update.IUpdate; + } + + /// + /// Create a new network security group to associate with network interface, based on the provided definition. + /// + /// creatable a creatable definition for a new network security group + /// the next stage of the network interface update + Microsoft.Azure.Management.V2.Network.NetworkInterface.Update.IUpdate Microsoft.Azure.Management.V2.Network.NetworkInterface.Update.IWithNetworkSecurityGroup.WithNewNetworkSecurityGroup (ICreatable creatable) { + return this.WithNewNetworkSecurityGroup( creatable) as Microsoft.Azure.Management.V2.Network.NetworkInterface.Update.IUpdate; + } + + /// + /// Associates an existing network security group with the network interface. + /// + /// networkSecurityGroup an existing network security group + /// the next stage of the network interface definition + Microsoft.Azure.Management.V2.Network.NetworkInterface.Definition.IWithCreate Microsoft.Azure.Management.V2.Network.NetworkInterface.Definition.IWithNetworkSecurityGroup.WithExistingNetworkSecurityGroup (INetworkSecurityGroup networkSecurityGroup) { + return this.WithExistingNetworkSecurityGroup( networkSecurityGroup) as Microsoft.Azure.Management.V2.Network.NetworkInterface.Definition.IWithCreate; + } + + /// + /// Create a new network security group to associate with network interface, based on the provided definition. + /// + /// creatable a creatable definition for a new network security group + /// the next stage of the network interface definition + Microsoft.Azure.Management.V2.Network.NetworkInterface.Definition.IWithCreate Microsoft.Azure.Management.V2.Network.NetworkInterface.Definition.IWithNetworkSecurityGroup.WithNewNetworkSecurityGroup (ICreatable creatable) { + return this.WithNewNetworkSecurityGroup( creatable) as Microsoft.Azure.Management.V2.Network.NetworkInterface.Definition.IWithCreate; + } + + /// + /// Create a new public IP address to associate the network interface's primary IP configuration, + /// based on the provided definition. + ///

+ /// if there is public IP associated with the primary IP configuration then that will be removed in + /// favour of this + ///

+ /// creatable a creatable definition for a new public IP + /// the next stage of the network interface update + Microsoft.Azure.Management.V2.Network.NetworkInterface.Update.IUpdate Microsoft.Azure.Management.V2.Network.NetworkInterface.Update.IWithPrimaryPublicIpAddress.WithNewPrimaryPublicIpAddress (ICreatable creatable) { + return this.WithNewPrimaryPublicIpAddress( creatable) as Microsoft.Azure.Management.V2.Network.NetworkInterface.Update.IUpdate; + } + + /// + /// Creates a new public IP address in the same region and group as the resource and associate it + /// with the network interface's primary IP configuration. + ///

+ /// the internal name and DNS label for the public IP address will be derived from the network interface name, + /// if there is an existing public IP association then that will be removed in favour of this + ///

+ /// the next stage of the network interface update + Microsoft.Azure.Management.V2.Network.NetworkInterface.Update.IUpdate Microsoft.Azure.Management.V2.Network.NetworkInterface.Update.IWithPrimaryPublicIpAddress.WithNewPrimaryPublicIpAddress () { + return this.WithNewPrimaryPublicIpAddress() as Microsoft.Azure.Management.V2.Network.NetworkInterface.Update.IUpdate; + } + + /// + /// Creates a new public IP address in the same region and group as the resource, with the specified DNS label + /// and associate it with the network interface's primary IP configuration. + ///

+ /// the internal name for the public IP address will be derived from the DNS label, if there is an existing + /// public IP association then that will be removed in favour of this + ///

+ /// leafDnsLabel the leaf domain label + /// the next stage of the network interface update + Microsoft.Azure.Management.V2.Network.NetworkInterface.Update.IUpdate Microsoft.Azure.Management.V2.Network.NetworkInterface.Update.IWithPrimaryPublicIpAddress.WithNewPrimaryPublicIpAddress (string leafDnsLabel) { + return this.WithNewPrimaryPublicIpAddress( leafDnsLabel) as Microsoft.Azure.Management.V2.Network.NetworkInterface.Update.IUpdate; + } + + /// + /// Specifies that remove any public IP associated with the network interface's primary IP configuration. + /// + /// the next stage of the network interface update + Microsoft.Azure.Management.V2.Network.NetworkInterface.Update.IUpdate Microsoft.Azure.Management.V2.Network.NetworkInterface.Update.IWithPrimaryPublicIpAddress.WithoutPrimaryPublicIpAddress () { + return this.WithoutPrimaryPublicIpAddress() as Microsoft.Azure.Management.V2.Network.NetworkInterface.Update.IUpdate; + } + + /// + /// Associates an existing public IP address with the network interface's primary IP configuration. + /// if there is an existing public IP association then that will be removed in favour of this + /// + /// publicIpAddress an existing public IP address + /// the next stage of the network interface update + Microsoft.Azure.Management.V2.Network.NetworkInterface.Update.IUpdate Microsoft.Azure.Management.V2.Network.NetworkInterface.Update.IWithPrimaryPublicIpAddress.WithExistingPrimaryPublicIpAddress (IPublicIpAddress publicIpAddress) { + return this.WithExistingPrimaryPublicIpAddress( publicIpAddress) as Microsoft.Azure.Management.V2.Network.NetworkInterface.Update.IUpdate; + } + + /// + /// Create a new public IP address to associate with network interface's primary IP configuration, based on + /// the provided definition. + /// + /// creatable a creatable definition for a new public IP + /// the next stage of the network interface definition + Microsoft.Azure.Management.V2.Network.NetworkInterface.Definition.IWithCreate Microsoft.Azure.Management.V2.Network.NetworkInterface.Definition.IWithPrimaryPublicIpAddress.WithNewPrimaryPublicIpAddress (ICreatable creatable) { + return this.WithNewPrimaryPublicIpAddress( creatable) as Microsoft.Azure.Management.V2.Network.NetworkInterface.Definition.IWithCreate; + } + + /// + /// Creates a new public IP address in the same region and group as the resource and associate it + /// with the network interface's primary IP configuration. + ///

+ /// the internal name and DNS label for the public IP address will be derived from the network interface name + ///

+ /// the next stage of the network interface definition + Microsoft.Azure.Management.V2.Network.NetworkInterface.Definition.IWithCreate Microsoft.Azure.Management.V2.Network.NetworkInterface.Definition.IWithPrimaryPublicIpAddress.WithNewPrimaryPublicIpAddress () { + return this.WithNewPrimaryPublicIpAddress() as Microsoft.Azure.Management.V2.Network.NetworkInterface.Definition.IWithCreate; + } + + /// + /// Creates a new public IP address in the same region and group as the resource, with the specified DNS label + /// and associate it with the network interface's primary IP configuration. + ///

+ /// the internal name for the public IP address will be derived from the DNS label + ///

+ /// leafDnsLabel the leaf domain label + /// the next stage of the network interface definition + Microsoft.Azure.Management.V2.Network.NetworkInterface.Definition.IWithCreate Microsoft.Azure.Management.V2.Network.NetworkInterface.Definition.IWithPrimaryPublicIpAddress.WithNewPrimaryPublicIpAddress (string leafDnsLabel) { + return this.WithNewPrimaryPublicIpAddress( leafDnsLabel) as Microsoft.Azure.Management.V2.Network.NetworkInterface.Definition.IWithCreate; + } + + /// + /// Associates an existing public IP address with the network interface's primary IP configuration. + /// + /// publicIpAddress an existing public IP address + /// the next stage of the network interface definition + Microsoft.Azure.Management.V2.Network.NetworkInterface.Definition.IWithCreate Microsoft.Azure.Management.V2.Network.NetworkInterface.Definition.IWithPrimaryPublicIpAddress.WithExistingPrimaryPublicIpAddress (IPublicIpAddress publicIpAddress) { + return this.WithExistingPrimaryPublicIpAddress( publicIpAddress) as Microsoft.Azure.Management.V2.Network.NetworkInterface.Definition.IWithCreate; + } + + /// + /// Enables dynamic private IP address allocation within the specified existing virtual network + /// subnet for the network interface's primary IP configuration. + /// + /// the next stage of network interface update + Microsoft.Azure.Management.V2.Network.NetworkInterface.Update.IUpdate Microsoft.Azure.Management.V2.Network.NetworkInterface.Update.IWithPrimaryPrivateIp.WithPrimaryPrivateIpAddressDynamic () { + return this.WithPrimaryPrivateIpAddressDynamic() as Microsoft.Azure.Management.V2.Network.NetworkInterface.Update.IUpdate; + } + + /// + /// Assigns the specified static private IP address within the specified existing virtual network + /// subnet to the network interface's primary IP configuration. + /// + /// staticPrivateIpAddress the static IP address within the specified subnet to assign to + /// the primary IP configuration + /// the next stage of network interface update + Microsoft.Azure.Management.V2.Network.NetworkInterface.Update.IUpdate Microsoft.Azure.Management.V2.Network.NetworkInterface.Update.IWithPrimaryPrivateIp.WithPrimaryPrivateIpAddressStatic (string staticPrivateIpAddress) { + return this.WithPrimaryPrivateIpAddressStatic( staticPrivateIpAddress) as Microsoft.Azure.Management.V2.Network.NetworkInterface.Update.IUpdate; + } + + /// + /// Enables dynamic private IP address allocation within the specified existing virtual network + /// subnet for the network interface's primary IP configuration. + /// + /// the next stage of network interface definition + Microsoft.Azure.Management.V2.Network.NetworkInterface.Definition.IWithCreate Microsoft.Azure.Management.V2.Network.NetworkInterface.Definition.IWithPrimaryPrivateIp.WithPrimaryPrivateIpAddressDynamic () { + return this.WithPrimaryPrivateIpAddressDynamic() as Microsoft.Azure.Management.V2.Network.NetworkInterface.Definition.IWithCreate; + } + + /// + /// Assigns the specified static private IP address within the specified existing virtual network + /// subnet to the network interface's primary IP configuration. + /// + /// staticPrivateIpAddress the static IP address within the specified subnet to assign to + /// the network interface + /// the next stage of network interface definition + Microsoft.Azure.Management.V2.Network.NetworkInterface.Definition.IWithCreate Microsoft.Azure.Management.V2.Network.NetworkInterface.Definition.IWithPrimaryPrivateIp.WithPrimaryPrivateIpAddressStatic (string staticPrivateIpAddress) { + return this.WithPrimaryPrivateIpAddressStatic( staticPrivateIpAddress) as Microsoft.Azure.Management.V2.Network.NetworkInterface.Definition.IWithCreate; + } + + /// + /// Enable IP forwarding in the network interface. + /// + /// the next stage of the network interface definition + Microsoft.Azure.Management.V2.Network.NetworkInterface.Definition.IWithCreate Microsoft.Azure.Management.V2.Network.NetworkInterface.Definition.IWithCreate.WithIpForwarding () { + return this.WithIpForwarding() as Microsoft.Azure.Management.V2.Network.NetworkInterface.Definition.IWithCreate; + } + + /// + /// Specifies the IP address of the custom DNS server to associate with the network interface. + ///

+ /// Note this method's effect is additive, i.e. each time it is used, the new dns server is + /// added to the network interface. + ///

+ /// ipAddress the IP address of the DNS server + /// the next stage of the network interface definition + Microsoft.Azure.Management.V2.Network.NetworkInterface.Definition.IWithCreate Microsoft.Azure.Management.V2.Network.NetworkInterface.Definition.IWithCreate.WithDnsServer (string ipAddress) { + return this.WithDnsServer( ipAddress) as Microsoft.Azure.Management.V2.Network.NetworkInterface.Definition.IWithCreate; + } + + /// + /// Specifies the internal DNS name label for the network interface. + /// + /// dnsNameLabel the internal DNS name label + /// the next stage of the network interface definition + Microsoft.Azure.Management.V2.Network.NetworkInterface.Definition.IWithCreate Microsoft.Azure.Management.V2.Network.NetworkInterface.Definition.IWithCreate.WithInternalDnsNameLabel (string dnsNameLabel) { + return this.WithInternalDnsNameLabel( dnsNameLabel) as Microsoft.Azure.Management.V2.Network.NetworkInterface.Definition.IWithCreate; + } + + /// + /// Gets the public IP address associated with this network interface. + ///

+ /// This method makes a rest API call to fetch the public IP. + ///

+ /// the public IP associated with this network interface + Microsoft.Azure.Management.V2.Network.IPublicIpAddress Microsoft.Azure.Management.V2.Network.INetworkInterface.PrimaryPublicIpAddress () { + return this.PrimaryPublicIpAddress() as Microsoft.Azure.Management.V2.Network.IPublicIpAddress; + } + + /// + /// Gets the private IP address allocated to this network interface's primary IP configuration. + ///

+ /// The private IP will be within the virtual network subnet of this network interface. + ///

+ /// the private IP addresses + string Microsoft.Azure.Management.V2.Network.INetworkInterface.PrimaryPrivateIp + { + get + { + return this.PrimaryPrivateIp as string; + } + } + /// IP addresses of this network interface's DNS servers + System.Collections.Generic.IList Microsoft.Azure.Management.V2.Network.INetworkInterface.DnsServers + { + get + { + return this.DnsServers as System.Collections.Generic.IList; + } + } + /// + /// Gets the virtual network associated this network interface's primary IP configuration. + ///

+ /// This method makes a rest API call to fetch the virtual network. + ///

+ /// the virtual network associated with this network interface. + Microsoft.Azure.Management.V2.Network.INetwork Microsoft.Azure.Management.V2.Network.INetworkInterface.PrimaryNetwork () { + return this.PrimaryNetwork() as Microsoft.Azure.Management.V2.Network.INetwork; + } + + /// + /// Gets the fully qualified domain name of this network interface. + ///

+ /// A network interface receives FQDN as a part of assigning it to a virtual machine. + ///

+ /// the qualified domain name + string Microsoft.Azure.Management.V2.Network.INetworkInterface.InternalFqdn + { + get + { + return this.InternalFqdn as string; + } + } + /// true if IP forwarding is enabled in this network interface + bool? Microsoft.Azure.Management.V2.Network.INetworkInterface.IsIpForwardingEnabled + { + get + { + return this.IsIpForwardingEnabled; + } + } + /// the MAC Address of the network interface + string Microsoft.Azure.Management.V2.Network.INetworkInterface.MacAddress + { + get + { + return this.MacAddress as string; + } + } + /// the IP configurations of this network interface + System.Collections.Generic.IList Microsoft.Azure.Management.V2.Network.INetworkInterface.IpConfigurations () { + return this.IpConfigurations() as System.Collections.Generic.IList; + } + + /// the primary IP configuration of this network interface + Microsoft.Azure.Management.V2.Network.INicIpConfiguration Microsoft.Azure.Management.V2.Network.INetworkInterface.PrimaryIpConfiguration () { + return this.PrimaryIpConfiguration() as Microsoft.Azure.Management.V2.Network.INicIpConfiguration; + } + + /// the private IP allocation method (Dynamic, Static) of this network interface's + /// primary IP configuration. + string Microsoft.Azure.Management.V2.Network.INetworkInterface.PrimaryPrivateIpAllocationMethod + { + get + { + return this.PrimaryPrivateIpAllocationMethod as string; + } + } + /// the Internal DNS name assigned to this network interface + string Microsoft.Azure.Management.V2.Network.INetworkInterface.InternalDnsNameLabel + { + get + { + return this.InternalDnsNameLabel as string; + } + } + /// + /// Gets the network security group associated this network interface. + ///

+ /// This method makes a rest API call to fetch the Network Security Group resource. + ///

+ /// the network security group associated with this network interface. + Microsoft.Azure.Management.V2.Network.INetworkSecurityGroup Microsoft.Azure.Management.V2.Network.INetworkInterface.NetworkSecurityGroup () { + return this.NetworkSecurityGroup() as Microsoft.Azure.Management.V2.Network.INetworkSecurityGroup; + } + + /// the network security group resource id or null if there is no network security group + /// associated with this network interface. + string Microsoft.Azure.Management.V2.Network.INetworkInterface.NetworkSecurityGroupId + { + get + { + return this.NetworkSecurityGroupId as string; + } + } + /// the resource id of the virtual network subnet associated with this network interface. + string Microsoft.Azure.Management.V2.Network.INetworkInterface.PrimarySubnetId + { + get + { + return this.PrimarySubnetId as string; + } + } + /// + /// Execute the update request asynchronously. + /// + /// cancellationToken the cancellation token + /// the handle to the REST call + async Task Microsoft.Azure.Management.V2.Resource.Core.ResourceActions.IAppliable.ApplyAsync (CancellationToken cancellationToken = default(CancellationToken), bool multiThreaded = true) { + return await this.ApplyAsync() as INetworkInterface; + } + + /// + /// Execute the update request. + /// + /// the updated resource + Microsoft.Azure.Management.V2.Network.INetworkInterface Microsoft.Azure.Management.V2.Resource.Core.ResourceActions.IAppliable.Apply () { + return this.Apply() as Microsoft.Azure.Management.V2.Network.INetworkInterface; + } + + /// + /// Starts definition of a secondary IP configuration. + /// + /// name name for the IP configuration + /// the first stage of a secondary IP configuration definition + Microsoft.Azure.Management.V2.Network.NicIpConfiguration.Definition.IBlank Microsoft.Azure.Management.V2.Network.NetworkInterface.Definition.IWithSecondaryIpConfiguration.DefineSecondaryIpConfiguration (string name) { + return this.DefineSecondaryIpConfiguration( name) as Microsoft.Azure.Management.V2.Network.NicIpConfiguration.Definition.IBlank; + } + + /// + /// Associate an existing virtual network with the network interface's primary IP configuration. + /// + /// network an existing virtual network + /// the next stage of the network interface definition + Microsoft.Azure.Management.V2.Network.NetworkInterface.Definition.IWithPrimaryNetworkSubnet Microsoft.Azure.Management.V2.Network.NetworkInterface.Definition.IWithPrimaryNetwork.WithExistingPrimaryNetwork (INetwork network) { + return this.WithExistingPrimaryNetwork( network) as Microsoft.Azure.Management.V2.Network.NetworkInterface.Definition.IWithPrimaryNetworkSubnet; + } + + /// + /// Create a new virtual network to associate with the network interface's primary IP configuration, + /// based on the provided definition. + /// + /// creatable a creatable definition for a new virtual network + /// the next stage of the network interface definition + Microsoft.Azure.Management.V2.Network.NetworkInterface.Definition.IWithPrimaryPrivateIp Microsoft.Azure.Management.V2.Network.NetworkInterface.Definition.IWithPrimaryNetwork.WithNewPrimaryNetwork (ICreatable creatable) { + return this.WithNewPrimaryNetwork( creatable) as Microsoft.Azure.Management.V2.Network.NetworkInterface.Definition.IWithPrimaryPrivateIp; + } + + /// + /// Creates a new virtual network to associate with the network interface's primary IP configuration. + ///

+ /// The virtual network will be created in the same resource group and region as of network interface, + /// it will be created with the specified address space and a default subnet covering the entirety of + /// the network IP address space. + ///

+ /// name the name of the new virtual network + /// addressSpace the address space for rhe virtual network + /// the next stage of the network interface definition + Microsoft.Azure.Management.V2.Network.NetworkInterface.Definition.IWithPrimaryPrivateIp Microsoft.Azure.Management.V2.Network.NetworkInterface.Definition.IWithPrimaryNetwork.WithNewPrimaryNetwork (string name, string addressSpace) { + return this.WithNewPrimaryNetwork( name, addressSpace) as Microsoft.Azure.Management.V2.Network.NetworkInterface.Definition.IWithPrimaryPrivateIp; + } + + /// + /// Creates a new virtual network to associate with the network interface's primary IP configuration. + ///

+ /// The virtual network will be created in the same resource group and region as of network interface, + /// it will be created with the specified address space and a default subnet covering the entirety of + /// the network IP address space. + ///

+ /// addressSpace the address space for the virtual network + /// the next stage of the network interface definition + Microsoft.Azure.Management.V2.Network.NetworkInterface.Definition.IWithPrimaryPrivateIp Microsoft.Azure.Management.V2.Network.NetworkInterface.Definition.IWithPrimaryNetwork.WithNewPrimaryNetwork (string addressSpace) { + return this.WithNewPrimaryNetwork( addressSpace) as Microsoft.Azure.Management.V2.Network.NetworkInterface.Definition.IWithPrimaryPrivateIp; + } + + /// + /// Starts update of an IP configuration. + /// + /// name name of the IP configuration + /// the first stage of an IP configuration update + Microsoft.Azure.Management.V2.Network.NicIpConfiguration.Update.IUpdate Microsoft.Azure.Management.V2.Network.NetworkInterface.Update.IWithIpConfiguration.UpdateIpConfiguration (string name) { + return this.UpdateIpConfiguration( name) as Microsoft.Azure.Management.V2.Network.NicIpConfiguration.Update.IUpdate; + } + + /// + /// Starts definition of a secondary IP configuration. + /// + /// name name for the IP configuration + /// the first stage of a secondary IP configuration definition + Microsoft.Azure.Management.V2.Network.NicIpConfiguration.UpdateDefinition.IBlank Microsoft.Azure.Management.V2.Network.NetworkInterface.Update.IWithIpConfiguration.DefineSecondaryIpConfiguration (string name) { + return this.DefineSecondaryIpConfiguration( name) as Microsoft.Azure.Management.V2.Network.NicIpConfiguration.UpdateDefinition.IBlank; + } + + /// + /// Associate a subnet with the network interface. + /// + /// name the subnet name + /// the next stage of the network interface update + Microsoft.Azure.Management.V2.Network.NetworkInterface.Update.IUpdate Microsoft.Azure.Management.V2.Network.NetworkInterface.Update.IWithPrimaryNetworkSubnet.WithSubnet (string name) { + return this.WithSubnet( name) as Microsoft.Azure.Management.V2.Network.NetworkInterface.Update.IUpdate; + } + + /// + /// Associate a subnet with the network interface's primary IP configuration. + /// + /// name the subnet name + /// the next stage of the network interface definition + Microsoft.Azure.Management.V2.Network.NetworkInterface.Definition.IWithPrimaryPrivateIp Microsoft.Azure.Management.V2.Network.NetworkInterface.Definition.IWithPrimaryNetworkSubnet.WithSubnet (string name) { + return this.WithSubnet( name) as Microsoft.Azure.Management.V2.Network.NetworkInterface.Definition.IWithPrimaryPrivateIp; + } + + /// + /// Refreshes the resource to sync with Azure. + /// + /// the refreshed resource + Microsoft.Azure.Management.V2.Network.INetworkInterface Microsoft.Azure.Management.V2.Resource.Core.ResourceActions.IRefreshable.Refresh () { + return this.Refresh() as Microsoft.Azure.Management.V2.Network.INetworkInterface; + } + + /// + /// Enable IP forwarding in the network interface. + /// + /// the next stage of the network interface update + Microsoft.Azure.Management.V2.Network.NetworkInterface.Update.IUpdate Microsoft.Azure.Management.V2.Network.NetworkInterface.Update.IWithIpForwarding.WithIpForwarding () { + return this.WithIpForwarding() as Microsoft.Azure.Management.V2.Network.NetworkInterface.Update.IUpdate; + } + + /// + /// Disable IP forwarding in the network interface. + /// + /// the next stage of the network interface update + Microsoft.Azure.Management.V2.Network.NetworkInterface.Update.IUpdate Microsoft.Azure.Management.V2.Network.NetworkInterface.Update.IWithIpForwarding.WithoutIpForwarding () { + return this.WithoutIpForwarding() as Microsoft.Azure.Management.V2.Network.NetworkInterface.Update.IUpdate; + } + + } +} \ No newline at end of file diff --git a/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Domain/InterfaceImpl/NetworkInterfacesImpl.cs b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Domain/InterfaceImpl/NetworkInterfacesImpl.cs new file mode 100644 index 000000000..a7d601ca9 --- /dev/null +++ b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Domain/InterfaceImpl/NetworkInterfacesImpl.cs @@ -0,0 +1,81 @@ +/** +* Copyright (c) Microsoft Corporation. All rights reserved. +* Licensed under the MIT License. See License.txt in the project root for +* license information. +*/ + +namespace Microsoft.Azure.Management.V2.Network +{ + + using Microsoft.Azure.Management.V2.Resource.Core.CollectionActions; + using Microsoft.Azure.Management.Network.Models; + using Microsoft.Azure.Management.V2.Resource.Core; + using Microsoft.Azure.Management.V2.Resource; + public partial class NetworkInterfacesImpl + { + /// + /// Begins a definition for a new resource. + ///

+ /// This is the beginning of the builder pattern used to create top level resources + /// in Azure. The final method completing the definition and starting the actual resource creation + /// process in Azure is {@link Creatable#create()}. + ///

+ /// Note that the {@link Creatable#create()} method is + /// only available at the stage of the resource definition that has the minimum set of input + /// parameters specified. If you do not see {@link Creatable#create()} among the available methods, it + /// means you have not yet specified all the required input settings. Input settings generally begin + /// with the word "with", for example: .withNewResourceGroup() and return the next stage + /// of the resource definition, as an interface in the "fluent interface" style. + ///

+ /// name the name of the new resource + /// the first stage of the new resource definition + Microsoft.Azure.Management.V2.Network.NetworkInterface.Definition.IBlank Microsoft.Azure.Management.V2.Resource.Core.CollectionActions.ISupportsCreating.Define (string name) { + return this.Define( name) as Microsoft.Azure.Management.V2.Network.NetworkInterface.Definition.IBlank; + } + + /// + /// Deletes a resource from Azure, identifying it by its resource ID. + /// + /// id the resource ID of the resource to delete + void Microsoft.Azure.Management.V2.Resource.Core.CollectionActions.ISupportsDeleting.Delete (string id) { + this.Delete( id); + } + + /// + /// Lists resources of the specified type in the specified resource group. + /// + /// resourceGroupName the name of the resource group to list the resources from + /// the list of resources + Microsoft.Azure.Management.V2.Resource.Core.PagedList Microsoft.Azure.Management.V2.Resource.Core.CollectionActions.ISupportsListingByGroup.ListByGroup (string resourceGroupName) { + return this.ListByGroup( resourceGroupName) as Microsoft.Azure.Management.V2.Resource.Core.PagedList; + } + + /// + /// Gets the information about a resource from Azure based on the resource name and the name of its resource group. + /// + /// resourceGroupName the name of the resource group the resource is in + /// name the name of the resource. (Note, this is not the ID) + /// an immutable representation of the resource + Microsoft.Azure.Management.V2.Network.INetworkInterface Microsoft.Azure.Management.V2.Resource.Core.CollectionActions.ISupportsGettingByGroup.GetByGroup (string resourceGroupName, string name) { + return this.GetByGroup( resourceGroupName, name) as Microsoft.Azure.Management.V2.Network.INetworkInterface; + } + + /// + /// Deletes a resource from Azure, identifying it by its name and its resource group. + /// + /// groupName The group the resource is part of + /// name The name of the resource + void Microsoft.Azure.Management.V2.Resource.Core.CollectionActions.ISupportsDeletingByGroup.Delete (string groupName, string name) { + this.Delete( groupName, name); + } + + /// + /// Lists all the resources of the specified type in the currently selected subscription. + /// + /// list of resources + Microsoft.Azure.Management.V2.Resource.Core.PagedList Microsoft.Azure.Management.V2.Resource.Core.CollectionActions.ISupportsListing.List () { + return this.List() as Microsoft.Azure.Management.V2.Resource.Core.PagedList; + } + + } +} \ No newline at end of file diff --git a/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Domain/InterfaceImpl/NetworkSecurityGroupImpl.cs b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Domain/InterfaceImpl/NetworkSecurityGroupImpl.cs new file mode 100644 index 000000000..9bdc3b490 --- /dev/null +++ b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Domain/InterfaceImpl/NetworkSecurityGroupImpl.cs @@ -0,0 +1,102 @@ +/** +* Copyright (c) Microsoft Corporation. All rights reserved. +* Licensed under the MIT License. See License.txt in the project root for +* license information. +*/ + +namespace Microsoft.Azure.Management.V2.Network +{ + + using Microsoft.Azure.Management.V2.Network.NetworkSecurityGroup.Definition; + using Microsoft.Azure.Management.V2.Resource; + using System.Collections.Generic; + using Microsoft.Azure.Management.Network.Models; + using Microsoft.Rest; + using Microsoft.Azure.Management.V2.Network.NetworkSecurityGroup.Update; + using Microsoft.Azure.Management.V2.Resource.Core; + using System.Threading; + using Microsoft.Azure.Management.V2.Resource.Core.ResourceActions; + using System.Threading.Tasks; + public partial class NetworkSecurityGroupImpl + { + /// + /// Execute the update request asynchronously. + /// + /// cancellationToken the cancellation token + /// the handle to the REST call + async Task Microsoft.Azure.Management.V2.Resource.Core.ResourceActions.IAppliable.ApplyAsync (CancellationToken cancellationToken = default(CancellationToken), bool multiThreaded = true) { + return await this.ApplyAsync() as INetworkSecurityGroup; + } + + /// + /// Execute the update request. + /// + /// the updated resource + Microsoft.Azure.Management.V2.Network.INetworkSecurityGroup Microsoft.Azure.Management.V2.Resource.Core.ResourceActions.IAppliable.Apply () { + return this.Apply() as Microsoft.Azure.Management.V2.Network.INetworkSecurityGroup; + } + + /// + /// Refreshes the resource to sync with Azure. + /// + /// the refreshed resource + Microsoft.Azure.Management.V2.Network.INetworkSecurityGroup Microsoft.Azure.Management.V2.Resource.Core.ResourceActions.IRefreshable.Refresh () { + return this.Refresh() as Microsoft.Azure.Management.V2.Network.INetworkSecurityGroup; + } + + /// list of default security rules associated with this network security group + System.Collections.Generic.IList Microsoft.Azure.Management.V2.Network.INetworkSecurityGroup.DefaultSecurityRules () { + return this.DefaultSecurityRules() as System.Collections.Generic.IList; + } + + /// list of security rules associated with this network security group + System.Collections.Generic.IList Microsoft.Azure.Management.V2.Network.INetworkSecurityGroup.SecurityRules () { + return this.SecurityRules() as System.Collections.Generic.IList; + } + + /// list of the ids of the network interfaces associated with this network security group + System.Collections.Generic.IList Microsoft.Azure.Management.V2.Network.INetworkSecurityGroup.NetworkInterfaceIds + { + get + { + return this.NetworkInterfaceIds as System.Collections.Generic.IList; + } + } + /// + /// Starts the definition of a new security rule. + /// + /// name the name for the new security rule + /// the first stage of the security rule definition + Microsoft.Azure.Management.V2.Network.NetworkSecurityRule.Definition.IBlank Microsoft.Azure.Management.V2.Network.NetworkSecurityGroup.Definition.IWithRule.DefineRule (string name) { + return this.DefineRule( name) as Microsoft.Azure.Management.V2.Network.NetworkSecurityRule.Definition.IBlank; + } + + /// + /// Begins the definition of a new security rule to be added to this network security group. + /// + /// name the name of the new security rule + /// the first stage of the new security rule definition + Microsoft.Azure.Management.V2.Network.NetworkSecurityRule.UpdateDefinition.IBlank Microsoft.Azure.Management.V2.Network.NetworkSecurityGroup.Update.IWithRule.DefineRule (string name) { + return this.DefineRule( name) as Microsoft.Azure.Management.V2.Network.NetworkSecurityRule.UpdateDefinition.IBlank; + } + + /// + /// Removes an existing security rule. + /// + /// name the name of the security rule to remove + /// the next stage of the network security group description + Microsoft.Azure.Management.V2.Network.NetworkSecurityGroup.Update.IUpdate Microsoft.Azure.Management.V2.Network.NetworkSecurityGroup.Update.IWithRule.WithoutRule (string name) { + return this.WithoutRule( name) as Microsoft.Azure.Management.V2.Network.NetworkSecurityGroup.Update.IUpdate; + } + + /// + /// Begins the description of an update of an existing security rule of this network security group. + /// + /// name the name of an existing security rule + /// the first stage of the security rule update description + Microsoft.Azure.Management.V2.Network.NetworkSecurityRule.Update.IUpdate Microsoft.Azure.Management.V2.Network.NetworkSecurityGroup.Update.IWithRule.UpdateRule (string name) { + return this.UpdateRule( name) as Microsoft.Azure.Management.V2.Network.NetworkSecurityRule.Update.IUpdate; + } + + } +} \ No newline at end of file diff --git a/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Domain/InterfaceImpl/NetworkSecurityGroupsImpl.cs b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Domain/InterfaceImpl/NetworkSecurityGroupsImpl.cs new file mode 100644 index 000000000..4c1d102c8 --- /dev/null +++ b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Domain/InterfaceImpl/NetworkSecurityGroupsImpl.cs @@ -0,0 +1,81 @@ +/** +* Copyright (c) Microsoft Corporation. All rights reserved. +* Licensed under the MIT License. See License.txt in the project root for +* license information. +*/ + +namespace Microsoft.Azure.Management.V2.Network +{ + + using Microsoft.Azure.Management.V2.Resource.Core.CollectionActions; + using Microsoft.Azure.Management.Network.Models; + using Microsoft.Azure.Management.V2.Resource; + using Microsoft.Azure.Management.V2.Resource.Core; + public partial class NetworkSecurityGroupsImpl + { + /// + /// Begins a definition for a new resource. + ///

+ /// This is the beginning of the builder pattern used to create top level resources + /// in Azure. The final method completing the definition and starting the actual resource creation + /// process in Azure is {@link Creatable#create()}. + ///

+ /// Note that the {@link Creatable#create()} method is + /// only available at the stage of the resource definition that has the minimum set of input + /// parameters specified. If you do not see {@link Creatable#create()} among the available methods, it + /// means you have not yet specified all the required input settings. Input settings generally begin + /// with the word "with", for example: .withNewResourceGroup() and return the next stage + /// of the resource definition, as an interface in the "fluent interface" style. + ///

+ /// name the name of the new resource + /// the first stage of the new resource definition + Microsoft.Azure.Management.V2.Network.NetworkSecurityGroup.Definition.IBlank Microsoft.Azure.Management.V2.Resource.Core.CollectionActions.ISupportsCreating.Define (string name) { + return this.Define( name) as Microsoft.Azure.Management.V2.Network.NetworkSecurityGroup.Definition.IBlank; + } + + /// + /// Deletes a resource from Azure, identifying it by its resource ID. + /// + /// id the resource ID of the resource to delete + void Microsoft.Azure.Management.V2.Resource.Core.CollectionActions.ISupportsDeleting.Delete (string id) { + this.Delete( id); + } + + /// + /// Lists resources of the specified type in the specified resource group. + /// + /// resourceGroupName the name of the resource group to list the resources from + /// the list of resources + Microsoft.Azure.Management.V2.Resource.Core.PagedList Microsoft.Azure.Management.V2.Resource.Core.CollectionActions.ISupportsListingByGroup.ListByGroup (string resourceGroupName) { + return this.ListByGroup( resourceGroupName) as Microsoft.Azure.Management.V2.Resource.Core.PagedList; + } + + /// + /// Gets the information about a resource from Azure based on the resource name and the name of its resource group. + /// + /// resourceGroupName the name of the resource group the resource is in + /// name the name of the resource. (Note, this is not the ID) + /// an immutable representation of the resource + Microsoft.Azure.Management.V2.Network.INetworkSecurityGroup Microsoft.Azure.Management.V2.Resource.Core.CollectionActions.ISupportsGettingByGroup.GetByGroup (string resourceGroupName, string name) { + return this.GetByGroup( resourceGroupName, name) as Microsoft.Azure.Management.V2.Network.INetworkSecurityGroup; + } + + /// + /// Deletes a resource from Azure, identifying it by its name and its resource group. + /// + /// groupName The group the resource is part of + /// name The name of the resource + void Microsoft.Azure.Management.V2.Resource.Core.CollectionActions.ISupportsDeletingByGroup.Delete (string groupName, string name) { + this.Delete( groupName, name); + } + + /// + /// Lists all the resources of the specified type in the currently selected subscription. + /// + /// list of resources + Microsoft.Azure.Management.V2.Resource.Core.PagedList Microsoft.Azure.Management.V2.Resource.Core.CollectionActions.ISupportsListing.List () { + return this.List() as Microsoft.Azure.Management.V2.Resource.Core.PagedList; + } + + } +} \ No newline at end of file diff --git a/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Domain/InterfaceImpl/NetworkSecurityRuleImpl.cs b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Domain/InterfaceImpl/NetworkSecurityRuleImpl.cs new file mode 100644 index 000000000..062ac9606 --- /dev/null +++ b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Domain/InterfaceImpl/NetworkSecurityRuleImpl.cs @@ -0,0 +1,584 @@ +/** +* Copyright (c) Microsoft Corporation. All rights reserved. +* Licensed under the MIT License. See License.txt in the project root for +* license information. +*/ + +namespace Microsoft.Azure.Management.V2.Network +{ + + using Microsoft.Azure.Management.V2.Resource.Core.ChildResource.Update; + using Microsoft.Azure.Management.V2.Network.NetworkSecurityRule.Definition; + using Microsoft.Azure.Management.Network.Models; + using Microsoft.Azure.Management.V2.Network.NetworkSecurityRule.Update; + using Microsoft.Azure.Management.V2.Network.NetworkSecurityGroup.Definition; + using Microsoft.Azure.Management.V2.Network.NetworkSecurityRule.UpdateDefinition; + using Microsoft.Azure.Management.V2.Network.NetworkSecurityGroup.Update; + using Microsoft.Azure.Management.V2.Resource.Core; + using Microsoft.Azure.Management.V2.Resource.Core.ChildResource.Definition; + public partial class NetworkSecurityRuleImpl + { + /// + /// Specifies the priority to assign to this rule. + ///

+ /// Security rules are applied in the order of their assigned priority. + ///

+ /// priority the priority number in the range 100 to 4096 + /// the next stage of the update + Microsoft.Azure.Management.V2.Network.NetworkSecurityRule.UpdateDefinition.IWithAttach Microsoft.Azure.Management.V2.Network.NetworkSecurityRule.UpdateDefinition.IWithAttach.WithPriority (int priority) { + return this.WithPriority( priority) as Microsoft.Azure.Management.V2.Network.NetworkSecurityRule.UpdateDefinition.IWithAttach; + } + + /// + /// Specifies a description for this security rule. + /// + /// descrtiption a text description to associate with the security rule + /// the next stage + Microsoft.Azure.Management.V2.Network.NetworkSecurityRule.UpdateDefinition.IWithAttach Microsoft.Azure.Management.V2.Network.NetworkSecurityRule.UpdateDefinition.IWithAttach.WithDescription (string descrtiption) { + return this.WithDescription( descrtiption) as Microsoft.Azure.Management.V2.Network.NetworkSecurityRule.UpdateDefinition.IWithAttach; + } + + /// + /// Specifies the priority to assign to this rule. + ///

+ /// Security rules are applied in the order of their assigned priority. + ///

+ /// priority the priority number in the range 100 to 4096 + /// the next stage + Microsoft.Azure.Management.V2.Network.NetworkSecurityRule.Definition.IWithAttach Microsoft.Azure.Management.V2.Network.NetworkSecurityRule.Definition.IWithPriority.WithPriority (int priority) { + return this.WithPriority( priority) as Microsoft.Azure.Management.V2.Network.NetworkSecurityRule.Definition.IWithAttach; + } + + /// + /// Specifies a description for this security rule. + /// + /// description the text description to associate with this security rule + /// the next stage + Microsoft.Azure.Management.V2.Network.NetworkSecurityRule.Definition.IWithAttach Microsoft.Azure.Management.V2.Network.NetworkSecurityRule.Definition.IWithDescription.WithDescription (string description) { + return this.WithDescription( description) as Microsoft.Azure.Management.V2.Network.NetworkSecurityRule.Definition.IWithAttach; + } + + /// + /// Specifies the protocol that this rule applies to. + /// + /// protocol one of the supported protocols + /// the next stage of the security rule definition + Microsoft.Azure.Management.V2.Network.NetworkSecurityRule.Definition.IWithAttach Microsoft.Azure.Management.V2.Network.NetworkSecurityRule.Definition.IWithProtocol.WithProtocol (string protocol) { + return this.WithProtocol( protocol) as Microsoft.Azure.Management.V2.Network.NetworkSecurityRule.Definition.IWithAttach; + } + + /// + /// Makes this rule apply to any supported protocol. + /// + /// the next stage of the security rule definition + Microsoft.Azure.Management.V2.Network.NetworkSecurityRule.Definition.IWithAttach Microsoft.Azure.Management.V2.Network.NetworkSecurityRule.Definition.IWithProtocol.WithAnyProtocol () { + return this.WithAnyProtocol() as Microsoft.Azure.Management.V2.Network.NetworkSecurityRule.Definition.IWithAttach; + } + + /// + /// Specifies the protocol that this rule applies to. + /// + /// protocol one of the supported protocols + /// the next stage of the security rule definition + Microsoft.Azure.Management.V2.Network.NetworkSecurityRule.UpdateDefinition.IWithAttach Microsoft.Azure.Management.V2.Network.NetworkSecurityRule.UpdateDefinition.IWithProtocol.WithProtocol (string protocol) { + return this.WithProtocol( protocol) as Microsoft.Azure.Management.V2.Network.NetworkSecurityRule.UpdateDefinition.IWithAttach; + } + + /// + /// Makes this rule apply to any supported protocol. + /// + /// the next stage of the security rule definition + Microsoft.Azure.Management.V2.Network.NetworkSecurityRule.UpdateDefinition.IWithAttach Microsoft.Azure.Management.V2.Network.NetworkSecurityRule.UpdateDefinition.IWithProtocol.WithAnyProtocol () { + return this.WithAnyProtocol() as Microsoft.Azure.Management.V2.Network.NetworkSecurityRule.UpdateDefinition.IWithAttach; + } + + /// + /// Specifies the priority to assign to this security rule. + ///

+ /// Security rules are applied in the order of their assigned priority. + ///

+ /// priority the priority number in the range 100 to 4096 + /// the next stage of the update + Microsoft.Azure.Management.V2.Network.NetworkSecurityRule.Update.IUpdate Microsoft.Azure.Management.V2.Network.NetworkSecurityRule.Update.IUpdate.WithPriority (int priority) { + return this.WithPriority( priority) as Microsoft.Azure.Management.V2.Network.NetworkSecurityRule.Update.IUpdate; + } + + /// + /// Specifies a description for this security rule. + /// + /// description a text description to associate with this security rule + /// the next stage + Microsoft.Azure.Management.V2.Network.NetworkSecurityRule.Update.IUpdate Microsoft.Azure.Management.V2.Network.NetworkSecurityRule.Update.IUpdate.WithDescription (string description) { + return this.WithDescription( description) as Microsoft.Azure.Management.V2.Network.NetworkSecurityRule.Update.IUpdate; + } + + Microsoft.Azure.Management.V2.Network.NetworkSecurityGroup.Update.IUpdate Microsoft.Azure.Management.V2.Resource.Core.ChildResource.Update.IInUpdate.Attach () { + return this.Attach() as Microsoft.Azure.Management.V2.Network.NetworkSecurityGroup.Update.IUpdate; + } + + /// + /// Specifies the source port to which this rule applies. + /// + /// port the source port number + /// the next stage of the security rule definition + Microsoft.Azure.Management.V2.Network.NetworkSecurityRule.Update.IUpdate Microsoft.Azure.Management.V2.Network.NetworkSecurityRule.Update.IWithSourcePort.FromPort (int port) { + return this.FromPort( port) as Microsoft.Azure.Management.V2.Network.NetworkSecurityRule.Update.IUpdate; + } + + /// + /// Specifies the source port range to which this rule applies. + /// + /// from the starting port number + /// to the ending port number + /// the next stage of the security rule definition + Microsoft.Azure.Management.V2.Network.NetworkSecurityRule.Update.IUpdate Microsoft.Azure.Management.V2.Network.NetworkSecurityRule.Update.IWithSourcePort.FromPortRange (int from, int to) { + return this.FromPortRange( from, to) as Microsoft.Azure.Management.V2.Network.NetworkSecurityRule.Update.IUpdate; + } + + /// + /// Makes this rule apply to any source port. + /// + /// the next stage of the security rule definition + Microsoft.Azure.Management.V2.Network.NetworkSecurityRule.Update.IUpdate Microsoft.Azure.Management.V2.Network.NetworkSecurityRule.Update.IWithSourcePort.FromAnyPort () { + return this.FromAnyPort() as Microsoft.Azure.Management.V2.Network.NetworkSecurityRule.Update.IUpdate; + } + + /// + /// Specifies that the rule applies to any traffic source address. + /// + /// the next stage of the security rule definition + Microsoft.Azure.Management.V2.Network.NetworkSecurityRule.Update.IUpdate Microsoft.Azure.Management.V2.Network.NetworkSecurityRule.Update.IWithSourceAddress.FromAnyAddress () { + return this.FromAnyAddress() as Microsoft.Azure.Management.V2.Network.NetworkSecurityRule.Update.IUpdate; + } + + /// + /// Specifies the traffic source address prefix to which this rule applies. + /// + /// cidr an IP address prefix expressed in the CIDR notation + /// the next stage of the security rule definition + Microsoft.Azure.Management.V2.Network.NetworkSecurityRule.Update.IUpdate Microsoft.Azure.Management.V2.Network.NetworkSecurityRule.Update.IWithSourceAddress.FromAddress (string cidr) { + return this.FromAddress( cidr) as Microsoft.Azure.Management.V2.Network.NetworkSecurityRule.Update.IUpdate; + } + + /// + /// Blocks outbound traffic. + /// + /// the next stage of the security rule definition + Microsoft.Azure.Management.V2.Network.NetworkSecurityRule.Definition.IWithSourceAddress Microsoft.Azure.Management.V2.Network.NetworkSecurityRule.Definition.IWithDirectionAccess.DenyOutbound () { + return this.DenyOutbound() as Microsoft.Azure.Management.V2.Network.NetworkSecurityRule.Definition.IWithSourceAddress; + } + + /// + /// Allows inbound traffic. + /// + /// the next stage of the security rule definition + Microsoft.Azure.Management.V2.Network.NetworkSecurityRule.Definition.IWithSourceAddress Microsoft.Azure.Management.V2.Network.NetworkSecurityRule.Definition.IWithDirectionAccess.AllowInbound () { + return this.AllowInbound() as Microsoft.Azure.Management.V2.Network.NetworkSecurityRule.Definition.IWithSourceAddress; + } + + /// + /// Allows outbound traffic. + /// + /// the next stage of the security rule definition + Microsoft.Azure.Management.V2.Network.NetworkSecurityRule.Definition.IWithSourceAddress Microsoft.Azure.Management.V2.Network.NetworkSecurityRule.Definition.IWithDirectionAccess.AllowOutbound () { + return this.AllowOutbound() as Microsoft.Azure.Management.V2.Network.NetworkSecurityRule.Definition.IWithSourceAddress; + } + + /// + /// Blocks inbound traffic. + /// + /// the next stage of the security rule definition + Microsoft.Azure.Management.V2.Network.NetworkSecurityRule.Definition.IWithSourceAddress Microsoft.Azure.Management.V2.Network.NetworkSecurityRule.Definition.IWithDirectionAccess.DenyInbound () { + return this.DenyInbound() as Microsoft.Azure.Management.V2.Network.NetworkSecurityRule.Definition.IWithSourceAddress; + } + + /// + /// Blocks outbound traffic. + /// + /// the next stage of the security rule definition + Microsoft.Azure.Management.V2.Network.NetworkSecurityRule.UpdateDefinition.IWithSourceAddress Microsoft.Azure.Management.V2.Network.NetworkSecurityRule.UpdateDefinition.IWithDirectionAccess.DenyOutbound () { + return this.DenyOutbound() as Microsoft.Azure.Management.V2.Network.NetworkSecurityRule.UpdateDefinition.IWithSourceAddress; + } + + /// + /// Allows inbound traffic. + /// + /// the next stage of the security rule definition + Microsoft.Azure.Management.V2.Network.NetworkSecurityRule.UpdateDefinition.IWithSourceAddress Microsoft.Azure.Management.V2.Network.NetworkSecurityRule.UpdateDefinition.IWithDirectionAccess.AllowInbound () { + return this.AllowInbound() as Microsoft.Azure.Management.V2.Network.NetworkSecurityRule.UpdateDefinition.IWithSourceAddress; + } + + /// + /// Allows outbound traffic. + /// + /// the next stage of the security rule definition + Microsoft.Azure.Management.V2.Network.NetworkSecurityRule.UpdateDefinition.IWithSourceAddress Microsoft.Azure.Management.V2.Network.NetworkSecurityRule.UpdateDefinition.IWithDirectionAccess.AllowOutbound () { + return this.AllowOutbound() as Microsoft.Azure.Management.V2.Network.NetworkSecurityRule.UpdateDefinition.IWithSourceAddress; + } + + /// + /// Blocks inbound traffic. + /// + /// the next stage of the security rule definition + Microsoft.Azure.Management.V2.Network.NetworkSecurityRule.UpdateDefinition.IWithSourceAddress Microsoft.Azure.Management.V2.Network.NetworkSecurityRule.UpdateDefinition.IWithDirectionAccess.DenyInbound () { + return this.DenyInbound() as Microsoft.Azure.Management.V2.Network.NetworkSecurityRule.UpdateDefinition.IWithSourceAddress; + } + + Microsoft.Azure.Management.V2.Network.NetworkSecurityGroup.Definition.IWithCreate Microsoft.Azure.Management.V2.Resource.Core.ChildResource.Definition.IInDefinition.Attach () { + return this.Attach() as Microsoft.Azure.Management.V2.Network.NetworkSecurityGroup.Definition.IWithCreate; + } + + /// the type of access the rule enforces + string Microsoft.Azure.Management.V2.Network.INetworkSecurityRule.Access + { + get + { + return this.Access as string; + } + } + /// the source port range that the rule applies to, in the format "##-##", where "*" means "any" + string Microsoft.Azure.Management.V2.Network.INetworkSecurityRule.SourcePortRange + { + get + { + return this.SourcePortRange as string; + } + } + /// the destination port range that the rule applies to, in the format "##-##", where "*" means any + string Microsoft.Azure.Management.V2.Network.INetworkSecurityRule.DestinationPortRange + { + get + { + return this.DestinationPortRange as string; + } + } + /// the network protocol the rule applies to + string Microsoft.Azure.Management.V2.Network.INetworkSecurityRule.Protocol + { + get + { + return this.Protocol as string; + } + } + /// the source address prefix the rule applies to, expressed using the CIDR notation in the format: "###.###.###.###/##", + /// and "*" means "any" + string Microsoft.Azure.Management.V2.Network.INetworkSecurityRule.SourceAddressPrefix + { + get + { + return this.SourceAddressPrefix as string; + } + } + /// the user-defined description of the security rule + string Microsoft.Azure.Management.V2.Network.INetworkSecurityRule.Description + { + get + { + return this.Description as string; + } + } + /// the destination address prefix the rule applies to, expressed using the CIDR notation in the format: "###.###.###.###/##", + /// and "*" means "any" + string Microsoft.Azure.Management.V2.Network.INetworkSecurityRule.DestinationAddressPrefix + { + get + { + return this.DestinationAddressPrefix as string; + } + } + /// the priority number of this rule based on which this rule will be applied relative to the priority numbers of any other rules specified + /// for this network security group + int? Microsoft.Azure.Management.V2.Network.INetworkSecurityRule.Priority + { + get + { + return this.Priority; + } + } + /// the network traffic direction the rule applies to + string Microsoft.Azure.Management.V2.Network.INetworkSecurityRule.Direction + { + get + { + return this.Direction as string; + } + } + /// + /// Specifies that the rule applies to any traffic source address. + /// + /// the next stage of the security rule definition + Microsoft.Azure.Management.V2.Network.NetworkSecurityRule.Definition.IWithSourcePort Microsoft.Azure.Management.V2.Network.NetworkSecurityRule.Definition.IWithSourceAddress.FromAnyAddress () { + return this.FromAnyAddress() as Microsoft.Azure.Management.V2.Network.NetworkSecurityRule.Definition.IWithSourcePort; + } + + /// + /// Specifies the traffic source address prefix to which this rule applies. + /// + /// cidr an IP address prefix expressed in the CIDR notation + /// the next stage of the security rule definition + Microsoft.Azure.Management.V2.Network.NetworkSecurityRule.Definition.IWithSourcePort Microsoft.Azure.Management.V2.Network.NetworkSecurityRule.Definition.IWithSourceAddress.FromAddress (string cidr) { + return this.FromAddress( cidr) as Microsoft.Azure.Management.V2.Network.NetworkSecurityRule.Definition.IWithSourcePort; + } + + /// + /// Specifies that the rule applies to any traffic source address. + /// + /// the next stage of the security rule definition + Microsoft.Azure.Management.V2.Network.NetworkSecurityRule.UpdateDefinition.IWithSourcePort Microsoft.Azure.Management.V2.Network.NetworkSecurityRule.UpdateDefinition.IWithSourceAddress.FromAnyAddress () { + return this.FromAnyAddress() as Microsoft.Azure.Management.V2.Network.NetworkSecurityRule.UpdateDefinition.IWithSourcePort; + } + + /// + /// Specifies the traffic source address prefix to which this rule applies. + /// + /// cidr an IP address prefix expressed in the CIDR notation + /// the next stage of the security rule definition + Microsoft.Azure.Management.V2.Network.NetworkSecurityRule.UpdateDefinition.IWithSourcePort Microsoft.Azure.Management.V2.Network.NetworkSecurityRule.UpdateDefinition.IWithSourceAddress.FromAddress (string cidr) { + return this.FromAddress( cidr) as Microsoft.Azure.Management.V2.Network.NetworkSecurityRule.UpdateDefinition.IWithSourcePort; + } + + /// + /// Blocks outbound traffic. + /// + /// the next stage of the security rule definition + Microsoft.Azure.Management.V2.Network.NetworkSecurityRule.Update.IUpdate Microsoft.Azure.Management.V2.Network.NetworkSecurityRule.Update.IWithDirectionAccess.DenyOutbound () { + return this.DenyOutbound() as Microsoft.Azure.Management.V2.Network.NetworkSecurityRule.Update.IUpdate; + } + + /// + /// Allows inbound traffic. + /// + /// the next stage of the security rule definition + Microsoft.Azure.Management.V2.Network.NetworkSecurityRule.Update.IUpdate Microsoft.Azure.Management.V2.Network.NetworkSecurityRule.Update.IWithDirectionAccess.AllowInbound () { + return this.AllowInbound() as Microsoft.Azure.Management.V2.Network.NetworkSecurityRule.Update.IUpdate; + } + + /// + /// Allows outbound traffic. + /// + /// the next stage of the security rule definition + Microsoft.Azure.Management.V2.Network.NetworkSecurityRule.Update.IUpdate Microsoft.Azure.Management.V2.Network.NetworkSecurityRule.Update.IWithDirectionAccess.AllowOutbound () { + return this.AllowOutbound() as Microsoft.Azure.Management.V2.Network.NetworkSecurityRule.Update.IUpdate; + } + + /// + /// Blocks inbound traffic. + /// + /// the next stage of the security rule definition + Microsoft.Azure.Management.V2.Network.NetworkSecurityRule.Update.IUpdate Microsoft.Azure.Management.V2.Network.NetworkSecurityRule.Update.IWithDirectionAccess.DenyInbound () { + return this.DenyInbound() as Microsoft.Azure.Management.V2.Network.NetworkSecurityRule.Update.IUpdate; + } + + /// + /// Specifies the protocol that this rule applies to. + /// + /// protocol one of the supported protocols + /// the next stage of the security rule definition + Microsoft.Azure.Management.V2.Network.NetworkSecurityRule.Update.IUpdate Microsoft.Azure.Management.V2.Network.NetworkSecurityRule.Update.IWithProtocol.WithProtocol (string protocol) { + return this.WithProtocol( protocol) as Microsoft.Azure.Management.V2.Network.NetworkSecurityRule.Update.IUpdate; + } + + /// + /// Makes this rule apply to any supported protocol. + /// + /// the next stage of the security rule definition + Microsoft.Azure.Management.V2.Network.NetworkSecurityRule.Update.IUpdate Microsoft.Azure.Management.V2.Network.NetworkSecurityRule.Update.IWithProtocol.WithAnyProtocol () { + return this.WithAnyProtocol() as Microsoft.Azure.Management.V2.Network.NetworkSecurityRule.Update.IUpdate; + } + + /// + /// Specifies the traffic destination address range to which this rule applies. + /// + /// cidr an IP address range expressed in the CIDR notation + /// the next stage of the security rule definition + Microsoft.Azure.Management.V2.Network.NetworkSecurityRule.Update.IUpdate Microsoft.Azure.Management.V2.Network.NetworkSecurityRule.Update.IWithDestinationAddress.ToAddress (string cidr) { + return this.ToAddress( cidr) as Microsoft.Azure.Management.V2.Network.NetworkSecurityRule.Update.IUpdate; + } + + /// + /// Makes the rule apply to any traffic destination address. + /// + /// the next stage of the security rule definition + Microsoft.Azure.Management.V2.Network.NetworkSecurityRule.Update.IUpdate Microsoft.Azure.Management.V2.Network.NetworkSecurityRule.Update.IWithDestinationAddress.ToAnyAddress () { + return this.ToAnyAddress() as Microsoft.Azure.Management.V2.Network.NetworkSecurityRule.Update.IUpdate; + } + + /// + /// Specifies the source port to which this rule applies. + /// + /// port the source port number + /// the next stage of the security rule definition + Microsoft.Azure.Management.V2.Network.NetworkSecurityRule.Definition.IWithDestinationAddress Microsoft.Azure.Management.V2.Network.NetworkSecurityRule.Definition.IWithSourcePort.FromPort (int port) { + return this.FromPort( port) as Microsoft.Azure.Management.V2.Network.NetworkSecurityRule.Definition.IWithDestinationAddress; + } + + /// + /// Specifies the source port range to which this rule applies. + /// + /// from the starting port number + /// to the ending port number + /// the next stage of the security rule definition + Microsoft.Azure.Management.V2.Network.NetworkSecurityRule.Definition.IWithDestinationAddress Microsoft.Azure.Management.V2.Network.NetworkSecurityRule.Definition.IWithSourcePort.FromPortRange (int from, int to) { + return this.FromPortRange( from, to) as Microsoft.Azure.Management.V2.Network.NetworkSecurityRule.Definition.IWithDestinationAddress; + } + + /// + /// Makes this rule apply to any source port. + /// + /// the next stage of the security rule definition + Microsoft.Azure.Management.V2.Network.NetworkSecurityRule.Definition.IWithDestinationAddress Microsoft.Azure.Management.V2.Network.NetworkSecurityRule.Definition.IWithSourcePort.FromAnyPort () { + return this.FromAnyPort() as Microsoft.Azure.Management.V2.Network.NetworkSecurityRule.Definition.IWithDestinationAddress; + } + + /// + /// Specifies the source port to which this rule applies. + /// + /// port the source port number + /// the next stage of the security rule definition + Microsoft.Azure.Management.V2.Network.NetworkSecurityRule.UpdateDefinition.IWithDestinationAddress Microsoft.Azure.Management.V2.Network.NetworkSecurityRule.UpdateDefinition.IWithSourcePort.FromPort (int port) { + return this.FromPort( port) as Microsoft.Azure.Management.V2.Network.NetworkSecurityRule.UpdateDefinition.IWithDestinationAddress; + } + + /// + /// Specifies the source port range to which this rule applies. + /// + /// from the starting port number + /// to the ending port number + /// the next stage of the security rule definition + Microsoft.Azure.Management.V2.Network.NetworkSecurityRule.UpdateDefinition.IWithDestinationAddress Microsoft.Azure.Management.V2.Network.NetworkSecurityRule.UpdateDefinition.IWithSourcePort.FromPortRange (int from, int to) { + return this.FromPortRange( from, to) as Microsoft.Azure.Management.V2.Network.NetworkSecurityRule.UpdateDefinition.IWithDestinationAddress; + } + + /// + /// Makes this rule apply to any source port. + /// + /// the next stage of the security rule definition + Microsoft.Azure.Management.V2.Network.NetworkSecurityRule.UpdateDefinition.IWithDestinationAddress Microsoft.Azure.Management.V2.Network.NetworkSecurityRule.UpdateDefinition.IWithSourcePort.FromAnyPort () { + return this.FromAnyPort() as Microsoft.Azure.Management.V2.Network.NetworkSecurityRule.UpdateDefinition.IWithDestinationAddress; + } + + /// + /// Specifies the traffic destination address range to which this rule applies. + /// + /// cidr an IP address range expressed in the CIDR notation + /// the next stage of the security rule definition + Microsoft.Azure.Management.V2.Network.NetworkSecurityRule.Definition.IWithDestinationPort Microsoft.Azure.Management.V2.Network.NetworkSecurityRule.Definition.IWithDestinationAddress.ToAddress (string cidr) { + return this.ToAddress( cidr) as Microsoft.Azure.Management.V2.Network.NetworkSecurityRule.Definition.IWithDestinationPort; + } + + /// + /// Makes the rule apply to any traffic destination address. + /// + /// the next stage of the security rule definition + Microsoft.Azure.Management.V2.Network.NetworkSecurityRule.Definition.IWithDestinationPort Microsoft.Azure.Management.V2.Network.NetworkSecurityRule.Definition.IWithDestinationAddress.ToAnyAddress () { + return this.ToAnyAddress() as Microsoft.Azure.Management.V2.Network.NetworkSecurityRule.Definition.IWithDestinationPort; + } + + /// + /// Specifies the traffic destination address range to which this rule applies. + /// + /// cidr an IP address range expressed in the CIDR notation + /// the next stage of the security rule definition + Microsoft.Azure.Management.V2.Network.NetworkSecurityRule.UpdateDefinition.IWithDestinationPort Microsoft.Azure.Management.V2.Network.NetworkSecurityRule.UpdateDefinition.IWithDestinationAddress.ToAddress (string cidr) { + return this.ToAddress( cidr) as Microsoft.Azure.Management.V2.Network.NetworkSecurityRule.UpdateDefinition.IWithDestinationPort; + } + + /// + /// Makes the rule apply to any traffic destination address. + /// + /// the next stage of the security rule definition + Microsoft.Azure.Management.V2.Network.NetworkSecurityRule.UpdateDefinition.IWithDestinationPort Microsoft.Azure.Management.V2.Network.NetworkSecurityRule.UpdateDefinition.IWithDestinationAddress.ToAnyAddress () { + return this.ToAnyAddress() as Microsoft.Azure.Management.V2.Network.NetworkSecurityRule.UpdateDefinition.IWithDestinationPort; + } + + /// + /// Specifies the destination port range to which this rule applies. + /// + /// from the starting port number + /// to the ending port number + /// the next stage of the security rule definition + Microsoft.Azure.Management.V2.Network.NetworkSecurityRule.Definition.IWithProtocol Microsoft.Azure.Management.V2.Network.NetworkSecurityRule.Definition.IWithDestinationPort.ToPortRange (int from, int to) { + return this.ToPortRange( from, to) as Microsoft.Azure.Management.V2.Network.NetworkSecurityRule.Definition.IWithProtocol; + } + + /// + /// Specifies the destination port to which this rule applies. + /// + /// port the destination port number + /// the next stage of the security rule definition + Microsoft.Azure.Management.V2.Network.NetworkSecurityRule.Definition.IWithProtocol Microsoft.Azure.Management.V2.Network.NetworkSecurityRule.Definition.IWithDestinationPort.ToPort (int port) { + return this.ToPort( port) as Microsoft.Azure.Management.V2.Network.NetworkSecurityRule.Definition.IWithProtocol; + } + + /// + /// Makes this rule apply to any destination port. + /// + /// the next stage of the security rule definition + Microsoft.Azure.Management.V2.Network.NetworkSecurityRule.Definition.IWithProtocol Microsoft.Azure.Management.V2.Network.NetworkSecurityRule.Definition.IWithDestinationPort.ToAnyPort () { + return this.ToAnyPort() as Microsoft.Azure.Management.V2.Network.NetworkSecurityRule.Definition.IWithProtocol; + } + + /// + /// Specifies the destination port range to which this rule applies. + /// + /// from the starting port number + /// to the ending port number + /// the next stage of the security rule definition + Microsoft.Azure.Management.V2.Network.NetworkSecurityRule.UpdateDefinition.IWithProtocol Microsoft.Azure.Management.V2.Network.NetworkSecurityRule.UpdateDefinition.IWithDestinationPort.ToPortRange (int from, int to) { + return this.ToPortRange( from, to) as Microsoft.Azure.Management.V2.Network.NetworkSecurityRule.UpdateDefinition.IWithProtocol; + } + + /// + /// Specifies the destination port to which this rule applies. + /// + /// port the destination port number + /// the next stage of the security rule definition + Microsoft.Azure.Management.V2.Network.NetworkSecurityRule.UpdateDefinition.IWithProtocol Microsoft.Azure.Management.V2.Network.NetworkSecurityRule.UpdateDefinition.IWithDestinationPort.ToPort (int port) { + return this.ToPort( port) as Microsoft.Azure.Management.V2.Network.NetworkSecurityRule.UpdateDefinition.IWithProtocol; + } + + /// + /// Makes this rule apply to any destination port. + /// + /// the next stage of the security rule definition + Microsoft.Azure.Management.V2.Network.NetworkSecurityRule.UpdateDefinition.IWithProtocol Microsoft.Azure.Management.V2.Network.NetworkSecurityRule.UpdateDefinition.IWithDestinationPort.ToAnyPort () { + return this.ToAnyPort() as Microsoft.Azure.Management.V2.Network.NetworkSecurityRule.UpdateDefinition.IWithProtocol; + } + + /// + /// Specifies the destination port range to which this rule applies. + /// + /// from the starting port number + /// to the ending port number + /// the next stage of the security rule definition + Microsoft.Azure.Management.V2.Network.NetworkSecurityRule.Update.IUpdate Microsoft.Azure.Management.V2.Network.NetworkSecurityRule.Update.IWithDestinationPort.ToPortRange (int from, int to) { + return this.ToPortRange( from, to) as Microsoft.Azure.Management.V2.Network.NetworkSecurityRule.Update.IUpdate; + } + + /// + /// Specifies the destination port to which this rule applies. + /// + /// port the destination port number + /// the next stage of the security rule definition + Microsoft.Azure.Management.V2.Network.NetworkSecurityRule.Update.IUpdate Microsoft.Azure.Management.V2.Network.NetworkSecurityRule.Update.IWithDestinationPort.ToPort (int port) { + return this.ToPort( port) as Microsoft.Azure.Management.V2.Network.NetworkSecurityRule.Update.IUpdate; + } + + /// + /// Makes this rule apply to any destination port. + /// + /// the next stage of the security rule definition + Microsoft.Azure.Management.V2.Network.NetworkSecurityRule.Update.IUpdate Microsoft.Azure.Management.V2.Network.NetworkSecurityRule.Update.IWithDestinationPort.ToAnyPort () { + return this.ToAnyPort() as Microsoft.Azure.Management.V2.Network.NetworkSecurityRule.Update.IUpdate; + } + + /// the name of the child resource + string Microsoft.Azure.Management.V2.Resource.Core.IChildResource.Name + { + get + { + return this.Name as string; + } + } + } +} \ No newline at end of file diff --git a/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Domain/InterfaceImpl/NetworksImpl.cs b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Domain/InterfaceImpl/NetworksImpl.cs new file mode 100644 index 000000000..fb8510015 --- /dev/null +++ b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Domain/InterfaceImpl/NetworksImpl.cs @@ -0,0 +1,81 @@ +/** +* Copyright (c) Microsoft Corporation. All rights reserved. +* Licensed under the MIT License. See License.txt in the project root for +* license information. +*/ + +namespace Microsoft.Azure.Management.V2.Network +{ + + using Microsoft.Azure.Management.V2.Resource.Core.CollectionActions; + using Microsoft.Azure.Management.V2.Resource; + using Microsoft.Azure.Management.V2.Resource.Core; + using Microsoft.Azure.Management.Network.Models; + public partial class NetworksImpl + { + /// + /// Begins a definition for a new resource. + ///

+ /// This is the beginning of the builder pattern used to create top level resources + /// in Azure. The final method completing the definition and starting the actual resource creation + /// process in Azure is {@link Creatable#create()}. + ///

+ /// Note that the {@link Creatable#create()} method is + /// only available at the stage of the resource definition that has the minimum set of input + /// parameters specified. If you do not see {@link Creatable#create()} among the available methods, it + /// means you have not yet specified all the required input settings. Input settings generally begin + /// with the word "with", for example: .withNewResourceGroup() and return the next stage + /// of the resource definition, as an interface in the "fluent interface" style. + ///

+ /// name the name of the new resource + /// the first stage of the new resource definition + Microsoft.Azure.Management.V2.Network.Network.Definition.IBlank Microsoft.Azure.Management.V2.Resource.Core.CollectionActions.ISupportsCreating.Define (string name) { + return this.Define( name) as Microsoft.Azure.Management.V2.Network.Network.Definition.IBlank; + } + + /// + /// Deletes a resource from Azure, identifying it by its resource ID. + /// + /// id the resource ID of the resource to delete + void Microsoft.Azure.Management.V2.Resource.Core.CollectionActions.ISupportsDeleting.Delete (string id) { + this.Delete( id); + } + + /// + /// Lists resources of the specified type in the specified resource group. + /// + /// resourceGroupName the name of the resource group to list the resources from + /// the list of resources + Microsoft.Azure.Management.V2.Resource.Core.PagedList Microsoft.Azure.Management.V2.Resource.Core.CollectionActions.ISupportsListingByGroup.ListByGroup (string resourceGroupName) { + return this.ListByGroup( resourceGroupName) as Microsoft.Azure.Management.V2.Resource.Core.PagedList; + } + + /// + /// Gets the information about a resource from Azure based on the resource name and the name of its resource group. + /// + /// resourceGroupName the name of the resource group the resource is in + /// name the name of the resource. (Note, this is not the ID) + /// an immutable representation of the resource + Microsoft.Azure.Management.V2.Network.INetwork Microsoft.Azure.Management.V2.Resource.Core.CollectionActions.ISupportsGettingByGroup.GetByGroup (string resourceGroupName, string name) { + return this.GetByGroup( resourceGroupName, name) as Microsoft.Azure.Management.V2.Network.INetwork; + } + + /// + /// Deletes a resource from Azure, identifying it by its name and its resource group. + /// + /// groupName The group the resource is part of + /// name The name of the resource + void Microsoft.Azure.Management.V2.Resource.Core.CollectionActions.ISupportsDeletingByGroup.Delete (string groupName, string name) { + this.Delete( groupName, name); + } + + /// + /// Lists all the resources of the specified type in the currently selected subscription. + /// + /// list of resources + Microsoft.Azure.Management.V2.Resource.Core.PagedList Microsoft.Azure.Management.V2.Resource.Core.CollectionActions.ISupportsListing.List () { + return this.List() as Microsoft.Azure.Management.V2.Resource.Core.PagedList; + } + + } +} \ No newline at end of file diff --git a/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Domain/InterfaceImpl/NicIpConfigurationImpl.cs b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Domain/InterfaceImpl/NicIpConfigurationImpl.cs new file mode 100644 index 000000000..2275c0286 --- /dev/null +++ b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Domain/InterfaceImpl/NicIpConfigurationImpl.cs @@ -0,0 +1,429 @@ +/** +* Copyright (c) Microsoft Corporation. All rights reserved. +* Licensed under the MIT License. See License.txt in the project root for +* license information. +*/ + +namespace Microsoft.Azure.Management.V2.Network +{ + + using Microsoft.Azure.Management.V2.Resource.Core.ChildResource.Update; + using Microsoft.Azure.Management.V2.Resource.Core; + using Microsoft.Azure.Management.V2.Network.NicIpConfiguration.UpdateDefinition; + using Microsoft.Azure.Management.V2.Network.NicIpConfiguration.Definition; + using Microsoft.Azure.Management.Network.Models; + using System.Collections.Generic; + using Microsoft.Azure.Management.V2.Network.NicIpConfiguration.Update; + using Microsoft.Azure.Management.V2.Resource.Core.ResourceActions; + using Microsoft.Azure.Management.V2.Resource.Core.ChildResource.Definition; + using Microsoft.Azure.Management.V2.Network.NetworkInterface.Definition; + using Microsoft.Azure.Management.V2.Network.NetworkInterface.Update; + using Microsoft.Azure; + public partial class NicIpConfigurationImpl + { + /// + /// Specifies that remove any public IP associated with the IP configuration. + /// + /// the next stage of the network interface IP configuration update + Microsoft.Azure.Management.V2.Network.NicIpConfiguration.Update.IUpdate Microsoft.Azure.Management.V2.Network.NicIpConfiguration.Update.IWithPublicIpAddress.WithoutPublicIpAddress () { + return this.WithoutPublicIpAddress() as Microsoft.Azure.Management.V2.Network.NicIpConfiguration.Update.IUpdate; + } + + /// + /// Create a new public IP address to associate the network interface IP configuration with, + /// based on the provided definition. + ///

+ /// If there is public IP associated with the IP configuration then that will be removed in + /// favour of this. + ///

+ /// creatable a creatable definition for a new public IP + /// the next stage of the network interface IP configuration update + Microsoft.Azure.Management.V2.Network.NicIpConfiguration.Update.IUpdate Microsoft.Azure.Management.V2.Network.NicIpConfiguration.Update.IWithPublicIpAddress.WithNewPublicIpAddress (ICreatable creatable) { + return this.WithNewPublicIpAddress( creatable) as Microsoft.Azure.Management.V2.Network.NicIpConfiguration.Update.IUpdate; + } + + /// + /// Creates a new public IP address in the same region and group as the resource and associate it + /// with the IP configuration. + ///

+ /// The internal name and DNS label for the public IP address will be derived from the network interface + /// name, if there is an existing public IP association then that will be removed in favour of this. + ///

+ /// the next stage of the network interface IP configuration update + Microsoft.Azure.Management.V2.Network.NicIpConfiguration.Update.IUpdate Microsoft.Azure.Management.V2.Network.NicIpConfiguration.Update.IWithPublicIpAddress.WithNewPublicIpAddress () { + return this.WithNewPublicIpAddress() as Microsoft.Azure.Management.V2.Network.NicIpConfiguration.Update.IUpdate; + } + + /// + /// Creates a new public IP address in the same region and group as the resource, with the specified DNS + /// label and associate it with the IP configuration. + ///

+ /// The internal name for the public IP address will be derived from the DNS label, if there is an existing + /// public IP association then that will be removed in favour of this + ///

+ /// leafDnsLabel the leaf domain label + /// the next stage of the network interface IP configuration update + Microsoft.Azure.Management.V2.Network.NicIpConfiguration.Update.IUpdate Microsoft.Azure.Management.V2.Network.NicIpConfiguration.Update.IWithPublicIpAddress.WithNewPublicIpAddress (string leafDnsLabel) { + return this.WithNewPublicIpAddress( leafDnsLabel) as Microsoft.Azure.Management.V2.Network.NicIpConfiguration.Update.IUpdate; + } + + /// + /// Create a new virtual network to associate with the network interface IP configuration, + /// based on the provided definition. + /// + /// creatable a creatable definition for a new virtual network + /// the next stage of the network interface IP configuration definition + Microsoft.Azure.Management.V2.Network.NicIpConfiguration.UpdateDefinition.IWithPrivateIp Microsoft.Azure.Management.V2.Network.NicIpConfiguration.UpdateDefinition.IWithNetwork.WithNewNetwork (ICreatable creatable) { + return this.WithNewNetwork( creatable) as Microsoft.Azure.Management.V2.Network.NicIpConfiguration.UpdateDefinition.IWithPrivateIp; + } + + /// + /// Creates a new virtual network to associate with the network interface IP configuration. + ///

+ /// the virtual network will be created in the same resource group and region as of parent + /// network interface, it will be created with the specified address space and a default subnet + /// covering the entirety of the network IP address space. + ///

+ /// name the name of the new virtual network + /// addressSpace the address space for rhe virtual network + /// the next stage of the network interface IP configuration definition + Microsoft.Azure.Management.V2.Network.NicIpConfiguration.UpdateDefinition.IWithPrivateIp Microsoft.Azure.Management.V2.Network.NicIpConfiguration.UpdateDefinition.IWithNetwork.WithNewNetwork (string name, string addressSpace) { + return this.WithNewNetwork( name, addressSpace) as Microsoft.Azure.Management.V2.Network.NicIpConfiguration.UpdateDefinition.IWithPrivateIp; + } + + /// + /// Creates a new virtual network to associate with the network interface IP configuration. + ///

+ /// the virtual network will be created in the same resource group and region as of parent network interface, + /// it will be created with the specified address space and a default subnet covering the entirety of the + /// network IP address space. + ///

+ /// addressSpace the address space for the virtual network + /// the next stage of the network interface IP configuration definition + Microsoft.Azure.Management.V2.Network.NicIpConfiguration.UpdateDefinition.IWithPrivateIp Microsoft.Azure.Management.V2.Network.NicIpConfiguration.UpdateDefinition.IWithNetwork.WithNewNetwork (string addressSpace) { + return this.WithNewNetwork( addressSpace) as Microsoft.Azure.Management.V2.Network.NicIpConfiguration.UpdateDefinition.IWithPrivateIp; + } + + /// + /// Associate an existing virtual network with the network interface IP configuration. + /// + /// network an existing virtual network + /// the next stage of the network interface IP configuration definition + Microsoft.Azure.Management.V2.Network.NicIpConfiguration.UpdateDefinition.IWithSubnet Microsoft.Azure.Management.V2.Network.NicIpConfiguration.UpdateDefinition.IWithNetwork.WithExistingNetwork (INetwork network) { + return this.WithExistingNetwork( network) as Microsoft.Azure.Management.V2.Network.NicIpConfiguration.UpdateDefinition.IWithSubnet; + } + + /// + /// Create a new virtual network to associate with the network interface IP configuration, + /// based on the provided definition. + /// + /// creatable a creatable definition for a new virtual network + /// the next stage of the network interface IP configuration definition + Microsoft.Azure.Management.V2.Network.NicIpConfiguration.Definition.IWithPrivateIp Microsoft.Azure.Management.V2.Network.NicIpConfiguration.Definition.IWithNetwork.WithNewNetwork (ICreatable creatable) { + return this.WithNewNetwork( creatable) as Microsoft.Azure.Management.V2.Network.NicIpConfiguration.Definition.IWithPrivateIp; + } + + /// + /// Creates a new virtual network to associate with the network interface IP configuration. + ///

+ /// the virtual network will be created in the same resource group and region as of parent + /// network interface, it will be created with the specified address space and a default subnet + /// covering the entirety of the network IP address space. + ///

+ /// name the name of the new virtual network + /// addressSpace the address space for rhe virtual network + /// the next stage of the network interface IP configuration definition + Microsoft.Azure.Management.V2.Network.NicIpConfiguration.Definition.IWithPrivateIp Microsoft.Azure.Management.V2.Network.NicIpConfiguration.Definition.IWithNetwork.WithNewNetwork (string name, string addressSpace) { + return this.WithNewNetwork( name, addressSpace) as Microsoft.Azure.Management.V2.Network.NicIpConfiguration.Definition.IWithPrivateIp; + } + + /// + /// Creates a new virtual network to associate with the network interface IP configuration. + ///

+ /// the virtual network will be created in the same resource group and region as of parent network interface, + /// it will be created with the specified address space and a default subnet covering the entirety of the + /// network IP address space. + ///

+ /// addressSpace the address space for the virtual network + /// the next stage of the network interface IP configuration definition + Microsoft.Azure.Management.V2.Network.NicIpConfiguration.Definition.IWithPrivateIp Microsoft.Azure.Management.V2.Network.NicIpConfiguration.Definition.IWithNetwork.WithNewNetwork (string addressSpace) { + return this.WithNewNetwork( addressSpace) as Microsoft.Azure.Management.V2.Network.NicIpConfiguration.Definition.IWithPrivateIp; + } + + /// + /// Associate an existing virtual network with the network interface IP configuration. + /// + /// network an existing virtual network + /// the next stage of the network interface IP configuration definition + Microsoft.Azure.Management.V2.Network.NicIpConfiguration.Definition.IWithSubnet Microsoft.Azure.Management.V2.Network.NicIpConfiguration.Definition.IWithNetwork.WithExistingNetwork (INetwork network) { + return this.WithExistingNetwork( network) as Microsoft.Azure.Management.V2.Network.NicIpConfiguration.Definition.IWithSubnet; + } + + /// + /// Assigns the specified static private IP address within the specified existing virtual network + /// subnet to the network interface IP configuration. + /// + /// staticPrivateIpAddress the static IP address within the specified subnet to assign to + /// the network interface + /// the next stage of network interface IP configuration definition + Microsoft.Azure.Management.V2.Network.NicIpConfiguration.UpdateDefinition.IWithAttach Microsoft.Azure.Management.V2.Network.NicIpConfiguration.UpdateDefinition.IWithPrivateIp.WithPrivateIpAddressStatic (string staticPrivateIpAddress) { + return this.WithPrivateIpAddressStatic( staticPrivateIpAddress) as Microsoft.Azure.Management.V2.Network.NicIpConfiguration.UpdateDefinition.IWithAttach; + } + + /// + /// Enables dynamic private IP address allocation within the specified existing virtual network + /// subnet for the network interface IP configuration. + /// + /// the next stage of network interface IP configuration definition + Microsoft.Azure.Management.V2.Network.NicIpConfiguration.UpdateDefinition.IWithAttach Microsoft.Azure.Management.V2.Network.NicIpConfiguration.UpdateDefinition.IWithPrivateIp.WithPrivateIpAddressDynamic () { + return this.WithPrivateIpAddressDynamic() as Microsoft.Azure.Management.V2.Network.NicIpConfiguration.UpdateDefinition.IWithAttach; + } + + /// + /// Assigns the specified static private IP address within the specified existing virtual network + /// subnet to the network interface IP configuration. + /// + /// staticPrivateIpAddress the static IP address within the specified subnet to assign to + /// the network interface + /// the next stage of network interface IP configuration definition + Microsoft.Azure.Management.V2.Network.NicIpConfiguration.Definition.IWithAttach Microsoft.Azure.Management.V2.Network.NicIpConfiguration.Definition.IWithPrivateIp.WithPrivateIpAddressStatic (string staticPrivateIpAddress) { + return this.WithPrivateIpAddressStatic( staticPrivateIpAddress) as Microsoft.Azure.Management.V2.Network.NicIpConfiguration.Definition.IWithAttach; + } + + /// + /// Enables dynamic private IP address allocation within the specified existing virtual network + /// subnet for the network interface IP configuration. + /// + /// the next stage of network interface IP configuration definition + Microsoft.Azure.Management.V2.Network.NicIpConfiguration.Definition.IWithAttach Microsoft.Azure.Management.V2.Network.NicIpConfiguration.Definition.IWithPrivateIp.WithPrivateIpAddressDynamic () { + return this.WithPrivateIpAddressDynamic() as Microsoft.Azure.Management.V2.Network.NicIpConfiguration.Definition.IWithAttach; + } + + /// the resource id of the virtual network subnet associated with this IP configuration. + string Microsoft.Azure.Management.V2.Network.INicIpConfiguration.SubnetId + { + get + { + return this.SubnetId as string; + } + } + /// + /// Gets the public IP address associated with this IP configuration. + ///

+ /// This method makes a rest API call to fetch the public IP. + ///

+ /// the public IP associated with this IP configuration or null if there is no public IP associated + Microsoft.Azure.Management.V2.Network.IPublicIpAddress Microsoft.Azure.Management.V2.Network.INicIpConfiguration.PublicIpAddress () { + return this.PublicIpAddress() as Microsoft.Azure.Management.V2.Network.IPublicIpAddress; + } + + /// + /// Gets the resource id of the public IP address associated with this IP configuration. + /// + /// public IP resource ID or null if there is no public IP associated + string Microsoft.Azure.Management.V2.Network.INicIpConfiguration.PublicIpAddressId + { + get + { + return this.PublicIpAddressId as string; + } + } + /// the private IP allocation method (Dynamic, Static) + string Microsoft.Azure.Management.V2.Network.INicIpConfiguration.PrivateIpAllocationMethod + { + get + { + return this.PrivateIpAllocationMethod as string; + } + } + /// + /// Gets the private IP address allocated to this IP configuration. + ///

+ /// The private IP will be within the virtual network subnet of this IP configuration. + ///

+ /// the private IP addresses + string Microsoft.Azure.Management.V2.Network.INicIpConfiguration.PrivateIp + { + get + { + return this.PrivateIp as string; + } + } + /// + /// Gets the virtual network associated with this IP configuration. + ///

+ /// This method makes a rest API call to fetch the public IP. + ///

+ /// the virtual network associated with this this IP configuration. + Microsoft.Azure.Management.V2.Network.INetwork Microsoft.Azure.Management.V2.Network.INicIpConfiguration.Network () { + return this.Network() as Microsoft.Azure.Management.V2.Network.INetwork; + } + + Microsoft.Azure.Management.V2.Network.NetworkInterface.Update.IUpdate Microsoft.Azure.Management.V2.Resource.Core.ChildResource.Update.IInUpdate.Attach () { + return this.Attach() as Microsoft.Azure.Management.V2.Network.NetworkInterface.Update.IUpdate; + } + + Microsoft.Azure.Management.V2.Network.NetworkInterface.Definition.IWithCreate Microsoft.Azure.Management.V2.Resource.Core.ChildResource.Definition.IInDefinition.Attach () { + return this.Attach() as Microsoft.Azure.Management.V2.Network.NetworkInterface.Definition.IWithCreate; + } + + /// the name of the child resource + string Microsoft.Azure.Management.V2.Resource.Core.IChildResource.Name + { + get + { + return this.Name as string; + } + } + /// + /// Specifies the load balancer to associate this IP configuration with. + /// + /// loadBalancer an existing load balancer + /// the next stage of the update + Microsoft.Azure.Management.V2.Network.NicIpConfiguration.Update.IWithBackendAddressPool Microsoft.Azure.Management.V2.Network.NicIpConfiguration.Update.IWithLoadBalancer.WithExistingLoadBalancer (ILoadBalancer loadBalancer) { + return this.WithExistingLoadBalancer( loadBalancer) as Microsoft.Azure.Management.V2.Network.NicIpConfiguration.Update.IWithBackendAddressPool; + } + + /// + /// Associates an existing public IP address with the network interface IP configuration. + /// + /// publicIpAddress an existing public IP address + /// the next stage of the IP configuration definition + Microsoft.Azure.Management.V2.Network.NicIpConfiguration.UpdateDefinition.IWithAttach Microsoft.Azure.Management.V2.Network.NicIpConfiguration.UpdateDefinition.IWithPublicIpAddress.WithExistingPublicIpAddress (IPublicIpAddress publicIpAddress) { + return this.WithExistingPublicIpAddress( publicIpAddress) as Microsoft.Azure.Management.V2.Network.NicIpConfiguration.UpdateDefinition.IWithAttach; + } + + /// + /// Create a new public IP address to associate with the network interface IP configuration, + /// based on the provided definition. + /// + /// creatable a creatable definition for a new public IP + /// the next stage of the network interface IP configuration definition + Microsoft.Azure.Management.V2.Network.NicIpConfiguration.UpdateDefinition.IWithAttach Microsoft.Azure.Management.V2.Network.NicIpConfiguration.UpdateDefinition.IWithPublicIpAddress.WithNewPublicIpAddress (ICreatable creatable) { + return this.WithNewPublicIpAddress( creatable) as Microsoft.Azure.Management.V2.Network.NicIpConfiguration.UpdateDefinition.IWithAttach; + } + + /// + /// Creates a new public IP address in the same region and group as the resource and associate it + /// with with the network interface IP configuration. + ///

+ /// The internal name and DNS label for the public IP address will be derived from the network interface name. + ///

+ /// the next stage of the network interface IP configuration definition + Microsoft.Azure.Management.V2.Network.NicIpConfiguration.UpdateDefinition.IWithAttach Microsoft.Azure.Management.V2.Network.NicIpConfiguration.UpdateDefinition.IWithPublicIpAddress.WithNewPublicIpAddress () { + return this.WithNewPublicIpAddress() as Microsoft.Azure.Management.V2.Network.NicIpConfiguration.UpdateDefinition.IWithAttach; + } + + /// + /// Creates a new public IP address in the same region and group as the resource, with the specified DNS label + /// and associate it with the network interface IP configuration. + ///

+ /// The internal name for the public IP address will be derived from the DNS label. + ///

+ /// leafDnsLabel the leaf domain label + /// tthe next stage of the IP configuration definition + Microsoft.Azure.Management.V2.Network.NicIpConfiguration.UpdateDefinition.IWithAttach Microsoft.Azure.Management.V2.Network.NicIpConfiguration.UpdateDefinition.IWithPublicIpAddress.WithNewPublicIpAddress (string leafDnsLabel) { + return this.WithNewPublicIpAddress( leafDnsLabel) as Microsoft.Azure.Management.V2.Network.NicIpConfiguration.UpdateDefinition.IWithAttach; + } + + /// + /// Associates an existing public IP address with the network interface IP configuration. + /// + /// publicIpAddress an existing public IP address + /// the next stage of the IP configuration definition + Microsoft.Azure.Management.V2.Network.NicIpConfiguration.Definition.IWithAttach Microsoft.Azure.Management.V2.Network.NicIpConfiguration.Definition.IWithPublicIpAddress.WithExistingPublicIpAddress (IPublicIpAddress publicIpAddress) { + return this.WithExistingPublicIpAddress( publicIpAddress) as Microsoft.Azure.Management.V2.Network.NicIpConfiguration.Definition.IWithAttach; + } + + /// + /// Create a new public IP address to associate with the network interface IP configuration, + /// based on the provided definition. + /// + /// creatable a creatable definition for a new public IP + /// the next stage of the network interface IP configuration definition + Microsoft.Azure.Management.V2.Network.NicIpConfiguration.Definition.IWithAttach Microsoft.Azure.Management.V2.Network.NicIpConfiguration.Definition.IWithPublicIpAddress.WithNewPublicIpAddress (ICreatable creatable) { + return this.WithNewPublicIpAddress( creatable) as Microsoft.Azure.Management.V2.Network.NicIpConfiguration.Definition.IWithAttach; + } + + /// + /// Creates a new public IP address in the same region and group as the resource and associate it + /// with with the network interface IP configuration. + ///

+ /// The internal name and DNS label for the public IP address will be derived from the network interface name. + ///

+ /// the next stage of the network interface IP configuration definition + Microsoft.Azure.Management.V2.Network.NicIpConfiguration.Definition.IWithAttach Microsoft.Azure.Management.V2.Network.NicIpConfiguration.Definition.IWithPublicIpAddress.WithNewPublicIpAddress () { + return this.WithNewPublicIpAddress() as Microsoft.Azure.Management.V2.Network.NicIpConfiguration.Definition.IWithAttach; + } + + /// + /// Creates a new public IP address in the same region and group as the resource, with the specified DNS label + /// and associate it with the network interface IP configuration. + ///

+ /// The internal name for the public IP address will be derived from the DNS label. + ///

+ /// leafDnsLabel the leaf domain label + /// tthe next stage of the IP configuration definition + Microsoft.Azure.Management.V2.Network.NicIpConfiguration.Definition.IWithAttach Microsoft.Azure.Management.V2.Network.NicIpConfiguration.Definition.IWithPublicIpAddress.WithNewPublicIpAddress (string leafDnsLabel) { + return this.WithNewPublicIpAddress( leafDnsLabel) as Microsoft.Azure.Management.V2.Network.NicIpConfiguration.Definition.IWithAttach; + } + + /// + /// Assigns the specified static private IP address within the specified existing virtual network + /// subnet to the network interface IP configuration. + /// + /// staticPrivateIpAddress the static IP address within the specified subnet to assign to + /// the IP configuration + /// the next stage of the network interface IP configuration update + Microsoft.Azure.Management.V2.Network.NicIpConfiguration.Update.IUpdate Microsoft.Azure.Management.V2.Network.NicIpConfiguration.Update.IWithPrivateIp.WithPrivateIpAddressStatic (string staticPrivateIpAddress) { + return this.WithPrivateIpAddressStatic( staticPrivateIpAddress) as Microsoft.Azure.Management.V2.Network.NicIpConfiguration.Update.IUpdate; + } + + /// + /// Enables dynamic private IP address allocation within the specified existing virtual network + /// subnet to the network interface IP configuration. + /// + /// the next stage of the network interface IP configuration update + Microsoft.Azure.Management.V2.Network.NicIpConfiguration.Update.IUpdate Microsoft.Azure.Management.V2.Network.NicIpConfiguration.Update.IWithPrivateIp.WithPrivateIpAddressDynamic () { + return this.WithPrivateIpAddressDynamic() as Microsoft.Azure.Management.V2.Network.NicIpConfiguration.Update.IUpdate; + } + + /// + /// Adds this network interface's IP configuration to the provided back end address pool of + /// the specified load balancer. + /// + /// name the name of an existing load balancer back end address pool + /// the next stage of the update + Microsoft.Azure.Management.V2.Network.NicIpConfiguration.Update.IUpdate Microsoft.Azure.Management.V2.Network.NicIpConfiguration.Update.IWithBackendAddressPool.WithBackendAddressPool (string name) { + return this.WithBackendAddressPool( name) as Microsoft.Azure.Management.V2.Network.NicIpConfiguration.Update.IUpdate; + } + + /// + /// Associate a subnet with the network interface IP configuration. + /// + /// name the subnet name + /// the next stage of the network interface IP configuration definition + Microsoft.Azure.Management.V2.Network.NicIpConfiguration.UpdateDefinition.IWithPrivateIp Microsoft.Azure.Management.V2.Network.NicIpConfiguration.UpdateDefinition.IWithSubnet.WithSubnet (string name) { + return this.WithSubnet( name) as Microsoft.Azure.Management.V2.Network.NicIpConfiguration.UpdateDefinition.IWithPrivateIp; + } + + /// + /// Associate a subnet with the network interface IP configuration. + /// + /// name the subnet name + /// the next stage of the network interface IP configuration definition + Microsoft.Azure.Management.V2.Network.NicIpConfiguration.Definition.IWithPrivateIp Microsoft.Azure.Management.V2.Network.NicIpConfiguration.Definition.IWithSubnet.WithSubnet (string name) { + return this.WithSubnet( name) as Microsoft.Azure.Management.V2.Network.NicIpConfiguration.Definition.IWithPrivateIp; + } + + /// + /// Associate a subnet with the network interface IP configuration. + /// + /// name the subnet name + /// the next stage of the network interface IP configuration update + Microsoft.Azure.Management.V2.Network.NicIpConfiguration.Update.IUpdate Microsoft.Azure.Management.V2.Network.NicIpConfiguration.Update.IWithSubnet.WithSubnet (string name) { + return this.WithSubnet( name) as Microsoft.Azure.Management.V2.Network.NicIpConfiguration.Update.IUpdate; + } + + } +} \ No newline at end of file diff --git a/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Domain/InterfaceImpl/PublicIpAddressImpl.cs b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Domain/InterfaceImpl/PublicIpAddressImpl.cs new file mode 100644 index 000000000..1ed456e9d --- /dev/null +++ b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Domain/InterfaceImpl/PublicIpAddressImpl.cs @@ -0,0 +1,230 @@ +/** +* Copyright (c) Microsoft Corporation. All rights reserved. +* Licensed under the MIT License. See License.txt in the project root for +* license information. +*/ + +namespace Microsoft.Azure.Management.V2.Network +{ + + using Microsoft.Azure.Management.V2.Network.PublicIpAddress.Definition; + using Microsoft.Azure.Management.V2.Network.PublicIpAddress.Update; + using System.Threading.Tasks; + using Microsoft.Azure.Management.Network.Models; + using System.Threading; + using Microsoft.Azure.Management.V2.Resource; + using Microsoft.Rest; + using Microsoft.Azure.Management.V2.Resource.Core.ResourceActions; + using Microsoft.Azure.Management.V2.Resource.Core; + public partial class PublicIpAddressImpl + { + /// + /// Refreshes the resource to sync with Azure. + /// + /// the refreshed resource + Microsoft.Azure.Management.V2.Network.IPublicIpAddress Microsoft.Azure.Management.V2.Resource.Core.ResourceActions.IRefreshable.Refresh () { + return this.Refresh() as Microsoft.Azure.Management.V2.Network.IPublicIpAddress; + } + + /// the assigned reverse FQDN, if any + string Microsoft.Azure.Management.V2.Network.IPublicIpAddress.ReverseFqdn + { + get + { + return this.ReverseFqdn as string; + } + } + /// the assigned leaf domain label + string Microsoft.Azure.Management.V2.Network.IPublicIpAddress.LeafDomainLabel + { + get + { + return this.LeafDomainLabel as string; + } + } + /// the assigned FQDN (fully qualified domain name) + string Microsoft.Azure.Management.V2.Network.IPublicIpAddress.Fqdn + { + get + { + return this.Fqdn as string; + } + } + /// the idle connection timeout setting (in minutes) + int? Microsoft.Azure.Management.V2.Network.IPublicIpAddress.IdleTimeoutInMinutes + { + get + { + return this.IdleTimeoutInMinutes; + } + } + /// the assigned IP address + string Microsoft.Azure.Management.V2.Network.IPublicIpAddress.IpAddress + { + get + { + return this.IpAddress as string; + } + } + /// the IP address allocation method (Static/Dynamic) + string Microsoft.Azure.Management.V2.Network.IPublicIpAddress.IpAllocationMethod + { + get + { + return this.IpAllocationMethod as string; + } + } + /// + /// Execute the update request asynchronously. + /// + /// cancellationToken the cancellation token + /// the handle to the REST call + async Task Microsoft.Azure.Management.V2.Resource.Core.ResourceActions.IAppliable.ApplyAsync (CancellationToken cancellationToken = default(CancellationToken), bool multiThreaded = true) { + return await this.ApplyAsync() as IPublicIpAddress; + } + + /// + /// Execute the update request. + /// + /// the updated resource + Microsoft.Azure.Management.V2.Network.IPublicIpAddress Microsoft.Azure.Management.V2.Resource.Core.ResourceActions.IAppliable.Apply () { + return this.Apply() as Microsoft.Azure.Management.V2.Network.IPublicIpAddress; + } + + /// + /// Specifies the reverse FQDN to assign to this public IP address. + /// + /// reverseFQDN the reverse FQDN to assign + /// the next stage of the resource update + Microsoft.Azure.Management.V2.Network.PublicIpAddress.Update.IUpdate Microsoft.Azure.Management.V2.Network.PublicIpAddress.Update.IWithReverseFQDN.WithReverseFqdn (string reverseFQDN) { + return this.WithReverseFqdn( reverseFQDN) as Microsoft.Azure.Management.V2.Network.PublicIpAddress.Update.IUpdate; + } + + /// + /// Ensures that no reverse FQDN will be used. + /// + /// The next stage of the resource update + Microsoft.Azure.Management.V2.Network.PublicIpAddress.Update.IUpdate Microsoft.Azure.Management.V2.Network.PublicIpAddress.Update.IWithReverseFQDN.WithoutReverseFqdn () { + return this.WithoutReverseFqdn() as Microsoft.Azure.Management.V2.Network.PublicIpAddress.Update.IUpdate; + } + + /// + /// Specifies the reverse FQDN to assign to this public IP address. + ///

+ ///

+ /// reverseFQDN the reverse FQDN to assign + /// the next stage of the resource definition + Microsoft.Azure.Management.V2.Network.PublicIpAddress.Definition.IWithCreate Microsoft.Azure.Management.V2.Network.PublicIpAddress.Definition.IWithReverseFQDN.WithReverseFqdn (string reverseFQDN) { + return this.WithReverseFqdn( reverseFQDN) as Microsoft.Azure.Management.V2.Network.PublicIpAddress.Definition.IWithCreate; + } + + /// + /// Ensures that no reverse FQDN will be used. + /// + /// the next stage of the resource definition + Microsoft.Azure.Management.V2.Network.PublicIpAddress.Definition.IWithCreate Microsoft.Azure.Management.V2.Network.PublicIpAddress.Definition.IWithReverseFQDN.WithoutReverseFqdn () { + return this.WithoutReverseFqdn() as Microsoft.Azure.Management.V2.Network.PublicIpAddress.Definition.IWithCreate; + } + + /// + /// Specifies the timeout (in minutes) for an idle connection. + /// + /// minutes the length of the time out in minutes + /// the next stage of the resource update + Microsoft.Azure.Management.V2.Network.PublicIpAddress.Update.IUpdate Microsoft.Azure.Management.V2.Network.PublicIpAddress.Update.IWithIdleTimout.WithIdleTimeoutInMinutes (int minutes) { + return this.WithIdleTimeoutInMinutes( minutes) as Microsoft.Azure.Management.V2.Network.PublicIpAddress.Update.IUpdate; + } + + /// + /// Ensures that no leaf domain label will be used. + ///

+ /// This means that this public IP address will not be associated with a domain name. + ///

+ /// the next stage of the resource update + Microsoft.Azure.Management.V2.Network.PublicIpAddress.Update.IUpdate Microsoft.Azure.Management.V2.Network.PublicIpAddress.Update.IWithLeafDomainLabel.WithoutLeafDomainLabel () { + return this.WithoutLeafDomainLabel() as Microsoft.Azure.Management.V2.Network.PublicIpAddress.Update.IUpdate; + } + + /// + /// Specifies the leaf domain label to associate with this public IP address. + ///

+ /// The fully qualified domain name (FQDN) + /// will be constructed automatically by appending the rest of the domain to this label. + ///

+ /// dnsName the leaf domain label to use. This must follow the required naming convention for leaf domain names. + /// the next stage of the resource update + Microsoft.Azure.Management.V2.Network.PublicIpAddress.Update.IUpdate Microsoft.Azure.Management.V2.Network.PublicIpAddress.Update.IWithLeafDomainLabel.WithLeafDomainLabel (string dnsName) { + return this.WithLeafDomainLabel( dnsName) as Microsoft.Azure.Management.V2.Network.PublicIpAddress.Update.IUpdate; + } + + /// + /// Ensures that no leaf domain label will be used. + ///

+ /// This means that this public IP address will not be associated with a domain name. + ///

+ /// the next stage of the public IP address definition + Microsoft.Azure.Management.V2.Network.PublicIpAddress.Definition.IWithCreate Microsoft.Azure.Management.V2.Network.PublicIpAddress.Definition.IWithLeafDomainLabel.WithoutLeafDomainLabel () { + return this.WithoutLeafDomainLabel() as Microsoft.Azure.Management.V2.Network.PublicIpAddress.Definition.IWithCreate; + } + + /// + /// Specifies the leaf domain label to associate with this public IP address. + ///

+ /// The fully qualified domain name (FQDN) + /// will be constructed automatically by appending the rest of the domain to this label. + ///

+ /// dnsName the leaf domain label to use. This must follow the required naming convention for leaf domain names. + /// the next stage of the public IP address definition + Microsoft.Azure.Management.V2.Network.PublicIpAddress.Definition.IWithCreate Microsoft.Azure.Management.V2.Network.PublicIpAddress.Definition.IWithLeafDomainLabel.WithLeafDomainLabel (string dnsName) { + return this.WithLeafDomainLabel( dnsName) as Microsoft.Azure.Management.V2.Network.PublicIpAddress.Definition.IWithCreate; + } + + /// + /// Enables static IP address allocation. + ///

+ /// Use {@link PublicIpAddress#ipAddress()} after the public IP address is updated to + /// obtain the actual IP address allocated for this resource by Azure + ///

+ /// the next stage of the resource update + Microsoft.Azure.Management.V2.Network.PublicIpAddress.Update.IUpdate Microsoft.Azure.Management.V2.Network.PublicIpAddress.Update.IWithIpAddress.WithStaticIp () { + return this.WithStaticIp() as Microsoft.Azure.Management.V2.Network.PublicIpAddress.Update.IUpdate; + } + + /// + /// Enables dynamic IP address allocation. + /// + /// the next stage of the resource update + Microsoft.Azure.Management.V2.Network.PublicIpAddress.Update.IUpdate Microsoft.Azure.Management.V2.Network.PublicIpAddress.Update.IWithIpAddress.WithDynamicIp () { + return this.WithDynamicIp() as Microsoft.Azure.Management.V2.Network.PublicIpAddress.Update.IUpdate; + } + + /// + /// Enables static IP address allocation. + ///

+ /// Use {@link PublicIpAddress#ipAddress()} after the public IP address is created to obtain the + /// actual IP address allocated for this resource by Azure + ///

+ /// the next stage of the public IP address definition + Microsoft.Azure.Management.V2.Network.PublicIpAddress.Definition.IWithCreate Microsoft.Azure.Management.V2.Network.PublicIpAddress.Definition.IWithIpAddress.WithStaticIp () { + return this.WithStaticIp() as Microsoft.Azure.Management.V2.Network.PublicIpAddress.Definition.IWithCreate; + } + + /// + /// Enables dynamic IP address allocation. + /// + /// the next stage of the public IP address definition + Microsoft.Azure.Management.V2.Network.PublicIpAddress.Definition.IWithCreate Microsoft.Azure.Management.V2.Network.PublicIpAddress.Definition.IWithIpAddress.WithDynamicIp () { + return this.WithDynamicIp() as Microsoft.Azure.Management.V2.Network.PublicIpAddress.Definition.IWithCreate; + } + + /// + /// Specifies the timeout (in minutes) for an idle connection. + /// + /// minutes the length of the time out in minutes + /// the next stage of the resource definition + Microsoft.Azure.Management.V2.Network.PublicIpAddress.Definition.IWithCreate Microsoft.Azure.Management.V2.Network.PublicIpAddress.Definition.IWithIdleTimeout.WithIdleTimeoutInMinutes (int minutes) { + return this.WithIdleTimeoutInMinutes( minutes) as Microsoft.Azure.Management.V2.Network.PublicIpAddress.Definition.IWithCreate; + } + + } +} \ No newline at end of file diff --git a/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Domain/InterfaceImpl/PublicIpAddressesImpl.cs b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Domain/InterfaceImpl/PublicIpAddressesImpl.cs new file mode 100644 index 000000000..85c595e82 --- /dev/null +++ b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Domain/InterfaceImpl/PublicIpAddressesImpl.cs @@ -0,0 +1,81 @@ +/** +* Copyright (c) Microsoft Corporation. All rights reserved. +* Licensed under the MIT License. See License.txt in the project root for +* license information. +*/ + +namespace Microsoft.Azure.Management.V2.Network +{ + + using Microsoft.Azure.Management.V2.Resource.Core.CollectionActions; + using Microsoft.Azure.Management.Network.Models; + using Microsoft.Azure.Management.V2.Resource; + using Microsoft.Azure.Management.V2.Resource.Core; + public partial class PublicIpAddressesImpl + { + /// + /// Begins a definition for a new resource. + ///

+ /// This is the beginning of the builder pattern used to create top level resources + /// in Azure. The final method completing the definition and starting the actual resource creation + /// process in Azure is {@link Creatable#create()}. + ///

+ /// Note that the {@link Creatable#create()} method is + /// only available at the stage of the resource definition that has the minimum set of input + /// parameters specified. If you do not see {@link Creatable#create()} among the available methods, it + /// means you have not yet specified all the required input settings. Input settings generally begin + /// with the word "with", for example: .withNewResourceGroup() and return the next stage + /// of the resource definition, as an interface in the "fluent interface" style. + ///

+ /// name the name of the new resource + /// the first stage of the new resource definition + Microsoft.Azure.Management.V2.Network.PublicIpAddress.Definition.IBlank Microsoft.Azure.Management.V2.Resource.Core.CollectionActions.ISupportsCreating.Define (string name) { + return this.Define( name) as Microsoft.Azure.Management.V2.Network.PublicIpAddress.Definition.IBlank; + } + + /// + /// Deletes a resource from Azure, identifying it by its resource ID. + /// + /// id the resource ID of the resource to delete + void Microsoft.Azure.Management.V2.Resource.Core.CollectionActions.ISupportsDeleting.Delete (string id) { + this.Delete( id); + } + + /// + /// Lists resources of the specified type in the specified resource group. + /// + /// resourceGroupName the name of the resource group to list the resources from + /// the list of resources + Microsoft.Azure.Management.V2.Resource.Core.PagedList Microsoft.Azure.Management.V2.Resource.Core.CollectionActions.ISupportsListingByGroup.ListByGroup (string resourceGroupName) { + return this.ListByGroup( resourceGroupName) as Microsoft.Azure.Management.V2.Resource.Core.PagedList; + } + + /// + /// Gets the information about a resource from Azure based on the resource name and the name of its resource group. + /// + /// resourceGroupName the name of the resource group the resource is in + /// name the name of the resource. (Note, this is not the ID) + /// an immutable representation of the resource + Microsoft.Azure.Management.V2.Network.IPublicIpAddress Microsoft.Azure.Management.V2.Resource.Core.CollectionActions.ISupportsGettingByGroup.GetByGroup (string resourceGroupName, string name) { + return this.GetByGroup( resourceGroupName, name) as Microsoft.Azure.Management.V2.Network.IPublicIpAddress; + } + + /// + /// Deletes a resource from Azure, identifying it by its name and its resource group. + /// + /// groupName The group the resource is part of + /// name The name of the resource + void Microsoft.Azure.Management.V2.Resource.Core.CollectionActions.ISupportsDeletingByGroup.Delete (string groupName, string name) { + this.Delete( groupName, name); + } + + /// + /// Lists all the resources of the specified type in the currently selected subscription. + /// + /// list of resources + Microsoft.Azure.Management.V2.Resource.Core.PagedList Microsoft.Azure.Management.V2.Resource.Core.CollectionActions.ISupportsListing.List () { + return this.List() as Microsoft.Azure.Management.V2.Resource.Core.PagedList; + } + + } +} \ No newline at end of file diff --git a/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Domain/InterfaceImpl/SubnetImpl.cs b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Domain/InterfaceImpl/SubnetImpl.cs new file mode 100644 index 000000000..72dd43c62 --- /dev/null +++ b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Domain/InterfaceImpl/SubnetImpl.cs @@ -0,0 +1,134 @@ +/** +* Copyright (c) Microsoft Corporation. All rights reserved. +* Licensed under the MIT License. See License.txt in the project root for +* license information. +*/ + +namespace Microsoft.Azure.Management.V2.Network +{ + + using Microsoft.Azure.Management.V2.Resource.Core.ChildResource.Update; + using Microsoft.Azure.Management.V2.Resource.Core; + using Microsoft.Azure.Management.V2.Resource.Core.ChildResource.Definition; + using Microsoft.Azure.Management.V2.Network.Subnet.UpdateDefinition; + using Microsoft.Azure.Management.V2.Network.Network.Update; + using Microsoft.Azure.Management.V2.Network.Subnet.Update; + using Microsoft.Azure.Management.Network.Models; + using Microsoft.Azure.Management.V2.Network.Subnet.Definition; + using Microsoft.Azure.Management.V2.Network.Network.Definition; + public partial class SubnetImpl + { + Microsoft.Azure.Management.V2.Network.Network.Update.IUpdate Microsoft.Azure.Management.V2.Resource.Core.ChildResource.Update.IInUpdate.Attach () { + return this.Attach() as Microsoft.Azure.Management.V2.Network.Network.Update.IUpdate; + } + + /// the name of the child resource + string Microsoft.Azure.Management.V2.Resource.Core.IChildResource.Name + { + get + { + return this.Name as string; + } + } + /// + /// Assigns an existing network security group to this subnet. + /// + /// resourceId the resource ID of the network security group + /// the next stage of the definition + Microsoft.Azure.Management.V2.Network.Subnet.Definition.IWithAttach Microsoft.Azure.Management.V2.Network.Subnet.Definition.IWithNetworkSecurityGroup.WithExistingNetworkSecurityGroup (string resourceId) { + return this.WithExistingNetworkSecurityGroup( resourceId) as Microsoft.Azure.Management.V2.Network.Subnet.Definition.IWithAttach; + } + + /// + /// Assigns an existing network security group to this subnet. + /// + /// nsg the network security group to assign + /// the next stage of the definition + Microsoft.Azure.Management.V2.Network.Subnet.Definition.IWithAttach Microsoft.Azure.Management.V2.Network.Subnet.Definition.IWithNetworkSecurityGroup.WithExistingNetworkSecurityGroup (INetworkSecurityGroup nsg) { + return this.WithExistingNetworkSecurityGroup( nsg) as Microsoft.Azure.Management.V2.Network.Subnet.Definition.IWithAttach; + } + + /// + /// Assigns an existing network security group to this subnet. + /// + /// resourceId the resource ID of the network security group + /// the next stage of the definition + Microsoft.Azure.Management.V2.Network.Subnet.UpdateDefinition.IWithAttach Microsoft.Azure.Management.V2.Network.Subnet.UpdateDefinition.IWithNetworkSecurityGroup.WithExistingNetworkSecurityGroup (string resourceId) { + return this.WithExistingNetworkSecurityGroup( resourceId) as Microsoft.Azure.Management.V2.Network.Subnet.UpdateDefinition.IWithAttach; + } + + /// + /// Assigns an existing network security group to this subnet. + /// + /// nsg the network security group to assign + /// the next stage of the definition + Microsoft.Azure.Management.V2.Network.Subnet.UpdateDefinition.IWithAttach Microsoft.Azure.Management.V2.Network.Subnet.UpdateDefinition.IWithNetworkSecurityGroup.WithExistingNetworkSecurityGroup (INetworkSecurityGroup nsg) { + return this.WithExistingNetworkSecurityGroup( nsg) as Microsoft.Azure.Management.V2.Network.Subnet.UpdateDefinition.IWithAttach; + } + + /// the address space prefix, in CIDR notation, assigned to this subnet + string Microsoft.Azure.Management.V2.Network.ISubnet.AddressPrefix + { + get + { + return this.AddressPrefix as string; + } + } + /// the network security group associated with this subnet + ///

+ /// Note that this method will result in a call to Azure each time it is invoked. + Microsoft.Azure.Management.V2.Network.INetworkSecurityGroup Microsoft.Azure.Management.V2.Network.ISubnet.NetworkSecurityGroup () { + return this.NetworkSecurityGroup() as Microsoft.Azure.Management.V2.Network.INetworkSecurityGroup; + } + + ///

+ /// Specifies the IP address space of the subnet, within the address space of the network. + /// + /// cidr the IP address space prefix using the CIDR notation + /// the next stage + Microsoft.Azure.Management.V2.Network.Subnet.Update.IUpdate Microsoft.Azure.Management.V2.Network.Subnet.Update.IWithAddressPrefix.WithAddressPrefix (string cidr) { + return this.WithAddressPrefix( cidr) as Microsoft.Azure.Management.V2.Network.Subnet.Update.IUpdate; + } + + /// + /// Specifies the IP address space of the subnet, within the address space of the network. + /// + /// cidr the IP address space prefix using the CIDR notation + /// the next stage of the subnet definition + Microsoft.Azure.Management.V2.Network.Subnet.Definition.IWithAttach Microsoft.Azure.Management.V2.Network.Subnet.Definition.IWithAddressPrefix.WithAddressPrefix (string cidr) { + return this.WithAddressPrefix( cidr) as Microsoft.Azure.Management.V2.Network.Subnet.Definition.IWithAttach; + } + + /// + /// Specifies the IP address space of the subnet, within the address space of the network. + /// + /// cidr the IP address space prefix using the CIDR notation + /// the next stage of the subnet definition + Microsoft.Azure.Management.V2.Network.Subnet.UpdateDefinition.IWithAttach Microsoft.Azure.Management.V2.Network.Subnet.UpdateDefinition.IWithAddressPrefix.WithAddressPrefix (string cidr) { + return this.WithAddressPrefix( cidr) as Microsoft.Azure.Management.V2.Network.Subnet.UpdateDefinition.IWithAttach; + } + + Microsoft.Azure.Management.V2.Network.Network.Definition.IWithCreateAndSubnet Microsoft.Azure.Management.V2.Resource.Core.ChildResource.Definition.IInDefinition.Attach () { + return this.Attach() as Microsoft.Azure.Management.V2.Network.Network.Definition.IWithCreateAndSubnet; + } + + /// + /// Assigns an existing network security group to this subnet. + /// + /// resourceId the resource ID of the network security group + /// the next stage of the update + Microsoft.Azure.Management.V2.Network.Subnet.Update.IUpdate Microsoft.Azure.Management.V2.Network.Subnet.Update.IWithNetworkSecurityGroup.WithExistingNetworkSecurityGroup (string resourceId) { + return this.WithExistingNetworkSecurityGroup( resourceId) as Microsoft.Azure.Management.V2.Network.Subnet.Update.IUpdate; + } + + /// + /// Assigns an existing network security group to this subnet. + /// + /// nsg the network security group to assign + /// the next stage of the update + Microsoft.Azure.Management.V2.Network.Subnet.Update.IUpdate Microsoft.Azure.Management.V2.Network.Subnet.Update.IWithNetworkSecurityGroup.WithExistingNetworkSecurityGroup (INetworkSecurityGroup nsg) { + return this.WithExistingNetworkSecurityGroup( nsg) as Microsoft.Azure.Management.V2.Network.Subnet.Update.IUpdate; + } + + } +} \ No newline at end of file diff --git a/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Domain/LoadBalancer/Definition/IDefinition.cs b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Domain/LoadBalancer/Definition/IDefinition.cs new file mode 100644 index 000000000..614a4a360 --- /dev/null +++ b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Domain/LoadBalancer/Definition/IDefinition.cs @@ -0,0 +1,106 @@ +/** +* Copyright (c) Microsoft Corporation. All rights reserved. +* Licensed under the MIT License. See License.txt in the project root for +* license information. +*/ + +namespace Microsoft.Azure.Management.V2.Network.LoadBalancer.Definition +{ + + using Microsoft.Azure.Management.V2.Network; + using Microsoft.Azure.Management.V2.Resource.Core.ResourceActions; + using Microsoft.Azure.Management.V2.Resource.Core.GroupableResource.Definition; + using Microsoft.Azure.Management.V2.Resource.Core.Resource.Definition; + /// + /// The stage of the load balancer definition allowing to add a public ip address to the load + /// balancer's front end. + /// + public interface IWithPublicIpAddresses + { + /// + /// Sets the provided set of public IP addresses as the front end for the load balancer, making it an Internet-facing load balancer. + /// + /// publicIpAddresses existing public IP addresses + /// the next stage of the resource definition + IWithCreate WithExistingPublicIpAddresses (IPublicIpAddress publicIpAddresses); + + /// + /// Adds a new public IP address to the front end of the load balancer, using an automatically generated name and leaf DNS label + /// derived from the load balancer's name, in the same resource group and region. + /// + /// the next stage of the definition + IWithCreate WithNewPublicIpAddress (); + + /// + /// Adds a new public IP address to the front end of the load balancer, using the specified DNS leaft label, + /// an automatically generated name derived from the DNS label, in the same resource group and region. + /// + /// the next stage of the definition + IWithCreate WithNewPublicIpAddress (string dnsLeafLabel); + + /// + /// Adds a new public IP address to the front end of the load balancer, creating the public IP based on the provided {@link Creatable} + /// stage of a public IP endpoint's definition. + /// + /// the next stage of the definition + IWithCreate WithNewPublicIpAddress (ICreatable creatablePublicIpAddress); + + } + /// + /// The stage of the load balancer definition allowing to specify the resource group. + /// + public interface IWithGroup : + Microsoft.Azure.Management.V2.Resource.Core.GroupableResource.Definition.IWithGroup + { + } + /// + /// The first stage of a load balancer definition. + /// + public interface IBlank : + IDefinitionWithRegion + { + } + /// + /// The entirety of the load balancer definition. + /// + public interface IDefinition : + IBlank, + Microsoft.Azure.Management.V2.Network.LoadBalancer.Definition.IWithGroup, + IWithVirtualMachine, + IWithCreate + { + } + /// + /// The stage of the load balancer definition allowing to add a virtual machine to + /// the load balancer's backend pool. + /// + public interface IWithVirtualMachine + { + /// + /// Adds the specified set of virtual machines, assuming they are from the same + /// availability set, to this load balancer's back end address pool. + ///

+ /// This will create a new back end address pool for this load balancer and add references to + /// the primary IP configurations of the primary network interfaces of each of the provided set of + /// virtual machines. + ///

+ /// If the virtual machines are not in the same availability set, the load balancer will still + /// be created, but the virtual machines will not associated with its back end. + ///

+ /// vms existing virtual machines + /// the next stage of the update + IWithCreate WithExistingVirtualMachines (ISupportsNetworkInterfaces vms); + + } + /// + /// The stage of the load balancer definition which contains all the minimum required inputs for + /// the resource to be created (via {@link WithCreate#create()}), but also allows + /// for any other optional settings to be specified. + /// + public interface IWithCreate : + ICreatable, + IDefinitionWithTags, + IWithPublicIpAddresses + { + } +} \ No newline at end of file diff --git a/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Domain/LoadBalancer/Update/IUpdate.cs b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Domain/LoadBalancer/Update/IUpdate.cs new file mode 100644 index 000000000..6835875e5 --- /dev/null +++ b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Domain/LoadBalancer/Update/IUpdate.cs @@ -0,0 +1,24 @@ +/** +* Copyright (c) Microsoft Corporation. All rights reserved. +* Licensed under the MIT License. See License.txt in the project root for +* license information. +*/ + +namespace Microsoft.Azure.Management.V2.Network.LoadBalancer.Update +{ + + using Microsoft.Azure.Management.V2.Resource.Core.ResourceActions; + using Microsoft.Azure.Management.V2.Network; + using Microsoft.Azure.Management.V2.Resource.Core.Resource.Update; + /// + /// The template for a load balancer update operation, containing all the settings that + /// can be modified. + ///

+ /// Call {@link Update#apply()} to apply the changes to the resource in Azure. + ///

+ public interface IUpdate : + IAppliable, + IUpdateWithTags + { + } +} \ No newline at end of file diff --git a/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Domain/Network/Definition/IDefinition.cs b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Domain/Network/Definition/IDefinition.cs new file mode 100644 index 000000000..e3b5852f5 --- /dev/null +++ b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Domain/Network/Definition/IDefinition.cs @@ -0,0 +1,123 @@ +/** +* Copyright (c) Microsoft Corporation. All rights reserved. +* Licensed under the MIT License. See License.txt in the project root for +* license information. +*/ + +namespace Microsoft.Azure.Management.V2.Network.Network.Definition +{ + + using System.Collections.Generic; + using Microsoft.Azure.Management.V2.Network.Subnet.Definition; + using Microsoft.Azure.Management.V2.Resource.Core.Resource.Definition; + using Microsoft.Azure.Management.V2.Network; + using Microsoft.Azure.Management.V2.Resource.Core.ResourceActions; + using Microsoft.Azure.Management.V2.Resource.Core.GroupableResource.Definition; + /// + /// The entirety of the virtual network definition. + /// + public interface IDefinition : + Microsoft.Azure.Management.V2.Network.Network.Definition.IBlank, + Microsoft.Azure.Management.V2.Network.Network.Definition.IWithGroup, + IWithSubnet, + IWithCreate, + IWithCreateAndSubnet + { + } + /// + /// The stage of the virtual network definition allowing to add subnets. + /// + public interface IWithSubnet + { + /// + /// Explicitly adds a subnet to the virtual network. + ///

+ /// If no subnets are explicitly specified, a default subnet called "subnet1" covering the + /// entire first address space will be created. + ///

+ /// Note this method's effect is additive, i.e. each time it is used, a new subnet is added to the network. + ///

+ /// name the name to assign to the subnet + /// cidr the address space of the subnet, within the address space of the network, using the CIDR notation + /// the next stage of the virtual network definition + IWithCreateAndSubnet WithSubnet (string name, string cidr); + + /// + /// Explicitly defines subnets in the virtual network based on the provided map. + /// + /// nameCidrPairs a {@link Map} of CIDR addresses for the subnets, indexed by the name of each subnet to be defined + /// the next stage of the virtual network definition + IWithCreateAndSubnet WithSubnets (IDictionary nameCidrPairs); + + /// + /// Begins the definition of a new subnet to add to the virtual network. + ///

+ /// The definition must be completed with a call to {@link Subnet.DefinitionStages.WithAttach#attach()} + ///

+ /// name the name of the subnet + /// the first stage of the new subnet definition + Microsoft.Azure.Management.V2.Network.Subnet.Definition.IBlank DefineSubnet (string name); + + } + /// + /// The stage of the public IP definition which contains all the minimum required inputs for + /// the resource to be created (via {@link WithCreate#create()}), but also allows + /// for any other optional settings to be specified, including adding subnets. + /// + public interface IWithCreateAndSubnet : + IWithCreate, + IWithSubnet + { + } + /// + /// The stage of the virtual network definition which contains all the minimum required inputs for + /// the resource to be created (via {@link WithCreate#create()}), but also allows + /// for any other optional settings to be specified, except for adding subnets. + ///

+ /// Subnets can be added only right after the address space is explicitly specified + /// (see {@link WithCreate#withAddressSpace(String)}). + ///

+ public interface IWithCreate : + ICreatable, + IDefinitionWithTags + { + /// + /// Specifies the IP address of an existing DNS server to associate with the virtual network. + ///

+ /// Note this method's effect is additive, i.e. each time it is used, a new dns server is added + /// to the network. + ///

+ /// ipAddress the IP address of the DNS server + /// the next stage of the virtual network definition + IWithCreate WithDnsServer (string ipAddress); + + /// + /// Explicitly adds an address space to the virtual network. + ///

+ /// If no address spaces are explicitly specified, a default address space with the CIDR "10.0.0.0/16" will be + /// assigned to the virtual network. + ///

+ /// Note that this method's effect is additive, i.e. each time it is used, a new address space is added to the network. + /// This method does not check for conflicts or overlaps with other address spaces. If there is a conflict, + /// a cloud exception may be thrown at the time the network is created. + ///

+ /// cidr the CIDR representation of the address space + /// the next stage of the virtual network definition + IWithCreateAndSubnet WithAddressSpace (string cidr); + + } + /// + /// The first stage of a virtual network definition. + /// + public interface IBlank : + IDefinitionWithRegion + { + } + /// + /// The stage of the virtual network definition allowing to specify the resource group. + /// + public interface IWithGroup : + Microsoft.Azure.Management.V2.Resource.Core.GroupableResource.Definition.IWithGroup + { + } +} \ No newline at end of file diff --git a/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Domain/Network/Update/IUpdate.cs b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Domain/Network/Update/IUpdate.cs new file mode 100644 index 000000000..942ca0e7b --- /dev/null +++ b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Domain/Network/Update/IUpdate.cs @@ -0,0 +1,110 @@ +/** +* Copyright (c) Microsoft Corporation. All rights reserved. +* Licensed under the MIT License. See License.txt in the project root for +* license information. +*/ + +namespace Microsoft.Azure.Management.V2.Network.Network.Update +{ + + using Microsoft.Azure.Management.V2.Network.Subnet.Update; + using System.Collections.Generic; + using Microsoft.Azure.Management.V2.Network.Subnet.UpdateDefinition; + using Microsoft.Azure.Management.V2.Network; + using Microsoft.Azure.Management.V2.Resource.Core.Resource.Update; + using Microsoft.Azure.Management.V2.Resource.Core.ResourceActions; + /// + /// The stage of the virtual network update allowing to specify the DNS server. + /// + public interface IWithDnsServer + { + /// + /// Specifies the IP address of the DNS server to associate with the virtual network. + ///

+ /// Note this method's effect is additive, i.e. each time it is used, a new DNS server is + /// added to the network + ///

+ /// ipAddress the IP address of the DNS server + /// the next stage of the virtual network update + Microsoft.Azure.Management.V2.Network.Network.Update.IUpdate WithDnsServer (string ipAddress); + + } + /// + /// The stage of the virtual network update allowing to add or remove subnets. + /// + public interface IWithSubnet + { + /// + /// Explicitly adds a subnet to the virtual network. + ///

+ /// Note this method's effect is additive, i.e. each time it is used, a new subnet is added to the network. + ///

+ /// name the name to assign to the subnet + /// cidr the address space of the subnet, within the address space of the network, using the CIDR notation + /// the next stage of the virtual network update + Microsoft.Azure.Management.V2.Network.Network.Update.IUpdate WithSubnet (string name, string cidr); + + /// + /// Explicitly defines all the subnets in the virtual network based on the provided map. + ///

+ /// This replaces any previously existing subnets. + ///

+ /// nameCidrPairs a {@link Map} of CIDR addresses for the subnets, indexed by the name of each subnet to be added + /// the next stage of the virtual network update + Microsoft.Azure.Management.V2.Network.Network.Update.IUpdate WithSubnets (IDictionary nameCidrPairs); + + /// + /// Removes a subnet from the virtual network. + /// + /// name name of the subnet to remove + /// the next stage of the virtual network update + Microsoft.Azure.Management.V2.Network.Network.Update.IUpdate WithoutSubnet (string name); + + /// + /// Begins the description of an update of an existing subnet of this network. + /// + /// name the name of an existing subnet + /// the first stage of the subnet update description + Microsoft.Azure.Management.V2.Network.Subnet.Update.IUpdate UpdateSubnet (string name); + + /// + /// Begins the definition of a new subnet to be added to this virtual network. + /// + /// name the name of the new subnet + /// the first stage of the new subnet definition + IBlank DefineSubnet (string name); + + } + /// + /// The stage of the virtual network update allowing to specify the address space. + /// + public interface IWithAddressSpace + { + /// + /// Explicitly adds an address space to the virtual network. + ///

+ /// Note this method's effect is additive, i.e. each time it is used, a new address space is added to the network. + ///

+ /// This method does not check for conflicts or overlaps with other address spaces. If there is a conflict, + /// a cloud exception may be thrown after the update is applied. + ///

+ /// cidr the CIDR representation of the address space + /// the next stage of the virtual network update + Microsoft.Azure.Management.V2.Network.Network.Update.IUpdate WithAddressSpace (string cidr); + + } + /// + /// The template for a virtual network update operation, containing all the settings that + /// can be modified. + ///

+ /// Call {@link Update#apply()} to apply the changes to the resource in Azure. + ///

+ public interface IUpdate : + IAppliable, + IUpdateWithTags, + IWithSubnet, + IWithDnsServer, + IWithAddressSpace + { + } +} \ No newline at end of file diff --git a/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Domain/NetworkInterface/Definition/IDefinition.cs b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Domain/NetworkInterface/Definition/IDefinition.cs new file mode 100644 index 000000000..7812ec365 --- /dev/null +++ b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Domain/NetworkInterface/Definition/IDefinition.cs @@ -0,0 +1,232 @@ +/** +* Copyright (c) Microsoft Corporation. All rights reserved. +* Licensed under the MIT License. See License.txt in the project root for +* license information. +*/ + +namespace Microsoft.Azure.Management.V2.Network.NetworkInterface.Definition +{ + + using Microsoft.Azure.Management.V2.Resource.Core.GroupableResource.Definition; + using Microsoft.Azure.Management.V2.Network; + using Microsoft.Azure.Management.V2.Resource.Core.ResourceActions; + using Microsoft.Azure.Management.V2.Resource.Core.Resource.Definition; + using Microsoft.Azure.Management.V2.Network.NicIpConfiguration.Definition; + /// + /// The stage of the network interface definition allowing to specify the resource group. + /// + public interface IWithGroup : + Microsoft.Azure.Management.V2.Resource.Core.GroupableResource.Definition.IWithGroup + { + } + /// + /// The stage of the network interface definition allowing to associate a network security group. + /// + public interface IWithNetworkSecurityGroup + { + /// + /// Create a new network security group to associate with network interface, based on the provided definition. + /// + /// creatable a creatable definition for a new network security group + /// the next stage of the network interface definition + IWithCreate WithNewNetworkSecurityGroup (ICreatable creatable); + + /// + /// Associates an existing network security group with the network interface. + /// + /// networkSecurityGroup an existing network security group + /// the next stage of the network interface definition + IWithCreate WithExistingNetworkSecurityGroup (INetworkSecurityGroup networkSecurityGroup); + + } + /// + /// The first stage of the network interface. + /// + public interface IBlank : + IDefinitionWithRegion + { + } + /// + /// The entirety of the network interface definition. + /// + public interface IDefinition : + Microsoft.Azure.Management.V2.Network.NetworkInterface.Definition.IBlank, + Microsoft.Azure.Management.V2.Network.NetworkInterface.Definition.IWithGroup, + IWithPrimaryNetwork, + IWithPrimaryNetworkSubnet, + IWithPrimaryPrivateIp, + IWithCreate + { + } + /// + /// The stage of the network interface definition allowing to specify private IP address within + /// a virtual network subnet. + /// + public interface IWithPrimaryPrivateIp + { + /// + /// Enables dynamic private IP address allocation within the specified existing virtual network + /// subnet for the network interface's primary IP configuration. + /// + /// the next stage of network interface definition + IWithCreate WithPrimaryPrivateIpAddressDynamic (); + + /// + /// Assigns the specified static private IP address within the specified existing virtual network + /// subnet to the network interface's primary IP configuration. + /// + /// staticPrivateIpAddress the static IP address within the specified subnet to assign to + /// the network interface + /// the next stage of network interface definition + IWithCreate WithPrimaryPrivateIpAddressStatic (string staticPrivateIpAddress); + + } + /// + /// The stage of the network interface definition allowing to specify the virtual network for + /// primary IP configuration. + /// + public interface IWithPrimaryNetwork + { + /// + /// Create a new virtual network to associate with the network interface's primary IP configuration, + /// based on the provided definition. + /// + /// creatable a creatable definition for a new virtual network + /// the next stage of the network interface definition + IWithPrimaryPrivateIp WithNewPrimaryNetwork (ICreatable creatable); + + /// + /// Creates a new virtual network to associate with the network interface's primary IP configuration. + ///

+ /// The virtual network will be created in the same resource group and region as of network interface, + /// it will be created with the specified address space and a default subnet covering the entirety of + /// the network IP address space. + ///

+ /// name the name of the new virtual network + /// addressSpace the address space for rhe virtual network + /// the next stage of the network interface definition + IWithPrimaryPrivateIp WithNewPrimaryNetwork (string name, string addressSpace); + + /// + /// Creates a new virtual network to associate with the network interface's primary IP configuration. + ///

+ /// The virtual network will be created in the same resource group and region as of network interface, + /// it will be created with the specified address space and a default subnet covering the entirety of + /// the network IP address space. + ///

+ /// addressSpace the address space for the virtual network + /// the next stage of the network interface definition + IWithPrimaryPrivateIp WithNewPrimaryNetwork (string addressSpace); + + /// + /// Associate an existing virtual network with the network interface's primary IP configuration. + /// + /// network an existing virtual network + /// the next stage of the network interface definition + IWithPrimaryNetworkSubnet WithExistingPrimaryNetwork (INetwork network); + + } + /// + /// The stage of the network interface definition allowing to associate a secondary IP configurations. + /// + public interface IWithSecondaryIpConfiguration + { + /// + /// Starts definition of a secondary IP configuration. + /// + /// name name for the IP configuration + /// the first stage of a secondary IP configuration definition + Microsoft.Azure.Management.V2.Network.NicIpConfiguration.Definition.IBlank DefineSecondaryIpConfiguration (string name); + + } + /// + /// The stage of the network interface definition allowing to specify subnet. + /// + public interface IWithPrimaryNetworkSubnet + { + /// + /// Associate a subnet with the network interface's primary IP configuration. + /// + /// name the subnet name + /// the next stage of the network interface definition + IWithPrimaryPrivateIp WithSubnet (string name); + + } + /// + /// The stage of the network interface definition allowing to associate public IP address with it's primary + /// IP configuration. + /// + public interface IWithPrimaryPublicIpAddress + { + /// + /// Create a new public IP address to associate with network interface's primary IP configuration, based on + /// the provided definition. + /// + /// creatable a creatable definition for a new public IP + /// the next stage of the network interface definition + IWithCreate WithNewPrimaryPublicIpAddress (ICreatable creatable); + + /// + /// Creates a new public IP address in the same region and group as the resource and associate it + /// with the network interface's primary IP configuration. + ///

+ /// the internal name and DNS label for the public IP address will be derived from the network interface name + ///

+ /// the next stage of the network interface definition + IWithCreate WithNewPrimaryPublicIpAddress (); + + /// + /// Creates a new public IP address in the same region and group as the resource, with the specified DNS label + /// and associate it with the network interface's primary IP configuration. + ///

+ /// the internal name for the public IP address will be derived from the DNS label + ///

+ /// leafDnsLabel the leaf domain label + /// the next stage of the network interface definition + IWithCreate WithNewPrimaryPublicIpAddress (string leafDnsLabel); + + /// + /// Associates an existing public IP address with the network interface's primary IP configuration. + /// + /// publicIpAddress an existing public IP address + /// the next stage of the network interface definition + IWithCreate WithExistingPrimaryPublicIpAddress (IPublicIpAddress publicIpAddress); + + } + /// + /// The stage of the network interface definition which contains all the minimum required inputs for + /// the resource to be created (via {@link WithCreate#create()}), but also allows + /// for any other optional settings to be specified. + /// + public interface IWithCreate : + ICreatable, + IDefinitionWithTags, + IWithPrimaryPublicIpAddress, + IWithNetworkSecurityGroup, + IWithSecondaryIpConfiguration + { + /// + /// Enable IP forwarding in the network interface. + /// + /// the next stage of the network interface definition + IWithCreate WithIpForwarding (); + + /// + /// Specifies the IP address of the custom DNS server to associate with the network interface. + ///

+ /// Note this method's effect is additive, i.e. each time it is used, the new dns server is + /// added to the network interface. + ///

+ /// ipAddress the IP address of the DNS server + /// the next stage of the network interface definition + IWithCreate WithDnsServer (string ipAddress); + + /// + /// Specifies the internal DNS name label for the network interface. + /// + /// dnsNameLabel the internal DNS name label + /// the next stage of the network interface definition + IWithCreate WithInternalDnsNameLabel (string dnsNameLabel); + + } +} \ No newline at end of file diff --git a/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Domain/NetworkInterface/Update/IUpdate.cs b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Domain/NetworkInterface/Update/IUpdate.cs new file mode 100644 index 000000000..f8730d6f2 --- /dev/null +++ b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Domain/NetworkInterface/Update/IUpdate.cs @@ -0,0 +1,217 @@ +/** +* Copyright (c) Microsoft Corporation. All rights reserved. +* Licensed under the MIT License. See License.txt in the project root for +* license information. +*/ + +namespace Microsoft.Azure.Management.V2.Network.NetworkInterface.Update +{ + + using Microsoft.Azure.Management.V2.Resource.Core.Resource.Update; + using Microsoft.Azure.Management.V2.Resource.Core.ResourceActions; + using Microsoft.Azure.Management.V2.Network; + using Microsoft.Azure.Management.V2.Network.NicIpConfiguration.Update; + using Microsoft.Azure.Management.V2.Network.NicIpConfiguration.UpdateDefinition; + /// + /// The template for an update operation, containing all the settings that + /// can be modified. + ///

+ /// Call {@link Update#apply()} to apply the changes to the resource in Azure. + ///

+ public interface IUpdate : + IAppliable, + IUpdateWithTags, + IWithPrimaryNetworkSubnet, + IWithPrimaryPrivateIp, + IWithPrimaryPublicIpAddress, + IWithNetworkSecurityGroup, + IWithIpForwarding, + IWithDnsServer, + IWithIpConfiguration + { + } + /// + /// The stage of the network interface update allowing to specify subnet. + /// + public interface IWithPrimaryNetworkSubnet + { + /// + /// Associate a subnet with the network interface. + /// + /// name the subnet name + /// the next stage of the network interface update + Microsoft.Azure.Management.V2.Network.NetworkInterface.Update.IUpdate WithSubnet (string name); + + } + /// + /// The stage of the network interface update allowing to enable or disable IP forwarding. + /// + public interface IWithIpForwarding + { + /// + /// Enable IP forwarding in the network interface. + /// + /// the next stage of the network interface update + Microsoft.Azure.Management.V2.Network.NetworkInterface.Update.IUpdate WithIpForwarding (); + + /// + /// Disable IP forwarding in the network interface. + /// + /// the next stage of the network interface update + Microsoft.Azure.Management.V2.Network.NetworkInterface.Update.IUpdate WithoutIpForwarding (); + + } + /// + /// The stage of the network interface update allowing to specify private IP address within + /// a virtual network subnet. + /// + public interface IWithPrimaryPrivateIp + { + /// + /// Enables dynamic private IP address allocation within the specified existing virtual network + /// subnet for the network interface's primary IP configuration. + /// + /// the next stage of network interface update + Microsoft.Azure.Management.V2.Network.NetworkInterface.Update.IUpdate WithPrimaryPrivateIpAddressDynamic (); + + /// + /// Assigns the specified static private IP address within the specified existing virtual network + /// subnet to the network interface's primary IP configuration. + /// + /// staticPrivateIpAddress the static IP address within the specified subnet to assign to + /// the primary IP configuration + /// the next stage of network interface update + Microsoft.Azure.Management.V2.Network.NetworkInterface.Update.IUpdate WithPrimaryPrivateIpAddressStatic (string staticPrivateIpAddress); + + } + /// + /// The stage of the network interface update allowing to associate public IP address with it's primary + /// IP configuration. + /// + public interface IWithPrimaryPublicIpAddress + { + /// + /// Create a new public IP address to associate the network interface's primary IP configuration, + /// based on the provided definition. + ///

+ /// if there is public IP associated with the primary IP configuration then that will be removed in + /// favour of this + ///

+ /// creatable a creatable definition for a new public IP + /// the next stage of the network interface update + Microsoft.Azure.Management.V2.Network.NetworkInterface.Update.IUpdate WithNewPrimaryPublicIpAddress (ICreatable creatable); + + /// + /// Creates a new public IP address in the same region and group as the resource and associate it + /// with the network interface's primary IP configuration. + ///

+ /// the internal name and DNS label for the public IP address will be derived from the network interface name, + /// if there is an existing public IP association then that will be removed in favour of this + ///

+ /// the next stage of the network interface update + Microsoft.Azure.Management.V2.Network.NetworkInterface.Update.IUpdate WithNewPrimaryPublicIpAddress (); + + /// + /// Creates a new public IP address in the same region and group as the resource, with the specified DNS label + /// and associate it with the network interface's primary IP configuration. + ///

+ /// the internal name for the public IP address will be derived from the DNS label, if there is an existing + /// public IP association then that will be removed in favour of this + ///

+ /// leafDnsLabel the leaf domain label + /// the next stage of the network interface update + Microsoft.Azure.Management.V2.Network.NetworkInterface.Update.IUpdate WithNewPrimaryPublicIpAddress (string leafDnsLabel); + + /// + /// Specifies that remove any public IP associated with the network interface's primary IP configuration. + /// + /// the next stage of the network interface update + Microsoft.Azure.Management.V2.Network.NetworkInterface.Update.IUpdate WithoutPrimaryPublicIpAddress (); + + /// + /// Associates an existing public IP address with the network interface's primary IP configuration. + /// if there is an existing public IP association then that will be removed in favour of this + /// + /// publicIpAddress an existing public IP address + /// the next stage of the network interface update + Microsoft.Azure.Management.V2.Network.NetworkInterface.Update.IUpdate WithExistingPrimaryPublicIpAddress (IPublicIpAddress publicIpAddress); + + } + /// + /// The stage of the network interface update allowing to associate network security group. + /// + public interface IWithNetworkSecurityGroup + { + /// + /// Create a new network security group to associate with network interface, based on the provided definition. + /// + /// creatable a creatable definition for a new network security group + /// the next stage of the network interface update + Microsoft.Azure.Management.V2.Network.NetworkInterface.Update.IUpdate WithNewNetworkSecurityGroup (ICreatable creatable); + + /// + /// Associates an existing network security group with the network interface. + /// + /// networkSecurityGroup an existing network security group + /// the next stage of the network interface update + Microsoft.Azure.Management.V2.Network.NetworkInterface.Update.IUpdate WithExistingNetworkSecurityGroup (INetworkSecurityGroup networkSecurityGroup); + + /// + /// Specifies that remove any network security group associated with the network interface. + /// + /// the next stage of the network interface update + Microsoft.Azure.Management.V2.Network.NetworkInterface.Update.IUpdate WithoutNetworkSecurityGroup (); + + } + /// + /// The stage of the network interface update allowing to specify DNS servers. + /// + public interface IWithDnsServer + { + /// + /// Specifies the IP address of the custom DNS server to associate with the network interface. + ///

+ /// Note this method's effect is additive, i.e. each time it is used, the new dns server is + /// added to the network interface. + ///

+ /// ipAddress the IP address of the DNS server + /// the next stage of the network interface update + Microsoft.Azure.Management.V2.Network.NetworkInterface.Update.IUpdate WithDnsServer (string ipAddress); + + /// + /// Removes a DNS server associated with the network interface. + /// + /// ipAddress the IP address of the DNS server + /// the next stage of the network interface update + Microsoft.Azure.Management.V2.Network.NetworkInterface.Update.IUpdate WithoutDnsServer (string ipAddress); + + /// + /// Specifies to use the default Azure DNS server for the network interface. + ///

+ /// Using azure DNS server will remove any custom DNS server associated with this network interface. + ///

+ /// the next stage of the network interface update + Microsoft.Azure.Management.V2.Network.NetworkInterface.Update.IUpdate WithAzureDnsServer (); + + } + /// + /// The stage of the network interface update allowing to configure IP configuration. + /// + public interface IWithIpConfiguration + { + /// + /// Starts definition of a secondary IP configuration. + /// + /// name name for the IP configuration + /// the first stage of a secondary IP configuration definition + IBlank DefineSecondaryIpConfiguration (string name); + + /// + /// Starts update of an IP configuration. + /// + /// name name of the IP configuration + /// the first stage of an IP configuration update + Microsoft.Azure.Management.V2.Network.NicIpConfiguration.Update.IUpdate UpdateIpConfiguration (string name); + + } +} \ No newline at end of file diff --git a/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Domain/NetworkSecurityGroup/Definition/IDefinition.cs b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Domain/NetworkSecurityGroup/Definition/IDefinition.cs new file mode 100644 index 000000000..69c426749 --- /dev/null +++ b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Domain/NetworkSecurityGroup/Definition/IDefinition.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. +*/ + +namespace Microsoft.Azure.Management.V2.Network.NetworkSecurityGroup.Definition +{ + + using Microsoft.Azure.Management.V2.Network.NetworkSecurityRule.Definition; + using Microsoft.Azure.Management.V2.Resource.Core.Resource.Definition; + using Microsoft.Azure.Management.V2.Network; + using Microsoft.Azure.Management.V2.Resource.Core.ResourceActions; + using Microsoft.Azure.Management.V2.Resource.Core.GroupableResource.Definition; + /// + /// The stage allowing to define a new security rule. + ///

+ /// When the security rule description is complete enough, use {@link Attachable#attach()} to attach it to + /// this network security group. + ///

+ public interface IWithRule + { + /// + /// Starts the definition of a new security rule. + /// + /// name the name for the new security rule + /// the first stage of the security rule definition + IBlank DefineRule (string name); + + } + /// + /// The stage of the definition which contains all the minimum required inputs for + /// the resource to be created (via {@link WithCreate#create()}), but also allows + /// for any other optional settings to be specified. + /// + public interface IWithCreate : + ICreatable, + IDefinitionWithTags, + IWithRule + { + } + /// + /// The stage allowing to specify the resource group. + /// + public interface IWithGroup : + Microsoft.Azure.Management.V2.Resource.Core.GroupableResource.Definition.IWithGroup + { + } + /// + /// The first stage of the definition. + /// + public interface IBlank : + IDefinitionWithRegion + { + } + /// + /// The entirety of the network security group definition. + /// + public interface IDefinition : + IBlank, + Microsoft.Azure.Management.V2.Network.NetworkSecurityGroup.Definition.IWithGroup, + IWithCreate + { + } +} \ No newline at end of file diff --git a/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Domain/NetworkSecurityGroup/Update/IUpdate.cs b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Domain/NetworkSecurityGroup/Update/IUpdate.cs new file mode 100644 index 000000000..17d4cf1ab --- /dev/null +++ b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Domain/NetworkSecurityGroup/Update/IUpdate.cs @@ -0,0 +1,54 @@ +/** +* Copyright (c) Microsoft Corporation. All rights reserved. +* Licensed under the MIT License. See License.txt in the project root for +* license information. +*/ + +namespace Microsoft.Azure.Management.V2.Network.NetworkSecurityGroup.Update +{ + + using Microsoft.Azure.Management.V2.Network; + using Microsoft.Azure.Management.V2.Resource.Core.Resource.Update; + using Microsoft.Azure.Management.V2.Resource.Core.ResourceActions; + using Microsoft.Azure.Management.V2.Network.NetworkSecurityRule.UpdateDefinition; + using Microsoft.Azure.Management.V2.Network.NetworkSecurityRule.Update; + /// + /// The template for an update operation, containing all the settings that + /// can be modified. + ///

+ /// Call {@link Update#apply()} to apply the changes to the resource in Azure. + ///

+ public interface IUpdate : + IAppliable, + IUpdateWithTags, + IWithRule + { + } + /// + /// The stage of the resource definition allowing to add or remove security rules. + /// + public interface IWithRule + { + /// + /// Removes an existing security rule. + /// + /// name the name of the security rule to remove + /// the next stage of the network security group description + Microsoft.Azure.Management.V2.Network.NetworkSecurityGroup.Update.IUpdate WithoutRule (string name); + + /// + /// Begins the definition of a new security rule to be added to this network security group. + /// + /// name the name of the new security rule + /// the first stage of the new security rule definition + IBlank DefineRule (string name); + + /// + /// Begins the description of an update of an existing security rule of this network security group. + /// + /// name the name of an existing security rule + /// the first stage of the security rule update description + Microsoft.Azure.Management.V2.Network.NetworkSecurityRule.Update.IUpdate UpdateRule (string name); + + } +} \ No newline at end of file diff --git a/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Domain/NetworkSecurityRule/Definition/IDefinition.cs b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Domain/NetworkSecurityRule/Definition/IDefinition.cs new file mode 100644 index 000000000..49c275cbc --- /dev/null +++ b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Domain/NetworkSecurityRule/Definition/IDefinition.cs @@ -0,0 +1,224 @@ +/** +* Copyright (c) Microsoft Corporation. All rights reserved. +* Licensed under the MIT License. See License.txt in the project root for +* license information. +*/ + +namespace Microsoft.Azure.Management.V2.Network.NetworkSecurityRule.Definition +{ + + using Microsoft.Azure.Management.V2.Resource.Core.ChildResource.Definition; + /// + /// The stage of the security rule definition allowing the protocol that the rule applies to to be specified. + /// @param the return type of the final {@link WithAttach#attach()} + /// + public interface IWithProtocol + { + /// + /// Specifies the protocol that this rule applies to. + /// + /// protocol one of the supported protocols + /// the next stage of the security rule definition + IWithAttach WithProtocol (string protocol); + + /// + /// Makes this rule apply to any supported protocol. + /// + /// the next stage of the security rule definition + IWithAttach WithAnyProtocol (); + + } + /// + /// The final stage of the security rule definition. + ///

+ /// At this stage, any remaining optional settings can be specified, or the security rule definition + /// can be attached to the parent network security group definition using {@link WithAttach#attach()}. + /// @param the return type of {@link WithAttach#attach()} + ///

+ public interface IWithAttach : + IInDefinition, + IWithPriority, + IWithDescription + { + } + /// + /// The stage of the network rule definition allowing the destination port(s) to be specified. + /// @param the return type of the final {@link WithAttach#attach()} + /// + public interface IWithDestinationPort + { + /// + /// Specifies the destination port to which this rule applies. + /// + /// port the destination port number + /// the next stage of the security rule definition + IWithProtocol ToPort (int port); + + /// + /// Makes this rule apply to any destination port. + /// + /// the next stage of the security rule definition + IWithProtocol ToAnyPort (); + + /// + /// Specifies the destination port range to which this rule applies. + /// + /// from the starting port number + /// to the ending port number + /// the next stage of the security rule definition + IWithProtocol ToPortRange (int from, int to); + + } + /// + /// The stage of the network rule definition allowing the description to be specified. + /// @param the return type of the final {@link WithAttach#attach()} + /// + public interface IWithDescription + { + /// + /// Specifies a description for this security rule. + /// + /// description the text description to associate with this security rule + /// the next stage + IWithAttach WithDescription (string description); + + } + /// + /// The stage of the network rule definition allowing the destination address to be specified. + /// @param the return type of the final {@link WithAttach#attach()} + /// + public interface IWithDestinationAddress + { + /// + /// Specifies the traffic destination address range to which this rule applies. + /// + /// cidr an IP address range expressed in the CIDR notation + /// the next stage of the security rule definition + IWithDestinationPort ToAddress (string cidr); + + /// + /// Makes the rule apply to any traffic destination address. + /// + /// the next stage of the security rule definition + IWithDestinationPort ToAnyAddress (); + + } + /// + /// The stage of the network rule definition allowing the priority to be specified. + /// @param the return type of the final {@link WithAttach#attach()} + /// + public interface IWithPriority + { + /// + /// Specifies the priority to assign to this rule. + ///

+ /// Security rules are applied in the order of their assigned priority. + ///

+ /// priority the priority number in the range 100 to 4096 + /// the next stage + IWithAttach WithPriority (int priority); + + } + /// + /// The first stage of a security rule definition. + /// @param the return type of the final {@link WithAttach#attach()} + /// + public interface IBlank : + IWithDirectionAccess + { + } + /// + /// The entirety of a network security rule definition. + /// @param the return type of the final {@link Attachable#attach()} + /// + public interface IDefinition : + IBlank, + IWithAttach, + IWithDirectionAccess, + IWithSourceAddress, + IWithSourcePort, + IWithDestinationAddress, + IWithDestinationPort, + IWithProtocol + { + } + /// + /// The stage of the network rule definition allowing the source port(s) to be specified. + /// @param the return type of the final {@link WithAttach#attach()} + /// + public interface IWithSourcePort + { + /// + /// Specifies the source port to which this rule applies. + /// + /// port the source port number + /// the next stage of the security rule definition + IWithDestinationAddress FromPort (int port); + + /// + /// Makes this rule apply to any source port. + /// + /// the next stage of the security rule definition + IWithDestinationAddress FromAnyPort (); + + /// + /// Specifies the source port range to which this rule applies. + /// + /// from the starting port number + /// to the ending port number + /// the next stage of the security rule definition + IWithDestinationAddress FromPortRange (int from, int to); + + } + /// + /// The stage of the network rule definition allowing the source address to be specified. + /// @param the return type of the final {@link WithAttach#attach()} + /// + public interface IWithSourceAddress + { + /// + /// Specifies the traffic source address prefix to which this rule applies. + /// + /// cidr an IP address prefix expressed in the CIDR notation + /// the next stage of the security rule definition + IWithSourcePort FromAddress (string cidr); + + /// + /// Specifies that the rule applies to any traffic source address. + /// + /// the next stage of the security rule definition + IWithSourcePort FromAnyAddress (); + + } + /// + /// The stage of the network rule definition allowing the direction and the access type to be specified. + /// @param the return type of the final {@link WithAttach#attach()} + /// + public interface IWithDirectionAccess + { + /// + /// Allows inbound traffic. + /// + /// the next stage of the security rule definition + IWithSourceAddress AllowInbound (); + + /// + /// Allows outbound traffic. + /// + /// the next stage of the security rule definition + IWithSourceAddress AllowOutbound (); + + /// + /// Blocks inbound traffic. + /// + /// the next stage of the security rule definition + IWithSourceAddress DenyInbound (); + + /// + /// Blocks outbound traffic. + /// + /// the next stage of the security rule definition + IWithSourceAddress DenyOutbound (); + + } +} \ No newline at end of file diff --git a/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Domain/NetworkSecurityRule/Update/IUpdate.cs b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Domain/NetworkSecurityRule/Update/IUpdate.cs new file mode 100644 index 000000000..1d7877267 --- /dev/null +++ b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Domain/NetworkSecurityRule/Update/IUpdate.cs @@ -0,0 +1,182 @@ +/** +* Copyright (c) Microsoft Corporation. All rights reserved. +* Licensed under the MIT License. See License.txt in the project root for +* license information. +*/ + +namespace Microsoft.Azure.Management.V2.Network.NetworkSecurityRule.Update +{ + + using Microsoft.Azure.Management.V2.Network.NetworkSecurityGroup.Update; + using Microsoft.Azure.Management.V2.Resource.Core.ChildResourceActions; + /// + /// The stage of the network rule description allowing the destination port(s) to be specified. + /// + public interface IWithDestinationPort + { + /// + /// Specifies the destination port to which this rule applies. + /// + /// port the destination port number + /// the next stage of the security rule definition + Microsoft.Azure.Management.V2.Network.NetworkSecurityRule.Update.IUpdate ToPort (int port); + + /// + /// Makes this rule apply to any destination port. + /// + /// the next stage of the security rule definition + Microsoft.Azure.Management.V2.Network.NetworkSecurityRule.Update.IUpdate ToAnyPort (); + + /// + /// Specifies the destination port range to which this rule applies. + /// + /// from the starting port number + /// to the ending port number + /// the next stage of the security rule definition + Microsoft.Azure.Management.V2.Network.NetworkSecurityRule.Update.IUpdate ToPortRange (int from, int to); + + } + /// + /// The stage of the network rule description allowing the direction and the access type to be specified. + /// + public interface IWithDirectionAccess + { + /// + /// Allows inbound traffic. + /// + /// the next stage of the security rule definition + Microsoft.Azure.Management.V2.Network.NetworkSecurityRule.Update.IUpdate AllowInbound (); + + /// + /// Allows outbound traffic. + /// + /// the next stage of the security rule definition + Microsoft.Azure.Management.V2.Network.NetworkSecurityRule.Update.IUpdate AllowOutbound (); + + /// + /// Blocks inbound traffic. + /// + /// the next stage of the security rule definition + Microsoft.Azure.Management.V2.Network.NetworkSecurityRule.Update.IUpdate DenyInbound (); + + /// + /// Blocks outbound traffic. + /// + /// the next stage of the security rule definition + Microsoft.Azure.Management.V2.Network.NetworkSecurityRule.Update.IUpdate DenyOutbound (); + + } + /// + /// The stage of the network rule description allowing the source address to be specified. + /// + public interface IWithSourceAddress + { + /// + /// Specifies the traffic source address prefix to which this rule applies. + /// + /// cidr an IP address prefix expressed in the CIDR notation + /// the next stage of the security rule definition + Microsoft.Azure.Management.V2.Network.NetworkSecurityRule.Update.IUpdate FromAddress (string cidr); + + /// + /// Specifies that the rule applies to any traffic source address. + /// + /// the next stage of the security rule definition + Microsoft.Azure.Management.V2.Network.NetworkSecurityRule.Update.IUpdate FromAnyAddress (); + + } + /// + /// The entirety of a security rule update as part of a network security group update. + /// + public interface IUpdate : + IWithDirectionAccess, + IWithSourceAddress, + IWithSourcePort, + IWithDestinationAddress, + IWithDestinationPort, + IWithProtocol, + ISettable + { + /// + /// Specifies the priority to assign to this security rule. + ///

+ /// Security rules are applied in the order of their assigned priority. + ///

+ /// priority the priority number in the range 100 to 4096 + /// the next stage of the update + Microsoft.Azure.Management.V2.Network.NetworkSecurityRule.Update.IUpdate WithPriority (int priority); + + /// + /// Specifies a description for this security rule. + /// + /// description a text description to associate with this security rule + /// the next stage + Microsoft.Azure.Management.V2.Network.NetworkSecurityRule.Update.IUpdate WithDescription (string description); + + } + /// + /// The stage of the network rule description allowing the source port(s) to be specified. + /// + public interface IWithSourcePort + { + /// + /// Specifies the source port to which this rule applies. + /// + /// port the source port number + /// the next stage of the security rule definition + Microsoft.Azure.Management.V2.Network.NetworkSecurityRule.Update.IUpdate FromPort (int port); + + /// + /// Makes this rule apply to any source port. + /// + /// the next stage of the security rule definition + Microsoft.Azure.Management.V2.Network.NetworkSecurityRule.Update.IUpdate FromAnyPort (); + + /// + /// Specifies the source port range to which this rule applies. + /// + /// from the starting port number + /// to the ending port number + /// the next stage of the security rule definition + Microsoft.Azure.Management.V2.Network.NetworkSecurityRule.Update.IUpdate FromPortRange (int from, int to); + + } + /// + /// The stage of the security rule description allowing the protocol that the rule applies to to be specified. + /// + public interface IWithProtocol + { + /// + /// Specifies the protocol that this rule applies to. + /// + /// protocol one of the supported protocols + /// the next stage of the security rule definition + Microsoft.Azure.Management.V2.Network.NetworkSecurityRule.Update.IUpdate WithProtocol (string protocol); + + /// + /// Makes this rule apply to any supported protocol. + /// + /// the next stage of the security rule definition + Microsoft.Azure.Management.V2.Network.NetworkSecurityRule.Update.IUpdate WithAnyProtocol (); + + } + /// + /// The stage of the network rule description allowing the destination address to be specified. + /// + public interface IWithDestinationAddress + { + /// + /// Specifies the traffic destination address range to which this rule applies. + /// + /// cidr an IP address range expressed in the CIDR notation + /// the next stage of the security rule definition + Microsoft.Azure.Management.V2.Network.NetworkSecurityRule.Update.IUpdate ToAddress (string cidr); + + /// + /// Makes the rule apply to any traffic destination address. + /// + /// the next stage of the security rule definition + Microsoft.Azure.Management.V2.Network.NetworkSecurityRule.Update.IUpdate ToAnyAddress (); + + } +} \ No newline at end of file diff --git a/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Domain/NetworkSecurityRule/UpdateDefinition/IUpdateDefinition.cs b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Domain/NetworkSecurityRule/UpdateDefinition/IUpdateDefinition.cs new file mode 100644 index 000000000..784c15bfc --- /dev/null +++ b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Domain/NetworkSecurityRule/UpdateDefinition/IUpdateDefinition.cs @@ -0,0 +1,208 @@ +/** +* Copyright (c) Microsoft Corporation. All rights reserved. +* Licensed under the MIT License. See License.txt in the project root for +* license information. +*/ + +namespace Microsoft.Azure.Management.V2.Network.NetworkSecurityRule.UpdateDefinition +{ + + using Microsoft.Azure.Management.V2.Resource.Core.ChildResource.Update; + /// + /// The stage of the network rule definition allowing the destination address to be specified. + /// @param the return type of the final {@link WithAttach#attach()} + /// + public interface IWithDestinationAddress + { + /// + /// Specifies the traffic destination address range to which this rule applies. + /// + /// cidr an IP address range expressed in the CIDR notation + /// the next stage of the security rule definition + IWithDestinationPort ToAddress (string cidr); + + /// + /// Makes the rule apply to any traffic destination address. + /// + /// the next stage of the security rule definition + IWithDestinationPort ToAnyAddress (); + + } + /// + /// The stage of the network rule description allowing the direction and the access type to be specified. + /// @param the return type of the final {@link WithAttach#attach()} + /// + public interface IWithDirectionAccess + { + /// + /// Allows inbound traffic. + /// + /// the next stage of the security rule definition + IWithSourceAddress AllowInbound (); + + /// + /// Allows outbound traffic. + /// + /// the next stage of the security rule definition + IWithSourceAddress AllowOutbound (); + + /// + /// Blocks inbound traffic. + /// + /// the next stage of the security rule definition + IWithSourceAddress DenyInbound (); + + /// + /// Blocks outbound traffic. + /// + /// the next stage of the security rule definition + IWithSourceAddress DenyOutbound (); + + } + /// + /// The stage of the network rule definition allowing the source port(s) to be specified. + /// @param the return type of the final {@link WithAttach#attach()} + /// + public interface IWithSourcePort + { + /// + /// Specifies the source port to which this rule applies. + /// + /// port the source port number + /// the next stage of the security rule definition + IWithDestinationAddress FromPort (int port); + + /// + /// Makes this rule apply to any source port. + /// + /// the next stage of the security rule definition + IWithDestinationAddress FromAnyPort (); + + /// + /// Specifies the source port range to which this rule applies. + /// + /// from the starting port number + /// to the ending port number + /// the next stage of the security rule definition + IWithDestinationAddress FromPortRange (int from, int to); + + } + /// + /// The stage of the network rule definition allowing the source address to be specified. + /// @param the return type of the final {@link WithAttach#attach()} + /// + public interface IWithSourceAddress + { + /// + /// Specifies the traffic source address prefix to which this rule applies. + /// + /// cidr an IP address prefix expressed in the CIDR notation + /// the next stage of the security rule definition + IWithSourcePort FromAddress (string cidr); + + /// + /// Specifies that the rule applies to any traffic source address. + /// + /// the next stage of the security rule definition + IWithSourcePort FromAnyAddress (); + + } + /// + /// The stage of the network rule definition allowing the destination port(s) to be specified. + /// @param the return type of the final {@link WithAttach#attach()} + /// + public interface IWithDestinationPort + { + /// + /// Specifies the destination port to which this rule applies. + /// + /// port the destination port number + /// the next stage of the security rule definition + IWithProtocol ToPort (int port); + + /// + /// Makes this rule apply to any destination port. + /// + /// the next stage of the security rule definition + IWithProtocol ToAnyPort (); + + /// + /// Specifies the destination port range to which this rule applies. + /// + /// from the starting port number + /// to the ending port number + /// the next stage of the security rule definition + IWithProtocol ToPortRange (int from, int to); + + } + /// + /// The stage of the security rule definition allowing the protocol that the rule applies to to be specified. + /// @param the return type of the final {@link WithAttach#attach()} + /// + public interface IWithProtocol + { + /// + /// Specifies the protocol that this rule applies to. + /// + /// protocol one of the supported protocols + /// the next stage of the security rule definition + IWithAttach WithProtocol (string protocol); + + /// + /// Makes this rule apply to any supported protocol. + /// + /// the next stage of the security rule definition + IWithAttach WithAnyProtocol (); + + } + /// + /// The final stage of the security rule definition. + ///

+ /// At this stage, any remaining optional settings can be specified, or the security rule definition + /// can be attached to the parent network security group definition using {@link WithAttach#attach()}. + /// @param the return type of {@link WithAttach#attach()} + ///

+ public interface IWithAttach : + IInUpdate + { + /// + /// Specifies the priority to assign to this rule. + ///

+ /// Security rules are applied in the order of their assigned priority. + ///

+ /// priority the priority number in the range 100 to 4096 + /// the next stage of the update + IWithAttach WithPriority (int priority); + + /// + /// Specifies a description for this security rule. + /// + /// descrtiption a text description to associate with the security rule + /// the next stage + IWithAttach WithDescription (string descrtiption); + + } + /// + /// The entirety of a network security rule definition as part of a network security group update. + /// @param the return type of the final {@link UpdateDefinitionStages.WithAttach#attach()} + /// + public interface IUpdateDefinition : + IBlank, + IWithDirectionAccess, + IWithSourceAddress, + IWithSourcePort, + IWithDestinationAddress, + IWithDestinationPort, + IWithProtocol, + IWithAttach + { + } + /// + /// The first stage of a security rule description as part of an update of a networking security group. + /// @param the return type of the final {@link Attachable#attach()} + /// + public interface IBlank : + IWithDirectionAccess + { + } +} \ No newline at end of file diff --git a/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Domain/NicIpConfiguration/Definition/IDefinition.cs b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Domain/NicIpConfiguration/Definition/IDefinition.cs new file mode 100644 index 000000000..1539576fe --- /dev/null +++ b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Domain/NicIpConfiguration/Definition/IDefinition.cs @@ -0,0 +1,176 @@ +/** +* Copyright (c) Microsoft Corporation. All rights reserved. +* Licensed under the MIT License. See License.txt in the project root for +* license information. +*/ + +namespace Microsoft.Azure.Management.V2.Network.NicIpConfiguration.Definition +{ + + using Microsoft.Azure.Management.V2.Resource.Core.ChildResource.Definition; + using Microsoft.Azure.Management.V2.Resource.Core.ResourceActions; + using Microsoft.Azure.Management.V2.Network; + /// + /// The final stage of network interface IP configuration. + ///

+ /// At this stage, any remaining optional settings can be specified, or the network interface IP configuration + /// definition can be attached to the parent network interface definition using {@link WithAttach#attach()}. + /// + /// @param the return type of the final {@link Attachable#attach()} + ///

+ public interface IWithAttach : + IInDefinition, + IWithPublicIpAddress + { + } + /// + /// The stage of the network interface IP configuration definition allowing to associate it with + /// a public IP address. + /// + /// @param the return type of the final {@link Attachable#attach()} + /// + public interface IWithPublicIpAddress + { + /// + /// Create a new public IP address to associate with the network interface IP configuration, + /// based on the provided definition. + /// + /// creatable a creatable definition for a new public IP + /// the next stage of the network interface IP configuration definition + IWithAttach WithNewPublicIpAddress (ICreatable creatable); + + /// + /// Creates a new public IP address in the same region and group as the resource and associate it + /// with with the network interface IP configuration. + ///

+ /// The internal name and DNS label for the public IP address will be derived from the network interface name. + ///

+ /// the next stage of the network interface IP configuration definition + IWithAttach WithNewPublicIpAddress (); + + /// + /// Creates a new public IP address in the same region and group as the resource, with the specified DNS label + /// and associate it with the network interface IP configuration. + ///

+ /// The internal name for the public IP address will be derived from the DNS label. + ///

+ /// leafDnsLabel the leaf domain label + /// tthe next stage of the IP configuration definition + IWithAttach WithNewPublicIpAddress (string leafDnsLabel); + + /// + /// Associates an existing public IP address with the network interface IP configuration. + /// + /// publicIpAddress an existing public IP address + /// the next stage of the IP configuration definition + IWithAttach WithExistingPublicIpAddress (IPublicIpAddress publicIpAddress); + + } + /// + /// The stage of the network interface IP configuration definition allowing to specify subnet. + /// + /// @param the return type of the final {@link Attachable#attach()} + /// + public interface IWithSubnet + { + /// + /// Associate a subnet with the network interface IP configuration. + /// + /// name the subnet name + /// the next stage of the network interface IP configuration definition + IWithPrivateIp WithSubnet (string name); + + } + /// + /// The stage of the network interface IP configuration definition allowing to specify the virtual network. + /// + /// @param the return type of the final {@link Attachable#attach()} + /// + public interface IWithNetwork + { + /// + /// Create a new virtual network to associate with the network interface IP configuration, + /// based on the provided definition. + /// + /// creatable a creatable definition for a new virtual network + /// the next stage of the network interface IP configuration definition + IWithPrivateIp WithNewNetwork (ICreatable creatable); + + /// + /// Creates a new virtual network to associate with the network interface IP configuration. + ///

+ /// the virtual network will be created in the same resource group and region as of parent + /// network interface, it will be created with the specified address space and a default subnet + /// covering the entirety of the network IP address space. + ///

+ /// name the name of the new virtual network + /// addressSpace the address space for rhe virtual network + /// the next stage of the network interface IP configuration definition + IWithPrivateIp WithNewNetwork (string name, string addressSpace); + + /// + /// Creates a new virtual network to associate with the network interface IP configuration. + ///

+ /// the virtual network will be created in the same resource group and region as of parent network interface, + /// it will be created with the specified address space and a default subnet covering the entirety of the + /// network IP address space. + ///

+ /// addressSpace the address space for the virtual network + /// the next stage of the network interface IP configuration definition + IWithPrivateIp WithNewNetwork (string addressSpace); + + /// + /// Associate an existing virtual network with the network interface IP configuration. + /// + /// network an existing virtual network + /// the next stage of the network interface IP configuration definition + IWithSubnet WithExistingNetwork (INetwork network); + + } + /// + /// The stage of the network interface IP configuration definition allowing to specify private IP address + /// within a virtual network subnet. + /// + /// @param the return type of the final {@link Attachable#attach()} + /// + public interface IWithPrivateIp + { + /// + /// Enables dynamic private IP address allocation within the specified existing virtual network + /// subnet for the network interface IP configuration. + /// + /// the next stage of network interface IP configuration definition + IWithAttach WithPrivateIpAddressDynamic (); + + /// + /// Assigns the specified static private IP address within the specified existing virtual network + /// subnet to the network interface IP configuration. + /// + /// staticPrivateIpAddress the static IP address within the specified subnet to assign to + /// the network interface + /// the next stage of network interface IP configuration definition + IWithAttach WithPrivateIpAddressStatic (string staticPrivateIpAddress); + + } + /// + /// The first stage of network interface IP configuration definition. + /// + /// @param the return type of the final {@link Attachable#attach()} + /// + public interface IBlank : + IWithNetwork + { + } + /// + /// The entirety of the network interface IP configuration definition. + /// @param the return type of the final {@link Attachable#attach()} + /// + public interface IDefinition : + IBlank, + IWithAttach, + IWithNetwork, + IWithSubnet, + IWithPrivateIp + { + } +} \ No newline at end of file diff --git a/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Domain/NicIpConfiguration/Update/IUpdate.cs b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Domain/NicIpConfiguration/Update/IUpdate.cs new file mode 100644 index 000000000..2b3ef093f --- /dev/null +++ b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Domain/NicIpConfiguration/Update/IUpdate.cs @@ -0,0 +1,134 @@ +/** +* Copyright (c) Microsoft Corporation. All rights reserved. +* Licensed under the MIT License. See License.txt in the project root for +* license information. +*/ + +namespace Microsoft.Azure.Management.V2.Network.NicIpConfiguration.Update +{ + + using Microsoft.Azure.Management.V2.Network; + using Microsoft.Azure.Management.V2.Resource.Core.ResourceActions; + using Microsoft.Azure.Management.V2.Resource.Core.ChildResourceActions; + using Microsoft.Azure.Management.V2.Network.NetworkInterface.Update; + /// + /// The stage of the network interface IP configuration update allowing to specify the load balancer + /// back end address pool to add it to. + /// + public interface IWithBackendAddressPool + { + /// + /// Adds this network interface's IP configuration to the provided back end address pool of + /// the specified load balancer. + /// + /// name the name of an existing load balancer back end address pool + /// the next stage of the update + Microsoft.Azure.Management.V2.Network.NicIpConfiguration.Update.IUpdate WithBackendAddressPool (string name); + + } + /// + /// The stage of the network interface's IP configuration allowing to specify the load balancer + /// to associate this IP configuration with. + /// + public interface IWithLoadBalancer + { + /// + /// Specifies the load balancer to associate this IP configuration with. + /// + /// loadBalancer an existing load balancer + /// the next stage of the update + IWithBackendAddressPool WithExistingLoadBalancer (ILoadBalancer loadBalancer); + + } + /// + /// The stage of the network interface IP configuration update allowing to specify public IP address. + /// + public interface IWithPublicIpAddress + { + /// + /// Create a new public IP address to associate the network interface IP configuration with, + /// based on the provided definition. + ///

+ /// If there is public IP associated with the IP configuration then that will be removed in + /// favour of this. + ///

+ /// creatable a creatable definition for a new public IP + /// the next stage of the network interface IP configuration update + Microsoft.Azure.Management.V2.Network.NicIpConfiguration.Update.IUpdate WithNewPublicIpAddress (ICreatable creatable); + + /// + /// Creates a new public IP address in the same region and group as the resource and associate it + /// with the IP configuration. + ///

+ /// The internal name and DNS label for the public IP address will be derived from the network interface + /// name, if there is an existing public IP association then that will be removed in favour of this. + ///

+ /// the next stage of the network interface IP configuration update + Microsoft.Azure.Management.V2.Network.NicIpConfiguration.Update.IUpdate WithNewPublicIpAddress (); + + /// + /// Creates a new public IP address in the same region and group as the resource, with the specified DNS + /// label and associate it with the IP configuration. + ///

+ /// The internal name for the public IP address will be derived from the DNS label, if there is an existing + /// public IP association then that will be removed in favour of this + ///

+ /// leafDnsLabel the leaf domain label + /// the next stage of the network interface IP configuration update + Microsoft.Azure.Management.V2.Network.NicIpConfiguration.Update.IUpdate WithNewPublicIpAddress (string leafDnsLabel); + + /// + /// Specifies that remove any public IP associated with the IP configuration. + /// + /// the next stage of the network interface IP configuration update + Microsoft.Azure.Management.V2.Network.NicIpConfiguration.Update.IUpdate WithoutPublicIpAddress (); + + } + /// + /// The stage of the network interface IP configuration update allowing to specify subnet. + /// + public interface IWithSubnet + { + /// + /// Associate a subnet with the network interface IP configuration. + /// + /// name the subnet name + /// the next stage of the network interface IP configuration update + Microsoft.Azure.Management.V2.Network.NicIpConfiguration.Update.IUpdate WithSubnet (string name); + + } + /// + /// The stage of the network interface IP configuration update allowing to specify private IP. + /// + public interface IWithPrivateIp + { + /// + /// Enables dynamic private IP address allocation within the specified existing virtual network + /// subnet to the network interface IP configuration. + /// + /// the next stage of the network interface IP configuration update + Microsoft.Azure.Management.V2.Network.NicIpConfiguration.Update.IUpdate WithPrivateIpAddressDynamic (); + + /// + /// Assigns the specified static private IP address within the specified existing virtual network + /// subnet to the network interface IP configuration. + /// + /// staticPrivateIpAddress the static IP address within the specified subnet to assign to + /// the IP configuration + /// the next stage of the network interface IP configuration update + Microsoft.Azure.Management.V2.Network.NicIpConfiguration.Update.IUpdate WithPrivateIpAddressStatic (string staticPrivateIpAddress); + + } + /// + /// The entirety of a network interface IP configuration update as part of a network interface update. + /// + public interface IUpdate : + ISettable, + IWithSubnet, + IWithPrivateIp, + IWithPublicIpAddress, + IWithLoadBalancer, + IWithBackendAddressPool + { + } +} \ No newline at end of file diff --git a/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Domain/NicIpConfiguration/UpdateDefinition/IUpdateDefinition.cs b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Domain/NicIpConfiguration/UpdateDefinition/IUpdateDefinition.cs new file mode 100644 index 000000000..5b9e0b706 --- /dev/null +++ b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Domain/NicIpConfiguration/UpdateDefinition/IUpdateDefinition.cs @@ -0,0 +1,177 @@ +/** +* Copyright (c) Microsoft Corporation. All rights reserved. +* Licensed under the MIT License. See License.txt in the project root for +* license information. +*/ + +namespace Microsoft.Azure.Management.V2.Network.NicIpConfiguration.UpdateDefinition +{ + + using Microsoft.Azure.Management.V2.Resource.Core.ResourceActions; + using Microsoft.Azure.Management.V2.Network; + using Microsoft.Azure.Management.V2.Resource.Core.ChildResource.Update; + /// + /// The stage of the network interface IP configuration definition allowing to specify the virtual network. + /// + /// @param the return type of the final {@link Attachable#attach()} + /// + public interface IWithNetwork + { + /// + /// Create a new virtual network to associate with the network interface IP configuration, + /// based on the provided definition. + /// + /// creatable a creatable definition for a new virtual network + /// the next stage of the network interface IP configuration definition + IWithPrivateIp WithNewNetwork (ICreatable creatable); + + /// + /// Creates a new virtual network to associate with the network interface IP configuration. + ///

+ /// the virtual network will be created in the same resource group and region as of parent + /// network interface, it will be created with the specified address space and a default subnet + /// covering the entirety of the network IP address space. + ///

+ /// name the name of the new virtual network + /// addressSpace the address space for rhe virtual network + /// the next stage of the network interface IP configuration definition + IWithPrivateIp WithNewNetwork (string name, string addressSpace); + + /// + /// Creates a new virtual network to associate with the network interface IP configuration. + ///

+ /// the virtual network will be created in the same resource group and region as of parent network interface, + /// it will be created with the specified address space and a default subnet covering the entirety of the + /// network IP address space. + ///

+ /// addressSpace the address space for the virtual network + /// the next stage of the network interface IP configuration definition + IWithPrivateIp WithNewNetwork (string addressSpace); + + /// + /// Associate an existing virtual network with the network interface IP configuration. + /// + /// network an existing virtual network + /// the next stage of the network interface IP configuration definition + IWithSubnet WithExistingNetwork (INetwork network); + + } + /// + /// The final stage of network interface IP configuration. + ///

+ /// At this stage, any remaining optional settings can be specified, or the network interface IP configuration + /// definition can be attached to the parent network interface definition using {@link WithAttach#attach()}. + /// + /// @param the return type of the final {@link Attachable#attach()} + ///

+ public interface IWithAttach : + IInUpdate, + IWithPublicIpAddress + { + } + /// + /// The stage of the network interface IP configuration definition allowing to associate it with + /// a public IP address. + /// + /// @param the return type of the final {@link Attachable#attach()} + /// + public interface IWithPublicIpAddress + { + /// + /// Create a new public IP address to associate with the network interface IP configuration, + /// based on the provided definition. + /// + /// creatable a creatable definition for a new public IP + /// the next stage of the network interface IP configuration definition + IWithAttach WithNewPublicIpAddress (ICreatable creatable); + + /// + /// Creates a new public IP address in the same region and group as the resource and associate it + /// with with the network interface IP configuration. + ///

+ /// The internal name and DNS label for the public IP address will be derived from the network interface name. + ///

+ /// the next stage of the network interface IP configuration definition + IWithAttach WithNewPublicIpAddress (); + + /// + /// Creates a new public IP address in the same region and group as the resource, with the specified DNS label + /// and associate it with the network interface IP configuration. + ///

+ /// The internal name for the public IP address will be derived from the DNS label. + ///

+ /// leafDnsLabel the leaf domain label + /// tthe next stage of the IP configuration definition + IWithAttach WithNewPublicIpAddress (string leafDnsLabel); + + /// + /// Associates an existing public IP address with the network interface IP configuration. + /// + /// publicIpAddress an existing public IP address + /// the next stage of the IP configuration definition + IWithAttach WithExistingPublicIpAddress (IPublicIpAddress publicIpAddress); + + } + /// + /// The stage of the network interface IP configuration definition allowing to specify subnet. + /// + /// @param the return type of the final {@link Attachable#attach()} + /// + public interface IWithSubnet + { + /// + /// Associate a subnet with the network interface IP configuration. + /// + /// name the subnet name + /// the next stage of the network interface IP configuration definition + IWithPrivateIp WithSubnet (string name); + + } + /// + /// The stage of the network interface IP configuration definition allowing to specify private IP address + /// within a virtual network subnet. + /// + /// @param the return type of the final {@link Attachable#attach()} + /// + public interface IWithPrivateIp + { + /// + /// Enables dynamic private IP address allocation within the specified existing virtual network + /// subnet for the network interface IP configuration. + /// + /// the next stage of network interface IP configuration definition + IWithAttach WithPrivateIpAddressDynamic (); + + /// + /// Assigns the specified static private IP address within the specified existing virtual network + /// subnet to the network interface IP configuration. + /// + /// staticPrivateIpAddress the static IP address within the specified subnet to assign to + /// the network interface + /// the next stage of network interface IP configuration definition + IWithAttach WithPrivateIpAddressStatic (string staticPrivateIpAddress); + + } + /// + /// The entirety of a network interface IP configuration definition as part of a network interface update. + /// @param the return type of the final {@link UpdateDefinitionStages.WithAttach#attach()} + /// + public interface IUpdateDefinition : + IBlank, + IWithAttach, + IWithNetwork, + IWithPrivateIp, + IWithSubnet, + IWithPublicIpAddress + { + } + /// + /// The first stage of network interface IP configuration definition. + /// + /// @param the return type of the final {@link Attachable#attach()} + /// + public interface IBlank : + IWithNetwork + { + } +} \ No newline at end of file diff --git a/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Domain/PublicIpAddress/Definition/IDefinition.cs b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Domain/PublicIpAddress/Definition/IDefinition.cs new file mode 100644 index 000000000..f5878d643 --- /dev/null +++ b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Domain/PublicIpAddress/Definition/IDefinition.cs @@ -0,0 +1,129 @@ +/** +* Copyright (c) Microsoft Corporation. All rights reserved. +* Licensed under the MIT License. See License.txt in the project root for +* license information. +*/ + +namespace Microsoft.Azure.Management.V2.Network.PublicIpAddress.Definition +{ + + using Microsoft.Azure.Management.V2.Resource.Core.Resource.Definition; + using Microsoft.Azure.Management.V2.Resource.Core.ResourceActions; + using Microsoft.Azure.Management.V2.Network; + using Microsoft.Azure.Management.V2.Resource.Core.GroupableResource.Definition; + /// + /// A public IP address definition allowing to set the IP allocation method (static or dynamic). + /// + public interface IWithIpAddress + { + /// + /// Enables static IP address allocation. + ///

+ /// Use {@link PublicIpAddress#ipAddress()} after the public IP address is created to obtain the + /// actual IP address allocated for this resource by Azure + ///

+ /// the next stage of the public IP address definition + IWithCreate WithStaticIp (); + + /// + /// Enables dynamic IP address allocation. + /// + /// the next stage of the public IP address definition + IWithCreate WithDynamicIp (); + + } + /// + /// A public IP address definition allowing to specify the leaf domain label, if any. + /// + public interface IWithLeafDomainLabel + { + /// + /// Specifies the leaf domain label to associate with this public IP address. + ///

+ /// The fully qualified domain name (FQDN) + /// will be constructed automatically by appending the rest of the domain to this label. + ///

+ /// dnsName the leaf domain label to use. This must follow the required naming convention for leaf domain names. + /// the next stage of the public IP address definition + IWithCreate WithLeafDomainLabel (string dnsName); + + /// + /// Ensures that no leaf domain label will be used. + ///

+ /// This means that this public IP address will not be associated with a domain name. + ///

+ /// the next stage of the public IP address definition + IWithCreate WithoutLeafDomainLabel (); + + } + /// + /// The first stage of a public IP address definition. + /// + public interface IBlank : + IDefinitionWithRegion + { + } + /// + /// A public IP address definition allowing the idle timeout to be specified. + /// + public interface IWithIdleTimeout + { + /// + /// Specifies the timeout (in minutes) for an idle connection. + /// + /// minutes the length of the time out in minutes + /// the next stage of the resource definition + IWithCreate WithIdleTimeoutInMinutes (int minutes); + + } + /// + /// A public IP address definition allowing the reverse FQDN to be specified. + /// + public interface IWithReverseFQDN + { + /// + /// Specifies the reverse FQDN to assign to this public IP address. + ///

+ ///

+ /// reverseFQDN the reverse FQDN to assign + /// the next stage of the resource definition + IWithCreate WithReverseFqdn (string reverseFQDN); + + /// + /// Ensures that no reverse FQDN will be used. + /// + /// the next stage of the resource definition + IWithCreate WithoutReverseFqdn (); + + } + /// + /// The stage of the public IP definition which contains all the minimum required inputs for + /// the resource to be created (via {@link WithCreate#create()}), but also allows + /// for any other optional settings to be specified. + /// + public interface IWithCreate : + ICreatable, + IWithLeafDomainLabel, + IWithIpAddress, + IWithReverseFQDN, + IWithIdleTimeout, + IDefinitionWithTags + { + } + /// + /// Container interface for all the definitions. + /// + public interface IDefinition : + IBlank, + Microsoft.Azure.Management.V2.Network.PublicIpAddress.Definition.IWithGroup, + IWithCreate + { + } + /// + /// The stage of the public IP address definition allowing to specify the resource group. + /// + public interface IWithGroup : + Microsoft.Azure.Management.V2.Resource.Core.GroupableResource.Definition.IWithGroup + { + } +} \ No newline at end of file diff --git a/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Domain/PublicIpAddress/Update/IUpdate.cs b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Domain/PublicIpAddress/Update/IUpdate.cs new file mode 100644 index 000000000..d478a5288 --- /dev/null +++ b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Domain/PublicIpAddress/Update/IUpdate.cs @@ -0,0 +1,104 @@ +/** +* Copyright (c) Microsoft Corporation. All rights reserved. +* Licensed under the MIT License. See License.txt in the project root for +* license information. +*/ + +namespace Microsoft.Azure.Management.V2.Network.PublicIpAddress.Update +{ + + using Microsoft.Azure.Management.V2.Resource.Core.Resource.Update; + using Microsoft.Azure.Management.V2.Resource.Core.ResourceActions; + using Microsoft.Azure.Management.V2.Network; + /// + /// A public IP address update allowing to change the IP allocation method (static or dynamic). + /// + public interface IWithIpAddress + { + /// + /// Enables static IP address allocation. + ///

+ /// Use {@link PublicIpAddress#ipAddress()} after the public IP address is updated to + /// obtain the actual IP address allocated for this resource by Azure + ///

+ /// the next stage of the resource update + IUpdate WithStaticIp (); + + /// + /// Enables dynamic IP address allocation. + /// + /// the next stage of the resource update + IUpdate WithDynamicIp (); + + } + /// + /// A public IP address update allowing the idle timeout to be changed. + /// + public interface IWithIdleTimout + { + /// + /// Specifies the timeout (in minutes) for an idle connection. + /// + /// minutes the length of the time out in minutes + /// the next stage of the resource update + IUpdate WithIdleTimeoutInMinutes (int minutes); + + } + /// + /// A public IP address update allowing the reverse FQDN to be changed. + /// + public interface IWithReverseFQDN + { + /// + /// Specifies the reverse FQDN to assign to this public IP address. + /// + /// reverseFQDN the reverse FQDN to assign + /// the next stage of the resource update + IUpdate WithReverseFqdn (string reverseFQDN); + + /// + /// Ensures that no reverse FQDN will be used. + /// + /// The next stage of the resource update + IUpdate WithoutReverseFqdn (); + + } + /// + /// Container interface for all the updates. + ///

+ /// Use {@link Update#apply()} to apply the changes to the resource in Azure. + ///

+ public interface IUpdate : + IAppliable, + IWithIpAddress, + IWithLeafDomainLabel, + IWithReverseFQDN, + IWithIdleTimout, + IUpdateWithTags + { + } + /// + /// A public IP address update allowing to change the leaf domain label, if any. + /// + public interface IWithLeafDomainLabel + { + /// + /// Specifies the leaf domain label to associate with this public IP address. + ///

+ /// The fully qualified domain name (FQDN) + /// will be constructed automatically by appending the rest of the domain to this label. + ///

+ /// dnsName the leaf domain label to use. This must follow the required naming convention for leaf domain names. + /// the next stage of the resource update + IUpdate WithLeafDomainLabel (string dnsName); + + /// + /// Ensures that no leaf domain label will be used. + ///

+ /// This means that this public IP address will not be associated with a domain name. + ///

+ /// the next stage of the resource update + IUpdate WithoutLeafDomainLabel (); + + } +} \ No newline at end of file diff --git a/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Domain/Subnet/Definition/IDefinition.cs b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Domain/Subnet/Definition/IDefinition.cs new file mode 100644 index 000000000..f3cff2a9f --- /dev/null +++ b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Domain/Subnet/Definition/IDefinition.cs @@ -0,0 +1,77 @@ +/** +* Copyright (c) Microsoft Corporation. All rights reserved. +* Licensed under the MIT License. See License.txt in the project root for +* license information. +*/ + +namespace Microsoft.Azure.Management.V2.Network.Subnet.Definition +{ + + using Microsoft.Azure.Management.V2.Resource.Core.ChildResource.Definition; + using Microsoft.Azure.Management.V2.Network; + /// + /// The stage of the subnet definition allowing to specify the address space for the subnet. + /// @param the parent type + /// + public interface IWithAddressPrefix + { + /// + /// Specifies the IP address space of the subnet, within the address space of the network. + /// + /// cidr the IP address space prefix using the CIDR notation + /// the next stage of the subnet definition + IWithAttach WithAddressPrefix (string cidr); + + } + /// + /// The first stage of the subnet definition. + /// @param the return type of the final {@link WithAttach#attach()} + /// + public interface IBlank : + IWithAddressPrefix + { + } + /// + /// The entirety of a Subnet definition. + /// @param the return type of the final {@link DefinitionStages.WithAttach#attach()} + /// + public interface IDefinition : + IBlank, + IWithAddressPrefix, + IWithAttach + { + } + /// + /// The final stage of the subnet definition. + ///

+ /// At this stage, any remaining optional settings can be specified, or the subnet definition + /// can be attached to the parent virtual network definition using {@link WithAttach#attach()}. + /// @param the return type of {@link WithAttach#attach()} + ///

+ public interface IWithAttach : + IInDefinition, + IWithNetworkSecurityGroup + { + } + /// + /// The stage of the subnet definition allowing to specify the network security group to assign to the subnet. + /// @param the parent type + /// + public interface IWithNetworkSecurityGroup + { + /// + /// Assigns an existing network security group to this subnet. + /// + /// resourceId the resource ID of the network security group + /// the next stage of the definition + IWithAttach WithExistingNetworkSecurityGroup (string resourceId); + + /// + /// Assigns an existing network security group to this subnet. + /// + /// nsg the network security group to assign + /// the next stage of the definition + IWithAttach WithExistingNetworkSecurityGroup (INetworkSecurityGroup nsg); + + } +} \ No newline at end of file diff --git a/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Domain/Subnet/Update/IUpdate.cs b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Domain/Subnet/Update/IUpdate.cs new file mode 100644 index 000000000..244278108 --- /dev/null +++ b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Domain/Subnet/Update/IUpdate.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. +*/ + +namespace Microsoft.Azure.Management.V2.Network.Subnet.Update +{ + + using Microsoft.Azure.Management.V2.Network; + using Microsoft.Azure.Management.V2.Network.Network.Update; + using Microsoft.Azure.Management.V2.Resource.Core.ChildResourceActions; + /// + /// The stage of the subnet update allowing to change the network security group to assign to the subnet. + /// + public interface IWithNetworkSecurityGroup + { + /// + /// Assigns an existing network security group to this subnet. + /// + /// resourceId the resource ID of the network security group + /// the next stage of the update + Microsoft.Azure.Management.V2.Network.Subnet.Update.IUpdate WithExistingNetworkSecurityGroup (string resourceId); + + /// + /// Assigns an existing network security group to this subnet. + /// + /// nsg the network security group to assign + /// the next stage of the update + Microsoft.Azure.Management.V2.Network.Subnet.Update.IUpdate WithExistingNetworkSecurityGroup (INetworkSecurityGroup nsg); + + } + /// + /// The entirety of a subnet update as part of a network update. + /// + public interface IUpdate : + IWithAddressPrefix, + IWithNetworkSecurityGroup, + ISettable + { + } + /// + /// The stage of the subnet update allowing to change the address space for the subnet. + /// + public interface IWithAddressPrefix + { + /// + /// Specifies the IP address space of the subnet, within the address space of the network. + /// + /// cidr the IP address space prefix using the CIDR notation + /// the next stage + Microsoft.Azure.Management.V2.Network.Subnet.Update.IUpdate WithAddressPrefix (string cidr); + + } +} \ No newline at end of file diff --git a/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Domain/Subnet/UpdateDefinition/IUpdateDefinition.cs b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Domain/Subnet/UpdateDefinition/IUpdateDefinition.cs new file mode 100644 index 000000000..a6003a9cd --- /dev/null +++ b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Domain/Subnet/UpdateDefinition/IUpdateDefinition.cs @@ -0,0 +1,78 @@ +/** +* Copyright (c) Microsoft Corporation. All rights reserved. +* Licensed under the MIT License. See License.txt in the project root for +* license information. +*/ + +namespace Microsoft.Azure.Management.V2.Network.Subnet.UpdateDefinition +{ + + using Microsoft.Azure.Management.V2.Network; + using Microsoft.Azure.Management.V2.Resource.Core.ChildResource.Update; + /// + /// The entirety of a subnet definition as part of a virtual network update. + /// @param the return type of the final {@link UpdateDefinitionStages.WithAttach#attach()} + /// + public interface IUpdateDefinition : + IBlank, + IWithAddressPrefix, + IWithNetworkSecurityGroup, + IWithAttach + { + } + /// + /// The stage of the subnet definition allowing to specify the network security group to assign to the subnet. + /// @param the parent type + /// + public interface IWithNetworkSecurityGroup + { + /// + /// Assigns an existing network security group to this subnet. + /// + /// resourceId the resource ID of the network security group + /// the next stage of the definition + IWithAttach WithExistingNetworkSecurityGroup (string resourceId); + + /// + /// Assigns an existing network security group to this subnet. + /// + /// nsg the network security group to assign + /// the next stage of the definition + IWithAttach WithExistingNetworkSecurityGroup (INetworkSecurityGroup nsg); + + } + /// + /// The first stage of the subnet definition. + /// @param the return type of the final {@link WithAttach#attach()} + /// + public interface IBlank : + IWithAddressPrefix + { + } + /// + /// The stage of the subnet definition allowing to specify the address space for the subnet. + /// @param the parent type + /// + public interface IWithAddressPrefix + { + /// + /// Specifies the IP address space of the subnet, within the address space of the network. + /// + /// cidr the IP address space prefix using the CIDR notation + /// the next stage of the subnet definition + IWithAttach WithAddressPrefix (string cidr); + + } + /// + /// The final stage of the subnet definition. + ///

+ /// At this stage, any remaining optional settings can be specified, or the subnet definition + /// can be attached to the parent virtual network definition using {@link WithAttach#attach()}. + /// @param the return type of {@link WithAttach#attach()} + ///

+ public interface IWithAttach : + IInUpdate, + IWithNetworkSecurityGroup + { + } +} \ No newline at end of file diff --git a/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/ApplicationGatewaysOperations.cs b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/ApplicationGatewaysOperations.cs new file mode 100644 index 000000000..b32950d28 --- /dev/null +++ b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/ApplicationGatewaysOperations.cs @@ -0,0 +1,1744 @@ +// 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 0.17.0.0 +// 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; + + /// + /// ApplicationGatewaysOperations operations. + /// + internal partial class ApplicationGatewaysOperations : Microsoft.Rest.IServiceOperations, IApplicationGatewaysOperations + { + /// + /// Initializes a new instance of the ApplicationGatewaysOperations class. + /// + /// + /// Reference to the service client. + /// + /// + /// Thrown when a required parameter is null + /// + internal ApplicationGatewaysOperations(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; } + + /// + /// The delete applicationgateway operation deletes the specified + /// applicationgateway. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the applicationgateway. + /// + /// + /// The headers that will be added to request. + /// + /// + /// The cancellation token. + /// + public async System.Threading.Tasks.Task DeleteWithHttpMessagesAsync(string resourceGroupName, string applicationGatewayName, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + // Send request + Microsoft.Rest.Azure.AzureOperationResponse _response = await BeginDeleteWithHttpMessagesAsync( + resourceGroupName, applicationGatewayName, customHeaders, cancellationToken); + return await this.Client.GetPostOrDeleteOperationResultAsync(_response, customHeaders, cancellationToken); + } + + /// + /// The delete applicationgateway operation deletes the specified + /// applicationgateway. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the applicationgateway. + /// + /// + /// 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 + /// + /// + /// A response object containing the response body and response headers. + /// + public async System.Threading.Tasks.Task BeginDeleteWithHttpMessagesAsync(string resourceGroupName, string applicationGatewayName, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + if (resourceGroupName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "resourceGroupName"); + } + if (applicationGatewayName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "applicationGatewayName"); + } + if (this.Client.ApiVersion == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.ApiVersion"); + } + if (this.Client.SubscriptionId == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.SubscriptionId"); + } + // 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("applicationGatewayName", applicationGatewayName); + 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/applicationGateways/{applicationGatewayName}").ToString(); + _url = _url.Replace("{resourceGroupName}", System.Uri.EscapeDataString(resourceGroupName)); + _url = _url.Replace("{applicationGatewayName}", System.Uri.EscapeDataString(applicationGatewayName)); + _url = _url.Replace("{subscriptionId}", System.Uri.EscapeDataString(this.Client.SubscriptionId)); + System.Collections.Generic.List _queryParameters = new System.Collections.Generic.List(); + if (this.Client.ApiVersion != null) + { + _queryParameters.Add(string.Format("api-version={0}", System.Uri.EscapeDataString(this.Client.ApiVersion))); + } + if (_queryParameters.Count > 0) + { + _url += "?" + string.Join("&", _queryParameters); + } + // Create HTTP transport objects + System.Net.Http.HttpRequestMessage _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 && (int)_statusCode != 200) + { + var ex = new Microsoft.Rest.Azure.CloudException(string.Format("Operation returned an invalid status code '{0}'", _statusCode)); + if (_httpResponse.Content != null) { + _responseContent = await _httpResponse.Content.ReadAsStringAsync().ConfigureAwait(false); + } + else { + _responseContent = string.Empty; + } + ex.Request = new Microsoft.Rest.HttpRequestMessageWrapper(_httpRequest, _requestContent); + ex.Response = new Microsoft.Rest.HttpResponseMessageWrapper(_httpResponse, _responseContent); + if (_httpResponse.Headers.Contains("x-ms-request-id")) + { + ex.RequestId = _httpResponse.Headers.GetValues("x-ms-request-id").FirstOrDefault(); + } + 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(); + } + if (_shouldTrace) + { + Microsoft.Rest.ServiceClientTracing.Exit(_invocationId, _result); + } + return _result; + } + + /// + /// The Get applicationgateway operation retreives information about the + /// specified applicationgateway. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the applicationgateway. + /// + /// + /// 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 + /// + /// + /// A response object containing the response body and response headers. + /// + public async System.Threading.Tasks.Task> GetWithHttpMessagesAsync(string resourceGroupName, string applicationGatewayName, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + if (resourceGroupName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "resourceGroupName"); + } + if (applicationGatewayName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "applicationGatewayName"); + } + if (this.Client.ApiVersion == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.ApiVersion"); + } + if (this.Client.SubscriptionId == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.SubscriptionId"); + } + // 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("applicationGatewayName", applicationGatewayName); + 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/applicationGateways/{applicationGatewayName}").ToString(); + _url = _url.Replace("{resourceGroupName}", System.Uri.EscapeDataString(resourceGroupName)); + _url = _url.Replace("{applicationGatewayName}", System.Uri.EscapeDataString(applicationGatewayName)); + _url = _url.Replace("{subscriptionId}", System.Uri.EscapeDataString(this.Client.SubscriptionId)); + System.Collections.Generic.List _queryParameters = new System.Collections.Generic.List(); + if (this.Client.ApiVersion != null) + { + _queryParameters.Add(string.Format("api-version={0}", System.Uri.EscapeDataString(this.Client.ApiVersion))); + } + if (_queryParameters.Count > 0) + { + _url += "?" + string.Join("&", _queryParameters); + } + // Create HTTP transport objects + System.Net.Http.HttpRequestMessage _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); + CloudError _errorBody = Microsoft.Rest.Serialization.SafeJsonConvert.DeserializeObject(_responseContent, this.Client.DeserializationSettings); + if (_errorBody != null) + { + ex = new Microsoft.Rest.Azure.CloudException(_errorBody.Message); + 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 (_httpResponse.Headers.Contains("x-ms-request-id")) + { + ex.RequestId = _httpResponse.Headers.GetValues("x-ms-request-id").FirstOrDefault(); + } + 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; + } + + /// + /// The Put ApplicationGateway operation creates/updates a ApplicationGateway + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the ApplicationGateway. + /// + /// + /// Parameters supplied to the create/delete ApplicationGateway operation + /// + /// + /// The headers that will be added to request. + /// + /// + /// The cancellation token. + /// + public async System.Threading.Tasks.Task> CreateOrUpdateWithHttpMessagesAsync(string resourceGroupName, string applicationGatewayName, ApplicationGatewayInner 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, applicationGatewayName, parameters, customHeaders, cancellationToken); + return await this.Client.GetPutOrPatchOperationResultAsync(_response, + customHeaders, + cancellationToken); + } + + /// + /// The Put ApplicationGateway operation creates/updates a ApplicationGateway + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the ApplicationGateway. + /// + /// + /// Parameters supplied to the create/delete ApplicationGateway 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 + /// + /// + /// A response object containing the response body and response headers. + /// + public async System.Threading.Tasks.Task> BeginCreateOrUpdateWithHttpMessagesAsync(string resourceGroupName, string applicationGatewayName, ApplicationGatewayInner parameters, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + if (resourceGroupName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "resourceGroupName"); + } + if (applicationGatewayName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "applicationGatewayName"); + } + if (parameters == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "parameters"); + } + if (this.Client.ApiVersion == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.ApiVersion"); + } + if (this.Client.SubscriptionId == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.SubscriptionId"); + } + // 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("applicationGatewayName", applicationGatewayName); + 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/applicationGateways/{applicationGatewayName}").ToString(); + _url = _url.Replace("{resourceGroupName}", System.Uri.EscapeDataString(resourceGroupName)); + _url = _url.Replace("{applicationGatewayName}", System.Uri.EscapeDataString(applicationGatewayName)); + _url = _url.Replace("{subscriptionId}", System.Uri.EscapeDataString(this.Client.SubscriptionId)); + System.Collections.Generic.List _queryParameters = new System.Collections.Generic.List(); + if (this.Client.ApiVersion != null) + { + _queryParameters.Add(string.Format("api-version={0}", System.Uri.EscapeDataString(this.Client.ApiVersion))); + } + if (_queryParameters.Count > 0) + { + _url += "?" + string.Join("&", _queryParameters); + } + // Create HTTP transport objects + System.Net.Http.HttpRequestMessage _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 != 201 && (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); + CloudError _errorBody = Microsoft.Rest.Serialization.SafeJsonConvert.DeserializeObject(_responseContent, this.Client.DeserializationSettings); + if (_errorBody != null) + { + ex = new Microsoft.Rest.Azure.CloudException(_errorBody.Message); + 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 (_httpResponse.Headers.Contains("x-ms-request-id")) + { + ex.RequestId = _httpResponse.Headers.GetValues("x-ms-request-id").FirstOrDefault(); + } + 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 == 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); + } + } + // 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; + } + + /// + /// The List ApplicationGateway opertion retrieves all the applicationgateways + /// in a resource group. + /// + /// + /// The name of the resource group. + /// + /// + /// 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 + /// + /// + /// A response object containing the response body and response headers. + /// + public async System.Threading.Tasks.Task>> ListWithHttpMessagesAsync(string resourceGroupName, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + if (resourceGroupName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "resourceGroupName"); + } + if (this.Client.ApiVersion == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.ApiVersion"); + } + if (this.Client.SubscriptionId == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.SubscriptionId"); + } + // 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("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/applicationGateways").ToString(); + _url = _url.Replace("{resourceGroupName}", System.Uri.EscapeDataString(resourceGroupName)); + _url = _url.Replace("{subscriptionId}", System.Uri.EscapeDataString(this.Client.SubscriptionId)); + System.Collections.Generic.List _queryParameters = new System.Collections.Generic.List(); + if (this.Client.ApiVersion != null) + { + _queryParameters.Add(string.Format("api-version={0}", System.Uri.EscapeDataString(this.Client.ApiVersion))); + } + if (_queryParameters.Count > 0) + { + _url += "?" + string.Join("&", _queryParameters); + } + // Create HTTP transport objects + System.Net.Http.HttpRequestMessage _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); + CloudError _errorBody = Microsoft.Rest.Serialization.SafeJsonConvert.DeserializeObject(_responseContent, this.Client.DeserializationSettings); + if (_errorBody != null) + { + ex = new Microsoft.Rest.Azure.CloudException(_errorBody.Message); + 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 (_httpResponse.Headers.Contains("x-ms-request-id")) + { + ex.RequestId = _httpResponse.Headers.GetValues("x-ms-request-id").FirstOrDefault(); + } + 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; + } + + /// + /// The List applicationgateway opertion retrieves all the applicationgateways + /// in a subscription. + /// + /// + /// 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 + /// + /// + /// A response object containing the response body and response headers. + /// + public async System.Threading.Tasks.Task>> ListAllWithHttpMessagesAsync(System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + if (this.Client.ApiVersion == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.ApiVersion"); + } + if (this.Client.SubscriptionId == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.SubscriptionId"); + } + // 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("cancellationToken", cancellationToken); + Microsoft.Rest.ServiceClientTracing.Enter(_invocationId, this, "ListAll", tracingParameters); + } + // Construct URL + var _baseUrl = this.Client.BaseUri.AbsoluteUri; + var _url = new System.Uri(new System.Uri(_baseUrl + (_baseUrl.EndsWith("/") ? "" : "/")), "subscriptions/{subscriptionId}/providers/Microsoft.Network/applicationGateways").ToString(); + _url = _url.Replace("{subscriptionId}", System.Uri.EscapeDataString(this.Client.SubscriptionId)); + System.Collections.Generic.List _queryParameters = new System.Collections.Generic.List(); + if (this.Client.ApiVersion != null) + { + _queryParameters.Add(string.Format("api-version={0}", System.Uri.EscapeDataString(this.Client.ApiVersion))); + } + if (_queryParameters.Count > 0) + { + _url += "?" + string.Join("&", _queryParameters); + } + // Create HTTP transport objects + System.Net.Http.HttpRequestMessage _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); + CloudError _errorBody = Microsoft.Rest.Serialization.SafeJsonConvert.DeserializeObject(_responseContent, this.Client.DeserializationSettings); + if (_errorBody != null) + { + ex = new Microsoft.Rest.Azure.CloudException(_errorBody.Message); + 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 (_httpResponse.Headers.Contains("x-ms-request-id")) + { + ex.RequestId = _httpResponse.Headers.GetValues("x-ms-request-id").FirstOrDefault(); + } + 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; + } + + /// + /// The Start ApplicationGateway operation starts application gatewayin the + /// specified resource group through Network resource provider. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the application gateway. + /// + /// + /// The headers that will be added to request. + /// + /// + /// The cancellation token. + /// + public async System.Threading.Tasks.Task StartWithHttpMessagesAsync(string resourceGroupName, string applicationGatewayName, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + // Send request + Microsoft.Rest.Azure.AzureOperationResponse _response = await BeginStartWithHttpMessagesAsync( + resourceGroupName, applicationGatewayName, customHeaders, cancellationToken); + return await this.Client.GetPostOrDeleteOperationResultAsync(_response, customHeaders, cancellationToken); + } + + /// + /// The Start ApplicationGateway operation starts application gatewayin the + /// specified resource group through Network resource provider. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the application gateway. + /// + /// + /// 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 + /// + /// + /// A response object containing the response body and response headers. + /// + public async System.Threading.Tasks.Task BeginStartWithHttpMessagesAsync(string resourceGroupName, string applicationGatewayName, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + if (resourceGroupName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "resourceGroupName"); + } + if (applicationGatewayName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "applicationGatewayName"); + } + if (this.Client.ApiVersion == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.ApiVersion"); + } + if (this.Client.SubscriptionId == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.SubscriptionId"); + } + // 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("applicationGatewayName", applicationGatewayName); + tracingParameters.Add("cancellationToken", cancellationToken); + Microsoft.Rest.ServiceClientTracing.Enter(_invocationId, this, "BeginStart", 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/applicationGateways/{applicationGatewayName}/start").ToString(); + _url = _url.Replace("{resourceGroupName}", System.Uri.EscapeDataString(resourceGroupName)); + _url = _url.Replace("{applicationGatewayName}", System.Uri.EscapeDataString(applicationGatewayName)); + _url = _url.Replace("{subscriptionId}", System.Uri.EscapeDataString(this.Client.SubscriptionId)); + System.Collections.Generic.List _queryParameters = new System.Collections.Generic.List(); + if (this.Client.ApiVersion != null) + { + _queryParameters.Add(string.Format("api-version={0}", System.Uri.EscapeDataString(this.Client.ApiVersion))); + } + if (_queryParameters.Count > 0) + { + _url += "?" + string.Join("&", _queryParameters); + } + // Create HTTP transport objects + System.Net.Http.HttpRequestMessage _httpRequest = new System.Net.Http.HttpRequestMessage(); + System.Net.Http.HttpResponseMessage _httpResponse = null; + _httpRequest.Method = new System.Net.Http.HttpMethod("POST"); + _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 && (int)_statusCode != 202) + { + var ex = new Microsoft.Rest.Azure.CloudException(string.Format("Operation returned an invalid status code '{0}'", _statusCode)); + if (_httpResponse.Content != null) { + _responseContent = await _httpResponse.Content.ReadAsStringAsync().ConfigureAwait(false); + } + else { + _responseContent = string.Empty; + } + ex.Request = new Microsoft.Rest.HttpRequestMessageWrapper(_httpRequest, _requestContent); + ex.Response = new Microsoft.Rest.HttpResponseMessageWrapper(_httpResponse, _responseContent); + if (_httpResponse.Headers.Contains("x-ms-request-id")) + { + ex.RequestId = _httpResponse.Headers.GetValues("x-ms-request-id").FirstOrDefault(); + } + 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(); + } + if (_shouldTrace) + { + Microsoft.Rest.ServiceClientTracing.Exit(_invocationId, _result); + } + return _result; + } + + /// + /// The STOP ApplicationGateway operation stops application gatewayin the + /// specified resource group through Network resource provider. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the application gateway. + /// + /// + /// The headers that will be added to request. + /// + /// + /// The cancellation token. + /// + public async System.Threading.Tasks.Task StopWithHttpMessagesAsync(string resourceGroupName, string applicationGatewayName, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + // Send request + Microsoft.Rest.Azure.AzureOperationResponse _response = await BeginStopWithHttpMessagesAsync( + resourceGroupName, applicationGatewayName, customHeaders, cancellationToken); + return await this.Client.GetPostOrDeleteOperationResultAsync(_response, customHeaders, cancellationToken); + } + + /// + /// The STOP ApplicationGateway operation stops application gatewayin the + /// specified resource group through Network resource provider. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the application gateway. + /// + /// + /// 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 + /// + /// + /// A response object containing the response body and response headers. + /// + public async System.Threading.Tasks.Task BeginStopWithHttpMessagesAsync(string resourceGroupName, string applicationGatewayName, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + if (resourceGroupName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "resourceGroupName"); + } + if (applicationGatewayName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "applicationGatewayName"); + } + if (this.Client.ApiVersion == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.ApiVersion"); + } + if (this.Client.SubscriptionId == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.SubscriptionId"); + } + // 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("applicationGatewayName", applicationGatewayName); + tracingParameters.Add("cancellationToken", cancellationToken); + Microsoft.Rest.ServiceClientTracing.Enter(_invocationId, this, "BeginStop", 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/applicationGateways/{applicationGatewayName}/stop").ToString(); + _url = _url.Replace("{resourceGroupName}", System.Uri.EscapeDataString(resourceGroupName)); + _url = _url.Replace("{applicationGatewayName}", System.Uri.EscapeDataString(applicationGatewayName)); + _url = _url.Replace("{subscriptionId}", System.Uri.EscapeDataString(this.Client.SubscriptionId)); + System.Collections.Generic.List _queryParameters = new System.Collections.Generic.List(); + if (this.Client.ApiVersion != null) + { + _queryParameters.Add(string.Format("api-version={0}", System.Uri.EscapeDataString(this.Client.ApiVersion))); + } + if (_queryParameters.Count > 0) + { + _url += "?" + string.Join("&", _queryParameters); + } + // Create HTTP transport objects + System.Net.Http.HttpRequestMessage _httpRequest = new System.Net.Http.HttpRequestMessage(); + System.Net.Http.HttpResponseMessage _httpResponse = null; + _httpRequest.Method = new System.Net.Http.HttpMethod("POST"); + _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 && (int)_statusCode != 202) + { + var ex = new Microsoft.Rest.Azure.CloudException(string.Format("Operation returned an invalid status code '{0}'", _statusCode)); + if (_httpResponse.Content != null) { + _responseContent = await _httpResponse.Content.ReadAsStringAsync().ConfigureAwait(false); + } + else { + _responseContent = string.Empty; + } + ex.Request = new Microsoft.Rest.HttpRequestMessageWrapper(_httpRequest, _requestContent); + ex.Response = new Microsoft.Rest.HttpResponseMessageWrapper(_httpResponse, _responseContent); + if (_httpResponse.Headers.Contains("x-ms-request-id")) + { + ex.RequestId = _httpResponse.Headers.GetValues("x-ms-request-id").FirstOrDefault(); + } + 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(); + } + if (_shouldTrace) + { + Microsoft.Rest.ServiceClientTracing.Exit(_invocationId, _result); + } + return _result; + } + + /// + /// The List ApplicationGateway opertion retrieves all the applicationgateways + /// in a resource group. + /// + /// + /// 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 + /// + /// + /// 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 += "?" + string.Join("&", _queryParameters); + } + // Create HTTP transport objects + System.Net.Http.HttpRequestMessage _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); + CloudError _errorBody = Microsoft.Rest.Serialization.SafeJsonConvert.DeserializeObject(_responseContent, this.Client.DeserializationSettings); + if (_errorBody != null) + { + ex = new Microsoft.Rest.Azure.CloudException(_errorBody.Message); + 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 (_httpResponse.Headers.Contains("x-ms-request-id")) + { + ex.RequestId = _httpResponse.Headers.GetValues("x-ms-request-id").FirstOrDefault(); + } + 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; + } + + /// + /// The List applicationgateway opertion retrieves all the applicationgateways + /// in a subscription. + /// + /// + /// 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 + /// + /// + /// A response object containing the response body and response headers. + /// + public async System.Threading.Tasks.Task>> ListAllNextWithHttpMessagesAsync(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, "ListAllNext", 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 += "?" + string.Join("&", _queryParameters); + } + // Create HTTP transport objects + System.Net.Http.HttpRequestMessage _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); + CloudError _errorBody = Microsoft.Rest.Serialization.SafeJsonConvert.DeserializeObject(_responseContent, this.Client.DeserializationSettings); + if (_errorBody != null) + { + ex = new Microsoft.Rest.Azure.CloudException(_errorBody.Message); + 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 (_httpResponse.Headers.Contains("x-ms-request-id")) + { + ex.RequestId = _httpResponse.Headers.GetValues("x-ms-request-id").FirstOrDefault(); + } + 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; + } + + } +} diff --git a/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/ApplicationGatewaysOperationsExtensions.cs b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/ApplicationGatewaysOperationsExtensions.cs new file mode 100644 index 000000000..12b008d89 --- /dev/null +++ b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/ApplicationGatewaysOperationsExtensions.cs @@ -0,0 +1,527 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.Network +{ + using System.Threading.Tasks; + using Microsoft.Rest.Azure; + using Models; + + /// + /// Extension methods for ApplicationGatewaysOperations. + /// + public static partial class ApplicationGatewaysOperationsExtensions + { + /// + /// The delete applicationgateway operation deletes the specified + /// applicationgateway. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the applicationgateway. + /// + public static void Delete(this IApplicationGatewaysOperations operations, string resourceGroupName, string applicationGatewayName) + { + System.Threading.Tasks.Task.Factory.StartNew(s => ((IApplicationGatewaysOperations)s).DeleteAsync(resourceGroupName, applicationGatewayName), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// The delete applicationgateway operation deletes the specified + /// applicationgateway. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the applicationgateway. + /// + /// + /// The cancellation token. + /// + public static async System.Threading.Tasks.Task DeleteAsync(this IApplicationGatewaysOperations operations, string resourceGroupName, string applicationGatewayName, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + await operations.DeleteWithHttpMessagesAsync(resourceGroupName, applicationGatewayName, null, cancellationToken).ConfigureAwait(false); + } + + /// + /// The delete applicationgateway operation deletes the specified + /// applicationgateway. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the applicationgateway. + /// + public static void BeginDelete(this IApplicationGatewaysOperations operations, string resourceGroupName, string applicationGatewayName) + { + System.Threading.Tasks.Task.Factory.StartNew(s => ((IApplicationGatewaysOperations)s).BeginDeleteAsync(resourceGroupName, applicationGatewayName), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// The delete applicationgateway operation deletes the specified + /// applicationgateway. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the applicationgateway. + /// + /// + /// The cancellation token. + /// + public static async System.Threading.Tasks.Task BeginDeleteAsync(this IApplicationGatewaysOperations operations, string resourceGroupName, string applicationGatewayName, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + await operations.BeginDeleteWithHttpMessagesAsync(resourceGroupName, applicationGatewayName, null, cancellationToken).ConfigureAwait(false); + } + + /// + /// The Get applicationgateway operation retreives information about the + /// specified applicationgateway. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the applicationgateway. + /// + public static ApplicationGatewayInner Get(this IApplicationGatewaysOperations operations, string resourceGroupName, string applicationGatewayName) + { + return System.Threading.Tasks.Task.Factory.StartNew(s => ((IApplicationGatewaysOperations)s).GetAsync(resourceGroupName, applicationGatewayName), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// The Get applicationgateway operation retreives information about the + /// specified applicationgateway. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the applicationgateway. + /// + /// + /// The cancellation token. + /// + public static async System.Threading.Tasks.Task GetAsync(this IApplicationGatewaysOperations operations, string resourceGroupName, string applicationGatewayName, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + using (var _result = await operations.GetWithHttpMessagesAsync(resourceGroupName, applicationGatewayName, null, cancellationToken).ConfigureAwait(false)) + { + return _result.Body; + } + } + + /// + /// The Put ApplicationGateway operation creates/updates a ApplicationGateway + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the ApplicationGateway. + /// + /// + /// Parameters supplied to the create/delete ApplicationGateway operation + /// + public static ApplicationGatewayInner CreateOrUpdate(this IApplicationGatewaysOperations operations, string resourceGroupName, string applicationGatewayName, ApplicationGatewayInner parameters) + { + return System.Threading.Tasks.Task.Factory.StartNew(s => ((IApplicationGatewaysOperations)s).CreateOrUpdateAsync(resourceGroupName, applicationGatewayName, parameters), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// The Put ApplicationGateway operation creates/updates a ApplicationGateway + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the ApplicationGateway. + /// + /// + /// Parameters supplied to the create/delete ApplicationGateway operation + /// + /// + /// The cancellation token. + /// + public static async System.Threading.Tasks.Task CreateOrUpdateAsync(this IApplicationGatewaysOperations operations, string resourceGroupName, string applicationGatewayName, ApplicationGatewayInner parameters, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + using (var _result = await operations.CreateOrUpdateWithHttpMessagesAsync(resourceGroupName, applicationGatewayName, parameters, null, cancellationToken).ConfigureAwait(false)) + { + return _result.Body; + } + } + + /// + /// The Put ApplicationGateway operation creates/updates a ApplicationGateway + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the ApplicationGateway. + /// + /// + /// Parameters supplied to the create/delete ApplicationGateway operation + /// + public static ApplicationGatewayInner BeginCreateOrUpdate(this IApplicationGatewaysOperations operations, string resourceGroupName, string applicationGatewayName, ApplicationGatewayInner parameters) + { + return System.Threading.Tasks.Task.Factory.StartNew(s => ((IApplicationGatewaysOperations)s).BeginCreateOrUpdateAsync(resourceGroupName, applicationGatewayName, parameters), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// The Put ApplicationGateway operation creates/updates a ApplicationGateway + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the ApplicationGateway. + /// + /// + /// Parameters supplied to the create/delete ApplicationGateway operation + /// + /// + /// The cancellation token. + /// + public static async System.Threading.Tasks.Task BeginCreateOrUpdateAsync(this IApplicationGatewaysOperations operations, string resourceGroupName, string applicationGatewayName, ApplicationGatewayInner parameters, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + using (var _result = await operations.BeginCreateOrUpdateWithHttpMessagesAsync(resourceGroupName, applicationGatewayName, parameters, null, cancellationToken).ConfigureAwait(false)) + { + return _result.Body; + } + } + + /// + /// The List ApplicationGateway opertion retrieves all the applicationgateways + /// in a resource group. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + public static Microsoft.Rest.Azure.IPage List(this IApplicationGatewaysOperations operations, string resourceGroupName) + { + return System.Threading.Tasks.Task.Factory.StartNew(s => ((IApplicationGatewaysOperations)s).ListAsync(resourceGroupName), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// The List ApplicationGateway opertion retrieves all the applicationgateways + /// in a resource group. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The cancellation token. + /// + public static async Task> ListAsync(this IApplicationGatewaysOperations operations, string resourceGroupName, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + using (var _result = await operations.ListWithHttpMessagesAsync(resourceGroupName, null, cancellationToken).ConfigureAwait(false)) + { + return _result.Body; + } + } + + /// + /// The List applicationgateway opertion retrieves all the applicationgateways + /// in a subscription. + /// + /// + /// The operations group for this extension method. + /// + public static Microsoft.Rest.Azure.IPage ListAll(this IApplicationGatewaysOperations operations) + { + return System.Threading.Tasks.Task.Factory.StartNew(s => ((IApplicationGatewaysOperations)s).ListAllAsync(), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// The List applicationgateway opertion retrieves all the applicationgateways + /// in a subscription. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The cancellation token. + /// + public static async Task> ListAllAsync(this IApplicationGatewaysOperations operations, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + using (var _result = await operations.ListAllWithHttpMessagesAsync(null, cancellationToken).ConfigureAwait(false)) + { + return _result.Body; + } + } + + /// + /// The Start ApplicationGateway operation starts application gatewayin the + /// specified resource group through Network resource provider. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the application gateway. + /// + public static void Start(this IApplicationGatewaysOperations operations, string resourceGroupName, string applicationGatewayName) + { + System.Threading.Tasks.Task.Factory.StartNew(s => ((IApplicationGatewaysOperations)s).StartAsync(resourceGroupName, applicationGatewayName), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// The Start ApplicationGateway operation starts application gatewayin the + /// specified resource group through Network resource provider. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the application gateway. + /// + /// + /// The cancellation token. + /// + public static async System.Threading.Tasks.Task StartAsync(this IApplicationGatewaysOperations operations, string resourceGroupName, string applicationGatewayName, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + await operations.StartWithHttpMessagesAsync(resourceGroupName, applicationGatewayName, null, cancellationToken).ConfigureAwait(false); + } + + /// + /// The Start ApplicationGateway operation starts application gatewayin the + /// specified resource group through Network resource provider. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the application gateway. + /// + public static void BeginStart(this IApplicationGatewaysOperations operations, string resourceGroupName, string applicationGatewayName) + { + System.Threading.Tasks.Task.Factory.StartNew(s => ((IApplicationGatewaysOperations)s).BeginStartAsync(resourceGroupName, applicationGatewayName), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// The Start ApplicationGateway operation starts application gatewayin the + /// specified resource group through Network resource provider. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the application gateway. + /// + /// + /// The cancellation token. + /// + public static async System.Threading.Tasks.Task BeginStartAsync(this IApplicationGatewaysOperations operations, string resourceGroupName, string applicationGatewayName, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + await operations.BeginStartWithHttpMessagesAsync(resourceGroupName, applicationGatewayName, null, cancellationToken).ConfigureAwait(false); + } + + /// + /// The STOP ApplicationGateway operation stops application gatewayin the + /// specified resource group through Network resource provider. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the application gateway. + /// + public static void Stop(this IApplicationGatewaysOperations operations, string resourceGroupName, string applicationGatewayName) + { + System.Threading.Tasks.Task.Factory.StartNew(s => ((IApplicationGatewaysOperations)s).StopAsync(resourceGroupName, applicationGatewayName), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// The STOP ApplicationGateway operation stops application gatewayin the + /// specified resource group through Network resource provider. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the application gateway. + /// + /// + /// The cancellation token. + /// + public static async System.Threading.Tasks.Task StopAsync(this IApplicationGatewaysOperations operations, string resourceGroupName, string applicationGatewayName, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + await operations.StopWithHttpMessagesAsync(resourceGroupName, applicationGatewayName, null, cancellationToken).ConfigureAwait(false); + } + + /// + /// The STOP ApplicationGateway operation stops application gatewayin the + /// specified resource group through Network resource provider. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the application gateway. + /// + public static void BeginStop(this IApplicationGatewaysOperations operations, string resourceGroupName, string applicationGatewayName) + { + System.Threading.Tasks.Task.Factory.StartNew(s => ((IApplicationGatewaysOperations)s).BeginStopAsync(resourceGroupName, applicationGatewayName), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// The STOP ApplicationGateway operation stops application gatewayin the + /// specified resource group through Network resource provider. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the application gateway. + /// + /// + /// The cancellation token. + /// + public static async System.Threading.Tasks.Task BeginStopAsync(this IApplicationGatewaysOperations operations, string resourceGroupName, string applicationGatewayName, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + await operations.BeginStopWithHttpMessagesAsync(resourceGroupName, applicationGatewayName, null, cancellationToken).ConfigureAwait(false); + } + + /// + /// The List ApplicationGateway opertion retrieves all the applicationgateways + /// in a resource group. + /// + /// + /// 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 IApplicationGatewaysOperations operations, string nextPageLink) + { + return System.Threading.Tasks.Task.Factory.StartNew(s => ((IApplicationGatewaysOperations)s).ListNextAsync(nextPageLink), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// The List ApplicationGateway opertion retrieves all the applicationgateways + /// in a resource group. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The NextLink from the previous successful call to List operation. + /// + /// + /// The cancellation token. + /// + public static async Task> ListNextAsync(this IApplicationGatewaysOperations 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; + } + } + + /// + /// The List applicationgateway opertion retrieves all the applicationgateways + /// in a subscription. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The NextLink from the previous successful call to List operation. + /// + public static Microsoft.Rest.Azure.IPage ListAllNext(this IApplicationGatewaysOperations operations, string nextPageLink) + { + return System.Threading.Tasks.Task.Factory.StartNew(s => ((IApplicationGatewaysOperations)s).ListAllNextAsync(nextPageLink), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// The List applicationgateway opertion retrieves all the applicationgateways + /// in a subscription. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The NextLink from the previous successful call to List operation. + /// + /// + /// The cancellation token. + /// + public static async Task> ListAllNextAsync(this IApplicationGatewaysOperations operations, string nextPageLink, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + using (var _result = await operations.ListAllNextWithHttpMessagesAsync(nextPageLink, null, cancellationToken).ConfigureAwait(false)) + { + return _result.Body; + } + } + + } +} diff --git a/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/ExpressRouteCircuitAuthorizationsOperations.cs b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/ExpressRouteCircuitAuthorizationsOperations.cs new file mode 100644 index 000000000..785e5c2e2 --- /dev/null +++ b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/ExpressRouteCircuitAuthorizationsOperations.cs @@ -0,0 +1,1073 @@ +// 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 0.17.0.0 +// 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; + + /// + /// ExpressRouteCircuitAuthorizationsOperations operations. + /// + internal partial class ExpressRouteCircuitAuthorizationsOperations : Microsoft.Rest.IServiceOperations, IExpressRouteCircuitAuthorizationsOperations + { + /// + /// Initializes a new instance of the ExpressRouteCircuitAuthorizationsOperations class. + /// + /// + /// Reference to the service client. + /// + /// + /// Thrown when a required parameter is null + /// + internal ExpressRouteCircuitAuthorizationsOperations(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; } + + /// + /// The delete authorization operation deletes the specified authorization + /// from the specified ExpressRouteCircuit. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the express route circuit. + /// + /// + /// The name of the authorization. + /// + /// + /// The headers that will be added to request. + /// + /// + /// The cancellation token. + /// + public async System.Threading.Tasks.Task DeleteWithHttpMessagesAsync(string resourceGroupName, string circuitName, string authorizationName, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + // Send request + Microsoft.Rest.Azure.AzureOperationResponse _response = await BeginDeleteWithHttpMessagesAsync( + resourceGroupName, circuitName, authorizationName, customHeaders, cancellationToken); + return await this.Client.GetPostOrDeleteOperationResultAsync(_response, customHeaders, cancellationToken); + } + + /// + /// The delete authorization operation deletes the specified authorization + /// from the specified ExpressRouteCircuit. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the express route circuit. + /// + /// + /// The name of the authorization. + /// + /// + /// 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 + /// + /// + /// A response object containing the response body and response headers. + /// + public async System.Threading.Tasks.Task BeginDeleteWithHttpMessagesAsync(string resourceGroupName, string circuitName, string authorizationName, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + if (resourceGroupName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "resourceGroupName"); + } + if (circuitName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "circuitName"); + } + if (authorizationName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "authorizationName"); + } + if (this.Client.ApiVersion == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.ApiVersion"); + } + if (this.Client.SubscriptionId == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.SubscriptionId"); + } + // 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("circuitName", circuitName); + tracingParameters.Add("authorizationName", authorizationName); + 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/expressRouteCircuits/{circuitName}/authorizations/{authorizationName}").ToString(); + _url = _url.Replace("{resourceGroupName}", System.Uri.EscapeDataString(resourceGroupName)); + _url = _url.Replace("{circuitName}", System.Uri.EscapeDataString(circuitName)); + _url = _url.Replace("{authorizationName}", System.Uri.EscapeDataString(authorizationName)); + _url = _url.Replace("{subscriptionId}", System.Uri.EscapeDataString(this.Client.SubscriptionId)); + System.Collections.Generic.List _queryParameters = new System.Collections.Generic.List(); + if (this.Client.ApiVersion != null) + { + _queryParameters.Add(string.Format("api-version={0}", System.Uri.EscapeDataString(this.Client.ApiVersion))); + } + if (_queryParameters.Count > 0) + { + _url += "?" + string.Join("&", _queryParameters); + } + // Create HTTP transport objects + System.Net.Http.HttpRequestMessage _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 != 200 && (int)_statusCode != 204) + { + var ex = new Microsoft.Rest.Azure.CloudException(string.Format("Operation returned an invalid status code '{0}'", _statusCode)); + if (_httpResponse.Content != null) { + _responseContent = await _httpResponse.Content.ReadAsStringAsync().ConfigureAwait(false); + } + else { + _responseContent = string.Empty; + } + ex.Request = new Microsoft.Rest.HttpRequestMessageWrapper(_httpRequest, _requestContent); + ex.Response = new Microsoft.Rest.HttpResponseMessageWrapper(_httpResponse, _responseContent); + if (_httpResponse.Headers.Contains("x-ms-request-id")) + { + ex.RequestId = _httpResponse.Headers.GetValues("x-ms-request-id").FirstOrDefault(); + } + 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(); + } + if (_shouldTrace) + { + Microsoft.Rest.ServiceClientTracing.Exit(_invocationId, _result); + } + return _result; + } + + /// + /// The GET authorization operation retrieves the specified authorization from + /// the specified ExpressRouteCircuit. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the express route circuit. + /// + /// + /// The name of the authorization. + /// + /// + /// 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 + /// + /// + /// A response object containing the response body and response headers. + /// + public async System.Threading.Tasks.Task> GetWithHttpMessagesAsync(string resourceGroupName, string circuitName, string authorizationName, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + if (resourceGroupName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "resourceGroupName"); + } + if (circuitName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "circuitName"); + } + if (authorizationName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "authorizationName"); + } + if (this.Client.ApiVersion == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.ApiVersion"); + } + if (this.Client.SubscriptionId == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.SubscriptionId"); + } + // 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("circuitName", circuitName); + tracingParameters.Add("authorizationName", authorizationName); + 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/expressRouteCircuits/{circuitName}/authorizations/{authorizationName}").ToString(); + _url = _url.Replace("{resourceGroupName}", System.Uri.EscapeDataString(resourceGroupName)); + _url = _url.Replace("{circuitName}", System.Uri.EscapeDataString(circuitName)); + _url = _url.Replace("{authorizationName}", System.Uri.EscapeDataString(authorizationName)); + _url = _url.Replace("{subscriptionId}", System.Uri.EscapeDataString(this.Client.SubscriptionId)); + System.Collections.Generic.List _queryParameters = new System.Collections.Generic.List(); + if (this.Client.ApiVersion != null) + { + _queryParameters.Add(string.Format("api-version={0}", System.Uri.EscapeDataString(this.Client.ApiVersion))); + } + if (_queryParameters.Count > 0) + { + _url += "?" + string.Join("&", _queryParameters); + } + // Create HTTP transport objects + System.Net.Http.HttpRequestMessage _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); + CloudError _errorBody = Microsoft.Rest.Serialization.SafeJsonConvert.DeserializeObject(_responseContent, this.Client.DeserializationSettings); + if (_errorBody != null) + { + ex = new Microsoft.Rest.Azure.CloudException(_errorBody.Message); + 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 (_httpResponse.Headers.Contains("x-ms-request-id")) + { + ex.RequestId = _httpResponse.Headers.GetValues("x-ms-request-id").FirstOrDefault(); + } + 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; + } + + /// + /// The Put Authorization operation creates/updates an authorization in + /// thespecified ExpressRouteCircuits + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the express route circuit. + /// + /// + /// The name of the authorization. + /// + /// + /// Parameters supplied to the create/update ExpressRouteCircuitAuthorization + /// operation + /// + /// + /// The headers that will be added to request. + /// + /// + /// The cancellation token. + /// + public async System.Threading.Tasks.Task> CreateOrUpdateWithHttpMessagesAsync(string resourceGroupName, string circuitName, string authorizationName, ExpressRouteCircuitAuthorizationInner authorizationParameters, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + // Send Request + Microsoft.Rest.Azure.AzureOperationResponse _response = await BeginCreateOrUpdateWithHttpMessagesAsync( + resourceGroupName, circuitName, authorizationName, authorizationParameters, customHeaders, cancellationToken); + return await this.Client.GetPutOrPatchOperationResultAsync(_response, + customHeaders, + cancellationToken); + } + + /// + /// The Put Authorization operation creates/updates an authorization in + /// thespecified ExpressRouteCircuits + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the express route circuit. + /// + /// + /// The name of the authorization. + /// + /// + /// Parameters supplied to the create/update ExpressRouteCircuitAuthorization + /// 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 + /// + /// + /// A response object containing the response body and response headers. + /// + public async System.Threading.Tasks.Task> BeginCreateOrUpdateWithHttpMessagesAsync(string resourceGroupName, string circuitName, string authorizationName, ExpressRouteCircuitAuthorizationInner authorizationParameters, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + if (resourceGroupName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "resourceGroupName"); + } + if (circuitName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "circuitName"); + } + if (authorizationName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "authorizationName"); + } + if (authorizationParameters == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "authorizationParameters"); + } + if (this.Client.ApiVersion == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.ApiVersion"); + } + if (this.Client.SubscriptionId == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.SubscriptionId"); + } + // 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("circuitName", circuitName); + tracingParameters.Add("authorizationName", authorizationName); + tracingParameters.Add("authorizationParameters", authorizationParameters); + 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/expressRouteCircuits/{circuitName}/authorizations/{authorizationName}").ToString(); + _url = _url.Replace("{resourceGroupName}", System.Uri.EscapeDataString(resourceGroupName)); + _url = _url.Replace("{circuitName}", System.Uri.EscapeDataString(circuitName)); + _url = _url.Replace("{authorizationName}", System.Uri.EscapeDataString(authorizationName)); + _url = _url.Replace("{subscriptionId}", System.Uri.EscapeDataString(this.Client.SubscriptionId)); + System.Collections.Generic.List _queryParameters = new System.Collections.Generic.List(); + if (this.Client.ApiVersion != null) + { + _queryParameters.Add(string.Format("api-version={0}", System.Uri.EscapeDataString(this.Client.ApiVersion))); + } + if (_queryParameters.Count > 0) + { + _url += "?" + string.Join("&", _queryParameters); + } + // Create HTTP transport objects + System.Net.Http.HttpRequestMessage _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(authorizationParameters != null) + { + _requestContent = Microsoft.Rest.Serialization.SafeJsonConvert.SerializeObject(authorizationParameters, 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 != 201 && (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); + CloudError _errorBody = Microsoft.Rest.Serialization.SafeJsonConvert.DeserializeObject(_responseContent, this.Client.DeserializationSettings); + if (_errorBody != null) + { + ex = new Microsoft.Rest.Azure.CloudException(_errorBody.Message); + 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 (_httpResponse.Headers.Contains("x-ms-request-id")) + { + ex.RequestId = _httpResponse.Headers.GetValues("x-ms-request-id").FirstOrDefault(); + } + 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 == 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); + } + } + // 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; + } + + /// + /// The List authorization operation retrieves all the authorizations in an + /// ExpressRouteCircuit. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the curcuit. + /// + /// + /// 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 + /// + /// + /// A response object containing the response body and response headers. + /// + public async System.Threading.Tasks.Task>> ListWithHttpMessagesAsync(string resourceGroupName, string circuitName, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + if (resourceGroupName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "resourceGroupName"); + } + if (circuitName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "circuitName"); + } + if (this.Client.ApiVersion == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.ApiVersion"); + } + if (this.Client.SubscriptionId == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.SubscriptionId"); + } + // 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("circuitName", circuitName); + 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/expressRouteCircuits/{circuitName}/authorizations").ToString(); + _url = _url.Replace("{resourceGroupName}", System.Uri.EscapeDataString(resourceGroupName)); + _url = _url.Replace("{circuitName}", System.Uri.EscapeDataString(circuitName)); + _url = _url.Replace("{subscriptionId}", System.Uri.EscapeDataString(this.Client.SubscriptionId)); + System.Collections.Generic.List _queryParameters = new System.Collections.Generic.List(); + if (this.Client.ApiVersion != null) + { + _queryParameters.Add(string.Format("api-version={0}", System.Uri.EscapeDataString(this.Client.ApiVersion))); + } + if (_queryParameters.Count > 0) + { + _url += "?" + string.Join("&", _queryParameters); + } + // Create HTTP transport objects + System.Net.Http.HttpRequestMessage _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); + CloudError _errorBody = Microsoft.Rest.Serialization.SafeJsonConvert.DeserializeObject(_responseContent, this.Client.DeserializationSettings); + if (_errorBody != null) + { + ex = new Microsoft.Rest.Azure.CloudException(_errorBody.Message); + 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 (_httpResponse.Headers.Contains("x-ms-request-id")) + { + ex.RequestId = _httpResponse.Headers.GetValues("x-ms-request-id").FirstOrDefault(); + } + 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; + } + + /// + /// The List authorization operation retrieves all the authorizations in an + /// ExpressRouteCircuit. + /// + /// + /// 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 + /// + /// + /// 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 += "?" + string.Join("&", _queryParameters); + } + // Create HTTP transport objects + System.Net.Http.HttpRequestMessage _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); + CloudError _errorBody = Microsoft.Rest.Serialization.SafeJsonConvert.DeserializeObject(_responseContent, this.Client.DeserializationSettings); + if (_errorBody != null) + { + ex = new Microsoft.Rest.Azure.CloudException(_errorBody.Message); + 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 (_httpResponse.Headers.Contains("x-ms-request-id")) + { + ex.RequestId = _httpResponse.Headers.GetValues("x-ms-request-id").FirstOrDefault(); + } + 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; + } + + } +} diff --git a/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/ExpressRouteCircuitAuthorizationsOperationsExtensions.cs b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/ExpressRouteCircuitAuthorizationsOperationsExtensions.cs new file mode 100644 index 000000000..7d0bec7ae --- /dev/null +++ b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/ExpressRouteCircuitAuthorizationsOperationsExtensions.cs @@ -0,0 +1,349 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.Network +{ + using System.Threading.Tasks; + using Microsoft.Rest.Azure; + using Models; + + /// + /// Extension methods for ExpressRouteCircuitAuthorizationsOperations. + /// + public static partial class ExpressRouteCircuitAuthorizationsOperationsExtensions + { + /// + /// The delete authorization operation deletes the specified authorization + /// from the specified ExpressRouteCircuit. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the express route circuit. + /// + /// + /// The name of the authorization. + /// + public static void Delete(this IExpressRouteCircuitAuthorizationsOperations operations, string resourceGroupName, string circuitName, string authorizationName) + { + System.Threading.Tasks.Task.Factory.StartNew(s => ((IExpressRouteCircuitAuthorizationsOperations)s).DeleteAsync(resourceGroupName, circuitName, authorizationName), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// The delete authorization operation deletes the specified authorization + /// from the specified ExpressRouteCircuit. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the express route circuit. + /// + /// + /// The name of the authorization. + /// + /// + /// The cancellation token. + /// + public static async System.Threading.Tasks.Task DeleteAsync(this IExpressRouteCircuitAuthorizationsOperations operations, string resourceGroupName, string circuitName, string authorizationName, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + await operations.DeleteWithHttpMessagesAsync(resourceGroupName, circuitName, authorizationName, null, cancellationToken).ConfigureAwait(false); + } + + /// + /// The delete authorization operation deletes the specified authorization + /// from the specified ExpressRouteCircuit. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the express route circuit. + /// + /// + /// The name of the authorization. + /// + public static void BeginDelete(this IExpressRouteCircuitAuthorizationsOperations operations, string resourceGroupName, string circuitName, string authorizationName) + { + System.Threading.Tasks.Task.Factory.StartNew(s => ((IExpressRouteCircuitAuthorizationsOperations)s).BeginDeleteAsync(resourceGroupName, circuitName, authorizationName), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// The delete authorization operation deletes the specified authorization + /// from the specified ExpressRouteCircuit. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the express route circuit. + /// + /// + /// The name of the authorization. + /// + /// + /// The cancellation token. + /// + public static async System.Threading.Tasks.Task BeginDeleteAsync(this IExpressRouteCircuitAuthorizationsOperations operations, string resourceGroupName, string circuitName, string authorizationName, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + await operations.BeginDeleteWithHttpMessagesAsync(resourceGroupName, circuitName, authorizationName, null, cancellationToken).ConfigureAwait(false); + } + + /// + /// The GET authorization operation retrieves the specified authorization from + /// the specified ExpressRouteCircuit. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the express route circuit. + /// + /// + /// The name of the authorization. + /// + public static ExpressRouteCircuitAuthorizationInner Get(this IExpressRouteCircuitAuthorizationsOperations operations, string resourceGroupName, string circuitName, string authorizationName) + { + return System.Threading.Tasks.Task.Factory.StartNew(s => ((IExpressRouteCircuitAuthorizationsOperations)s).GetAsync(resourceGroupName, circuitName, authorizationName), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// The GET authorization operation retrieves the specified authorization from + /// the specified ExpressRouteCircuit. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the express route circuit. + /// + /// + /// The name of the authorization. + /// + /// + /// The cancellation token. + /// + public static async System.Threading.Tasks.Task GetAsync(this IExpressRouteCircuitAuthorizationsOperations operations, string resourceGroupName, string circuitName, string authorizationName, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + using (var _result = await operations.GetWithHttpMessagesAsync(resourceGroupName, circuitName, authorizationName, null, cancellationToken).ConfigureAwait(false)) + { + return _result.Body; + } + } + + /// + /// The Put Authorization operation creates/updates an authorization in + /// thespecified ExpressRouteCircuits + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the express route circuit. + /// + /// + /// The name of the authorization. + /// + /// + /// Parameters supplied to the create/update ExpressRouteCircuitAuthorization + /// operation + /// + public static ExpressRouteCircuitAuthorizationInner CreateOrUpdate(this IExpressRouteCircuitAuthorizationsOperations operations, string resourceGroupName, string circuitName, string authorizationName, ExpressRouteCircuitAuthorizationInner authorizationParameters) + { + return System.Threading.Tasks.Task.Factory.StartNew(s => ((IExpressRouteCircuitAuthorizationsOperations)s).CreateOrUpdateAsync(resourceGroupName, circuitName, authorizationName, authorizationParameters), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// The Put Authorization operation creates/updates an authorization in + /// thespecified ExpressRouteCircuits + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the express route circuit. + /// + /// + /// The name of the authorization. + /// + /// + /// Parameters supplied to the create/update ExpressRouteCircuitAuthorization + /// operation + /// + /// + /// The cancellation token. + /// + public static async System.Threading.Tasks.Task CreateOrUpdateAsync(this IExpressRouteCircuitAuthorizationsOperations operations, string resourceGroupName, string circuitName, string authorizationName, ExpressRouteCircuitAuthorizationInner authorizationParameters, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + using (var _result = await operations.CreateOrUpdateWithHttpMessagesAsync(resourceGroupName, circuitName, authorizationName, authorizationParameters, null, cancellationToken).ConfigureAwait(false)) + { + return _result.Body; + } + } + + /// + /// The Put Authorization operation creates/updates an authorization in + /// thespecified ExpressRouteCircuits + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the express route circuit. + /// + /// + /// The name of the authorization. + /// + /// + /// Parameters supplied to the create/update ExpressRouteCircuitAuthorization + /// operation + /// + public static ExpressRouteCircuitAuthorizationInner BeginCreateOrUpdate(this IExpressRouteCircuitAuthorizationsOperations operations, string resourceGroupName, string circuitName, string authorizationName, ExpressRouteCircuitAuthorizationInner authorizationParameters) + { + return System.Threading.Tasks.Task.Factory.StartNew(s => ((IExpressRouteCircuitAuthorizationsOperations)s).BeginCreateOrUpdateAsync(resourceGroupName, circuitName, authorizationName, authorizationParameters), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// The Put Authorization operation creates/updates an authorization in + /// thespecified ExpressRouteCircuits + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the express route circuit. + /// + /// + /// The name of the authorization. + /// + /// + /// Parameters supplied to the create/update ExpressRouteCircuitAuthorization + /// operation + /// + /// + /// The cancellation token. + /// + public static async System.Threading.Tasks.Task BeginCreateOrUpdateAsync(this IExpressRouteCircuitAuthorizationsOperations operations, string resourceGroupName, string circuitName, string authorizationName, ExpressRouteCircuitAuthorizationInner authorizationParameters, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + using (var _result = await operations.BeginCreateOrUpdateWithHttpMessagesAsync(resourceGroupName, circuitName, authorizationName, authorizationParameters, null, cancellationToken).ConfigureAwait(false)) + { + return _result.Body; + } + } + + /// + /// The List authorization operation retrieves all the authorizations in an + /// ExpressRouteCircuit. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the curcuit. + /// + public static Microsoft.Rest.Azure.IPage List(this IExpressRouteCircuitAuthorizationsOperations operations, string resourceGroupName, string circuitName) + { + return System.Threading.Tasks.Task.Factory.StartNew(s => ((IExpressRouteCircuitAuthorizationsOperations)s).ListAsync(resourceGroupName, circuitName), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// The List authorization operation retrieves all the authorizations in an + /// ExpressRouteCircuit. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the curcuit. + /// + /// + /// The cancellation token. + /// + public static async Task> ListAsync(this IExpressRouteCircuitAuthorizationsOperations operations, string resourceGroupName, string circuitName, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + using (var _result = await operations.ListWithHttpMessagesAsync(resourceGroupName, circuitName, null, cancellationToken).ConfigureAwait(false)) + { + return _result.Body; + } + } + + /// + /// The List authorization operation retrieves all the authorizations in an + /// ExpressRouteCircuit. + /// + /// + /// 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 IExpressRouteCircuitAuthorizationsOperations operations, string nextPageLink) + { + return System.Threading.Tasks.Task.Factory.StartNew(s => ((IExpressRouteCircuitAuthorizationsOperations)s).ListNextAsync(nextPageLink), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// The List authorization operation retrieves all the authorizations in an + /// ExpressRouteCircuit. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The NextLink from the previous successful call to List operation. + /// + /// + /// The cancellation token. + /// + public static async Task> ListNextAsync(this IExpressRouteCircuitAuthorizationsOperations 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/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/ExpressRouteCircuitPeeringsOperations.cs b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/ExpressRouteCircuitPeeringsOperations.cs new file mode 100644 index 000000000..8f4b59e03 --- /dev/null +++ b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/ExpressRouteCircuitPeeringsOperations.cs @@ -0,0 +1,1073 @@ +// 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 0.17.0.0 +// 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; + + /// + /// ExpressRouteCircuitPeeringsOperations operations. + /// + internal partial class ExpressRouteCircuitPeeringsOperations : Microsoft.Rest.IServiceOperations, IExpressRouteCircuitPeeringsOperations + { + /// + /// Initializes a new instance of the ExpressRouteCircuitPeeringsOperations class. + /// + /// + /// Reference to the service client. + /// + /// + /// Thrown when a required parameter is null + /// + internal ExpressRouteCircuitPeeringsOperations(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; } + + /// + /// The delete peering operation deletes the specified peering from the + /// ExpressRouteCircuit. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the express route circuit. + /// + /// + /// The name of the peering. + /// + /// + /// The headers that will be added to request. + /// + /// + /// The cancellation token. + /// + public async System.Threading.Tasks.Task DeleteWithHttpMessagesAsync(string resourceGroupName, string circuitName, string peeringName, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + // Send request + Microsoft.Rest.Azure.AzureOperationResponse _response = await BeginDeleteWithHttpMessagesAsync( + resourceGroupName, circuitName, peeringName, customHeaders, cancellationToken); + return await this.Client.GetPostOrDeleteOperationResultAsync(_response, customHeaders, cancellationToken); + } + + /// + /// The delete peering operation deletes the specified peering from the + /// ExpressRouteCircuit. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the express route circuit. + /// + /// + /// The name of the peering. + /// + /// + /// 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 + /// + /// + /// A response object containing the response body and response headers. + /// + public async System.Threading.Tasks.Task BeginDeleteWithHttpMessagesAsync(string resourceGroupName, string circuitName, string peeringName, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + if (resourceGroupName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "resourceGroupName"); + } + if (circuitName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "circuitName"); + } + if (peeringName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "peeringName"); + } + if (this.Client.ApiVersion == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.ApiVersion"); + } + if (this.Client.SubscriptionId == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.SubscriptionId"); + } + // 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("circuitName", circuitName); + tracingParameters.Add("peeringName", peeringName); + 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/expressRouteCircuits/{circuitName}/peerings/{peeringName}").ToString(); + _url = _url.Replace("{resourceGroupName}", System.Uri.EscapeDataString(resourceGroupName)); + _url = _url.Replace("{circuitName}", System.Uri.EscapeDataString(circuitName)); + _url = _url.Replace("{peeringName}", System.Uri.EscapeDataString(peeringName)); + _url = _url.Replace("{subscriptionId}", System.Uri.EscapeDataString(this.Client.SubscriptionId)); + System.Collections.Generic.List _queryParameters = new System.Collections.Generic.List(); + if (this.Client.ApiVersion != null) + { + _queryParameters.Add(string.Format("api-version={0}", System.Uri.EscapeDataString(this.Client.ApiVersion))); + } + if (_queryParameters.Count > 0) + { + _url += "?" + string.Join("&", _queryParameters); + } + // Create HTTP transport objects + System.Net.Http.HttpRequestMessage _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 != 200 && (int)_statusCode != 202 && (int)_statusCode != 204) + { + var ex = new Microsoft.Rest.Azure.CloudException(string.Format("Operation returned an invalid status code '{0}'", _statusCode)); + if (_httpResponse.Content != null) { + _responseContent = await _httpResponse.Content.ReadAsStringAsync().ConfigureAwait(false); + } + else { + _responseContent = string.Empty; + } + ex.Request = new Microsoft.Rest.HttpRequestMessageWrapper(_httpRequest, _requestContent); + ex.Response = new Microsoft.Rest.HttpResponseMessageWrapper(_httpResponse, _responseContent); + if (_httpResponse.Headers.Contains("x-ms-request-id")) + { + ex.RequestId = _httpResponse.Headers.GetValues("x-ms-request-id").FirstOrDefault(); + } + 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(); + } + if (_shouldTrace) + { + Microsoft.Rest.ServiceClientTracing.Exit(_invocationId, _result); + } + return _result; + } + + /// + /// The GET peering operation retrieves the specified authorization from the + /// ExpressRouteCircuit. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the express route circuit. + /// + /// + /// The name of the peering. + /// + /// + /// 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 + /// + /// + /// A response object containing the response body and response headers. + /// + public async System.Threading.Tasks.Task> GetWithHttpMessagesAsync(string resourceGroupName, string circuitName, string peeringName, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + if (resourceGroupName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "resourceGroupName"); + } + if (circuitName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "circuitName"); + } + if (peeringName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "peeringName"); + } + if (this.Client.ApiVersion == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.ApiVersion"); + } + if (this.Client.SubscriptionId == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.SubscriptionId"); + } + // 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("circuitName", circuitName); + tracingParameters.Add("peeringName", peeringName); + 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/expressRouteCircuits/{circuitName}/peerings/{peeringName}").ToString(); + _url = _url.Replace("{resourceGroupName}", System.Uri.EscapeDataString(resourceGroupName)); + _url = _url.Replace("{circuitName}", System.Uri.EscapeDataString(circuitName)); + _url = _url.Replace("{peeringName}", System.Uri.EscapeDataString(peeringName)); + _url = _url.Replace("{subscriptionId}", System.Uri.EscapeDataString(this.Client.SubscriptionId)); + System.Collections.Generic.List _queryParameters = new System.Collections.Generic.List(); + if (this.Client.ApiVersion != null) + { + _queryParameters.Add(string.Format("api-version={0}", System.Uri.EscapeDataString(this.Client.ApiVersion))); + } + if (_queryParameters.Count > 0) + { + _url += "?" + string.Join("&", _queryParameters); + } + // Create HTTP transport objects + System.Net.Http.HttpRequestMessage _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); + CloudError _errorBody = Microsoft.Rest.Serialization.SafeJsonConvert.DeserializeObject(_responseContent, this.Client.DeserializationSettings); + if (_errorBody != null) + { + ex = new Microsoft.Rest.Azure.CloudException(_errorBody.Message); + 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 (_httpResponse.Headers.Contains("x-ms-request-id")) + { + ex.RequestId = _httpResponse.Headers.GetValues("x-ms-request-id").FirstOrDefault(); + } + 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; + } + + /// + /// The Put Pering operation creates/updates an peering in the specified + /// ExpressRouteCircuits + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the express route circuit. + /// + /// + /// The name of the peering. + /// + /// + /// Parameters supplied to the create/update ExpressRouteCircuit Peering + /// operation + /// + /// + /// The headers that will be added to request. + /// + /// + /// The cancellation token. + /// + public async System.Threading.Tasks.Task> CreateOrUpdateWithHttpMessagesAsync(string resourceGroupName, string circuitName, string peeringName, ExpressRouteCircuitPeeringInner peeringParameters, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + // Send Request + Microsoft.Rest.Azure.AzureOperationResponse _response = await BeginCreateOrUpdateWithHttpMessagesAsync( + resourceGroupName, circuitName, peeringName, peeringParameters, customHeaders, cancellationToken); + return await this.Client.GetPutOrPatchOperationResultAsync(_response, + customHeaders, + cancellationToken); + } + + /// + /// The Put Pering operation creates/updates an peering in the specified + /// ExpressRouteCircuits + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the express route circuit. + /// + /// + /// The name of the peering. + /// + /// + /// Parameters supplied to the create/update ExpressRouteCircuit Peering + /// 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 + /// + /// + /// A response object containing the response body and response headers. + /// + public async System.Threading.Tasks.Task> BeginCreateOrUpdateWithHttpMessagesAsync(string resourceGroupName, string circuitName, string peeringName, ExpressRouteCircuitPeeringInner peeringParameters, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + if (resourceGroupName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "resourceGroupName"); + } + if (circuitName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "circuitName"); + } + if (peeringName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "peeringName"); + } + if (peeringParameters == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "peeringParameters"); + } + if (this.Client.ApiVersion == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.ApiVersion"); + } + if (this.Client.SubscriptionId == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.SubscriptionId"); + } + // 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("circuitName", circuitName); + tracingParameters.Add("peeringName", peeringName); + tracingParameters.Add("peeringParameters", peeringParameters); + 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/expressRouteCircuits/{circuitName}/peerings/{peeringName}").ToString(); + _url = _url.Replace("{resourceGroupName}", System.Uri.EscapeDataString(resourceGroupName)); + _url = _url.Replace("{circuitName}", System.Uri.EscapeDataString(circuitName)); + _url = _url.Replace("{peeringName}", System.Uri.EscapeDataString(peeringName)); + _url = _url.Replace("{subscriptionId}", System.Uri.EscapeDataString(this.Client.SubscriptionId)); + System.Collections.Generic.List _queryParameters = new System.Collections.Generic.List(); + if (this.Client.ApiVersion != null) + { + _queryParameters.Add(string.Format("api-version={0}", System.Uri.EscapeDataString(this.Client.ApiVersion))); + } + if (_queryParameters.Count > 0) + { + _url += "?" + string.Join("&", _queryParameters); + } + // Create HTTP transport objects + System.Net.Http.HttpRequestMessage _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(peeringParameters != null) + { + _requestContent = Microsoft.Rest.Serialization.SafeJsonConvert.SerializeObject(peeringParameters, 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); + CloudError _errorBody = Microsoft.Rest.Serialization.SafeJsonConvert.DeserializeObject(_responseContent, this.Client.DeserializationSettings); + if (_errorBody != null) + { + ex = new Microsoft.Rest.Azure.CloudException(_errorBody.Message); + 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 (_httpResponse.Headers.Contains("x-ms-request-id")) + { + ex.RequestId = _httpResponse.Headers.GetValues("x-ms-request-id").FirstOrDefault(); + } + 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); + } + } + if (_shouldTrace) + { + Microsoft.Rest.ServiceClientTracing.Exit(_invocationId, _result); + } + return _result; + } + + /// + /// The List peering operation retrieves all the peerings in an + /// ExpressRouteCircuit. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the curcuit. + /// + /// + /// 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 + /// + /// + /// A response object containing the response body and response headers. + /// + public async System.Threading.Tasks.Task>> ListWithHttpMessagesAsync(string resourceGroupName, string circuitName, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + if (resourceGroupName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "resourceGroupName"); + } + if (circuitName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "circuitName"); + } + if (this.Client.ApiVersion == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.ApiVersion"); + } + if (this.Client.SubscriptionId == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.SubscriptionId"); + } + // 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("circuitName", circuitName); + 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/expressRouteCircuits/{circuitName}/peerings").ToString(); + _url = _url.Replace("{resourceGroupName}", System.Uri.EscapeDataString(resourceGroupName)); + _url = _url.Replace("{circuitName}", System.Uri.EscapeDataString(circuitName)); + _url = _url.Replace("{subscriptionId}", System.Uri.EscapeDataString(this.Client.SubscriptionId)); + System.Collections.Generic.List _queryParameters = new System.Collections.Generic.List(); + if (this.Client.ApiVersion != null) + { + _queryParameters.Add(string.Format("api-version={0}", System.Uri.EscapeDataString(this.Client.ApiVersion))); + } + if (_queryParameters.Count > 0) + { + _url += "?" + string.Join("&", _queryParameters); + } + // Create HTTP transport objects + System.Net.Http.HttpRequestMessage _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); + CloudError _errorBody = Microsoft.Rest.Serialization.SafeJsonConvert.DeserializeObject(_responseContent, this.Client.DeserializationSettings); + if (_errorBody != null) + { + ex = new Microsoft.Rest.Azure.CloudException(_errorBody.Message); + 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 (_httpResponse.Headers.Contains("x-ms-request-id")) + { + ex.RequestId = _httpResponse.Headers.GetValues("x-ms-request-id").FirstOrDefault(); + } + 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; + } + + /// + /// The List peering operation retrieves all the peerings in an + /// ExpressRouteCircuit. + /// + /// + /// 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 + /// + /// + /// 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 += "?" + string.Join("&", _queryParameters); + } + // Create HTTP transport objects + System.Net.Http.HttpRequestMessage _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); + CloudError _errorBody = Microsoft.Rest.Serialization.SafeJsonConvert.DeserializeObject(_responseContent, this.Client.DeserializationSettings); + if (_errorBody != null) + { + ex = new Microsoft.Rest.Azure.CloudException(_errorBody.Message); + 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 (_httpResponse.Headers.Contains("x-ms-request-id")) + { + ex.RequestId = _httpResponse.Headers.GetValues("x-ms-request-id").FirstOrDefault(); + } + 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; + } + + } +} diff --git a/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/ExpressRouteCircuitPeeringsOperationsExtensions.cs b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/ExpressRouteCircuitPeeringsOperationsExtensions.cs new file mode 100644 index 000000000..4d333cb61 --- /dev/null +++ b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/ExpressRouteCircuitPeeringsOperationsExtensions.cs @@ -0,0 +1,349 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.Network +{ + using System.Threading.Tasks; + using Microsoft.Rest.Azure; + using Models; + + /// + /// Extension methods for ExpressRouteCircuitPeeringsOperations. + /// + public static partial class ExpressRouteCircuitPeeringsOperationsExtensions + { + /// + /// The delete peering operation deletes the specified peering from the + /// ExpressRouteCircuit. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the express route circuit. + /// + /// + /// The name of the peering. + /// + public static void Delete(this IExpressRouteCircuitPeeringsOperations operations, string resourceGroupName, string circuitName, string peeringName) + { + System.Threading.Tasks.Task.Factory.StartNew(s => ((IExpressRouteCircuitPeeringsOperations)s).DeleteAsync(resourceGroupName, circuitName, peeringName), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// The delete peering operation deletes the specified peering from the + /// ExpressRouteCircuit. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the express route circuit. + /// + /// + /// The name of the peering. + /// + /// + /// The cancellation token. + /// + public static async System.Threading.Tasks.Task DeleteAsync(this IExpressRouteCircuitPeeringsOperations operations, string resourceGroupName, string circuitName, string peeringName, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + await operations.DeleteWithHttpMessagesAsync(resourceGroupName, circuitName, peeringName, null, cancellationToken).ConfigureAwait(false); + } + + /// + /// The delete peering operation deletes the specified peering from the + /// ExpressRouteCircuit. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the express route circuit. + /// + /// + /// The name of the peering. + /// + public static void BeginDelete(this IExpressRouteCircuitPeeringsOperations operations, string resourceGroupName, string circuitName, string peeringName) + { + System.Threading.Tasks.Task.Factory.StartNew(s => ((IExpressRouteCircuitPeeringsOperations)s).BeginDeleteAsync(resourceGroupName, circuitName, peeringName), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// The delete peering operation deletes the specified peering from the + /// ExpressRouteCircuit. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the express route circuit. + /// + /// + /// The name of the peering. + /// + /// + /// The cancellation token. + /// + public static async System.Threading.Tasks.Task BeginDeleteAsync(this IExpressRouteCircuitPeeringsOperations operations, string resourceGroupName, string circuitName, string peeringName, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + await operations.BeginDeleteWithHttpMessagesAsync(resourceGroupName, circuitName, peeringName, null, cancellationToken).ConfigureAwait(false); + } + + /// + /// The GET peering operation retrieves the specified authorization from the + /// ExpressRouteCircuit. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the express route circuit. + /// + /// + /// The name of the peering. + /// + public static ExpressRouteCircuitPeeringInner Get(this IExpressRouteCircuitPeeringsOperations operations, string resourceGroupName, string circuitName, string peeringName) + { + return System.Threading.Tasks.Task.Factory.StartNew(s => ((IExpressRouteCircuitPeeringsOperations)s).GetAsync(resourceGroupName, circuitName, peeringName), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// The GET peering operation retrieves the specified authorization from the + /// ExpressRouteCircuit. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the express route circuit. + /// + /// + /// The name of the peering. + /// + /// + /// The cancellation token. + /// + public static async System.Threading.Tasks.Task GetAsync(this IExpressRouteCircuitPeeringsOperations operations, string resourceGroupName, string circuitName, string peeringName, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + using (var _result = await operations.GetWithHttpMessagesAsync(resourceGroupName, circuitName, peeringName, null, cancellationToken).ConfigureAwait(false)) + { + return _result.Body; + } + } + + /// + /// The Put Pering operation creates/updates an peering in the specified + /// ExpressRouteCircuits + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the express route circuit. + /// + /// + /// The name of the peering. + /// + /// + /// Parameters supplied to the create/update ExpressRouteCircuit Peering + /// operation + /// + public static ExpressRouteCircuitPeeringInner CreateOrUpdate(this IExpressRouteCircuitPeeringsOperations operations, string resourceGroupName, string circuitName, string peeringName, ExpressRouteCircuitPeeringInner peeringParameters) + { + return System.Threading.Tasks.Task.Factory.StartNew(s => ((IExpressRouteCircuitPeeringsOperations)s).CreateOrUpdateAsync(resourceGroupName, circuitName, peeringName, peeringParameters), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// The Put Pering operation creates/updates an peering in the specified + /// ExpressRouteCircuits + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the express route circuit. + /// + /// + /// The name of the peering. + /// + /// + /// Parameters supplied to the create/update ExpressRouteCircuit Peering + /// operation + /// + /// + /// The cancellation token. + /// + public static async System.Threading.Tasks.Task CreateOrUpdateAsync(this IExpressRouteCircuitPeeringsOperations operations, string resourceGroupName, string circuitName, string peeringName, ExpressRouteCircuitPeeringInner peeringParameters, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + using (var _result = await operations.CreateOrUpdateWithHttpMessagesAsync(resourceGroupName, circuitName, peeringName, peeringParameters, null, cancellationToken).ConfigureAwait(false)) + { + return _result.Body; + } + } + + /// + /// The Put Pering operation creates/updates an peering in the specified + /// ExpressRouteCircuits + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the express route circuit. + /// + /// + /// The name of the peering. + /// + /// + /// Parameters supplied to the create/update ExpressRouteCircuit Peering + /// operation + /// + public static ExpressRouteCircuitPeeringInner BeginCreateOrUpdate(this IExpressRouteCircuitPeeringsOperations operations, string resourceGroupName, string circuitName, string peeringName, ExpressRouteCircuitPeeringInner peeringParameters) + { + return System.Threading.Tasks.Task.Factory.StartNew(s => ((IExpressRouteCircuitPeeringsOperations)s).BeginCreateOrUpdateAsync(resourceGroupName, circuitName, peeringName, peeringParameters), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// The Put Pering operation creates/updates an peering in the specified + /// ExpressRouteCircuits + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the express route circuit. + /// + /// + /// The name of the peering. + /// + /// + /// Parameters supplied to the create/update ExpressRouteCircuit Peering + /// operation + /// + /// + /// The cancellation token. + /// + public static async System.Threading.Tasks.Task BeginCreateOrUpdateAsync(this IExpressRouteCircuitPeeringsOperations operations, string resourceGroupName, string circuitName, string peeringName, ExpressRouteCircuitPeeringInner peeringParameters, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + using (var _result = await operations.BeginCreateOrUpdateWithHttpMessagesAsync(resourceGroupName, circuitName, peeringName, peeringParameters, null, cancellationToken).ConfigureAwait(false)) + { + return _result.Body; + } + } + + /// + /// The List peering operation retrieves all the peerings in an + /// ExpressRouteCircuit. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the curcuit. + /// + public static Microsoft.Rest.Azure.IPage List(this IExpressRouteCircuitPeeringsOperations operations, string resourceGroupName, string circuitName) + { + return System.Threading.Tasks.Task.Factory.StartNew(s => ((IExpressRouteCircuitPeeringsOperations)s).ListAsync(resourceGroupName, circuitName), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// The List peering operation retrieves all the peerings in an + /// ExpressRouteCircuit. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the curcuit. + /// + /// + /// The cancellation token. + /// + public static async Task> ListAsync(this IExpressRouteCircuitPeeringsOperations operations, string resourceGroupName, string circuitName, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + using (var _result = await operations.ListWithHttpMessagesAsync(resourceGroupName, circuitName, null, cancellationToken).ConfigureAwait(false)) + { + return _result.Body; + } + } + + /// + /// The List peering operation retrieves all the peerings in an + /// ExpressRouteCircuit. + /// + /// + /// 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 IExpressRouteCircuitPeeringsOperations operations, string nextPageLink) + { + return System.Threading.Tasks.Task.Factory.StartNew(s => ((IExpressRouteCircuitPeeringsOperations)s).ListNextAsync(nextPageLink), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// The List peering operation retrieves all the peerings in an + /// ExpressRouteCircuit. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The NextLink from the previous successful call to List operation. + /// + /// + /// The cancellation token. + /// + public static async Task> ListNextAsync(this IExpressRouteCircuitPeeringsOperations 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/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/ExpressRouteCircuitsOperations.cs b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/ExpressRouteCircuitsOperations.cs new file mode 100644 index 000000000..a86782324 --- /dev/null +++ b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/ExpressRouteCircuitsOperations.cs @@ -0,0 +1,2489 @@ +// 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 0.17.0.0 +// 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; + + /// + /// ExpressRouteCircuitsOperations operations. + /// + internal partial class ExpressRouteCircuitsOperations : Microsoft.Rest.IServiceOperations, IExpressRouteCircuitsOperations + { + /// + /// Initializes a new instance of the ExpressRouteCircuitsOperations class. + /// + /// + /// Reference to the service client. + /// + /// + /// Thrown when a required parameter is null + /// + internal ExpressRouteCircuitsOperations(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; } + + /// + /// The delete ExpressRouteCircuit operation deletes the specified + /// ExpressRouteCircuit. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the express route Circuit. + /// + /// + /// The headers that will be added to request. + /// + /// + /// The cancellation token. + /// + public async System.Threading.Tasks.Task DeleteWithHttpMessagesAsync(string resourceGroupName, string circuitName, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + // Send request + Microsoft.Rest.Azure.AzureOperationResponse _response = await BeginDeleteWithHttpMessagesAsync( + resourceGroupName, circuitName, customHeaders, cancellationToken); + return await this.Client.GetPostOrDeleteOperationResultAsync(_response, customHeaders, cancellationToken); + } + + /// + /// The delete ExpressRouteCircuit operation deletes the specified + /// ExpressRouteCircuit. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the express route Circuit. + /// + /// + /// 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 + /// + /// + /// A response object containing the response body and response headers. + /// + public async System.Threading.Tasks.Task BeginDeleteWithHttpMessagesAsync(string resourceGroupName, string circuitName, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + if (resourceGroupName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "resourceGroupName"); + } + if (circuitName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "circuitName"); + } + if (this.Client.ApiVersion == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.ApiVersion"); + } + if (this.Client.SubscriptionId == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.SubscriptionId"); + } + // 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("circuitName", circuitName); + 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/expressRouteCircuits/{circuitName}").ToString(); + _url = _url.Replace("{resourceGroupName}", System.Uri.EscapeDataString(resourceGroupName)); + _url = _url.Replace("{circuitName}", System.Uri.EscapeDataString(circuitName)); + _url = _url.Replace("{subscriptionId}", System.Uri.EscapeDataString(this.Client.SubscriptionId)); + System.Collections.Generic.List _queryParameters = new System.Collections.Generic.List(); + if (this.Client.ApiVersion != null) + { + _queryParameters.Add(string.Format("api-version={0}", System.Uri.EscapeDataString(this.Client.ApiVersion))); + } + if (_queryParameters.Count > 0) + { + _url += "?" + string.Join("&", _queryParameters); + } + // Create HTTP transport objects + System.Net.Http.HttpRequestMessage _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 != 204 && (int)_statusCode != 202 && (int)_statusCode != 200) + { + var ex = new Microsoft.Rest.Azure.CloudException(string.Format("Operation returned an invalid status code '{0}'", _statusCode)); + if (_httpResponse.Content != null) { + _responseContent = await _httpResponse.Content.ReadAsStringAsync().ConfigureAwait(false); + } + else { + _responseContent = string.Empty; + } + ex.Request = new Microsoft.Rest.HttpRequestMessageWrapper(_httpRequest, _requestContent); + ex.Response = new Microsoft.Rest.HttpResponseMessageWrapper(_httpResponse, _responseContent); + if (_httpResponse.Headers.Contains("x-ms-request-id")) + { + ex.RequestId = _httpResponse.Headers.GetValues("x-ms-request-id").FirstOrDefault(); + } + 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(); + } + if (_shouldTrace) + { + Microsoft.Rest.ServiceClientTracing.Exit(_invocationId, _result); + } + return _result; + } + + /// + /// The Get ExpressRouteCircuit operation retreives information about the + /// specified ExpressRouteCircuit. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the circuit. + /// + /// + /// 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 + /// + /// + /// A response object containing the response body and response headers. + /// + public async System.Threading.Tasks.Task> GetWithHttpMessagesAsync(string resourceGroupName, string circuitName, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + if (resourceGroupName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "resourceGroupName"); + } + if (circuitName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "circuitName"); + } + if (this.Client.ApiVersion == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.ApiVersion"); + } + if (this.Client.SubscriptionId == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.SubscriptionId"); + } + // 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("circuitName", circuitName); + 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/expressRouteCircuits/{circuitName}").ToString(); + _url = _url.Replace("{resourceGroupName}", System.Uri.EscapeDataString(resourceGroupName)); + _url = _url.Replace("{circuitName}", System.Uri.EscapeDataString(circuitName)); + _url = _url.Replace("{subscriptionId}", System.Uri.EscapeDataString(this.Client.SubscriptionId)); + System.Collections.Generic.List _queryParameters = new System.Collections.Generic.List(); + if (this.Client.ApiVersion != null) + { + _queryParameters.Add(string.Format("api-version={0}", System.Uri.EscapeDataString(this.Client.ApiVersion))); + } + if (_queryParameters.Count > 0) + { + _url += "?" + string.Join("&", _queryParameters); + } + // Create HTTP transport objects + System.Net.Http.HttpRequestMessage _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); + CloudError _errorBody = Microsoft.Rest.Serialization.SafeJsonConvert.DeserializeObject(_responseContent, this.Client.DeserializationSettings); + if (_errorBody != null) + { + ex = new Microsoft.Rest.Azure.CloudException(_errorBody.Message); + 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 (_httpResponse.Headers.Contains("x-ms-request-id")) + { + ex.RequestId = _httpResponse.Headers.GetValues("x-ms-request-id").FirstOrDefault(); + } + 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; + } + + /// + /// The Put ExpressRouteCircuit operation creates/updates a ExpressRouteCircuit + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the circuit. + /// + /// + /// Parameters supplied to the create/delete ExpressRouteCircuit operation + /// + /// + /// The headers that will be added to request. + /// + /// + /// The cancellation token. + /// + public async System.Threading.Tasks.Task> CreateOrUpdateWithHttpMessagesAsync(string resourceGroupName, string circuitName, ExpressRouteCircuitInner 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, circuitName, parameters, customHeaders, cancellationToken); + return await this.Client.GetPutOrPatchOperationResultAsync(_response, + customHeaders, + cancellationToken); + } + + /// + /// The Put ExpressRouteCircuit operation creates/updates a ExpressRouteCircuit + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the circuit. + /// + /// + /// Parameters supplied to the create/delete ExpressRouteCircuit 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 + /// + /// + /// A response object containing the response body and response headers. + /// + public async System.Threading.Tasks.Task> BeginCreateOrUpdateWithHttpMessagesAsync(string resourceGroupName, string circuitName, ExpressRouteCircuitInner parameters, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + if (resourceGroupName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "resourceGroupName"); + } + if (circuitName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "circuitName"); + } + if (parameters == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "parameters"); + } + if (this.Client.ApiVersion == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.ApiVersion"); + } + if (this.Client.SubscriptionId == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.SubscriptionId"); + } + // 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("circuitName", circuitName); + 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/expressRouteCircuits/{circuitName}").ToString(); + _url = _url.Replace("{resourceGroupName}", System.Uri.EscapeDataString(resourceGroupName)); + _url = _url.Replace("{circuitName}", System.Uri.EscapeDataString(circuitName)); + _url = _url.Replace("{subscriptionId}", System.Uri.EscapeDataString(this.Client.SubscriptionId)); + System.Collections.Generic.List _queryParameters = new System.Collections.Generic.List(); + if (this.Client.ApiVersion != null) + { + _queryParameters.Add(string.Format("api-version={0}", System.Uri.EscapeDataString(this.Client.ApiVersion))); + } + if (_queryParameters.Count > 0) + { + _url += "?" + string.Join("&", _queryParameters); + } + // Create HTTP transport objects + System.Net.Http.HttpRequestMessage _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 != 201 && (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); + CloudError _errorBody = Microsoft.Rest.Serialization.SafeJsonConvert.DeserializeObject(_responseContent, this.Client.DeserializationSettings); + if (_errorBody != null) + { + ex = new Microsoft.Rest.Azure.CloudException(_errorBody.Message); + 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 (_httpResponse.Headers.Contains("x-ms-request-id")) + { + ex.RequestId = _httpResponse.Headers.GetValues("x-ms-request-id").FirstOrDefault(); + } + 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 == 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); + } + } + // 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; + } + + /// + /// The ListArpTable from ExpressRouteCircuit opertion retrieves the currently + /// advertised arp table associated with the ExpressRouteCircuits in a + /// resource group. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the circuit. + /// + /// + /// The name of the peering. + /// + /// + /// The path of the device. + /// + /// + /// The headers that will be added to request. + /// + /// + /// The cancellation token. + /// + public async System.Threading.Tasks.Task> ListArpTableWithHttpMessagesAsync(string resourceGroupName, string circuitName, string peeringName, string devicePath, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + // Send request + Microsoft.Rest.Azure.AzureOperationResponse _response = await BeginListArpTableWithHttpMessagesAsync( + resourceGroupName, circuitName, peeringName, devicePath, customHeaders, cancellationToken); + return await this.Client.GetPostOrDeleteOperationResultAsync(_response, customHeaders, cancellationToken); + } + + /// + /// The ListArpTable from ExpressRouteCircuit opertion retrieves the currently + /// advertised arp table associated with the ExpressRouteCircuits in a + /// resource group. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the circuit. + /// + /// + /// The name of the peering. + /// + /// + /// The path of the device. + /// + /// + /// 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 + /// + /// + /// A response object containing the response body and response headers. + /// + public async System.Threading.Tasks.Task> BeginListArpTableWithHttpMessagesAsync(string resourceGroupName, string circuitName, string peeringName, string devicePath, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + if (resourceGroupName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "resourceGroupName"); + } + if (circuitName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "circuitName"); + } + if (peeringName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "peeringName"); + } + if (devicePath == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "devicePath"); + } + if (this.Client.ApiVersion == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.ApiVersion"); + } + if (this.Client.SubscriptionId == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.SubscriptionId"); + } + // 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("circuitName", circuitName); + tracingParameters.Add("peeringName", peeringName); + tracingParameters.Add("devicePath", devicePath); + tracingParameters.Add("cancellationToken", cancellationToken); + Microsoft.Rest.ServiceClientTracing.Enter(_invocationId, this, "BeginListArpTable", 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/expressRouteCircuits/{circuitName}/peerings/{peeringName}/arpTables/{devicePath}").ToString(); + _url = _url.Replace("{resourceGroupName}", System.Uri.EscapeDataString(resourceGroupName)); + _url = _url.Replace("{circuitName}", System.Uri.EscapeDataString(circuitName)); + _url = _url.Replace("{peeringName}", System.Uri.EscapeDataString(peeringName)); + _url = _url.Replace("{devicePath}", System.Uri.EscapeDataString(devicePath)); + _url = _url.Replace("{subscriptionId}", System.Uri.EscapeDataString(this.Client.SubscriptionId)); + System.Collections.Generic.List _queryParameters = new System.Collections.Generic.List(); + if (this.Client.ApiVersion != null) + { + _queryParameters.Add(string.Format("api-version={0}", System.Uri.EscapeDataString(this.Client.ApiVersion))); + } + if (_queryParameters.Count > 0) + { + _url += "?" + string.Join("&", _queryParameters); + } + // Create HTTP transport objects + System.Net.Http.HttpRequestMessage _httpRequest = new System.Net.Http.HttpRequestMessage(); + System.Net.Http.HttpResponseMessage _httpResponse = null; + _httpRequest.Method = new System.Net.Http.HttpMethod("POST"); + _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 && (int)_statusCode != 202) + { + 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); + CloudError _errorBody = Microsoft.Rest.Serialization.SafeJsonConvert.DeserializeObject(_responseContent, this.Client.DeserializationSettings); + if (_errorBody != null) + { + ex = new Microsoft.Rest.Azure.CloudException(_errorBody.Message); + 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 (_httpResponse.Headers.Contains("x-ms-request-id")) + { + ex.RequestId = _httpResponse.Headers.GetValues("x-ms-request-id").FirstOrDefault(); + } + 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; + } + + /// + /// The ListRoutesTable from ExpressRouteCircuit opertion retrieves the + /// currently advertised routes table associated with the + /// ExpressRouteCircuits in a resource group. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the circuit. + /// + /// + /// The name of the peering. + /// + /// + /// The path of the device. + /// + /// + /// The headers that will be added to request. + /// + /// + /// The cancellation token. + /// + public async System.Threading.Tasks.Task> ListRoutesTableWithHttpMessagesAsync(string resourceGroupName, string circuitName, string peeringName, string devicePath, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + // Send request + Microsoft.Rest.Azure.AzureOperationResponse _response = await BeginListRoutesTableWithHttpMessagesAsync( + resourceGroupName, circuitName, peeringName, devicePath, customHeaders, cancellationToken); + return await this.Client.GetPostOrDeleteOperationResultAsync(_response, customHeaders, cancellationToken); + } + + /// + /// The ListRoutesTable from ExpressRouteCircuit opertion retrieves the + /// currently advertised routes table associated with the + /// ExpressRouteCircuits in a resource group. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the circuit. + /// + /// + /// The name of the peering. + /// + /// + /// The path of the device. + /// + /// + /// 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 + /// + /// + /// A response object containing the response body and response headers. + /// + public async System.Threading.Tasks.Task> BeginListRoutesTableWithHttpMessagesAsync(string resourceGroupName, string circuitName, string peeringName, string devicePath, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + if (resourceGroupName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "resourceGroupName"); + } + if (circuitName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "circuitName"); + } + if (peeringName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "peeringName"); + } + if (devicePath == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "devicePath"); + } + if (this.Client.ApiVersion == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.ApiVersion"); + } + if (this.Client.SubscriptionId == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.SubscriptionId"); + } + // 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("circuitName", circuitName); + tracingParameters.Add("peeringName", peeringName); + tracingParameters.Add("devicePath", devicePath); + tracingParameters.Add("cancellationToken", cancellationToken); + Microsoft.Rest.ServiceClientTracing.Enter(_invocationId, this, "BeginListRoutesTable", 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/expressRouteCircuits/{circuitName}/peerings/{peeringName}/routeTables/{devicePath}").ToString(); + _url = _url.Replace("{resourceGroupName}", System.Uri.EscapeDataString(resourceGroupName)); + _url = _url.Replace("{circuitName}", System.Uri.EscapeDataString(circuitName)); + _url = _url.Replace("{peeringName}", System.Uri.EscapeDataString(peeringName)); + _url = _url.Replace("{devicePath}", System.Uri.EscapeDataString(devicePath)); + _url = _url.Replace("{subscriptionId}", System.Uri.EscapeDataString(this.Client.SubscriptionId)); + System.Collections.Generic.List _queryParameters = new System.Collections.Generic.List(); + if (this.Client.ApiVersion != null) + { + _queryParameters.Add(string.Format("api-version={0}", System.Uri.EscapeDataString(this.Client.ApiVersion))); + } + if (_queryParameters.Count > 0) + { + _url += "?" + string.Join("&", _queryParameters); + } + // Create HTTP transport objects + System.Net.Http.HttpRequestMessage _httpRequest = new System.Net.Http.HttpRequestMessage(); + System.Net.Http.HttpResponseMessage _httpResponse = null; + _httpRequest.Method = new System.Net.Http.HttpMethod("POST"); + _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 && (int)_statusCode != 202) + { + 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); + CloudError _errorBody = Microsoft.Rest.Serialization.SafeJsonConvert.DeserializeObject(_responseContent, this.Client.DeserializationSettings); + if (_errorBody != null) + { + ex = new Microsoft.Rest.Azure.CloudException(_errorBody.Message); + 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 (_httpResponse.Headers.Contains("x-ms-request-id")) + { + ex.RequestId = _httpResponse.Headers.GetValues("x-ms-request-id").FirstOrDefault(); + } + 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; + } + + /// + /// The ListRoutesTable from ExpressRouteCircuit opertion retrieves the + /// currently advertised routes table associated with the + /// ExpressRouteCircuits in a resource group. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the circuit. + /// + /// + /// The name of the peering. + /// + /// + /// The path of the device. + /// + /// + /// The headers that will be added to request. + /// + /// + /// The cancellation token. + /// + public async System.Threading.Tasks.Task> ListRoutesTableSummaryWithHttpMessagesAsync(string resourceGroupName, string circuitName, string peeringName, string devicePath, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + // Send request + Microsoft.Rest.Azure.AzureOperationResponse _response = await BeginListRoutesTableSummaryWithHttpMessagesAsync( + resourceGroupName, circuitName, peeringName, devicePath, customHeaders, cancellationToken); + return await this.Client.GetPostOrDeleteOperationResultAsync(_response, customHeaders, cancellationToken); + } + + /// + /// The ListRoutesTable from ExpressRouteCircuit opertion retrieves the + /// currently advertised routes table associated with the + /// ExpressRouteCircuits in a resource group. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the circuit. + /// + /// + /// The name of the peering. + /// + /// + /// The path of the device. + /// + /// + /// 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 + /// + /// + /// A response object containing the response body and response headers. + /// + public async System.Threading.Tasks.Task> BeginListRoutesTableSummaryWithHttpMessagesAsync(string resourceGroupName, string circuitName, string peeringName, string devicePath, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + if (resourceGroupName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "resourceGroupName"); + } + if (circuitName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "circuitName"); + } + if (peeringName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "peeringName"); + } + if (devicePath == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "devicePath"); + } + if (this.Client.ApiVersion == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.ApiVersion"); + } + if (this.Client.SubscriptionId == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.SubscriptionId"); + } + // 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("circuitName", circuitName); + tracingParameters.Add("peeringName", peeringName); + tracingParameters.Add("devicePath", devicePath); + tracingParameters.Add("cancellationToken", cancellationToken); + Microsoft.Rest.ServiceClientTracing.Enter(_invocationId, this, "BeginListRoutesTableSummary", 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/expressRouteCircuits/{circuitName}/peerings/{peeringName}/routeTablesSummary/{devicePath}").ToString(); + _url = _url.Replace("{resourceGroupName}", System.Uri.EscapeDataString(resourceGroupName)); + _url = _url.Replace("{circuitName}", System.Uri.EscapeDataString(circuitName)); + _url = _url.Replace("{peeringName}", System.Uri.EscapeDataString(peeringName)); + _url = _url.Replace("{devicePath}", System.Uri.EscapeDataString(devicePath)); + _url = _url.Replace("{subscriptionId}", System.Uri.EscapeDataString(this.Client.SubscriptionId)); + System.Collections.Generic.List _queryParameters = new System.Collections.Generic.List(); + if (this.Client.ApiVersion != null) + { + _queryParameters.Add(string.Format("api-version={0}", System.Uri.EscapeDataString(this.Client.ApiVersion))); + } + if (_queryParameters.Count > 0) + { + _url += "?" + string.Join("&", _queryParameters); + } + // Create HTTP transport objects + System.Net.Http.HttpRequestMessage _httpRequest = new System.Net.Http.HttpRequestMessage(); + System.Net.Http.HttpResponseMessage _httpResponse = null; + _httpRequest.Method = new System.Net.Http.HttpMethod("POST"); + _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 && (int)_statusCode != 202) + { + 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); + CloudError _errorBody = Microsoft.Rest.Serialization.SafeJsonConvert.DeserializeObject(_responseContent, this.Client.DeserializationSettings); + if (_errorBody != null) + { + ex = new Microsoft.Rest.Azure.CloudException(_errorBody.Message); + 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 (_httpResponse.Headers.Contains("x-ms-request-id")) + { + ex.RequestId = _httpResponse.Headers.GetValues("x-ms-request-id").FirstOrDefault(); + } + 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; + } + + /// + /// The Liststats ExpressRouteCircuit opertion retrieves all the stats from a + /// ExpressRouteCircuits in a resource group. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the circuit. + /// + /// + /// 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 + /// + /// + /// A response object containing the response body and response headers. + /// + public async System.Threading.Tasks.Task> GetStatsWithHttpMessagesAsync(string resourceGroupName, string circuitName, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + if (resourceGroupName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "resourceGroupName"); + } + if (circuitName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "circuitName"); + } + if (this.Client.ApiVersion == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.ApiVersion"); + } + if (this.Client.SubscriptionId == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.SubscriptionId"); + } + // 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("circuitName", circuitName); + tracingParameters.Add("cancellationToken", cancellationToken); + Microsoft.Rest.ServiceClientTracing.Enter(_invocationId, this, "GetStats", 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/expressRouteCircuits/{circuitName}/stats").ToString(); + _url = _url.Replace("{resourceGroupName}", System.Uri.EscapeDataString(resourceGroupName)); + _url = _url.Replace("{circuitName}", System.Uri.EscapeDataString(circuitName)); + _url = _url.Replace("{subscriptionId}", System.Uri.EscapeDataString(this.Client.SubscriptionId)); + System.Collections.Generic.List _queryParameters = new System.Collections.Generic.List(); + if (this.Client.ApiVersion != null) + { + _queryParameters.Add(string.Format("api-version={0}", System.Uri.EscapeDataString(this.Client.ApiVersion))); + } + if (_queryParameters.Count > 0) + { + _url += "?" + string.Join("&", _queryParameters); + } + // Create HTTP transport objects + System.Net.Http.HttpRequestMessage _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); + CloudError _errorBody = Microsoft.Rest.Serialization.SafeJsonConvert.DeserializeObject(_responseContent, this.Client.DeserializationSettings); + if (_errorBody != null) + { + ex = new Microsoft.Rest.Azure.CloudException(_errorBody.Message); + 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 (_httpResponse.Headers.Contains("x-ms-request-id")) + { + ex.RequestId = _httpResponse.Headers.GetValues("x-ms-request-id").FirstOrDefault(); + } + 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; + } + + /// + /// The Liststats ExpressRouteCircuit opertion retrieves all the stats from a + /// ExpressRouteCircuits in a resource group. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the circuit. + /// + /// + /// The name of the peering. + /// + /// + /// 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 + /// + /// + /// A response object containing the response body and response headers. + /// + public async System.Threading.Tasks.Task> GetPeeringStatsWithHttpMessagesAsync(string resourceGroupName, string circuitName, string peeringName, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + if (resourceGroupName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "resourceGroupName"); + } + if (circuitName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "circuitName"); + } + if (peeringName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "peeringName"); + } + if (this.Client.ApiVersion == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.ApiVersion"); + } + if (this.Client.SubscriptionId == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.SubscriptionId"); + } + // 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("circuitName", circuitName); + tracingParameters.Add("peeringName", peeringName); + tracingParameters.Add("cancellationToken", cancellationToken); + Microsoft.Rest.ServiceClientTracing.Enter(_invocationId, this, "GetPeeringStats", 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/expressRouteCircuits/{circuitName}/peerings/{peeringName}/stats").ToString(); + _url = _url.Replace("{resourceGroupName}", System.Uri.EscapeDataString(resourceGroupName)); + _url = _url.Replace("{circuitName}", System.Uri.EscapeDataString(circuitName)); + _url = _url.Replace("{peeringName}", System.Uri.EscapeDataString(peeringName)); + _url = _url.Replace("{subscriptionId}", System.Uri.EscapeDataString(this.Client.SubscriptionId)); + System.Collections.Generic.List _queryParameters = new System.Collections.Generic.List(); + if (this.Client.ApiVersion != null) + { + _queryParameters.Add(string.Format("api-version={0}", System.Uri.EscapeDataString(this.Client.ApiVersion))); + } + if (_queryParameters.Count > 0) + { + _url += "?" + string.Join("&", _queryParameters); + } + // Create HTTP transport objects + System.Net.Http.HttpRequestMessage _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); + CloudError _errorBody = Microsoft.Rest.Serialization.SafeJsonConvert.DeserializeObject(_responseContent, this.Client.DeserializationSettings); + if (_errorBody != null) + { + ex = new Microsoft.Rest.Azure.CloudException(_errorBody.Message); + 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 (_httpResponse.Headers.Contains("x-ms-request-id")) + { + ex.RequestId = _httpResponse.Headers.GetValues("x-ms-request-id").FirstOrDefault(); + } + 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; + } + + /// + /// The List ExpressRouteCircuit opertion retrieves all the + /// ExpressRouteCircuits in a resource group. + /// + /// + /// The name of the resource group. + /// + /// + /// 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 + /// + /// + /// A response object containing the response body and response headers. + /// + public async System.Threading.Tasks.Task>> ListWithHttpMessagesAsync(string resourceGroupName, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + if (resourceGroupName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "resourceGroupName"); + } + if (this.Client.ApiVersion == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.ApiVersion"); + } + if (this.Client.SubscriptionId == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.SubscriptionId"); + } + // 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("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/expressRouteCircuits").ToString(); + _url = _url.Replace("{resourceGroupName}", System.Uri.EscapeDataString(resourceGroupName)); + _url = _url.Replace("{subscriptionId}", System.Uri.EscapeDataString(this.Client.SubscriptionId)); + System.Collections.Generic.List _queryParameters = new System.Collections.Generic.List(); + if (this.Client.ApiVersion != null) + { + _queryParameters.Add(string.Format("api-version={0}", System.Uri.EscapeDataString(this.Client.ApiVersion))); + } + if (_queryParameters.Count > 0) + { + _url += "?" + string.Join("&", _queryParameters); + } + // Create HTTP transport objects + System.Net.Http.HttpRequestMessage _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); + CloudError _errorBody = Microsoft.Rest.Serialization.SafeJsonConvert.DeserializeObject(_responseContent, this.Client.DeserializationSettings); + if (_errorBody != null) + { + ex = new Microsoft.Rest.Azure.CloudException(_errorBody.Message); + 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 (_httpResponse.Headers.Contains("x-ms-request-id")) + { + ex.RequestId = _httpResponse.Headers.GetValues("x-ms-request-id").FirstOrDefault(); + } + 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; + } + + /// + /// The List ExpressRouteCircuit opertion retrieves all the + /// ExpressRouteCircuits in a subscription. + /// + /// + /// 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 + /// + /// + /// A response object containing the response body and response headers. + /// + public async System.Threading.Tasks.Task>> ListAllWithHttpMessagesAsync(System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + if (this.Client.ApiVersion == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.ApiVersion"); + } + if (this.Client.SubscriptionId == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.SubscriptionId"); + } + // 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("cancellationToken", cancellationToken); + Microsoft.Rest.ServiceClientTracing.Enter(_invocationId, this, "ListAll", tracingParameters); + } + // Construct URL + var _baseUrl = this.Client.BaseUri.AbsoluteUri; + var _url = new System.Uri(new System.Uri(_baseUrl + (_baseUrl.EndsWith("/") ? "" : "/")), "subscriptions/{subscriptionId}/providers/Microsoft.Network/expressRouteCircuits").ToString(); + _url = _url.Replace("{subscriptionId}", System.Uri.EscapeDataString(this.Client.SubscriptionId)); + System.Collections.Generic.List _queryParameters = new System.Collections.Generic.List(); + if (this.Client.ApiVersion != null) + { + _queryParameters.Add(string.Format("api-version={0}", System.Uri.EscapeDataString(this.Client.ApiVersion))); + } + if (_queryParameters.Count > 0) + { + _url += "?" + string.Join("&", _queryParameters); + } + // Create HTTP transport objects + System.Net.Http.HttpRequestMessage _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); + CloudError _errorBody = Microsoft.Rest.Serialization.SafeJsonConvert.DeserializeObject(_responseContent, this.Client.DeserializationSettings); + if (_errorBody != null) + { + ex = new Microsoft.Rest.Azure.CloudException(_errorBody.Message); + 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 (_httpResponse.Headers.Contains("x-ms-request-id")) + { + ex.RequestId = _httpResponse.Headers.GetValues("x-ms-request-id").FirstOrDefault(); + } + 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; + } + + /// + /// The List ExpressRouteCircuit opertion retrieves all the + /// ExpressRouteCircuits in a resource group. + /// + /// + /// 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 + /// + /// + /// 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 += "?" + string.Join("&", _queryParameters); + } + // Create HTTP transport objects + System.Net.Http.HttpRequestMessage _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); + CloudError _errorBody = Microsoft.Rest.Serialization.SafeJsonConvert.DeserializeObject(_responseContent, this.Client.DeserializationSettings); + if (_errorBody != null) + { + ex = new Microsoft.Rest.Azure.CloudException(_errorBody.Message); + 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 (_httpResponse.Headers.Contains("x-ms-request-id")) + { + ex.RequestId = _httpResponse.Headers.GetValues("x-ms-request-id").FirstOrDefault(); + } + 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; + } + + /// + /// The List ExpressRouteCircuit opertion retrieves all the + /// ExpressRouteCircuits in a subscription. + /// + /// + /// 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 + /// + /// + /// A response object containing the response body and response headers. + /// + public async System.Threading.Tasks.Task>> ListAllNextWithHttpMessagesAsync(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, "ListAllNext", 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 += "?" + string.Join("&", _queryParameters); + } + // Create HTTP transport objects + System.Net.Http.HttpRequestMessage _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); + CloudError _errorBody = Microsoft.Rest.Serialization.SafeJsonConvert.DeserializeObject(_responseContent, this.Client.DeserializationSettings); + if (_errorBody != null) + { + ex = new Microsoft.Rest.Azure.CloudException(_errorBody.Message); + 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 (_httpResponse.Headers.Contains("x-ms-request-id")) + { + ex.RequestId = _httpResponse.Headers.GetValues("x-ms-request-id").FirstOrDefault(); + } + 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; + } + + } +} diff --git a/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/ExpressRouteCircuitsOperationsExtensions.cs b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/ExpressRouteCircuitsOperationsExtensions.cs new file mode 100644 index 000000000..8f54f0b5b --- /dev/null +++ b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/ExpressRouteCircuitsOperationsExtensions.cs @@ -0,0 +1,797 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.Network +{ + using System.Threading.Tasks; + using Microsoft.Rest.Azure; + using Models; + + /// + /// Extension methods for ExpressRouteCircuitsOperations. + /// + public static partial class ExpressRouteCircuitsOperationsExtensions + { + /// + /// The delete ExpressRouteCircuit operation deletes the specified + /// ExpressRouteCircuit. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the express route Circuit. + /// + public static void Delete(this IExpressRouteCircuitsOperations operations, string resourceGroupName, string circuitName) + { + System.Threading.Tasks.Task.Factory.StartNew(s => ((IExpressRouteCircuitsOperations)s).DeleteAsync(resourceGroupName, circuitName), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// The delete ExpressRouteCircuit operation deletes the specified + /// ExpressRouteCircuit. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the express route Circuit. + /// + /// + /// The cancellation token. + /// + public static async System.Threading.Tasks.Task DeleteAsync(this IExpressRouteCircuitsOperations operations, string resourceGroupName, string circuitName, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + await operations.DeleteWithHttpMessagesAsync(resourceGroupName, circuitName, null, cancellationToken).ConfigureAwait(false); + } + + /// + /// The delete ExpressRouteCircuit operation deletes the specified + /// ExpressRouteCircuit. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the express route Circuit. + /// + public static void BeginDelete(this IExpressRouteCircuitsOperations operations, string resourceGroupName, string circuitName) + { + System.Threading.Tasks.Task.Factory.StartNew(s => ((IExpressRouteCircuitsOperations)s).BeginDeleteAsync(resourceGroupName, circuitName), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// The delete ExpressRouteCircuit operation deletes the specified + /// ExpressRouteCircuit. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the express route Circuit. + /// + /// + /// The cancellation token. + /// + public static async System.Threading.Tasks.Task BeginDeleteAsync(this IExpressRouteCircuitsOperations operations, string resourceGroupName, string circuitName, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + await operations.BeginDeleteWithHttpMessagesAsync(resourceGroupName, circuitName, null, cancellationToken).ConfigureAwait(false); + } + + /// + /// The Get ExpressRouteCircuit operation retreives information about the + /// specified ExpressRouteCircuit. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the circuit. + /// + public static ExpressRouteCircuitInner Get(this IExpressRouteCircuitsOperations operations, string resourceGroupName, string circuitName) + { + return System.Threading.Tasks.Task.Factory.StartNew(s => ((IExpressRouteCircuitsOperations)s).GetAsync(resourceGroupName, circuitName), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// The Get ExpressRouteCircuit operation retreives information about the + /// specified ExpressRouteCircuit. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the circuit. + /// + /// + /// The cancellation token. + /// + public static async System.Threading.Tasks.Task GetAsync(this IExpressRouteCircuitsOperations operations, string resourceGroupName, string circuitName, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + using (var _result = await operations.GetWithHttpMessagesAsync(resourceGroupName, circuitName, null, cancellationToken).ConfigureAwait(false)) + { + return _result.Body; + } + } + + /// + /// The Put ExpressRouteCircuit operation creates/updates a ExpressRouteCircuit + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the circuit. + /// + /// + /// Parameters supplied to the create/delete ExpressRouteCircuit operation + /// + public static ExpressRouteCircuitInner CreateOrUpdate(this IExpressRouteCircuitsOperations operations, string resourceGroupName, string circuitName, ExpressRouteCircuitInner parameters) + { + return System.Threading.Tasks.Task.Factory.StartNew(s => ((IExpressRouteCircuitsOperations)s).CreateOrUpdateAsync(resourceGroupName, circuitName, parameters), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// The Put ExpressRouteCircuit operation creates/updates a ExpressRouteCircuit + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the circuit. + /// + /// + /// Parameters supplied to the create/delete ExpressRouteCircuit operation + /// + /// + /// The cancellation token. + /// + public static async System.Threading.Tasks.Task CreateOrUpdateAsync(this IExpressRouteCircuitsOperations operations, string resourceGroupName, string circuitName, ExpressRouteCircuitInner parameters, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + using (var _result = await operations.CreateOrUpdateWithHttpMessagesAsync(resourceGroupName, circuitName, parameters, null, cancellationToken).ConfigureAwait(false)) + { + return _result.Body; + } + } + + /// + /// The Put ExpressRouteCircuit operation creates/updates a ExpressRouteCircuit + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the circuit. + /// + /// + /// Parameters supplied to the create/delete ExpressRouteCircuit operation + /// + public static ExpressRouteCircuitInner BeginCreateOrUpdate(this IExpressRouteCircuitsOperations operations, string resourceGroupName, string circuitName, ExpressRouteCircuitInner parameters) + { + return System.Threading.Tasks.Task.Factory.StartNew(s => ((IExpressRouteCircuitsOperations)s).BeginCreateOrUpdateAsync(resourceGroupName, circuitName, parameters), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// The Put ExpressRouteCircuit operation creates/updates a ExpressRouteCircuit + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the circuit. + /// + /// + /// Parameters supplied to the create/delete ExpressRouteCircuit operation + /// + /// + /// The cancellation token. + /// + public static async System.Threading.Tasks.Task BeginCreateOrUpdateAsync(this IExpressRouteCircuitsOperations operations, string resourceGroupName, string circuitName, ExpressRouteCircuitInner parameters, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + using (var _result = await operations.BeginCreateOrUpdateWithHttpMessagesAsync(resourceGroupName, circuitName, parameters, null, cancellationToken).ConfigureAwait(false)) + { + return _result.Body; + } + } + + /// + /// The ListArpTable from ExpressRouteCircuit opertion retrieves the currently + /// advertised arp table associated with the ExpressRouteCircuits in a + /// resource group. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the circuit. + /// + /// + /// The name of the peering. + /// + /// + /// The path of the device. + /// + public static ExpressRouteCircuitsArpTableListResultInner ListArpTable(this IExpressRouteCircuitsOperations operations, string resourceGroupName, string circuitName, string peeringName, string devicePath) + { + return System.Threading.Tasks.Task.Factory.StartNew(s => ((IExpressRouteCircuitsOperations)s).ListArpTableAsync(resourceGroupName, circuitName, peeringName, devicePath), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// The ListArpTable from ExpressRouteCircuit opertion retrieves the currently + /// advertised arp table associated with the ExpressRouteCircuits in a + /// resource group. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the circuit. + /// + /// + /// The name of the peering. + /// + /// + /// The path of the device. + /// + /// + /// The cancellation token. + /// + public static async System.Threading.Tasks.Task ListArpTableAsync(this IExpressRouteCircuitsOperations operations, string resourceGroupName, string circuitName, string peeringName, string devicePath, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + using (var _result = await operations.ListArpTableWithHttpMessagesAsync(resourceGroupName, circuitName, peeringName, devicePath, null, cancellationToken).ConfigureAwait(false)) + { + return _result.Body; + } + } + + /// + /// The ListArpTable from ExpressRouteCircuit opertion retrieves the currently + /// advertised arp table associated with the ExpressRouteCircuits in a + /// resource group. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the circuit. + /// + /// + /// The name of the peering. + /// + /// + /// The path of the device. + /// + public static ExpressRouteCircuitsArpTableListResultInner BeginListArpTable(this IExpressRouteCircuitsOperations operations, string resourceGroupName, string circuitName, string peeringName, string devicePath) + { + return System.Threading.Tasks.Task.Factory.StartNew(s => ((IExpressRouteCircuitsOperations)s).BeginListArpTableAsync(resourceGroupName, circuitName, peeringName, devicePath), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// The ListArpTable from ExpressRouteCircuit opertion retrieves the currently + /// advertised arp table associated with the ExpressRouteCircuits in a + /// resource group. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the circuit. + /// + /// + /// The name of the peering. + /// + /// + /// The path of the device. + /// + /// + /// The cancellation token. + /// + public static async System.Threading.Tasks.Task BeginListArpTableAsync(this IExpressRouteCircuitsOperations operations, string resourceGroupName, string circuitName, string peeringName, string devicePath, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + using (var _result = await operations.BeginListArpTableWithHttpMessagesAsync(resourceGroupName, circuitName, peeringName, devicePath, null, cancellationToken).ConfigureAwait(false)) + { + return _result.Body; + } + } + + /// + /// The ListRoutesTable from ExpressRouteCircuit opertion retrieves the + /// currently advertised routes table associated with the + /// ExpressRouteCircuits in a resource group. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the circuit. + /// + /// + /// The name of the peering. + /// + /// + /// The path of the device. + /// + public static ExpressRouteCircuitsRoutesTableListResultInner ListRoutesTable(this IExpressRouteCircuitsOperations operations, string resourceGroupName, string circuitName, string peeringName, string devicePath) + { + return System.Threading.Tasks.Task.Factory.StartNew(s => ((IExpressRouteCircuitsOperations)s).ListRoutesTableAsync(resourceGroupName, circuitName, peeringName, devicePath), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// The ListRoutesTable from ExpressRouteCircuit opertion retrieves the + /// currently advertised routes table associated with the + /// ExpressRouteCircuits in a resource group. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the circuit. + /// + /// + /// The name of the peering. + /// + /// + /// The path of the device. + /// + /// + /// The cancellation token. + /// + public static async System.Threading.Tasks.Task ListRoutesTableAsync(this IExpressRouteCircuitsOperations operations, string resourceGroupName, string circuitName, string peeringName, string devicePath, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + using (var _result = await operations.ListRoutesTableWithHttpMessagesAsync(resourceGroupName, circuitName, peeringName, devicePath, null, cancellationToken).ConfigureAwait(false)) + { + return _result.Body; + } + } + + /// + /// The ListRoutesTable from ExpressRouteCircuit opertion retrieves the + /// currently advertised routes table associated with the + /// ExpressRouteCircuits in a resource group. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the circuit. + /// + /// + /// The name of the peering. + /// + /// + /// The path of the device. + /// + public static ExpressRouteCircuitsRoutesTableListResultInner BeginListRoutesTable(this IExpressRouteCircuitsOperations operations, string resourceGroupName, string circuitName, string peeringName, string devicePath) + { + return System.Threading.Tasks.Task.Factory.StartNew(s => ((IExpressRouteCircuitsOperations)s).BeginListRoutesTableAsync(resourceGroupName, circuitName, peeringName, devicePath), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// The ListRoutesTable from ExpressRouteCircuit opertion retrieves the + /// currently advertised routes table associated with the + /// ExpressRouteCircuits in a resource group. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the circuit. + /// + /// + /// The name of the peering. + /// + /// + /// The path of the device. + /// + /// + /// The cancellation token. + /// + public static async System.Threading.Tasks.Task BeginListRoutesTableAsync(this IExpressRouteCircuitsOperations operations, string resourceGroupName, string circuitName, string peeringName, string devicePath, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + using (var _result = await operations.BeginListRoutesTableWithHttpMessagesAsync(resourceGroupName, circuitName, peeringName, devicePath, null, cancellationToken).ConfigureAwait(false)) + { + return _result.Body; + } + } + + /// + /// The ListRoutesTable from ExpressRouteCircuit opertion retrieves the + /// currently advertised routes table associated with the + /// ExpressRouteCircuits in a resource group. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the circuit. + /// + /// + /// The name of the peering. + /// + /// + /// The path of the device. + /// + public static ExpressRouteCircuitsRoutesTableSummaryListResultInner ListRoutesTableSummary(this IExpressRouteCircuitsOperations operations, string resourceGroupName, string circuitName, string peeringName, string devicePath) + { + return System.Threading.Tasks.Task.Factory.StartNew(s => ((IExpressRouteCircuitsOperations)s).ListRoutesTableSummaryAsync(resourceGroupName, circuitName, peeringName, devicePath), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// The ListRoutesTable from ExpressRouteCircuit opertion retrieves the + /// currently advertised routes table associated with the + /// ExpressRouteCircuits in a resource group. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the circuit. + /// + /// + /// The name of the peering. + /// + /// + /// The path of the device. + /// + /// + /// The cancellation token. + /// + public static async System.Threading.Tasks.Task ListRoutesTableSummaryAsync(this IExpressRouteCircuitsOperations operations, string resourceGroupName, string circuitName, string peeringName, string devicePath, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + using (var _result = await operations.ListRoutesTableSummaryWithHttpMessagesAsync(resourceGroupName, circuitName, peeringName, devicePath, null, cancellationToken).ConfigureAwait(false)) + { + return _result.Body; + } + } + + /// + /// The ListRoutesTable from ExpressRouteCircuit opertion retrieves the + /// currently advertised routes table associated with the + /// ExpressRouteCircuits in a resource group. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the circuit. + /// + /// + /// The name of the peering. + /// + /// + /// The path of the device. + /// + public static ExpressRouteCircuitsRoutesTableSummaryListResultInner BeginListRoutesTableSummary(this IExpressRouteCircuitsOperations operations, string resourceGroupName, string circuitName, string peeringName, string devicePath) + { + return System.Threading.Tasks.Task.Factory.StartNew(s => ((IExpressRouteCircuitsOperations)s).BeginListRoutesTableSummaryAsync(resourceGroupName, circuitName, peeringName, devicePath), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// The ListRoutesTable from ExpressRouteCircuit opertion retrieves the + /// currently advertised routes table associated with the + /// ExpressRouteCircuits in a resource group. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the circuit. + /// + /// + /// The name of the peering. + /// + /// + /// The path of the device. + /// + /// + /// The cancellation token. + /// + public static async System.Threading.Tasks.Task BeginListRoutesTableSummaryAsync(this IExpressRouteCircuitsOperations operations, string resourceGroupName, string circuitName, string peeringName, string devicePath, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + using (var _result = await operations.BeginListRoutesTableSummaryWithHttpMessagesAsync(resourceGroupName, circuitName, peeringName, devicePath, null, cancellationToken).ConfigureAwait(false)) + { + return _result.Body; + } + } + + /// + /// The Liststats ExpressRouteCircuit opertion retrieves all the stats from a + /// ExpressRouteCircuits in a resource group. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the circuit. + /// + public static ExpressRouteCircuitStatsInner GetStats(this IExpressRouteCircuitsOperations operations, string resourceGroupName, string circuitName) + { + return System.Threading.Tasks.Task.Factory.StartNew(s => ((IExpressRouteCircuitsOperations)s).GetStatsAsync(resourceGroupName, circuitName), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// The Liststats ExpressRouteCircuit opertion retrieves all the stats from a + /// ExpressRouteCircuits in a resource group. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the circuit. + /// + /// + /// The cancellation token. + /// + public static async System.Threading.Tasks.Task GetStatsAsync(this IExpressRouteCircuitsOperations operations, string resourceGroupName, string circuitName, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + using (var _result = await operations.GetStatsWithHttpMessagesAsync(resourceGroupName, circuitName, null, cancellationToken).ConfigureAwait(false)) + { + return _result.Body; + } + } + + /// + /// The Liststats ExpressRouteCircuit opertion retrieves all the stats from a + /// ExpressRouteCircuits in a resource group. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the circuit. + /// + /// + /// The name of the peering. + /// + public static ExpressRouteCircuitStatsInner GetPeeringStats(this IExpressRouteCircuitsOperations operations, string resourceGroupName, string circuitName, string peeringName) + { + return System.Threading.Tasks.Task.Factory.StartNew(s => ((IExpressRouteCircuitsOperations)s).GetPeeringStatsAsync(resourceGroupName, circuitName, peeringName), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// The Liststats ExpressRouteCircuit opertion retrieves all the stats from a + /// ExpressRouteCircuits in a resource group. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the circuit. + /// + /// + /// The name of the peering. + /// + /// + /// The cancellation token. + /// + public static async System.Threading.Tasks.Task GetPeeringStatsAsync(this IExpressRouteCircuitsOperations operations, string resourceGroupName, string circuitName, string peeringName, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + using (var _result = await operations.GetPeeringStatsWithHttpMessagesAsync(resourceGroupName, circuitName, peeringName, null, cancellationToken).ConfigureAwait(false)) + { + return _result.Body; + } + } + + /// + /// The List ExpressRouteCircuit opertion retrieves all the + /// ExpressRouteCircuits in a resource group. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + public static Microsoft.Rest.Azure.IPage List(this IExpressRouteCircuitsOperations operations, string resourceGroupName) + { + return System.Threading.Tasks.Task.Factory.StartNew(s => ((IExpressRouteCircuitsOperations)s).ListAsync(resourceGroupName), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// The List ExpressRouteCircuit opertion retrieves all the + /// ExpressRouteCircuits in a resource group. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The cancellation token. + /// + public static async Task> ListAsync(this IExpressRouteCircuitsOperations operations, string resourceGroupName, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + using (var _result = await operations.ListWithHttpMessagesAsync(resourceGroupName, null, cancellationToken).ConfigureAwait(false)) + { + return _result.Body; + } + } + + /// + /// The List ExpressRouteCircuit opertion retrieves all the + /// ExpressRouteCircuits in a subscription. + /// + /// + /// The operations group for this extension method. + /// + public static Microsoft.Rest.Azure.IPage ListAll(this IExpressRouteCircuitsOperations operations) + { + return System.Threading.Tasks.Task.Factory.StartNew(s => ((IExpressRouteCircuitsOperations)s).ListAllAsync(), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// The List ExpressRouteCircuit opertion retrieves all the + /// ExpressRouteCircuits in a subscription. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The cancellation token. + /// + public static async Task> ListAllAsync(this IExpressRouteCircuitsOperations operations, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + using (var _result = await operations.ListAllWithHttpMessagesAsync(null, cancellationToken).ConfigureAwait(false)) + { + return _result.Body; + } + } + + /// + /// The List ExpressRouteCircuit opertion retrieves all the + /// ExpressRouteCircuits in a resource group. + /// + /// + /// 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 IExpressRouteCircuitsOperations operations, string nextPageLink) + { + return System.Threading.Tasks.Task.Factory.StartNew(s => ((IExpressRouteCircuitsOperations)s).ListNextAsync(nextPageLink), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// The List ExpressRouteCircuit opertion retrieves all the + /// ExpressRouteCircuits in a resource group. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The NextLink from the previous successful call to List operation. + /// + /// + /// The cancellation token. + /// + public static async Task> ListNextAsync(this IExpressRouteCircuitsOperations 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; + } + } + + /// + /// The List ExpressRouteCircuit opertion retrieves all the + /// ExpressRouteCircuits in a subscription. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The NextLink from the previous successful call to List operation. + /// + public static Microsoft.Rest.Azure.IPage ListAllNext(this IExpressRouteCircuitsOperations operations, string nextPageLink) + { + return System.Threading.Tasks.Task.Factory.StartNew(s => ((IExpressRouteCircuitsOperations)s).ListAllNextAsync(nextPageLink), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// The List ExpressRouteCircuit opertion retrieves all the + /// ExpressRouteCircuits in a subscription. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The NextLink from the previous successful call to List operation. + /// + /// + /// The cancellation token. + /// + public static async Task> ListAllNextAsync(this IExpressRouteCircuitsOperations operations, string nextPageLink, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + using (var _result = await operations.ListAllNextWithHttpMessagesAsync(nextPageLink, null, cancellationToken).ConfigureAwait(false)) + { + return _result.Body; + } + } + + } +} diff --git a/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/ExpressRouteServiceProvidersOperations.cs b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/ExpressRouteServiceProvidersOperations.cs new file mode 100644 index 000000000..111509499 --- /dev/null +++ b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/ExpressRouteServiceProvidersOperations.cs @@ -0,0 +1,388 @@ +// 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 0.17.0.0 +// 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; + + /// + /// ExpressRouteServiceProvidersOperations operations. + /// + internal partial class ExpressRouteServiceProvidersOperations : Microsoft.Rest.IServiceOperations, IExpressRouteServiceProvidersOperations + { + /// + /// Initializes a new instance of the ExpressRouteServiceProvidersOperations class. + /// + /// + /// Reference to the service client. + /// + /// + /// Thrown when a required parameter is null + /// + internal ExpressRouteServiceProvidersOperations(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; } + + /// + /// The List ExpressRouteServiceProvider opertion retrieves all the available + /// ExpressRouteServiceProviders. + /// + /// + /// 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 + /// + /// + /// A response object containing the response body and response headers. + /// + public async System.Threading.Tasks.Task>> ListWithHttpMessagesAsync(System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + if (this.Client.ApiVersion == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.ApiVersion"); + } + if (this.Client.SubscriptionId == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.SubscriptionId"); + } + // 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("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}/providers/Microsoft.Network/expressRouteServiceProviders").ToString(); + _url = _url.Replace("{subscriptionId}", System.Uri.EscapeDataString(this.Client.SubscriptionId)); + System.Collections.Generic.List _queryParameters = new System.Collections.Generic.List(); + if (this.Client.ApiVersion != null) + { + _queryParameters.Add(string.Format("api-version={0}", System.Uri.EscapeDataString(this.Client.ApiVersion))); + } + if (_queryParameters.Count > 0) + { + _url += "?" + string.Join("&", _queryParameters); + } + // Create HTTP transport objects + System.Net.Http.HttpRequestMessage _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); + CloudError _errorBody = Microsoft.Rest.Serialization.SafeJsonConvert.DeserializeObject(_responseContent, this.Client.DeserializationSettings); + if (_errorBody != null) + { + ex = new Microsoft.Rest.Azure.CloudException(_errorBody.Message); + 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 (_httpResponse.Headers.Contains("x-ms-request-id")) + { + ex.RequestId = _httpResponse.Headers.GetValues("x-ms-request-id").FirstOrDefault(); + } + 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; + } + + /// + /// The List ExpressRouteServiceProvider opertion retrieves all the available + /// ExpressRouteServiceProviders. + /// + /// + /// 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 + /// + /// + /// 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 += "?" + string.Join("&", _queryParameters); + } + // Create HTTP transport objects + System.Net.Http.HttpRequestMessage _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); + CloudError _errorBody = Microsoft.Rest.Serialization.SafeJsonConvert.DeserializeObject(_responseContent, this.Client.DeserializationSettings); + if (_errorBody != null) + { + ex = new Microsoft.Rest.Azure.CloudException(_errorBody.Message); + 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 (_httpResponse.Headers.Contains("x-ms-request-id")) + { + ex.RequestId = _httpResponse.Headers.GetValues("x-ms-request-id").FirstOrDefault(); + } + 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; + } + + } +} diff --git a/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/ExpressRouteServiceProvidersOperationsExtensions.cs b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/ExpressRouteServiceProvidersOperationsExtensions.cs new file mode 100644 index 000000000..bd085ec1c --- /dev/null +++ b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/ExpressRouteServiceProvidersOperationsExtensions.cs @@ -0,0 +1,87 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.Network +{ + using System.Threading.Tasks; + using Microsoft.Rest.Azure; + using Models; + + /// + /// Extension methods for ExpressRouteServiceProvidersOperations. + /// + public static partial class ExpressRouteServiceProvidersOperationsExtensions + { + /// + /// The List ExpressRouteServiceProvider opertion retrieves all the available + /// ExpressRouteServiceProviders. + /// + /// + /// The operations group for this extension method. + /// + public static Microsoft.Rest.Azure.IPage List(this IExpressRouteServiceProvidersOperations operations) + { + return System.Threading.Tasks.Task.Factory.StartNew(s => ((IExpressRouteServiceProvidersOperations)s).ListAsync(), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// The List ExpressRouteServiceProvider opertion retrieves all the available + /// ExpressRouteServiceProviders. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The cancellation token. + /// + public static async Task> ListAsync(this IExpressRouteServiceProvidersOperations operations, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + using (var _result = await operations.ListWithHttpMessagesAsync(null, cancellationToken).ConfigureAwait(false)) + { + return _result.Body; + } + } + + /// + /// The List ExpressRouteServiceProvider opertion retrieves all the available + /// ExpressRouteServiceProviders. + /// + /// + /// 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 IExpressRouteServiceProvidersOperations operations, string nextPageLink) + { + return System.Threading.Tasks.Task.Factory.StartNew(s => ((IExpressRouteServiceProvidersOperations)s).ListNextAsync(nextPageLink), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// The List ExpressRouteServiceProvider opertion retrieves all the available + /// ExpressRouteServiceProviders. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The NextLink from the previous successful call to List operation. + /// + /// + /// The cancellation token. + /// + public static async Task> ListNextAsync(this IExpressRouteServiceProvidersOperations 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/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/IApplicationGatewaysOperations.cs b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/IApplicationGatewaysOperations.cs new file mode 100644 index 000000000..e774da62a --- /dev/null +++ b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/IApplicationGatewaysOperations.cs @@ -0,0 +1,335 @@ +// 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 0.17.0.0 +// 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; + + /// + /// ApplicationGatewaysOperations operations. + /// + public partial interface IApplicationGatewaysOperations + { + /// + /// The delete applicationgateway operation deletes the specified + /// applicationgateway. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the applicationgateway. + /// + /// + /// The 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 + /// + System.Threading.Tasks.Task DeleteWithHttpMessagesAsync(string resourceGroupName, string applicationGatewayName, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + /// + /// The delete applicationgateway operation deletes the specified + /// applicationgateway. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the applicationgateway. + /// + /// + /// The 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 + /// + System.Threading.Tasks.Task BeginDeleteWithHttpMessagesAsync(string resourceGroupName, string applicationGatewayName, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + /// + /// The Get applicationgateway operation retreives information about + /// the specified applicationgateway. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the applicationgateway. + /// + /// + /// 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 + /// + /// + /// Thrown when a required parameter is null + /// + System.Threading.Tasks.Task> GetWithHttpMessagesAsync(string resourceGroupName, string applicationGatewayName, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + /// + /// The Put ApplicationGateway operation creates/updates a + /// ApplicationGateway + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the ApplicationGateway. + /// + /// + /// Parameters supplied to the create/delete ApplicationGateway + /// 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 + /// + /// + /// Thrown when a required parameter is null + /// + System.Threading.Tasks.Task> CreateOrUpdateWithHttpMessagesAsync(string resourceGroupName, string applicationGatewayName, ApplicationGatewayInner parameters, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + /// + /// The Put ApplicationGateway operation creates/updates a + /// ApplicationGateway + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the ApplicationGateway. + /// + /// + /// Parameters supplied to the create/delete ApplicationGateway + /// 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 + /// + /// + /// Thrown when a required parameter is null + /// + System.Threading.Tasks.Task> BeginCreateOrUpdateWithHttpMessagesAsync(string resourceGroupName, string applicationGatewayName, ApplicationGatewayInner parameters, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + /// + /// The List ApplicationGateway opertion retrieves all the + /// applicationgateways in a resource group. + /// + /// + /// The name of the resource group. + /// + /// + /// 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 + /// + /// + /// Thrown when a required parameter is null + /// + System.Threading.Tasks.Task>> ListWithHttpMessagesAsync(string resourceGroupName, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + /// + /// The List applicationgateway opertion retrieves all the + /// applicationgateways in a subscription. + /// + /// + /// 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 + /// + /// + /// Thrown when a required parameter is null + /// + System.Threading.Tasks.Task>> ListAllWithHttpMessagesAsync(System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + /// + /// The Start ApplicationGateway operation starts application + /// gatewayin the specified resource group through Network resource + /// provider. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the application gateway. + /// + /// + /// The 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 + /// + System.Threading.Tasks.Task StartWithHttpMessagesAsync(string resourceGroupName, string applicationGatewayName, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + /// + /// The Start ApplicationGateway operation starts application + /// gatewayin the specified resource group through Network resource + /// provider. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the application gateway. + /// + /// + /// The 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 + /// + System.Threading.Tasks.Task BeginStartWithHttpMessagesAsync(string resourceGroupName, string applicationGatewayName, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + /// + /// The STOP ApplicationGateway operation stops application gatewayin + /// the specified resource group through Network resource provider. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the application gateway. + /// + /// + /// The 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 + /// + System.Threading.Tasks.Task StopWithHttpMessagesAsync(string resourceGroupName, string applicationGatewayName, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + /// + /// The STOP ApplicationGateway operation stops application gatewayin + /// the specified resource group through Network resource provider. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the application gateway. + /// + /// + /// The 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 + /// + System.Threading.Tasks.Task BeginStopWithHttpMessagesAsync(string resourceGroupName, string applicationGatewayName, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + /// + /// The List ApplicationGateway opertion retrieves all the + /// applicationgateways in a resource group. + /// + /// + /// 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 + /// + /// + /// Thrown when a required parameter is null + /// + System.Threading.Tasks.Task>> ListNextWithHttpMessagesAsync(string nextPageLink, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + /// + /// The List applicationgateway opertion retrieves all the + /// applicationgateways in a subscription. + /// + /// + /// 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 + /// + /// + /// Thrown when a required parameter is null + /// + System.Threading.Tasks.Task>> ListAllNextWithHttpMessagesAsync(string nextPageLink, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + } +} diff --git a/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/IExpressRouteCircuitAuthorizationsOperations.cs b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/IExpressRouteCircuitAuthorizationsOperations.cs new file mode 100644 index 000000000..1fac67b74 --- /dev/null +++ b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/IExpressRouteCircuitAuthorizationsOperations.cs @@ -0,0 +1,216 @@ +// 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 0.17.0.0 +// 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; + + /// + /// ExpressRouteCircuitAuthorizationsOperations operations. + /// + public partial interface IExpressRouteCircuitAuthorizationsOperations + { + /// + /// The delete authorization operation deletes the specified + /// authorization from the specified ExpressRouteCircuit. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the express route circuit. + /// + /// + /// The name of the authorization. + /// + /// + /// The 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 + /// + System.Threading.Tasks.Task DeleteWithHttpMessagesAsync(string resourceGroupName, string circuitName, string authorizationName, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + /// + /// The delete authorization operation deletes the specified + /// authorization from the specified ExpressRouteCircuit. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the express route circuit. + /// + /// + /// The name of the authorization. + /// + /// + /// The 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 + /// + System.Threading.Tasks.Task BeginDeleteWithHttpMessagesAsync(string resourceGroupName, string circuitName, string authorizationName, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + /// + /// The GET authorization operation retrieves the specified + /// authorization from the specified ExpressRouteCircuit. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the express route circuit. + /// + /// + /// The name of the authorization. + /// + /// + /// 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 + /// + /// + /// Thrown when a required parameter is null + /// + System.Threading.Tasks.Task> GetWithHttpMessagesAsync(string resourceGroupName, string circuitName, string authorizationName, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + /// + /// The Put Authorization operation creates/updates an authorization + /// in thespecified ExpressRouteCircuits + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the express route circuit. + /// + /// + /// The name of the authorization. + /// + /// + /// Parameters supplied to the create/update + /// ExpressRouteCircuitAuthorization 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 + /// + /// + /// Thrown when a required parameter is null + /// + System.Threading.Tasks.Task> CreateOrUpdateWithHttpMessagesAsync(string resourceGroupName, string circuitName, string authorizationName, ExpressRouteCircuitAuthorizationInner authorizationParameters, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + /// + /// The Put Authorization operation creates/updates an authorization + /// in thespecified ExpressRouteCircuits + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the express route circuit. + /// + /// + /// The name of the authorization. + /// + /// + /// Parameters supplied to the create/update + /// ExpressRouteCircuitAuthorization 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 + /// + /// + /// Thrown when a required parameter is null + /// + System.Threading.Tasks.Task> BeginCreateOrUpdateWithHttpMessagesAsync(string resourceGroupName, string circuitName, string authorizationName, ExpressRouteCircuitAuthorizationInner authorizationParameters, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + /// + /// The List authorization operation retrieves all the authorizations + /// in an ExpressRouteCircuit. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the curcuit. + /// + /// + /// 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 + /// + /// + /// Thrown when a required parameter is null + /// + System.Threading.Tasks.Task>> ListWithHttpMessagesAsync(string resourceGroupName, string circuitName, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + /// + /// The List authorization operation retrieves all the authorizations + /// in an ExpressRouteCircuit. + /// + /// + /// 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 + /// + /// + /// Thrown when a required parameter is null + /// + System.Threading.Tasks.Task>> ListNextWithHttpMessagesAsync(string nextPageLink, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + } +} diff --git a/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/IExpressRouteCircuitPeeringsOperations.cs b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/IExpressRouteCircuitPeeringsOperations.cs new file mode 100644 index 000000000..d7d30143a --- /dev/null +++ b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/IExpressRouteCircuitPeeringsOperations.cs @@ -0,0 +1,216 @@ +// 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 0.17.0.0 +// 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; + + /// + /// ExpressRouteCircuitPeeringsOperations operations. + /// + public partial interface IExpressRouteCircuitPeeringsOperations + { + /// + /// The delete peering operation deletes the specified peering from + /// the ExpressRouteCircuit. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the express route circuit. + /// + /// + /// The name of the peering. + /// + /// + /// The 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 + /// + System.Threading.Tasks.Task DeleteWithHttpMessagesAsync(string resourceGroupName, string circuitName, string peeringName, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + /// + /// The delete peering operation deletes the specified peering from + /// the ExpressRouteCircuit. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the express route circuit. + /// + /// + /// The name of the peering. + /// + /// + /// The 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 + /// + System.Threading.Tasks.Task BeginDeleteWithHttpMessagesAsync(string resourceGroupName, string circuitName, string peeringName, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + /// + /// The GET peering operation retrieves the specified authorization + /// from the ExpressRouteCircuit. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the express route circuit. + /// + /// + /// The name of the peering. + /// + /// + /// 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 + /// + /// + /// Thrown when a required parameter is null + /// + System.Threading.Tasks.Task> GetWithHttpMessagesAsync(string resourceGroupName, string circuitName, string peeringName, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + /// + /// The Put Pering operation creates/updates an peering in the + /// specified ExpressRouteCircuits + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the express route circuit. + /// + /// + /// The name of the peering. + /// + /// + /// Parameters supplied to the create/update ExpressRouteCircuit + /// Peering 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 + /// + /// + /// Thrown when a required parameter is null + /// + System.Threading.Tasks.Task> CreateOrUpdateWithHttpMessagesAsync(string resourceGroupName, string circuitName, string peeringName, ExpressRouteCircuitPeeringInner peeringParameters, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + /// + /// The Put Pering operation creates/updates an peering in the + /// specified ExpressRouteCircuits + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the express route circuit. + /// + /// + /// The name of the peering. + /// + /// + /// Parameters supplied to the create/update ExpressRouteCircuit + /// Peering 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 + /// + /// + /// Thrown when a required parameter is null + /// + System.Threading.Tasks.Task> BeginCreateOrUpdateWithHttpMessagesAsync(string resourceGroupName, string circuitName, string peeringName, ExpressRouteCircuitPeeringInner peeringParameters, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + /// + /// The List peering operation retrieves all the peerings in an + /// ExpressRouteCircuit. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the curcuit. + /// + /// + /// 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 + /// + /// + /// Thrown when a required parameter is null + /// + System.Threading.Tasks.Task>> ListWithHttpMessagesAsync(string resourceGroupName, string circuitName, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + /// + /// The List peering operation retrieves all the peerings in an + /// ExpressRouteCircuit. + /// + /// + /// 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 + /// + /// + /// Thrown when a required parameter is null + /// + System.Threading.Tasks.Task>> ListNextWithHttpMessagesAsync(string nextPageLink, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + } +} diff --git a/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/IExpressRouteCircuitsOperations.cs b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/IExpressRouteCircuitsOperations.cs new file mode 100644 index 000000000..443121b1a --- /dev/null +++ b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/IExpressRouteCircuitsOperations.cs @@ -0,0 +1,494 @@ +// 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 0.17.0.0 +// 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; + + /// + /// ExpressRouteCircuitsOperations operations. + /// + public partial interface IExpressRouteCircuitsOperations + { + /// + /// The delete ExpressRouteCircuit operation deletes the specified + /// ExpressRouteCircuit. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the express route Circuit. + /// + /// + /// The 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 + /// + System.Threading.Tasks.Task DeleteWithHttpMessagesAsync(string resourceGroupName, string circuitName, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + /// + /// The delete ExpressRouteCircuit operation deletes the specified + /// ExpressRouteCircuit. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the express route Circuit. + /// + /// + /// The 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 + /// + System.Threading.Tasks.Task BeginDeleteWithHttpMessagesAsync(string resourceGroupName, string circuitName, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + /// + /// The Get ExpressRouteCircuit operation retreives information about + /// the specified ExpressRouteCircuit. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the circuit. + /// + /// + /// 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 + /// + /// + /// Thrown when a required parameter is null + /// + System.Threading.Tasks.Task> GetWithHttpMessagesAsync(string resourceGroupName, string circuitName, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + /// + /// The Put ExpressRouteCircuit operation creates/updates a + /// ExpressRouteCircuit + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the circuit. + /// + /// + /// Parameters supplied to the create/delete ExpressRouteCircuit + /// 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 + /// + /// + /// Thrown when a required parameter is null + /// + System.Threading.Tasks.Task> CreateOrUpdateWithHttpMessagesAsync(string resourceGroupName, string circuitName, ExpressRouteCircuitInner parameters, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + /// + /// The Put ExpressRouteCircuit operation creates/updates a + /// ExpressRouteCircuit + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the circuit. + /// + /// + /// Parameters supplied to the create/delete ExpressRouteCircuit + /// 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 + /// + /// + /// Thrown when a required parameter is null + /// + System.Threading.Tasks.Task> BeginCreateOrUpdateWithHttpMessagesAsync(string resourceGroupName, string circuitName, ExpressRouteCircuitInner parameters, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + /// + /// The ListArpTable from ExpressRouteCircuit opertion retrieves the + /// currently advertised arp table associated with the + /// ExpressRouteCircuits in a resource group. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the circuit. + /// + /// + /// The name of the peering. + /// + /// + /// The path of the device. + /// + /// + /// 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 + /// + /// + /// Thrown when a required parameter is null + /// + System.Threading.Tasks.Task> ListArpTableWithHttpMessagesAsync(string resourceGroupName, string circuitName, string peeringName, string devicePath, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + /// + /// The ListArpTable from ExpressRouteCircuit opertion retrieves the + /// currently advertised arp table associated with the + /// ExpressRouteCircuits in a resource group. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the circuit. + /// + /// + /// The name of the peering. + /// + /// + /// The path of the device. + /// + /// + /// 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 + /// + /// + /// Thrown when a required parameter is null + /// + System.Threading.Tasks.Task> BeginListArpTableWithHttpMessagesAsync(string resourceGroupName, string circuitName, string peeringName, string devicePath, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + /// + /// The ListRoutesTable from ExpressRouteCircuit opertion retrieves + /// the currently advertised routes table associated with the + /// ExpressRouteCircuits in a resource group. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the circuit. + /// + /// + /// The name of the peering. + /// + /// + /// The path of the device. + /// + /// + /// 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 + /// + /// + /// Thrown when a required parameter is null + /// + System.Threading.Tasks.Task> ListRoutesTableWithHttpMessagesAsync(string resourceGroupName, string circuitName, string peeringName, string devicePath, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + /// + /// The ListRoutesTable from ExpressRouteCircuit opertion retrieves + /// the currently advertised routes table associated with the + /// ExpressRouteCircuits in a resource group. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the circuit. + /// + /// + /// The name of the peering. + /// + /// + /// The path of the device. + /// + /// + /// 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 + /// + /// + /// Thrown when a required parameter is null + /// + System.Threading.Tasks.Task> BeginListRoutesTableWithHttpMessagesAsync(string resourceGroupName, string circuitName, string peeringName, string devicePath, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + /// + /// The ListRoutesTable from ExpressRouteCircuit opertion retrieves + /// the currently advertised routes table associated with the + /// ExpressRouteCircuits in a resource group. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the circuit. + /// + /// + /// The name of the peering. + /// + /// + /// The path of the device. + /// + /// + /// 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 + /// + /// + /// Thrown when a required parameter is null + /// + System.Threading.Tasks.Task> ListRoutesTableSummaryWithHttpMessagesAsync(string resourceGroupName, string circuitName, string peeringName, string devicePath, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + /// + /// The ListRoutesTable from ExpressRouteCircuit opertion retrieves + /// the currently advertised routes table associated with the + /// ExpressRouteCircuits in a resource group. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the circuit. + /// + /// + /// The name of the peering. + /// + /// + /// The path of the device. + /// + /// + /// 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 + /// + /// + /// Thrown when a required parameter is null + /// + System.Threading.Tasks.Task> BeginListRoutesTableSummaryWithHttpMessagesAsync(string resourceGroupName, string circuitName, string peeringName, string devicePath, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + /// + /// The Liststats ExpressRouteCircuit opertion retrieves all the stats + /// from a ExpressRouteCircuits in a resource group. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the circuit. + /// + /// + /// 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 + /// + /// + /// Thrown when a required parameter is null + /// + System.Threading.Tasks.Task> GetStatsWithHttpMessagesAsync(string resourceGroupName, string circuitName, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + /// + /// The Liststats ExpressRouteCircuit opertion retrieves all the stats + /// from a ExpressRouteCircuits in a resource group. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the circuit. + /// + /// + /// The name of the peering. + /// + /// + /// 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 + /// + /// + /// Thrown when a required parameter is null + /// + System.Threading.Tasks.Task> GetPeeringStatsWithHttpMessagesAsync(string resourceGroupName, string circuitName, string peeringName, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + /// + /// The List ExpressRouteCircuit opertion retrieves all the + /// ExpressRouteCircuits in a resource group. + /// + /// + /// The name of the resource group. + /// + /// + /// 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 + /// + /// + /// Thrown when a required parameter is null + /// + System.Threading.Tasks.Task>> ListWithHttpMessagesAsync(string resourceGroupName, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + /// + /// The List ExpressRouteCircuit opertion retrieves all the + /// ExpressRouteCircuits in a subscription. + /// + /// + /// 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 + /// + /// + /// Thrown when a required parameter is null + /// + System.Threading.Tasks.Task>> ListAllWithHttpMessagesAsync(System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + /// + /// The List ExpressRouteCircuit opertion retrieves all the + /// ExpressRouteCircuits in a resource group. + /// + /// + /// 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 + /// + /// + /// Thrown when a required parameter is null + /// + System.Threading.Tasks.Task>> ListNextWithHttpMessagesAsync(string nextPageLink, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + /// + /// The List ExpressRouteCircuit opertion retrieves all the + /// ExpressRouteCircuits in a subscription. + /// + /// + /// 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 + /// + /// + /// Thrown when a required parameter is null + /// + System.Threading.Tasks.Task>> ListAllNextWithHttpMessagesAsync(string nextPageLink, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + } +} diff --git a/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/IExpressRouteServiceProvidersOperations.cs b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/IExpressRouteServiceProvidersOperations.cs new file mode 100644 index 000000000..64879f010 --- /dev/null +++ b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/IExpressRouteServiceProvidersOperations.cs @@ -0,0 +1,63 @@ +// 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 0.17.0.0 +// 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; + + /// + /// ExpressRouteServiceProvidersOperations operations. + /// + public partial interface IExpressRouteServiceProvidersOperations + { + /// + /// The List ExpressRouteServiceProvider opertion retrieves all the + /// available ExpressRouteServiceProviders. + /// + /// + /// 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 + /// + /// + /// Thrown when a required parameter is null + /// + System.Threading.Tasks.Task>> ListWithHttpMessagesAsync(System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + /// + /// The List ExpressRouteServiceProvider opertion retrieves all the + /// available ExpressRouteServiceProviders. + /// + /// + /// 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 + /// + /// + /// Thrown when a required parameter is null + /// + System.Threading.Tasks.Task>> ListNextWithHttpMessagesAsync(string nextPageLink, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + } +} diff --git a/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/ILoadBalancersOperations.cs b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/ILoadBalancersOperations.cs new file mode 100644 index 000000000..bacc8d287 --- /dev/null +++ b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/ILoadBalancersOperations.cs @@ -0,0 +1,240 @@ +// 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 0.17.0.0 +// 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; + + /// + /// LoadBalancersOperations operations. + /// + public partial interface ILoadBalancersOperations + { + /// + /// The delete loadbalancer operation deletes the specified + /// loadbalancer. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the loadBalancer. + /// + /// + /// The 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 + /// + System.Threading.Tasks.Task DeleteWithHttpMessagesAsync(string resourceGroupName, string loadBalancerName, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + /// + /// The delete loadbalancer operation deletes the specified + /// loadbalancer. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the loadBalancer. + /// + /// + /// The 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 + /// + System.Threading.Tasks.Task BeginDeleteWithHttpMessagesAsync(string resourceGroupName, string loadBalancerName, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + /// + /// The Get ntework interface operation retreives information about + /// the specified network interface. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the loadBalancer. + /// + /// + /// expand references resources. + /// + /// + /// 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 + /// + /// + /// Thrown when a required parameter is null + /// + System.Threading.Tasks.Task> GetWithHttpMessagesAsync(string resourceGroupName, string loadBalancerName, string expand = default(string), System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + /// + /// The Put LoadBalancer operation creates/updates a LoadBalancer + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the loadBalancer. + /// + /// + /// Parameters supplied to the create/delete LoadBalancer 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 + /// + /// + /// Thrown when a required parameter is null + /// + System.Threading.Tasks.Task> CreateOrUpdateWithHttpMessagesAsync(string resourceGroupName, string loadBalancerName, LoadBalancerInner parameters, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + /// + /// The Put LoadBalancer operation creates/updates a LoadBalancer + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the loadBalancer. + /// + /// + /// Parameters supplied to the create/delete LoadBalancer 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 + /// + /// + /// Thrown when a required parameter is null + /// + System.Threading.Tasks.Task> BeginCreateOrUpdateWithHttpMessagesAsync(string resourceGroupName, string loadBalancerName, LoadBalancerInner parameters, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + /// + /// The List loadBalancer opertion retrieves all the loadbalancers in + /// a subscription. + /// + /// + /// 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 + /// + /// + /// Thrown when a required parameter is null + /// + System.Threading.Tasks.Task>> ListAllWithHttpMessagesAsync(System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + /// + /// The List loadBalancer opertion retrieves all the loadbalancers in + /// a resource group. + /// + /// + /// The name of the resource group. + /// + /// + /// 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 + /// + /// + /// Thrown when a required parameter is null + /// + System.Threading.Tasks.Task>> ListWithHttpMessagesAsync(string resourceGroupName, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + /// + /// The List loadBalancer opertion retrieves all the loadbalancers in + /// a subscription. + /// + /// + /// 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 + /// + /// + /// Thrown when a required parameter is null + /// + System.Threading.Tasks.Task>> ListAllNextWithHttpMessagesAsync(string nextPageLink, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + /// + /// The List loadBalancer opertion retrieves all the loadbalancers in + /// a resource group. + /// + /// + /// 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 + /// + /// + /// Thrown when a required parameter is null + /// + System.Threading.Tasks.Task>> ListNextWithHttpMessagesAsync(string nextPageLink, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + } +} diff --git a/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/ILocalNetworkGatewaysOperations.cs b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/ILocalNetworkGatewaysOperations.cs new file mode 100644 index 000000000..c76c606aa --- /dev/null +++ b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/ILocalNetworkGatewaysOperations.cs @@ -0,0 +1,201 @@ +// 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 0.17.0.0 +// 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; + + /// + /// LocalNetworkGatewaysOperations operations. + /// + public partial interface ILocalNetworkGatewaysOperations + { + /// + /// The Put LocalNetworkGateway operation creates/updates a local + /// network gateway in the specified resource group through Network + /// resource provider. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the local network gateway. + /// + /// + /// Parameters supplied to the Begin Create or update Local Network + /// Gateway operation through Network resource provider. + /// + /// + /// 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 + /// + /// + /// Thrown when a required parameter is null + /// + System.Threading.Tasks.Task> CreateOrUpdateWithHttpMessagesAsync(string resourceGroupName, string localNetworkGatewayName, LocalNetworkGatewayInner parameters, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + /// + /// The Put LocalNetworkGateway operation creates/updates a local + /// network gateway in the specified resource group through Network + /// resource provider. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the local network gateway. + /// + /// + /// Parameters supplied to the Begin Create or update Local Network + /// Gateway operation through Network resource provider. + /// + /// + /// 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 + /// + /// + /// Thrown when a required parameter is null + /// + System.Threading.Tasks.Task> BeginCreateOrUpdateWithHttpMessagesAsync(string resourceGroupName, string localNetworkGatewayName, LocalNetworkGatewayInner parameters, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + /// + /// The Get LocalNetworkGateway operation retrieves information about + /// the specified local network gateway through Network resource + /// provider. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the local network gateway. + /// + /// + /// 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 + /// + /// + /// Thrown when a required parameter is null + /// + System.Threading.Tasks.Task> GetWithHttpMessagesAsync(string resourceGroupName, string localNetworkGatewayName, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + /// + /// The Delete LocalNetworkGateway operation deletes the specifed + /// local network Gateway through Network resource provider. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the local network gateway. + /// + /// + /// The 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 + /// + System.Threading.Tasks.Task DeleteWithHttpMessagesAsync(string resourceGroupName, string localNetworkGatewayName, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + /// + /// The Delete LocalNetworkGateway operation deletes the specifed + /// local network Gateway through Network resource provider. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the local network gateway. + /// + /// + /// The 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 + /// + System.Threading.Tasks.Task BeginDeleteWithHttpMessagesAsync(string resourceGroupName, string localNetworkGatewayName, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + /// + /// The List LocalNetworkGateways opertion retrieves all the local + /// network gateways stored. + /// + /// + /// The name of the resource group. + /// + /// + /// 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 + /// + /// + /// Thrown when a required parameter is null + /// + System.Threading.Tasks.Task>> ListWithHttpMessagesAsync(string resourceGroupName, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + /// + /// The List LocalNetworkGateways opertion retrieves all the local + /// network gateways stored. + /// + /// + /// 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 + /// + /// + /// Thrown when a required parameter is null + /// + System.Threading.Tasks.Task>> ListNextWithHttpMessagesAsync(string nextPageLink, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + } +} diff --git a/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/INetworkInterfacesOperations.cs b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/INetworkInterfacesOperations.cs new file mode 100644 index 000000000..d85b87020 --- /dev/null +++ b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/INetworkInterfacesOperations.cs @@ -0,0 +1,484 @@ +// 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 0.17.0.0 +// 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; + + /// + /// NetworkInterfacesOperations operations. + /// + public partial interface INetworkInterfacesOperations + { + /// + /// The delete netwokInterface operation deletes the specified + /// netwokInterface. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the network interface. + /// + /// + /// The 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 + /// + System.Threading.Tasks.Task DeleteWithHttpMessagesAsync(string resourceGroupName, string networkInterfaceName, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + /// + /// The delete netwokInterface operation deletes the specified + /// netwokInterface. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the network interface. + /// + /// + /// The 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 + /// + System.Threading.Tasks.Task BeginDeleteWithHttpMessagesAsync(string resourceGroupName, string networkInterfaceName, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + /// + /// The Get ntework interface operation retreives information about + /// the specified network interface. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the network interface. + /// + /// + /// expand references resources. + /// + /// + /// 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 + /// + /// + /// Thrown when a required parameter is null + /// + System.Threading.Tasks.Task> GetWithHttpMessagesAsync(string resourceGroupName, string networkInterfaceName, string expand = default(string), System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + /// + /// The Put NetworkInterface operation creates/updates a + /// networkInterface + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the network interface. + /// + /// + /// Parameters supplied to the create/update NetworkInterface 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 + /// + /// + /// Thrown when a required parameter is null + /// + System.Threading.Tasks.Task> CreateOrUpdateWithHttpMessagesAsync(string resourceGroupName, string networkInterfaceName, NetworkInterfaceInner parameters, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + /// + /// The Put NetworkInterface operation creates/updates a + /// networkInterface + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the network interface. + /// + /// + /// Parameters supplied to the create/update NetworkInterface 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 + /// + /// + /// Thrown when a required parameter is null + /// + System.Threading.Tasks.Task> BeginCreateOrUpdateWithHttpMessagesAsync(string resourceGroupName, string networkInterfaceName, NetworkInterfaceInner parameters, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + /// + /// The list network interface operation retrieves information about + /// all network interfaces in a virtual machine from a virtual + /// machine scale set. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual machine scale set. + /// + /// + /// The virtual machine index. + /// + /// + /// 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 + /// + /// + /// Thrown when a required parameter is null + /// + System.Threading.Tasks.Task>> ListVirtualMachineScaleSetVMNetworkInterfacesWithHttpMessagesAsync(string resourceGroupName, string virtualMachineScaleSetName, string virtualmachineIndex, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + /// + /// The list network interface operation retrieves information about + /// all network interfaces in a virtual machine scale set. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual machine scale set. + /// + /// + /// 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 + /// + /// + /// Thrown when a required parameter is null + /// + System.Threading.Tasks.Task>> ListVirtualMachineScaleSetNetworkInterfacesWithHttpMessagesAsync(string resourceGroupName, string virtualMachineScaleSetName, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + /// + /// The Get ntework interface operation retreives information about + /// the specified network interface in a virtual machine scale set. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual machine scale set. + /// + /// + /// The virtual machine index. + /// + /// + /// The name of the network interface. + /// + /// + /// expand references resources. + /// + /// + /// 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 + /// + /// + /// Thrown when a required parameter is null + /// + System.Threading.Tasks.Task> GetVirtualMachineScaleSetNetworkInterfaceWithHttpMessagesAsync(string resourceGroupName, string virtualMachineScaleSetName, string virtualmachineIndex, string networkInterfaceName, string expand = default(string), System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + /// + /// The List networkInterfaces opertion retrieves all the + /// networkInterfaces in a subscription. + /// + /// + /// 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 + /// + /// + /// Thrown when a required parameter is null + /// + System.Threading.Tasks.Task>> ListAllWithHttpMessagesAsync(System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + /// + /// The List networkInterfaces opertion retrieves all the + /// networkInterfaces in a resource group. + /// + /// + /// The name of the resource group. + /// + /// + /// 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 + /// + /// + /// Thrown when a required parameter is null + /// + System.Threading.Tasks.Task>> ListWithHttpMessagesAsync(string resourceGroupName, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + /// + /// The get effective routetable operation retrieves all the route + /// tables applied on a networkInterface. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the network interface. + /// + /// + /// 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 + /// + /// + /// Thrown when a required parameter is null + /// + System.Threading.Tasks.Task> GetEffectiveRouteTableWithHttpMessagesAsync(string resourceGroupName, string networkInterfaceName, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + /// + /// The get effective routetable operation retrieves all the route + /// tables applied on a networkInterface. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the network interface. + /// + /// + /// 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 + /// + /// + /// Thrown when a required parameter is null + /// + System.Threading.Tasks.Task> BeginGetEffectiveRouteTableWithHttpMessagesAsync(string resourceGroupName, string networkInterfaceName, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + /// + /// The list effective network security group operation retrieves all + /// the network security groups applied on a networkInterface. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the network interface. + /// + /// + /// 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 + /// + /// + /// Thrown when a required parameter is null + /// + System.Threading.Tasks.Task> ListEffectiveNetworkSecurityGroupsWithHttpMessagesAsync(string resourceGroupName, string networkInterfaceName, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + /// + /// The list effective network security group operation retrieves all + /// the network security groups applied on a networkInterface. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the network interface. + /// + /// + /// 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 + /// + /// + /// Thrown when a required parameter is null + /// + System.Threading.Tasks.Task> BeginListEffectiveNetworkSecurityGroupsWithHttpMessagesAsync(string resourceGroupName, string networkInterfaceName, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + /// + /// The list network interface operation retrieves information about + /// all network interfaces in a virtual machine from a virtual + /// machine scale set. + /// + /// + /// 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 + /// + /// + /// Thrown when a required parameter is null + /// + System.Threading.Tasks.Task>> ListVirtualMachineScaleSetVMNetworkInterfacesNextWithHttpMessagesAsync(string nextPageLink, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + /// + /// The list network interface operation retrieves information about + /// all network interfaces in a virtual machine scale set. + /// + /// + /// 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 + /// + /// + /// Thrown when a required parameter is null + /// + System.Threading.Tasks.Task>> ListVirtualMachineScaleSetNetworkInterfacesNextWithHttpMessagesAsync(string nextPageLink, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + /// + /// The List networkInterfaces opertion retrieves all the + /// networkInterfaces in a subscription. + /// + /// + /// 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 + /// + /// + /// Thrown when a required parameter is null + /// + System.Threading.Tasks.Task>> ListAllNextWithHttpMessagesAsync(string nextPageLink, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + /// + /// The List networkInterfaces opertion retrieves all the + /// networkInterfaces in a resource group. + /// + /// + /// 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 + /// + /// + /// Thrown when a required parameter is null + /// + System.Threading.Tasks.Task>> ListNextWithHttpMessagesAsync(string nextPageLink, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + } +} diff --git a/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/INetworkManagementClient.cs b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/INetworkManagementClient.cs new file mode 100644 index 000000000..4a4f6cd6f --- /dev/null +++ b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/INetworkManagementClient.cs @@ -0,0 +1,188 @@ +// 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 0.17.0.0 +// 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; + + /// + /// The Microsoft Azure Network management API provides a RESTful set of + /// web services that interact with Microsoft Azure Networks service to + /// manage your network resrources. The API has entities that capture the + /// relationship between an end user and the Microsoft Azure Networks + /// service. + /// + public partial interface INetworkManagementClient : System.IDisposable + { + /// + /// The base URI of the service. + /// + System.Uri BaseUri { get; set; } + + /// + /// Gets or sets json serialization settings. + /// + Newtonsoft.Json.JsonSerializerSettings SerializationSettings { get; } + + /// + /// Gets or sets json deserialization settings. + /// + Newtonsoft.Json.JsonSerializerSettings DeserializationSettings { get; } + + /// + /// Credentials needed for the client to connect to Azure. + /// + Microsoft.Rest.ServiceClientCredentials Credentials { get; } + + /// + /// Gets subscription credentials which uniquely identify Microsoft + /// Azure subscription. The subscription ID forms part of the URI for + /// every service call. + /// + string SubscriptionId { get; set; } + + /// + /// Client Api Version. + /// + string ApiVersion { get; } + + /// + /// Gets or sets the preferred language for the response. + /// + string AcceptLanguage { get; set; } + + /// + /// Gets or sets the retry timeout in seconds for Long Running + /// Operations. Default value is 30. + /// + int? LongRunningOperationRetryTimeout { get; set; } + + /// + /// When set to true a unique x-ms-client-request-id value is + /// generated and included in each request. Default is true. + /// + bool? GenerateClientRequestId { get; set; } + + + /// + /// Gets the IApplicationGatewaysOperations. + /// + IApplicationGatewaysOperations ApplicationGateways { get; } + + /// + /// Gets the IExpressRouteCircuitAuthorizationsOperations. + /// + IExpressRouteCircuitAuthorizationsOperations ExpressRouteCircuitAuthorizations { get; } + + /// + /// Gets the IExpressRouteCircuitPeeringsOperations. + /// + IExpressRouteCircuitPeeringsOperations ExpressRouteCircuitPeerings { get; } + + /// + /// Gets the IExpressRouteCircuitsOperations. + /// + IExpressRouteCircuitsOperations ExpressRouteCircuits { get; } + + /// + /// Gets the IExpressRouteServiceProvidersOperations. + /// + IExpressRouteServiceProvidersOperations ExpressRouteServiceProviders { get; } + + /// + /// Gets the ILoadBalancersOperations. + /// + ILoadBalancersOperations LoadBalancers { get; } + + /// + /// Gets the ILocalNetworkGatewaysOperations. + /// + ILocalNetworkGatewaysOperations LocalNetworkGateways { get; } + + /// + /// Gets the INetworkInterfacesOperations. + /// + INetworkInterfacesOperations NetworkInterfaces { get; } + + /// + /// Gets the INetworkSecurityGroupsOperations. + /// + INetworkSecurityGroupsOperations NetworkSecurityGroups { get; } + + /// + /// Gets the IPublicIPAddressesOperations. + /// + IPublicIPAddressesOperations PublicIPAddresses { get; } + + /// + /// Gets the IRouteTablesOperations. + /// + IRouteTablesOperations RouteTables { get; } + + /// + /// Gets the IRoutesOperations. + /// + IRoutesOperations Routes { get; } + + /// + /// Gets the ISecurityRulesOperations. + /// + ISecurityRulesOperations SecurityRules { get; } + + /// + /// Gets the ISubnetsOperations. + /// + ISubnetsOperations Subnets { get; } + + /// + /// Gets the IVirtualNetworkPeeringsOperations. + /// + IVirtualNetworkPeeringsOperations VirtualNetworkPeerings { get; } + + /// + /// Gets the IUsagesOperations. + /// + IUsagesOperations Usages { get; } + + /// + /// Gets the IVirtualNetworkGatewayConnectionsOperations. + /// + IVirtualNetworkGatewayConnectionsOperations VirtualNetworkGatewayConnections { get; } + + /// + /// Gets the IVirtualNetworkGatewaysOperations. + /// + IVirtualNetworkGatewaysOperations VirtualNetworkGateways { get; } + + /// + /// Gets the IVirtualNetworksOperations. + /// + IVirtualNetworksOperations VirtualNetworks { get; } + + /// + /// Checks whether a domain name in the cloudapp.net zone is available + /// for use. + /// + /// + /// The location of the domain name + /// + /// + /// The domain name to be verified. It must conform to the following + /// regular expression: ^[a-z][a-z0-9-]{1,61}[a-z0-9]$. + /// + /// + /// The headers that will be added to request. + /// + /// + /// The cancellation token. + /// + System.Threading.Tasks.Task> CheckDnsNameAvailabilityWithHttpMessagesAsync(string location, string domainNameLabel = default(string), System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + + } +} diff --git a/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/INetworkSecurityGroupsOperations.cs b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/INetworkSecurityGroupsOperations.cs new file mode 100644 index 000000000..6cec0b977 --- /dev/null +++ b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/INetworkSecurityGroupsOperations.cs @@ -0,0 +1,244 @@ +// 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 0.17.0.0 +// 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; + + /// + /// NetworkSecurityGroupsOperations operations. + /// + public partial interface INetworkSecurityGroupsOperations + { + /// + /// The Delete NetworkSecurityGroup operation deletes the specifed + /// network security group + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the network security group. + /// + /// + /// The 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 + /// + System.Threading.Tasks.Task DeleteWithHttpMessagesAsync(string resourceGroupName, string networkSecurityGroupName, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + /// + /// The Delete NetworkSecurityGroup operation deletes the specifed + /// network security group + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the network security group. + /// + /// + /// The 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 + /// + System.Threading.Tasks.Task BeginDeleteWithHttpMessagesAsync(string resourceGroupName, string networkSecurityGroupName, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + /// + /// The Get NetworkSecurityGroups operation retrieves information + /// about the specified network security group. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the network security group. + /// + /// + /// expand references resources. + /// + /// + /// 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 + /// + /// + /// Thrown when a required parameter is null + /// + System.Threading.Tasks.Task> GetWithHttpMessagesAsync(string resourceGroupName, string networkSecurityGroupName, string expand = default(string), System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + /// + /// The Put NetworkSecurityGroup operation creates/updates a network + /// security groupin the specified resource group. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the network security group. + /// + /// + /// Parameters supplied to the create/update Network Security Group + /// 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 + /// + /// + /// Thrown when a required parameter is null + /// + System.Threading.Tasks.Task> CreateOrUpdateWithHttpMessagesAsync(string resourceGroupName, string networkSecurityGroupName, NetworkSecurityGroupInner parameters, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + /// + /// The Put NetworkSecurityGroup operation creates/updates a network + /// security groupin the specified resource group. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the network security group. + /// + /// + /// Parameters supplied to the create/update Network Security Group + /// 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 + /// + /// + /// Thrown when a required parameter is null + /// + System.Threading.Tasks.Task> BeginCreateOrUpdateWithHttpMessagesAsync(string resourceGroupName, string networkSecurityGroupName, NetworkSecurityGroupInner parameters, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + /// + /// The list NetworkSecurityGroups returns all network security groups + /// in a subscription + /// + /// + /// 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 + /// + /// + /// Thrown when a required parameter is null + /// + System.Threading.Tasks.Task>> ListAllWithHttpMessagesAsync(System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + /// + /// The list NetworkSecurityGroups returns all network security groups + /// in a resource group + /// + /// + /// The name of the resource group. + /// + /// + /// 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 + /// + /// + /// Thrown when a required parameter is null + /// + System.Threading.Tasks.Task>> ListWithHttpMessagesAsync(string resourceGroupName, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + /// + /// The list NetworkSecurityGroups returns all network security groups + /// in a subscription + /// + /// + /// 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 + /// + /// + /// Thrown when a required parameter is null + /// + System.Threading.Tasks.Task>> ListAllNextWithHttpMessagesAsync(string nextPageLink, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + /// + /// The list NetworkSecurityGroups returns all network security groups + /// in a resource group + /// + /// + /// 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 + /// + /// + /// Thrown when a required parameter is null + /// + System.Threading.Tasks.Task>> ListNextWithHttpMessagesAsync(string nextPageLink, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + } +} diff --git a/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/IPublicIPAddressesOperations.cs b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/IPublicIPAddressesOperations.cs new file mode 100644 index 000000000..7d11cd058 --- /dev/null +++ b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/IPublicIPAddressesOperations.cs @@ -0,0 +1,242 @@ +// 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 0.17.0.0 +// 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; + + /// + /// PublicIPAddressesOperations operations. + /// + public partial interface IPublicIPAddressesOperations + { + /// + /// The delete publicIpAddress operation deletes the specified + /// publicIpAddress. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the subnet. + /// + /// + /// The 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 + /// + System.Threading.Tasks.Task DeleteWithHttpMessagesAsync(string resourceGroupName, string publicIpAddressName, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + /// + /// The delete publicIpAddress operation deletes the specified + /// publicIpAddress. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the subnet. + /// + /// + /// The 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 + /// + System.Threading.Tasks.Task BeginDeleteWithHttpMessagesAsync(string resourceGroupName, string publicIpAddressName, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + /// + /// The Get publicIpAddress operation retreives information about the + /// specified pubicIpAddress + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the subnet. + /// + /// + /// expand references resources. + /// + /// + /// 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 + /// + /// + /// Thrown when a required parameter is null + /// + System.Threading.Tasks.Task> GetWithHttpMessagesAsync(string resourceGroupName, string publicIpAddressName, string expand = default(string), System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + /// + /// The Put PublicIPAddress operation creates/updates a stable/dynamic + /// PublicIP address + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the publicIpAddress. + /// + /// + /// Parameters supplied to the create/update PublicIPAddress 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 + /// + /// + /// Thrown when a required parameter is null + /// + System.Threading.Tasks.Task> CreateOrUpdateWithHttpMessagesAsync(string resourceGroupName, string publicIpAddressName, PublicIPAddressInner parameters, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + /// + /// The Put PublicIPAddress operation creates/updates a stable/dynamic + /// PublicIP address + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the publicIpAddress. + /// + /// + /// Parameters supplied to the create/update PublicIPAddress 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 + /// + /// + /// Thrown when a required parameter is null + /// + System.Threading.Tasks.Task> BeginCreateOrUpdateWithHttpMessagesAsync(string resourceGroupName, string publicIpAddressName, PublicIPAddressInner parameters, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + /// + /// The List publicIpAddress opertion retrieves all the + /// publicIpAddresses in a subscription. + /// + /// + /// 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 + /// + /// + /// Thrown when a required parameter is null + /// + System.Threading.Tasks.Task>> ListAllWithHttpMessagesAsync(System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + /// + /// The List publicIpAddress opertion retrieves all the + /// publicIpAddresses in a resource group. + /// + /// + /// The name of the resource group. + /// + /// + /// 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 + /// + /// + /// Thrown when a required parameter is null + /// + System.Threading.Tasks.Task>> ListWithHttpMessagesAsync(string resourceGroupName, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + /// + /// The List publicIpAddress opertion retrieves all the + /// publicIpAddresses in a subscription. + /// + /// + /// 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 + /// + /// + /// Thrown when a required parameter is null + /// + System.Threading.Tasks.Task>> ListAllNextWithHttpMessagesAsync(string nextPageLink, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + /// + /// The List publicIpAddress opertion retrieves all the + /// publicIpAddresses in a resource group. + /// + /// + /// 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 + /// + /// + /// Thrown when a required parameter is null + /// + System.Threading.Tasks.Task>> ListNextWithHttpMessagesAsync(string nextPageLink, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + } +} diff --git a/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/IRouteTablesOperations.cs b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/IRouteTablesOperations.cs new file mode 100644 index 000000000..d070a505a --- /dev/null +++ b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/IRouteTablesOperations.cs @@ -0,0 +1,236 @@ +// 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 0.17.0.0 +// 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; + + /// + /// RouteTablesOperations operations. + /// + public partial interface IRouteTablesOperations + { + /// + /// The Delete RouteTable operation deletes the specifed Route Table + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the route table. + /// + /// + /// The 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 + /// + System.Threading.Tasks.Task DeleteWithHttpMessagesAsync(string resourceGroupName, string routeTableName, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + /// + /// The Delete RouteTable operation deletes the specifed Route Table + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the route table. + /// + /// + /// The 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 + /// + System.Threading.Tasks.Task BeginDeleteWithHttpMessagesAsync(string resourceGroupName, string routeTableName, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + /// + /// The Get RouteTables operation retrieves information about the + /// specified route table. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the route table. + /// + /// + /// expand references resources. + /// + /// + /// 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 + /// + /// + /// Thrown when a required parameter is null + /// + System.Threading.Tasks.Task> GetWithHttpMessagesAsync(string resourceGroupName, string routeTableName, string expand = default(string), System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + /// + /// The Put RouteTable operation creates/updates a route tablein the + /// specified resource group. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the route table. + /// + /// + /// Parameters supplied to the create/update Route Table 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 + /// + /// + /// Thrown when a required parameter is null + /// + System.Threading.Tasks.Task> CreateOrUpdateWithHttpMessagesAsync(string resourceGroupName, string routeTableName, RouteTableInner parameters, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + /// + /// The Put RouteTable operation creates/updates a route tablein the + /// specified resource group. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the route table. + /// + /// + /// Parameters supplied to the create/update Route Table 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 + /// + /// + /// Thrown when a required parameter is null + /// + System.Threading.Tasks.Task> BeginCreateOrUpdateWithHttpMessagesAsync(string resourceGroupName, string routeTableName, RouteTableInner parameters, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + /// + /// The list RouteTables returns all route tables in a resource group + /// + /// + /// The name of the resource group. + /// + /// + /// 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 + /// + /// + /// Thrown when a required parameter is null + /// + System.Threading.Tasks.Task>> ListWithHttpMessagesAsync(string resourceGroupName, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + /// + /// The list RouteTables returns all route tables in a subscription + /// + /// + /// 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 + /// + /// + /// Thrown when a required parameter is null + /// + System.Threading.Tasks.Task>> ListAllWithHttpMessagesAsync(System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + /// + /// The list RouteTables returns all route tables in a resource group + /// + /// + /// 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 + /// + /// + /// Thrown when a required parameter is null + /// + System.Threading.Tasks.Task>> ListNextWithHttpMessagesAsync(string nextPageLink, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + /// + /// The list RouteTables returns all route tables in a subscription + /// + /// + /// 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 + /// + /// + /// Thrown when a required parameter is null + /// + System.Threading.Tasks.Task>> ListAllNextWithHttpMessagesAsync(string nextPageLink, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + } +} diff --git a/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/IRoutesOperations.cs b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/IRoutesOperations.cs new file mode 100644 index 000000000..829179e77 --- /dev/null +++ b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/IRoutesOperations.cs @@ -0,0 +1,214 @@ +// 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 0.17.0.0 +// 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; + + /// + /// RoutesOperations operations. + /// + public partial interface IRoutesOperations + { + /// + /// The delete route operation deletes the specified route from a + /// route table. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the route table. + /// + /// + /// The name of the route. + /// + /// + /// The 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 + /// + System.Threading.Tasks.Task DeleteWithHttpMessagesAsync(string resourceGroupName, string routeTableName, string routeName, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + /// + /// The delete route operation deletes the specified route from a + /// route table. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the route table. + /// + /// + /// The name of the route. + /// + /// + /// The 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 + /// + System.Threading.Tasks.Task BeginDeleteWithHttpMessagesAsync(string resourceGroupName, string routeTableName, string routeName, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + /// + /// The Get route operation retreives information about the specified + /// route from the route table. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the route table. + /// + /// + /// The name of the route. + /// + /// + /// 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 + /// + /// + /// Thrown when a required parameter is null + /// + System.Threading.Tasks.Task> GetWithHttpMessagesAsync(string resourceGroupName, string routeTableName, string routeName, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + /// + /// The Put route operation creates/updates a route in the specified + /// route table + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the route table. + /// + /// + /// The name of the route. + /// + /// + /// Parameters supplied to the create/update routeoperation + /// + /// + /// 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 + /// + /// + /// Thrown when a required parameter is null + /// + System.Threading.Tasks.Task> CreateOrUpdateWithHttpMessagesAsync(string resourceGroupName, string routeTableName, string routeName, RouteInner routeParameters, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + /// + /// The Put route operation creates/updates a route in the specified + /// route table + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the route table. + /// + /// + /// The name of the route. + /// + /// + /// Parameters supplied to the create/update routeoperation + /// + /// + /// 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 + /// + /// + /// Thrown when a required parameter is null + /// + System.Threading.Tasks.Task> BeginCreateOrUpdateWithHttpMessagesAsync(string resourceGroupName, string routeTableName, string routeName, RouteInner routeParameters, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + /// + /// The List network security rule opertion retrieves all the routes + /// in a route table. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the route table. + /// + /// + /// 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 + /// + /// + /// Thrown when a required parameter is null + /// + System.Threading.Tasks.Task>> ListWithHttpMessagesAsync(string resourceGroupName, string routeTableName, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + /// + /// The List network security rule opertion retrieves all the routes + /// in a route table. + /// + /// + /// 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 + /// + /// + /// Thrown when a required parameter is null + /// + System.Threading.Tasks.Task>> ListNextWithHttpMessagesAsync(string nextPageLink, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + } +} diff --git a/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/ISecurityRulesOperations.cs b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/ISecurityRulesOperations.cs new file mode 100644 index 000000000..0ed115121 --- /dev/null +++ b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/ISecurityRulesOperations.cs @@ -0,0 +1,216 @@ +// 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 0.17.0.0 +// 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; + + /// + /// SecurityRulesOperations operations. + /// + public partial interface ISecurityRulesOperations + { + /// + /// The delete network security rule operation deletes the specified + /// network security rule. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the network security group. + /// + /// + /// The name of the security rule. + /// + /// + /// The 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 + /// + System.Threading.Tasks.Task DeleteWithHttpMessagesAsync(string resourceGroupName, string networkSecurityGroupName, string securityRuleName, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + /// + /// The delete network security rule operation deletes the specified + /// network security rule. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the network security group. + /// + /// + /// The name of the security rule. + /// + /// + /// The 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 + /// + System.Threading.Tasks.Task BeginDeleteWithHttpMessagesAsync(string resourceGroupName, string networkSecurityGroupName, string securityRuleName, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + /// + /// The Get NetworkSecurityRule operation retreives information about + /// the specified network security rule. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the network security group. + /// + /// + /// The name of the security rule. + /// + /// + /// 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 + /// + /// + /// Thrown when a required parameter is null + /// + System.Threading.Tasks.Task> GetWithHttpMessagesAsync(string resourceGroupName, string networkSecurityGroupName, string securityRuleName, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + /// + /// The Put network security rule operation creates/updates a security + /// rule in the specified network security group + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the network security group. + /// + /// + /// The name of the security rule. + /// + /// + /// Parameters supplied to the create/update network security rule + /// 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 + /// + /// + /// Thrown when a required parameter is null + /// + System.Threading.Tasks.Task> CreateOrUpdateWithHttpMessagesAsync(string resourceGroupName, string networkSecurityGroupName, string securityRuleName, SecurityRuleInner securityRuleParameters, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + /// + /// The Put network security rule operation creates/updates a security + /// rule in the specified network security group + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the network security group. + /// + /// + /// The name of the security rule. + /// + /// + /// Parameters supplied to the create/update network security rule + /// 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 + /// + /// + /// Thrown when a required parameter is null + /// + System.Threading.Tasks.Task> BeginCreateOrUpdateWithHttpMessagesAsync(string resourceGroupName, string networkSecurityGroupName, string securityRuleName, SecurityRuleInner securityRuleParameters, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + /// + /// The List network security rule opertion retrieves all the security + /// rules in a network security group. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the network security group. + /// + /// + /// 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 + /// + /// + /// Thrown when a required parameter is null + /// + System.Threading.Tasks.Task>> ListWithHttpMessagesAsync(string resourceGroupName, string networkSecurityGroupName, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + /// + /// The List network security rule opertion retrieves all the security + /// rules in a network security group. + /// + /// + /// 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 + /// + /// + /// Thrown when a required parameter is null + /// + System.Threading.Tasks.Task>> ListNextWithHttpMessagesAsync(string nextPageLink, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + } +} diff --git a/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/ISubnetsOperations.cs b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/ISubnetsOperations.cs new file mode 100644 index 000000000..0c1781bf3 --- /dev/null +++ b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/ISubnetsOperations.cs @@ -0,0 +1,215 @@ +// 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 0.17.0.0 +// 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; + + /// + /// SubnetsOperations operations. + /// + public partial interface ISubnetsOperations + { + /// + /// The delete subnet operation deletes the specified subnet. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual network. + /// + /// + /// The name of the subnet. + /// + /// + /// The 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 + /// + System.Threading.Tasks.Task DeleteWithHttpMessagesAsync(string resourceGroupName, string virtualNetworkName, string subnetName, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + /// + /// The delete subnet operation deletes the specified subnet. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual network. + /// + /// + /// The name of the subnet. + /// + /// + /// The 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 + /// + System.Threading.Tasks.Task BeginDeleteWithHttpMessagesAsync(string resourceGroupName, string virtualNetworkName, string subnetName, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + /// + /// The Get subnet operation retreives information about the specified + /// subnet. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual network. + /// + /// + /// The name of the subnet. + /// + /// + /// expand references resources. + /// + /// + /// 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 + /// + /// + /// Thrown when a required parameter is null + /// + System.Threading.Tasks.Task> GetWithHttpMessagesAsync(string resourceGroupName, string virtualNetworkName, string subnetName, string expand = default(string), System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + /// + /// The Put Subnet operation creates/updates a subnet in thespecified + /// virtual network + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual network. + /// + /// + /// The name of the subnet. + /// + /// + /// Parameters supplied to the create/update Subnet 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 + /// + /// + /// Thrown when a required parameter is null + /// + System.Threading.Tasks.Task> CreateOrUpdateWithHttpMessagesAsync(string resourceGroupName, string virtualNetworkName, string subnetName, SubnetInner subnetParameters, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + /// + /// The Put Subnet operation creates/updates a subnet in thespecified + /// virtual network + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual network. + /// + /// + /// The name of the subnet. + /// + /// + /// Parameters supplied to the create/update Subnet 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 + /// + /// + /// Thrown when a required parameter is null + /// + System.Threading.Tasks.Task> BeginCreateOrUpdateWithHttpMessagesAsync(string resourceGroupName, string virtualNetworkName, string subnetName, SubnetInner subnetParameters, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + /// + /// The List subnets opertion retrieves all the subnets in a virtual + /// network. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual network. + /// + /// + /// 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 + /// + /// + /// Thrown when a required parameter is null + /// + System.Threading.Tasks.Task>> ListWithHttpMessagesAsync(string resourceGroupName, string virtualNetworkName, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + /// + /// The List subnets opertion retrieves all the subnets in a virtual + /// network. + /// + /// + /// 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 + /// + /// + /// Thrown when a required parameter is null + /// + System.Threading.Tasks.Task>> ListNextWithHttpMessagesAsync(string nextPageLink, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + } +} diff --git a/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/IUsagesOperations.cs b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/IUsagesOperations.cs new file mode 100644 index 000000000..ee8e16a73 --- /dev/null +++ b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/IUsagesOperations.cs @@ -0,0 +1,64 @@ +// 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 0.17.0.0 +// 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; + + /// + /// UsagesOperations operations. + /// + public partial interface IUsagesOperations + { + /// + /// Lists compute usages for a subscription. + /// + /// + /// The location upon which resource usage is queried. + /// + /// + /// 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 + /// + /// + /// Thrown when a required parameter is null + /// + System.Threading.Tasks.Task>> ListWithHttpMessagesAsync(string location, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + /// + /// Lists compute usages for a subscription. + /// + /// + /// 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 + /// + /// + /// Thrown when a required parameter is null + /// + System.Threading.Tasks.Task>> ListNextWithHttpMessagesAsync(string nextPageLink, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + } +} diff --git a/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/IVirtualNetworkGatewayConnectionsOperations.cs b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/IVirtualNetworkGatewayConnectionsOperations.cs new file mode 100644 index 000000000..45c2f8799 --- /dev/null +++ b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/IVirtualNetworkGatewayConnectionsOperations.cs @@ -0,0 +1,354 @@ +// 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 0.17.0.0 +// 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; + + /// + /// VirtualNetworkGatewayConnectionsOperations operations. + /// + public partial interface IVirtualNetworkGatewayConnectionsOperations + { + /// + /// The Put VirtualNetworkGatewayConnection operation creates/updates + /// a virtual network gateway connection in the specified resource + /// group through Network resource provider. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual network gateway conenction. + /// + /// + /// Parameters supplied to the Begin Create or update Virtual Network + /// Gateway connection operation through Network resource provider. + /// + /// + /// 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 + /// + /// + /// Thrown when a required parameter is null + /// + System.Threading.Tasks.Task> CreateOrUpdateWithHttpMessagesAsync(string resourceGroupName, string virtualNetworkGatewayConnectionName, VirtualNetworkGatewayConnectionInner parameters, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + /// + /// The Put VirtualNetworkGatewayConnection operation creates/updates + /// a virtual network gateway connection in the specified resource + /// group through Network resource provider. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual network gateway conenction. + /// + /// + /// Parameters supplied to the Begin Create or update Virtual Network + /// Gateway connection operation through Network resource provider. + /// + /// + /// 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 + /// + /// + /// Thrown when a required parameter is null + /// + System.Threading.Tasks.Task> BeginCreateOrUpdateWithHttpMessagesAsync(string resourceGroupName, string virtualNetworkGatewayConnectionName, VirtualNetworkGatewayConnectionInner parameters, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + /// + /// The Get VirtualNetworkGatewayConnection operation retrieves + /// information about the specified virtual network gateway + /// connection through Network resource provider. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual network gateway connection. + /// + /// + /// 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 + /// + /// + /// Thrown when a required parameter is null + /// + System.Threading.Tasks.Task> GetWithHttpMessagesAsync(string resourceGroupName, string virtualNetworkGatewayConnectionName, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + /// + /// The Delete VirtualNetworkGatewayConnection operation deletes the + /// specifed virtual network Gateway connection through Network + /// resource provider. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual network gateway connection. + /// + /// + /// The 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 + /// + System.Threading.Tasks.Task DeleteWithHttpMessagesAsync(string resourceGroupName, string virtualNetworkGatewayConnectionName, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + /// + /// The Delete VirtualNetworkGatewayConnection operation deletes the + /// specifed virtual network Gateway connection through Network + /// resource provider. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual network gateway connection. + /// + /// + /// The 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 + /// + System.Threading.Tasks.Task BeginDeleteWithHttpMessagesAsync(string resourceGroupName, string virtualNetworkGatewayConnectionName, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + /// + /// The Get VirtualNetworkGatewayConnectionSharedKey operation + /// retrieves information about the specified virtual network gateway + /// connection shared key through Network resource provider. + /// + /// + /// The name of the resource group. + /// + /// + /// The virtual network gateway connection shared key name. + /// + /// + /// 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 + /// + /// + /// Thrown when a required parameter is null + /// + System.Threading.Tasks.Task> GetSharedKeyWithHttpMessagesAsync(string resourceGroupName, string connectionSharedKeyName, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + /// + /// The List VirtualNetworkGatewayConnections operation retrieves all + /// the virtual network gateways connections created. + /// + /// + /// The name of the resource group. + /// + /// + /// 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 + /// + /// + /// Thrown when a required parameter is null + /// + System.Threading.Tasks.Task>> ListWithHttpMessagesAsync(string resourceGroupName, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + /// + /// The VirtualNetworkGatewayConnectionResetSharedKey operation resets + /// the virtual network gateway connection shared key for passed + /// virtual network gateway connection in the specified resource + /// group through Network resource provider. + /// + /// + /// The name of the resource group. + /// + /// + /// The virtual network gateway connection reset shared key Name. + /// + /// + /// The virtual network connection reset shared key length + /// + /// + /// 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 + /// + /// + /// Thrown when a required parameter is null + /// + System.Threading.Tasks.Task> ResetSharedKeyWithHttpMessagesAsync(string resourceGroupName, string virtualNetworkGatewayConnectionName, long? keyLength = default(long?), System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + /// + /// The VirtualNetworkGatewayConnectionResetSharedKey operation resets + /// the virtual network gateway connection shared key for passed + /// virtual network gateway connection in the specified resource + /// group through Network resource provider. + /// + /// + /// The name of the resource group. + /// + /// + /// The virtual network gateway connection reset shared key Name. + /// + /// + /// The virtual network connection reset shared key length + /// + /// + /// 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 + /// + /// + /// Thrown when a required parameter is null + /// + System.Threading.Tasks.Task> BeginResetSharedKeyWithHttpMessagesAsync(string resourceGroupName, string virtualNetworkGatewayConnectionName, long? keyLength = default(long?), System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + /// + /// The Put VirtualNetworkGatewayConnectionSharedKey operation sets + /// the virtual network gateway connection shared key for passed + /// virtual network gateway connection in the specified resource + /// group through Network resource provider. + /// + /// + /// The name of the resource group. + /// + /// + /// The virtual network gateway connection name. + /// + /// + /// The virtual network connection shared key value + /// + /// + /// 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 + /// + /// + /// Thrown when a required parameter is null + /// + System.Threading.Tasks.Task> SetSharedKeyWithHttpMessagesAsync(string resourceGroupName, string virtualNetworkGatewayConnectionName, string value = default(string), System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + /// + /// The Put VirtualNetworkGatewayConnectionSharedKey operation sets + /// the virtual network gateway connection shared key for passed + /// virtual network gateway connection in the specified resource + /// group through Network resource provider. + /// + /// + /// The name of the resource group. + /// + /// + /// The virtual network gateway connection name. + /// + /// + /// The virtual network connection shared key value + /// + /// + /// 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 + /// + /// + /// Thrown when a required parameter is null + /// + System.Threading.Tasks.Task> BeginSetSharedKeyWithHttpMessagesAsync(string resourceGroupName, string virtualNetworkGatewayConnectionName, string value = default(string), System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + /// + /// The List VirtualNetworkGatewayConnections operation retrieves all + /// the virtual network gateways connections created. + /// + /// + /// 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 + /// + /// + /// Thrown when a required parameter is null + /// + System.Threading.Tasks.Task>> ListNextWithHttpMessagesAsync(string nextPageLink, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + } +} diff --git a/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/IVirtualNetworkGatewaysOperations.cs b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/IVirtualNetworkGatewaysOperations.cs new file mode 100644 index 000000000..9e6096c16 --- /dev/null +++ b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/IVirtualNetworkGatewaysOperations.cs @@ -0,0 +1,294 @@ +// 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 0.17.0.0 +// 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; + + /// + /// VirtualNetworkGatewaysOperations operations. + /// + public partial interface IVirtualNetworkGatewaysOperations + { + /// + /// The Put VirtualNetworkGateway operation creates/updates a virtual + /// network gateway in the specified resource group through Network + /// resource provider. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual network gateway. + /// + /// + /// Parameters supplied to the Begin Create or update Virtual Network + /// Gateway operation through Network resource provider. + /// + /// + /// 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 + /// + /// + /// Thrown when a required parameter is null + /// + System.Threading.Tasks.Task> CreateOrUpdateWithHttpMessagesAsync(string resourceGroupName, string virtualNetworkGatewayName, VirtualNetworkGatewayInner parameters, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + /// + /// The Put VirtualNetworkGateway operation creates/updates a virtual + /// network gateway in the specified resource group through Network + /// resource provider. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual network gateway. + /// + /// + /// Parameters supplied to the Begin Create or update Virtual Network + /// Gateway operation through Network resource provider. + /// + /// + /// 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 + /// + /// + /// Thrown when a required parameter is null + /// + System.Threading.Tasks.Task> BeginCreateOrUpdateWithHttpMessagesAsync(string resourceGroupName, string virtualNetworkGatewayName, VirtualNetworkGatewayInner parameters, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + /// + /// The Get VirtualNetworkGateway operation retrieves information + /// about the specified virtual network gateway through Network + /// resource provider. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual network gateway. + /// + /// + /// 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 + /// + /// + /// Thrown when a required parameter is null + /// + System.Threading.Tasks.Task> GetWithHttpMessagesAsync(string resourceGroupName, string virtualNetworkGatewayName, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + /// + /// The Delete VirtualNetworkGateway operation deletes the specifed + /// virtual network Gateway through Network resource provider. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual network gateway. + /// + /// + /// The 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 + /// + System.Threading.Tasks.Task DeleteWithHttpMessagesAsync(string resourceGroupName, string virtualNetworkGatewayName, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + /// + /// The Delete VirtualNetworkGateway operation deletes the specifed + /// virtual network Gateway through Network resource provider. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual network gateway. + /// + /// + /// The 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 + /// + System.Threading.Tasks.Task BeginDeleteWithHttpMessagesAsync(string resourceGroupName, string virtualNetworkGatewayName, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + /// + /// The List VirtualNetworkGateways opertion retrieves all the virtual + /// network gateways stored. + /// + /// + /// The name of the resource group. + /// + /// + /// 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 + /// + /// + /// Thrown when a required parameter is null + /// + System.Threading.Tasks.Task>> ListWithHttpMessagesAsync(string resourceGroupName, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + /// + /// The Reset VirtualNetworkGateway operation resets the primary of + /// the virtual network gateway in the specified resource group + /// through Network resource provider. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual network gateway. + /// + /// + /// Parameters supplied to the Begin Reset Virtual Network Gateway + /// operation through Network resource provider. + /// + /// + /// 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 + /// + /// + /// Thrown when a required parameter is null + /// + System.Threading.Tasks.Task> ResetWithHttpMessagesAsync(string resourceGroupName, string virtualNetworkGatewayName, VirtualNetworkGatewayInner parameters, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + /// + /// The Reset VirtualNetworkGateway operation resets the primary of + /// the virtual network gateway in the specified resource group + /// through Network resource provider. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual network gateway. + /// + /// + /// Parameters supplied to the Begin Reset Virtual Network Gateway + /// operation through Network resource provider. + /// + /// + /// 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 + /// + /// + /// Thrown when a required parameter is null + /// + System.Threading.Tasks.Task> BeginResetWithHttpMessagesAsync(string resourceGroupName, string virtualNetworkGatewayName, VirtualNetworkGatewayInner parameters, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + /// + /// The Generatevpnclientpackage operation generates Vpn client + /// package for P2S client of the virtual network gateway in the + /// specified resource group through Network resource provider. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual network gateway. + /// + /// + /// VPN client Processor Architecture -Amd64/X86. Possible values + /// include: 'Amd64', 'X86' + /// + /// + /// 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 + /// + /// + /// Thrown when a required parameter is null + /// + System.Threading.Tasks.Task> GeneratevpnclientpackageWithHttpMessagesAsync(string resourceGroupName, string virtualNetworkGatewayName, string processorArchitecture = default(string), System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + /// + /// The List VirtualNetworkGateways opertion retrieves all the virtual + /// network gateways stored. + /// + /// + /// 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 + /// + /// + /// Thrown when a required parameter is null + /// + System.Threading.Tasks.Task>> ListNextWithHttpMessagesAsync(string nextPageLink, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + } +} diff --git a/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/IVirtualNetworkPeeringsOperations.cs b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/IVirtualNetworkPeeringsOperations.cs new file mode 100644 index 000000000..a618e3615 --- /dev/null +++ b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/IVirtualNetworkPeeringsOperations.cs @@ -0,0 +1,216 @@ +// 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 0.17.0.0 +// 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; + + /// + /// VirtualNetworkPeeringsOperations operations. + /// + public partial interface IVirtualNetworkPeeringsOperations + { + /// + /// The delete virtual network peering operation deletes the specified + /// peering. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual network. + /// + /// + /// The name of the virtual network peering. + /// + /// + /// The 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 + /// + System.Threading.Tasks.Task DeleteWithHttpMessagesAsync(string resourceGroupName, string virtualNetworkName, string virtualNetworkPeeringName, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + /// + /// The delete virtual network peering operation deletes the specified + /// peering. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual network. + /// + /// + /// The name of the virtual network peering. + /// + /// + /// The 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 + /// + System.Threading.Tasks.Task BeginDeleteWithHttpMessagesAsync(string resourceGroupName, string virtualNetworkName, string virtualNetworkPeeringName, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + /// + /// The Get virtual network peering operation retreives information + /// about the specified virtual network peering. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual network. + /// + /// + /// The name of the virtual network peering. + /// + /// + /// 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 + /// + /// + /// Thrown when a required parameter is null + /// + System.Threading.Tasks.Task> GetWithHttpMessagesAsync(string resourceGroupName, string virtualNetworkName, string virtualNetworkPeeringName, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + /// + /// The Put virtual network peering operation creates/updates a + /// peering in the specified virtual network + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual network. + /// + /// + /// The name of the peering. + /// + /// + /// Parameters supplied to the create/update virtual network peering + /// 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 + /// + /// + /// Thrown when a required parameter is null + /// + System.Threading.Tasks.Task> CreateOrUpdateWithHttpMessagesAsync(string resourceGroupName, string virtualNetworkName, string virtualNetworkPeeringName, VirtualNetworkPeeringInner virtualNetworkPeeringParameters, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + /// + /// The Put virtual network peering operation creates/updates a + /// peering in the specified virtual network + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual network. + /// + /// + /// The name of the peering. + /// + /// + /// Parameters supplied to the create/update virtual network peering + /// 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 + /// + /// + /// Thrown when a required parameter is null + /// + System.Threading.Tasks.Task> BeginCreateOrUpdateWithHttpMessagesAsync(string resourceGroupName, string virtualNetworkName, string virtualNetworkPeeringName, VirtualNetworkPeeringInner virtualNetworkPeeringParameters, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + /// + /// The List virtual network peerings opertion retrieves all the + /// peerings in a virtual network. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual network. + /// + /// + /// 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 + /// + /// + /// Thrown when a required parameter is null + /// + System.Threading.Tasks.Task>> ListWithHttpMessagesAsync(string resourceGroupName, string virtualNetworkName, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + /// + /// The List virtual network peerings opertion retrieves all the + /// peerings in a virtual network. + /// + /// + /// 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 + /// + /// + /// Thrown when a required parameter is null + /// + System.Threading.Tasks.Task>> ListNextWithHttpMessagesAsync(string nextPageLink, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + } +} diff --git a/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/IVirtualNetworksOperations.cs b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/IVirtualNetworksOperations.cs new file mode 100644 index 000000000..9984c2d21 --- /dev/null +++ b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/IVirtualNetworksOperations.cs @@ -0,0 +1,242 @@ +// 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 0.17.0.0 +// 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; + + /// + /// VirtualNetworksOperations operations. + /// + public partial interface IVirtualNetworksOperations + { + /// + /// The Delete VirtualNetwork operation deletes the specifed virtual + /// network + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual network. + /// + /// + /// The 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 + /// + System.Threading.Tasks.Task DeleteWithHttpMessagesAsync(string resourceGroupName, string virtualNetworkName, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + /// + /// The Delete VirtualNetwork operation deletes the specifed virtual + /// network + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual network. + /// + /// + /// The 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 + /// + System.Threading.Tasks.Task BeginDeleteWithHttpMessagesAsync(string resourceGroupName, string virtualNetworkName, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + /// + /// The Get VirtualNetwork operation retrieves information about the + /// specified virtual network. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual network. + /// + /// + /// expand references resources. + /// + /// + /// 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 + /// + /// + /// Thrown when a required parameter is null + /// + System.Threading.Tasks.Task> GetWithHttpMessagesAsync(string resourceGroupName, string virtualNetworkName, string expand = default(string), System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + /// + /// The Put VirtualNetwork operation creates/updates a virtual network + /// in the specified resource group. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual network. + /// + /// + /// Parameters supplied to the create/update Virtual Network 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 + /// + /// + /// Thrown when a required parameter is null + /// + System.Threading.Tasks.Task> CreateOrUpdateWithHttpMessagesAsync(string resourceGroupName, string virtualNetworkName, VirtualNetworkInner parameters, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + /// + /// The Put VirtualNetwork operation creates/updates a virtual network + /// in the specified resource group. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual network. + /// + /// + /// Parameters supplied to the create/update Virtual Network 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 + /// + /// + /// Thrown when a required parameter is null + /// + System.Threading.Tasks.Task> BeginCreateOrUpdateWithHttpMessagesAsync(string resourceGroupName, string virtualNetworkName, VirtualNetworkInner parameters, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + /// + /// The list VirtualNetwork returns all Virtual Networks in a + /// subscription + /// + /// + /// 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 + /// + /// + /// Thrown when a required parameter is null + /// + System.Threading.Tasks.Task>> ListAllWithHttpMessagesAsync(System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + /// + /// The list VirtualNetwork returns all Virtual Networks in a resource + /// group + /// + /// + /// The name of the resource group. + /// + /// + /// 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 + /// + /// + /// Thrown when a required parameter is null + /// + System.Threading.Tasks.Task>> ListWithHttpMessagesAsync(string resourceGroupName, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + /// + /// The list VirtualNetwork returns all Virtual Networks in a + /// subscription + /// + /// + /// 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 + /// + /// + /// Thrown when a required parameter is null + /// + System.Threading.Tasks.Task>> ListAllNextWithHttpMessagesAsync(string nextPageLink, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + /// + /// The list VirtualNetwork returns all Virtual Networks in a resource + /// group + /// + /// + /// 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 + /// + /// + /// Thrown when a required parameter is null + /// + System.Threading.Tasks.Task>> ListNextWithHttpMessagesAsync(string nextPageLink, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + } +} diff --git a/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/LoadBalancersOperations.cs b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/LoadBalancersOperations.cs new file mode 100644 index 000000000..26c2f4b51 --- /dev/null +++ b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/LoadBalancersOperations.cs @@ -0,0 +1,1376 @@ +// 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 0.17.0.0 +// 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; + + /// + /// LoadBalancersOperations operations. + /// + internal partial class LoadBalancersOperations : Microsoft.Rest.IServiceOperations, ILoadBalancersOperations + { + /// + /// Initializes a new instance of the LoadBalancersOperations class. + /// + /// + /// Reference to the service client. + /// + /// + /// Thrown when a required parameter is null + /// + internal LoadBalancersOperations(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; } + + /// + /// The delete loadbalancer operation deletes the specified loadbalancer. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the loadBalancer. + /// + /// + /// The headers that will be added to request. + /// + /// + /// The cancellation token. + /// + public async System.Threading.Tasks.Task DeleteWithHttpMessagesAsync(string resourceGroupName, string loadBalancerName, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + // Send request + Microsoft.Rest.Azure.AzureOperationResponse _response = await BeginDeleteWithHttpMessagesAsync( + resourceGroupName, loadBalancerName, customHeaders, cancellationToken); + return await this.Client.GetPostOrDeleteOperationResultAsync(_response, customHeaders, cancellationToken); + } + + /// + /// The delete loadbalancer operation deletes the specified loadbalancer. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the loadBalancer. + /// + /// + /// 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 + /// + /// + /// A response object containing the response body and response headers. + /// + public async System.Threading.Tasks.Task BeginDeleteWithHttpMessagesAsync(string resourceGroupName, string loadBalancerName, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + if (resourceGroupName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "resourceGroupName"); + } + if (loadBalancerName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "loadBalancerName"); + } + if (this.Client.ApiVersion == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.ApiVersion"); + } + if (this.Client.SubscriptionId == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.SubscriptionId"); + } + // 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("loadBalancerName", loadBalancerName); + 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/loadBalancers/{loadBalancerName}").ToString(); + _url = _url.Replace("{resourceGroupName}", System.Uri.EscapeDataString(resourceGroupName)); + _url = _url.Replace("{loadBalancerName}", System.Uri.EscapeDataString(loadBalancerName)); + _url = _url.Replace("{subscriptionId}", System.Uri.EscapeDataString(this.Client.SubscriptionId)); + System.Collections.Generic.List _queryParameters = new System.Collections.Generic.List(); + if (this.Client.ApiVersion != null) + { + _queryParameters.Add(string.Format("api-version={0}", System.Uri.EscapeDataString(this.Client.ApiVersion))); + } + if (_queryParameters.Count > 0) + { + _url += "?" + string.Join("&", _queryParameters); + } + // Create HTTP transport objects + System.Net.Http.HttpRequestMessage _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 != 204 && (int)_statusCode != 202 && (int)_statusCode != 200) + { + var ex = new Microsoft.Rest.Azure.CloudException(string.Format("Operation returned an invalid status code '{0}'", _statusCode)); + if (_httpResponse.Content != null) { + _responseContent = await _httpResponse.Content.ReadAsStringAsync().ConfigureAwait(false); + } + else { + _responseContent = string.Empty; + } + ex.Request = new Microsoft.Rest.HttpRequestMessageWrapper(_httpRequest, _requestContent); + ex.Response = new Microsoft.Rest.HttpResponseMessageWrapper(_httpResponse, _responseContent); + if (_httpResponse.Headers.Contains("x-ms-request-id")) + { + ex.RequestId = _httpResponse.Headers.GetValues("x-ms-request-id").FirstOrDefault(); + } + 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(); + } + if (_shouldTrace) + { + Microsoft.Rest.ServiceClientTracing.Exit(_invocationId, _result); + } + return _result; + } + + /// + /// The Get ntework interface operation retreives information about the + /// specified network interface. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the loadBalancer. + /// + /// + /// expand references resources. + /// + /// + /// 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 + /// + /// + /// A response object containing the response body and response headers. + /// + public async System.Threading.Tasks.Task> GetWithHttpMessagesAsync(string resourceGroupName, string loadBalancerName, string expand = default(string), System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + if (resourceGroupName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "resourceGroupName"); + } + if (loadBalancerName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "loadBalancerName"); + } + if (this.Client.ApiVersion == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.ApiVersion"); + } + if (this.Client.SubscriptionId == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.SubscriptionId"); + } + // 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("loadBalancerName", loadBalancerName); + tracingParameters.Add("expand", expand); + 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/loadBalancers/{loadBalancerName}").ToString(); + _url = _url.Replace("{resourceGroupName}", System.Uri.EscapeDataString(resourceGroupName)); + _url = _url.Replace("{loadBalancerName}", System.Uri.EscapeDataString(loadBalancerName)); + _url = _url.Replace("{subscriptionId}", System.Uri.EscapeDataString(this.Client.SubscriptionId)); + System.Collections.Generic.List _queryParameters = new System.Collections.Generic.List(); + if (this.Client.ApiVersion != null) + { + _queryParameters.Add(string.Format("api-version={0}", System.Uri.EscapeDataString(this.Client.ApiVersion))); + } + if (expand != null) + { + _queryParameters.Add(string.Format("$expand={0}", System.Uri.EscapeDataString(expand))); + } + if (_queryParameters.Count > 0) + { + _url += "?" + string.Join("&", _queryParameters); + } + // Create HTTP transport objects + System.Net.Http.HttpRequestMessage _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); + CloudError _errorBody = Microsoft.Rest.Serialization.SafeJsonConvert.DeserializeObject(_responseContent, this.Client.DeserializationSettings); + if (_errorBody != null) + { + ex = new Microsoft.Rest.Azure.CloudException(_errorBody.Message); + 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 (_httpResponse.Headers.Contains("x-ms-request-id")) + { + ex.RequestId = _httpResponse.Headers.GetValues("x-ms-request-id").FirstOrDefault(); + } + 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; + } + + /// + /// The Put LoadBalancer operation creates/updates a LoadBalancer + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the loadBalancer. + /// + /// + /// Parameters supplied to the create/delete LoadBalancer operation + /// + /// + /// The headers that will be added to request. + /// + /// + /// The cancellation token. + /// + public async System.Threading.Tasks.Task> CreateOrUpdateWithHttpMessagesAsync(string resourceGroupName, string loadBalancerName, LoadBalancerInner 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, loadBalancerName, parameters, customHeaders, cancellationToken); + return await this.Client.GetPutOrPatchOperationResultAsync(_response, + customHeaders, + cancellationToken); + } + + /// + /// The Put LoadBalancer operation creates/updates a LoadBalancer + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the loadBalancer. + /// + /// + /// Parameters supplied to the create/delete LoadBalancer 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 + /// + /// + /// A response object containing the response body and response headers. + /// + public async System.Threading.Tasks.Task> BeginCreateOrUpdateWithHttpMessagesAsync(string resourceGroupName, string loadBalancerName, LoadBalancerInner parameters, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + if (resourceGroupName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "resourceGroupName"); + } + if (loadBalancerName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "loadBalancerName"); + } + if (parameters == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "parameters"); + } + if (this.Client.ApiVersion == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.ApiVersion"); + } + if (this.Client.SubscriptionId == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.SubscriptionId"); + } + // 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("loadBalancerName", loadBalancerName); + 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/loadBalancers/{loadBalancerName}").ToString(); + _url = _url.Replace("{resourceGroupName}", System.Uri.EscapeDataString(resourceGroupName)); + _url = _url.Replace("{loadBalancerName}", System.Uri.EscapeDataString(loadBalancerName)); + _url = _url.Replace("{subscriptionId}", System.Uri.EscapeDataString(this.Client.SubscriptionId)); + System.Collections.Generic.List _queryParameters = new System.Collections.Generic.List(); + if (this.Client.ApiVersion != null) + { + _queryParameters.Add(string.Format("api-version={0}", System.Uri.EscapeDataString(this.Client.ApiVersion))); + } + if (_queryParameters.Count > 0) + { + _url += "?" + string.Join("&", _queryParameters); + } + // Create HTTP transport objects + System.Net.Http.HttpRequestMessage _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 != 201 && (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); + CloudError _errorBody = Microsoft.Rest.Serialization.SafeJsonConvert.DeserializeObject(_responseContent, this.Client.DeserializationSettings); + if (_errorBody != null) + { + ex = new Microsoft.Rest.Azure.CloudException(_errorBody.Message); + 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 (_httpResponse.Headers.Contains("x-ms-request-id")) + { + ex.RequestId = _httpResponse.Headers.GetValues("x-ms-request-id").FirstOrDefault(); + } + 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 == 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); + } + } + // 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; + } + + /// + /// The List loadBalancer opertion retrieves all the loadbalancers in a + /// subscription. + /// + /// + /// 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 + /// + /// + /// A response object containing the response body and response headers. + /// + public async System.Threading.Tasks.Task>> ListAllWithHttpMessagesAsync(System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + if (this.Client.ApiVersion == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.ApiVersion"); + } + if (this.Client.SubscriptionId == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.SubscriptionId"); + } + // 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("cancellationToken", cancellationToken); + Microsoft.Rest.ServiceClientTracing.Enter(_invocationId, this, "ListAll", tracingParameters); + } + // Construct URL + var _baseUrl = this.Client.BaseUri.AbsoluteUri; + var _url = new System.Uri(new System.Uri(_baseUrl + (_baseUrl.EndsWith("/") ? "" : "/")), "subscriptions/{subscriptionId}/providers/Microsoft.Network/loadBalancers").ToString(); + _url = _url.Replace("{subscriptionId}", System.Uri.EscapeDataString(this.Client.SubscriptionId)); + System.Collections.Generic.List _queryParameters = new System.Collections.Generic.List(); + if (this.Client.ApiVersion != null) + { + _queryParameters.Add(string.Format("api-version={0}", System.Uri.EscapeDataString(this.Client.ApiVersion))); + } + if (_queryParameters.Count > 0) + { + _url += "?" + string.Join("&", _queryParameters); + } + // Create HTTP transport objects + System.Net.Http.HttpRequestMessage _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); + CloudError _errorBody = Microsoft.Rest.Serialization.SafeJsonConvert.DeserializeObject(_responseContent, this.Client.DeserializationSettings); + if (_errorBody != null) + { + ex = new Microsoft.Rest.Azure.CloudException(_errorBody.Message); + 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 (_httpResponse.Headers.Contains("x-ms-request-id")) + { + ex.RequestId = _httpResponse.Headers.GetValues("x-ms-request-id").FirstOrDefault(); + } + 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; + } + + /// + /// The List loadBalancer opertion retrieves all the loadbalancers in a + /// resource group. + /// + /// + /// The name of the resource group. + /// + /// + /// 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 + /// + /// + /// A response object containing the response body and response headers. + /// + public async System.Threading.Tasks.Task>> ListWithHttpMessagesAsync(string resourceGroupName, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + if (resourceGroupName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "resourceGroupName"); + } + if (this.Client.ApiVersion == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.ApiVersion"); + } + if (this.Client.SubscriptionId == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.SubscriptionId"); + } + // 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("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/loadBalancers").ToString(); + _url = _url.Replace("{resourceGroupName}", System.Uri.EscapeDataString(resourceGroupName)); + _url = _url.Replace("{subscriptionId}", System.Uri.EscapeDataString(this.Client.SubscriptionId)); + System.Collections.Generic.List _queryParameters = new System.Collections.Generic.List(); + if (this.Client.ApiVersion != null) + { + _queryParameters.Add(string.Format("api-version={0}", System.Uri.EscapeDataString(this.Client.ApiVersion))); + } + if (_queryParameters.Count > 0) + { + _url += "?" + string.Join("&", _queryParameters); + } + // Create HTTP transport objects + System.Net.Http.HttpRequestMessage _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); + CloudError _errorBody = Microsoft.Rest.Serialization.SafeJsonConvert.DeserializeObject(_responseContent, this.Client.DeserializationSettings); + if (_errorBody != null) + { + ex = new Microsoft.Rest.Azure.CloudException(_errorBody.Message); + 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 (_httpResponse.Headers.Contains("x-ms-request-id")) + { + ex.RequestId = _httpResponse.Headers.GetValues("x-ms-request-id").FirstOrDefault(); + } + 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; + } + + /// + /// The List loadBalancer opertion retrieves all the loadbalancers in a + /// subscription. + /// + /// + /// 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 + /// + /// + /// A response object containing the response body and response headers. + /// + public async System.Threading.Tasks.Task>> ListAllNextWithHttpMessagesAsync(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, "ListAllNext", 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 += "?" + string.Join("&", _queryParameters); + } + // Create HTTP transport objects + System.Net.Http.HttpRequestMessage _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); + CloudError _errorBody = Microsoft.Rest.Serialization.SafeJsonConvert.DeserializeObject(_responseContent, this.Client.DeserializationSettings); + if (_errorBody != null) + { + ex = new Microsoft.Rest.Azure.CloudException(_errorBody.Message); + 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 (_httpResponse.Headers.Contains("x-ms-request-id")) + { + ex.RequestId = _httpResponse.Headers.GetValues("x-ms-request-id").FirstOrDefault(); + } + 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; + } + + /// + /// The List loadBalancer opertion retrieves all the loadbalancers in a + /// resource group. + /// + /// + /// 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 + /// + /// + /// 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 += "?" + string.Join("&", _queryParameters); + } + // Create HTTP transport objects + System.Net.Http.HttpRequestMessage _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); + CloudError _errorBody = Microsoft.Rest.Serialization.SafeJsonConvert.DeserializeObject(_responseContent, this.Client.DeserializationSettings); + if (_errorBody != null) + { + ex = new Microsoft.Rest.Azure.CloudException(_errorBody.Message); + 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 (_httpResponse.Headers.Contains("x-ms-request-id")) + { + ex.RequestId = _httpResponse.Headers.GetValues("x-ms-request-id").FirstOrDefault(); + } + 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; + } + + } +} diff --git a/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/LoadBalancersOperationsExtensions.cs b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/LoadBalancersOperationsExtensions.cs new file mode 100644 index 000000000..3d8864d4d --- /dev/null +++ b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/LoadBalancersOperationsExtensions.cs @@ -0,0 +1,373 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.Network +{ + using System.Threading.Tasks; + using Microsoft.Rest.Azure; + using Models; + + /// + /// Extension methods for LoadBalancersOperations. + /// + public static partial class LoadBalancersOperationsExtensions + { + /// + /// The delete loadbalancer operation deletes the specified loadbalancer. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the loadBalancer. + /// + public static void Delete(this ILoadBalancersOperations operations, string resourceGroupName, string loadBalancerName) + { + System.Threading.Tasks.Task.Factory.StartNew(s => ((ILoadBalancersOperations)s).DeleteAsync(resourceGroupName, loadBalancerName), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// The delete loadbalancer operation deletes the specified loadbalancer. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the loadBalancer. + /// + /// + /// The cancellation token. + /// + public static async System.Threading.Tasks.Task DeleteAsync(this ILoadBalancersOperations operations, string resourceGroupName, string loadBalancerName, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + await operations.DeleteWithHttpMessagesAsync(resourceGroupName, loadBalancerName, null, cancellationToken).ConfigureAwait(false); + } + + /// + /// The delete loadbalancer operation deletes the specified loadbalancer. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the loadBalancer. + /// + public static void BeginDelete(this ILoadBalancersOperations operations, string resourceGroupName, string loadBalancerName) + { + System.Threading.Tasks.Task.Factory.StartNew(s => ((ILoadBalancersOperations)s).BeginDeleteAsync(resourceGroupName, loadBalancerName), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// The delete loadbalancer operation deletes the specified loadbalancer. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the loadBalancer. + /// + /// + /// The cancellation token. + /// + public static async System.Threading.Tasks.Task BeginDeleteAsync(this ILoadBalancersOperations operations, string resourceGroupName, string loadBalancerName, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + await operations.BeginDeleteWithHttpMessagesAsync(resourceGroupName, loadBalancerName, null, cancellationToken).ConfigureAwait(false); + } + + /// + /// The Get ntework interface operation retreives information about the + /// specified network interface. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the loadBalancer. + /// + /// + /// expand references resources. + /// + public static LoadBalancerInner Get(this ILoadBalancersOperations operations, string resourceGroupName, string loadBalancerName, string expand = default(string)) + { + return System.Threading.Tasks.Task.Factory.StartNew(s => ((ILoadBalancersOperations)s).GetAsync(resourceGroupName, loadBalancerName, expand), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// The Get ntework interface operation retreives information about the + /// specified network interface. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the loadBalancer. + /// + /// + /// expand references resources. + /// + /// + /// The cancellation token. + /// + public static async System.Threading.Tasks.Task GetAsync(this ILoadBalancersOperations operations, string resourceGroupName, string loadBalancerName, string expand = default(string), System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + using (var _result = await operations.GetWithHttpMessagesAsync(resourceGroupName, loadBalancerName, expand, null, cancellationToken).ConfigureAwait(false)) + { + return _result.Body; + } + } + + /// + /// The Put LoadBalancer operation creates/updates a LoadBalancer + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the loadBalancer. + /// + /// + /// Parameters supplied to the create/delete LoadBalancer operation + /// + public static LoadBalancerInner CreateOrUpdate(this ILoadBalancersOperations operations, string resourceGroupName, string loadBalancerName, LoadBalancerInner parameters) + { + return System.Threading.Tasks.Task.Factory.StartNew(s => ((ILoadBalancersOperations)s).CreateOrUpdateAsync(resourceGroupName, loadBalancerName, parameters), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// The Put LoadBalancer operation creates/updates a LoadBalancer + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the loadBalancer. + /// + /// + /// Parameters supplied to the create/delete LoadBalancer operation + /// + /// + /// The cancellation token. + /// + public static async System.Threading.Tasks.Task CreateOrUpdateAsync(this ILoadBalancersOperations operations, string resourceGroupName, string loadBalancerName, LoadBalancerInner parameters, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + using (var _result = await operations.CreateOrUpdateWithHttpMessagesAsync(resourceGroupName, loadBalancerName, parameters, null, cancellationToken).ConfigureAwait(false)) + { + return _result.Body; + } + } + + /// + /// The Put LoadBalancer operation creates/updates a LoadBalancer + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the loadBalancer. + /// + /// + /// Parameters supplied to the create/delete LoadBalancer operation + /// + public static LoadBalancerInner BeginCreateOrUpdate(this ILoadBalancersOperations operations, string resourceGroupName, string loadBalancerName, LoadBalancerInner parameters) + { + return System.Threading.Tasks.Task.Factory.StartNew(s => ((ILoadBalancersOperations)s).BeginCreateOrUpdateAsync(resourceGroupName, loadBalancerName, parameters), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// The Put LoadBalancer operation creates/updates a LoadBalancer + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the loadBalancer. + /// + /// + /// Parameters supplied to the create/delete LoadBalancer operation + /// + /// + /// The cancellation token. + /// + public static async System.Threading.Tasks.Task BeginCreateOrUpdateAsync(this ILoadBalancersOperations operations, string resourceGroupName, string loadBalancerName, LoadBalancerInner parameters, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + using (var _result = await operations.BeginCreateOrUpdateWithHttpMessagesAsync(resourceGroupName, loadBalancerName, parameters, null, cancellationToken).ConfigureAwait(false)) + { + return _result.Body; + } + } + + /// + /// The List loadBalancer opertion retrieves all the loadbalancers in a + /// subscription. + /// + /// + /// The operations group for this extension method. + /// + public static Microsoft.Rest.Azure.IPage ListAll(this ILoadBalancersOperations operations) + { + return System.Threading.Tasks.Task.Factory.StartNew(s => ((ILoadBalancersOperations)s).ListAllAsync(), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// The List loadBalancer opertion retrieves all the loadbalancers in a + /// subscription. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The cancellation token. + /// + public static async Task> ListAllAsync(this ILoadBalancersOperations operations, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + using (var _result = await operations.ListAllWithHttpMessagesAsync(null, cancellationToken).ConfigureAwait(false)) + { + return _result.Body; + } + } + + /// + /// The List loadBalancer opertion retrieves all the loadbalancers in a + /// resource group. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + public static Microsoft.Rest.Azure.IPage List(this ILoadBalancersOperations operations, string resourceGroupName) + { + return System.Threading.Tasks.Task.Factory.StartNew(s => ((ILoadBalancersOperations)s).ListAsync(resourceGroupName), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// The List loadBalancer opertion retrieves all the loadbalancers in a + /// resource group. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The cancellation token. + /// + public static async Task> ListAsync(this ILoadBalancersOperations operations, string resourceGroupName, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + using (var _result = await operations.ListWithHttpMessagesAsync(resourceGroupName, null, cancellationToken).ConfigureAwait(false)) + { + return _result.Body; + } + } + + /// + /// The List loadBalancer opertion retrieves all the loadbalancers in a + /// subscription. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The NextLink from the previous successful call to List operation. + /// + public static Microsoft.Rest.Azure.IPage ListAllNext(this ILoadBalancersOperations operations, string nextPageLink) + { + return System.Threading.Tasks.Task.Factory.StartNew(s => ((ILoadBalancersOperations)s).ListAllNextAsync(nextPageLink), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// The List loadBalancer opertion retrieves all the loadbalancers in a + /// subscription. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The NextLink from the previous successful call to List operation. + /// + /// + /// The cancellation token. + /// + public static async Task> ListAllNextAsync(this ILoadBalancersOperations operations, string nextPageLink, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + using (var _result = await operations.ListAllNextWithHttpMessagesAsync(nextPageLink, null, cancellationToken).ConfigureAwait(false)) + { + return _result.Body; + } + } + + /// + /// The List loadBalancer opertion retrieves all the loadbalancers in a + /// resource group. + /// + /// + /// 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 ILoadBalancersOperations operations, string nextPageLink) + { + return System.Threading.Tasks.Task.Factory.StartNew(s => ((ILoadBalancersOperations)s).ListNextAsync(nextPageLink), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// The List loadBalancer opertion retrieves all the loadbalancers in a + /// resource group. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The NextLink from the previous successful call to List operation. + /// + /// + /// The cancellation token. + /// + public static async Task> ListNextAsync(this ILoadBalancersOperations 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/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/LocalNetworkGatewaysOperations.cs b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/LocalNetworkGatewaysOperations.cs new file mode 100644 index 000000000..5e6e44a7d --- /dev/null +++ b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/LocalNetworkGatewaysOperations.cs @@ -0,0 +1,1031 @@ +// 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 0.17.0.0 +// 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; + + /// + /// LocalNetworkGatewaysOperations operations. + /// + internal partial class LocalNetworkGatewaysOperations : Microsoft.Rest.IServiceOperations, ILocalNetworkGatewaysOperations + { + /// + /// Initializes a new instance of the LocalNetworkGatewaysOperations class. + /// + /// + /// Reference to the service client. + /// + /// + /// Thrown when a required parameter is null + /// + internal LocalNetworkGatewaysOperations(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; } + + /// + /// The Put LocalNetworkGateway operation creates/updates a local network + /// gateway in the specified resource group through Network resource provider. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the local network gateway. + /// + /// + /// Parameters supplied to the Begin Create or update Local Network Gateway + /// operation through Network resource provider. + /// + /// + /// The headers that will be added to request. + /// + /// + /// The cancellation token. + /// + public async System.Threading.Tasks.Task> CreateOrUpdateWithHttpMessagesAsync(string resourceGroupName, string localNetworkGatewayName, LocalNetworkGatewayInner 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, localNetworkGatewayName, parameters, customHeaders, cancellationToken); + return await this.Client.GetPutOrPatchOperationResultAsync(_response, + customHeaders, + cancellationToken); + } + + /// + /// The Put LocalNetworkGateway operation creates/updates a local network + /// gateway in the specified resource group through Network resource provider. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the local network gateway. + /// + /// + /// Parameters supplied to the Begin Create or update Local Network Gateway + /// operation through Network resource provider. + /// + /// + /// 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 + /// + /// + /// A response object containing the response body and response headers. + /// + public async System.Threading.Tasks.Task> BeginCreateOrUpdateWithHttpMessagesAsync(string resourceGroupName, string localNetworkGatewayName, LocalNetworkGatewayInner parameters, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + if (resourceGroupName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "resourceGroupName"); + } + if (localNetworkGatewayName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "localNetworkGatewayName"); + } + if (parameters == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "parameters"); + } + if (this.Client.ApiVersion == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.ApiVersion"); + } + if (this.Client.SubscriptionId == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.SubscriptionId"); + } + // 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("localNetworkGatewayName", localNetworkGatewayName); + 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/localNetworkGateways/{localNetworkGatewayName}").ToString(); + _url = _url.Replace("{resourceGroupName}", System.Uri.EscapeDataString(resourceGroupName)); + _url = _url.Replace("{localNetworkGatewayName}", System.Uri.EscapeDataString(localNetworkGatewayName)); + _url = _url.Replace("{subscriptionId}", System.Uri.EscapeDataString(this.Client.SubscriptionId)); + System.Collections.Generic.List _queryParameters = new System.Collections.Generic.List(); + if (this.Client.ApiVersion != null) + { + _queryParameters.Add(string.Format("api-version={0}", System.Uri.EscapeDataString(this.Client.ApiVersion))); + } + if (_queryParameters.Count > 0) + { + _url += "?" + string.Join("&", _queryParameters); + } + // Create HTTP transport objects + System.Net.Http.HttpRequestMessage _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 != 201 && (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); + CloudError _errorBody = Microsoft.Rest.Serialization.SafeJsonConvert.DeserializeObject(_responseContent, this.Client.DeserializationSettings); + if (_errorBody != null) + { + ex = new Microsoft.Rest.Azure.CloudException(_errorBody.Message); + 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 (_httpResponse.Headers.Contains("x-ms-request-id")) + { + ex.RequestId = _httpResponse.Headers.GetValues("x-ms-request-id").FirstOrDefault(); + } + 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 == 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); + } + } + // 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; + } + + /// + /// The Get LocalNetworkGateway operation retrieves information about the + /// specified local network gateway through Network resource provider. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the local network gateway. + /// + /// + /// 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 + /// + /// + /// A response object containing the response body and response headers. + /// + public async System.Threading.Tasks.Task> GetWithHttpMessagesAsync(string resourceGroupName, string localNetworkGatewayName, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + if (resourceGroupName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "resourceGroupName"); + } + if (localNetworkGatewayName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "localNetworkGatewayName"); + } + if (this.Client.ApiVersion == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.ApiVersion"); + } + if (this.Client.SubscriptionId == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.SubscriptionId"); + } + // 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("localNetworkGatewayName", localNetworkGatewayName); + 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/localNetworkGateways/{localNetworkGatewayName}").ToString(); + _url = _url.Replace("{resourceGroupName}", System.Uri.EscapeDataString(resourceGroupName)); + _url = _url.Replace("{localNetworkGatewayName}", System.Uri.EscapeDataString(localNetworkGatewayName)); + _url = _url.Replace("{subscriptionId}", System.Uri.EscapeDataString(this.Client.SubscriptionId)); + System.Collections.Generic.List _queryParameters = new System.Collections.Generic.List(); + if (this.Client.ApiVersion != null) + { + _queryParameters.Add(string.Format("api-version={0}", System.Uri.EscapeDataString(this.Client.ApiVersion))); + } + if (_queryParameters.Count > 0) + { + _url += "?" + string.Join("&", _queryParameters); + } + // Create HTTP transport objects + System.Net.Http.HttpRequestMessage _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); + CloudError _errorBody = Microsoft.Rest.Serialization.SafeJsonConvert.DeserializeObject(_responseContent, this.Client.DeserializationSettings); + if (_errorBody != null) + { + ex = new Microsoft.Rest.Azure.CloudException(_errorBody.Message); + 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 (_httpResponse.Headers.Contains("x-ms-request-id")) + { + ex.RequestId = _httpResponse.Headers.GetValues("x-ms-request-id").FirstOrDefault(); + } + 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; + } + + /// + /// The Delete LocalNetworkGateway operation deletes the specifed local + /// network Gateway through Network resource provider. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the local network gateway. + /// + /// + /// The headers that will be added to request. + /// + /// + /// The cancellation token. + /// + public async System.Threading.Tasks.Task DeleteWithHttpMessagesAsync(string resourceGroupName, string localNetworkGatewayName, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + // Send request + Microsoft.Rest.Azure.AzureOperationResponse _response = await BeginDeleteWithHttpMessagesAsync( + resourceGroupName, localNetworkGatewayName, customHeaders, cancellationToken); + return await this.Client.GetPostOrDeleteOperationResultAsync(_response, customHeaders, cancellationToken); + } + + /// + /// The Delete LocalNetworkGateway operation deletes the specifed local + /// network Gateway through Network resource provider. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the local network gateway. + /// + /// + /// 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 + /// + /// + /// A response object containing the response body and response headers. + /// + public async System.Threading.Tasks.Task BeginDeleteWithHttpMessagesAsync(string resourceGroupName, string localNetworkGatewayName, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + if (resourceGroupName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "resourceGroupName"); + } + if (localNetworkGatewayName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "localNetworkGatewayName"); + } + if (this.Client.ApiVersion == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.ApiVersion"); + } + if (this.Client.SubscriptionId == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.SubscriptionId"); + } + // 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("localNetworkGatewayName", localNetworkGatewayName); + 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/localNetworkGateways/{localNetworkGatewayName}").ToString(); + _url = _url.Replace("{resourceGroupName}", System.Uri.EscapeDataString(resourceGroupName)); + _url = _url.Replace("{localNetworkGatewayName}", System.Uri.EscapeDataString(localNetworkGatewayName)); + _url = _url.Replace("{subscriptionId}", System.Uri.EscapeDataString(this.Client.SubscriptionId)); + System.Collections.Generic.List _queryParameters = new System.Collections.Generic.List(); + if (this.Client.ApiVersion != null) + { + _queryParameters.Add(string.Format("api-version={0}", System.Uri.EscapeDataString(this.Client.ApiVersion))); + } + if (_queryParameters.Count > 0) + { + _url += "?" + string.Join("&", _queryParameters); + } + // Create HTTP transport objects + System.Net.Http.HttpRequestMessage _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 != 204 && (int)_statusCode != 200 && (int)_statusCode != 202) + { + var ex = new Microsoft.Rest.Azure.CloudException(string.Format("Operation returned an invalid status code '{0}'", _statusCode)); + if (_httpResponse.Content != null) { + _responseContent = await _httpResponse.Content.ReadAsStringAsync().ConfigureAwait(false); + } + else { + _responseContent = string.Empty; + } + ex.Request = new Microsoft.Rest.HttpRequestMessageWrapper(_httpRequest, _requestContent); + ex.Response = new Microsoft.Rest.HttpResponseMessageWrapper(_httpResponse, _responseContent); + if (_httpResponse.Headers.Contains("x-ms-request-id")) + { + ex.RequestId = _httpResponse.Headers.GetValues("x-ms-request-id").FirstOrDefault(); + } + 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(); + } + if (_shouldTrace) + { + Microsoft.Rest.ServiceClientTracing.Exit(_invocationId, _result); + } + return _result; + } + + /// + /// The List LocalNetworkGateways opertion retrieves all the local network + /// gateways stored. + /// + /// + /// The name of the resource group. + /// + /// + /// 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 + /// + /// + /// A response object containing the response body and response headers. + /// + public async System.Threading.Tasks.Task>> ListWithHttpMessagesAsync(string resourceGroupName, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + if (resourceGroupName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "resourceGroupName"); + } + if (this.Client.ApiVersion == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.ApiVersion"); + } + if (this.Client.SubscriptionId == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.SubscriptionId"); + } + // 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("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/localNetworkGateways").ToString(); + _url = _url.Replace("{resourceGroupName}", System.Uri.EscapeDataString(resourceGroupName)); + _url = _url.Replace("{subscriptionId}", System.Uri.EscapeDataString(this.Client.SubscriptionId)); + System.Collections.Generic.List _queryParameters = new System.Collections.Generic.List(); + if (this.Client.ApiVersion != null) + { + _queryParameters.Add(string.Format("api-version={0}", System.Uri.EscapeDataString(this.Client.ApiVersion))); + } + if (_queryParameters.Count > 0) + { + _url += "?" + string.Join("&", _queryParameters); + } + // Create HTTP transport objects + System.Net.Http.HttpRequestMessage _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); + CloudError _errorBody = Microsoft.Rest.Serialization.SafeJsonConvert.DeserializeObject(_responseContent, this.Client.DeserializationSettings); + if (_errorBody != null) + { + ex = new Microsoft.Rest.Azure.CloudException(_errorBody.Message); + 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 (_httpResponse.Headers.Contains("x-ms-request-id")) + { + ex.RequestId = _httpResponse.Headers.GetValues("x-ms-request-id").FirstOrDefault(); + } + 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; + } + + /// + /// The List LocalNetworkGateways opertion retrieves all the local network + /// gateways stored. + /// + /// + /// 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 + /// + /// + /// 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 += "?" + string.Join("&", _queryParameters); + } + // Create HTTP transport objects + System.Net.Http.HttpRequestMessage _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); + CloudError _errorBody = Microsoft.Rest.Serialization.SafeJsonConvert.DeserializeObject(_responseContent, this.Client.DeserializationSettings); + if (_errorBody != null) + { + ex = new Microsoft.Rest.Azure.CloudException(_errorBody.Message); + 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 (_httpResponse.Headers.Contains("x-ms-request-id")) + { + ex.RequestId = _httpResponse.Headers.GetValues("x-ms-request-id").FirstOrDefault(); + } + 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; + } + + } +} diff --git a/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/LocalNetworkGatewaysOperationsExtensions.cs b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/LocalNetworkGatewaysOperationsExtensions.cs new file mode 100644 index 000000000..bf2e0f955 --- /dev/null +++ b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/LocalNetworkGatewaysOperationsExtensions.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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.Network +{ + using System.Threading.Tasks; + using Microsoft.Rest.Azure; + using Models; + + /// + /// Extension methods for LocalNetworkGatewaysOperations. + /// + public static partial class LocalNetworkGatewaysOperationsExtensions + { + /// + /// The Put LocalNetworkGateway operation creates/updates a local network + /// gateway in the specified resource group through Network resource provider. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the local network gateway. + /// + /// + /// Parameters supplied to the Begin Create or update Local Network Gateway + /// operation through Network resource provider. + /// + public static LocalNetworkGatewayInner CreateOrUpdate(this ILocalNetworkGatewaysOperations operations, string resourceGroupName, string localNetworkGatewayName, LocalNetworkGatewayInner parameters) + { + return System.Threading.Tasks.Task.Factory.StartNew(s => ((ILocalNetworkGatewaysOperations)s).CreateOrUpdateAsync(resourceGroupName, localNetworkGatewayName, parameters), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// The Put LocalNetworkGateway operation creates/updates a local network + /// gateway in the specified resource group through Network resource provider. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the local network gateway. + /// + /// + /// Parameters supplied to the Begin Create or update Local Network Gateway + /// operation through Network resource provider. + /// + /// + /// The cancellation token. + /// + public static async System.Threading.Tasks.Task CreateOrUpdateAsync(this ILocalNetworkGatewaysOperations operations, string resourceGroupName, string localNetworkGatewayName, LocalNetworkGatewayInner parameters, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + using (var _result = await operations.CreateOrUpdateWithHttpMessagesAsync(resourceGroupName, localNetworkGatewayName, parameters, null, cancellationToken).ConfigureAwait(false)) + { + return _result.Body; + } + } + + /// + /// The Put LocalNetworkGateway operation creates/updates a local network + /// gateway in the specified resource group through Network resource provider. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the local network gateway. + /// + /// + /// Parameters supplied to the Begin Create or update Local Network Gateway + /// operation through Network resource provider. + /// + public static LocalNetworkGatewayInner BeginCreateOrUpdate(this ILocalNetworkGatewaysOperations operations, string resourceGroupName, string localNetworkGatewayName, LocalNetworkGatewayInner parameters) + { + return System.Threading.Tasks.Task.Factory.StartNew(s => ((ILocalNetworkGatewaysOperations)s).BeginCreateOrUpdateAsync(resourceGroupName, localNetworkGatewayName, parameters), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// The Put LocalNetworkGateway operation creates/updates a local network + /// gateway in the specified resource group through Network resource provider. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the local network gateway. + /// + /// + /// Parameters supplied to the Begin Create or update Local Network Gateway + /// operation through Network resource provider. + /// + /// + /// The cancellation token. + /// + public static async System.Threading.Tasks.Task BeginCreateOrUpdateAsync(this ILocalNetworkGatewaysOperations operations, string resourceGroupName, string localNetworkGatewayName, LocalNetworkGatewayInner parameters, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + using (var _result = await operations.BeginCreateOrUpdateWithHttpMessagesAsync(resourceGroupName, localNetworkGatewayName, parameters, null, cancellationToken).ConfigureAwait(false)) + { + return _result.Body; + } + } + + /// + /// The Get LocalNetworkGateway operation retrieves information about the + /// specified local network gateway through Network resource provider. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the local network gateway. + /// + public static LocalNetworkGatewayInner Get(this ILocalNetworkGatewaysOperations operations, string resourceGroupName, string localNetworkGatewayName) + { + return System.Threading.Tasks.Task.Factory.StartNew(s => ((ILocalNetworkGatewaysOperations)s).GetAsync(resourceGroupName, localNetworkGatewayName), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// The Get LocalNetworkGateway operation retrieves information about the + /// specified local network gateway through Network resource provider. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the local network gateway. + /// + /// + /// The cancellation token. + /// + public static async System.Threading.Tasks.Task GetAsync(this ILocalNetworkGatewaysOperations operations, string resourceGroupName, string localNetworkGatewayName, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + using (var _result = await operations.GetWithHttpMessagesAsync(resourceGroupName, localNetworkGatewayName, null, cancellationToken).ConfigureAwait(false)) + { + return _result.Body; + } + } + + /// + /// The Delete LocalNetworkGateway operation deletes the specifed local + /// network Gateway through Network resource provider. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the local network gateway. + /// + public static void Delete(this ILocalNetworkGatewaysOperations operations, string resourceGroupName, string localNetworkGatewayName) + { + System.Threading.Tasks.Task.Factory.StartNew(s => ((ILocalNetworkGatewaysOperations)s).DeleteAsync(resourceGroupName, localNetworkGatewayName), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// The Delete LocalNetworkGateway operation deletes the specifed local + /// network Gateway through Network resource provider. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the local network gateway. + /// + /// + /// The cancellation token. + /// + public static async System.Threading.Tasks.Task DeleteAsync(this ILocalNetworkGatewaysOperations operations, string resourceGroupName, string localNetworkGatewayName, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + await operations.DeleteWithHttpMessagesAsync(resourceGroupName, localNetworkGatewayName, null, cancellationToken).ConfigureAwait(false); + } + + /// + /// The Delete LocalNetworkGateway operation deletes the specifed local + /// network Gateway through Network resource provider. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the local network gateway. + /// + public static void BeginDelete(this ILocalNetworkGatewaysOperations operations, string resourceGroupName, string localNetworkGatewayName) + { + System.Threading.Tasks.Task.Factory.StartNew(s => ((ILocalNetworkGatewaysOperations)s).BeginDeleteAsync(resourceGroupName, localNetworkGatewayName), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// The Delete LocalNetworkGateway operation deletes the specifed local + /// network Gateway through Network resource provider. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the local network gateway. + /// + /// + /// The cancellation token. + /// + public static async System.Threading.Tasks.Task BeginDeleteAsync(this ILocalNetworkGatewaysOperations operations, string resourceGroupName, string localNetworkGatewayName, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + await operations.BeginDeleteWithHttpMessagesAsync(resourceGroupName, localNetworkGatewayName, null, cancellationToken).ConfigureAwait(false); + } + + /// + /// The List LocalNetworkGateways opertion retrieves all the local network + /// gateways stored. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + public static Microsoft.Rest.Azure.IPage List(this ILocalNetworkGatewaysOperations operations, string resourceGroupName) + { + return System.Threading.Tasks.Task.Factory.StartNew(s => ((ILocalNetworkGatewaysOperations)s).ListAsync(resourceGroupName), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// The List LocalNetworkGateways opertion retrieves all the local network + /// gateways stored. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The cancellation token. + /// + public static async Task> ListAsync(this ILocalNetworkGatewaysOperations operations, string resourceGroupName, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + using (var _result = await operations.ListWithHttpMessagesAsync(resourceGroupName, null, cancellationToken).ConfigureAwait(false)) + { + return _result.Body; + } + } + + /// + /// The List LocalNetworkGateways opertion retrieves all the local network + /// gateways stored. + /// + /// + /// 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 ILocalNetworkGatewaysOperations operations, string nextPageLink) + { + return System.Threading.Tasks.Task.Factory.StartNew(s => ((ILocalNetworkGatewaysOperations)s).ListNextAsync(nextPageLink), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// The List LocalNetworkGateways opertion retrieves all the local network + /// gateways stored. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The NextLink from the previous successful call to List operation. + /// + /// + /// The cancellation token. + /// + public static async Task> ListNextAsync(this ILocalNetworkGatewaysOperations 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/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/AddressSpace.cs b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/AddressSpace.cs new file mode 100644 index 000000000..bf6d73a7a --- /dev/null +++ b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/AddressSpace.cs @@ -0,0 +1,42 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.Network.Models +{ + using System.Linq; + + /// + /// AddressSpace contains an array of IP address ranges that can be used + /// by subnets + /// + public partial class AddressSpace + { + /// + /// Initializes a new instance of the AddressSpace class. + /// + public AddressSpace() { } + + /// + /// Initializes a new instance of the AddressSpace class. + /// + /// Gets or sets list of address blocks + /// reserved for this virtual network in CIDR notation + public AddressSpace(System.Collections.Generic.IList addressPrefixes = default(System.Collections.Generic.IList)) + { + AddressPrefixes = addressPrefixes; + } + + /// + /// Gets or sets list of address blocks reserved for this virtual + /// network in CIDR notation + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "addressPrefixes")] + public System.Collections.Generic.IList AddressPrefixes { get; set; } + + } +} diff --git a/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/ApplicationGatewayAuthenticationCertificateInner.cs b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/ApplicationGatewayAuthenticationCertificateInner.cs new file mode 100644 index 000000000..c3100d001 --- /dev/null +++ b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/ApplicationGatewayAuthenticationCertificateInner.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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.Network.Models +{ + using System.Linq; + + /// + /// Authentication certificates of application gateway + /// + [Microsoft.Rest.Serialization.JsonTransformation] + public partial class ApplicationGatewayAuthenticationCertificateInner : Microsoft.Rest.Azure.SubResource + { + /// + /// Initializes a new instance of the + /// ApplicationGatewayAuthenticationCertificateInner class. + /// + public ApplicationGatewayAuthenticationCertificateInner() { } + + /// + /// Initializes a new instance of the + /// ApplicationGatewayAuthenticationCertificateInner class. + /// + /// Certificate public data + /// Provisioning state of the + /// authentication certificate resource + /// Updating/Deleting/Failed + /// Name of the resource that is unique within a + /// resource group. This name can be used to access the + /// resource + /// A unique read-only string that changes whenever + /// the resource is updated + public ApplicationGatewayAuthenticationCertificateInner(string id = default(string), string data = default(string), string provisioningState = default(string), string name = default(string), string etag = default(string)) + : base(id) + { + Data = data; + ProvisioningState = provisioningState; + Name = name; + Etag = etag; + } + + /// + /// Gets or sets certificate public data + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.data")] + public string Data { get; set; } + + /// + /// Gets or sets provisioning state of the authentication certificate + /// resource Updating/Deleting/Failed + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.provisioningState")] + public string ProvisioningState { get; set; } + + /// + /// Gets or sets name of the resource that is unique within a resource + /// group. This name can be used to access the resource + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "name")] + public string Name { get; set; } + + /// + /// Gets or sets a unique read-only string that changes whenever the + /// resource is updated + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "etag")] + public string Etag { get; set; } + + } +} diff --git a/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/ApplicationGatewayBackendAddress.cs b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/ApplicationGatewayBackendAddress.cs new file mode 100644 index 000000000..605a64975 --- /dev/null +++ b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/ApplicationGatewayBackendAddress.cs @@ -0,0 +1,49 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.Network.Models +{ + using System.Linq; + + /// + /// Backend Address of application gateway + /// + public partial class ApplicationGatewayBackendAddress + { + /// + /// Initializes a new instance of the ApplicationGatewayBackendAddress + /// class. + /// + public ApplicationGatewayBackendAddress() { } + + /// + /// Initializes a new instance of the ApplicationGatewayBackendAddress + /// class. + /// + /// Dns name + /// Ip address + public ApplicationGatewayBackendAddress(string fqdn = default(string), string ipAddress = default(string)) + { + Fqdn = fqdn; + IpAddress = ipAddress; + } + + /// + /// Gets or sets dns name + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "fqdn")] + public string Fqdn { get; set; } + + /// + /// Gets or sets ip address + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "ipAddress")] + public string IpAddress { get; set; } + + } +} diff --git a/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/ApplicationGatewayBackendAddressPoolInner.cs b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/ApplicationGatewayBackendAddressPoolInner.cs new file mode 100644 index 000000000..36a05c114 --- /dev/null +++ b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/ApplicationGatewayBackendAddressPoolInner.cs @@ -0,0 +1,82 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.Network.Models +{ + using System.Linq; + + /// + /// Backend Address Pool of application gateway + /// + [Microsoft.Rest.Serialization.JsonTransformation] + public partial class ApplicationGatewayBackendAddressPoolInner : Microsoft.Rest.Azure.SubResource + { + /// + /// Initializes a new instance of the + /// ApplicationGatewayBackendAddressPoolInner class. + /// + public ApplicationGatewayBackendAddressPoolInner() { } + + /// + /// Initializes a new instance of the + /// ApplicationGatewayBackendAddressPoolInner class. + /// + /// Collection of references to + /// IPs defined in NICs + /// Backend addresses + /// Provisioning state of the backend + /// address pool resource Updating/Deleting/Failed + /// Resource that is unique within a resource + /// group. This name can be used to access the resource + /// A unique read-only string that changes whenever + /// the resource is updated + public ApplicationGatewayBackendAddressPoolInner(string id = default(string), System.Collections.Generic.IList backendIPConfigurations = default(System.Collections.Generic.IList), System.Collections.Generic.IList backendAddresses = default(System.Collections.Generic.IList), string provisioningState = default(string), string name = default(string), string etag = default(string)) + : base(id) + { + BackendIPConfigurations = backendIPConfigurations; + BackendAddresses = backendAddresses; + ProvisioningState = provisioningState; + Name = name; + Etag = etag; + } + + /// + /// Gets or sets collection of references to IPs defined in NICs + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.backendIPConfigurations")] + public System.Collections.Generic.IList BackendIPConfigurations { get; set; } + + /// + /// Gets or sets backend addresses + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.backendAddresses")] + public System.Collections.Generic.IList BackendAddresses { get; set; } + + /// + /// Gets or sets provisioning state of the backend address pool + /// resource Updating/Deleting/Failed + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.provisioningState")] + public string ProvisioningState { get; set; } + + /// + /// Gets or sets resource that is unique within a resource group. This + /// name can be used to access the resource + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "name")] + public string Name { get; set; } + + /// + /// Gets or sets a unique read-only string that changes whenever the + /// resource is updated + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "etag")] + public string Etag { get; set; } + + } +} diff --git a/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/ApplicationGatewayBackendHttpSettingsInner.cs b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/ApplicationGatewayBackendHttpSettingsInner.cs new file mode 100644 index 000000000..bd533f678 --- /dev/null +++ b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/ApplicationGatewayBackendHttpSettingsInner.cs @@ -0,0 +1,119 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.Network.Models +{ + using System.Linq; + + /// + /// Backend address pool settings of application gateway + /// + [Microsoft.Rest.Serialization.JsonTransformation] + public partial class ApplicationGatewayBackendHttpSettingsInner : Microsoft.Rest.Azure.SubResource + { + /// + /// Initializes a new instance of the + /// ApplicationGatewayBackendHttpSettingsInner class. + /// + public ApplicationGatewayBackendHttpSettingsInner() { } + + /// + /// Initializes a new instance of the + /// ApplicationGatewayBackendHttpSettingsInner class. + /// + /// Port + /// Protocol. Possible values include: 'Http', + /// 'Https' + /// Cookie affinity. Possible values + /// include: 'Enabled', 'Disabled' + /// Request timeout + /// Probe resource of application gateway + /// Array of references to + /// Application Gateway Authentication Certificates + /// Provisioning state of the backend + /// http settings resource Updating/Deleting/Failed + /// Name of the resource that is unique within a + /// resource group. This name can be used to access the + /// resource + /// A unique read-only string that changes whenever + /// the resource is updated + public ApplicationGatewayBackendHttpSettingsInner(string id = default(string), int? port = default(int?), string protocol = default(string), string cookieBasedAffinity = default(string), int? requestTimeout = default(int?), Microsoft.Rest.Azure.SubResource probe = default(Microsoft.Rest.Azure.SubResource), System.Collections.Generic.IList authenticationCertificates = default(System.Collections.Generic.IList), string provisioningState = default(string), string name = default(string), string etag = default(string)) + : base(id) + { + Port = port; + Protocol = protocol; + CookieBasedAffinity = cookieBasedAffinity; + RequestTimeout = requestTimeout; + Probe = probe; + AuthenticationCertificates = authenticationCertificates; + ProvisioningState = provisioningState; + Name = name; + Etag = etag; + } + + /// + /// Gets or sets port + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.port")] + public int? Port { get; set; } + + /// + /// Gets or sets protocol. Possible values include: 'Http', 'Https' + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.protocol")] + public string Protocol { get; set; } + + /// + /// Gets or sets cookie affinity. Possible values include: 'Enabled', + /// 'Disabled' + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.cookieBasedAffinity")] + public string CookieBasedAffinity { get; set; } + + /// + /// Gets or sets request timeout + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.requestTimeout")] + public int? RequestTimeout { get; set; } + + /// + /// Gets or sets probe resource of application gateway + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.probe")] + public Microsoft.Rest.Azure.SubResource Probe { get; set; } + + /// + /// Gets or sets array of references to Application Gateway + /// Authentication Certificates + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.authenticationCertificates")] + public System.Collections.Generic.IList AuthenticationCertificates { get; set; } + + /// + /// Gets or sets provisioning state of the backend http settings + /// resource Updating/Deleting/Failed + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.provisioningState")] + public string ProvisioningState { get; set; } + + /// + /// Gets or sets name of the resource that is unique within a resource + /// group. This name can be used to access the resource + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "name")] + public string Name { get; set; } + + /// + /// Gets or sets a unique read-only string that changes whenever the + /// resource is updated + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "etag")] + public string Etag { get; set; } + + } +} diff --git a/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/ApplicationGatewayCookieBasedAffinity.cs b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/ApplicationGatewayCookieBasedAffinity.cs new file mode 100644 index 000000000..7bd1177dd --- /dev/null +++ b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/ApplicationGatewayCookieBasedAffinity.cs @@ -0,0 +1,20 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.Network.Models +{ + + /// + /// Defines values for ApplicationGatewayCookieBasedAffinity. + /// + public static class ApplicationGatewayCookieBasedAffinity + { + public const string Enabled = "Enabled"; + public const string Disabled = "Disabled"; + } +} diff --git a/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/ApplicationGatewayFrontendIPConfigurationInner.cs b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/ApplicationGatewayFrontendIPConfigurationInner.cs new file mode 100644 index 000000000..4f932c27c --- /dev/null +++ b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/ApplicationGatewayFrontendIPConfigurationInner.cs @@ -0,0 +1,104 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.Network.Models +{ + using System.Linq; + + /// + /// Frontend IP configuration of application gateway + /// + [Microsoft.Rest.Serialization.JsonTransformation] + public partial class ApplicationGatewayFrontendIPConfigurationInner : Microsoft.Rest.Azure.SubResource + { + /// + /// Initializes a new instance of the + /// ApplicationGatewayFrontendIPConfigurationInner class. + /// + public ApplicationGatewayFrontendIPConfigurationInner() { } + + /// + /// Initializes a new instance of the + /// ApplicationGatewayFrontendIPConfigurationInner class. + /// + /// PrivateIPAddress of the Network + /// Interface IP Configuration + /// PrivateIP allocation + /// method (Static/Dynamic). Possible values include: 'Static', + /// 'Dynamic' + /// Reference of the subnet resource + /// Reference of the PublicIP + /// resource + /// Provisioning state of the PublicIP + /// resource Updating/Deleting/Failed + /// Name of the resource that is unique within a + /// resource group. This name can be used to access the + /// resource + /// A unique read-only string that changes whenever + /// the resource is updated + public ApplicationGatewayFrontendIPConfigurationInner(string id = default(string), string privateIPAddress = default(string), string privateIPAllocationMethod = default(string), Microsoft.Rest.Azure.SubResource subnet = default(Microsoft.Rest.Azure.SubResource), Microsoft.Rest.Azure.SubResource publicIPAddress = default(Microsoft.Rest.Azure.SubResource), string provisioningState = default(string), string name = default(string), string etag = default(string)) + : base(id) + { + PrivateIPAddress = privateIPAddress; + PrivateIPAllocationMethod = privateIPAllocationMethod; + Subnet = subnet; + PublicIPAddress = publicIPAddress; + ProvisioningState = provisioningState; + Name = name; + Etag = etag; + } + + /// + /// Gets or sets privateIPAddress of the Network Interface IP + /// Configuration + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.privateIPAddress")] + public string PrivateIPAddress { get; set; } + + /// + /// Gets or sets privateIP allocation method (Static/Dynamic). + /// Possible values include: 'Static', 'Dynamic' + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.privateIPAllocationMethod")] + public string PrivateIPAllocationMethod { get; set; } + + /// + /// Gets or sets reference of the subnet resource + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.subnet")] + public Microsoft.Rest.Azure.SubResource Subnet { get; set; } + + /// + /// Gets or sets reference of the PublicIP resource + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.publicIPAddress")] + public Microsoft.Rest.Azure.SubResource PublicIPAddress { get; set; } + + /// + /// Gets or sets provisioning state of the PublicIP resource + /// Updating/Deleting/Failed + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.provisioningState")] + public string ProvisioningState { get; set; } + + /// + /// Gets or sets name of the resource that is unique within a resource + /// group. This name can be used to access the resource + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "name")] + public string Name { get; set; } + + /// + /// Gets or sets a unique read-only string that changes whenever the + /// resource is updated + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "etag")] + public string Etag { get; set; } + + } +} diff --git a/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/ApplicationGatewayFrontendPortInner.cs b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/ApplicationGatewayFrontendPortInner.cs new file mode 100644 index 000000000..97ccb3aab --- /dev/null +++ b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/ApplicationGatewayFrontendPortInner.cs @@ -0,0 +1,74 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.Network.Models +{ + using System.Linq; + + /// + /// Frontend Port of application gateway + /// + [Microsoft.Rest.Serialization.JsonTransformation] + public partial class ApplicationGatewayFrontendPortInner : Microsoft.Rest.Azure.SubResource + { + /// + /// Initializes a new instance of the + /// ApplicationGatewayFrontendPortInner class. + /// + public ApplicationGatewayFrontendPortInner() { } + + /// + /// Initializes a new instance of the + /// ApplicationGatewayFrontendPortInner class. + /// + /// Frontend port + /// Provisioning state of the frontend + /// port resource Updating/Deleting/Failed + /// Name of the resource that is unique within a + /// resource group. This name can be used to access the + /// resource + /// A unique read-only string that changes whenever + /// the resource is updated + public ApplicationGatewayFrontendPortInner(string id = default(string), int? port = default(int?), string provisioningState = default(string), string name = default(string), string etag = default(string)) + : base(id) + { + Port = port; + ProvisioningState = provisioningState; + Name = name; + Etag = etag; + } + + /// + /// Gets or sets frontend port + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.port")] + public int? Port { get; set; } + + /// + /// Gets or sets provisioning state of the frontend port resource + /// Updating/Deleting/Failed + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.provisioningState")] + public string ProvisioningState { get; set; } + + /// + /// Gets or sets name of the resource that is unique within a resource + /// group. This name can be used to access the resource + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "name")] + public string Name { get; set; } + + /// + /// Gets or sets a unique read-only string that changes whenever the + /// resource is updated + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "etag")] + public string Etag { get; set; } + + } +} diff --git a/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/ApplicationGatewayHttpListenerInner.cs b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/ApplicationGatewayHttpListenerInner.cs new file mode 100644 index 000000000..2b3ebb8bc --- /dev/null +++ b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/ApplicationGatewayHttpListenerInner.cs @@ -0,0 +1,121 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.Network.Models +{ + using System.Linq; + + /// + /// Http listener of application gateway + /// + [Microsoft.Rest.Serialization.JsonTransformation] + public partial class ApplicationGatewayHttpListenerInner : Microsoft.Rest.Azure.SubResource + { + /// + /// Initializes a new instance of the + /// ApplicationGatewayHttpListenerInner class. + /// + public ApplicationGatewayHttpListenerInner() { } + + /// + /// Initializes a new instance of the + /// ApplicationGatewayHttpListenerInner class. + /// + /// Frontend IP configuration + /// resource of application gateway + /// Frontend port resource of application + /// gateway + /// Protocol. Possible values include: 'Http', + /// 'Https' + /// Host name of http listener + /// Ssl certificate resource of + /// application gateway + /// RequireServerNameIndication of + /// http listener + /// Provisioning state of the http + /// listener resource Updating/Deleting/Failed + /// Name of the resource that is unique within a + /// resource group. This name can be used to access the + /// resource + /// A unique read-only string that changes whenever + /// the resource is updated + public ApplicationGatewayHttpListenerInner(string id = default(string), Microsoft.Rest.Azure.SubResource frontendIPConfiguration = default(Microsoft.Rest.Azure.SubResource), Microsoft.Rest.Azure.SubResource frontendPort = default(Microsoft.Rest.Azure.SubResource), string protocol = default(string), string hostName = default(string), Microsoft.Rest.Azure.SubResource sslCertificate = default(Microsoft.Rest.Azure.SubResource), bool? requireServerNameIndication = default(bool?), string provisioningState = default(string), string name = default(string), string etag = default(string)) + : base(id) + { + FrontendIPConfiguration = frontendIPConfiguration; + FrontendPort = frontendPort; + Protocol = protocol; + HostName = hostName; + SslCertificate = sslCertificate; + RequireServerNameIndication = requireServerNameIndication; + ProvisioningState = provisioningState; + Name = name; + Etag = etag; + } + + /// + /// Gets or sets frontend IP configuration resource of application + /// gateway + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.frontendIPConfiguration")] + public Microsoft.Rest.Azure.SubResource FrontendIPConfiguration { get; set; } + + /// + /// Gets or sets frontend port resource of application gateway + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.frontendPort")] + public Microsoft.Rest.Azure.SubResource FrontendPort { get; set; } + + /// + /// Gets or sets protocol. Possible values include: 'Http', 'Https' + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.protocol")] + public string Protocol { get; set; } + + /// + /// Gets or sets host name of http listener + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.hostName")] + public string HostName { get; set; } + + /// + /// Gets or sets ssl certificate resource of application gateway + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.sslCertificate")] + public Microsoft.Rest.Azure.SubResource SslCertificate { get; set; } + + /// + /// Gets or sets requireServerNameIndication of http listener + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.requireServerNameIndication")] + public bool? RequireServerNameIndication { get; set; } + + /// + /// Gets or sets provisioning state of the http listener resource + /// Updating/Deleting/Failed + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.provisioningState")] + public string ProvisioningState { get; set; } + + /// + /// Gets or sets name of the resource that is unique within a resource + /// group. This name can be used to access the resource + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "name")] + public string Name { get; set; } + + /// + /// Gets or sets a unique read-only string that changes whenever the + /// resource is updated + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "etag")] + public string Etag { get; set; } + + } +} diff --git a/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/ApplicationGatewayIPConfigurationInner.cs b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/ApplicationGatewayIPConfigurationInner.cs new file mode 100644 index 000000000..c88cf98fd --- /dev/null +++ b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/ApplicationGatewayIPConfigurationInner.cs @@ -0,0 +1,77 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.Network.Models +{ + using System.Linq; + + /// + /// IP configuration of application gateway + /// + [Microsoft.Rest.Serialization.JsonTransformation] + public partial class ApplicationGatewayIPConfigurationInner : Microsoft.Rest.Azure.SubResource + { + /// + /// Initializes a new instance of the + /// ApplicationGatewayIPConfigurationInner class. + /// + public ApplicationGatewayIPConfigurationInner() { } + + /// + /// Initializes a new instance of the + /// ApplicationGatewayIPConfigurationInner class. + /// + /// Reference of the subnet resource. A subnet + /// from where appliation gateway gets its private address + /// Provisioning state of the + /// application gateway subnet resource + /// Updating/Deleting/Failed + /// Name of the resource that is unique within a + /// resource group. This name can be used to access the + /// resource + /// A unique read-only string that changes whenever + /// the resource is updated + public ApplicationGatewayIPConfigurationInner(string id = default(string), Microsoft.Rest.Azure.SubResource subnet = default(Microsoft.Rest.Azure.SubResource), string provisioningState = default(string), string name = default(string), string etag = default(string)) + : base(id) + { + Subnet = subnet; + ProvisioningState = provisioningState; + Name = name; + Etag = etag; + } + + /// + /// Gets or sets reference of the subnet resource. A subnet from where + /// appliation gateway gets its private address + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.subnet")] + public Microsoft.Rest.Azure.SubResource Subnet { get; set; } + + /// + /// Gets or sets provisioning state of the application gateway subnet + /// resource Updating/Deleting/Failed + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.provisioningState")] + public string ProvisioningState { get; set; } + + /// + /// Gets or sets name of the resource that is unique within a resource + /// group. This name can be used to access the resource + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "name")] + public string Name { get; set; } + + /// + /// Gets or sets a unique read-only string that changes whenever the + /// resource is updated + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "etag")] + public string Etag { get; set; } + + } +} diff --git a/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/ApplicationGatewayInner.cs b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/ApplicationGatewayInner.cs new file mode 100644 index 000000000..07e254851 --- /dev/null +++ b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/ApplicationGatewayInner.cs @@ -0,0 +1,190 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.Network.Models +{ + using System.Linq; + + /// + /// ApplicationGateways resource + /// + [Microsoft.Rest.Serialization.JsonTransformation] + public partial class ApplicationGatewayInner : Microsoft.Rest.Azure.Resource + { + /// + /// Initializes a new instance of the ApplicationGatewayInner class. + /// + public ApplicationGatewayInner() { } + + /// + /// Initializes a new instance of the ApplicationGatewayInner class. + /// + /// Sku of application gateway resource + /// SSL policy of application gateway + /// resource + /// Operational state of application + /// gateway resource. Possible values include: 'Stopped', 'Starting', + /// 'Running', 'Stopping' + /// Subnets of application + /// gateway resource + /// Authentication + /// certificates of application gateway resource + /// SSL certificates of application + /// gateway resource + /// Frontend IP addresses of + /// application gateway resource + /// Frontend ports of application gateway + /// resource + /// Probes of application gateway resource + /// Backend address pool of + /// application gateway resource + /// Backend http settings + /// of application gateway resource + /// HTTP listeners of application gateway + /// resource + /// URL path map of application gateway + /// resource + /// Request routing rules of + /// application gateway resource + /// Resource guid property of the + /// ApplicationGateway resource + /// Provisioning state of the + /// ApplicationGateway resource Updating/Deleting/Failed + /// A unique read-only string that changes whenever + /// the resource is updated + public ApplicationGatewayInner(string location = default(string), string id = default(string), string name = default(string), string type = default(string), System.Collections.Generic.IDictionary tags = default(System.Collections.Generic.IDictionary), ApplicationGatewaySku sku = default(ApplicationGatewaySku), ApplicationGatewaySslPolicy sslPolicy = default(ApplicationGatewaySslPolicy), string operationalState = default(string), System.Collections.Generic.IList gatewayIPConfigurations = default(System.Collections.Generic.IList), System.Collections.Generic.IList authenticationCertificates = default(System.Collections.Generic.IList), System.Collections.Generic.IList sslCertificates = default(System.Collections.Generic.IList), System.Collections.Generic.IList frontendIPConfigurations = default(System.Collections.Generic.IList), System.Collections.Generic.IList frontendPorts = default(System.Collections.Generic.IList), System.Collections.Generic.IList probes = default(System.Collections.Generic.IList), System.Collections.Generic.IList backendAddressPools = default(System.Collections.Generic.IList), System.Collections.Generic.IList backendHttpSettingsCollection = default(System.Collections.Generic.IList), System.Collections.Generic.IList httpListeners = default(System.Collections.Generic.IList), System.Collections.Generic.IList urlPathMaps = default(System.Collections.Generic.IList), System.Collections.Generic.IList requestRoutingRules = default(System.Collections.Generic.IList), string resourceGuid = default(string), string provisioningState = default(string), string etag = default(string)) + : base(location, id, name, type, tags) + { + Sku = sku; + SslPolicy = sslPolicy; + OperationalState = operationalState; + GatewayIPConfigurations = gatewayIPConfigurations; + AuthenticationCertificates = authenticationCertificates; + SslCertificates = sslCertificates; + FrontendIPConfigurations = frontendIPConfigurations; + FrontendPorts = frontendPorts; + Probes = probes; + BackendAddressPools = backendAddressPools; + BackendHttpSettingsCollection = backendHttpSettingsCollection; + HttpListeners = httpListeners; + UrlPathMaps = urlPathMaps; + RequestRoutingRules = requestRoutingRules; + ResourceGuid = resourceGuid; + ProvisioningState = provisioningState; + Etag = etag; + } + + /// + /// Gets or sets sku of application gateway resource + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.sku")] + public ApplicationGatewaySku Sku { get; set; } + + /// + /// Gets or sets SSL policy of application gateway resource + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.sslPolicy")] + public ApplicationGatewaySslPolicy SslPolicy { get; set; } + + /// + /// Gets operational state of application gateway resource. Possible + /// values include: 'Stopped', 'Starting', 'Running', 'Stopping' + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.operationalState")] + public string OperationalState { get; private set; } + + /// + /// Gets or sets subnets of application gateway resource + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.gatewayIPConfigurations")] + public System.Collections.Generic.IList GatewayIPConfigurations { get; set; } + + /// + /// Gets or sets authentication certificates of application gateway + /// resource + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.authenticationCertificates")] + public System.Collections.Generic.IList AuthenticationCertificates { get; set; } + + /// + /// Gets or sets SSL certificates of application gateway resource + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.sslCertificates")] + public System.Collections.Generic.IList SslCertificates { get; set; } + + /// + /// Gets or sets frontend IP addresses of application gateway resource + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.frontendIPConfigurations")] + public System.Collections.Generic.IList FrontendIPConfigurations { get; set; } + + /// + /// Gets or sets frontend ports of application gateway resource + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.frontendPorts")] + public System.Collections.Generic.IList FrontendPorts { get; set; } + + /// + /// Gets or sets probes of application gateway resource + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.probes")] + public System.Collections.Generic.IList Probes { get; set; } + + /// + /// Gets or sets backend address pool of application gateway resource + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.backendAddressPools")] + public System.Collections.Generic.IList BackendAddressPools { get; set; } + + /// + /// Gets or sets backend http settings of application gateway resource + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.backendHttpSettingsCollection")] + public System.Collections.Generic.IList BackendHttpSettingsCollection { get; set; } + + /// + /// Gets or sets HTTP listeners of application gateway resource + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.httpListeners")] + public System.Collections.Generic.IList HttpListeners { get; set; } + + /// + /// Gets or sets URL path map of application gateway resource + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.urlPathMaps")] + public System.Collections.Generic.IList UrlPathMaps { get; set; } + + /// + /// Gets or sets request routing rules of application gateway resource + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.requestRoutingRules")] + public System.Collections.Generic.IList RequestRoutingRules { get; set; } + + /// + /// Gets or sets resource guid property of the ApplicationGateway + /// resource + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.resourceGuid")] + public string ResourceGuid { get; set; } + + /// + /// Gets or sets provisioning state of the ApplicationGateway resource + /// Updating/Deleting/Failed + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.provisioningState")] + public string ProvisioningState { get; set; } + + /// + /// Gets or sets a unique read-only string that changes whenever the + /// resource is updated + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "etag")] + public string Etag { get; set; } + + } +} diff --git a/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/ApplicationGatewayListResultInner.cs b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/ApplicationGatewayListResultInner.cs new file mode 100644 index 000000000..28449ae72 --- /dev/null +++ b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/ApplicationGatewayListResultInner.cs @@ -0,0 +1,50 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.Network.Models +{ + using System.Linq; + + /// + /// Response for ListApplicationGateways Api service call + /// + public partial class ApplicationGatewayListResultInner + { + /// + /// Initializes a new instance of the + /// ApplicationGatewayListResultInner class. + /// + public ApplicationGatewayListResultInner() { } + + /// + /// Initializes a new instance of the + /// ApplicationGatewayListResultInner class. + /// + /// List of ApplicationGateways in a resource + /// group + /// URL to get the next set of results. + public ApplicationGatewayListResultInner(System.Collections.Generic.IList value = default(System.Collections.Generic.IList), string nextLink = default(string)) + { + Value = value; + NextLink = nextLink; + } + + /// + /// Gets or sets list of ApplicationGateways in a resource group + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "value")] + public System.Collections.Generic.IList Value { get; set; } + + /// + /// Gets or sets URL to get the next set of results. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "nextLink")] + public string NextLink { get; set; } + + } +} diff --git a/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/ApplicationGatewayOperationalState.cs b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/ApplicationGatewayOperationalState.cs new file mode 100644 index 000000000..80ecacf9e --- /dev/null +++ b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/ApplicationGatewayOperationalState.cs @@ -0,0 +1,22 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.Network.Models +{ + + /// + /// Defines values for ApplicationGatewayOperationalState. + /// + public static class ApplicationGatewayOperationalState + { + public const string Stopped = "Stopped"; + public const string Starting = "Starting"; + public const string Running = "Running"; + public const string Stopping = "Stopping"; + } +} diff --git a/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/ApplicationGatewayPathRuleInner.cs b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/ApplicationGatewayPathRuleInner.cs new file mode 100644 index 000000000..572174c6c --- /dev/null +++ b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/ApplicationGatewayPathRuleInner.cs @@ -0,0 +1,92 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.Network.Models +{ + using System.Linq; + + /// + /// Path rule of URL path map of application gateway + /// + [Microsoft.Rest.Serialization.JsonTransformation] + public partial class ApplicationGatewayPathRuleInner : Microsoft.Rest.Azure.SubResource + { + /// + /// Initializes a new instance of the ApplicationGatewayPathRuleInner + /// class. + /// + public ApplicationGatewayPathRuleInner() { } + + /// + /// Initializes a new instance of the ApplicationGatewayPathRuleInner + /// class. + /// + /// Path rules of URL path map + /// Backend address pool resource of + /// URL path map + /// Backend http settings resource + /// of URL path map + /// Path rule of URL path map resource + /// Updating/Deleting/Failed + /// Name of the resource that is unique within a + /// resource group. This name can be used to access the + /// resource + /// A unique read-only string that changes whenever + /// the resource is updated + public ApplicationGatewayPathRuleInner(string id = default(string), System.Collections.Generic.IList paths = default(System.Collections.Generic.IList), Microsoft.Rest.Azure.SubResource backendAddressPool = default(Microsoft.Rest.Azure.SubResource), Microsoft.Rest.Azure.SubResource backendHttpSettings = default(Microsoft.Rest.Azure.SubResource), string provisioningState = default(string), string name = default(string), string etag = default(string)) + : base(id) + { + Paths = paths; + BackendAddressPool = backendAddressPool; + BackendHttpSettings = backendHttpSettings; + ProvisioningState = provisioningState; + Name = name; + Etag = etag; + } + + /// + /// Gets or sets path rules of URL path map + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.paths")] + public System.Collections.Generic.IList Paths { get; set; } + + /// + /// Gets or sets backend address pool resource of URL path map + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.backendAddressPool")] + public Microsoft.Rest.Azure.SubResource BackendAddressPool { get; set; } + + /// + /// Gets or sets backend http settings resource of URL path map + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.backendHttpSettings")] + public Microsoft.Rest.Azure.SubResource BackendHttpSettings { get; set; } + + /// + /// Gets or sets path rule of URL path map resource + /// Updating/Deleting/Failed + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.provisioningState")] + public string ProvisioningState { get; set; } + + /// + /// Gets or sets name of the resource that is unique within a resource + /// group. This name can be used to access the resource + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "name")] + public string Name { get; set; } + + /// + /// Gets or sets a unique read-only string that changes whenever the + /// resource is updated + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "etag")] + public string Etag { get; set; } + + } +} diff --git a/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/ApplicationGatewayProbeInner.cs b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/ApplicationGatewayProbeInner.cs new file mode 100644 index 000000000..a0e0c28f5 --- /dev/null +++ b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/ApplicationGatewayProbeInner.cs @@ -0,0 +1,116 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.Network.Models +{ + using System.Linq; + + /// + /// Probe of application gateway + /// + [Microsoft.Rest.Serialization.JsonTransformation] + public partial class ApplicationGatewayProbeInner : Microsoft.Rest.Azure.SubResource + { + /// + /// Initializes a new instance of the ApplicationGatewayProbeInner + /// class. + /// + public ApplicationGatewayProbeInner() { } + + /// + /// Initializes a new instance of the ApplicationGatewayProbeInner + /// class. + /// + /// Protocol. Possible values include: 'Http', + /// 'Https' + /// Host to send probe to + /// Relative path of probe + /// Probing interval in seconds + /// Probing timeout in seconds + /// Probing unhealthy threshold + /// + /// Provisioning state of the backend + /// http settings resource Updating/Deleting/Failed + /// Name of the resource that is unique within a + /// resource group. This name can be used to access the + /// resource + /// A unique read-only string that changes whenever + /// the resource is updated + public ApplicationGatewayProbeInner(string id = default(string), string protocol = default(string), string host = default(string), string path = default(string), int? interval = default(int?), int? timeout = default(int?), int? unhealthyThreshold = default(int?), string provisioningState = default(string), string name = default(string), string etag = default(string)) + : base(id) + { + Protocol = protocol; + Host = host; + Path = path; + Interval = interval; + Timeout = timeout; + UnhealthyThreshold = unhealthyThreshold; + ProvisioningState = provisioningState; + Name = name; + Etag = etag; + } + + /// + /// Gets or sets protocol. Possible values include: 'Http', 'Https' + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.protocol")] + public string Protocol { get; set; } + + /// + /// Gets or sets host to send probe to + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.host")] + public string Host { get; set; } + + /// + /// Gets or sets relative path of probe + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.path")] + public string Path { get; set; } + + /// + /// Gets or sets probing interval in seconds + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.interval")] + public int? Interval { get; set; } + + /// + /// Gets or sets probing timeout in seconds + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.timeout")] + public int? Timeout { get; set; } + + /// + /// Gets or sets probing unhealthy threshold + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.unhealthyThreshold")] + public int? UnhealthyThreshold { get; set; } + + /// + /// Gets or sets provisioning state of the backend http settings + /// resource Updating/Deleting/Failed + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.provisioningState")] + public string ProvisioningState { get; set; } + + /// + /// Gets or sets name of the resource that is unique within a resource + /// group. This name can be used to access the resource + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "name")] + public string Name { get; set; } + + /// + /// Gets or sets a unique read-only string that changes whenever the + /// resource is updated + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "etag")] + public string Etag { get; set; } + + } +} diff --git a/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/ApplicationGatewayProtocol.cs b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/ApplicationGatewayProtocol.cs new file mode 100644 index 000000000..f0178991a --- /dev/null +++ b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/ApplicationGatewayProtocol.cs @@ -0,0 +1,20 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.Network.Models +{ + + /// + /// Defines values for ApplicationGatewayProtocol. + /// + public static class ApplicationGatewayProtocol + { + public const string Http = "Http"; + public const string Https = "Https"; + } +} diff --git a/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/ApplicationGatewayRequestRoutingRuleInner.cs b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/ApplicationGatewayRequestRoutingRuleInner.cs new file mode 100644 index 000000000..0099d0cf3 --- /dev/null +++ b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/ApplicationGatewayRequestRoutingRuleInner.cs @@ -0,0 +1,112 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.Network.Models +{ + using System.Linq; + + /// + /// Request routing rule of application gateway + /// + [Microsoft.Rest.Serialization.JsonTransformation] + public partial class ApplicationGatewayRequestRoutingRuleInner : Microsoft.Rest.Azure.SubResource + { + /// + /// Initializes a new instance of the + /// ApplicationGatewayRequestRoutingRuleInner class. + /// + public ApplicationGatewayRequestRoutingRuleInner() { } + + /// + /// Initializes a new instance of the + /// ApplicationGatewayRequestRoutingRuleInner class. + /// + /// Rule type. Possible values include: + /// 'Basic', 'PathBasedRouting' + /// Backend address pool resource of + /// application gateway + /// Frontend port resource of + /// application gateway + /// Http listener resource of application + /// gateway + /// Url path map resource of application + /// gateway + /// Provisioning state of the request + /// routing rule resource Updating/Deleting/Failed + /// Name of the resource that is unique within a + /// resource group. This name can be used to access the + /// resource + /// A unique read-only string that changes whenever + /// the resource is updated + public ApplicationGatewayRequestRoutingRuleInner(string id = default(string), string ruleType = default(string), Microsoft.Rest.Azure.SubResource backendAddressPool = default(Microsoft.Rest.Azure.SubResource), Microsoft.Rest.Azure.SubResource backendHttpSettings = default(Microsoft.Rest.Azure.SubResource), Microsoft.Rest.Azure.SubResource httpListener = default(Microsoft.Rest.Azure.SubResource), Microsoft.Rest.Azure.SubResource urlPathMap = default(Microsoft.Rest.Azure.SubResource), string provisioningState = default(string), string name = default(string), string etag = default(string)) + : base(id) + { + RuleType = ruleType; + BackendAddressPool = backendAddressPool; + BackendHttpSettings = backendHttpSettings; + HttpListener = httpListener; + UrlPathMap = urlPathMap; + ProvisioningState = provisioningState; + Name = name; + Etag = etag; + } + + /// + /// Gets or sets rule type. Possible values include: 'Basic', + /// 'PathBasedRouting' + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.ruleType")] + public string RuleType { get; set; } + + /// + /// Gets or sets backend address pool resource of application gateway + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.backendAddressPool")] + public Microsoft.Rest.Azure.SubResource BackendAddressPool { get; set; } + + /// + /// Gets or sets frontend port resource of application gateway + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.backendHttpSettings")] + public Microsoft.Rest.Azure.SubResource BackendHttpSettings { get; set; } + + /// + /// Gets or sets http listener resource of application gateway + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.httpListener")] + public Microsoft.Rest.Azure.SubResource HttpListener { get; set; } + + /// + /// Gets or sets url path map resource of application gateway + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.urlPathMap")] + public Microsoft.Rest.Azure.SubResource UrlPathMap { get; set; } + + /// + /// Gets or sets provisioning state of the request routing rule + /// resource Updating/Deleting/Failed + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.provisioningState")] + public string ProvisioningState { get; set; } + + /// + /// Gets or sets name of the resource that is unique within a resource + /// group. This name can be used to access the resource + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "name")] + public string Name { get; set; } + + /// + /// Gets or sets a unique read-only string that changes whenever the + /// resource is updated + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "etag")] + public string Etag { get; set; } + + } +} diff --git a/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/ApplicationGatewayRequestRoutingRuleType.cs b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/ApplicationGatewayRequestRoutingRuleType.cs new file mode 100644 index 000000000..95268fdd9 --- /dev/null +++ b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/ApplicationGatewayRequestRoutingRuleType.cs @@ -0,0 +1,20 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.Network.Models +{ + + /// + /// Defines values for ApplicationGatewayRequestRoutingRuleType. + /// + public static class ApplicationGatewayRequestRoutingRuleType + { + public const string Basic = "Basic"; + public const string PathBasedRouting = "PathBasedRouting"; + } +} diff --git a/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/ApplicationGatewaySku.cs b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/ApplicationGatewaySku.cs new file mode 100644 index 000000000..354fb5f67 --- /dev/null +++ b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/ApplicationGatewaySku.cs @@ -0,0 +1,61 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.Network.Models +{ + using System.Linq; + + /// + /// SKU of application gateway + /// + public partial class ApplicationGatewaySku + { + /// + /// Initializes a new instance of the ApplicationGatewaySku class. + /// + public ApplicationGatewaySku() { } + + /// + /// Initializes a new instance of the ApplicationGatewaySku class. + /// + /// Name of application gateway SKU. Possible + /// values include: 'Standard_Small', 'Standard_Medium', + /// 'Standard_Large' + /// Tier of application gateway. Possible values + /// include: 'Standard' + /// Capacity (instance count) of application + /// gateway + public ApplicationGatewaySku(string name = default(string), string tier = default(string), int? capacity = default(int?)) + { + Name = name; + Tier = tier; + Capacity = capacity; + } + + /// + /// Gets or sets name of application gateway SKU. Possible values + /// include: 'Standard_Small', 'Standard_Medium', 'Standard_Large' + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "name")] + public string Name { get; set; } + + /// + /// Gets or sets tier of application gateway. Possible values include: + /// 'Standard' + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "tier")] + public string Tier { get; set; } + + /// + /// Gets or sets capacity (instance count) of application gateway + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "capacity")] + public int? Capacity { get; set; } + + } +} diff --git a/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/ApplicationGatewaySkuName.cs b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/ApplicationGatewaySkuName.cs new file mode 100644 index 000000000..61f311413 --- /dev/null +++ b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/ApplicationGatewaySkuName.cs @@ -0,0 +1,21 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.Network.Models +{ + + /// + /// Defines values for ApplicationGatewaySkuName. + /// + public static class ApplicationGatewaySkuName + { + public const string StandardSmall = "Standard_Small"; + public const string StandardMedium = "Standard_Medium"; + public const string StandardLarge = "Standard_Large"; + } +} diff --git a/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/ApplicationGatewaySslCertificateInner.cs b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/ApplicationGatewaySslCertificateInner.cs new file mode 100644 index 000000000..bff60eee0 --- /dev/null +++ b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/ApplicationGatewaySslCertificateInner.cs @@ -0,0 +1,90 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.Network.Models +{ + using System.Linq; + + /// + /// SSL certificates of application gateway + /// + [Microsoft.Rest.Serialization.JsonTransformation] + public partial class ApplicationGatewaySslCertificateInner : Microsoft.Rest.Azure.SubResource + { + /// + /// Initializes a new instance of the + /// ApplicationGatewaySslCertificateInner class. + /// + public ApplicationGatewaySslCertificateInner() { } + + /// + /// Initializes a new instance of the + /// ApplicationGatewaySslCertificateInner class. + /// + /// SSL Certificate data + /// SSL Certificate password + /// SSL Certificate public data + /// Provisioning state of the ssl + /// certificate resource Updating/Deleting/Failed + /// Name of the resource that is unique within a + /// resource group. This name can be used to access the + /// resource + /// A unique read-only string that changes whenever + /// the resource is updated + public ApplicationGatewaySslCertificateInner(string id = default(string), string data = default(string), string password = default(string), string publicCertData = default(string), string provisioningState = default(string), string name = default(string), string etag = default(string)) + : base(id) + { + Data = data; + Password = password; + PublicCertData = publicCertData; + ProvisioningState = provisioningState; + Name = name; + Etag = etag; + } + + /// + /// Gets or sets SSL Certificate data + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.data")] + public string Data { get; set; } + + /// + /// Gets or sets SSL Certificate password + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.password")] + public string Password { get; set; } + + /// + /// Gets or sets SSL Certificate public data + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.publicCertData")] + public string PublicCertData { get; set; } + + /// + /// Gets or sets provisioning state of the ssl certificate resource + /// Updating/Deleting/Failed + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.provisioningState")] + public string ProvisioningState { get; set; } + + /// + /// Gets or sets name of the resource that is unique within a resource + /// group. This name can be used to access the resource + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "name")] + public string Name { get; set; } + + /// + /// Gets or sets a unique read-only string that changes whenever the + /// resource is updated + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "etag")] + public string Etag { get; set; } + + } +} diff --git a/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/ApplicationGatewaySslPolicy.cs b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/ApplicationGatewaySslPolicy.cs new file mode 100644 index 000000000..f0f15c75f --- /dev/null +++ b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/ApplicationGatewaySslPolicy.cs @@ -0,0 +1,42 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.Network.Models +{ + using System.Linq; + + /// + /// Application gateway SSL policy + /// + public partial class ApplicationGatewaySslPolicy + { + /// + /// Initializes a new instance of the ApplicationGatewaySslPolicy + /// class. + /// + public ApplicationGatewaySslPolicy() { } + + /// + /// Initializes a new instance of the ApplicationGatewaySslPolicy + /// class. + /// + /// SSL protocols to be disabled on + /// Application Gateway + public ApplicationGatewaySslPolicy(System.Collections.Generic.IList disabledSslProtocols = default(System.Collections.Generic.IList)) + { + DisabledSslProtocols = disabledSslProtocols; + } + + /// + /// Gets or sets SSL protocols to be disabled on Application Gateway + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "disabledSslProtocols")] + public System.Collections.Generic.IList DisabledSslProtocols { get; set; } + + } +} diff --git a/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/ApplicationGatewaySslProtocol.cs b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/ApplicationGatewaySslProtocol.cs new file mode 100644 index 000000000..78d050f50 --- /dev/null +++ b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/ApplicationGatewaySslProtocol.cs @@ -0,0 +1,21 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.Network.Models +{ + + /// + /// Defines values for ApplicationGatewaySslProtocol. + /// + public static class ApplicationGatewaySslProtocol + { + public const string TLSv10 = "TLSv1_0"; + public const string TLSv11 = "TLSv1_1"; + public const string TLSv12 = "TLSv1_2"; + } +} diff --git a/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/ApplicationGatewayTier.cs b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/ApplicationGatewayTier.cs new file mode 100644 index 000000000..9e1fd5b2a --- /dev/null +++ b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/ApplicationGatewayTier.cs @@ -0,0 +1,19 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.Network.Models +{ + + /// + /// Defines values for ApplicationGatewayTier. + /// + public static class ApplicationGatewayTier + { + public const string Standard = "Standard"; + } +} diff --git a/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/ApplicationGatewayUrlPathMapInner.cs b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/ApplicationGatewayUrlPathMapInner.cs new file mode 100644 index 000000000..e8341e47c --- /dev/null +++ b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/ApplicationGatewayUrlPathMapInner.cs @@ -0,0 +1,93 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.Network.Models +{ + using System.Linq; + + /// + /// UrlPathMap of application gateway + /// + [Microsoft.Rest.Serialization.JsonTransformation] + public partial class ApplicationGatewayUrlPathMapInner : Microsoft.Rest.Azure.SubResource + { + /// + /// Initializes a new instance of the + /// ApplicationGatewayUrlPathMapInner class. + /// + public ApplicationGatewayUrlPathMapInner() { } + + /// + /// Initializes a new instance of the + /// ApplicationGatewayUrlPathMapInner class. + /// + /// Default backend address + /// pool resource of URL path map + /// Default backend http + /// settings resource of URL path map + /// Path rule of URL path map resource + /// Provisioning state of the backend + /// http settings resource Updating/Deleting/Failed + /// Name of the resource that is unique within a + /// resource group. This name can be used to access the + /// resource + /// A unique read-only string that changes whenever + /// the resource is updated + public ApplicationGatewayUrlPathMapInner(string id = default(string), Microsoft.Rest.Azure.SubResource defaultBackendAddressPool = default(Microsoft.Rest.Azure.SubResource), Microsoft.Rest.Azure.SubResource defaultBackendHttpSettings = default(Microsoft.Rest.Azure.SubResource), System.Collections.Generic.IList pathRules = default(System.Collections.Generic.IList), string provisioningState = default(string), string name = default(string), string etag = default(string)) + : base(id) + { + DefaultBackendAddressPool = defaultBackendAddressPool; + DefaultBackendHttpSettings = defaultBackendHttpSettings; + PathRules = pathRules; + ProvisioningState = provisioningState; + Name = name; + Etag = etag; + } + + /// + /// Gets or sets default backend address pool resource of URL path map + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.defaultBackendAddressPool")] + public Microsoft.Rest.Azure.SubResource DefaultBackendAddressPool { get; set; } + + /// + /// Gets or sets default backend http settings resource of URL path + /// map + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.defaultBackendHttpSettings")] + public Microsoft.Rest.Azure.SubResource DefaultBackendHttpSettings { get; set; } + + /// + /// Gets or sets path rule of URL path map resource + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.pathRules")] + public System.Collections.Generic.IList PathRules { get; set; } + + /// + /// Gets or sets provisioning state of the backend http settings + /// resource Updating/Deleting/Failed + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.provisioningState")] + public string ProvisioningState { get; set; } + + /// + /// Gets or sets name of the resource that is unique within a resource + /// group. This name can be used to access the resource + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "name")] + public string Name { get; set; } + + /// + /// Gets or sets a unique read-only string that changes whenever the + /// resource is updated + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "etag")] + public string Etag { get; set; } + + } +} diff --git a/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/AuthorizationListResultInner.cs b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/AuthorizationListResultInner.cs new file mode 100644 index 000000000..4c7182d15 --- /dev/null +++ b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/AuthorizationListResultInner.cs @@ -0,0 +1,52 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.Network.Models +{ + using System.Linq; + + /// + /// Response for ListAuthorizations Api service callRetrieves all + /// authorizations that belongs to an ExpressRouteCircuit + /// + public partial class AuthorizationListResultInner + { + /// + /// Initializes a new instance of the AuthorizationListResultInner + /// class. + /// + public AuthorizationListResultInner() { } + + /// + /// Initializes a new instance of the AuthorizationListResultInner + /// class. + /// + /// Gets the authorizations in an ExpressRoute + /// Circuit + /// Gets the URL to get the next set of + /// results. + public AuthorizationListResultInner(System.Collections.Generic.IList value = default(System.Collections.Generic.IList), string nextLink = default(string)) + { + Value = value; + NextLink = nextLink; + } + + /// + /// Gets the authorizations in an ExpressRoute Circuit + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "value")] + public System.Collections.Generic.IList Value { get; set; } + + /// + /// Gets the URL to get the next set of results. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "nextLink")] + public string NextLink { get; set; } + + } +} diff --git a/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/AuthorizationUseStatus.cs b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/AuthorizationUseStatus.cs new file mode 100644 index 000000000..010f347bc --- /dev/null +++ b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/AuthorizationUseStatus.cs @@ -0,0 +1,20 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.Network.Models +{ + + /// + /// Defines values for AuthorizationUseStatus. + /// + public static class AuthorizationUseStatus + { + public const string Available = "Available"; + public const string InUse = "InUse"; + } +} diff --git a/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/AzureAsyncOperationResult.cs b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/AzureAsyncOperationResult.cs new file mode 100644 index 000000000..25d9275c7 --- /dev/null +++ b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/AzureAsyncOperationResult.cs @@ -0,0 +1,54 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.Network.Models +{ + using System.Linq; + + /// + /// The response body contains the status of the specified asynchronous + /// operation, indicating whether it has succeeded, is inprogress, or has + /// failed. Note that this status is distinct from the HTTP status code + /// returned for the Get Operation Status operation itself. If the + /// asynchronous operation succeeded, the response body includes the HTTP + /// status code for the successful request. If the asynchronous operation + /// failed, the response body includes the HTTP status code for the + /// failed request and error information regarding the failure. + /// + public partial class AzureAsyncOperationResult + { + /// + /// Initializes a new instance of the AzureAsyncOperationResult class. + /// + public AzureAsyncOperationResult() { } + + /// + /// Initializes a new instance of the AzureAsyncOperationResult class. + /// + /// Status of the AzureAsuncOperation. Possible + /// values include: 'InProgress', 'Succeeded', 'Failed' + public AzureAsyncOperationResult(string status = default(string), Error error = default(Error)) + { + Status = status; + Error = error; + } + + /// + /// Gets or sets status of the AzureAsuncOperation. Possible values + /// include: 'InProgress', 'Succeeded', 'Failed' + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "status")] + public string Status { get; set; } + + /// + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "error")] + public Error Error { get; set; } + + } +} diff --git a/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/BackendAddressPoolInner.cs b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/BackendAddressPoolInner.cs new file mode 100644 index 000000000..88b2f81c6 --- /dev/null +++ b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/BackendAddressPoolInner.cs @@ -0,0 +1,91 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.Network.Models +{ + using System.Linq; + + /// + /// Pool of backend IP addresseses + /// + [Microsoft.Rest.Serialization.JsonTransformation] + public partial class BackendAddressPoolInner : Microsoft.Rest.Azure.SubResource + { + /// + /// Initializes a new instance of the BackendAddressPoolInner class. + /// + public BackendAddressPoolInner() { } + + /// + /// Initializes a new instance of the BackendAddressPoolInner class. + /// + /// Gets collection of + /// references to IPs defined in NICs + /// Gets Load Balancing rules that + /// use this Backend Address Pool + /// Gets outbound rules that use this + /// Backend Address Pool + /// Get provisioning state of the + /// PublicIP resource Updating/Deleting/Failed + /// Gets name of the resource that is unique within + /// a resource group. This name can be used to access the + /// resource + /// A unique read-only string that changes whenever + /// the resource is updated + public BackendAddressPoolInner(string id = default(string), System.Collections.Generic.IList backendIPConfigurations = default(System.Collections.Generic.IList), System.Collections.Generic.IList loadBalancingRules = default(System.Collections.Generic.IList), Microsoft.Rest.Azure.SubResource outboundNatRule = default(Microsoft.Rest.Azure.SubResource), string provisioningState = default(string), string name = default(string), string etag = default(string)) + : base(id) + { + BackendIPConfigurations = backendIPConfigurations; + LoadBalancingRules = loadBalancingRules; + OutboundNatRule = outboundNatRule; + ProvisioningState = provisioningState; + Name = name; + Etag = etag; + } + + /// + /// Gets collection of references to IPs defined in NICs + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.backendIPConfigurations")] + public System.Collections.Generic.IList BackendIPConfigurations { get; private set; } + + /// + /// Gets Load Balancing rules that use this Backend Address Pool + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.loadBalancingRules")] + public System.Collections.Generic.IList LoadBalancingRules { get; private set; } + + /// + /// Gets outbound rules that use this Backend Address Pool + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.outboundNatRule")] + public Microsoft.Rest.Azure.SubResource OutboundNatRule { get; private set; } + + /// + /// Gets or sets get provisioning state of the PublicIP resource + /// Updating/Deleting/Failed + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.provisioningState")] + public string ProvisioningState { get; set; } + + /// + /// Gets name of the resource that is unique within a resource group. + /// This name can be used to access the resource + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "name")] + public string Name { get; set; } + + /// + /// Gets or sets a unique read-only string that changes whenever the + /// resource is updated + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "etag")] + public string Etag { get; set; } + + } +} diff --git a/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/BgpSettings.cs b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/BgpSettings.cs new file mode 100644 index 000000000..5705a6521 --- /dev/null +++ b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/BgpSettings.cs @@ -0,0 +1,56 @@ +// 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 0.17.0.0 +// 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 BgpSettings + { + /// + /// Initializes a new instance of the BgpSettings class. + /// + public BgpSettings() { } + + /// + /// Initializes a new instance of the BgpSettings class. + /// + /// Gets or sets this BGP speaker's ASN + /// Gets or sets the BGP peering + /// address and BGP identifier of this BGP speaker + /// Gets or sets the weight added to routes + /// learned from this BGP speaker + public BgpSettings(long? asn = default(long?), string bgpPeeringAddress = default(string), int? peerWeight = default(int?)) + { + Asn = asn; + BgpPeeringAddress = bgpPeeringAddress; + PeerWeight = peerWeight; + } + + /// + /// Gets or sets this BGP speaker's ASN + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "asn")] + public long? Asn { get; set; } + + /// + /// Gets or sets the BGP peering address and BGP identifier of this + /// BGP speaker + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "bgpPeeringAddress")] + public string BgpPeeringAddress { get; set; } + + /// + /// Gets or sets the weight added to routes learned from this BGP + /// speaker + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "peerWeight")] + public int? PeerWeight { get; set; } + + } +} diff --git a/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/ConnectionResetSharedKeyInner.cs b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/ConnectionResetSharedKeyInner.cs new file mode 100644 index 000000000..b6affc046 --- /dev/null +++ b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/ConnectionResetSharedKeyInner.cs @@ -0,0 +1,39 @@ +// 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 0.17.0.0 +// 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 ConnectionResetSharedKeyInner + { + /// + /// Initializes a new instance of the ConnectionResetSharedKeyInner + /// class. + /// + public ConnectionResetSharedKeyInner() { } + + /// + /// Initializes a new instance of the ConnectionResetSharedKeyInner + /// class. + /// + /// The virtual network connection reset + /// shared key length + public ConnectionResetSharedKeyInner(long? keyLength = default(long?)) + { + KeyLength = keyLength; + } + + /// + /// Gets or sets the virtual network connection reset shared key length + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "keyLength")] + public long? KeyLength { get; set; } + + } +} diff --git a/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/ConnectionSharedKeyInner.cs b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/ConnectionSharedKeyInner.cs new file mode 100644 index 000000000..af2e2372b --- /dev/null +++ b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/ConnectionSharedKeyInner.cs @@ -0,0 +1,40 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.Network.Models +{ + using System.Linq; + + /// + /// Response for GetConnectionSharedKey Api servive call + /// + public partial class ConnectionSharedKeyInner + { + /// + /// Initializes a new instance of the ConnectionSharedKeyInner class. + /// + public ConnectionSharedKeyInner() { } + + /// + /// Initializes a new instance of the ConnectionSharedKeyInner class. + /// + /// The virtual network connection shared key + /// value + public ConnectionSharedKeyInner(string value = default(string)) + { + Value = value; + } + + /// + /// Gets or sets the virtual network connection shared key value + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "value")] + public string Value { get; set; } + + } +} diff --git a/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/ConnectionSharedKeyResultInner.cs b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/ConnectionSharedKeyResultInner.cs new file mode 100644 index 000000000..0db00964b --- /dev/null +++ b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/ConnectionSharedKeyResultInner.cs @@ -0,0 +1,42 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.Network.Models +{ + using System.Linq; + + /// + /// Response for CheckConnectionSharedKey Api servive call + /// + public partial class ConnectionSharedKeyResultInner + { + /// + /// Initializes a new instance of the ConnectionSharedKeyResultInner + /// class. + /// + public ConnectionSharedKeyResultInner() { } + + /// + /// Initializes a new instance of the ConnectionSharedKeyResultInner + /// class. + /// + /// The virtual network connection shared key + /// value + public ConnectionSharedKeyResultInner(string value = default(string)) + { + Value = value; + } + + /// + /// Gets or sets the virtual network connection shared key value + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "value")] + public string Value { get; set; } + + } +} diff --git a/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/DhcpOptions.cs b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/DhcpOptions.cs new file mode 100644 index 000000000..91ce50bb3 --- /dev/null +++ b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/DhcpOptions.cs @@ -0,0 +1,42 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.Network.Models +{ + using System.Linq; + + /// + /// DHCPOptions contains an array of DNS servers available to VMs deployed + /// in the virtual networkStandard DHCP option for a subnet overrides + /// VNET DHCP options. + /// + public partial class DhcpOptions + { + /// + /// Initializes a new instance of the DhcpOptions class. + /// + public DhcpOptions() { } + + /// + /// Initializes a new instance of the DhcpOptions class. + /// + /// Gets or sets list of DNS servers IP + /// addresses + public DhcpOptions(System.Collections.Generic.IList dnsServers = default(System.Collections.Generic.IList)) + { + DnsServers = dnsServers; + } + + /// + /// Gets or sets list of DNS servers IP addresses + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "dnsServers")] + public System.Collections.Generic.IList DnsServers { get; set; } + + } +} diff --git a/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/DnsNameAvailabilityResultInner.cs b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/DnsNameAvailabilityResultInner.cs new file mode 100644 index 000000000..df9fb9b5f --- /dev/null +++ b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/DnsNameAvailabilityResultInner.cs @@ -0,0 +1,41 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.Network.Models +{ + using System.Linq; + + /// + /// Response for CheckDnsNameAvailability Api servive call + /// + public partial class DnsNameAvailabilityResultInner + { + /// + /// Initializes a new instance of the DnsNameAvailabilityResultInner + /// class. + /// + public DnsNameAvailabilityResultInner() { } + + /// + /// Initializes a new instance of the DnsNameAvailabilityResultInner + /// class. + /// + /// Domain availability (True/False) + public DnsNameAvailabilityResultInner(bool? available = default(bool?)) + { + Available = available; + } + + /// + /// Gets or sets domain availability (True/False) + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "available")] + public bool? Available { get; set; } + + } +} diff --git a/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/EffectiveNetworkSecurityGroup.cs b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/EffectiveNetworkSecurityGroup.cs new file mode 100644 index 000000000..911fae31f --- /dev/null +++ b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/EffectiveNetworkSecurityGroup.cs @@ -0,0 +1,57 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.Network.Models +{ + using System.Linq; + + /// + /// Effective NetworkSecurityGroup + /// + public partial class EffectiveNetworkSecurityGroup + { + /// + /// Initializes a new instance of the EffectiveNetworkSecurityGroup + /// class. + /// + public EffectiveNetworkSecurityGroup() { } + + /// + /// Initializes a new instance of the EffectiveNetworkSecurityGroup + /// class. + /// + /// Gets the id of network security + /// group that is applied + /// Gets collection of effective + /// security rules + public EffectiveNetworkSecurityGroup(Microsoft.Rest.Azure.SubResource networkSecurityGroup = default(Microsoft.Rest.Azure.SubResource), EffectiveNetworkSecurityGroupAssociation association = default(EffectiveNetworkSecurityGroupAssociation), System.Collections.Generic.IList effectiveSecurityRules = default(System.Collections.Generic.IList)) + { + NetworkSecurityGroup = networkSecurityGroup; + Association = association; + EffectiveSecurityRules = effectiveSecurityRules; + } + + /// + /// Gets the id of network security group that is applied + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "networkSecurityGroup")] + public Microsoft.Rest.Azure.SubResource NetworkSecurityGroup { get; set; } + + /// + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "association")] + public EffectiveNetworkSecurityGroupAssociation Association { get; set; } + + /// + /// Gets collection of effective security rules + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "effectiveSecurityRules")] + public System.Collections.Generic.IList EffectiveSecurityRules { get; set; } + + } +} diff --git a/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/EffectiveNetworkSecurityGroupAssociation.cs b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/EffectiveNetworkSecurityGroupAssociation.cs new file mode 100644 index 000000000..d41c8932e --- /dev/null +++ b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/EffectiveNetworkSecurityGroupAssociation.cs @@ -0,0 +1,50 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.Network.Models +{ + using System.Linq; + + /// + /// Effective NetworkSecurityGroup association + /// + public partial class EffectiveNetworkSecurityGroupAssociation + { + /// + /// Initializes a new instance of the + /// EffectiveNetworkSecurityGroupAssociation class. + /// + public EffectiveNetworkSecurityGroupAssociation() { } + + /// + /// Initializes a new instance of the + /// EffectiveNetworkSecurityGroupAssociation class. + /// + /// Gets the id of subnet if assigned + /// Gets the id of network interface if + /// assigned + public EffectiveNetworkSecurityGroupAssociation(Microsoft.Rest.Azure.SubResource subnet = default(Microsoft.Rest.Azure.SubResource), Microsoft.Rest.Azure.SubResource networkInterface = default(Microsoft.Rest.Azure.SubResource)) + { + Subnet = subnet; + NetworkInterface = networkInterface; + } + + /// + /// Gets the id of subnet if assigned + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "subnet")] + public Microsoft.Rest.Azure.SubResource Subnet { get; set; } + + /// + /// Gets the id of network interface if assigned + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "networkInterface")] + public Microsoft.Rest.Azure.SubResource NetworkInterface { get; set; } + + } +} diff --git a/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/EffectiveNetworkSecurityGroupListResultInner.cs b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/EffectiveNetworkSecurityGroupListResultInner.cs new file mode 100644 index 000000000..0bfdef878 --- /dev/null +++ b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/EffectiveNetworkSecurityGroupListResultInner.cs @@ -0,0 +1,51 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.Network.Models +{ + using System.Linq; + + /// + /// Response for list effective network security groups api servive call + /// + public partial class EffectiveNetworkSecurityGroupListResultInner + { + /// + /// Initializes a new instance of the + /// EffectiveNetworkSecurityGroupListResultInner class. + /// + public EffectiveNetworkSecurityGroupListResultInner() { } + + /// + /// Initializes a new instance of the + /// EffectiveNetworkSecurityGroupListResultInner class. + /// + /// Gets list of effective network security + /// groups + /// Gets the URL to get the next set of + /// results. + public EffectiveNetworkSecurityGroupListResultInner(System.Collections.Generic.IList value = default(System.Collections.Generic.IList), string nextLink = default(string)) + { + Value = value; + NextLink = nextLink; + } + + /// + /// Gets list of effective network security groups + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "value")] + public System.Collections.Generic.IList Value { get; set; } + + /// + /// Gets the URL to get the next set of results. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "nextLink")] + public string NextLink { get; set; } + + } +} diff --git a/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/EffectiveNetworkSecurityRule.cs b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/EffectiveNetworkSecurityRule.cs new file mode 100644 index 000000000..e81b47e62 --- /dev/null +++ b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/EffectiveNetworkSecurityRule.cs @@ -0,0 +1,134 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.Network.Models +{ + using System.Linq; + + /// + /// Effective NetworkSecurityRules + /// + public partial class EffectiveNetworkSecurityRule + { + /// + /// Initializes a new instance of the EffectiveNetworkSecurityRule + /// class. + /// + public EffectiveNetworkSecurityRule() { } + + /// + /// Initializes a new instance of the EffectiveNetworkSecurityRule + /// class. + /// + /// Gets the name of the security rule specified by + /// the user (if created by the user) + /// Gets Network protocol this rule applies to. + /// Possible values include: 'Tcp', 'Udp', '*' + /// Gets source port or range + /// Gets destination port or + /// range + /// Gets source address + /// prefix + /// Gets destination address + /// prefix + /// Gets expanded source + /// address prefix + /// Gets expanded + /// destination address prefix + /// Gets network traffic is allowed or denied. + /// Possible values include: 'Allow', 'Deny' + /// Gets the priority of the rule + /// Gets the direction of the rule. Possible + /// values include: 'Inbound', 'Outbound' + public EffectiveNetworkSecurityRule(string name = default(string), string protocol = default(string), string sourcePortRange = default(string), string destinationPortRange = default(string), string sourceAddressPrefix = default(string), string destinationAddressPrefix = default(string), System.Collections.Generic.IList expandedSourceAddressPrefix = default(System.Collections.Generic.IList), System.Collections.Generic.IList expandedDestinationAddressPrefix = default(System.Collections.Generic.IList), string access = default(string), int? priority = default(int?), string direction = default(string)) + { + Name = name; + Protocol = protocol; + SourcePortRange = sourcePortRange; + DestinationPortRange = destinationPortRange; + SourceAddressPrefix = sourceAddressPrefix; + DestinationAddressPrefix = destinationAddressPrefix; + ExpandedSourceAddressPrefix = expandedSourceAddressPrefix; + ExpandedDestinationAddressPrefix = expandedDestinationAddressPrefix; + Access = access; + Priority = priority; + Direction = direction; + } + + /// + /// Gets the name of the security rule specified by the user (if + /// created by the user) + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "name")] + public string Name { get; set; } + + /// + /// Gets Network protocol this rule applies to. Possible values + /// include: 'Tcp', 'Udp', '*' + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "protocol")] + public string Protocol { get; set; } + + /// + /// Gets source port or range + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "sourcePortRange")] + public string SourcePortRange { get; set; } + + /// + /// Gets destination port or range + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "destinationPortRange")] + public string DestinationPortRange { get; set; } + + /// + /// Gets source address prefix + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "sourceAddressPrefix")] + public string SourceAddressPrefix { get; set; } + + /// + /// Gets destination address prefix + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "destinationAddressPrefix")] + public string DestinationAddressPrefix { get; set; } + + /// + /// Gets expanded source address prefix + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "expandedSourceAddressPrefix")] + public System.Collections.Generic.IList ExpandedSourceAddressPrefix { get; set; } + + /// + /// Gets expanded destination address prefix + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "expandedDestinationAddressPrefix")] + public System.Collections.Generic.IList ExpandedDestinationAddressPrefix { get; set; } + + /// + /// Gets network traffic is allowed or denied. Possible values + /// include: 'Allow', 'Deny' + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "access")] + public string Access { get; set; } + + /// + /// Gets the priority of the rule + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "priority")] + public int? Priority { get; set; } + + /// + /// Gets the direction of the rule. Possible values include: + /// 'Inbound', 'Outbound' + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "direction")] + public string Direction { get; set; } + + } +} diff --git a/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/EffectiveRoute.cs b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/EffectiveRoute.cs new file mode 100644 index 000000000..05bdf7dc7 --- /dev/null +++ b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/EffectiveRoute.cs @@ -0,0 +1,92 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.Network.Models +{ + using System.Linq; + + /// + /// Effective Route + /// + public partial class EffectiveRoute + { + /// + /// Initializes a new instance of the EffectiveRoute class. + /// + public EffectiveRoute() { } + + /// + /// Initializes a new instance of the EffectiveRoute class. + /// + /// Gets the name of the user defined route. This + /// is optional. + /// Gets who created the route. Possible values + /// include: 'Unknown', 'User', 'VirtualNetworkGateway', + /// 'Default' + /// Gets value of effective route. Possible values + /// include: 'Active', 'Invalid' + /// Gets address prefixes of the effective + /// routes in CIDR notation. + /// Gets the IP address of the next hop + /// of the effective route + /// Gets or sets the type of Azure hop the + /// packet should be sent to. Possible values include: + /// 'VirtualNetworkGateway', 'VnetLocal', 'Internet', + /// 'VirtualAppliance', 'None' + public EffectiveRoute(string name = default(string), string source = default(string), string state = default(string), System.Collections.Generic.IList addressPrefix = default(System.Collections.Generic.IList), System.Collections.Generic.IList nextHopIpAddress = default(System.Collections.Generic.IList), string nextHopType = default(string)) + { + Name = name; + Source = source; + State = state; + AddressPrefix = addressPrefix; + NextHopIpAddress = nextHopIpAddress; + NextHopType = nextHopType; + } + + /// + /// Gets the name of the user defined route. This is optional. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "name")] + public string Name { get; set; } + + /// + /// Gets who created the route. Possible values include: 'Unknown', + /// 'User', 'VirtualNetworkGateway', 'Default' + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "source")] + public string Source { get; set; } + + /// + /// Gets value of effective route. Possible values include: 'Active', + /// 'Invalid' + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "state")] + public string State { get; set; } + + /// + /// Gets address prefixes of the effective routes in CIDR notation. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "addressPrefix")] + public System.Collections.Generic.IList AddressPrefix { get; set; } + + /// + /// Gets the IP address of the next hop of the effective route + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "nextHopIpAddress")] + public System.Collections.Generic.IList NextHopIpAddress { get; set; } + + /// + /// Gets or sets the type of Azure hop the packet should be sent to. + /// Possible values include: 'VirtualNetworkGateway', 'VnetLocal', + /// 'Internet', 'VirtualAppliance', 'None' + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "nextHopType")] + public string NextHopType { get; set; } + + } +} diff --git a/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/EffectiveRouteListResultInner.cs b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/EffectiveRouteListResultInner.cs new file mode 100644 index 000000000..abecb15c1 --- /dev/null +++ b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/EffectiveRouteListResultInner.cs @@ -0,0 +1,50 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.Network.Models +{ + using System.Linq; + + /// + /// Response for list effective route api servive call + /// + public partial class EffectiveRouteListResultInner + { + /// + /// Initializes a new instance of the EffectiveRouteListResultInner + /// class. + /// + public EffectiveRouteListResultInner() { } + + /// + /// Initializes a new instance of the EffectiveRouteListResultInner + /// class. + /// + /// Gets list of effective routes + /// Gets the URL to get the next set of + /// results. + public EffectiveRouteListResultInner(System.Collections.Generic.IList value = default(System.Collections.Generic.IList), string nextLink = default(string)) + { + Value = value; + NextLink = nextLink; + } + + /// + /// Gets list of effective routes + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "value")] + public System.Collections.Generic.IList Value { get; set; } + + /// + /// Gets the URL to get the next set of results. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "nextLink")] + public string NextLink { get; set; } + + } +} diff --git a/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/EffectiveRouteSource.cs b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/EffectiveRouteSource.cs new file mode 100644 index 000000000..ffe06b8cf --- /dev/null +++ b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/EffectiveRouteSource.cs @@ -0,0 +1,22 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.Network.Models +{ + + /// + /// Defines values for EffectiveRouteSource. + /// + public static class EffectiveRouteSource + { + public const string Unknown = "Unknown"; + public const string User = "User"; + public const string VirtualNetworkGateway = "VirtualNetworkGateway"; + public const string Default = "Default"; + } +} diff --git a/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/EffectiveRouteState.cs b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/EffectiveRouteState.cs new file mode 100644 index 000000000..17a15ba93 --- /dev/null +++ b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/EffectiveRouteState.cs @@ -0,0 +1,20 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.Network.Models +{ + + /// + /// Defines values for EffectiveRouteState. + /// + public static class EffectiveRouteState + { + public const string Active = "Active"; + public const string Invalid = "Invalid"; + } +} diff --git a/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/Error.cs b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/Error.cs new file mode 100644 index 000000000..83c7c1585 --- /dev/null +++ b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/Error.cs @@ -0,0 +1,58 @@ +// 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 0.17.0.0 +// 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 Error + { + /// + /// Initializes a new instance of the Error class. + /// + public Error() { } + + /// + /// Initializes a new instance of the Error class. + /// + public Error(string code = default(string), string message = default(string), string target = default(string), System.Collections.Generic.IList details = default(System.Collections.Generic.IList), string innerError = default(string)) + { + Code = code; + Message = message; + Target = target; + Details = details; + InnerError = innerError; + } + + /// + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "code")] + public string Code { get; set; } + + /// + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "message")] + public string Message { get; set; } + + /// + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "target")] + public string Target { get; set; } + + /// + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "details")] + public System.Collections.Generic.IList Details { get; set; } + + /// + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "innerError")] + public string InnerError { get; set; } + + } +} diff --git a/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/ErrorDetails.cs b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/ErrorDetails.cs new file mode 100644 index 000000000..b54e80516 --- /dev/null +++ b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/ErrorDetails.cs @@ -0,0 +1,46 @@ +// 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 0.17.0.0 +// 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 ErrorDetails + { + /// + /// Initializes a new instance of the ErrorDetails class. + /// + public ErrorDetails() { } + + /// + /// Initializes a new instance of the ErrorDetails class. + /// + public ErrorDetails(string code = default(string), string target = default(string), string message = default(string)) + { + Code = code; + Target = target; + Message = message; + } + + /// + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "code")] + public string Code { get; set; } + + /// + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "target")] + public string Target { get; set; } + + /// + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "message")] + public string Message { get; set; } + + } +} diff --git a/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/ExpressRouteCircuitArpTable.cs b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/ExpressRouteCircuitArpTable.cs new file mode 100644 index 000000000..80b057322 --- /dev/null +++ b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/ExpressRouteCircuitArpTable.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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.Network.Models +{ + using System.Linq; + + /// + /// The arp table associated with the ExpressRouteCircuit + /// + public partial class ExpressRouteCircuitArpTable + { + /// + /// Initializes a new instance of the ExpressRouteCircuitArpTable + /// class. + /// + public ExpressRouteCircuitArpTable() { } + + /// + /// Initializes a new instance of the ExpressRouteCircuitArpTable + /// class. + /// + /// Age. + /// Interface. + /// Gets ipAddress. + /// Gets macAddress. + public ExpressRouteCircuitArpTable(int? age = default(int?), string interfaceProperty = default(string), string ipAddress = default(string), string macAddress = default(string)) + { + Age = age; + InterfaceProperty = interfaceProperty; + IpAddress = ipAddress; + MacAddress = macAddress; + } + + /// + /// Gets or sets age. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "age")] + public int? Age { get; set; } + + /// + /// Gets or sets interface. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "interface")] + public string InterfaceProperty { get; set; } + + /// + /// Gets ipAddress. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "ipAddress")] + public string IpAddress { get; set; } + + /// + /// Gets macAddress. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "macAddress")] + public string MacAddress { get; set; } + + } +} diff --git a/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/ExpressRouteCircuitAuthorizationInner.cs b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/ExpressRouteCircuitAuthorizationInner.cs new file mode 100644 index 000000000..59ae2fc60 --- /dev/null +++ b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/ExpressRouteCircuitAuthorizationInner.cs @@ -0,0 +1,86 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.Network.Models +{ + using System.Linq; + + /// + /// Authorization in a ExpressRouteCircuit resource + /// + [Microsoft.Rest.Serialization.JsonTransformation] + public partial class ExpressRouteCircuitAuthorizationInner : Microsoft.Rest.Azure.SubResource + { + /// + /// Initializes a new instance of the + /// ExpressRouteCircuitAuthorizationInner class. + /// + public ExpressRouteCircuitAuthorizationInner() { } + + /// + /// Initializes a new instance of the + /// ExpressRouteCircuitAuthorizationInner class. + /// + /// Gets or sets the authorization + /// key + /// Gets or sets + /// AuthorizationUseStatus. Possible values include: 'Available', + /// 'InUse' + /// Gets provisioning state of the + /// PublicIP resource Updating/Deleting/Failed + /// Gets name of the resource that is unique within + /// a resource group. This name can be used to access the + /// resource + /// A unique read-only string that changes whenever + /// the resource is updated + public ExpressRouteCircuitAuthorizationInner(string id = default(string), string authorizationKey = default(string), string authorizationUseStatus = default(string), string provisioningState = default(string), string name = default(string), string etag = default(string)) + : base(id) + { + AuthorizationKey = authorizationKey; + AuthorizationUseStatus = authorizationUseStatus; + ProvisioningState = provisioningState; + Name = name; + Etag = etag; + } + + /// + /// Gets or sets the authorization key + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.authorizationKey")] + public string AuthorizationKey { get; set; } + + /// + /// Gets or sets AuthorizationUseStatus. Possible values include: + /// 'Available', 'InUse' + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.authorizationUseStatus")] + public string AuthorizationUseStatus { get; set; } + + /// + /// Gets provisioning state of the PublicIP resource + /// Updating/Deleting/Failed + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.provisioningState")] + public string ProvisioningState { get; set; } + + /// + /// Gets name of the resource that is unique within a resource group. + /// This name can be used to access the resource + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "name")] + public string Name { get; set; } + + /// + /// Gets or sets a unique read-only string that changes whenever the + /// resource is updated + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "etag")] + public string Etag { get; set; } + + } +} diff --git a/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/ExpressRouteCircuitInner.cs b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/ExpressRouteCircuitInner.cs new file mode 100644 index 000000000..dffc54bbc --- /dev/null +++ b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/ExpressRouteCircuitInner.cs @@ -0,0 +1,144 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.Network.Models +{ + using System.Linq; + + /// + /// ExpressRouteCircuit resource + /// + [Microsoft.Rest.Serialization.JsonTransformation] + public partial class ExpressRouteCircuitInner : Microsoft.Rest.Azure.Resource + { + /// + /// Initializes a new instance of the ExpressRouteCircuitInner class. + /// + public ExpressRouteCircuitInner() { } + + /// + /// Initializes a new instance of the ExpressRouteCircuitInner class. + /// + /// Gets or sets sku + /// allow classic + /// operations + /// Gets or sets + /// CircuitProvisioningState state of the resource + /// Gets or sets + /// ServiceProviderProvisioningState state of the resource . Possible + /// values include: 'NotProvisioned', 'Provisioning', 'Provisioned', + /// 'Deprovisioning' + /// Gets or sets list of + /// authorizations + /// Gets or sets list of peerings + /// Gets or sets ServiceKey + /// Gets or sets + /// ServiceProviderNotes + /// Gets or sets + /// ServiceProviderProperties + /// Gets provisioning state of the + /// PublicIP resource Updating/Deleting/Failed + /// Gets or sets the GatewayManager + /// Etag + /// Gets a unique read-only string that changes + /// whenever the resource is updated + public ExpressRouteCircuitInner(string location = default(string), string id = default(string), string name = default(string), string type = default(string), System.Collections.Generic.IDictionary tags = default(System.Collections.Generic.IDictionary), ExpressRouteCircuitSku sku = default(ExpressRouteCircuitSku), bool? allowClassicOperations = default(bool?), string circuitProvisioningState = default(string), string serviceProviderProvisioningState = default(string), System.Collections.Generic.IList authorizations = default(System.Collections.Generic.IList), System.Collections.Generic.IList peerings = default(System.Collections.Generic.IList), string serviceKey = default(string), string serviceProviderNotes = default(string), ExpressRouteCircuitServiceProviderProperties serviceProviderProperties = default(ExpressRouteCircuitServiceProviderProperties), string provisioningState = default(string), string gatewayManagerEtag = default(string), string etag = default(string)) + : base(location, id, name, type, tags) + { + Sku = sku; + AllowClassicOperations = allowClassicOperations; + CircuitProvisioningState = circuitProvisioningState; + ServiceProviderProvisioningState = serviceProviderProvisioningState; + Authorizations = authorizations; + Peerings = peerings; + ServiceKey = serviceKey; + ServiceProviderNotes = serviceProviderNotes; + ServiceProviderProperties = serviceProviderProperties; + ProvisioningState = provisioningState; + GatewayManagerEtag = gatewayManagerEtag; + Etag = etag; + } + + /// + /// Gets or sets sku + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "sku")] + public ExpressRouteCircuitSku Sku { get; set; } + + /// + /// Gets or sets allow classic operations + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.allowClassicOperations")] + public bool? AllowClassicOperations { get; set; } + + /// + /// Gets or sets CircuitProvisioningState state of the resource + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.circuitProvisioningState")] + public string CircuitProvisioningState { get; set; } + + /// + /// Gets or sets ServiceProviderProvisioningState state of the + /// resource . Possible values include: 'NotProvisioned', + /// 'Provisioning', 'Provisioned', 'Deprovisioning' + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.serviceProviderProvisioningState")] + public string ServiceProviderProvisioningState { get; set; } + + /// + /// Gets or sets list of authorizations + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.authorizations")] + public System.Collections.Generic.IList Authorizations { get; set; } + + /// + /// Gets or sets list of peerings + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.peerings")] + public System.Collections.Generic.IList Peerings { get; set; } + + /// + /// Gets or sets ServiceKey + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.serviceKey")] + public string ServiceKey { get; set; } + + /// + /// Gets or sets ServiceProviderNotes + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.serviceProviderNotes")] + public string ServiceProviderNotes { get; set; } + + /// + /// Gets or sets ServiceProviderProperties + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.serviceProviderProperties")] + public ExpressRouteCircuitServiceProviderProperties ServiceProviderProperties { get; set; } + + /// + /// Gets provisioning state of the PublicIP resource + /// Updating/Deleting/Failed + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.provisioningState")] + public string ProvisioningState { get; set; } + + /// + /// Gets or sets the GatewayManager Etag + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.gatewayManagerEtag")] + public string GatewayManagerEtag { get; set; } + + /// + /// Gets a unique read-only string that changes whenever the resource + /// is updated + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "etag")] + public string Etag { get; set; } + + } +} diff --git a/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/ExpressRouteCircuitListResultInner.cs b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/ExpressRouteCircuitListResultInner.cs new file mode 100644 index 000000000..a6d84e0d5 --- /dev/null +++ b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/ExpressRouteCircuitListResultInner.cs @@ -0,0 +1,51 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.Network.Models +{ + using System.Linq; + + /// + /// Response for ListExpressRouteCircuit Api service call + /// + public partial class ExpressRouteCircuitListResultInner + { + /// + /// Initializes a new instance of the + /// ExpressRouteCircuitListResultInner class. + /// + public ExpressRouteCircuitListResultInner() { } + + /// + /// Initializes a new instance of the + /// ExpressRouteCircuitListResultInner class. + /// + /// Gets a list of ExpressRouteCircuits in a + /// resource group + /// Gets the URL to get the next set of + /// results. + public ExpressRouteCircuitListResultInner(System.Collections.Generic.IList value = default(System.Collections.Generic.IList), string nextLink = default(string)) + { + Value = value; + NextLink = nextLink; + } + + /// + /// Gets a list of ExpressRouteCircuits in a resource group + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "value")] + public System.Collections.Generic.IList Value { get; set; } + + /// + /// Gets the URL to get the next set of results. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "nextLink")] + public string NextLink { get; set; } + + } +} diff --git a/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/ExpressRouteCircuitPeeringAdvertisedPublicPrefixState.cs b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/ExpressRouteCircuitPeeringAdvertisedPublicPrefixState.cs new file mode 100644 index 000000000..081421390 --- /dev/null +++ b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/ExpressRouteCircuitPeeringAdvertisedPublicPrefixState.cs @@ -0,0 +1,23 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.Network.Models +{ + + /// + /// Defines values for + /// ExpressRouteCircuitPeeringAdvertisedPublicPrefixState. + /// + public static class ExpressRouteCircuitPeeringAdvertisedPublicPrefixState + { + public const string NotConfigured = "NotConfigured"; + public const string Configuring = "Configuring"; + public const string Configured = "Configured"; + public const string ValidationNeeded = "ValidationNeeded"; + } +} diff --git a/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/ExpressRouteCircuitPeeringConfig.cs b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/ExpressRouteCircuitPeeringConfig.cs new file mode 100644 index 000000000..a43565e39 --- /dev/null +++ b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/ExpressRouteCircuitPeeringConfig.cs @@ -0,0 +1,73 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.Network.Models +{ + using System.Linq; + + /// + /// Specfies the peering config + /// + public partial class ExpressRouteCircuitPeeringConfig + { + /// + /// Initializes a new instance of the ExpressRouteCircuitPeeringConfig + /// class. + /// + public ExpressRouteCircuitPeeringConfig() { } + + /// + /// Initializes a new instance of the ExpressRouteCircuitPeeringConfig + /// class. + /// + /// Gets or sets the reference + /// of AdvertisedPublicPrefixes + /// Gets or sets + /// AdvertisedPublicPrefixState of the Peering resource . Possible + /// values include: 'NotConfigured', 'Configuring', 'Configured', + /// 'ValidationNeeded' + /// Gets or Sets CustomerAsn of the + /// peering. + /// Gets or Sets RoutingRegistryName + /// of the config. + public ExpressRouteCircuitPeeringConfig(System.Collections.Generic.IList advertisedPublicPrefixes = default(System.Collections.Generic.IList), string advertisedPublicPrefixesState = default(string), int? customerASN = default(int?), string routingRegistryName = default(string)) + { + AdvertisedPublicPrefixes = advertisedPublicPrefixes; + AdvertisedPublicPrefixesState = advertisedPublicPrefixesState; + CustomerASN = customerASN; + RoutingRegistryName = routingRegistryName; + } + + /// + /// Gets or sets the reference of AdvertisedPublicPrefixes + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "advertisedPublicPrefixes")] + public System.Collections.Generic.IList AdvertisedPublicPrefixes { get; set; } + + /// + /// Gets or sets AdvertisedPublicPrefixState of the Peering resource . + /// Possible values include: 'NotConfigured', 'Configuring', + /// 'Configured', 'ValidationNeeded' + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "advertisedPublicPrefixesState")] + public string AdvertisedPublicPrefixesState { get; set; } + + /// + /// Gets or Sets CustomerAsn of the peering. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "customerASN")] + public int? CustomerASN { get; set; } + + /// + /// Gets or Sets RoutingRegistryName of the config. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "routingRegistryName")] + public string RoutingRegistryName { get; set; } + + } +} diff --git a/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/ExpressRouteCircuitPeeringInner.cs b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/ExpressRouteCircuitPeeringInner.cs new file mode 100644 index 000000000..182ac864c --- /dev/null +++ b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/ExpressRouteCircuitPeeringInner.cs @@ -0,0 +1,190 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.Network.Models +{ + using System.Linq; + + /// + /// Peering in a ExpressRouteCircuit resource + /// + [Microsoft.Rest.Serialization.JsonTransformation] + public partial class ExpressRouteCircuitPeeringInner : Microsoft.Rest.Azure.SubResource + { + /// + /// Initializes a new instance of the ExpressRouteCircuitPeeringInner + /// class. + /// + public ExpressRouteCircuitPeeringInner() { } + + /// + /// Initializes a new instance of the ExpressRouteCircuitPeeringInner + /// class. + /// + /// Gets or sets PeeringType. Possible + /// values include: 'AzurePublicPeering', 'AzurePrivatePeering', + /// 'MicrosoftPeering' + /// Gets or sets state of Peering. Possible values + /// include: 'Disabled', 'Enabled' + /// Gets or sets the azure ASN + /// Gets or sets the peer ASN + /// Gets or sets the primary + /// address prefix + /// Gets or sets the + /// secondary address prefix + /// Gets or sets the primary + /// port + /// Gets or sets the secondary + /// port + /// Gets or sets the shared key + /// Gets or sets the vlan id + /// Gets or sets the mircosoft + /// peering config + /// Gets or peering stats + /// Gets provisioning state of the + /// PublicIP resource Updating/Deleting/Failed + /// Gets or sets the GatewayManager + /// Etag + /// Gets whether the provider or the + /// customer last modified the peering + /// Gets name of the resource that is unique within + /// a resource group. This name can be used to access the + /// resource + /// A unique read-only string that changes whenever + /// the resource is updated + public ExpressRouteCircuitPeeringInner(string id = default(string), string peeringType = default(string), string state = default(string), int? azureASN = default(int?), int? peerASN = default(int?), string primaryPeerAddressPrefix = default(string), string secondaryPeerAddressPrefix = default(string), string primaryAzurePort = default(string), string secondaryAzurePort = default(string), string sharedKey = default(string), int? vlanId = default(int?), ExpressRouteCircuitPeeringConfig microsoftPeeringConfig = default(ExpressRouteCircuitPeeringConfig), ExpressRouteCircuitStatsInner stats = default(ExpressRouteCircuitStatsInner), string provisioningState = default(string), string gatewayManagerEtag = default(string), string lastModifiedBy = default(string), string name = default(string), string etag = default(string)) + : base(id) + { + PeeringType = peeringType; + State = state; + AzureASN = azureASN; + PeerASN = peerASN; + PrimaryPeerAddressPrefix = primaryPeerAddressPrefix; + SecondaryPeerAddressPrefix = secondaryPeerAddressPrefix; + PrimaryAzurePort = primaryAzurePort; + SecondaryAzurePort = secondaryAzurePort; + SharedKey = sharedKey; + VlanId = vlanId; + MicrosoftPeeringConfig = microsoftPeeringConfig; + Stats = stats; + ProvisioningState = provisioningState; + GatewayManagerEtag = gatewayManagerEtag; + LastModifiedBy = lastModifiedBy; + Name = name; + Etag = etag; + } + + /// + /// Gets or sets PeeringType. Possible values include: + /// 'AzurePublicPeering', 'AzurePrivatePeering', 'MicrosoftPeering' + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.peeringType")] + public string PeeringType { get; set; } + + /// + /// Gets or sets state of Peering. Possible values include: + /// 'Disabled', 'Enabled' + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.state")] + public string State { get; set; } + + /// + /// Gets or sets the azure ASN + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.azureASN")] + public int? AzureASN { get; set; } + + /// + /// Gets or sets the peer ASN + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.peerASN")] + public int? PeerASN { get; set; } + + /// + /// Gets or sets the primary address prefix + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.primaryPeerAddressPrefix")] + public string PrimaryPeerAddressPrefix { get; set; } + + /// + /// Gets or sets the secondary address prefix + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.secondaryPeerAddressPrefix")] + public string SecondaryPeerAddressPrefix { get; set; } + + /// + /// Gets or sets the primary port + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.primaryAzurePort")] + public string PrimaryAzurePort { get; set; } + + /// + /// Gets or sets the secondary port + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.secondaryAzurePort")] + public string SecondaryAzurePort { get; set; } + + /// + /// Gets or sets the shared key + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.sharedKey")] + public string SharedKey { get; set; } + + /// + /// Gets or sets the vlan id + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.vlanId")] + public int? VlanId { get; set; } + + /// + /// Gets or sets the mircosoft peering config + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.microsoftPeeringConfig")] + public ExpressRouteCircuitPeeringConfig MicrosoftPeeringConfig { get; set; } + + /// + /// Gets or peering stats + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.stats")] + public ExpressRouteCircuitStatsInner Stats { get; set; } + + /// + /// Gets provisioning state of the PublicIP resource + /// Updating/Deleting/Failed + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.provisioningState")] + public string ProvisioningState { get; set; } + + /// + /// Gets or sets the GatewayManager Etag + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.gatewayManagerEtag")] + public string GatewayManagerEtag { get; set; } + + /// + /// Gets whether the provider or the customer last modified the peering + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.lastModifiedBy")] + public string LastModifiedBy { get; set; } + + /// + /// Gets name of the resource that is unique within a resource group. + /// This name can be used to access the resource + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "name")] + public string Name { get; set; } + + /// + /// Gets or sets a unique read-only string that changes whenever the + /// resource is updated + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "etag")] + public string Etag { get; set; } + + } +} diff --git a/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/ExpressRouteCircuitPeeringListResultInner.cs b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/ExpressRouteCircuitPeeringListResultInner.cs new file mode 100644 index 000000000..fbeb1f451 --- /dev/null +++ b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/ExpressRouteCircuitPeeringListResultInner.cs @@ -0,0 +1,52 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.Network.Models +{ + using System.Linq; + + /// + /// Response for ListPeering Api service callRetrieves all Peerings that + /// belongs to an ExpressRouteCircuit + /// + public partial class ExpressRouteCircuitPeeringListResultInner + { + /// + /// Initializes a new instance of the + /// ExpressRouteCircuitPeeringListResultInner class. + /// + public ExpressRouteCircuitPeeringListResultInner() { } + + /// + /// Initializes a new instance of the + /// ExpressRouteCircuitPeeringListResultInner class. + /// + /// Gets the peerings in an express route + /// circuit + /// Gets the URL to get the next set of + /// results. + public ExpressRouteCircuitPeeringListResultInner(System.Collections.Generic.IList value = default(System.Collections.Generic.IList), string nextLink = default(string)) + { + Value = value; + NextLink = nextLink; + } + + /// + /// Gets the peerings in an express route circuit + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "value")] + public System.Collections.Generic.IList Value { get; set; } + + /// + /// Gets the URL to get the next set of results. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "nextLink")] + public string NextLink { get; set; } + + } +} diff --git a/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/ExpressRouteCircuitPeeringState.cs b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/ExpressRouteCircuitPeeringState.cs new file mode 100644 index 000000000..aaa83a36d --- /dev/null +++ b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/ExpressRouteCircuitPeeringState.cs @@ -0,0 +1,20 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.Network.Models +{ + + /// + /// Defines values for ExpressRouteCircuitPeeringState. + /// + public static class ExpressRouteCircuitPeeringState + { + public const string Disabled = "Disabled"; + public const string Enabled = "Enabled"; + } +} diff --git a/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/ExpressRouteCircuitPeeringType.cs b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/ExpressRouteCircuitPeeringType.cs new file mode 100644 index 000000000..1fd205803 --- /dev/null +++ b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/ExpressRouteCircuitPeeringType.cs @@ -0,0 +1,21 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.Network.Models +{ + + /// + /// Defines values for ExpressRouteCircuitPeeringType. + /// + public static class ExpressRouteCircuitPeeringType + { + public const string AzurePublicPeering = "AzurePublicPeering"; + public const string AzurePrivatePeering = "AzurePrivatePeering"; + public const string MicrosoftPeering = "MicrosoftPeering"; + } +} diff --git a/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/ExpressRouteCircuitRoutesTable.cs b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/ExpressRouteCircuitRoutesTable.cs new file mode 100644 index 000000000..d6aa3b5ff --- /dev/null +++ b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/ExpressRouteCircuitRoutesTable.cs @@ -0,0 +1,73 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.Network.Models +{ + using System.Linq; + + /// + /// The routes table associated with the ExpressRouteCircuit + /// + public partial class ExpressRouteCircuitRoutesTable + { + /// + /// Initializes a new instance of the ExpressRouteCircuitRoutesTable + /// class. + /// + public ExpressRouteCircuitRoutesTable() { } + + /// + /// Initializes a new instance of the ExpressRouteCircuitRoutesTable + /// class. + /// + /// network. + /// nextHop + /// locPrf. + /// weight. + /// path . + public ExpressRouteCircuitRoutesTable(string network = default(string), string nextHop = default(string), string locPrf = default(string), int? weight = default(int?), string path = default(string)) + { + Network = network; + NextHop = nextHop; + LocPrf = locPrf; + Weight = weight; + Path = path; + } + + /// + /// Gets or sets network. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "network")] + public string Network { get; set; } + + /// + /// Gets or sets nextHop + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "nextHop")] + public string NextHop { get; set; } + + /// + /// Gets or sets locPrf. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "locPrf")] + public string LocPrf { get; set; } + + /// + /// Gets or sets weight. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "weight")] + public int? Weight { get; set; } + + /// + /// Gets or sets path . + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "path")] + public string Path { get; set; } + + } +} diff --git a/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/ExpressRouteCircuitRoutesTableSummary.cs b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/ExpressRouteCircuitRoutesTableSummary.cs new file mode 100644 index 000000000..50f26c91a --- /dev/null +++ b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/ExpressRouteCircuitRoutesTableSummary.cs @@ -0,0 +1,80 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.Network.Models +{ + using System.Linq; + + /// + /// The routes table associated with the ExpressRouteCircuit + /// + public partial class ExpressRouteCircuitRoutesTableSummary + { + /// + /// Initializes a new instance of the + /// ExpressRouteCircuitRoutesTableSummary class. + /// + public ExpressRouteCircuitRoutesTableSummary() { } + + /// + /// Initializes a new instance of the + /// ExpressRouteCircuitRoutesTableSummary class. + /// + /// Neighbor. + /// BGP version number spoken to the neighbor. + /// Autonomous system number. + /// The length of time that the BGP session has + /// been in the Established state, or the current status if not in + /// the Established state. + /// Current state of the BGP session, and + /// the number of prefixes that have been received from a neighbor or + /// peer group. + public ExpressRouteCircuitRoutesTableSummary(string neighbor = default(string), int? v = default(int?), int? asProperty = default(int?), string upDown = default(string), string statePfxRcd = default(string)) + { + Neighbor = neighbor; + V = v; + AsProperty = asProperty; + UpDown = upDown; + StatePfxRcd = statePfxRcd; + } + + /// + /// Gets or sets neighbor. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "neighbor")] + public string Neighbor { get; set; } + + /// + /// Gets or sets BGP version number spoken to the neighbor. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "v")] + public int? V { get; set; } + + /// + /// Gets or sets autonomous system number. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "as")] + public int? AsProperty { get; set; } + + /// + /// Gets or sets the length of time that the BGP session has been in + /// the Established state, or the current status if not in the + /// Established state. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "upDown")] + public string UpDown { get; set; } + + /// + /// Gets or sets current state of the BGP session, and the number of + /// prefixes that have been received from a neighbor or peer group. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "statePfxRcd")] + public string StatePfxRcd { get; set; } + + } +} diff --git a/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/ExpressRouteCircuitServiceProviderProperties.cs b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/ExpressRouteCircuitServiceProviderProperties.cs new file mode 100644 index 000000000..80df69ef1 --- /dev/null +++ b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/ExpressRouteCircuitServiceProviderProperties.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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.Network.Models +{ + using System.Linq; + + /// + /// Contains ServiceProviderProperties in an ExpressRouteCircuit + /// + public partial class ExpressRouteCircuitServiceProviderProperties + { + /// + /// Initializes a new instance of the + /// ExpressRouteCircuitServiceProviderProperties class. + /// + public ExpressRouteCircuitServiceProviderProperties() { } + + /// + /// Initializes a new instance of the + /// ExpressRouteCircuitServiceProviderProperties class. + /// + /// Gets or sets + /// serviceProviderName. + /// Gets or sets peering + /// location. + /// Gets or sets BandwidthInMbps. + public ExpressRouteCircuitServiceProviderProperties(string serviceProviderName = default(string), string peeringLocation = default(string), int? bandwidthInMbps = default(int?)) + { + ServiceProviderName = serviceProviderName; + PeeringLocation = peeringLocation; + BandwidthInMbps = bandwidthInMbps; + } + + /// + /// Gets or sets serviceProviderName. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "serviceProviderName")] + public string ServiceProviderName { get; set; } + + /// + /// Gets or sets peering location. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "peeringLocation")] + public string PeeringLocation { get; set; } + + /// + /// Gets or sets BandwidthInMbps. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "bandwidthInMbps")] + public int? BandwidthInMbps { get; set; } + + } +} diff --git a/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/ExpressRouteCircuitSku.cs b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/ExpressRouteCircuitSku.cs new file mode 100644 index 000000000..4ffbd24c8 --- /dev/null +++ b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/ExpressRouteCircuitSku.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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.Network.Models +{ + using System.Linq; + + /// + /// Contains sku in an ExpressRouteCircuit + /// + public partial class ExpressRouteCircuitSku + { + /// + /// Initializes a new instance of the ExpressRouteCircuitSku class. + /// + public ExpressRouteCircuitSku() { } + + /// + /// Initializes a new instance of the ExpressRouteCircuitSku class. + /// + /// Gets or sets name of the sku. + /// Gets or sets tier of the sku. Possible values + /// include: 'Standard', 'Premium' + /// Gets or sets family of the sku. Possible + /// values include: 'UnlimitedData', 'MeteredData' + public ExpressRouteCircuitSku(string name = default(string), string tier = default(string), string family = default(string)) + { + Name = name; + Tier = tier; + Family = family; + } + + /// + /// Gets or sets name of the sku. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "name")] + public string Name { get; set; } + + /// + /// Gets or sets tier of the sku. Possible values include: 'Standard', + /// 'Premium' + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "tier")] + public string Tier { get; set; } + + /// + /// Gets or sets family of the sku. Possible values include: + /// 'UnlimitedData', 'MeteredData' + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "family")] + public string Family { get; set; } + + } +} diff --git a/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/ExpressRouteCircuitSkuFamily.cs b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/ExpressRouteCircuitSkuFamily.cs new file mode 100644 index 000000000..2d76ac674 --- /dev/null +++ b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/ExpressRouteCircuitSkuFamily.cs @@ -0,0 +1,20 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.Network.Models +{ + + /// + /// Defines values for ExpressRouteCircuitSkuFamily. + /// + public static class ExpressRouteCircuitSkuFamily + { + public const string UnlimitedData = "UnlimitedData"; + public const string MeteredData = "MeteredData"; + } +} diff --git a/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/ExpressRouteCircuitSkuTier.cs b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/ExpressRouteCircuitSkuTier.cs new file mode 100644 index 000000000..0c32ebcf3 --- /dev/null +++ b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/ExpressRouteCircuitSkuTier.cs @@ -0,0 +1,20 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.Network.Models +{ + + /// + /// Defines values for ExpressRouteCircuitSkuTier. + /// + public static class ExpressRouteCircuitSkuTier + { + public const string Standard = "Standard"; + public const string Premium = "Premium"; + } +} diff --git a/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/ExpressRouteCircuitStatsInner.cs b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/ExpressRouteCircuitStatsInner.cs new file mode 100644 index 000000000..d5d3c3cae --- /dev/null +++ b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/ExpressRouteCircuitStatsInner.cs @@ -0,0 +1,66 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.Network.Models +{ + using System.Linq; + + /// + /// Contains Stats associated with the peering + /// + public partial class ExpressRouteCircuitStatsInner + { + /// + /// Initializes a new instance of the ExpressRouteCircuitStatsInner + /// class. + /// + public ExpressRouteCircuitStatsInner() { } + + /// + /// Initializes a new instance of the ExpressRouteCircuitStatsInner + /// class. + /// + /// Gets BytesIn of the peering. + /// Gets BytesOut of the peering. + /// Gets BytesIn of the peering. + /// Gets BytesOut of the + /// peering. + public ExpressRouteCircuitStatsInner(long? primarybytesIn = default(long?), long? primarybytesOut = default(long?), long? secondarybytesIn = default(long?), long? secondarybytesOut = default(long?)) + { + PrimarybytesIn = primarybytesIn; + PrimarybytesOut = primarybytesOut; + SecondarybytesIn = secondarybytesIn; + SecondarybytesOut = secondarybytesOut; + } + + /// + /// Gets BytesIn of the peering. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "primarybytesIn")] + public long? PrimarybytesIn { get; set; } + + /// + /// Gets BytesOut of the peering. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "primarybytesOut")] + public long? PrimarybytesOut { get; set; } + + /// + /// Gets BytesIn of the peering. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "secondarybytesIn")] + public long? SecondarybytesIn { get; set; } + + /// + /// Gets BytesOut of the peering. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "secondarybytesOut")] + public long? SecondarybytesOut { get; set; } + + } +} diff --git a/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/ExpressRouteCircuitsArpTableListResultInner.cs b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/ExpressRouteCircuitsArpTableListResultInner.cs new file mode 100644 index 000000000..5e98f24a1 --- /dev/null +++ b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/ExpressRouteCircuitsArpTableListResultInner.cs @@ -0,0 +1,51 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.Network.Models +{ + using System.Linq; + + /// + /// Response for ListArpTable associated with the Express Route Circuits + /// Api + /// + public partial class ExpressRouteCircuitsArpTableListResultInner + { + /// + /// Initializes a new instance of the + /// ExpressRouteCircuitsArpTableListResultInner class. + /// + public ExpressRouteCircuitsArpTableListResultInner() { } + + /// + /// Initializes a new instance of the + /// ExpressRouteCircuitsArpTableListResultInner class. + /// + /// Gets List of ArpTable + /// Gets the URL to get the next set of + /// results. + public ExpressRouteCircuitsArpTableListResultInner(System.Collections.Generic.IList value = default(System.Collections.Generic.IList), string nextLink = default(string)) + { + Value = value; + NextLink = nextLink; + } + + /// + /// Gets List of ArpTable + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "value")] + public System.Collections.Generic.IList Value { get; set; } + + /// + /// Gets the URL to get the next set of results. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "nextLink")] + public string NextLink { get; set; } + + } +} diff --git a/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/ExpressRouteCircuitsRoutesTableListResultInner.cs b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/ExpressRouteCircuitsRoutesTableListResultInner.cs new file mode 100644 index 000000000..965de4d00 --- /dev/null +++ b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/ExpressRouteCircuitsRoutesTableListResultInner.cs @@ -0,0 +1,51 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.Network.Models +{ + using System.Linq; + + /// + /// Response for ListRoutesTable associated with the Express Route + /// Circuits Api + /// + public partial class ExpressRouteCircuitsRoutesTableListResultInner + { + /// + /// Initializes a new instance of the + /// ExpressRouteCircuitsRoutesTableListResultInner class. + /// + public ExpressRouteCircuitsRoutesTableListResultInner() { } + + /// + /// Initializes a new instance of the + /// ExpressRouteCircuitsRoutesTableListResultInner class. + /// + /// Gets List of RoutesTable + /// Gets the URL to get the next set of + /// results. + public ExpressRouteCircuitsRoutesTableListResultInner(System.Collections.Generic.IList value = default(System.Collections.Generic.IList), string nextLink = default(string)) + { + Value = value; + NextLink = nextLink; + } + + /// + /// Gets List of RoutesTable + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "value")] + public System.Collections.Generic.IList Value { get; set; } + + /// + /// Gets the URL to get the next set of results. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "nextLink")] + public string NextLink { get; set; } + + } +} diff --git a/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/ExpressRouteCircuitsRoutesTableSummaryListResultInner.cs b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/ExpressRouteCircuitsRoutesTableSummaryListResultInner.cs new file mode 100644 index 000000000..4d23cfded --- /dev/null +++ b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/ExpressRouteCircuitsRoutesTableSummaryListResultInner.cs @@ -0,0 +1,51 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.Network.Models +{ + using System.Linq; + + /// + /// Response for ListRoutesTable associated with the Express Route + /// Circuits Api + /// + public partial class ExpressRouteCircuitsRoutesTableSummaryListResultInner + { + /// + /// Initializes a new instance of the + /// ExpressRouteCircuitsRoutesTableSummaryListResultInner class. + /// + public ExpressRouteCircuitsRoutesTableSummaryListResultInner() { } + + /// + /// Initializes a new instance of the + /// ExpressRouteCircuitsRoutesTableSummaryListResultInner class. + /// + /// Gets List of RoutesTable + /// Gets the URL to get the next set of + /// results. + public ExpressRouteCircuitsRoutesTableSummaryListResultInner(System.Collections.Generic.IList value = default(System.Collections.Generic.IList), string nextLink = default(string)) + { + Value = value; + NextLink = nextLink; + } + + /// + /// Gets List of RoutesTable + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "value")] + public System.Collections.Generic.IList Value { get; set; } + + /// + /// Gets the URL to get the next set of results. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "nextLink")] + public string NextLink { get; set; } + + } +} diff --git a/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/ExpressRouteServiceProviderBandwidthsOffered.cs b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/ExpressRouteServiceProviderBandwidthsOffered.cs new file mode 100644 index 000000000..a449e771f --- /dev/null +++ b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/ExpressRouteServiceProviderBandwidthsOffered.cs @@ -0,0 +1,49 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.Network.Models +{ + using System.Linq; + + /// + /// Contains Bandwidths offered in ExpressRouteServiceProviders + /// + public partial class ExpressRouteServiceProviderBandwidthsOffered + { + /// + /// Initializes a new instance of the + /// ExpressRouteServiceProviderBandwidthsOffered class. + /// + public ExpressRouteServiceProviderBandwidthsOffered() { } + + /// + /// Initializes a new instance of the + /// ExpressRouteServiceProviderBandwidthsOffered class. + /// + /// Gets the OfferName + /// Gets the ValueInMbps. + public ExpressRouteServiceProviderBandwidthsOffered(string offerName = default(string), int? valueInMbps = default(int?)) + { + OfferName = offerName; + ValueInMbps = valueInMbps; + } + + /// + /// Gets the OfferName + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "offerName")] + public string OfferName { get; set; } + + /// + /// Gets the ValueInMbps. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "valueInMbps")] + public int? ValueInMbps { get; set; } + + } +} diff --git a/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/ExpressRouteServiceProviderInner.cs b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/ExpressRouteServiceProviderInner.cs new file mode 100644 index 000000000..90e14bbb7 --- /dev/null +++ b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/ExpressRouteServiceProviderInner.cs @@ -0,0 +1,61 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.Network.Models +{ + using System.Linq; + + /// + /// ExpressRouteResourceProvider object + /// + [Microsoft.Rest.Serialization.JsonTransformation] + public partial class ExpressRouteServiceProviderInner : Microsoft.Rest.Azure.Resource + { + /// + /// Initializes a new instance of the ExpressRouteServiceProviderInner + /// class. + /// + public ExpressRouteServiceProviderInner() { } + + /// + /// Initializes a new instance of the ExpressRouteServiceProviderInner + /// class. + /// + /// Gets or list of peering + /// locations + /// Gets or bandwidths offered + /// Gets provisioning state of the + /// resource + public ExpressRouteServiceProviderInner(string location = default(string), string id = default(string), string name = default(string), string type = default(string), System.Collections.Generic.IDictionary tags = default(System.Collections.Generic.IDictionary), System.Collections.Generic.IList peeringLocations = default(System.Collections.Generic.IList), System.Collections.Generic.IList bandwidthsOffered = default(System.Collections.Generic.IList), string provisioningState = default(string)) + : base(location, id, name, type, tags) + { + PeeringLocations = peeringLocations; + BandwidthsOffered = bandwidthsOffered; + ProvisioningState = provisioningState; + } + + /// + /// Gets or list of peering locations + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.peeringLocations")] + public System.Collections.Generic.IList PeeringLocations { get; set; } + + /// + /// Gets or bandwidths offered + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.bandwidthsOffered")] + public System.Collections.Generic.IList BandwidthsOffered { get; set; } + + /// + /// Gets provisioning state of the resource + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.provisioningState")] + public string ProvisioningState { get; set; } + + } +} diff --git a/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/ExpressRouteServiceProviderListResultInner.cs b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/ExpressRouteServiceProviderListResultInner.cs new file mode 100644 index 000000000..a17cabfee --- /dev/null +++ b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/ExpressRouteServiceProviderListResultInner.cs @@ -0,0 +1,51 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.Network.Models +{ + using System.Linq; + + /// + /// Response for ListExpressRouteServiceProvider Api service call + /// + public partial class ExpressRouteServiceProviderListResultInner + { + /// + /// Initializes a new instance of the + /// ExpressRouteServiceProviderListResultInner class. + /// + public ExpressRouteServiceProviderListResultInner() { } + + /// + /// Initializes a new instance of the + /// ExpressRouteServiceProviderListResultInner class. + /// + /// Gets List of + /// ExpressRouteResourceProvider + /// Gets the URL to get the next set of + /// results. + public ExpressRouteServiceProviderListResultInner(System.Collections.Generic.IList value = default(System.Collections.Generic.IList), string nextLink = default(string)) + { + Value = value; + NextLink = nextLink; + } + + /// + /// Gets List of ExpressRouteResourceProvider + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "value")] + public System.Collections.Generic.IList Value { get; set; } + + /// + /// Gets the URL to get the next set of results. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "nextLink")] + public string NextLink { get; set; } + + } +} diff --git a/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/FrontendIPConfigurationInner.cs b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/FrontendIPConfigurationInner.cs new file mode 100644 index 000000000..23aee3ac1 --- /dev/null +++ b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/FrontendIPConfigurationInner.cs @@ -0,0 +1,140 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.Network.Models +{ + using System.Linq; + + /// + /// Frontend IP address of the load balancer + /// + [Microsoft.Rest.Serialization.JsonTransformation] + public partial class FrontendIPConfigurationInner : Microsoft.Rest.Azure.SubResource + { + /// + /// Initializes a new instance of the FrontendIPConfigurationInner + /// class. + /// + public FrontendIPConfigurationInner() { } + + /// + /// Initializes a new instance of the FrontendIPConfigurationInner + /// class. + /// + /// Read only. Inbound rules URIs that + /// use this frontend IP + /// Read only. Inbound pools URIs that + /// use this frontend IP + /// Read only. Outbound rules URIs that + /// use this frontend IP + /// Gets Load Balancing rules URIs + /// that use this frontend IP + /// Gets or sets the privateIPAddress + /// of the IP Configuration + /// Gets or sets PrivateIP + /// allocation method. Possible values include: 'Static', + /// 'Dynamic' + /// Gets or sets the reference of the subnet + /// resource + /// Gets or sets the reference of the + /// PublicIP resource + /// Gets provisioning state of the + /// PublicIP resource Updating/Deleting/Failed + /// Gets name of the resource that is unique within + /// a resource group. This name can be used to access the + /// resource + /// A unique read-only string that changes whenever + /// the resource is updated + public FrontendIPConfigurationInner(string id = default(string), System.Collections.Generic.IList inboundNatRules = default(System.Collections.Generic.IList), System.Collections.Generic.IList inboundNatPools = default(System.Collections.Generic.IList), System.Collections.Generic.IList outboundNatRules = default(System.Collections.Generic.IList), System.Collections.Generic.IList loadBalancingRules = default(System.Collections.Generic.IList), string privateIPAddress = default(string), string privateIPAllocationMethod = default(string), SubnetInner subnet = default(SubnetInner), PublicIPAddressInner publicIPAddress = default(PublicIPAddressInner), string provisioningState = default(string), string name = default(string), string etag = default(string)) + : base(id) + { + InboundNatRules = inboundNatRules; + InboundNatPools = inboundNatPools; + OutboundNatRules = outboundNatRules; + LoadBalancingRules = loadBalancingRules; + PrivateIPAddress = privateIPAddress; + PrivateIPAllocationMethod = privateIPAllocationMethod; + Subnet = subnet; + PublicIPAddress = publicIPAddress; + ProvisioningState = provisioningState; + Name = name; + Etag = etag; + } + + /// + /// Gets read only. Inbound rules URIs that use this frontend IP + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.inboundNatRules")] + public System.Collections.Generic.IList InboundNatRules { get; private set; } + + /// + /// Gets read only. Inbound pools URIs that use this frontend IP + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.inboundNatPools")] + public System.Collections.Generic.IList InboundNatPools { get; private set; } + + /// + /// Gets read only. Outbound rules URIs that use this frontend IP + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.outboundNatRules")] + public System.Collections.Generic.IList OutboundNatRules { get; private set; } + + /// + /// Gets Load Balancing rules URIs that use this frontend IP + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.loadBalancingRules")] + public System.Collections.Generic.IList LoadBalancingRules { get; private set; } + + /// + /// Gets or sets the privateIPAddress of the IP Configuration + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.privateIPAddress")] + public string PrivateIPAddress { get; set; } + + /// + /// Gets or sets PrivateIP allocation method. Possible values include: + /// 'Static', 'Dynamic' + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.privateIPAllocationMethod")] + public string PrivateIPAllocationMethod { get; set; } + + /// + /// Gets or sets the reference of the subnet resource + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.subnet")] + public SubnetInner Subnet { get; set; } + + /// + /// Gets or sets the reference of the PublicIP resource + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.publicIPAddress")] + public PublicIPAddressInner PublicIPAddress { get; set; } + + /// + /// Gets provisioning state of the PublicIP resource + /// Updating/Deleting/Failed + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.provisioningState")] + public string ProvisioningState { get; set; } + + /// + /// Gets name of the resource that is unique within a resource group. + /// This name can be used to access the resource + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "name")] + public string Name { get; set; } + + /// + /// Gets or sets a unique read-only string that changes whenever the + /// resource is updated + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "etag")] + public string Etag { get; set; } + + } +} diff --git a/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/IPAllocationMethod.cs b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/IPAllocationMethod.cs new file mode 100644 index 000000000..726112605 --- /dev/null +++ b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/IPAllocationMethod.cs @@ -0,0 +1,20 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.Network.Models +{ + + /// + /// Defines values for IPAllocationMethod. + /// + public static class IPAllocationMethod + { + public const string Static = "Static"; + public const string Dynamic = "Dynamic"; + } +} diff --git a/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/IPConfigurationInner.cs b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/IPConfigurationInner.cs new file mode 100644 index 000000000..e762801a4 --- /dev/null +++ b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/IPConfigurationInner.cs @@ -0,0 +1,102 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.Network.Models +{ + using System.Linq; + + /// + /// IPConfiguration + /// + [Microsoft.Rest.Serialization.JsonTransformation] + public partial class IPConfigurationInner : Microsoft.Rest.Azure.SubResource + { + /// + /// Initializes a new instance of the IPConfigurationInner class. + /// + public IPConfigurationInner() { } + + /// + /// Initializes a new instance of the IPConfigurationInner class. + /// + /// Gets or sets the privateIPAddress + /// of the IP Configuration + /// Gets or sets PrivateIP + /// allocation method. Possible values include: 'Static', + /// 'Dynamic' + /// Gets or sets the reference of the subnet + /// resource + /// Gets or sets the reference of the + /// PublicIP resource + /// Gets provisioning state of the + /// PublicIP resource Updating/Deleting/Failed + /// Gets name of the resource that is unique within + /// a resource group. This name can be used to access the + /// resource + /// A unique read-only string that changes whenever + /// the resource is updated + public IPConfigurationInner(string id = default(string), string privateIPAddress = default(string), string privateIPAllocationMethod = default(string), SubnetInner subnet = default(SubnetInner), PublicIPAddressInner publicIPAddress = default(PublicIPAddressInner), string provisioningState = default(string), string name = default(string), string etag = default(string)) + : base(id) + { + PrivateIPAddress = privateIPAddress; + PrivateIPAllocationMethod = privateIPAllocationMethod; + Subnet = subnet; + PublicIPAddress = publicIPAddress; + ProvisioningState = provisioningState; + Name = name; + Etag = etag; + } + + /// + /// Gets or sets the privateIPAddress of the IP Configuration + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.privateIPAddress")] + public string PrivateIPAddress { get; set; } + + /// + /// Gets or sets PrivateIP allocation method. Possible values include: + /// 'Static', 'Dynamic' + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.privateIPAllocationMethod")] + public string PrivateIPAllocationMethod { get; set; } + + /// + /// Gets or sets the reference of the subnet resource + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.subnet")] + public SubnetInner Subnet { get; set; } + + /// + /// Gets or sets the reference of the PublicIP resource + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.publicIPAddress")] + public PublicIPAddressInner PublicIPAddress { get; set; } + + /// + /// Gets provisioning state of the PublicIP resource + /// Updating/Deleting/Failed + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.provisioningState")] + public string ProvisioningState { get; set; } + + /// + /// Gets name of the resource that is unique within a resource group. + /// This name can be used to access the resource + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "name")] + public string Name { get; set; } + + /// + /// Gets or sets a unique read-only string that changes whenever the + /// resource is updated + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "etag")] + public string Etag { get; set; } + + } +} diff --git a/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/IPVersion.cs b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/IPVersion.cs new file mode 100644 index 000000000..675411474 --- /dev/null +++ b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/IPVersion.cs @@ -0,0 +1,20 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.Network.Models +{ + + /// + /// Defines values for IPVersion. + /// + public static class IPVersion + { + public const string IPv4 = "IPv4"; + public const string IPv6 = "IPv6"; + } +} diff --git a/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/InboundNatPoolInner.cs b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/InboundNatPoolInner.cs new file mode 100644 index 000000000..31d1ed224 --- /dev/null +++ b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/InboundNatPoolInner.cs @@ -0,0 +1,151 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.Network.Models +{ + using System.Linq; + + /// + /// Inbound NAT pool of the loadbalancer + /// + [Microsoft.Rest.Serialization.JsonTransformation] + public partial class InboundNatPoolInner : Microsoft.Rest.Azure.SubResource + { + /// + /// Initializes a new instance of the InboundNatPoolInner class. + /// + public InboundNatPoolInner() { } + + /// + /// Initializes a new instance of the InboundNatPoolInner class. + /// + /// Gets or sets the transport potocol for the + /// endpoint. Possible values are Udp or Tcp. Possible values + /// include: 'Udp', 'Tcp' + /// Gets or sets the starting + /// port range for the NAT pool. You can spcify any port number you + /// choose, but the port numbers specified for each role in the + /// service must be unique. Possible values range between 1 and + /// 65535, inclusive + /// Gets or sets the ending port + /// range for the NAT pool. You can spcify any port number you + /// choose, but the port numbers specified for each role in the + /// service must be unique. Possible values range between 1 and + /// 65535, inclusive + /// Gets or sets a port used for internal + /// connections on the endpoint. The localPort attribute maps the + /// eternal port of the endpoint to an internal port on a role. This + /// is useful in scenarios where a role must communicate to an + /// internal compotnent on a port that is different from the one that + /// is exposed externally. If not specified, the value of localPort + /// is the same as the port attribute. Set the value of localPort to + /// '*' to automatically assign an unallocated port that is + /// discoverable using the runtime API + /// Gets or sets a reference to + /// frontend IP Addresses + /// Gets provisioning state of the + /// PublicIP resource Updating/Deleting/Failed + /// Gets name of the resource that is unique within + /// a resource group. This name can be used to access the + /// resource + /// A unique read-only string that changes whenever + /// the resource is updated + public InboundNatPoolInner(string protocol, int frontendPortRangeStart, int frontendPortRangeEnd, int backendPort, string id = default(string), Microsoft.Rest.Azure.SubResource frontendIPConfiguration = default(Microsoft.Rest.Azure.SubResource), string provisioningState = default(string), string name = default(string), string etag = default(string)) + : base(id) + { + FrontendIPConfiguration = frontendIPConfiguration; + Protocol = protocol; + FrontendPortRangeStart = frontendPortRangeStart; + FrontendPortRangeEnd = frontendPortRangeEnd; + BackendPort = backendPort; + ProvisioningState = provisioningState; + Name = name; + Etag = etag; + } + + /// + /// Gets or sets a reference to frontend IP Addresses + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.frontendIPConfiguration")] + public Microsoft.Rest.Azure.SubResource FrontendIPConfiguration { get; set; } + + /// + /// Gets or sets the transport potocol for the endpoint. Possible + /// values are Udp or Tcp. Possible values include: 'Udp', 'Tcp' + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.protocol")] + public string Protocol { get; set; } + + /// + /// Gets or sets the starting port range for the NAT pool. You can + /// spcify any port number you choose, but the port numbers specified + /// for each role in the service must be unique. Possible values + /// range between 1 and 65535, inclusive + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.frontendPortRangeStart")] + public int FrontendPortRangeStart { get; set; } + + /// + /// Gets or sets the ending port range for the NAT pool. You can + /// spcify any port number you choose, but the port numbers specified + /// for each role in the service must be unique. Possible values + /// range between 1 and 65535, inclusive + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.frontendPortRangeEnd")] + public int FrontendPortRangeEnd { get; set; } + + /// + /// Gets or sets a port used for internal connections on the endpoint. + /// The localPort attribute maps the eternal port of the endpoint to + /// an internal port on a role. This is useful in scenarios where a + /// role must communicate to an internal compotnent on a port that is + /// different from the one that is exposed externally. If not + /// specified, the value of localPort is the same as the port + /// attribute. Set the value of localPort to '*' to automatically + /// assign an unallocated port that is discoverable using the runtime + /// API + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.backendPort")] + public int BackendPort { get; set; } + + /// + /// Gets provisioning state of the PublicIP resource + /// Updating/Deleting/Failed + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.provisioningState")] + public string ProvisioningState { get; set; } + + /// + /// Gets name of the resource that is unique within a resource group. + /// This name can be used to access the resource + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "name")] + public string Name { get; set; } + + /// + /// Gets or sets a unique read-only string that changes whenever the + /// resource is updated + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "etag")] + public string Etag { get; set; } + + /// + /// Validate the object. + /// + /// + /// Thrown if validation fails + /// + public virtual void Validate() + { + if (Protocol == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "Protocol"); + } + } + } +} diff --git a/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/InboundNatRuleInner.cs b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/InboundNatRuleInner.cs new file mode 100644 index 000000000..7431cdbb7 --- /dev/null +++ b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/InboundNatRuleInner.cs @@ -0,0 +1,165 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.Network.Models +{ + using System.Linq; + + /// + /// Inbound NAT rule of the loadbalancer + /// + [Microsoft.Rest.Serialization.JsonTransformation] + public partial class InboundNatRuleInner : Microsoft.Rest.Azure.SubResource + { + /// + /// Initializes a new instance of the InboundNatRuleInner class. + /// + public InboundNatRuleInner() { } + + /// + /// Initializes a new instance of the InboundNatRuleInner class. + /// + /// Gets or sets a reference to + /// frontend IP Addresses + /// Gets or sets a reference to a + /// private ip address defined on a NetworkInterface of a VM. Traffic + /// sent to frontendPort of each of the frontendIPConfigurations is + /// forwarded to the backed IP + /// Gets or sets the transport potocol for the + /// endpoint. Possible values are Udp or Tcp. Possible values + /// include: 'Udp', 'Tcp' + /// Gets or sets the port for the external + /// endpoint. You can spcify any port number you choose, but the port + /// numbers specified for each role in the service must be unique. + /// Possible values range between 1 and 65535, inclusive + /// Gets or sets a port used for internal + /// connections on the endpoint. The localPort attribute maps the + /// eternal port of the endpoint to an internal port on a role. This + /// is useful in scenarios where a role must communicate to an + /// internal compotnent on a port that is different from the one that + /// is exposed externally. If not specified, the value of localPort + /// is the same as the port attribute. Set the value of localPort to + /// '*' to automatically assign an unallocated port that is + /// discoverable using the runtime API + /// Gets or sets the timeout for + /// the Tcp idle connection. The value can be set between 4 and 30 + /// minutes. The default value is 4 minutes. This emlement is only + /// used when the protocol is set to Tcp + /// Configures a virtual machine's + /// endpoint for the floating IP capability required to configure a + /// SQL AlwaysOn availability Group. This setting is required when + /// using the SQL Always ON availability Groups in SQL server. This + /// setting can't be changed after you create the endpoint + /// Gets provisioning state of the + /// PublicIP resource Updating/Deleting/Failed + /// Gets name of the resource that is unique within + /// a resource group. This name can be used to access the + /// resource + /// A unique read-only string that changes whenever + /// the resource is updated + public InboundNatRuleInner(string id = default(string), Microsoft.Rest.Azure.SubResource frontendIPConfiguration = default(Microsoft.Rest.Azure.SubResource), NetworkInterfaceIPConfigurationInner backendIPConfiguration = default(NetworkInterfaceIPConfigurationInner), string protocol = default(string), int? frontendPort = default(int?), int? backendPort = default(int?), int? idleTimeoutInMinutes = default(int?), bool? enableFloatingIP = default(bool?), string provisioningState = default(string), string name = default(string), string etag = default(string)) + : base(id) + { + FrontendIPConfiguration = frontendIPConfiguration; + BackendIPConfiguration = backendIPConfiguration; + Protocol = protocol; + FrontendPort = frontendPort; + BackendPort = backendPort; + IdleTimeoutInMinutes = idleTimeoutInMinutes; + EnableFloatingIP = enableFloatingIP; + ProvisioningState = provisioningState; + Name = name; + Etag = etag; + } + + /// + /// Gets or sets a reference to frontend IP Addresses + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.frontendIPConfiguration")] + public Microsoft.Rest.Azure.SubResource FrontendIPConfiguration { get; set; } + + /// + /// Gets or sets a reference to a private ip address defined on a + /// NetworkInterface of a VM. Traffic sent to frontendPort of each of + /// the frontendIPConfigurations is forwarded to the backed IP + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.backendIPConfiguration")] + public NetworkInterfaceIPConfigurationInner BackendIPConfiguration { get; private set; } + + /// + /// Gets or sets the transport potocol for the endpoint. Possible + /// values are Udp or Tcp. Possible values include: 'Udp', 'Tcp' + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.protocol")] + public string Protocol { get; set; } + + /// + /// Gets or sets the port for the external endpoint. You can spcify + /// any port number you choose, but the port numbers specified for + /// each role in the service must be unique. Possible values range + /// between 1 and 65535, inclusive + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.frontendPort")] + public int? FrontendPort { get; set; } + + /// + /// Gets or sets a port used for internal connections on the endpoint. + /// The localPort attribute maps the eternal port of the endpoint to + /// an internal port on a role. This is useful in scenarios where a + /// role must communicate to an internal compotnent on a port that is + /// different from the one that is exposed externally. If not + /// specified, the value of localPort is the same as the port + /// attribute. Set the value of localPort to '*' to automatically + /// assign an unallocated port that is discoverable using the runtime + /// API + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.backendPort")] + public int? BackendPort { get; set; } + + /// + /// Gets or sets the timeout for the Tcp idle connection. The value + /// can be set between 4 and 30 minutes. The default value is 4 + /// minutes. This emlement is only used when the protocol is set to + /// Tcp + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.idleTimeoutInMinutes")] + public int? IdleTimeoutInMinutes { get; set; } + + /// + /// Gets or sets configures a virtual machine's endpoint for the + /// floating IP capability required to configure a SQL AlwaysOn + /// availability Group. This setting is required when using the SQL + /// Always ON availability Groups in SQL server. This setting can't + /// be changed after you create the endpoint + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.enableFloatingIP")] + public bool? EnableFloatingIP { get; set; } + + /// + /// Gets provisioning state of the PublicIP resource + /// Updating/Deleting/Failed + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.provisioningState")] + public string ProvisioningState { get; set; } + + /// + /// Gets name of the resource that is unique within a resource group. + /// This name can be used to access the resource + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "name")] + public string Name { get; set; } + + /// + /// Gets or sets a unique read-only string that changes whenever the + /// resource is updated + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "etag")] + public string Etag { get; set; } + + } +} diff --git a/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/LoadBalancerInner.cs b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/LoadBalancerInner.cs new file mode 100644 index 000000000..9602c1298 --- /dev/null +++ b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/LoadBalancerInner.cs @@ -0,0 +1,125 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.Network.Models +{ + using System.Linq; + + /// + /// LoadBalancer resource + /// + [Microsoft.Rest.Serialization.JsonTransformation] + public partial class LoadBalancerInner : Microsoft.Rest.Azure.Resource + { + /// + /// Initializes a new instance of the LoadBalancerInner class. + /// + public LoadBalancerInner() { } + + /// + /// Initializes a new instance of the LoadBalancerInner class. + /// + /// Gets or sets frontend IP + /// addresses of the load balancer + /// Gets or sets Pools of backend IP + /// addresseses + /// Gets or sets loadbalancing + /// rules + /// Gets or sets list of Load balancer + /// probes + /// Gets or sets list of inbound + /// rules + /// Gets or sets inbound NAT + /// pools + /// Gets or sets outbound NAT + /// rules + /// Gets or sets resource guid property of + /// the Load balancer resource + /// Gets provisioning state of the + /// PublicIP resource Updating/Deleting/Failed + /// Gets a unique read-only string that changes + /// whenever the resource is updated + public LoadBalancerInner(string location = default(string), string id = default(string), string name = default(string), string type = default(string), System.Collections.Generic.IDictionary tags = default(System.Collections.Generic.IDictionary), System.Collections.Generic.IList frontendIPConfigurations = default(System.Collections.Generic.IList), System.Collections.Generic.IList backendAddressPools = default(System.Collections.Generic.IList), System.Collections.Generic.IList loadBalancingRules = default(System.Collections.Generic.IList), System.Collections.Generic.IList probes = default(System.Collections.Generic.IList), System.Collections.Generic.IList inboundNatRules = default(System.Collections.Generic.IList), System.Collections.Generic.IList inboundNatPools = default(System.Collections.Generic.IList), System.Collections.Generic.IList outboundNatRules = default(System.Collections.Generic.IList), string resourceGuid = default(string), string provisioningState = default(string), string etag = default(string)) + : base(location, id, name, type, tags) + { + FrontendIPConfigurations = frontendIPConfigurations; + BackendAddressPools = backendAddressPools; + LoadBalancingRules = loadBalancingRules; + Probes = probes; + InboundNatRules = inboundNatRules; + InboundNatPools = inboundNatPools; + OutboundNatRules = outboundNatRules; + ResourceGuid = resourceGuid; + ProvisioningState = provisioningState; + Etag = etag; + } + + /// + /// Gets or sets frontend IP addresses of the load balancer + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.frontendIPConfigurations")] + public System.Collections.Generic.IList FrontendIPConfigurations { get; set; } + + /// + /// Gets or sets Pools of backend IP addresseses + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.backendAddressPools")] + public System.Collections.Generic.IList BackendAddressPools { get; set; } + + /// + /// Gets or sets loadbalancing rules + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.loadBalancingRules")] + public System.Collections.Generic.IList LoadBalancingRules { get; set; } + + /// + /// Gets or sets list of Load balancer probes + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.probes")] + public System.Collections.Generic.IList Probes { get; set; } + + /// + /// Gets or sets list of inbound rules + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.inboundNatRules")] + public System.Collections.Generic.IList InboundNatRules { get; set; } + + /// + /// Gets or sets inbound NAT pools + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.inboundNatPools")] + public System.Collections.Generic.IList InboundNatPools { get; set; } + + /// + /// Gets or sets outbound NAT rules + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.outboundNatRules")] + public System.Collections.Generic.IList OutboundNatRules { get; set; } + + /// + /// Gets or sets resource guid property of the Load balancer resource + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.resourceGuid")] + public string ResourceGuid { get; set; } + + /// + /// Gets provisioning state of the PublicIP resource + /// Updating/Deleting/Failed + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.provisioningState")] + public string ProvisioningState { get; set; } + + /// + /// Gets a unique read-only string that changes whenever the resource + /// is updated + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "etag")] + public string Etag { get; set; } + + } +} diff --git a/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/LoadBalancerListResultInner.cs b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/LoadBalancerListResultInner.cs new file mode 100644 index 000000000..58f22a4da --- /dev/null +++ b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/LoadBalancerListResultInner.cs @@ -0,0 +1,51 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.Network.Models +{ + using System.Linq; + + /// + /// Response for ListLoadBalancers Api service call + /// + public partial class LoadBalancerListResultInner + { + /// + /// Initializes a new instance of the LoadBalancerListResultInner + /// class. + /// + public LoadBalancerListResultInner() { } + + /// + /// Initializes a new instance of the LoadBalancerListResultInner + /// class. + /// + /// Gets a list of LoadBalancers in a resource + /// group + /// Gets the URL to get the next set of + /// results. + public LoadBalancerListResultInner(System.Collections.Generic.IList value = default(System.Collections.Generic.IList), string nextLink = default(string)) + { + Value = value; + NextLink = nextLink; + } + + /// + /// Gets a list of LoadBalancers in a resource group + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "value")] + public System.Collections.Generic.IList Value { get; set; } + + /// + /// Gets the URL to get the next set of results. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "nextLink")] + public string NextLink { get; set; } + + } +} diff --git a/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/LoadBalancingRuleInner.cs b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/LoadBalancingRuleInner.cs new file mode 100644 index 000000000..fa660ee2c --- /dev/null +++ b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/LoadBalancingRuleInner.cs @@ -0,0 +1,199 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.Network.Models +{ + using System.Linq; + + /// + /// Rules of the load balancer + /// + [Microsoft.Rest.Serialization.JsonTransformation] + public partial class LoadBalancingRuleInner : Microsoft.Rest.Azure.SubResource + { + /// + /// Initializes a new instance of the LoadBalancingRuleInner class. + /// + public LoadBalancingRuleInner() { } + + /// + /// Initializes a new instance of the LoadBalancingRuleInner class. + /// + /// Gets or sets the transport protocol for the + /// external endpoint. Possible values are Udp or Tcp. Possible + /// values include: 'Udp', 'Tcp' + /// Gets or sets the port for the external + /// endpoint. You can specify any port number you choose, but the + /// port numbers specified for each role in the service must be + /// unique. Possible values range between 1 and 65535, + /// inclusive + /// Gets or sets a reference to + /// frontend IP Addresses + /// Gets or sets a reference to a + /// pool of DIPs. Inbound traffic is randomly load balanced across + /// IPs in the backend IPs + /// Gets or sets the reference of the load + /// balancer probe used by the Load Balancing rule. + /// Gets or sets the load distribution + /// policy for this rule. Possible values include: 'Default', + /// 'SourceIP', 'SourceIPProtocol' + /// Gets or sets a port used for internal + /// connections on the endpoint. The localPort attribute maps the + /// eternal port of the endpoint to an internal port on a role. This + /// is useful in scenarios where a role must communicate to an + /// internal compotnent on a port that is different from the one that + /// is exposed externally. If not specified, the value of localPort + /// is the same as the port attribute. Set the value of localPort to + /// '*' to automatically assign an unallocated port that is + /// discoverable using the runtime API + /// Gets or sets the timeout for + /// the Tcp idle connection. The value can be set between 4 and 30 + /// minutes. The default value is 4 minutes. This emlement is only + /// used when the protocol is set to Tcp + /// Configures a virtual machine's + /// endpoint for the floating IP capability required to configure a + /// SQL AlwaysOn availability Group. This setting is required when + /// using the SQL Always ON availability Groups in SQL server. This + /// setting can't be changed after you create the endpoint + /// Gets provisioning state of the + /// PublicIP resource Updating/Deleting/Failed + /// Gets name of the resource that is unique within + /// a resource group. This name can be used to access the + /// resource + /// A unique read-only string that changes whenever + /// the resource is updated + public LoadBalancingRuleInner(string protocol, int frontendPort, string id = default(string), Microsoft.Rest.Azure.SubResource frontendIPConfiguration = default(Microsoft.Rest.Azure.SubResource), Microsoft.Rest.Azure.SubResource backendAddressPool = default(Microsoft.Rest.Azure.SubResource), Microsoft.Rest.Azure.SubResource probe = default(Microsoft.Rest.Azure.SubResource), string loadDistribution = default(string), int? backendPort = default(int?), int? idleTimeoutInMinutes = default(int?), bool? enableFloatingIP = default(bool?), string provisioningState = default(string), string name = default(string), string etag = default(string)) + : base(id) + { + FrontendIPConfiguration = frontendIPConfiguration; + BackendAddressPool = backendAddressPool; + Probe = probe; + Protocol = protocol; + LoadDistribution = loadDistribution; + FrontendPort = frontendPort; + BackendPort = backendPort; + IdleTimeoutInMinutes = idleTimeoutInMinutes; + EnableFloatingIP = enableFloatingIP; + ProvisioningState = provisioningState; + Name = name; + Etag = etag; + } + + /// + /// Gets or sets a reference to frontend IP Addresses + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.frontendIPConfiguration")] + public Microsoft.Rest.Azure.SubResource FrontendIPConfiguration { get; set; } + + /// + /// Gets or sets a reference to a pool of DIPs. Inbound traffic is + /// randomly load balanced across IPs in the backend IPs + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.backendAddressPool")] + public Microsoft.Rest.Azure.SubResource BackendAddressPool { get; set; } + + /// + /// Gets or sets the reference of the load balancer probe used by the + /// Load Balancing rule. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.probe")] + public Microsoft.Rest.Azure.SubResource Probe { get; set; } + + /// + /// Gets or sets the transport protocol for the external endpoint. + /// Possible values are Udp or Tcp. Possible values include: 'Udp', + /// 'Tcp' + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.protocol")] + public string Protocol { get; set; } + + /// + /// Gets or sets the load distribution policy for this rule. Possible + /// values include: 'Default', 'SourceIP', 'SourceIPProtocol' + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.loadDistribution")] + public string LoadDistribution { get; set; } + + /// + /// Gets or sets the port for the external endpoint. You can specify + /// any port number you choose, but the port numbers specified for + /// each role in the service must be unique. Possible values range + /// between 1 and 65535, inclusive + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.frontendPort")] + public int FrontendPort { get; set; } + + /// + /// Gets or sets a port used for internal connections on the endpoint. + /// The localPort attribute maps the eternal port of the endpoint to + /// an internal port on a role. This is useful in scenarios where a + /// role must communicate to an internal compotnent on a port that is + /// different from the one that is exposed externally. If not + /// specified, the value of localPort is the same as the port + /// attribute. Set the value of localPort to '*' to automatically + /// assign an unallocated port that is discoverable using the runtime + /// API + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.backendPort")] + public int? BackendPort { get; set; } + + /// + /// Gets or sets the timeout for the Tcp idle connection. The value + /// can be set between 4 and 30 minutes. The default value is 4 + /// minutes. This emlement is only used when the protocol is set to + /// Tcp + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.idleTimeoutInMinutes")] + public int? IdleTimeoutInMinutes { get; set; } + + /// + /// Gets or sets configures a virtual machine's endpoint for the + /// floating IP capability required to configure a SQL AlwaysOn + /// availability Group. This setting is required when using the SQL + /// Always ON availability Groups in SQL server. This setting can't + /// be changed after you create the endpoint + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.enableFloatingIP")] + public bool? EnableFloatingIP { get; set; } + + /// + /// Gets provisioning state of the PublicIP resource + /// Updating/Deleting/Failed + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.provisioningState")] + public string ProvisioningState { get; set; } + + /// + /// Gets name of the resource that is unique within a resource group. + /// This name can be used to access the resource + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "name")] + public string Name { get; set; } + + /// + /// Gets or sets a unique read-only string that changes whenever the + /// resource is updated + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "etag")] + public string Etag { get; set; } + + /// + /// Validate the object. + /// + /// + /// Thrown if validation fails + /// + public virtual void Validate() + { + if (Protocol == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "Protocol"); + } + } + } +} diff --git a/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/LoadDistribution.cs b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/LoadDistribution.cs new file mode 100644 index 000000000..625c46213 --- /dev/null +++ b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/LoadDistribution.cs @@ -0,0 +1,21 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.Network.Models +{ + + /// + /// Defines values for LoadDistribution. + /// + public static class LoadDistribution + { + public const string Default = "Default"; + public const string SourceIP = "SourceIP"; + public const string SourceIPProtocol = "SourceIPProtocol"; + } +} diff --git a/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/LocalNetworkGatewayInner.cs b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/LocalNetworkGatewayInner.cs new file mode 100644 index 000000000..d9cb73393 --- /dev/null +++ b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/LocalNetworkGatewayInner.cs @@ -0,0 +1,90 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.Network.Models +{ + using System.Linq; + + /// + /// A common class for general resource information + /// + [Microsoft.Rest.Serialization.JsonTransformation] + public partial class LocalNetworkGatewayInner : Microsoft.Rest.Azure.Resource + { + /// + /// Initializes a new instance of the LocalNetworkGatewayInner class. + /// + public LocalNetworkGatewayInner() { } + + /// + /// Initializes a new instance of the LocalNetworkGatewayInner class. + /// + /// Local network site Address + /// space + /// IP address of local network + /// gateway. + /// Local network gateway's BGP speaker + /// settings + /// Gets or sets resource guid property of + /// the LocalNetworkGateway resource + /// Gets provisioning state of the + /// LocalNetworkGateway resource Updating/Deleting/Failed + /// Gets a unique read-only string that changes + /// whenever the resource is updated + public LocalNetworkGatewayInner(string location = default(string), string id = default(string), string name = default(string), string type = default(string), System.Collections.Generic.IDictionary tags = default(System.Collections.Generic.IDictionary), AddressSpace localNetworkAddressSpace = default(AddressSpace), string gatewayIpAddress = default(string), BgpSettings bgpSettings = default(BgpSettings), string resourceGuid = default(string), string provisioningState = default(string), string etag = default(string)) + : base(location, id, name, type, tags) + { + LocalNetworkAddressSpace = localNetworkAddressSpace; + GatewayIpAddress = gatewayIpAddress; + BgpSettings = bgpSettings; + ResourceGuid = resourceGuid; + ProvisioningState = provisioningState; + Etag = etag; + } + + /// + /// Gets or sets local network site Address space + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.localNetworkAddressSpace")] + public AddressSpace LocalNetworkAddressSpace { get; set; } + + /// + /// Gets or sets IP address of local network gateway. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.gatewayIpAddress")] + public string GatewayIpAddress { get; set; } + + /// + /// Gets or sets local network gateway's BGP speaker settings + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.bgpSettings")] + public BgpSettings BgpSettings { get; set; } + + /// + /// Gets or sets resource guid property of the LocalNetworkGateway + /// resource + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.resourceGuid")] + public string ResourceGuid { get; set; } + + /// + /// Gets provisioning state of the LocalNetworkGateway resource + /// Updating/Deleting/Failed + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.provisioningState")] + public string ProvisioningState { get; set; } + + /// + /// Gets a unique read-only string that changes whenever the resource + /// is updated + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "etag")] + public string Etag { get; set; } + + } +} diff --git a/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/LocalNetworkGatewayListResultInner.cs b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/LocalNetworkGatewayListResultInner.cs new file mode 100644 index 000000000..423ff8ae3 --- /dev/null +++ b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/LocalNetworkGatewayListResultInner.cs @@ -0,0 +1,51 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.Network.Models +{ + using System.Linq; + + /// + /// Response for ListLocalNetworkGateways Api service call + /// + public partial class LocalNetworkGatewayListResultInner + { + /// + /// Initializes a new instance of the + /// LocalNetworkGatewayListResultInner class. + /// + public LocalNetworkGatewayListResultInner() { } + + /// + /// Initializes a new instance of the + /// LocalNetworkGatewayListResultInner class. + /// + /// Gets List of LocalNetworkGateways that exists + /// in a resource group + /// Gets the URL to get the next set of + /// results. + public LocalNetworkGatewayListResultInner(System.Collections.Generic.IList value = default(System.Collections.Generic.IList), string nextLink = default(string)) + { + Value = value; + NextLink = nextLink; + } + + /// + /// Gets List of LocalNetworkGateways that exists in a resource group + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "value")] + public System.Collections.Generic.IList Value { get; set; } + + /// + /// Gets the URL to get the next set of results. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "nextLink")] + public string NextLink { get; set; } + + } +} diff --git a/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/NetworkInterfaceDnsSettings.cs b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/NetworkInterfaceDnsSettings.cs new file mode 100644 index 000000000..7cb71e0ee --- /dev/null +++ b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/NetworkInterfaceDnsSettings.cs @@ -0,0 +1,77 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.Network.Models +{ + using System.Linq; + + /// + /// Dns settings of a network interface + /// + public partial class NetworkInterfaceDnsSettings + { + /// + /// Initializes a new instance of the NetworkInterfaceDnsSettings + /// class. + /// + public NetworkInterfaceDnsSettings() { } + + /// + /// Initializes a new instance of the NetworkInterfaceDnsSettings + /// class. + /// + /// Gets or sets list of DNS servers IP + /// addresses + /// Gets or sets list of Applied DNS + /// servers IP addresses + /// Gets or sets the internal DNS + /// name + /// Gets or sets the internal fqdn. + /// Gets or sets internal + /// domain name suffix of the NIC. + public NetworkInterfaceDnsSettings(System.Collections.Generic.IList dnsServers = default(System.Collections.Generic.IList), System.Collections.Generic.IList appliedDnsServers = default(System.Collections.Generic.IList), string internalDnsNameLabel = default(string), string internalFqdn = default(string), string internalDomainNameSuffix = default(string)) + { + DnsServers = dnsServers; + AppliedDnsServers = appliedDnsServers; + InternalDnsNameLabel = internalDnsNameLabel; + InternalFqdn = internalFqdn; + InternalDomainNameSuffix = internalDomainNameSuffix; + } + + /// + /// Gets or sets list of DNS servers IP addresses + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "dnsServers")] + public System.Collections.Generic.IList DnsServers { get; set; } + + /// + /// Gets or sets list of Applied DNS servers IP addresses + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "appliedDnsServers")] + public System.Collections.Generic.IList AppliedDnsServers { get; set; } + + /// + /// Gets or sets the internal DNS name + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "internalDnsNameLabel")] + public string InternalDnsNameLabel { get; set; } + + /// + /// Gets or sets the internal fqdn. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "internalFqdn")] + public string InternalFqdn { get; set; } + + /// + /// Gets or sets internal domain name suffix of the NIC. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "internalDomainNameSuffix")] + public string InternalDomainNameSuffix { get; set; } + + } +} diff --git a/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/NetworkInterfaceIPConfigurationInner.cs b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/NetworkInterfaceIPConfigurationInner.cs new file mode 100644 index 000000000..2b1be87b5 --- /dev/null +++ b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/NetworkInterfaceIPConfigurationInner.cs @@ -0,0 +1,141 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.Network.Models +{ + using System.Linq; + + /// + /// IPConfiguration in a NetworkInterface + /// + [Microsoft.Rest.Serialization.JsonTransformation] + public partial class NetworkInterfaceIPConfigurationInner : Microsoft.Rest.Azure.SubResource + { + /// + /// Initializes a new instance of the + /// NetworkInterfaceIPConfigurationInner class. + /// + public NetworkInterfaceIPConfigurationInner() { } + + /// + /// Initializes a new instance of the + /// NetworkInterfaceIPConfigurationInner class. + /// + /// Gets or sets + /// the reference of ApplicationGatewayBackendAddressPool + /// resource + /// Gets or sets the + /// reference of LoadBalancerBackendAddressPool resource + /// Gets or sets list of + /// references of LoadBalancerInboundNatRules + /// Gets or sets PrivateIP + /// allocation method. Possible values include: 'Static', + /// 'Dynamic' + /// Gets or sets PrivateIP + /// address version (IPv4/IPv6). Possible values include: 'IPv4', + /// 'IPv6' + /// Gets whether this is a primary customer + /// address on the NIC + /// Gets name of the resource that is unique within + /// a resource group. This name can be used to access the + /// resource + /// A unique read-only string that changes whenever + /// the resource is updated + public NetworkInterfaceIPConfigurationInner(string id = default(string), System.Collections.Generic.IList applicationGatewayBackendAddressPools = default(System.Collections.Generic.IList), System.Collections.Generic.IList loadBalancerBackendAddressPools = default(System.Collections.Generic.IList), System.Collections.Generic.IList loadBalancerInboundNatRules = default(System.Collections.Generic.IList), string privateIPAddress = default(string), string privateIPAllocationMethod = default(string), string privateIPAddressVersion = default(string), SubnetInner subnet = default(SubnetInner), bool? primary = default(bool?), PublicIPAddressInner publicIPAddress = default(PublicIPAddressInner), string provisioningState = default(string), string name = default(string), string etag = default(string)) + : base(id) + { + ApplicationGatewayBackendAddressPools = applicationGatewayBackendAddressPools; + LoadBalancerBackendAddressPools = loadBalancerBackendAddressPools; + LoadBalancerInboundNatRules = loadBalancerInboundNatRules; + PrivateIPAddress = privateIPAddress; + PrivateIPAllocationMethod = privateIPAllocationMethod; + PrivateIPAddressVersion = privateIPAddressVersion; + Subnet = subnet; + Primary = primary; + PublicIPAddress = publicIPAddress; + ProvisioningState = provisioningState; + Name = name; + Etag = etag; + } + + /// + /// Gets or sets the reference of ApplicationGatewayBackendAddressPool + /// resource + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.applicationGatewayBackendAddressPools")] + public System.Collections.Generic.IList ApplicationGatewayBackendAddressPools { get; set; } + + /// + /// Gets or sets the reference of LoadBalancerBackendAddressPool + /// resource + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.loadBalancerBackendAddressPools")] + public System.Collections.Generic.IList LoadBalancerBackendAddressPools { get; set; } + + /// + /// Gets or sets list of references of LoadBalancerInboundNatRules + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.loadBalancerInboundNatRules")] + public System.Collections.Generic.IList LoadBalancerInboundNatRules { get; set; } + + /// + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.privateIPAddress")] + public string PrivateIPAddress { get; set; } + + /// + /// Gets or sets PrivateIP allocation method. Possible values include: + /// 'Static', 'Dynamic' + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.privateIPAllocationMethod")] + public string PrivateIPAllocationMethod { get; set; } + + /// + /// Gets or sets PrivateIP address version (IPv4/IPv6). Possible + /// values include: 'IPv4', 'IPv6' + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.privateIPAddressVersion")] + public string PrivateIPAddressVersion { get; set; } + + /// + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.subnet")] + public SubnetInner Subnet { get; set; } + + /// + /// Gets whether this is a primary customer address on the NIC + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.primary")] + public bool? Primary { get; set; } + + /// + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.publicIPAddress")] + public PublicIPAddressInner PublicIPAddress { get; set; } + + /// + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.provisioningState")] + public string ProvisioningState { get; set; } + + /// + /// Gets name of the resource that is unique within a resource group. + /// This name can be used to access the resource + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "name")] + public string Name { get; set; } + + /// + /// Gets or sets a unique read-only string that changes whenever the + /// resource is updated + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "etag")] + public string Etag { get; set; } + + } +} diff --git a/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/NetworkInterfaceInner.cs b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/NetworkInterfaceInner.cs new file mode 100644 index 000000000..2f3908937 --- /dev/null +++ b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/NetworkInterfaceInner.cs @@ -0,0 +1,126 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.Network.Models +{ + using System.Linq; + + /// + /// A NetworkInterface in a resource group + /// + [Microsoft.Rest.Serialization.JsonTransformation] + public partial class NetworkInterfaceInner : Microsoft.Rest.Azure.Resource + { + /// + /// Initializes a new instance of the NetworkInterfaceInner class. + /// + public NetworkInterfaceInner() { } + + /// + /// Initializes a new instance of the NetworkInterfaceInner class. + /// + /// Gets or sets the reference of a + /// VirtualMachine + /// Gets or sets the reference of + /// the NetworkSecurityGroup resource + /// Gets or sets list of + /// IPConfigurations of the network interface + /// Gets or sets DNS settings in network + /// interface + /// Gets the MAC address of the network + /// interface + /// Gets whether this is a primary NIC on a + /// virtual machine + /// Gets or sets whether IPForwarding + /// is enabled on the NIC + /// Gets or sets resource guid property of + /// the network interface resource + /// Gets provisioning state of the + /// PublicIP resource Updating/Deleting/Failed + /// Gets a unique read-only string that changes + /// whenever the resource is updated + public NetworkInterfaceInner(string location = default(string), string id = default(string), string name = default(string), string type = default(string), System.Collections.Generic.IDictionary tags = default(System.Collections.Generic.IDictionary), Microsoft.Rest.Azure.SubResource virtualMachine = default(Microsoft.Rest.Azure.SubResource), NetworkSecurityGroupInner networkSecurityGroup = default(NetworkSecurityGroupInner), System.Collections.Generic.IList ipConfigurations = default(System.Collections.Generic.IList), NetworkInterfaceDnsSettings dnsSettings = default(NetworkInterfaceDnsSettings), string macAddress = default(string), bool? primary = default(bool?), bool? enableIPForwarding = default(bool?), string resourceGuid = default(string), string provisioningState = default(string), string etag = default(string)) + : base(location, id, name, type, tags) + { + VirtualMachine = virtualMachine; + NetworkSecurityGroup = networkSecurityGroup; + IpConfigurations = ipConfigurations; + DnsSettings = dnsSettings; + MacAddress = macAddress; + Primary = primary; + EnableIPForwarding = enableIPForwarding; + ResourceGuid = resourceGuid; + ProvisioningState = provisioningState; + Etag = etag; + } + + /// + /// Gets or sets the reference of a VirtualMachine + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.virtualMachine")] + public Microsoft.Rest.Azure.SubResource VirtualMachine { get; set; } + + /// + /// Gets or sets the reference of the NetworkSecurityGroup resource + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.networkSecurityGroup")] + public NetworkSecurityGroupInner NetworkSecurityGroup { get; set; } + + /// + /// Gets or sets list of IPConfigurations of the network interface + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.ipConfigurations")] + public System.Collections.Generic.IList IpConfigurations { get; set; } + + /// + /// Gets or sets DNS settings in network interface + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.dnsSettings")] + public NetworkInterfaceDnsSettings DnsSettings { get; set; } + + /// + /// Gets the MAC address of the network interface + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.macAddress")] + public string MacAddress { get; set; } + + /// + /// Gets whether this is a primary NIC on a virtual machine + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.primary")] + public bool? Primary { get; set; } + + /// + /// Gets or sets whether IPForwarding is enabled on the NIC + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.enableIPForwarding")] + public bool? EnableIPForwarding { get; set; } + + /// + /// Gets or sets resource guid property of the network interface + /// resource + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.resourceGuid")] + public string ResourceGuid { get; set; } + + /// + /// Gets provisioning state of the PublicIP resource + /// Updating/Deleting/Failed + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.provisioningState")] + public string ProvisioningState { get; set; } + + /// + /// Gets a unique read-only string that changes whenever the resource + /// is updated + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "etag")] + public string Etag { get; set; } + + } +} diff --git a/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/NetworkInterfaceListResultInner.cs b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/NetworkInterfaceListResultInner.cs new file mode 100644 index 000000000..5efa57550 --- /dev/null +++ b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/NetworkInterfaceListResultInner.cs @@ -0,0 +1,51 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.Network.Models +{ + using System.Linq; + + /// + /// Response for ListNetworkInterface Api service call + /// + public partial class NetworkInterfaceListResultInner + { + /// + /// Initializes a new instance of the NetworkInterfaceListResultInner + /// class. + /// + public NetworkInterfaceListResultInner() { } + + /// + /// Initializes a new instance of the NetworkInterfaceListResultInner + /// class. + /// + /// Gets or sets list of NetworkInterfaces in a + /// resource group + /// Gets the URL to get the next set of + /// results. + public NetworkInterfaceListResultInner(System.Collections.Generic.IList value = default(System.Collections.Generic.IList), string nextLink = default(string)) + { + Value = value; + NextLink = nextLink; + } + + /// + /// Gets or sets list of NetworkInterfaces in a resource group + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "value")] + public System.Collections.Generic.IList Value { get; set; } + + /// + /// Gets the URL to get the next set of results. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "nextLink")] + public string NextLink { get; set; } + + } +} diff --git a/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/NetworkOperationStatus.cs b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/NetworkOperationStatus.cs new file mode 100644 index 000000000..a6db790ba --- /dev/null +++ b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/NetworkOperationStatus.cs @@ -0,0 +1,21 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.Network.Models +{ + + /// + /// Defines values for NetworkOperationStatus. + /// + public static class NetworkOperationStatus + { + public const string InProgress = "InProgress"; + public const string Succeeded = "Succeeded"; + public const string Failed = "Failed"; + } +} diff --git a/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/NetworkSecurityGroupInner.cs b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/NetworkSecurityGroupInner.cs new file mode 100644 index 000000000..05c480541 --- /dev/null +++ b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/NetworkSecurityGroupInner.cs @@ -0,0 +1,99 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.Network.Models +{ + using System.Linq; + + /// + /// NetworkSecurityGroup resource + /// + [Microsoft.Rest.Serialization.JsonTransformation] + public partial class NetworkSecurityGroupInner : Microsoft.Rest.Azure.Resource + { + /// + /// Initializes a new instance of the NetworkSecurityGroupInner class. + /// + public NetworkSecurityGroupInner() { } + + /// + /// Initializes a new instance of the NetworkSecurityGroupInner class. + /// + /// Gets or sets security rules of network + /// security group + /// Gets or default security rules + /// of network security group + /// Gets collection of references to + /// Network Interfaces + /// Gets collection of references to + /// subnets + /// Gets or sets resource guid property of + /// the network security group resource + /// Gets provisioning state of the + /// PublicIP resource Updating/Deleting/Failed + /// Gets a unique read-only string that changes + /// whenever the resource is updated + public NetworkSecurityGroupInner(string location = default(string), string id = default(string), string name = default(string), string type = default(string), System.Collections.Generic.IDictionary tags = default(System.Collections.Generic.IDictionary), System.Collections.Generic.IList securityRules = default(System.Collections.Generic.IList), System.Collections.Generic.IList defaultSecurityRules = default(System.Collections.Generic.IList), System.Collections.Generic.IList networkInterfaces = default(System.Collections.Generic.IList), System.Collections.Generic.IList subnets = default(System.Collections.Generic.IList), string resourceGuid = default(string), string provisioningState = default(string), string etag = default(string)) + : base(location, id, name, type, tags) + { + SecurityRules = securityRules; + DefaultSecurityRules = defaultSecurityRules; + NetworkInterfaces = networkInterfaces; + Subnets = subnets; + ResourceGuid = resourceGuid; + ProvisioningState = provisioningState; + Etag = etag; + } + + /// + /// Gets or sets security rules of network security group + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.securityRules")] + public System.Collections.Generic.IList SecurityRules { get; set; } + + /// + /// Gets or default security rules of network security group + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.defaultSecurityRules")] + public System.Collections.Generic.IList DefaultSecurityRules { get; set; } + + /// + /// Gets collection of references to Network Interfaces + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.networkInterfaces")] + public System.Collections.Generic.IList NetworkInterfaces { get; private set; } + + /// + /// Gets collection of references to subnets + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.subnets")] + public System.Collections.Generic.IList Subnets { get; private set; } + + /// + /// Gets or sets resource guid property of the network security group + /// resource + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.resourceGuid")] + public string ResourceGuid { get; set; } + + /// + /// Gets provisioning state of the PublicIP resource + /// Updating/Deleting/Failed + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.provisioningState")] + public string ProvisioningState { get; set; } + + /// + /// Gets a unique read-only string that changes whenever the resource + /// is updated + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "etag")] + public string Etag { get; set; } + + } +} diff --git a/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/NetworkSecurityGroupListResultInner.cs b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/NetworkSecurityGroupListResultInner.cs new file mode 100644 index 000000000..060e4dcff --- /dev/null +++ b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/NetworkSecurityGroupListResultInner.cs @@ -0,0 +1,50 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.Network.Models +{ + using System.Linq; + + /// + /// Response for ListNetworkSecurityGroups Api servive call + /// + public partial class NetworkSecurityGroupListResultInner + { + /// + /// Initializes a new instance of the + /// NetworkSecurityGroupListResultInner class. + /// + public NetworkSecurityGroupListResultInner() { } + + /// + /// Initializes a new instance of the + /// NetworkSecurityGroupListResultInner class. + /// + /// Gets List of NetworkSecurityGroups + /// Gets the URL to get the next set of + /// results. + public NetworkSecurityGroupListResultInner(System.Collections.Generic.IList value = default(System.Collections.Generic.IList), string nextLink = default(string)) + { + Value = value; + NextLink = nextLink; + } + + /// + /// Gets List of NetworkSecurityGroups + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "value")] + public System.Collections.Generic.IList Value { get; set; } + + /// + /// Gets the URL to get the next set of results. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "nextLink")] + public string NextLink { get; set; } + + } +} diff --git a/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/OutboundNatRuleInner.cs b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/OutboundNatRuleInner.cs new file mode 100644 index 000000000..3fbbce76b --- /dev/null +++ b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/OutboundNatRuleInner.cs @@ -0,0 +1,106 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.Network.Models +{ + using System.Linq; + + /// + /// Outbound NAT pool of the loadbalancer + /// + [Microsoft.Rest.Serialization.JsonTransformation] + public partial class OutboundNatRuleInner : Microsoft.Rest.Azure.SubResource + { + /// + /// Initializes a new instance of the OutboundNatRuleInner class. + /// + public OutboundNatRuleInner() { } + + /// + /// Initializes a new instance of the OutboundNatRuleInner class. + /// + /// Gets or sets a reference to a + /// pool of DIPs. Outbound traffic is randomly load balanced across + /// IPs in the backend IPs + /// Gets or sets the number of + /// outbound ports to be used for SNAT + /// Gets or sets Frontend IP + /// addresses of the load balancer + /// Gets provisioning state of the + /// PublicIP resource Updating/Deleting/Failed + /// Gets name of the resource that is unique within + /// a resource group. This name can be used to access the + /// resource + /// A unique read-only string that changes whenever + /// the resource is updated + public OutboundNatRuleInner(Microsoft.Rest.Azure.SubResource backendAddressPool, string id = default(string), int? allocatedOutboundPorts = default(int?), System.Collections.Generic.IList frontendIPConfigurations = default(System.Collections.Generic.IList), string provisioningState = default(string), string name = default(string), string etag = default(string)) + : base(id) + { + AllocatedOutboundPorts = allocatedOutboundPorts; + FrontendIPConfigurations = frontendIPConfigurations; + BackendAddressPool = backendAddressPool; + ProvisioningState = provisioningState; + Name = name; + Etag = etag; + } + + /// + /// Gets or sets the number of outbound ports to be used for SNAT + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.allocatedOutboundPorts")] + public int? AllocatedOutboundPorts { get; set; } + + /// + /// Gets or sets Frontend IP addresses of the load balancer + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.frontendIPConfigurations")] + public System.Collections.Generic.IList FrontendIPConfigurations { get; set; } + + /// + /// Gets or sets a reference to a pool of DIPs. Outbound traffic is + /// randomly load balanced across IPs in the backend IPs + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.backendAddressPool")] + public Microsoft.Rest.Azure.SubResource BackendAddressPool { get; set; } + + /// + /// Gets provisioning state of the PublicIP resource + /// Updating/Deleting/Failed + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.provisioningState")] + public string ProvisioningState { get; set; } + + /// + /// Gets name of the resource that is unique within a resource group. + /// This name can be used to access the resource + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "name")] + public string Name { get; set; } + + /// + /// Gets or sets a unique read-only string that changes whenever the + /// resource is updated + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "etag")] + public string Etag { get; set; } + + /// + /// Validate the object. + /// + /// + /// Thrown if validation fails + /// + public virtual void Validate() + { + if (BackendAddressPool == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "BackendAddressPool"); + } + } + } +} diff --git a/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/Page.cs b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/Page.cs new file mode 100644 index 000000000..6894e76ad --- /dev/null +++ b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/Page.cs @@ -0,0 +1,46 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.Network.Models +{ + + /// + /// Defines a page in Azure responses. + /// + /// Type of the page content items + [Newtonsoft.Json.JsonObject] + public class Page : Microsoft.Rest.Azure.IPage + { + /// + /// Gets the link to the next page. + /// + [Newtonsoft.Json.JsonProperty("nextLink")] + public System.String NextPageLink { get; private set; } + + [Newtonsoft.Json.JsonProperty("value")] + private System.Collections.Generic.IList Items{ get; set; } + + /// + /// Returns an enumerator that iterates through the collection. + /// + /// A an enumerator that can be used to iterate through the collection. + public System.Collections.Generic.IEnumerator GetEnumerator() + { + return (Items == null) ? System.Linq.Enumerable.Empty().GetEnumerator() : Items.GetEnumerator(); + } + + /// + /// Returns an enumerator that iterates through the collection. + /// + /// A an enumerator that can be used to iterate through the collection. + System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator() + { + return GetEnumerator(); + } + } +} diff --git a/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/ProbeInner.cs b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/ProbeInner.cs new file mode 100644 index 000000000..a2baafadc --- /dev/null +++ b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/ProbeInner.cs @@ -0,0 +1,158 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.Network.Models +{ + using System.Linq; + + /// + /// Load balancer Probe + /// + [Microsoft.Rest.Serialization.JsonTransformation] + public partial class ProbeInner : Microsoft.Rest.Azure.SubResource + { + /// + /// Initializes a new instance of the ProbeInner class. + /// + public ProbeInner() { } + + /// + /// Initializes a new instance of the ProbeInner class. + /// + /// Gets or sets the protocol of the end point. + /// Possible values are http pr Tcp. If Tcp is specified, a received + /// ACK is required for the probe to be successful. If http is + /// specified,a 200 OK response from the specifies URI is required + /// for the probe to be successful. Possible values include: 'Http', + /// 'Tcp' + /// Gets or sets Port for communicating the probe. + /// Possible values range from 1 to 65535, inclusive. + /// Gets Load balancer rules that use + /// this probe + /// Gets or sets the interval, in + /// seconds, for how frequently to probe the endpoint for health + /// status. Typically, the interval is slightly less than half the + /// allocated timeout period (in seconds) which allows two full + /// probes before taking the instance out of rotation. The default + /// value is 15, the minimum value is 5 + /// Gets or sets the number of probes + /// where if no response, will result in stopping further traffic + /// from being delivered to the endpoint. This values allows + /// endponints to be taken out of rotation faster or slower than the + /// typical times used in Azure. + /// Gets or sets the URI used for requesting + /// health status from the VM. Path is required if a protocol is set + /// to http. Otherwise, it is not allowed. There is no default + /// value + /// Gets provisioning state of the + /// PublicIP resource Updating/Deleting/Failed + /// Gets name of the resource that is unique within + /// a resource group. This name can be used to access the + /// resource + /// A unique read-only string that changes whenever + /// the resource is updated + public ProbeInner(string protocol, int port, string id = default(string), System.Collections.Generic.IList loadBalancingRules = default(System.Collections.Generic.IList), int? intervalInSeconds = default(int?), int? numberOfProbes = default(int?), string requestPath = default(string), string provisioningState = default(string), string name = default(string), string etag = default(string)) + : base(id) + { + LoadBalancingRules = loadBalancingRules; + Protocol = protocol; + Port = port; + IntervalInSeconds = intervalInSeconds; + NumberOfProbes = numberOfProbes; + RequestPath = requestPath; + ProvisioningState = provisioningState; + Name = name; + Etag = etag; + } + + /// + /// Gets Load balancer rules that use this probe + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.loadBalancingRules")] + public System.Collections.Generic.IList LoadBalancingRules { get; private set; } + + /// + /// Gets or sets the protocol of the end point. Possible values are + /// http pr Tcp. If Tcp is specified, a received ACK is required for + /// the probe to be successful. If http is specified,a 200 OK + /// response from the specifies URI is required for the probe to be + /// successful. Possible values include: 'Http', 'Tcp' + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.protocol")] + public string Protocol { get; set; } + + /// + /// Gets or sets Port for communicating the probe. Possible values + /// range from 1 to 65535, inclusive. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.port")] + public int Port { get; set; } + + /// + /// Gets or sets the interval, in seconds, for how frequently to probe + /// the endpoint for health status. Typically, the interval is + /// slightly less than half the allocated timeout period (in seconds) + /// which allows two full probes before taking the instance out of + /// rotation. The default value is 15, the minimum value is 5 + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.intervalInSeconds")] + public int? IntervalInSeconds { get; set; } + + /// + /// Gets or sets the number of probes where if no response, will + /// result in stopping further traffic from being delivered to the + /// endpoint. This values allows endponints to be taken out of + /// rotation faster or slower than the typical times used in Azure. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.numberOfProbes")] + public int? NumberOfProbes { get; set; } + + /// + /// Gets or sets the URI used for requesting health status from the + /// VM. Path is required if a protocol is set to http. Otherwise, it + /// is not allowed. There is no default value + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.requestPath")] + public string RequestPath { get; set; } + + /// + /// Gets provisioning state of the PublicIP resource + /// Updating/Deleting/Failed + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.provisioningState")] + public string ProvisioningState { get; set; } + + /// + /// Gets name of the resource that is unique within a resource group. + /// This name can be used to access the resource + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "name")] + public string Name { get; set; } + + /// + /// Gets or sets a unique read-only string that changes whenever the + /// resource is updated + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "etag")] + public string Etag { get; set; } + + /// + /// Validate the object. + /// + /// + /// Thrown if validation fails + /// + public virtual void Validate() + { + if (Protocol == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "Protocol"); + } + } + } +} diff --git a/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/ProbeProtocol.cs b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/ProbeProtocol.cs new file mode 100644 index 000000000..d378cd1c5 --- /dev/null +++ b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/ProbeProtocol.cs @@ -0,0 +1,20 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.Network.Models +{ + + /// + /// Defines values for ProbeProtocol. + /// + public static class ProbeProtocol + { + public const string Http = "Http"; + public const string Tcp = "Tcp"; + } +} diff --git a/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/ProcessorArchitecture.cs b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/ProcessorArchitecture.cs new file mode 100644 index 000000000..b22d75977 --- /dev/null +++ b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/ProcessorArchitecture.cs @@ -0,0 +1,20 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.Network.Models +{ + + /// + /// Defines values for ProcessorArchitecture. + /// + public static class ProcessorArchitecture + { + public const string Amd64 = "Amd64"; + public const string X86 = "X86"; + } +} diff --git a/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/PublicIPAddressDnsSettings.cs b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/PublicIPAddressDnsSettings.cs new file mode 100644 index 000000000..055c1605a --- /dev/null +++ b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/PublicIPAddressDnsSettings.cs @@ -0,0 +1,77 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.Network.Models +{ + using System.Linq; + + /// + /// Contains FQDN of the DNS record associated with the public IP address + /// + public partial class PublicIPAddressDnsSettings + { + /// + /// Initializes a new instance of the PublicIPAddressDnsSettings class. + /// + public PublicIPAddressDnsSettings() { } + + /// + /// Initializes a new instance of the PublicIPAddressDnsSettings class. + /// + /// Gets or sets the Domain name + /// label.The concatenation of the domain name label and the + /// regionalized DNS zone make up the fully qualified domain name + /// associated with the public IP address. If a domain name label is + /// specified, an A DNS record is created for the public IP in the + /// Microsoft Azure DNS system. + /// Gets the FQDN, Fully qualified domain name of + /// the A DNS record associated with the public IP. This is the + /// concatenation of the domainNameLabel and the regionalized DNS + /// zone. + /// Gets or Sests the Reverse FQDN. A + /// user-visible, fully qualified domain name that resolves to this + /// public IP address. If the reverseFqdn is specified, then a PTR + /// DNS record is created pointing from the IP address in the + /// in-addr.arpa domain to the reverse FQDN. + public PublicIPAddressDnsSettings(string domainNameLabel = default(string), string fqdn = default(string), string reverseFqdn = default(string)) + { + DomainNameLabel = domainNameLabel; + Fqdn = fqdn; + ReverseFqdn = reverseFqdn; + } + + /// + /// Gets or sets the Domain name label.The concatenation of the domain + /// name label and the regionalized DNS zone make up the fully + /// qualified domain name associated with the public IP address. If a + /// domain name label is specified, an A DNS record is created for + /// the public IP in the Microsoft Azure DNS system. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "domainNameLabel")] + public string DomainNameLabel { get; set; } + + /// + /// Gets the FQDN, Fully qualified domain name of the A DNS record + /// associated with the public IP. This is the concatenation of the + /// domainNameLabel and the regionalized DNS zone. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "fqdn")] + public string Fqdn { get; set; } + + /// + /// Gets or Sests the Reverse FQDN. A user-visible, fully qualified + /// domain name that resolves to this public IP address. If the + /// reverseFqdn is specified, then a PTR DNS record is created + /// pointing from the IP address in the in-addr.arpa domain to the + /// reverse FQDN. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "reverseFqdn")] + public string ReverseFqdn { get; set; } + + } +} diff --git a/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/PublicIPAddressInner.cs b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/PublicIPAddressInner.cs new file mode 100644 index 000000000..4a0cb5b94 --- /dev/null +++ b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/PublicIPAddressInner.cs @@ -0,0 +1,121 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.Network.Models +{ + using System.Linq; + + /// + /// PublicIPAddress resource + /// + [Microsoft.Rest.Serialization.JsonTransformation] + public partial class PublicIPAddressInner : Microsoft.Rest.Azure.Resource + { + /// + /// Initializes a new instance of the PublicIPAddressInner class. + /// + public PublicIPAddressInner() { } + + /// + /// Initializes a new instance of the PublicIPAddressInner class. + /// + /// Gets or sets PublicIP + /// allocation method (Static/Dynamic). Possible values include: + /// 'Static', 'Dynamic' + /// Gets or sets PublicIP address + /// version (IPv4/IPv6). Possible values include: 'IPv4', + /// 'IPv6' + /// Gets or sets FQDN of the DNS record + /// associated with the public IP address + /// Gets or sets the Idletimeout of + /// the public IP address + /// Gets or sets resource guid property of + /// the PublicIP resource + /// Gets provisioning state of the + /// PublicIP resource Updating/Deleting/Failed + /// Gets a unique read-only string that changes + /// whenever the resource is updated + public PublicIPAddressInner(string location = default(string), string id = default(string), string name = default(string), string type = default(string), System.Collections.Generic.IDictionary tags = default(System.Collections.Generic.IDictionary), string publicIPAllocationMethod = default(string), string publicIPAddressVersion = default(string), IPConfigurationInner ipConfiguration = default(IPConfigurationInner), PublicIPAddressDnsSettings dnsSettings = default(PublicIPAddressDnsSettings), string ipAddress = default(string), int? idleTimeoutInMinutes = default(int?), string resourceGuid = default(string), string provisioningState = default(string), string etag = default(string)) + : base(location, id, name, type, tags) + { + PublicIPAllocationMethod = publicIPAllocationMethod; + PublicIPAddressVersion = publicIPAddressVersion; + IpConfiguration = ipConfiguration; + DnsSettings = dnsSettings; + IpAddress = ipAddress; + IdleTimeoutInMinutes = idleTimeoutInMinutes; + ResourceGuid = resourceGuid; + ProvisioningState = provisioningState; + Etag = etag; + } + + /// + /// Resource Id + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "id")] + public override string Id { get; protected set; } + + /// + /// Gets or sets PublicIP allocation method (Static/Dynamic). Possible + /// values include: 'Static', 'Dynamic' + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.publicIPAllocationMethod")] + public string PublicIPAllocationMethod { get; set; } + + /// + /// Gets or sets PublicIP address version (IPv4/IPv6). Possible values + /// include: 'IPv4', 'IPv6' + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.publicIPAddressVersion")] + public string PublicIPAddressVersion { get; set; } + + /// + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.ipConfiguration")] + public IPConfigurationInner IpConfiguration { get; private set; } + + /// + /// Gets or sets FQDN of the DNS record associated with the public IP + /// address + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.dnsSettings")] + public PublicIPAddressDnsSettings DnsSettings { get; set; } + + /// + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.ipAddress")] + public string IpAddress { get; set; } + + /// + /// Gets or sets the Idletimeout of the public IP address + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.idleTimeoutInMinutes")] + public int? IdleTimeoutInMinutes { get; set; } + + /// + /// Gets or sets resource guid property of the PublicIP resource + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.resourceGuid")] + public string ResourceGuid { get; set; } + + /// + /// Gets provisioning state of the PublicIP resource + /// Updating/Deleting/Failed + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.provisioningState")] + public string ProvisioningState { get; set; } + + /// + /// Gets a unique read-only string that changes whenever the resource + /// is updated + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "etag")] + public string Etag { get; set; } + + } +} diff --git a/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/PublicIPAddressListResultInner.cs b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/PublicIPAddressListResultInner.cs new file mode 100644 index 000000000..19ddbb9c2 --- /dev/null +++ b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/PublicIPAddressListResultInner.cs @@ -0,0 +1,51 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.Network.Models +{ + using System.Linq; + + /// + /// Response for ListPublicIpAddresses Api service call + /// + public partial class PublicIPAddressListResultInner + { + /// + /// Initializes a new instance of the PublicIPAddressListResultInner + /// class. + /// + public PublicIPAddressListResultInner() { } + + /// + /// Initializes a new instance of the PublicIPAddressListResultInner + /// class. + /// + /// Gets List of publicIP addresses that exists in + /// a resource group + /// Gets the URL to get the next set of + /// results. + public PublicIPAddressListResultInner(System.Collections.Generic.IList value = default(System.Collections.Generic.IList), string nextLink = default(string)) + { + Value = value; + NextLink = nextLink; + } + + /// + /// Gets List of publicIP addresses that exists in a resource group + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "value")] + public System.Collections.Generic.IList Value { get; set; } + + /// + /// Gets the URL to get the next set of results. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "nextLink")] + public string NextLink { get; set; } + + } +} diff --git a/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/RouteInner.cs b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/RouteInner.cs new file mode 100644 index 000000000..0ce19945b --- /dev/null +++ b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/RouteInner.cs @@ -0,0 +1,110 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.Network.Models +{ + using System.Linq; + + /// + /// Route resource + /// + [Microsoft.Rest.Serialization.JsonTransformation] + public partial class RouteInner : Microsoft.Rest.Azure.SubResource + { + /// + /// Initializes a new instance of the RouteInner class. + /// + public RouteInner() { } + + /// + /// Initializes a new instance of the RouteInner class. + /// + /// Gets or sets the type of Azure hop the + /// packet should be sent to. Possible values include: + /// 'VirtualNetworkGateway', 'VnetLocal', 'Internet', + /// 'VirtualAppliance', 'None' + /// Gets or sets the destination CIDR to + /// which the route applies. + /// Gets or sets the IP address packets + /// should be forwarded to. Next hop values are only allowed in + /// routes where the next hop type is VirtualAppliance. + /// Gets provisioning state of the + /// resource Updating/Deleting/Failed + /// Gets name of the resource that is unique within + /// a resource group. This name can be used to access the + /// resource + /// A unique read-only string that changes whenever + /// the resource is updated + public RouteInner(string nextHopType, string id = default(string), string addressPrefix = default(string), string nextHopIpAddress = default(string), string provisioningState = default(string), string name = default(string), string etag = default(string)) + : base(id) + { + AddressPrefix = addressPrefix; + NextHopType = nextHopType; + NextHopIpAddress = nextHopIpAddress; + ProvisioningState = provisioningState; + Name = name; + Etag = etag; + } + + /// + /// Gets or sets the destination CIDR to which the route applies. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.addressPrefix")] + public string AddressPrefix { get; set; } + + /// + /// Gets or sets the type of Azure hop the packet should be sent to. + /// Possible values include: 'VirtualNetworkGateway', 'VnetLocal', + /// 'Internet', 'VirtualAppliance', 'None' + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.nextHopType")] + public string NextHopType { get; set; } + + /// + /// Gets or sets the IP address packets should be forwarded to. Next + /// hop values are only allowed in routes where the next hop type is + /// VirtualAppliance. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.nextHopIpAddress")] + public string NextHopIpAddress { get; set; } + + /// + /// Gets provisioning state of the resource Updating/Deleting/Failed + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.provisioningState")] + public string ProvisioningState { get; set; } + + /// + /// Gets name of the resource that is unique within a resource group. + /// This name can be used to access the resource + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "name")] + public string Name { get; set; } + + /// + /// Gets or sets a unique read-only string that changes whenever the + /// resource is updated + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "etag")] + public string Etag { get; set; } + + /// + /// Validate the object. + /// + /// + /// Thrown if validation fails + /// + public virtual void Validate() + { + if (NextHopType == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "NextHopType"); + } + } + } +} diff --git a/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/RouteListResultInner.cs b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/RouteListResultInner.cs new file mode 100644 index 000000000..122bc3bfc --- /dev/null +++ b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/RouteListResultInner.cs @@ -0,0 +1,48 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.Network.Models +{ + using System.Linq; + + /// + /// Response for ListRoute Api servive call + /// + public partial class RouteListResultInner + { + /// + /// Initializes a new instance of the RouteListResultInner class. + /// + public RouteListResultInner() { } + + /// + /// Initializes a new instance of the RouteListResultInner class. + /// + /// Gets List of Routes in a resource group + /// Gets the URL to get the next set of + /// results. + public RouteListResultInner(System.Collections.Generic.IList value = default(System.Collections.Generic.IList), string nextLink = default(string)) + { + Value = value; + NextLink = nextLink; + } + + /// + /// Gets List of Routes in a resource group + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "value")] + public System.Collections.Generic.IList Value { get; set; } + + /// + /// Gets the URL to get the next set of results. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "nextLink")] + public string NextLink { get; set; } + + } +} diff --git a/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/RouteNextHopType.cs b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/RouteNextHopType.cs new file mode 100644 index 000000000..3d782fcd7 --- /dev/null +++ b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/RouteNextHopType.cs @@ -0,0 +1,23 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.Network.Models +{ + + /// + /// Defines values for RouteNextHopType. + /// + public static class RouteNextHopType + { + public const string VirtualNetworkGateway = "VirtualNetworkGateway"; + public const string VnetLocal = "VnetLocal"; + public const string Internet = "Internet"; + public const string VirtualAppliance = "VirtualAppliance"; + public const string None = "None"; + } +} diff --git a/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/RouteTableInner.cs b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/RouteTableInner.cs new file mode 100644 index 000000000..5d89d983c --- /dev/null +++ b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/RouteTableInner.cs @@ -0,0 +1,69 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.Network.Models +{ + using System.Linq; + + /// + /// RouteTable resource + /// + [Microsoft.Rest.Serialization.JsonTransformation] + public partial class RouteTableInner : Microsoft.Rest.Azure.Resource + { + /// + /// Initializes a new instance of the RouteTableInner class. + /// + public RouteTableInner() { } + + /// + /// Initializes a new instance of the RouteTableInner class. + /// + /// Gets or sets Routes in a Route Table + /// Gets collection of references to + /// subnets + /// Gets provisioning state of the + /// resource Updating/Deleting/Failed + /// Gets a unique read-only string that changes + /// whenever the resource is updated + public RouteTableInner(string location = default(string), string id = default(string), string name = default(string), string type = default(string), System.Collections.Generic.IDictionary tags = default(System.Collections.Generic.IDictionary), System.Collections.Generic.IList routes = default(System.Collections.Generic.IList), System.Collections.Generic.IList subnets = default(System.Collections.Generic.IList), string provisioningState = default(string), string etag = default(string)) + : base(location, id, name, type, tags) + { + Routes = routes; + Subnets = subnets; + ProvisioningState = provisioningState; + Etag = etag; + } + + /// + /// Gets or sets Routes in a Route Table + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.routes")] + public System.Collections.Generic.IList Routes { get; set; } + + /// + /// Gets collection of references to subnets + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.subnets")] + public System.Collections.Generic.IList Subnets { get; private set; } + + /// + /// Gets provisioning state of the resource Updating/Deleting/Failed + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.provisioningState")] + public string ProvisioningState { get; set; } + + /// + /// Gets a unique read-only string that changes whenever the resource + /// is updated + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "etag")] + public string Etag { get; set; } + + } +} diff --git a/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/RouteTableListResultInner.cs b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/RouteTableListResultInner.cs new file mode 100644 index 000000000..edcf47242 --- /dev/null +++ b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/RouteTableListResultInner.cs @@ -0,0 +1,49 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.Network.Models +{ + using System.Linq; + + /// + /// Response for ListRouteTable Api servive call + /// + public partial class RouteTableListResultInner + { + /// + /// Initializes a new instance of the RouteTableListResultInner class. + /// + public RouteTableListResultInner() { } + + /// + /// Initializes a new instance of the RouteTableListResultInner class. + /// + /// Gets List of RouteTables in a resource + /// group + /// Gets the URL to get the next set of + /// results. + public RouteTableListResultInner(System.Collections.Generic.IList value = default(System.Collections.Generic.IList), string nextLink = default(string)) + { + Value = value; + NextLink = nextLink; + } + + /// + /// Gets List of RouteTables in a resource group + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "value")] + public System.Collections.Generic.IList Value { get; set; } + + /// + /// Gets the URL to get the next set of results. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "nextLink")] + public string NextLink { get; set; } + + } +} diff --git a/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/SecurityRuleAccess.cs b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/SecurityRuleAccess.cs new file mode 100644 index 000000000..78db23993 --- /dev/null +++ b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/SecurityRuleAccess.cs @@ -0,0 +1,20 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.Network.Models +{ + + /// + /// Defines values for SecurityRuleAccess. + /// + public static class SecurityRuleAccess + { + public const string Allow = "Allow"; + public const string Deny = "Deny"; + } +} diff --git a/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/SecurityRuleDirection.cs b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/SecurityRuleDirection.cs new file mode 100644 index 000000000..3af4f1915 --- /dev/null +++ b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/SecurityRuleDirection.cs @@ -0,0 +1,20 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.Network.Models +{ + + /// + /// Defines values for SecurityRuleDirection. + /// + public static class SecurityRuleDirection + { + public const string Inbound = "Inbound"; + public const string Outbound = "Outbound"; + } +} diff --git a/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/SecurityRuleInner.cs b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/SecurityRuleInner.cs new file mode 100644 index 000000000..1db12ebeb --- /dev/null +++ b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/SecurityRuleInner.cs @@ -0,0 +1,205 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.Network.Models +{ + using System.Linq; + + /// + /// Network security rule + /// + [Microsoft.Rest.Serialization.JsonTransformation] + public partial class SecurityRuleInner : Microsoft.Rest.Azure.SubResource + { + /// + /// Initializes a new instance of the SecurityRuleInner class. + /// + public SecurityRuleInner() { } + + /// + /// Initializes a new instance of the SecurityRuleInner class. + /// + /// Gets or sets Network protocol this rule + /// applies to. Can be Tcp, Udp or All(*). Possible values include: + /// 'Tcp', 'Udp', '*' + /// Gets or sets source address + /// prefix. CIDR or source IP range. Asterix '*' can also be used to + /// match all source IPs. Default tags such as 'VirtualNetwork', + /// 'AzureLoadBalancer' and 'Internet' can also be used. If this is + /// an ingress rule, specifies where network traffic originates from. + /// + /// Gets or sets destination + /// address prefix. CIDR or source IP range. Asterix '*' can also be + /// used to match all source IPs. Default tags such as + /// 'VirtualNetwork', 'AzureLoadBalancer' and 'Internet' can also be + /// used. + /// Gets or sets network traffic is allowed or + /// denied. Possible values are 'Allow' and 'Deny'. Possible values + /// include: 'Allow', 'Deny' + /// Gets or sets the direction of the + /// rule.InBound or Outbound. The direction specifies if rule will be + /// evaluated on incoming or outcoming traffic. Possible values + /// include: 'Inbound', 'Outbound' + /// Gets or sets a description for this + /// rule. Restricted to 140 chars. + /// Gets or sets Source Port or Range. + /// Integer or range between 0 and 65535. Asterix '*' can also be + /// used to match all ports. + /// Gets or sets Destination Port + /// or Range. Integer or range between 0 and 65535. Asterix '*' can + /// also be used to match all ports. + /// Gets or sets the priority of the rule. The + /// value can be between 100 and 4096. The priority number must be + /// unique for each rule in the collection. The lower the priority + /// number, the higher the priority of the rule. + /// Gets provisioning state of the + /// PublicIP resource Updating/Deleting/Failed + /// Gets name of the resource that is unique within + /// a resource group. This name can be used to access the + /// resource + /// A unique read-only string that changes whenever + /// the resource is updated + public SecurityRuleInner(string protocol, string sourceAddressPrefix, string destinationAddressPrefix, string access, string direction, string id = default(string), string description = default(string), string sourcePortRange = default(string), string destinationPortRange = default(string), int? priority = default(int?), string provisioningState = default(string), string name = default(string), string etag = default(string)) + : base(id) + { + Description = description; + Protocol = protocol; + SourcePortRange = sourcePortRange; + DestinationPortRange = destinationPortRange; + SourceAddressPrefix = sourceAddressPrefix; + DestinationAddressPrefix = destinationAddressPrefix; + Access = access; + Priority = priority; + Direction = direction; + ProvisioningState = provisioningState; + Name = name; + Etag = etag; + } + + /// + /// Gets or sets a description for this rule. Restricted to 140 chars. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.description")] + public string Description { get; set; } + + /// + /// Gets or sets Network protocol this rule applies to. Can be Tcp, + /// Udp or All(*). Possible values include: 'Tcp', 'Udp', '*' + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.protocol")] + public string Protocol { get; set; } + + /// + /// Gets or sets Source Port or Range. Integer or range between 0 and + /// 65535. Asterix '*' can also be used to match all ports. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.sourcePortRange")] + public string SourcePortRange { get; set; } + + /// + /// Gets or sets Destination Port or Range. Integer or range between 0 + /// and 65535. Asterix '*' can also be used to match all ports. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.destinationPortRange")] + public string DestinationPortRange { get; set; } + + /// + /// Gets or sets source address prefix. CIDR or source IP range. + /// Asterix '*' can also be used to match all source IPs. Default + /// tags such as 'VirtualNetwork', 'AzureLoadBalancer' and 'Internet' + /// can also be used. If this is an ingress rule, specifies where + /// network traffic originates from. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.sourceAddressPrefix")] + public string SourceAddressPrefix { get; set; } + + /// + /// Gets or sets destination address prefix. CIDR or source IP range. + /// Asterix '*' can also be used to match all source IPs. Default + /// tags such as 'VirtualNetwork', 'AzureLoadBalancer' and 'Internet' + /// can also be used. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.destinationAddressPrefix")] + public string DestinationAddressPrefix { get; set; } + + /// + /// Gets or sets network traffic is allowed or denied. Possible values + /// are 'Allow' and 'Deny'. Possible values include: 'Allow', 'Deny' + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.access")] + public string Access { get; set; } + + /// + /// Gets or sets the priority of the rule. The value can be between + /// 100 and 4096. The priority number must be unique for each rule in + /// the collection. The lower the priority number, the higher the + /// priority of the rule. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.priority")] + public int? Priority { get; set; } + + /// + /// Gets or sets the direction of the rule.InBound or Outbound. The + /// direction specifies if rule will be evaluated on incoming or + /// outcoming traffic. Possible values include: 'Inbound', 'Outbound' + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.direction")] + public string Direction { get; set; } + + /// + /// Gets provisioning state of the PublicIP resource + /// Updating/Deleting/Failed + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.provisioningState")] + public string ProvisioningState { get; set; } + + /// + /// Gets name of the resource that is unique within a resource group. + /// This name can be used to access the resource + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "name")] + public string Name { get; set; } + + /// + /// Gets or sets a unique read-only string that changes whenever the + /// resource is updated + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "etag")] + public string Etag { get; set; } + + /// + /// Validate the object. + /// + /// + /// Thrown if validation fails + /// + public virtual void Validate() + { + if (Protocol == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "Protocol"); + } + if (SourceAddressPrefix == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "SourceAddressPrefix"); + } + if (DestinationAddressPrefix == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "DestinationAddressPrefix"); + } + if (Access == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "Access"); + } + if (Direction == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "Direction"); + } + } + } +} diff --git a/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/SecurityRuleListResultInner.cs b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/SecurityRuleListResultInner.cs new file mode 100644 index 000000000..97185eed6 --- /dev/null +++ b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/SecurityRuleListResultInner.cs @@ -0,0 +1,52 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.Network.Models +{ + using System.Linq; + + /// + /// Response for ListSecurityRule Api service callRetrieves all security + /// rules that belongs to a network security group + /// + public partial class SecurityRuleListResultInner + { + /// + /// Initializes a new instance of the SecurityRuleListResultInner + /// class. + /// + public SecurityRuleListResultInner() { } + + /// + /// Initializes a new instance of the SecurityRuleListResultInner + /// class. + /// + /// Gets security rules in a network security + /// group + /// Gets the URL to get the next set of + /// results. + public SecurityRuleListResultInner(System.Collections.Generic.IList value = default(System.Collections.Generic.IList), string nextLink = default(string)) + { + Value = value; + NextLink = nextLink; + } + + /// + /// Gets security rules in a network security group + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "value")] + public System.Collections.Generic.IList Value { get; set; } + + /// + /// Gets the URL to get the next set of results. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "nextLink")] + public string NextLink { get; set; } + + } +} diff --git a/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/SecurityRuleProtocol.cs b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/SecurityRuleProtocol.cs new file mode 100644 index 000000000..3ad57550e --- /dev/null +++ b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/SecurityRuleProtocol.cs @@ -0,0 +1,21 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.Network.Models +{ + + /// + /// Defines values for SecurityRuleProtocol. + /// + public static class SecurityRuleProtocol + { + public const string Tcp = "Tcp"; + public const string Udp = "Udp"; + public const string Asterisk = "*"; + } +} diff --git a/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/ServiceProviderProvisioningState.cs b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/ServiceProviderProvisioningState.cs new file mode 100644 index 000000000..9bd50cd1f --- /dev/null +++ b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/ServiceProviderProvisioningState.cs @@ -0,0 +1,22 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.Network.Models +{ + + /// + /// Defines values for ServiceProviderProvisioningState. + /// + public static class ServiceProviderProvisioningState + { + public const string NotProvisioned = "NotProvisioned"; + public const string Provisioning = "Provisioning"; + public const string Provisioned = "Provisioned"; + public const string Deprovisioning = "Deprovisioning"; + } +} diff --git a/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/SubnetInner.cs b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/SubnetInner.cs new file mode 100644 index 000000000..1103a6fd2 --- /dev/null +++ b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/SubnetInner.cs @@ -0,0 +1,100 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.Network.Models +{ + using System.Linq; + + /// + /// Subnet in a VirtualNework resource + /// + [Microsoft.Rest.Serialization.JsonTransformation] + public partial class SubnetInner : Microsoft.Rest.Azure.SubResource + { + /// + /// Initializes a new instance of the SubnetInner class. + /// + public SubnetInner() { } + + /// + /// Initializes a new instance of the SubnetInner class. + /// + /// Gets or sets Address prefix for the + /// subnet. + /// Gets or sets the reference of + /// the NetworkSecurityGroup resource + /// Gets or sets the reference of the + /// RouteTable resource + /// Gets array of references to the + /// network interface IP configurations using subnet + /// Gets provisioning state of the + /// resource + /// Gets or sets the name of the resource that is + /// unique within a resource group. This name can be used to access + /// the resource + /// A unique read-only string that changes whenever + /// the resource is updated + public SubnetInner(string id = default(string), string addressPrefix = default(string), NetworkSecurityGroupInner networkSecurityGroup = default(NetworkSecurityGroupInner), RouteTableInner routeTable = default(RouteTableInner), System.Collections.Generic.IList ipConfigurations = default(System.Collections.Generic.IList), string provisioningState = default(string), string name = default(string), string etag = default(string)) + : base(id) + { + AddressPrefix = addressPrefix; + NetworkSecurityGroup = networkSecurityGroup; + RouteTable = routeTable; + IpConfigurations = ipConfigurations; + ProvisioningState = provisioningState; + Name = name; + Etag = etag; + } + + /// + /// Gets or sets Address prefix for the subnet. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.addressPrefix")] + public string AddressPrefix { get; set; } + + /// + /// Gets or sets the reference of the NetworkSecurityGroup resource + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.networkSecurityGroup")] + public NetworkSecurityGroupInner NetworkSecurityGroup { get; set; } + + /// + /// Gets or sets the reference of the RouteTable resource + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.routeTable")] + public RouteTableInner RouteTable { get; set; } + + /// + /// Gets array of references to the network interface IP + /// configurations using subnet + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.ipConfigurations")] + public System.Collections.Generic.IList IpConfigurations { get; private set; } + + /// + /// Gets provisioning state of the resource + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.provisioningState")] + public string ProvisioningState { get; set; } + + /// + /// Gets or sets the name of the resource that is unique within a + /// resource group. This name can be used to access the resource + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "name")] + public string Name { get; set; } + + /// + /// Gets or sets a unique read-only string that changes whenever the + /// resource is updated + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "etag")] + public string Etag { get; set; } + + } +} diff --git a/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/SubnetListResultInner.cs b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/SubnetListResultInner.cs new file mode 100644 index 000000000..03dfbda67 --- /dev/null +++ b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/SubnetListResultInner.cs @@ -0,0 +1,49 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.Network.Models +{ + using System.Linq; + + /// + /// Response for ListSubnets Api service callRetrieves all subnet that + /// belongs to a virtual network + /// + public partial class SubnetListResultInner + { + /// + /// Initializes a new instance of the SubnetListResultInner class. + /// + public SubnetListResultInner() { } + + /// + /// Initializes a new instance of the SubnetListResultInner class. + /// + /// Gets the subnets in a virtual network + /// Gets the URL to get the next set of + /// results. + public SubnetListResultInner(System.Collections.Generic.IList value = default(System.Collections.Generic.IList), string nextLink = default(string)) + { + Value = value; + NextLink = nextLink; + } + + /// + /// Gets the subnets in a virtual network + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "value")] + public System.Collections.Generic.IList Value { get; set; } + + /// + /// Gets the URL to get the next set of results. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "nextLink")] + public string NextLink { get; set; } + + } +} diff --git a/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/TransportProtocol.cs b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/TransportProtocol.cs new file mode 100644 index 000000000..aedeefd1a --- /dev/null +++ b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/TransportProtocol.cs @@ -0,0 +1,20 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.Network.Models +{ + + /// + /// Defines values for TransportProtocol. + /// + public static class TransportProtocol + { + public const string Udp = "Udp"; + public const string Tcp = "Tcp"; + } +} diff --git a/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/Usage.cs b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/Usage.cs new file mode 100644 index 000000000..13d2b4127 --- /dev/null +++ b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/Usage.cs @@ -0,0 +1,83 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.Network.Models +{ + using System.Linq; + + /// + /// Describes Network Resource Usage. + /// + public partial class Usage + { + /// + /// Initializes a new instance of the Usage class. + /// + public Usage() { } + + /// + /// Initializes a new instance of the Usage class. + /// + /// Gets or sets the current value of the + /// usage. + /// Gets or sets the limit of usage. + /// Gets or sets the name of the type of + /// usage. + public Usage(long currentValue, long limit, UsageName name) + { + CurrentValue = currentValue; + Limit = limit; + Name = name; + } + /// + /// Static constructor for Usage class. + /// + static Usage() + { + Unit = "Count"; + } + + /// + /// Gets or sets the current value of the usage. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "currentValue")] + public long CurrentValue { get; set; } + + /// + /// Gets or sets the limit of usage. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "limit")] + public long Limit { get; set; } + + /// + /// Gets or sets the name of the type of usage. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "name")] + public UsageName Name { get; set; } + + /// + /// Gets or sets an enum describing the unit of measurement. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "unit")] + public static string Unit { get; private set; } + + /// + /// Validate the object. + /// + /// + /// Thrown if validation fails + /// + public virtual void Validate() + { + if (Name == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "Name"); + } + } + } +} diff --git a/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/UsageName.cs b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/UsageName.cs new file mode 100644 index 000000000..49d741011 --- /dev/null +++ b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/UsageName.cs @@ -0,0 +1,49 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.Network.Models +{ + using System.Linq; + + /// + /// The Usage Names. + /// + public partial class UsageName + { + /// + /// Initializes a new instance of the UsageName class. + /// + public UsageName() { } + + /// + /// Initializes a new instance of the UsageName class. + /// + /// Gets or sets a string describing the resource + /// name. + /// Gets or sets a localized string + /// describing the resource name. + public UsageName(string value = default(string), string localizedValue = default(string)) + { + Value = value; + LocalizedValue = localizedValue; + } + + /// + /// Gets or sets a string describing the resource name. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "value")] + public string Value { get; set; } + + /// + /// Gets or sets a localized string describing the resource name. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "localizedValue")] + public string LocalizedValue { get; set; } + + } +} diff --git a/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/UsagesListResultInner.cs b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/UsagesListResultInner.cs new file mode 100644 index 000000000..1ce2f7314 --- /dev/null +++ b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/UsagesListResultInner.cs @@ -0,0 +1,48 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.Network.Models +{ + using System.Linq; + + /// + /// The List Usages operation response. + /// + public partial class UsagesListResultInner + { + /// + /// Initializes a new instance of the UsagesListResultInner class. + /// + public UsagesListResultInner() { } + + /// + /// Initializes a new instance of the UsagesListResultInner class. + /// + /// Gets or sets the list Network Resource + /// Usages. + /// URL to get the next set of results. + public UsagesListResultInner(System.Collections.Generic.IList value = default(System.Collections.Generic.IList), string nextLink = default(string)) + { + Value = value; + NextLink = nextLink; + } + + /// + /// Gets or sets the list Network Resource Usages. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "value")] + public System.Collections.Generic.IList Value { get; set; } + + /// + /// Gets or sets URL to get the next set of results. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "nextLink")] + public string NextLink { get; set; } + + } +} diff --git a/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/VirtualNetworkGatewayConnectionInner.cs b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/VirtualNetworkGatewayConnectionInner.cs new file mode 100644 index 000000000..f3c94af16 --- /dev/null +++ b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/VirtualNetworkGatewayConnectionInner.cs @@ -0,0 +1,166 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.Network.Models +{ + using System.Linq; + + /// + /// A common class for general resource information + /// + [Microsoft.Rest.Serialization.JsonTransformation] + public partial class VirtualNetworkGatewayConnectionInner : Microsoft.Rest.Azure.Resource + { + /// + /// Initializes a new instance of the + /// VirtualNetworkGatewayConnectionInner class. + /// + public VirtualNetworkGatewayConnectionInner() { } + + /// + /// Initializes a new instance of the + /// VirtualNetworkGatewayConnectionInner class. + /// + /// The authorizationKey. + /// Gateway connection type + /// -Ipsec/Dedicated/VpnClient/Vnet2Vnet. Possible values include: + /// 'IPsec', 'Vnet2Vnet', 'ExpressRoute', 'VPNClient' + /// The Routing weight. + /// The Ipsec share key. + /// Virtual network Gateway connection + /// status. Possible values include: 'Unknown', 'Connecting', + /// 'Connected', 'NotConnected' + /// The Egress Bytes Transferred + /// in this connection + /// The Ingress Bytes + /// Transferred in this connection + /// The reference to peerings resource. + /// EnableBgp Flag + /// Gets or sets resource guid property of + /// the VirtualNetworkGatewayConnection resource + /// Gets provisioning state of the + /// VirtualNetworkGatewayConnection resource + /// Updating/Deleting/Failed + /// Gets a unique read-only string that changes + /// whenever the resource is updated + public VirtualNetworkGatewayConnectionInner(string location = default(string), string id = default(string), string name = default(string), string type = default(string), System.Collections.Generic.IDictionary tags = default(System.Collections.Generic.IDictionary), string authorizationKey = default(string), VirtualNetworkGatewayInner virtualNetworkGateway1 = default(VirtualNetworkGatewayInner), VirtualNetworkGatewayInner virtualNetworkGateway2 = default(VirtualNetworkGatewayInner), LocalNetworkGatewayInner localNetworkGateway2 = default(LocalNetworkGatewayInner), string connectionType = default(string), int? routingWeight = default(int?), string sharedKey = default(string), string connectionStatus = default(string), long? egressBytesTransferred = default(long?), long? ingressBytesTransferred = default(long?), Microsoft.Rest.Azure.SubResource peer = default(Microsoft.Rest.Azure.SubResource), bool? enableBgp = default(bool?), string resourceGuid = default(string), string provisioningState = default(string), string etag = default(string)) + : base(location, id, name, type, tags) + { + AuthorizationKey = authorizationKey; + VirtualNetworkGateway1 = virtualNetworkGateway1; + VirtualNetworkGateway2 = virtualNetworkGateway2; + LocalNetworkGateway2 = localNetworkGateway2; + ConnectionType = connectionType; + RoutingWeight = routingWeight; + SharedKey = sharedKey; + ConnectionStatus = connectionStatus; + EgressBytesTransferred = egressBytesTransferred; + IngressBytesTransferred = ingressBytesTransferred; + Peer = peer; + EnableBgp = enableBgp; + ResourceGuid = resourceGuid; + ProvisioningState = provisioningState; + Etag = etag; + } + + /// + /// Gets or sets the authorizationKey. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.authorizationKey")] + public string AuthorizationKey { get; set; } + + /// + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.virtualNetworkGateway1")] + public VirtualNetworkGatewayInner VirtualNetworkGateway1 { get; set; } + + /// + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.virtualNetworkGateway2")] + public VirtualNetworkGatewayInner VirtualNetworkGateway2 { get; set; } + + /// + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.localNetworkGateway2")] + public LocalNetworkGatewayInner LocalNetworkGateway2 { get; set; } + + /// + /// Gets or sets gateway connection type + /// -Ipsec/Dedicated/VpnClient/Vnet2Vnet. Possible values include: + /// 'IPsec', 'Vnet2Vnet', 'ExpressRoute', 'VPNClient' + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.connectionType")] + public string ConnectionType { get; set; } + + /// + /// Gets or sets the Routing weight. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.routingWeight")] + public int? RoutingWeight { get; set; } + + /// + /// Gets or sets the Ipsec share key. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.sharedKey")] + public string SharedKey { get; set; } + + /// + /// Gets or sets virtual network Gateway connection status. Possible + /// values include: 'Unknown', 'Connecting', 'Connected', + /// 'NotConnected' + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.connectionStatus")] + public string ConnectionStatus { get; set; } + + /// + /// Gets or sets the Egress Bytes Transferred in this connection + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.egressBytesTransferred")] + public long? EgressBytesTransferred { get; set; } + + /// + /// Gets or sets the Ingress Bytes Transferred in this connection + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.ingressBytesTransferred")] + public long? IngressBytesTransferred { get; set; } + + /// + /// Gets or sets the reference to peerings resource. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.peer")] + public Microsoft.Rest.Azure.SubResource Peer { get; set; } + + /// + /// Gets or sets enableBgp Flag + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.enableBgp")] + public bool? EnableBgp { get; set; } + + /// + /// Gets or sets resource guid property of the + /// VirtualNetworkGatewayConnection resource + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.resourceGuid")] + public string ResourceGuid { get; set; } + + /// + /// Gets provisioning state of the VirtualNetworkGatewayConnection + /// resource Updating/Deleting/Failed + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.provisioningState")] + public string ProvisioningState { get; set; } + + /// + /// Gets a unique read-only string that changes whenever the resource + /// is updated + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "etag")] + public string Etag { get; set; } + + } +} diff --git a/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/VirtualNetworkGatewayConnectionListResultInner.cs b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/VirtualNetworkGatewayConnectionListResultInner.cs new file mode 100644 index 000000000..ccbd62a7f --- /dev/null +++ b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/VirtualNetworkGatewayConnectionListResultInner.cs @@ -0,0 +1,52 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.Network.Models +{ + using System.Linq; + + /// + /// Response for ListVirtualNetworkGatewayConnections Api service call + /// + public partial class VirtualNetworkGatewayConnectionListResultInner + { + /// + /// Initializes a new instance of the + /// VirtualNetworkGatewayConnectionListResultInner class. + /// + public VirtualNetworkGatewayConnectionListResultInner() { } + + /// + /// Initializes a new instance of the + /// VirtualNetworkGatewayConnectionListResultInner class. + /// + /// Gets List of VirtualNetworkGatewayConnections + /// that exists in a resource group + /// Gets the URL to get the next set of + /// results. + public VirtualNetworkGatewayConnectionListResultInner(System.Collections.Generic.IList value = default(System.Collections.Generic.IList), string nextLink = default(string)) + { + Value = value; + NextLink = nextLink; + } + + /// + /// Gets List of VirtualNetworkGatewayConnections that exists in a + /// resource group + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "value")] + public System.Collections.Generic.IList Value { get; set; } + + /// + /// Gets the URL to get the next set of results. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "nextLink")] + public string NextLink { get; set; } + + } +} diff --git a/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/VirtualNetworkGatewayConnectionStatus.cs b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/VirtualNetworkGatewayConnectionStatus.cs new file mode 100644 index 000000000..2c3585457 --- /dev/null +++ b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/VirtualNetworkGatewayConnectionStatus.cs @@ -0,0 +1,22 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.Network.Models +{ + + /// + /// Defines values for VirtualNetworkGatewayConnectionStatus. + /// + public static class VirtualNetworkGatewayConnectionStatus + { + public const string Unknown = "Unknown"; + public const string Connecting = "Connecting"; + public const string Connected = "Connected"; + public const string NotConnected = "NotConnected"; + } +} diff --git a/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/VirtualNetworkGatewayConnectionType.cs b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/VirtualNetworkGatewayConnectionType.cs new file mode 100644 index 000000000..525326bb0 --- /dev/null +++ b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/VirtualNetworkGatewayConnectionType.cs @@ -0,0 +1,22 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.Network.Models +{ + + /// + /// Defines values for VirtualNetworkGatewayConnectionType. + /// + public static class VirtualNetworkGatewayConnectionType + { + public const string IPsec = "IPsec"; + public const string Vnet2Vnet = "Vnet2Vnet"; + public const string ExpressRoute = "ExpressRoute"; + public const string VPNClient = "VPNClient"; + } +} diff --git a/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/VirtualNetworkGatewayIPConfigurationInner.cs b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/VirtualNetworkGatewayIPConfigurationInner.cs new file mode 100644 index 000000000..977a6917c --- /dev/null +++ b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/VirtualNetworkGatewayIPConfigurationInner.cs @@ -0,0 +1,95 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.Network.Models +{ + using System.Linq; + + /// + /// IpConfiguration for Virtual network gateway + /// + [Microsoft.Rest.Serialization.JsonTransformation] + public partial class VirtualNetworkGatewayIPConfigurationInner : Microsoft.Rest.Azure.SubResource + { + /// + /// Initializes a new instance of the + /// VirtualNetworkGatewayIPConfigurationInner class. + /// + public VirtualNetworkGatewayIPConfigurationInner() { } + + /// + /// Initializes a new instance of the + /// VirtualNetworkGatewayIPConfigurationInner class. + /// + /// Gets or sets PrivateIP + /// allocation method. Possible values include: 'Static', + /// 'Dynamic' + /// Gets or sets the reference of the subnet + /// resource + /// Gets or sets the reference of the + /// PublicIP resource + /// Gets provisioning state of the + /// PublicIP resource Updating/Deleting/Failed + /// Gets name of the resource that is unique within + /// a resource group. This name can be used to access the + /// resource + /// A unique read-only string that changes whenever + /// the resource is updated + public VirtualNetworkGatewayIPConfigurationInner(string id = default(string), string privateIPAllocationMethod = default(string), Microsoft.Rest.Azure.SubResource subnet = default(Microsoft.Rest.Azure.SubResource), Microsoft.Rest.Azure.SubResource publicIPAddress = default(Microsoft.Rest.Azure.SubResource), string provisioningState = default(string), string name = default(string), string etag = default(string)) + : base(id) + { + PrivateIPAllocationMethod = privateIPAllocationMethod; + Subnet = subnet; + PublicIPAddress = publicIPAddress; + ProvisioningState = provisioningState; + Name = name; + Etag = etag; + } + + /// + /// Gets or sets PrivateIP allocation method. Possible values include: + /// 'Static', 'Dynamic' + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.privateIPAllocationMethod")] + public string PrivateIPAllocationMethod { get; set; } + + /// + /// Gets or sets the reference of the subnet resource + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.subnet")] + public Microsoft.Rest.Azure.SubResource Subnet { get; set; } + + /// + /// Gets or sets the reference of the PublicIP resource + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.publicIPAddress")] + public Microsoft.Rest.Azure.SubResource PublicIPAddress { get; set; } + + /// + /// Gets provisioning state of the PublicIP resource + /// Updating/Deleting/Failed + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.provisioningState")] + public string ProvisioningState { get; set; } + + /// + /// Gets name of the resource that is unique within a resource group. + /// This name can be used to access the resource + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "name")] + public string Name { get; set; } + + /// + /// Gets or sets a unique read-only string that changes whenever the + /// resource is updated + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "etag")] + public string Etag { get; set; } + + } +} diff --git a/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/VirtualNetworkGatewayInner.cs b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/VirtualNetworkGatewayInner.cs new file mode 100644 index 000000000..a82dd1394 --- /dev/null +++ b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/VirtualNetworkGatewayInner.cs @@ -0,0 +1,145 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.Network.Models +{ + using System.Linq; + + /// + /// A common class for general resource information + /// + [Microsoft.Rest.Serialization.JsonTransformation] + public partial class VirtualNetworkGatewayInner : Microsoft.Rest.Azure.Resource + { + /// + /// Initializes a new instance of the VirtualNetworkGatewayInner class. + /// + public VirtualNetworkGatewayInner() { } + + /// + /// Initializes a new instance of the VirtualNetworkGatewayInner class. + /// + /// IpConfigurations for Virtual + /// network gateway. + /// The type of this virtual network + /// gateway. Possible values include: 'Vpn', 'ExpressRoute' + /// The type of this virtual network gateway. + /// Possible values include: 'PolicyBased', 'RouteBased' + /// EnableBgp Flag + /// Gets or sets the reference of the + /// LocalNetworkGateway resource which represents Local network site + /// having default routes. Assign Null value in case of removing + /// existing default site setting. + /// Gets or sets the reference of the + /// VirtualNetworkGatewaySku resource which represents the sku + /// selected for Virtual network gateway. + /// Gets or sets the reference of + /// the VpnClientConfiguration resource which represents the P2S + /// VpnClient configurations. + /// Virtual network gateway's BGP speaker + /// settings + /// Gets or sets resource guid property of + /// the VirtualNetworkGateway resource + /// Gets provisioning state of the + /// VirtualNetworkGateway resource Updating/Deleting/Failed + /// Gets a unique read-only string that changes + /// whenever the resource is updated + public VirtualNetworkGatewayInner(string location = default(string), string id = default(string), string name = default(string), string type = default(string), System.Collections.Generic.IDictionary tags = default(System.Collections.Generic.IDictionary), System.Collections.Generic.IList ipConfigurations = default(System.Collections.Generic.IList), string gatewayType = default(string), string vpnType = default(string), bool? enableBgp = default(bool?), Microsoft.Rest.Azure.SubResource gatewayDefaultSite = default(Microsoft.Rest.Azure.SubResource), VirtualNetworkGatewaySku sku = default(VirtualNetworkGatewaySku), VpnClientConfiguration vpnClientConfiguration = default(VpnClientConfiguration), BgpSettings bgpSettings = default(BgpSettings), string resourceGuid = default(string), string provisioningState = default(string), string etag = default(string)) + : base(location, id, name, type, tags) + { + IpConfigurations = ipConfigurations; + GatewayType = gatewayType; + VpnType = vpnType; + EnableBgp = enableBgp; + GatewayDefaultSite = gatewayDefaultSite; + Sku = sku; + VpnClientConfiguration = vpnClientConfiguration; + BgpSettings = bgpSettings; + ResourceGuid = resourceGuid; + ProvisioningState = provisioningState; + Etag = etag; + } + + /// + /// Gets or sets ipConfigurations for Virtual network gateway. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.ipConfigurations")] + public System.Collections.Generic.IList IpConfigurations { get; set; } + + /// + /// Gets or sets the type of this virtual network gateway. Possible + /// values include: 'Vpn', 'ExpressRoute' + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.gatewayType")] + public string GatewayType { get; set; } + + /// + /// Gets or sets the type of this virtual network gateway. Possible + /// values include: 'PolicyBased', 'RouteBased' + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.vpnType")] + public string VpnType { get; set; } + + /// + /// Gets or sets enableBgp Flag + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.enableBgp")] + public bool? EnableBgp { get; set; } + + /// + /// Gets or sets the reference of the LocalNetworkGateway resource + /// which represents Local network site having default routes. Assign + /// Null value in case of removing existing default site setting. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.gatewayDefaultSite")] + public Microsoft.Rest.Azure.SubResource GatewayDefaultSite { get; set; } + + /// + /// Gets or sets the reference of the VirtualNetworkGatewaySku + /// resource which represents the sku selected for Virtual network + /// gateway. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.sku")] + public VirtualNetworkGatewaySku Sku { get; set; } + + /// + /// Gets or sets the reference of the VpnClientConfiguration resource + /// which represents the P2S VpnClient configurations. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.vpnClientConfiguration")] + public VpnClientConfiguration VpnClientConfiguration { get; set; } + + /// + /// Gets or sets virtual network gateway's BGP speaker settings + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.bgpSettings")] + public BgpSettings BgpSettings { get; set; } + + /// + /// Gets or sets resource guid property of the VirtualNetworkGateway + /// resource + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.resourceGuid")] + public string ResourceGuid { get; set; } + + /// + /// Gets provisioning state of the VirtualNetworkGateway resource + /// Updating/Deleting/Failed + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.provisioningState")] + public string ProvisioningState { get; set; } + + /// + /// Gets a unique read-only string that changes whenever the resource + /// is updated + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "etag")] + public string Etag { get; set; } + + } +} diff --git a/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/VirtualNetworkGatewayListResultInner.cs b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/VirtualNetworkGatewayListResultInner.cs new file mode 100644 index 000000000..e4f5b66cd --- /dev/null +++ b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/VirtualNetworkGatewayListResultInner.cs @@ -0,0 +1,51 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.Network.Models +{ + using System.Linq; + + /// + /// Response for ListVirtualNetworkGateways Api service call + /// + public partial class VirtualNetworkGatewayListResultInner + { + /// + /// Initializes a new instance of the + /// VirtualNetworkGatewayListResultInner class. + /// + public VirtualNetworkGatewayListResultInner() { } + + /// + /// Initializes a new instance of the + /// VirtualNetworkGatewayListResultInner class. + /// + /// Gets List of VirtualNetworkGateways that + /// exists in a resource group + /// Gets the URL to get the next set of + /// results. + public VirtualNetworkGatewayListResultInner(System.Collections.Generic.IList value = default(System.Collections.Generic.IList), string nextLink = default(string)) + { + Value = value; + NextLink = nextLink; + } + + /// + /// Gets List of VirtualNetworkGateways that exists in a resource group + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "value")] + public System.Collections.Generic.IList Value { get; set; } + + /// + /// Gets the URL to get the next set of results. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "nextLink")] + public string NextLink { get; set; } + + } +} diff --git a/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/VirtualNetworkGatewaySku.cs b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/VirtualNetworkGatewaySku.cs new file mode 100644 index 000000000..7e59c1184 --- /dev/null +++ b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/VirtualNetworkGatewaySku.cs @@ -0,0 +1,61 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.Network.Models +{ + using System.Linq; + + /// + /// VirtualNetworkGatewaySku details + /// + public partial class VirtualNetworkGatewaySku + { + /// + /// Initializes a new instance of the VirtualNetworkGatewaySku class. + /// + public VirtualNetworkGatewaySku() { } + + /// + /// Initializes a new instance of the VirtualNetworkGatewaySku class. + /// + /// Gateway sku name + /// -Basic/HighPerformance/Standard. Possible values include: + /// 'Basic', 'HighPerformance', 'Standard' + /// Gateway sku tier + /// -Basic/HighPerformance/Standard. Possible values include: + /// 'Basic', 'HighPerformance', 'Standard' + /// The capacity + public VirtualNetworkGatewaySku(string name = default(string), string tier = default(string), int? capacity = default(int?)) + { + Name = name; + Tier = tier; + Capacity = capacity; + } + + /// + /// Gets or sets gateway sku name -Basic/HighPerformance/Standard. + /// Possible values include: 'Basic', 'HighPerformance', 'Standard' + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "name")] + public string Name { get; set; } + + /// + /// Gets or sets gateway sku tier -Basic/HighPerformance/Standard. + /// Possible values include: 'Basic', 'HighPerformance', 'Standard' + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "tier")] + public string Tier { get; set; } + + /// + /// Gets or sets the capacity + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "capacity")] + public int? Capacity { get; set; } + + } +} diff --git a/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/VirtualNetworkGatewaySkuName.cs b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/VirtualNetworkGatewaySkuName.cs new file mode 100644 index 000000000..6cdff27a8 --- /dev/null +++ b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/VirtualNetworkGatewaySkuName.cs @@ -0,0 +1,21 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.Network.Models +{ + + /// + /// Defines values for VirtualNetworkGatewaySkuName. + /// + public static class VirtualNetworkGatewaySkuName + { + public const string Basic = "Basic"; + public const string HighPerformance = "HighPerformance"; + public const string Standard = "Standard"; + } +} diff --git a/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/VirtualNetworkGatewaySkuTier.cs b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/VirtualNetworkGatewaySkuTier.cs new file mode 100644 index 000000000..a67f06035 --- /dev/null +++ b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/VirtualNetworkGatewaySkuTier.cs @@ -0,0 +1,21 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.Network.Models +{ + + /// + /// Defines values for VirtualNetworkGatewaySkuTier. + /// + public static class VirtualNetworkGatewaySkuTier + { + public const string Basic = "Basic"; + public const string HighPerformance = "HighPerformance"; + public const string Standard = "Standard"; + } +} diff --git a/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/VirtualNetworkGatewayType.cs b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/VirtualNetworkGatewayType.cs new file mode 100644 index 000000000..30cd52ccd --- /dev/null +++ b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/VirtualNetworkGatewayType.cs @@ -0,0 +1,20 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.Network.Models +{ + + /// + /// Defines values for VirtualNetworkGatewayType. + /// + public static class VirtualNetworkGatewayType + { + public const string Vpn = "Vpn"; + public const string ExpressRoute = "ExpressRoute"; + } +} diff --git a/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/VirtualNetworkInner.cs b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/VirtualNetworkInner.cs new file mode 100644 index 000000000..a564bd596 --- /dev/null +++ b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/VirtualNetworkInner.cs @@ -0,0 +1,101 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.Network.Models +{ + using System.Linq; + + /// + /// Virtual Network resource + /// + [Microsoft.Rest.Serialization.JsonTransformation] + public partial class VirtualNetworkInner : Microsoft.Rest.Azure.Resource + { + /// + /// Initializes a new instance of the VirtualNetworkInner class. + /// + public VirtualNetworkInner() { } + + /// + /// Initializes a new instance of the VirtualNetworkInner class. + /// + /// Gets or sets AddressSpace that contains + /// an array of IP address ranges that can be used by subnets + /// Gets or sets DHCPOptions that contains + /// an array of DNS servers available to VMs deployed in the virtual + /// network + /// Gets or sets list of subnets in a + /// VirtualNetwork + /// Gets or sets list of peerings + /// in a VirtualNetwork + /// Gets or sets resource guid property of + /// the VirtualNetwork resource + /// Gets provisioning state of the + /// PublicIP resource Updating/Deleting/Failed + /// Gets a unique read-only string that changes + /// whenever the resource is updated + public VirtualNetworkInner(string location = default(string), string id = default(string), string name = default(string), string type = default(string), System.Collections.Generic.IDictionary tags = default(System.Collections.Generic.IDictionary), AddressSpace addressSpace = default(AddressSpace), DhcpOptions dhcpOptions = default(DhcpOptions), System.Collections.Generic.IList subnets = default(System.Collections.Generic.IList), System.Collections.Generic.IList virtualNetworkPeerings = default(System.Collections.Generic.IList), string resourceGuid = default(string), string provisioningState = default(string), string etag = default(string)) + : base(location, id, name, type, tags) + { + AddressSpace = addressSpace; + DhcpOptions = dhcpOptions; + Subnets = subnets; + VirtualNetworkPeerings = virtualNetworkPeerings; + ResourceGuid = resourceGuid; + ProvisioningState = provisioningState; + Etag = etag; + } + + /// + /// Gets or sets AddressSpace that contains an array of IP address + /// ranges that can be used by subnets + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.addressSpace")] + public AddressSpace AddressSpace { get; set; } + + /// + /// Gets or sets DHCPOptions that contains an array of DNS servers + /// available to VMs deployed in the virtual network + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.dhcpOptions")] + public DhcpOptions DhcpOptions { get; set; } + + /// + /// Gets or sets list of subnets in a VirtualNetwork + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.subnets")] + public System.Collections.Generic.IList Subnets { get; set; } + + /// + /// Gets or sets list of peerings in a VirtualNetwork + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.VirtualNetworkPeerings")] + public System.Collections.Generic.IList VirtualNetworkPeerings { get; set; } + + /// + /// Gets or sets resource guid property of the VirtualNetwork resource + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.resourceGuid")] + public string ResourceGuid { get; set; } + + /// + /// Gets provisioning state of the PublicIP resource + /// Updating/Deleting/Failed + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.provisioningState")] + public string ProvisioningState { get; set; } + + /// + /// Gets a unique read-only string that changes whenever the resource + /// is updated + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "etag")] + public string Etag { get; set; } + + } +} diff --git a/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/VirtualNetworkListResultInner.cs b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/VirtualNetworkListResultInner.cs new file mode 100644 index 000000000..edc3b5498 --- /dev/null +++ b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/VirtualNetworkListResultInner.cs @@ -0,0 +1,51 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.Network.Models +{ + using System.Linq; + + /// + /// Response for ListVirtualNetworks Api servive call + /// + public partial class VirtualNetworkListResultInner + { + /// + /// Initializes a new instance of the VirtualNetworkListResultInner + /// class. + /// + public VirtualNetworkListResultInner() { } + + /// + /// Initializes a new instance of the VirtualNetworkListResultInner + /// class. + /// + /// Gets list of VirtualNetworks in a resource + /// group + /// Gets the URL to get the next set of + /// results. + public VirtualNetworkListResultInner(System.Collections.Generic.IList value = default(System.Collections.Generic.IList), string nextLink = default(string)) + { + Value = value; + NextLink = nextLink; + } + + /// + /// Gets list of VirtualNetworks in a resource group + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "value")] + public System.Collections.Generic.IList Value { get; set; } + + /// + /// Gets the URL to get the next set of results. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "nextLink")] + public string NextLink { get; set; } + + } +} diff --git a/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/VirtualNetworkPeeringInner.cs b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/VirtualNetworkPeeringInner.cs new file mode 100644 index 000000000..1de622f83 --- /dev/null +++ b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/VirtualNetworkPeeringInner.cs @@ -0,0 +1,134 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.Network.Models +{ + using System.Linq; + + /// + /// Peerings in a VirtualNework resource + /// + [Microsoft.Rest.Serialization.JsonTransformation] + public partial class VirtualNetworkPeeringInner : Microsoft.Rest.Azure.SubResource + { + /// + /// Initializes a new instance of the VirtualNetworkPeeringInner class. + /// + public VirtualNetworkPeeringInner() { } + + /// + /// Initializes a new instance of the VirtualNetworkPeeringInner class. + /// + /// Gets or sets whether the + /// VMs in the linked virtual network space would be able to access + /// all the VMs in local Virtual network space + /// Gets or sets whether the + /// forwarded traffic from the VMs in the remote virtual network will + /// be allowed/disallowed + /// Gets or sets if gatewayLinks can + /// be used in remote virtual network’s link to this virtual + /// network + /// Gets or sets if remote gateways + /// can be used on this virtual network. If the flag is set to true, + /// and allowGatewayTransit on remotepeering is also true, virtual + /// network will use gateways of remote virtual network for transit. + /// Only 1 peering can have this flag set to true. This flag cannot + /// be set if virtual network already has a gateway. + /// Gets or sets the reference of + /// the remote virtual network + /// Gets the status of the virtual network + /// peering. Possible values include: 'Initiated', 'Connected', + /// 'Disconnected' + /// Gets provisioning state of the + /// resource + /// Gets or sets the name of the resource that is + /// unique within a resource group. This name can be used to access + /// the resource + /// A unique read-only string that changes whenever + /// the resource is updated + public VirtualNetworkPeeringInner(string id = default(string), bool? allowVirtualNetworkAccess = default(bool?), bool? allowForwardedTraffic = default(bool?), bool? allowGatewayTransit = default(bool?), bool? useRemoteGateways = default(bool?), Microsoft.Rest.Azure.SubResource remoteVirtualNetwork = default(Microsoft.Rest.Azure.SubResource), string peeringState = default(string), string provisioningState = default(string), string name = default(string), string etag = default(string)) + : base(id) + { + AllowVirtualNetworkAccess = allowVirtualNetworkAccess; + AllowForwardedTraffic = allowForwardedTraffic; + AllowGatewayTransit = allowGatewayTransit; + UseRemoteGateways = useRemoteGateways; + RemoteVirtualNetwork = remoteVirtualNetwork; + PeeringState = peeringState; + ProvisioningState = provisioningState; + Name = name; + Etag = etag; + } + + /// + /// Gets or sets whether the VMs in the linked virtual network space + /// would be able to access all the VMs in local Virtual network space + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.allowVirtualNetworkAccess")] + public bool? AllowVirtualNetworkAccess { get; set; } + + /// + /// Gets or sets whether the forwarded traffic from the VMs in the + /// remote virtual network will be allowed/disallowed + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.allowForwardedTraffic")] + public bool? AllowForwardedTraffic { get; set; } + + /// + /// Gets or sets if gatewayLinks can be used in remote virtual + /// network’s link to this virtual network + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.allowGatewayTransit")] + public bool? AllowGatewayTransit { get; set; } + + /// + /// Gets or sets if remote gateways can be used on this virtual + /// network. If the flag is set to true, and allowGatewayTransit on + /// remotepeering is also true, virtual network will use gateways of + /// remote virtual network for transit. Only 1 peering can have this + /// flag set to true. This flag cannot be set if virtual network + /// already has a gateway. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.useRemoteGateways")] + public bool? UseRemoteGateways { get; set; } + + /// + /// Gets or sets the reference of the remote virtual network + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.remoteVirtualNetwork")] + public Microsoft.Rest.Azure.SubResource RemoteVirtualNetwork { get; set; } + + /// + /// Gets the status of the virtual network peering. Possible values + /// include: 'Initiated', 'Connected', 'Disconnected' + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.peeringState")] + public string PeeringState { get; set; } + + /// + /// Gets provisioning state of the resource + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.provisioningState")] + public string ProvisioningState { get; set; } + + /// + /// Gets or sets the name of the resource that is unique within a + /// resource group. This name can be used to access the resource + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "name")] + public string Name { get; set; } + + /// + /// Gets or sets a unique read-only string that changes whenever the + /// resource is updated + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "etag")] + public string Etag { get; set; } + + } +} diff --git a/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/VirtualNetworkPeeringListResultInner.cs b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/VirtualNetworkPeeringListResultInner.cs new file mode 100644 index 000000000..0941dc7fc --- /dev/null +++ b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/VirtualNetworkPeeringListResultInner.cs @@ -0,0 +1,51 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.Network.Models +{ + using System.Linq; + + /// + /// Response for ListSubnets Api service callRetrieves all subnet that + /// belongs to a virtual network + /// + public partial class VirtualNetworkPeeringListResultInner + { + /// + /// Initializes a new instance of the + /// VirtualNetworkPeeringListResultInner class. + /// + public VirtualNetworkPeeringListResultInner() { } + + /// + /// Initializes a new instance of the + /// VirtualNetworkPeeringListResultInner class. + /// + /// Gets the peerings in a virtual network + /// Gets the URL to get the next set of + /// results. + public VirtualNetworkPeeringListResultInner(System.Collections.Generic.IList value = default(System.Collections.Generic.IList), string nextLink = default(string)) + { + Value = value; + NextLink = nextLink; + } + + /// + /// Gets the peerings in a virtual network + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "value")] + public System.Collections.Generic.IList Value { get; set; } + + /// + /// Gets the URL to get the next set of results. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "nextLink")] + public string NextLink { get; set; } + + } +} diff --git a/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/VirtualNetworkPeeringState.cs b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/VirtualNetworkPeeringState.cs new file mode 100644 index 000000000..75b43119a --- /dev/null +++ b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/VirtualNetworkPeeringState.cs @@ -0,0 +1,21 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.Network.Models +{ + + /// + /// Defines values for VirtualNetworkPeeringState. + /// + public static class VirtualNetworkPeeringState + { + public const string Initiated = "Initiated"; + public const string Connected = "Connected"; + public const string Disconnected = "Disconnected"; + } +} diff --git a/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/VpnClientConfiguration.cs b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/VpnClientConfiguration.cs new file mode 100644 index 000000000..352ff83cf --- /dev/null +++ b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/VpnClientConfiguration.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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.Network.Models +{ + using System.Linq; + + /// + /// VpnClientConfiguration for P2S client + /// + public partial class VpnClientConfiguration + { + /// + /// Initializes a new instance of the VpnClientConfiguration class. + /// + public VpnClientConfiguration() { } + + /// + /// Initializes a new instance of the VpnClientConfiguration class. + /// + /// Gets or sets the reference of + /// the Address space resource which represents Address space for P2S + /// VpnClient. + /// VpnClientRootCertificate + /// for Virtual network gateway. + /// VpnClientRevokedCertificate + /// for Virtual network gateway. + public VpnClientConfiguration(AddressSpace vpnClientAddressPool = default(AddressSpace), System.Collections.Generic.IList vpnClientRootCertificates = default(System.Collections.Generic.IList), System.Collections.Generic.IList vpnClientRevokedCertificates = default(System.Collections.Generic.IList)) + { + VpnClientAddressPool = vpnClientAddressPool; + VpnClientRootCertificates = vpnClientRootCertificates; + VpnClientRevokedCertificates = vpnClientRevokedCertificates; + } + + /// + /// Gets or sets the reference of the Address space resource which + /// represents Address space for P2S VpnClient. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "vpnClientAddressPool")] + public AddressSpace VpnClientAddressPool { get; set; } + + /// + /// Gets or sets vpnClientRootCertificate for Virtual network gateway. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "vpnClientRootCertificates")] + public System.Collections.Generic.IList VpnClientRootCertificates { get; set; } + + /// + /// Gets or sets vpnClientRevokedCertificate for Virtual network + /// gateway. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "vpnClientRevokedCertificates")] + public System.Collections.Generic.IList VpnClientRevokedCertificates { get; set; } + + } +} diff --git a/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/VpnClientParameters.cs b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/VpnClientParameters.cs new file mode 100644 index 000000000..077405c9a --- /dev/null +++ b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/VpnClientParameters.cs @@ -0,0 +1,42 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.Network.Models +{ + using System.Linq; + + /// + /// VpnClientParameters + /// + public partial class VpnClientParameters + { + /// + /// Initializes a new instance of the VpnClientParameters class. + /// + public VpnClientParameters() { } + + /// + /// Initializes a new instance of the VpnClientParameters class. + /// + /// VPN client Processor + /// Architecture -Amd64/X86. Possible values include: 'Amd64', + /// 'X86' + public VpnClientParameters(string processorArchitecture = default(string)) + { + ProcessorArchitecture = processorArchitecture; + } + + /// + /// Gets or sets VPN client Processor Architecture -Amd64/X86. + /// Possible values include: 'Amd64', 'X86' + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "ProcessorArchitecture")] + public string ProcessorArchitecture { get; set; } + + } +} diff --git a/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/VpnClientRevokedCertificateInner.cs b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/VpnClientRevokedCertificateInner.cs new file mode 100644 index 000000000..0426d6d8c --- /dev/null +++ b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/VpnClientRevokedCertificateInner.cs @@ -0,0 +1,76 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.Network.Models +{ + using System.Linq; + + /// + /// VPN client revoked certificate of virtual network gateway + /// + [Microsoft.Rest.Serialization.JsonTransformation] + public partial class VpnClientRevokedCertificateInner : Microsoft.Rest.Azure.SubResource + { + /// + /// Initializes a new instance of the VpnClientRevokedCertificateInner + /// class. + /// + public VpnClientRevokedCertificateInner() { } + + /// + /// Initializes a new instance of the VpnClientRevokedCertificateInner + /// class. + /// + /// Gets or sets the revoked Vpn client + /// certificate thumbprint + /// Gets provisioning state of the VPN + /// client revoked certificate resource + /// Updating/Deleting/Failed + /// Gets name of the resource that is unique within + /// a resource group. This name can be used to access the + /// resource + /// A unique read-only string that changes whenever + /// the resource is updated + public VpnClientRevokedCertificateInner(string id = default(string), string thumbprint = default(string), string provisioningState = default(string), string name = default(string), string etag = default(string)) + : base(id) + { + Thumbprint = thumbprint; + ProvisioningState = provisioningState; + Name = name; + Etag = etag; + } + + /// + /// Gets or sets the revoked Vpn client certificate thumbprint + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.thumbprint")] + public string Thumbprint { get; set; } + + /// + /// Gets provisioning state of the VPN client revoked certificate + /// resource Updating/Deleting/Failed + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.provisioningState")] + public string ProvisioningState { get; set; } + + /// + /// Gets name of the resource that is unique within a resource group. + /// This name can be used to access the resource + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "name")] + public string Name { get; set; } + + /// + /// Gets or sets a unique read-only string that changes whenever the + /// resource is updated + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "etag")] + public string Etag { get; set; } + + } +} diff --git a/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/VpnClientRootCertificateInner.cs b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/VpnClientRootCertificateInner.cs new file mode 100644 index 000000000..45a78f03b --- /dev/null +++ b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/VpnClientRootCertificateInner.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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.Network.Models +{ + using System.Linq; + + /// + /// VPN client root certificate of virtual network gateway + /// + [Microsoft.Rest.Serialization.JsonTransformation] + public partial class VpnClientRootCertificateInner : Microsoft.Rest.Azure.SubResource + { + /// + /// Initializes a new instance of the VpnClientRootCertificateInner + /// class. + /// + public VpnClientRootCertificateInner() { } + + /// + /// Initializes a new instance of the VpnClientRootCertificateInner + /// class. + /// + /// Gets or sets the certificate public + /// data + /// Gets provisioning state of the VPN + /// client root certificate resource Updating/Deleting/Failed + /// Gets name of the resource that is unique within + /// a resource group. This name can be used to access the + /// resource + /// A unique read-only string that changes whenever + /// the resource is updated + public VpnClientRootCertificateInner(string id = default(string), string publicCertData = default(string), string provisioningState = default(string), string name = default(string), string etag = default(string)) + : base(id) + { + PublicCertData = publicCertData; + ProvisioningState = provisioningState; + Name = name; + Etag = etag; + } + + /// + /// Gets or sets the certificate public data + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.publicCertData")] + public string PublicCertData { get; set; } + + /// + /// Gets provisioning state of the VPN client root certificate + /// resource Updating/Deleting/Failed + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.provisioningState")] + public string ProvisioningState { get; set; } + + /// + /// Gets name of the resource that is unique within a resource group. + /// This name can be used to access the resource + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "name")] + public string Name { get; set; } + + /// + /// Gets or sets a unique read-only string that changes whenever the + /// resource is updated + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "etag")] + public string Etag { get; set; } + + } +} diff --git a/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/VpnType.cs b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/VpnType.cs new file mode 100644 index 000000000..ba5c7ac47 --- /dev/null +++ b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/Models/VpnType.cs @@ -0,0 +1,20 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.Network.Models +{ + + /// + /// Defines values for VpnType. + /// + public static class VpnType + { + public const string PolicyBased = "PolicyBased"; + public const string RouteBased = "RouteBased"; + } +} diff --git a/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/NetworkInterfacesOperations.cs b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/NetworkInterfacesOperations.cs new file mode 100644 index 000000000..dc2bde0d0 --- /dev/null +++ b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/NetworkInterfacesOperations.cs @@ -0,0 +1,2764 @@ +// 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 0.17.0.0 +// 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; + + /// + /// NetworkInterfacesOperations operations. + /// + internal partial class NetworkInterfacesOperations : Microsoft.Rest.IServiceOperations, INetworkInterfacesOperations + { + /// + /// Initializes a new instance of the NetworkInterfacesOperations class. + /// + /// + /// Reference to the service client. + /// + /// + /// Thrown when a required parameter is null + /// + internal NetworkInterfacesOperations(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; } + + /// + /// The delete netwokInterface operation deletes the specified netwokInterface. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the network interface. + /// + /// + /// The headers that will be added to request. + /// + /// + /// The cancellation token. + /// + public async System.Threading.Tasks.Task DeleteWithHttpMessagesAsync(string resourceGroupName, string networkInterfaceName, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + // Send request + Microsoft.Rest.Azure.AzureOperationResponse _response = await BeginDeleteWithHttpMessagesAsync( + resourceGroupName, networkInterfaceName, customHeaders, cancellationToken); + return await this.Client.GetPostOrDeleteOperationResultAsync(_response, customHeaders, cancellationToken); + } + + /// + /// The delete netwokInterface operation deletes the specified netwokInterface. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the network interface. + /// + /// + /// 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 + /// + /// + /// A response object containing the response body and response headers. + /// + public async System.Threading.Tasks.Task BeginDeleteWithHttpMessagesAsync(string resourceGroupName, string networkInterfaceName, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + if (resourceGroupName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "resourceGroupName"); + } + if (networkInterfaceName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "networkInterfaceName"); + } + if (this.Client.ApiVersion == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.ApiVersion"); + } + if (this.Client.SubscriptionId == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.SubscriptionId"); + } + // 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("networkInterfaceName", networkInterfaceName); + 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/networkInterfaces/{networkInterfaceName}").ToString(); + _url = _url.Replace("{resourceGroupName}", System.Uri.EscapeDataString(resourceGroupName)); + _url = _url.Replace("{networkInterfaceName}", System.Uri.EscapeDataString(networkInterfaceName)); + _url = _url.Replace("{subscriptionId}", System.Uri.EscapeDataString(this.Client.SubscriptionId)); + System.Collections.Generic.List _queryParameters = new System.Collections.Generic.List(); + if (this.Client.ApiVersion != null) + { + _queryParameters.Add(string.Format("api-version={0}", System.Uri.EscapeDataString(this.Client.ApiVersion))); + } + if (_queryParameters.Count > 0) + { + _url += "?" + string.Join("&", _queryParameters); + } + // Create HTTP transport objects + System.Net.Http.HttpRequestMessage _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 != 204 && (int)_statusCode != 202 && (int)_statusCode != 200) + { + var ex = new Microsoft.Rest.Azure.CloudException(string.Format("Operation returned an invalid status code '{0}'", _statusCode)); + if (_httpResponse.Content != null) { + _responseContent = await _httpResponse.Content.ReadAsStringAsync().ConfigureAwait(false); + } + else { + _responseContent = string.Empty; + } + ex.Request = new Microsoft.Rest.HttpRequestMessageWrapper(_httpRequest, _requestContent); + ex.Response = new Microsoft.Rest.HttpResponseMessageWrapper(_httpResponse, _responseContent); + if (_httpResponse.Headers.Contains("x-ms-request-id")) + { + ex.RequestId = _httpResponse.Headers.GetValues("x-ms-request-id").FirstOrDefault(); + } + 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(); + } + if (_shouldTrace) + { + Microsoft.Rest.ServiceClientTracing.Exit(_invocationId, _result); + } + return _result; + } + + /// + /// The Get ntework interface operation retreives information about the + /// specified network interface. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the network interface. + /// + /// + /// expand references resources. + /// + /// + /// 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 + /// + /// + /// A response object containing the response body and response headers. + /// + public async System.Threading.Tasks.Task> GetWithHttpMessagesAsync(string resourceGroupName, string networkInterfaceName, string expand = default(string), System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + if (resourceGroupName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "resourceGroupName"); + } + if (networkInterfaceName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "networkInterfaceName"); + } + if (this.Client.ApiVersion == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.ApiVersion"); + } + if (this.Client.SubscriptionId == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.SubscriptionId"); + } + // 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("networkInterfaceName", networkInterfaceName); + tracingParameters.Add("expand", expand); + 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/networkInterfaces/{networkInterfaceName}").ToString(); + _url = _url.Replace("{resourceGroupName}", System.Uri.EscapeDataString(resourceGroupName)); + _url = _url.Replace("{networkInterfaceName}", System.Uri.EscapeDataString(networkInterfaceName)); + _url = _url.Replace("{subscriptionId}", System.Uri.EscapeDataString(this.Client.SubscriptionId)); + System.Collections.Generic.List _queryParameters = new System.Collections.Generic.List(); + if (this.Client.ApiVersion != null) + { + _queryParameters.Add(string.Format("api-version={0}", System.Uri.EscapeDataString(this.Client.ApiVersion))); + } + if (expand != null) + { + _queryParameters.Add(string.Format("$expand={0}", System.Uri.EscapeDataString(expand))); + } + if (_queryParameters.Count > 0) + { + _url += "?" + string.Join("&", _queryParameters); + } + // Create HTTP transport objects + System.Net.Http.HttpRequestMessage _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); + CloudError _errorBody = Microsoft.Rest.Serialization.SafeJsonConvert.DeserializeObject(_responseContent, this.Client.DeserializationSettings); + if (_errorBody != null) + { + ex = new Microsoft.Rest.Azure.CloudException(_errorBody.Message); + 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 (_httpResponse.Headers.Contains("x-ms-request-id")) + { + ex.RequestId = _httpResponse.Headers.GetValues("x-ms-request-id").FirstOrDefault(); + } + 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; + } + + /// + /// The Put NetworkInterface operation creates/updates a networkInterface + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the network interface. + /// + /// + /// Parameters supplied to the create/update NetworkInterface operation + /// + /// + /// The headers that will be added to request. + /// + /// + /// The cancellation token. + /// + public async System.Threading.Tasks.Task> CreateOrUpdateWithHttpMessagesAsync(string resourceGroupName, string networkInterfaceName, NetworkInterfaceInner 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, networkInterfaceName, parameters, customHeaders, cancellationToken); + return await this.Client.GetPutOrPatchOperationResultAsync(_response, + customHeaders, + cancellationToken); + } + + /// + /// The Put NetworkInterface operation creates/updates a networkInterface + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the network interface. + /// + /// + /// Parameters supplied to the create/update NetworkInterface 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 + /// + /// + /// A response object containing the response body and response headers. + /// + public async System.Threading.Tasks.Task> BeginCreateOrUpdateWithHttpMessagesAsync(string resourceGroupName, string networkInterfaceName, NetworkInterfaceInner parameters, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + if (resourceGroupName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "resourceGroupName"); + } + if (networkInterfaceName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "networkInterfaceName"); + } + if (parameters == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "parameters"); + } + if (this.Client.ApiVersion == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.ApiVersion"); + } + if (this.Client.SubscriptionId == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.SubscriptionId"); + } + // 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("networkInterfaceName", networkInterfaceName); + 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/networkInterfaces/{networkInterfaceName}").ToString(); + _url = _url.Replace("{resourceGroupName}", System.Uri.EscapeDataString(resourceGroupName)); + _url = _url.Replace("{networkInterfaceName}", System.Uri.EscapeDataString(networkInterfaceName)); + _url = _url.Replace("{subscriptionId}", System.Uri.EscapeDataString(this.Client.SubscriptionId)); + System.Collections.Generic.List _queryParameters = new System.Collections.Generic.List(); + if (this.Client.ApiVersion != null) + { + _queryParameters.Add(string.Format("api-version={0}", System.Uri.EscapeDataString(this.Client.ApiVersion))); + } + if (_queryParameters.Count > 0) + { + _url += "?" + string.Join("&", _queryParameters); + } + // Create HTTP transport objects + System.Net.Http.HttpRequestMessage _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 != 201 && (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); + CloudError _errorBody = Microsoft.Rest.Serialization.SafeJsonConvert.DeserializeObject(_responseContent, this.Client.DeserializationSettings); + if (_errorBody != null) + { + ex = new Microsoft.Rest.Azure.CloudException(_errorBody.Message); + 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 (_httpResponse.Headers.Contains("x-ms-request-id")) + { + ex.RequestId = _httpResponse.Headers.GetValues("x-ms-request-id").FirstOrDefault(); + } + if (_shouldTrace) + { + Microsoft.Rest.ServiceClientTracing.Error(_invocationId, ex); + } + _httpRequest.Dispose(); + if (_httpResponse != null) + { + _httpResponse.Dispose(); + } + throw ex; + } + // Create Result + AzureOperationResponse _result; + try + { + _result = new Microsoft.Rest.Azure.AzureOperationResponse(); + } + catch (System.Exception ex) { + throw ex; + } + _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 == 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); + } + } + // 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; + } + + /// + /// The list network interface operation retrieves information about all + /// network interfaces in a virtual machine from a virtual machine scale set. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual machine scale set. + /// + /// + /// The virtual machine index. + /// + /// + /// 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 + /// + /// + /// A response object containing the response body and response headers. + /// + public async System.Threading.Tasks.Task>> ListVirtualMachineScaleSetVMNetworkInterfacesWithHttpMessagesAsync(string resourceGroupName, string virtualMachineScaleSetName, string virtualmachineIndex, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + if (resourceGroupName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "resourceGroupName"); + } + if (virtualMachineScaleSetName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "virtualMachineScaleSetName"); + } + if (virtualmachineIndex == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "virtualmachineIndex"); + } + if (this.Client.ApiVersion == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.ApiVersion"); + } + if (this.Client.SubscriptionId == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.SubscriptionId"); + } + // 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("virtualMachineScaleSetName", virtualMachineScaleSetName); + tracingParameters.Add("virtualmachineIndex", virtualmachineIndex); + tracingParameters.Add("cancellationToken", cancellationToken); + Microsoft.Rest.ServiceClientTracing.Enter(_invocationId, this, "ListVirtualMachineScaleSetVMNetworkInterfaces", 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.Compute/virtualMachineScaleSets/{virtualMachineScaleSetName}/virtualMachines/{virtualmachineIndex}/networkInterfaces").ToString(); + _url = _url.Replace("{resourceGroupName}", System.Uri.EscapeDataString(resourceGroupName)); + _url = _url.Replace("{virtualMachineScaleSetName}", System.Uri.EscapeDataString(virtualMachineScaleSetName)); + _url = _url.Replace("{virtualmachineIndex}", System.Uri.EscapeDataString(virtualmachineIndex)); + _url = _url.Replace("{subscriptionId}", System.Uri.EscapeDataString(this.Client.SubscriptionId)); + System.Collections.Generic.List _queryParameters = new System.Collections.Generic.List(); + if (this.Client.ApiVersion != null) + { + _queryParameters.Add(string.Format("api-version={0}", System.Uri.EscapeDataString(this.Client.ApiVersion))); + } + if (_queryParameters.Count > 0) + { + _url += "?" + string.Join("&", _queryParameters); + } + // Create HTTP transport objects + System.Net.Http.HttpRequestMessage _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); + CloudError _errorBody = Microsoft.Rest.Serialization.SafeJsonConvert.DeserializeObject(_responseContent, this.Client.DeserializationSettings); + if (_errorBody != null) + { + ex = new Microsoft.Rest.Azure.CloudException(_errorBody.Message); + 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 (_httpResponse.Headers.Contains("x-ms-request-id")) + { + ex.RequestId = _httpResponse.Headers.GetValues("x-ms-request-id").FirstOrDefault(); + } + 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; + } + + /// + /// The list network interface operation retrieves information about all + /// network interfaces in a virtual machine scale set. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual machine scale set. + /// + /// + /// 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 + /// + /// + /// A response object containing the response body and response headers. + /// + public async System.Threading.Tasks.Task>> ListVirtualMachineScaleSetNetworkInterfacesWithHttpMessagesAsync(string resourceGroupName, string virtualMachineScaleSetName, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + if (resourceGroupName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "resourceGroupName"); + } + if (virtualMachineScaleSetName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "virtualMachineScaleSetName"); + } + if (this.Client.ApiVersion == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.ApiVersion"); + } + if (this.Client.SubscriptionId == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.SubscriptionId"); + } + // 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("virtualMachineScaleSetName", virtualMachineScaleSetName); + tracingParameters.Add("cancellationToken", cancellationToken); + Microsoft.Rest.ServiceClientTracing.Enter(_invocationId, this, "ListVirtualMachineScaleSetNetworkInterfaces", 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.Compute/virtualMachineScaleSets/{virtualMachineScaleSetName}/networkInterfaces").ToString(); + _url = _url.Replace("{resourceGroupName}", System.Uri.EscapeDataString(resourceGroupName)); + _url = _url.Replace("{virtualMachineScaleSetName}", System.Uri.EscapeDataString(virtualMachineScaleSetName)); + _url = _url.Replace("{subscriptionId}", System.Uri.EscapeDataString(this.Client.SubscriptionId)); + System.Collections.Generic.List _queryParameters = new System.Collections.Generic.List(); + if (this.Client.ApiVersion != null) + { + _queryParameters.Add(string.Format("api-version={0}", System.Uri.EscapeDataString(this.Client.ApiVersion))); + } + if (_queryParameters.Count > 0) + { + _url += "?" + string.Join("&", _queryParameters); + } + // Create HTTP transport objects + System.Net.Http.HttpRequestMessage _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); + CloudError _errorBody = Microsoft.Rest.Serialization.SafeJsonConvert.DeserializeObject(_responseContent, this.Client.DeserializationSettings); + if (_errorBody != null) + { + ex = new Microsoft.Rest.Azure.CloudException(_errorBody.Message); + 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 (_httpResponse.Headers.Contains("x-ms-request-id")) + { + ex.RequestId = _httpResponse.Headers.GetValues("x-ms-request-id").FirstOrDefault(); + } + 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; + } + + /// + /// The Get ntework interface operation retreives information about the + /// specified network interface in a virtual machine scale set. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual machine scale set. + /// + /// + /// The virtual machine index. + /// + /// + /// The name of the network interface. + /// + /// + /// expand references resources. + /// + /// + /// 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 + /// + /// + /// A response object containing the response body and response headers. + /// + public async System.Threading.Tasks.Task> GetVirtualMachineScaleSetNetworkInterfaceWithHttpMessagesAsync(string resourceGroupName, string virtualMachineScaleSetName, string virtualmachineIndex, string networkInterfaceName, string expand = default(string), System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + if (resourceGroupName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "resourceGroupName"); + } + if (virtualMachineScaleSetName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "virtualMachineScaleSetName"); + } + if (virtualmachineIndex == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "virtualmachineIndex"); + } + if (networkInterfaceName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "networkInterfaceName"); + } + if (this.Client.ApiVersion == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.ApiVersion"); + } + if (this.Client.SubscriptionId == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.SubscriptionId"); + } + // 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("virtualMachineScaleSetName", virtualMachineScaleSetName); + tracingParameters.Add("virtualmachineIndex", virtualmachineIndex); + tracingParameters.Add("networkInterfaceName", networkInterfaceName); + tracingParameters.Add("expand", expand); + tracingParameters.Add("cancellationToken", cancellationToken); + Microsoft.Rest.ServiceClientTracing.Enter(_invocationId, this, "GetVirtualMachineScaleSetNetworkInterface", 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.Compute/virtualMachineScaleSets/{virtualMachineScaleSetName}/virtualMachines/{virtualmachineIndex}/networkInterfaces/{networkInterfaceName}").ToString(); + _url = _url.Replace("{resourceGroupName}", System.Uri.EscapeDataString(resourceGroupName)); + _url = _url.Replace("{virtualMachineScaleSetName}", System.Uri.EscapeDataString(virtualMachineScaleSetName)); + _url = _url.Replace("{virtualmachineIndex}", System.Uri.EscapeDataString(virtualmachineIndex)); + _url = _url.Replace("{networkInterfaceName}", System.Uri.EscapeDataString(networkInterfaceName)); + _url = _url.Replace("{subscriptionId}", System.Uri.EscapeDataString(this.Client.SubscriptionId)); + System.Collections.Generic.List _queryParameters = new System.Collections.Generic.List(); + if (this.Client.ApiVersion != null) + { + _queryParameters.Add(string.Format("api-version={0}", System.Uri.EscapeDataString(this.Client.ApiVersion))); + } + if (expand != null) + { + _queryParameters.Add(string.Format("$expand={0}", System.Uri.EscapeDataString(expand))); + } + if (_queryParameters.Count > 0) + { + _url += "?" + string.Join("&", _queryParameters); + } + // Create HTTP transport objects + System.Net.Http.HttpRequestMessage _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); + CloudError _errorBody = Microsoft.Rest.Serialization.SafeJsonConvert.DeserializeObject(_responseContent, this.Client.DeserializationSettings); + if (_errorBody != null) + { + ex = new Microsoft.Rest.Azure.CloudException(_errorBody.Message); + 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 (_httpResponse.Headers.Contains("x-ms-request-id")) + { + ex.RequestId = _httpResponse.Headers.GetValues("x-ms-request-id").FirstOrDefault(); + } + 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; + } + + /// + /// The List networkInterfaces opertion retrieves all the networkInterfaces in + /// a subscription. + /// + /// + /// 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 + /// + /// + /// A response object containing the response body and response headers. + /// + public async System.Threading.Tasks.Task>> ListAllWithHttpMessagesAsync(System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + if (this.Client.ApiVersion == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.ApiVersion"); + } + if (this.Client.SubscriptionId == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.SubscriptionId"); + } + // 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("cancellationToken", cancellationToken); + Microsoft.Rest.ServiceClientTracing.Enter(_invocationId, this, "ListAll", tracingParameters); + } + // Construct URL + var _baseUrl = this.Client.BaseUri.AbsoluteUri; + var _url = new System.Uri(new System.Uri(_baseUrl + (_baseUrl.EndsWith("/") ? "" : "/")), "subscriptions/{subscriptionId}/providers/Microsoft.Network/networkInterfaces").ToString(); + _url = _url.Replace("{subscriptionId}", System.Uri.EscapeDataString(this.Client.SubscriptionId)); + System.Collections.Generic.List _queryParameters = new System.Collections.Generic.List(); + if (this.Client.ApiVersion != null) + { + _queryParameters.Add(string.Format("api-version={0}", System.Uri.EscapeDataString(this.Client.ApiVersion))); + } + if (_queryParameters.Count > 0) + { + _url += "?" + string.Join("&", _queryParameters); + } + // Create HTTP transport objects + System.Net.Http.HttpRequestMessage _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); + CloudError _errorBody = Microsoft.Rest.Serialization.SafeJsonConvert.DeserializeObject(_responseContent, this.Client.DeserializationSettings); + if (_errorBody != null) + { + ex = new Microsoft.Rest.Azure.CloudException(_errorBody.Message); + 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 (_httpResponse.Headers.Contains("x-ms-request-id")) + { + ex.RequestId = _httpResponse.Headers.GetValues("x-ms-request-id").FirstOrDefault(); + } + 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; + } + + /// + /// The List networkInterfaces opertion retrieves all the networkInterfaces in + /// a resource group. + /// + /// + /// The name of the resource group. + /// + /// + /// 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 + /// + /// + /// A response object containing the response body and response headers. + /// + public async System.Threading.Tasks.Task>> ListWithHttpMessagesAsync(string resourceGroupName, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + if (resourceGroupName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "resourceGroupName"); + } + if (this.Client.ApiVersion == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.ApiVersion"); + } + if (this.Client.SubscriptionId == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.SubscriptionId"); + } + // 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("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/networkInterfaces").ToString(); + _url = _url.Replace("{resourceGroupName}", System.Uri.EscapeDataString(resourceGroupName)); + _url = _url.Replace("{subscriptionId}", System.Uri.EscapeDataString(this.Client.SubscriptionId)); + System.Collections.Generic.List _queryParameters = new System.Collections.Generic.List(); + if (this.Client.ApiVersion != null) + { + _queryParameters.Add(string.Format("api-version={0}", System.Uri.EscapeDataString(this.Client.ApiVersion))); + } + if (_queryParameters.Count > 0) + { + _url += "?" + string.Join("&", _queryParameters); + } + // Create HTTP transport objects + System.Net.Http.HttpRequestMessage _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); + CloudError _errorBody = Microsoft.Rest.Serialization.SafeJsonConvert.DeserializeObject(_responseContent, this.Client.DeserializationSettings); + if (_errorBody != null) + { + ex = new Microsoft.Rest.Azure.CloudException(_errorBody.Message); + 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 (_httpResponse.Headers.Contains("x-ms-request-id")) + { + ex.RequestId = _httpResponse.Headers.GetValues("x-ms-request-id").FirstOrDefault(); + } + 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; + } + + /// + /// The get effective routetable operation retrieves all the route tables + /// applied on a networkInterface. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the network interface. + /// + /// + /// The headers that will be added to request. + /// + /// + /// The cancellation token. + /// + public async System.Threading.Tasks.Task> GetEffectiveRouteTableWithHttpMessagesAsync(string resourceGroupName, string networkInterfaceName, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + // Send request + Microsoft.Rest.Azure.AzureOperationResponse _response = await BeginGetEffectiveRouteTableWithHttpMessagesAsync( + resourceGroupName, networkInterfaceName, customHeaders, cancellationToken); + return await this.Client.GetPostOrDeleteOperationResultAsync(_response, customHeaders, cancellationToken); + } + + /// + /// The get effective routetable operation retrieves all the route tables + /// applied on a networkInterface. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the network interface. + /// + /// + /// 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 + /// + /// + /// A response object containing the response body and response headers. + /// + public async System.Threading.Tasks.Task> BeginGetEffectiveRouteTableWithHttpMessagesAsync(string resourceGroupName, string networkInterfaceName, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + if (resourceGroupName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "resourceGroupName"); + } + if (networkInterfaceName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "networkInterfaceName"); + } + if (this.Client.ApiVersion == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.ApiVersion"); + } + if (this.Client.SubscriptionId == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.SubscriptionId"); + } + // 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("networkInterfaceName", networkInterfaceName); + tracingParameters.Add("cancellationToken", cancellationToken); + Microsoft.Rest.ServiceClientTracing.Enter(_invocationId, this, "BeginGetEffectiveRouteTable", 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/networkInterfaces/{networkInterfaceName}/effectiveRouteTable").ToString(); + _url = _url.Replace("{resourceGroupName}", System.Uri.EscapeDataString(resourceGroupName)); + _url = _url.Replace("{networkInterfaceName}", System.Uri.EscapeDataString(networkInterfaceName)); + _url = _url.Replace("{subscriptionId}", System.Uri.EscapeDataString(this.Client.SubscriptionId)); + System.Collections.Generic.List _queryParameters = new System.Collections.Generic.List(); + if (this.Client.ApiVersion != null) + { + _queryParameters.Add(string.Format("api-version={0}", System.Uri.EscapeDataString(this.Client.ApiVersion))); + } + if (_queryParameters.Count > 0) + { + _url += "?" + string.Join("&", _queryParameters); + } + // Create HTTP transport objects + System.Net.Http.HttpRequestMessage _httpRequest = new System.Net.Http.HttpRequestMessage(); + System.Net.Http.HttpResponseMessage _httpResponse = null; + _httpRequest.Method = new System.Net.Http.HttpMethod("POST"); + _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 && (int)_statusCode != 202) + { + 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); + CloudError _errorBody = Microsoft.Rest.Serialization.SafeJsonConvert.DeserializeObject(_responseContent, this.Client.DeserializationSettings); + if (_errorBody != null) + { + ex = new Microsoft.Rest.Azure.CloudException(_errorBody.Message); + 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 (_httpResponse.Headers.Contains("x-ms-request-id")) + { + ex.RequestId = _httpResponse.Headers.GetValues("x-ms-request-id").FirstOrDefault(); + } + 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; + } + + /// + /// The list effective network security group operation retrieves all the + /// network security groups applied on a networkInterface. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the network interface. + /// + /// + /// The headers that will be added to request. + /// + /// + /// The cancellation token. + /// + public async System.Threading.Tasks.Task> ListEffectiveNetworkSecurityGroupsWithHttpMessagesAsync(string resourceGroupName, string networkInterfaceName, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + // Send request + Microsoft.Rest.Azure.AzureOperationResponse _response = await BeginListEffectiveNetworkSecurityGroupsWithHttpMessagesAsync( + resourceGroupName, networkInterfaceName, customHeaders, cancellationToken); + return await this.Client.GetPostOrDeleteOperationResultAsync(_response, customHeaders, cancellationToken); + } + + /// + /// The list effective network security group operation retrieves all the + /// network security groups applied on a networkInterface. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the network interface. + /// + /// + /// 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 + /// + /// + /// A response object containing the response body and response headers. + /// + public async System.Threading.Tasks.Task> BeginListEffectiveNetworkSecurityGroupsWithHttpMessagesAsync(string resourceGroupName, string networkInterfaceName, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + if (resourceGroupName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "resourceGroupName"); + } + if (networkInterfaceName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "networkInterfaceName"); + } + if (this.Client.ApiVersion == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.ApiVersion"); + } + if (this.Client.SubscriptionId == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.SubscriptionId"); + } + // 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("networkInterfaceName", networkInterfaceName); + tracingParameters.Add("cancellationToken", cancellationToken); + Microsoft.Rest.ServiceClientTracing.Enter(_invocationId, this, "BeginListEffectiveNetworkSecurityGroups", 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/networkInterfaces/{networkInterfaceName}/effectiveNetworkSecurityGroups").ToString(); + _url = _url.Replace("{resourceGroupName}", System.Uri.EscapeDataString(resourceGroupName)); + _url = _url.Replace("{networkInterfaceName}", System.Uri.EscapeDataString(networkInterfaceName)); + _url = _url.Replace("{subscriptionId}", System.Uri.EscapeDataString(this.Client.SubscriptionId)); + System.Collections.Generic.List _queryParameters = new System.Collections.Generic.List(); + if (this.Client.ApiVersion != null) + { + _queryParameters.Add(string.Format("api-version={0}", System.Uri.EscapeDataString(this.Client.ApiVersion))); + } + if (_queryParameters.Count > 0) + { + _url += "?" + string.Join("&", _queryParameters); + } + // Create HTTP transport objects + System.Net.Http.HttpRequestMessage _httpRequest = new System.Net.Http.HttpRequestMessage(); + System.Net.Http.HttpResponseMessage _httpResponse = null; + _httpRequest.Method = new System.Net.Http.HttpMethod("POST"); + _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 && (int)_statusCode != 202) + { + 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); + CloudError _errorBody = Microsoft.Rest.Serialization.SafeJsonConvert.DeserializeObject(_responseContent, this.Client.DeserializationSettings); + if (_errorBody != null) + { + ex = new Microsoft.Rest.Azure.CloudException(_errorBody.Message); + 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 (_httpResponse.Headers.Contains("x-ms-request-id")) + { + ex.RequestId = _httpResponse.Headers.GetValues("x-ms-request-id").FirstOrDefault(); + } + 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; + } + + /// + /// The list network interface operation retrieves information about all + /// network interfaces in a virtual machine from a virtual machine scale set. + /// + /// + /// 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 + /// + /// + /// A response object containing the response body and response headers. + /// + public async System.Threading.Tasks.Task>> ListVirtualMachineScaleSetVMNetworkInterfacesNextWithHttpMessagesAsync(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, "ListVirtualMachineScaleSetVMNetworkInterfacesNext", 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 += "?" + string.Join("&", _queryParameters); + } + // Create HTTP transport objects + System.Net.Http.HttpRequestMessage _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); + CloudError _errorBody = Microsoft.Rest.Serialization.SafeJsonConvert.DeserializeObject(_responseContent, this.Client.DeserializationSettings); + if (_errorBody != null) + { + ex = new Microsoft.Rest.Azure.CloudException(_errorBody.Message); + 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 (_httpResponse.Headers.Contains("x-ms-request-id")) + { + ex.RequestId = _httpResponse.Headers.GetValues("x-ms-request-id").FirstOrDefault(); + } + 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; + } + + /// + /// The list network interface operation retrieves information about all + /// network interfaces in a virtual machine scale set. + /// + /// + /// 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 + /// + /// + /// A response object containing the response body and response headers. + /// + public async System.Threading.Tasks.Task>> ListVirtualMachineScaleSetNetworkInterfacesNextWithHttpMessagesAsync(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, "ListVirtualMachineScaleSetNetworkInterfacesNext", 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 += "?" + string.Join("&", _queryParameters); + } + // Create HTTP transport objects + System.Net.Http.HttpRequestMessage _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); + CloudError _errorBody = Microsoft.Rest.Serialization.SafeJsonConvert.DeserializeObject(_responseContent, this.Client.DeserializationSettings); + if (_errorBody != null) + { + ex = new Microsoft.Rest.Azure.CloudException(_errorBody.Message); + 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 (_httpResponse.Headers.Contains("x-ms-request-id")) + { + ex.RequestId = _httpResponse.Headers.GetValues("x-ms-request-id").FirstOrDefault(); + } + 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; + } + + /// + /// The List networkInterfaces opertion retrieves all the networkInterfaces in + /// a subscription. + /// + /// + /// 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 + /// + /// + /// A response object containing the response body and response headers. + /// + public async System.Threading.Tasks.Task>> ListAllNextWithHttpMessagesAsync(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, "ListAllNext", 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 += "?" + string.Join("&", _queryParameters); + } + // Create HTTP transport objects + System.Net.Http.HttpRequestMessage _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); + CloudError _errorBody = Microsoft.Rest.Serialization.SafeJsonConvert.DeserializeObject(_responseContent, this.Client.DeserializationSettings); + if (_errorBody != null) + { + ex = new Microsoft.Rest.Azure.CloudException(_errorBody.Message); + 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 (_httpResponse.Headers.Contains("x-ms-request-id")) + { + ex.RequestId = _httpResponse.Headers.GetValues("x-ms-request-id").FirstOrDefault(); + } + 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; + } + + /// + /// The List networkInterfaces opertion retrieves all the networkInterfaces in + /// a resource group. + /// + /// + /// 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 + /// + /// + /// 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 += "?" + string.Join("&", _queryParameters); + } + // Create HTTP transport objects + System.Net.Http.HttpRequestMessage _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); + CloudError _errorBody = Microsoft.Rest.Serialization.SafeJsonConvert.DeserializeObject(_responseContent, this.Client.DeserializationSettings); + if (_errorBody != null) + { + ex = new Microsoft.Rest.Azure.CloudException(_errorBody.Message); + 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 (_httpResponse.Headers.Contains("x-ms-request-id")) + { + ex.RequestId = _httpResponse.Headers.GetValues("x-ms-request-id").FirstOrDefault(); + } + 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; + } + + } +} diff --git a/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/NetworkInterfacesOperationsExtensions.cs b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/NetworkInterfacesOperationsExtensions.cs new file mode 100644 index 000000000..502d38f31 --- /dev/null +++ b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/NetworkInterfacesOperationsExtensions.cs @@ -0,0 +1,763 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.Network +{ + using System.Threading.Tasks; + using Microsoft.Rest.Azure; + using Models; + + /// + /// Extension methods for NetworkInterfacesOperations. + /// + public static partial class NetworkInterfacesOperationsExtensions + { + /// + /// The delete netwokInterface operation deletes the specified netwokInterface. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the network interface. + /// + public static void Delete(this INetworkInterfacesOperations operations, string resourceGroupName, string networkInterfaceName) + { + System.Threading.Tasks.Task.Factory.StartNew(s => ((INetworkInterfacesOperations)s).DeleteAsync(resourceGroupName, networkInterfaceName), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// The delete netwokInterface operation deletes the specified netwokInterface. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the network interface. + /// + /// + /// The cancellation token. + /// + public static async System.Threading.Tasks.Task DeleteAsync(this INetworkInterfacesOperations operations, string resourceGroupName, string networkInterfaceName, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + await operations.DeleteWithHttpMessagesAsync(resourceGroupName, networkInterfaceName, null, cancellationToken).ConfigureAwait(false); + } + + /// + /// The delete netwokInterface operation deletes the specified netwokInterface. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the network interface. + /// + public static void BeginDelete(this INetworkInterfacesOperations operations, string resourceGroupName, string networkInterfaceName) + { + System.Threading.Tasks.Task.Factory.StartNew(s => ((INetworkInterfacesOperations)s).BeginDeleteAsync(resourceGroupName, networkInterfaceName), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// The delete netwokInterface operation deletes the specified netwokInterface. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the network interface. + /// + /// + /// The cancellation token. + /// + public static async System.Threading.Tasks.Task BeginDeleteAsync(this INetworkInterfacesOperations operations, string resourceGroupName, string networkInterfaceName, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + await operations.BeginDeleteWithHttpMessagesAsync(resourceGroupName, networkInterfaceName, null, cancellationToken).ConfigureAwait(false); + } + + /// + /// The Get ntework interface operation retreives information about the + /// specified network interface. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the network interface. + /// + /// + /// expand references resources. + /// + public static NetworkInterfaceInner Get(this INetworkInterfacesOperations operations, string resourceGroupName, string networkInterfaceName, string expand = default(string)) + { + return System.Threading.Tasks.Task.Factory.StartNew(s => ((INetworkInterfacesOperations)s).GetAsync(resourceGroupName, networkInterfaceName, expand), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// The Get ntework interface operation retreives information about the + /// specified network interface. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the network interface. + /// + /// + /// expand references resources. + /// + /// + /// The cancellation token. + /// + public static async System.Threading.Tasks.Task GetAsync(this INetworkInterfacesOperations operations, string resourceGroupName, string networkInterfaceName, string expand = default(string), System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + using (var _result = await operations.GetWithHttpMessagesAsync(resourceGroupName, networkInterfaceName, expand, null, cancellationToken).ConfigureAwait(false)) + { + return _result.Body; + } + } + + /// + /// The Put NetworkInterface operation creates/updates a networkInterface + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the network interface. + /// + /// + /// Parameters supplied to the create/update NetworkInterface operation + /// + public static NetworkInterfaceInner CreateOrUpdate(this INetworkInterfacesOperations operations, string resourceGroupName, string networkInterfaceName, NetworkInterfaceInner parameters) + { + return System.Threading.Tasks.Task.Factory.StartNew(s => ((INetworkInterfacesOperations)s).CreateOrUpdateAsync(resourceGroupName, networkInterfaceName, parameters), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// The Put NetworkInterface operation creates/updates a networkInterface + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the network interface. + /// + /// + /// Parameters supplied to the create/update NetworkInterface operation + /// + /// + /// The cancellation token. + /// + public static async System.Threading.Tasks.Task CreateOrUpdateAsync(this INetworkInterfacesOperations operations, string resourceGroupName, string networkInterfaceName, NetworkInterfaceInner parameters, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + using (var _result = await operations.CreateOrUpdateWithHttpMessagesAsync(resourceGroupName, networkInterfaceName, parameters, null, cancellationToken).ConfigureAwait(false)) + { + return _result.Body; + } + } + + /// + /// The Put NetworkInterface operation creates/updates a networkInterface + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the network interface. + /// + /// + /// Parameters supplied to the create/update NetworkInterface operation + /// + public static NetworkInterfaceInner BeginCreateOrUpdate(this INetworkInterfacesOperations operations, string resourceGroupName, string networkInterfaceName, NetworkInterfaceInner parameters) + { + return System.Threading.Tasks.Task.Factory.StartNew(s => ((INetworkInterfacesOperations)s).BeginCreateOrUpdateAsync(resourceGroupName, networkInterfaceName, parameters), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// The Put NetworkInterface operation creates/updates a networkInterface + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the network interface. + /// + /// + /// Parameters supplied to the create/update NetworkInterface operation + /// + /// + /// The cancellation token. + /// + public static async System.Threading.Tasks.Task BeginCreateOrUpdateAsync(this INetworkInterfacesOperations operations, string resourceGroupName, string networkInterfaceName, NetworkInterfaceInner parameters, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + using (var _result = await operations.BeginCreateOrUpdateWithHttpMessagesAsync(resourceGroupName, networkInterfaceName, parameters, null, cancellationToken).ConfigureAwait(false)) + { + return _result.Body; + } + } + + /// + /// The list network interface operation retrieves information about all + /// network interfaces in a virtual machine from a virtual machine scale set. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual machine scale set. + /// + /// + /// The virtual machine index. + /// + public static Microsoft.Rest.Azure.IPage ListVirtualMachineScaleSetVMNetworkInterfaces(this INetworkInterfacesOperations operations, string resourceGroupName, string virtualMachineScaleSetName, string virtualmachineIndex) + { + return System.Threading.Tasks.Task.Factory.StartNew(s => ((INetworkInterfacesOperations)s).ListVirtualMachineScaleSetVMNetworkInterfacesAsync(resourceGroupName, virtualMachineScaleSetName, virtualmachineIndex), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// The list network interface operation retrieves information about all + /// network interfaces in a virtual machine from a virtual machine scale set. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual machine scale set. + /// + /// + /// The virtual machine index. + /// + /// + /// The cancellation token. + /// + public static async Task> ListVirtualMachineScaleSetVMNetworkInterfacesAsync(this INetworkInterfacesOperations operations, string resourceGroupName, string virtualMachineScaleSetName, string virtualmachineIndex, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + using (var _result = await operations.ListVirtualMachineScaleSetVMNetworkInterfacesWithHttpMessagesAsync(resourceGroupName, virtualMachineScaleSetName, virtualmachineIndex, null, cancellationToken).ConfigureAwait(false)) + { + return _result.Body; + } + } + + /// + /// The list network interface operation retrieves information about all + /// network interfaces in a virtual machine scale set. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual machine scale set. + /// + public static Microsoft.Rest.Azure.IPage ListVirtualMachineScaleSetNetworkInterfaces(this INetworkInterfacesOperations operations, string resourceGroupName, string virtualMachineScaleSetName) + { + return System.Threading.Tasks.Task.Factory.StartNew(s => ((INetworkInterfacesOperations)s).ListVirtualMachineScaleSetNetworkInterfacesAsync(resourceGroupName, virtualMachineScaleSetName), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// The list network interface operation retrieves information about all + /// network interfaces in a virtual machine scale set. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual machine scale set. + /// + /// + /// The cancellation token. + /// + public static async Task> ListVirtualMachineScaleSetNetworkInterfacesAsync(this INetworkInterfacesOperations operations, string resourceGroupName, string virtualMachineScaleSetName, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + using (var _result = await operations.ListVirtualMachineScaleSetNetworkInterfacesWithHttpMessagesAsync(resourceGroupName, virtualMachineScaleSetName, null, cancellationToken).ConfigureAwait(false)) + { + return _result.Body; + } + } + + /// + /// The Get ntework interface operation retreives information about the + /// specified network interface in a virtual machine scale set. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual machine scale set. + /// + /// + /// The virtual machine index. + /// + /// + /// The name of the network interface. + /// + /// + /// expand references resources. + /// + public static NetworkInterfaceInner GetVirtualMachineScaleSetNetworkInterface(this INetworkInterfacesOperations operations, string resourceGroupName, string virtualMachineScaleSetName, string virtualmachineIndex, string networkInterfaceName, string expand = default(string)) + { + return System.Threading.Tasks.Task.Factory.StartNew(s => ((INetworkInterfacesOperations)s).GetVirtualMachineScaleSetNetworkInterfaceAsync(resourceGroupName, virtualMachineScaleSetName, virtualmachineIndex, networkInterfaceName, expand), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// The Get ntework interface operation retreives information about the + /// specified network interface in a virtual machine scale set. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual machine scale set. + /// + /// + /// The virtual machine index. + /// + /// + /// The name of the network interface. + /// + /// + /// expand references resources. + /// + /// + /// The cancellation token. + /// + public static async System.Threading.Tasks.Task GetVirtualMachineScaleSetNetworkInterfaceAsync(this INetworkInterfacesOperations operations, string resourceGroupName, string virtualMachineScaleSetName, string virtualmachineIndex, string networkInterfaceName, string expand = default(string), System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + using (var _result = await operations.GetVirtualMachineScaleSetNetworkInterfaceWithHttpMessagesAsync(resourceGroupName, virtualMachineScaleSetName, virtualmachineIndex, networkInterfaceName, expand, null, cancellationToken).ConfigureAwait(false)) + { + return _result.Body; + } + } + + /// + /// The List networkInterfaces opertion retrieves all the networkInterfaces in + /// a subscription. + /// + /// + /// The operations group for this extension method. + /// + public static Microsoft.Rest.Azure.IPage ListAll(this INetworkInterfacesOperations operations) + { + return System.Threading.Tasks.Task.Factory.StartNew(s => ((INetworkInterfacesOperations)s).ListAllAsync(), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// The List networkInterfaces opertion retrieves all the networkInterfaces in + /// a subscription. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The cancellation token. + /// + public static async Task> ListAllAsync(this INetworkInterfacesOperations operations, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + using (var _result = await operations.ListAllWithHttpMessagesAsync(null, cancellationToken).ConfigureAwait(false)) + { + return _result.Body; + } + } + + /// + /// The List networkInterfaces opertion retrieves all the networkInterfaces in + /// a resource group. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + public static Microsoft.Rest.Azure.IPage List(this INetworkInterfacesOperations operations, string resourceGroupName) + { + return System.Threading.Tasks.Task.Factory.StartNew(s => ((INetworkInterfacesOperations)s).ListAsync(resourceGroupName), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// The List networkInterfaces opertion retrieves all the networkInterfaces in + /// a resource group. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The cancellation token. + /// + public static async Task> ListAsync(this INetworkInterfacesOperations operations, string resourceGroupName, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + using (var _result = await operations.ListWithHttpMessagesAsync(resourceGroupName, null, cancellationToken).ConfigureAwait(false)) + { + return _result.Body; + } + } + + /// + /// The get effective routetable operation retrieves all the route tables + /// applied on a networkInterface. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the network interface. + /// + public static EffectiveRouteListResultInner GetEffectiveRouteTable(this INetworkInterfacesOperations operations, string resourceGroupName, string networkInterfaceName) + { + return System.Threading.Tasks.Task.Factory.StartNew(s => ((INetworkInterfacesOperations)s).GetEffectiveRouteTableAsync(resourceGroupName, networkInterfaceName), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// The get effective routetable operation retrieves all the route tables + /// applied on a networkInterface. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the network interface. + /// + /// + /// The cancellation token. + /// + public static async System.Threading.Tasks.Task GetEffectiveRouteTableAsync(this INetworkInterfacesOperations operations, string resourceGroupName, string networkInterfaceName, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + using (var _result = await operations.GetEffectiveRouteTableWithHttpMessagesAsync(resourceGroupName, networkInterfaceName, null, cancellationToken).ConfigureAwait(false)) + { + return _result.Body; + } + } + + /// + /// The get effective routetable operation retrieves all the route tables + /// applied on a networkInterface. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the network interface. + /// + public static EffectiveRouteListResultInner BeginGetEffectiveRouteTable(this INetworkInterfacesOperations operations, string resourceGroupName, string networkInterfaceName) + { + return System.Threading.Tasks.Task.Factory.StartNew(s => ((INetworkInterfacesOperations)s).BeginGetEffectiveRouteTableAsync(resourceGroupName, networkInterfaceName), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// The get effective routetable operation retrieves all the route tables + /// applied on a networkInterface. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the network interface. + /// + /// + /// The cancellation token. + /// + public static async System.Threading.Tasks.Task BeginGetEffectiveRouteTableAsync(this INetworkInterfacesOperations operations, string resourceGroupName, string networkInterfaceName, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + using (var _result = await operations.BeginGetEffectiveRouteTableWithHttpMessagesAsync(resourceGroupName, networkInterfaceName, null, cancellationToken).ConfigureAwait(false)) + { + return _result.Body; + } + } + + /// + /// The list effective network security group operation retrieves all the + /// network security groups applied on a networkInterface. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the network interface. + /// + public static EffectiveNetworkSecurityGroupListResultInner ListEffectiveNetworkSecurityGroups(this INetworkInterfacesOperations operations, string resourceGroupName, string networkInterfaceName) + { + return System.Threading.Tasks.Task.Factory.StartNew(s => ((INetworkInterfacesOperations)s).ListEffectiveNetworkSecurityGroupsAsync(resourceGroupName, networkInterfaceName), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// The list effective network security group operation retrieves all the + /// network security groups applied on a networkInterface. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the network interface. + /// + /// + /// The cancellation token. + /// + public static async System.Threading.Tasks.Task ListEffectiveNetworkSecurityGroupsAsync(this INetworkInterfacesOperations operations, string resourceGroupName, string networkInterfaceName, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + using (var _result = await operations.ListEffectiveNetworkSecurityGroupsWithHttpMessagesAsync(resourceGroupName, networkInterfaceName, null, cancellationToken).ConfigureAwait(false)) + { + return _result.Body; + } + } + + /// + /// The list effective network security group operation retrieves all the + /// network security groups applied on a networkInterface. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the network interface. + /// + public static EffectiveNetworkSecurityGroupListResultInner BeginListEffectiveNetworkSecurityGroups(this INetworkInterfacesOperations operations, string resourceGroupName, string networkInterfaceName) + { + return System.Threading.Tasks.Task.Factory.StartNew(s => ((INetworkInterfacesOperations)s).BeginListEffectiveNetworkSecurityGroupsAsync(resourceGroupName, networkInterfaceName), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// The list effective network security group operation retrieves all the + /// network security groups applied on a networkInterface. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the network interface. + /// + /// + /// The cancellation token. + /// + public static async System.Threading.Tasks.Task BeginListEffectiveNetworkSecurityGroupsAsync(this INetworkInterfacesOperations operations, string resourceGroupName, string networkInterfaceName, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + using (var _result = await operations.BeginListEffectiveNetworkSecurityGroupsWithHttpMessagesAsync(resourceGroupName, networkInterfaceName, null, cancellationToken).ConfigureAwait(false)) + { + return _result.Body; + } + } + + /// + /// The list network interface operation retrieves information about all + /// network interfaces in a virtual machine from a virtual machine scale set. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The NextLink from the previous successful call to List operation. + /// + public static Microsoft.Rest.Azure.IPage ListVirtualMachineScaleSetVMNetworkInterfacesNext(this INetworkInterfacesOperations operations, string nextPageLink) + { + return System.Threading.Tasks.Task.Factory.StartNew(s => ((INetworkInterfacesOperations)s).ListVirtualMachineScaleSetVMNetworkInterfacesNextAsync(nextPageLink), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// The list network interface operation retrieves information about all + /// network interfaces in a virtual machine from a virtual machine scale set. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The NextLink from the previous successful call to List operation. + /// + /// + /// The cancellation token. + /// + public static async Task> ListVirtualMachineScaleSetVMNetworkInterfacesNextAsync(this INetworkInterfacesOperations operations, string nextPageLink, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + using (var _result = await operations.ListVirtualMachineScaleSetVMNetworkInterfacesNextWithHttpMessagesAsync(nextPageLink, null, cancellationToken).ConfigureAwait(false)) + { + return _result.Body; + } + } + + /// + /// The list network interface operation retrieves information about all + /// network interfaces in a virtual machine scale set. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The NextLink from the previous successful call to List operation. + /// + public static Microsoft.Rest.Azure.IPage ListVirtualMachineScaleSetNetworkInterfacesNext(this INetworkInterfacesOperations operations, string nextPageLink) + { + return System.Threading.Tasks.Task.Factory.StartNew(s => ((INetworkInterfacesOperations)s).ListVirtualMachineScaleSetNetworkInterfacesNextAsync(nextPageLink), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// The list network interface operation retrieves information about all + /// network interfaces in a virtual machine scale set. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The NextLink from the previous successful call to List operation. + /// + /// + /// The cancellation token. + /// + public static async Task> ListVirtualMachineScaleSetNetworkInterfacesNextAsync(this INetworkInterfacesOperations operations, string nextPageLink, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + using (var _result = await operations.ListVirtualMachineScaleSetNetworkInterfacesNextWithHttpMessagesAsync(nextPageLink, null, cancellationToken).ConfigureAwait(false)) + { + return _result.Body; + } + } + + /// + /// The List networkInterfaces opertion retrieves all the networkInterfaces in + /// a subscription. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The NextLink from the previous successful call to List operation. + /// + public static Microsoft.Rest.Azure.IPage ListAllNext(this INetworkInterfacesOperations operations, string nextPageLink) + { + return System.Threading.Tasks.Task.Factory.StartNew(s => ((INetworkInterfacesOperations)s).ListAllNextAsync(nextPageLink), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// The List networkInterfaces opertion retrieves all the networkInterfaces in + /// a subscription. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The NextLink from the previous successful call to List operation. + /// + /// + /// The cancellation token. + /// + public static async Task> ListAllNextAsync(this INetworkInterfacesOperations operations, string nextPageLink, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + using (var _result = await operations.ListAllNextWithHttpMessagesAsync(nextPageLink, null, cancellationToken).ConfigureAwait(false)) + { + return _result.Body; + } + } + + /// + /// The List networkInterfaces opertion retrieves all the networkInterfaces in + /// a resource group. + /// + /// + /// 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 INetworkInterfacesOperations operations, string nextPageLink) + { + return System.Threading.Tasks.Task.Factory.StartNew(s => ((INetworkInterfacesOperations)s).ListNextAsync(nextPageLink), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// The List networkInterfaces opertion retrieves all the networkInterfaces in + /// a resource group. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The NextLink from the previous successful call to List operation. + /// + /// + /// The cancellation token. + /// + public static async Task> ListNextAsync(this INetworkInterfacesOperations 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/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/NetworkManagementClient.cs b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/NetworkManagementClient.cs new file mode 100644 index 000000000..b43cfed4e --- /dev/null +++ b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/NetworkManagementClient.cs @@ -0,0 +1,615 @@ +// 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 0.17.0.0 +// 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.Azure; + using Models; + + /// + /// The Microsoft Azure Network management API provides a RESTful set of + /// web services that interact with Microsoft Azure Networks service to + /// manage your network resrources. The API has entities that capture the + /// relationship between an end user and the Microsoft Azure Networks + /// service. + /// + public partial class NetworkManagementClient : Microsoft.Rest.ServiceClient, INetworkManagementClient, IAzureClient + { + /// + /// The base URI of the service. + /// + public System.Uri BaseUri { get; set; } + + /// + /// Gets or sets json serialization settings. + /// + public Newtonsoft.Json.JsonSerializerSettings SerializationSettings { get; private set; } + + /// + /// Gets or sets json deserialization settings. + /// + public Newtonsoft.Json.JsonSerializerSettings DeserializationSettings { get; private set; } + + /// + /// Credentials needed for the client to connect to Azure. + /// + public Microsoft.Rest.ServiceClientCredentials Credentials { get; private set; } + + /// + /// Gets subscription credentials which uniquely identify Microsoft Azure + /// subscription. The subscription ID forms part of the URI for every service + /// call. + /// + public string SubscriptionId { get; set; } + + /// + /// Client Api Version. + /// + public string ApiVersion { get; private set; } + + /// + /// Gets or sets the preferred language for the response. + /// + public string AcceptLanguage { get; set; } + + /// + /// Gets or sets the retry timeout in seconds for Long Running Operations. + /// Default value is 30. + /// + public int? LongRunningOperationRetryTimeout { get; set; } + + /// + /// When set to true a unique x-ms-client-request-id value is generated and + /// included in each request. Default is true. + /// + public bool? GenerateClientRequestId { get; set; } + + /// + /// Gets the IApplicationGatewaysOperations. + /// + public virtual IApplicationGatewaysOperations ApplicationGateways { get; private set; } + + /// + /// Gets the IExpressRouteCircuitAuthorizationsOperations. + /// + public virtual IExpressRouteCircuitAuthorizationsOperations ExpressRouteCircuitAuthorizations { get; private set; } + + /// + /// Gets the IExpressRouteCircuitPeeringsOperations. + /// + public virtual IExpressRouteCircuitPeeringsOperations ExpressRouteCircuitPeerings { get; private set; } + + /// + /// Gets the IExpressRouteCircuitsOperations. + /// + public virtual IExpressRouteCircuitsOperations ExpressRouteCircuits { get; private set; } + + /// + /// Gets the IExpressRouteServiceProvidersOperations. + /// + public virtual IExpressRouteServiceProvidersOperations ExpressRouteServiceProviders { get; private set; } + + /// + /// Gets the ILoadBalancersOperations. + /// + public virtual ILoadBalancersOperations LoadBalancers { get; private set; } + + /// + /// Gets the ILocalNetworkGatewaysOperations. + /// + public virtual ILocalNetworkGatewaysOperations LocalNetworkGateways { get; private set; } + + /// + /// Gets the INetworkInterfacesOperations. + /// + public virtual INetworkInterfacesOperations NetworkInterfaces { get; private set; } + + /// + /// Gets the INetworkSecurityGroupsOperations. + /// + public virtual INetworkSecurityGroupsOperations NetworkSecurityGroups { get; private set; } + + /// + /// Gets the IPublicIPAddressesOperations. + /// + public virtual IPublicIPAddressesOperations PublicIPAddresses { get; private set; } + + /// + /// Gets the IRouteTablesOperations. + /// + public virtual IRouteTablesOperations RouteTables { get; private set; } + + /// + /// Gets the IRoutesOperations. + /// + public virtual IRoutesOperations Routes { get; private set; } + + /// + /// Gets the ISecurityRulesOperations. + /// + public virtual ISecurityRulesOperations SecurityRules { get; private set; } + + /// + /// Gets the ISubnetsOperations. + /// + public virtual ISubnetsOperations Subnets { get; private set; } + + /// + /// Gets the IVirtualNetworkPeeringsOperations. + /// + public virtual IVirtualNetworkPeeringsOperations VirtualNetworkPeerings { get; private set; } + + /// + /// Gets the IUsagesOperations. + /// + public virtual IUsagesOperations Usages { get; private set; } + + /// + /// Gets the IVirtualNetworkGatewayConnectionsOperations. + /// + public virtual IVirtualNetworkGatewayConnectionsOperations VirtualNetworkGatewayConnections { get; private set; } + + /// + /// Gets the IVirtualNetworkGatewaysOperations. + /// + public virtual IVirtualNetworkGatewaysOperations VirtualNetworkGateways { get; private set; } + + /// + /// Gets the IVirtualNetworksOperations. + /// + public virtual IVirtualNetworksOperations VirtualNetworks { get; private set; } + + /// + /// Initializes a new instance of the NetworkManagementClient class. + /// + /// + /// Optional. The delegating handlers to add to the http client pipeline. + /// + protected NetworkManagementClient(params System.Net.Http.DelegatingHandler[] handlers) : base(handlers) + { + this.Initialize(); + } + + /// + /// Initializes a new instance of the NetworkManagementClient class. + /// + /// + /// Optional. The http client handler used to handle http transport. + /// + /// + /// Optional. The delegating handlers to add to the http client pipeline. + /// + protected NetworkManagementClient(System.Net.Http.HttpClientHandler rootHandler, params System.Net.Http.DelegatingHandler[] handlers) : base(rootHandler, handlers) + { + this.Initialize(); + } + + /// + /// Initializes a new instance of the NetworkManagementClient class. + /// + /// + /// Optional. The base URI of the service. + /// + /// + /// Optional. The delegating handlers to add to the http client pipeline. + /// + /// + /// Thrown when a required parameter is null + /// + protected NetworkManagementClient(System.Uri baseUri, params System.Net.Http.DelegatingHandler[] handlers) : this(handlers) + { + if (baseUri == null) + { + throw new System.ArgumentNullException("baseUri"); + } + this.BaseUri = baseUri; + } + + /// + /// Initializes a new instance of the NetworkManagementClient class. + /// + /// + /// Optional. The base URI of the service. + /// + /// + /// Optional. The http client handler used to handle http transport. + /// + /// + /// Optional. The delegating handlers to add to the http client pipeline. + /// + /// + /// Thrown when a required parameter is null + /// + protected NetworkManagementClient(System.Uri baseUri, System.Net.Http.HttpClientHandler rootHandler, params System.Net.Http.DelegatingHandler[] handlers) : this(rootHandler, handlers) + { + if (baseUri == null) + { + throw new System.ArgumentNullException("baseUri"); + } + this.BaseUri = baseUri; + } + + /// + /// Initializes a new instance of the NetworkManagementClient class. + /// + /// + /// Required. Credentials needed for the client to connect to Azure. + /// + /// + /// Optional. The delegating handlers to add to the http client pipeline. + /// + /// + /// Thrown when a required parameter is null + /// + public NetworkManagementClient(Microsoft.Rest.ServiceClientCredentials credentials, params System.Net.Http.DelegatingHandler[] handlers) : this(handlers) + { + if (credentials == null) + { + throw new System.ArgumentNullException("credentials"); + } + this.Credentials = credentials; + if (this.Credentials != null) + { + this.Credentials.InitializeServiceClient(this); + } + } + + /// + /// Initializes a new instance of the NetworkManagementClient class. + /// + /// + /// Required. Credentials needed for the client to connect to Azure. + /// + /// + /// Optional. The http client handler used to handle http transport. + /// + /// + /// Optional. The delegating handlers to add to the http client pipeline. + /// + /// + /// Thrown when a required parameter is null + /// + public NetworkManagementClient(Microsoft.Rest.ServiceClientCredentials credentials, System.Net.Http.HttpClientHandler rootHandler, params System.Net.Http.DelegatingHandler[] handlers) : this(rootHandler, handlers) + { + if (credentials == null) + { + throw new System.ArgumentNullException("credentials"); + } + this.Credentials = credentials; + if (this.Credentials != null) + { + this.Credentials.InitializeServiceClient(this); + } + } + + /// + /// Initializes a new instance of the NetworkManagementClient class. + /// + /// + /// Optional. The base URI of the service. + /// + /// + /// Required. Credentials needed for the client to connect to Azure. + /// + /// + /// Optional. The delegating handlers to add to the http client pipeline. + /// + /// + /// Thrown when a required parameter is null + /// + public NetworkManagementClient(System.Uri baseUri, Microsoft.Rest.ServiceClientCredentials credentials, params System.Net.Http.DelegatingHandler[] handlers) : this(handlers) + { + if (baseUri == null) + { + throw new System.ArgumentNullException("baseUri"); + } + if (credentials == null) + { + throw new System.ArgumentNullException("credentials"); + } + this.BaseUri = baseUri; + this.Credentials = credentials; + if (this.Credentials != null) + { + this.Credentials.InitializeServiceClient(this); + } + } + + /// + /// Initializes a new instance of the NetworkManagementClient class. + /// + /// + /// Optional. The base URI of the service. + /// + /// + /// Required. Credentials needed for the client to connect to Azure. + /// + /// + /// Optional. The http client handler used to handle http transport. + /// + /// + /// Optional. The delegating handlers to add to the http client pipeline. + /// + /// + /// Thrown when a required parameter is null + /// + public NetworkManagementClient(System.Uri baseUri, Microsoft.Rest.ServiceClientCredentials credentials, System.Net.Http.HttpClientHandler rootHandler, params System.Net.Http.DelegatingHandler[] handlers) : this(rootHandler, handlers) + { + if (baseUri == null) + { + throw new System.ArgumentNullException("baseUri"); + } + if (credentials == null) + { + throw new System.ArgumentNullException("credentials"); + } + this.BaseUri = baseUri; + this.Credentials = credentials; + if (this.Credentials != null) + { + this.Credentials.InitializeServiceClient(this); + } + } + + /// + /// An optional partial-method to perform custom initialization. + /// + partial void CustomInitialize(); + /// + /// Initializes client properties. + /// + private void Initialize() + { + this.ApplicationGateways = new ApplicationGatewaysOperations(this); + this.ExpressRouteCircuitAuthorizations = new ExpressRouteCircuitAuthorizationsOperations(this); + this.ExpressRouteCircuitPeerings = new ExpressRouteCircuitPeeringsOperations(this); + this.ExpressRouteCircuits = new ExpressRouteCircuitsOperations(this); + this.ExpressRouteServiceProviders = new ExpressRouteServiceProvidersOperations(this); + this.LoadBalancers = new LoadBalancersOperations(this); + this.LocalNetworkGateways = new LocalNetworkGatewaysOperations(this); + this.NetworkInterfaces = new NetworkInterfacesOperations(this); + this.NetworkSecurityGroups = new NetworkSecurityGroupsOperations(this); + this.PublicIPAddresses = new PublicIPAddressesOperations(this); + this.RouteTables = new RouteTablesOperations(this); + this.Routes = new RoutesOperations(this); + this.SecurityRules = new SecurityRulesOperations(this); + this.Subnets = new SubnetsOperations(this); + this.VirtualNetworkPeerings = new VirtualNetworkPeeringsOperations(this); + this.Usages = new UsagesOperations(this); + this.VirtualNetworkGatewayConnections = new VirtualNetworkGatewayConnectionsOperations(this); + this.VirtualNetworkGateways = new VirtualNetworkGatewaysOperations(this); + this.VirtualNetworks = new VirtualNetworksOperations(this); + this.BaseUri = new System.Uri("https://management.azure.com"); + this.ApiVersion = "2016-06-01"; + this.AcceptLanguage = "en-US"; + this.LongRunningOperationRetryTimeout = 30; + this.GenerateClientRequestId = true; + SerializationSettings = new Newtonsoft.Json.JsonSerializerSettings + { + Formatting = Newtonsoft.Json.Formatting.Indented, + DateFormatHandling = Newtonsoft.Json.DateFormatHandling.IsoDateFormat, + DateTimeZoneHandling = Newtonsoft.Json.DateTimeZoneHandling.Utc, + NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore, + ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Serialize, + ContractResolver = new Microsoft.Rest.Serialization.ReadOnlyJsonContractResolver(), + Converters = new System.Collections.Generic.List + { + new Microsoft.Rest.Serialization.Iso8601TimeSpanConverter() + } + }; + SerializationSettings.Converters.Add(new Microsoft.Rest.Serialization.TransformationJsonConverter()); + DeserializationSettings = new Newtonsoft.Json.JsonSerializerSettings + { + DateFormatHandling = Newtonsoft.Json.DateFormatHandling.IsoDateFormat, + DateTimeZoneHandling = Newtonsoft.Json.DateTimeZoneHandling.Utc, + NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore, + ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Serialize, + ContractResolver = new Microsoft.Rest.Serialization.ReadOnlyJsonContractResolver(), + Converters = new System.Collections.Generic.List + { + new Microsoft.Rest.Serialization.Iso8601TimeSpanConverter() + } + }; + CustomInitialize(); + DeserializationSettings.Converters.Add(new Microsoft.Rest.Serialization.TransformationJsonConverter()); + DeserializationSettings.Converters.Add(new Microsoft.Rest.Azure.CloudErrorJsonConverter()); + } + /// + /// Checks whether a domain name in the cloudapp.net zone is available for use. + /// + /// + /// The location of the domain name + /// + /// + /// The domain name to be verified. It must conform to the following regular + /// expression: ^[a-z][a-z0-9-]{1,61}[a-z0-9]$. + /// + /// + /// 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 + /// + /// + /// A response object containing the response body and response headers. + /// + public async System.Threading.Tasks.Task> CheckDnsNameAvailabilityWithHttpMessagesAsync(string location, string domainNameLabel = default(string), System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + if (location == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "location"); + } + if (this.ApiVersion == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.ApiVersion"); + } + if (this.SubscriptionId == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.SubscriptionId"); + } + // 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("location", location); + tracingParameters.Add("domainNameLabel", domainNameLabel); + tracingParameters.Add("cancellationToken", cancellationToken); + Microsoft.Rest.ServiceClientTracing.Enter(_invocationId, this, "CheckDnsNameAvailability", tracingParameters); + } + // Construct URL + var _baseUrl = this.BaseUri.AbsoluteUri; + var _url = new System.Uri(new System.Uri(_baseUrl + (_baseUrl.EndsWith("/") ? "" : "/")), "subscriptions/{subscriptionId}/providers/Microsoft.Network/locations/{location}/CheckDnsNameAvailability").ToString(); + _url = _url.Replace("{location}", System.Uri.EscapeDataString(location)); + _url = _url.Replace("{subscriptionId}", System.Uri.EscapeDataString(this.SubscriptionId)); + System.Collections.Generic.List _queryParameters = new System.Collections.Generic.List(); + if (domainNameLabel != null) + { + _queryParameters.Add(string.Format("domainNameLabel={0}", System.Uri.EscapeDataString(domainNameLabel))); + } + if (this.ApiVersion != null) + { + _queryParameters.Add(string.Format("api-version={0}", System.Uri.EscapeDataString(this.ApiVersion))); + } + if (_queryParameters.Count > 0) + { + _url += "?" + string.Join("&", _queryParameters); + } + // Create HTTP transport objects + System.Net.Http.HttpRequestMessage _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.GenerateClientRequestId != null && this.GenerateClientRequestId.Value) + { + _httpRequest.Headers.TryAddWithoutValidation("x-ms-client-request-id", System.Guid.NewGuid().ToString()); + } + if (this.AcceptLanguage != null) + { + if (_httpRequest.Headers.Contains("accept-language")) + { + _httpRequest.Headers.Remove("accept-language"); + } + _httpRequest.Headers.TryAddWithoutValidation("accept-language", this.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.Credentials != null) + { + cancellationToken.ThrowIfCancellationRequested(); + await this.Credentials.ProcessHttpRequestAsync(_httpRequest, cancellationToken).ConfigureAwait(false); + } + // Send Request + if (_shouldTrace) + { + Microsoft.Rest.ServiceClientTracing.SendRequest(_invocationId, _httpRequest); + } + cancellationToken.ThrowIfCancellationRequested(); + _httpResponse = await this.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); + CloudError _errorBody = Microsoft.Rest.Serialization.SafeJsonConvert.DeserializeObject(_responseContent, this.DeserializationSettings); + if (_errorBody != null) + { + ex = new Microsoft.Rest.Azure.CloudException(_errorBody.Message); + 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 (_httpResponse.Headers.Contains("x-ms-request-id")) + { + ex.RequestId = _httpResponse.Headers.GetValues("x-ms-request-id").FirstOrDefault(); + } + 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.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; + } + + } +} diff --git a/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/NetworkManagementClientExtensions.cs b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/NetworkManagementClientExtensions.cs new file mode 100644 index 000000000..01e06e0fb --- /dev/null +++ b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/NetworkManagementClientExtensions.cs @@ -0,0 +1,63 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.Network +{ + using System.Threading.Tasks; + using Microsoft.Rest.Azure; + using Models; + + /// + /// Extension methods for NetworkManagementClient. + /// + public static partial class NetworkManagementClientExtensions + { + /// + /// Checks whether a domain name in the cloudapp.net zone is available for use. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The location of the domain name + /// + /// + /// The domain name to be verified. It must conform to the following regular + /// expression: ^[a-z][a-z0-9-]{1,61}[a-z0-9]$. + /// + public static DnsNameAvailabilityResultInner CheckDnsNameAvailability(this INetworkManagementClient operations, string location, string domainNameLabel = default(string)) + { + return System.Threading.Tasks.Task.Factory.StartNew(s => ((INetworkManagementClient)s).CheckDnsNameAvailabilityAsync(location, domainNameLabel), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// Checks whether a domain name in the cloudapp.net zone is available for use. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The location of the domain name + /// + /// + /// The domain name to be verified. It must conform to the following regular + /// expression: ^[a-z][a-z0-9-]{1,61}[a-z0-9]$. + /// + /// + /// The cancellation token. + /// + public static async System.Threading.Tasks.Task CheckDnsNameAvailabilityAsync(this INetworkManagementClient operations, string location, string domainNameLabel = default(string), System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + using (var _result = await operations.CheckDnsNameAvailabilityWithHttpMessagesAsync(location, domainNameLabel, null, cancellationToken).ConfigureAwait(false)) + { + return _result.Body; + } + } + + } +} diff --git a/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/NetworkSecurityGroupsOperations.cs b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/NetworkSecurityGroupsOperations.cs new file mode 100644 index 000000000..d93c195e4 --- /dev/null +++ b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/NetworkSecurityGroupsOperations.cs @@ -0,0 +1,1380 @@ +// 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 0.17.0.0 +// 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; + + /// + /// NetworkSecurityGroupsOperations operations. + /// + internal partial class NetworkSecurityGroupsOperations : Microsoft.Rest.IServiceOperations, INetworkSecurityGroupsOperations + { + /// + /// Initializes a new instance of the NetworkSecurityGroupsOperations class. + /// + /// + /// Reference to the service client. + /// + /// + /// Thrown when a required parameter is null + /// + internal NetworkSecurityGroupsOperations(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; } + + /// + /// The Delete NetworkSecurityGroup operation deletes the specifed network + /// security group + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the network security group. + /// + /// + /// The headers that will be added to request. + /// + /// + /// The cancellation token. + /// + public async System.Threading.Tasks.Task DeleteWithHttpMessagesAsync(string resourceGroupName, string networkSecurityGroupName, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + // Send request + Microsoft.Rest.Azure.AzureOperationResponse _response = await BeginDeleteWithHttpMessagesAsync( + resourceGroupName, networkSecurityGroupName, customHeaders, cancellationToken); + return await this.Client.GetPostOrDeleteOperationResultAsync(_response, customHeaders, cancellationToken); + } + + /// + /// The Delete NetworkSecurityGroup operation deletes the specifed network + /// security group + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the network security group. + /// + /// + /// 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 + /// + /// + /// A response object containing the response body and response headers. + /// + public async System.Threading.Tasks.Task BeginDeleteWithHttpMessagesAsync(string resourceGroupName, string networkSecurityGroupName, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + if (resourceGroupName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "resourceGroupName"); + } + if (networkSecurityGroupName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "networkSecurityGroupName"); + } + if (this.Client.ApiVersion == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.ApiVersion"); + } + if (this.Client.SubscriptionId == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.SubscriptionId"); + } + // 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("networkSecurityGroupName", networkSecurityGroupName); + 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/networkSecurityGroups/{networkSecurityGroupName}").ToString(); + _url = _url.Replace("{resourceGroupName}", System.Uri.EscapeDataString(resourceGroupName)); + _url = _url.Replace("{networkSecurityGroupName}", System.Uri.EscapeDataString(networkSecurityGroupName)); + _url = _url.Replace("{subscriptionId}", System.Uri.EscapeDataString(this.Client.SubscriptionId)); + System.Collections.Generic.List _queryParameters = new System.Collections.Generic.List(); + if (this.Client.ApiVersion != null) + { + _queryParameters.Add(string.Format("api-version={0}", System.Uri.EscapeDataString(this.Client.ApiVersion))); + } + if (_queryParameters.Count > 0) + { + _url += "?" + string.Join("&", _queryParameters); + } + // Create HTTP transport objects + System.Net.Http.HttpRequestMessage _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 != 200 && (int)_statusCode != 204) + { + var ex = new Microsoft.Rest.Azure.CloudException(string.Format("Operation returned an invalid status code '{0}'", _statusCode)); + if (_httpResponse.Content != null) { + _responseContent = await _httpResponse.Content.ReadAsStringAsync().ConfigureAwait(false); + } + else { + _responseContent = string.Empty; + } + ex.Request = new Microsoft.Rest.HttpRequestMessageWrapper(_httpRequest, _requestContent); + ex.Response = new Microsoft.Rest.HttpResponseMessageWrapper(_httpResponse, _responseContent); + if (_httpResponse.Headers.Contains("x-ms-request-id")) + { + ex.RequestId = _httpResponse.Headers.GetValues("x-ms-request-id").FirstOrDefault(); + } + 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(); + } + if (_shouldTrace) + { + Microsoft.Rest.ServiceClientTracing.Exit(_invocationId, _result); + } + return _result; + } + + /// + /// The Get NetworkSecurityGroups operation retrieves information about the + /// specified network security group. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the network security group. + /// + /// + /// expand references resources. + /// + /// + /// 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 + /// + /// + /// A response object containing the response body and response headers. + /// + public async System.Threading.Tasks.Task> GetWithHttpMessagesAsync(string resourceGroupName, string networkSecurityGroupName, string expand = default(string), System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + if (resourceGroupName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "resourceGroupName"); + } + if (networkSecurityGroupName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "networkSecurityGroupName"); + } + if (this.Client.ApiVersion == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.ApiVersion"); + } + if (this.Client.SubscriptionId == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.SubscriptionId"); + } + // 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("networkSecurityGroupName", networkSecurityGroupName); + tracingParameters.Add("expand", expand); + 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/networkSecurityGroups/{networkSecurityGroupName}").ToString(); + _url = _url.Replace("{resourceGroupName}", System.Uri.EscapeDataString(resourceGroupName)); + _url = _url.Replace("{networkSecurityGroupName}", System.Uri.EscapeDataString(networkSecurityGroupName)); + _url = _url.Replace("{subscriptionId}", System.Uri.EscapeDataString(this.Client.SubscriptionId)); + System.Collections.Generic.List _queryParameters = new System.Collections.Generic.List(); + if (this.Client.ApiVersion != null) + { + _queryParameters.Add(string.Format("api-version={0}", System.Uri.EscapeDataString(this.Client.ApiVersion))); + } + if (expand != null) + { + _queryParameters.Add(string.Format("$expand={0}", System.Uri.EscapeDataString(expand))); + } + if (_queryParameters.Count > 0) + { + _url += "?" + string.Join("&", _queryParameters); + } + // Create HTTP transport objects + System.Net.Http.HttpRequestMessage _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); + CloudError _errorBody = Microsoft.Rest.Serialization.SafeJsonConvert.DeserializeObject(_responseContent, this.Client.DeserializationSettings); + if (_errorBody != null) + { + ex = new Microsoft.Rest.Azure.CloudException(_errorBody.Message); + 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 (_httpResponse.Headers.Contains("x-ms-request-id")) + { + ex.RequestId = _httpResponse.Headers.GetValues("x-ms-request-id").FirstOrDefault(); + } + 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; + } + + /// + /// The Put NetworkSecurityGroup operation creates/updates a network security + /// groupin the specified resource group. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the network security group. + /// + /// + /// Parameters supplied to the create/update Network Security Group operation + /// + /// + /// The headers that will be added to request. + /// + /// + /// The cancellation token. + /// + public async System.Threading.Tasks.Task> CreateOrUpdateWithHttpMessagesAsync(string resourceGroupName, string networkSecurityGroupName, NetworkSecurityGroupInner 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, networkSecurityGroupName, parameters, customHeaders, cancellationToken); + return await this.Client.GetPutOrPatchOperationResultAsync(_response, + customHeaders, + cancellationToken); + } + + /// + /// The Put NetworkSecurityGroup operation creates/updates a network security + /// groupin the specified resource group. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the network security group. + /// + /// + /// Parameters supplied to the create/update Network Security Group 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 + /// + /// + /// A response object containing the response body and response headers. + /// + public async System.Threading.Tasks.Task> BeginCreateOrUpdateWithHttpMessagesAsync(string resourceGroupName, string networkSecurityGroupName, NetworkSecurityGroupInner parameters, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + if (resourceGroupName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "resourceGroupName"); + } + if (networkSecurityGroupName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "networkSecurityGroupName"); + } + if (parameters == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "parameters"); + } + if (this.Client.ApiVersion == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.ApiVersion"); + } + if (this.Client.SubscriptionId == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.SubscriptionId"); + } + // 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("networkSecurityGroupName", networkSecurityGroupName); + 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/networkSecurityGroups/{networkSecurityGroupName}").ToString(); + _url = _url.Replace("{resourceGroupName}", System.Uri.EscapeDataString(resourceGroupName)); + _url = _url.Replace("{networkSecurityGroupName}", System.Uri.EscapeDataString(networkSecurityGroupName)); + _url = _url.Replace("{subscriptionId}", System.Uri.EscapeDataString(this.Client.SubscriptionId)); + System.Collections.Generic.List _queryParameters = new System.Collections.Generic.List(); + if (this.Client.ApiVersion != null) + { + _queryParameters.Add(string.Format("api-version={0}", System.Uri.EscapeDataString(this.Client.ApiVersion))); + } + if (_queryParameters.Count > 0) + { + _url += "?" + string.Join("&", _queryParameters); + } + // Create HTTP transport objects + System.Net.Http.HttpRequestMessage _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 != 201 && (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); + CloudError _errorBody = Microsoft.Rest.Serialization.SafeJsonConvert.DeserializeObject(_responseContent, this.Client.DeserializationSettings); + if (_errorBody != null) + { + ex = new Microsoft.Rest.Azure.CloudException(_errorBody.Message); + 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 (_httpResponse.Headers.Contains("x-ms-request-id")) + { + ex.RequestId = _httpResponse.Headers.GetValues("x-ms-request-id").FirstOrDefault(); + } + 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 == 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); + } + } + // 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; + } + + /// + /// The list NetworkSecurityGroups returns all network security groups in a + /// subscription + /// + /// + /// 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 + /// + /// + /// A response object containing the response body and response headers. + /// + public async System.Threading.Tasks.Task>> ListAllWithHttpMessagesAsync(System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + if (this.Client.ApiVersion == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.ApiVersion"); + } + if (this.Client.SubscriptionId == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.SubscriptionId"); + } + // 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("cancellationToken", cancellationToken); + Microsoft.Rest.ServiceClientTracing.Enter(_invocationId, this, "ListAll", tracingParameters); + } + // Construct URL + var _baseUrl = this.Client.BaseUri.AbsoluteUri; + var _url = new System.Uri(new System.Uri(_baseUrl + (_baseUrl.EndsWith("/") ? "" : "/")), "subscriptions/{subscriptionId}/providers/Microsoft.Network/networkSecurityGroups").ToString(); + _url = _url.Replace("{subscriptionId}", System.Uri.EscapeDataString(this.Client.SubscriptionId)); + System.Collections.Generic.List _queryParameters = new System.Collections.Generic.List(); + if (this.Client.ApiVersion != null) + { + _queryParameters.Add(string.Format("api-version={0}", System.Uri.EscapeDataString(this.Client.ApiVersion))); + } + if (_queryParameters.Count > 0) + { + _url += "?" + string.Join("&", _queryParameters); + } + // Create HTTP transport objects + System.Net.Http.HttpRequestMessage _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); + CloudError _errorBody = Microsoft.Rest.Serialization.SafeJsonConvert.DeserializeObject(_responseContent, this.Client.DeserializationSettings); + if (_errorBody != null) + { + ex = new Microsoft.Rest.Azure.CloudException(_errorBody.Message); + 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 (_httpResponse.Headers.Contains("x-ms-request-id")) + { + ex.RequestId = _httpResponse.Headers.GetValues("x-ms-request-id").FirstOrDefault(); + } + 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; + } + + /// + /// The list NetworkSecurityGroups returns all network security groups in a + /// resource group + /// + /// + /// The name of the resource group. + /// + /// + /// 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 + /// + /// + /// A response object containing the response body and response headers. + /// + public async System.Threading.Tasks.Task>> ListWithHttpMessagesAsync(string resourceGroupName, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + if (resourceGroupName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "resourceGroupName"); + } + if (this.Client.ApiVersion == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.ApiVersion"); + } + if (this.Client.SubscriptionId == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.SubscriptionId"); + } + // 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("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/networkSecurityGroups").ToString(); + _url = _url.Replace("{resourceGroupName}", System.Uri.EscapeDataString(resourceGroupName)); + _url = _url.Replace("{subscriptionId}", System.Uri.EscapeDataString(this.Client.SubscriptionId)); + System.Collections.Generic.List _queryParameters = new System.Collections.Generic.List(); + if (this.Client.ApiVersion != null) + { + _queryParameters.Add(string.Format("api-version={0}", System.Uri.EscapeDataString(this.Client.ApiVersion))); + } + if (_queryParameters.Count > 0) + { + _url += "?" + string.Join("&", _queryParameters); + } + // Create HTTP transport objects + System.Net.Http.HttpRequestMessage _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); + CloudError _errorBody = Microsoft.Rest.Serialization.SafeJsonConvert.DeserializeObject(_responseContent, this.Client.DeserializationSettings); + if (_errorBody != null) + { + ex = new Microsoft.Rest.Azure.CloudException(_errorBody.Message); + 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 (_httpResponse.Headers.Contains("x-ms-request-id")) + { + ex.RequestId = _httpResponse.Headers.GetValues("x-ms-request-id").FirstOrDefault(); + } + 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; + } + + /// + /// The list NetworkSecurityGroups returns all network security groups in a + /// subscription + /// + /// + /// 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 + /// + /// + /// A response object containing the response body and response headers. + /// + public async System.Threading.Tasks.Task>> ListAllNextWithHttpMessagesAsync(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, "ListAllNext", 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 += "?" + string.Join("&", _queryParameters); + } + // Create HTTP transport objects + System.Net.Http.HttpRequestMessage _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); + CloudError _errorBody = Microsoft.Rest.Serialization.SafeJsonConvert.DeserializeObject(_responseContent, this.Client.DeserializationSettings); + if (_errorBody != null) + { + ex = new Microsoft.Rest.Azure.CloudException(_errorBody.Message); + 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 (_httpResponse.Headers.Contains("x-ms-request-id")) + { + ex.RequestId = _httpResponse.Headers.GetValues("x-ms-request-id").FirstOrDefault(); + } + 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; + } + + /// + /// The list NetworkSecurityGroups returns all network security groups in a + /// resource group + /// + /// + /// 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 + /// + /// + /// 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 += "?" + string.Join("&", _queryParameters); + } + // Create HTTP transport objects + System.Net.Http.HttpRequestMessage _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); + CloudError _errorBody = Microsoft.Rest.Serialization.SafeJsonConvert.DeserializeObject(_responseContent, this.Client.DeserializationSettings); + if (_errorBody != null) + { + ex = new Microsoft.Rest.Azure.CloudException(_errorBody.Message); + 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 (_httpResponse.Headers.Contains("x-ms-request-id")) + { + ex.RequestId = _httpResponse.Headers.GetValues("x-ms-request-id").FirstOrDefault(); + } + 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; + } + + } +} diff --git a/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/NetworkSecurityGroupsOperationsExtensions.cs b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/NetworkSecurityGroupsOperationsExtensions.cs new file mode 100644 index 000000000..fec92e96b --- /dev/null +++ b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/NetworkSecurityGroupsOperationsExtensions.cs @@ -0,0 +1,381 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.Network +{ + using System.Threading.Tasks; + using Microsoft.Rest.Azure; + using Models; + + /// + /// Extension methods for NetworkSecurityGroupsOperations. + /// + public static partial class NetworkSecurityGroupsOperationsExtensions + { + /// + /// The Delete NetworkSecurityGroup operation deletes the specifed network + /// security group + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the network security group. + /// + public static void Delete(this INetworkSecurityGroupsOperations operations, string resourceGroupName, string networkSecurityGroupName) + { + System.Threading.Tasks.Task.Factory.StartNew(s => ((INetworkSecurityGroupsOperations)s).DeleteAsync(resourceGroupName, networkSecurityGroupName), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// The Delete NetworkSecurityGroup operation deletes the specifed network + /// security group + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the network security group. + /// + /// + /// The cancellation token. + /// + public static async System.Threading.Tasks.Task DeleteAsync(this INetworkSecurityGroupsOperations operations, string resourceGroupName, string networkSecurityGroupName, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + await operations.DeleteWithHttpMessagesAsync(resourceGroupName, networkSecurityGroupName, null, cancellationToken).ConfigureAwait(false); + } + + /// + /// The Delete NetworkSecurityGroup operation deletes the specifed network + /// security group + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the network security group. + /// + public static void BeginDelete(this INetworkSecurityGroupsOperations operations, string resourceGroupName, string networkSecurityGroupName) + { + System.Threading.Tasks.Task.Factory.StartNew(s => ((INetworkSecurityGroupsOperations)s).BeginDeleteAsync(resourceGroupName, networkSecurityGroupName), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// The Delete NetworkSecurityGroup operation deletes the specifed network + /// security group + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the network security group. + /// + /// + /// The cancellation token. + /// + public static async System.Threading.Tasks.Task BeginDeleteAsync(this INetworkSecurityGroupsOperations operations, string resourceGroupName, string networkSecurityGroupName, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + await operations.BeginDeleteWithHttpMessagesAsync(resourceGroupName, networkSecurityGroupName, null, cancellationToken).ConfigureAwait(false); + } + + /// + /// The Get NetworkSecurityGroups operation retrieves information about the + /// specified network security group. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the network security group. + /// + /// + /// expand references resources. + /// + public static NetworkSecurityGroupInner Get(this INetworkSecurityGroupsOperations operations, string resourceGroupName, string networkSecurityGroupName, string expand = default(string)) + { + return System.Threading.Tasks.Task.Factory.StartNew(s => ((INetworkSecurityGroupsOperations)s).GetAsync(resourceGroupName, networkSecurityGroupName, expand), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// The Get NetworkSecurityGroups operation retrieves information about the + /// specified network security group. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the network security group. + /// + /// + /// expand references resources. + /// + /// + /// The cancellation token. + /// + public static async System.Threading.Tasks.Task GetAsync(this INetworkSecurityGroupsOperations operations, string resourceGroupName, string networkSecurityGroupName, string expand = default(string), System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + using (var _result = await operations.GetWithHttpMessagesAsync(resourceGroupName, networkSecurityGroupName, expand, null, cancellationToken).ConfigureAwait(false)) + { + return _result.Body; + } + } + + /// + /// The Put NetworkSecurityGroup operation creates/updates a network security + /// groupin the specified resource group. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the network security group. + /// + /// + /// Parameters supplied to the create/update Network Security Group operation + /// + public static NetworkSecurityGroupInner CreateOrUpdate(this INetworkSecurityGroupsOperations operations, string resourceGroupName, string networkSecurityGroupName, NetworkSecurityGroupInner parameters) + { + return System.Threading.Tasks.Task.Factory.StartNew(s => ((INetworkSecurityGroupsOperations)s).CreateOrUpdateAsync(resourceGroupName, networkSecurityGroupName, parameters), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// The Put NetworkSecurityGroup operation creates/updates a network security + /// groupin the specified resource group. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the network security group. + /// + /// + /// Parameters supplied to the create/update Network Security Group operation + /// + /// + /// The cancellation token. + /// + public static async System.Threading.Tasks.Task CreateOrUpdateAsync(this INetworkSecurityGroupsOperations operations, string resourceGroupName, string networkSecurityGroupName, NetworkSecurityGroupInner parameters, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + using (var _result = await operations.CreateOrUpdateWithHttpMessagesAsync(resourceGroupName, networkSecurityGroupName, parameters, null, cancellationToken).ConfigureAwait(false)) + { + return _result.Body; + } + } + + /// + /// The Put NetworkSecurityGroup operation creates/updates a network security + /// groupin the specified resource group. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the network security group. + /// + /// + /// Parameters supplied to the create/update Network Security Group operation + /// + public static NetworkSecurityGroupInner BeginCreateOrUpdate(this INetworkSecurityGroupsOperations operations, string resourceGroupName, string networkSecurityGroupName, NetworkSecurityGroupInner parameters) + { + return System.Threading.Tasks.Task.Factory.StartNew(s => ((INetworkSecurityGroupsOperations)s).BeginCreateOrUpdateAsync(resourceGroupName, networkSecurityGroupName, parameters), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// The Put NetworkSecurityGroup operation creates/updates a network security + /// groupin the specified resource group. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the network security group. + /// + /// + /// Parameters supplied to the create/update Network Security Group operation + /// + /// + /// The cancellation token. + /// + public static async System.Threading.Tasks.Task BeginCreateOrUpdateAsync(this INetworkSecurityGroupsOperations operations, string resourceGroupName, string networkSecurityGroupName, NetworkSecurityGroupInner parameters, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + using (var _result = await operations.BeginCreateOrUpdateWithHttpMessagesAsync(resourceGroupName, networkSecurityGroupName, parameters, null, cancellationToken).ConfigureAwait(false)) + { + return _result.Body; + } + } + + /// + /// The list NetworkSecurityGroups returns all network security groups in a + /// subscription + /// + /// + /// The operations group for this extension method. + /// + public static Microsoft.Rest.Azure.IPage ListAll(this INetworkSecurityGroupsOperations operations) + { + return System.Threading.Tasks.Task.Factory.StartNew(s => ((INetworkSecurityGroupsOperations)s).ListAllAsync(), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// The list NetworkSecurityGroups returns all network security groups in a + /// subscription + /// + /// + /// The operations group for this extension method. + /// + /// + /// The cancellation token. + /// + public static async Task> ListAllAsync(this INetworkSecurityGroupsOperations operations, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + using (var _result = await operations.ListAllWithHttpMessagesAsync(null, cancellationToken).ConfigureAwait(false)) + { + return _result.Body; + } + } + + /// + /// The list NetworkSecurityGroups returns all network security groups in a + /// resource group + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + public static Microsoft.Rest.Azure.IPage List(this INetworkSecurityGroupsOperations operations, string resourceGroupName) + { + return System.Threading.Tasks.Task.Factory.StartNew(s => ((INetworkSecurityGroupsOperations)s).ListAsync(resourceGroupName), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// The list NetworkSecurityGroups returns all network security groups in a + /// resource group + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The cancellation token. + /// + public static async Task> ListAsync(this INetworkSecurityGroupsOperations operations, string resourceGroupName, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + using (var _result = await operations.ListWithHttpMessagesAsync(resourceGroupName, null, cancellationToken).ConfigureAwait(false)) + { + return _result.Body; + } + } + + /// + /// The list NetworkSecurityGroups returns all network security groups in a + /// subscription + /// + /// + /// The operations group for this extension method. + /// + /// + /// The NextLink from the previous successful call to List operation. + /// + public static Microsoft.Rest.Azure.IPage ListAllNext(this INetworkSecurityGroupsOperations operations, string nextPageLink) + { + return System.Threading.Tasks.Task.Factory.StartNew(s => ((INetworkSecurityGroupsOperations)s).ListAllNextAsync(nextPageLink), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// The list NetworkSecurityGroups returns all network security groups in a + /// subscription + /// + /// + /// The operations group for this extension method. + /// + /// + /// The NextLink from the previous successful call to List operation. + /// + /// + /// The cancellation token. + /// + public static async Task> ListAllNextAsync(this INetworkSecurityGroupsOperations operations, string nextPageLink, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + using (var _result = await operations.ListAllNextWithHttpMessagesAsync(nextPageLink, null, cancellationToken).ConfigureAwait(false)) + { + return _result.Body; + } + } + + /// + /// The list NetworkSecurityGroups returns all network security groups in a + /// resource group + /// + /// + /// 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 INetworkSecurityGroupsOperations operations, string nextPageLink) + { + return System.Threading.Tasks.Task.Factory.StartNew(s => ((INetworkSecurityGroupsOperations)s).ListNextAsync(nextPageLink), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// The list NetworkSecurityGroups returns all network security groups in a + /// resource group + /// + /// + /// The operations group for this extension method. + /// + /// + /// The NextLink from the previous successful call to List operation. + /// + /// + /// The cancellation token. + /// + public static async Task> ListNextAsync(this INetworkSecurityGroupsOperations 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/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/PublicIPAddressesOperations.cs b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/PublicIPAddressesOperations.cs new file mode 100644 index 000000000..5070c6a2b --- /dev/null +++ b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/PublicIPAddressesOperations.cs @@ -0,0 +1,1378 @@ +// 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 0.17.0.0 +// 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; + + /// + /// PublicIPAddressesOperations operations. + /// + internal partial class PublicIPAddressesOperations : Microsoft.Rest.IServiceOperations, IPublicIPAddressesOperations + { + /// + /// Initializes a new instance of the PublicIPAddressesOperations class. + /// + /// + /// Reference to the service client. + /// + /// + /// Thrown when a required parameter is null + /// + internal PublicIPAddressesOperations(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; } + + /// + /// The delete publicIpAddress operation deletes the specified publicIpAddress. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the subnet. + /// + /// + /// The headers that will be added to request. + /// + /// + /// The cancellation token. + /// + public async System.Threading.Tasks.Task DeleteWithHttpMessagesAsync(string resourceGroupName, string publicIpAddressName, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + // Send request + Microsoft.Rest.Azure.AzureOperationResponse _response = await BeginDeleteWithHttpMessagesAsync( + resourceGroupName, publicIpAddressName, customHeaders, cancellationToken); + return await this.Client.GetPostOrDeleteOperationResultAsync(_response, customHeaders, cancellationToken); + } + + /// + /// The delete publicIpAddress operation deletes the specified publicIpAddress. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the subnet. + /// + /// + /// 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 + /// + /// + /// A response object containing the response body and response headers. + /// + public async System.Threading.Tasks.Task BeginDeleteWithHttpMessagesAsync(string resourceGroupName, string publicIpAddressName, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + if (resourceGroupName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "resourceGroupName"); + } + if (publicIpAddressName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "publicIpAddressName"); + } + if (this.Client.ApiVersion == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.ApiVersion"); + } + if (this.Client.SubscriptionId == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.SubscriptionId"); + } + // 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("publicIpAddressName", publicIpAddressName); + 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/publicIPAddresses/{publicIpAddressName}").ToString(); + _url = _url.Replace("{resourceGroupName}", System.Uri.EscapeDataString(resourceGroupName)); + _url = _url.Replace("{publicIpAddressName}", System.Uri.EscapeDataString(publicIpAddressName)); + _url = _url.Replace("{subscriptionId}", System.Uri.EscapeDataString(this.Client.SubscriptionId)); + System.Collections.Generic.List _queryParameters = new System.Collections.Generic.List(); + if (this.Client.ApiVersion != null) + { + _queryParameters.Add(string.Format("api-version={0}", System.Uri.EscapeDataString(this.Client.ApiVersion))); + } + if (_queryParameters.Count > 0) + { + _url += "?" + string.Join("&", _queryParameters); + } + // Create HTTP transport objects + System.Net.Http.HttpRequestMessage _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 != 204 && (int)_statusCode != 202 && (int)_statusCode != 200) + { + var ex = new Microsoft.Rest.Azure.CloudException(string.Format("Operation returned an invalid status code '{0}'", _statusCode)); + if (_httpResponse.Content != null) { + _responseContent = await _httpResponse.Content.ReadAsStringAsync().ConfigureAwait(false); + } + else { + _responseContent = string.Empty; + } + ex.Request = new Microsoft.Rest.HttpRequestMessageWrapper(_httpRequest, _requestContent); + ex.Response = new Microsoft.Rest.HttpResponseMessageWrapper(_httpResponse, _responseContent); + if (_httpResponse.Headers.Contains("x-ms-request-id")) + { + ex.RequestId = _httpResponse.Headers.GetValues("x-ms-request-id").FirstOrDefault(); + } + 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(); + } + if (_shouldTrace) + { + Microsoft.Rest.ServiceClientTracing.Exit(_invocationId, _result); + } + return _result; + } + + /// + /// The Get publicIpAddress operation retreives information about the + /// specified pubicIpAddress + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the subnet. + /// + /// + /// expand references resources. + /// + /// + /// 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 + /// + /// + /// A response object containing the response body and response headers. + /// + public async System.Threading.Tasks.Task> GetWithHttpMessagesAsync(string resourceGroupName, string publicIpAddressName, string expand = default(string), System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + if (resourceGroupName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "resourceGroupName"); + } + if (publicIpAddressName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "publicIpAddressName"); + } + if (this.Client.ApiVersion == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.ApiVersion"); + } + if (this.Client.SubscriptionId == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.SubscriptionId"); + } + // 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("publicIpAddressName", publicIpAddressName); + tracingParameters.Add("expand", expand); + 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/publicIPAddresses/{publicIpAddressName}").ToString(); + _url = _url.Replace("{resourceGroupName}", System.Uri.EscapeDataString(resourceGroupName)); + _url = _url.Replace("{publicIpAddressName}", System.Uri.EscapeDataString(publicIpAddressName)); + _url = _url.Replace("{subscriptionId}", System.Uri.EscapeDataString(this.Client.SubscriptionId)); + System.Collections.Generic.List _queryParameters = new System.Collections.Generic.List(); + if (this.Client.ApiVersion != null) + { + _queryParameters.Add(string.Format("api-version={0}", System.Uri.EscapeDataString(this.Client.ApiVersion))); + } + if (expand != null) + { + _queryParameters.Add(string.Format("$expand={0}", System.Uri.EscapeDataString(expand))); + } + if (_queryParameters.Count > 0) + { + _url += "?" + string.Join("&", _queryParameters); + } + // Create HTTP transport objects + System.Net.Http.HttpRequestMessage _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); + CloudError _errorBody = Microsoft.Rest.Serialization.SafeJsonConvert.DeserializeObject(_responseContent, this.Client.DeserializationSettings); + if (_errorBody != null) + { + ex = new Microsoft.Rest.Azure.CloudException(_errorBody.Message); + 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 (_httpResponse.Headers.Contains("x-ms-request-id")) + { + ex.RequestId = _httpResponse.Headers.GetValues("x-ms-request-id").FirstOrDefault(); + } + 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; + } + + /// + /// The Put PublicIPAddress operation creates/updates a stable/dynamic + /// PublicIP address + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the publicIpAddress. + /// + /// + /// Parameters supplied to the create/update PublicIPAddress operation + /// + /// + /// The headers that will be added to request. + /// + /// + /// The cancellation token. + /// + public async System.Threading.Tasks.Task> CreateOrUpdateWithHttpMessagesAsync(string resourceGroupName, string publicIpAddressName, PublicIPAddressInner 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, publicIpAddressName, parameters, customHeaders, cancellationToken); + return await this.Client.GetPutOrPatchOperationResultAsync(_response, + customHeaders, + cancellationToken); + } + + /// + /// The Put PublicIPAddress operation creates/updates a stable/dynamic + /// PublicIP address + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the publicIpAddress. + /// + /// + /// Parameters supplied to the create/update PublicIPAddress 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 + /// + /// + /// A response object containing the response body and response headers. + /// + public async System.Threading.Tasks.Task> BeginCreateOrUpdateWithHttpMessagesAsync(string resourceGroupName, string publicIpAddressName, PublicIPAddressInner parameters, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + if (resourceGroupName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "resourceGroupName"); + } + if (publicIpAddressName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "publicIpAddressName"); + } + if (parameters == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "parameters"); + } + if (this.Client.ApiVersion == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.ApiVersion"); + } + if (this.Client.SubscriptionId == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.SubscriptionId"); + } + // 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("publicIpAddressName", publicIpAddressName); + 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/publicIPAddresses/{publicIpAddressName}").ToString(); + _url = _url.Replace("{resourceGroupName}", System.Uri.EscapeDataString(resourceGroupName)); + _url = _url.Replace("{publicIpAddressName}", System.Uri.EscapeDataString(publicIpAddressName)); + _url = _url.Replace("{subscriptionId}", System.Uri.EscapeDataString(this.Client.SubscriptionId)); + System.Collections.Generic.List _queryParameters = new System.Collections.Generic.List(); + if (this.Client.ApiVersion != null) + { + _queryParameters.Add(string.Format("api-version={0}", System.Uri.EscapeDataString(this.Client.ApiVersion))); + } + if (_queryParameters.Count > 0) + { + _url += "?" + string.Join("&", _queryParameters); + } + // Create HTTP transport objects + System.Net.Http.HttpRequestMessage _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 != 201 && (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); + CloudError _errorBody = Microsoft.Rest.Serialization.SafeJsonConvert.DeserializeObject(_responseContent, this.Client.DeserializationSettings); + if (_errorBody != null) + { + ex = new Microsoft.Rest.Azure.CloudException(_errorBody.Message); + 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 (_httpResponse.Headers.Contains("x-ms-request-id")) + { + ex.RequestId = _httpResponse.Headers.GetValues("x-ms-request-id").FirstOrDefault(); + } + 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 == 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); + } + } + // 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; + } + + /// + /// The List publicIpAddress opertion retrieves all the publicIpAddresses in a + /// subscription. + /// + /// + /// 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 + /// + /// + /// A response object containing the response body and response headers. + /// + public async System.Threading.Tasks.Task>> ListAllWithHttpMessagesAsync(System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + if (this.Client.ApiVersion == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.ApiVersion"); + } + if (this.Client.SubscriptionId == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.SubscriptionId"); + } + // 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("cancellationToken", cancellationToken); + Microsoft.Rest.ServiceClientTracing.Enter(_invocationId, this, "ListAll", tracingParameters); + } + // Construct URL + var _baseUrl = this.Client.BaseUri.AbsoluteUri; + var _url = new System.Uri(new System.Uri(_baseUrl + (_baseUrl.EndsWith("/") ? "" : "/")), "subscriptions/{subscriptionId}/providers/Microsoft.Network/publicIPAddresses").ToString(); + _url = _url.Replace("{subscriptionId}", System.Uri.EscapeDataString(this.Client.SubscriptionId)); + System.Collections.Generic.List _queryParameters = new System.Collections.Generic.List(); + if (this.Client.ApiVersion != null) + { + _queryParameters.Add(string.Format("api-version={0}", System.Uri.EscapeDataString(this.Client.ApiVersion))); + } + if (_queryParameters.Count > 0) + { + _url += "?" + string.Join("&", _queryParameters); + } + // Create HTTP transport objects + System.Net.Http.HttpRequestMessage _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); + CloudError _errorBody = Microsoft.Rest.Serialization.SafeJsonConvert.DeserializeObject(_responseContent, this.Client.DeserializationSettings); + if (_errorBody != null) + { + ex = new Microsoft.Rest.Azure.CloudException(_errorBody.Message); + 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 (_httpResponse.Headers.Contains("x-ms-request-id")) + { + ex.RequestId = _httpResponse.Headers.GetValues("x-ms-request-id").FirstOrDefault(); + } + 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; + } + + /// + /// The List publicIpAddress opertion retrieves all the publicIpAddresses in a + /// resource group. + /// + /// + /// The name of the resource group. + /// + /// + /// 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 + /// + /// + /// A response object containing the response body and response headers. + /// + public async System.Threading.Tasks.Task>> ListWithHttpMessagesAsync(string resourceGroupName, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + if (resourceGroupName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "resourceGroupName"); + } + if (this.Client.ApiVersion == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.ApiVersion"); + } + if (this.Client.SubscriptionId == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.SubscriptionId"); + } + // 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("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/publicIPAddresses").ToString(); + _url = _url.Replace("{resourceGroupName}", System.Uri.EscapeDataString(resourceGroupName)); + _url = _url.Replace("{subscriptionId}", System.Uri.EscapeDataString(this.Client.SubscriptionId)); + System.Collections.Generic.List _queryParameters = new System.Collections.Generic.List(); + if (this.Client.ApiVersion != null) + { + _queryParameters.Add(string.Format("api-version={0}", System.Uri.EscapeDataString(this.Client.ApiVersion))); + } + if (_queryParameters.Count > 0) + { + _url += "?" + string.Join("&", _queryParameters); + } + // Create HTTP transport objects + System.Net.Http.HttpRequestMessage _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); + CloudError _errorBody = Microsoft.Rest.Serialization.SafeJsonConvert.DeserializeObject(_responseContent, this.Client.DeserializationSettings); + if (_errorBody != null) + { + ex = new Microsoft.Rest.Azure.CloudException(_errorBody.Message); + 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 (_httpResponse.Headers.Contains("x-ms-request-id")) + { + ex.RequestId = _httpResponse.Headers.GetValues("x-ms-request-id").FirstOrDefault(); + } + 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; + } + + /// + /// The List publicIpAddress opertion retrieves all the publicIpAddresses in a + /// subscription. + /// + /// + /// 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 + /// + /// + /// A response object containing the response body and response headers. + /// + public async System.Threading.Tasks.Task>> ListAllNextWithHttpMessagesAsync(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, "ListAllNext", 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 += "?" + string.Join("&", _queryParameters); + } + // Create HTTP transport objects + System.Net.Http.HttpRequestMessage _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); + CloudError _errorBody = Microsoft.Rest.Serialization.SafeJsonConvert.DeserializeObject(_responseContent, this.Client.DeserializationSettings); + if (_errorBody != null) + { + ex = new Microsoft.Rest.Azure.CloudException(_errorBody.Message); + 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 (_httpResponse.Headers.Contains("x-ms-request-id")) + { + ex.RequestId = _httpResponse.Headers.GetValues("x-ms-request-id").FirstOrDefault(); + } + 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; + } + + /// + /// The List publicIpAddress opertion retrieves all the publicIpAddresses in a + /// resource group. + /// + /// + /// 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 + /// + /// + /// 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 += "?" + string.Join("&", _queryParameters); + } + // Create HTTP transport objects + System.Net.Http.HttpRequestMessage _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); + CloudError _errorBody = Microsoft.Rest.Serialization.SafeJsonConvert.DeserializeObject(_responseContent, this.Client.DeserializationSettings); + if (_errorBody != null) + { + ex = new Microsoft.Rest.Azure.CloudException(_errorBody.Message); + 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 (_httpResponse.Headers.Contains("x-ms-request-id")) + { + ex.RequestId = _httpResponse.Headers.GetValues("x-ms-request-id").FirstOrDefault(); + } + 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; + } + + } +} diff --git a/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/PublicIPAddressesOperationsExtensions.cs b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/PublicIPAddressesOperationsExtensions.cs new file mode 100644 index 000000000..9586928f8 --- /dev/null +++ b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/PublicIPAddressesOperationsExtensions.cs @@ -0,0 +1,377 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.Network +{ + using System.Threading.Tasks; + using Microsoft.Rest.Azure; + using Models; + + /// + /// Extension methods for PublicIPAddressesOperations. + /// + public static partial class PublicIPAddressesOperationsExtensions + { + /// + /// The delete publicIpAddress operation deletes the specified publicIpAddress. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the subnet. + /// + public static void Delete(this IPublicIPAddressesOperations operations, string resourceGroupName, string publicIpAddressName) + { + System.Threading.Tasks.Task.Factory.StartNew(s => ((IPublicIPAddressesOperations)s).DeleteAsync(resourceGroupName, publicIpAddressName), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// The delete publicIpAddress operation deletes the specified publicIpAddress. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the subnet. + /// + /// + /// The cancellation token. + /// + public static async System.Threading.Tasks.Task DeleteAsync(this IPublicIPAddressesOperations operations, string resourceGroupName, string publicIpAddressName, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + await operations.DeleteWithHttpMessagesAsync(resourceGroupName, publicIpAddressName, null, cancellationToken).ConfigureAwait(false); + } + + /// + /// The delete publicIpAddress operation deletes the specified publicIpAddress. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the subnet. + /// + public static void BeginDelete(this IPublicIPAddressesOperations operations, string resourceGroupName, string publicIpAddressName) + { + System.Threading.Tasks.Task.Factory.StartNew(s => ((IPublicIPAddressesOperations)s).BeginDeleteAsync(resourceGroupName, publicIpAddressName), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// The delete publicIpAddress operation deletes the specified publicIpAddress. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the subnet. + /// + /// + /// The cancellation token. + /// + public static async System.Threading.Tasks.Task BeginDeleteAsync(this IPublicIPAddressesOperations operations, string resourceGroupName, string publicIpAddressName, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + await operations.BeginDeleteWithHttpMessagesAsync(resourceGroupName, publicIpAddressName, null, cancellationToken).ConfigureAwait(false); + } + + /// + /// The Get publicIpAddress operation retreives information about the + /// specified pubicIpAddress + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the subnet. + /// + /// + /// expand references resources. + /// + public static PublicIPAddressInner Get(this IPublicIPAddressesOperations operations, string resourceGroupName, string publicIpAddressName, string expand = default(string)) + { + return System.Threading.Tasks.Task.Factory.StartNew(s => ((IPublicIPAddressesOperations)s).GetAsync(resourceGroupName, publicIpAddressName, expand), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// The Get publicIpAddress operation retreives information about the + /// specified pubicIpAddress + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the subnet. + /// + /// + /// expand references resources. + /// + /// + /// The cancellation token. + /// + public static async System.Threading.Tasks.Task GetAsync(this IPublicIPAddressesOperations operations, string resourceGroupName, string publicIpAddressName, string expand = default(string), System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + using (var _result = await operations.GetWithHttpMessagesAsync(resourceGroupName, publicIpAddressName, expand, null, cancellationToken).ConfigureAwait(false)) + { + return _result.Body; + } + } + + /// + /// The Put PublicIPAddress operation creates/updates a stable/dynamic + /// PublicIP address + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the publicIpAddress. + /// + /// + /// Parameters supplied to the create/update PublicIPAddress operation + /// + public static PublicIPAddressInner CreateOrUpdate(this IPublicIPAddressesOperations operations, string resourceGroupName, string publicIpAddressName, PublicIPAddressInner parameters) + { + return System.Threading.Tasks.Task.Factory.StartNew(s => ((IPublicIPAddressesOperations)s).CreateOrUpdateAsync(resourceGroupName, publicIpAddressName, parameters), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// The Put PublicIPAddress operation creates/updates a stable/dynamic + /// PublicIP address + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the publicIpAddress. + /// + /// + /// Parameters supplied to the create/update PublicIPAddress operation + /// + /// + /// The cancellation token. + /// + public static async System.Threading.Tasks.Task CreateOrUpdateAsync(this IPublicIPAddressesOperations operations, string resourceGroupName, string publicIpAddressName, PublicIPAddressInner parameters, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + using (var _result = await operations.CreateOrUpdateWithHttpMessagesAsync(resourceGroupName, publicIpAddressName, parameters, null, cancellationToken).ConfigureAwait(false)) + { + return _result.Body; + } + } + + /// + /// The Put PublicIPAddress operation creates/updates a stable/dynamic + /// PublicIP address + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the publicIpAddress. + /// + /// + /// Parameters supplied to the create/update PublicIPAddress operation + /// + public static PublicIPAddressInner BeginCreateOrUpdate(this IPublicIPAddressesOperations operations, string resourceGroupName, string publicIpAddressName, PublicIPAddressInner parameters) + { + return System.Threading.Tasks.Task.Factory.StartNew(s => ((IPublicIPAddressesOperations)s).BeginCreateOrUpdateAsync(resourceGroupName, publicIpAddressName, parameters), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// The Put PublicIPAddress operation creates/updates a stable/dynamic + /// PublicIP address + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the publicIpAddress. + /// + /// + /// Parameters supplied to the create/update PublicIPAddress operation + /// + /// + /// The cancellation token. + /// + public static async System.Threading.Tasks.Task BeginCreateOrUpdateAsync(this IPublicIPAddressesOperations operations, string resourceGroupName, string publicIpAddressName, PublicIPAddressInner parameters, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + using (var _result = await operations.BeginCreateOrUpdateWithHttpMessagesAsync(resourceGroupName, publicIpAddressName, parameters, null, cancellationToken).ConfigureAwait(false)) + { + return _result.Body; + } + } + + /// + /// The List publicIpAddress opertion retrieves all the publicIpAddresses in a + /// subscription. + /// + /// + /// The operations group for this extension method. + /// + public static Microsoft.Rest.Azure.IPage ListAll(this IPublicIPAddressesOperations operations) + { + return System.Threading.Tasks.Task.Factory.StartNew(s => ((IPublicIPAddressesOperations)s).ListAllAsync(), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// The List publicIpAddress opertion retrieves all the publicIpAddresses in a + /// subscription. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The cancellation token. + /// + public static async Task> ListAllAsync(this IPublicIPAddressesOperations operations, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + using (var _result = await operations.ListAllWithHttpMessagesAsync(null, cancellationToken).ConfigureAwait(false)) + { + return _result.Body; + } + } + + /// + /// The List publicIpAddress opertion retrieves all the publicIpAddresses in a + /// resource group. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + public static Microsoft.Rest.Azure.IPage List(this IPublicIPAddressesOperations operations, string resourceGroupName) + { + return System.Threading.Tasks.Task.Factory.StartNew(s => ((IPublicIPAddressesOperations)s).ListAsync(resourceGroupName), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// The List publicIpAddress opertion retrieves all the publicIpAddresses in a + /// resource group. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The cancellation token. + /// + public static async Task> ListAsync(this IPublicIPAddressesOperations operations, string resourceGroupName, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + using (var _result = await operations.ListWithHttpMessagesAsync(resourceGroupName, null, cancellationToken).ConfigureAwait(false)) + { + return _result.Body; + } + } + + /// + /// The List publicIpAddress opertion retrieves all the publicIpAddresses in a + /// subscription. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The NextLink from the previous successful call to List operation. + /// + public static Microsoft.Rest.Azure.IPage ListAllNext(this IPublicIPAddressesOperations operations, string nextPageLink) + { + return System.Threading.Tasks.Task.Factory.StartNew(s => ((IPublicIPAddressesOperations)s).ListAllNextAsync(nextPageLink), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// The List publicIpAddress opertion retrieves all the publicIpAddresses in a + /// subscription. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The NextLink from the previous successful call to List operation. + /// + /// + /// The cancellation token. + /// + public static async Task> ListAllNextAsync(this IPublicIPAddressesOperations operations, string nextPageLink, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + using (var _result = await operations.ListAllNextWithHttpMessagesAsync(nextPageLink, null, cancellationToken).ConfigureAwait(false)) + { + return _result.Body; + } + } + + /// + /// The List publicIpAddress opertion retrieves all the publicIpAddresses in a + /// resource group. + /// + /// + /// 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 IPublicIPAddressesOperations operations, string nextPageLink) + { + return System.Threading.Tasks.Task.Factory.StartNew(s => ((IPublicIPAddressesOperations)s).ListNextAsync(nextPageLink), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// The List publicIpAddress opertion retrieves all the publicIpAddresses in a + /// resource group. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The NextLink from the previous successful call to List operation. + /// + /// + /// The cancellation token. + /// + public static async Task> ListNextAsync(this IPublicIPAddressesOperations 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/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/RouteTablesOperations.cs b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/RouteTablesOperations.cs new file mode 100644 index 000000000..916ffe239 --- /dev/null +++ b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/RouteTablesOperations.cs @@ -0,0 +1,1374 @@ +// 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 0.17.0.0 +// 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; + + /// + /// RouteTablesOperations operations. + /// + internal partial class RouteTablesOperations : Microsoft.Rest.IServiceOperations, IRouteTablesOperations + { + /// + /// Initializes a new instance of the RouteTablesOperations class. + /// + /// + /// Reference to the service client. + /// + /// + /// Thrown when a required parameter is null + /// + internal RouteTablesOperations(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; } + + /// + /// The Delete RouteTable operation deletes the specifed Route Table + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the route table. + /// + /// + /// The headers that will be added to request. + /// + /// + /// The cancellation token. + /// + public async System.Threading.Tasks.Task DeleteWithHttpMessagesAsync(string resourceGroupName, string routeTableName, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + // Send request + Microsoft.Rest.Azure.AzureOperationResponse _response = await BeginDeleteWithHttpMessagesAsync( + resourceGroupName, routeTableName, customHeaders, cancellationToken); + return await this.Client.GetPostOrDeleteOperationResultAsync(_response, customHeaders, cancellationToken); + } + + /// + /// The Delete RouteTable operation deletes the specifed Route Table + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the route table. + /// + /// + /// 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 + /// + /// + /// A response object containing the response body and response headers. + /// + public async System.Threading.Tasks.Task BeginDeleteWithHttpMessagesAsync(string resourceGroupName, string routeTableName, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + if (resourceGroupName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "resourceGroupName"); + } + if (routeTableName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "routeTableName"); + } + if (this.Client.ApiVersion == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.ApiVersion"); + } + if (this.Client.SubscriptionId == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.SubscriptionId"); + } + // 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("routeTableName", routeTableName); + 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/routeTables/{routeTableName}").ToString(); + _url = _url.Replace("{resourceGroupName}", System.Uri.EscapeDataString(resourceGroupName)); + _url = _url.Replace("{routeTableName}", System.Uri.EscapeDataString(routeTableName)); + _url = _url.Replace("{subscriptionId}", System.Uri.EscapeDataString(this.Client.SubscriptionId)); + System.Collections.Generic.List _queryParameters = new System.Collections.Generic.List(); + if (this.Client.ApiVersion != null) + { + _queryParameters.Add(string.Format("api-version={0}", System.Uri.EscapeDataString(this.Client.ApiVersion))); + } + if (_queryParameters.Count > 0) + { + _url += "?" + string.Join("&", _queryParameters); + } + // Create HTTP transport objects + System.Net.Http.HttpRequestMessage _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 != 204 && (int)_statusCode != 200 && (int)_statusCode != 202) + { + var ex = new Microsoft.Rest.Azure.CloudException(string.Format("Operation returned an invalid status code '{0}'", _statusCode)); + if (_httpResponse.Content != null) { + _responseContent = await _httpResponse.Content.ReadAsStringAsync().ConfigureAwait(false); + } + else { + _responseContent = string.Empty; + } + ex.Request = new Microsoft.Rest.HttpRequestMessageWrapper(_httpRequest, _requestContent); + ex.Response = new Microsoft.Rest.HttpResponseMessageWrapper(_httpResponse, _responseContent); + if (_httpResponse.Headers.Contains("x-ms-request-id")) + { + ex.RequestId = _httpResponse.Headers.GetValues("x-ms-request-id").FirstOrDefault(); + } + 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(); + } + if (_shouldTrace) + { + Microsoft.Rest.ServiceClientTracing.Exit(_invocationId, _result); + } + return _result; + } + + /// + /// The Get RouteTables operation retrieves information about the specified + /// route table. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the route table. + /// + /// + /// expand references resources. + /// + /// + /// 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 + /// + /// + /// A response object containing the response body and response headers. + /// + public async System.Threading.Tasks.Task> GetWithHttpMessagesAsync(string resourceGroupName, string routeTableName, string expand = default(string), System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + if (resourceGroupName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "resourceGroupName"); + } + if (routeTableName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "routeTableName"); + } + if (this.Client.ApiVersion == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.ApiVersion"); + } + if (this.Client.SubscriptionId == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.SubscriptionId"); + } + // 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("routeTableName", routeTableName); + tracingParameters.Add("expand", expand); + 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/routeTables/{routeTableName}").ToString(); + _url = _url.Replace("{resourceGroupName}", System.Uri.EscapeDataString(resourceGroupName)); + _url = _url.Replace("{routeTableName}", System.Uri.EscapeDataString(routeTableName)); + _url = _url.Replace("{subscriptionId}", System.Uri.EscapeDataString(this.Client.SubscriptionId)); + System.Collections.Generic.List _queryParameters = new System.Collections.Generic.List(); + if (this.Client.ApiVersion != null) + { + _queryParameters.Add(string.Format("api-version={0}", System.Uri.EscapeDataString(this.Client.ApiVersion))); + } + if (expand != null) + { + _queryParameters.Add(string.Format("$expand={0}", System.Uri.EscapeDataString(expand))); + } + if (_queryParameters.Count > 0) + { + _url += "?" + string.Join("&", _queryParameters); + } + // Create HTTP transport objects + System.Net.Http.HttpRequestMessage _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); + CloudError _errorBody = Microsoft.Rest.Serialization.SafeJsonConvert.DeserializeObject(_responseContent, this.Client.DeserializationSettings); + if (_errorBody != null) + { + ex = new Microsoft.Rest.Azure.CloudException(_errorBody.Message); + 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 (_httpResponse.Headers.Contains("x-ms-request-id")) + { + ex.RequestId = _httpResponse.Headers.GetValues("x-ms-request-id").FirstOrDefault(); + } + 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; + } + + /// + /// The Put RouteTable operation creates/updates a route tablein the specified + /// resource group. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the route table. + /// + /// + /// Parameters supplied to the create/update Route Table operation + /// + /// + /// The headers that will be added to request. + /// + /// + /// The cancellation token. + /// + public async System.Threading.Tasks.Task> CreateOrUpdateWithHttpMessagesAsync(string resourceGroupName, string routeTableName, RouteTableInner 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, routeTableName, parameters, customHeaders, cancellationToken); + return await this.Client.GetPutOrPatchOperationResultAsync(_response, + customHeaders, + cancellationToken); + } + + /// + /// The Put RouteTable operation creates/updates a route tablein the specified + /// resource group. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the route table. + /// + /// + /// Parameters supplied to the create/update Route Table 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 + /// + /// + /// A response object containing the response body and response headers. + /// + public async System.Threading.Tasks.Task> BeginCreateOrUpdateWithHttpMessagesAsync(string resourceGroupName, string routeTableName, RouteTableInner parameters, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + if (resourceGroupName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "resourceGroupName"); + } + if (routeTableName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "routeTableName"); + } + if (parameters == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "parameters"); + } + if (this.Client.ApiVersion == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.ApiVersion"); + } + if (this.Client.SubscriptionId == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.SubscriptionId"); + } + // 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("routeTableName", routeTableName); + 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/routeTables/{routeTableName}").ToString(); + _url = _url.Replace("{resourceGroupName}", System.Uri.EscapeDataString(resourceGroupName)); + _url = _url.Replace("{routeTableName}", System.Uri.EscapeDataString(routeTableName)); + _url = _url.Replace("{subscriptionId}", System.Uri.EscapeDataString(this.Client.SubscriptionId)); + System.Collections.Generic.List _queryParameters = new System.Collections.Generic.List(); + if (this.Client.ApiVersion != null) + { + _queryParameters.Add(string.Format("api-version={0}", System.Uri.EscapeDataString(this.Client.ApiVersion))); + } + if (_queryParameters.Count > 0) + { + _url += "?" + string.Join("&", _queryParameters); + } + // Create HTTP transport objects + System.Net.Http.HttpRequestMessage _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); + CloudError _errorBody = Microsoft.Rest.Serialization.SafeJsonConvert.DeserializeObject(_responseContent, this.Client.DeserializationSettings); + if (_errorBody != null) + { + ex = new Microsoft.Rest.Azure.CloudException(_errorBody.Message); + 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 (_httpResponse.Headers.Contains("x-ms-request-id")) + { + ex.RequestId = _httpResponse.Headers.GetValues("x-ms-request-id").FirstOrDefault(); + } + 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); + } + } + if (_shouldTrace) + { + Microsoft.Rest.ServiceClientTracing.Exit(_invocationId, _result); + } + return _result; + } + + /// + /// The list RouteTables returns all route tables in a resource group + /// + /// + /// The name of the resource group. + /// + /// + /// 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 + /// + /// + /// A response object containing the response body and response headers. + /// + public async System.Threading.Tasks.Task>> ListWithHttpMessagesAsync(string resourceGroupName, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + if (resourceGroupName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "resourceGroupName"); + } + if (this.Client.ApiVersion == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.ApiVersion"); + } + if (this.Client.SubscriptionId == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.SubscriptionId"); + } + // 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("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/routeTables").ToString(); + _url = _url.Replace("{resourceGroupName}", System.Uri.EscapeDataString(resourceGroupName)); + _url = _url.Replace("{subscriptionId}", System.Uri.EscapeDataString(this.Client.SubscriptionId)); + System.Collections.Generic.List _queryParameters = new System.Collections.Generic.List(); + if (this.Client.ApiVersion != null) + { + _queryParameters.Add(string.Format("api-version={0}", System.Uri.EscapeDataString(this.Client.ApiVersion))); + } + if (_queryParameters.Count > 0) + { + _url += "?" + string.Join("&", _queryParameters); + } + // Create HTTP transport objects + System.Net.Http.HttpRequestMessage _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); + CloudError _errorBody = Microsoft.Rest.Serialization.SafeJsonConvert.DeserializeObject(_responseContent, this.Client.DeserializationSettings); + if (_errorBody != null) + { + ex = new Microsoft.Rest.Azure.CloudException(_errorBody.Message); + 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 (_httpResponse.Headers.Contains("x-ms-request-id")) + { + ex.RequestId = _httpResponse.Headers.GetValues("x-ms-request-id").FirstOrDefault(); + } + 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; + } + + /// + /// The list RouteTables returns all route tables in a subscription + /// + /// + /// 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 + /// + /// + /// A response object containing the response body and response headers. + /// + public async System.Threading.Tasks.Task>> ListAllWithHttpMessagesAsync(System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + if (this.Client.ApiVersion == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.ApiVersion"); + } + if (this.Client.SubscriptionId == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.SubscriptionId"); + } + // 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("cancellationToken", cancellationToken); + Microsoft.Rest.ServiceClientTracing.Enter(_invocationId, this, "ListAll", tracingParameters); + } + // Construct URL + var _baseUrl = this.Client.BaseUri.AbsoluteUri; + var _url = new System.Uri(new System.Uri(_baseUrl + (_baseUrl.EndsWith("/") ? "" : "/")), "subscriptions/{subscriptionId}/providers/Microsoft.Network/routeTables").ToString(); + _url = _url.Replace("{subscriptionId}", System.Uri.EscapeDataString(this.Client.SubscriptionId)); + System.Collections.Generic.List _queryParameters = new System.Collections.Generic.List(); + if (this.Client.ApiVersion != null) + { + _queryParameters.Add(string.Format("api-version={0}", System.Uri.EscapeDataString(this.Client.ApiVersion))); + } + if (_queryParameters.Count > 0) + { + _url += "?" + string.Join("&", _queryParameters); + } + // Create HTTP transport objects + System.Net.Http.HttpRequestMessage _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); + CloudError _errorBody = Microsoft.Rest.Serialization.SafeJsonConvert.DeserializeObject(_responseContent, this.Client.DeserializationSettings); + if (_errorBody != null) + { + ex = new Microsoft.Rest.Azure.CloudException(_errorBody.Message); + 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 (_httpResponse.Headers.Contains("x-ms-request-id")) + { + ex.RequestId = _httpResponse.Headers.GetValues("x-ms-request-id").FirstOrDefault(); + } + 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; + } + + /// + /// The list RouteTables returns all route tables in a resource group + /// + /// + /// 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 + /// + /// + /// 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 += "?" + string.Join("&", _queryParameters); + } + // Create HTTP transport objects + System.Net.Http.HttpRequestMessage _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); + CloudError _errorBody = Microsoft.Rest.Serialization.SafeJsonConvert.DeserializeObject(_responseContent, this.Client.DeserializationSettings); + if (_errorBody != null) + { + ex = new Microsoft.Rest.Azure.CloudException(_errorBody.Message); + 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 (_httpResponse.Headers.Contains("x-ms-request-id")) + { + ex.RequestId = _httpResponse.Headers.GetValues("x-ms-request-id").FirstOrDefault(); + } + 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; + } + + /// + /// The list RouteTables returns all route tables in a subscription + /// + /// + /// 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 + /// + /// + /// A response object containing the response body and response headers. + /// + public async System.Threading.Tasks.Task>> ListAllNextWithHttpMessagesAsync(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, "ListAllNext", 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 += "?" + string.Join("&", _queryParameters); + } + // Create HTTP transport objects + System.Net.Http.HttpRequestMessage _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); + CloudError _errorBody = Microsoft.Rest.Serialization.SafeJsonConvert.DeserializeObject(_responseContent, this.Client.DeserializationSettings); + if (_errorBody != null) + { + ex = new Microsoft.Rest.Azure.CloudException(_errorBody.Message); + 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 (_httpResponse.Headers.Contains("x-ms-request-id")) + { + ex.RequestId = _httpResponse.Headers.GetValues("x-ms-request-id").FirstOrDefault(); + } + 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; + } + + } +} diff --git a/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/RouteTablesOperationsExtensions.cs b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/RouteTablesOperationsExtensions.cs new file mode 100644 index 000000000..607d46bd8 --- /dev/null +++ b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/RouteTablesOperationsExtensions.cs @@ -0,0 +1,369 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.Network +{ + using System.Threading.Tasks; + using Microsoft.Rest.Azure; + using Models; + + /// + /// Extension methods for RouteTablesOperations. + /// + public static partial class RouteTablesOperationsExtensions + { + /// + /// The Delete RouteTable operation deletes the specifed Route Table + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the route table. + /// + public static void Delete(this IRouteTablesOperations operations, string resourceGroupName, string routeTableName) + { + System.Threading.Tasks.Task.Factory.StartNew(s => ((IRouteTablesOperations)s).DeleteAsync(resourceGroupName, routeTableName), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// The Delete RouteTable operation deletes the specifed Route Table + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the route table. + /// + /// + /// The cancellation token. + /// + public static async System.Threading.Tasks.Task DeleteAsync(this IRouteTablesOperations operations, string resourceGroupName, string routeTableName, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + await operations.DeleteWithHttpMessagesAsync(resourceGroupName, routeTableName, null, cancellationToken).ConfigureAwait(false); + } + + /// + /// The Delete RouteTable operation deletes the specifed Route Table + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the route table. + /// + public static void BeginDelete(this IRouteTablesOperations operations, string resourceGroupName, string routeTableName) + { + System.Threading.Tasks.Task.Factory.StartNew(s => ((IRouteTablesOperations)s).BeginDeleteAsync(resourceGroupName, routeTableName), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// The Delete RouteTable operation deletes the specifed Route Table + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the route table. + /// + /// + /// The cancellation token. + /// + public static async System.Threading.Tasks.Task BeginDeleteAsync(this IRouteTablesOperations operations, string resourceGroupName, string routeTableName, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + await operations.BeginDeleteWithHttpMessagesAsync(resourceGroupName, routeTableName, null, cancellationToken).ConfigureAwait(false); + } + + /// + /// The Get RouteTables operation retrieves information about the specified + /// route table. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the route table. + /// + /// + /// expand references resources. + /// + public static RouteTableInner Get(this IRouteTablesOperations operations, string resourceGroupName, string routeTableName, string expand = default(string)) + { + return System.Threading.Tasks.Task.Factory.StartNew(s => ((IRouteTablesOperations)s).GetAsync(resourceGroupName, routeTableName, expand), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// The Get RouteTables operation retrieves information about the specified + /// route table. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the route table. + /// + /// + /// expand references resources. + /// + /// + /// The cancellation token. + /// + public static async System.Threading.Tasks.Task GetAsync(this IRouteTablesOperations operations, string resourceGroupName, string routeTableName, string expand = default(string), System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + using (var _result = await operations.GetWithHttpMessagesAsync(resourceGroupName, routeTableName, expand, null, cancellationToken).ConfigureAwait(false)) + { + return _result.Body; + } + } + + /// + /// The Put RouteTable operation creates/updates a route tablein the specified + /// resource group. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the route table. + /// + /// + /// Parameters supplied to the create/update Route Table operation + /// + public static RouteTableInner CreateOrUpdate(this IRouteTablesOperations operations, string resourceGroupName, string routeTableName, RouteTableInner parameters) + { + return System.Threading.Tasks.Task.Factory.StartNew(s => ((IRouteTablesOperations)s).CreateOrUpdateAsync(resourceGroupName, routeTableName, parameters), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// The Put RouteTable operation creates/updates a route tablein the specified + /// resource group. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the route table. + /// + /// + /// Parameters supplied to the create/update Route Table operation + /// + /// + /// The cancellation token. + /// + public static async System.Threading.Tasks.Task CreateOrUpdateAsync(this IRouteTablesOperations operations, string resourceGroupName, string routeTableName, RouteTableInner parameters, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + using (var _result = await operations.CreateOrUpdateWithHttpMessagesAsync(resourceGroupName, routeTableName, parameters, null, cancellationToken).ConfigureAwait(false)) + { + return _result.Body; + } + } + + /// + /// The Put RouteTable operation creates/updates a route tablein the specified + /// resource group. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the route table. + /// + /// + /// Parameters supplied to the create/update Route Table operation + /// + public static RouteTableInner BeginCreateOrUpdate(this IRouteTablesOperations operations, string resourceGroupName, string routeTableName, RouteTableInner parameters) + { + return System.Threading.Tasks.Task.Factory.StartNew(s => ((IRouteTablesOperations)s).BeginCreateOrUpdateAsync(resourceGroupName, routeTableName, parameters), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// The Put RouteTable operation creates/updates a route tablein the specified + /// resource group. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the route table. + /// + /// + /// Parameters supplied to the create/update Route Table operation + /// + /// + /// The cancellation token. + /// + public static async System.Threading.Tasks.Task BeginCreateOrUpdateAsync(this IRouteTablesOperations operations, string resourceGroupName, string routeTableName, RouteTableInner parameters, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + using (var _result = await operations.BeginCreateOrUpdateWithHttpMessagesAsync(resourceGroupName, routeTableName, parameters, null, cancellationToken).ConfigureAwait(false)) + { + return _result.Body; + } + } + + /// + /// The list RouteTables returns all route tables in a resource group + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + public static Microsoft.Rest.Azure.IPage List(this IRouteTablesOperations operations, string resourceGroupName) + { + return System.Threading.Tasks.Task.Factory.StartNew(s => ((IRouteTablesOperations)s).ListAsync(resourceGroupName), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// The list RouteTables returns all route tables in a resource group + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The cancellation token. + /// + public static async Task> ListAsync(this IRouteTablesOperations operations, string resourceGroupName, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + using (var _result = await operations.ListWithHttpMessagesAsync(resourceGroupName, null, cancellationToken).ConfigureAwait(false)) + { + return _result.Body; + } + } + + /// + /// The list RouteTables returns all route tables in a subscription + /// + /// + /// The operations group for this extension method. + /// + public static Microsoft.Rest.Azure.IPage ListAll(this IRouteTablesOperations operations) + { + return System.Threading.Tasks.Task.Factory.StartNew(s => ((IRouteTablesOperations)s).ListAllAsync(), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// The list RouteTables returns all route tables in a subscription + /// + /// + /// The operations group for this extension method. + /// + /// + /// The cancellation token. + /// + public static async Task> ListAllAsync(this IRouteTablesOperations operations, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + using (var _result = await operations.ListAllWithHttpMessagesAsync(null, cancellationToken).ConfigureAwait(false)) + { + return _result.Body; + } + } + + /// + /// The list RouteTables returns all route tables in a resource group + /// + /// + /// 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 IRouteTablesOperations operations, string nextPageLink) + { + return System.Threading.Tasks.Task.Factory.StartNew(s => ((IRouteTablesOperations)s).ListNextAsync(nextPageLink), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// The list RouteTables returns all route tables in a resource group + /// + /// + /// The operations group for this extension method. + /// + /// + /// The NextLink from the previous successful call to List operation. + /// + /// + /// The cancellation token. + /// + public static async Task> ListNextAsync(this IRouteTablesOperations 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; + } + } + + /// + /// The list RouteTables returns all route tables in a subscription + /// + /// + /// The operations group for this extension method. + /// + /// + /// The NextLink from the previous successful call to List operation. + /// + public static Microsoft.Rest.Azure.IPage ListAllNext(this IRouteTablesOperations operations, string nextPageLink) + { + return System.Threading.Tasks.Task.Factory.StartNew(s => ((IRouteTablesOperations)s).ListAllNextAsync(nextPageLink), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// The list RouteTables returns all route tables in a subscription + /// + /// + /// The operations group for this extension method. + /// + /// + /// The NextLink from the previous successful call to List operation. + /// + /// + /// The cancellation token. + /// + public static async Task> ListAllNextAsync(this IRouteTablesOperations operations, string nextPageLink, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + using (var _result = await operations.ListAllNextWithHttpMessagesAsync(nextPageLink, null, cancellationToken).ConfigureAwait(false)) + { + return _result.Body; + } + } + + } +} diff --git a/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/RoutesOperations.cs b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/RoutesOperations.cs new file mode 100644 index 000000000..4ae85fa1b --- /dev/null +++ b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/RoutesOperations.cs @@ -0,0 +1,1073 @@ +// 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 0.17.0.0 +// 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; + + /// + /// RoutesOperations operations. + /// + internal partial class RoutesOperations : Microsoft.Rest.IServiceOperations, IRoutesOperations + { + /// + /// Initializes a new instance of the RoutesOperations class. + /// + /// + /// Reference to the service client. + /// + /// + /// Thrown when a required parameter is null + /// + internal RoutesOperations(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; } + + /// + /// The delete route operation deletes the specified route from a route table. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the route table. + /// + /// + /// The name of the route. + /// + /// + /// The headers that will be added to request. + /// + /// + /// The cancellation token. + /// + public async System.Threading.Tasks.Task DeleteWithHttpMessagesAsync(string resourceGroupName, string routeTableName, string routeName, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + // Send request + Microsoft.Rest.Azure.AzureOperationResponse _response = await BeginDeleteWithHttpMessagesAsync( + resourceGroupName, routeTableName, routeName, customHeaders, cancellationToken); + return await this.Client.GetPostOrDeleteOperationResultAsync(_response, customHeaders, cancellationToken); + } + + /// + /// The delete route operation deletes the specified route from a route table. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the route table. + /// + /// + /// The name of the route. + /// + /// + /// 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 + /// + /// + /// A response object containing the response body and response headers. + /// + public async System.Threading.Tasks.Task BeginDeleteWithHttpMessagesAsync(string resourceGroupName, string routeTableName, string routeName, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + if (resourceGroupName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "resourceGroupName"); + } + if (routeTableName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "routeTableName"); + } + if (routeName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "routeName"); + } + if (this.Client.ApiVersion == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.ApiVersion"); + } + if (this.Client.SubscriptionId == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.SubscriptionId"); + } + // 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("routeTableName", routeTableName); + tracingParameters.Add("routeName", routeName); + 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/routeTables/{routeTableName}/routes/{routeName}").ToString(); + _url = _url.Replace("{resourceGroupName}", System.Uri.EscapeDataString(resourceGroupName)); + _url = _url.Replace("{routeTableName}", System.Uri.EscapeDataString(routeTableName)); + _url = _url.Replace("{routeName}", System.Uri.EscapeDataString(routeName)); + _url = _url.Replace("{subscriptionId}", System.Uri.EscapeDataString(this.Client.SubscriptionId)); + System.Collections.Generic.List _queryParameters = new System.Collections.Generic.List(); + if (this.Client.ApiVersion != null) + { + _queryParameters.Add(string.Format("api-version={0}", System.Uri.EscapeDataString(this.Client.ApiVersion))); + } + if (_queryParameters.Count > 0) + { + _url += "?" + string.Join("&", _queryParameters); + } + // Create HTTP transport objects + System.Net.Http.HttpRequestMessage _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 != 200 && (int)_statusCode != 204) + { + var ex = new Microsoft.Rest.Azure.CloudException(string.Format("Operation returned an invalid status code '{0}'", _statusCode)); + if (_httpResponse.Content != null) { + _responseContent = await _httpResponse.Content.ReadAsStringAsync().ConfigureAwait(false); + } + else { + _responseContent = string.Empty; + } + ex.Request = new Microsoft.Rest.HttpRequestMessageWrapper(_httpRequest, _requestContent); + ex.Response = new Microsoft.Rest.HttpResponseMessageWrapper(_httpResponse, _responseContent); + if (_httpResponse.Headers.Contains("x-ms-request-id")) + { + ex.RequestId = _httpResponse.Headers.GetValues("x-ms-request-id").FirstOrDefault(); + } + 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(); + } + if (_shouldTrace) + { + Microsoft.Rest.ServiceClientTracing.Exit(_invocationId, _result); + } + return _result; + } + + /// + /// The Get route operation retreives information about the specified route + /// from the route table. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the route table. + /// + /// + /// The name of the route. + /// + /// + /// 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 + /// + /// + /// A response object containing the response body and response headers. + /// + public async System.Threading.Tasks.Task> GetWithHttpMessagesAsync(string resourceGroupName, string routeTableName, string routeName, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + if (resourceGroupName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "resourceGroupName"); + } + if (routeTableName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "routeTableName"); + } + if (routeName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "routeName"); + } + if (this.Client.ApiVersion == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.ApiVersion"); + } + if (this.Client.SubscriptionId == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.SubscriptionId"); + } + // 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("routeTableName", routeTableName); + tracingParameters.Add("routeName", routeName); + 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/routeTables/{routeTableName}/routes/{routeName}").ToString(); + _url = _url.Replace("{resourceGroupName}", System.Uri.EscapeDataString(resourceGroupName)); + _url = _url.Replace("{routeTableName}", System.Uri.EscapeDataString(routeTableName)); + _url = _url.Replace("{routeName}", System.Uri.EscapeDataString(routeName)); + _url = _url.Replace("{subscriptionId}", System.Uri.EscapeDataString(this.Client.SubscriptionId)); + System.Collections.Generic.List _queryParameters = new System.Collections.Generic.List(); + if (this.Client.ApiVersion != null) + { + _queryParameters.Add(string.Format("api-version={0}", System.Uri.EscapeDataString(this.Client.ApiVersion))); + } + if (_queryParameters.Count > 0) + { + _url += "?" + string.Join("&", _queryParameters); + } + // Create HTTP transport objects + System.Net.Http.HttpRequestMessage _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); + CloudError _errorBody = Microsoft.Rest.Serialization.SafeJsonConvert.DeserializeObject(_responseContent, this.Client.DeserializationSettings); + if (_errorBody != null) + { + ex = new Microsoft.Rest.Azure.CloudException(_errorBody.Message); + 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 (_httpResponse.Headers.Contains("x-ms-request-id")) + { + ex.RequestId = _httpResponse.Headers.GetValues("x-ms-request-id").FirstOrDefault(); + } + 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; + } + + /// + /// The Put route operation creates/updates a route in the specified route + /// table + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the route table. + /// + /// + /// The name of the route. + /// + /// + /// Parameters supplied to the create/update routeoperation + /// + /// + /// The headers that will be added to request. + /// + /// + /// The cancellation token. + /// + public async System.Threading.Tasks.Task> CreateOrUpdateWithHttpMessagesAsync(string resourceGroupName, string routeTableName, string routeName, RouteInner routeParameters, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + // Send Request + Microsoft.Rest.Azure.AzureOperationResponse _response = await BeginCreateOrUpdateWithHttpMessagesAsync( + resourceGroupName, routeTableName, routeName, routeParameters, customHeaders, cancellationToken); + return await this.Client.GetPutOrPatchOperationResultAsync(_response, + customHeaders, + cancellationToken); + } + + /// + /// The Put route operation creates/updates a route in the specified route + /// table + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the route table. + /// + /// + /// The name of the route. + /// + /// + /// Parameters supplied to the create/update routeoperation + /// + /// + /// 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 + /// + /// + /// A response object containing the response body and response headers. + /// + public async System.Threading.Tasks.Task> BeginCreateOrUpdateWithHttpMessagesAsync(string resourceGroupName, string routeTableName, string routeName, RouteInner routeParameters, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + if (resourceGroupName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "resourceGroupName"); + } + if (routeTableName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "routeTableName"); + } + if (routeName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "routeName"); + } + if (routeParameters == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "routeParameters"); + } + if (routeParameters != null) + { + routeParameters.Validate(); + } + if (this.Client.ApiVersion == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.ApiVersion"); + } + if (this.Client.SubscriptionId == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.SubscriptionId"); + } + // 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("routeTableName", routeTableName); + tracingParameters.Add("routeName", routeName); + tracingParameters.Add("routeParameters", routeParameters); + 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/routeTables/{routeTableName}/routes/{routeName}").ToString(); + _url = _url.Replace("{resourceGroupName}", System.Uri.EscapeDataString(resourceGroupName)); + _url = _url.Replace("{routeTableName}", System.Uri.EscapeDataString(routeTableName)); + _url = _url.Replace("{routeName}", System.Uri.EscapeDataString(routeName)); + _url = _url.Replace("{subscriptionId}", System.Uri.EscapeDataString(this.Client.SubscriptionId)); + System.Collections.Generic.List _queryParameters = new System.Collections.Generic.List(); + if (this.Client.ApiVersion != null) + { + _queryParameters.Add(string.Format("api-version={0}", System.Uri.EscapeDataString(this.Client.ApiVersion))); + } + if (_queryParameters.Count > 0) + { + _url += "?" + string.Join("&", _queryParameters); + } + // Create HTTP transport objects + System.Net.Http.HttpRequestMessage _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(routeParameters != null) + { + _requestContent = Microsoft.Rest.Serialization.SafeJsonConvert.SerializeObject(routeParameters, 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); + CloudError _errorBody = Microsoft.Rest.Serialization.SafeJsonConvert.DeserializeObject(_responseContent, this.Client.DeserializationSettings); + if (_errorBody != null) + { + ex = new Microsoft.Rest.Azure.CloudException(_errorBody.Message); + 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 (_httpResponse.Headers.Contains("x-ms-request-id")) + { + ex.RequestId = _httpResponse.Headers.GetValues("x-ms-request-id").FirstOrDefault(); + } + 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); + } + } + if (_shouldTrace) + { + Microsoft.Rest.ServiceClientTracing.Exit(_invocationId, _result); + } + return _result; + } + + /// + /// The List network security rule opertion retrieves all the routes in a + /// route table. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the route table. + /// + /// + /// 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 + /// + /// + /// A response object containing the response body and response headers. + /// + public async System.Threading.Tasks.Task>> ListWithHttpMessagesAsync(string resourceGroupName, string routeTableName, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + if (resourceGroupName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "resourceGroupName"); + } + if (routeTableName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "routeTableName"); + } + if (this.Client.ApiVersion == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.ApiVersion"); + } + if (this.Client.SubscriptionId == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.SubscriptionId"); + } + // 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("routeTableName", routeTableName); + 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/routeTables/{routeTableName}/routes").ToString(); + _url = _url.Replace("{resourceGroupName}", System.Uri.EscapeDataString(resourceGroupName)); + _url = _url.Replace("{routeTableName}", System.Uri.EscapeDataString(routeTableName)); + _url = _url.Replace("{subscriptionId}", System.Uri.EscapeDataString(this.Client.SubscriptionId)); + System.Collections.Generic.List _queryParameters = new System.Collections.Generic.List(); + if (this.Client.ApiVersion != null) + { + _queryParameters.Add(string.Format("api-version={0}", System.Uri.EscapeDataString(this.Client.ApiVersion))); + } + if (_queryParameters.Count > 0) + { + _url += "?" + string.Join("&", _queryParameters); + } + // Create HTTP transport objects + System.Net.Http.HttpRequestMessage _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); + CloudError _errorBody = Microsoft.Rest.Serialization.SafeJsonConvert.DeserializeObject(_responseContent, this.Client.DeserializationSettings); + if (_errorBody != null) + { + ex = new Microsoft.Rest.Azure.CloudException(_errorBody.Message); + 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 (_httpResponse.Headers.Contains("x-ms-request-id")) + { + ex.RequestId = _httpResponse.Headers.GetValues("x-ms-request-id").FirstOrDefault(); + } + 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; + } + + /// + /// The List network security rule opertion retrieves all the routes in a + /// route table. + /// + /// + /// 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 + /// + /// + /// 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 += "?" + string.Join("&", _queryParameters); + } + // Create HTTP transport objects + System.Net.Http.HttpRequestMessage _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); + CloudError _errorBody = Microsoft.Rest.Serialization.SafeJsonConvert.DeserializeObject(_responseContent, this.Client.DeserializationSettings); + if (_errorBody != null) + { + ex = new Microsoft.Rest.Azure.CloudException(_errorBody.Message); + 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 (_httpResponse.Headers.Contains("x-ms-request-id")) + { + ex.RequestId = _httpResponse.Headers.GetValues("x-ms-request-id").FirstOrDefault(); + } + 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; + } + + } +} diff --git a/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/RoutesOperationsExtensions.cs b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/RoutesOperationsExtensions.cs new file mode 100644 index 000000000..019ef8b09 --- /dev/null +++ b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/RoutesOperationsExtensions.cs @@ -0,0 +1,341 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.Network +{ + using System.Threading.Tasks; + using Microsoft.Rest.Azure; + using Models; + + /// + /// Extension methods for RoutesOperations. + /// + public static partial class RoutesOperationsExtensions + { + /// + /// The delete route operation deletes the specified route from a route table. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the route table. + /// + /// + /// The name of the route. + /// + public static void Delete(this IRoutesOperations operations, string resourceGroupName, string routeTableName, string routeName) + { + System.Threading.Tasks.Task.Factory.StartNew(s => ((IRoutesOperations)s).DeleteAsync(resourceGroupName, routeTableName, routeName), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// The delete route operation deletes the specified route from a route table. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the route table. + /// + /// + /// The name of the route. + /// + /// + /// The cancellation token. + /// + public static async System.Threading.Tasks.Task DeleteAsync(this IRoutesOperations operations, string resourceGroupName, string routeTableName, string routeName, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + await operations.DeleteWithHttpMessagesAsync(resourceGroupName, routeTableName, routeName, null, cancellationToken).ConfigureAwait(false); + } + + /// + /// The delete route operation deletes the specified route from a route table. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the route table. + /// + /// + /// The name of the route. + /// + public static void BeginDelete(this IRoutesOperations operations, string resourceGroupName, string routeTableName, string routeName) + { + System.Threading.Tasks.Task.Factory.StartNew(s => ((IRoutesOperations)s).BeginDeleteAsync(resourceGroupName, routeTableName, routeName), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// The delete route operation deletes the specified route from a route table. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the route table. + /// + /// + /// The name of the route. + /// + /// + /// The cancellation token. + /// + public static async System.Threading.Tasks.Task BeginDeleteAsync(this IRoutesOperations operations, string resourceGroupName, string routeTableName, string routeName, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + await operations.BeginDeleteWithHttpMessagesAsync(resourceGroupName, routeTableName, routeName, null, cancellationToken).ConfigureAwait(false); + } + + /// + /// The Get route operation retreives information about the specified route + /// from the route table. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the route table. + /// + /// + /// The name of the route. + /// + public static RouteInner Get(this IRoutesOperations operations, string resourceGroupName, string routeTableName, string routeName) + { + return System.Threading.Tasks.Task.Factory.StartNew(s => ((IRoutesOperations)s).GetAsync(resourceGroupName, routeTableName, routeName), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// The Get route operation retreives information about the specified route + /// from the route table. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the route table. + /// + /// + /// The name of the route. + /// + /// + /// The cancellation token. + /// + public static async System.Threading.Tasks.Task GetAsync(this IRoutesOperations operations, string resourceGroupName, string routeTableName, string routeName, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + using (var _result = await operations.GetWithHttpMessagesAsync(resourceGroupName, routeTableName, routeName, null, cancellationToken).ConfigureAwait(false)) + { + return _result.Body; + } + } + + /// + /// The Put route operation creates/updates a route in the specified route + /// table + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the route table. + /// + /// + /// The name of the route. + /// + /// + /// Parameters supplied to the create/update routeoperation + /// + public static RouteInner CreateOrUpdate(this IRoutesOperations operations, string resourceGroupName, string routeTableName, string routeName, RouteInner routeParameters) + { + return System.Threading.Tasks.Task.Factory.StartNew(s => ((IRoutesOperations)s).CreateOrUpdateAsync(resourceGroupName, routeTableName, routeName, routeParameters), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// The Put route operation creates/updates a route in the specified route + /// table + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the route table. + /// + /// + /// The name of the route. + /// + /// + /// Parameters supplied to the create/update routeoperation + /// + /// + /// The cancellation token. + /// + public static async System.Threading.Tasks.Task CreateOrUpdateAsync(this IRoutesOperations operations, string resourceGroupName, string routeTableName, string routeName, RouteInner routeParameters, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + using (var _result = await operations.CreateOrUpdateWithHttpMessagesAsync(resourceGroupName, routeTableName, routeName, routeParameters, null, cancellationToken).ConfigureAwait(false)) + { + return _result.Body; + } + } + + /// + /// The Put route operation creates/updates a route in the specified route + /// table + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the route table. + /// + /// + /// The name of the route. + /// + /// + /// Parameters supplied to the create/update routeoperation + /// + public static RouteInner BeginCreateOrUpdate(this IRoutesOperations operations, string resourceGroupName, string routeTableName, string routeName, RouteInner routeParameters) + { + return System.Threading.Tasks.Task.Factory.StartNew(s => ((IRoutesOperations)s).BeginCreateOrUpdateAsync(resourceGroupName, routeTableName, routeName, routeParameters), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// The Put route operation creates/updates a route in the specified route + /// table + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the route table. + /// + /// + /// The name of the route. + /// + /// + /// Parameters supplied to the create/update routeoperation + /// + /// + /// The cancellation token. + /// + public static async System.Threading.Tasks.Task BeginCreateOrUpdateAsync(this IRoutesOperations operations, string resourceGroupName, string routeTableName, string routeName, RouteInner routeParameters, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + using (var _result = await operations.BeginCreateOrUpdateWithHttpMessagesAsync(resourceGroupName, routeTableName, routeName, routeParameters, null, cancellationToken).ConfigureAwait(false)) + { + return _result.Body; + } + } + + /// + /// The List network security rule opertion retrieves all the routes in a + /// route table. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the route table. + /// + public static Microsoft.Rest.Azure.IPage List(this IRoutesOperations operations, string resourceGroupName, string routeTableName) + { + return System.Threading.Tasks.Task.Factory.StartNew(s => ((IRoutesOperations)s).ListAsync(resourceGroupName, routeTableName), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// The List network security rule opertion retrieves all the routes in a + /// route table. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the route table. + /// + /// + /// The cancellation token. + /// + public static async Task> ListAsync(this IRoutesOperations operations, string resourceGroupName, string routeTableName, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + using (var _result = await operations.ListWithHttpMessagesAsync(resourceGroupName, routeTableName, null, cancellationToken).ConfigureAwait(false)) + { + return _result.Body; + } + } + + /// + /// The List network security rule opertion retrieves all the routes in a + /// route table. + /// + /// + /// 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 IRoutesOperations operations, string nextPageLink) + { + return System.Threading.Tasks.Task.Factory.StartNew(s => ((IRoutesOperations)s).ListNextAsync(nextPageLink), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// The List network security rule opertion retrieves all the routes in a + /// route table. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The NextLink from the previous successful call to List operation. + /// + /// + /// The cancellation token. + /// + public static async Task> ListNextAsync(this IRoutesOperations 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/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/SecurityRulesOperations.cs b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/SecurityRulesOperations.cs new file mode 100644 index 000000000..8085962bd --- /dev/null +++ b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/SecurityRulesOperations.cs @@ -0,0 +1,1075 @@ +// 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 0.17.0.0 +// 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; + + /// + /// SecurityRulesOperations operations. + /// + internal partial class SecurityRulesOperations : Microsoft.Rest.IServiceOperations, ISecurityRulesOperations + { + /// + /// Initializes a new instance of the SecurityRulesOperations class. + /// + /// + /// Reference to the service client. + /// + /// + /// Thrown when a required parameter is null + /// + internal SecurityRulesOperations(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; } + + /// + /// The delete network security rule operation deletes the specified network + /// security rule. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the network security group. + /// + /// + /// The name of the security rule. + /// + /// + /// The headers that will be added to request. + /// + /// + /// The cancellation token. + /// + public async System.Threading.Tasks.Task DeleteWithHttpMessagesAsync(string resourceGroupName, string networkSecurityGroupName, string securityRuleName, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + // Send request + Microsoft.Rest.Azure.AzureOperationResponse _response = await BeginDeleteWithHttpMessagesAsync( + resourceGroupName, networkSecurityGroupName, securityRuleName, customHeaders, cancellationToken); + return await this.Client.GetPostOrDeleteOperationResultAsync(_response, customHeaders, cancellationToken); + } + + /// + /// The delete network security rule operation deletes the specified network + /// security rule. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the network security group. + /// + /// + /// The name of the security rule. + /// + /// + /// 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 + /// + /// + /// A response object containing the response body and response headers. + /// + public async System.Threading.Tasks.Task BeginDeleteWithHttpMessagesAsync(string resourceGroupName, string networkSecurityGroupName, string securityRuleName, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + if (resourceGroupName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "resourceGroupName"); + } + if (networkSecurityGroupName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "networkSecurityGroupName"); + } + if (securityRuleName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "securityRuleName"); + } + if (this.Client.ApiVersion == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.ApiVersion"); + } + if (this.Client.SubscriptionId == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.SubscriptionId"); + } + // 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("networkSecurityGroupName", networkSecurityGroupName); + tracingParameters.Add("securityRuleName", securityRuleName); + 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/networkSecurityGroups/{networkSecurityGroupName}/securityRules/{securityRuleName}").ToString(); + _url = _url.Replace("{resourceGroupName}", System.Uri.EscapeDataString(resourceGroupName)); + _url = _url.Replace("{networkSecurityGroupName}", System.Uri.EscapeDataString(networkSecurityGroupName)); + _url = _url.Replace("{securityRuleName}", System.Uri.EscapeDataString(securityRuleName)); + _url = _url.Replace("{subscriptionId}", System.Uri.EscapeDataString(this.Client.SubscriptionId)); + System.Collections.Generic.List _queryParameters = new System.Collections.Generic.List(); + if (this.Client.ApiVersion != null) + { + _queryParameters.Add(string.Format("api-version={0}", System.Uri.EscapeDataString(this.Client.ApiVersion))); + } + if (_queryParameters.Count > 0) + { + _url += "?" + string.Join("&", _queryParameters); + } + // Create HTTP transport objects + System.Net.Http.HttpRequestMessage _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 != 204 && (int)_statusCode != 202 && (int)_statusCode != 200) + { + var ex = new Microsoft.Rest.Azure.CloudException(string.Format("Operation returned an invalid status code '{0}'", _statusCode)); + if (_httpResponse.Content != null) { + _responseContent = await _httpResponse.Content.ReadAsStringAsync().ConfigureAwait(false); + } + else { + _responseContent = string.Empty; + } + ex.Request = new Microsoft.Rest.HttpRequestMessageWrapper(_httpRequest, _requestContent); + ex.Response = new Microsoft.Rest.HttpResponseMessageWrapper(_httpResponse, _responseContent); + if (_httpResponse.Headers.Contains("x-ms-request-id")) + { + ex.RequestId = _httpResponse.Headers.GetValues("x-ms-request-id").FirstOrDefault(); + } + 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(); + } + if (_shouldTrace) + { + Microsoft.Rest.ServiceClientTracing.Exit(_invocationId, _result); + } + return _result; + } + + /// + /// The Get NetworkSecurityRule operation retreives information about the + /// specified network security rule. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the network security group. + /// + /// + /// The name of the security rule. + /// + /// + /// 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 + /// + /// + /// A response object containing the response body and response headers. + /// + public async System.Threading.Tasks.Task> GetWithHttpMessagesAsync(string resourceGroupName, string networkSecurityGroupName, string securityRuleName, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + if (resourceGroupName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "resourceGroupName"); + } + if (networkSecurityGroupName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "networkSecurityGroupName"); + } + if (securityRuleName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "securityRuleName"); + } + if (this.Client.ApiVersion == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.ApiVersion"); + } + if (this.Client.SubscriptionId == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.SubscriptionId"); + } + // 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("networkSecurityGroupName", networkSecurityGroupName); + tracingParameters.Add("securityRuleName", securityRuleName); + 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/networkSecurityGroups/{networkSecurityGroupName}/securityRules/{securityRuleName}").ToString(); + _url = _url.Replace("{resourceGroupName}", System.Uri.EscapeDataString(resourceGroupName)); + _url = _url.Replace("{networkSecurityGroupName}", System.Uri.EscapeDataString(networkSecurityGroupName)); + _url = _url.Replace("{securityRuleName}", System.Uri.EscapeDataString(securityRuleName)); + _url = _url.Replace("{subscriptionId}", System.Uri.EscapeDataString(this.Client.SubscriptionId)); + System.Collections.Generic.List _queryParameters = new System.Collections.Generic.List(); + if (this.Client.ApiVersion != null) + { + _queryParameters.Add(string.Format("api-version={0}", System.Uri.EscapeDataString(this.Client.ApiVersion))); + } + if (_queryParameters.Count > 0) + { + _url += "?" + string.Join("&", _queryParameters); + } + // Create HTTP transport objects + System.Net.Http.HttpRequestMessage _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); + CloudError _errorBody = Microsoft.Rest.Serialization.SafeJsonConvert.DeserializeObject(_responseContent, this.Client.DeserializationSettings); + if (_errorBody != null) + { + ex = new Microsoft.Rest.Azure.CloudException(_errorBody.Message); + 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 (_httpResponse.Headers.Contains("x-ms-request-id")) + { + ex.RequestId = _httpResponse.Headers.GetValues("x-ms-request-id").FirstOrDefault(); + } + 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; + } + + /// + /// The Put network security rule operation creates/updates a security rule in + /// the specified network security group + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the network security group. + /// + /// + /// The name of the security rule. + /// + /// + /// Parameters supplied to the create/update network security rule operation + /// + /// + /// The headers that will be added to request. + /// + /// + /// The cancellation token. + /// + public async System.Threading.Tasks.Task> CreateOrUpdateWithHttpMessagesAsync(string resourceGroupName, string networkSecurityGroupName, string securityRuleName, SecurityRuleInner securityRuleParameters, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + // Send Request + Microsoft.Rest.Azure.AzureOperationResponse _response = await BeginCreateOrUpdateWithHttpMessagesAsync( + resourceGroupName, networkSecurityGroupName, securityRuleName, securityRuleParameters, customHeaders, cancellationToken); + return await this.Client.GetPutOrPatchOperationResultAsync(_response, + customHeaders, + cancellationToken); + } + + /// + /// The Put network security rule operation creates/updates a security rule in + /// the specified network security group + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the network security group. + /// + /// + /// The name of the security rule. + /// + /// + /// Parameters supplied to the create/update network security rule 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 + /// + /// + /// A response object containing the response body and response headers. + /// + public async System.Threading.Tasks.Task> BeginCreateOrUpdateWithHttpMessagesAsync(string resourceGroupName, string networkSecurityGroupName, string securityRuleName, SecurityRuleInner securityRuleParameters, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + if (resourceGroupName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "resourceGroupName"); + } + if (networkSecurityGroupName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "networkSecurityGroupName"); + } + if (securityRuleName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "securityRuleName"); + } + if (securityRuleParameters == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "securityRuleParameters"); + } + if (securityRuleParameters != null) + { + securityRuleParameters.Validate(); + } + if (this.Client.ApiVersion == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.ApiVersion"); + } + if (this.Client.SubscriptionId == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.SubscriptionId"); + } + // 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("networkSecurityGroupName", networkSecurityGroupName); + tracingParameters.Add("securityRuleName", securityRuleName); + tracingParameters.Add("securityRuleParameters", securityRuleParameters); + 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/networkSecurityGroups/{networkSecurityGroupName}/securityRules/{securityRuleName}").ToString(); + _url = _url.Replace("{resourceGroupName}", System.Uri.EscapeDataString(resourceGroupName)); + _url = _url.Replace("{networkSecurityGroupName}", System.Uri.EscapeDataString(networkSecurityGroupName)); + _url = _url.Replace("{securityRuleName}", System.Uri.EscapeDataString(securityRuleName)); + _url = _url.Replace("{subscriptionId}", System.Uri.EscapeDataString(this.Client.SubscriptionId)); + System.Collections.Generic.List _queryParameters = new System.Collections.Generic.List(); + if (this.Client.ApiVersion != null) + { + _queryParameters.Add(string.Format("api-version={0}", System.Uri.EscapeDataString(this.Client.ApiVersion))); + } + if (_queryParameters.Count > 0) + { + _url += "?" + string.Join("&", _queryParameters); + } + // Create HTTP transport objects + System.Net.Http.HttpRequestMessage _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(securityRuleParameters != null) + { + _requestContent = Microsoft.Rest.Serialization.SafeJsonConvert.SerializeObject(securityRuleParameters, 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); + CloudError _errorBody = Microsoft.Rest.Serialization.SafeJsonConvert.DeserializeObject(_responseContent, this.Client.DeserializationSettings); + if (_errorBody != null) + { + ex = new Microsoft.Rest.Azure.CloudException(_errorBody.Message); + 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 (_httpResponse.Headers.Contains("x-ms-request-id")) + { + ex.RequestId = _httpResponse.Headers.GetValues("x-ms-request-id").FirstOrDefault(); + } + 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); + } + } + if (_shouldTrace) + { + Microsoft.Rest.ServiceClientTracing.Exit(_invocationId, _result); + } + return _result; + } + + /// + /// The List network security rule opertion retrieves all the security rules + /// in a network security group. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the network security group. + /// + /// + /// 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 + /// + /// + /// A response object containing the response body and response headers. + /// + public async System.Threading.Tasks.Task>> ListWithHttpMessagesAsync(string resourceGroupName, string networkSecurityGroupName, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + if (resourceGroupName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "resourceGroupName"); + } + if (networkSecurityGroupName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "networkSecurityGroupName"); + } + if (this.Client.ApiVersion == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.ApiVersion"); + } + if (this.Client.SubscriptionId == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.SubscriptionId"); + } + // 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("networkSecurityGroupName", networkSecurityGroupName); + 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/networkSecurityGroups/{networkSecurityGroupName}/securityRules").ToString(); + _url = _url.Replace("{resourceGroupName}", System.Uri.EscapeDataString(resourceGroupName)); + _url = _url.Replace("{networkSecurityGroupName}", System.Uri.EscapeDataString(networkSecurityGroupName)); + _url = _url.Replace("{subscriptionId}", System.Uri.EscapeDataString(this.Client.SubscriptionId)); + System.Collections.Generic.List _queryParameters = new System.Collections.Generic.List(); + if (this.Client.ApiVersion != null) + { + _queryParameters.Add(string.Format("api-version={0}", System.Uri.EscapeDataString(this.Client.ApiVersion))); + } + if (_queryParameters.Count > 0) + { + _url += "?" + string.Join("&", _queryParameters); + } + // Create HTTP transport objects + System.Net.Http.HttpRequestMessage _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); + CloudError _errorBody = Microsoft.Rest.Serialization.SafeJsonConvert.DeserializeObject(_responseContent, this.Client.DeserializationSettings); + if (_errorBody != null) + { + ex = new Microsoft.Rest.Azure.CloudException(_errorBody.Message); + 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 (_httpResponse.Headers.Contains("x-ms-request-id")) + { + ex.RequestId = _httpResponse.Headers.GetValues("x-ms-request-id").FirstOrDefault(); + } + 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; + } + + /// + /// The List network security rule opertion retrieves all the security rules + /// in a network security group. + /// + /// + /// 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 + /// + /// + /// 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 += "?" + string.Join("&", _queryParameters); + } + // Create HTTP transport objects + System.Net.Http.HttpRequestMessage _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); + CloudError _errorBody = Microsoft.Rest.Serialization.SafeJsonConvert.DeserializeObject(_responseContent, this.Client.DeserializationSettings); + if (_errorBody != null) + { + ex = new Microsoft.Rest.Azure.CloudException(_errorBody.Message); + 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 (_httpResponse.Headers.Contains("x-ms-request-id")) + { + ex.RequestId = _httpResponse.Headers.GetValues("x-ms-request-id").FirstOrDefault(); + } + 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; + } + + } +} diff --git a/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/SecurityRulesOperationsExtensions.cs b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/SecurityRulesOperationsExtensions.cs new file mode 100644 index 000000000..9191fa39d --- /dev/null +++ b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/SecurityRulesOperationsExtensions.cs @@ -0,0 +1,345 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.Network +{ + using System.Threading.Tasks; + using Microsoft.Rest.Azure; + using Models; + + /// + /// Extension methods for SecurityRulesOperations. + /// + public static partial class SecurityRulesOperationsExtensions + { + /// + /// The delete network security rule operation deletes the specified network + /// security rule. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the network security group. + /// + /// + /// The name of the security rule. + /// + public static void Delete(this ISecurityRulesOperations operations, string resourceGroupName, string networkSecurityGroupName, string securityRuleName) + { + System.Threading.Tasks.Task.Factory.StartNew(s => ((ISecurityRulesOperations)s).DeleteAsync(resourceGroupName, networkSecurityGroupName, securityRuleName), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// The delete network security rule operation deletes the specified network + /// security rule. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the network security group. + /// + /// + /// The name of the security rule. + /// + /// + /// The cancellation token. + /// + public static async System.Threading.Tasks.Task DeleteAsync(this ISecurityRulesOperations operations, string resourceGroupName, string networkSecurityGroupName, string securityRuleName, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + await operations.DeleteWithHttpMessagesAsync(resourceGroupName, networkSecurityGroupName, securityRuleName, null, cancellationToken).ConfigureAwait(false); + } + + /// + /// The delete network security rule operation deletes the specified network + /// security rule. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the network security group. + /// + /// + /// The name of the security rule. + /// + public static void BeginDelete(this ISecurityRulesOperations operations, string resourceGroupName, string networkSecurityGroupName, string securityRuleName) + { + System.Threading.Tasks.Task.Factory.StartNew(s => ((ISecurityRulesOperations)s).BeginDeleteAsync(resourceGroupName, networkSecurityGroupName, securityRuleName), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// The delete network security rule operation deletes the specified network + /// security rule. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the network security group. + /// + /// + /// The name of the security rule. + /// + /// + /// The cancellation token. + /// + public static async System.Threading.Tasks.Task BeginDeleteAsync(this ISecurityRulesOperations operations, string resourceGroupName, string networkSecurityGroupName, string securityRuleName, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + await operations.BeginDeleteWithHttpMessagesAsync(resourceGroupName, networkSecurityGroupName, securityRuleName, null, cancellationToken).ConfigureAwait(false); + } + + /// + /// The Get NetworkSecurityRule operation retreives information about the + /// specified network security rule. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the network security group. + /// + /// + /// The name of the security rule. + /// + public static SecurityRuleInner Get(this ISecurityRulesOperations operations, string resourceGroupName, string networkSecurityGroupName, string securityRuleName) + { + return System.Threading.Tasks.Task.Factory.StartNew(s => ((ISecurityRulesOperations)s).GetAsync(resourceGroupName, networkSecurityGroupName, securityRuleName), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// The Get NetworkSecurityRule operation retreives information about the + /// specified network security rule. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the network security group. + /// + /// + /// The name of the security rule. + /// + /// + /// The cancellation token. + /// + public static async System.Threading.Tasks.Task GetAsync(this ISecurityRulesOperations operations, string resourceGroupName, string networkSecurityGroupName, string securityRuleName, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + using (var _result = await operations.GetWithHttpMessagesAsync(resourceGroupName, networkSecurityGroupName, securityRuleName, null, cancellationToken).ConfigureAwait(false)) + { + return _result.Body; + } + } + + /// + /// The Put network security rule operation creates/updates a security rule in + /// the specified network security group + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the network security group. + /// + /// + /// The name of the security rule. + /// + /// + /// Parameters supplied to the create/update network security rule operation + /// + public static SecurityRuleInner CreateOrUpdate(this ISecurityRulesOperations operations, string resourceGroupName, string networkSecurityGroupName, string securityRuleName, SecurityRuleInner securityRuleParameters) + { + return System.Threading.Tasks.Task.Factory.StartNew(s => ((ISecurityRulesOperations)s).CreateOrUpdateAsync(resourceGroupName, networkSecurityGroupName, securityRuleName, securityRuleParameters), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// The Put network security rule operation creates/updates a security rule in + /// the specified network security group + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the network security group. + /// + /// + /// The name of the security rule. + /// + /// + /// Parameters supplied to the create/update network security rule operation + /// + /// + /// The cancellation token. + /// + public static async System.Threading.Tasks.Task CreateOrUpdateAsync(this ISecurityRulesOperations operations, string resourceGroupName, string networkSecurityGroupName, string securityRuleName, SecurityRuleInner securityRuleParameters, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + using (var _result = await operations.CreateOrUpdateWithHttpMessagesAsync(resourceGroupName, networkSecurityGroupName, securityRuleName, securityRuleParameters, null, cancellationToken).ConfigureAwait(false)) + { + return _result.Body; + } + } + + /// + /// The Put network security rule operation creates/updates a security rule in + /// the specified network security group + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the network security group. + /// + /// + /// The name of the security rule. + /// + /// + /// Parameters supplied to the create/update network security rule operation + /// + public static SecurityRuleInner BeginCreateOrUpdate(this ISecurityRulesOperations operations, string resourceGroupName, string networkSecurityGroupName, string securityRuleName, SecurityRuleInner securityRuleParameters) + { + return System.Threading.Tasks.Task.Factory.StartNew(s => ((ISecurityRulesOperations)s).BeginCreateOrUpdateAsync(resourceGroupName, networkSecurityGroupName, securityRuleName, securityRuleParameters), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// The Put network security rule operation creates/updates a security rule in + /// the specified network security group + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the network security group. + /// + /// + /// The name of the security rule. + /// + /// + /// Parameters supplied to the create/update network security rule operation + /// + /// + /// The cancellation token. + /// + public static async System.Threading.Tasks.Task BeginCreateOrUpdateAsync(this ISecurityRulesOperations operations, string resourceGroupName, string networkSecurityGroupName, string securityRuleName, SecurityRuleInner securityRuleParameters, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + using (var _result = await operations.BeginCreateOrUpdateWithHttpMessagesAsync(resourceGroupName, networkSecurityGroupName, securityRuleName, securityRuleParameters, null, cancellationToken).ConfigureAwait(false)) + { + return _result.Body; + } + } + + /// + /// The List network security rule opertion retrieves all the security rules + /// in a network security group. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the network security group. + /// + public static Microsoft.Rest.Azure.IPage List(this ISecurityRulesOperations operations, string resourceGroupName, string networkSecurityGroupName) + { + return System.Threading.Tasks.Task.Factory.StartNew(s => ((ISecurityRulesOperations)s).ListAsync(resourceGroupName, networkSecurityGroupName), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// The List network security rule opertion retrieves all the security rules + /// in a network security group. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the network security group. + /// + /// + /// The cancellation token. + /// + public static async Task> ListAsync(this ISecurityRulesOperations operations, string resourceGroupName, string networkSecurityGroupName, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + using (var _result = await operations.ListWithHttpMessagesAsync(resourceGroupName, networkSecurityGroupName, null, cancellationToken).ConfigureAwait(false)) + { + return _result.Body; + } + } + + /// + /// The List network security rule opertion retrieves all the security rules + /// in a network security group. + /// + /// + /// 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 ISecurityRulesOperations operations, string nextPageLink) + { + return System.Threading.Tasks.Task.Factory.StartNew(s => ((ISecurityRulesOperations)s).ListNextAsync(nextPageLink), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// The List network security rule opertion retrieves all the security rules + /// in a network security group. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The NextLink from the previous successful call to List operation. + /// + /// + /// The cancellation token. + /// + public static async Task> ListNextAsync(this ISecurityRulesOperations 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/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/SubnetsOperations.cs b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/SubnetsOperations.cs new file mode 100644 index 000000000..0ea96bf98 --- /dev/null +++ b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/SubnetsOperations.cs @@ -0,0 +1,1074 @@ +// 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 0.17.0.0 +// 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; + + /// + /// SubnetsOperations operations. + /// + internal partial class SubnetsOperations : Microsoft.Rest.IServiceOperations, ISubnetsOperations + { + /// + /// Initializes a new instance of the SubnetsOperations class. + /// + /// + /// Reference to the service client. + /// + /// + /// Thrown when a required parameter is null + /// + internal SubnetsOperations(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; } + + /// + /// The delete subnet operation deletes the specified subnet. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual network. + /// + /// + /// The name of the subnet. + /// + /// + /// The headers that will be added to request. + /// + /// + /// The cancellation token. + /// + public async System.Threading.Tasks.Task DeleteWithHttpMessagesAsync(string resourceGroupName, string virtualNetworkName, string subnetName, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + // Send request + Microsoft.Rest.Azure.AzureOperationResponse _response = await BeginDeleteWithHttpMessagesAsync( + resourceGroupName, virtualNetworkName, subnetName, customHeaders, cancellationToken); + return await this.Client.GetPostOrDeleteOperationResultAsync(_response, customHeaders, cancellationToken); + } + + /// + /// The delete subnet operation deletes the specified subnet. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual network. + /// + /// + /// The name of the subnet. + /// + /// + /// 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 + /// + /// + /// A response object containing the response body and response headers. + /// + public async System.Threading.Tasks.Task BeginDeleteWithHttpMessagesAsync(string resourceGroupName, string virtualNetworkName, string subnetName, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + if (resourceGroupName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "resourceGroupName"); + } + if (virtualNetworkName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "virtualNetworkName"); + } + if (subnetName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "subnetName"); + } + if (this.Client.ApiVersion == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.ApiVersion"); + } + if (this.Client.SubscriptionId == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.SubscriptionId"); + } + // 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("virtualNetworkName", virtualNetworkName); + tracingParameters.Add("subnetName", subnetName); + 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/virtualNetworks/{virtualNetworkName}/subnets/{subnetName}").ToString(); + _url = _url.Replace("{resourceGroupName}", System.Uri.EscapeDataString(resourceGroupName)); + _url = _url.Replace("{virtualNetworkName}", System.Uri.EscapeDataString(virtualNetworkName)); + _url = _url.Replace("{subnetName}", System.Uri.EscapeDataString(subnetName)); + _url = _url.Replace("{subscriptionId}", System.Uri.EscapeDataString(this.Client.SubscriptionId)); + System.Collections.Generic.List _queryParameters = new System.Collections.Generic.List(); + if (this.Client.ApiVersion != null) + { + _queryParameters.Add(string.Format("api-version={0}", System.Uri.EscapeDataString(this.Client.ApiVersion))); + } + if (_queryParameters.Count > 0) + { + _url += "?" + string.Join("&", _queryParameters); + } + // Create HTTP transport objects + System.Net.Http.HttpRequestMessage _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 != 200 && (int)_statusCode != 204 && (int)_statusCode != 202) + { + var ex = new Microsoft.Rest.Azure.CloudException(string.Format("Operation returned an invalid status code '{0}'", _statusCode)); + if (_httpResponse.Content != null) { + _responseContent = await _httpResponse.Content.ReadAsStringAsync().ConfigureAwait(false); + } + else { + _responseContent = string.Empty; + } + ex.Request = new Microsoft.Rest.HttpRequestMessageWrapper(_httpRequest, _requestContent); + ex.Response = new Microsoft.Rest.HttpResponseMessageWrapper(_httpResponse, _responseContent); + if (_httpResponse.Headers.Contains("x-ms-request-id")) + { + ex.RequestId = _httpResponse.Headers.GetValues("x-ms-request-id").FirstOrDefault(); + } + 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(); + } + if (_shouldTrace) + { + Microsoft.Rest.ServiceClientTracing.Exit(_invocationId, _result); + } + return _result; + } + + /// + /// The Get subnet operation retreives information about the specified subnet. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual network. + /// + /// + /// The name of the subnet. + /// + /// + /// expand references resources. + /// + /// + /// 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 + /// + /// + /// A response object containing the response body and response headers. + /// + public async System.Threading.Tasks.Task> GetWithHttpMessagesAsync(string resourceGroupName, string virtualNetworkName, string subnetName, string expand = default(string), System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + if (resourceGroupName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "resourceGroupName"); + } + if (virtualNetworkName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "virtualNetworkName"); + } + if (subnetName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "subnetName"); + } + if (this.Client.ApiVersion == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.ApiVersion"); + } + if (this.Client.SubscriptionId == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.SubscriptionId"); + } + // 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("virtualNetworkName", virtualNetworkName); + tracingParameters.Add("subnetName", subnetName); + tracingParameters.Add("expand", expand); + 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/virtualNetworks/{virtualNetworkName}/subnets/{subnetName}").ToString(); + _url = _url.Replace("{resourceGroupName}", System.Uri.EscapeDataString(resourceGroupName)); + _url = _url.Replace("{virtualNetworkName}", System.Uri.EscapeDataString(virtualNetworkName)); + _url = _url.Replace("{subnetName}", System.Uri.EscapeDataString(subnetName)); + _url = _url.Replace("{subscriptionId}", System.Uri.EscapeDataString(this.Client.SubscriptionId)); + System.Collections.Generic.List _queryParameters = new System.Collections.Generic.List(); + if (this.Client.ApiVersion != null) + { + _queryParameters.Add(string.Format("api-version={0}", System.Uri.EscapeDataString(this.Client.ApiVersion))); + } + if (expand != null) + { + _queryParameters.Add(string.Format("$expand={0}", System.Uri.EscapeDataString(expand))); + } + if (_queryParameters.Count > 0) + { + _url += "?" + string.Join("&", _queryParameters); + } + // Create HTTP transport objects + System.Net.Http.HttpRequestMessage _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); + CloudError _errorBody = Microsoft.Rest.Serialization.SafeJsonConvert.DeserializeObject(_responseContent, this.Client.DeserializationSettings); + if (_errorBody != null) + { + ex = new Microsoft.Rest.Azure.CloudException(_errorBody.Message); + 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 (_httpResponse.Headers.Contains("x-ms-request-id")) + { + ex.RequestId = _httpResponse.Headers.GetValues("x-ms-request-id").FirstOrDefault(); + } + 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; + } + + /// + /// The Put Subnet operation creates/updates a subnet in thespecified virtual + /// network + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual network. + /// + /// + /// The name of the subnet. + /// + /// + /// Parameters supplied to the create/update Subnet operation + /// + /// + /// The headers that will be added to request. + /// + /// + /// The cancellation token. + /// + public async System.Threading.Tasks.Task> CreateOrUpdateWithHttpMessagesAsync(string resourceGroupName, string virtualNetworkName, string subnetName, SubnetInner subnetParameters, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + // Send Request + Microsoft.Rest.Azure.AzureOperationResponse _response = await BeginCreateOrUpdateWithHttpMessagesAsync( + resourceGroupName, virtualNetworkName, subnetName, subnetParameters, customHeaders, cancellationToken); + return await this.Client.GetPutOrPatchOperationResultAsync(_response, + customHeaders, + cancellationToken); + } + + /// + /// The Put Subnet operation creates/updates a subnet in thespecified virtual + /// network + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual network. + /// + /// + /// The name of the subnet. + /// + /// + /// Parameters supplied to the create/update Subnet 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 + /// + /// + /// A response object containing the response body and response headers. + /// + public async System.Threading.Tasks.Task> BeginCreateOrUpdateWithHttpMessagesAsync(string resourceGroupName, string virtualNetworkName, string subnetName, SubnetInner subnetParameters, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + if (resourceGroupName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "resourceGroupName"); + } + if (virtualNetworkName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "virtualNetworkName"); + } + if (subnetName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "subnetName"); + } + if (subnetParameters == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "subnetParameters"); + } + if (this.Client.ApiVersion == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.ApiVersion"); + } + if (this.Client.SubscriptionId == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.SubscriptionId"); + } + // 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("virtualNetworkName", virtualNetworkName); + tracingParameters.Add("subnetName", subnetName); + tracingParameters.Add("subnetParameters", subnetParameters); + 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/virtualNetworks/{virtualNetworkName}/subnets/{subnetName}").ToString(); + _url = _url.Replace("{resourceGroupName}", System.Uri.EscapeDataString(resourceGroupName)); + _url = _url.Replace("{virtualNetworkName}", System.Uri.EscapeDataString(virtualNetworkName)); + _url = _url.Replace("{subnetName}", System.Uri.EscapeDataString(subnetName)); + _url = _url.Replace("{subscriptionId}", System.Uri.EscapeDataString(this.Client.SubscriptionId)); + System.Collections.Generic.List _queryParameters = new System.Collections.Generic.List(); + if (this.Client.ApiVersion != null) + { + _queryParameters.Add(string.Format("api-version={0}", System.Uri.EscapeDataString(this.Client.ApiVersion))); + } + if (_queryParameters.Count > 0) + { + _url += "?" + string.Join("&", _queryParameters); + } + // Create HTTP transport objects + System.Net.Http.HttpRequestMessage _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(subnetParameters != null) + { + _requestContent = Microsoft.Rest.Serialization.SafeJsonConvert.SerializeObject(subnetParameters, 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); + CloudError _errorBody = Microsoft.Rest.Serialization.SafeJsonConvert.DeserializeObject(_responseContent, this.Client.DeserializationSettings); + if (_errorBody != null) + { + ex = new Microsoft.Rest.Azure.CloudException(_errorBody.Message); + 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 (_httpResponse.Headers.Contains("x-ms-request-id")) + { + ex.RequestId = _httpResponse.Headers.GetValues("x-ms-request-id").FirstOrDefault(); + } + 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); + } + } + if (_shouldTrace) + { + Microsoft.Rest.ServiceClientTracing.Exit(_invocationId, _result); + } + return _result; + } + + /// + /// The List subnets opertion retrieves all the subnets in a virtual network. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual network. + /// + /// + /// 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 + /// + /// + /// A response object containing the response body and response headers. + /// + public async System.Threading.Tasks.Task>> ListWithHttpMessagesAsync(string resourceGroupName, string virtualNetworkName, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + if (resourceGroupName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "resourceGroupName"); + } + if (virtualNetworkName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "virtualNetworkName"); + } + if (this.Client.ApiVersion == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.ApiVersion"); + } + if (this.Client.SubscriptionId == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.SubscriptionId"); + } + // 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("virtualNetworkName", virtualNetworkName); + 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/virtualNetworks/{virtualNetworkName}/subnets").ToString(); + _url = _url.Replace("{resourceGroupName}", System.Uri.EscapeDataString(resourceGroupName)); + _url = _url.Replace("{virtualNetworkName}", System.Uri.EscapeDataString(virtualNetworkName)); + _url = _url.Replace("{subscriptionId}", System.Uri.EscapeDataString(this.Client.SubscriptionId)); + System.Collections.Generic.List _queryParameters = new System.Collections.Generic.List(); + if (this.Client.ApiVersion != null) + { + _queryParameters.Add(string.Format("api-version={0}", System.Uri.EscapeDataString(this.Client.ApiVersion))); + } + if (_queryParameters.Count > 0) + { + _url += "?" + string.Join("&", _queryParameters); + } + // Create HTTP transport objects + System.Net.Http.HttpRequestMessage _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); + CloudError _errorBody = Microsoft.Rest.Serialization.SafeJsonConvert.DeserializeObject(_responseContent, this.Client.DeserializationSettings); + if (_errorBody != null) + { + ex = new Microsoft.Rest.Azure.CloudException(_errorBody.Message); + 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 (_httpResponse.Headers.Contains("x-ms-request-id")) + { + ex.RequestId = _httpResponse.Headers.GetValues("x-ms-request-id").FirstOrDefault(); + } + 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; + } + + /// + /// The List subnets opertion retrieves all the subnets in a virtual network. + /// + /// + /// 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 + /// + /// + /// 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 += "?" + string.Join("&", _queryParameters); + } + // Create HTTP transport objects + System.Net.Http.HttpRequestMessage _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); + CloudError _errorBody = Microsoft.Rest.Serialization.SafeJsonConvert.DeserializeObject(_responseContent, this.Client.DeserializationSettings); + if (_errorBody != null) + { + ex = new Microsoft.Rest.Azure.CloudException(_errorBody.Message); + 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 (_httpResponse.Headers.Contains("x-ms-request-id")) + { + ex.RequestId = _httpResponse.Headers.GetValues("x-ms-request-id").FirstOrDefault(); + } + 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; + } + + } +} diff --git a/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/SubnetsOperationsExtensions.cs b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/SubnetsOperationsExtensions.cs new file mode 100644 index 000000000..628027d5b --- /dev/null +++ b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/SubnetsOperationsExtensions.cs @@ -0,0 +1,341 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.Network +{ + using System.Threading.Tasks; + using Microsoft.Rest.Azure; + using Models; + + /// + /// Extension methods for SubnetsOperations. + /// + public static partial class SubnetsOperationsExtensions + { + /// + /// The delete subnet operation deletes the specified subnet. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual network. + /// + /// + /// The name of the subnet. + /// + public static void Delete(this ISubnetsOperations operations, string resourceGroupName, string virtualNetworkName, string subnetName) + { + System.Threading.Tasks.Task.Factory.StartNew(s => ((ISubnetsOperations)s).DeleteAsync(resourceGroupName, virtualNetworkName, subnetName), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// The delete subnet operation deletes the specified subnet. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual network. + /// + /// + /// The name of the subnet. + /// + /// + /// The cancellation token. + /// + public static async System.Threading.Tasks.Task DeleteAsync(this ISubnetsOperations operations, string resourceGroupName, string virtualNetworkName, string subnetName, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + await operations.DeleteWithHttpMessagesAsync(resourceGroupName, virtualNetworkName, subnetName, null, cancellationToken).ConfigureAwait(false); + } + + /// + /// The delete subnet operation deletes the specified subnet. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual network. + /// + /// + /// The name of the subnet. + /// + public static void BeginDelete(this ISubnetsOperations operations, string resourceGroupName, string virtualNetworkName, string subnetName) + { + System.Threading.Tasks.Task.Factory.StartNew(s => ((ISubnetsOperations)s).BeginDeleteAsync(resourceGroupName, virtualNetworkName, subnetName), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// The delete subnet operation deletes the specified subnet. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual network. + /// + /// + /// The name of the subnet. + /// + /// + /// The cancellation token. + /// + public static async System.Threading.Tasks.Task BeginDeleteAsync(this ISubnetsOperations operations, string resourceGroupName, string virtualNetworkName, string subnetName, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + await operations.BeginDeleteWithHttpMessagesAsync(resourceGroupName, virtualNetworkName, subnetName, null, cancellationToken).ConfigureAwait(false); + } + + /// + /// The Get subnet operation retreives information about the specified subnet. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual network. + /// + /// + /// The name of the subnet. + /// + /// + /// expand references resources. + /// + public static SubnetInner Get(this ISubnetsOperations operations, string resourceGroupName, string virtualNetworkName, string subnetName, string expand = default(string)) + { + return System.Threading.Tasks.Task.Factory.StartNew(s => ((ISubnetsOperations)s).GetAsync(resourceGroupName, virtualNetworkName, subnetName, expand), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// The Get subnet operation retreives information about the specified subnet. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual network. + /// + /// + /// The name of the subnet. + /// + /// + /// expand references resources. + /// + /// + /// The cancellation token. + /// + public static async System.Threading.Tasks.Task GetAsync(this ISubnetsOperations operations, string resourceGroupName, string virtualNetworkName, string subnetName, string expand = default(string), System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + using (var _result = await operations.GetWithHttpMessagesAsync(resourceGroupName, virtualNetworkName, subnetName, expand, null, cancellationToken).ConfigureAwait(false)) + { + return _result.Body; + } + } + + /// + /// The Put Subnet operation creates/updates a subnet in thespecified virtual + /// network + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual network. + /// + /// + /// The name of the subnet. + /// + /// + /// Parameters supplied to the create/update Subnet operation + /// + public static SubnetInner CreateOrUpdate(this ISubnetsOperations operations, string resourceGroupName, string virtualNetworkName, string subnetName, SubnetInner subnetParameters) + { + return System.Threading.Tasks.Task.Factory.StartNew(s => ((ISubnetsOperations)s).CreateOrUpdateAsync(resourceGroupName, virtualNetworkName, subnetName, subnetParameters), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// The Put Subnet operation creates/updates a subnet in thespecified virtual + /// network + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual network. + /// + /// + /// The name of the subnet. + /// + /// + /// Parameters supplied to the create/update Subnet operation + /// + /// + /// The cancellation token. + /// + public static async System.Threading.Tasks.Task CreateOrUpdateAsync(this ISubnetsOperations operations, string resourceGroupName, string virtualNetworkName, string subnetName, SubnetInner subnetParameters, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + using (var _result = await operations.CreateOrUpdateWithHttpMessagesAsync(resourceGroupName, virtualNetworkName, subnetName, subnetParameters, null, cancellationToken).ConfigureAwait(false)) + { + return _result.Body; + } + } + + /// + /// The Put Subnet operation creates/updates a subnet in thespecified virtual + /// network + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual network. + /// + /// + /// The name of the subnet. + /// + /// + /// Parameters supplied to the create/update Subnet operation + /// + public static SubnetInner BeginCreateOrUpdate(this ISubnetsOperations operations, string resourceGroupName, string virtualNetworkName, string subnetName, SubnetInner subnetParameters) + { + return System.Threading.Tasks.Task.Factory.StartNew(s => ((ISubnetsOperations)s).BeginCreateOrUpdateAsync(resourceGroupName, virtualNetworkName, subnetName, subnetParameters), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// The Put Subnet operation creates/updates a subnet in thespecified virtual + /// network + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual network. + /// + /// + /// The name of the subnet. + /// + /// + /// Parameters supplied to the create/update Subnet operation + /// + /// + /// The cancellation token. + /// + public static async System.Threading.Tasks.Task BeginCreateOrUpdateAsync(this ISubnetsOperations operations, string resourceGroupName, string virtualNetworkName, string subnetName, SubnetInner subnetParameters, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + using (var _result = await operations.BeginCreateOrUpdateWithHttpMessagesAsync(resourceGroupName, virtualNetworkName, subnetName, subnetParameters, null, cancellationToken).ConfigureAwait(false)) + { + return _result.Body; + } + } + + /// + /// The List subnets opertion retrieves all the subnets in a virtual network. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual network. + /// + public static Microsoft.Rest.Azure.IPage List(this ISubnetsOperations operations, string resourceGroupName, string virtualNetworkName) + { + return System.Threading.Tasks.Task.Factory.StartNew(s => ((ISubnetsOperations)s).ListAsync(resourceGroupName, virtualNetworkName), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// The List subnets opertion retrieves all the subnets in a virtual network. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual network. + /// + /// + /// The cancellation token. + /// + public static async Task> ListAsync(this ISubnetsOperations operations, string resourceGroupName, string virtualNetworkName, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + using (var _result = await operations.ListWithHttpMessagesAsync(resourceGroupName, virtualNetworkName, null, cancellationToken).ConfigureAwait(false)) + { + return _result.Body; + } + } + + /// + /// The List subnets opertion retrieves all the subnets in a virtual network. + /// + /// + /// 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 ISubnetsOperations operations, string nextPageLink) + { + return System.Threading.Tasks.Task.Factory.StartNew(s => ((ISubnetsOperations)s).ListNextAsync(nextPageLink), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// The List subnets opertion retrieves all the subnets in a virtual network. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The NextLink from the previous successful call to List operation. + /// + /// + /// The cancellation token. + /// + public static async Task> ListNextAsync(this ISubnetsOperations 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/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/UsagesOperations.cs b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/UsagesOperations.cs new file mode 100644 index 000000000..b7f82f7ff --- /dev/null +++ b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/UsagesOperations.cs @@ -0,0 +1,402 @@ +// 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 0.17.0.0 +// 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; + + /// + /// UsagesOperations operations. + /// + internal partial class UsagesOperations : Microsoft.Rest.IServiceOperations, IUsagesOperations + { + /// + /// Initializes a new instance of the UsagesOperations class. + /// + /// + /// Reference to the service client. + /// + /// + /// Thrown when a required parameter is null + /// + internal UsagesOperations(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; } + + /// + /// Lists compute usages for a subscription. + /// + /// + /// The location upon which resource usage is queried. + /// + /// + /// 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 + /// + /// + /// A response object containing the response body and response headers. + /// + public async System.Threading.Tasks.Task>> ListWithHttpMessagesAsync(string location, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + if (location == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "location"); + } + if (location != null) + { + if (!System.Text.RegularExpressions.Regex.IsMatch(location, "^[-\\w\\._]+$")) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.Pattern, "location", "^[-\\w\\._]+$"); + } + } + if (this.Client.ApiVersion == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.ApiVersion"); + } + if (this.Client.SubscriptionId == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.SubscriptionId"); + } + // 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("location", location); + 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}/providers/Microsoft.Network/locations/{location}/usages").ToString(); + _url = _url.Replace("{location}", System.Uri.EscapeDataString(location)); + _url = _url.Replace("{subscriptionId}", System.Uri.EscapeDataString(this.Client.SubscriptionId)); + System.Collections.Generic.List _queryParameters = new System.Collections.Generic.List(); + if (this.Client.ApiVersion != null) + { + _queryParameters.Add(string.Format("api-version={0}", System.Uri.EscapeDataString(this.Client.ApiVersion))); + } + if (_queryParameters.Count > 0) + { + _url += "?" + string.Join("&", _queryParameters); + } + // Create HTTP transport objects + System.Net.Http.HttpRequestMessage _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); + CloudError _errorBody = Microsoft.Rest.Serialization.SafeJsonConvert.DeserializeObject(_responseContent, this.Client.DeserializationSettings); + if (_errorBody != null) + { + ex = new Microsoft.Rest.Azure.CloudException(_errorBody.Message); + 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 (_httpResponse.Headers.Contains("x-ms-request-id")) + { + ex.RequestId = _httpResponse.Headers.GetValues("x-ms-request-id").FirstOrDefault(); + } + 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; + } + + /// + /// Lists compute usages for a subscription. + /// + /// + /// 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 + /// + /// + /// 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 += "?" + string.Join("&", _queryParameters); + } + // Create HTTP transport objects + System.Net.Http.HttpRequestMessage _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); + CloudError _errorBody = Microsoft.Rest.Serialization.SafeJsonConvert.DeserializeObject(_responseContent, this.Client.DeserializationSettings); + if (_errorBody != null) + { + ex = new Microsoft.Rest.Azure.CloudException(_errorBody.Message); + 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 (_httpResponse.Headers.Contains("x-ms-request-id")) + { + ex.RequestId = _httpResponse.Headers.GetValues("x-ms-request-id").FirstOrDefault(); + } + 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; + } + + } +} diff --git a/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/UsagesOperationsExtensions.cs b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/UsagesOperationsExtensions.cs new file mode 100644 index 000000000..707b963d9 --- /dev/null +++ b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/UsagesOperationsExtensions.cs @@ -0,0 +1,89 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.Network +{ + using System.Threading.Tasks; + using Microsoft.Rest.Azure; + using Models; + + /// + /// Extension methods for UsagesOperations. + /// + public static partial class UsagesOperationsExtensions + { + /// + /// Lists compute usages for a subscription. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The location upon which resource usage is queried. + /// + public static Microsoft.Rest.Azure.IPage List(this IUsagesOperations operations, string location) + { + return System.Threading.Tasks.Task.Factory.StartNew(s => ((IUsagesOperations)s).ListAsync(location), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// Lists compute usages for a subscription. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The location upon which resource usage is queried. + /// + /// + /// The cancellation token. + /// + public static async Task> ListAsync(this IUsagesOperations operations, string location, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + using (var _result = await operations.ListWithHttpMessagesAsync(location, null, cancellationToken).ConfigureAwait(false)) + { + return _result.Body; + } + } + + /// + /// Lists compute usages for a subscription. + /// + /// + /// 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 IUsagesOperations operations, string nextPageLink) + { + return System.Threading.Tasks.Task.Factory.StartNew(s => ((IUsagesOperations)s).ListNextAsync(nextPageLink), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// Lists compute usages for a subscription. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The NextLink from the previous successful call to List operation. + /// + /// + /// The cancellation token. + /// + public static async Task> ListNextAsync(this IUsagesOperations 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/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/VirtualNetworkGatewayConnectionsOperations.cs b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/VirtualNetworkGatewayConnectionsOperations.cs new file mode 100644 index 000000000..174ba3d10 --- /dev/null +++ b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/VirtualNetworkGatewayConnectionsOperations.cs @@ -0,0 +1,1720 @@ +// 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 0.17.0.0 +// 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; + + /// + /// VirtualNetworkGatewayConnectionsOperations operations. + /// + internal partial class VirtualNetworkGatewayConnectionsOperations : Microsoft.Rest.IServiceOperations, IVirtualNetworkGatewayConnectionsOperations + { + /// + /// Initializes a new instance of the VirtualNetworkGatewayConnectionsOperations class. + /// + /// + /// Reference to the service client. + /// + /// + /// Thrown when a required parameter is null + /// + internal VirtualNetworkGatewayConnectionsOperations(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; } + + /// + /// The Put VirtualNetworkGatewayConnection operation creates/updates a + /// virtual network gateway connection in the specified resource group + /// through Network resource provider. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual network gateway conenction. + /// + /// + /// Parameters supplied to the Begin Create or update Virtual Network Gateway + /// connection operation through Network resource provider. + /// + /// + /// The headers that will be added to request. + /// + /// + /// The cancellation token. + /// + public async System.Threading.Tasks.Task> CreateOrUpdateWithHttpMessagesAsync(string resourceGroupName, string virtualNetworkGatewayConnectionName, VirtualNetworkGatewayConnectionInner 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, virtualNetworkGatewayConnectionName, parameters, customHeaders, cancellationToken); + return await this.Client.GetPutOrPatchOperationResultAsync(_response, + customHeaders, + cancellationToken); + } + + /// + /// The Put VirtualNetworkGatewayConnection operation creates/updates a + /// virtual network gateway connection in the specified resource group + /// through Network resource provider. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual network gateway conenction. + /// + /// + /// Parameters supplied to the Begin Create or update Virtual Network Gateway + /// connection operation through Network resource provider. + /// + /// + /// 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 + /// + /// + /// A response object containing the response body and response headers. + /// + public async System.Threading.Tasks.Task> BeginCreateOrUpdateWithHttpMessagesAsync(string resourceGroupName, string virtualNetworkGatewayConnectionName, VirtualNetworkGatewayConnectionInner parameters, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + if (resourceGroupName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "resourceGroupName"); + } + if (virtualNetworkGatewayConnectionName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "virtualNetworkGatewayConnectionName"); + } + if (parameters == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "parameters"); + } + if (this.Client.ApiVersion == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.ApiVersion"); + } + if (this.Client.SubscriptionId == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.SubscriptionId"); + } + // 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("virtualNetworkGatewayConnectionName", virtualNetworkGatewayConnectionName); + 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/connections/{virtualNetworkGatewayConnectionName}").ToString(); + _url = _url.Replace("{resourceGroupName}", System.Uri.EscapeDataString(resourceGroupName)); + _url = _url.Replace("{virtualNetworkGatewayConnectionName}", System.Uri.EscapeDataString(virtualNetworkGatewayConnectionName)); + _url = _url.Replace("{subscriptionId}", System.Uri.EscapeDataString(this.Client.SubscriptionId)); + System.Collections.Generic.List _queryParameters = new System.Collections.Generic.List(); + if (this.Client.ApiVersion != null) + { + _queryParameters.Add(string.Format("api-version={0}", System.Uri.EscapeDataString(this.Client.ApiVersion))); + } + if (_queryParameters.Count > 0) + { + _url += "?" + string.Join("&", _queryParameters); + } + // Create HTTP transport objects + System.Net.Http.HttpRequestMessage _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); + CloudError _errorBody = Microsoft.Rest.Serialization.SafeJsonConvert.DeserializeObject(_responseContent, this.Client.DeserializationSettings); + if (_errorBody != null) + { + ex = new Microsoft.Rest.Azure.CloudException(_errorBody.Message); + 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 (_httpResponse.Headers.Contains("x-ms-request-id")) + { + ex.RequestId = _httpResponse.Headers.GetValues("x-ms-request-id").FirstOrDefault(); + } + 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); + } + } + if (_shouldTrace) + { + Microsoft.Rest.ServiceClientTracing.Exit(_invocationId, _result); + } + return _result; + } + + /// + /// The Get VirtualNetworkGatewayConnection operation retrieves information + /// about the specified virtual network gateway connection through Network + /// resource provider. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual network gateway connection. + /// + /// + /// 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 + /// + /// + /// A response object containing the response body and response headers. + /// + public async System.Threading.Tasks.Task> GetWithHttpMessagesAsync(string resourceGroupName, string virtualNetworkGatewayConnectionName, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + if (resourceGroupName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "resourceGroupName"); + } + if (virtualNetworkGatewayConnectionName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "virtualNetworkGatewayConnectionName"); + } + if (this.Client.ApiVersion == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.ApiVersion"); + } + if (this.Client.SubscriptionId == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.SubscriptionId"); + } + // 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("virtualNetworkGatewayConnectionName", virtualNetworkGatewayConnectionName); + 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/connections/{virtualNetworkGatewayConnectionName}").ToString(); + _url = _url.Replace("{resourceGroupName}", System.Uri.EscapeDataString(resourceGroupName)); + _url = _url.Replace("{virtualNetworkGatewayConnectionName}", System.Uri.EscapeDataString(virtualNetworkGatewayConnectionName)); + _url = _url.Replace("{subscriptionId}", System.Uri.EscapeDataString(this.Client.SubscriptionId)); + System.Collections.Generic.List _queryParameters = new System.Collections.Generic.List(); + if (this.Client.ApiVersion != null) + { + _queryParameters.Add(string.Format("api-version={0}", System.Uri.EscapeDataString(this.Client.ApiVersion))); + } + if (_queryParameters.Count > 0) + { + _url += "?" + string.Join("&", _queryParameters); + } + // Create HTTP transport objects + System.Net.Http.HttpRequestMessage _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); + CloudError _errorBody = Microsoft.Rest.Serialization.SafeJsonConvert.DeserializeObject(_responseContent, this.Client.DeserializationSettings); + if (_errorBody != null) + { + ex = new Microsoft.Rest.Azure.CloudException(_errorBody.Message); + 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 (_httpResponse.Headers.Contains("x-ms-request-id")) + { + ex.RequestId = _httpResponse.Headers.GetValues("x-ms-request-id").FirstOrDefault(); + } + 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; + } + + /// + /// The Delete VirtualNetworkGatewayConnection operation deletes the specifed + /// virtual network Gateway connection through Network resource provider. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual network gateway connection. + /// + /// + /// The headers that will be added to request. + /// + /// + /// The cancellation token. + /// + public async System.Threading.Tasks.Task DeleteWithHttpMessagesAsync(string resourceGroupName, string virtualNetworkGatewayConnectionName, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + // Send request + Microsoft.Rest.Azure.AzureOperationResponse _response = await BeginDeleteWithHttpMessagesAsync( + resourceGroupName, virtualNetworkGatewayConnectionName, customHeaders, cancellationToken); + return await this.Client.GetPostOrDeleteOperationResultAsync(_response, customHeaders, cancellationToken); + } + + /// + /// The Delete VirtualNetworkGatewayConnection operation deletes the specifed + /// virtual network Gateway connection through Network resource provider. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual network gateway connection. + /// + /// + /// 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 + /// + /// + /// A response object containing the response body and response headers. + /// + public async System.Threading.Tasks.Task BeginDeleteWithHttpMessagesAsync(string resourceGroupName, string virtualNetworkGatewayConnectionName, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + if (resourceGroupName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "resourceGroupName"); + } + if (virtualNetworkGatewayConnectionName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "virtualNetworkGatewayConnectionName"); + } + if (this.Client.ApiVersion == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.ApiVersion"); + } + if (this.Client.SubscriptionId == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.SubscriptionId"); + } + // 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("virtualNetworkGatewayConnectionName", virtualNetworkGatewayConnectionName); + 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/connections/{virtualNetworkGatewayConnectionName}").ToString(); + _url = _url.Replace("{resourceGroupName}", System.Uri.EscapeDataString(resourceGroupName)); + _url = _url.Replace("{virtualNetworkGatewayConnectionName}", System.Uri.EscapeDataString(virtualNetworkGatewayConnectionName)); + _url = _url.Replace("{subscriptionId}", System.Uri.EscapeDataString(this.Client.SubscriptionId)); + System.Collections.Generic.List _queryParameters = new System.Collections.Generic.List(); + if (this.Client.ApiVersion != null) + { + _queryParameters.Add(string.Format("api-version={0}", System.Uri.EscapeDataString(this.Client.ApiVersion))); + } + if (_queryParameters.Count > 0) + { + _url += "?" + string.Join("&", _queryParameters); + } + // Create HTTP transport objects + System.Net.Http.HttpRequestMessage _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 != 200 && (int)_statusCode != 202 && (int)_statusCode != 204) + { + var ex = new Microsoft.Rest.Azure.CloudException(string.Format("Operation returned an invalid status code '{0}'", _statusCode)); + if (_httpResponse.Content != null) { + _responseContent = await _httpResponse.Content.ReadAsStringAsync().ConfigureAwait(false); + } + else { + _responseContent = string.Empty; + } + ex.Request = new Microsoft.Rest.HttpRequestMessageWrapper(_httpRequest, _requestContent); + ex.Response = new Microsoft.Rest.HttpResponseMessageWrapper(_httpResponse, _responseContent); + if (_httpResponse.Headers.Contains("x-ms-request-id")) + { + ex.RequestId = _httpResponse.Headers.GetValues("x-ms-request-id").FirstOrDefault(); + } + 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(); + } + if (_shouldTrace) + { + Microsoft.Rest.ServiceClientTracing.Exit(_invocationId, _result); + } + return _result; + } + + /// + /// The Get VirtualNetworkGatewayConnectionSharedKey operation retrieves + /// information about the specified virtual network gateway connection shared + /// key through Network resource provider. + /// + /// + /// The name of the resource group. + /// + /// + /// The virtual network gateway connection shared key name. + /// + /// + /// 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 + /// + /// + /// A response object containing the response body and response headers. + /// + public async System.Threading.Tasks.Task> GetSharedKeyWithHttpMessagesAsync(string resourceGroupName, string connectionSharedKeyName, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + if (resourceGroupName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "resourceGroupName"); + } + if (connectionSharedKeyName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "connectionSharedKeyName"); + } + if (this.Client.ApiVersion == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.ApiVersion"); + } + if (this.Client.SubscriptionId == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.SubscriptionId"); + } + // 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("connectionSharedKeyName", connectionSharedKeyName); + tracingParameters.Add("cancellationToken", cancellationToken); + Microsoft.Rest.ServiceClientTracing.Enter(_invocationId, this, "GetSharedKey", 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/connections/{connectionSharedKeyName}/sharedkey").ToString(); + _url = _url.Replace("{resourceGroupName}", System.Uri.EscapeDataString(resourceGroupName)); + _url = _url.Replace("{connectionSharedKeyName}", System.Uri.EscapeDataString(connectionSharedKeyName)); + _url = _url.Replace("{subscriptionId}", System.Uri.EscapeDataString(this.Client.SubscriptionId)); + System.Collections.Generic.List _queryParameters = new System.Collections.Generic.List(); + if (this.Client.ApiVersion != null) + { + _queryParameters.Add(string.Format("api-version={0}", System.Uri.EscapeDataString(this.Client.ApiVersion))); + } + if (_queryParameters.Count > 0) + { + _url += "?" + string.Join("&", _queryParameters); + } + // Create HTTP transport objects + System.Net.Http.HttpRequestMessage _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); + CloudError _errorBody = Microsoft.Rest.Serialization.SafeJsonConvert.DeserializeObject(_responseContent, this.Client.DeserializationSettings); + if (_errorBody != null) + { + ex = new Microsoft.Rest.Azure.CloudException(_errorBody.Message); + 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 (_httpResponse.Headers.Contains("x-ms-request-id")) + { + ex.RequestId = _httpResponse.Headers.GetValues("x-ms-request-id").FirstOrDefault(); + } + 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; + } + + /// + /// The List VirtualNetworkGatewayConnections operation retrieves all the + /// virtual network gateways connections created. + /// + /// + /// The name of the resource group. + /// + /// + /// 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 + /// + /// + /// A response object containing the response body and response headers. + /// + public async System.Threading.Tasks.Task>> ListWithHttpMessagesAsync(string resourceGroupName, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + if (resourceGroupName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "resourceGroupName"); + } + if (this.Client.ApiVersion == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.ApiVersion"); + } + if (this.Client.SubscriptionId == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.SubscriptionId"); + } + // 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("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/connections").ToString(); + _url = _url.Replace("{resourceGroupName}", System.Uri.EscapeDataString(resourceGroupName)); + _url = _url.Replace("{subscriptionId}", System.Uri.EscapeDataString(this.Client.SubscriptionId)); + System.Collections.Generic.List _queryParameters = new System.Collections.Generic.List(); + if (this.Client.ApiVersion != null) + { + _queryParameters.Add(string.Format("api-version={0}", System.Uri.EscapeDataString(this.Client.ApiVersion))); + } + if (_queryParameters.Count > 0) + { + _url += "?" + string.Join("&", _queryParameters); + } + // Create HTTP transport objects + System.Net.Http.HttpRequestMessage _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); + CloudError _errorBody = Microsoft.Rest.Serialization.SafeJsonConvert.DeserializeObject(_responseContent, this.Client.DeserializationSettings); + if (_errorBody != null) + { + ex = new Microsoft.Rest.Azure.CloudException(_errorBody.Message); + 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 (_httpResponse.Headers.Contains("x-ms-request-id")) + { + ex.RequestId = _httpResponse.Headers.GetValues("x-ms-request-id").FirstOrDefault(); + } + 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; + } + + /// + /// The VirtualNetworkGatewayConnectionResetSharedKey operation resets the + /// virtual network gateway connection shared key for passed virtual network + /// gateway connection in the specified resource group through Network + /// resource provider. + /// + /// + /// The name of the resource group. + /// + /// + /// The virtual network gateway connection reset shared key Name. + /// + /// + /// The virtual network connection reset shared key length + /// + /// + /// The headers that will be added to request. + /// + /// + /// The cancellation token. + /// + public async System.Threading.Tasks.Task> ResetSharedKeyWithHttpMessagesAsync(string resourceGroupName, string virtualNetworkGatewayConnectionName, long? keyLength = default(long?), System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + // Send request + Microsoft.Rest.Azure.AzureOperationResponse _response = await BeginResetSharedKeyWithHttpMessagesAsync( + resourceGroupName, virtualNetworkGatewayConnectionName, keyLength, customHeaders, cancellationToken); + return await this.Client.GetPostOrDeleteOperationResultAsync(_response, customHeaders, cancellationToken); + } + + /// + /// The VirtualNetworkGatewayConnectionResetSharedKey operation resets the + /// virtual network gateway connection shared key for passed virtual network + /// gateway connection in the specified resource group through Network + /// resource provider. + /// + /// + /// The name of the resource group. + /// + /// + /// The virtual network gateway connection reset shared key Name. + /// + /// + /// The virtual network connection reset shared key length + /// + /// + /// 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 + /// + /// + /// A response object containing the response body and response headers. + /// + public async System.Threading.Tasks.Task> BeginResetSharedKeyWithHttpMessagesAsync(string resourceGroupName, string virtualNetworkGatewayConnectionName, long? keyLength = default(long?), System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + if (resourceGroupName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "resourceGroupName"); + } + if (virtualNetworkGatewayConnectionName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "virtualNetworkGatewayConnectionName"); + } + if (this.Client.ApiVersion == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.ApiVersion"); + } + if (this.Client.SubscriptionId == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.SubscriptionId"); + } + ConnectionResetSharedKeyInner parameters = new ConnectionResetSharedKeyInner(); + parameters.KeyLength = keyLength; + // 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("virtualNetworkGatewayConnectionName", virtualNetworkGatewayConnectionName); + tracingParameters.Add("parameters", parameters); + tracingParameters.Add("cancellationToken", cancellationToken); + Microsoft.Rest.ServiceClientTracing.Enter(_invocationId, this, "BeginResetSharedKey", 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/connections/{virtualNetworkGatewayConnectionName}/sharedkey/reset").ToString(); + _url = _url.Replace("{resourceGroupName}", System.Uri.EscapeDataString(resourceGroupName)); + _url = _url.Replace("{virtualNetworkGatewayConnectionName}", System.Uri.EscapeDataString(virtualNetworkGatewayConnectionName)); + _url = _url.Replace("{subscriptionId}", System.Uri.EscapeDataString(this.Client.SubscriptionId)); + System.Collections.Generic.List _queryParameters = new System.Collections.Generic.List(); + if (this.Client.ApiVersion != null) + { + _queryParameters.Add(string.Format("api-version={0}", System.Uri.EscapeDataString(this.Client.ApiVersion))); + } + if (_queryParameters.Count > 0) + { + _url += "?" + string.Join("&", _queryParameters); + } + // Create HTTP transport objects + System.Net.Http.HttpRequestMessage _httpRequest = new System.Net.Http.HttpRequestMessage(); + System.Net.Http.HttpResponseMessage _httpResponse = null; + _httpRequest.Method = new System.Net.Http.HttpMethod("POST"); + _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 != 202) + { + 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); + CloudError _errorBody = Microsoft.Rest.Serialization.SafeJsonConvert.DeserializeObject(_responseContent, this.Client.DeserializationSettings); + if (_errorBody != null) + { + ex = new Microsoft.Rest.Azure.CloudException(_errorBody.Message); + 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 (_httpResponse.Headers.Contains("x-ms-request-id")) + { + ex.RequestId = _httpResponse.Headers.GetValues("x-ms-request-id").FirstOrDefault(); + } + 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; + } + + /// + /// The Put VirtualNetworkGatewayConnectionSharedKey operation sets the + /// virtual network gateway connection shared key for passed virtual network + /// gateway connection in the specified resource group through Network + /// resource provider. + /// + /// + /// The name of the resource group. + /// + /// + /// The virtual network gateway connection name. + /// + /// + /// The virtual network connection shared key value + /// + /// + /// The headers that will be added to request. + /// + /// + /// The cancellation token. + /// + public async System.Threading.Tasks.Task> SetSharedKeyWithHttpMessagesAsync(string resourceGroupName, string virtualNetworkGatewayConnectionName, string value = default(string), System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + // Send Request + Microsoft.Rest.Azure.AzureOperationResponse _response = await BeginSetSharedKeyWithHttpMessagesAsync( + resourceGroupName, virtualNetworkGatewayConnectionName, value, customHeaders, cancellationToken); + return await this.Client.GetPutOrPatchOperationResultAsync(_response, + customHeaders, + cancellationToken); + } + + /// + /// The Put VirtualNetworkGatewayConnectionSharedKey operation sets the + /// virtual network gateway connection shared key for passed virtual network + /// gateway connection in the specified resource group through Network + /// resource provider. + /// + /// + /// The name of the resource group. + /// + /// + /// The virtual network gateway connection name. + /// + /// + /// The virtual network connection shared key value + /// + /// + /// 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 + /// + /// + /// A response object containing the response body and response headers. + /// + public async System.Threading.Tasks.Task> BeginSetSharedKeyWithHttpMessagesAsync(string resourceGroupName, string virtualNetworkGatewayConnectionName, string value = default(string), System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + if (resourceGroupName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "resourceGroupName"); + } + if (virtualNetworkGatewayConnectionName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "virtualNetworkGatewayConnectionName"); + } + if (this.Client.ApiVersion == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.ApiVersion"); + } + if (this.Client.SubscriptionId == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.SubscriptionId"); + } + ConnectionSharedKeyInner parameters = new ConnectionSharedKeyInner(); + if (value != null) + { + parameters.Value = value; + } + // 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("virtualNetworkGatewayConnectionName", virtualNetworkGatewayConnectionName); + tracingParameters.Add("parameters", parameters); + tracingParameters.Add("cancellationToken", cancellationToken); + Microsoft.Rest.ServiceClientTracing.Enter(_invocationId, this, "BeginSetSharedKey", 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/connections/{virtualNetworkGatewayConnectionName}/sharedkey").ToString(); + _url = _url.Replace("{resourceGroupName}", System.Uri.EscapeDataString(resourceGroupName)); + _url = _url.Replace("{virtualNetworkGatewayConnectionName}", System.Uri.EscapeDataString(virtualNetworkGatewayConnectionName)); + _url = _url.Replace("{subscriptionId}", System.Uri.EscapeDataString(this.Client.SubscriptionId)); + System.Collections.Generic.List _queryParameters = new System.Collections.Generic.List(); + if (this.Client.ApiVersion != null) + { + _queryParameters.Add(string.Format("api-version={0}", System.Uri.EscapeDataString(this.Client.ApiVersion))); + } + if (_queryParameters.Count > 0) + { + _url += "?" + string.Join("&", _queryParameters); + } + // Create HTTP transport objects + System.Net.Http.HttpRequestMessage _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 != 201 && (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); + CloudError _errorBody = Microsoft.Rest.Serialization.SafeJsonConvert.DeserializeObject(_responseContent, this.Client.DeserializationSettings); + if (_errorBody != null) + { + ex = new Microsoft.Rest.Azure.CloudException(_errorBody.Message); + 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 (_httpResponse.Headers.Contains("x-ms-request-id")) + { + ex.RequestId = _httpResponse.Headers.GetValues("x-ms-request-id").FirstOrDefault(); + } + 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 == 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); + } + } + // 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; + } + + /// + /// The List VirtualNetworkGatewayConnections operation retrieves all the + /// virtual network gateways connections created. + /// + /// + /// 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 + /// + /// + /// 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 += "?" + string.Join("&", _queryParameters); + } + // Create HTTP transport objects + System.Net.Http.HttpRequestMessage _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); + CloudError _errorBody = Microsoft.Rest.Serialization.SafeJsonConvert.DeserializeObject(_responseContent, this.Client.DeserializationSettings); + if (_errorBody != null) + { + ex = new Microsoft.Rest.Azure.CloudException(_errorBody.Message); + 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 (_httpResponse.Headers.Contains("x-ms-request-id")) + { + ex.RequestId = _httpResponse.Headers.GetValues("x-ms-request-id").FirstOrDefault(); + } + 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; + } + + } +} diff --git a/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/VirtualNetworkGatewayConnectionsOperationsExtensions.cs b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/VirtualNetworkGatewayConnectionsOperationsExtensions.cs new file mode 100644 index 000000000..2b897f2c3 --- /dev/null +++ b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/VirtualNetworkGatewayConnectionsOperationsExtensions.cs @@ -0,0 +1,571 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.Network +{ + using System.Threading.Tasks; + using Microsoft.Rest.Azure; + using Models; + + /// + /// Extension methods for VirtualNetworkGatewayConnectionsOperations. + /// + public static partial class VirtualNetworkGatewayConnectionsOperationsExtensions + { + /// + /// The Put VirtualNetworkGatewayConnection operation creates/updates a + /// virtual network gateway connection in the specified resource group + /// through Network resource provider. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual network gateway conenction. + /// + /// + /// Parameters supplied to the Begin Create or update Virtual Network Gateway + /// connection operation through Network resource provider. + /// + public static VirtualNetworkGatewayConnectionInner CreateOrUpdate(this IVirtualNetworkGatewayConnectionsOperations operations, string resourceGroupName, string virtualNetworkGatewayConnectionName, VirtualNetworkGatewayConnectionInner parameters) + { + return System.Threading.Tasks.Task.Factory.StartNew(s => ((IVirtualNetworkGatewayConnectionsOperations)s).CreateOrUpdateAsync(resourceGroupName, virtualNetworkGatewayConnectionName, parameters), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// The Put VirtualNetworkGatewayConnection operation creates/updates a + /// virtual network gateway connection in the specified resource group + /// through Network resource provider. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual network gateway conenction. + /// + /// + /// Parameters supplied to the Begin Create or update Virtual Network Gateway + /// connection operation through Network resource provider. + /// + /// + /// The cancellation token. + /// + public static async System.Threading.Tasks.Task CreateOrUpdateAsync(this IVirtualNetworkGatewayConnectionsOperations operations, string resourceGroupName, string virtualNetworkGatewayConnectionName, VirtualNetworkGatewayConnectionInner parameters, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + using (var _result = await operations.CreateOrUpdateWithHttpMessagesAsync(resourceGroupName, virtualNetworkGatewayConnectionName, parameters, null, cancellationToken).ConfigureAwait(false)) + { + return _result.Body; + } + } + + /// + /// The Put VirtualNetworkGatewayConnection operation creates/updates a + /// virtual network gateway connection in the specified resource group + /// through Network resource provider. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual network gateway conenction. + /// + /// + /// Parameters supplied to the Begin Create or update Virtual Network Gateway + /// connection operation through Network resource provider. + /// + public static VirtualNetworkGatewayConnectionInner BeginCreateOrUpdate(this IVirtualNetworkGatewayConnectionsOperations operations, string resourceGroupName, string virtualNetworkGatewayConnectionName, VirtualNetworkGatewayConnectionInner parameters) + { + return System.Threading.Tasks.Task.Factory.StartNew(s => ((IVirtualNetworkGatewayConnectionsOperations)s).BeginCreateOrUpdateAsync(resourceGroupName, virtualNetworkGatewayConnectionName, parameters), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// The Put VirtualNetworkGatewayConnection operation creates/updates a + /// virtual network gateway connection in the specified resource group + /// through Network resource provider. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual network gateway conenction. + /// + /// + /// Parameters supplied to the Begin Create or update Virtual Network Gateway + /// connection operation through Network resource provider. + /// + /// + /// The cancellation token. + /// + public static async System.Threading.Tasks.Task BeginCreateOrUpdateAsync(this IVirtualNetworkGatewayConnectionsOperations operations, string resourceGroupName, string virtualNetworkGatewayConnectionName, VirtualNetworkGatewayConnectionInner parameters, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + using (var _result = await operations.BeginCreateOrUpdateWithHttpMessagesAsync(resourceGroupName, virtualNetworkGatewayConnectionName, parameters, null, cancellationToken).ConfigureAwait(false)) + { + return _result.Body; + } + } + + /// + /// The Get VirtualNetworkGatewayConnection operation retrieves information + /// about the specified virtual network gateway connection through Network + /// resource provider. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual network gateway connection. + /// + public static VirtualNetworkGatewayConnectionInner Get(this IVirtualNetworkGatewayConnectionsOperations operations, string resourceGroupName, string virtualNetworkGatewayConnectionName) + { + return System.Threading.Tasks.Task.Factory.StartNew(s => ((IVirtualNetworkGatewayConnectionsOperations)s).GetAsync(resourceGroupName, virtualNetworkGatewayConnectionName), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// The Get VirtualNetworkGatewayConnection operation retrieves information + /// about the specified virtual network gateway connection through Network + /// resource provider. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual network gateway connection. + /// + /// + /// The cancellation token. + /// + public static async System.Threading.Tasks.Task GetAsync(this IVirtualNetworkGatewayConnectionsOperations operations, string resourceGroupName, string virtualNetworkGatewayConnectionName, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + using (var _result = await operations.GetWithHttpMessagesAsync(resourceGroupName, virtualNetworkGatewayConnectionName, null, cancellationToken).ConfigureAwait(false)) + { + return _result.Body; + } + } + + /// + /// The Delete VirtualNetworkGatewayConnection operation deletes the specifed + /// virtual network Gateway connection through Network resource provider. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual network gateway connection. + /// + public static void Delete(this IVirtualNetworkGatewayConnectionsOperations operations, string resourceGroupName, string virtualNetworkGatewayConnectionName) + { + System.Threading.Tasks.Task.Factory.StartNew(s => ((IVirtualNetworkGatewayConnectionsOperations)s).DeleteAsync(resourceGroupName, virtualNetworkGatewayConnectionName), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// The Delete VirtualNetworkGatewayConnection operation deletes the specifed + /// virtual network Gateway connection through Network resource provider. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual network gateway connection. + /// + /// + /// The cancellation token. + /// + public static async System.Threading.Tasks.Task DeleteAsync(this IVirtualNetworkGatewayConnectionsOperations operations, string resourceGroupName, string virtualNetworkGatewayConnectionName, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + await operations.DeleteWithHttpMessagesAsync(resourceGroupName, virtualNetworkGatewayConnectionName, null, cancellationToken).ConfigureAwait(false); + } + + /// + /// The Delete VirtualNetworkGatewayConnection operation deletes the specifed + /// virtual network Gateway connection through Network resource provider. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual network gateway connection. + /// + public static void BeginDelete(this IVirtualNetworkGatewayConnectionsOperations operations, string resourceGroupName, string virtualNetworkGatewayConnectionName) + { + System.Threading.Tasks.Task.Factory.StartNew(s => ((IVirtualNetworkGatewayConnectionsOperations)s).BeginDeleteAsync(resourceGroupName, virtualNetworkGatewayConnectionName), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// The Delete VirtualNetworkGatewayConnection operation deletes the specifed + /// virtual network Gateway connection through Network resource provider. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual network gateway connection. + /// + /// + /// The cancellation token. + /// + public static async System.Threading.Tasks.Task BeginDeleteAsync(this IVirtualNetworkGatewayConnectionsOperations operations, string resourceGroupName, string virtualNetworkGatewayConnectionName, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + await operations.BeginDeleteWithHttpMessagesAsync(resourceGroupName, virtualNetworkGatewayConnectionName, null, cancellationToken).ConfigureAwait(false); + } + + /// + /// The Get VirtualNetworkGatewayConnectionSharedKey operation retrieves + /// information about the specified virtual network gateway connection shared + /// key through Network resource provider. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The virtual network gateway connection shared key name. + /// + public static ConnectionSharedKeyResultInner GetSharedKey(this IVirtualNetworkGatewayConnectionsOperations operations, string resourceGroupName, string connectionSharedKeyName) + { + return System.Threading.Tasks.Task.Factory.StartNew(s => ((IVirtualNetworkGatewayConnectionsOperations)s).GetSharedKeyAsync(resourceGroupName, connectionSharedKeyName), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// The Get VirtualNetworkGatewayConnectionSharedKey operation retrieves + /// information about the specified virtual network gateway connection shared + /// key through Network resource provider. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The virtual network gateway connection shared key name. + /// + /// + /// The cancellation token. + /// + public static async System.Threading.Tasks.Task GetSharedKeyAsync(this IVirtualNetworkGatewayConnectionsOperations operations, string resourceGroupName, string connectionSharedKeyName, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + using (var _result = await operations.GetSharedKeyWithHttpMessagesAsync(resourceGroupName, connectionSharedKeyName, null, cancellationToken).ConfigureAwait(false)) + { + return _result.Body; + } + } + + /// + /// The List VirtualNetworkGatewayConnections operation retrieves all the + /// virtual network gateways connections created. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + public static Microsoft.Rest.Azure.IPage List(this IVirtualNetworkGatewayConnectionsOperations operations, string resourceGroupName) + { + return System.Threading.Tasks.Task.Factory.StartNew(s => ((IVirtualNetworkGatewayConnectionsOperations)s).ListAsync(resourceGroupName), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// The List VirtualNetworkGatewayConnections operation retrieves all the + /// virtual network gateways connections created. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The cancellation token. + /// + public static async Task> ListAsync(this IVirtualNetworkGatewayConnectionsOperations operations, string resourceGroupName, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + using (var _result = await operations.ListWithHttpMessagesAsync(resourceGroupName, null, cancellationToken).ConfigureAwait(false)) + { + return _result.Body; + } + } + + /// + /// The VirtualNetworkGatewayConnectionResetSharedKey operation resets the + /// virtual network gateway connection shared key for passed virtual network + /// gateway connection in the specified resource group through Network + /// resource provider. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The virtual network gateway connection reset shared key Name. + /// + /// + /// The virtual network connection reset shared key length + /// + public static ConnectionResetSharedKeyInner ResetSharedKey(this IVirtualNetworkGatewayConnectionsOperations operations, string resourceGroupName, string virtualNetworkGatewayConnectionName, long? keyLength = default(long?)) + { + return System.Threading.Tasks.Task.Factory.StartNew(s => ((IVirtualNetworkGatewayConnectionsOperations)s).ResetSharedKeyAsync(resourceGroupName, virtualNetworkGatewayConnectionName, keyLength), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// The VirtualNetworkGatewayConnectionResetSharedKey operation resets the + /// virtual network gateway connection shared key for passed virtual network + /// gateway connection in the specified resource group through Network + /// resource provider. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The virtual network gateway connection reset shared key Name. + /// + /// + /// The virtual network connection reset shared key length + /// + /// + /// The cancellation token. + /// + public static async System.Threading.Tasks.Task ResetSharedKeyAsync(this IVirtualNetworkGatewayConnectionsOperations operations, string resourceGroupName, string virtualNetworkGatewayConnectionName, long? keyLength = default(long?), System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + using (var _result = await operations.ResetSharedKeyWithHttpMessagesAsync(resourceGroupName, virtualNetworkGatewayConnectionName, keyLength, null, cancellationToken).ConfigureAwait(false)) + { + return _result.Body; + } + } + + /// + /// The VirtualNetworkGatewayConnectionResetSharedKey operation resets the + /// virtual network gateway connection shared key for passed virtual network + /// gateway connection in the specified resource group through Network + /// resource provider. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The virtual network gateway connection reset shared key Name. + /// + /// + /// The virtual network connection reset shared key length + /// + public static ConnectionResetSharedKeyInner BeginResetSharedKey(this IVirtualNetworkGatewayConnectionsOperations operations, string resourceGroupName, string virtualNetworkGatewayConnectionName, long? keyLength = default(long?)) + { + return System.Threading.Tasks.Task.Factory.StartNew(s => ((IVirtualNetworkGatewayConnectionsOperations)s).BeginResetSharedKeyAsync(resourceGroupName, virtualNetworkGatewayConnectionName, keyLength), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// The VirtualNetworkGatewayConnectionResetSharedKey operation resets the + /// virtual network gateway connection shared key for passed virtual network + /// gateway connection in the specified resource group through Network + /// resource provider. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The virtual network gateway connection reset shared key Name. + /// + /// + /// The virtual network connection reset shared key length + /// + /// + /// The cancellation token. + /// + public static async System.Threading.Tasks.Task BeginResetSharedKeyAsync(this IVirtualNetworkGatewayConnectionsOperations operations, string resourceGroupName, string virtualNetworkGatewayConnectionName, long? keyLength = default(long?), System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + using (var _result = await operations.BeginResetSharedKeyWithHttpMessagesAsync(resourceGroupName, virtualNetworkGatewayConnectionName, keyLength, null, cancellationToken).ConfigureAwait(false)) + { + return _result.Body; + } + } + + /// + /// The Put VirtualNetworkGatewayConnectionSharedKey operation sets the + /// virtual network gateway connection shared key for passed virtual network + /// gateway connection in the specified resource group through Network + /// resource provider. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The virtual network gateway connection name. + /// + /// + /// The virtual network connection shared key value + /// + public static ConnectionSharedKeyInner SetSharedKey(this IVirtualNetworkGatewayConnectionsOperations operations, string resourceGroupName, string virtualNetworkGatewayConnectionName, string value = default(string)) + { + return System.Threading.Tasks.Task.Factory.StartNew(s => ((IVirtualNetworkGatewayConnectionsOperations)s).SetSharedKeyAsync(resourceGroupName, virtualNetworkGatewayConnectionName, value), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// The Put VirtualNetworkGatewayConnectionSharedKey operation sets the + /// virtual network gateway connection shared key for passed virtual network + /// gateway connection in the specified resource group through Network + /// resource provider. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The virtual network gateway connection name. + /// + /// + /// The virtual network connection shared key value + /// + /// + /// The cancellation token. + /// + public static async System.Threading.Tasks.Task SetSharedKeyAsync(this IVirtualNetworkGatewayConnectionsOperations operations, string resourceGroupName, string virtualNetworkGatewayConnectionName, string value = default(string), System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + using (var _result = await operations.SetSharedKeyWithHttpMessagesAsync(resourceGroupName, virtualNetworkGatewayConnectionName, value, null, cancellationToken).ConfigureAwait(false)) + { + return _result.Body; + } + } + + /// + /// The Put VirtualNetworkGatewayConnectionSharedKey operation sets the + /// virtual network gateway connection shared key for passed virtual network + /// gateway connection in the specified resource group through Network + /// resource provider. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The virtual network gateway connection name. + /// + /// + /// The virtual network connection shared key value + /// + public static ConnectionSharedKeyInner BeginSetSharedKey(this IVirtualNetworkGatewayConnectionsOperations operations, string resourceGroupName, string virtualNetworkGatewayConnectionName, string value = default(string)) + { + return System.Threading.Tasks.Task.Factory.StartNew(s => ((IVirtualNetworkGatewayConnectionsOperations)s).BeginSetSharedKeyAsync(resourceGroupName, virtualNetworkGatewayConnectionName, value), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// The Put VirtualNetworkGatewayConnectionSharedKey operation sets the + /// virtual network gateway connection shared key for passed virtual network + /// gateway connection in the specified resource group through Network + /// resource provider. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The virtual network gateway connection name. + /// + /// + /// The virtual network connection shared key value + /// + /// + /// The cancellation token. + /// + public static async System.Threading.Tasks.Task BeginSetSharedKeyAsync(this IVirtualNetworkGatewayConnectionsOperations operations, string resourceGroupName, string virtualNetworkGatewayConnectionName, string value = default(string), System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + using (var _result = await operations.BeginSetSharedKeyWithHttpMessagesAsync(resourceGroupName, virtualNetworkGatewayConnectionName, value, null, cancellationToken).ConfigureAwait(false)) + { + return _result.Body; + } + } + + /// + /// The List VirtualNetworkGatewayConnections operation retrieves all the + /// virtual network gateways connections created. + /// + /// + /// 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 IVirtualNetworkGatewayConnectionsOperations operations, string nextPageLink) + { + return System.Threading.Tasks.Task.Factory.StartNew(s => ((IVirtualNetworkGatewayConnectionsOperations)s).ListNextAsync(nextPageLink), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// The List VirtualNetworkGatewayConnections operation retrieves all the + /// virtual network gateways connections created. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The NextLink from the previous successful call to List operation. + /// + /// + /// The cancellation token. + /// + public static async Task> ListNextAsync(this IVirtualNetworkGatewayConnectionsOperations 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/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/VirtualNetworkGatewaysOperations.cs b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/VirtualNetworkGatewaysOperations.cs new file mode 100644 index 000000000..8945fef07 --- /dev/null +++ b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/VirtualNetworkGatewaysOperations.cs @@ -0,0 +1,1477 @@ +// 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 0.17.0.0 +// 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; + + /// + /// VirtualNetworkGatewaysOperations operations. + /// + internal partial class VirtualNetworkGatewaysOperations : Microsoft.Rest.IServiceOperations, IVirtualNetworkGatewaysOperations + { + /// + /// Initializes a new instance of the VirtualNetworkGatewaysOperations class. + /// + /// + /// Reference to the service client. + /// + /// + /// Thrown when a required parameter is null + /// + internal VirtualNetworkGatewaysOperations(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; } + + /// + /// The Put VirtualNetworkGateway operation creates/updates a virtual network + /// gateway in the specified resource group through Network resource provider. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual network gateway. + /// + /// + /// Parameters supplied to the Begin Create or update Virtual Network Gateway + /// operation through Network resource provider. + /// + /// + /// The headers that will be added to request. + /// + /// + /// The cancellation token. + /// + public async System.Threading.Tasks.Task> CreateOrUpdateWithHttpMessagesAsync(string resourceGroupName, string virtualNetworkGatewayName, VirtualNetworkGatewayInner 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, virtualNetworkGatewayName, parameters, customHeaders, cancellationToken); + return await this.Client.GetPutOrPatchOperationResultAsync(_response, + customHeaders, + cancellationToken); + } + + /// + /// The Put VirtualNetworkGateway operation creates/updates a virtual network + /// gateway in the specified resource group through Network resource provider. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual network gateway. + /// + /// + /// Parameters supplied to the Begin Create or update Virtual Network Gateway + /// operation through Network resource provider. + /// + /// + /// 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 + /// + /// + /// A response object containing the response body and response headers. + /// + public async System.Threading.Tasks.Task> BeginCreateOrUpdateWithHttpMessagesAsync(string resourceGroupName, string virtualNetworkGatewayName, VirtualNetworkGatewayInner parameters, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + if (resourceGroupName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "resourceGroupName"); + } + if (virtualNetworkGatewayName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "virtualNetworkGatewayName"); + } + if (parameters == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "parameters"); + } + if (this.Client.ApiVersion == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.ApiVersion"); + } + if (this.Client.SubscriptionId == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.SubscriptionId"); + } + // 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("virtualNetworkGatewayName", virtualNetworkGatewayName); + 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/virtualNetworkGateways/{virtualNetworkGatewayName}").ToString(); + _url = _url.Replace("{resourceGroupName}", System.Uri.EscapeDataString(resourceGroupName)); + _url = _url.Replace("{virtualNetworkGatewayName}", System.Uri.EscapeDataString(virtualNetworkGatewayName)); + _url = _url.Replace("{subscriptionId}", System.Uri.EscapeDataString(this.Client.SubscriptionId)); + System.Collections.Generic.List _queryParameters = new System.Collections.Generic.List(); + if (this.Client.ApiVersion != null) + { + _queryParameters.Add(string.Format("api-version={0}", System.Uri.EscapeDataString(this.Client.ApiVersion))); + } + if (_queryParameters.Count > 0) + { + _url += "?" + string.Join("&", _queryParameters); + } + // Create HTTP transport objects + System.Net.Http.HttpRequestMessage _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); + CloudError _errorBody = Microsoft.Rest.Serialization.SafeJsonConvert.DeserializeObject(_responseContent, this.Client.DeserializationSettings); + if (_errorBody != null) + { + ex = new Microsoft.Rest.Azure.CloudException(_errorBody.Message); + 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 (_httpResponse.Headers.Contains("x-ms-request-id")) + { + ex.RequestId = _httpResponse.Headers.GetValues("x-ms-request-id").FirstOrDefault(); + } + 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); + } + } + if (_shouldTrace) + { + Microsoft.Rest.ServiceClientTracing.Exit(_invocationId, _result); + } + return _result; + } + + /// + /// The Get VirtualNetworkGateway operation retrieves information about the + /// specified virtual network gateway through Network resource provider. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual network gateway. + /// + /// + /// 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 + /// + /// + /// A response object containing the response body and response headers. + /// + public async System.Threading.Tasks.Task> GetWithHttpMessagesAsync(string resourceGroupName, string virtualNetworkGatewayName, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + if (resourceGroupName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "resourceGroupName"); + } + if (virtualNetworkGatewayName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "virtualNetworkGatewayName"); + } + if (this.Client.ApiVersion == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.ApiVersion"); + } + if (this.Client.SubscriptionId == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.SubscriptionId"); + } + // 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("virtualNetworkGatewayName", virtualNetworkGatewayName); + 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/virtualNetworkGateways/{virtualNetworkGatewayName}").ToString(); + _url = _url.Replace("{resourceGroupName}", System.Uri.EscapeDataString(resourceGroupName)); + _url = _url.Replace("{virtualNetworkGatewayName}", System.Uri.EscapeDataString(virtualNetworkGatewayName)); + _url = _url.Replace("{subscriptionId}", System.Uri.EscapeDataString(this.Client.SubscriptionId)); + System.Collections.Generic.List _queryParameters = new System.Collections.Generic.List(); + if (this.Client.ApiVersion != null) + { + _queryParameters.Add(string.Format("api-version={0}", System.Uri.EscapeDataString(this.Client.ApiVersion))); + } + if (_queryParameters.Count > 0) + { + _url += "?" + string.Join("&", _queryParameters); + } + // Create HTTP transport objects + System.Net.Http.HttpRequestMessage _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); + CloudError _errorBody = Microsoft.Rest.Serialization.SafeJsonConvert.DeserializeObject(_responseContent, this.Client.DeserializationSettings); + if (_errorBody != null) + { + ex = new Microsoft.Rest.Azure.CloudException(_errorBody.Message); + 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 (_httpResponse.Headers.Contains("x-ms-request-id")) + { + ex.RequestId = _httpResponse.Headers.GetValues("x-ms-request-id").FirstOrDefault(); + } + 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; + } + + /// + /// The Delete VirtualNetworkGateway operation deletes the specifed virtual + /// network Gateway through Network resource provider. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual network gateway. + /// + /// + /// The headers that will be added to request. + /// + /// + /// The cancellation token. + /// + public async System.Threading.Tasks.Task DeleteWithHttpMessagesAsync(string resourceGroupName, string virtualNetworkGatewayName, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + // Send request + Microsoft.Rest.Azure.AzureOperationResponse _response = await BeginDeleteWithHttpMessagesAsync( + resourceGroupName, virtualNetworkGatewayName, customHeaders, cancellationToken); + return await this.Client.GetPostOrDeleteOperationResultAsync(_response, customHeaders, cancellationToken); + } + + /// + /// The Delete VirtualNetworkGateway operation deletes the specifed virtual + /// network Gateway through Network resource provider. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual network gateway. + /// + /// + /// 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 + /// + /// + /// A response object containing the response body and response headers. + /// + public async System.Threading.Tasks.Task BeginDeleteWithHttpMessagesAsync(string resourceGroupName, string virtualNetworkGatewayName, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + if (resourceGroupName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "resourceGroupName"); + } + if (virtualNetworkGatewayName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "virtualNetworkGatewayName"); + } + if (this.Client.ApiVersion == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.ApiVersion"); + } + if (this.Client.SubscriptionId == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.SubscriptionId"); + } + // 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("virtualNetworkGatewayName", virtualNetworkGatewayName); + 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/virtualNetworkGateways/{virtualNetworkGatewayName}").ToString(); + _url = _url.Replace("{resourceGroupName}", System.Uri.EscapeDataString(resourceGroupName)); + _url = _url.Replace("{virtualNetworkGatewayName}", System.Uri.EscapeDataString(virtualNetworkGatewayName)); + _url = _url.Replace("{subscriptionId}", System.Uri.EscapeDataString(this.Client.SubscriptionId)); + System.Collections.Generic.List _queryParameters = new System.Collections.Generic.List(); + if (this.Client.ApiVersion != null) + { + _queryParameters.Add(string.Format("api-version={0}", System.Uri.EscapeDataString(this.Client.ApiVersion))); + } + if (_queryParameters.Count > 0) + { + _url += "?" + string.Join("&", _queryParameters); + } + // Create HTTP transport objects + System.Net.Http.HttpRequestMessage _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 != 204 && (int)_statusCode != 202 && (int)_statusCode != 200) + { + var ex = new Microsoft.Rest.Azure.CloudException(string.Format("Operation returned an invalid status code '{0}'", _statusCode)); + if (_httpResponse.Content != null) { + _responseContent = await _httpResponse.Content.ReadAsStringAsync().ConfigureAwait(false); + } + else { + _responseContent = string.Empty; + } + ex.Request = new Microsoft.Rest.HttpRequestMessageWrapper(_httpRequest, _requestContent); + ex.Response = new Microsoft.Rest.HttpResponseMessageWrapper(_httpResponse, _responseContent); + if (_httpResponse.Headers.Contains("x-ms-request-id")) + { + ex.RequestId = _httpResponse.Headers.GetValues("x-ms-request-id").FirstOrDefault(); + } + 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(); + } + if (_shouldTrace) + { + Microsoft.Rest.ServiceClientTracing.Exit(_invocationId, _result); + } + return _result; + } + + /// + /// The List VirtualNetworkGateways opertion retrieves all the virtual network + /// gateways stored. + /// + /// + /// The name of the resource group. + /// + /// + /// 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 + /// + /// + /// A response object containing the response body and response headers. + /// + public async System.Threading.Tasks.Task>> ListWithHttpMessagesAsync(string resourceGroupName, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + if (resourceGroupName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "resourceGroupName"); + } + if (this.Client.ApiVersion == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.ApiVersion"); + } + if (this.Client.SubscriptionId == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.SubscriptionId"); + } + // 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("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/virtualNetworkGateways").ToString(); + _url = _url.Replace("{resourceGroupName}", System.Uri.EscapeDataString(resourceGroupName)); + _url = _url.Replace("{subscriptionId}", System.Uri.EscapeDataString(this.Client.SubscriptionId)); + System.Collections.Generic.List _queryParameters = new System.Collections.Generic.List(); + if (this.Client.ApiVersion != null) + { + _queryParameters.Add(string.Format("api-version={0}", System.Uri.EscapeDataString(this.Client.ApiVersion))); + } + if (_queryParameters.Count > 0) + { + _url += "?" + string.Join("&", _queryParameters); + } + // Create HTTP transport objects + System.Net.Http.HttpRequestMessage _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); + CloudError _errorBody = Microsoft.Rest.Serialization.SafeJsonConvert.DeserializeObject(_responseContent, this.Client.DeserializationSettings); + if (_errorBody != null) + { + ex = new Microsoft.Rest.Azure.CloudException(_errorBody.Message); + 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 (_httpResponse.Headers.Contains("x-ms-request-id")) + { + ex.RequestId = _httpResponse.Headers.GetValues("x-ms-request-id").FirstOrDefault(); + } + 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; + } + + /// + /// The Reset VirtualNetworkGateway operation resets the primary of the + /// virtual network gateway in the specified resource group through Network + /// resource provider. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual network gateway. + /// + /// + /// Parameters supplied to the Begin Reset Virtual Network Gateway operation + /// through Network resource provider. + /// + /// + /// The headers that will be added to request. + /// + /// + /// The cancellation token. + /// + public async System.Threading.Tasks.Task> ResetWithHttpMessagesAsync(string resourceGroupName, string virtualNetworkGatewayName, VirtualNetworkGatewayInner parameters, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + // Send request + Microsoft.Rest.Azure.AzureOperationResponse _response = await BeginResetWithHttpMessagesAsync( + resourceGroupName, virtualNetworkGatewayName, parameters, customHeaders, cancellationToken); + return await this.Client.GetPostOrDeleteOperationResultAsync(_response, customHeaders, cancellationToken); + } + + /// + /// The Reset VirtualNetworkGateway operation resets the primary of the + /// virtual network gateway in the specified resource group through Network + /// resource provider. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual network gateway. + /// + /// + /// Parameters supplied to the Begin Reset Virtual Network Gateway operation + /// through Network resource provider. + /// + /// + /// 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 + /// + /// + /// A response object containing the response body and response headers. + /// + public async System.Threading.Tasks.Task> BeginResetWithHttpMessagesAsync(string resourceGroupName, string virtualNetworkGatewayName, VirtualNetworkGatewayInner parameters, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + if (resourceGroupName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "resourceGroupName"); + } + if (virtualNetworkGatewayName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "virtualNetworkGatewayName"); + } + if (parameters == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "parameters"); + } + if (this.Client.ApiVersion == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.ApiVersion"); + } + if (this.Client.SubscriptionId == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.SubscriptionId"); + } + // 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("virtualNetworkGatewayName", virtualNetworkGatewayName); + tracingParameters.Add("parameters", parameters); + tracingParameters.Add("cancellationToken", cancellationToken); + Microsoft.Rest.ServiceClientTracing.Enter(_invocationId, this, "BeginReset", 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/virtualNetworkGateways/{virtualNetworkGatewayName}/reset").ToString(); + _url = _url.Replace("{resourceGroupName}", System.Uri.EscapeDataString(resourceGroupName)); + _url = _url.Replace("{virtualNetworkGatewayName}", System.Uri.EscapeDataString(virtualNetworkGatewayName)); + _url = _url.Replace("{subscriptionId}", System.Uri.EscapeDataString(this.Client.SubscriptionId)); + System.Collections.Generic.List _queryParameters = new System.Collections.Generic.List(); + if (this.Client.ApiVersion != null) + { + _queryParameters.Add(string.Format("api-version={0}", System.Uri.EscapeDataString(this.Client.ApiVersion))); + } + if (_queryParameters.Count > 0) + { + _url += "?" + string.Join("&", _queryParameters); + } + // Create HTTP transport objects + System.Net.Http.HttpRequestMessage _httpRequest = new System.Net.Http.HttpRequestMessage(); + System.Net.Http.HttpResponseMessage _httpResponse = null; + _httpRequest.Method = new System.Net.Http.HttpMethod("POST"); + _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 != 202 && (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); + CloudError _errorBody = Microsoft.Rest.Serialization.SafeJsonConvert.DeserializeObject(_responseContent, this.Client.DeserializationSettings); + if (_errorBody != null) + { + ex = new Microsoft.Rest.Azure.CloudException(_errorBody.Message); + 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 (_httpResponse.Headers.Contains("x-ms-request-id")) + { + ex.RequestId = _httpResponse.Headers.GetValues("x-ms-request-id").FirstOrDefault(); + } + 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; + } + + /// + /// The Generatevpnclientpackage operation generates Vpn client package for + /// P2S client of the virtual network gateway in the specified resource group + /// through Network resource provider. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual network gateway. + /// + /// + /// VPN client Processor Architecture -Amd64/X86. Possible values include: + /// 'Amd64', 'X86' + /// + /// + /// 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 + /// + /// + /// A response object containing the response body and response headers. + /// + public async System.Threading.Tasks.Task> GeneratevpnclientpackageWithHttpMessagesAsync(string resourceGroupName, string virtualNetworkGatewayName, string processorArchitecture = default(string), System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + if (resourceGroupName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "resourceGroupName"); + } + if (virtualNetworkGatewayName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "virtualNetworkGatewayName"); + } + if (this.Client.ApiVersion == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.ApiVersion"); + } + if (this.Client.SubscriptionId == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.SubscriptionId"); + } + VpnClientParameters parameters = new VpnClientParameters(); + if (processorArchitecture != null) + { + parameters.ProcessorArchitecture = processorArchitecture; + } + // 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("virtualNetworkGatewayName", virtualNetworkGatewayName); + tracingParameters.Add("parameters", parameters); + tracingParameters.Add("cancellationToken", cancellationToken); + Microsoft.Rest.ServiceClientTracing.Enter(_invocationId, this, "Generatevpnclientpackage", 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/virtualNetworkGateways/{virtualNetworkGatewayName}/generatevpnclientpackage").ToString(); + _url = _url.Replace("{resourceGroupName}", System.Uri.EscapeDataString(resourceGroupName)); + _url = _url.Replace("{virtualNetworkGatewayName}", System.Uri.EscapeDataString(virtualNetworkGatewayName)); + _url = _url.Replace("{subscriptionId}", System.Uri.EscapeDataString(this.Client.SubscriptionId)); + System.Collections.Generic.List _queryParameters = new System.Collections.Generic.List(); + if (this.Client.ApiVersion != null) + { + _queryParameters.Add(string.Format("api-version={0}", System.Uri.EscapeDataString(this.Client.ApiVersion))); + } + if (_queryParameters.Count > 0) + { + _url += "?" + string.Join("&", _queryParameters); + } + // Create HTTP transport objects + System.Net.Http.HttpRequestMessage _httpRequest = new System.Net.Http.HttpRequestMessage(); + System.Net.Http.HttpResponseMessage _httpResponse = null; + _httpRequest.Method = new System.Net.Http.HttpMethod("POST"); + _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 != 202) + { + 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); + CloudError _errorBody = Microsoft.Rest.Serialization.SafeJsonConvert.DeserializeObject(_responseContent, this.Client.DeserializationSettings); + if (_errorBody != null) + { + ex = new Microsoft.Rest.Azure.CloudException(_errorBody.Message); + 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 (_httpResponse.Headers.Contains("x-ms-request-id")) + { + ex.RequestId = _httpResponse.Headers.GetValues("x-ms-request-id").FirstOrDefault(); + } + 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 == 202) + { + _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; + } + + /// + /// The List VirtualNetworkGateways opertion retrieves all the virtual network + /// gateways stored. + /// + /// + /// 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 + /// + /// + /// 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 += "?" + string.Join("&", _queryParameters); + } + // Create HTTP transport objects + System.Net.Http.HttpRequestMessage _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); + CloudError _errorBody = Microsoft.Rest.Serialization.SafeJsonConvert.DeserializeObject(_responseContent, this.Client.DeserializationSettings); + if (_errorBody != null) + { + ex = new Microsoft.Rest.Azure.CloudException(_errorBody.Message); + 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 (_httpResponse.Headers.Contains("x-ms-request-id")) + { + ex.RequestId = _httpResponse.Headers.GetValues("x-ms-request-id").FirstOrDefault(); + } + 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; + } + + } +} diff --git a/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/VirtualNetworkGatewaysOperationsExtensions.cs b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/VirtualNetworkGatewaysOperationsExtensions.cs new file mode 100644 index 000000000..4243c7676 --- /dev/null +++ b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/VirtualNetworkGatewaysOperationsExtensions.cs @@ -0,0 +1,469 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.Network +{ + using System.Threading.Tasks; + using Microsoft.Rest.Azure; + using Models; + + /// + /// Extension methods for VirtualNetworkGatewaysOperations. + /// + public static partial class VirtualNetworkGatewaysOperationsExtensions + { + /// + /// The Put VirtualNetworkGateway operation creates/updates a virtual network + /// gateway in the specified resource group through Network resource provider. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual network gateway. + /// + /// + /// Parameters supplied to the Begin Create or update Virtual Network Gateway + /// operation through Network resource provider. + /// + public static VirtualNetworkGatewayInner CreateOrUpdate(this IVirtualNetworkGatewaysOperations operations, string resourceGroupName, string virtualNetworkGatewayName, VirtualNetworkGatewayInner parameters) + { + return System.Threading.Tasks.Task.Factory.StartNew(s => ((IVirtualNetworkGatewaysOperations)s).CreateOrUpdateAsync(resourceGroupName, virtualNetworkGatewayName, parameters), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// The Put VirtualNetworkGateway operation creates/updates a virtual network + /// gateway in the specified resource group through Network resource provider. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual network gateway. + /// + /// + /// Parameters supplied to the Begin Create or update Virtual Network Gateway + /// operation through Network resource provider. + /// + /// + /// The cancellation token. + /// + public static async System.Threading.Tasks.Task CreateOrUpdateAsync(this IVirtualNetworkGatewaysOperations operations, string resourceGroupName, string virtualNetworkGatewayName, VirtualNetworkGatewayInner parameters, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + using (var _result = await operations.CreateOrUpdateWithHttpMessagesAsync(resourceGroupName, virtualNetworkGatewayName, parameters, null, cancellationToken).ConfigureAwait(false)) + { + return _result.Body; + } + } + + /// + /// The Put VirtualNetworkGateway operation creates/updates a virtual network + /// gateway in the specified resource group through Network resource provider. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual network gateway. + /// + /// + /// Parameters supplied to the Begin Create or update Virtual Network Gateway + /// operation through Network resource provider. + /// + public static VirtualNetworkGatewayInner BeginCreateOrUpdate(this IVirtualNetworkGatewaysOperations operations, string resourceGroupName, string virtualNetworkGatewayName, VirtualNetworkGatewayInner parameters) + { + return System.Threading.Tasks.Task.Factory.StartNew(s => ((IVirtualNetworkGatewaysOperations)s).BeginCreateOrUpdateAsync(resourceGroupName, virtualNetworkGatewayName, parameters), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// The Put VirtualNetworkGateway operation creates/updates a virtual network + /// gateway in the specified resource group through Network resource provider. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual network gateway. + /// + /// + /// Parameters supplied to the Begin Create or update Virtual Network Gateway + /// operation through Network resource provider. + /// + /// + /// The cancellation token. + /// + public static async System.Threading.Tasks.Task BeginCreateOrUpdateAsync(this IVirtualNetworkGatewaysOperations operations, string resourceGroupName, string virtualNetworkGatewayName, VirtualNetworkGatewayInner parameters, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + using (var _result = await operations.BeginCreateOrUpdateWithHttpMessagesAsync(resourceGroupName, virtualNetworkGatewayName, parameters, null, cancellationToken).ConfigureAwait(false)) + { + return _result.Body; + } + } + + /// + /// The Get VirtualNetworkGateway operation retrieves information about the + /// specified virtual network gateway through Network resource provider. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual network gateway. + /// + public static VirtualNetworkGatewayInner Get(this IVirtualNetworkGatewaysOperations operations, string resourceGroupName, string virtualNetworkGatewayName) + { + return System.Threading.Tasks.Task.Factory.StartNew(s => ((IVirtualNetworkGatewaysOperations)s).GetAsync(resourceGroupName, virtualNetworkGatewayName), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// The Get VirtualNetworkGateway operation retrieves information about the + /// specified virtual network gateway through Network resource provider. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual network gateway. + /// + /// + /// The cancellation token. + /// + public static async System.Threading.Tasks.Task GetAsync(this IVirtualNetworkGatewaysOperations operations, string resourceGroupName, string virtualNetworkGatewayName, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + using (var _result = await operations.GetWithHttpMessagesAsync(resourceGroupName, virtualNetworkGatewayName, null, cancellationToken).ConfigureAwait(false)) + { + return _result.Body; + } + } + + /// + /// The Delete VirtualNetworkGateway operation deletes the specifed virtual + /// network Gateway through Network resource provider. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual network gateway. + /// + public static void Delete(this IVirtualNetworkGatewaysOperations operations, string resourceGroupName, string virtualNetworkGatewayName) + { + System.Threading.Tasks.Task.Factory.StartNew(s => ((IVirtualNetworkGatewaysOperations)s).DeleteAsync(resourceGroupName, virtualNetworkGatewayName), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// The Delete VirtualNetworkGateway operation deletes the specifed virtual + /// network Gateway through Network resource provider. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual network gateway. + /// + /// + /// The cancellation token. + /// + public static async System.Threading.Tasks.Task DeleteAsync(this IVirtualNetworkGatewaysOperations operations, string resourceGroupName, string virtualNetworkGatewayName, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + await operations.DeleteWithHttpMessagesAsync(resourceGroupName, virtualNetworkGatewayName, null, cancellationToken).ConfigureAwait(false); + } + + /// + /// The Delete VirtualNetworkGateway operation deletes the specifed virtual + /// network Gateway through Network resource provider. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual network gateway. + /// + public static void BeginDelete(this IVirtualNetworkGatewaysOperations operations, string resourceGroupName, string virtualNetworkGatewayName) + { + System.Threading.Tasks.Task.Factory.StartNew(s => ((IVirtualNetworkGatewaysOperations)s).BeginDeleteAsync(resourceGroupName, virtualNetworkGatewayName), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// The Delete VirtualNetworkGateway operation deletes the specifed virtual + /// network Gateway through Network resource provider. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual network gateway. + /// + /// + /// The cancellation token. + /// + public static async System.Threading.Tasks.Task BeginDeleteAsync(this IVirtualNetworkGatewaysOperations operations, string resourceGroupName, string virtualNetworkGatewayName, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + await operations.BeginDeleteWithHttpMessagesAsync(resourceGroupName, virtualNetworkGatewayName, null, cancellationToken).ConfigureAwait(false); + } + + /// + /// The List VirtualNetworkGateways opertion retrieves all the virtual network + /// gateways stored. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + public static Microsoft.Rest.Azure.IPage List(this IVirtualNetworkGatewaysOperations operations, string resourceGroupName) + { + return System.Threading.Tasks.Task.Factory.StartNew(s => ((IVirtualNetworkGatewaysOperations)s).ListAsync(resourceGroupName), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// The List VirtualNetworkGateways opertion retrieves all the virtual network + /// gateways stored. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The cancellation token. + /// + public static async Task> ListAsync(this IVirtualNetworkGatewaysOperations operations, string resourceGroupName, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + using (var _result = await operations.ListWithHttpMessagesAsync(resourceGroupName, null, cancellationToken).ConfigureAwait(false)) + { + return _result.Body; + } + } + + /// + /// The Reset VirtualNetworkGateway operation resets the primary of the + /// virtual network gateway in the specified resource group through Network + /// resource provider. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual network gateway. + /// + /// + /// Parameters supplied to the Begin Reset Virtual Network Gateway operation + /// through Network resource provider. + /// + public static VirtualNetworkGatewayInner Reset(this IVirtualNetworkGatewaysOperations operations, string resourceGroupName, string virtualNetworkGatewayName, VirtualNetworkGatewayInner parameters) + { + return System.Threading.Tasks.Task.Factory.StartNew(s => ((IVirtualNetworkGatewaysOperations)s).ResetAsync(resourceGroupName, virtualNetworkGatewayName, parameters), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// The Reset VirtualNetworkGateway operation resets the primary of the + /// virtual network gateway in the specified resource group through Network + /// resource provider. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual network gateway. + /// + /// + /// Parameters supplied to the Begin Reset Virtual Network Gateway operation + /// through Network resource provider. + /// + /// + /// The cancellation token. + /// + public static async System.Threading.Tasks.Task ResetAsync(this IVirtualNetworkGatewaysOperations operations, string resourceGroupName, string virtualNetworkGatewayName, VirtualNetworkGatewayInner parameters, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + using (var _result = await operations.ResetWithHttpMessagesAsync(resourceGroupName, virtualNetworkGatewayName, parameters, null, cancellationToken).ConfigureAwait(false)) + { + return _result.Body; + } + } + + /// + /// The Reset VirtualNetworkGateway operation resets the primary of the + /// virtual network gateway in the specified resource group through Network + /// resource provider. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual network gateway. + /// + /// + /// Parameters supplied to the Begin Reset Virtual Network Gateway operation + /// through Network resource provider. + /// + public static VirtualNetworkGatewayInner BeginReset(this IVirtualNetworkGatewaysOperations operations, string resourceGroupName, string virtualNetworkGatewayName, VirtualNetworkGatewayInner parameters) + { + return System.Threading.Tasks.Task.Factory.StartNew(s => ((IVirtualNetworkGatewaysOperations)s).BeginResetAsync(resourceGroupName, virtualNetworkGatewayName, parameters), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// The Reset VirtualNetworkGateway operation resets the primary of the + /// virtual network gateway in the specified resource group through Network + /// resource provider. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual network gateway. + /// + /// + /// Parameters supplied to the Begin Reset Virtual Network Gateway operation + /// through Network resource provider. + /// + /// + /// The cancellation token. + /// + public static async System.Threading.Tasks.Task BeginResetAsync(this IVirtualNetworkGatewaysOperations operations, string resourceGroupName, string virtualNetworkGatewayName, VirtualNetworkGatewayInner parameters, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + using (var _result = await operations.BeginResetWithHttpMessagesAsync(resourceGroupName, virtualNetworkGatewayName, parameters, null, cancellationToken).ConfigureAwait(false)) + { + return _result.Body; + } + } + + /// + /// The Generatevpnclientpackage operation generates Vpn client package for + /// P2S client of the virtual network gateway in the specified resource group + /// through Network resource provider. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual network gateway. + /// + /// + /// VPN client Processor Architecture -Amd64/X86. Possible values include: + /// 'Amd64', 'X86' + /// + public static string Generatevpnclientpackage(this IVirtualNetworkGatewaysOperations operations, string resourceGroupName, string virtualNetworkGatewayName, string processorArchitecture = default(string)) + { + return System.Threading.Tasks.Task.Factory.StartNew(s => ((IVirtualNetworkGatewaysOperations)s).GeneratevpnclientpackageAsync(resourceGroupName, virtualNetworkGatewayName, processorArchitecture), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// The Generatevpnclientpackage operation generates Vpn client package for + /// P2S client of the virtual network gateway in the specified resource group + /// through Network resource provider. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual network gateway. + /// + /// + /// VPN client Processor Architecture -Amd64/X86. Possible values include: + /// 'Amd64', 'X86' + /// + /// + /// The cancellation token. + /// + public static async System.Threading.Tasks.Task GeneratevpnclientpackageAsync(this IVirtualNetworkGatewaysOperations operations, string resourceGroupName, string virtualNetworkGatewayName, string processorArchitecture = default(string), System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + using (var _result = await operations.GeneratevpnclientpackageWithHttpMessagesAsync(resourceGroupName, virtualNetworkGatewayName, processorArchitecture, null, cancellationToken).ConfigureAwait(false)) + { + return _result.Body; + } + } + + /// + /// The List VirtualNetworkGateways opertion retrieves all the virtual network + /// gateways stored. + /// + /// + /// 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 IVirtualNetworkGatewaysOperations operations, string nextPageLink) + { + return System.Threading.Tasks.Task.Factory.StartNew(s => ((IVirtualNetworkGatewaysOperations)s).ListNextAsync(nextPageLink), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// The List VirtualNetworkGateways opertion retrieves all the virtual network + /// gateways stored. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The NextLink from the previous successful call to List operation. + /// + /// + /// The cancellation token. + /// + public static async Task> ListNextAsync(this IVirtualNetworkGatewaysOperations 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/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/VirtualNetworkPeeringsOperations.cs b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/VirtualNetworkPeeringsOperations.cs new file mode 100644 index 000000000..5ec16a842 --- /dev/null +++ b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/VirtualNetworkPeeringsOperations.cs @@ -0,0 +1,1069 @@ +// 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 0.17.0.0 +// 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; + + /// + /// VirtualNetworkPeeringsOperations operations. + /// + internal partial class VirtualNetworkPeeringsOperations : Microsoft.Rest.IServiceOperations, IVirtualNetworkPeeringsOperations + { + /// + /// Initializes a new instance of the VirtualNetworkPeeringsOperations class. + /// + /// + /// Reference to the service client. + /// + /// + /// Thrown when a required parameter is null + /// + internal VirtualNetworkPeeringsOperations(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; } + + /// + /// The delete virtual network peering operation deletes the specified peering. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual network. + /// + /// + /// The name of the virtual network peering. + /// + /// + /// The headers that will be added to request. + /// + /// + /// The cancellation token. + /// + public async System.Threading.Tasks.Task DeleteWithHttpMessagesAsync(string resourceGroupName, string virtualNetworkName, string virtualNetworkPeeringName, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + // Send request + Microsoft.Rest.Azure.AzureOperationResponse _response = await BeginDeleteWithHttpMessagesAsync( + resourceGroupName, virtualNetworkName, virtualNetworkPeeringName, customHeaders, cancellationToken); + return await this.Client.GetPostOrDeleteOperationResultAsync(_response, customHeaders, cancellationToken); + } + + /// + /// The delete virtual network peering operation deletes the specified peering. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual network. + /// + /// + /// The name of the virtual network peering. + /// + /// + /// 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 + /// + /// + /// A response object containing the response body and response headers. + /// + public async System.Threading.Tasks.Task BeginDeleteWithHttpMessagesAsync(string resourceGroupName, string virtualNetworkName, string virtualNetworkPeeringName, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + if (resourceGroupName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "resourceGroupName"); + } + if (virtualNetworkName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "virtualNetworkName"); + } + if (virtualNetworkPeeringName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "virtualNetworkPeeringName"); + } + if (this.Client.ApiVersion == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.ApiVersion"); + } + if (this.Client.SubscriptionId == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.SubscriptionId"); + } + // 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("virtualNetworkName", virtualNetworkName); + tracingParameters.Add("virtualNetworkPeeringName", virtualNetworkPeeringName); + 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/virtualNetworks/{virtualNetworkName}/virtualNetworkPeerings/{virtualNetworkPeeringName}").ToString(); + _url = _url.Replace("{resourceGroupName}", System.Uri.EscapeDataString(resourceGroupName)); + _url = _url.Replace("{virtualNetworkName}", System.Uri.EscapeDataString(virtualNetworkName)); + _url = _url.Replace("{virtualNetworkPeeringName}", System.Uri.EscapeDataString(virtualNetworkPeeringName)); + _url = _url.Replace("{subscriptionId}", System.Uri.EscapeDataString(this.Client.SubscriptionId)); + System.Collections.Generic.List _queryParameters = new System.Collections.Generic.List(); + if (this.Client.ApiVersion != null) + { + _queryParameters.Add(string.Format("api-version={0}", System.Uri.EscapeDataString(this.Client.ApiVersion))); + } + if (_queryParameters.Count > 0) + { + _url += "?" + string.Join("&", _queryParameters); + } + // Create HTTP transport objects + System.Net.Http.HttpRequestMessage _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 != 200 && (int)_statusCode != 204 && (int)_statusCode != 202) + { + var ex = new Microsoft.Rest.Azure.CloudException(string.Format("Operation returned an invalid status code '{0}'", _statusCode)); + if (_httpResponse.Content != null) { + _responseContent = await _httpResponse.Content.ReadAsStringAsync().ConfigureAwait(false); + } + else { + _responseContent = string.Empty; + } + ex.Request = new Microsoft.Rest.HttpRequestMessageWrapper(_httpRequest, _requestContent); + ex.Response = new Microsoft.Rest.HttpResponseMessageWrapper(_httpResponse, _responseContent); + if (_httpResponse.Headers.Contains("x-ms-request-id")) + { + ex.RequestId = _httpResponse.Headers.GetValues("x-ms-request-id").FirstOrDefault(); + } + 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(); + } + if (_shouldTrace) + { + Microsoft.Rest.ServiceClientTracing.Exit(_invocationId, _result); + } + return _result; + } + + /// + /// The Get virtual network peering operation retreives information about the + /// specified virtual network peering. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual network. + /// + /// + /// The name of the virtual network peering. + /// + /// + /// 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 + /// + /// + /// A response object containing the response body and response headers. + /// + public async System.Threading.Tasks.Task> GetWithHttpMessagesAsync(string resourceGroupName, string virtualNetworkName, string virtualNetworkPeeringName, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + if (resourceGroupName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "resourceGroupName"); + } + if (virtualNetworkName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "virtualNetworkName"); + } + if (virtualNetworkPeeringName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "virtualNetworkPeeringName"); + } + if (this.Client.ApiVersion == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.ApiVersion"); + } + if (this.Client.SubscriptionId == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.SubscriptionId"); + } + // 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("virtualNetworkName", virtualNetworkName); + tracingParameters.Add("virtualNetworkPeeringName", virtualNetworkPeeringName); + 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/virtualNetworks/{virtualNetworkName}/virtualNetworkPeerings/{virtualNetworkPeeringName}").ToString(); + _url = _url.Replace("{resourceGroupName}", System.Uri.EscapeDataString(resourceGroupName)); + _url = _url.Replace("{virtualNetworkName}", System.Uri.EscapeDataString(virtualNetworkName)); + _url = _url.Replace("{virtualNetworkPeeringName}", System.Uri.EscapeDataString(virtualNetworkPeeringName)); + _url = _url.Replace("{subscriptionId}", System.Uri.EscapeDataString(this.Client.SubscriptionId)); + System.Collections.Generic.List _queryParameters = new System.Collections.Generic.List(); + if (this.Client.ApiVersion != null) + { + _queryParameters.Add(string.Format("api-version={0}", System.Uri.EscapeDataString(this.Client.ApiVersion))); + } + if (_queryParameters.Count > 0) + { + _url += "?" + string.Join("&", _queryParameters); + } + // Create HTTP transport objects + System.Net.Http.HttpRequestMessage _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); + CloudError _errorBody = Microsoft.Rest.Serialization.SafeJsonConvert.DeserializeObject(_responseContent, this.Client.DeserializationSettings); + if (_errorBody != null) + { + ex = new Microsoft.Rest.Azure.CloudException(_errorBody.Message); + 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 (_httpResponse.Headers.Contains("x-ms-request-id")) + { + ex.RequestId = _httpResponse.Headers.GetValues("x-ms-request-id").FirstOrDefault(); + } + 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; + } + + /// + /// The Put virtual network peering operation creates/updates a peering in the + /// specified virtual network + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual network. + /// + /// + /// The name of the peering. + /// + /// + /// Parameters supplied to the create/update virtual network peering operation + /// + /// + /// The headers that will be added to request. + /// + /// + /// The cancellation token. + /// + public async System.Threading.Tasks.Task> CreateOrUpdateWithHttpMessagesAsync(string resourceGroupName, string virtualNetworkName, string virtualNetworkPeeringName, VirtualNetworkPeeringInner virtualNetworkPeeringParameters, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + // Send Request + Microsoft.Rest.Azure.AzureOperationResponse _response = await BeginCreateOrUpdateWithHttpMessagesAsync( + resourceGroupName, virtualNetworkName, virtualNetworkPeeringName, virtualNetworkPeeringParameters, customHeaders, cancellationToken); + return await this.Client.GetPutOrPatchOperationResultAsync(_response, + customHeaders, + cancellationToken); + } + + /// + /// The Put virtual network peering operation creates/updates a peering in the + /// specified virtual network + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual network. + /// + /// + /// The name of the peering. + /// + /// + /// Parameters supplied to the create/update virtual network peering 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 + /// + /// + /// A response object containing the response body and response headers. + /// + public async System.Threading.Tasks.Task> BeginCreateOrUpdateWithHttpMessagesAsync(string resourceGroupName, string virtualNetworkName, string virtualNetworkPeeringName, VirtualNetworkPeeringInner virtualNetworkPeeringParameters, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + if (resourceGroupName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "resourceGroupName"); + } + if (virtualNetworkName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "virtualNetworkName"); + } + if (virtualNetworkPeeringName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "virtualNetworkPeeringName"); + } + if (virtualNetworkPeeringParameters == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "virtualNetworkPeeringParameters"); + } + if (this.Client.ApiVersion == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.ApiVersion"); + } + if (this.Client.SubscriptionId == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.SubscriptionId"); + } + // 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("virtualNetworkName", virtualNetworkName); + tracingParameters.Add("virtualNetworkPeeringName", virtualNetworkPeeringName); + tracingParameters.Add("virtualNetworkPeeringParameters", virtualNetworkPeeringParameters); + 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/virtualNetworks/{virtualNetworkName}/virtualNetworkPeerings/{virtualNetworkPeeringName}").ToString(); + _url = _url.Replace("{resourceGroupName}", System.Uri.EscapeDataString(resourceGroupName)); + _url = _url.Replace("{virtualNetworkName}", System.Uri.EscapeDataString(virtualNetworkName)); + _url = _url.Replace("{virtualNetworkPeeringName}", System.Uri.EscapeDataString(virtualNetworkPeeringName)); + _url = _url.Replace("{subscriptionId}", System.Uri.EscapeDataString(this.Client.SubscriptionId)); + System.Collections.Generic.List _queryParameters = new System.Collections.Generic.List(); + if (this.Client.ApiVersion != null) + { + _queryParameters.Add(string.Format("api-version={0}", System.Uri.EscapeDataString(this.Client.ApiVersion))); + } + if (_queryParameters.Count > 0) + { + _url += "?" + string.Join("&", _queryParameters); + } + // Create HTTP transport objects + System.Net.Http.HttpRequestMessage _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(virtualNetworkPeeringParameters != null) + { + _requestContent = Microsoft.Rest.Serialization.SafeJsonConvert.SerializeObject(virtualNetworkPeeringParameters, 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); + CloudError _errorBody = Microsoft.Rest.Serialization.SafeJsonConvert.DeserializeObject(_responseContent, this.Client.DeserializationSettings); + if (_errorBody != null) + { + ex = new Microsoft.Rest.Azure.CloudException(_errorBody.Message); + 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 (_httpResponse.Headers.Contains("x-ms-request-id")) + { + ex.RequestId = _httpResponse.Headers.GetValues("x-ms-request-id").FirstOrDefault(); + } + 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); + } + } + if (_shouldTrace) + { + Microsoft.Rest.ServiceClientTracing.Exit(_invocationId, _result); + } + return _result; + } + + /// + /// The List virtual network peerings opertion retrieves all the peerings in a + /// virtual network. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual network. + /// + /// + /// 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 + /// + /// + /// A response object containing the response body and response headers. + /// + public async System.Threading.Tasks.Task>> ListWithHttpMessagesAsync(string resourceGroupName, string virtualNetworkName, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + if (resourceGroupName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "resourceGroupName"); + } + if (virtualNetworkName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "virtualNetworkName"); + } + if (this.Client.ApiVersion == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.ApiVersion"); + } + if (this.Client.SubscriptionId == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.SubscriptionId"); + } + // 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("virtualNetworkName", virtualNetworkName); + 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/virtualNetworks/{virtualNetworkName}/virtualNetworkPeerings").ToString(); + _url = _url.Replace("{resourceGroupName}", System.Uri.EscapeDataString(resourceGroupName)); + _url = _url.Replace("{virtualNetworkName}", System.Uri.EscapeDataString(virtualNetworkName)); + _url = _url.Replace("{subscriptionId}", System.Uri.EscapeDataString(this.Client.SubscriptionId)); + System.Collections.Generic.List _queryParameters = new System.Collections.Generic.List(); + if (this.Client.ApiVersion != null) + { + _queryParameters.Add(string.Format("api-version={0}", System.Uri.EscapeDataString(this.Client.ApiVersion))); + } + if (_queryParameters.Count > 0) + { + _url += "?" + string.Join("&", _queryParameters); + } + // Create HTTP transport objects + System.Net.Http.HttpRequestMessage _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); + CloudError _errorBody = Microsoft.Rest.Serialization.SafeJsonConvert.DeserializeObject(_responseContent, this.Client.DeserializationSettings); + if (_errorBody != null) + { + ex = new Microsoft.Rest.Azure.CloudException(_errorBody.Message); + 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 (_httpResponse.Headers.Contains("x-ms-request-id")) + { + ex.RequestId = _httpResponse.Headers.GetValues("x-ms-request-id").FirstOrDefault(); + } + 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; + } + + /// + /// The List virtual network peerings opertion retrieves all the peerings in a + /// virtual network. + /// + /// + /// 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 + /// + /// + /// 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 += "?" + string.Join("&", _queryParameters); + } + // Create HTTP transport objects + System.Net.Http.HttpRequestMessage _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); + CloudError _errorBody = Microsoft.Rest.Serialization.SafeJsonConvert.DeserializeObject(_responseContent, this.Client.DeserializationSettings); + if (_errorBody != null) + { + ex = new Microsoft.Rest.Azure.CloudException(_errorBody.Message); + 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 (_httpResponse.Headers.Contains("x-ms-request-id")) + { + ex.RequestId = _httpResponse.Headers.GetValues("x-ms-request-id").FirstOrDefault(); + } + 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; + } + + } +} diff --git a/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/VirtualNetworkPeeringsOperationsExtensions.cs b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/VirtualNetworkPeeringsOperationsExtensions.cs new file mode 100644 index 000000000..8c361f570 --- /dev/null +++ b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/VirtualNetworkPeeringsOperationsExtensions.cs @@ -0,0 +1,341 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.Network +{ + using System.Threading.Tasks; + using Microsoft.Rest.Azure; + using Models; + + /// + /// Extension methods for VirtualNetworkPeeringsOperations. + /// + public static partial class VirtualNetworkPeeringsOperationsExtensions + { + /// + /// The delete virtual network peering operation deletes the specified peering. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual network. + /// + /// + /// The name of the virtual network peering. + /// + public static void Delete(this IVirtualNetworkPeeringsOperations operations, string resourceGroupName, string virtualNetworkName, string virtualNetworkPeeringName) + { + System.Threading.Tasks.Task.Factory.StartNew(s => ((IVirtualNetworkPeeringsOperations)s).DeleteAsync(resourceGroupName, virtualNetworkName, virtualNetworkPeeringName), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// The delete virtual network peering operation deletes the specified peering. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual network. + /// + /// + /// The name of the virtual network peering. + /// + /// + /// The cancellation token. + /// + public static async System.Threading.Tasks.Task DeleteAsync(this IVirtualNetworkPeeringsOperations operations, string resourceGroupName, string virtualNetworkName, string virtualNetworkPeeringName, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + await operations.DeleteWithHttpMessagesAsync(resourceGroupName, virtualNetworkName, virtualNetworkPeeringName, null, cancellationToken).ConfigureAwait(false); + } + + /// + /// The delete virtual network peering operation deletes the specified peering. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual network. + /// + /// + /// The name of the virtual network peering. + /// + public static void BeginDelete(this IVirtualNetworkPeeringsOperations operations, string resourceGroupName, string virtualNetworkName, string virtualNetworkPeeringName) + { + System.Threading.Tasks.Task.Factory.StartNew(s => ((IVirtualNetworkPeeringsOperations)s).BeginDeleteAsync(resourceGroupName, virtualNetworkName, virtualNetworkPeeringName), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// The delete virtual network peering operation deletes the specified peering. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual network. + /// + /// + /// The name of the virtual network peering. + /// + /// + /// The cancellation token. + /// + public static async System.Threading.Tasks.Task BeginDeleteAsync(this IVirtualNetworkPeeringsOperations operations, string resourceGroupName, string virtualNetworkName, string virtualNetworkPeeringName, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + await operations.BeginDeleteWithHttpMessagesAsync(resourceGroupName, virtualNetworkName, virtualNetworkPeeringName, null, cancellationToken).ConfigureAwait(false); + } + + /// + /// The Get virtual network peering operation retreives information about the + /// specified virtual network peering. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual network. + /// + /// + /// The name of the virtual network peering. + /// + public static VirtualNetworkPeeringInner Get(this IVirtualNetworkPeeringsOperations operations, string resourceGroupName, string virtualNetworkName, string virtualNetworkPeeringName) + { + return System.Threading.Tasks.Task.Factory.StartNew(s => ((IVirtualNetworkPeeringsOperations)s).GetAsync(resourceGroupName, virtualNetworkName, virtualNetworkPeeringName), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// The Get virtual network peering operation retreives information about the + /// specified virtual network peering. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual network. + /// + /// + /// The name of the virtual network peering. + /// + /// + /// The cancellation token. + /// + public static async System.Threading.Tasks.Task GetAsync(this IVirtualNetworkPeeringsOperations operations, string resourceGroupName, string virtualNetworkName, string virtualNetworkPeeringName, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + using (var _result = await operations.GetWithHttpMessagesAsync(resourceGroupName, virtualNetworkName, virtualNetworkPeeringName, null, cancellationToken).ConfigureAwait(false)) + { + return _result.Body; + } + } + + /// + /// The Put virtual network peering operation creates/updates a peering in the + /// specified virtual network + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual network. + /// + /// + /// The name of the peering. + /// + /// + /// Parameters supplied to the create/update virtual network peering operation + /// + public static VirtualNetworkPeeringInner CreateOrUpdate(this IVirtualNetworkPeeringsOperations operations, string resourceGroupName, string virtualNetworkName, string virtualNetworkPeeringName, VirtualNetworkPeeringInner virtualNetworkPeeringParameters) + { + return System.Threading.Tasks.Task.Factory.StartNew(s => ((IVirtualNetworkPeeringsOperations)s).CreateOrUpdateAsync(resourceGroupName, virtualNetworkName, virtualNetworkPeeringName, virtualNetworkPeeringParameters), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// The Put virtual network peering operation creates/updates a peering in the + /// specified virtual network + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual network. + /// + /// + /// The name of the peering. + /// + /// + /// Parameters supplied to the create/update virtual network peering operation + /// + /// + /// The cancellation token. + /// + public static async System.Threading.Tasks.Task CreateOrUpdateAsync(this IVirtualNetworkPeeringsOperations operations, string resourceGroupName, string virtualNetworkName, string virtualNetworkPeeringName, VirtualNetworkPeeringInner virtualNetworkPeeringParameters, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + using (var _result = await operations.CreateOrUpdateWithHttpMessagesAsync(resourceGroupName, virtualNetworkName, virtualNetworkPeeringName, virtualNetworkPeeringParameters, null, cancellationToken).ConfigureAwait(false)) + { + return _result.Body; + } + } + + /// + /// The Put virtual network peering operation creates/updates a peering in the + /// specified virtual network + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual network. + /// + /// + /// The name of the peering. + /// + /// + /// Parameters supplied to the create/update virtual network peering operation + /// + public static VirtualNetworkPeeringInner BeginCreateOrUpdate(this IVirtualNetworkPeeringsOperations operations, string resourceGroupName, string virtualNetworkName, string virtualNetworkPeeringName, VirtualNetworkPeeringInner virtualNetworkPeeringParameters) + { + return System.Threading.Tasks.Task.Factory.StartNew(s => ((IVirtualNetworkPeeringsOperations)s).BeginCreateOrUpdateAsync(resourceGroupName, virtualNetworkName, virtualNetworkPeeringName, virtualNetworkPeeringParameters), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// The Put virtual network peering operation creates/updates a peering in the + /// specified virtual network + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual network. + /// + /// + /// The name of the peering. + /// + /// + /// Parameters supplied to the create/update virtual network peering operation + /// + /// + /// The cancellation token. + /// + public static async System.Threading.Tasks.Task BeginCreateOrUpdateAsync(this IVirtualNetworkPeeringsOperations operations, string resourceGroupName, string virtualNetworkName, string virtualNetworkPeeringName, VirtualNetworkPeeringInner virtualNetworkPeeringParameters, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + using (var _result = await operations.BeginCreateOrUpdateWithHttpMessagesAsync(resourceGroupName, virtualNetworkName, virtualNetworkPeeringName, virtualNetworkPeeringParameters, null, cancellationToken).ConfigureAwait(false)) + { + return _result.Body; + } + } + + /// + /// The List virtual network peerings opertion retrieves all the peerings in a + /// virtual network. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual network. + /// + public static Microsoft.Rest.Azure.IPage List(this IVirtualNetworkPeeringsOperations operations, string resourceGroupName, string virtualNetworkName) + { + return System.Threading.Tasks.Task.Factory.StartNew(s => ((IVirtualNetworkPeeringsOperations)s).ListAsync(resourceGroupName, virtualNetworkName), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// The List virtual network peerings opertion retrieves all the peerings in a + /// virtual network. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual network. + /// + /// + /// The cancellation token. + /// + public static async Task> ListAsync(this IVirtualNetworkPeeringsOperations operations, string resourceGroupName, string virtualNetworkName, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + using (var _result = await operations.ListWithHttpMessagesAsync(resourceGroupName, virtualNetworkName, null, cancellationToken).ConfigureAwait(false)) + { + return _result.Body; + } + } + + /// + /// The List virtual network peerings opertion retrieves all the peerings in a + /// virtual network. + /// + /// + /// 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 IVirtualNetworkPeeringsOperations operations, string nextPageLink) + { + return System.Threading.Tasks.Task.Factory.StartNew(s => ((IVirtualNetworkPeeringsOperations)s).ListNextAsync(nextPageLink), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// The List virtual network peerings opertion retrieves all the peerings in a + /// virtual network. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The NextLink from the previous successful call to List operation. + /// + /// + /// The cancellation token. + /// + public static async Task> ListNextAsync(this IVirtualNetworkPeeringsOperations 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/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/VirtualNetworksOperations.cs b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/VirtualNetworksOperations.cs new file mode 100644 index 000000000..798b0644e --- /dev/null +++ b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/VirtualNetworksOperations.cs @@ -0,0 +1,1374 @@ +// 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 0.17.0.0 +// 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; + + /// + /// VirtualNetworksOperations operations. + /// + internal partial class VirtualNetworksOperations : Microsoft.Rest.IServiceOperations, IVirtualNetworksOperations + { + /// + /// Initializes a new instance of the VirtualNetworksOperations class. + /// + /// + /// Reference to the service client. + /// + /// + /// Thrown when a required parameter is null + /// + internal VirtualNetworksOperations(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; } + + /// + /// The Delete VirtualNetwork operation deletes the specifed virtual network + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual network. + /// + /// + /// The headers that will be added to request. + /// + /// + /// The cancellation token. + /// + public async System.Threading.Tasks.Task DeleteWithHttpMessagesAsync(string resourceGroupName, string virtualNetworkName, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + // Send request + Microsoft.Rest.Azure.AzureOperationResponse _response = await BeginDeleteWithHttpMessagesAsync( + resourceGroupName, virtualNetworkName, customHeaders, cancellationToken); + return await this.Client.GetPostOrDeleteOperationResultAsync(_response, customHeaders, cancellationToken); + } + + /// + /// The Delete VirtualNetwork operation deletes the specifed virtual network + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual network. + /// + /// + /// 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 + /// + /// + /// A response object containing the response body and response headers. + /// + public async System.Threading.Tasks.Task BeginDeleteWithHttpMessagesAsync(string resourceGroupName, string virtualNetworkName, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + if (resourceGroupName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "resourceGroupName"); + } + if (virtualNetworkName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "virtualNetworkName"); + } + if (this.Client.ApiVersion == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.ApiVersion"); + } + if (this.Client.SubscriptionId == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.SubscriptionId"); + } + // 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("virtualNetworkName", virtualNetworkName); + 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/virtualNetworks/{virtualNetworkName}").ToString(); + _url = _url.Replace("{resourceGroupName}", System.Uri.EscapeDataString(resourceGroupName)); + _url = _url.Replace("{virtualNetworkName}", System.Uri.EscapeDataString(virtualNetworkName)); + _url = _url.Replace("{subscriptionId}", System.Uri.EscapeDataString(this.Client.SubscriptionId)); + System.Collections.Generic.List _queryParameters = new System.Collections.Generic.List(); + if (this.Client.ApiVersion != null) + { + _queryParameters.Add(string.Format("api-version={0}", System.Uri.EscapeDataString(this.Client.ApiVersion))); + } + if (_queryParameters.Count > 0) + { + _url += "?" + string.Join("&", _queryParameters); + } + // Create HTTP transport objects + System.Net.Http.HttpRequestMessage _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 && (int)_statusCode != 200) + { + var ex = new Microsoft.Rest.Azure.CloudException(string.Format("Operation returned an invalid status code '{0}'", _statusCode)); + if (_httpResponse.Content != null) { + _responseContent = await _httpResponse.Content.ReadAsStringAsync().ConfigureAwait(false); + } + else { + _responseContent = string.Empty; + } + ex.Request = new Microsoft.Rest.HttpRequestMessageWrapper(_httpRequest, _requestContent); + ex.Response = new Microsoft.Rest.HttpResponseMessageWrapper(_httpResponse, _responseContent); + if (_httpResponse.Headers.Contains("x-ms-request-id")) + { + ex.RequestId = _httpResponse.Headers.GetValues("x-ms-request-id").FirstOrDefault(); + } + 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(); + } + if (_shouldTrace) + { + Microsoft.Rest.ServiceClientTracing.Exit(_invocationId, _result); + } + return _result; + } + + /// + /// The Get VirtualNetwork operation retrieves information about the specified + /// virtual network. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual network. + /// + /// + /// expand references resources. + /// + /// + /// 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 + /// + /// + /// A response object containing the response body and response headers. + /// + public async System.Threading.Tasks.Task> GetWithHttpMessagesAsync(string resourceGroupName, string virtualNetworkName, string expand = default(string), System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + if (resourceGroupName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "resourceGroupName"); + } + if (virtualNetworkName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "virtualNetworkName"); + } + if (this.Client.ApiVersion == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.ApiVersion"); + } + if (this.Client.SubscriptionId == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.SubscriptionId"); + } + // 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("virtualNetworkName", virtualNetworkName); + tracingParameters.Add("expand", expand); + 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/virtualNetworks/{virtualNetworkName}").ToString(); + _url = _url.Replace("{resourceGroupName}", System.Uri.EscapeDataString(resourceGroupName)); + _url = _url.Replace("{virtualNetworkName}", System.Uri.EscapeDataString(virtualNetworkName)); + _url = _url.Replace("{subscriptionId}", System.Uri.EscapeDataString(this.Client.SubscriptionId)); + System.Collections.Generic.List _queryParameters = new System.Collections.Generic.List(); + if (this.Client.ApiVersion != null) + { + _queryParameters.Add(string.Format("api-version={0}", System.Uri.EscapeDataString(this.Client.ApiVersion))); + } + if (expand != null) + { + _queryParameters.Add(string.Format("$expand={0}", System.Uri.EscapeDataString(expand))); + } + if (_queryParameters.Count > 0) + { + _url += "?" + string.Join("&", _queryParameters); + } + // Create HTTP transport objects + System.Net.Http.HttpRequestMessage _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); + CloudError _errorBody = Microsoft.Rest.Serialization.SafeJsonConvert.DeserializeObject(_responseContent, this.Client.DeserializationSettings); + if (_errorBody != null) + { + ex = new Microsoft.Rest.Azure.CloudException(_errorBody.Message); + 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 (_httpResponse.Headers.Contains("x-ms-request-id")) + { + ex.RequestId = _httpResponse.Headers.GetValues("x-ms-request-id").FirstOrDefault(); + } + 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; + } + + /// + /// The Put VirtualNetwork operation creates/updates a virtual network in the + /// specified resource group. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual network. + /// + /// + /// Parameters supplied to the create/update Virtual Network operation + /// + /// + /// The headers that will be added to request. + /// + /// + /// The cancellation token. + /// + public async System.Threading.Tasks.Task> CreateOrUpdateWithHttpMessagesAsync(string resourceGroupName, string virtualNetworkName, VirtualNetworkInner 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, virtualNetworkName, parameters, customHeaders, cancellationToken); + return await this.Client.GetPutOrPatchOperationResultAsync(_response, + customHeaders, + cancellationToken); + } + + /// + /// The Put VirtualNetwork operation creates/updates a virtual network in the + /// specified resource group. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual network. + /// + /// + /// Parameters supplied to the create/update Virtual Network 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 + /// + /// + /// A response object containing the response body and response headers. + /// + public async System.Threading.Tasks.Task> BeginCreateOrUpdateWithHttpMessagesAsync(string resourceGroupName, string virtualNetworkName, VirtualNetworkInner parameters, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + if (resourceGroupName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "resourceGroupName"); + } + if (virtualNetworkName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "virtualNetworkName"); + } + if (parameters == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "parameters"); + } + if (this.Client.ApiVersion == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.ApiVersion"); + } + if (this.Client.SubscriptionId == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.SubscriptionId"); + } + // 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("virtualNetworkName", virtualNetworkName); + 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/virtualNetworks/{virtualNetworkName}").ToString(); + _url = _url.Replace("{resourceGroupName}", System.Uri.EscapeDataString(resourceGroupName)); + _url = _url.Replace("{virtualNetworkName}", System.Uri.EscapeDataString(virtualNetworkName)); + _url = _url.Replace("{subscriptionId}", System.Uri.EscapeDataString(this.Client.SubscriptionId)); + System.Collections.Generic.List _queryParameters = new System.Collections.Generic.List(); + if (this.Client.ApiVersion != null) + { + _queryParameters.Add(string.Format("api-version={0}", System.Uri.EscapeDataString(this.Client.ApiVersion))); + } + if (_queryParameters.Count > 0) + { + _url += "?" + string.Join("&", _queryParameters); + } + // Create HTTP transport objects + System.Net.Http.HttpRequestMessage _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); + CloudError _errorBody = Microsoft.Rest.Serialization.SafeJsonConvert.DeserializeObject(_responseContent, this.Client.DeserializationSettings); + if (_errorBody != null) + { + ex = new Microsoft.Rest.Azure.CloudException(_errorBody.Message); + 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 (_httpResponse.Headers.Contains("x-ms-request-id")) + { + ex.RequestId = _httpResponse.Headers.GetValues("x-ms-request-id").FirstOrDefault(); + } + 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); + } + } + if (_shouldTrace) + { + Microsoft.Rest.ServiceClientTracing.Exit(_invocationId, _result); + } + return _result; + } + + /// + /// The list VirtualNetwork returns all Virtual Networks in a subscription + /// + /// + /// 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 + /// + /// + /// A response object containing the response body and response headers. + /// + public async System.Threading.Tasks.Task>> ListAllWithHttpMessagesAsync(System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + if (this.Client.ApiVersion == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.ApiVersion"); + } + if (this.Client.SubscriptionId == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.SubscriptionId"); + } + // 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("cancellationToken", cancellationToken); + Microsoft.Rest.ServiceClientTracing.Enter(_invocationId, this, "ListAll", tracingParameters); + } + // Construct URL + var _baseUrl = this.Client.BaseUri.AbsoluteUri; + var _url = new System.Uri(new System.Uri(_baseUrl + (_baseUrl.EndsWith("/") ? "" : "/")), "subscriptions/{subscriptionId}/providers/Microsoft.Network/virtualNetworks").ToString(); + _url = _url.Replace("{subscriptionId}", System.Uri.EscapeDataString(this.Client.SubscriptionId)); + System.Collections.Generic.List _queryParameters = new System.Collections.Generic.List(); + if (this.Client.ApiVersion != null) + { + _queryParameters.Add(string.Format("api-version={0}", System.Uri.EscapeDataString(this.Client.ApiVersion))); + } + if (_queryParameters.Count > 0) + { + _url += "?" + string.Join("&", _queryParameters); + } + // Create HTTP transport objects + System.Net.Http.HttpRequestMessage _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); + CloudError _errorBody = Microsoft.Rest.Serialization.SafeJsonConvert.DeserializeObject(_responseContent, this.Client.DeserializationSettings); + if (_errorBody != null) + { + ex = new Microsoft.Rest.Azure.CloudException(_errorBody.Message); + 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 (_httpResponse.Headers.Contains("x-ms-request-id")) + { + ex.RequestId = _httpResponse.Headers.GetValues("x-ms-request-id").FirstOrDefault(); + } + 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; + } + + /// + /// The list VirtualNetwork returns all Virtual Networks in a resource group + /// + /// + /// The name of the resource group. + /// + /// + /// 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 + /// + /// + /// A response object containing the response body and response headers. + /// + public async System.Threading.Tasks.Task>> ListWithHttpMessagesAsync(string resourceGroupName, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + if (resourceGroupName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "resourceGroupName"); + } + if (this.Client.ApiVersion == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.ApiVersion"); + } + if (this.Client.SubscriptionId == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.SubscriptionId"); + } + // 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("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/virtualNetworks").ToString(); + _url = _url.Replace("{resourceGroupName}", System.Uri.EscapeDataString(resourceGroupName)); + _url = _url.Replace("{subscriptionId}", System.Uri.EscapeDataString(this.Client.SubscriptionId)); + System.Collections.Generic.List _queryParameters = new System.Collections.Generic.List(); + if (this.Client.ApiVersion != null) + { + _queryParameters.Add(string.Format("api-version={0}", System.Uri.EscapeDataString(this.Client.ApiVersion))); + } + if (_queryParameters.Count > 0) + { + _url += "?" + string.Join("&", _queryParameters); + } + // Create HTTP transport objects + System.Net.Http.HttpRequestMessage _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); + CloudError _errorBody = Microsoft.Rest.Serialization.SafeJsonConvert.DeserializeObject(_responseContent, this.Client.DeserializationSettings); + if (_errorBody != null) + { + ex = new Microsoft.Rest.Azure.CloudException(_errorBody.Message); + 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 (_httpResponse.Headers.Contains("x-ms-request-id")) + { + ex.RequestId = _httpResponse.Headers.GetValues("x-ms-request-id").FirstOrDefault(); + } + 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; + } + + /// + /// The list VirtualNetwork returns all Virtual Networks in a subscription + /// + /// + /// 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 + /// + /// + /// A response object containing the response body and response headers. + /// + public async System.Threading.Tasks.Task>> ListAllNextWithHttpMessagesAsync(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, "ListAllNext", 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 += "?" + string.Join("&", _queryParameters); + } + // Create HTTP transport objects + System.Net.Http.HttpRequestMessage _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); + CloudError _errorBody = Microsoft.Rest.Serialization.SafeJsonConvert.DeserializeObject(_responseContent, this.Client.DeserializationSettings); + if (_errorBody != null) + { + ex = new Microsoft.Rest.Azure.CloudException(_errorBody.Message); + 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 (_httpResponse.Headers.Contains("x-ms-request-id")) + { + ex.RequestId = _httpResponse.Headers.GetValues("x-ms-request-id").FirstOrDefault(); + } + 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; + } + + /// + /// The list VirtualNetwork returns all Virtual Networks in a resource group + /// + /// + /// 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 + /// + /// + /// 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 += "?" + string.Join("&", _queryParameters); + } + // Create HTTP transport objects + System.Net.Http.HttpRequestMessage _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); + CloudError _errorBody = Microsoft.Rest.Serialization.SafeJsonConvert.DeserializeObject(_responseContent, this.Client.DeserializationSettings); + if (_errorBody != null) + { + ex = new Microsoft.Rest.Azure.CloudException(_errorBody.Message); + 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 (_httpResponse.Headers.Contains("x-ms-request-id")) + { + ex.RequestId = _httpResponse.Headers.GetValues("x-ms-request-id").FirstOrDefault(); + } + 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; + } + + } +} diff --git a/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/VirtualNetworksOperationsExtensions.cs b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/VirtualNetworksOperationsExtensions.cs new file mode 100644 index 000000000..a62a64a15 --- /dev/null +++ b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Generated/VirtualNetworksOperationsExtensions.cs @@ -0,0 +1,369 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.Network +{ + using System.Threading.Tasks; + using Microsoft.Rest.Azure; + using Models; + + /// + /// Extension methods for VirtualNetworksOperations. + /// + public static partial class VirtualNetworksOperationsExtensions + { + /// + /// The Delete VirtualNetwork operation deletes the specifed virtual network + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual network. + /// + public static void Delete(this IVirtualNetworksOperations operations, string resourceGroupName, string virtualNetworkName) + { + System.Threading.Tasks.Task.Factory.StartNew(s => ((IVirtualNetworksOperations)s).DeleteAsync(resourceGroupName, virtualNetworkName), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// The Delete VirtualNetwork operation deletes the specifed virtual network + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual network. + /// + /// + /// The cancellation token. + /// + public static async System.Threading.Tasks.Task DeleteAsync(this IVirtualNetworksOperations operations, string resourceGroupName, string virtualNetworkName, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + await operations.DeleteWithHttpMessagesAsync(resourceGroupName, virtualNetworkName, null, cancellationToken).ConfigureAwait(false); + } + + /// + /// The Delete VirtualNetwork operation deletes the specifed virtual network + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual network. + /// + public static void BeginDelete(this IVirtualNetworksOperations operations, string resourceGroupName, string virtualNetworkName) + { + System.Threading.Tasks.Task.Factory.StartNew(s => ((IVirtualNetworksOperations)s).BeginDeleteAsync(resourceGroupName, virtualNetworkName), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// The Delete VirtualNetwork operation deletes the specifed virtual network + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual network. + /// + /// + /// The cancellation token. + /// + public static async System.Threading.Tasks.Task BeginDeleteAsync(this IVirtualNetworksOperations operations, string resourceGroupName, string virtualNetworkName, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + await operations.BeginDeleteWithHttpMessagesAsync(resourceGroupName, virtualNetworkName, null, cancellationToken).ConfigureAwait(false); + } + + /// + /// The Get VirtualNetwork operation retrieves information about the specified + /// virtual network. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual network. + /// + /// + /// expand references resources. + /// + public static VirtualNetworkInner Get(this IVirtualNetworksOperations operations, string resourceGroupName, string virtualNetworkName, string expand = default(string)) + { + return System.Threading.Tasks.Task.Factory.StartNew(s => ((IVirtualNetworksOperations)s).GetAsync(resourceGroupName, virtualNetworkName, expand), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// The Get VirtualNetwork operation retrieves information about the specified + /// virtual network. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual network. + /// + /// + /// expand references resources. + /// + /// + /// The cancellation token. + /// + public static async System.Threading.Tasks.Task GetAsync(this IVirtualNetworksOperations operations, string resourceGroupName, string virtualNetworkName, string expand = default(string), System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + using (var _result = await operations.GetWithHttpMessagesAsync(resourceGroupName, virtualNetworkName, expand, null, cancellationToken).ConfigureAwait(false)) + { + return _result.Body; + } + } + + /// + /// The Put VirtualNetwork operation creates/updates a virtual network in the + /// specified resource group. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual network. + /// + /// + /// Parameters supplied to the create/update Virtual Network operation + /// + public static VirtualNetworkInner CreateOrUpdate(this IVirtualNetworksOperations operations, string resourceGroupName, string virtualNetworkName, VirtualNetworkInner parameters) + { + return System.Threading.Tasks.Task.Factory.StartNew(s => ((IVirtualNetworksOperations)s).CreateOrUpdateAsync(resourceGroupName, virtualNetworkName, parameters), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// The Put VirtualNetwork operation creates/updates a virtual network in the + /// specified resource group. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual network. + /// + /// + /// Parameters supplied to the create/update Virtual Network operation + /// + /// + /// The cancellation token. + /// + public static async System.Threading.Tasks.Task CreateOrUpdateAsync(this IVirtualNetworksOperations operations, string resourceGroupName, string virtualNetworkName, VirtualNetworkInner parameters, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + using (var _result = await operations.CreateOrUpdateWithHttpMessagesAsync(resourceGroupName, virtualNetworkName, parameters, null, cancellationToken).ConfigureAwait(false)) + { + return _result.Body; + } + } + + /// + /// The Put VirtualNetwork operation creates/updates a virtual network in the + /// specified resource group. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual network. + /// + /// + /// Parameters supplied to the create/update Virtual Network operation + /// + public static VirtualNetworkInner BeginCreateOrUpdate(this IVirtualNetworksOperations operations, string resourceGroupName, string virtualNetworkName, VirtualNetworkInner parameters) + { + return System.Threading.Tasks.Task.Factory.StartNew(s => ((IVirtualNetworksOperations)s).BeginCreateOrUpdateAsync(resourceGroupName, virtualNetworkName, parameters), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// The Put VirtualNetwork operation creates/updates a virtual network in the + /// specified resource group. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the virtual network. + /// + /// + /// Parameters supplied to the create/update Virtual Network operation + /// + /// + /// The cancellation token. + /// + public static async System.Threading.Tasks.Task BeginCreateOrUpdateAsync(this IVirtualNetworksOperations operations, string resourceGroupName, string virtualNetworkName, VirtualNetworkInner parameters, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + using (var _result = await operations.BeginCreateOrUpdateWithHttpMessagesAsync(resourceGroupName, virtualNetworkName, parameters, null, cancellationToken).ConfigureAwait(false)) + { + return _result.Body; + } + } + + /// + /// The list VirtualNetwork returns all Virtual Networks in a subscription + /// + /// + /// The operations group for this extension method. + /// + public static Microsoft.Rest.Azure.IPage ListAll(this IVirtualNetworksOperations operations) + { + return System.Threading.Tasks.Task.Factory.StartNew(s => ((IVirtualNetworksOperations)s).ListAllAsync(), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// The list VirtualNetwork returns all Virtual Networks in a subscription + /// + /// + /// The operations group for this extension method. + /// + /// + /// The cancellation token. + /// + public static async Task> ListAllAsync(this IVirtualNetworksOperations operations, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + using (var _result = await operations.ListAllWithHttpMessagesAsync(null, cancellationToken).ConfigureAwait(false)) + { + return _result.Body; + } + } + + /// + /// The list VirtualNetwork returns all Virtual Networks in a resource group + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + public static Microsoft.Rest.Azure.IPage List(this IVirtualNetworksOperations operations, string resourceGroupName) + { + return System.Threading.Tasks.Task.Factory.StartNew(s => ((IVirtualNetworksOperations)s).ListAsync(resourceGroupName), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// The list VirtualNetwork returns all Virtual Networks in a resource group + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The cancellation token. + /// + public static async Task> ListAsync(this IVirtualNetworksOperations operations, string resourceGroupName, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + using (var _result = await operations.ListWithHttpMessagesAsync(resourceGroupName, null, cancellationToken).ConfigureAwait(false)) + { + return _result.Body; + } + } + + /// + /// The list VirtualNetwork returns all Virtual Networks in a subscription + /// + /// + /// The operations group for this extension method. + /// + /// + /// The NextLink from the previous successful call to List operation. + /// + public static Microsoft.Rest.Azure.IPage ListAllNext(this IVirtualNetworksOperations operations, string nextPageLink) + { + return System.Threading.Tasks.Task.Factory.StartNew(s => ((IVirtualNetworksOperations)s).ListAllNextAsync(nextPageLink), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// The list VirtualNetwork returns all Virtual Networks in a subscription + /// + /// + /// The operations group for this extension method. + /// + /// + /// The NextLink from the previous successful call to List operation. + /// + /// + /// The cancellation token. + /// + public static async Task> ListAllNextAsync(this IVirtualNetworksOperations operations, string nextPageLink, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + using (var _result = await operations.ListAllNextWithHttpMessagesAsync(nextPageLink, null, cancellationToken).ConfigureAwait(false)) + { + return _result.Body; + } + } + + /// + /// The list VirtualNetwork returns all Virtual Networks in a resource group + /// + /// + /// 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 IVirtualNetworksOperations operations, string nextPageLink) + { + return System.Threading.Tasks.Task.Factory.StartNew(s => ((IVirtualNetworksOperations)s).ListNextAsync(nextPageLink), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// The list VirtualNetwork returns all Virtual Networks in a resource group + /// + /// + /// The operations group for this extension method. + /// + /// + /// The NextLink from the previous successful call to List operation. + /// + /// + /// The cancellation token. + /// + public static async Task> ListNextAsync(this IVirtualNetworksOperations 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/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Microsoft.Azure.Management.V2.Network.xproj b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Microsoft.Azure.Management.V2.Network.xproj new file mode 100644 index 000000000..6c7a1bbb7 --- /dev/null +++ b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/Microsoft.Azure.Management.V2.Network.xproj @@ -0,0 +1,21 @@ + + + + 14.0 + $(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion) + + + + 4f22b186-deb4-4b95-ba58-0187f0e33003 + Microsoft.Azure.Management.V2.Network + .\obj + .\bin\ + + + 2.0 + + + + + + \ No newline at end of file diff --git a/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/MissingClasses.cs b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/MissingClasses.cs new file mode 100644 index 000000000..87554a6de --- /dev/null +++ b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/MissingClasses.cs @@ -0,0 +1,9 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; + +namespace Microsoft.Azure.Management.Network.Models +{ + +} diff --git a/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/NetworkImpl.cs b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/NetworkImpl.cs new file mode 100644 index 000000000..5c9ee7bd7 --- /dev/null +++ b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/NetworkImpl.cs @@ -0,0 +1,197 @@ +/** +* Copyright (c) Microsoft Corporation. All rights reserved. +* Licensed under the MIT License. See License.txt in the project root for +* license information. +*/ + +namespace Microsoft.Azure.Management.V2.Network +{ + + using Microsoft.Azure.Management.Network.Models; + using Microsoft.Azure.Management.V2.Resource.Core; + using System.Threading; + using Microsoft.Rest; + using Microsoft.Azure.Management.V2.Network.Network.Update; + using System.Collections.Generic; + using System.Threading.Tasks; + using Microsoft.Azure.Management.V2.Network.Network.Definition; + using Microsoft.Azure.Management.V2.Resource.Core.ResourceActions; + using Microsoft.Azure.Management.V2.Resource; + using Management.Network; + using System.Collections.ObjectModel; + + /// + /// Implementation for {@link Network} and its create and update interfaces. + /// + public partial class NetworkImpl : + GroupableResource, + INetwork, + IDefinition, + IUpdate + { + private VirtualNetworksOperations innerCollection; + private Dictionary subnets; + private string name; + private VirtualNetworkInner inner; + private IVirtualNetworksOperations innerCollection1; + private NetworkManager myManager; + + internal NetworkImpl(string name, VirtualNetworkInner innerModel, VirtualNetworksOperations innerCollection, NetworkManager networkManager) : + base(name, innerModel, networkManager) + { + this.innerCollection = innerCollection; + this.InitializeSubnetsFromInner(); + } + + private void InitializeSubnetsFromInner() + { + this.subnets = new Dictionary(); + foreach (SubnetInner subnetInner in this.Inner.Subnets) + { + SubnetImpl subnet = new SubnetImpl(subnetInner, this); + this.subnets.Add(subnetInner.Name, subnet); + } + } + + public override Task Refresh() + { + var task = new Task(() => + { + var response = this.innerCollection.Get(this.ResourceGroupName, this.Name); + SetInner(response); + return this; + }); + + task.Start(); + return task; + } + + internal NetworkImpl WithSubnet(SubnetImpl subnet) + { + this.Inner.Subnets.Add(subnet.Inner); + this.subnets.Add(subnet.Name, subnet); + return this; + } + + public NetworkImpl WithDnsServer(string ipAddress) + { + this.Inner.DhcpOptions.DnsServers.Add(ipAddress); + return this; + } + + public NetworkImpl WithSubnet(string name, string cidr) + { + return this.DefineSubnet(name) + .WithAddressPrefix(cidr) + .Attach(); + } + + public NetworkImpl WithSubnets(IDictionary nameCidrPairs) + { + List azureSubnets = new List(); + this.Inner.Subnets = azureSubnets; + this.InitializeSubnetsFromInner(); + foreach (KeyValuePair pair in nameCidrPairs) + { + this.WithSubnet(pair.Key, pair.Value); + } + + return this; + } + + public NetworkImpl WithoutSubnet(string name) + { + // Remove from cache + this.subnets.Remove(name); + + // Remove from inner + IList innerSubnets = this.Inner.Subnets; + for (int i = 0; i < innerSubnets.Count; i++) + { + if (innerSubnets[i].Name.Equals(name, System.StringComparison.OrdinalIgnoreCase)) + { + innerSubnets.Remove(innerSubnets[i]); + break; + } + } + + return this; + } + + public NetworkImpl WithAddressSpace(string cidr) + { + this.Inner.AddressSpace.AddressPrefixes.Add(cidr); + return this; + } + + public SubnetImpl DefineSubnet(string name) + { + SubnetInner inner = new SubnetInner(); + inner.Name = name; + return new SubnetImpl(inner, this); + } + + public IList AddressSpaces + { + get + { + return new ReadOnlyCollection(this.Inner.AddressSpace.AddressPrefixes); + } + } + + public IList DnsServerIPs + { + get + { + return new ReadOnlyCollection(this.Inner.DhcpOptions.DnsServers); + } + } + public IDictionary Subnets() + { + return new ReadOnlyDictionary(this.subnets); + } + + private void EnsureCreationPrerequisites() + { + // Ensure address spaces + if (this.AddressSpaces.Count == 0) + { + this.WithAddressSpace("10.0.0.0/16"); + } + + if (IsInCreateMode) + { + // Create a subnet as needed, covering the entire first address space + if (this.Inner.Subnets.Count == 0) + { + this.WithSubnet("subnet1", this.AddressSpaces[0]); + } + } + } + + public SubnetImpl UpdateSubnet(string name) + { + return (SubnetImpl)this.subnets[name]; + } + + + public async override Task CreateResourceAsync(CancellationToken cancellationToken = default(CancellationToken)) + { + + NetworkImpl self = this; + this.EnsureCreationPrerequisites(); + var data = await this.innerCollection.CreateOrUpdateAsync(this.ResourceGroupName, this.Name, this.Inner); + self.SetInner(data); + this.InitializeSubnetsFromInner(); + return this; + } + } +} \ No newline at end of file diff --git a/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/NetworkInterfaceImpl.cs b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/NetworkInterfaceImpl.cs new file mode 100644 index 000000000..046eb4063 --- /dev/null +++ b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/NetworkInterfaceImpl.cs @@ -0,0 +1,464 @@ +/** +* Copyright (c) Microsoft Corporation. All rights reserved. +* Licensed under the MIT License. See License.txt in the project root for +* license information. +*/ + +namespace Microsoft.Azure.Management.V2.Network +{ + + using Microsoft.Azure.Management.V2.Network.NetworkInterface.Definition; + using System.Collections.Generic; + using Microsoft.Azure.Management.V2.Network.NetworkInterface.Update; + using System.Threading; + using Microsoft.Azure.Management.Network.Models; + using Microsoft.Azure.Management.V2.Resource.Core.ResourceActions; + using Microsoft.Azure.Management.V2.Resource.Core; + using Microsoft.Rest; + using Microsoft.Azure.Management.V2.Resource; + using System.Threading.Tasks; + using Management.Network; + using System; + using System.Collections.ObjectModel; + + /// + /// Implementation for {@link NetworkInterface} and its create and update interfaces. + /// + public partial class NetworkInterfaceImpl : + GroupableResource, + INetworkInterface, + IDefinition, + NetworkInterface.Update.IUpdate + { + private INetworkInterfacesOperations client; + private string nicName; + private NicIpConfigurationImpl nicPrimaryIpConfiguration; + private IList nicIpConfigurations; + private string creatableNetworkSecurityGroupKey; + private INetworkSecurityGroup existingNetworkSecurityGroupToAssociate; + private IPublicIpAddress primaryPublicIp; + private INetwork primaryNetwork; + private INetworkSecurityGroup networkSecurityGroup; + private ResourceNamer namer; + + internal NetworkInterfaceImpl(string name, NetworkInterfaceInner innerModel, INetworkInterfacesOperations client, NetworkManager networkManager) : + base(name, innerModel, networkManager) + { + + this.client = client; + this.nicName = name; + this.namer = new ResourceNamer(this.nicName); + this.InitializeNicIpConfigurations(); + } + + public ResourceNamer Namer + { + get + { + return this.namer; + } + } + + public async override Task Refresh() + { + var response = await client.GetWithHttpMessagesAsync(this.ResourceGroupName, this.nicName); + SetInner(response.Body); + return this; + } + + public NetworkInterfaceImpl WithNewPrimaryNetwork(ICreatable creatable) + { + this.PrimaryIpConfiguration().WithNewNetwork(creatable); + return this; + } + + public NetworkInterfaceImpl WithNewPrimaryNetwork(string name, string addressSpaceCidr) + { + this.PrimaryIpConfiguration().WithNewNetwork(name, addressSpaceCidr); + return this; + } + + public NetworkInterfaceImpl WithNewPrimaryNetwork(string addressSpaceCidr) + { + this.PrimaryIpConfiguration().WithNewNetwork(addressSpaceCidr); + return this; + } + + public NetworkInterfaceImpl WithExistingPrimaryNetwork(INetwork network) + { + this.PrimaryIpConfiguration().WithExistingNetwork(network); + return this; + } + + public NetworkInterfaceImpl WithNewPrimaryPublicIpAddress(ICreatable creatable) + { + + this.PrimaryIpConfiguration().WithNewPublicIpAddress(creatable); + return this; + } + + public NetworkInterfaceImpl WithNewPrimaryPublicIpAddress() + { + this.PrimaryIpConfiguration().WithNewPublicIpAddress(); + return this; + } + + public NetworkInterfaceImpl WithNewPrimaryPublicIpAddress(string leafDnsLabel) + { + this.PrimaryIpConfiguration().WithNewPublicIpAddress(leafDnsLabel); + return this; + } + + public NetworkInterfaceImpl WithoutPrimaryPublicIpAddress() + { + this.PrimaryIpConfiguration().WithoutPublicIpAddress(); + return this; + } + + public NetworkInterfaceImpl WithExistingPrimaryPublicIpAddress(IPublicIpAddress publicIpAddress) + { + this.PrimaryIpConfiguration().WithExistingPublicIpAddress(publicIpAddress); + return this; + } + + public NetworkInterfaceImpl WithPrimaryPrivateIpAddressDynamic() + { + this.PrimaryIpConfiguration().WithPrivateIpAddressDynamic(); + return this; + } + + public NetworkInterfaceImpl WithPrimaryPrivateIpAddressStatic(string staticPrivateIpAddress) + { + this.PrimaryIpConfiguration().WithPrivateIpAddressStatic(staticPrivateIpAddress); + return this; + } + + public NetworkInterfaceImpl WithNewNetworkSecurityGroup(ICreatable creatable) + { + if (this.creatableNetworkSecurityGroupKey == null) + { + this.creatableNetworkSecurityGroupKey = creatable.Key; + this.AddCreatableDependency(creatable as IResourceCreator); + } + + return this; + } + + public NetworkInterfaceImpl WithExistingNetworkSecurityGroup(INetworkSecurityGroup networkSecurityGroup) + { + + this.existingNetworkSecurityGroupToAssociate = networkSecurityGroup; + return this; + } + + public NetworkInterfaceImpl WithoutNetworkSecurityGroup() + { + this.Inner.NetworkSecurityGroup = null; + return this; + } + + public NicIpConfiguration.UpdateDefinition.IBlank DefineSecondaryIpConfiguration(string name) + { + return PrepareNewNicIpConfiguration(name); + } + + public NicIpConfiguration.Update.IUpdate UpdateIpConfiguration(string name) + { + + foreach (INicIpConfiguration nicIpConfiguration in this.nicIpConfigurations) + { + if (name.Equals(nicIpConfiguration.Name, StringComparison.OrdinalIgnoreCase)) + { + return (NicIpConfigurationImpl)nicIpConfiguration; + } + } + + throw new Exception("IP configuration '" + name + "' not found"); + } + + public NetworkInterfaceImpl WithIpForwarding() + { + this.Inner.EnableIPForwarding = true; + + return this; + } + + public NetworkInterfaceImpl WithoutIpForwarding() + { + this.Inner.EnableIPForwarding = false; + return this; + } + + public NetworkInterfaceImpl WithDnsServer(string ipAddress) + { + this.DnsServerIps.Add(ipAddress); + return this; + } + + public NetworkInterfaceImpl WithoutDnsServer(string ipAddress) + { + this.DnsServerIps.Remove(ipAddress); + return this; + } + + public NetworkInterfaceImpl WithAzureDnsServer() + { + this.DnsServerIps.Clear(); + return this; + } + + public NetworkInterfaceImpl WithSubnet(string name) + { + this.PrimaryIpConfiguration().WithSubnet(name); + return this; + } + + public NetworkInterfaceImpl WithInternalDnsNameLabel(string dnsNameLabel) + { + this.Inner.DnsSettings.InternalDnsNameLabel = dnsNameLabel; + return this; + } + + public bool? IsIpForwardingEnabled + { + get + { + return this.Inner.EnableIPForwarding; + } + } + public string MacAddress + { + get + { + return this.Inner.MacAddress; + } + } + public string InternalDnsNameLabel + { + get + { + return this.Inner.DnsSettings.InternalDnsNameLabel; + } + } + public string InternalFqdn + { + get + { + return this.Inner.DnsSettings.InternalFqdn; + } + } + public IList DnsServers + { + get + { + return this.DnsServerIps; + + + return null; + } + } + public IPublicIpAddress PrimaryPublicIpAddress() + { + + if (this.primaryPublicIp == null) + { + this.primaryPublicIp = this.PrimaryIpConfiguration().PublicIpAddress(); + } + return primaryPublicIp; + } + + public string PrimarySubnetId + { + get + { + return this.PrimaryIpConfiguration().SubnetId; + } + } + public INetwork PrimaryNetwork() + { + if (this.primaryNetwork == null) + { + this.primaryNetwork = this.PrimaryIpConfiguration().Network(); + } + return this.primaryNetwork; + } + + public string PrimaryPrivateIp + { + get + { + return this.PrimaryIpConfiguration().PrivateIp; + } + } + + public string PrimaryPrivateIpAllocationMethod + { + get + { + return this.PrimaryIpConfiguration().PrivateIpAllocationMethod; + } + } + public IList IpConfigurations() + { + return new ReadOnlyCollection(this.nicIpConfigurations); + } + + public string NetworkSecurityGroupId + { + get + { + if (this.Inner.NetworkSecurityGroup != null) + { + return this.Inner.NetworkSecurityGroup.Id; + } + + return null; + } + } + public INetworkSecurityGroup NetworkSecurityGroup() + { + + if (this.networkSecurityGroup == null && this.NetworkSecurityGroup().Id != null) + { + String id = this.NetworkSecurityGroup().Id; + this.networkSecurityGroup = base.MyManager + .NetworkSecurityGroups + .GetByGroup(ResourceUtils.GroupFromResourceId(id), + ResourceUtils.NameFromResourceId(id)); + } + + return this.networkSecurityGroup; + } + + /// the primary IP configuration of the network interface + public NicIpConfigurationImpl PrimaryIpConfiguration() + { + + if (this.nicPrimaryIpConfiguration != null) + { + return this.nicPrimaryIpConfiguration; + } + + if (this.IsInCreateMode) + { + this.nicPrimaryIpConfiguration = PrepareNewNicIpConfiguration("primary-nic-config"); + WithIpConfiguration(this.nicPrimaryIpConfiguration); + } + else + { + // Currently Azure supports only one IP configuration and that is the primary + // hence we pick the first one here. + // when Azure support multiple IP configurations then there will be a flag in + // the IPConfiguration or a property in the network interface to identify the + // primary so below logic will be changed. + this.nicPrimaryIpConfiguration = (NicIpConfigurationImpl)this.nicIpConfigurations[0]; + } + + return this.nicPrimaryIpConfiguration; + } + + public async override Task CreateResourceAsync(CancellationToken cancellationToken) + { + + NetworkInterfaceImpl self = this; + NicIpConfigurationImpl.EnsureConfigurations(this.nicIpConfigurations); + var data= await this.client.CreateOrUpdateAsync(this.ResourceGroupName, this.nicName, this.Inner); + this.SetInner(data); + this.ClearCachedRelatedResources(); + this.InitializeNicIpConfigurations(); + + return this; + } + + /// the list of DNS server IPs from the DNS settings + private IList DnsServerIps + { + get + { + if (this.Inner.DnsSettings.DnsServers == null) + { + this.Inner.DnsSettings.DnsServers = new List(); + } + + return this.Inner.DnsSettings.DnsServers; + } + } + /// + /// Initializes the list of {@link NicIpConfiguration} that wraps {@link NetworkInterfaceInner#IpConfigurations()}. + /// + private void InitializeNicIpConfigurations() + { + if (this.Inner.IpConfigurations == null) + { + this.Inner.IpConfigurations = new List(); + } + + this.nicIpConfigurations = new List(); + foreach (NetworkInterfaceIPConfigurationInner ipConfig in this.Inner.IpConfigurations) + { + NicIpConfigurationImpl nicIpConfiguration = new NicIpConfigurationImpl(ipConfig, + this, + base.MyManager, + false); + this.nicIpConfigurations.Add(nicIpConfiguration); + } + } + + /// + /// Gets a new IP configuration child resource {@link NicIpConfiguration} wrapping {@link NetworkInterfaceIPConfiguration}. + /// + /// name the name for the new ip configuration + /// {@link NicIpConfiguration} + private NicIpConfigurationImpl PrepareNewNicIpConfiguration(string name) + { + + NicIpConfigurationImpl nicIpConfiguration = NicIpConfigurationImpl.PrepareNicIpConfiguration( + name, + this, + base.MyManager); + return nicIpConfiguration; + } + + private void ClearCachedRelatedResources() + { + this.primaryPublicIp = null; + this.primaryNetwork = null; + this.networkSecurityGroup = null; + this.nicPrimaryIpConfiguration = null; + } + + internal NetworkInterfaceImpl WithIpConfiguration(NicIpConfigurationImpl nicIpConfiguration) + { + this.nicIpConfigurations.Add(nicIpConfiguration); + this.Inner.IpConfigurations.Add(nicIpConfiguration.Inner); + return this; + } + + internal void AddToCreatableDependencies(ICreatable creatableResource) where T : IResource + { + + base.AddCreatableDependency(creatableResource as IResourceCreator); + + } + + internal IResource CreatedDependencyResource(string key) + { + + return base.CreatedResource(key); + } + + internal ICreatable NewGroup() + { + return this.newGroup; + } + + } +} \ No newline at end of file diff --git a/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/NetworkInterfacesImpl.cs b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/NetworkInterfacesImpl.cs new file mode 100644 index 000000000..a077805bf --- /dev/null +++ b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/NetworkInterfacesImpl.cs @@ -0,0 +1,105 @@ +/** +* Copyright (c) Microsoft Corporation. All rights reserved. +* Licensed under the MIT License. See License.txt in the project root for +* license information. +*/ + +namespace Microsoft.Azure.Management.V2.Network +{ + + using Microsoft.Azure.Management.V2.Resource.Core; + using Microsoft.Azure.Management.V2.Resource.Core.CollectionActions; + using Microsoft.Azure.Management.Network.Models; + using Microsoft.Azure.Management.V2.Resource; + using Management.Network; + using System.Collections.Generic; + using System; + using NetworkInterface.Definition; + using System.Threading; + using System.Threading.Tasks; + + /// + /// Implementation for {@link NetworkInterfaces}. + /// + public partial class NetworkInterfacesImpl : + GroupableResources, + INetworkInterfaces + { + internal NetworkInterfacesImpl(INetworkInterfacesOperations client, NetworkManager networkManager) : + base(client, networkManager) + { + } + + public PagedList List() + { + IEnumerable storageAccounts = InnerCollection.ListAll(); + var pagedList = new PagedList(storageAccounts); + return WrapList(pagedList); + } + + public PagedList ListByGroup(string groupName) + { + IEnumerable list = InnerCollection.List(groupName); + var pagedList = new PagedList(list); + return WrapList(pagedList); + } + + public void Delete(string id) + { + this.Delete(ResourceUtils.GroupFromResourceId(id), ResourceUtils.NameFromResourceId(id)); + } + + public void Delete(string groupName, string name) + { + this.InnerCollection.Delete(groupName, name); + } + + public NetworkInterface.Definition.IBlank Define(string name) + { + + return WrapModel(name); + } + + protected override NetworkInterfaceImpl WrapModel(string name) + { + NetworkInterfaceInner inner = new NetworkInterfaceInner(); + inner.IpConfigurations = new List(); + inner.DnsSettings = new NetworkInterfaceDnsSettings(); + return new NetworkInterfaceImpl(name, + inner, + this.InnerCollection, + base.MyManager); + } + + protected override INetworkInterface WrapModel(NetworkInterfaceInner inner) + { + return new NetworkInterfaceImpl(inner.Name, + inner, + this.InnerCollection, + base.MyManager); + } + + async Task> ISupportsListingByGroup.ListByGroupAsync(string resourceGroupName, CancellationToken cancellationToken) + { + var data = await this.InnerCollection.ListAsync(resourceGroupName); + return WrapList(new PagedList(data)); + } + + + async Task ISupportsDeletingByGroup.DeleteAsync(string groupName, string name, CancellationToken cancellationToken) + { + await this.InnerCollection.DeleteAsync(groupName, name, cancellationToken); + } + + public async override Task GetByGroupAsync(string groupName, string name) + { + var data = await this.InnerCollection.GetAsync(groupName, name); + return this.WrapModel(data); + } + + async Task ISupportsDeleting.DeleteAsync(string id, CancellationToken cancellationToken) + { + await this.InnerCollection.DeleteAsync(ResourceUtils.GroupFromResourceId(id), ResourceUtils.NameFromResourceId(id), cancellationToken); + } + } +} \ No newline at end of file diff --git a/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/NetworkManager.cs b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/NetworkManager.cs new file mode 100644 index 000000000..5c64408ab --- /dev/null +++ b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/NetworkManager.cs @@ -0,0 +1,185 @@ +namespace Microsoft.Azure.Management.V2.Network +{ + using Microsoft.Azure.Management.Network; + using Microsoft.Azure.Management.V2.Resource.Core; + using Resource; + using Microsoft.Rest; + using System; + using System.Linq; + + public class NetworkManager : ManagerBase, INetworkManager + { + private NetworkManagementClient networkManagementClient; + private PublicIpAddressesImpl publicIpAddresses; + private NetworkInterfacesImpl networkInterfaces; + private NetworkSecurityGroupsImpl networkSecurityGroups; + private NetworksImpl networks; + + private NetworkManager(RestClient restClient, string subscriptionId) : base(restClient, subscriptionId) + { + networkManagementClient = new NetworkManagementClient(new Uri(restClient.BaseUri), + restClient.Credentials, + restClient.RootHttpHandler, + restClient.Handlers.ToArray()); + networkManagementClient.SubscriptionId = subscriptionId; + } + + + /// + /// Creates an instance of NetworkManager that exposes storage resource management API entry points. + /// + /// the credentials to use + /// the subscription UUID + /// the NetworkManager + public static INetworkManager Authenticate(ServiceClientCredentials serviceClientCredentials, string subscriptionId) + { + return new NetworkManager(RestClient.Configure() + .withEnvironment(AzureEnvironment.AzureGlobalCloud) + .withCredentials(serviceClientCredentials) + .build(), subscriptionId); + } + + /// + /// Creates an instance of NetworkManager that exposes storage resource management API entry points. + /// + /// the RestClient to be used for API calls. + /// the subscription UUID + /// the NetworkManager + public static INetworkManager Authenticate(RestClient restClient, string subscriptionId) + { + return new NetworkManager(restClient, subscriptionId); + } + + /// + /// Get a Configurable instance that can be used to create NetworkManager with optional configuration. + /// + /// the instance allowing configurations + public static IConfigurable Configure() + { + return new Configurable(); + } + + + /// + /// The inteface allowing configurations to be set. + /// + public interface IConfigurable : IAzureConfigurable + { + INetworkManager Authenticate(ServiceClientCredentials serviceClientCredentials, string subscriptionId); + } + + protected class Configurable : + AzureConfigurable, + IConfigurable + { + /// + /// Creates an instance of NetworkManager that exposes storage management API entry points. + /// + /// credentials the credentials to use + /// The subscription UUID + /// the interface exposing storage management API entry points that work in a subscription
+ public INetworkManager Authenticate(ServiceClientCredentials credentials, string subscriptionId) + { + return new NetworkManager(BuildRestClient(credentials), subscriptionId); + } + } + + /// + /// return entry point to virtual network management + /// + public INetworks Networks + { + get + { + if (networks == null) + { + networks = new NetworksImpl(networkManagementClient, this); + } + + return networks; + } + } + + /// + /// return entry point to network security group management + /// + public INetworkSecurityGroups NetworkSecurityGroups + { + get + { + if (networkSecurityGroups == null) + { + networkSecurityGroups = new NetworkSecurityGroupsImpl(networkManagementClient.NetworkSecurityGroups, this); + } + + return networkSecurityGroups; + } + } + + /// + /// return entry point to public IP address management + /// + public IPublicIpAddresses PublicIpAddresses + { + get + { + if (publicIpAddresses == null) + { + publicIpAddresses = new PublicIpAddressesImpl(networkManagementClient.PublicIPAddresses, this); + } + + return publicIpAddresses; + } + } + + + /// + /// return entry point to network interface management + /// + public INetworkInterfaces NetworkInterfaces + { + get + { + if (networkInterfaces == null) + { + networkInterfaces = new NetworkInterfacesImpl(networkManagementClient.NetworkInterfaces, this); + } + + return networkInterfaces; + } + } + + /// + /// return entry point to load balancer management + /// + public ILoadBalancers LoadBalancers { get { return null; } } + } + + public interface INetworkManager : IManagerBase + { + /// + /// return entry point to virtual network management + /// + INetworks Networks { get; } + + /// + /// return entry point to network security group management + /// + INetworkSecurityGroups NetworkSecurityGroups { get; } + + /// + /// return entry point to public IP address management + /// + IPublicIpAddresses PublicIpAddresses { get; } + + /// + /// return entry point to network interface management + /// + INetworkInterfaces NetworkInterfaces { get; } + + /// + /// return entry point to load balancer management + /// + ILoadBalancers LoadBalancers { get; } + } +} diff --git a/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/NetworkSecurityGroupImpl.cs b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/NetworkSecurityGroupImpl.cs new file mode 100644 index 000000000..dd1043830 --- /dev/null +++ b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/NetworkSecurityGroupImpl.cs @@ -0,0 +1,162 @@ +/** +* Copyright (c) Microsoft Corporation. All rights reserved. +* Licensed under the MIT License. See License.txt in the project root for +* license information. +*/ + +namespace Microsoft.Azure.Management.V2.Network +{ + + using Microsoft.Azure.Management.V2.Network.NetworkSecurityGroup.Update; + using Microsoft.Azure.Management.V2.Network.NetworkSecurityGroup.Definition; + using Microsoft.Azure.Management.Network.Models; + using Microsoft.Rest; + using System.Collections.Generic; + using Microsoft.Azure.Management.V2.Resource; + using Microsoft.Azure.Management.V2.Resource.Core.ResourceActions; + using System.Threading.Tasks; + using Microsoft.Azure.Management.V2.Resource.Core; + using System.Threading; + using Management.Network; + using System; + using System.Collections.ObjectModel; + + /// + /// Implementation for {@link NetworkSecurityGroup} and its create and update interfaces. + /// + public partial class NetworkSecurityGroupImpl : + GroupableResource, + INetworkSecurityGroup, + IDefinition, + IUpdate + { + private INetworkSecurityGroupsOperations innerCollection; + private IList rules; + private IList defaultRules; + + internal NetworkSecurityGroupImpl(string name, NetworkSecurityGroupInner innerModel, INetworkSecurityGroupsOperations innerCollection, NetworkManager networkManager) : + base(name, innerModel, networkManager) + { + this.innerCollection = innerCollection; + this.InitializeRulesFromInner(); + } + + private void InitializeRulesFromInner() + { + this.rules = new List(); + if (this.Inner.SecurityRules != null) + { + foreach (SecurityRuleInner ruleInner in this.Inner.SecurityRules) + { + this.rules.Add(new NetworkSecurityRuleImpl(ruleInner, this)); + } + } + + this.defaultRules = new List(); + if (this.Inner.DefaultSecurityRules != null) + { + foreach (SecurityRuleInner ruleInner in this.Inner.DefaultSecurityRules) + { + this.defaultRules.Add(new NetworkSecurityRuleImpl(ruleInner, this)); + } + } + } + + public NetworkSecurityRuleImpl UpdateRule(string name) + { + foreach (INetworkSecurityRule r in this.rules) + { + if (r.Name.Equals(name, StringComparison.OrdinalIgnoreCase)) + { + return (NetworkSecurityRuleImpl)r; + } + } + + throw new Exception("Network security rule '" + name + "' not found"); + } + + public NetworkSecurityRuleImpl DefineRule(string name) + { + SecurityRuleInner inner = new SecurityRuleInner(); + inner.Name = name; + inner.Priority = 100; // Must be at least 100 + return new NetworkSecurityRuleImpl(inner, this); + } + + public async override Task Refresh() + { + var response = await this.innerCollection.GetAsync(this.ResourceGroupName, this.Name); + SetInner(response); + return this; + } + + public IUpdate WithoutRule(string name) + { + // Remove from cache + IList r = this.rules; + for (int i = 0; i < r.Count; i++) + { + if (r[i].Name.Equals(name, StringComparison.OrdinalIgnoreCase)) + { + r.Remove(r[i]); + break; + } + } + + // Remove from inner + IList innerRules = this.Inner.SecurityRules; + for (int i = 0; i < innerRules.Count; i++) + { + if (innerRules[i].Name.Equals(name, StringComparison.OrdinalIgnoreCase)) + { + innerRules.Remove(innerRules[i]); + break; + } + } + + return this; + } + + public IList SecurityRules() + { + return new ReadOnlyCollection(this.rules); + } + + public IList DefaultSecurityRules() + { + return new ReadOnlyCollection(this.defaultRules); + } + + public IList NetworkInterfaceIds + { + get + { + List ids = new List(); + if (this.Inner.NetworkInterfaces != null) + { + foreach (NetworkInterfaceInner inner in this.Inner.NetworkInterfaces) + { + ids.Add(inner.Id); + } + } + return ids; + } + } + + public async override Task CreateResourceAsync(CancellationToken cancellationToken = default(CancellationToken)) + { + var response = await this.innerCollection.CreateOrUpdateAsync(this.ResourceGroupName, this.Name, this.Inner); + this.SetInner(response); + this.InitializeRulesFromInner(); + return this; + } + } +} \ No newline at end of file diff --git a/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/NetworkSecurityGroupsImpl.cs b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/NetworkSecurityGroupsImpl.cs new file mode 100644 index 000000000..8d8abf004 --- /dev/null +++ b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/NetworkSecurityGroupsImpl.cs @@ -0,0 +1,110 @@ +/** +* Copyright (c) Microsoft Corporation. All rights reserved. +* Licensed under the MIT License. See License.txt in the project root for +* license information. +*/ + +namespace Microsoft.Azure.Management.V2.Network +{ + + using Microsoft.Azure.Management.V2.Resource.Core; + using Microsoft.Azure.Management.V2.Resource.Core.CollectionActions; + using Microsoft.Azure.Management.V2.Resource; + using Microsoft.Azure.Management.Network.Models; + using Management.Network; + using System; + using System.Threading.Tasks; + using System.Threading; + using System.Collections.Generic; + + /// + /// Implementation for {@link NetworkSecurityGroups}. + /// + public partial class NetworkSecurityGroupsImpl : + GroupableResources, + INetworkSecurityGroups + { + internal NetworkSecurityGroupsImpl(INetworkSecurityGroupsOperations innerCollection, NetworkManager networkManager) : + base(innerCollection, networkManager) + { + } + + public PagedList List() + { + IEnumerable list = InnerCollection.ListAll(); + var pagedList = new PagedList(list); + return WrapList(pagedList); + } + + public PagedList ListByGroup(string groupName) + { + IEnumerable list = InnerCollection.List(groupName); + var pagedList = new PagedList(list); + return WrapList(pagedList); + } + + public void Delete(string id) + { + this.Delete(ResourceUtils.GroupFromResourceId(id), ResourceUtils.NameFromResourceId(id)); + } + + public void Delete(string groupName, string name) + { + this.InnerCollection.Delete(groupName, name); + } + + public NetworkSecurityGroupImpl Define(string name) + { + return WrapModel(name); + } + + protected override NetworkSecurityGroupImpl WrapModel(string name) + { + + NetworkSecurityGroupInner inner = new NetworkSecurityGroupInner(name: name); + + // Initialize rules + if (inner.SecurityRules == null) + { + inner.SecurityRules = new List(); + } + + if (inner.DefaultSecurityRules == null) + { + inner.DefaultSecurityRules = new List(); + } + + return this.WrapModel(inner) as NetworkSecurityGroupImpl; + } + + protected override INetworkSecurityGroup WrapModel(NetworkSecurityGroupInner inner) + { + return new NetworkSecurityGroupImpl( + inner.Name, + inner, + this.InnerCollection, + this.MyManager); + } + + public async Task DeleteAsync(string id, CancellationToken cancellationToken) + { + await this.InnerCollection.DeleteAsync(ResourceUtils.GroupFromResourceId(id), ResourceUtils.NameFromResourceId(id), cancellationToken); + } + + public async Task DeleteAsync(string groupName, string name, CancellationToken cancellationToken) + { + await this.InnerCollection.DeleteAsync(groupName, name, cancellationToken); + } + + Task> ISupportsListingByGroup.ListByGroupAsync(string resourceGroupName, CancellationToken cancellationToken) + { + throw new NotImplementedException(); + } + + public async override Task GetByGroupAsync(string groupName, string name) + { + var data = await this.InnerCollection.GetAsync(groupName, name); + return this.WrapModel(data); + } + } +} \ No newline at end of file diff --git a/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/NetworkSecurityRuleImpl.cs b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/NetworkSecurityRuleImpl.cs new file mode 100644 index 000000000..3a61bf2fc --- /dev/null +++ b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/NetworkSecurityRuleImpl.cs @@ -0,0 +1,246 @@ +/** +* Copyright (c) Microsoft Corporation. All rights reserved. +* Licensed under the MIT License. See License.txt in the project root for +* license information. +*/ + +namespace Microsoft.Azure.Management.V2.Network +{ + + using NetworkSecurityRule.Update; + using NetworkSecurityRule.Definition; + using Microsoft.Azure.Management.Network.Models; + using NetworkSecurityRule.UpdateDefinition; + using NetworkSecurityGroup.Definition; + using Microsoft.Azure.Management.V2.Resource.Core; + using NetworkSecurityGroup.Update; + using Resource.Core.ChildResourceActions; + using System; + + /// + /// Implementation for {@link NetworkSecurityRule} and its create and update interfaces. + /// + public partial class NetworkSecurityRuleImpl : + ChildResource, + INetworkSecurityRule, + IDefinition, + IUpdateDefinition, + NetworkSecurityRule.Update.IUpdate + { + internal NetworkSecurityRuleImpl (SecurityRuleInner inner, NetworkSecurityGroupImpl parent) : + base(inner.Id, inner, parent) + { + } + + public string Name + { + get + { + return this.Inner.Name; + } + } + public string Direction + { + get + { + return this.Inner.Direction; + } + } + public string Protocol + { + get + { + return this.Inner.Protocol; + } + } + public string Access + { + get + { + return this.Inner.Access; + } + } + public string SourceAddressPrefix + { + get + { + return this.Inner.SourceAddressPrefix; + } + } + public string SourcePortRange + { + get + { + return this.Inner.SourcePortRange; + } + } + + public string DestinationAddressPrefix + { + get + { + return this.Inner.DestinationAddressPrefix; + } + } + public string DestinationPortRange + { + get + { + return this.Inner.DestinationPortRange; + } + } + public int? Priority + { + get + { + return this.Inner.Priority; + } + } + public NetworkSecurityRuleImpl AllowInbound () + { + return this + .WithDirection(SecurityRuleDirection.Inbound) + .WithAccess(SecurityRuleAccess.Allow); + } + + public NetworkSecurityRuleImpl AllowOutbound () + { + return this + .WithDirection(SecurityRuleDirection.Outbound) + .WithAccess(SecurityRuleAccess.Allow); + } + + public NetworkSecurityRuleImpl DenyInbound () + { + return this + .WithDirection(SecurityRuleDirection.Inbound) + .WithAccess(SecurityRuleAccess.Deny); + } + + public NetworkSecurityRuleImpl DenyOutbound () + { + return this + .WithDirection(SecurityRuleDirection.Outbound) + .WithAccess(SecurityRuleAccess.Deny); + } + + public NetworkSecurityRuleImpl WithProtocol (string protocol) + { + this.Inner.Protocol = protocol; + return this; + } + + public NetworkSecurityRuleImpl WithAnyProtocol () + { + return this.WithProtocol(SecurityRuleProtocol.Asterisk); + } + + public NetworkSecurityRuleImpl FromAddress (string cidr) + { + this.Inner.SourceAddressPrefix = cidr; + return this; + } + + public NetworkSecurityRuleImpl FromAnyAddress () + { + this.Inner.SourceAddressPrefix = "*"; + return this; + } + + public NetworkSecurityRuleImpl FromPort (int port) + { + this.Inner.SourcePortRange = port.ToString(); + return this; + } + + public NetworkSecurityRuleImpl FromAnyPort () + { + this.Inner.SourcePortRange = "*"; + return this; + } + + public NetworkSecurityRuleImpl FromPortRange (int from, int to) + { + this.Inner.SourcePortRange = from + "-" + to; + return this; + } + + public NetworkSecurityRuleImpl ToAddress (string cidr) + { + this.Inner.DestinationAddressPrefix = cidr; + return this; + } + + public NetworkSecurityRuleImpl ToAnyAddress () + { + this.Inner.DestinationAddressPrefix = "*"; + return this; + } + + public NetworkSecurityRuleImpl ToPort (int port) + { + this.Inner.DestinationPortRange = port.ToString(); + return this; + } + + public NetworkSecurityRuleImpl ToAnyPort () + { + this.Inner.DestinationPortRange = "*"; + return this; + } + + public NetworkSecurityRuleImpl ToPortRange (int from, int to) + { + this.Inner.DestinationPortRange = from + "-" + to; + return this; + } + + public NetworkSecurityRuleImpl WithPriority (int priority) + { + if (priority < 100 || priority > 4096) + { + throw new System.ArgumentOutOfRangeException("The priority number of a network security rule must be between 100 and 4096."); + } + + this.Inner.Priority = priority; + return this; + } + + public NetworkSecurityRuleImpl WithDescription (string description) + { + this.Inner.Description = description; + return this; + } + + private NetworkSecurityRuleImpl WithDirection (string direction) + { + this.Inner.Direction = direction; + return this; + } + + private NetworkSecurityRuleImpl WithAccess (string permission) + { + this.Inner.Access = permission; + return this; + } + + public NetworkSecurityGroupImpl Attach () + { + this.Parent.Inner.SecurityRules.Add(this.Inner); + return this.Parent; + } + + NetworkSecurityGroup.Update.IUpdate ISettable.Parent() + { + return base.Parent; + } + + public string Description + { + get + { + return this.Inner.Description; + } + } + } +} \ No newline at end of file diff --git a/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/NetworksImpl.cs b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/NetworksImpl.cs new file mode 100644 index 000000000..84d24f25f --- /dev/null +++ b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/NetworksImpl.cs @@ -0,0 +1,130 @@ +/** +* Copyright (c) Microsoft Corporation. All rights reserved. +* Licensed under the MIT License. See License.txt in the project root for +* license information. +*/ + +namespace Microsoft.Azure.Management.V2.Network +{ + + using Microsoft.Azure.Management.V2.Resource.Core.CollectionActions; + using Microsoft.Azure.Management.Network.Models; + using Microsoft.Azure.Management.V2.Resource.Core; + using Microsoft.Azure.Management.V2.Resource; + using Management.Network; + using System.Collections.Generic; + using System.Threading.Tasks; + using System; + using System.Threading; + + /// + /// Implementation for {@link Networks}. + /// + public partial class NetworksImpl : + GroupableResources, + INetworks + { + internal NetworksImpl(NetworkManagementClient networkClient, NetworkManager networkManager) : + base(networkClient.VirtualNetworks, networkManager) + { + } + + public PagedList List() + { + IEnumerable list = InnerCollection.ListAll(); + var pagedList = new PagedList(list); + return this.WrapList(pagedList); + } + + public PagedList ListByGroup(string groupName) + { + IEnumerable list = InnerCollection.List(groupName); + var pagedList = new PagedList(list); + return this.WrapList(pagedList); + } + + public void Delete(string id) + { + this.Delete(ResourceUtils.GroupFromResourceId(id), ResourceUtils.NameFromResourceId(id)); + } + + public void Delete(string groupName, string name) + { + this.InnerCollection.Delete(groupName, name); + } + + public NetworkImpl Define(string name) + { + return this.WrapModel(name); + } + + protected override NetworkImpl WrapModel(string name) + { + VirtualNetworkInner inner = new VirtualNetworkInner(default(string), default(string), name); + + // Initialize address space + AddressSpace addressSpace = inner.AddressSpace; + if (addressSpace == null) + { + addressSpace = new AddressSpace(); + inner.AddressSpace = addressSpace; + } + + if (addressSpace.AddressPrefixes == null) + { + addressSpace.AddressPrefixes =new List(); + } + + // Initialize subnets + if (inner.Subnets == null) + { + inner.Subnets = new List(); + } + + // Initialize DHCP options (DNS servers) + DhcpOptions dhcp = inner.DhcpOptions; + if (dhcp == null) + { + dhcp = new DhcpOptions(); + inner.DhcpOptions = dhcp; + } + + if (dhcp.DnsServers == null) + { + dhcp.DnsServers = new List(); + } + + return this.WrapModel(inner) as NetworkImpl; + } + + protected override INetwork WrapModel(VirtualNetworkInner inner) + { + return new NetworkImpl( + inner.Name, + inner, + this.InnerCollection as VirtualNetworksOperations, + this.MyManager); + } + + public Task> ListByGroupAsync(string resourceGroupName, CancellationToken cancellationToken) + { + throw new NotImplementedException(); + } + + public async Task DeleteAsync(string id, CancellationToken cancellationToken) + { + await this.InnerCollection.DeleteAsync(ResourceUtils.GroupFromResourceId(id), ResourceUtils.NameFromResourceId(id), cancellationToken); + } + + public async Task DeleteAsync(string groupName, string name, CancellationToken cancellationToken) + { + await this.InnerCollection.DeleteAsync(groupName, name, cancellationToken); + } + + public async override Task GetByGroupAsync(string groupName, string name) + { + var data = await this.InnerCollection.GetAsync(groupName, name); + return this.WrapModel(data); + } + } +} \ No newline at end of file diff --git a/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/NicIpConfigurationImpl.cs b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/NicIpConfigurationImpl.cs new file mode 100644 index 000000000..e56bbacaf --- /dev/null +++ b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/NicIpConfigurationImpl.cs @@ -0,0 +1,389 @@ +/** +* Copyright (c) Microsoft Corporation. All rights reserved. +* Licensed under the MIT License. See License.txt in the project root for +* license information. +*/ + +namespace Microsoft.Azure.Management.V2.Network +{ + + using NicIpConfiguration.Update; + using NicIpConfiguration.Definition; + using System.Collections.Generic; + using Microsoft.Azure.Management.V2.Resource.Core.ChildResource.Definition; + using NicIpConfiguration.UpdateDefinition; + using Microsoft.Azure.Management.V2.Resource.Core.ResourceActions; + using Microsoft.Azure.Management.Network.Models; + using Microsoft.Azure.Management.V2.Resource.Core; + using NetworkInterface.Update; + using Microsoft.Azure; + using Microsoft.Azure.Management.V2.Resource.Core.ChildResource.Update; + using NetworkInterface.Definition; + using Microsoft.Rest.Azure; + using Resource.Core.ChildResourceActions; + using System; + + /// + /// Implementation for {@link NicIpConfiguration} and its create and update interfaces. + /// + public partial class NicIpConfigurationImpl : + ChildResource, + INicIpConfiguration, + NicIpConfiguration.Definition.IDefinition, + NicIpConfiguration.UpdateDefinition.IUpdateDefinition, + NicIpConfiguration.Update.IUpdate + { + private INetworkManager NetworkManager; + private bool isInCreateMode; + private string creatableVirtualNetworkKey; + private string creatablePublicIpKey; + private INetwork existingVirtualNetworkToAssociate; + private IPublicIpAddress existingPublicIpAddressToAssociate; + private string subnetToAssociate; + private bool removePrimaryPublicIPAssociation; + private ILoadBalancer loadBalancerToAssociate; + + internal NicIpConfigurationImpl(NetworkInterfaceIPConfigurationInner inner, NetworkInterfaceImpl parent, INetworkManager NetworkManager, bool isInCreateModel) : + base(inner.Id, inner, parent) + { + this.isInCreateMode = isInCreateModel; + this.NetworkManager = NetworkManager; + } + + internal static NicIpConfigurationImpl PrepareNicIpConfiguration(string name, NetworkInterfaceImpl parent, INetworkManager NetworkManager) + { + NetworkInterfaceIPConfigurationInner ipConfigurationInner = new NetworkInterfaceIPConfigurationInner(); + ipConfigurationInner.Name = name; + return new NicIpConfigurationImpl(ipConfigurationInner, + parent, + NetworkManager, + true); + } + + public string Name + { + get + { + return Inner.Name; + } + } + public string PublicIpAddressId + { + get + { + if (this.Inner.PublicIPAddress == null) + { + return null; + } + return this.Inner.PublicIPAddress.Id; + } + } + public IPublicIpAddress PublicIpAddress() + { + string id = this.Inner.PublicIPAddress.Id; + if (id == null) + { + return null; + } + + return this.NetworkManager.PublicIpAddresses.GetByGroup( + ResourceUtils.GroupFromResourceId(id), ResourceUtils.NameFromResourceId(id)); + } + + public string SubnetId + { + get + { + return this.Inner.Subnet.Id; + } + } + public INetwork Network() + { + string id = this.SubnetId; + return this.NetworkManager.Networks.GetByGroup(ResourceUtils.GroupFromResourceId(id), + ResourceUtils.ExtractFromResourceId(id, "virtualNetworks")); + } + + public string PrivateIp + { + get + { + return this.Inner.PrivateIPAddress; + } + } + public string PrivateIpAllocationMethod + { + get + { + return this.Inner.PrivateIPAllocationMethod; + } + } + public NetworkInterfaceImpl Attach() + { + return Parent.WithIpConfiguration(this); + } + + public NicIpConfigurationImpl WithNewNetwork(ICreatable creatable) + { + this.creatableVirtualNetworkKey = creatable.Key; + this.Parent.AddToCreatableDependencies(creatable); + return this; + } + + public NicIpConfigurationImpl WithNewNetwork(string name, string addressSpaceCidr) + { + + var definitionWithGroup = this.NetworkManager.Networks + .Define(name) + .WithRegion(this.Parent.RegionName); + + V2.Network.Network.Definition.IWithCreate definitionAfterGroup; + if (this.Parent.NewGroup() != null) + { + definitionAfterGroup = definitionWithGroup.WithNewResourceGroup(this.Parent.NewGroup()); + } + else + { + definitionAfterGroup = definitionWithGroup.WithExistingResourceGroup(this.Parent.ResourceGroupName); + } + + return WithNewNetwork(definitionAfterGroup.WithAddressSpace(addressSpaceCidr)); + } + + public NicIpConfigurationImpl WithNewNetwork(string addressSpaceCidr) + { + return WithNewNetwork(this.Parent.Namer.RandomName("vnet", 20), addressSpaceCidr); + } + + public NicIpConfigurationImpl WithExistingNetwork(INetwork network) + { + this.existingVirtualNetworkToAssociate = network; + return this; + } + + public NicIpConfigurationImpl WithPrivateIpAddressDynamic() + { + this.Inner.PrivateIPAllocationMethod = IPAllocationMethod.Dynamic; + this.Inner.PrivateIPAddress = null; + return this; + } + + public NicIpConfigurationImpl WithPrivateIpAddressStatic(string staticPrivateIpAddress) + { + this.Inner.PrivateIPAllocationMethod = IPAllocationMethod.Static; + this.Inner.PrivateIPAddress = staticPrivateIpAddress; + return this; + } + + public NicIpConfigurationImpl WithNewPublicIpAddress(ICreatable creatable) + { + if (this.creatablePublicIpKey == null) + { + this.creatablePublicIpKey = creatable.Key; + this.Parent.AddToCreatableDependencies(creatable); + } + return this; + } + + public NicIpConfigurationImpl WithNewPublicIpAddress() + { + string name = this.Parent.Namer.RandomName("pip", 15); + return WithNewPublicIpAddress(PrepareCreatablePublicIp(name, name)); + } + + public NicIpConfigurationImpl WithNewPublicIpAddress(string leafDnsLabel) + { + return WithNewPublicIpAddress(PrepareCreatablePublicIp(this.Parent.Namer.RandomName("pip", 15), leafDnsLabel)); + } + + public NicIpConfigurationImpl WithExistingPublicIpAddress(IPublicIpAddress publicIpAddress) + { + this.existingPublicIpAddressToAssociate = publicIpAddress; + return this; + } + + public NicIpConfigurationImpl WithoutPublicIpAddress() + { + this.removePrimaryPublicIPAssociation = true; + return this; + } + + public NicIpConfigurationImpl WithSubnet(string name) + { + this.subnetToAssociate = name; + return this; + } + + public NicIpConfigurationImpl WithExistingLoadBalancer(ILoadBalancer loadBalancer) + { + this.loadBalancerToAssociate = loadBalancer; + return this; + } + + public NicIpConfigurationImpl WithBackendAddressPool(string name) + { + foreach (BackendAddressPoolInner pool in this.loadBalancerToAssociate.Inner.BackendAddressPools) + { + if (pool.Name.Equals(name, StringComparison.OrdinalIgnoreCase)) + { + EnsureBackendAddressPools.Add(pool); + return this; + } + } + + return this; + } + + private IList EnsureBackendAddressPools + { + get + { + IList poolRefs = this.Inner.LoadBalancerBackendAddressPools; + if (poolRefs == null) + { + poolRefs = new List(); + this.Inner.LoadBalancerBackendAddressPools = poolRefs; + } + + return poolRefs; + } + } + internal static void EnsureConfigurations(IList nicIpConfigurations) + { + foreach (INicIpConfiguration nicIpConfiguration in nicIpConfigurations) + { + NicIpConfigurationImpl config = (NicIpConfigurationImpl)nicIpConfiguration; + config.Inner.Subnet = config.SubnetToAssociate; + config.Inner.PublicIPAddress = config.PublicIpToAssociate; + } + } + + private ICreatable PrepareCreatablePublicIp(string name, string leafDnsLabel) + { + + var definitionWithGroup = this.NetworkManager.PublicIpAddresses + .Define(name) + .WithRegion(this.Parent.RegionName); + + PublicIpAddress.Definition.IWithCreate definitionAfterGroup; + if (this.Parent.NewGroup() != null) + { + definitionAfterGroup = definitionWithGroup.WithNewResourceGroup(this.Parent.NewGroup()); + } + else + { + definitionAfterGroup = definitionWithGroup.WithExistingResourceGroup(this.Parent.ResourceGroupName); + } + + return definitionAfterGroup.WithLeafDomainLabel(leafDnsLabel); + } + + NetworkInterface.Update.IUpdate ISettable.Parent() + { + return base.Parent; + } + + /// + /// Gets the subnet to associate with the IP configuration. + ///

+ /// this method will never return null as subnet is required for a IP configuration, in case of + /// update mode if user didn't choose to change the subnet then existing subnet will be returned. + /// Updating the nic subnet has a restriction, the new subnet must reside in the same virtual network + /// as the current one. + ///

+ /// the subnet resource + private SubnetInner SubnetToAssociate + { + get + { + SubnetInner subnetInner = new SubnetInner(); + if (this.isInCreateMode) + { + if (this.creatableVirtualNetworkKey != null) + { + INetwork network = (INetwork)this.Parent.CreatedDependencyResource(this.creatableVirtualNetworkKey); + subnetInner.Id = network.Inner.Subnets[0].Id; + return subnetInner; + } + + foreach (SubnetInner subnet in this.existingVirtualNetworkToAssociate.Inner.Subnets) + { + if (subnet.Name.Equals(this.subnetToAssociate, StringComparison.OrdinalIgnoreCase)) + { + subnetInner.Id = subnet.Id; + return subnetInner; + } + } + + throw new Exception(string.Format("A subnet with name '{0}' not found under the network '{0}'", + this.subnetToAssociate, + this.existingVirtualNetworkToAssociate.Name)); + + } + else + { + if (subnetToAssociate != null) + { + int idx = this.Inner.Subnet.Id.LastIndexOf('/'); + subnetInner.Id = this.Inner.Subnet.Id.Substring(0, idx) + subnetToAssociate; + } + else + { + subnetInner.Id = this.Inner.Subnet.Id; + } + + return subnetInner; + } + } + } + + /// + /// Get the SubResource instance representing a public IP that needs to be associated with the + /// IP configuration. + ///

+ /// null will be returned if withoutPublicIP() is specified in the update fluent chain or user did't + /// opt for public IP in create fluent chain. In case of update chain, if withoutPublicIP(..) is + /// not specified then existing associated (if any) public IP will be returned. + ///

+ /// public ip SubResource + private PublicIPAddressInner PublicIpToAssociate + { + get + { + if (this.removePrimaryPublicIPAssociation) + { + return null; + } + + PublicIPAddressInner publicIPAddressInner = null; + if (this.creatablePublicIpKey != null) + { + IPublicIpAddress publicIpAddress = (IPublicIpAddress)this.Parent + .CreatedDependencyResource(this.creatablePublicIpKey); + publicIPAddressInner = publicIpAddress.Inner; + } + + if (this.existingPublicIpAddressToAssociate != null) + { + publicIPAddressInner = this.existingPublicIpAddressToAssociate.Inner; + } + + if (publicIPAddressInner != null) + { + //TODO: validate that this is correct + return publicIPAddressInner; + //SubResource subResource = new SubResource(); + //subResource.withId(publicIPAddressInner.id()); + //return subResource; + } + + if (!this.isInCreateMode) + { + return this.Inner.PublicIPAddress; + } + + return null; + } + } + } +} \ No newline at end of file diff --git a/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/PublicIpAddressImpl.cs b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/PublicIpAddressImpl.cs new file mode 100644 index 000000000..32a13e7a4 --- /dev/null +++ b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/PublicIpAddressImpl.cs @@ -0,0 +1,227 @@ +/** +* Copyright (c) Microsoft Corporation. All rights reserved. +* Licensed under the MIT License. See License.txt in the project root for +* license information. +*/ + +namespace Microsoft.Azure.Management.V2.Network +{ + + using Microsoft.Azure.Management.V2.Resource.Core; + using Microsoft.Azure.Management.V2.Network.PublicIpAddress.Definition; + using Microsoft.Azure.Management.Network.Models; + using Microsoft.Azure.Management.V2.Network.PublicIpAddress.Update; + using Microsoft.Rest; + using System.Threading; + using Microsoft.Azure.Management.V2.Resource; + using System.Threading.Tasks; + using Resource.Core.ResourceActions; + using System; + using Management.Network; + using Resource.Core.Resource.Update; + using System.Collections.Generic; + using Resource.Core.GroupableResource.Definition; + using Resource.Core.Resource.Definition; + + /// + /// Implementation for {@link PublicIpAddress} and its create and update interfaces. + /// + /// + public partial class PublicIpAddressImpl : + GroupableResource, + IPublicIpAddress, + IDefinition, + IUpdate + { + private IPublicIPAddressesOperations client; + + internal PublicIpAddressImpl (string name, PublicIPAddressInner innerModel, IPublicIPAddressesOperations client, INetworkManager networkManager) + : base(name, innerModel, networkManager) + { + this.client = client; + } + + + /// the assigned reverse FQDN, if any + string ReverseFqdn + { + get + { + return this.Inner.DnsSettings.ReverseFqdn; + } + } + + /// the assigned leaf domain label + string LeafDomainLabel + { + get + { + if (this.Inner.DnsSettings == null) + { + return null; + } + else + { + return this.Inner.DnsSettings.DomainNameLabel; + } + } + } + + /// the assigned FQDN (fully qualified domain name) + string Fqdn + { + get + { + return this.Inner.DnsSettings.Fqdn; + } + } + + /// the idle connection timeout setting (in minutes) + int? IdleTimeoutInMinutes + { + get + { + return this.Inner.IdleTimeoutInMinutes; + } + } + + /// the assigned IP address + string IpAddress + { + get + { + return this.Inner.IpAddress; + } + } + + /// the IP address allocation method (Static/Dynamic) + string IpAllocationMethod + { + get + { + return this.Inner.PublicIPAllocationMethod; + } + } + + /// + /// Specifies the reverse FQDN to assign to this public IP address. + /// + /// reverseFQDN the reverse FQDN to assign + /// the next stage of the resource update + IUpdate WithReverseFqdn(string reverseFQDN) + { + this.Inner.DnsSettings.ReverseFqdn = reverseFQDN.ToLower(); + return this; + } + + /// + /// Ensures that no reverse FQDN will be used. + /// + /// The next stage of the resource update + IUpdate WithoutReverseFqdn() + { + return ((PublicIpAddress.Update.IWithReverseFQDN)this).WithReverseFqdn(null); + } + + /// + /// Specifies the timeout (in minutes) for an idle connection. + /// + /// minutes the length of the time out in minutes + /// the next stage of the resource update + IUpdate WithIdleTimeoutInMinutes(int minutes) + { + + this.Inner.IdleTimeoutInMinutes = minutes; + return this; + } + + /// + /// Ensures that no leaf domain label will be used. + ///

+ /// This means that this public IP address will not be associated with a domain name. + ///

+ /// the next stage of the resource update + IUpdate WithoutLeafDomainLabel() + { + + return ((PublicIpAddress.Update.IWithLeafDomainLabel)this).WithLeafDomainLabel(null); + } + + /// + /// Specifies the leaf domain label to associate with this public IP address. + ///

+ /// The fully qualified domain name (FQDN) + /// will be constructed automatically by appending the rest of the domain to this label. + ///

+ /// dnsName the leaf domain label to use. This must follow the required naming convention for leaf domain names. + /// the next stage of the resource update + IUpdate WithLeafDomainLabel(string dnsName) + { + this.Inner.DnsSettings.DomainNameLabel = dnsName.ToLower(); + return this; + } + + /// + /// Enables static IP address allocation. + ///

+ /// Use {@link PublicIpAddress#ipAddress()} after the public IP address is updated to + /// obtain the actual IP address allocated for this resource by Azure + ///

+ /// the next stage of the resource update + IUpdate WithStaticIp() + { + this.Inner.PublicIPAllocationMethod = IPAllocationMethod.Static; + return this; + } + + /// + /// Enables dynamic IP address allocation. + /// + /// the next stage of the resource update + IUpdate WithDynamicIp() + { + this.Inner.PublicIPAllocationMethod = IPAllocationMethod.Dynamic; + return this; + } + + public override IUpdate Update() + { + return this; + } + + public async override Task Refresh() + { + var response = await client.GetWithHttpMessagesAsync(this.ResourceGroupName, + this.Inner.Name); + SetInner(response.Body); + return this; + } + + public override async Task CreateResourceAsync(CancellationToken cancellationToken = default(CancellationToken)) + { + // // Clean up empty DNS settings + var dnsSettings = this.Inner.DnsSettings; + if (dnsSettings != null) + { + if (string.IsNullOrWhiteSpace(dnsSettings.DomainNameLabel) + && string.IsNullOrWhiteSpace(dnsSettings.Fqdn) + && string.IsNullOrWhiteSpace(dnsSettings.ReverseFqdn)) + { + this.Inner.DnsSettings = null; + } + } + + var response = await this.client.CreateOrUpdateAsync(this.ResourceGroupName, this.Name, this.Inner); + this.SetInner(response); + return this; + } + } +} \ No newline at end of file diff --git a/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/PublicIpAddressesImpl.cs b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/PublicIpAddressesImpl.cs new file mode 100644 index 000000000..d5bd9626d --- /dev/null +++ b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/PublicIpAddressesImpl.cs @@ -0,0 +1,113 @@ +/** +* Copyright (c) Microsoft Corporation. All rights reserved. +* Licensed under the MIT License. See License.txt in the project root for +* license information. +*/ + +namespace Microsoft.Azure.Management.V2.Network +{ + + using Microsoft.Azure.Management.Network.Models; + using Microsoft.Azure.Management.V2.Resource.Core; + using Microsoft.Azure.Management.V2.Resource; + using Management.Network; + using System.Collections.Generic; + using PublicIpAddress.Definition; + using Resource.Core.CollectionActions; + using System; + using System.Threading; + using System.Threading.Tasks; + + /// + /// Implementation for {@link PublicIpAddresses}. + /// + public partial class PublicIpAddressesImpl : + GroupableResources< + IPublicIpAddress, + PublicIpAddressImpl, + PublicIPAddressInner, + IPublicIPAddressesOperations, + INetworkManager>, + IPublicIpAddresses + { + internal PublicIpAddressesImpl (IPublicIPAddressesOperations client, INetworkManager networkManager) : + base (client, networkManager) + { + } + + public void Delete (string id) + { + this.Delete(ResourceUtils.GroupFromResourceId(id), ResourceUtils.NameFromResourceId(id)); + } + + public void Delete (string groupName, string name) + { + this.InnerCollection.Delete(groupName, name); + } + + protected override PublicIpAddressImpl WrapModel (string name) + { + + PublicIPAddressInner inner = new PublicIPAddressInner(); + + if (inner.DnsSettings == null) + { + inner.DnsSettings = new PublicIPAddressDnsSettings(); + } + + return new PublicIpAddressImpl( + name, + inner, + this.InnerCollection, + this.MyManager); + } + + protected override IPublicIpAddress WrapModel (PublicIPAddressInner inner) + { + return new PublicIpAddressImpl( + inner.Id, + inner, + this.InnerCollection, + this.MyManager); + } + + PagedList List() + { + IEnumerable storageAccounts = InnerCollection.ListAll(); + var pagedList = new PagedList(storageAccounts); + return WrapList(pagedList); + } + + IBlank Define(string name) + { + return WrapModel(name); + } + + public Task DeleteAsync(string id, CancellationToken cancellationToken) + { + return ((ISupportsDeletingByGroup)this).DeleteAsync(ResourceUtils.GroupFromResourceId(id), ResourceUtils.NameFromResourceId(id)); + } + + public PagedList ListByGroup(string resourceGroupName) + { + return ((ISupportsListingByGroup)this).ListByGroupAsync(resourceGroupName).Result; + } + + public async Task> ListByGroupAsync(string resourceGroupName, CancellationToken cancellationToken) + { + var data = await this.InnerCollection.ListAsync(resourceGroupName); + return WrapList(new PagedList(data)); + } + + public async Task DeleteAsync(string groupName, string name, CancellationToken cancellationToken) + { + await this.InnerCollection.DeleteAsync(groupName, name); + } + + public async override Task GetByGroupAsync(string groupName, string name) + { + var data = await this.InnerCollection.GetAsync(groupName, name); + return this.WrapModel(data); + } + } +} \ No newline at end of file diff --git a/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/SubnetImpl.cs b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/SubnetImpl.cs new file mode 100644 index 000000000..f59d45ba5 --- /dev/null +++ b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/SubnetImpl.cs @@ -0,0 +1,101 @@ +/** +* Copyright (c) Microsoft Corporation. All rights reserved. +* Licensed under the MIT License. See License.txt in the project root for +* license information. +*/ + +namespace Microsoft.Azure.Management.V2.Network +{ + + using Microsoft.Azure.Management.V2.Network.Subnet.UpdateDefinition; + using Microsoft.Azure.Management.V2.Network.Subnet.Update; + using Microsoft.Azure.Management.Network.Models; + using Microsoft.Azure.Management.V2.Resource.Core.ChildResource.Update; + using Microsoft.Azure.Management.V2.Network.Subnet.Definition; + using Microsoft.Azure.Management.V2.Resource.Core; + using Microsoft.Azure.Management.V2.Network.Network.Definition; + using Microsoft.Azure.Management.V2.Network.Network.Update; + using Microsoft.Azure.Management.V2.Resource.Core.ChildResource.Definition; + using Resource.Core.ChildResourceActions; + using System; + using Rest.Azure; + + /// + /// Implementation for {@link Subnet} and its create and update interfaces. + /// + public partial class SubnetImpl : + ChildResource, + ISubnet, + IDefinition, + IUpdateDefinition, + Microsoft.Azure.Management.V2.Network.Subnet.Update.IUpdate + { + internal SubnetImpl(SubnetInner inner, NetworkImpl parent) : + base(inner.Id, inner, parent) + { + } + + public string AddressPrefix + { + get + { + return this.Inner.AddressPrefix; + } + } + + public string Name + { + get + { + return this.Inner.Name; + } + } + + public INetworkSecurityGroup NetworkSecurityGroup() + { + Resource nsgResource = this.Inner.NetworkSecurityGroup; + if (nsgResource == null) + { + return null; + } + else + { + return this.Parent.MyManager.NetworkSecurityGroups.GetById(nsgResource.Id); + } + } + + public SubnetImpl WithExistingNetworkSecurityGroup(string resourceId) + { + // Workaround for REST API's expectation of an object rather than string ID - should be fixed in Swagger specs or REST + SubResource reference = new SubResource(); + reference.Id = resourceId; + //TODO: doesn't work in .NET + //this.Inner.NetworkSecurityGroup = reference; + return this; + } + + public SubnetImpl WithAddressPrefix(string cidr) + { + this.Inner.AddressPrefix = cidr; + return this; + } + + public NetworkImpl Attach() + { + return this.Parent.WithSubnet(this); + } + + public SubnetImpl WithExistingNetworkSecurityGroup(INetworkSecurityGroup nsg) + { + + // return withExistingNetworkSecurityGroup(nsg.id()); + + return this; + } + + Network.Update.IUpdate ISettable.Parent() + { + return base.Parent; + } + } +} \ No newline at end of file diff --git a/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/project.json b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/project.json new file mode 100644 index 000000000..0b7034304 --- /dev/null +++ b/src/ResourceManagement/Network/Microsoft.Azure.Management.V2.Network/project.json @@ -0,0 +1,46 @@ +{ + "version": "0.0.1-prerelease", + "description": "TODONetworkV2Description.", + "authors": [ "Microsoft" ], + "packOptions": { + "summary": "TODONetworkV2Description.", + "iconUrl": "http://go.microsoft.com/fwlink/?LinkID=288890", + "tags": [ "Microsoft Azure Network management", "virtual network", "network", "REST HTTP client", "azureofficial", "windowsazureofficial" ], + "projectUrl": "https://github.com/Azure/azure-sdk-for-net", + "licenseUrl": "https://raw.githubusercontent.com/Microsoft/dotnet/master/LICENSE", + "requireLicenseAcceptance": true + }, + "buildOptions": { + "delaySign": true, + "publicSign": false, + "keyFile": "../../../../tools/MSSharedLibKey.snk" + }, + "frameworks": { + "net45": { + "dependencies": { + "Microsoft.Rest.ClientRuntime.Azure": "[3.1.0,4.0.0)" + } + }, + "netstandard1.5": { + "imports": [ "dnxcore50" ], + "dependencies": { + "Microsoft.NETCore.Platforms": "1.0.1", + "System.Diagnostics.Tools": "4.0.1", + "System.Net.Http": "4.1.0", + "System.Runtime.Serialization.Primitives": "4.1.1", + "System.Threading.Tasks": "4.0.11", + "Microsoft.Rest.ClientRuntime.Azure": "[3.3.1,4.0.0)" + } + }, + "netstandard1.1": { + "imports": [ "dnxcore50" ], + "dependencies": { + "System.Runtime.Serialization.Primitives": "4.1.1", + "Microsoft.Rest.ClientRuntime.Azure": "[3.3.1,4.0.0)" + } + } + }, + "dependencies": { + "Microsoft.Azure.Management.V2.Resource": "0.0.1-prerelease" + } +} diff --git a/src/ResourceManagement/Network/Network.sln b/src/ResourceManagement/Network/Network.sln new file mode 100644 index 000000000..ef3b210e6 --- /dev/null +++ b/src/ResourceManagement/Network/Network.sln @@ -0,0 +1,28 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio 14 +VisualStudioVersion = 14.0.25420.1 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{8BB2217D-0F2D-49D1-97BC-3654ED321F3B}") = "Microsoft.Azure.Management.V2.Network", "Microsoft.Azure.Management.V2.Network\Microsoft.Azure.Management.V2.Network.xproj", "{7C44C420-6019-48B3-91C4-04A325B9DDAD}" +EndProject +Project("{8BB2217D-0F2D-49D1-97BC-3654ED321F3B}") = "Microsoft.Azure.Management.V2.Resource", "..\Resource\Microsoft.Azure.Management.V2.Resource\Microsoft.Azure.Management.V2.Resource.xproj", "{9D3D3952-32A3-4B58-88D4-7E41C84ACF7D}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {7C44C420-6019-48B3-91C4-04A325B9DDAD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {7C44C420-6019-48B3-91C4-04A325B9DDAD}.Debug|Any CPU.Build.0 = Debug|Any CPU + {7C44C420-6019-48B3-91C4-04A325B9DDAD}.Release|Any CPU.ActiveCfg = Release|Any CPU + {7C44C420-6019-48B3-91C4-04A325B9DDAD}.Release|Any CPU.Build.0 = Release|Any CPU + {9D3D3952-32A3-4B58-88D4-7E41C84ACF7D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {9D3D3952-32A3-4B58-88D4-7E41C84ACF7D}.Debug|Any CPU.Build.0 = Debug|Any CPU + {9D3D3952-32A3-4B58-88D4-7E41C84ACF7D}.Release|Any CPU.ActiveCfg = Release|Any CPU + {9D3D3952-32A3-4B58-88D4-7E41C84ACF7D}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/src/ResourceManagement/Network/global.json b/src/ResourceManagement/Network/global.json new file mode 100644 index 000000000..8f737fb63 --- /dev/null +++ b/src/ResourceManagement/Network/global.json @@ -0,0 +1,3 @@ +{ + "projects": [ "Microsoft.Azure.Management.V2.Network", "../Resource" ] +} \ No newline at end of file diff --git a/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Authentication/ApplicationTokenCredentials.cs b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Authentication/ApplicationTokenCredentials.cs new file mode 100644 index 000000000..e3b34cfdb --- /dev/null +++ b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Authentication/ApplicationTokenCredentials.cs @@ -0,0 +1,93 @@ +using Microsoft.IdentityModel.Clients.ActiveDirectory; +using Microsoft.Rest; +using Microsoft.Rest.Azure.Authentication; +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Net.Http; +using System.Threading; +using System.Threading.Tasks; + +namespace Microsoft.Azure.Management.V2.Resource.Authentication +{ + public class ApplicationTokenCredentials : ServiceClientCredentials + { + private string tenantId; + private string clientId; + private string clientSecret; + public TokenCache TokenCache { get; private set; } + public string DefaultSubscriptionId { get; private set; } + + private ActiveDirectoryServiceSettings activeDirectoryServiceSettings; + + public ApplicationTokenCredentials(AzureEnvironment environment, string tenantId, string clientId, string clientSecret) + { + Init(environment, tenantId, clientId, clientSecret); + } + + public ApplicationTokenCredentials(string tenantId, string clientId, string clientSecret) : this(AzureEnvironment.AzureGlobalCloud, tenantId, clientId, clientSecret) + { } + + public ApplicationTokenCredentials(string authFile) + { + Dictionary config = new Dictionary() { + { "authurl", AzureEnvironment.AzureGlobalCloud.AuthenticationEndpoint }, + { "baseurl", AzureEnvironment.AzureGlobalCloud.ResourceManagerEndpoint }, + { "managementuri", AzureEnvironment.AzureGlobalCloud.TokenAudience } + }; + + File.ReadLines(authFile) + .All(line => + { + var keyVal = line.Trim().Split(new char[] { '=' }, 2); + config[keyVal[0].ToLowerInvariant()] = keyVal[1]; + return true; + }); + + Init(new AzureEnvironment + { + AuthenticationEndpoint = config["authurl"].Replace("\\", ""), + TokenAudience = config["managementuri"].Replace("\\", ""), + ResourceManagerEndpoint = config["baseurl"].Replace("\\", "") + }, config["tenant"], config["client"], config["key"]); + WithDefaultSubscription(config["subscription"]); + } + + private void Init(AzureEnvironment environment, string tenantId, string clientId, string clientSecret) + { + this.tenantId = tenantId; + this.clientId = clientId; + this.clientSecret = clientSecret; + activeDirectoryServiceSettings = new ActiveDirectoryServiceSettings + { + AuthenticationEndpoint = new Uri(environment.AuthenticationEndpoint), + TokenAudience = new Uri(environment.TokenAudience), + ValidateAuthority = true + }; + TokenCache = new TokenCache(); // Default to in-memory cache + } + + public ApplicationTokenCredentials withTokenCache(TokenCache tokenCache) + { + TokenCache = tokenCache; + return this; + } + + public ApplicationTokenCredentials WithDefaultSubscription(string subscriptionId) + { + DefaultSubscriptionId = subscriptionId; + return this; + } + + public override Task ProcessHttpRequestAsync(HttpRequestMessage request, CancellationToken cancellationToken) + { + ServiceClientCredentials credentials = ApplicationTokenProvider.LoginSilentAsync(tenantId, + clientId, + clientSecret, + activeDirectoryServiceSettings, + TokenCache).ConfigureAwait(false).GetAwaiter().GetResult(); + return credentials.ProcessHttpRequestAsync(request, cancellationToken); + } + } +} \ No newline at end of file diff --git a/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/AzureEnvironment.cs b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/AzureEnvironment.cs new file mode 100644 index 000000000..2e00f4d06 --- /dev/null +++ b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/AzureEnvironment.cs @@ -0,0 +1,69 @@ +namespace Microsoft.Azure.Management.V2.Resource +{ + public class AzureEnvironment + { + static AzureEnvironment() + { + AzureGlobalCloud = new AzureEnvironment() + { + AuthenticationEndpoint = "https://login.microsoftonline.com/", + ResourceManagerEndpoint = "https://management.azure.com/", + TokenAudience = "https://management.core.windows.net/" + }; + AzureChinaCloud = new AzureEnvironment() + { + AuthenticationEndpoint = "https://login.chinacloudapi.cn/", + ResourceManagerEndpoint = "https://management.chinacloudapi.cn/", + TokenAudience = "https://management.core.chinacloudapi.cn/" + }; + AzureUSGovernment = new AzureEnvironment() + { + AuthenticationEndpoint = "https://login-us.crosoftonlinmie.com/", + ResourceManagerEndpoint = "https://management.core.usgovcloudapi.net/", + TokenAudience = "https://management.core.usgovcloudapi.net/" + }; + AzureGermanCloud = new AzureEnvironment() + { + AuthenticationEndpoint = "https://login-us.crosoftonlinmie.com/", + ResourceManagerEndpoint = "https://management.core.usgovcloudapi.net/", + TokenAudience = "https://management.core.usgovcloudapi.net/" + }; + } + + /// + /// Azure active directory service endpoint to get OAuth token to access ARM resource + /// management endpoint . + /// + public string AuthenticationEndpoint { get; set; } + + /// + /// Azure ARM resource management endpoint. + /// + public string ResourceManagerEndpoint { get; set; } + + /// + /// The unique id (in the form of url) of the ARM resource management service . + /// + public string TokenAudience { get; set; } + + public static AzureEnvironment AzureGlobalCloud + { + get; private set; + } + + public static AzureEnvironment AzureChinaCloud + { + get; private set; + } + + public static AzureEnvironment AzureUSGovernment + { + get; private set; + } + + public static AzureEnvironment AzureGermanCloud + { + get; private set; + } + } +} \ No newline at end of file diff --git a/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Core/AzureConfigurable.cs b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Core/AzureConfigurable.cs new file mode 100644 index 000000000..702c6ce90 --- /dev/null +++ b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Core/AzureConfigurable.cs @@ -0,0 +1,49 @@ +using Microsoft.Rest; +using Microsoft.Rest.TransientFaultHandling; +using System.Net.Http; + +namespace Microsoft.Azure.Management.V2.Resource.Core +{ + public class AzureConfigurable : IAzureConfigurable + where T : class, IAzureConfigurable + { + private RestClient.RestClientBuilder.IBuildable restClientBuilder; + protected AzureConfigurable() + { + restClientBuilder = RestClient + .Configure() + .withEnvironment(AzureEnvironment.AzureGlobalCloud); + } + + public T withDelegatingHandler(DelegatingHandler delegatingHandler) + { + restClientBuilder.withDelegatingHandler(delegatingHandler); + return this as T; + } + + public T withLogLevel(HttpLoggingDelegatingHandler.Level level) + { + restClientBuilder.withLogLevel(level); + return this as T; + } + + public T withRetryPolicy(RetryPolicy retryPolicy) + { + restClientBuilder.withRetryPolicy(retryPolicy); + return this as T; + } + + public T withUserAgent(string product, string version) + { + restClientBuilder.withUserAgent(product, version); + return this as T; + } + + protected RestClient BuildRestClient(ServiceClientCredentials credentials) + { + return restClientBuilder + .withCredentials(credentials) + .build(); + } + } +} diff --git a/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Core/ChildListFlattener.cs b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Core/ChildListFlattener.cs new file mode 100644 index 000000000..5c7bd5a47 --- /dev/null +++ b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Core/ChildListFlattener.cs @@ -0,0 +1,115 @@ +using Microsoft.Rest.Azure; +using System; +using System.Collections; +using System.Collections.Generic; + +namespace Microsoft.Azure.Management.V2.Resource.Core +{ + public class ChildListFlattener + { + private string switchToCousin = "switchToCousin"; + private IEnumerator parentItr; + private Func> loadChildList; + private PagedList currentChildList; + private PagedList cousinList; + + public ChildListFlattener(PagedList parentList, Func> loadChildList) + { + parentItr = parentList.GetEnumerator(); + this.loadChildList = loadChildList; + } + + public PagedList Flatten() + { + currentChildList = NextChildList(); + if (currentChildList == null) + { + return PagedList.EmptyPagedList(); + } + SetCousin(); + return new PagedList(new ChildListPage(currentChildList.CurrentPage, this), (string nextPageLink) => + { + if (string.Equals(nextPageLink, switchToCousin)) + { + currentChildList = cousinList; + SetCousin(); + return new ChildListPage(currentChildList.CurrentPage, this); + } + else + { + currentChildList.LoadNextPage(); + if (currentChildList.CurrentPage.NextPageLink == null) + { + SetCousin(); + } + } + return new ChildListPage(currentChildList.CurrentPage, this); + }); + } + + private bool HasCousin + { + get + { + return cousinList != null; + } + } + + private void SetCousin() + { + cousinList = NextChildList(); + } + + private PagedList NextChildList() + { + while (parentItr.MoveNext()) + { + PagedList nextChildList = loadChildList(parentItr.Current); + if (nextChildList.GetEnumerator().MoveNext()) + { + return nextChildList; + } + } + return null; + } + + protected class ChildListPage : IPage + { + private IPage page; + private ChildListFlattener parent; + + public ChildListPage(IPage page, ChildListFlattener parent) + { + this.page = page; + this.parent = parent; + } + + public string NextPageLink + { + get + { + if (page.NextPageLink != null) + { + return page.NextPageLink; + } + + if (parent.HasCousin) + { + return parent.switchToCousin; + } + return null; + } + } + + public IEnumerator GetEnumerator() + { + return page.GetEnumerator(); + } + + IEnumerator IEnumerable.GetEnumerator() + { + return GetEnumerator(); + } + } + } +} diff --git a/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Core/ChildResource.cs b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Core/ChildResource.cs new file mode 100644 index 000000000..99a4fb35e --- /dev/null +++ b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Core/ChildResource.cs @@ -0,0 +1,36 @@ +/* * Copyright(c) Microsoft Corporation.All rights reserved. + * Licensed under the MIT License.See License.txt in the project root for + * license information.*/ + +namespace Microsoft.Azure.Management.V2.Resource.Core +{ + /** + * Child resource abstract implementation. + * (Internal use only) + * @param Azure inner child class type + * @param parent implementation + */ + public abstract class ChildResource + : IndexableWrapper, IChildResource + { + + protected ChildResource(string name, InnerT innerObject, ParentImplT parent) + : base(name, innerObject) + { + this.Parent = parent; + } + + /** + * @return parent resource for this child resource + */ + public ParentImplT Parent { get; private set; } + + string IChildResource.Name + { + get + { + return base.Key; + } + } + } +} \ No newline at end of file diff --git a/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Core/CreatableWrappers.cs b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Core/CreatableWrappers.cs new file mode 100644 index 000000000..093547a1c --- /dev/null +++ b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Core/CreatableWrappers.cs @@ -0,0 +1,11 @@ +namespace Microsoft.Azure.Management.V2.Resource.Core +{ + public abstract class CreatableWrappers : + ReadableWrappers + where FluentResourceT : IFluentResourceT + { + protected CreatableWrappers() { } + + protected abstract FluentResourceT WrapModel(string name); + } +} diff --git a/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Core/DAG/CreatorTaskGroup.cs b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Core/DAG/CreatorTaskGroup.cs new file mode 100644 index 000000000..701a70442 --- /dev/null +++ b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Core/DAG/CreatorTaskGroup.cs @@ -0,0 +1,16 @@ +using Microsoft.Azure.Management.V2.Resource.Core.ResourceActions; + +namespace Microsoft.Azure.Management.V2.Resource.Core.DAG +{ + public class CreatorTaskGroup : TaskGroupBase + { + public CreatorTaskGroup(string rootCreatableId, IResourceCreator resourceCreator) + : base(rootCreatableId, new CreatorTaskItem(resourceCreator)) + {} + + public IResourceT CreatedResource(string key) + { + return TaskResult(key); + } + } +} diff --git a/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Core/DAG/CreatorTaskItem.cs b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Core/DAG/CreatorTaskItem.cs new file mode 100644 index 000000000..08894499c --- /dev/null +++ b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Core/DAG/CreatorTaskItem.cs @@ -0,0 +1,36 @@ +using Microsoft.Azure.Management.V2.Resource.Core.ResourceActions; +using System.Threading; +using System.Threading.Tasks; + +namespace Microsoft.Azure.Management.V2.Resource.Core.DAG +{ + internal class CreatorTaskItem : ITaskItem + { + private IResourceCreator resourceCreator; + private IResourceT createdResource; + + public CreatorTaskItem(IResourceCreator resourceCreator) + { + this.resourceCreator = resourceCreator; + } + + public IResourceT Result + { + get + { + return createdResource; + } + } + + public async Task ExecuteAsync(CancellationToken cancellationToken) + { + if (createdResource != null) + { + await Task.Yield(); + return; + } + + createdResource = await resourceCreator.CreateResourceAsync(cancellationToken); + } + } +} diff --git a/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Core/DAG/DAGNode.cs b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Core/DAG/DAGNode.cs new file mode 100644 index 000000000..e2684bd21 --- /dev/null +++ b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Core/DAG/DAGNode.cs @@ -0,0 +1,90 @@ +using System; +using System.Collections.Generic; +using System.Collections.ObjectModel; +using System.Linq; +using System.Threading; + +namespace Microsoft.Azure.Management.V2.Resource.Core.DAG +{ + public class DAGNode : Node + { + private HashSet dependentKeys; + private int toBeResolved; + internal object LockObject = new object(); + + public DAGNode(string key, DataT data) : base(key, data) + { + dependentKeys = new HashSet(); + } + + public IReadOnlyCollection DependentKeys + { + get + { + return new ReadOnlyCollection(dependentKeys.ToList()); + } + } + + public void AddDependent(string dependentKey) + { + dependentKey = dependentKey.ToLowerInvariant(); + if (dependentKeys.Contains(dependentKey)) + { + throw new DependentExistsException(Key, dependentKey); + } + + dependentKeys.Add(dependentKey); + } + + public IReadOnlyCollection DependencyKeys + { + get + { + return Children; + } + } + + public void AddDependency(string dependencyKey) + { + AddChild(dependencyKey); + } + + public bool HasDependencies + { + get + { + return HasChildren; + } + } + + public bool IsPreparer { get; private set; } + + public void SetPreparer(bool isPreparer) + { + IsPreparer = isPreparer; + } + + public bool HasAllResolved + { + get + { + return toBeResolved == 0; + } + } + + public void ReportCompleted(string dependencyKey) + { + if (toBeResolved == 0) + { + throw new InvalidOperationException("invalid state - " + Key + ": The dependency '" + dependencyKey + "' is already reported or there is no such dependencyKey"); + } + toBeResolved--; + } + + public void Initialize() + { + toBeResolved = DependencyKeys.Count; + dependentKeys.Clear(); + } + } +} diff --git a/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Core/DAG/DAGraph.cs b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Core/DAG/DAGraph.cs new file mode 100644 index 000000000..1bc798c26 --- /dev/null +++ b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Core/DAG/DAGraph.cs @@ -0,0 +1,130 @@ +using System.Collections.Concurrent; +using System.Collections.Generic; + +namespace Microsoft.Azure.Management.V2.Resource.Core.DAG +{ + public class DAGraph : Graph where NodeT : DAGNode + { + private ConcurrentQueue queue; + private NodeT rootNode; + + public DAGraph(NodeT rootNode) + { + this.rootNode = rootNode; + queue = new ConcurrentQueue(); + this.rootNode.SetPreparer(true); + this.AddNode(rootNode); + } + + public bool IsRootNode(NodeT node) + { + return this.rootNode == node; + } + + public bool IsPreparer + { + get + { + return this.rootNode.IsPreparer; + } + } + + public void Merge(DAGraph parent) + { + parent.rootNode.AddDependency(rootNode.Key); + foreach(KeyValuePair item in this.graph) { + if (!parent.graph.ContainsKey(item.Key)) + { + parent.graph.Add(item.Key, item.Value); + } + } + } + + public void Prepare() + { + if (IsPreparer) + { + foreach(NodeT node in graph.Values) + { + node.Initialize(); // clear dependent and set ToBeResolved count + if (!this.IsRootNode(node)) + { + node.SetPreparer(false); + } + } + InitializeDependentKeys(); + InitializeQueue(); + } + } + + public NodeT GetNext() + { + string nodeKey; + if (queue.TryDequeue(out nodeKey)) + { + return GetNode(nodeKey); + } + return null; + } + + public NodeDataT GetNodeData(string key) + { + return GetNode(key).Data; + } + + public void ReportCompleted(NodeT dependency) + { + dependency.SetPreparer(true); + foreach (string dependentKey in dependency.DependentKeys) + { + NodeT dependent = GetNode(dependentKey); + lock (dependent.LockObject) + { + dependent.ReportCompleted(dependency.Key); + if (dependent.HasAllResolved) + { + queue.Enqueue(dependent.Key); + } + } + } + } + + private void InitializeDependentKeys() + { + Visit((NodeT node) => + { + if (!node.HasDependencies) + { + return; + } + + string dependentKey = node.Key; + foreach (string dependencyKey in node.DependencyKeys) + { + GetNode(dependencyKey).AddDependent(dependentKey); + } + }); + } + + private void InitializeQueue() + { + // Clear the queue + string s; + while (queue.TryDequeue(out s)) { } + + // push the leaf node keys + foreach(KeyValuePair item in graph) + { + if (!item.Value.HasDependencies) + { + queue.Enqueue(item.Key); + } + } + + if (queue.Count == 0) + { + throw new CircularDependencyException(); + } + } + } +} diff --git a/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Core/DAG/Exceptions.cs b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Core/DAG/Exceptions.cs new file mode 100644 index 000000000..ec1033ba7 --- /dev/null +++ b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Core/DAG/Exceptions.cs @@ -0,0 +1,25 @@ +using System; + +namespace Microsoft.Azure.Management.V2.Resource.Core.DAG +{ + public class ChildExistsException : Exception { + public ChildExistsException(string parentKey, string childKey) : base("A child with key '" + childKey + "' already exists in the parent '" + parentKey + "'") {} + } + + public class NodeExistsException : Exception { + public NodeExistsException(string key) : base("A node with key '" + key + "' already exists in the graph") {} + } + + public class NodeNotFoundException : Exception { + public NodeNotFoundException(string key) : base("A node with key '" + key + "' not found in the graph") {} + } + + public class DependentExistsException : Exception { + public DependentExistsException(string dependencyKey, string dependentKey) : base("The node '" + dependentKey + "' is already marked as dependent of the node '" + dependencyKey + "'") { + } + } + + public class CircularDependencyException : Exception { + public CircularDependencyException() : base("Found circular dependency in the graph") {} + } +} diff --git a/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Core/DAG/Graph.cs b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Core/DAG/Graph.cs new file mode 100644 index 000000000..b64c93517 --- /dev/null +++ b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Core/DAG/Graph.cs @@ -0,0 +1,75 @@ +using System; +using System.Collections.Generic; + +namespace Microsoft.Azure.Management.V2.Resource.Core.DAG +{ + public class Graph where NodeT : Node + { + protected IDictionary graph; + private HashSet visited; + + public Graph() + { + graph = new Dictionary(); + visited = new HashSet(); + } + + public void AddNode(NodeT node) + { + if (Contains(node.Key)) + { + throw new NodeExistsException(node.Key); + } + + graph.Add(node.Key.ToLowerInvariant(), node); + } + + public bool Contains(string key) + { + NodeT value; + return graph.TryGetValue(key.ToLowerInvariant(), out value); + } + + public NodeT GetNode(string key) + { + NodeT value; + if (!graph.TryGetValue(key.ToLowerInvariant(), out value)) + { + throw new NodeNotFoundException(key); + } + return value; + } + + public void Visit(Action visitor) + { + foreach (KeyValuePair item in graph) + { + if (!visited.Contains(item.Key)) + { + Dfs(visitor, item.Value); + } + } + visited.Clear(); + } + + private void Dfs(Action visitor, NodeT node) + { + visitor(node); + visited.Add(node.Key); + foreach (string childKey in node.Children) + { + var lowerCaseChildKey = childKey.ToLowerInvariant(); + if (!visited.Contains(lowerCaseChildKey)) + { + NodeT childNode; + if (!graph.TryGetValue(lowerCaseChildKey, out childNode)) + { + // TODO: Better exception for errors due to internal logic error + throw new Exception("unexpected state: the node " + childKey + " is marked as the child node of " + node.Key + ",but graph does not contain a node with key " + childKey); + } + Dfs(visitor, childNode); + } + } + } + } +} \ No newline at end of file diff --git a/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Core/DAG/ITaskItem.cs b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Core/DAG/ITaskItem.cs new file mode 100644 index 000000000..7bf78b06a --- /dev/null +++ b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Core/DAG/ITaskItem.cs @@ -0,0 +1,12 @@ +using System.Threading; +using System.Threading.Tasks; + +namespace Microsoft.Azure.Management.V2.Resource.Core.DAG +{ + public interface ITaskItem + { + TaskResultT Result { get; } + + Task ExecuteAsync(CancellationToken cancellationToken); + } +} diff --git a/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Core/DAG/Node.cs b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Core/DAG/Node.cs new file mode 100644 index 000000000..6637e3c48 --- /dev/null +++ b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Core/DAG/Node.cs @@ -0,0 +1,54 @@ +using System.Collections.Generic; +using System.Collections.ObjectModel; +using System.Linq; + +namespace Microsoft.Azure.Management.V2.Resource.Core.DAG +{ + public class Node + { + private HashSet children; + + public Node(string key, DataT data) + { + Key = key; + Data = data; + children = new HashSet(); + } + + public string Key + { + get; private set; + } + + public DataT Data + { + get; private set; + } + + public bool HasChildren + { + get + { + return children.Count != 0; + } + } + + public IReadOnlyCollection Children + { + get + { + return new ReadOnlyCollection(children.ToList()); + } + } + + public void AddChild(string childKey) + { + if (children.Contains(childKey)) + { + throw new ChildExistsException(Key, childKey); + } + + children.Add(childKey); + } + } +} diff --git a/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Core/DAG/TaskGroup.cs b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Core/DAG/TaskGroup.cs new file mode 100644 index 000000000..c0a7939e7 --- /dev/null +++ b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Core/DAG/TaskGroup.cs @@ -0,0 +1,20 @@ +using System.Threading; +using System.Threading.Tasks; + +namespace Microsoft.Azure.Management.V2.Resource.Core.DAG +{ + public interface ITaskGroup where TaskItemT : ITaskItem + { + DAGraph> DAG { get; } + + void Merge(ITaskGroup parentTaskGroup); + + bool IsPreparer { get; } + + void Prepare(); + + Task ExecuteAsync(CancellationToken cancellationToken, bool multiThreaded); + + TaskResultT TaskResult(string taskId); + } +} diff --git a/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Core/DAG/TaskGroupBase.cs b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Core/DAG/TaskGroupBase.cs new file mode 100644 index 000000000..423d32994 --- /dev/null +++ b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Core/DAG/TaskGroupBase.cs @@ -0,0 +1,128 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; + +namespace Microsoft.Azure.Management.V2.Resource.Core.DAG +{ + public abstract class TaskGroupBase : ITaskGroup> + { + private TaskCompletionSource taskCompletionSource; + private bool multiThreaded; + + public TaskGroupBase(string rootTaskItemId, ITaskItem rootTaskItem) + { + DAG = new DAGraph, DAGNode>>(CreateRootDAGNode(rootTaskItemId, rootTaskItem)); + } + + private DAGNode> CreateRootDAGNode(string rootTaskItemId, ITaskItem rootTaskItem) + { + return new DAGNode>(rootTaskItemId, rootTaskItem); + } + + public DAGraph, DAGNode>> DAG + { + get; + private set; + } + + public void Merge(ITaskGroup> parentTaskGroup) + { + DAG.Merge(parentTaskGroup.DAG); + } + + public bool IsPreparer + { + get + { + return DAG.IsPreparer; + } + } + + public void Prepare() + { + if (IsPreparer) + { + DAG.Prepare(); + } + } + + /// + /// Executes the group of tasks that creates a set of dependency resources and eventually + /// the root resource. + /// + /// Enable cancellation + /// + /// + public Task ExecuteAsync(CancellationToken cancellationToken, bool multiThreaded) + { + taskCompletionSource = new TaskCompletionSource(); + this.multiThreaded = multiThreaded; // Right now we run multithreaded TODO: enable non-multithreaded scenario + ExecuteReadyTasksAsync(cancellationToken); + return taskCompletionSource.Task; + } + + /// + /// Executes all the tasks in the ready queue in parallel. + /// + /// Enable cancellation + private void ExecuteReadyTasksAsync(CancellationToken cancellationToken) + { + var nextNode = DAG.GetNext(); + while (nextNode != null) + { + if (cancellationToken.IsCancellationRequested) + { + taskCompletionSource.TrySetCanceled(); + return; + } + else if (taskCompletionSource.Task.IsCanceled || taskCompletionSource.Task.IsFaulted) + { + return; + } + else + { + // Here we are not waiting or checking the result of 'task', anyfailure in this + // 'ExecuteNodeTaskAsync' will be signalled via this.taskCompletionSource. + Task task = ExecuteNodeTaskAsync(nextNode, cancellationToken); + } + nextNode = DAG.GetNext(); + } + } + + /// + /// Executes one task and await for it and as a part of continuation run the next + /// set of tasks in the ready queue. + /// + /// The node containing task + /// Enable cancellation + /// + private async Task ExecuteNodeTaskAsync(DAGNode> node, + CancellationToken cancellationToken) + { + try + { + await node.Data.ExecuteAsync(cancellationToken); + DAG.ReportCompleted(node); + if (DAG.IsRootNode(node)) + { + taskCompletionSource.SetResult(null); + } + else + { + ExecuteReadyTasksAsync(cancellationToken); + } + } + catch (Exception exception) + { + taskCompletionSource.TrySetException(exception); + } + } + + public TaskResultT TaskResult(string taskId) + { + return DAG.GetNodeData(taskId).Result; + } + } +} diff --git a/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Core/EnumNameAttribute.cs b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Core/EnumNameAttribute.cs new file mode 100644 index 000000000..cae64c114 --- /dev/null +++ b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Core/EnumNameAttribute.cs @@ -0,0 +1,47 @@ +using System; +using System.Linq; +using System.Reflection; + +namespace Microsoft.Azure.Management.V2.Resource.Core +{ + public class EnumNameAttribute : Attribute + { + private string name; + + public EnumNameAttribute(string name) + { + this.name = name; + } + + public static string GetName(Enum value) + { + Type enumType = value.GetType(); + FieldInfo fieldInfo = enumType.GetRuntimeField(value.ToString()); + EnumNameAttribute attribute = fieldInfo + .GetCustomAttributes(typeof(EnumNameAttribute), false) + .FirstOrDefault() as EnumNameAttribute; + if (attribute == null) + { + throw new ArgumentException("Expected attribute EnumName not found for " + value.ToString()); + } + return attribute.name; + } + + public static T FromName(string name) + { + Type enumType = typeof(T); + foreach (var fieldInfo in enumType.GetRuntimeFields()) + { + foreach (var custom in fieldInfo.CustomAttributes) + { + if (custom.AttributeType == typeof(EnumNameAttribute) + && ((string)custom.ConstructorArguments.First().Value).Equals(name, StringComparison.OrdinalIgnoreCase)) + { + return (T)Enum.Parse(enumType, fieldInfo.Name); + } + } + } + throw new ArgumentException("An enum with EnumName attribute " + name + " not found"); + } + } +} diff --git a/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Core/GroupableResource.cs b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Core/GroupableResource.cs new file mode 100644 index 000000000..d2a741655 --- /dev/null +++ b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Core/GroupableResource.cs @@ -0,0 +1,119 @@ +using Microsoft.Azure.Management.V2.Resource.Core; +using Microsoft.Azure.Management.V2.Resource.Core.ResourceActions; +using System; + +namespace Microsoft.Azure.Management.V2.Resource +{ + /// + /// Implementation of IGroupableResource. + /// + /// The implementation for IGroupableResource. + /// + /// The fluent wrapper interface for the resource + /// The autorest generated resource + /// The autorest generated base class from which InnerResourceT inherits + /// The implementation for fluent wrapper interface + /// The definition stage to continue after defining the region + /// The definition stage to continue after defining the resource gorup + public abstract class GroupableResource : + ResourceBase, + IGroupableResource + where FluentResourceT : GroupableResource, IFluentResourceT + where ManagerT : IManagerBase + where IFluentResourceT : class, IResource + where InnerResourceBaseT: class + where InnerResourceT : class, InnerResourceBaseT + where IDefintionAfterRegion : class + where IDefintionAfterResourceGroup : class + where DefTypeWithTags : class + where UTypeWithTags : class + { + protected ICreatable newGroup; + private string groupName; + private ManagerT manager; + + protected GroupableResource(string key, InnerResourceT innerObject, ManagerT manager) :base(key, innerObject) + { + this.manager = manager; + } + + public ManagerT MyManager + { + get + { + return this.manager; + } + } + + #region Getters [Implementation of IGroupableResource] + + public string ResourceGroupName + { + get + { + if (groupName != null) + { + return groupName; + } + return ResourceUtils.GroupFromResourceId(Id); + } + } + + #endregion + + #region Fluent Setters [Implementation of GroupableResource.Definition interfaces] + + public IDefintionAfterResourceGroup WithNewResourceGroup() + { + return WithNewResourceGroup(this.Name + "group"); + } + + public IDefintionAfterResourceGroup WithNewResourceGroup(string groupName) + { + ICreatable creatable = manager + .ResourceManager + .ResourceGroups + .Define(groupName) + .WithRegion(RegionName); + return WithNewResourceGroup(creatable); + } + + public IDefintionAfterResourceGroup WithNewResourceGroup(ICreatable creatable) + { + groupName = creatable.Key; + newGroup = creatable; + AddCreatableDependency(creatable as IResourceCreator); + return this as IDefintionAfterResourceGroup; + } + + public IDefintionAfterResourceGroup WithExistingResourceGroup(String groupName) + { + this.groupName = groupName; + return this as IDefintionAfterResourceGroup; + } + + public IDefintionAfterResourceGroup WithExistingResourceGroup(IResourceGroup group) + { + return WithExistingResourceGroup(group.Name); + } + + #endregion + } +} diff --git a/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Core/GroupableResources.cs b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Core/GroupableResources.cs new file mode 100644 index 000000000..e5a37c629 --- /dev/null +++ b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Core/GroupableResources.cs @@ -0,0 +1,64 @@ +using Microsoft.Azure.Management.V2.Resource.Core.CollectionActions; +using System.Threading.Tasks; +using System; +using System.Threading; + +namespace Microsoft.Azure.Management.V2.Resource.Core +{ + public abstract class GroupableResources : + CreatableWrappers, + ISupportsGettingByGroup, + ISupportsGettingById + where IFluentResourceT : IGroupableResource + where FluentResourceT : IFluentResourceT + where ManagerT : IManagerBase + { + protected GroupableResources(InnerCollectionT innerCollection, ManagerT manager) + { + InnerCollection = innerCollection; + MyManager = manager; + } + + protected InnerCollectionT InnerCollection { get; } + + protected ManagerT MyManager { get; } + + #region Implementation of ISupportsGettingByGroup interface + + public abstract Task GetByGroupAsync(string groupName, string name); + + public IFluentResourceT GetByGroup(string groupName, string name) + { + return GetByGroupAsync(groupName, name).Result; + } + + #endregion + + #region Implementation of ISupportsGettingById interface + + public async Task GetByIdAsync(string id) + { + return await GetByGroupAsync( + ResourceUtils.GroupFromResourceId(id), + ResourceUtils.NameFromResourceId(id) + ); + } + + public IFluentResourceT GetById(string id) + { + return GetByIdAsync(id).Result; + } + + public Task GetByIdAsync(string id, CancellationToken cancellationToken = default(CancellationToken)) + { + throw new NotImplementedException(); + } + + public Task GetByGroupAsync(string resourceGroupName, string name, CancellationToken cancellationToken = default(CancellationToken)) + { + throw new NotImplementedException(); + } + + #endregion + } +} diff --git a/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Core/IAzureConfigurable.cs b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Core/IAzureConfigurable.cs new file mode 100644 index 000000000..03b27e347 --- /dev/null +++ b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Core/IAzureConfigurable.cs @@ -0,0 +1,13 @@ +using Microsoft.Rest.TransientFaultHandling; +using System.Net.Http; + +namespace Microsoft.Azure.Management.V2.Resource.Core +{ + public interface IAzureConfigurable where T : IAzureConfigurable + { + T withUserAgent(string product, string version); + T withRetryPolicy(RetryPolicy retryPolicy); + T withDelegatingHandler(DelegatingHandler delegatingHandler); + T withLogLevel(HttpLoggingDelegatingHandler.Level level); + } +} diff --git a/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Core/IWrapper.cs b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Core/IWrapper.cs new file mode 100644 index 000000000..ec1954e30 --- /dev/null +++ b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Core/IWrapper.cs @@ -0,0 +1,7 @@ +namespace Microsoft.Azure.Management.V2.Resource.Core +{ + public interface IWrapper + { + T Inner { get; } + } +} diff --git a/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Core/Indexable.cs b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Core/Indexable.cs new file mode 100644 index 000000000..2daea8ae9 --- /dev/null +++ b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Core/Indexable.cs @@ -0,0 +1,17 @@ +using Microsoft.Azure.Management.V2.Resource.Core.ResourceActions; + +namespace Microsoft.Azure.Management.V2.Resource.Core +{ + public class Indexable : IIndexable + { + protected Indexable(string key) + { + Key = key; + } + + public string Key + { + get; private set; + } + } +} diff --git a/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Core/IndexableWrapper.cs b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Core/IndexableWrapper.cs new file mode 100644 index 000000000..1407e1490 --- /dev/null +++ b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Core/IndexableWrapper.cs @@ -0,0 +1,24 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; + +namespace Microsoft.Azure.Management.V2.Resource.Core +{ + public class IndexableWrapper : + Indexable, + IWrapper + + { + protected IndexableWrapper(String name, InnerT innerObject) : base(name) + { + Inner = innerObject; + } + + public InnerT Inner + { + get; private set; + + } + } +} diff --git a/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Core/ManagerBase.cs b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Core/ManagerBase.cs new file mode 100644 index 000000000..a4573a45e --- /dev/null +++ b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Core/ManagerBase.cs @@ -0,0 +1,24 @@ +namespace Microsoft.Azure.Management.V2.Resource.Core +{ + public interface IManagerBase + { + IResourceManager ResourceManager { get; } + } + + public abstract class ManagerBase : IManagerBase + { + public ManagerBase(RestClient restClient, string subscriptionId) + { + if (restClient != null) + { + ResourceManager = ResourceManager2 + .Authenticate(restClient) + .WithSubscription(subscriptionId); + } + } + + public IResourceManager ResourceManager { + get; protected set; + } + } +} diff --git a/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Core/PagedList.cs b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Core/PagedList.cs new file mode 100644 index 000000000..0d57ea32a --- /dev/null +++ b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Core/PagedList.cs @@ -0,0 +1,188 @@ +using Microsoft.Rest.Azure; +using System; +using System.Collections; +using System.Collections.Generic; + +namespace Microsoft.Azure.Management.V2.Resource.Core +{ + public class PagedList : IReadOnlyList + { + private Func> getNextPage; + private List aggregatedList; + + public IPage CurrentPage { get; private set; } + + public int Count + { + get + { + LoadAll(); + return aggregatedList.Count; + } + } + + public T this[int index] + { + get + { + while(index > aggregatedList.Count && !LoadNextPage()); + if (index > aggregatedList.Count) + { + throw new IndexOutOfRangeException(); + } + return aggregatedList[index]; + } + } + + public PagedList(IPage firstPage, Func> getNextPage) + { + CurrentPage = firstPage; + this.getNextPage = getNextPage; + aggregatedList = new List(); + aggregatedList.AddRange(CurrentPage); + } + + public PagedList(IEnumerable enumerable) : this(new OnePage(enumerable), (string link) => { return null; }) + {} + + public IEnumerator GetEnumerator() + { + return new Enumerator(this); + } + + IEnumerator IEnumerable.GetEnumerator() + { + return GetEnumerator(); + } + + public bool HasNextPage + { + get + { + return CurrentPage.NextPageLink != null; + } + } + + public IPage GetNextPage() + { + if (!HasNextPage) + { + return null; + } + return getNextPage(CurrentPage.NextPageLink); + } + + public bool LoadNextPage() + { + CurrentPage = GetNextPage(); + if (CurrentPage == null) + { + return false; + } + + aggregatedList.AddRange(CurrentPage); + return true; + } + + public void LoadAll() + { + while (LoadNextPage()) + { + LoadAll(); + } + } + + public struct Enumerator : IEnumerator, IEnumerator + { + private PagedList pagedList; + private IEnumerator aggregatedListEnumerator; + + public T Current + { + get + { + return aggregatedListEnumerator.Current; + } + } + + object IEnumerator.Current + { + get + { + return Current; + } + } + + internal Enumerator(PagedList list) + { + pagedList = list; + aggregatedListEnumerator = pagedList.aggregatedList.GetEnumerator(); + } + + public void Dispose() + { } + + bool IEnumerator.MoveNext() + { + if (aggregatedListEnumerator.MoveNext()) + { + return true; + } + + int oldCount = pagedList.aggregatedList.Count; + if (!pagedList.LoadNextPage()) + { + return false; + } + int newCount = pagedList.aggregatedList.Count; + + aggregatedListEnumerator = pagedList.aggregatedList.GetEnumerator(); + int skipCount = newCount - oldCount; + while (skipCount > 0) + { + aggregatedListEnumerator.MoveNext(); + skipCount--; + } + return true; + } + + void IEnumerator.Reset() + { + aggregatedListEnumerator.Reset(); + } + } + + public static PagedList EmptyPagedList() + { + return new PagedList(new OnePage(new List())); + } + + protected class OnePage : IPage + { + private IEnumerable enumerable; + + public OnePage(IEnumerable enumerable) + { + this.enumerable = enumerable; + } + + public string NextPageLink + { + get + { + return null; + } + } + + public IEnumerator GetEnumerator() + { + return enumerable.GetEnumerator(); + } + + IEnumerator IEnumerable.GetEnumerator() + { + return GetEnumerator(); + } + } + } +} diff --git a/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Core/ReadableWrappers.cs b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Core/ReadableWrappers.cs new file mode 100644 index 000000000..b183e2003 --- /dev/null +++ b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Core/ReadableWrappers.cs @@ -0,0 +1,25 @@ +using Microsoft.Rest.Azure; +using System; +using System.Collections; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; + +namespace Microsoft.Azure.Management.V2.Resource.Core +{ + public abstract class ReadableWrappers + where FluentResourceT : IFluentResourceT + { + protected abstract IFluentResourceT WrapModel(InnerResourceT inner); + + protected PagedList WrapList(PagedList innerList) + { + return new PagedList(new WrappedPage(innerList.CurrentPage, WrapModel), + (string nextPageLink) => + { + innerList.LoadNextPage(); + return new WrappedPage(innerList.CurrentPage, WrapModel); + }); + } + } +} diff --git a/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Core/Resource.cs b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Core/Resource.cs new file mode 100644 index 000000000..2babb2941 --- /dev/null +++ b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Core/Resource.cs @@ -0,0 +1,71 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See License.txt in the project root for +// license information. + +namespace Microsoft.Rest.Azure +{ + using System.Collections.Generic; + using Newtonsoft.Json; + using Microsoft.Rest; + + public partial class Resource : IResource + { + /// + /// Defines shared properties of an Azure resource. + /// + public Resource() { } + + /// + /// Initializes a new instance of the Resource class. + /// + public Resource(string location, string id = default(string), string name = default(string), string type = default(string), IDictionary tags = default(IDictionary)) + { + Id = id; + Name = name; + Type = type; + Location = location; + Tags = tags; + } + + /// + /// Resource Id + /// + [JsonProperty(PropertyName = "id")] + public virtual string Id { get; protected set; } + + /// + /// Resource name + /// + [JsonProperty(PropertyName = "name")] + public string Name { get; private set; } + + /// + /// Resource type + /// + [JsonProperty(PropertyName = "type")] + public string Type { get; private set; } + + /// + /// Resource location + /// + [JsonProperty(PropertyName = "location")] + public string Location { get; set; } + + /// + /// Resource tags + /// + [JsonProperty(PropertyName = "tags")] + public IDictionary Tags { get; set; } + + /// + /// Validate the object. Throws ValidationException if validation fails. + /// + public virtual void Validate() + { + if (Location == null) + { + throw new ValidationException(ValidationRules.CannotBeNull, "Location"); + } + } + } +} \ No newline at end of file diff --git a/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Core/ResourceActions/Creatable.cs b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Core/ResourceActions/Creatable.cs new file mode 100644 index 000000000..66c3cc35f --- /dev/null +++ b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Core/ResourceActions/Creatable.cs @@ -0,0 +1,118 @@ +using System; +using System.Threading.Tasks; +using Microsoft.Azure.Management.V2.Resource.Core.DAG; +using System.Threading; + +namespace Microsoft.Azure.Management.V2.Resource.Core.ResourceActions +{ + /// + /// The base class for all creatable resource. + /// + /// The fluent model type representing the creatable resource + /// The model inner type that the fluent model type wraps + /// The fluent model implementation type + /// The fluent resourced or one of the base interface from which inherits + public abstract class Creatable : + IndexableRefreshableWrapper, + IResourceCreator + where FluentResourceT : class + where IFluentResourceT : class, IResourceT + where IResourceT : class + { + protected string Name { get; private set; } + + protected Creatable(string name, InnerResourceT innerObject) : base(name, innerObject) + { + Name = name; + IResourceCreator creator = this as IResourceCreator; + CreatorTaskGroup = new CreatorTaskGroup(name, creator); + } + + protected void AddCreatableDependency(IResourceCreator creatableResource) + { + creatableResource.CreatorTaskGroup.Merge(CreatorTaskGroup); + } + + public IFluentResourceT Create() + { + return CreateAsync(CancellationToken.None).Result; + } + + public Task CreateAsync(CancellationToken cancellationToken, bool multiThreaded = true) + { + TaskCompletionSource taskCompletionSource = new TaskCompletionSource(); + if (CreatorTaskGroup.IsPreparer) + { + CreatorTaskGroup.Prepare(); + CreatorTaskGroup.ExecuteAsync(cancellationToken, multiThreaded).ContinueWith(task => + { + if (task.Exception != null) + { + taskCompletionSource.SetException(task.Exception.InnerExceptions); + } + else + { + IFluentResourceT thisResource = this as IFluentResourceT; + if (thisResource == null) + { + taskCompletionSource.SetException(new InvalidOperationException("Interal Error: Expected 'of type' '" + typeof(IFluentResourceT) + "', but got '" + this.GetType().Namespace + "'")); + } + else + { + taskCompletionSource.SetResult(thisResource); + } + } + }); + } + else + { + taskCompletionSource.SetException(new InvalidOperationException("Interal Error: Creatable::CreateAsync can be invoked only on preparer")); + } + return taskCompletionSource.Task; + } + + + protected IResourceT CreatedResource(string key) + { + return CreatorTaskGroup.TaskResult(key); + } + + public CreatorTaskGroup CreatorTaskGroup { get; private set; } + + public abstract Task CreateResourceAsync(CancellationToken cancellationToken); + + public virtual IFluentResourceT CreateResource() + { + return this.CreateResourceAsync(CancellationToken.None).Result; + } + + Task IResourceCreator.CreateResourceAsync(CancellationToken cancellationToken) + { + TaskCompletionSource taskCompletionSource = new TaskCompletionSource(); + this.CreateResourceAsync(cancellationToken).ContinueWith(task => + { + if (task.Exception != null) + { + taskCompletionSource.SetException(task.Exception); + } + else + { + taskCompletionSource.SetResult(task.Result); + } + }); + return taskCompletionSource.Task; + } + + IResourceT IResourceCreator.CreateResource() + { + return this.Create() as IResourceT; + } + } + + public interface IResourceCreator + { + CreatorTaskGroup CreatorTaskGroup { get; } + Task CreateResourceAsync(CancellationToken cancellationToken); + IResourceT CreateResource(); + } +} diff --git a/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Core/ResourceActions/CreatableUpdatable.cs b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Core/ResourceActions/CreatableUpdatable.cs new file mode 100644 index 000000000..d26293566 --- /dev/null +++ b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Core/ResourceActions/CreatableUpdatable.cs @@ -0,0 +1,36 @@ +using System.Threading; +using System.Threading.Tasks; + +namespace Microsoft.Azure.Management.V2.Resource.Core.ResourceActions +{ + public abstract class CreatableUpdatable + : Creatable, + ICreatable, + IUpdatable + where IFluentResourceT: class, IResourceT + where FluentResourceT: class + where IResourceT: class + where IUpdatableT: class + { + protected CreatableUpdatable(string name, InnerResourceT innerObject) : base(name, innerObject) { } + + #region Implementation of IUpdatable interface + + public virtual IUpdatableT Update() + { + return this as IUpdatableT; + } + + #endregion + public IFluentResourceT Apply() + { + return ApplyAsync(CancellationToken.None, true).Result; + } + + public virtual async Task ApplyAsync(CancellationToken cancellationToken = default(CancellationToken), bool multiThreaded = true) + { + return await CreateAsync(cancellationToken, multiThreaded) as IFluentResourceT; + } + + } +} diff --git a/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Core/ResourceActions/IndexableRefreshable.cs b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Core/ResourceActions/IndexableRefreshable.cs new file mode 100644 index 000000000..cd897f9f3 --- /dev/null +++ b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Core/ResourceActions/IndexableRefreshable.cs @@ -0,0 +1,19 @@ +using System; +using System.Threading.Tasks; + +namespace Microsoft.Azure.Management.V2.Resource.Core.ResourceActions +{ + public abstract class IndexableRefreshable : + Indexable, + IRefreshable + { + protected IndexableRefreshable(string name) : base(name) {} + + public abstract Task Refresh(); + + IFluentResourceT IRefreshable.Refresh() + { + throw new NotImplementedException(); + } + } +} diff --git a/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Core/ResourceActions/IndexableRefreshableWrapper.cs b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Core/ResourceActions/IndexableRefreshableWrapper.cs new file mode 100644 index 000000000..088cda7a2 --- /dev/null +++ b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Core/ResourceActions/IndexableRefreshableWrapper.cs @@ -0,0 +1,20 @@ +namespace Microsoft.Azure.Management.V2.Resource.Core.ResourceActions +{ + public abstract class IndexableRefreshableWrapper : IndexableRefreshable, IWrapper + { + protected IndexableRefreshableWrapper(string name, InnerResourceT innerObject) : base(name) + { + SetInner(innerObject); + } + + public InnerResourceT Inner + { + get; private set; + } + + protected void SetInner(InnerResourceT innerObject) + { + Inner = innerObject; + } + } +} diff --git a/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Core/ResourceBase.cs b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Core/ResourceBase.cs new file mode 100644 index 000000000..7c2bb7e19 --- /dev/null +++ b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Core/ResourceBase.cs @@ -0,0 +1,256 @@ +using Microsoft.Azure.Management.V2.Resource.Core.ResourceActions; +using Microsoft.Azure.Management.ResourceManager.Models; +using System; +using System.Collections.Generic; +using System.Reflection; +using Microsoft.Azure.Management.V2.Resource.Core.Resource.Definition; +using Microsoft.Azure.Management.V2.Resource.Core.Resource.Update; +using System.Threading; +using System.Threading.Tasks; + +namespace Microsoft.Azure.Management.V2.Resource.Core +{ + /// + /// This class uses Reflection, it will be removed once we have a "Resource" from which all resource inherits + /// + /// The fluent wrapper interface for the resource + /// The autorest generated resource + /// The autorest generated base class from which inherits + /// The implementation for fluent wrapper interface + public abstract class ResourceBase : + CreatableUpdatable, + IResource, IDefinitionWithTags, IUpdateWithTags + where FluentResourceT : ResourceBase, IFluentResourceT + where IFluentResourceT : class, IResource + where InnerResourceBaseT : class + where InnerResourceT : class, InnerResourceBaseT + where IDefintionAfterRegion: class + where DefTypeWithTags : class + where UTypeWithTags : class + { + + private TypeInfo resourceTypeInfo; + + protected ResourceBase(string key, InnerResourceT innerObject) : base(key, innerObject) + { + EnsureResource(innerObject); + if (GetValue("Tags") == null) + { + SetValue("Tags", new Dictionary()); + } + } + + #region Getters + + public string Id + { + get + { + return GetStringValue("Id"); + + } + } + + public new string Name + { + get + { + string name = GetStringValue("Name"); + if (name != null) + { + return name; + } + return base.Name; + } + } + + public string RegionName + { + get + { + return GetStringValue("Location"); + } + } + + public string Type + { + get + { + return GetStringValue("Type"); + } + } + + public IReadOnlyDictionary Tags + { + get + { + Dictionary tags = (Dictionary < string, string>)GetValue("Tags"); + return tags; + } + } + + #endregion + + protected bool IsInCreateMode + { + get + { + return Id == null; + } + } + + public Region Region + { + get + { + return EnumNameAttribute.FromName(GetValue("Location") as string); + } + } + + IDictionary IResource.Tags + { + get + { + return this.GetValue("Tags") as IDictionary; + } + } + + #region The fluent setters + + public IDefintionAfterRegion WithRegion(string regionName) + { + SetValue("Location", regionName); + return this as IDefintionAfterRegion; + } + + public IDefintionAfterRegion WithRegion(Region region) + { + SetValue("Location", EnumNameAttribute.GetName(region)); + return this as IDefintionAfterRegion; + } + + public FluentResourceT WithTags(IDictionary tags) + { + SetValue("Tags", tags); + return this as FluentResourceT; + } + + public FluentResourceT WithTag(string key, string value) + { + var tags = GetValue("Tags") as IDictionary; + if (!tags.ContainsKey(key)) + { + tags.Add(key, value); + } + return this as FluentResourceT; + } + + public FluentResourceT WithoutTag(string key) + { + var tags = GetValue("Tags") as IDictionary; + if (tags.ContainsKey(key)) + { + tags.Remove(key); + SetValue("Tags", tags); + } + return this as FluentResourceT; + } + + DefTypeWithTags IDefinitionWithTags.WithTag(string key, string value) + { + this.WithTag(key, value); + return this as DefTypeWithTags; + } + + DefTypeWithTags IDefinitionWithTags.WithTags(IDictionary tags) + { + this.WithTags(tags); + return this as DefTypeWithTags; + } + + + UTypeWithTags IUpdateWithTags.WithTag(string key, string value) + { + this.WithTag(key, value); + return this as UTypeWithTags; + } + + UTypeWithTags IUpdateWithTags.WithTags(IDictionary tags) + { + this.WithTags(tags); + return this as UTypeWithTags; + } + + UTypeWithTags IUpdateWithTags.WithoutTag(string key) + { + this.WithoutTag(key); + return this as UTypeWithTags; + } + + #endregion + + private void EnsureResource(InnerResourceT innerObject) + { + var baseTypeName = typeof(InnerResourceBaseT).FullName; + TypeInfo typeInfo = innerObject.GetType().GetTypeInfo(); + while (typeInfo != null && !typeInfo.FullName.Equals(baseTypeName)) + { + Type baseType = typeInfo.BaseType; + if (baseType == null) + { + break; + } + typeInfo = baseType.GetTypeInfo(); + } + + if (typeInfo == null) + { + throw new ArgumentException(innerObject.GetType().FullName + " is not " + baseTypeName); + } + + if (typeInfo.GetDeclaredProperty("Id") == null) + { + throw new ArgumentException(typeInfo.FullName + " is not a Resource [Missing Id property]"); + } + + if (typeInfo.GetDeclaredProperty("Location") == null) + { + throw new ArgumentException(typeInfo.FullName + " is not a Resource [Missing Location property]"); + } + + if (typeInfo.GetDeclaredProperty("Name") == null) + { + throw new ArgumentException(typeInfo.FullName + " is not a Resource [Missing Name property]"); + } + + if (typeInfo.GetDeclaredProperty("Tags") == null) + { + throw new ArgumentException(typeInfo.FullName + " is not a Resource [Missing Tags property]"); + } + + if (typeInfo.GetDeclaredProperty("Type") == null) + { + throw new ArgumentException(typeInfo.FullName + " is not a Resource [Missing Type property]"); + } + + resourceTypeInfo = typeInfo; + } + + private string GetStringValue(string propertyName) + { + return (string) GetValue(propertyName); + } + + private object GetValue(string propertyName) + { + PropertyInfo propInfo = resourceTypeInfo.GetDeclaredProperty(propertyName); + return propInfo.GetValue(Inner); + } + + private void SetValue(string propertyName, object val) + { + PropertyInfo propInfo = resourceTypeInfo.GetDeclaredProperty(propertyName); + propInfo.SetValue(Inner, val); + } + } +} diff --git a/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Core/ResourceUtils.cs b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Core/ResourceUtils.cs new file mode 100644 index 000000000..21fd5ffcb --- /dev/null +++ b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Core/ResourceUtils.cs @@ -0,0 +1,51 @@ +using System.Linq; + +namespace Microsoft.Azure.Management.V2.Resource.Core +{ + public static class ResourceUtils + { + public static string ExtractFromResourceId(string id, string identifier) + { + if (id == null || identifier == null) + { + return null; + } + + identifier = identifier.ToLower(); + return id.Split('/') + .SkipWhile(part => !part.ToLower().Equals(identifier)) + .Skip(1) + .FirstOrDefault(); + } + + public static string GroupFromResourceId(string id) + { + return ExtractFromResourceId(id, "resourceGroups"); + } + + public static string ResourceProviderFromResourceId(string id) + { + return ExtractFromResourceId(id, "providers"); + } + + public static string NameFromResourceId(string id) + { + return id.Split('/').Last(); + } + + public static string ResourceTypeFromResourceId(string id) + { + return id.Split('/') + .Reverse() + .Skip(1) + .Take(1) + .FirstOrDefault(); + } + + public static string ParentResourcePathFromResourceId(string id) + { + string parent = id.Replace("/" + ResourceTypeFromResourceId(id) + "/" + NameFromResourceId(id) + "/", ""); + return ExtractFromResourceId(parent, ResourceProviderFromResourceId(parent)); + } + } +} diff --git a/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Core/RestClient/DelegatingHandlerBase.cs b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Core/RestClient/DelegatingHandlerBase.cs new file mode 100644 index 000000000..c601d3ad7 --- /dev/null +++ b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Core/RestClient/DelegatingHandlerBase.cs @@ -0,0 +1,33 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Net.Http; +using System.Net.Http.Headers; +using System.Threading.Tasks; + +namespace Microsoft.Azure.Management.V2.Resource.Core +{ + public class DelegatingHandlerBase : DelegatingHandler + { + public DelegatingHandlerBase() : base() { } + + public DelegatingHandlerBase(HttpMessageHandler innerHandler) : base(innerHandler) + { } + + protected string getHeader(HttpHeaders headers, string name) + { + IEnumerable values; + var found = headers.TryGetValues(name, out values); + if (found) + { + return values.FirstOrDefault(); + } + + return null; + } + protected bool isHeaderExists(HttpHeaders headers, string name) + { + return headers.Any(h => h.Key.Equals(name, StringComparison.OrdinalIgnoreCase)); + } + } +} diff --git a/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Core/RestClient/HttpLoggingDelegatingHandler.cs b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Core/RestClient/HttpLoggingDelegatingHandler.cs new file mode 100644 index 000000000..ec6ce7544 --- /dev/null +++ b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Core/RestClient/HttpLoggingDelegatingHandler.cs @@ -0,0 +1,95 @@ +using Newtonsoft.Json; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Net.Http; +using System.Threading; +using System.Threading.Tasks; + +namespace Microsoft.Azure.Management.V2.Resource.Core +{ + public class HttpLoggingDelegatingHandler : DelegatingHandlerBase + { + public enum Level + { + NONE, + BASIC, + HEADERS, + BODY + }; + + public Level LogLevel { get; set; } + + public HttpLoggingDelegatingHandler() : base() { } + + public HttpLoggingDelegatingHandler(HttpMessageHandler innerHandler) : base(innerHandler) + { } + + protected override async Task SendAsync(HttpRequestMessage request, CancellationToken cancellationToken) + { + if (LogLevel == Level.NONE) + { + return await base.SendAsync(request, cancellationToken); + } + + Console.WriteLine("Request: {0} {1}", request.Method, request.RequestUri); + if (LogLevel == Level.BODY || LogLevel == Level.HEADERS) + { + Console.WriteLine(" headers:"); + foreach (var header in request.Headers) + { + Console.WriteLine(" {0} : {1}", header.Key, string.Join(" ", header.Value)); + } + } + + if (LogLevel == Level.BODY) + { + if (request.Content != null) + { + string content = await request.Content.ReadAsStringAsync(); + Console.WriteLine(" body: " + content); + } + // TODO: Checking for binary request contents and omitting them + } + + HttpResponseMessage response = await base.SendAsync(request, cancellationToken); + if (LogLevel == Level.BODY || LogLevel == Level.HEADERS) + { + Console.WriteLine("Response:"); + Console.WriteLine(" headers:"); + foreach (var header in response.Headers) + { + Console.WriteLine(" {0} : {1}", header.Key, string.Join(" ", header.Value)); + } + } + + + if (LogLevel == Level.BODY) + { + bool isEncoded = isHeaderExists(response.Content.Headers, "Content-Encoding"); + if (!isEncoded && response.Content != null) + { + string content = await response.Content.ReadAsStringAsync(); + string contentType = getHeader(response.Content.Headers, "Content-Type"); + if (contentType != null && contentType.Contains("application/json")) + { + try + { + dynamic parsedJson = JsonConvert.DeserializeObject(content); + content = JsonConvert.SerializeObject(parsedJson, Formatting.Indented); + } + catch (Exception) { /*ignore and print below as it is*/ } + } + Console.WriteLine(content); + } + + // TODO: Checking for binary response content and omitting them + if (isEncoded) + { + Console.WriteLine(" body: "); + } + } + return response; + } + } +} diff --git a/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Core/RestClient/RestClient.cs b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Core/RestClient/RestClient.cs new file mode 100644 index 000000000..c71583428 --- /dev/null +++ b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Core/RestClient/RestClient.cs @@ -0,0 +1,173 @@ +using Microsoft.Rest; +using Microsoft.Rest.TransientFaultHandling; +using System; +using System.Collections.Generic; +using System.Collections.ObjectModel; +using System.Linq; +using System.Net.Http; +using System.Threading.Tasks; + +namespace Microsoft.Azure.Management.V2.Resource.Core +{ + /// + /// The RestClient + /// + public class RestClient + { + private List handlers; + + private RestClient(HttpClientHandler httpClientHandler, List handlers) + { + RootHttpHandler = httpClientHandler; + this.handlers = handlers; + } + + public string BaseUri + { + get; private set; + } + + public ServiceClientCredentials Credentials + { + get; private set; + } + + public RetryPolicy RetryPolicy + { + get; private set; + } + + public IReadOnlyCollection Handlers + { + get + { + return new ReadOnlyCollection(handlers); + } + } + + public HttpClientHandler RootHttpHandler + { + get; private set; + } + + /// + /// Builder to configure and build a RestClient. + /// + /// + public static RestClientBuilder.IBlank Configure() + { + return new RestClientBuilder(); + } + + // The builder for + public class RestClientBuilder : RestClientBuilder.IBlank, RestClientBuilder.IBuildable + { + private string baseUri; + private ServiceClientCredentials credentials; + private List handlers; + private RetryPolicy retryPolicy; + private HttpLoggingDelegatingHandler loggingDelegatingHandler; + private UserAgentDelegatingHandler userAgentDelegatingHandler; + + /// + /// Restrict access so that for users it can be created only by + /// + internal RestClientBuilder() + { + handlers = new List(); + } + + #region Fluent builder interfaces + public interface IBlank : IWithBaseUri, IWithEnvironment + { + } + + public interface IWithBaseUri + { + IBuildable withBaseUri(string baseUri); + } + + public interface IWithEnvironment + { + IBuildable withEnvironment(AzureEnvironment environment); + } + + public interface IBuildable + { + IBuildable withUserAgent(string product, string version); + IBuildable withRetryPolicy(RetryPolicy retryPolicy); + IBuildable withDelegatingHandler(DelegatingHandler delegatingHandler); + IBuildable withLogLevel(HttpLoggingDelegatingHandler.Level level); + IBuildable withCredentials(ServiceClientCredentials credentials); + RestClient build(); + } + #endregion + + public IBuildable withBaseUri(string baseUri) + { + this.baseUri = baseUri; + return this; + } + + public IBuildable withEnvironment(AzureEnvironment environment) + { + return withBaseUri(environment.ResourceManagerEndpoint); + } + + public IBuildable withUserAgent(string product, string version) + { + if (userAgentDelegatingHandler == null) + { + userAgentDelegatingHandler = new UserAgentDelegatingHandler(); + withDelegatingHandler(userAgentDelegatingHandler); + } + userAgentDelegatingHandler.appendUserAgent(product + "/" + version); + return this; + } + + public IBuildable withDelegatingHandler(DelegatingHandler delegatingHandler) + { + handlers.Add(delegatingHandler); + return this; + } + + public IBuildable withRetryPolicy(RetryPolicy retryPolicy) + { + this.retryPolicy = retryPolicy; + return this; + } + + public IBuildable withLogLevel(HttpLoggingDelegatingHandler.Level level) + { + if (loggingDelegatingHandler == null) + { + loggingDelegatingHandler = new HttpLoggingDelegatingHandler(); + withDelegatingHandler(loggingDelegatingHandler); + } + loggingDelegatingHandler.LogLevel = level; + return this; + } + + public IBuildable withCredentials(ServiceClientCredentials credentials) + { + this.credentials = credentials; + return this; + } + + public RestClient build() + { +#if NET45 + HttpClientHandler httpClientHandler = new WebRequestHandler(); +#else + HttpClientHandler httpClientHandler = new HttpClientHandler(); +#endif + return new RestClient(httpClientHandler, handlers) + { + BaseUri = baseUri, + Credentials = credentials, + RetryPolicy = retryPolicy + }; + } + } + } +} diff --git a/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Core/RestClient/UserAgentDelegatingHandler.cs b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Core/RestClient/UserAgentDelegatingHandler.cs new file mode 100644 index 000000000..624c1fe9b --- /dev/null +++ b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Core/RestClient/UserAgentDelegatingHandler.cs @@ -0,0 +1,34 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Net.Http; +using System.Threading; +using System.Threading.Tasks; + +namespace Microsoft.Azure.Management.V2.Resource.Core +{ + public class UserAgentDelegatingHandler : DelegatingHandlerBase + { + private string userAgent; + public UserAgentDelegatingHandler() : base() { } + + public UserAgentDelegatingHandler(HttpMessageHandler innerHandler) : base(innerHandler) + { } + + public void setUserAgent(string userAgent) + { + this.userAgent = userAgent; + } + + public void appendUserAgent(string userAgent) + { + this.userAgent = " " + userAgent; + } + + protected override async Task SendAsync(HttpRequestMessage request, CancellationToken cancellationToken) + { + request.Headers.Add("User-Agent", this.userAgent); + return await base.SendAsync(request, cancellationToken); + } + } +} diff --git a/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Core/SubResource.cs b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Core/SubResource.cs new file mode 100644 index 000000000..f82130ad7 --- /dev/null +++ b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Core/SubResource.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. + +namespace Microsoft.Rest.Azure +{ + using Newtonsoft.Json; + + /// + /// + public partial class SubResource : IResource + { + /// + /// Initializes a new instance of the SubResource class. + /// + public SubResource() { } + + /// + /// Initializes a new instance of the SubResource class. + /// + public SubResource(string id = default(string)) + { + Id = id; + } + + /// + /// Resource Id + /// + [JsonProperty(PropertyName = "id")] + public string Id { get; set; } + + } +} \ No newline at end of file diff --git a/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Core/WrappedPage.cs b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Core/WrappedPage.cs new file mode 100644 index 000000000..420dd9d05 --- /dev/null +++ b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Core/WrappedPage.cs @@ -0,0 +1,38 @@ +using Microsoft.Rest.Azure; +using System; +using System.Collections; +using System.Collections.Generic; +using System.Linq; + +namespace Microsoft.Azure.Management.V2.Resource.Core +{ + internal class WrappedPage : IPage + { + private string nextPageLink; + private List wrappedPageItems; + + public WrappedPage(IPage innerPage, Func doWrap) + { + wrappedPageItems = innerPage.Select(doWrap).ToList(); + nextPageLink = innerPage.NextPageLink; + } + + public string NextPageLink + { + get + { + return nextPageLink; + } + } + + public IEnumerator GetEnumerator() + { + return wrappedPageItems.GetEnumerator(); + } + + IEnumerator IEnumerable.GetEnumerator() + { + return GetEnumerator(); + } + } +} diff --git a/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Core/Wrapper.cs b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Core/Wrapper.cs new file mode 100644 index 000000000..e22ff0c32 --- /dev/null +++ b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Core/Wrapper.cs @@ -0,0 +1,15 @@ +namespace Microsoft.Azure.Management.V2.Resource.Core +{ + public class Wrapper : IWrapper + { + public Wrapper(InnerT inner) + { + Inner = inner; + } + + public InnerT Inner + { + get; private set; + } + } +} diff --git a/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Deployment/DeploymentExportResultImpl.cs b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Deployment/DeploymentExportResultImpl.cs new file mode 100644 index 000000000..2b73ac063 --- /dev/null +++ b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Deployment/DeploymentExportResultImpl.cs @@ -0,0 +1,33 @@ +using Microsoft.Azure.Management.ResourceManager.Models; +using Microsoft.Azure.Management.V2.Resource.Core; +using Newtonsoft.Json; +using System; + +namespace Microsoft.Azure.Management.V2.Resource +{ + internal class DeploymentExportResultImpl : + Wrapper, + IDeploymentExportResult + { + + internal DeploymentExportResultImpl(DeploymentExportResultInner innerModel) : base(innerModel) + { + } + + public object Template + { + get + { + return Inner.Template; + } + } + + public string TemplateAsJson + { + get + { + return JsonConvert.SerializeObject(Template); + } + } + } +} diff --git a/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Deployment/DeploymentImpl.cs b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Deployment/DeploymentImpl.cs new file mode 100644 index 000000000..72a59e2a9 --- /dev/null +++ b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Deployment/DeploymentImpl.cs @@ -0,0 +1,480 @@ +using Microsoft.Azure.Management.ResourceManager; +using Microsoft.Azure.Management.ResourceManager.Models; +using Microsoft.Azure.Management.V2.Resource.Core; +using Microsoft.Azure.Management.V2.Resource.Core.ResourceActions; +using Microsoft.Azure.Management.V2.Resource.Deployment.Update; +using System; +using System.Collections.Generic; +using System.Threading; +using System.Threading.Tasks; +using Microsoft.Azure.Management.V2.Resource.Deployment.Definition; +using Newtonsoft.Json; +using System.Linq; + +namespace Microsoft.Azure.Management.V2.Resource +{ + internal class DeploymentImpl : + CreatableUpdatable, + IDeployment, + Deployment.Definition.IDefinition, + Deployment.Update.IUpdate + { + private IDeploymentsOperations client; + private IDeploymentOperationsOperations deploymentOperationsClient; + private IResourceManager resourceManager; + private string resourceGroupName; + private ICreatable creatableResourceGroup; + + internal DeploymentImpl(DeploymentExtendedInner innerModel, + IDeploymentsOperations client, + IDeploymentOperationsOperations deploymentOperationsClient, + IResourceManager resourceManager) : base(innerModel.Name, innerModel) + { + this.client = client; + this.deploymentOperationsClient = deploymentOperationsClient; + resourceGroupName = ResourceUtils.GroupFromResourceId(innerModel.Id); + this.resourceManager = resourceManager; + } + + #region Getters + + public string ResourceGroupName + { + get + { + return resourceGroupName; + } + } + + public string Name + { + get + { + return Inner.Name; + } + } + + public string ProvisioningState + { + get + { + if (Inner.Properties == null) + { + return null; + } + return Inner.Properties.ProvisioningState; + } + } + + public string CorrelationId + { + get + { + if (Inner.Properties == null) + { + return null; + } + return Inner.Properties.CorrelationId; + } + } + + public DateTime? Timestamp + { + get + { + if (Inner.Properties == null) + { + return null; + } + return Inner.Properties.Timestamp; + } + } + + public object Outputs + { + get + { + if (Inner.Properties == null) + { + return null; + } + return Inner.Properties.Outputs; + } + } + + public IList Providers + { + get + { + if (Inner.Properties == null) + { + return null; + } + return (from providerInner in Inner.Properties.Providers + select new ProviderImpl(providerInner)).ToList(); + } + } + + public IList Dependencies + { + get + { + if (Inner.Properties == null) + { + return null; + } + return Inner.Properties.Dependencies; + } + } + + public object Template + { + get + { + if (Inner.Properties == null) + { + return null; + } + return Inner.Properties.Template; + } + } + + public TemplateLink TemplateLink + { + get + { + if (Inner.Properties == null) + { + return null; + } + return Inner.Properties.TemplateLink; + } + } + + public object Parameters + { + get + { + if (Inner.Properties == null) + { + return null; + } + return Inner.Properties.Parameters; + } + } + + public ParametersLink ParametersLink + { + get + { + if (Inner.Properties == null) + { + return null; + } + return Inner.Properties.ParametersLink; + } + } + + public DeploymentMode? Mode + { + get + { + if (Inner.Properties == null) + { + return null; + } + return Inner.Properties.Mode; + } + } + + public IDeploymentOperations DeploymentOperations + { + get + { + return new DeploymentOperationsImpl(deploymentOperationsClient, this); + } + } + + #endregion + + #region Setters + + #region Definition Setters + + public Deployment.Definition.IWithTemplate WithNewResourceGroup(string resourceGroupName, Region region) + { + creatableResourceGroup = resourceManager.ResourceGroups + .Define(resourceGroupName) + .WithRegion(region); + this.resourceGroupName = resourceGroupName; + return this; + } + + public Deployment.Definition.IWithTemplate WithNewResourceGroup(ICreatable groupDefinition) + { + creatableResourceGroup = groupDefinition; + resourceGroupName = creatableResourceGroup.Key; // TODO Add support for Name in ICreatable + return this; + } + + public Deployment.Definition.IWithTemplate WithExistingResourceGroup(string resourceGroupName) + { + this.resourceGroupName = resourceGroupName; + return this; + } + + public Deployment.Definition.IWithTemplate WithExistingResourceGroup(IResourceGroup group) + { + resourceGroupName = group.Name; + return this; + } + + public Deployment.Definition.IWithParameters WithTemplate(object template) + { + if (Inner.Properties == null) + { + Inner.Properties = new DeploymentPropertiesExtended(); + } + + Inner.Properties.Template = template; + Inner.Properties.TemplateLink = null; + return this; + } + + public Deployment.Definition.IWithParameters WithTemplate(string templateJson) + { + return WithTemplate(JsonConvert.DeserializeObject(templateJson)); + } + + public Deployment.Definition.IWithParameters WithTemplateLink(string uri, string contentVersion) + { + if (Inner.Properties == null) + { + Inner.Properties = new DeploymentPropertiesExtended(); + } + Inner.Properties.TemplateLink = new TemplateLink(uri, contentVersion); + Inner.Properties.Template = null; + return this; + } + + public Deployment.Definition.IWithMode WithParameters(object parameters) + { + if (Inner.Properties == null) + { + Inner.Properties = new DeploymentPropertiesExtended(); + } + Inner.Properties.Parameters = parameters; + Inner.Properties.ParametersLink = null; + return this; + } + + public Deployment.Definition.IWithMode WithParameters(string parametersJson) + { + return WithParameters(JsonConvert.DeserializeObject(parametersJson)); + } + + public Deployment.Definition.IWithMode WithParametersLink(string uri, string contentVersion) + { + if (Inner.Properties == null) + { + Inner.Properties = new DeploymentPropertiesExtended(); + } + Inner.Properties.ParametersLink = new ParametersLink(uri, contentVersion); + Inner.Properties.Parameters = null; + return this; + } + + public IWithCreate WithMode(DeploymentMode mode) + { + if (Inner.Properties == null) + { + Inner.Properties = new DeploymentPropertiesExtended(); + } + Inner.Properties.Mode = mode; + return this; + } + + #endregion + + #region Update Setters + + IUpdate Deployment.Update.IWithTemplate.WithTemplate(object template) + { + if (Inner.Properties == null) + { + Inner.Properties = new DeploymentPropertiesExtended(); + } + + Inner.Properties.Template = template; + Inner.Properties.TemplateLink = null; + return this; + } + + IUpdate Deployment.Update.IWithTemplate.WithTemplate(string templateJson) + { + var that = (IUpdate)this; + return that.WithTemplate(JsonConvert.DeserializeObject(templateJson)); + } + + IUpdate Deployment.Update.IWithTemplate.WithTemplateLink(string uri, string contentVersion) + { + if (Inner.Properties == null) + { + Inner.Properties = new DeploymentPropertiesExtended(); + } + Inner.Properties.TemplateLink = new TemplateLink(uri, contentVersion); + Inner.Properties.Template = null; + return this; + } + + IUpdate Deployment.Update.IWithParameters.WithParameters(object parameters) + { + if (Inner.Properties == null) + { + Inner.Properties = new DeploymentPropertiesExtended(); + } + Inner.Properties.Parameters = parameters; + Inner.Properties.ParametersLink = null; + return this; + } + + IUpdate Deployment.Update.IWithParameters.WithParameters(string parametersJson) + { + var that = (IUpdate)this; + return that.WithParameters(JsonConvert.DeserializeObject(parametersJson)); + } + + IUpdate Deployment.Update.IWithParameters.WithParametersLink(string uri, string contentVersion) + { + if (Inner.Properties == null) + { + Inner.Properties = new DeploymentPropertiesExtended(); + } + Inner.Properties.ParametersLink = new ParametersLink(uri, contentVersion); + Inner.Properties.Parameters = null; + return this; + } + + IUpdate Deployment.Update.IWithMode.WithMode(DeploymentMode mode) + { + if (Inner.Properties == null) + { + Inner.Properties = new DeploymentPropertiesExtended(); + } + Inner.Properties.Mode = mode; + return this; + } + + #endregion + + #endregion + + #region actions + + public void Cancel() + { + client.Cancel(resourceGroupName, Name); + } + + public IDeploymentExportResult ExportTemplate + { + get + { + DeploymentExportResultInner inner = client.ExportTemplate(ResourceGroupName, Name); + return new DeploymentExportResultImpl(inner); + } + } + + public IDeployment BeginCreate() + { + DeploymentInner inner = new DeploymentInner() + { + Properties = new DeploymentProperties + { + Mode = Mode, + Template = Template, + TemplateLink = TemplateLink, + Parameters = Parameters, + ParametersLink = ParametersLink + } + }; + client.BeginCreateOrUpdate(resourceGroupName, Name, inner); + return this; + } + + #endregion + + #region Implementation of IRefreshable interface + + public async override Task Refresh() + { + DeploymentExtendedInner inner = await client.GetAsync(ResourceGroupName, Name); + SetInner(inner); + return this; + } + + #endregion + + #region Implementation of ICreatable interface + + public new IDeployment Create() + { + if (creatableResourceGroup != null) + { + creatableResourceGroup.Create(); + } + CreateResource(); + return this; + } + + public async new Task CreateAsync(CancellationToken cancellationToken = default(CancellationToken), bool multiThreaded = true) + { + if (creatableResourceGroup != null) + { + await creatableResourceGroup.CreateAsync(cancellationToken); + } + return await CreateResourceAsync(cancellationToken); + } + + #endregion + + #region Implementation of IResourceCreator interface + + public override async Task CreateResourceAsync(CancellationToken cancellationToken) + { + DeploymentInner inner = new DeploymentInner + { + Properties = new DeploymentProperties + { + Mode = Mode, + Template = Template, + TemplateLink = TemplateLink, + Parameters = Parameters, + ParametersLink = ParametersLink + } + }; + await client.CreateOrUpdateAsync(ResourceGroupName, Name, inner); + return this; + } + + public override IDeployment CreateResource() + { + DeploymentInner inner = new DeploymentInner + { + Properties = new DeploymentProperties + { + Mode = Mode, + Template = Template, + TemplateLink = TemplateLink, + Parameters = Parameters, + ParametersLink = ParametersLink + } + }; + client.CreateOrUpdate(ResourceGroupName, Name, inner); + return this; + } + + #endregion + + } +} diff --git a/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Deployment/DeploymentOperationImpl.cs b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Deployment/DeploymentOperationImpl.cs new file mode 100644 index 000000000..d5140a6ad --- /dev/null +++ b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Deployment/DeploymentOperationImpl.cs @@ -0,0 +1,111 @@ +using Microsoft.Azure.Management.ResourceManager; +using Microsoft.Azure.Management.ResourceManager.Models; +using Microsoft.Azure.Management.V2.Resource.Core; +using Microsoft.Azure.Management.V2.Resource.Core.ResourceActions; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; + +namespace Microsoft.Azure.Management.V2.Resource +{ + internal class DeploymentOperationImpl : + IndexableRefreshableWrapper, + IDeploymentOperation + { + private string resourceGroupName; + private string deploymentName; + + private IDeploymentOperationsOperations client; + + internal DeploymentOperationImpl(DeploymentOperationInner innerModel, IDeploymentOperationsOperations client) : base(innerModel.Id, innerModel) + { + this.client = client; + resourceGroupName = ResourceUtils.GroupFromResourceId(innerModel.Id); + deploymentName = ResourceUtils.ExtractFromResourceId(innerModel.Id, "deployments"); + } + + #region Getters + + public string OperationId + { + get + { + return Inner.OperationId; + } + } + + public string ProvisioningState + { + get + { + if (Inner.Properties == null) + { + return null; + } + return Inner.Properties.ProvisioningState; + } + } + + public DateTime? Timestamp + { + get + { + if (Inner.Properties == null) + { + return null; + } + return Inner.Properties.Timestamp; + } + } + + public string StatusCode + { + get + { + if (Inner.Properties == null) + { + return null; + } + return Inner.Properties.StatusCode; + } + } + + public object StatusMessage + { + get + { + if (Inner.Properties == null) + { + return null; + } + return Inner.Properties.StatusMessage; + } + } + + public TargetResource TargetResource + { + get + { + if (Inner.Properties == null) + { + return null; + } + return Inner.Properties.TargetResource; + } + } + + #endregion + + #region Implementation of IRefreshable interface + + public override async Task Refresh() + { + var inner = await client.GetAsync(resourceGroupName, deploymentName, OperationId); + SetInner(inner); + return this; + } + + #endregion + } +} diff --git a/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Deployment/DeploymentOperationsImpl.cs b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Deployment/DeploymentOperationsImpl.cs new file mode 100644 index 000000000..fa4a7252a --- /dev/null +++ b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Deployment/DeploymentOperationsImpl.cs @@ -0,0 +1,58 @@ +using Microsoft.Azure.Management.ResourceManager; +using Microsoft.Azure.Management.ResourceManager.Models; +using Microsoft.Azure.Management.V2.Resource.Core; +using Microsoft.Rest.Azure; +using System.Threading; +using System.Threading.Tasks; + +namespace Microsoft.Azure.Management.V2.Resource +{ + internal class DeploymentOperationsImpl : + IDeploymentOperations + { + private IDeploymentOperationsOperations client; + private IDeployment deployment; + + internal DeploymentOperationsImpl(IDeploymentOperationsOperations client, IDeployment deployment) + { + this.client = client; + this.deployment = deployment; + } + + #region Actions + + public IDeploymentOperation GetById(string operationId) + { + return CreateFluentModel(client.Get(deployment.ResourceGroupName, deployment.Name, operationId)); + } + + public async Task GetByIdAsync(string operationId, CancellationToken cancellationToken = default(CancellationToken)) + { + var inner = await client.GetAsync(deployment.ResourceGroupName, deployment.Name, operationId); + return CreateFluentModel(inner); + } + + public PagedList List() + { + IPage firstPage = client.List(deployment.ResourceGroupName, deployment.Name); + var innerList = new PagedList(firstPage, (string nextPageLink) => + { + return client.ListNext(nextPageLink); + }); + + return new PagedList(new WrappedPage(innerList.CurrentPage, CreateFluentModel), + (string nextPageLink) => + { + innerList.LoadNextPage(); + return new WrappedPage(innerList.CurrentPage, CreateFluentModel); + }); + } + + #endregion + + private DeploymentOperationImpl CreateFluentModel(DeploymentOperationInner deploymentOperationInner) + { + return new DeploymentOperationImpl(deploymentOperationInner, client); + } + } +} diff --git a/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Deployment/DeploymentsImpl.cs b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Deployment/DeploymentsImpl.cs new file mode 100644 index 000000000..eb972af54 --- /dev/null +++ b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Deployment/DeploymentsImpl.cs @@ -0,0 +1,150 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; +using Microsoft.Azure.Management.V2.Resource.Core; +using Microsoft.Azure.Management.V2.Resource.Deployment.Definition; +using Microsoft.Azure.Management.ResourceManager.Models; +using Microsoft.Azure.Management.ResourceManager; +using Microsoft.Rest.Azure; + +namespace Microsoft.Azure.Management.V2.Resource +{ + internal class DeploymentsImpl : IDeployments + { + private IDeploymentsOperations client; + private IDeploymentOperationsOperations deploymentOperationsClient; + private IResourceManager resourceManager; + + internal DeploymentsImpl(IDeploymentsOperations client, IDeploymentOperationsOperations deploymentOperationsClient, IResourceManager resourceManager) + { + this.client = client; + this.deploymentOperationsClient = deploymentOperationsClient; + this.resourceManager = resourceManager; + } + + public bool CheckExistence(string resourceGroupName, string deploymentName) + { + return client.CheckExistence(resourceGroupName, deploymentName); + } + + public IBlank Define(string name) + { + return CreateFluentModel(name); + } + + public void Delete(string id) + { + DeleteAsync(id).Wait(); + } + + public void Delete(string groupName, string name) + { + DeleteAsync(groupName, name).Wait(); + } + + public Task DeleteAsync(string id, CancellationToken cancellationToken = default(CancellationToken)) + { + return DeleteAsync(ResourceUtils.GroupFromResourceId(id), ResourceUtils.NameFromResourceId(id), cancellationToken); + } + + public Task DeleteAsync(string groupName, string name, CancellationToken cancellationToken = default(CancellationToken)) + { + return client.DeleteAsync(groupName, name, cancellationToken); + } + + public IDeployment GetByGroup(string resourceGroupName, string name) + { + return GetByGroupAsync(resourceGroupName, name).Result; + } + + public async Task GetByGroupAsync(string resourceGroupName, string name, CancellationToken cancellationToken = default(CancellationToken)) + { + var deploymentExtendedInner = await client.GetAsync(resourceGroupName, name, cancellationToken); + return CreateFluentModel(deploymentExtendedInner); + } + + public IDeployment GetById(string id) + { + return GetByIdAsync(id).Result; + } + + public Task GetByIdAsync(string id, CancellationToken cancellationToken = default(CancellationToken)) + { + return GetByGroupAsync(ResourceUtils.GroupFromResourceId(id), ResourceUtils.NameFromResourceId(id), cancellationToken); + } + + public IDeployment GetByName(string name) + { + var resourceGroups = resourceManager.ResourceGroups.List(); + foreach (var resourceGroup in resourceGroups) + { + try + { + var deploymentExtendedInner = client.Get(resourceGroup.Name, name); + if (deploymentExtendedInner != null) + { + return CreateFluentModel(deploymentExtendedInner); + } + } + catch (CloudException) + { + } + } + return null; + } + + public Task GetByNameAsync(string name, CancellationToken cancellationToken = default(CancellationToken)) + { + throw new NotSupportedException(); + } + + public PagedList List() + { + return new ChildListFlattener(resourceManager.ResourceGroups.List(), (IResourceGroup resourceGroup) => + { + return ListByGroup(resourceGroup.Name); + }).Flatten(); + } + + public PagedList ListByGroup(string resourceGroupName) + { + IPage firstPage = client.List(resourceGroupName); + var innerList = new PagedList(firstPage, (string nextPageLink) => + { + return client.ListNext(nextPageLink); + }); + + return new PagedList(new WrappedPage(innerList.CurrentPage, CreateFluentModel), + (string nextPageLink) => + { + innerList.LoadNextPage(); + return new WrappedPage(innerList.CurrentPage, CreateFluentModel); + }); + } + + public Task> ListByGroupAsync(string resourceGroupName, CancellationToken cancellationToken = default(CancellationToken)) + { + throw new NotSupportedException(); + } + + private DeploymentImpl CreateFluentModel(DeploymentExtendedInner deploymentExtendedInner) + { + return new DeploymentImpl(deploymentExtendedInner, client, deploymentOperationsClient, this.resourceManager); + } + + private DeploymentImpl CreateFluentModel(string name) + { + return new DeploymentImpl( + new DeploymentExtendedInner + { + Name = name + }, + client, + deploymentOperationsClient, + resourceManager + ); + } + } +} diff --git a/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Domain/Core/ChildResource/Definition/IDefinition.cs b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Domain/Core/ChildResource/Definition/IDefinition.cs new file mode 100644 index 000000000..f8db0093f --- /dev/null +++ b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Domain/Core/ChildResource/Definition/IDefinition.cs @@ -0,0 +1,19 @@ +/** +* Copyright (c) Microsoft Corporation. All rights reserved. +* Licensed under the MIT License. See License.txt in the project root for +* license information. +*/ + +namespace Microsoft.Azure.Management.V2.Resource.Core.ChildResource.Definition +{ + + /// + /// The final stage of the child object definition, as which it can be attached to the parent. + /// @param the parent definition + /// + public interface IInDefinition + { + ParentT Attach (); + + } +} \ No newline at end of file diff --git a/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Domain/Core/ChildResource/Update/IUpdate.cs b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Domain/Core/ChildResource/Update/IUpdate.cs new file mode 100644 index 000000000..65ee5c2e6 --- /dev/null +++ b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Domain/Core/ChildResource/Update/IUpdate.cs @@ -0,0 +1,19 @@ +/** +* Copyright (c) Microsoft Corporation. All rights reserved. +* Licensed under the MIT License. See License.txt in the project root for +* license information. +*/ + +namespace Microsoft.Azure.Management.V2.Resource.Core.ChildResource.Update +{ + + /// + /// The final stage of the child object definition, as which it can be attached to the parent. + /// @param the parent definition + /// + public interface IInUpdate + { + ParentT Attach (); + + } +} \ No newline at end of file diff --git a/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Domain/Core/ChildResourceActions/IAttachable.cs b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Domain/Core/ChildResourceActions/IAttachable.cs new file mode 100644 index 000000000..0ea3de6c7 --- /dev/null +++ b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Domain/Core/ChildResourceActions/IAttachable.cs @@ -0,0 +1,24 @@ +/** +* Copyright (c) Microsoft Corporation. All rights reserved. +* Licensed under the MIT License. See License.txt in the project root for +* license information. +*/ + +namespace Microsoft.Azure.Management.V2.Resource.Core.ChildResourceActions +{ + + /// + /// The final stage of the child object definition, at which it can be attached to the parent, using {@link Attachable#attach()}. + /// + /// @param the parent definition {@link Attachable#attach()} returns to + /// + public interface IAttachable + { + /// + /// Attaches this child object's definition to its parent's definition. + /// + /// the next stage of the parent object's definition + ParentT Attach (); + + } +} \ No newline at end of file diff --git a/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Domain/Core/ChildResourceActions/ISettable.cs b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Domain/Core/ChildResourceActions/ISettable.cs new file mode 100644 index 000000000..4266b2b30 --- /dev/null +++ b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Domain/Core/ChildResourceActions/ISettable.cs @@ -0,0 +1,29 @@ +/** +* Copyright (c) Microsoft Corporation. All rights reserved. +* Licensed under the MIT License. See License.txt in the project root for +* license information. +*/ + +namespace Microsoft.Azure.Management.V2.Resource.Core.ChildResourceActions +{ + + /// + /// The base interface for all template interfaces for child resources that support + /// update operations. + /// + /// @param the parent definition {@link Settable#parent()} returns to + /// + public interface ISettable + { + /// + /// Begins an update for a child resource. + ///

+ /// This is the beginning of the builder pattern used to update child resources + /// The final method completing the update and continue + /// the actual parent resource update process in Azure is {@link Settable#parent()}. + ///

+ /// the stage of parent resource update + ParentT Parent (); + + } +} \ No newline at end of file diff --git a/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Domain/Core/CollectionActions/ISupportsCreating.cs b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Domain/Core/CollectionActions/ISupportsCreating.cs new file mode 100644 index 000000000..2c0489021 --- /dev/null +++ b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Domain/Core/CollectionActions/ISupportsCreating.cs @@ -0,0 +1,37 @@ +/** +* Copyright (c) Microsoft Corporation. All rights reserved. +* Licensed under the MIT License. See License.txt in the project root for +* license information. +*/ + +namespace Microsoft.Azure.Management.V2.Resource.Core.CollectionActions +{ + + /// + /// Providing access to creating Azure top level resources. + ///

+ /// (Note: this interface is not intended to be implemented by user code) + /// @param the initial blank definition interface + ///

+ public interface ISupportsCreating + { + /// + /// Begins a definition for a new resource. + ///

+ /// This is the beginning of the builder pattern used to create top level resources + /// in Azure. The final method completing the definition and starting the actual resource creation + /// process in Azure is {@link Creatable#create()}. + ///

+ /// Note that the {@link Creatable#create()} method is + /// only available at the stage of the resource definition that has the minimum set of input + /// parameters specified. If you do not see {@link Creatable#create()} among the available methods, it + /// means you have not yet specified all the required input settings. Input settings generally begin + /// with the word "with", for example: .withNewResourceGroup() and return the next stage + /// of the resource definition, as an interface in the "fluent interface" style. + ///

+ /// name the name of the new resource + /// the first stage of the new resource definition + T Define (string name); + + } +} \ No newline at end of file diff --git a/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Domain/Core/CollectionActions/ISupportsDeleting.cs b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Domain/Core/CollectionActions/ISupportsDeleting.cs new file mode 100644 index 000000000..441dcd515 --- /dev/null +++ b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Domain/Core/CollectionActions/ISupportsDeleting.cs @@ -0,0 +1,34 @@ +/** +* Copyright (c) Microsoft Corporation. All rights reserved. +* Licensed under the MIT License. See License.txt in the project root for +* license information. +*/ + +namespace Microsoft.Azure.Management.V2.Resource.Core.CollectionActions +{ + + using System.Threading; + using System.Threading.Tasks; + + /// + /// Provides access to deleting a resource from Azure, identifying it by its resource ID. + ///

+ /// (Note: this interface is not intended to be implemented by user code) + ///

+ public interface ISupportsDeleting + { + /// + /// Deletes a resource from Azure, identifying it by its resource ID. + /// + /// id the resource ID of the resource to delete + void Delete (string id); + + /// + /// Deletes a resource from Azure, identifying it by its resource ID. + /// + /// id the resource ID of the resource to delete + /// cancellationToken the cancellation token + Task DeleteAsync (string id, CancellationToken cancellationToken = default(CancellationToken)); + + } +} \ No newline at end of file diff --git a/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Domain/Core/CollectionActions/ISupportsDeletingByGroup.cs b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Domain/Core/CollectionActions/ISupportsDeletingByGroup.cs new file mode 100644 index 000000000..9cd7bf9e2 --- /dev/null +++ b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Domain/Core/CollectionActions/ISupportsDeletingByGroup.cs @@ -0,0 +1,36 @@ +/** +* Copyright (c) Microsoft Corporation. All rights reserved. +* Licensed under the MIT License. See License.txt in the project root for +* license information. +*/ + +namespace Microsoft.Azure.Management.V2.Resource.Core.CollectionActions +{ + + using System.Threading; + using System.Threading.Tasks; + + /// + /// Provides access to deleting a resource from Azure, identifying it by its name and its resource group. + /// + /// (Note: this interface is not intended to be implemented by user code) + /// + public interface ISupportsDeletingByGroup + { + /// + /// Deletes a resource from Azure, identifying it by its name and its resource group. + /// + /// groupName The group the resource is part of + /// name The name of the resource + void Delete (string groupName, string name); + + /// + /// Deletes a resource from Azure, identifying it by its name and its resource group. + /// + /// groupName The group the resource is part of + /// name The name of the resource + /// cancellationToken the cancellation token + Task DeleteAsync (string groupName, string name, CancellationToken cancellationToken = default(CancellationToken)); + + } +} \ No newline at end of file diff --git a/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Domain/Core/CollectionActions/ISupportsGettingByGroup.cs b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Domain/Core/CollectionActions/ISupportsGettingByGroup.cs new file mode 100644 index 000000000..bf2f055bd --- /dev/null +++ b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Domain/Core/CollectionActions/ISupportsGettingByGroup.cs @@ -0,0 +1,40 @@ +/** +* Copyright (c) Microsoft Corporation. All rights reserved. +* Licensed under the MIT License. See License.txt in the project root for +* license information. +*/ + +namespace Microsoft.Azure.Management.V2.Resource.Core.CollectionActions +{ + + using System.Threading.Tasks; + using System.Threading; + + /// + /// Provides access to getting a specific Azure resource based on its name and resource group. + /// + /// (Note: this interface is not intended to be implemented by user code) + /// + /// @param the type of the resource to get. + /// + public interface ISupportsGettingByGroup + { + /// + /// Gets the information about a resource from Azure based on the resource name and the name of its resource group. + /// + /// resourceGroupName the name of the resource group the resource is in + /// name the name of the resource. (Note, this is not the ID) + /// an immutable representation of the resource + T GetByGroup (string resourceGroupName, string name); + + /// + /// Gets the information about a resource from Azure based on the resource name and the name of its resource group. + /// + /// resourceGroupName the name of the resource group the resource is in + /// name the name of the resource. (Note, this is not the ID) + /// cancellationToken the cancellation token + /// an immutable representation of the resource + Task GetByGroupAsync (string resourceGroupName, string name, CancellationToken cancellationToken = default(CancellationToken)); + + } +} \ No newline at end of file diff --git a/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Domain/Core/CollectionActions/ISupportsGettingById.cs b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Domain/Core/CollectionActions/ISupportsGettingById.cs new file mode 100644 index 000000000..bfb62258a --- /dev/null +++ b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Domain/Core/CollectionActions/ISupportsGettingById.cs @@ -0,0 +1,36 @@ +/** +* Copyright (c) Microsoft Corporation. All rights reserved. +* Licensed under the MIT License. See License.txt in the project root for +* license information. +*/ + +namespace Microsoft.Azure.Management.V2.Resource.Core.CollectionActions +{ + + using System.Threading; + using System.Threading.Tasks; + + /// + /// Provides access to getting a specific Azure resource based on its resource ID. + /// + /// @param the type of the resource collection + /// + public interface ISupportsGettingById + { + /// + /// Gets the information about a resource from Azure based on the resource id. + /// + /// id the id of the resource. + /// an immutable representation of the resource + T GetById (string id); + + /// + /// Gets the information about a resource from Azure based on the resource id. + /// + /// id the id of the resource. + /// cancellationToken the cancellation token + /// an immutable representation of the resource + Task GetByIdAsync (string id, CancellationToken cancellationToken = default(CancellationToken)); + + } +} \ No newline at end of file diff --git a/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Domain/Core/CollectionActions/ISupportsGettingByName.cs b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Domain/Core/CollectionActions/ISupportsGettingByName.cs new file mode 100644 index 000000000..3e181dc4d --- /dev/null +++ b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Domain/Core/CollectionActions/ISupportsGettingByName.cs @@ -0,0 +1,36 @@ +/** +* Copyright (c) Microsoft Corporation. All rights reserved. +* Licensed under the MIT License. See License.txt in the project root for +* license information. +*/ + +namespace Microsoft.Azure.Management.V2.Resource.Core.CollectionActions +{ + + using System.Threading; + using System.Threading.Tasks; + + /// + /// Provides access to getting a specific Azure resource based on its name within the current resource group. + /// + /// @param the type of the resource collection + /// + public interface ISupportsGettingByName + { + /// + /// Gets the information about a resource from Azure based on the resource name within the current resource group. + /// + /// name the name of the resource. (Note, this is not the resource ID.) + /// an immutable representation of the resource + T GetByName (string name); + + /// + /// Gets the information about a resource from Azure based on the resource name within the current resource group. + /// + /// name the name of the resource. (Note, this is not the resource ID.) + /// cancellationToken the cancellation token + /// an immutable representation of the resource + Task GetByNameAsync (string name, CancellationToken cancellationToken = default(CancellationToken)); + + } +} \ No newline at end of file diff --git a/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Domain/Core/CollectionActions/ISupportsListing.cs b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Domain/Core/CollectionActions/ISupportsListing.cs new file mode 100644 index 000000000..59aec8e0a --- /dev/null +++ b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Domain/Core/CollectionActions/ISupportsListing.cs @@ -0,0 +1,28 @@ +/** +* Copyright (c) Microsoft Corporation. All rights reserved. +* Licensed under the MIT License. See License.txt in the project root for +* license information. +*/ + +namespace Microsoft.Azure.Management.V2.Resource.Core.CollectionActions +{ + + using Microsoft.Azure.Management.V2.Resource.Core; + + /// + /// Provides access to listing Azure resources of a specific type in a subscription. + ///

+ /// (Note: this interface is not intended to be implemented by user code) + /// + /// @param the fluent type of the resource + ///

+ public interface ISupportsListing + { + /// + /// Lists all the resources of the specified type in the currently selected subscription. + /// + /// list of resources + PagedList List (); + + } +} \ No newline at end of file diff --git a/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Domain/Core/CollectionActions/ISupportsListingByGroup.cs b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Domain/Core/CollectionActions/ISupportsListingByGroup.cs new file mode 100644 index 000000000..2e10c32e1 --- /dev/null +++ b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Domain/Core/CollectionActions/ISupportsListingByGroup.cs @@ -0,0 +1,39 @@ +/** +* Copyright (c) Microsoft Corporation. All rights reserved. +* Licensed under the MIT License. See License.txt in the project root for +* license information. +*/ + +namespace Microsoft.Azure.Management.V2.Resource.Core.CollectionActions +{ + + using Microsoft.Azure.Management.V2.Resource.Core; + using System.Threading; + using System.Threading.Tasks; + + /// + /// Provides access to listing Azure resources of a specific type in a specific resource group. + /// + /// (Note: this interface is not intended to be implemented by user code) + /// + /// @param the type of the resources listed. + /// + public interface ISupportsListingByGroup + { + /// + /// Lists resources of the specified type in the specified resource group. + /// + /// resourceGroupName the name of the resource group to list the resources from + /// the list of resources + PagedList ListByGroup (string resourceGroupName); + + /// + /// Lists resources of the specified type in the specified resource group. + /// + /// resourceGroupName the name of the resource group to list the resources from + /// cancellationToken the cancellation token + /// the list of resources + Task> ListByGroupAsync (string resourceGroupName, CancellationToken cancellationToken = default(CancellationToken)); + + } +} \ No newline at end of file diff --git a/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Domain/Core/CollectionActions/ISupportsListingByRegion.cs b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Domain/Core/CollectionActions/ISupportsListingByRegion.cs new file mode 100644 index 000000000..d3c687b17 --- /dev/null +++ b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Domain/Core/CollectionActions/ISupportsListingByRegion.cs @@ -0,0 +1,37 @@ +/** +* Copyright (c) Microsoft Corporation. All rights reserved. +* Licensed under the MIT License. See License.txt in the project root for +* license information. +*/ + +namespace Microsoft.Azure.Management.V2.Resource.Core.CollectionActions +{ + + using Microsoft.Azure.Management.V2.Resource.Core; + using Microsoft.Azure.Management.ResourceManager.Models; + + /// + /// Provides access to listing Azure resources of a specific type based on their region. + ///

+ /// (Note: this interface is not intended to be implemented by user code) + /// + /// @param the fluent type of the resource + ///

+ public interface ISupportsListingByRegion + { + /// + /// Lists all the resources of the specified type in the specified region. + /// + /// region the selected Azure region + /// list of resources + PagedList ListByRegion (Region region); + + /// + /// List all the resources of the specified type in the specified region. + /// + /// regionName the name of an Azure region + /// list of resources + PagedList ListByRegion (string regionName); + + } +} \ No newline at end of file diff --git a/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Domain/Core/GroupableResource/Definition/IDefinition.cs b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Domain/Core/GroupableResource/Definition/IDefinition.cs new file mode 100644 index 000000000..dbc163c2d --- /dev/null +++ b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Domain/Core/GroupableResource/Definition/IDefinition.cs @@ -0,0 +1,78 @@ +/** +* Copyright (c) Microsoft Corporation. All rights reserved. +* Licensed under the MIT License. See License.txt in the project root for +* license information. +*/ + +namespace Microsoft.Azure.Management.V2.Resource.Core.GroupableResource.Definition +{ + + using Microsoft.Azure.Management.V2.Resource.Core.ResourceActions; + using Microsoft.Azure.Management.V2.Resource; + + /// + /// A resource definition allowing a resource group to be selected. + /// + /// @param the next stage of the resource definition + /// + public interface IWithGroup : + IWithExistingResourceGroup, + IWithNewResourceGroup + { + } + /// + /// A resource definition allowing a new resource group to be created. + /// + /// @param the next stage of the resource definition + /// + public interface IWithNewResourceGroup + { + /// + /// Creates a new resource group to put the resource in. + ///

+ /// The group will be created in the same location as the resource. + ///

+ /// name the name of the new group + /// the next stage of the resource definition + T WithNewResourceGroup (string name); + + /// + /// Creates a new resource group to put the resource in. + ///

+ /// The group will be created in the same location as the resource. + /// The group's name is automatically derived from the resource's name. + ///

+ /// the next stage of the resource definition + T WithNewResourceGroup (); + + /// + /// Creates a new resource group to put the resource in, based on the definition specified. + /// + /// groupDefinition a creatable definition for a new resource group + /// the next stage of the resource definition + T WithNewResourceGroup (ICreatable groupDefinition); + + } + /// + /// A resource definition allowing an existing resource group to be selected. + /// + /// @param the next stage of the resource definition + /// + public interface IWithExistingResourceGroup + { + /// + /// Associates the resource with an existing resource group. + /// + /// groupName the name of an existing resource group to put this resource in. + /// the next stage of the resource definition + T WithExistingResourceGroup (string groupName); + + /// + /// Associates the resource with an existing resource group. + /// + /// group an existing resource group to put the resource in + /// the next stage of the resource definition + T WithExistingResourceGroup (IResourceGroup group); + + } +} \ No newline at end of file diff --git a/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Domain/Core/IChildResource.cs b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Domain/Core/IChildResource.cs new file mode 100644 index 000000000..20b905e19 --- /dev/null +++ b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Domain/Core/IChildResource.cs @@ -0,0 +1,22 @@ +/** +* Copyright (c) Microsoft Corporation. All rights reserved. +* Licensed under the MIT License. See License.txt in the project root for +* license information. +*/ + +namespace Microsoft.Azure.Management.V2.Resource.Core +{ + + using Microsoft.Azure.Management.V2.Resource.Core.ResourceActions; + + /// + /// Base interface used by child resources. + /// + public interface IChildResource : + IIndexable + { + /// the name of the child resource + string Name { get; } + + } +} \ No newline at end of file diff --git a/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Domain/Core/IGroupableResource.cs b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Domain/Core/IGroupableResource.cs new file mode 100644 index 000000000..f5bd2a660 --- /dev/null +++ b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Domain/Core/IGroupableResource.cs @@ -0,0 +1,20 @@ +/** +* Copyright (c) Microsoft Corporation. All rights reserved. +* Licensed under the MIT License. See License.txt in the project root for +* license information. +*/ + +namespace Microsoft.Azure.Management.V2.Resource.Core +{ + + /// + /// Base interface for resources in resource groups. + /// + public interface IGroupableResource : + IResource + { + /// the name of the resource group + string ResourceGroupName { get; } + + } +} \ No newline at end of file diff --git a/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Domain/Core/IResource.cs b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Domain/Core/IResource.cs new file mode 100644 index 000000000..2e47531ea --- /dev/null +++ b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Domain/Core/IResource.cs @@ -0,0 +1,39 @@ +/** +* Copyright (c) Microsoft Corporation. All rights reserved. +* Licensed under the MIT License. See License.txt in the project root for +* license information. +*/ + +namespace Microsoft.Azure.Management.V2.Resource.Core +{ + + using System.Collections.Generic; + using Microsoft.Azure.Management.V2.Resource.Core.ResourceActions; + using Microsoft.Azure.Management.ResourceManager.Models; + + /// + /// Base interfaces for fluent resources. + /// + public interface IResource : + IIndexable + { + /// the resource ID string + string Id { get; } + + /// the type of the resource + string Type { get; } + + /// the name of the resource + string Name { get; } + + /// the name of the region the resource is in + string RegionName { get; } + + /// the region the resource is in + Region Region { get; } + + /// the tags for the resource + IDictionary Tags { get; } + + } +} \ No newline at end of file diff --git a/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Domain/Core/Resource/Definition/IDefinition.cs b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Domain/Core/Resource/Definition/IDefinition.cs new file mode 100644 index 000000000..b03d1031c --- /dev/null +++ b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Domain/Core/Resource/Definition/IDefinition.cs @@ -0,0 +1,58 @@ +/** +* Copyright (c) Microsoft Corporation. All rights reserved. +* Licensed under the MIT License. See License.txt in the project root for +* license information. +*/ + +namespace Microsoft.Azure.Management.V2.Resource.Core.Resource.Definition +{ + + using Microsoft.Azure.Management.ResourceManager.Models; + using System.Collections.Generic; + + /// + /// A resource definition allowing a location be selected for the resource. + /// + /// @param the type of the next stage resource definition + /// + public interface IDefinitionWithRegion + { + /// + /// Specifies the region for the resource by name. + /// + /// regionName The name of the region for the resource + /// the next stage of the resource definition + T WithRegion (string regionName); + + /// + /// Specifies the region for the resource. + /// + /// region The location for the resource + /// the next stage of the resource definition + T WithRegion (Region region); + + } + /// + /// A resource definition allowing tags to be modified for the resource. + /// + /// @param the type of the next stage resource definition + /// + public interface IDefinitionWithTags + { + /// + /// Specifies tags for the resource as a {@link Map}. + /// + /// tags a {@link Map} of tags + /// the next stage of the resource definition + T WithTags (IDictionary tags); + + /// + /// Adds a tag to the resource. + /// + /// key the key for the tag + /// value the value for the tag + /// the next stage of the resource definition + T WithTag (string key, string value); + + } +} \ No newline at end of file diff --git a/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Domain/Core/Resource/Update/IUpdate.cs b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Domain/Core/Resource/Update/IUpdate.cs new file mode 100644 index 000000000..ed48333e9 --- /dev/null +++ b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Domain/Core/Resource/Update/IUpdate.cs @@ -0,0 +1,42 @@ +/** +* Copyright (c) Microsoft Corporation. All rights reserved. +* Licensed under the MIT License. See License.txt in the project root for +* license information. +*/ + +namespace Microsoft.Azure.Management.V2.Resource.Core.Resource.Update +{ + + using System.Collections.Generic; + + /// + /// An update allowing tags to be modified for the resource. + /// + /// @param the type of the next stage resource update + /// + public interface IUpdateWithTags + { + /// + /// Specifies tags for the resource as a {@link Map}. + /// + /// tags a {@link Map} of tags + /// the next stage of the resource update + T WithTags (IDictionary tags); + + /// + /// Adds a tag to the resource. + /// + /// key the key for the tag + /// value the value for the tag + /// the next stage of the resource update + T WithTag (string key, string value); + + /// + /// Removes a tag from the resource. + /// + /// key the key of the tag to remove + /// the next stage of the resource update + T WithoutTag (string key); + + } +} \ No newline at end of file diff --git a/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Domain/Core/ResourceActions/IAppliable.cs b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Domain/Core/ResourceActions/IAppliable.cs new file mode 100644 index 000000000..8119b0dce --- /dev/null +++ b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Domain/Core/ResourceActions/IAppliable.cs @@ -0,0 +1,37 @@ +/** +* Copyright (c) Microsoft Corporation. All rights reserved. +* Licensed under the MIT License. See License.txt in the project root for +* license information. +*/ + +namespace Microsoft.Azure.Management.V2.Resource.Core.ResourceActions +{ + + using Microsoft.Rest; + using System.Threading.Tasks; + using System.Threading; + + /// + /// The base interface for all template interfaces that support update operations. + /// + /// @param the type of the resource returned from the update. + /// + public interface IAppliable : + IIndexable + { + /// + /// Execute the update request. + /// + /// the updated resource + T Apply (); + + /// + /// Execute the update request asynchronously. + /// + /// cancellationToken the cancellation token + /// multiThreaded use mutli-threading + /// the handle to the REST call + Task ApplyAsync (CancellationToken cancellationToken = default(CancellationToken), bool multiThreaded = true); + + } +} \ No newline at end of file diff --git a/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Domain/Core/ResourceActions/ICreatable.cs b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Domain/Core/ResourceActions/ICreatable.cs new file mode 100644 index 000000000..091b96216 --- /dev/null +++ b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Domain/Core/ResourceActions/ICreatable.cs @@ -0,0 +1,38 @@ +/** +* Copyright (c) Microsoft Corporation. All rights reserved. +* Licensed under the MIT License. See License.txt in the project root for +* license information. +*/ + +namespace Microsoft.Azure.Management.V2.Resource.Core.ResourceActions +{ + + using Microsoft.Rest; + using System.Threading; + using System.Threading.Tasks; + + /// + /// The final stage of the resource definition, at which it can be create, using {@link #create()}. + /// + /// @param the fluent type of the resource to be created + /// + public interface ICreatable : + IIndexable + { + /// + /// Execute the create request. + /// + /// the create resource + T Create (); + + /// + /// Puts the request into the queue and allow the HTTP client to execute + /// it when system resources are available. + /// + /// cancellationToken the cancellation token + /// multiThreaded use mutli-threading + /// a handle to cancel the request + Task CreateAsync (CancellationToken cancellationToken = default(CancellationToken), bool multiThreaded = true); + + } +} \ No newline at end of file diff --git a/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Domain/Core/ResourceActions/IIndexable.cs b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Domain/Core/ResourceActions/IIndexable.cs new file mode 100644 index 000000000..d0ed342c3 --- /dev/null +++ b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Domain/Core/ResourceActions/IIndexable.cs @@ -0,0 +1,19 @@ +/** +* Copyright (c) Microsoft Corporation. All rights reserved. +* Licensed under the MIT License. See License.txt in the project root for +* license information. +*/ + +namespace Microsoft.Azure.Management.V2.Resource.Core.ResourceActions +{ + + /// + /// Base interface for all models that can be indexed by a key. + /// + public interface IIndexable + { + /// the index key. + string Key { get; } + + } +} \ No newline at end of file diff --git a/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Domain/Core/ResourceActions/IRefreshable.cs b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Domain/Core/ResourceActions/IRefreshable.cs new file mode 100644 index 000000000..02d7a0a37 --- /dev/null +++ b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Domain/Core/ResourceActions/IRefreshable.cs @@ -0,0 +1,24 @@ +/** +* Copyright (c) Microsoft Corporation. All rights reserved. +* Licensed under the MIT License. See License.txt in the project root for +* license information. +*/ + +namespace Microsoft.Azure.Management.V2.Resource.Core.ResourceActions +{ + + /// + /// Base class for resources that can be refreshed to get the latest state. + /// + /// @param the fluent type of the resource + /// + public interface IRefreshable + { + /// + /// Refreshes the resource to sync with Azure. + /// + /// the refreshed resource + T Refresh (); + + } +} \ No newline at end of file diff --git a/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Domain/Core/ResourceActions/IUpdatable.cs b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Domain/Core/ResourceActions/IUpdatable.cs new file mode 100644 index 000000000..b657d137f --- /dev/null +++ b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Domain/Core/ResourceActions/IUpdatable.cs @@ -0,0 +1,28 @@ +/** +* Copyright (c) Microsoft Corporation. All rights reserved. +* Licensed under the MIT License. See License.txt in the project root for +* license information. +*/ + +namespace Microsoft.Azure.Management.V2.Resource.Core.ResourceActions +{ + + /// + /// Base class for resource that can be updated. + /// + /// @param the fluent type of the resource + /// + public interface IUpdatable + { + /// + /// Begins an update for a new resource. + ///

+ /// This is the beginning of the builder pattern used to update top level resources + /// in Azure. The final method completing the definition and starting the actual resource creation + /// process in Azure is {@link Appliable#apply()}. + ///

+ /// the stage of new resource update + T Update (); + + } +} \ No newline at end of file diff --git a/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Domain/Deployment/Definition/IDefinition.cs b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Domain/Deployment/Definition/IDefinition.cs new file mode 100644 index 000000000..a06a960fc --- /dev/null +++ b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Domain/Deployment/Definition/IDefinition.cs @@ -0,0 +1,136 @@ +/** +* Copyright (c) Microsoft Corporation. All rights reserved. +* Licensed under the MIT License. See License.txt in the project root for +* license information. +*/ + +namespace Microsoft.Azure.Management.V2.Resource.Deployment.Definition +{ + + using Microsoft.Azure.Management.ResourceManager.Models; + using Microsoft.Azure.Management.V2.Resource; + using Microsoft.Azure.Management.V2.Resource.Core.ResourceActions; + using Microsoft.Azure.Management.V2.Resource.Core.GroupableResource.Definition; + using Core; + + /// + /// The first stage of deployment definition. + /// + public interface IBlank : + IWithGroup + { + } + /// + /// A deployment definition allowing the deployment mode to be specified. + /// + public interface IWithMode + { + /// + /// Specifies the deployment mode. + /// + /// mode the mode of the deployment + /// the next stage of the deployment definition + IWithCreate WithMode (DeploymentMode mode); + + } + /// + /// A deployment definition with sufficient inputs to create a new + /// deployment in the cloud, but exposing additional optional inputs to specify. + /// + public interface IWithCreate : + ICreatable + { + IDeployment BeginCreate(); + + } + /// + /// Container interface for all the deployment definitions. + /// + public interface IDefinition : + IBlank, + IWithGroup, + IWithTemplate, + IWithParameters, + IWithMode, + IWithCreate + { + } + /// + /// A deployment definition allowing resource group to be specified. + /// + public interface IWithGroup : + IWithExistingResourceGroup + { + /// + /// Creates a new resource group to put the deployment in. + /// + /// name the name of the new group + /// region the region to create the resource group in + /// the next stage of the deployment definition + IWithTemplate WithNewResourceGroup (string name, Region region); + + /// + /// Creates a new resource group to put the resource in, based on the definition specified. + /// + /// groupDefinition a creatable definition for a new resource group + /// the next stage of the deployment definition + IWithTemplate WithNewResourceGroup (ICreatable groupDefinition); + + } + /// + /// A deployment definition allowing the parameters to be specified. + /// + public interface IWithParameters + { + /// + /// Specifies the parameters as a Java object. + /// + /// parameters the Java object + /// the next stage of the deployment definition + IWithMode WithParameters (object parameters); + + /// + /// Specifies the parameters as a JSON string. + /// + /// parametersJson the JSON string + /// the next stage of the deployment definition + IWithMode WithParameters (string parametersJson); + + /// + /// Specifies the parameters as a URL. + /// + /// uri the location of the remote parameters file + /// contentVersion the version of the parameters file + /// the next stage of the deployment definition + IWithMode WithParametersLink (string uri, string contentVersion); + + } + /// + /// A deployment definition allowing the template to be specified. + /// + public interface IWithTemplate + { + /// + /// Specifies the template as a Java object. + /// + /// template the Java object + /// the next stage of the deployment definition + IWithParameters WithTemplate (object template); + + /// + /// Specifies the template as a JSON string. + /// + /// templateJson the JSON string + /// the next stage of the deployment definition + IWithParameters WithTemplate (string templateJson); + + /// + /// Specifies the template as a URL. + /// + /// uri the location of the remote template file + /// contentVersion the version of the template file + /// the next stage of the deployment definition + IWithParameters WithTemplateLink (string uri, string contentVersion); + + } +} \ No newline at end of file diff --git a/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Domain/Deployment/Update/IUpdate.cs b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Domain/Deployment/Update/IUpdate.cs new file mode 100644 index 000000000..3c67c2189 --- /dev/null +++ b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Domain/Deployment/Update/IUpdate.cs @@ -0,0 +1,102 @@ +/** +* Copyright (c) Microsoft Corporation. All rights reserved. +* Licensed under the MIT License. See License.txt in the project root for +* license information. +*/ + +namespace Microsoft.Azure.Management.V2.Resource.Deployment.Update +{ + + using Microsoft.Azure.Management.ResourceManager.Models; + using Microsoft.Azure.Management.V2.Resource; + using Microsoft.Azure.Management.V2.Resource.Core.ResourceActions; + + /// + /// Grouping of all the deployment updates stages. + /// + public interface IUpdateStages + { + } + /// + /// A deployment update allowing to change the deployment mode. + /// + public interface IWithMode + { + /// + /// Specifies the deployment mode. + /// + /// mode the mode of the deployment + /// the next stage of the deployment update + IUpdate WithMode (DeploymentMode mode); + + } + /// + /// The template for a deployment update operation, containing all the settings that + /// can be modified. + ///

+ /// Call {@link Update#apply()} to apply the changes to the deployment in Azure. + ///

+ public interface IUpdate : + IAppliable, + IWithTemplate, + IWithParameters, + IWithMode + { + } + /// + /// A deployment update allowing to change the parameters. + /// + public interface IWithParameters + { + /// + /// Specifies the parameters as a Java object. + /// + /// parameters the Java object + /// the next stage of the deployment update + IUpdate WithParameters (object parameters); + + /// + /// Specifies the parameters as a JSON string. + /// + /// parametersJson the JSON string + /// the next stage of the deployment update + IUpdate WithParameters (string parametersJson); + + /// + /// Specifies the parameters as a URL. + /// + /// uri the location of the remote parameters file + /// contentVersion the version of the parameters file + /// the next stage of the deployment update + IUpdate WithParametersLink (string uri, string contentVersion); + + } + /// + /// A deployment update allowing to change the template. + /// + public interface IWithTemplate + { + /// + /// Specifies the template as a Java object. + /// + /// template the Java object + /// the next stage of the deployment update + IUpdate WithTemplate (object template); + + /// + /// Specifies the template as a JSON string. + /// + /// templateJson the JSON string + /// the next stage of the deployment update + IUpdate WithTemplate (string templateJson); + + /// + /// Specifies the template as a URL. + /// + /// uri the location of the remote template file + /// contentVersion the version of the template file + /// the next stage of the deployment update + IUpdate WithTemplateLink (string uri, string contentVersion); + + } +} \ No newline at end of file diff --git a/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Domain/Feature/IInResourceProvider.cs b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Domain/Feature/IInResourceProvider.cs new file mode 100644 index 000000000..c88e73313 --- /dev/null +++ b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Domain/Feature/IInResourceProvider.cs @@ -0,0 +1,28 @@ +/** +* Copyright (c) Microsoft Corporation. All rights reserved. +* Licensed under the MIT License. See License.txt in the project root for +* license information. +*/ + +namespace Microsoft.Azure.Management.V2.Resource.Feature +{ + + using Microsoft.Azure.Management.V2.Resource; + using Microsoft.Azure.Management.V2.Resource.Core.CollectionActions; + + /// + /// Entry point to features management API in a specific resource provider. + /// + public interface IInResourceProvider : + ISupportsListing, + ISupportsGettingByName + { + /// + /// Registers a feature in a resource provider. + /// + /// featureName the name of the feature + /// the immutable client-side feature object created + IFeature Register (string featureName); + + } +} \ No newline at end of file diff --git a/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Domain/GenericResource/Definition/IDefinition.cs b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Domain/GenericResource/Definition/IDefinition.cs new file mode 100644 index 000000000..2161a68c7 --- /dev/null +++ b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Domain/GenericResource/Definition/IDefinition.cs @@ -0,0 +1,138 @@ +/** +* Copyright (c) Microsoft Corporation. All rights reserved. +* Licensed under the MIT License. See License.txt in the project root for +* license information. +*/ + +namespace Microsoft.Azure.Management.V2.Resource.GenericResource.Definition +{ + + using Microsoft.Azure.Management.V2.Resource.Core.Resource.Definition; + using Microsoft.Azure.Management.V2.Resource.Core.GroupableResource.Definition; + using Microsoft.Azure.Management.V2.Resource; + using Microsoft.Azure.Management.V2.Resource.Core.ResourceActions; + + /// + /// Container interface for all the definitions that need to be implemented. + /// + public interface IDefintion : + IBlank, + IWithGroup, + IWithResourceType, + IWithProviderNamespace, + IWithParentResource, + IWithPlan, + IWithApiVersion, + IWithCreate + { + } + + /// + /// A generic resource definition allowing region to be specified. + /// + public interface IBlank : + Resource.Core.Resource.Definition.IDefinitionWithRegion + { + } + + /// + /// A generic resource definition allowing parent resource to be specified. + /// + public interface IWithParentResource + { + /// + /// Specifies the parent resource. + /// + /// parentResourceId the parent resource id + /// the next stage of the generic resource definition + IWithCreate WithParentResource (string parentResourceId); + + } + /// + /// A generic resource definition allowing resource type to be specified. + /// + public interface IWithResourceType + { + /// + /// Specifies the resource's type. + /// + /// resourceType the type of the resources + /// the next stage of generic resource definition + IWithProviderNamespace WithResourceType (string resourceType); + + } + /// + /// A generic resource definition allowing provider namespace to be specified. + /// + public interface IWithProviderNamespace + { + /// + /// Specifies the resource provider's namespace. + /// + /// resourceProviderNamespace the namespace of the resource provider + /// the next stage of the generic resource definition + IWithPlan WithProviderNamespace (string resourceProviderNamespace); + + } + /// + /// A generic resource definition allowing resource group to be specified. + /// + public interface IWithGroup : + Resource.Core.GroupableResource.Definition.IWithGroup + { + } + + /// + /// A generic resource definition allowing plan to be specified. + /// + public interface IWithPlan + { + /// + /// Specifies the plan of the resource. The plan can only be set for 3rd party resources. + /// + /// name the name of the plan + /// publisher the publisher of the plan + /// product the name of the product + /// promotionCode the promotion code, if any + /// the next stage of the generic resource definition + IWithApiVersion WithPlan (string name, string publisher, string product, string promotionCode); + + /// + /// Specifies the plan of the resource. + /// + /// the next stage of the generic resource definition + IWithApiVersion WithoutPlan(); + + } + /// + /// A deployment definition with sufficient inputs to create a new + /// resource in the cloud, but exposing additional optional inputs to + /// specify. + /// + public interface IWithCreate : + IWithParentResource, + ICreatable, + IDefinitionWithTags + { + /// + /// Specifies other properties. + /// + /// properties the properties object + /// the next stage of generic resource definition + IWithCreate WithProperties (object properties); + + } + /// + /// A generic resource definition allowing api version to be specified. + /// + public interface IWithApiVersion + { + /// + /// Specifies the api version. + /// + /// apiVersion the API version of the resource + /// the next stage of the generic resource definition + IWithCreate WithApiVersion (string apiVersion); + + } +} \ No newline at end of file diff --git a/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Domain/GenericResource/Update/IUpdate.cs b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Domain/GenericResource/Update/IUpdate.cs new file mode 100644 index 000000000..38c56b0fc --- /dev/null +++ b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Domain/GenericResource/Update/IUpdate.cs @@ -0,0 +1,85 @@ +/** +* Copyright (c) Microsoft Corporation. All rights reserved. +* Licensed under the MIT License. See License.txt in the project root for +* license information. +*/ + +namespace Microsoft.Azure.Management.V2.Resource.GenericResource.Update +{ + using Microsoft.Azure.Management.V2.Resource.Core.ResourceActions; + using Microsoft.Azure.Management.V2.Resource; + using Microsoft.Azure.Management.V2.Resource.Core.Resource.Update; + + /// + /// A generic resource update allowing to change the resource properties. + /// + public interface IWithProperties + { + /// + /// Specifies other properties of the resource. + /// + /// properties the properties object + /// the next stage of generic resource update + IUpdate WithProperties (object properties); + + } + /// + /// A generic resource update allowing to change the resource plan. + /// + public interface IWithPlan + { + /// + /// Specifies the plan of the resource. + /// + /// name the name of the plan + /// publisher the publisher of the plan + /// product the name of the product + /// promotionCode the promotion code, if any + /// the next stage of the generic resource update + IUpdate WithPlan (string name, string publisher, string product, string promotionCode); + + /// + /// Specifies the plan of the resource. + /// + /// the next stage of the generic resource update + IUpdate WithoutPlan(); + + } + /// + /// A generic resource update allowing to change the parent resource. + /// + public interface IWithParentResource + { + /// + /// Specifies the parent resource. + /// + /// parentResourceId the parent resource ID + /// the next stage of the generic resource definition + IUpdate WithParentResource (string parentResourceId); + + } + /// + /// The template for a generic resource update operation, containing all the settings that can be modified. + /// + public interface IUpdate : + IAppliable, + IWithPlan, + IWithParentResource, + IWithProperties, + IUpdateWithTags + { + } + /// + /// The template for a generic resource update operation for specifying the resource provider API version. + /// + public interface IWithApiVersion + { + /// + /// Specifies the API version of the resource provider. + /// + /// apiVersion the API version + /// the next stage of the generic resource update + IUpdate WithApiVersion (string apiVersion); + + } +} \ No newline at end of file diff --git a/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Domain/IDeployment.cs b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Domain/IDeployment.cs new file mode 100644 index 000000000..ef52e5fcd --- /dev/null +++ b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Domain/IDeployment.cs @@ -0,0 +1,80 @@ +/** +* Copyright (c) Microsoft Corporation. All rights reserved. +* Licensed under the MIT License. See License.txt in the project root for +* license information. +*/ + +namespace Microsoft.Azure.Management.V2.Resource +{ + + using System.Collections.Generic; + using Microsoft.Azure.Management.ResourceManager.Models; + using Microsoft.Azure.Management.V2.Resource.Deployment.Update; + using Microsoft.Azure.Management.V2.Resource.Core.ResourceActions; + using System; + using Microsoft.Azure.Management.V2.Resource.Core; + + /// + /// An immutable client-side representation of an Azure deployment. + /// + public interface IDeployment : + IRefreshable, + IUpdatable, + IWrapper + { + /// the name of this deployment's resource group + string ResourceGroupName { get; } + + /// the name of the deployment + string Name { get; } + + /// the state of the provisioning process of the resources being deployed + string ProvisioningState { get; } + + /// the correlation ID of the deployment + string CorrelationId { get; } + + /// the timestamp of the template deployment + DateTime? Timestamp { get; } + + /// key/value pairs that represent deployment output + object Outputs { get; } + + /// the list of resource providers needed for the deployment + IList Providers { get; } + + /// the list of deployment dependencies + IList Dependencies { get; } + + /// the template content + object Template { get; } + + /// the URI referencing the template + TemplateLink TemplateLink { get; } + + /// the deployment parameters + object Parameters { get; } + + /// the URI referencing the parameters + ParametersLink ParametersLink { get; } + + /// the deployment mode. Possible values include: + /// 'Incremental', 'Complete'. + DeploymentMode? Mode { get; } + + /// the operations related to this deployment + IDeploymentOperations DeploymentOperations { get; } + + /// + /// Cancel a currently running template deployment. + /// + void Cancel (); + + /// + /// Exports a deployment template. + /// + /// the export result + IDeploymentExportResult ExportTemplate { get; } + + } +} \ No newline at end of file diff --git a/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Domain/IDeploymentExportResult.cs b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Domain/IDeploymentExportResult.cs new file mode 100644 index 000000000..a479e8622 --- /dev/null +++ b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Domain/IDeploymentExportResult.cs @@ -0,0 +1,26 @@ +/** +* Copyright (c) Microsoft Corporation. All rights reserved. +* Licensed under the MIT License. See License.txt in the project root for +* license information. +*/ + +namespace Microsoft.Azure.Management.V2.Resource +{ + + using Microsoft.Azure.Management.ResourceManager.Models; + using Microsoft.Azure.Management.V2.Resource.Core; + + /// + /// An immutable client-side representation of an Azure deployment template export result. + /// + public interface IDeploymentExportResult : + IWrapper + { + /// the template content + object Template { get; } + + /// the template content as a JSON string + string TemplateAsJson { get; } + + } +} \ No newline at end of file diff --git a/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Domain/IDeploymentOperation.cs b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Domain/IDeploymentOperation.cs new file mode 100644 index 000000000..f1aafe014 --- /dev/null +++ b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Domain/IDeploymentOperation.cs @@ -0,0 +1,42 @@ +/** +* Copyright (c) Microsoft Corporation. All rights reserved. +* Licensed under the MIT License. See License.txt in the project root for +* license information. +*/ + +namespace Microsoft.Azure.Management.V2.Resource +{ + + using Microsoft.Azure.Management.ResourceManager.Models; + using Microsoft.Azure.Management.V2.Resource.Core.ResourceActions; + using System; + using Microsoft.Azure.Management.V2.Resource.Core; + + /// + /// An immutable client-side representation of a deployment operation. + /// + public interface IDeploymentOperation : + IIndexable, + IRefreshable, + IWrapper + { + /// the deployment operation id + string OperationId { get; } + + /// the state of the provisioning resource being deployed + string ProvisioningState { get; } + + /// the date and time of the operation + DateTime? Timestamp { get; } + + /// the operation status code.= + string StatusCode { get; } + + /// the operation status message + object StatusMessage { get; } + + /// the target resource + TargetResource TargetResource { get; } + + } +} \ No newline at end of file diff --git a/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Domain/IDeploymentOperations.cs b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Domain/IDeploymentOperations.cs new file mode 100644 index 000000000..3d0650d79 --- /dev/null +++ b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Domain/IDeploymentOperations.cs @@ -0,0 +1,20 @@ +/** +* Copyright (c) Microsoft Corporation. All rights reserved. +* Licensed under the MIT License. See License.txt in the project root for +* license information. +*/ + +namespace Microsoft.Azure.Management.V2.Resource +{ + + using Microsoft.Azure.Management.V2.Resource.Core.CollectionActions; + + /// + /// Entry point to deployment operation management API. + /// + public interface IDeploymentOperations : + ISupportsListing, + ISupportsGettingById + { + } +} \ No newline at end of file diff --git a/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Domain/IDeployments.cs b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Domain/IDeployments.cs new file mode 100644 index 000000000..1dd760bb9 --- /dev/null +++ b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Domain/IDeployments.cs @@ -0,0 +1,35 @@ +/** +* Copyright (c) Microsoft Corporation. All rights reserved. +* Licensed under the MIT License. See License.txt in the project root for +* license information. +*/ + +namespace Microsoft.Azure.Management.V2.Resource +{ + + using Microsoft.Azure.Management.V2.Resource.Deployment.Definition; + using Microsoft.Azure.Management.V2.Resource.Core.CollectionActions; + + /// + /// Entry point to template deployment in Azure. + /// + public interface IDeployments : + ISupportsCreating, + ISupportsListing, + ISupportsListingByGroup, + ISupportsGettingByName, + ISupportsGettingByGroup, + ISupportsGettingById, + ISupportsDeleting, + ISupportsDeletingByGroup + { + /// + /// Checks if a deployment exists in a resource group. + /// + /// resourceGroupName the resource group's name + /// deploymentName the deployment's name + /// true if the deployment exists; false otherwise + bool CheckExistence (string resourceGroupName, string deploymentName); + + } +} \ No newline at end of file diff --git a/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Domain/IFeature.cs b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Domain/IFeature.cs new file mode 100644 index 000000000..e8be3eabe --- /dev/null +++ b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Domain/IFeature.cs @@ -0,0 +1,31 @@ +/** +* Copyright (c) Microsoft Corporation. All rights reserved. +* Licensed under the MIT License. See License.txt in the project root for +* license information. +*/ + +namespace Microsoft.Azure.Management.V2.Resource +{ + + using Microsoft.Azure.Management.V2.Resource.Core.ResourceActions; + using Microsoft.Azure.Management.V2.Resource.Core; + using Microsoft.Azure.Management.ResourceManager.Models; + + /// + /// An immutable client-side representation of an Azure feature. + /// + public interface IFeature : + IIndexable, + IWrapper + { + /// the name of the feature + string Name { get; } + + /// the type of the feature + string Type { get; } + + /// the state of the previewed feature + string State { get; } + + } +} \ No newline at end of file diff --git a/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Domain/IFeatures.cs b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Domain/IFeatures.cs new file mode 100644 index 000000000..ae3db450c --- /dev/null +++ b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Domain/IFeatures.cs @@ -0,0 +1,27 @@ +/** +* Copyright (c) Microsoft Corporation. All rights reserved. +* Licensed under the MIT License. See License.txt in the project root for +* license information. +*/ + +namespace Microsoft.Azure.Management.V2.Resource +{ + + using Microsoft.Azure.Management.V2.Resource.Feature; + using Microsoft.Azure.Management.V2.Resource.Core.CollectionActions; + + /// + /// Entry point to features management API. + /// + public interface IFeatures : + ISupportsListing + { + /// + /// Filter the features by a specific resource provider. + /// + /// resourceProviderName the name of the resource provider + /// an instance for accessing features in a resource provider + IInResourceProvider ResourceProvider (string resourceProviderName); + + } +} \ No newline at end of file diff --git a/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Domain/IGenericResource.cs b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Domain/IGenericResource.cs new file mode 100644 index 000000000..7119c1de9 --- /dev/null +++ b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Domain/IGenericResource.cs @@ -0,0 +1,43 @@ +/** +* Copyright (c) Microsoft Corporation. All rights reserved. +* Licensed under the MIT License. See License.txt in the project root for +* license information. +*/ + +namespace Microsoft.Azure.Management.V2.Resource +{ + + using Microsoft.Azure.Management.ResourceManager.Models; + using Microsoft.Azure.Management.V2.Resource.GenericResource.Update; + using Microsoft.Azure.Management.V2.Resource.Core; + using Microsoft.Azure.Management.V2.Resource.Core.ResourceActions; + + /// + /// An immutable client-side representation of an Azure generic resource. + /// + public interface IGenericResource : + IGroupableResource, + IRefreshable, + IUpdatable, + IWrapper + { + /// the namespace of the resource provider + string ResourceProviderNamespace { get; } + + /// the id of the parent resource if this is a child resource + string ParentResourceId { get; } + + /// the type of the resource + string ResourceType { get; } + + /// the api version of the resource + string ApiVersion { get; } + + /// the plan of the resource + Plan Plan { get; } + + /// other properties of the resource + object Properties { get; } + + } +} \ No newline at end of file diff --git a/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Domain/IGenericResources.cs b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Domain/IGenericResources.cs new file mode 100644 index 000000000..ca73d1947 --- /dev/null +++ b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Domain/IGenericResources.cs @@ -0,0 +1,67 @@ +/** +* Copyright (c) Microsoft Corporation. All rights reserved. +* Licensed under the MIT License. See License.txt in the project root for +* license information. +*/ + +namespace Microsoft.Azure.Management.V2.Resource +{ + + using Microsoft.Azure.Management.V2.Resource.Core.CollectionActions; + using System.Collections.Generic; + using Microsoft.Azure.Management.V2.Resource.GenericResource.Definition; + + /// + /// Entry point to generic resources management API. + /// + public interface IGenericResources : + ISupportsListingByGroup, + ISupportsGettingByGroup, + ISupportsGettingById, + ISupportsCreating + { + /// + /// Checks if a resource exists in a resource group. + /// + /// resourceGroupName the resource group's name + /// resourceProviderNamespace the resource provider's namespace + /// parentResourcePath the parent's resource path + /// resourceType the type of the resource + /// resourceName the name of the resource + /// apiVersion the API version + /// true if the resource exists; false otherwise + bool CheckExistence (string resourceGroupName, string resourceProviderNamespace, string parentResourcePath, string resourceType, string resourceName, string apiVersion); + + /// + /// Returns a resource belonging to a resource group. + /// + /// resourceGroupName The name of the resource group. The name is case insensitive. + /// resourceProviderNamespace Resource identity. + /// parentResourcePath Resource identity. + /// resourceType Resource identity. + /// resourceName Resource identity. + /// apiVersion the String value + /// the generic resource + IGenericResource Get (string resourceGroupName, string resourceProviderNamespace, string parentResourcePath, string resourceType, string resourceName, string apiVersion); + + /// + /// Move resources from one resource group to another. + /// + /// sourceResourceGroupName Source resource group name + /// targetResourceGroup target resource group, can be in a different subscription + /// resources the list of IDs of the resources to move + void MoveResources (string sourceResourceGroupName, IResourceGroup targetResourceGroup, IList resources); + + /// + /// Delete resource and all of its child resources. + /// + /// resourceGroupName The name of the resource group. The name is case insensitive. + /// resourceProviderNamespace Resource identity. + /// parentResourcePath Resource identity. + /// resourceType Resource identity. + /// resourceName Resource identity. + /// apiVersion the String value + void Delete (string resourceGroupName, string resourceProviderNamespace, string parentResourcePath, string resourceType, string resourceName, string apiVersion); + + } +} \ No newline at end of file diff --git a/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Domain/ILocation.cs b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Domain/ILocation.cs new file mode 100644 index 000000000..f4c797046 --- /dev/null +++ b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Domain/ILocation.cs @@ -0,0 +1,37 @@ +/** +* Copyright (c) Microsoft Corporation. All rights reserved. +* Licensed under the MIT License. See License.txt in the project root for +* license information. +*/ + +namespace Microsoft.Azure.Management.V2.Resource +{ + + using Microsoft.Azure.Management.V2.Resource.Core; + using Microsoft.Azure.Management.V2.Resource.Core.ResourceActions; + using Microsoft.Azure.Management.ResourceManager.Models; + + /// + /// An immutable client-side representation of an Azure location. + /// + public interface ILocation : + IIndexable, + IWrapper + { + /// the subscription UUID + string SubscriptionId { get; } + + /// the name of the location + string Name { get; } + + /// the display name of the location readable by humans + string DisplayName { get; } + + /// the latitude of the location + string Latitude { get; } + + /// the longitude of the location + string Longitude { get; } + + } +} \ No newline at end of file diff --git a/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Domain/IProvider.cs b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Domain/IProvider.cs new file mode 100644 index 000000000..a35d1bba5 --- /dev/null +++ b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Domain/IProvider.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. +*/ + +namespace Microsoft.Azure.Management.V2.Resource +{ + + using Microsoft.Azure.Management.ResourceManager.Models; + using Microsoft.Azure.Management.V2.Resource.Core.ResourceActions; + using Microsoft.Azure.Management.V2.Resource.Core; + using System.Collections.Generic; + + /// + /// An immutable client-side representation of an Azure resource provider. + /// + public interface IProvider : + IIndexable, + IWrapper + { + /// the namespace of the provider + string Namespace { get; } + + /// the registration state of the provider, indicating whether this + /// resource provider is registered in the current subscription + string RegistrationState { get; } + + /// the list of provider resource types + IList ResourceTypes { get; } + + } +} \ No newline at end of file diff --git a/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Domain/IProviders.cs b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Domain/IProviders.cs new file mode 100644 index 000000000..559712547 --- /dev/null +++ b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Domain/IProviders.cs @@ -0,0 +1,34 @@ +/** +* Copyright (c) Microsoft Corporation. All rights reserved. +* Licensed under the MIT License. See License.txt in the project root for +* license information. +*/ + +namespace Microsoft.Azure.Management.V2.Resource +{ + + using Microsoft.Azure.Management.V2.Resource.Core.CollectionActions; + + /// + /// Entry point to providers management API. + /// + public interface IProviders : + ISupportsListing, + ISupportsGettingByName + { + /// + /// Unregisters provider from a subscription. + /// + /// resourceProviderNamespace Namespace of the resource provider + /// the ProviderInner object wrapped in {@link ServiceResponse} if successful + IProvider Unregister (string resourceProviderNamespace); + + /// + /// Registers provider to be used with a subscription. + /// + /// resourceProviderNamespace Namespace of the resource provider + /// the ProviderInner object wrapped in {@link ServiceResponse} if successful + IProvider Register (string resourceProviderNamespace); + + } +} \ No newline at end of file diff --git a/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Domain/IResourceConnector.cs b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Domain/IResourceConnector.cs new file mode 100644 index 000000000..a285ee727 --- /dev/null +++ b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Domain/IResourceConnector.cs @@ -0,0 +1,30 @@ +/** +* Copyright (c) Microsoft Corporation. All rights reserved. +* Licensed under the MIT License. See License.txt in the project root for +* license information. +*/ + +namespace Microsoft.Azure.Management.V2.Resource +{ + using Core; + using Microsoft.Azure; + + /// + /// Implementations of this interface defines how to create a connector. + /// + /// @param the type of the connector to create. + /// + public interface IBuilder + { + T Create (RestClient restClient, string subscriptionId, IResourceGroup resourceGroup); + + } + /// + /// Defines a connector that connects other resources to a resource group. + /// Implementations of this class can let users browse resources inside a + /// specific resource group. + /// + public interface IResourceConnector + { + } +} \ No newline at end of file diff --git a/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Domain/IResourceGroup.cs b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Domain/IResourceGroup.cs new file mode 100644 index 000000000..d6265df0f --- /dev/null +++ b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Domain/IResourceGroup.cs @@ -0,0 +1,49 @@ +/** +* Copyright (c) Microsoft Corporation. All rights reserved. +* Licensed under the MIT License. See License.txt in the project root for +* license information. +*/ + +namespace Microsoft.Azure.Management.V2.Resource +{ + + using Microsoft.Azure.Management.V2.Resource.Core.ResourceActions; + using Microsoft.Azure.Management.ResourceManager.Models; + using Microsoft.Azure.Management.V2.Resource.ResourceGroup.Update; + using System.Collections.Generic; + using Microsoft.Azure.Management.V2.Resource.Core; + + /// + /// Grouping of all the resource group update stages. + /// + public interface IUpdateStages + { + } + /// + /// An immutable client-side representation of an Azure resource group. + /// + public interface IResourceGroup : + IIndexable, + IResource, + IRefreshable, + IWrapper, + IUpdatable + { + /// the name of the resource group + new string Name { get; } + + /// the provisioning state of the resource group + string ProvisioningState { get; } + + /// + /// Captures the specified resource group as a template. + /// + /// options the export options + /// the exported template result + IResourceGroupExportResult ExportTemplate (ResourceGroupExportTemplateOptions options); + + } + public interface IDefinitionStages + { + } +} \ No newline at end of file diff --git a/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Domain/IResourceGroupExportResult.cs b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Domain/IResourceGroupExportResult.cs new file mode 100644 index 000000000..38b4e5dad --- /dev/null +++ b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Domain/IResourceGroupExportResult.cs @@ -0,0 +1,29 @@ +/** +* Copyright (c) Microsoft Corporation. All rights reserved. +* Licensed under the MIT License. See License.txt in the project root for +* license information. +*/ + +namespace Microsoft.Azure.Management.V2.Resource +{ + + using Microsoft.Azure.Management.ResourceManager.Models; + using Microsoft.Azure.Management.V2.Resource.Core; + + /// + /// An immutable client-side representation of an Azure deployment template export result. + /// + public interface IResourceGroupExportResult : + IWrapper + { + /// the template content + object Template { get; } + + /// the template content as a JSON string + string TemplateJson { get; } + + /// the error, if any. + ResourceManagementErrorWithDetails Error { get; } + + } +} \ No newline at end of file diff --git a/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Domain/IResourceGroups.cs b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Domain/IResourceGroups.cs new file mode 100644 index 000000000..6f5e16d7f --- /dev/null +++ b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Domain/IResourceGroups.cs @@ -0,0 +1,30 @@ +/** +* Copyright (c) Microsoft Corporation. All rights reserved. +* Licensed under the MIT License. See License.txt in the project root for +* license information. +*/ + +namespace Microsoft.Azure.Management.V2.Resource +{ + + using Microsoft.Azure.Management.V2.Resource.Core.CollectionActions; + using Microsoft.Azure.Management.V2.Resource.ResourceGroup.Definition; + + /// + /// Entry point to resource group management API. + /// + public interface IResourceGroups : + ISupportsListing, + ISupportsGettingByName, + ISupportsCreating, + ISupportsDeleting + { + /// + /// Checks whether resource group exists. + /// + /// name The name of the resource group to check. The name is case insensitive + /// true if the resource group exists; false otherwise + bool CheckExistence (string name); + + } +} \ No newline at end of file diff --git a/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Domain/ISubscription.cs b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Domain/ISubscription.cs new file mode 100644 index 000000000..49cd291bb --- /dev/null +++ b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Domain/ISubscription.cs @@ -0,0 +1,40 @@ +/** +* Copyright (c) Microsoft Corporation. All rights reserved. +* Licensed under the MIT License. See License.txt in the project root for +* license information. +*/ + +namespace Microsoft.Azure.Management.V2.Resource +{ + + using Microsoft.Azure.Management.V2.Resource.Core.ResourceActions; + using Microsoft.Azure.Management.V2.Resource.Core; + using Microsoft.Azure.Management.ResourceManager.Models; + + /// + /// An immutable client-side representation of an Azure subscription. + /// + public interface ISubscription : + IIndexable, + IWrapper + { + /// the UUID of the subscription + string SubscriptionId { get; } + + /// the name of the subscription for humans to read + string DisplayName { get; } + + /// the state of the subscription. + string State { get; } + + /// the policies defined in the subscription + SubscriptionPolicies SubscriptionPolicies { get; } + + /// + /// List the locations the subscription has access to. + /// + /// the lazy list of locations + PagedList ListLocations(); + + } +} \ No newline at end of file diff --git a/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Domain/ISubscriptions.cs b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Domain/ISubscriptions.cs new file mode 100644 index 000000000..0c2405008 --- /dev/null +++ b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Domain/ISubscriptions.cs @@ -0,0 +1,20 @@ +/** +* Copyright (c) Microsoft Corporation. All rights reserved. +* Licensed under the MIT License. See License.txt in the project root for +* license information. +*/ + +namespace Microsoft.Azure.Management.V2.Resource +{ + + using Microsoft.Azure.Management.V2.Resource.Core.CollectionActions; + + /// + /// Entry point to subscription management API. + /// + public interface ISubscriptions : + ISupportsListing, + ISupportsGettingByName + { + } +} \ No newline at end of file diff --git a/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Domain/ITenant.cs b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Domain/ITenant.cs new file mode 100644 index 000000000..4e109f40d --- /dev/null +++ b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Domain/ITenant.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. +*/ + +namespace Microsoft.Azure.Management.V2.Resource +{ + + using Microsoft.Azure.Management.V2.Resource.Core.ResourceActions; + using Microsoft.Azure.Management.ResourceManager.Models; + using Microsoft.Azure.Management.V2.Resource.Core; + + /// + /// An immutable client-side representation of an Azure tenant. + /// + public interface ITenant : + IIndexable, + IWrapper + { + /// a UUID of the tenant + string TenantId { get; } + + } +} \ No newline at end of file diff --git a/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Domain/ITenants.cs b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Domain/ITenants.cs new file mode 100644 index 000000000..958878c33 --- /dev/null +++ b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Domain/ITenants.cs @@ -0,0 +1,19 @@ +/** +* Copyright (c) Microsoft Corporation. All rights reserved. +* Licensed under the MIT License. See License.txt in the project root for +* license information. +*/ + +namespace Microsoft.Azure.Management.V2.Resource +{ + + using Microsoft.Azure.Management.V2.Resource.Core.CollectionActions; + + /// + /// Entry point to tenant management API. + /// + public interface ITenants : + ISupportsListing + { + } +} \ No newline at end of file diff --git a/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Domain/ResourceGroup/Definition/IDefinition.cs b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Domain/ResourceGroup/Definition/IDefinition.cs new file mode 100644 index 000000000..8452fe9c0 --- /dev/null +++ b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Domain/ResourceGroup/Definition/IDefinition.cs @@ -0,0 +1,40 @@ +/** +* Copyright (c) Microsoft Corporation. All rights reserved. +* Licensed under the MIT License. See License.txt in the project root for +* license information. +*/ + +namespace Microsoft.Azure.Management.V2.Resource.ResourceGroup.Definition +{ + + using Microsoft.Azure.Management.V2.Resource.Core.ResourceActions; + using Microsoft.Azure.Management.V2.Resource.Core.Resource.Definition; + using Microsoft.Azure.Management.V2.Resource; + + /// + /// A resource group definition with sufficient inputs to create a new + /// resource group in the cloud, but exposing additional optional inputs to + /// specify. + /// + public interface IWithCreate : + ICreatable, + IDefinitionWithTags + { + } + /// + /// Container interface for all the definitions that need to be implemented. + /// + public interface IDefinition : + IBlank, + IWithCreate + { + } + + /// + /// A resource group definition allowing location to be set. + /// + public interface IBlank : + IDefinitionWithRegion + { + } +} \ No newline at end of file diff --git a/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Domain/ResourceGroup/Update/IUpdate.cs b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Domain/ResourceGroup/Update/IUpdate.cs new file mode 100644 index 000000000..042d734c1 --- /dev/null +++ b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Domain/ResourceGroup/Update/IUpdate.cs @@ -0,0 +1,24 @@ +/** +* Copyright (c) Microsoft Corporation. All rights reserved. +* Licensed under the MIT License. See License.txt in the project root for +* license information. +*/ + +namespace Microsoft.Azure.Management.V2.Resource.ResourceGroup.Update +{ + + using Microsoft.Azure.Management.V2.Resource.Core.ResourceActions; + using Microsoft.Azure.Management.V2.Resource; + using Microsoft.Azure.Management.V2.Resource.Core.Resource.Update; + + /// + /// The template for a resource group update operation, containing all the settings that can be modified. + ///

+ /// Call {@link Update#apply()} to apply the changes to the resource group in Azure. + ///

+ public interface IUpdate : + IAppliable, + IUpdateWithTags + { + } +} \ No newline at end of file diff --git a/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Feature/FeatureImpl.cs b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Feature/FeatureImpl.cs new file mode 100644 index 000000000..d2f713eb1 --- /dev/null +++ b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Feature/FeatureImpl.cs @@ -0,0 +1,39 @@ +using Microsoft.Azure.Management.ResourceManager.Models; +using Microsoft.Azure.Management.V2.Resource.Core; + +namespace Microsoft.Azure.Management.V2.Resource +{ + internal class FeatureImpl : IndexableWrapper, + IFeature + { + internal FeatureImpl(FeatureResultInner innerModel) : base(innerModel.Id, innerModel) { } + + public string Name + { + get + { + return Inner.Name; + } + } + + public string State + { + get + { + if (Inner.Properties == null) + { + return null; + } + return Inner.Properties.State; + } + } + + public string Type + { + get + { + return Inner.Type; + } + } + } +} diff --git a/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Feature/FeaturesImpl.cs b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Feature/FeaturesImpl.cs new file mode 100644 index 000000000..d4c46178c --- /dev/null +++ b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Feature/FeaturesImpl.cs @@ -0,0 +1,40 @@ +using Microsoft.Azure.Management.ResourceManager; +using Microsoft.Azure.Management.ResourceManager.Models; +using Microsoft.Azure.Management.V2.Resource.Core; +using Microsoft.Azure.Management.V2.Resource.Feature; + +namespace Microsoft.Azure.Management.V2.Resource +{ + internal class FeaturesImpl : IFeatures + { + private IFeaturesOperations client; + + internal FeaturesImpl(IFeaturesOperations client) + { + this.client = client; + } + + public PagedList List() + { + PagedList innerList = new PagedList(client.ListAll(), (string nextLink) => + { + return client.ListNext(nextLink); + }); + return new PagedList(new WrappedPage(innerList.CurrentPage, WrapModel), (string nextLink) => + { + innerList.LoadNextPage(); + return new WrappedPage(innerList.CurrentPage, WrapModel); + }); + } + + public IInResourceProvider ResourceProvider(string resourceProviderName) + { + return null; + } + + private IFeature WrapModel(FeatureResultInner innerModel) + { + return new FeatureImpl(innerModel); + } + } +} diff --git a/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/DeploymentOperationsOperations.cs b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/DeploymentOperationsOperations.cs new file mode 100644 index 000000000..483322923 --- /dev/null +++ b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/DeploymentOperationsOperations.cs @@ -0,0 +1,626 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.ResourceManager +{ + using System.Linq; + using Microsoft.Rest; + using Microsoft.Rest.Azure; + using Models; + + /// + /// DeploymentOperationsOperations operations. + /// + internal partial class DeploymentOperationsOperations : Microsoft.Rest.IServiceOperations, IDeploymentOperationsOperations + { + /// + /// Initializes a new instance of the DeploymentOperationsOperations class. + /// + /// + /// Reference to the service client. + /// + /// + /// Thrown when a required parameter is null + /// + internal DeploymentOperationsOperations(ResourceManagementClient client) + { + if (client == null) + { + throw new System.ArgumentNullException("client"); + } + this.Client = client; + } + + /// + /// Gets a reference to the ResourceManagementClient + /// + public ResourceManagementClient Client { get; private set; } + + /// + /// Get a list of deployments operations. + /// + /// + /// The name of the resource group. The name is case insensitive. + /// + /// + /// The name of the deployment. + /// + /// + /// Operation Id. + /// + /// + /// 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 + /// + /// + /// A response object containing the response body and response headers. + /// + public async System.Threading.Tasks.Task> GetWithHttpMessagesAsync(string resourceGroupName, string deploymentName, string operationId, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + if (resourceGroupName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "resourceGroupName"); + } + if (resourceGroupName != null) + { + if (!System.Text.RegularExpressions.Regex.IsMatch(resourceGroupName, "^[-\\w\\._]+$")) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.Pattern, "resourceGroupName", "^[-\\w\\._]+$"); + } + } + if (deploymentName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "deploymentName"); + } + if (operationId == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "operationId"); + } + if (this.Client.ApiVersion == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.ApiVersion"); + } + if (this.Client.SubscriptionId == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.SubscriptionId"); + } + // 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("deploymentName", deploymentName); + tracingParameters.Add("operationId", operationId); + 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}/deployments/{deploymentName}/operations/{operationId}").ToString(); + _url = _url.Replace("{resourceGroupName}", System.Uri.EscapeDataString(resourceGroupName)); + _url = _url.Replace("{deploymentName}", System.Uri.EscapeDataString(deploymentName)); + _url = _url.Replace("{operationId}", System.Uri.EscapeDataString(operationId)); + _url = _url.Replace("{subscriptionId}", System.Uri.EscapeDataString(this.Client.SubscriptionId)); + System.Collections.Generic.List _queryParameters = new System.Collections.Generic.List(); + if (this.Client.ApiVersion != null) + { + _queryParameters.Add(string.Format("api-version={0}", System.Uri.EscapeDataString(this.Client.ApiVersion))); + } + if (_queryParameters.Count > 0) + { + _url += "?" + string.Join("&", _queryParameters); + } + // Create HTTP transport objects + System.Net.Http.HttpRequestMessage _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); + CloudError _errorBody = Microsoft.Rest.Serialization.SafeJsonConvert.DeserializeObject(_responseContent, this.Client.DeserializationSettings); + if (_errorBody != null) + { + ex = new Microsoft.Rest.Azure.CloudException(_errorBody.Message); + 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 (_httpResponse.Headers.Contains("x-ms-request-id")) + { + ex.RequestId = _httpResponse.Headers.GetValues("x-ms-request-id").FirstOrDefault(); + } + 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 a list of deployments operations. + /// + /// + /// The name of the resource group. The name is case insensitive. + /// + /// + /// The name of the deployment. + /// + /// + /// Query parameters. + /// + /// + /// 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 + /// + /// + /// A response object containing the response body and response headers. + /// + public async System.Threading.Tasks.Task>> ListWithHttpMessagesAsync(string resourceGroupName, string deploymentName, int? top = default(int?), System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + if (resourceGroupName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "resourceGroupName"); + } + if (resourceGroupName != null) + { + if (!System.Text.RegularExpressions.Regex.IsMatch(resourceGroupName, "^[-\\w\\._]+$")) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.Pattern, "resourceGroupName", "^[-\\w\\._]+$"); + } + } + if (deploymentName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "deploymentName"); + } + if (this.Client.ApiVersion == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.ApiVersion"); + } + if (this.Client.SubscriptionId == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.SubscriptionId"); + } + // 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("deploymentName", deploymentName); + tracingParameters.Add("top", top); + 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}/deployments/{deploymentName}/operations").ToString(); + _url = _url.Replace("{resourceGroupName}", System.Uri.EscapeDataString(resourceGroupName)); + _url = _url.Replace("{deploymentName}", System.Uri.EscapeDataString(deploymentName)); + _url = _url.Replace("{subscriptionId}", System.Uri.EscapeDataString(this.Client.SubscriptionId)); + System.Collections.Generic.List _queryParameters = new System.Collections.Generic.List(); + if (top != null) + { + _queryParameters.Add(string.Format("$top={0}", System.Uri.EscapeDataString(Microsoft.Rest.Serialization.SafeJsonConvert.SerializeObject(top, this.Client.SerializationSettings).Trim('"')))); + } + if (this.Client.ApiVersion != null) + { + _queryParameters.Add(string.Format("api-version={0}", System.Uri.EscapeDataString(this.Client.ApiVersion))); + } + if (_queryParameters.Count > 0) + { + _url += "?" + string.Join("&", _queryParameters); + } + // Create HTTP transport objects + System.Net.Http.HttpRequestMessage _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); + CloudError _errorBody = Microsoft.Rest.Serialization.SafeJsonConvert.DeserializeObject(_responseContent, this.Client.DeserializationSettings); + if (_errorBody != null) + { + ex = new Microsoft.Rest.Azure.CloudException(_errorBody.Message); + 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 (_httpResponse.Headers.Contains("x-ms-request-id")) + { + ex.RequestId = _httpResponse.Headers.GetValues("x-ms-request-id").FirstOrDefault(); + } + 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 a list of deployments operations. + /// + /// + /// 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 + /// + /// + /// 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 += "?" + string.Join("&", _queryParameters); + } + // Create HTTP transport objects + System.Net.Http.HttpRequestMessage _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); + CloudError _errorBody = Microsoft.Rest.Serialization.SafeJsonConvert.DeserializeObject(_responseContent, this.Client.DeserializationSettings); + if (_errorBody != null) + { + ex = new Microsoft.Rest.Azure.CloudException(_errorBody.Message); + 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 (_httpResponse.Headers.Contains("x-ms-request-id")) + { + ex.RequestId = _httpResponse.Headers.GetValues("x-ms-request-id").FirstOrDefault(); + } + 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; + } + + } +} diff --git a/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/DeploymentOperationsOperationsExtensions.cs b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/DeploymentOperationsOperationsExtensions.cs new file mode 100644 index 000000000..a8528a059 --- /dev/null +++ b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/DeploymentOperationsOperationsExtensions.cs @@ -0,0 +1,147 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.ResourceManager +{ + using System.Threading.Tasks; + using Microsoft.Rest.Azure; + using Models; + + /// + /// Extension methods for DeploymentOperationsOperations. + /// + public static partial class DeploymentOperationsOperationsExtensions + { + /// + /// Get a list of deployments operations. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. The name is case insensitive. + /// + /// + /// The name of the deployment. + /// + /// + /// Operation Id. + /// + public static DeploymentOperationInner Get(this IDeploymentOperationsOperations operations, string resourceGroupName, string deploymentName, string operationId) + { + return System.Threading.Tasks.Task.Factory.StartNew(s => ((IDeploymentOperationsOperations)s).GetAsync(resourceGroupName, deploymentName, operationId), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// Get a list of deployments operations. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. The name is case insensitive. + /// + /// + /// The name of the deployment. + /// + /// + /// Operation Id. + /// + /// + /// The cancellation token. + /// + public static async System.Threading.Tasks.Task GetAsync(this IDeploymentOperationsOperations operations, string resourceGroupName, string deploymentName, string operationId, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + using (var _result = await operations.GetWithHttpMessagesAsync(resourceGroupName, deploymentName, operationId, null, cancellationToken).ConfigureAwait(false)) + { + return _result.Body; + } + } + + /// + /// Gets a list of deployments operations. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. The name is case insensitive. + /// + /// + /// The name of the deployment. + /// + /// + /// Query parameters. + /// + public static Microsoft.Rest.Azure.IPage List(this IDeploymentOperationsOperations operations, string resourceGroupName, string deploymentName, int? top = default(int?)) + { + return System.Threading.Tasks.Task.Factory.StartNew(s => ((IDeploymentOperationsOperations)s).ListAsync(resourceGroupName, deploymentName, top), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// Gets a list of deployments operations. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. The name is case insensitive. + /// + /// + /// The name of the deployment. + /// + /// + /// Query parameters. + /// + /// + /// The cancellation token. + /// + public static async Task> ListAsync(this IDeploymentOperationsOperations operations, string resourceGroupName, string deploymentName, int? top = default(int?), System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + using (var _result = await operations.ListWithHttpMessagesAsync(resourceGroupName, deploymentName, top, null, cancellationToken).ConfigureAwait(false)) + { + return _result.Body; + } + } + + /// + /// Gets a list of deployments operations. + /// + /// + /// 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 IDeploymentOperationsOperations operations, string nextPageLink) + { + return System.Threading.Tasks.Task.Factory.StartNew(s => ((IDeploymentOperationsOperations)s).ListNextAsync(nextPageLink), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// Gets a list of deployments operations. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The NextLink from the previous successful call to List operation. + /// + /// + /// The cancellation token. + /// + public static async Task> ListNextAsync(this IDeploymentOperationsOperations 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/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/DeploymentsOperations.cs b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/DeploymentsOperations.cs new file mode 100644 index 000000000..fdb8a7ddd --- /dev/null +++ b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/DeploymentsOperations.cs @@ -0,0 +1,1838 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.ResourceManager +{ + using System.Linq; + using Microsoft.Rest; + using Microsoft.Rest.Azure; + using Models; + + /// + /// DeploymentsOperations operations. + /// + internal partial class DeploymentsOperations : Microsoft.Rest.IServiceOperations, IDeploymentsOperations + { + /// + /// Initializes a new instance of the DeploymentsOperations class. + /// + /// + /// Reference to the service client. + /// + /// + /// Thrown when a required parameter is null + /// + internal DeploymentsOperations(ResourceManagementClient client) + { + if (client == null) + { + throw new System.ArgumentNullException("client"); + } + this.Client = client; + } + + /// + /// Gets a reference to the ResourceManagementClient + /// + public ResourceManagementClient Client { get; private set; } + + /// + /// Delete deployment. + /// + /// + /// The name of the resource group. The name is case insensitive. + /// + /// + /// The name of the deployment to be deleted. + /// + /// + /// The headers that will be added to request. + /// + /// + /// The cancellation token. + /// + public async System.Threading.Tasks.Task DeleteWithHttpMessagesAsync(string resourceGroupName, string deploymentName, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + // Send request + Microsoft.Rest.Azure.AzureOperationResponse _response = await BeginDeleteWithHttpMessagesAsync( + resourceGroupName, deploymentName, customHeaders, cancellationToken); + return await this.Client.GetPostOrDeleteOperationResultAsync(_response, customHeaders, cancellationToken); + } + + /// + /// Delete deployment. + /// + /// + /// The name of the resource group. The name is case insensitive. + /// + /// + /// The name of the deployment to be deleted. + /// + /// + /// 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 + /// + /// + /// A response object containing the response body and response headers. + /// + public async System.Threading.Tasks.Task BeginDeleteWithHttpMessagesAsync(string resourceGroupName, string deploymentName, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + if (resourceGroupName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "resourceGroupName"); + } + if (resourceGroupName != null) + { + if (!System.Text.RegularExpressions.Regex.IsMatch(resourceGroupName, "^[-\\w\\._]+$")) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.Pattern, "resourceGroupName", "^[-\\w\\._]+$"); + } + } + if (deploymentName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "deploymentName"); + } + if (this.Client.ApiVersion == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.ApiVersion"); + } + if (this.Client.SubscriptionId == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.SubscriptionId"); + } + // 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("deploymentName", deploymentName); + 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.Resources/deployments/{deploymentName}").ToString(); + _url = _url.Replace("{resourceGroupName}", System.Uri.EscapeDataString(resourceGroupName)); + _url = _url.Replace("{deploymentName}", System.Uri.EscapeDataString(deploymentName)); + _url = _url.Replace("{subscriptionId}", System.Uri.EscapeDataString(this.Client.SubscriptionId)); + System.Collections.Generic.List _queryParameters = new System.Collections.Generic.List(); + if (this.Client.ApiVersion != null) + { + _queryParameters.Add(string.Format("api-version={0}", System.Uri.EscapeDataString(this.Client.ApiVersion))); + } + if (_queryParameters.Count > 0) + { + _url += "?" + string.Join("&", _queryParameters); + } + // Create HTTP transport objects + System.Net.Http.HttpRequestMessage _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)); + if (_httpResponse.Content != null) { + _responseContent = await _httpResponse.Content.ReadAsStringAsync().ConfigureAwait(false); + } + else { + _responseContent = string.Empty; + } + ex.Request = new Microsoft.Rest.HttpRequestMessageWrapper(_httpRequest, _requestContent); + ex.Response = new Microsoft.Rest.HttpResponseMessageWrapper(_httpResponse, _responseContent); + if (_httpResponse.Headers.Contains("x-ms-request-id")) + { + ex.RequestId = _httpResponse.Headers.GetValues("x-ms-request-id").FirstOrDefault(); + } + 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(); + } + if (_shouldTrace) + { + Microsoft.Rest.ServiceClientTracing.Exit(_invocationId, _result); + } + return _result; + } + + /// + /// Checks whether deployment exists. + /// + /// + /// The name of the resource group to check. The name is case insensitive. + /// + /// + /// The name of the deployment. + /// + /// + /// 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 + /// + /// + /// A response object containing the response body and response headers. + /// + public async System.Threading.Tasks.Task> CheckExistenceWithHttpMessagesAsync(string resourceGroupName, string deploymentName, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + if (resourceGroupName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "resourceGroupName"); + } + if (resourceGroupName != null) + { + if (!System.Text.RegularExpressions.Regex.IsMatch(resourceGroupName, "^[-\\w\\._]+$")) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.Pattern, "resourceGroupName", "^[-\\w\\._]+$"); + } + } + if (deploymentName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "deploymentName"); + } + if (this.Client.ApiVersion == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.ApiVersion"); + } + if (this.Client.SubscriptionId == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.SubscriptionId"); + } + // 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("deploymentName", deploymentName); + tracingParameters.Add("cancellationToken", cancellationToken); + Microsoft.Rest.ServiceClientTracing.Enter(_invocationId, this, "CheckExistence", 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.Resources/deployments/{deploymentName}").ToString(); + _url = _url.Replace("{resourceGroupName}", System.Uri.EscapeDataString(resourceGroupName)); + _url = _url.Replace("{deploymentName}", System.Uri.EscapeDataString(deploymentName)); + _url = _url.Replace("{subscriptionId}", System.Uri.EscapeDataString(this.Client.SubscriptionId)); + System.Collections.Generic.List _queryParameters = new System.Collections.Generic.List(); + if (this.Client.ApiVersion != null) + { + _queryParameters.Add(string.Format("api-version={0}", System.Uri.EscapeDataString(this.Client.ApiVersion))); + } + if (_queryParameters.Count > 0) + { + _url += "?" + string.Join("&", _queryParameters); + } + // Create HTTP transport objects + System.Net.Http.HttpRequestMessage _httpRequest = new System.Net.Http.HttpRequestMessage(); + System.Net.Http.HttpResponseMessage _httpResponse = null; + _httpRequest.Method = new System.Net.Http.HttpMethod("HEAD"); + _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 != 204 && (int)_statusCode != 404) + { + 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); + CloudError _errorBody = Microsoft.Rest.Serialization.SafeJsonConvert.DeserializeObject(_responseContent, this.Client.DeserializationSettings); + if (_errorBody != null) + { + ex = new Microsoft.Rest.Azure.CloudException(_errorBody.Message); + 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 (_httpResponse.Headers.Contains("x-ms-request-id")) + { + ex.RequestId = _httpResponse.Headers.GetValues("x-ms-request-id").FirstOrDefault(); + } + 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; + _result.Body = (_statusCode == System.Net.HttpStatusCode.NoContent); + if (_httpResponse.Headers.Contains("x-ms-request-id")) + { + _result.RequestId = _httpResponse.Headers.GetValues("x-ms-request-id").FirstOrDefault(); + } + if (_shouldTrace) + { + Microsoft.Rest.ServiceClientTracing.Exit(_invocationId, _result); + } + return _result; + } + + /// + /// Create a named template deployment using a template. + /// + /// + /// The name of the resource group. The name is case insensitive. + /// + /// + /// The name of the deployment. + /// + /// + /// Additional parameters supplied to the operation. + /// + /// + /// The headers that will be added to request. + /// + /// + /// The cancellation token. + /// + public async System.Threading.Tasks.Task> CreateOrUpdateWithHttpMessagesAsync(string resourceGroupName, string deploymentName, DeploymentInner 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, deploymentName, parameters, customHeaders, cancellationToken); + return await this.Client.GetPutOrPatchOperationResultAsync(_response, + customHeaders, + cancellationToken); + } + + /// + /// Create a named template deployment using a template. + /// + /// + /// The name of the resource group. The name is case insensitive. + /// + /// + /// The name of the deployment. + /// + /// + /// Additional parameters supplied to the 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 + /// + /// + /// A response object containing the response body and response headers. + /// + public async System.Threading.Tasks.Task> BeginCreateOrUpdateWithHttpMessagesAsync(string resourceGroupName, string deploymentName, DeploymentInner parameters, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + if (resourceGroupName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "resourceGroupName"); + } + if (resourceGroupName != null) + { + if (!System.Text.RegularExpressions.Regex.IsMatch(resourceGroupName, "^[-\\w\\._]+$")) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.Pattern, "resourceGroupName", "^[-\\w\\._]+$"); + } + } + if (deploymentName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "deploymentName"); + } + if (parameters == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "parameters"); + } + if (parameters != null) + { + parameters.Validate(); + } + if (this.Client.ApiVersion == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.ApiVersion"); + } + if (this.Client.SubscriptionId == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.SubscriptionId"); + } + // 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("deploymentName", deploymentName); + 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.Resources/deployments/{deploymentName}").ToString(); + _url = _url.Replace("{resourceGroupName}", System.Uri.EscapeDataString(resourceGroupName)); + _url = _url.Replace("{deploymentName}", System.Uri.EscapeDataString(deploymentName)); + _url = _url.Replace("{subscriptionId}", System.Uri.EscapeDataString(this.Client.SubscriptionId)); + System.Collections.Generic.List _queryParameters = new System.Collections.Generic.List(); + if (this.Client.ApiVersion != null) + { + _queryParameters.Add(string.Format("api-version={0}", System.Uri.EscapeDataString(this.Client.ApiVersion))); + } + if (_queryParameters.Count > 0) + { + _url += "?" + string.Join("&", _queryParameters); + } + // Create HTTP transport objects + System.Net.Http.HttpRequestMessage _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); + CloudError _errorBody = Microsoft.Rest.Serialization.SafeJsonConvert.DeserializeObject(_responseContent, this.Client.DeserializationSettings); + if (_errorBody != null) + { + ex = new Microsoft.Rest.Azure.CloudException(_errorBody.Message); + 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 (_httpResponse.Headers.Contains("x-ms-request-id")) + { + ex.RequestId = _httpResponse.Headers.GetValues("x-ms-request-id").FirstOrDefault(); + } + 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); + } + } + if (_shouldTrace) + { + Microsoft.Rest.ServiceClientTracing.Exit(_invocationId, _result); + } + return _result; + } + + /// + /// Get a deployment. + /// + /// + /// The name of the resource group to get. The name is case insensitive. + /// + /// + /// The name of the deployment. + /// + /// + /// 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 + /// + /// + /// A response object containing the response body and response headers. + /// + public async System.Threading.Tasks.Task> GetWithHttpMessagesAsync(string resourceGroupName, string deploymentName, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + if (resourceGroupName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "resourceGroupName"); + } + if (resourceGroupName != null) + { + if (!System.Text.RegularExpressions.Regex.IsMatch(resourceGroupName, "^[-\\w\\._]+$")) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.Pattern, "resourceGroupName", "^[-\\w\\._]+$"); + } + } + if (deploymentName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "deploymentName"); + } + if (this.Client.ApiVersion == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.ApiVersion"); + } + if (this.Client.SubscriptionId == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.SubscriptionId"); + } + // 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("deploymentName", deploymentName); + 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.Resources/deployments/{deploymentName}").ToString(); + _url = _url.Replace("{resourceGroupName}", System.Uri.EscapeDataString(resourceGroupName)); + _url = _url.Replace("{deploymentName}", System.Uri.EscapeDataString(deploymentName)); + _url = _url.Replace("{subscriptionId}", System.Uri.EscapeDataString(this.Client.SubscriptionId)); + System.Collections.Generic.List _queryParameters = new System.Collections.Generic.List(); + if (this.Client.ApiVersion != null) + { + _queryParameters.Add(string.Format("api-version={0}", System.Uri.EscapeDataString(this.Client.ApiVersion))); + } + if (_queryParameters.Count > 0) + { + _url += "?" + string.Join("&", _queryParameters); + } + // Create HTTP transport objects + System.Net.Http.HttpRequestMessage _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); + CloudError _errorBody = Microsoft.Rest.Serialization.SafeJsonConvert.DeserializeObject(_responseContent, this.Client.DeserializationSettings); + if (_errorBody != null) + { + ex = new Microsoft.Rest.Azure.CloudException(_errorBody.Message); + 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 (_httpResponse.Headers.Contains("x-ms-request-id")) + { + ex.RequestId = _httpResponse.Headers.GetValues("x-ms-request-id").FirstOrDefault(); + } + 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; + } + + /// + /// Cancel a currently running template deployment. + /// + /// + /// The name of the resource group. The name is case insensitive. + /// + /// + /// The name of the deployment. + /// + /// + /// 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 + /// + /// + /// A response object containing the response body and response headers. + /// + public async System.Threading.Tasks.Task CancelWithHttpMessagesAsync(string resourceGroupName, string deploymentName, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + if (resourceGroupName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "resourceGroupName"); + } + if (resourceGroupName != null) + { + if (!System.Text.RegularExpressions.Regex.IsMatch(resourceGroupName, "^[-\\w\\._]+$")) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.Pattern, "resourceGroupName", "^[-\\w\\._]+$"); + } + } + if (deploymentName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "deploymentName"); + } + if (this.Client.ApiVersion == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.ApiVersion"); + } + if (this.Client.SubscriptionId == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.SubscriptionId"); + } + // 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("deploymentName", deploymentName); + tracingParameters.Add("cancellationToken", cancellationToken); + Microsoft.Rest.ServiceClientTracing.Enter(_invocationId, this, "Cancel", 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.Resources/deployments/{deploymentName}/cancel").ToString(); + _url = _url.Replace("{resourceGroupName}", System.Uri.EscapeDataString(resourceGroupName)); + _url = _url.Replace("{deploymentName}", System.Uri.EscapeDataString(deploymentName)); + _url = _url.Replace("{subscriptionId}", System.Uri.EscapeDataString(this.Client.SubscriptionId)); + System.Collections.Generic.List _queryParameters = new System.Collections.Generic.List(); + if (this.Client.ApiVersion != null) + { + _queryParameters.Add(string.Format("api-version={0}", System.Uri.EscapeDataString(this.Client.ApiVersion))); + } + if (_queryParameters.Count > 0) + { + _url += "?" + string.Join("&", _queryParameters); + } + // Create HTTP transport objects + System.Net.Http.HttpRequestMessage _httpRequest = new System.Net.Http.HttpRequestMessage(); + System.Net.Http.HttpResponseMessage _httpResponse = null; + _httpRequest.Method = new System.Net.Http.HttpMethod("POST"); + _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 != 204) + { + var ex = new Microsoft.Rest.Azure.CloudException(string.Format("Operation returned an invalid status code '{0}'", _statusCode)); + if (_httpResponse.Content != null) { + _responseContent = await _httpResponse.Content.ReadAsStringAsync().ConfigureAwait(false); + } + else { + _responseContent = string.Empty; + } + ex.Request = new Microsoft.Rest.HttpRequestMessageWrapper(_httpRequest, _requestContent); + ex.Response = new Microsoft.Rest.HttpResponseMessageWrapper(_httpResponse, _responseContent); + if (_httpResponse.Headers.Contains("x-ms-request-id")) + { + ex.RequestId = _httpResponse.Headers.GetValues("x-ms-request-id").FirstOrDefault(); + } + 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(); + } + if (_shouldTrace) + { + Microsoft.Rest.ServiceClientTracing.Exit(_invocationId, _result); + } + return _result; + } + + /// + /// Validate a deployment template. + /// + /// + /// The name of the resource group. The name is case insensitive. + /// + /// + /// The name of the deployment. + /// + /// + /// Deployment to validate. + /// + /// + /// 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 + /// + /// + /// A response object containing the response body and response headers. + /// + public async System.Threading.Tasks.Task> ValidateWithHttpMessagesAsync(string resourceGroupName, string deploymentName, DeploymentInner parameters, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + if (resourceGroupName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "resourceGroupName"); + } + if (resourceGroupName != null) + { + if (!System.Text.RegularExpressions.Regex.IsMatch(resourceGroupName, "^[-\\w\\._]+$")) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.Pattern, "resourceGroupName", "^[-\\w\\._]+$"); + } + } + if (deploymentName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "deploymentName"); + } + if (parameters == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "parameters"); + } + if (parameters != null) + { + parameters.Validate(); + } + if (this.Client.ApiVersion == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.ApiVersion"); + } + if (this.Client.SubscriptionId == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.SubscriptionId"); + } + // 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("deploymentName", deploymentName); + tracingParameters.Add("parameters", parameters); + tracingParameters.Add("cancellationToken", cancellationToken); + Microsoft.Rest.ServiceClientTracing.Enter(_invocationId, this, "Validate", 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.Resources/deployments/{deploymentName}/validate").ToString(); + _url = _url.Replace("{resourceGroupName}", System.Uri.EscapeDataString(resourceGroupName)); + _url = _url.Replace("{deploymentName}", System.Uri.EscapeDataString(deploymentName)); + _url = _url.Replace("{subscriptionId}", System.Uri.EscapeDataString(this.Client.SubscriptionId)); + System.Collections.Generic.List _queryParameters = new System.Collections.Generic.List(); + if (this.Client.ApiVersion != null) + { + _queryParameters.Add(string.Format("api-version={0}", System.Uri.EscapeDataString(this.Client.ApiVersion))); + } + if (_queryParameters.Count > 0) + { + _url += "?" + string.Join("&", _queryParameters); + } + // Create HTTP transport objects + System.Net.Http.HttpRequestMessage _httpRequest = new System.Net.Http.HttpRequestMessage(); + System.Net.Http.HttpResponseMessage _httpResponse = null; + _httpRequest.Method = new System.Net.Http.HttpMethod("POST"); + _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 != 400) + { + 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); + CloudError _errorBody = Microsoft.Rest.Serialization.SafeJsonConvert.DeserializeObject(_responseContent, this.Client.DeserializationSettings); + if (_errorBody != null) + { + ex = new Microsoft.Rest.Azure.CloudException(_errorBody.Message); + 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 (_httpResponse.Headers.Contains("x-ms-request-id")) + { + ex.RequestId = _httpResponse.Headers.GetValues("x-ms-request-id").FirstOrDefault(); + } + 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 == 400) + { + _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; + } + + /// + /// Exports a deployment template. + /// + /// + /// The name of the resource group. The name is case insensitive. + /// + /// + /// The name of the deployment. + /// + /// + /// 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 + /// + /// + /// A response object containing the response body and response headers. + /// + public async System.Threading.Tasks.Task> ExportTemplateWithHttpMessagesAsync(string resourceGroupName, string deploymentName, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + if (resourceGroupName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "resourceGroupName"); + } + if (resourceGroupName != null) + { + if (!System.Text.RegularExpressions.Regex.IsMatch(resourceGroupName, "^[-\\w\\._]+$")) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.Pattern, "resourceGroupName", "^[-\\w\\._]+$"); + } + } + if (deploymentName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "deploymentName"); + } + if (this.Client.ApiVersion == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.ApiVersion"); + } + if (this.Client.SubscriptionId == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.SubscriptionId"); + } + // 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("deploymentName", deploymentName); + tracingParameters.Add("cancellationToken", cancellationToken); + Microsoft.Rest.ServiceClientTracing.Enter(_invocationId, this, "ExportTemplate", 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.Resources/deployments/{deploymentName}/exportTemplate").ToString(); + _url = _url.Replace("{resourceGroupName}", System.Uri.EscapeDataString(resourceGroupName)); + _url = _url.Replace("{deploymentName}", System.Uri.EscapeDataString(deploymentName)); + _url = _url.Replace("{subscriptionId}", System.Uri.EscapeDataString(this.Client.SubscriptionId)); + System.Collections.Generic.List _queryParameters = new System.Collections.Generic.List(); + if (this.Client.ApiVersion != null) + { + _queryParameters.Add(string.Format("api-version={0}", System.Uri.EscapeDataString(this.Client.ApiVersion))); + } + if (_queryParameters.Count > 0) + { + _url += "?" + string.Join("&", _queryParameters); + } + // Create HTTP transport objects + System.Net.Http.HttpRequestMessage _httpRequest = new System.Net.Http.HttpRequestMessage(); + System.Net.Http.HttpResponseMessage _httpResponse = null; + _httpRequest.Method = new System.Net.Http.HttpMethod("POST"); + _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); + CloudError _errorBody = Microsoft.Rest.Serialization.SafeJsonConvert.DeserializeObject(_responseContent, this.Client.DeserializationSettings); + if (_errorBody != null) + { + ex = new Microsoft.Rest.Azure.CloudException(_errorBody.Message); + 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 (_httpResponse.Headers.Contains("x-ms-request-id")) + { + ex.RequestId = _httpResponse.Headers.GetValues("x-ms-request-id").FirstOrDefault(); + } + 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; + } + + /// + /// Get a list of deployments. + /// + /// + /// The name of the resource group to filter by. The name is case insensitive. + /// + /// + /// OData parameters to apply to the 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 + /// + /// + /// A response object containing the response body and response headers. + /// + public async System.Threading.Tasks.Task>> ListWithHttpMessagesAsync(string resourceGroupName, Microsoft.Rest.Azure.OData.ODataQuery odataQuery = default(Microsoft.Rest.Azure.OData.ODataQuery), System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + if (resourceGroupName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "resourceGroupName"); + } + if (this.Client.ApiVersion == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.ApiVersion"); + } + if (this.Client.SubscriptionId == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.SubscriptionId"); + } + // 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("odataQuery", odataQuery); + tracingParameters.Add("resourceGroupName", resourceGroupName); + 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.Resources/deployments/").ToString(); + _url = _url.Replace("{resourceGroupName}", System.Uri.EscapeDataString(resourceGroupName)); + _url = _url.Replace("{subscriptionId}", System.Uri.EscapeDataString(this.Client.SubscriptionId)); + System.Collections.Generic.List _queryParameters = new System.Collections.Generic.List(); + if (odataQuery != null) + { + var _odataFilter = odataQuery.ToString(); + if (!string.IsNullOrEmpty(_odataFilter)) + { + _queryParameters.Add(_odataFilter); + } + } + if (this.Client.ApiVersion != null) + { + _queryParameters.Add(string.Format("api-version={0}", System.Uri.EscapeDataString(this.Client.ApiVersion))); + } + if (_queryParameters.Count > 0) + { + _url += "?" + string.Join("&", _queryParameters); + } + // Create HTTP transport objects + System.Net.Http.HttpRequestMessage _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); + CloudError _errorBody = Microsoft.Rest.Serialization.SafeJsonConvert.DeserializeObject(_responseContent, this.Client.DeserializationSettings); + if (_errorBody != null) + { + ex = new Microsoft.Rest.Azure.CloudException(_errorBody.Message); + 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 (_httpResponse.Headers.Contains("x-ms-request-id")) + { + ex.RequestId = _httpResponse.Headers.GetValues("x-ms-request-id").FirstOrDefault(); + } + 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; + } + + /// + /// Get a list of deployments. + /// + /// + /// 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 + /// + /// + /// 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 += "?" + string.Join("&", _queryParameters); + } + // Create HTTP transport objects + System.Net.Http.HttpRequestMessage _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); + CloudError _errorBody = Microsoft.Rest.Serialization.SafeJsonConvert.DeserializeObject(_responseContent, this.Client.DeserializationSettings); + if (_errorBody != null) + { + ex = new Microsoft.Rest.Azure.CloudException(_errorBody.Message); + 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 (_httpResponse.Headers.Contains("x-ms-request-id")) + { + ex.RequestId = _httpResponse.Headers.GetValues("x-ms-request-id").FirstOrDefault(); + } + 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; + } + + } +} diff --git a/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/DeploymentsOperationsExtensions.cs b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/DeploymentsOperationsExtensions.cs new file mode 100644 index 000000000..6cc3ab2e5 --- /dev/null +++ b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/DeploymentsOperationsExtensions.cs @@ -0,0 +1,464 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.ResourceManager +{ + using System.Threading.Tasks; + using Microsoft.Rest.Azure; + using Models; + + /// + /// Extension methods for DeploymentsOperations. + /// + public static partial class DeploymentsOperationsExtensions + { + /// + /// Delete deployment. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. The name is case insensitive. + /// + /// + /// The name of the deployment to be deleted. + /// + public static void Delete(this IDeploymentsOperations operations, string resourceGroupName, string deploymentName) + { + System.Threading.Tasks.Task.Factory.StartNew(s => ((IDeploymentsOperations)s).DeleteAsync(resourceGroupName, deploymentName), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// Delete deployment. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. The name is case insensitive. + /// + /// + /// The name of the deployment to be deleted. + /// + /// + /// The cancellation token. + /// + public static async System.Threading.Tasks.Task DeleteAsync(this IDeploymentsOperations operations, string resourceGroupName, string deploymentName, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + await operations.DeleteWithHttpMessagesAsync(resourceGroupName, deploymentName, null, cancellationToken).ConfigureAwait(false); + } + + /// + /// Delete deployment. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. The name is case insensitive. + /// + /// + /// The name of the deployment to be deleted. + /// + public static void BeginDelete(this IDeploymentsOperations operations, string resourceGroupName, string deploymentName) + { + System.Threading.Tasks.Task.Factory.StartNew(s => ((IDeploymentsOperations)s).BeginDeleteAsync(resourceGroupName, deploymentName), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// Delete deployment. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. The name is case insensitive. + /// + /// + /// The name of the deployment to be deleted. + /// + /// + /// The cancellation token. + /// + public static async System.Threading.Tasks.Task BeginDeleteAsync(this IDeploymentsOperations operations, string resourceGroupName, string deploymentName, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + await operations.BeginDeleteWithHttpMessagesAsync(resourceGroupName, deploymentName, null, cancellationToken).ConfigureAwait(false); + } + + /// + /// Checks whether deployment exists. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group to check. The name is case insensitive. + /// + /// + /// The name of the deployment. + /// + public static bool CheckExistence(this IDeploymentsOperations operations, string resourceGroupName, string deploymentName) + { + return System.Threading.Tasks.Task.Factory.StartNew(s => ((IDeploymentsOperations)s).CheckExistenceAsync(resourceGroupName, deploymentName), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// Checks whether deployment exists. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group to check. The name is case insensitive. + /// + /// + /// The name of the deployment. + /// + /// + /// The cancellation token. + /// + public static async System.Threading.Tasks.Task CheckExistenceAsync(this IDeploymentsOperations operations, string resourceGroupName, string deploymentName, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + using (var _result = await operations.CheckExistenceWithHttpMessagesAsync(resourceGroupName, deploymentName, null, cancellationToken).ConfigureAwait(false)) + { + return _result.Body; + } + } + + /// + /// Create a named template deployment using a template. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. The name is case insensitive. + /// + /// + /// The name of the deployment. + /// + /// + /// Additional parameters supplied to the operation. + /// + public static DeploymentExtendedInner CreateOrUpdate(this IDeploymentsOperations operations, string resourceGroupName, string deploymentName, DeploymentInner parameters) + { + return System.Threading.Tasks.Task.Factory.StartNew(s => ((IDeploymentsOperations)s).CreateOrUpdateAsync(resourceGroupName, deploymentName, parameters), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// Create a named template deployment using a template. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. The name is case insensitive. + /// + /// + /// The name of the deployment. + /// + /// + /// Additional parameters supplied to the operation. + /// + /// + /// The cancellation token. + /// + public static async System.Threading.Tasks.Task CreateOrUpdateAsync(this IDeploymentsOperations operations, string resourceGroupName, string deploymentName, DeploymentInner parameters, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + using (var _result = await operations.CreateOrUpdateWithHttpMessagesAsync(resourceGroupName, deploymentName, parameters, null, cancellationToken).ConfigureAwait(false)) + { + return _result.Body; + } + } + + /// + /// Create a named template deployment using a template. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. The name is case insensitive. + /// + /// + /// The name of the deployment. + /// + /// + /// Additional parameters supplied to the operation. + /// + public static DeploymentExtendedInner BeginCreateOrUpdate(this IDeploymentsOperations operations, string resourceGroupName, string deploymentName, DeploymentInner parameters) + { + return System.Threading.Tasks.Task.Factory.StartNew(s => ((IDeploymentsOperations)s).BeginCreateOrUpdateAsync(resourceGroupName, deploymentName, parameters), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// Create a named template deployment using a template. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. The name is case insensitive. + /// + /// + /// The name of the deployment. + /// + /// + /// Additional parameters supplied to the operation. + /// + /// + /// The cancellation token. + /// + public static async System.Threading.Tasks.Task BeginCreateOrUpdateAsync(this IDeploymentsOperations operations, string resourceGroupName, string deploymentName, DeploymentInner parameters, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + using (var _result = await operations.BeginCreateOrUpdateWithHttpMessagesAsync(resourceGroupName, deploymentName, parameters, null, cancellationToken).ConfigureAwait(false)) + { + return _result.Body; + } + } + + /// + /// Get a deployment. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group to get. The name is case insensitive. + /// + /// + /// The name of the deployment. + /// + public static DeploymentExtendedInner Get(this IDeploymentsOperations operations, string resourceGroupName, string deploymentName) + { + return System.Threading.Tasks.Task.Factory.StartNew(s => ((IDeploymentsOperations)s).GetAsync(resourceGroupName, deploymentName), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// Get a deployment. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group to get. The name is case insensitive. + /// + /// + /// The name of the deployment. + /// + /// + /// The cancellation token. + /// + public static async System.Threading.Tasks.Task GetAsync(this IDeploymentsOperations operations, string resourceGroupName, string deploymentName, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + using (var _result = await operations.GetWithHttpMessagesAsync(resourceGroupName, deploymentName, null, cancellationToken).ConfigureAwait(false)) + { + return _result.Body; + } + } + + /// + /// Cancel a currently running template deployment. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. The name is case insensitive. + /// + /// + /// The name of the deployment. + /// + public static void Cancel(this IDeploymentsOperations operations, string resourceGroupName, string deploymentName) + { + System.Threading.Tasks.Task.Factory.StartNew(s => ((IDeploymentsOperations)s).CancelAsync(resourceGroupName, deploymentName), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// Cancel a currently running template deployment. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. The name is case insensitive. + /// + /// + /// The name of the deployment. + /// + /// + /// The cancellation token. + /// + public static async System.Threading.Tasks.Task CancelAsync(this IDeploymentsOperations operations, string resourceGroupName, string deploymentName, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + await operations.CancelWithHttpMessagesAsync(resourceGroupName, deploymentName, null, cancellationToken).ConfigureAwait(false); + } + + /// + /// Validate a deployment template. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. The name is case insensitive. + /// + /// + /// The name of the deployment. + /// + /// + /// Deployment to validate. + /// + public static DeploymentValidateResultInner Validate(this IDeploymentsOperations operations, string resourceGroupName, string deploymentName, DeploymentInner parameters) + { + return System.Threading.Tasks.Task.Factory.StartNew(s => ((IDeploymentsOperations)s).ValidateAsync(resourceGroupName, deploymentName, parameters), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// Validate a deployment template. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. The name is case insensitive. + /// + /// + /// The name of the deployment. + /// + /// + /// Deployment to validate. + /// + /// + /// The cancellation token. + /// + public static async System.Threading.Tasks.Task ValidateAsync(this IDeploymentsOperations operations, string resourceGroupName, string deploymentName, DeploymentInner parameters, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + using (var _result = await operations.ValidateWithHttpMessagesAsync(resourceGroupName, deploymentName, parameters, null, cancellationToken).ConfigureAwait(false)) + { + return _result.Body; + } + } + + /// + /// Exports a deployment template. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. The name is case insensitive. + /// + /// + /// The name of the deployment. + /// + public static DeploymentExportResultInner ExportTemplate(this IDeploymentsOperations operations, string resourceGroupName, string deploymentName) + { + return System.Threading.Tasks.Task.Factory.StartNew(s => ((IDeploymentsOperations)s).ExportTemplateAsync(resourceGroupName, deploymentName), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// Exports a deployment template. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. The name is case insensitive. + /// + /// + /// The name of the deployment. + /// + /// + /// The cancellation token. + /// + public static async System.Threading.Tasks.Task ExportTemplateAsync(this IDeploymentsOperations operations, string resourceGroupName, string deploymentName, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + using (var _result = await operations.ExportTemplateWithHttpMessagesAsync(resourceGroupName, deploymentName, null, cancellationToken).ConfigureAwait(false)) + { + return _result.Body; + } + } + + /// + /// Get a list of deployments. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group to filter by. The name is case insensitive. + /// + /// + /// OData parameters to apply to the operation. + /// + public static Microsoft.Rest.Azure.IPage List(this IDeploymentsOperations operations, string resourceGroupName, Microsoft.Rest.Azure.OData.ODataQuery odataQuery = default(Microsoft.Rest.Azure.OData.ODataQuery)) + { + return System.Threading.Tasks.Task.Factory.StartNew(s => ((IDeploymentsOperations)s).ListAsync(resourceGroupName, odataQuery), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// Get a list of deployments. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group to filter by. The name is case insensitive. + /// + /// + /// OData parameters to apply to the operation. + /// + /// + /// The cancellation token. + /// + public static async Task> ListAsync(this IDeploymentsOperations operations, string resourceGroupName, Microsoft.Rest.Azure.OData.ODataQuery odataQuery = default(Microsoft.Rest.Azure.OData.ODataQuery), System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + using (var _result = await operations.ListWithHttpMessagesAsync(resourceGroupName, odataQuery, null, cancellationToken).ConfigureAwait(false)) + { + return _result.Body; + } + } + + /// + /// Get a list of deployments. + /// + /// + /// 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 IDeploymentsOperations operations, string nextPageLink) + { + return System.Threading.Tasks.Task.Factory.StartNew(s => ((IDeploymentsOperations)s).ListNextAsync(nextPageLink), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// Get a list of deployments. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The NextLink from the previous successful call to List operation. + /// + /// + /// The cancellation token. + /// + public static async Task> ListNextAsync(this IDeploymentsOperations 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/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/FeatureClient.cs b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/FeatureClient.cs new file mode 100644 index 000000000..8b33f571b --- /dev/null +++ b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/FeatureClient.cs @@ -0,0 +1,307 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.ResourceManager +{ + using System.Linq; + using Microsoft.Rest.Azure; + using Models; + + public partial class FeatureClient : Microsoft.Rest.ServiceClient, IFeatureClient, IAzureClient + { + /// + /// The base URI of the service. + /// + public System.Uri BaseUri { get; set; } + + /// + /// Gets or sets json serialization settings. + /// + public Newtonsoft.Json.JsonSerializerSettings SerializationSettings { get; private set; } + + /// + /// Gets or sets json deserialization settings. + /// + public Newtonsoft.Json.JsonSerializerSettings DeserializationSettings { get; private set; } + + /// + /// Credentials needed for the client to connect to Azure. + /// + public Microsoft.Rest.ServiceClientCredentials Credentials { get; private set; } + + /// + /// Gets subscription credentials which uniquely identify Microsoft Azure + /// subscription. The subscription ID forms part of the URI for every service + /// call. + /// + public string SubscriptionId { get; set; } + + /// + /// Client Api Version. + /// + public string ApiVersion { get; private set; } + + /// + /// Gets or sets the preferred language for the response. + /// + public string AcceptLanguage { get; set; } + + /// + /// Gets or sets the retry timeout in seconds for Long Running Operations. + /// Default value is 30. + /// + public int? LongRunningOperationRetryTimeout { get; set; } + + /// + /// When set to true a unique x-ms-client-request-id value is generated and + /// included in each request. Default is true. + /// + public bool? GenerateClientRequestId { get; set; } + + /// + /// Gets the IFeaturesOperations. + /// + public virtual IFeaturesOperations Features { get; private set; } + + /// + /// Initializes a new instance of the FeatureClient class. + /// + /// + /// Optional. The delegating handlers to add to the http client pipeline. + /// + protected FeatureClient(params System.Net.Http.DelegatingHandler[] handlers) : base(handlers) + { + this.Initialize(); + } + + /// + /// Initializes a new instance of the FeatureClient class. + /// + /// + /// Optional. The http client handler used to handle http transport. + /// + /// + /// Optional. The delegating handlers to add to the http client pipeline. + /// + protected FeatureClient(System.Net.Http.HttpClientHandler rootHandler, params System.Net.Http.DelegatingHandler[] handlers) : base(rootHandler, handlers) + { + this.Initialize(); + } + + /// + /// Initializes a new instance of the FeatureClient class. + /// + /// + /// Optional. The base URI of the service. + /// + /// + /// Optional. The delegating handlers to add to the http client pipeline. + /// + /// + /// Thrown when a required parameter is null + /// + protected FeatureClient(System.Uri baseUri, params System.Net.Http.DelegatingHandler[] handlers) : this(handlers) + { + if (baseUri == null) + { + throw new System.ArgumentNullException("baseUri"); + } + this.BaseUri = baseUri; + } + + /// + /// Initializes a new instance of the FeatureClient class. + /// + /// + /// Optional. The base URI of the service. + /// + /// + /// Optional. The http client handler used to handle http transport. + /// + /// + /// Optional. The delegating handlers to add to the http client pipeline. + /// + /// + /// Thrown when a required parameter is null + /// + protected FeatureClient(System.Uri baseUri, System.Net.Http.HttpClientHandler rootHandler, params System.Net.Http.DelegatingHandler[] handlers) : this(rootHandler, handlers) + { + if (baseUri == null) + { + throw new System.ArgumentNullException("baseUri"); + } + this.BaseUri = baseUri; + } + + /// + /// Initializes a new instance of the FeatureClient class. + /// + /// + /// Required. Credentials needed for the client to connect to Azure. + /// + /// + /// Optional. The delegating handlers to add to the http client pipeline. + /// + /// + /// Thrown when a required parameter is null + /// + public FeatureClient(Microsoft.Rest.ServiceClientCredentials credentials, params System.Net.Http.DelegatingHandler[] handlers) : this(handlers) + { + if (credentials == null) + { + throw new System.ArgumentNullException("credentials"); + } + this.Credentials = credentials; + if (this.Credentials != null) + { + this.Credentials.InitializeServiceClient(this); + } + } + + /// + /// Initializes a new instance of the FeatureClient class. + /// + /// + /// Required. Credentials needed for the client to connect to Azure. + /// + /// + /// Optional. The http client handler used to handle http transport. + /// + /// + /// Optional. The delegating handlers to add to the http client pipeline. + /// + /// + /// Thrown when a required parameter is null + /// + public FeatureClient(Microsoft.Rest.ServiceClientCredentials credentials, System.Net.Http.HttpClientHandler rootHandler, params System.Net.Http.DelegatingHandler[] handlers) : this(rootHandler, handlers) + { + if (credentials == null) + { + throw new System.ArgumentNullException("credentials"); + } + this.Credentials = credentials; + if (this.Credentials != null) + { + this.Credentials.InitializeServiceClient(this); + } + } + + /// + /// Initializes a new instance of the FeatureClient class. + /// + /// + /// Optional. The base URI of the service. + /// + /// + /// Required. Credentials needed for the client to connect to Azure. + /// + /// + /// Optional. The delegating handlers to add to the http client pipeline. + /// + /// + /// Thrown when a required parameter is null + /// + public FeatureClient(System.Uri baseUri, Microsoft.Rest.ServiceClientCredentials credentials, params System.Net.Http.DelegatingHandler[] handlers) : this(handlers) + { + if (baseUri == null) + { + throw new System.ArgumentNullException("baseUri"); + } + if (credentials == null) + { + throw new System.ArgumentNullException("credentials"); + } + this.BaseUri = baseUri; + this.Credentials = credentials; + if (this.Credentials != null) + { + this.Credentials.InitializeServiceClient(this); + } + } + + /// + /// Initializes a new instance of the FeatureClient class. + /// + /// + /// Optional. The base URI of the service. + /// + /// + /// Required. Credentials needed for the client to connect to Azure. + /// + /// + /// Optional. The http client handler used to handle http transport. + /// + /// + /// Optional. The delegating handlers to add to the http client pipeline. + /// + /// + /// Thrown when a required parameter is null + /// + public FeatureClient(System.Uri baseUri, Microsoft.Rest.ServiceClientCredentials credentials, System.Net.Http.HttpClientHandler rootHandler, params System.Net.Http.DelegatingHandler[] handlers) : this(rootHandler, handlers) + { + if (baseUri == null) + { + throw new System.ArgumentNullException("baseUri"); + } + if (credentials == null) + { + throw new System.ArgumentNullException("credentials"); + } + this.BaseUri = baseUri; + this.Credentials = credentials; + if (this.Credentials != null) + { + this.Credentials.InitializeServiceClient(this); + } + } + + /// + /// An optional partial-method to perform custom initialization. + /// + partial void CustomInitialize(); + /// + /// Initializes client properties. + /// + private void Initialize() + { + this.Features = new FeaturesOperations(this); + this.BaseUri = new System.Uri("https://management.azure.com"); + this.ApiVersion = "2015-12-01"; + this.AcceptLanguage = "en-US"; + this.LongRunningOperationRetryTimeout = 30; + this.GenerateClientRequestId = true; + SerializationSettings = new Newtonsoft.Json.JsonSerializerSettings + { + Formatting = Newtonsoft.Json.Formatting.Indented, + DateFormatHandling = Newtonsoft.Json.DateFormatHandling.IsoDateFormat, + DateTimeZoneHandling = Newtonsoft.Json.DateTimeZoneHandling.Utc, + NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore, + ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Serialize, + ContractResolver = new Microsoft.Rest.Serialization.ReadOnlyJsonContractResolver(), + Converters = new System.Collections.Generic.List + { + new Microsoft.Rest.Serialization.Iso8601TimeSpanConverter() + } + }; + DeserializationSettings = new Newtonsoft.Json.JsonSerializerSettings + { + DateFormatHandling = Newtonsoft.Json.DateFormatHandling.IsoDateFormat, + DateTimeZoneHandling = Newtonsoft.Json.DateTimeZoneHandling.Utc, + NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore, + ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Serialize, + ContractResolver = new Microsoft.Rest.Serialization.ReadOnlyJsonContractResolver(), + Converters = new System.Collections.Generic.List + { + new Microsoft.Rest.Serialization.Iso8601TimeSpanConverter() + } + }; + CustomInitialize(); + DeserializationSettings.Converters.Add(new Microsoft.Rest.Azure.CloudErrorJsonConverter()); + } + } +} diff --git a/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/FeaturesOperations.cs b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/FeaturesOperations.cs new file mode 100644 index 000000000..0510f6db9 --- /dev/null +++ b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/FeaturesOperations.cs @@ -0,0 +1,1120 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.ResourceManager +{ + using System.Linq; + using Microsoft.Rest; + using Microsoft.Rest.Azure; + using Models; + + /// + /// FeaturesOperations operations. + /// + internal partial class FeaturesOperations : Microsoft.Rest.IServiceOperations, IFeaturesOperations + { + /// + /// Initializes a new instance of the FeaturesOperations class. + /// + /// + /// Reference to the service client. + /// + /// + /// Thrown when a required parameter is null + /// + internal FeaturesOperations(FeatureClient client) + { + if (client == null) + { + throw new System.ArgumentNullException("client"); + } + this.Client = client; + } + + /// + /// Gets a reference to the FeatureClient + /// + public FeatureClient Client { get; private set; } + + /// + /// Gets a list of previewed features for all the providers in the current + /// subscription. + /// + /// + /// 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 + /// + /// + /// A response object containing the response body and response headers. + /// + public async System.Threading.Tasks.Task>> ListAllWithHttpMessagesAsync(System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + if (this.Client.ApiVersion == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.ApiVersion"); + } + if (this.Client.SubscriptionId == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.SubscriptionId"); + } + // 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("cancellationToken", cancellationToken); + Microsoft.Rest.ServiceClientTracing.Enter(_invocationId, this, "ListAll", tracingParameters); + } + // Construct URL + var _baseUrl = this.Client.BaseUri.AbsoluteUri; + var _url = new System.Uri(new System.Uri(_baseUrl + (_baseUrl.EndsWith("/") ? "" : "/")), "subscriptions/{subscriptionId}/providers/Microsoft.Features/features").ToString(); + _url = _url.Replace("{subscriptionId}", System.Uri.EscapeDataString(this.Client.SubscriptionId)); + System.Collections.Generic.List _queryParameters = new System.Collections.Generic.List(); + if (this.Client.ApiVersion != null) + { + _queryParameters.Add(string.Format("api-version={0}", System.Uri.EscapeDataString(this.Client.ApiVersion))); + } + if (_queryParameters.Count > 0) + { + _url += "?" + string.Join("&", _queryParameters); + } + // Create HTTP transport objects + System.Net.Http.HttpRequestMessage _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); + CloudError _errorBody = Microsoft.Rest.Serialization.SafeJsonConvert.DeserializeObject(_responseContent, this.Client.DeserializationSettings); + if (_errorBody != null) + { + ex = new Microsoft.Rest.Azure.CloudException(_errorBody.Message); + 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 (_httpResponse.Headers.Contains("x-ms-request-id")) + { + ex.RequestId = _httpResponse.Headers.GetValues("x-ms-request-id").FirstOrDefault(); + } + 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 a list of previewed features of a resource provider. + /// + /// + /// The namespace of the resource provider. + /// + /// + /// 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 + /// + /// + /// A response object containing the response body and response headers. + /// + public async System.Threading.Tasks.Task>> ListWithHttpMessagesAsync(string resourceProviderNamespace, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + if (resourceProviderNamespace == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "resourceProviderNamespace"); + } + if (this.Client.ApiVersion == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.ApiVersion"); + } + if (this.Client.SubscriptionId == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.SubscriptionId"); + } + // 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("resourceProviderNamespace", resourceProviderNamespace); + 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}/providers/Microsoft.Features/providers/{resourceProviderNamespace}/features").ToString(); + _url = _url.Replace("{resourceProviderNamespace}", System.Uri.EscapeDataString(resourceProviderNamespace)); + _url = _url.Replace("{subscriptionId}", System.Uri.EscapeDataString(this.Client.SubscriptionId)); + System.Collections.Generic.List _queryParameters = new System.Collections.Generic.List(); + if (this.Client.ApiVersion != null) + { + _queryParameters.Add(string.Format("api-version={0}", System.Uri.EscapeDataString(this.Client.ApiVersion))); + } + if (_queryParameters.Count > 0) + { + _url += "?" + string.Join("&", _queryParameters); + } + // Create HTTP transport objects + System.Net.Http.HttpRequestMessage _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); + CloudError _errorBody = Microsoft.Rest.Serialization.SafeJsonConvert.DeserializeObject(_responseContent, this.Client.DeserializationSettings); + if (_errorBody != null) + { + ex = new Microsoft.Rest.Azure.CloudException(_errorBody.Message); + 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 (_httpResponse.Headers.Contains("x-ms-request-id")) + { + ex.RequestId = _httpResponse.Headers.GetValues("x-ms-request-id").FirstOrDefault(); + } + 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; + } + + /// + /// Get all features under the subscription. + /// + /// + /// Namespace of the resource provider. + /// + /// + /// Previewed feature name in the resource provider. + /// + /// + /// 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 + /// + /// + /// A response object containing the response body and response headers. + /// + public async System.Threading.Tasks.Task> GetWithHttpMessagesAsync(string resourceProviderNamespace, string featureName, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + if (resourceProviderNamespace == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "resourceProviderNamespace"); + } + if (featureName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "featureName"); + } + if (this.Client.ApiVersion == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.ApiVersion"); + } + if (this.Client.SubscriptionId == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.SubscriptionId"); + } + // 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("resourceProviderNamespace", resourceProviderNamespace); + tracingParameters.Add("featureName", featureName); + 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}/providers/Microsoft.Features/providers/{resourceProviderNamespace}/features/{featureName}").ToString(); + _url = _url.Replace("{resourceProviderNamespace}", System.Uri.EscapeDataString(resourceProviderNamespace)); + _url = _url.Replace("{featureName}", System.Uri.EscapeDataString(featureName)); + _url = _url.Replace("{subscriptionId}", System.Uri.EscapeDataString(this.Client.SubscriptionId)); + System.Collections.Generic.List _queryParameters = new System.Collections.Generic.List(); + if (this.Client.ApiVersion != null) + { + _queryParameters.Add(string.Format("api-version={0}", System.Uri.EscapeDataString(this.Client.ApiVersion))); + } + if (_queryParameters.Count > 0) + { + _url += "?" + string.Join("&", _queryParameters); + } + // Create HTTP transport objects + System.Net.Http.HttpRequestMessage _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); + CloudError _errorBody = Microsoft.Rest.Serialization.SafeJsonConvert.DeserializeObject(_responseContent, this.Client.DeserializationSettings); + if (_errorBody != null) + { + ex = new Microsoft.Rest.Azure.CloudException(_errorBody.Message); + 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 (_httpResponse.Headers.Contains("x-ms-request-id")) + { + ex.RequestId = _httpResponse.Headers.GetValues("x-ms-request-id").FirstOrDefault(); + } + 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; + } + + /// + /// Registers for a previewed feature of a resource provider. + /// + /// + /// Namespace of the resource provider. + /// + /// + /// Previewed feature name in the resource provider. + /// + /// + /// 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 + /// + /// + /// A response object containing the response body and response headers. + /// + public async System.Threading.Tasks.Task> RegisterWithHttpMessagesAsync(string resourceProviderNamespace, string featureName, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + if (resourceProviderNamespace == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "resourceProviderNamespace"); + } + if (featureName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "featureName"); + } + if (this.Client.ApiVersion == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.ApiVersion"); + } + if (this.Client.SubscriptionId == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.SubscriptionId"); + } + // 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("resourceProviderNamespace", resourceProviderNamespace); + tracingParameters.Add("featureName", featureName); + tracingParameters.Add("cancellationToken", cancellationToken); + Microsoft.Rest.ServiceClientTracing.Enter(_invocationId, this, "Register", tracingParameters); + } + // Construct URL + var _baseUrl = this.Client.BaseUri.AbsoluteUri; + var _url = new System.Uri(new System.Uri(_baseUrl + (_baseUrl.EndsWith("/") ? "" : "/")), "subscriptions/{subscriptionId}/providers/Microsoft.Features/providers/{resourceProviderNamespace}/features/{featureName}/register").ToString(); + _url = _url.Replace("{resourceProviderNamespace}", System.Uri.EscapeDataString(resourceProviderNamespace)); + _url = _url.Replace("{featureName}", System.Uri.EscapeDataString(featureName)); + _url = _url.Replace("{subscriptionId}", System.Uri.EscapeDataString(this.Client.SubscriptionId)); + System.Collections.Generic.List _queryParameters = new System.Collections.Generic.List(); + if (this.Client.ApiVersion != null) + { + _queryParameters.Add(string.Format("api-version={0}", System.Uri.EscapeDataString(this.Client.ApiVersion))); + } + if (_queryParameters.Count > 0) + { + _url += "?" + string.Join("&", _queryParameters); + } + // Create HTTP transport objects + System.Net.Http.HttpRequestMessage _httpRequest = new System.Net.Http.HttpRequestMessage(); + System.Net.Http.HttpResponseMessage _httpResponse = null; + _httpRequest.Method = new System.Net.Http.HttpMethod("POST"); + _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); + CloudError _errorBody = Microsoft.Rest.Serialization.SafeJsonConvert.DeserializeObject(_responseContent, this.Client.DeserializationSettings); + if (_errorBody != null) + { + ex = new Microsoft.Rest.Azure.CloudException(_errorBody.Message); + 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 (_httpResponse.Headers.Contains("x-ms-request-id")) + { + ex.RequestId = _httpResponse.Headers.GetValues("x-ms-request-id").FirstOrDefault(); + } + 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 a list of previewed features for all the providers in the current + /// subscription. + /// + /// + /// 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 + /// + /// + /// A response object containing the response body and response headers. + /// + public async System.Threading.Tasks.Task>> ListAllNextWithHttpMessagesAsync(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, "ListAllNext", 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 += "?" + string.Join("&", _queryParameters); + } + // Create HTTP transport objects + System.Net.Http.HttpRequestMessage _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); + CloudError _errorBody = Microsoft.Rest.Serialization.SafeJsonConvert.DeserializeObject(_responseContent, this.Client.DeserializationSettings); + if (_errorBody != null) + { + ex = new Microsoft.Rest.Azure.CloudException(_errorBody.Message); + 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 (_httpResponse.Headers.Contains("x-ms-request-id")) + { + ex.RequestId = _httpResponse.Headers.GetValues("x-ms-request-id").FirstOrDefault(); + } + 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 a list of previewed features of a resource provider. + /// + /// + /// 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 + /// + /// + /// 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 += "?" + string.Join("&", _queryParameters); + } + // Create HTTP transport objects + System.Net.Http.HttpRequestMessage _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); + CloudError _errorBody = Microsoft.Rest.Serialization.SafeJsonConvert.DeserializeObject(_responseContent, this.Client.DeserializationSettings); + if (_errorBody != null) + { + ex = new Microsoft.Rest.Azure.CloudException(_errorBody.Message); + 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 (_httpResponse.Headers.Contains("x-ms-request-id")) + { + ex.RequestId = _httpResponse.Headers.GetValues("x-ms-request-id").FirstOrDefault(); + } + 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; + } + + } +} diff --git a/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/FeaturesOperationsExtensions.cs b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/FeaturesOperationsExtensions.cs new file mode 100644 index 000000000..15ec94321 --- /dev/null +++ b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/FeaturesOperationsExtensions.cs @@ -0,0 +1,235 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.ResourceManager +{ + using System.Threading.Tasks; + using Microsoft.Rest.Azure; + using Models; + + /// + /// Extension methods for FeaturesOperations. + /// + public static partial class FeaturesOperationsExtensions + { + /// + /// Gets a list of previewed features for all the providers in the current + /// subscription. + /// + /// + /// The operations group for this extension method. + /// + public static Microsoft.Rest.Azure.IPage ListAll(this IFeaturesOperations operations) + { + return System.Threading.Tasks.Task.Factory.StartNew(s => ((IFeaturesOperations)s).ListAllAsync(), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// Gets a list of previewed features for all the providers in the current + /// subscription. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The cancellation token. + /// + public static async Task> ListAllAsync(this IFeaturesOperations operations, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + using (var _result = await operations.ListAllWithHttpMessagesAsync(null, cancellationToken).ConfigureAwait(false)) + { + return _result.Body; + } + } + + /// + /// Gets a list of previewed features of a resource provider. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The namespace of the resource provider. + /// + public static Microsoft.Rest.Azure.IPage List(this IFeaturesOperations operations, string resourceProviderNamespace) + { + return System.Threading.Tasks.Task.Factory.StartNew(s => ((IFeaturesOperations)s).ListAsync(resourceProviderNamespace), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// Gets a list of previewed features of a resource provider. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The namespace of the resource provider. + /// + /// + /// The cancellation token. + /// + public static async Task> ListAsync(this IFeaturesOperations operations, string resourceProviderNamespace, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + using (var _result = await operations.ListWithHttpMessagesAsync(resourceProviderNamespace, null, cancellationToken).ConfigureAwait(false)) + { + return _result.Body; + } + } + + /// + /// Get all features under the subscription. + /// + /// + /// The operations group for this extension method. + /// + /// + /// Namespace of the resource provider. + /// + /// + /// Previewed feature name in the resource provider. + /// + public static FeatureResultInner Get(this IFeaturesOperations operations, string resourceProviderNamespace, string featureName) + { + return System.Threading.Tasks.Task.Factory.StartNew(s => ((IFeaturesOperations)s).GetAsync(resourceProviderNamespace, featureName), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// Get all features under the subscription. + /// + /// + /// The operations group for this extension method. + /// + /// + /// Namespace of the resource provider. + /// + /// + /// Previewed feature name in the resource provider. + /// + /// + /// The cancellation token. + /// + public static async System.Threading.Tasks.Task GetAsync(this IFeaturesOperations operations, string resourceProviderNamespace, string featureName, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + using (var _result = await operations.GetWithHttpMessagesAsync(resourceProviderNamespace, featureName, null, cancellationToken).ConfigureAwait(false)) + { + return _result.Body; + } + } + + /// + /// Registers for a previewed feature of a resource provider. + /// + /// + /// The operations group for this extension method. + /// + /// + /// Namespace of the resource provider. + /// + /// + /// Previewed feature name in the resource provider. + /// + public static FeatureResultInner Register(this IFeaturesOperations operations, string resourceProviderNamespace, string featureName) + { + return System.Threading.Tasks.Task.Factory.StartNew(s => ((IFeaturesOperations)s).RegisterAsync(resourceProviderNamespace, featureName), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// Registers for a previewed feature of a resource provider. + /// + /// + /// The operations group for this extension method. + /// + /// + /// Namespace of the resource provider. + /// + /// + /// Previewed feature name in the resource provider. + /// + /// + /// The cancellation token. + /// + public static async System.Threading.Tasks.Task RegisterAsync(this IFeaturesOperations operations, string resourceProviderNamespace, string featureName, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + using (var _result = await operations.RegisterWithHttpMessagesAsync(resourceProviderNamespace, featureName, null, cancellationToken).ConfigureAwait(false)) + { + return _result.Body; + } + } + + /// + /// Gets a list of previewed features for all the providers in the current + /// subscription. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The NextLink from the previous successful call to List operation. + /// + public static Microsoft.Rest.Azure.IPage ListAllNext(this IFeaturesOperations operations, string nextPageLink) + { + return System.Threading.Tasks.Task.Factory.StartNew(s => ((IFeaturesOperations)s).ListAllNextAsync(nextPageLink), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// Gets a list of previewed features for all the providers in the current + /// subscription. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The NextLink from the previous successful call to List operation. + /// + /// + /// The cancellation token. + /// + public static async Task> ListAllNextAsync(this IFeaturesOperations operations, string nextPageLink, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + using (var _result = await operations.ListAllNextWithHttpMessagesAsync(nextPageLink, null, cancellationToken).ConfigureAwait(false)) + { + return _result.Body; + } + } + + /// + /// Gets a list of previewed features of a resource provider. + /// + /// + /// 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 IFeaturesOperations operations, string nextPageLink) + { + return System.Threading.Tasks.Task.Factory.StartNew(s => ((IFeaturesOperations)s).ListNextAsync(nextPageLink), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// Gets a list of previewed features of a resource provider. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The NextLink from the previous successful call to List operation. + /// + /// + /// The cancellation token. + /// + public static async Task> ListNextAsync(this IFeaturesOperations 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/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/IDeploymentOperationsOperations.cs b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/IDeploymentOperationsOperations.cs new file mode 100644 index 000000000..fa84dc64e --- /dev/null +++ b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/IDeploymentOperationsOperations.cs @@ -0,0 +1,98 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.ResourceManager +{ + using Microsoft.Rest.Azure; + using Models; + + /// + /// DeploymentOperationsOperations operations. + /// + public partial interface IDeploymentOperationsOperations + { + /// + /// Get a list of deployments operations. + /// + /// + /// The name of the resource group. The name is case insensitive. + /// + /// + /// The name of the deployment. + /// + /// + /// Operation Id. + /// + /// + /// 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 + /// + /// + /// Thrown when a required parameter is null + /// + System.Threading.Tasks.Task> GetWithHttpMessagesAsync(string resourceGroupName, string deploymentName, string operationId, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + /// + /// Gets a list of deployments operations. + /// + /// + /// The name of the resource group. The name is case insensitive. + /// + /// + /// The name of the deployment. + /// + /// + /// Query parameters. + /// + /// + /// 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 + /// + /// + /// Thrown when a required parameter is null + /// + System.Threading.Tasks.Task>> ListWithHttpMessagesAsync(string resourceGroupName, string deploymentName, int? top = default(int?), System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + /// + /// Gets a list of deployments operations. + /// + /// + /// 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 + /// + /// + /// Thrown when a required parameter is null + /// + System.Threading.Tasks.Task>> ListNextWithHttpMessagesAsync(string nextPageLink, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + } +} diff --git a/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/IDeploymentsOperations.cs b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/IDeploymentsOperations.cs new file mode 100644 index 000000000..9f3b5ff2a --- /dev/null +++ b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/IDeploymentsOperations.cs @@ -0,0 +1,292 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.ResourceManager +{ + using Microsoft.Rest.Azure; + using Models; + + /// + /// DeploymentsOperations operations. + /// + public partial interface IDeploymentsOperations + { + /// + /// Delete deployment. + /// + /// + /// The name of the resource group. The name is case insensitive. + /// + /// + /// The name of the deployment to be deleted. + /// + /// + /// The 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 + /// + System.Threading.Tasks.Task DeleteWithHttpMessagesAsync(string resourceGroupName, string deploymentName, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + /// + /// Delete deployment. + /// + /// + /// The name of the resource group. The name is case insensitive. + /// + /// + /// The name of the deployment to be deleted. + /// + /// + /// The 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 + /// + System.Threading.Tasks.Task BeginDeleteWithHttpMessagesAsync(string resourceGroupName, string deploymentName, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + /// + /// Checks whether deployment exists. + /// + /// + /// The name of the resource group to check. The name is case + /// insensitive. + /// + /// + /// The name of the deployment. + /// + /// + /// The 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 + /// + System.Threading.Tasks.Task> CheckExistenceWithHttpMessagesAsync(string resourceGroupName, string deploymentName, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + /// + /// Create a named template deployment using a template. + /// + /// + /// The name of the resource group. The name is case insensitive. + /// + /// + /// The name of the deployment. + /// + /// + /// Additional parameters supplied to the 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 + /// + /// + /// Thrown when a required parameter is null + /// + System.Threading.Tasks.Task> CreateOrUpdateWithHttpMessagesAsync(string resourceGroupName, string deploymentName, DeploymentInner parameters, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + /// + /// Create a named template deployment using a template. + /// + /// + /// The name of the resource group. The name is case insensitive. + /// + /// + /// The name of the deployment. + /// + /// + /// Additional parameters supplied to the 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 + /// + /// + /// Thrown when a required parameter is null + /// + System.Threading.Tasks.Task> BeginCreateOrUpdateWithHttpMessagesAsync(string resourceGroupName, string deploymentName, DeploymentInner parameters, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + /// + /// Get a deployment. + /// + /// + /// The name of the resource group to get. The name is case + /// insensitive. + /// + /// + /// The name of the deployment. + /// + /// + /// 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 + /// + /// + /// Thrown when a required parameter is null + /// + System.Threading.Tasks.Task> GetWithHttpMessagesAsync(string resourceGroupName, string deploymentName, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + /// + /// Cancel a currently running template deployment. + /// + /// + /// The name of the resource group. The name is case insensitive. + /// + /// + /// The name of the deployment. + /// + /// + /// The 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 + /// + System.Threading.Tasks.Task CancelWithHttpMessagesAsync(string resourceGroupName, string deploymentName, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + /// + /// Validate a deployment template. + /// + /// + /// The name of the resource group. The name is case insensitive. + /// + /// + /// The name of the deployment. + /// + /// + /// Deployment to validate. + /// + /// + /// 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 + /// + /// + /// Thrown when a required parameter is null + /// + System.Threading.Tasks.Task> ValidateWithHttpMessagesAsync(string resourceGroupName, string deploymentName, DeploymentInner parameters, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + /// + /// Exports a deployment template. + /// + /// + /// The name of the resource group. The name is case insensitive. + /// + /// + /// The name of the deployment. + /// + /// + /// 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 + /// + /// + /// Thrown when a required parameter is null + /// + System.Threading.Tasks.Task> ExportTemplateWithHttpMessagesAsync(string resourceGroupName, string deploymentName, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + /// + /// Get a list of deployments. + /// + /// + /// The name of the resource group to filter by. The name is case + /// insensitive. + /// + /// + /// OData parameters to apply to the 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 + /// + /// + /// Thrown when a required parameter is null + /// + System.Threading.Tasks.Task>> ListWithHttpMessagesAsync(string resourceGroupName, Microsoft.Rest.Azure.OData.ODataQuery odataQuery = default(Microsoft.Rest.Azure.OData.ODataQuery), System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + /// + /// Get a list of deployments. + /// + /// + /// 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 + /// + /// + /// Thrown when a required parameter is null + /// + System.Threading.Tasks.Task>> ListNextWithHttpMessagesAsync(string nextPageLink, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + } +} diff --git a/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/IFeatureClient.cs b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/IFeatureClient.cs new file mode 100644 index 000000000..ce6d8d2f4 --- /dev/null +++ b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/IFeatureClient.cs @@ -0,0 +1,74 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.ResourceManager +{ + using Microsoft.Rest.Azure; + using Models; + + /// + /// + public partial interface IFeatureClient : System.IDisposable + { + /// + /// The base URI of the service. + /// + System.Uri BaseUri { get; set; } + + /// + /// Gets or sets json serialization settings. + /// + Newtonsoft.Json.JsonSerializerSettings SerializationSettings { get; } + + /// + /// Gets or sets json deserialization settings. + /// + Newtonsoft.Json.JsonSerializerSettings DeserializationSettings { get; } + + /// + /// Credentials needed for the client to connect to Azure. + /// + Microsoft.Rest.ServiceClientCredentials Credentials { get; } + + /// + /// Gets subscription credentials which uniquely identify Microsoft + /// Azure subscription. The subscription ID forms part of the URI for + /// every service call. + /// + string SubscriptionId { get; set; } + + /// + /// Client Api Version. + /// + string ApiVersion { get; } + + /// + /// Gets or sets the preferred language for the response. + /// + string AcceptLanguage { get; set; } + + /// + /// Gets or sets the retry timeout in seconds for Long Running + /// Operations. Default value is 30. + /// + int? LongRunningOperationRetryTimeout { get; set; } + + /// + /// When set to true a unique x-ms-client-request-id value is + /// generated and included in each request. Default is true. + /// + bool? GenerateClientRequestId { get; set; } + + + /// + /// Gets the IFeaturesOperations. + /// + IFeaturesOperations Features { get; } + + } +} diff --git a/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/IFeaturesOperations.cs b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/IFeaturesOperations.cs new file mode 100644 index 000000000..5def85785 --- /dev/null +++ b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/IFeaturesOperations.cs @@ -0,0 +1,157 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.ResourceManager +{ + using Microsoft.Rest.Azure; + using Models; + + /// + /// FeaturesOperations operations. + /// + public partial interface IFeaturesOperations + { + /// + /// Gets a list of previewed features for all the providers in the + /// current subscription. + /// + /// + /// 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 + /// + /// + /// Thrown when a required parameter is null + /// + System.Threading.Tasks.Task>> ListAllWithHttpMessagesAsync(System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + /// + /// Gets a list of previewed features of a resource provider. + /// + /// + /// The namespace of the resource provider. + /// + /// + /// 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 + /// + /// + /// Thrown when a required parameter is null + /// + System.Threading.Tasks.Task>> ListWithHttpMessagesAsync(string resourceProviderNamespace, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + /// + /// Get all features under the subscription. + /// + /// + /// Namespace of the resource provider. + /// + /// + /// Previewed feature name in the resource provider. + /// + /// + /// 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 + /// + /// + /// Thrown when a required parameter is null + /// + System.Threading.Tasks.Task> GetWithHttpMessagesAsync(string resourceProviderNamespace, string featureName, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + /// + /// Registers for a previewed feature of a resource provider. + /// + /// + /// Namespace of the resource provider. + /// + /// + /// Previewed feature name in the resource provider. + /// + /// + /// 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 + /// + /// + /// Thrown when a required parameter is null + /// + System.Threading.Tasks.Task> RegisterWithHttpMessagesAsync(string resourceProviderNamespace, string featureName, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + /// + /// Gets a list of previewed features for all the providers in the + /// current subscription. + /// + /// + /// 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 + /// + /// + /// Thrown when a required parameter is null + /// + System.Threading.Tasks.Task>> ListAllNextWithHttpMessagesAsync(string nextPageLink, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + /// + /// Gets a list of previewed features of a resource provider. + /// + /// + /// 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 + /// + /// + /// Thrown when a required parameter is null + /// + System.Threading.Tasks.Task>> ListNextWithHttpMessagesAsync(string nextPageLink, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + } +} diff --git a/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/IProvidersOperations.cs b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/IProvidersOperations.cs new file mode 100644 index 000000000..564163a17 --- /dev/null +++ b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/IProvidersOperations.cs @@ -0,0 +1,138 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.ResourceManager +{ + using Microsoft.Rest.Azure; + using Models; + + /// + /// ProvidersOperations operations. + /// + public partial interface IProvidersOperations + { + /// + /// Unregisters provider from a subscription. + /// + /// + /// Namespace of the resource provider. + /// + /// + /// 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 + /// + /// + /// Thrown when a required parameter is null + /// + System.Threading.Tasks.Task> UnregisterWithHttpMessagesAsync(string resourceProviderNamespace, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + /// + /// Registers provider to be used with a subscription. + /// + /// + /// Namespace of the resource provider. + /// + /// + /// 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 + /// + /// + /// Thrown when a required parameter is null + /// + System.Threading.Tasks.Task> RegisterWithHttpMessagesAsync(string resourceProviderNamespace, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + /// + /// Gets a list of resource providers. + /// + /// + /// Query parameters. If null is passed returns all deployments. + /// + /// + /// The $expand query parameter. e.g. To include property aliases in + /// response, use $expand=resourceTypes/aliases. + /// + /// + /// 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 + /// + /// + /// Thrown when a required parameter is null + /// + System.Threading.Tasks.Task>> ListWithHttpMessagesAsync(int? top = default(int?), string expand = default(string), System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + /// + /// Gets a resource provider. + /// + /// + /// Namespace of the resource provider. + /// + /// + /// The $expand query parameter. e.g. To include property aliases in + /// response, use $expand=resourceTypes/aliases. + /// + /// + /// 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 + /// + /// + /// Thrown when a required parameter is null + /// + System.Threading.Tasks.Task> GetWithHttpMessagesAsync(string resourceProviderNamespace, string expand = default(string), System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + /// + /// Gets a list of resource providers. + /// + /// + /// 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 + /// + /// + /// Thrown when a required parameter is null + /// + System.Threading.Tasks.Task>> ListNextWithHttpMessagesAsync(string nextPageLink, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + } +} diff --git a/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/IResourceGroupsOperations.cs b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/IResourceGroupsOperations.cs new file mode 100644 index 000000000..b40071627 --- /dev/null +++ b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/IResourceGroupsOperations.cs @@ -0,0 +1,276 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.ResourceManager +{ + using Microsoft.Rest.Azure; + using Models; + + /// + /// ResourceGroupsOperations operations. + /// + public partial interface IResourceGroupsOperations + { + /// + /// Get all of the resources under a subscription. + /// + /// + /// Query parameters. If null is passed returns all resource groups. + /// + /// + /// OData parameters to apply to the 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 + /// + /// + /// Thrown when a required parameter is null + /// + System.Threading.Tasks.Task>> ListResourcesWithHttpMessagesAsync(string resourceGroupName, Microsoft.Rest.Azure.OData.ODataQuery odataQuery = default(Microsoft.Rest.Azure.OData.ODataQuery), System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + /// + /// Checks whether resource group exists. + /// + /// + /// The name of the resource group to check. The name is case + /// insensitive. + /// + /// + /// The 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 + /// + System.Threading.Tasks.Task> CheckExistenceWithHttpMessagesAsync(string resourceGroupName, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + /// + /// Create a resource group. + /// + /// + /// The name of the resource group to be created or updated. + /// + /// + /// Parameters supplied to the create or update resource group service + /// 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 + /// + /// + /// Thrown when a required parameter is null + /// + System.Threading.Tasks.Task> CreateOrUpdateWithHttpMessagesAsync(string resourceGroupName, ResourceGroupInner parameters, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + /// + /// Delete resource group. + /// + /// + /// The name of the resource group to be deleted. The name is case + /// insensitive. + /// + /// + /// The 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 + /// + System.Threading.Tasks.Task DeleteWithHttpMessagesAsync(string resourceGroupName, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + /// + /// Delete resource group. + /// + /// + /// The name of the resource group to be deleted. The name is case + /// insensitive. + /// + /// + /// The 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 + /// + System.Threading.Tasks.Task BeginDeleteWithHttpMessagesAsync(string resourceGroupName, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + /// + /// Get a resource group. + /// + /// + /// The name of the resource group to get. The name is case + /// insensitive. + /// + /// + /// 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 + /// + /// + /// Thrown when a required parameter is null + /// + System.Threading.Tasks.Task> GetWithHttpMessagesAsync(string resourceGroupName, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + /// + /// Resource groups can be updated through a simple PATCH operation to + /// a group address. The format of the request is the same as that + /// for creating a resource groups, though if a field is unspecified + /// current value will be carried over. + /// + /// + /// The name of the resource group to be created or updated. The name + /// is case insensitive. + /// + /// + /// Parameters supplied to the update state resource group service + /// 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 + /// + /// + /// Thrown when a required parameter is null + /// + System.Threading.Tasks.Task> PatchWithHttpMessagesAsync(string resourceGroupName, ResourceGroupInner parameters, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + /// + /// Captures the specified resource group as a template. + /// + /// + /// The name of the resource group to be created or updated. + /// + /// + /// Parameters supplied to the export template resource group + /// 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 + /// + /// + /// Thrown when a required parameter is null + /// + System.Threading.Tasks.Task> ExportTemplateWithHttpMessagesAsync(string resourceGroupName, ExportTemplateRequestInner parameters, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + /// + /// Gets a collection of resource groups. + /// + /// + /// OData parameters to apply to the 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 + /// + /// + /// Thrown when a required parameter is null + /// + System.Threading.Tasks.Task>> ListWithHttpMessagesAsync(Microsoft.Rest.Azure.OData.ODataQuery odataQuery = default(Microsoft.Rest.Azure.OData.ODataQuery), System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + /// + /// Get all of the resources under a subscription. + /// + /// + /// 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 + /// + /// + /// Thrown when a required parameter is null + /// + System.Threading.Tasks.Task>> ListResourcesNextWithHttpMessagesAsync(string nextPageLink, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + /// + /// Gets a collection of resource groups. + /// + /// + /// 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 + /// + /// + /// Thrown when a required parameter is null + /// + System.Threading.Tasks.Task>> ListNextWithHttpMessagesAsync(string nextPageLink, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + } +} diff --git a/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/IResourceManagementClient.cs b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/IResourceManagementClient.cs new file mode 100644 index 000000000..ba2e93fca --- /dev/null +++ b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/IResourceManagementClient.cs @@ -0,0 +1,99 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.ResourceManager +{ + using Microsoft.Rest.Azure; + using Models; + + /// + /// + public partial interface IResourceManagementClient : System.IDisposable + { + /// + /// The base URI of the service. + /// + System.Uri BaseUri { get; set; } + + /// + /// Gets or sets json serialization settings. + /// + Newtonsoft.Json.JsonSerializerSettings SerializationSettings { get; } + + /// + /// Gets or sets json deserialization settings. + /// + Newtonsoft.Json.JsonSerializerSettings DeserializationSettings { get; } + + /// + /// Credentials needed for the client to connect to Azure. + /// + Microsoft.Rest.ServiceClientCredentials Credentials { get; } + + /// + /// Gets subscription credentials which uniquely identify Microsoft + /// Azure subscription. The subscription ID forms part of the URI for + /// every service call. + /// + string SubscriptionId { get; set; } + + /// + /// Client Api Version. + /// + string ApiVersion { get; } + + /// + /// Gets or sets the preferred language for the response. + /// + string AcceptLanguage { get; set; } + + /// + /// Gets or sets the retry timeout in seconds for Long Running + /// Operations. Default value is 30. + /// + int? LongRunningOperationRetryTimeout { get; set; } + + /// + /// When set to true a unique x-ms-client-request-id value is + /// generated and included in each request. Default is true. + /// + bool? GenerateClientRequestId { get; set; } + + + /// + /// Gets the IDeploymentsOperations. + /// + IDeploymentsOperations Deployments { get; } + + /// + /// Gets the IProvidersOperations. + /// + IProvidersOperations Providers { get; } + + /// + /// Gets the IResourceGroupsOperations. + /// + IResourceGroupsOperations ResourceGroups { get; } + + /// + /// Gets the IResourcesOperations. + /// + IResourcesOperations Resources { get; } + + /// + /// Gets the ITagsOperations. + /// + ITagsOperations Tags { get; } + + /// + /// Gets the IDeploymentOperationsOperations. + /// + IDeploymentOperationsOperations DeploymentOperations { get; } + + } +} diff --git a/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/IResourcesOperations.cs b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/IResourcesOperations.cs new file mode 100644 index 000000000..4b3166725 --- /dev/null +++ b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/IResourcesOperations.cs @@ -0,0 +1,251 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.ResourceManager +{ + using Microsoft.Rest.Azure; + using Models; + + /// + /// ResourcesOperations operations. + /// + public partial interface IResourcesOperations + { + /// + /// Move resources from one resource group to another. The resources + /// being moved should all be in the same resource group. + /// + /// + /// Source resource group name. + /// + /// + /// move resources' parameters. + /// + /// + /// The 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 + /// + System.Threading.Tasks.Task MoveResourcesWithHttpMessagesAsync(string sourceResourceGroupName, ResourcesMoveInfoInner parameters, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + /// + /// Move resources from one resource group to another. The resources + /// being moved should all be in the same resource group. + /// + /// + /// Source resource group name. + /// + /// + /// move resources' parameters. + /// + /// + /// The 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 + /// + System.Threading.Tasks.Task BeginMoveResourcesWithHttpMessagesAsync(string sourceResourceGroupName, ResourcesMoveInfoInner parameters, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + /// + /// Get all of the resources under a subscription. + /// + /// + /// OData parameters to apply to the 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 + /// + /// + /// Thrown when a required parameter is null + /// + System.Threading.Tasks.Task>> ListWithHttpMessagesAsync(Microsoft.Rest.Azure.OData.ODataQuery odataQuery = default(Microsoft.Rest.Azure.OData.ODataQuery), System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + /// + /// Checks whether resource exists. + /// + /// + /// The name of the resource group. The name is case insensitive. + /// + /// + /// Resource identity. + /// + /// + /// Resource identity. + /// + /// + /// Resource identity. + /// + /// + /// Resource identity. + /// + /// + /// + /// + /// The 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 + /// + System.Threading.Tasks.Task> CheckExistenceWithHttpMessagesAsync(string resourceGroupName, string resourceProviderNamespace, string parentResourcePath, string resourceType, string resourceName, string apiVersion, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + /// + /// Delete resource and all of its resources. + /// + /// + /// The name of the resource group. The name is case insensitive. + /// + /// + /// Resource identity. + /// + /// + /// Resource identity. + /// + /// + /// Resource identity. + /// + /// + /// Resource identity. + /// + /// + /// + /// + /// The 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 + /// + System.Threading.Tasks.Task DeleteWithHttpMessagesAsync(string resourceGroupName, string resourceProviderNamespace, string parentResourcePath, string resourceType, string resourceName, string apiVersion, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + /// + /// Create a resource. + /// + /// + /// The name of the resource group. The name is case insensitive. + /// + /// + /// Resource identity. + /// + /// + /// Resource identity. + /// + /// + /// Resource identity. + /// + /// + /// Resource identity. + /// + /// + /// + /// + /// Create or update resource parameters. + /// + /// + /// 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 + /// + /// + /// Thrown when a required parameter is null + /// + System.Threading.Tasks.Task> CreateOrUpdateWithHttpMessagesAsync(string resourceGroupName, string resourceProviderNamespace, string parentResourcePath, string resourceType, string resourceName, string apiVersion, GenericResourceInner parameters, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + /// + /// Returns a resource belonging to a resource group. + /// + /// + /// The name of the resource group. The name is case insensitive. + /// + /// + /// Resource identity. + /// + /// + /// Resource identity. + /// + /// + /// Resource identity. + /// + /// + /// Resource identity. + /// + /// + /// + /// + /// 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 + /// + /// + /// Thrown when a required parameter is null + /// + System.Threading.Tasks.Task> GetWithHttpMessagesAsync(string resourceGroupName, string resourceProviderNamespace, string parentResourcePath, string resourceType, string resourceName, string apiVersion, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + /// + /// Get all of the resources under a subscription. + /// + /// + /// 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 + /// + /// + /// Thrown when a required parameter is null + /// + System.Threading.Tasks.Task>> ListNextWithHttpMessagesAsync(string nextPageLink, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + } +} diff --git a/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/ISubscriptionClient.cs b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/ISubscriptionClient.cs new file mode 100644 index 000000000..b64bdfcc9 --- /dev/null +++ b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/ISubscriptionClient.cs @@ -0,0 +1,72 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.ResourceManager +{ + using Microsoft.Rest.Azure; + using Models; + + /// + /// + public partial interface ISubscriptionClient : System.IDisposable + { + /// + /// The base URI of the service. + /// + System.Uri BaseUri { get; set; } + + /// + /// Gets or sets json serialization settings. + /// + Newtonsoft.Json.JsonSerializerSettings SerializationSettings { get; } + + /// + /// Gets or sets json deserialization settings. + /// + Newtonsoft.Json.JsonSerializerSettings DeserializationSettings { get; } + + /// + /// Credentials needed for the client to connect to Azure. + /// + Microsoft.Rest.ServiceClientCredentials Credentials { get; } + + /// + /// Client Api Version. + /// + string ApiVersion { get; } + + /// + /// Gets or sets the preferred language for the response. + /// + string AcceptLanguage { get; set; } + + /// + /// Gets or sets the retry timeout in seconds for Long Running + /// Operations. Default value is 30. + /// + int? LongRunningOperationRetryTimeout { get; set; } + + /// + /// When set to true a unique x-ms-client-request-id value is + /// generated and included in each request. Default is true. + /// + bool? GenerateClientRequestId { get; set; } + + + /// + /// Gets the ISubscriptionsOperations. + /// + ISubscriptionsOperations Subscriptions { get; } + + /// + /// Gets the ITenantsOperations. + /// + ITenantsOperations Tenants { get; } + + } +} diff --git a/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/ISubscriptionsOperations.cs b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/ISubscriptionsOperations.cs new file mode 100644 index 000000000..a9ebe347b --- /dev/null +++ b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/ISubscriptionsOperations.cs @@ -0,0 +1,105 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.ResourceManager +{ + using Microsoft.Rest.Azure; + using Models; + + /// + /// SubscriptionsOperations operations. + /// + public partial interface ISubscriptionsOperations + { + /// + /// Gets a list of the subscription locations. + /// + /// + /// Id of the subscription + /// + /// + /// 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 + /// + /// + /// Thrown when a required parameter is null + /// + System.Threading.Tasks.Task>> ListLocationsWithHttpMessagesAsync(string subscriptionId, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + /// + /// Gets details about particular subscription. + /// + /// + /// Id of the subscription. + /// + /// + /// 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 + /// + /// + /// Thrown when a required parameter is null + /// + System.Threading.Tasks.Task> GetWithHttpMessagesAsync(string subscriptionId, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + /// + /// Gets a list of the subscriptionIds. + /// + /// + /// 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 + /// + /// + /// Thrown when a required parameter is null + /// + System.Threading.Tasks.Task>> ListWithHttpMessagesAsync(System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + /// + /// Gets a list of the subscriptionIds. + /// + /// + /// 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 + /// + /// + /// Thrown when a required parameter is null + /// + System.Threading.Tasks.Task>> ListNextWithHttpMessagesAsync(string nextPageLink, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + } +} diff --git a/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/ITagsOperations.cs b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/ITagsOperations.cs new file mode 100644 index 000000000..4f089533c --- /dev/null +++ b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/ITagsOperations.cs @@ -0,0 +1,149 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.ResourceManager +{ + using Microsoft.Rest.Azure; + using Models; + + /// + /// TagsOperations operations. + /// + public partial interface ITagsOperations + { + /// + /// Delete a subscription resource tag value. + /// + /// + /// The name of the tag. + /// + /// + /// The value of the tag. + /// + /// + /// The 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 + /// + System.Threading.Tasks.Task DeleteValueWithHttpMessagesAsync(string tagName, string tagValue, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + /// + /// Create a subscription resource tag value. + /// + /// + /// The name of the tag. + /// + /// + /// The value of the tag. + /// + /// + /// 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 + /// + /// + /// Thrown when a required parameter is null + /// + System.Threading.Tasks.Task> CreateOrUpdateValueWithHttpMessagesAsync(string tagName, string tagValue, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + /// + /// Create a subscription resource tag. + /// + /// + /// The name of the tag. + /// + /// + /// 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 + /// + /// + /// Thrown when a required parameter is null + /// + System.Threading.Tasks.Task> CreateOrUpdateWithHttpMessagesAsync(string tagName, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + /// + /// Delete a subscription resource tag. + /// + /// + /// The name of the tag. + /// + /// + /// The 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 + /// + System.Threading.Tasks.Task DeleteWithHttpMessagesAsync(string tagName, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + /// + /// Get a list of subscription resource tags. + /// + /// + /// 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 + /// + /// + /// Thrown when a required parameter is null + /// + System.Threading.Tasks.Task>> ListWithHttpMessagesAsync(System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + /// + /// Get a list of subscription resource tags. + /// + /// + /// 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 + /// + /// + /// Thrown when a required parameter is null + /// + System.Threading.Tasks.Task>> ListNextWithHttpMessagesAsync(string nextPageLink, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + } +} diff --git a/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/ITenantsOperations.cs b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/ITenantsOperations.cs new file mode 100644 index 000000000..ad5f033af --- /dev/null +++ b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/ITenantsOperations.cs @@ -0,0 +1,61 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.ResourceManager +{ + using Microsoft.Rest.Azure; + using Models; + + /// + /// TenantsOperations operations. + /// + public partial interface ITenantsOperations + { + /// + /// Gets a list of the tenantIds. + /// + /// + /// 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 + /// + /// + /// Thrown when a required parameter is null + /// + System.Threading.Tasks.Task>> ListWithHttpMessagesAsync(System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + /// + /// Gets a list of the tenantIds. + /// + /// + /// 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 + /// + /// + /// Thrown when a required parameter is null + /// + System.Threading.Tasks.Task>> ListNextWithHttpMessagesAsync(string nextPageLink, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + } +} diff --git a/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/Models/AliasPathType.cs b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/Models/AliasPathType.cs new file mode 100644 index 000000000..9217aa83a --- /dev/null +++ b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/Models/AliasPathType.cs @@ -0,0 +1,44 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.ResourceManager.Models +{ + using System.Linq; + + public partial class AliasPathType + { + /// + /// Initializes a new instance of the AliasPathType class. + /// + public AliasPathType() { } + + /// + /// Initializes a new instance of the AliasPathType class. + /// + /// The path of an alias. + /// The api versions. + public AliasPathType(string path = default(string), System.Collections.Generic.IList apiVersions = default(System.Collections.Generic.IList)) + { + Path = path; + ApiVersions = apiVersions; + } + + /// + /// Gets or sets the path of an alias. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "path")] + public string Path { get; set; } + + /// + /// Gets or sets the api versions. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "apiVersions")] + public System.Collections.Generic.IList ApiVersions { get; set; } + + } +} diff --git a/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/Models/AliasType.cs b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/Models/AliasType.cs new file mode 100644 index 000000000..01c914403 --- /dev/null +++ b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/Models/AliasType.cs @@ -0,0 +1,44 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.ResourceManager.Models +{ + using System.Linq; + + public partial class AliasType + { + /// + /// Initializes a new instance of the AliasType class. + /// + public AliasType() { } + + /// + /// Initializes a new instance of the AliasType class. + /// + /// The alias name. + /// The paths for an alias. + public AliasType(string name = default(string), System.Collections.Generic.IList paths = default(System.Collections.Generic.IList)) + { + Name = name; + Paths = paths; + } + + /// + /// Gets or sets the alias name. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "name")] + public string Name { get; set; } + + /// + /// Gets or sets the paths for an alias. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "paths")] + public System.Collections.Generic.IList Paths { get; set; } + + } +} diff --git a/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/Models/BasicDependency.cs b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/Models/BasicDependency.cs new file mode 100644 index 000000000..0e0abf8db --- /dev/null +++ b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/Models/BasicDependency.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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.ResourceManager.Models +{ + using System.Linq; + + /// + /// Deployment dependency information. + /// + public partial class BasicDependency + { + /// + /// Initializes a new instance of the BasicDependency class. + /// + public BasicDependency() { } + + /// + /// Initializes a new instance of the BasicDependency class. + /// + /// The ID of the dependency. + /// The dependency resource type. + /// The dependency resource name. + public BasicDependency(string id = default(string), string resourceType = default(string), string resourceName = default(string)) + { + Id = id; + ResourceType = resourceType; + ResourceName = resourceName; + } + + /// + /// Gets or sets the ID of the dependency. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "id")] + public string Id { get; set; } + + /// + /// Gets or sets the dependency resource type. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "resourceType")] + public string ResourceType { get; set; } + + /// + /// Gets or sets the dependency resource name. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "resourceName")] + public string ResourceName { get; set; } + + } +} diff --git a/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/Models/DebugSetting.cs b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/Models/DebugSetting.cs new file mode 100644 index 000000000..33194e318 --- /dev/null +++ b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/Models/DebugSetting.cs @@ -0,0 +1,36 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.ResourceManager.Models +{ + using System.Linq; + + public partial class DebugSetting + { + /// + /// Initializes a new instance of the DebugSetting class. + /// + public DebugSetting() { } + + /// + /// Initializes a new instance of the DebugSetting class. + /// + /// The debug detail level. + public DebugSetting(string detailLevel = default(string)) + { + DetailLevel = detailLevel; + } + + /// + /// Gets or sets the debug detail level. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "detailLevel")] + public string DetailLevel { get; set; } + + } +} diff --git a/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/Models/Dependency.cs b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/Models/Dependency.cs new file mode 100644 index 000000000..5ee575dfd --- /dev/null +++ b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/Models/Dependency.cs @@ -0,0 +1,63 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.ResourceManager.Models +{ + using System.Linq; + + /// + /// Deployment dependency information. + /// + public partial class Dependency + { + /// + /// Initializes a new instance of the Dependency class. + /// + public Dependency() { } + + /// + /// Initializes a new instance of the Dependency class. + /// + /// The list of dependencies. + /// The ID of the dependency. + /// The dependency resource type. + /// The dependency resource name. + public Dependency(System.Collections.Generic.IList dependsOn = default(System.Collections.Generic.IList), string id = default(string), string resourceType = default(string), string resourceName = default(string)) + { + DependsOn = dependsOn; + Id = id; + ResourceType = resourceType; + ResourceName = resourceName; + } + + /// + /// Gets or sets the list of dependencies. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "dependsOn")] + public System.Collections.Generic.IList DependsOn { get; set; } + + /// + /// Gets or sets the ID of the dependency. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "id")] + public string Id { get; set; } + + /// + /// Gets or sets the dependency resource type. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "resourceType")] + public string ResourceType { get; set; } + + /// + /// Gets or sets the dependency resource name. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "resourceName")] + public string ResourceName { get; set; } + + } +} diff --git a/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/Models/DeploymentExportResultInner.cs b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/Models/DeploymentExportResultInner.cs new file mode 100644 index 000000000..4ef27fd59 --- /dev/null +++ b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/Models/DeploymentExportResultInner.cs @@ -0,0 +1,38 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.ResourceManager.Models +{ + using System.Linq; + + public partial class DeploymentExportResultInner + { + /// + /// Initializes a new instance of the DeploymentExportResultInner + /// class. + /// + public DeploymentExportResultInner() { } + + /// + /// Initializes a new instance of the DeploymentExportResultInner + /// class. + /// + /// The template content. + public DeploymentExportResultInner(object template = default(object)) + { + Template = template; + } + + /// + /// Gets or sets the template content. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "template")] + public object Template { get; set; } + + } +} diff --git a/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/Models/DeploymentExtendedFilter.cs b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/Models/DeploymentExtendedFilter.cs new file mode 100644 index 000000000..ff8230c77 --- /dev/null +++ b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/Models/DeploymentExtendedFilter.cs @@ -0,0 +1,40 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.ResourceManager.Models +{ + using System.Linq; + + /// + /// Deployment filter. + /// + public partial class DeploymentExtendedFilter + { + /// + /// Initializes a new instance of the DeploymentExtendedFilter class. + /// + public DeploymentExtendedFilter() { } + + /// + /// Initializes a new instance of the DeploymentExtendedFilter class. + /// + /// Gets or sets the provisioning + /// state. + public DeploymentExtendedFilter(string provisioningState = default(string)) + { + ProvisioningState = provisioningState; + } + + /// + /// Gets or sets the provisioning state. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "provisioningState")] + public string ProvisioningState { get; set; } + + } +} diff --git a/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/Models/DeploymentExtendedFilterInner.cs b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/Models/DeploymentExtendedFilterInner.cs new file mode 100644 index 000000000..2c7739fb2 --- /dev/null +++ b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/Models/DeploymentExtendedFilterInner.cs @@ -0,0 +1,41 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.ResourceManager.Models +{ + using System.Linq; + + /// + /// Deployment filter. + /// + public partial class DeploymentExtendedFilterInner + { + /// + /// Initializes a new instance of the DeploymentExtendedFilterInner + /// class. + /// + public DeploymentExtendedFilterInner() { } + + /// + /// Initializes a new instance of the DeploymentExtendedFilterInner + /// class. + /// + /// The provisioning state. + public DeploymentExtendedFilterInner(string provisioningState = default(string)) + { + ProvisioningState = provisioningState; + } + + /// + /// Gets or sets the provisioning state. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "provisioningState")] + public string ProvisioningState { get; set; } + + } +} diff --git a/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/Models/DeploymentExtendedInner.cs b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/Models/DeploymentExtendedInner.cs new file mode 100644 index 000000000..15d102a96 --- /dev/null +++ b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/Models/DeploymentExtendedInner.cs @@ -0,0 +1,72 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.ResourceManager.Models +{ + using System.Linq; + + /// + /// Deployment information. + /// + public partial class DeploymentExtendedInner + { + /// + /// Initializes a new instance of the DeploymentExtendedInner class. + /// + public DeploymentExtendedInner() { } + + /// + /// Initializes a new instance of the DeploymentExtendedInner class. + /// + /// The name of the deployment. + /// The ID of the deployment. + /// Deployment properties. + public DeploymentExtendedInner(string name, string id = default(string), DeploymentPropertiesExtended properties = default(DeploymentPropertiesExtended)) + { + Id = id; + Name = name; + Properties = properties; + } + + /// + /// Gets or sets the ID of the deployment. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "id")] + public string Id { get; set; } + + /// + /// Gets or sets the name of the deployment. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "name")] + public string Name { get; set; } + + /// + /// Gets or sets deployment properties. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties")] + public DeploymentPropertiesExtended Properties { get; set; } + + /// + /// Validate the object. + /// + /// + /// Thrown if validation fails + /// + public virtual void Validate() + { + if (Name == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "Name"); + } + if (this.Properties != null) + { + this.Properties.Validate(); + } + } + } +} diff --git a/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/Models/DeploymentInner.cs b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/Models/DeploymentInner.cs new file mode 100644 index 000000000..9d64b6f96 --- /dev/null +++ b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/Models/DeploymentInner.cs @@ -0,0 +1,52 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.ResourceManager.Models +{ + using System.Linq; + + /// + /// Deployment operation parameters. + /// + public partial class DeploymentInner + { + /// + /// Initializes a new instance of the DeploymentInner class. + /// + public DeploymentInner() { } + + /// + /// Initializes a new instance of the DeploymentInner class. + /// + /// The deployment properties. + public DeploymentInner(DeploymentProperties properties = default(DeploymentProperties)) + { + Properties = properties; + } + + /// + /// Gets or sets the deployment properties. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties")] + public DeploymentProperties Properties { get; set; } + + /// + /// Validate the object. + /// + /// + /// Thrown if validation fails + /// + public virtual void Validate() + { + if (this.Properties != null) + { + this.Properties.Validate(); + } + } + } +} diff --git a/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/Models/DeploymentListResultInner.cs b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/Models/DeploymentListResultInner.cs new file mode 100644 index 000000000..b5778d1a5 --- /dev/null +++ b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/Models/DeploymentListResultInner.cs @@ -0,0 +1,48 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.ResourceManager.Models +{ + using System.Linq; + + /// + /// List of deployments. + /// + public partial class DeploymentListResultInner + { + /// + /// Initializes a new instance of the DeploymentListResultInner class. + /// + public DeploymentListResultInner() { } + + /// + /// Initializes a new instance of the DeploymentListResultInner class. + /// + /// The list of deployments. + /// The URL to get the next set of + /// results. + public DeploymentListResultInner(System.Collections.Generic.IList value = default(System.Collections.Generic.IList), string nextLink = default(string)) + { + Value = value; + NextLink = nextLink; + } + + /// + /// Gets or sets the list of deployments. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "value")] + public System.Collections.Generic.IList Value { get; set; } + + /// + /// Gets or sets the URL to get the next set of results. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "nextLink")] + public string NextLink { get; set; } + + } +} diff --git a/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/Models/DeploymentMode.cs b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/Models/DeploymentMode.cs new file mode 100644 index 000000000..5b9c085ce --- /dev/null +++ b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/Models/DeploymentMode.cs @@ -0,0 +1,23 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.ResourceManager.Models +{ + + /// + /// Defines values for DeploymentMode. + /// + [Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.StringEnumConverter))] + public enum DeploymentMode + { + [System.Runtime.Serialization.EnumMember(Value = "Incremental")] + Incremental, + [System.Runtime.Serialization.EnumMember(Value = "Complete")] + Complete + } +} diff --git a/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/Models/DeploymentOperationInner.cs b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/Models/DeploymentOperationInner.cs new file mode 100644 index 000000000..c3c3cd1c5 --- /dev/null +++ b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/Models/DeploymentOperationInner.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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.ResourceManager.Models +{ + using System.Linq; + + /// + /// Deployment operation information. + /// + public partial class DeploymentOperationInner + { + /// + /// Initializes a new instance of the DeploymentOperationInner class. + /// + public DeploymentOperationInner() { } + + /// + /// Initializes a new instance of the DeploymentOperationInner class. + /// + /// Full deployment operation id. + /// Deployment operation id. + /// Deployment properties. + public DeploymentOperationInner(string id = default(string), string operationId = default(string), DeploymentOperationProperties properties = default(DeploymentOperationProperties)) + { + Id = id; + OperationId = operationId; + Properties = properties; + } + + /// + /// Gets or sets full deployment operation id. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "id")] + public string Id { get; set; } + + /// + /// Gets or sets deployment operation id. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "operationId")] + public string OperationId { get; set; } + + /// + /// Gets or sets deployment properties. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties")] + public DeploymentOperationProperties Properties { get; set; } + + } +} diff --git a/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/Models/DeploymentOperationProperties.cs b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/Models/DeploymentOperationProperties.cs new file mode 100644 index 000000000..b6c432841 --- /dev/null +++ b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/Models/DeploymentOperationProperties.cs @@ -0,0 +1,99 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.ResourceManager.Models +{ + using System.Linq; + + /// + /// Deployment operation properties. + /// + public partial class DeploymentOperationProperties + { + /// + /// Initializes a new instance of the DeploymentOperationProperties + /// class. + /// + public DeploymentOperationProperties() { } + + /// + /// Initializes a new instance of the DeploymentOperationProperties + /// class. + /// + /// The state of the + /// provisioning. + /// The date and time of the operation. + /// Deployment operation service + /// request id. + /// Operation status code. + /// Operation status message. + /// The target resource. + /// The HTTP request message. + /// The HTTP response message. + public DeploymentOperationProperties(string provisioningState = default(string), System.DateTime? timestamp = default(System.DateTime?), string serviceRequestId = default(string), string statusCode = default(string), object statusMessage = default(object), TargetResource targetResource = default(TargetResource), HttpMessage request = default(HttpMessage), HttpMessage response = default(HttpMessage)) + { + ProvisioningState = provisioningState; + Timestamp = timestamp; + ServiceRequestId = serviceRequestId; + StatusCode = statusCode; + StatusMessage = statusMessage; + TargetResource = targetResource; + Request = request; + Response = response; + } + + /// + /// Gets or sets the state of the provisioning. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "provisioningState")] + public string ProvisioningState { get; set; } + + /// + /// Gets or sets the date and time of the operation. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "timestamp")] + public System.DateTime? Timestamp { get; set; } + + /// + /// Gets or sets deployment operation service request id. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "serviceRequestId")] + public string ServiceRequestId { get; set; } + + /// + /// Gets or sets operation status code. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "statusCode")] + public string StatusCode { get; set; } + + /// + /// Gets or sets operation status message. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "statusMessage")] + public object StatusMessage { get; set; } + + /// + /// Gets or sets the target resource. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "targetResource")] + public TargetResource TargetResource { get; set; } + + /// + /// Gets or sets the HTTP request message. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "request")] + public HttpMessage Request { get; set; } + + /// + /// Gets or sets the HTTP response message. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "response")] + public HttpMessage Response { get; set; } + + } +} diff --git a/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/Models/DeploymentOperationsListResultInner.cs b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/Models/DeploymentOperationsListResultInner.cs new file mode 100644 index 000000000..90048c5b6 --- /dev/null +++ b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/Models/DeploymentOperationsListResultInner.cs @@ -0,0 +1,50 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.ResourceManager.Models +{ + using System.Linq; + + /// + /// List of deployment operations. + /// + public partial class DeploymentOperationsListResultInner + { + /// + /// Initializes a new instance of the + /// DeploymentOperationsListResultInner class. + /// + public DeploymentOperationsListResultInner() { } + + /// + /// Initializes a new instance of the + /// DeploymentOperationsListResultInner class. + /// + /// The list of deployments. + /// The URL to get the next set of + /// results. + public DeploymentOperationsListResultInner(System.Collections.Generic.IList value = default(System.Collections.Generic.IList), string nextLink = default(string)) + { + Value = value; + NextLink = nextLink; + } + + /// + /// Gets or sets the list of deployments. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "value")] + public System.Collections.Generic.IList Value { get; set; } + + /// + /// Gets or sets the URL to get the next set of results. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "nextLink")] + public string NextLink { get; set; } + + } +} diff --git a/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/Models/DeploymentProperties.cs b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/Models/DeploymentProperties.cs new file mode 100644 index 000000000..e127256a9 --- /dev/null +++ b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/Models/DeploymentProperties.cs @@ -0,0 +1,109 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.ResourceManager.Models +{ + using System.Linq; + + /// + /// Deployment properties. + /// + public partial class DeploymentProperties + { + /// + /// Initializes a new instance of the DeploymentProperties class. + /// + public DeploymentProperties() { } + + /// + /// Initializes a new instance of the DeploymentProperties class. + /// + /// The deployment mode. Possible values include: + /// 'Incremental', 'Complete' + /// The template content. It can be a JObject + /// or a well formed JSON string. Use only one of Template or + /// TemplateLink. + /// The template URI. Use only one of + /// Template or TemplateLink. + /// Deployment parameters. It can be a + /// JObject or a well formed JSON string. Use only one of Parameters + /// or ParametersLink. + /// The parameters URI. Use only one of + /// Parameters or ParametersLink. + /// The debug setting of the + /// deployment. + public DeploymentProperties(DeploymentMode? mode, object template = default(object), TemplateLink templateLink = default(TemplateLink), object parameters = default(object), ParametersLink parametersLink = default(ParametersLink), DebugSetting debugSetting = default(DebugSetting)) + { + Template = template; + TemplateLink = templateLink; + Parameters = parameters; + ParametersLink = parametersLink; + Mode = mode; + DebugSetting = debugSetting; + } + + /// + /// Gets or sets the template content. It can be a JObject or a well + /// formed JSON string. Use only one of Template or TemplateLink. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "template")] + public object Template { get; set; } + + /// + /// Gets or sets the template URI. Use only one of Template or + /// TemplateLink. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "templateLink")] + public TemplateLink TemplateLink { get; set; } + + /// + /// Gets or sets deployment parameters. It can be a JObject or a well + /// formed JSON string. Use only one of Parameters or ParametersLink. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "parameters")] + public object Parameters { get; set; } + + /// + /// Gets or sets the parameters URI. Use only one of Parameters or + /// ParametersLink. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "parametersLink")] + public ParametersLink ParametersLink { get; set; } + + /// + /// Gets or sets the deployment mode. Possible values include: + /// 'Incremental', 'Complete' + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "mode")] + public DeploymentMode? Mode { get; set; } + + /// + /// Gets or sets the debug setting of the deployment. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "debugSetting")] + public DebugSetting DebugSetting { get; set; } + + /// + /// Validate the object. + /// + /// + /// Thrown if validation fails + /// + public virtual void Validate() + { + if (this.TemplateLink != null) + { + this.TemplateLink.Validate(); + } + if (this.ParametersLink != null) + { + this.ParametersLink.Validate(); + } + } + } +} diff --git a/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/Models/DeploymentPropertiesExtended.cs b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/Models/DeploymentPropertiesExtended.cs new file mode 100644 index 000000000..ab463100a --- /dev/null +++ b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/Models/DeploymentPropertiesExtended.cs @@ -0,0 +1,164 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.ResourceManager.Models +{ + using System.Linq; + + /// + /// Deployment properties with additional details. + /// + public partial class DeploymentPropertiesExtended + { + /// + /// Initializes a new instance of the DeploymentPropertiesExtended + /// class. + /// + public DeploymentPropertiesExtended() { } + + /// + /// Initializes a new instance of the DeploymentPropertiesExtended + /// class. + /// + /// The state of the + /// provisioning. + /// The correlation ID of the + /// deployment. + /// The timestamp of the template + /// deployment. + /// Key/value pairs that represent + /// deploymentoutput. + /// The list of resource providers needed for + /// the deployment. + /// The list of deployment + /// dependencies. + /// The template content. Use only one of + /// Template or TemplateLink. + /// The URI referencing the template. Use + /// only one of Template or TemplateLink. + /// Deployment parameters. Use only one of + /// Parameters or ParametersLink. + /// The URI referencing the parameters. + /// Use only one of Parameters or ParametersLink. + /// The deployment mode. Possible values include: + /// 'Incremental', 'Complete' + /// The debug setting of the + /// deployment. + public DeploymentPropertiesExtended(string provisioningState = default(string), string correlationId = default(string), System.DateTime? timestamp = default(System.DateTime?), object outputs = default(object), System.Collections.Generic.IList providers = default(System.Collections.Generic.IList), System.Collections.Generic.IList dependencies = default(System.Collections.Generic.IList), object template = default(object), TemplateLink templateLink = default(TemplateLink), object parameters = default(object), ParametersLink parametersLink = default(ParametersLink), DeploymentMode? mode = default(DeploymentMode?), DebugSetting debugSetting = default(DebugSetting)) + { + ProvisioningState = provisioningState; + CorrelationId = correlationId; + Timestamp = timestamp; + Outputs = outputs; + Providers = providers; + Dependencies = dependencies; + Template = template; + TemplateLink = templateLink; + Parameters = parameters; + ParametersLink = parametersLink; + Mode = mode; + DebugSetting = debugSetting; + } + + /// + /// Gets or sets the state of the provisioning. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "provisioningState")] + public string ProvisioningState { get; set; } + + /// + /// Gets or sets the correlation ID of the deployment. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "correlationId")] + public string CorrelationId { get; set; } + + /// + /// Gets or sets the timestamp of the template deployment. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "timestamp")] + public System.DateTime? Timestamp { get; set; } + + /// + /// Gets or sets key/value pairs that represent deploymentoutput. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "outputs")] + public object Outputs { get; set; } + + /// + /// Gets or sets the list of resource providers needed for the + /// deployment. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "providers")] + public System.Collections.Generic.IList Providers { get; set; } + + /// + /// Gets or sets the list of deployment dependencies. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "dependencies")] + public System.Collections.Generic.IList Dependencies { get; set; } + + /// + /// Gets or sets the template content. Use only one of Template or + /// TemplateLink. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "template")] + public object Template { get; set; } + + /// + /// Gets or sets the URI referencing the template. Use only one of + /// Template or TemplateLink. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "templateLink")] + public TemplateLink TemplateLink { get; set; } + + /// + /// Gets or sets deployment parameters. Use only one of Parameters or + /// ParametersLink. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "parameters")] + public object Parameters { get; set; } + + /// + /// Gets or sets the URI referencing the parameters. Use only one of + /// Parameters or ParametersLink. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "parametersLink")] + public ParametersLink ParametersLink { get; set; } + + /// + /// Gets or sets the deployment mode. Possible values include: + /// 'Incremental', 'Complete' + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "mode")] + public DeploymentMode? Mode { get; set; } + + /// + /// Gets or sets the debug setting of the deployment. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "debugSetting")] + public DebugSetting DebugSetting { get; set; } + + /// + /// Validate the object. + /// + /// + /// Thrown if validation fails + /// + public virtual void Validate() + { + if (this.TemplateLink != null) + { + this.TemplateLink.Validate(); + } + if (this.ParametersLink != null) + { + this.ParametersLink.Validate(); + } + } + } +} diff --git a/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/Models/DeploymentValidateResultInner.cs b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/Models/DeploymentValidateResultInner.cs new file mode 100644 index 000000000..d66a7071a --- /dev/null +++ b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/Models/DeploymentValidateResultInner.cs @@ -0,0 +1,67 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.ResourceManager.Models +{ + using System.Linq; + + /// + /// Information from validate template deployment response. + /// + public partial class DeploymentValidateResultInner + { + /// + /// Initializes a new instance of the DeploymentValidateResultInner + /// class. + /// + public DeploymentValidateResultInner() { } + + /// + /// Initializes a new instance of the DeploymentValidateResultInner + /// class. + /// + /// Validation error. + /// The template deployment + /// properties. + public DeploymentValidateResultInner(ResourceManagementErrorWithDetails error = default(ResourceManagementErrorWithDetails), DeploymentPropertiesExtended properties = default(DeploymentPropertiesExtended)) + { + Error = error; + Properties = properties; + } + + /// + /// Gets or sets validation error. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "error")] + public ResourceManagementErrorWithDetails Error { get; set; } + + /// + /// Gets or sets the template deployment properties. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties")] + public DeploymentPropertiesExtended Properties { get; set; } + + /// + /// Validate the object. + /// + /// + /// Thrown if validation fails + /// + public virtual void Validate() + { + if (this.Error != null) + { + this.Error.Validate(); + } + if (this.Properties != null) + { + this.Properties.Validate(); + } + } + } +} diff --git a/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/Models/ExportTemplateRequestInner.cs b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/Models/ExportTemplateRequestInner.cs new file mode 100644 index 000000000..db76d815c --- /dev/null +++ b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/Models/ExportTemplateRequestInner.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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.ResourceManager.Models +{ + using System.Linq; + + /// + /// Export resource group template request parameters. + /// + public partial class ExportTemplateRequestInner + { + /// + /// Initializes a new instance of the ExportTemplateRequestInner class. + /// + public ExportTemplateRequestInner() { } + + /// + /// Initializes a new instance of the ExportTemplateRequestInner class. + /// + /// The ids of the resources. The only + /// supported string currently is '*' (all resources). Future api + /// updates will support exporting specific resources. + /// The export template options. Supported + /// values include 'IncludeParameterDefaultValue', 'IncludeComments' + /// or 'IncludeParameterDefaultValue, IncludeComments + public ExportTemplateRequestInner(System.Collections.Generic.IList resources = default(System.Collections.Generic.IList), string options = default(string)) + { + Resources = resources; + Options = options; + } + + /// + /// Gets or sets the ids of the resources. The only supported string + /// currently is '*' (all resources). Future api updates will support + /// exporting specific resources. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "resources")] + public System.Collections.Generic.IList Resources { get; set; } + + /// + /// Gets or sets the export template options. Supported values include + /// 'IncludeParameterDefaultValue', 'IncludeComments' or + /// 'IncludeParameterDefaultValue, IncludeComments + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "options")] + public string Options { get; set; } + + } +} diff --git a/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/Models/FeatureOperationsListResultInner.cs b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/Models/FeatureOperationsListResultInner.cs new file mode 100644 index 000000000..9984faa2a --- /dev/null +++ b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/Models/FeatureOperationsListResultInner.cs @@ -0,0 +1,50 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.ResourceManager.Models +{ + using System.Linq; + + /// + /// List of previewed features. + /// + public partial class FeatureOperationsListResultInner + { + /// + /// Initializes a new instance of the FeatureOperationsListResultInner + /// class. + /// + public FeatureOperationsListResultInner() { } + + /// + /// Initializes a new instance of the FeatureOperationsListResultInner + /// class. + /// + /// Gets or sets the list of Features. + /// Gets or sets the URL to get the next set of + /// results. + public FeatureOperationsListResultInner(System.Collections.Generic.IList value = default(System.Collections.Generic.IList), string nextLink = default(string)) + { + Value = value; + NextLink = nextLink; + } + + /// + /// Gets or sets the list of Features. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "value")] + public System.Collections.Generic.IList Value { get; set; } + + /// + /// Gets or sets the URL to get the next set of results. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "nextLink")] + public string NextLink { get; set; } + + } +} diff --git a/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/Models/FeatureProperties.cs b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/Models/FeatureProperties.cs new file mode 100644 index 000000000..37fe1d1b3 --- /dev/null +++ b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/Models/FeatureProperties.cs @@ -0,0 +1,40 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.ResourceManager.Models +{ + using System.Linq; + + /// + /// Previewed feature information. + /// + public partial class FeatureProperties + { + /// + /// Initializes a new instance of the FeatureProperties class. + /// + public FeatureProperties() { } + + /// + /// Initializes a new instance of the FeatureProperties class. + /// + /// Gets or sets the state of the previewed + /// feature. + public FeatureProperties(string state = default(string)) + { + State = state; + } + + /// + /// Gets or sets the state of the previewed feature. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "state")] + public string State { get; set; } + + } +} diff --git a/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/Models/FeatureResultInner.cs b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/Models/FeatureResultInner.cs new file mode 100644 index 000000000..999fd2ca1 --- /dev/null +++ b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/Models/FeatureResultInner.cs @@ -0,0 +1,64 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.ResourceManager.Models +{ + using System.Linq; + + /// + /// Previewed feature information. + /// + public partial class FeatureResultInner + { + /// + /// Initializes a new instance of the FeatureResultInner class. + /// + public FeatureResultInner() { } + + /// + /// Initializes a new instance of the FeatureResultInner class. + /// + /// Gets or sets the name of the feature. + /// Gets or sets the properties of the + /// previewed feature. + /// Gets or sets the Id of the feature. + /// Gets or sets the type of the feature. + public FeatureResultInner(string name = default(string), FeatureProperties properties = default(FeatureProperties), string id = default(string), string type = default(string)) + { + Name = name; + Properties = properties; + Id = id; + Type = type; + } + + /// + /// Gets or sets the name of the feature. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "name")] + public string Name { get; set; } + + /// + /// Gets or sets the properties of the previewed feature. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties")] + public FeatureProperties Properties { get; set; } + + /// + /// Gets or sets the Id of the feature. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "id")] + public string Id { get; set; } + + /// + /// Gets or sets the type of the feature. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "type")] + public string Type { get; set; } + + } +} diff --git a/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/Models/GenericResourceFilter.cs b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/Models/GenericResourceFilter.cs new file mode 100644 index 000000000..fd5ecffc2 --- /dev/null +++ b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/Models/GenericResourceFilter.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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.ResourceManager.Models +{ + using System.Linq; + + /// + /// Resource filter. + /// + public partial class GenericResourceFilter + { + /// + /// Initializes a new instance of the GenericResourceFilter class. + /// + public GenericResourceFilter() { } + + /// + /// Initializes a new instance of the GenericResourceFilter class. + /// + /// Gets or sets the resource type. + /// Gets or sets the tag name. + /// Gets or sets the tag value. + public GenericResourceFilter(string resourceType = default(string), string tagname = default(string), string tagvalue = default(string)) + { + ResourceType = resourceType; + Tagname = tagname; + Tagvalue = tagvalue; + } + + /// + /// Gets or sets the resource type. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "resourceType")] + public string ResourceType { get; set; } + + /// + /// Gets or sets the tag name. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "tagname")] + public string Tagname { get; set; } + + /// + /// Gets or sets the tag value. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "tagvalue")] + public string Tagvalue { get; set; } + + } +} diff --git a/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/Models/GenericResourceFilterInner.cs b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/Models/GenericResourceFilterInner.cs new file mode 100644 index 000000000..88cef477a --- /dev/null +++ b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/Models/GenericResourceFilterInner.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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.ResourceManager.Models +{ + using System.Linq; + + /// + /// Resource filter. + /// + public partial class GenericResourceFilterInner + { + /// + /// Initializes a new instance of the GenericResourceFilterInner class. + /// + public GenericResourceFilterInner() { } + + /// + /// Initializes a new instance of the GenericResourceFilterInner class. + /// + /// The resource type. + /// The tag name. + /// The tag value. + public GenericResourceFilterInner(string resourceType = default(string), string tagname = default(string), string tagvalue = default(string)) + { + ResourceType = resourceType; + Tagname = tagname; + Tagvalue = tagvalue; + } + + /// + /// Gets or sets the resource type. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "resourceType")] + public string ResourceType { get; set; } + + /// + /// Gets or sets the tag name. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "tagname")] + public string Tagname { get; set; } + + /// + /// Gets or sets the tag value. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "tagvalue")] + public string Tagvalue { get; set; } + + } +} diff --git a/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/Models/GenericResourceInner.cs b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/Models/GenericResourceInner.cs new file mode 100644 index 000000000..f1f267841 --- /dev/null +++ b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/Models/GenericResourceInner.cs @@ -0,0 +1,81 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.ResourceManager.Models +{ + using System.Linq; + + /// + /// Resource information. + /// + public partial class GenericResourceInner : Microsoft.Rest.Azure.Resource + { + /// + /// Initializes a new instance of the GenericResourceInner class. + /// + public GenericResourceInner() { } + + /// + /// Initializes a new instance of the GenericResourceInner class. + /// + /// The plan of the resource. + /// The resource properties. + /// The kind of the resource. + /// The managedBy property of the + /// resource. + /// The sku of the resource. + /// The identity of the resource. + public GenericResourceInner(string location = default(string), string id = default(string), string name = default(string), string type = default(string), System.Collections.Generic.IDictionary tags = default(System.Collections.Generic.IDictionary), Plan plan = default(Plan), object properties = default(object), string kind = default(string), string managedBy = default(string), Sku sku = default(Sku), Identity identity = default(Identity)) + : base(location, id, name, type, tags) + { + Plan = plan; + Properties = properties; + Kind = kind; + ManagedBy = managedBy; + Sku = sku; + Identity = identity; + } + + /// + /// Gets or sets the plan of the resource. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "plan")] + public Plan Plan { get; set; } + + /// + /// Gets or sets the resource properties. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties")] + public object Properties { get; set; } + + /// + /// Gets or sets the kind of the resource. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "kind")] + public string Kind { get; set; } + + /// + /// Gets or sets the managedBy property of the resource. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "managedBy")] + public string ManagedBy { get; set; } + + /// + /// Gets or sets the sku of the resource. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "sku")] + public Sku Sku { get; set; } + + /// + /// Gets or sets the identity of the resource. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "identity")] + public Identity Identity { get; set; } + + } +} diff --git a/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/Models/HttpMessage.cs b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/Models/HttpMessage.cs new file mode 100644 index 000000000..72b644c6b --- /dev/null +++ b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/Models/HttpMessage.cs @@ -0,0 +1,36 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.ResourceManager.Models +{ + using System.Linq; + + public partial class HttpMessage + { + /// + /// Initializes a new instance of the HttpMessage class. + /// + public HttpMessage() { } + + /// + /// Initializes a new instance of the HttpMessage class. + /// + /// HTTP message content. + public HttpMessage(object content = default(object)) + { + Content = content; + } + + /// + /// Gets or sets HTTP message content. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "content")] + public object Content { get; set; } + + } +} diff --git a/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/Models/Identity.cs b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/Models/Identity.cs new file mode 100644 index 000000000..4d1e21374 --- /dev/null +++ b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/Models/Identity.cs @@ -0,0 +1,58 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.ResourceManager.Models +{ + using System.Linq; + + /// + /// Identity for the resource. + /// + public partial class Identity + { + /// + /// Initializes a new instance of the Identity class. + /// + public Identity() { } + + /// + /// Initializes a new instance of the Identity class. + /// + /// The principal id of resource + /// identity. + /// The tenant id of resource. + /// The identity type. Possible values include: + /// 'SystemAssigned' + public Identity(string principalId = default(string), string tenantId = default(string), ResourceIdentityType? type = default(ResourceIdentityType?)) + { + PrincipalId = principalId; + TenantId = tenantId; + Type = type; + } + + /// + /// Gets the principal id of resource identity. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "principalId")] + public string PrincipalId { get; private set; } + + /// + /// Gets the tenant id of resource. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "tenantId")] + public string TenantId { get; private set; } + + /// + /// Gets or sets the identity type. Possible values include: + /// 'SystemAssigned' + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "type")] + public ResourceIdentityType? Type { get; set; } + + } +} diff --git a/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/Models/Location.cs b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/Models/Location.cs new file mode 100644 index 000000000..a916b7a2c --- /dev/null +++ b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/Models/Location.cs @@ -0,0 +1,85 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.ResourceManager.Models +{ + using System.Linq; + + /// + /// Location information. + /// + public partial class Location + { + /// + /// Initializes a new instance of the Location class. + /// + public Location() { } + + /// + /// Initializes a new instance of the Location class. + /// + /// Gets or sets the ID of the resource + /// (/subscriptions/SubscriptionId). + /// Gets or sets the subscription + /// Id. + /// Gets or sets the location name + /// Gets or sets the display name of the + /// location + /// Gets or sets the latitude of the + /// location + /// Gets or sets the longitude of the + /// location + public Location(string id = default(string), string subscriptionId = default(string), string name = default(string), string displayName = default(string), string latitude = default(string), string longitude = default(string)) + { + Id = id; + SubscriptionId = subscriptionId; + Name = name; + DisplayName = displayName; + Latitude = latitude; + Longitude = longitude; + } + + /// + /// Gets or sets the ID of the resource + /// (/subscriptions/SubscriptionId). + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "id")] + public string Id { get; set; } + + /// + /// Gets or sets the subscription Id. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "subscriptionId")] + public string SubscriptionId { get; set; } + + /// + /// Gets or sets the location name + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "name")] + public string Name { get; set; } + + /// + /// Gets or sets the display name of the location + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "displayName")] + public string DisplayName { get; set; } + + /// + /// Gets or sets the latitude of the location + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "latitude")] + public string Latitude { get; set; } + + /// + /// Gets or sets the longitude of the location + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "longitude")] + public string Longitude { get; set; } + + } +} diff --git a/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/Models/LocationListResultInner.cs b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/Models/LocationListResultInner.cs new file mode 100644 index 000000000..2a0650481 --- /dev/null +++ b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/Models/LocationListResultInner.cs @@ -0,0 +1,39 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.ResourceManager.Models +{ + using System.Linq; + + /// + /// Location list operation response. + /// + public partial class LocationListResultInner + { + /// + /// Initializes a new instance of the LocationListResultInner class. + /// + public LocationListResultInner() { } + + /// + /// Initializes a new instance of the LocationListResultInner class. + /// + /// Gets the locations. + public LocationListResultInner(System.Collections.Generic.IList value = default(System.Collections.Generic.IList)) + { + Value = value; + } + + /// + /// Gets the locations. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "value")] + public System.Collections.Generic.IList Value { get; set; } + + } +} diff --git a/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/Models/Page.cs b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/Models/Page.cs new file mode 100644 index 000000000..677da685b --- /dev/null +++ b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/Models/Page.cs @@ -0,0 +1,46 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.ResourceManager.Models +{ + + /// + /// Defines a page in Azure responses. + /// + /// Type of the page content items + [Newtonsoft.Json.JsonObject] + public class Page : Microsoft.Rest.Azure.IPage + { + /// + /// Gets the link to the next page. + /// + [Newtonsoft.Json.JsonProperty("nextLink")] + public System.String NextPageLink { get; private set; } + + [Newtonsoft.Json.JsonProperty("value")] + private System.Collections.Generic.IList Items{ get; set; } + + /// + /// Returns an enumerator that iterates through the collection. + /// + /// A an enumerator that can be used to iterate through the collection. + public System.Collections.Generic.IEnumerator GetEnumerator() + { + return (Items == null) ? System.Linq.Enumerable.Empty().GetEnumerator() : Items.GetEnumerator(); + } + + /// + /// Returns an enumerator that iterates through the collection. + /// + /// A an enumerator that can be used to iterate through the collection. + System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator() + { + return GetEnumerator(); + } + } +} diff --git a/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/Models/Page1.cs b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/Models/Page1.cs new file mode 100644 index 000000000..1900c604b --- /dev/null +++ b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/Models/Page1.cs @@ -0,0 +1,46 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.ResourceManager.Models +{ + + /// + /// Defines a page in Azure responses. + /// + /// Type of the page content items + [Newtonsoft.Json.JsonObject] + public class Page1 : Microsoft.Rest.Azure.IPage + { + /// + /// Gets the link to the next page. + /// + [Newtonsoft.Json.JsonProperty("nextLink")] + public System.String NextPageLink { get; private set; } + + [Newtonsoft.Json.JsonProperty("value")] + private System.Collections.Generic.IList Items{ get; set; } + + /// + /// Returns an enumerator that iterates through the collection. + /// + /// A an enumerator that can be used to iterate through the collection. + public System.Collections.Generic.IEnumerator GetEnumerator() + { + return (Items == null) ? System.Linq.Enumerable.Empty().GetEnumerator() : Items.GetEnumerator(); + } + + /// + /// Returns an enumerator that iterates through the collection. + /// + /// A an enumerator that can be used to iterate through the collection. + System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator() + { + return GetEnumerator(); + } + } +} diff --git a/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/Models/ParametersLink.cs b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/Models/ParametersLink.cs new file mode 100644 index 000000000..4832733f6 --- /dev/null +++ b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/Models/ParametersLink.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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.ResourceManager.Models +{ + using System.Linq; + + /// + /// Entity representing the reference to the deployment paramaters. + /// + public partial class ParametersLink + { + /// + /// Initializes a new instance of the ParametersLink class. + /// + public ParametersLink() { } + + /// + /// Initializes a new instance of the ParametersLink class. + /// + /// URI referencing the template. + /// If included it must match the + /// ContentVersion in the template. + public ParametersLink(string uri, string contentVersion = default(string)) + { + Uri = uri; + ContentVersion = contentVersion; + } + + /// + /// Gets or sets URI referencing the template. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "uri")] + public string Uri { get; set; } + + /// + /// Gets or sets if included it must match the ContentVersion in the + /// template. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "contentVersion")] + public string ContentVersion { get; set; } + + /// + /// Validate the object. + /// + /// + /// Thrown if validation fails + /// + public virtual void Validate() + { + if (Uri == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "Uri"); + } + } + } +} diff --git a/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/Models/Plan.cs b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/Models/Plan.cs new file mode 100644 index 000000000..e2d42532a --- /dev/null +++ b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/Models/Plan.cs @@ -0,0 +1,63 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.ResourceManager.Models +{ + using System.Linq; + + /// + /// Plan for the resource. + /// + public partial class Plan + { + /// + /// Initializes a new instance of the Plan class. + /// + public Plan() { } + + /// + /// Initializes a new instance of the Plan class. + /// + /// The plan ID. + /// The publisher ID. + /// The offer ID. + /// The promotion code. + public Plan(string name = default(string), string publisher = default(string), string product = default(string), string promotionCode = default(string)) + { + Name = name; + Publisher = publisher; + Product = product; + PromotionCode = promotionCode; + } + + /// + /// Gets or sets the plan ID. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "name")] + public string Name { get; set; } + + /// + /// Gets or sets the publisher ID. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "publisher")] + public string Publisher { get; set; } + + /// + /// Gets or sets the offer ID. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "product")] + public string Product { get; set; } + + /// + /// Gets or sets the promotion code. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "promotionCode")] + public string PromotionCode { get; set; } + + } +} diff --git a/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/Models/ProviderInner.cs b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/Models/ProviderInner.cs new file mode 100644 index 000000000..88e0b3130 --- /dev/null +++ b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/Models/ProviderInner.cs @@ -0,0 +1,66 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.ResourceManager.Models +{ + using System.Linq; + + /// + /// Resource provider information. + /// + public partial class ProviderInner + { + /// + /// Initializes a new instance of the ProviderInner class. + /// + public ProviderInner() { } + + /// + /// Initializes a new instance of the ProviderInner class. + /// + /// The provider id. + /// The namespace of the + /// provider. + /// The registration state of the + /// provider. + /// The collection of provider resource + /// types. + public ProviderInner(string id = default(string), string namespaceProperty = default(string), string registrationState = default(string), System.Collections.Generic.IList resourceTypes = default(System.Collections.Generic.IList)) + { + Id = id; + NamespaceProperty = namespaceProperty; + RegistrationState = registrationState; + ResourceTypes = resourceTypes; + } + + /// + /// Gets or sets the provider id. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "id")] + public string Id { get; set; } + + /// + /// Gets or sets the namespace of the provider. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "namespace")] + public string NamespaceProperty { get; set; } + + /// + /// Gets or sets the registration state of the provider. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "registrationState")] + public string RegistrationState { get; set; } + + /// + /// Gets or sets the collection of provider resource types. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "resourceTypes")] + public System.Collections.Generic.IList ResourceTypes { get; set; } + + } +} diff --git a/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/Models/ProviderListResultInner.cs b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/Models/ProviderListResultInner.cs new file mode 100644 index 000000000..de057c232 --- /dev/null +++ b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/Models/ProviderListResultInner.cs @@ -0,0 +1,48 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.ResourceManager.Models +{ + using System.Linq; + + /// + /// List of resource providers. + /// + public partial class ProviderListResultInner + { + /// + /// Initializes a new instance of the ProviderListResultInner class. + /// + public ProviderListResultInner() { } + + /// + /// Initializes a new instance of the ProviderListResultInner class. + /// + /// The list of resource providers. + /// The URL to get the next set of + /// results. + public ProviderListResultInner(System.Collections.Generic.IList value = default(System.Collections.Generic.IList), string nextLink = default(string)) + { + Value = value; + NextLink = nextLink; + } + + /// + /// Gets or sets the list of resource providers. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "value")] + public System.Collections.Generic.IList Value { get; set; } + + /// + /// Gets or sets the URL to get the next set of results. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "nextLink")] + public string NextLink { get; set; } + + } +} diff --git a/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/Models/ProviderResourceType.cs b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/Models/ProviderResourceType.cs new file mode 100644 index 000000000..b137d813f --- /dev/null +++ b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/Models/ProviderResourceType.cs @@ -0,0 +1,74 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.ResourceManager.Models +{ + using System.Linq; + + /// + /// Resource type managed by the resource provider. + /// + public partial class ProviderResourceType + { + /// + /// Initializes a new instance of the ProviderResourceType class. + /// + public ProviderResourceType() { } + + /// + /// Initializes a new instance of the ProviderResourceType class. + /// + /// The resource type. + /// The collection of locations where this + /// resource type can be created in. + /// The aliases that are supported by this + /// resource type. + /// The api version. + /// The properties. + public ProviderResourceType(string resourceType = default(string), System.Collections.Generic.IList locations = default(System.Collections.Generic.IList), System.Collections.Generic.IList aliases = default(System.Collections.Generic.IList), System.Collections.Generic.IList apiVersions = default(System.Collections.Generic.IList), System.Collections.Generic.IDictionary properties = default(System.Collections.Generic.IDictionary)) + { + ResourceType = resourceType; + Locations = locations; + Aliases = aliases; + ApiVersions = apiVersions; + Properties = properties; + } + + /// + /// Gets or sets the resource type. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "resourceType")] + public string ResourceType { get; set; } + + /// + /// Gets or sets the collection of locations where this resource type + /// can be created in. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "locations")] + public System.Collections.Generic.IList Locations { get; set; } + + /// + /// Gets or sets the aliases that are supported by this resource type. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "aliases")] + public System.Collections.Generic.IList Aliases { get; set; } + + /// + /// Gets or sets the api version. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "apiVersions")] + public System.Collections.Generic.IList ApiVersions { get; set; } + + /// + /// Gets or sets the properties. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties")] + public System.Collections.Generic.IDictionary Properties { get; set; } + + } +} diff --git a/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/Models/ResourceGroupExportResultInner.cs b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/Models/ResourceGroupExportResultInner.cs new file mode 100644 index 000000000..f97e6083b --- /dev/null +++ b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/Models/ResourceGroupExportResultInner.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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.ResourceManager.Models +{ + using System.Linq; + + public partial class ResourceGroupExportResultInner + { + /// + /// Initializes a new instance of the ResourceGroupExportResultInner + /// class. + /// + public ResourceGroupExportResultInner() { } + + /// + /// Initializes a new instance of the ResourceGroupExportResultInner + /// class. + /// + /// The template content. + /// The error. + public ResourceGroupExportResultInner(object template = default(object), ResourceManagementErrorWithDetails error = default(ResourceManagementErrorWithDetails)) + { + Template = template; + Error = error; + } + + /// + /// Gets or sets the template content. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "template")] + public object Template { get; set; } + + /// + /// Gets or sets the error. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "error")] + public ResourceManagementErrorWithDetails Error { get; set; } + + /// + /// Validate the object. + /// + /// + /// Thrown if validation fails + /// + public virtual void Validate() + { + if (this.Error != null) + { + this.Error.Validate(); + } + } + } +} diff --git a/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/Models/ResourceGroupFilter.cs b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/Models/ResourceGroupFilter.cs new file mode 100644 index 000000000..19dbcee66 --- /dev/null +++ b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/Models/ResourceGroupFilter.cs @@ -0,0 +1,47 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.ResourceManager.Models +{ + using System.Linq; + + /// + /// Resource group filter. + /// + public partial class ResourceGroupFilter + { + /// + /// Initializes a new instance of the ResourceGroupFilter class. + /// + public ResourceGroupFilter() { } + + /// + /// Initializes a new instance of the ResourceGroupFilter class. + /// + /// Gets or sets the tag name. + /// Gets or sets the tag value. + public ResourceGroupFilter(string tagName = default(string), string tagValue = default(string)) + { + TagName = tagName; + TagValue = tagValue; + } + + /// + /// Gets or sets the tag name. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "tagName")] + public string TagName { get; set; } + + /// + /// Gets or sets the tag value. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "tagValue")] + public string TagValue { get; set; } + + } +} diff --git a/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/Models/ResourceGroupFilterInner.cs b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/Models/ResourceGroupFilterInner.cs new file mode 100644 index 000000000..f0fbaff42 --- /dev/null +++ b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/Models/ResourceGroupFilterInner.cs @@ -0,0 +1,47 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.ResourceManager.Models +{ + using System.Linq; + + /// + /// Resource group filter. + /// + public partial class ResourceGroupFilterInner + { + /// + /// Initializes a new instance of the ResourceGroupFilterInner class. + /// + public ResourceGroupFilterInner() { } + + /// + /// Initializes a new instance of the ResourceGroupFilterInner class. + /// + /// The tag name. + /// The tag value. + public ResourceGroupFilterInner(string tagName = default(string), string tagValue = default(string)) + { + TagName = tagName; + TagValue = tagValue; + } + + /// + /// Gets or sets the tag name. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "tagName")] + public string TagName { get; set; } + + /// + /// Gets or sets the tag value. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "tagValue")] + public string TagValue { get; set; } + + } +} diff --git a/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/Models/ResourceGroupInner.cs b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/Models/ResourceGroupInner.cs new file mode 100644 index 000000000..d66f86e6b --- /dev/null +++ b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/Models/ResourceGroupInner.cs @@ -0,0 +1,88 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.ResourceManager.Models +{ + using System.Linq; + + /// + /// Resource group information. + /// + public partial class ResourceGroupInner + { + /// + /// Initializes a new instance of the ResourceGroupInner class. + /// + public ResourceGroupInner() { } + + /// + /// Initializes a new instance of the ResourceGroupInner class. + /// + /// The location of the resource group. It + /// cannot be changed after the resource group has been created. Has + /// to be one of the supported Azure Locations, such as West US, East + /// US, West Europe, East Asia, etc. + /// The ID of the resource group. + /// The Name of the resource group. + /// The tags attached to the resource group. + public ResourceGroupInner(string location, string id = default(string), string name = default(string), ResourceGroupProperties properties = default(ResourceGroupProperties), System.Collections.Generic.IDictionary tags = default(System.Collections.Generic.IDictionary)) + { + Id = id; + Name = name; + Properties = properties; + Location = location; + Tags = tags; + } + + /// + /// Gets the ID of the resource group. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "id")] + public string Id { get; private set; } + + /// + /// Gets or sets the Name of the resource group. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "name")] + public string Name { get; set; } + + /// + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties")] + public ResourceGroupProperties Properties { get; set; } + + /// + /// Gets or sets the location of the resource group. It cannot be + /// changed after the resource group has been created. Has to be one + /// of the supported Azure Locations, such as West US, East US, West + /// Europe, East Asia, etc. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "location")] + public string Location { get; set; } + + /// + /// Gets or sets the tags attached to the resource group. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "tags")] + public System.Collections.Generic.IDictionary Tags { get; set; } + + /// + /// Validate the object. + /// + /// + /// Thrown if validation fails + /// + public virtual void Validate() + { + if (Location == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "Location"); + } + } + } +} diff --git a/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/Models/ResourceGroupListResultInner.cs b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/Models/ResourceGroupListResultInner.cs new file mode 100644 index 000000000..50c047a93 --- /dev/null +++ b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/Models/ResourceGroupListResultInner.cs @@ -0,0 +1,73 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.ResourceManager.Models +{ + using System.Linq; + + /// + /// List of resource groups. + /// + public partial class ResourceGroupListResultInner + { + /// + /// Initializes a new instance of the ResourceGroupListResultInner + /// class. + /// + public ResourceGroupListResultInner() { } + + /// + /// Initializes a new instance of the ResourceGroupListResultInner + /// class. + /// + /// The URL to get the next set of + /// results. + /// The list of resource groups. + public ResourceGroupListResultInner(string nextLink, System.Collections.Generic.IList value = default(System.Collections.Generic.IList)) + { + Value = value; + NextLink = nextLink; + } + + /// + /// Gets or sets the list of resource groups. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "value")] + public System.Collections.Generic.IList Value { get; set; } + + /// + /// Gets or sets the URL to get the next set of results. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "nextLink")] + public string NextLink { get; set; } + + /// + /// Validate the object. + /// + /// + /// Thrown if validation fails + /// + public virtual void Validate() + { + if (NextLink == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "NextLink"); + } + if (this.Value != null) + { + foreach (var element in this.Value) + { + if (element != null) + { + element.Validate(); + } + } + } + } + } +} diff --git a/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/Models/ResourceGroupProperties.cs b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/Models/ResourceGroupProperties.cs new file mode 100644 index 000000000..fbc41f86b --- /dev/null +++ b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/Models/ResourceGroupProperties.cs @@ -0,0 +1,40 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.ResourceManager.Models +{ + using System.Linq; + + /// + /// The resource group properties. + /// + public partial class ResourceGroupProperties + { + /// + /// Initializes a new instance of the ResourceGroupProperties class. + /// + public ResourceGroupProperties() { } + + /// + /// Initializes a new instance of the ResourceGroupProperties class. + /// + /// Gets resource group provisioning + /// state. + public ResourceGroupProperties(string provisioningState = default(string)) + { + ProvisioningState = provisioningState; + } + + /// + /// Gets resource group provisioning state. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "provisioningState")] + public string ProvisioningState { get; private set; } + + } +} diff --git a/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/Models/ResourceIdentityType.cs b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/Models/ResourceIdentityType.cs new file mode 100644 index 000000000..4c7d461e8 --- /dev/null +++ b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/Models/ResourceIdentityType.cs @@ -0,0 +1,21 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.ResourceManager.Models +{ + + /// + /// Defines values for ResourceIdentityType. + /// + [Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.StringEnumConverter))] + public enum ResourceIdentityType + { + [System.Runtime.Serialization.EnumMember(Value = "SystemAssigned")] + SystemAssigned + } +} diff --git a/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/Models/ResourceListResultInner.cs b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/Models/ResourceListResultInner.cs new file mode 100644 index 000000000..7794ed7cc --- /dev/null +++ b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/Models/ResourceListResultInner.cs @@ -0,0 +1,61 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.ResourceManager.Models +{ + using System.Linq; + + /// + /// List of resource groups. + /// + public partial class ResourceListResultInner + { + /// + /// Initializes a new instance of the ResourceListResultInner class. + /// + public ResourceListResultInner() { } + + /// + /// Initializes a new instance of the ResourceListResultInner class. + /// + /// The URL to get the next set of + /// results. + /// The list of resources. + public ResourceListResultInner(string nextLink, System.Collections.Generic.IList value = default(System.Collections.Generic.IList)) + { + Value = value; + NextLink = nextLink; + } + + /// + /// Gets or sets the list of resources. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "value")] + public System.Collections.Generic.IList Value { get; set; } + + /// + /// Gets or sets the URL to get the next set of results. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "nextLink")] + public string NextLink { get; set; } + + /// + /// Validate the object. + /// + /// + /// Thrown if validation fails + /// + public virtual void Validate() + { + if (NextLink == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "NextLink"); + } + } + } +} diff --git a/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/Models/ResourceManagementErrorWithDetails.cs b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/Models/ResourceManagementErrorWithDetails.cs new file mode 100644 index 000000000..ed134ecf2 --- /dev/null +++ b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/Models/ResourceManagementErrorWithDetails.cs @@ -0,0 +1,90 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.ResourceManager.Models +{ + using System.Linq; + + public partial class ResourceManagementErrorWithDetails + { + /// + /// Initializes a new instance of the + /// ResourceManagementErrorWithDetails class. + /// + public ResourceManagementErrorWithDetails() { } + + /// + /// Initializes a new instance of the + /// ResourceManagementErrorWithDetails class. + /// + /// The error code returned from the server. + /// The error message returned from the + /// server. + /// The target of the error. + /// Validation error. + public ResourceManagementErrorWithDetails(string code, string message, string target = default(string), System.Collections.Generic.IList details = default(System.Collections.Generic.IList)) + { + Code = code; + Message = message; + Target = target; + Details = details; + } + + /// + /// Gets or sets the error code returned from the server. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "code")] + public string Code { get; set; } + + /// + /// Gets or sets the error message returned from the server. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "message")] + public string Message { get; set; } + + /// + /// Gets or sets the target of the error. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "target")] + public string Target { get; set; } + + /// + /// Gets or sets validation error. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "details")] + public System.Collections.Generic.IList Details { get; set; } + + /// + /// Validate the object. + /// + /// + /// Thrown if validation fails + /// + public virtual void Validate() + { + if (Code == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "Code"); + } + if (Message == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "Message"); + } + if (this.Details != null) + { + foreach (var element in this.Details) + { + if (element != null) + { + element.Validate(); + } + } + } + } + } +} diff --git a/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/Models/ResourceProviderOperationDisplayProperties.cs b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/Models/ResourceProviderOperationDisplayProperties.cs new file mode 100644 index 000000000..fdad50526 --- /dev/null +++ b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/Models/ResourceProviderOperationDisplayProperties.cs @@ -0,0 +1,73 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.ResourceManager.Models +{ + using System.Linq; + + /// + /// Resource provider operation's display properties. + /// + public partial class ResourceProviderOperationDisplayProperties + { + /// + /// Initializes a new instance of the + /// ResourceProviderOperationDisplayProperties class. + /// + public ResourceProviderOperationDisplayProperties() { } + + /// + /// Initializes a new instance of the + /// ResourceProviderOperationDisplayProperties class. + /// + /// Operation description. + /// Operation provider. + /// Operation resource. + /// Operation. + /// Operation description. + public ResourceProviderOperationDisplayProperties(string publisher = default(string), string provider = default(string), string resource = default(string), string operation = default(string), string description = default(string)) + { + Publisher = publisher; + Provider = provider; + Resource = resource; + Operation = operation; + Description = description; + } + + /// + /// Gets or sets operation description. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "publisher")] + public string Publisher { get; set; } + + /// + /// Gets or sets operation provider. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "provider")] + public string Provider { get; set; } + + /// + /// Gets or sets operation resource. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "resource")] + public string Resource { get; set; } + + /// + /// Gets or sets operation. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "operation")] + public string Operation { get; set; } + + /// + /// Gets or sets operation description. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "description")] + public string Description { get; set; } + + } +} diff --git a/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/Models/ResourcesMoveInfoInner.cs b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/Models/ResourcesMoveInfoInner.cs new file mode 100644 index 000000000..1d338016d --- /dev/null +++ b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/Models/ResourcesMoveInfoInner.cs @@ -0,0 +1,48 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.ResourceManager.Models +{ + using System.Linq; + + /// + /// Parameters of move resources. + /// + public partial class ResourcesMoveInfoInner + { + /// + /// Initializes a new instance of the ResourcesMoveInfoInner class. + /// + public ResourcesMoveInfoInner() { } + + /// + /// Initializes a new instance of the ResourcesMoveInfoInner class. + /// + /// The ids of the resources. + /// The target resource + /// group. + public ResourcesMoveInfoInner(System.Collections.Generic.IList resources = default(System.Collections.Generic.IList), string targetResourceGroup = default(string)) + { + Resources = resources; + TargetResourceGroup = targetResourceGroup; + } + + /// + /// Gets or sets the ids of the resources. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "resources")] + public System.Collections.Generic.IList Resources { get; set; } + + /// + /// Gets or sets the target resource group. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "targetResourceGroup")] + public string TargetResourceGroup { get; set; } + + } +} diff --git a/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/Models/Sku.cs b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/Models/Sku.cs new file mode 100644 index 000000000..9270f6ae8 --- /dev/null +++ b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/Models/Sku.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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.ResourceManager.Models +{ + using System.Linq; + + /// + /// Sku for the resource. + /// + public partial class Sku + { + /// + /// Initializes a new instance of the Sku class. + /// + public Sku() { } + + /// + /// Initializes a new instance of the Sku class. + /// + /// The sku name. + /// The sku tier. + /// The sku size. + /// The sku family. + /// The sku model. + /// The sku capacity. + public Sku(string name = default(string), string tier = default(string), string size = default(string), string family = default(string), string model = default(string), int? capacity = default(int?)) + { + Name = name; + Tier = tier; + Size = size; + Family = family; + Model = model; + Capacity = capacity; + } + + /// + /// Gets or sets the sku name. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "name")] + public string Name { get; set; } + + /// + /// Gets or sets the sku tier. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "tier")] + public string Tier { get; set; } + + /// + /// Gets or sets the sku size. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "size")] + public string Size { get; set; } + + /// + /// Gets or sets the sku family. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "family")] + public string Family { get; set; } + + /// + /// Gets or sets the sku model. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "model")] + public string Model { get; set; } + + /// + /// Gets or sets the sku capacity. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "capacity")] + public int? Capacity { get; set; } + + } +} diff --git a/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/Models/SubscriptionInner.cs b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/Models/SubscriptionInner.cs new file mode 100644 index 000000000..f4364b503 --- /dev/null +++ b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/Models/SubscriptionInner.cs @@ -0,0 +1,76 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.ResourceManager.Models +{ + using System.Linq; + + /// + /// Subscription information. + /// + public partial class SubscriptionInner + { + /// + /// Initializes a new instance of the SubscriptionInner class. + /// + public SubscriptionInner() { } + + /// + /// Initializes a new instance of the SubscriptionInner class. + /// + /// Gets or sets the ID of the resource + /// (/subscriptions/SubscriptionId). + /// Gets or sets the subscription + /// Id. + /// Gets or sets the subscription display + /// name + /// Gets or sets the subscription state + /// Gets or sets the subscription + /// policies. + public SubscriptionInner(string id = default(string), string subscriptionId = default(string), string displayName = default(string), string state = default(string), SubscriptionPolicies subscriptionPolicies = default(SubscriptionPolicies)) + { + Id = id; + SubscriptionId = subscriptionId; + DisplayName = displayName; + State = state; + SubscriptionPolicies = subscriptionPolicies; + } + + /// + /// Gets or sets the ID of the resource + /// (/subscriptions/SubscriptionId). + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "id")] + public string Id { get; set; } + + /// + /// Gets or sets the subscription Id. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "subscriptionId")] + public string SubscriptionId { get; set; } + + /// + /// Gets or sets the subscription display name + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "displayName")] + public string DisplayName { get; set; } + + /// + /// Gets or sets the subscription state + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "state")] + public string State { get; set; } + + /// + /// Gets or sets the subscription policies. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "subscriptionPolicies")] + public SubscriptionPolicies SubscriptionPolicies { get; set; } + + } +} diff --git a/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/Models/SubscriptionListResultInner.cs b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/Models/SubscriptionListResultInner.cs new file mode 100644 index 000000000..0c32a184c --- /dev/null +++ b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/Models/SubscriptionListResultInner.cs @@ -0,0 +1,63 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.ResourceManager.Models +{ + using System.Linq; + + /// + /// Subscription list operation response. + /// + public partial class SubscriptionListResultInner + { + /// + /// Initializes a new instance of the SubscriptionListResultInner + /// class. + /// + public SubscriptionListResultInner() { } + + /// + /// Initializes a new instance of the SubscriptionListResultInner + /// class. + /// + /// Gets or sets the URL to get the next set of + /// results. + /// Gets or sets subscriptions. + public SubscriptionListResultInner(string nextLink, System.Collections.Generic.IList value = default(System.Collections.Generic.IList)) + { + Value = value; + NextLink = nextLink; + } + + /// + /// Gets or sets subscriptions. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "value")] + public System.Collections.Generic.IList Value { get; set; } + + /// + /// Gets or sets the URL to get the next set of results. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "nextLink")] + public string NextLink { get; set; } + + /// + /// Validate the object. + /// + /// + /// Thrown if validation fails + /// + public virtual void Validate() + { + if (NextLink == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "NextLink"); + } + } + } +} diff --git a/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/Models/SubscriptionPolicies.cs b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/Models/SubscriptionPolicies.cs new file mode 100644 index 000000000..245fe8979 --- /dev/null +++ b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/Models/SubscriptionPolicies.cs @@ -0,0 +1,49 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.ResourceManager.Models +{ + using System.Linq; + + /// + /// Subscription policies. + /// + public partial class SubscriptionPolicies + { + /// + /// Initializes a new instance of the SubscriptionPolicies class. + /// + public SubscriptionPolicies() { } + + /// + /// Initializes a new instance of the SubscriptionPolicies class. + /// + /// Gets or sets the subscription + /// location placement Id. + /// Gets or sets the subscription quota + /// Id. + public SubscriptionPolicies(string locationPlacementId = default(string), string quotaId = default(string)) + { + LocationPlacementId = locationPlacementId; + QuotaId = quotaId; + } + + /// + /// Gets or sets the subscription location placement Id. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "locationPlacementId")] + public string LocationPlacementId { get; set; } + + /// + /// Gets or sets the subscription quota Id. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "quotaId")] + public string QuotaId { get; set; } + + } +} diff --git a/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/Models/TagCount.cs b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/Models/TagCount.cs new file mode 100644 index 000000000..945701540 --- /dev/null +++ b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/Models/TagCount.cs @@ -0,0 +1,47 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.ResourceManager.Models +{ + using System.Linq; + + /// + /// Tag count. + /// + public partial class TagCount + { + /// + /// Initializes a new instance of the TagCount class. + /// + public TagCount() { } + + /// + /// Initializes a new instance of the TagCount class. + /// + /// Type of count. + /// Value of count. + public TagCount(string type = default(string), string value = default(string)) + { + Type = type; + Value = value; + } + + /// + /// Gets or sets type of count. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "type")] + public string Type { get; set; } + + /// + /// Gets or sets value of count. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "value")] + public string Value { get; set; } + + } +} diff --git a/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/Models/TagDetailsInner.cs b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/Models/TagDetailsInner.cs new file mode 100644 index 000000000..f1c5afa10 --- /dev/null +++ b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/Models/TagDetailsInner.cs @@ -0,0 +1,63 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.ResourceManager.Models +{ + using System.Linq; + + /// + /// Tag details. + /// + public partial class TagDetailsInner + { + /// + /// Initializes a new instance of the TagDetailsInner class. + /// + public TagDetailsInner() { } + + /// + /// Initializes a new instance of the TagDetailsInner class. + /// + /// The tag ID. + /// The tag name. + /// The tag count. + /// The list of tag values. + public TagDetailsInner(string id = default(string), string tagName = default(string), TagCount count = default(TagCount), System.Collections.Generic.IList values = default(System.Collections.Generic.IList)) + { + Id = id; + TagName = tagName; + Count = count; + Values = values; + } + + /// + /// Gets or sets the tag ID. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "id")] + public string Id { get; set; } + + /// + /// Gets or sets the tag name. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "tagName")] + public string TagName { get; set; } + + /// + /// Gets or sets the tag count. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "count")] + public TagCount Count { get; set; } + + /// + /// Gets or sets the list of tag values. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "values")] + public System.Collections.Generic.IList Values { get; set; } + + } +} diff --git a/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/Models/TagValueInner.cs b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/Models/TagValueInner.cs new file mode 100644 index 000000000..8013b0404 --- /dev/null +++ b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/Models/TagValueInner.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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.ResourceManager.Models +{ + using System.Linq; + + /// + /// Tag information. + /// + public partial class TagValueInner + { + /// + /// Initializes a new instance of the TagValueInner class. + /// + public TagValueInner() { } + + /// + /// Initializes a new instance of the TagValueInner class. + /// + /// The tag ID. + /// The tag value. + /// The tag value count. + public TagValueInner(string id = default(string), string tagValueProperty = default(string), TagCount count = default(TagCount)) + { + Id = id; + TagValueProperty = tagValueProperty; + Count = count; + } + + /// + /// Gets or sets the tag ID. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "id")] + public string Id { get; set; } + + /// + /// Gets or sets the tag value. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "tagValue")] + public string TagValueProperty { get; set; } + + /// + /// Gets or sets the tag value count. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "count")] + public TagCount Count { get; set; } + + } +} diff --git a/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/Models/TagsListResultInner.cs b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/Models/TagsListResultInner.cs new file mode 100644 index 000000000..fc9cb34ea --- /dev/null +++ b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/Models/TagsListResultInner.cs @@ -0,0 +1,61 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.ResourceManager.Models +{ + using System.Linq; + + /// + /// List of subscription tags. + /// + public partial class TagsListResultInner + { + /// + /// Initializes a new instance of the TagsListResultInner class. + /// + public TagsListResultInner() { } + + /// + /// Initializes a new instance of the TagsListResultInner class. + /// + /// The URL to get the next set of + /// results. + /// The list of tags. + public TagsListResultInner(string nextLink, System.Collections.Generic.IList value = default(System.Collections.Generic.IList)) + { + Value = value; + NextLink = nextLink; + } + + /// + /// Gets or sets the list of tags. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "value")] + public System.Collections.Generic.IList Value { get; set; } + + /// + /// Gets or sets the URL to get the next set of results. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "nextLink")] + public string NextLink { get; set; } + + /// + /// Validate the object. + /// + /// + /// Thrown if validation fails + /// + public virtual void Validate() + { + if (NextLink == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "NextLink"); + } + } + } +} diff --git a/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/Models/TargetResource.cs b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/Models/TargetResource.cs new file mode 100644 index 000000000..edfcd46f0 --- /dev/null +++ b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/Models/TargetResource.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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.ResourceManager.Models +{ + using System.Linq; + + /// + /// Target resource. + /// + public partial class TargetResource + { + /// + /// Initializes a new instance of the TargetResource class. + /// + public TargetResource() { } + + /// + /// Initializes a new instance of the TargetResource class. + /// + /// The ID of the resource. + /// The name of the resource. + /// The type of the resource. + public TargetResource(string id = default(string), string resourceName = default(string), string resourceType = default(string)) + { + Id = id; + ResourceName = resourceName; + ResourceType = resourceType; + } + + /// + /// Gets or sets the ID of the resource. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "id")] + public string Id { get; set; } + + /// + /// Gets or sets the name of the resource. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "resourceName")] + public string ResourceName { get; set; } + + /// + /// Gets or sets the type of the resource. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "resourceType")] + public string ResourceType { get; set; } + + } +} diff --git a/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/Models/TemplateLink.cs b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/Models/TemplateLink.cs new file mode 100644 index 000000000..dbf7a3214 --- /dev/null +++ b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/Models/TemplateLink.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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.ResourceManager.Models +{ + using System.Linq; + + /// + /// Entity representing the reference to the template. + /// + public partial class TemplateLink + { + /// + /// Initializes a new instance of the TemplateLink class. + /// + public TemplateLink() { } + + /// + /// Initializes a new instance of the TemplateLink class. + /// + /// URI referencing the template. + /// If included it must match the + /// ContentVersion in the template. + public TemplateLink(string uri, string contentVersion = default(string)) + { + Uri = uri; + ContentVersion = contentVersion; + } + + /// + /// Gets or sets URI referencing the template. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "uri")] + public string Uri { get; set; } + + /// + /// Gets or sets if included it must match the ContentVersion in the + /// template. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "contentVersion")] + public string ContentVersion { get; set; } + + /// + /// Validate the object. + /// + /// + /// Thrown if validation fails + /// + public virtual void Validate() + { + if (Uri == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "Uri"); + } + } + } +} diff --git a/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/Models/TenantIdDescription.cs b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/Models/TenantIdDescription.cs new file mode 100644 index 000000000..7fb8e7d7b --- /dev/null +++ b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/Models/TenantIdDescription.cs @@ -0,0 +1,47 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.ResourceManager.Models +{ + using System.Linq; + + /// + /// Tenant Id information + /// + public partial class TenantIdDescription + { + /// + /// Initializes a new instance of the TenantIdDescription class. + /// + public TenantIdDescription() { } + + /// + /// Initializes a new instance of the TenantIdDescription class. + /// + /// Gets or sets Id + /// Gets or sets tenantId + public TenantIdDescription(string id = default(string), string tenantId = default(string)) + { + Id = id; + TenantId = tenantId; + } + + /// + /// Gets or sets Id + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "id")] + public string Id { get; set; } + + /// + /// Gets or sets tenantId + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "tenantId")] + public string TenantId { get; set; } + + } +} diff --git a/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/Models/TenantListResultInner.cs b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/Models/TenantListResultInner.cs new file mode 100644 index 000000000..28b3e8824 --- /dev/null +++ b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/Models/TenantListResultInner.cs @@ -0,0 +1,61 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.ResourceManager.Models +{ + using System.Linq; + + /// + /// Tenant Ids information. + /// + public partial class TenantListResultInner + { + /// + /// Initializes a new instance of the TenantListResultInner class. + /// + public TenantListResultInner() { } + + /// + /// Initializes a new instance of the TenantListResultInner class. + /// + /// Gets or sets the URL to get the next set of + /// results. + /// Gets or sets tenant Ids. + public TenantListResultInner(string nextLink, System.Collections.Generic.IList value = default(System.Collections.Generic.IList)) + { + Value = value; + NextLink = nextLink; + } + + /// + /// Gets or sets tenant Ids. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "value")] + public System.Collections.Generic.IList Value { get; set; } + + /// + /// Gets or sets the URL to get the next set of results. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "nextLink")] + public string NextLink { get; set; } + + /// + /// Validate the object. + /// + /// + /// Thrown if validation fails + /// + public virtual void Validate() + { + if (NextLink == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "NextLink"); + } + } + } +} diff --git a/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/ProvidersOperations.cs b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/ProvidersOperations.cs new file mode 100644 index 000000000..daf39b8db --- /dev/null +++ b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/ProvidersOperations.cs @@ -0,0 +1,958 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.ResourceManager +{ + using System.Linq; + using Microsoft.Rest; + using Microsoft.Rest.Azure; + using Models; + + /// + /// ProvidersOperations operations. + /// + internal partial class ProvidersOperations : Microsoft.Rest.IServiceOperations, IProvidersOperations + { + /// + /// Initializes a new instance of the ProvidersOperations class. + /// + /// + /// Reference to the service client. + /// + /// + /// Thrown when a required parameter is null + /// + internal ProvidersOperations(ResourceManagementClient client) + { + if (client == null) + { + throw new System.ArgumentNullException("client"); + } + this.Client = client; + } + + /// + /// Gets a reference to the ResourceManagementClient + /// + public ResourceManagementClient Client { get; private set; } + + /// + /// Unregisters provider from a subscription. + /// + /// + /// Namespace of the resource provider. + /// + /// + /// 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 + /// + /// + /// A response object containing the response body and response headers. + /// + public async System.Threading.Tasks.Task> UnregisterWithHttpMessagesAsync(string resourceProviderNamespace, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + if (resourceProviderNamespace == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "resourceProviderNamespace"); + } + if (this.Client.ApiVersion == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.ApiVersion"); + } + if (this.Client.SubscriptionId == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.SubscriptionId"); + } + // 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("resourceProviderNamespace", resourceProviderNamespace); + tracingParameters.Add("cancellationToken", cancellationToken); + Microsoft.Rest.ServiceClientTracing.Enter(_invocationId, this, "Unregister", tracingParameters); + } + // Construct URL + var _baseUrl = this.Client.BaseUri.AbsoluteUri; + var _url = new System.Uri(new System.Uri(_baseUrl + (_baseUrl.EndsWith("/") ? "" : "/")), "subscriptions/{subscriptionId}/providers/{resourceProviderNamespace}/unregister").ToString(); + _url = _url.Replace("{resourceProviderNamespace}", System.Uri.EscapeDataString(resourceProviderNamespace)); + _url = _url.Replace("{subscriptionId}", System.Uri.EscapeDataString(this.Client.SubscriptionId)); + System.Collections.Generic.List _queryParameters = new System.Collections.Generic.List(); + if (this.Client.ApiVersion != null) + { + _queryParameters.Add(string.Format("api-version={0}", System.Uri.EscapeDataString(this.Client.ApiVersion))); + } + if (_queryParameters.Count > 0) + { + _url += "?" + string.Join("&", _queryParameters); + } + // Create HTTP transport objects + System.Net.Http.HttpRequestMessage _httpRequest = new System.Net.Http.HttpRequestMessage(); + System.Net.Http.HttpResponseMessage _httpResponse = null; + _httpRequest.Method = new System.Net.Http.HttpMethod("POST"); + _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); + CloudError _errorBody = Microsoft.Rest.Serialization.SafeJsonConvert.DeserializeObject(_responseContent, this.Client.DeserializationSettings); + if (_errorBody != null) + { + ex = new Microsoft.Rest.Azure.CloudException(_errorBody.Message); + 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 (_httpResponse.Headers.Contains("x-ms-request-id")) + { + ex.RequestId = _httpResponse.Headers.GetValues("x-ms-request-id").FirstOrDefault(); + } + 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; + } + + /// + /// Registers provider to be used with a subscription. + /// + /// + /// Namespace of the resource provider. + /// + /// + /// 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 + /// + /// + /// A response object containing the response body and response headers. + /// + public async System.Threading.Tasks.Task> RegisterWithHttpMessagesAsync(string resourceProviderNamespace, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + if (resourceProviderNamespace == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "resourceProviderNamespace"); + } + if (this.Client.ApiVersion == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.ApiVersion"); + } + if (this.Client.SubscriptionId == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.SubscriptionId"); + } + // 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("resourceProviderNamespace", resourceProviderNamespace); + tracingParameters.Add("cancellationToken", cancellationToken); + Microsoft.Rest.ServiceClientTracing.Enter(_invocationId, this, "Register", tracingParameters); + } + // Construct URL + var _baseUrl = this.Client.BaseUri.AbsoluteUri; + var _url = new System.Uri(new System.Uri(_baseUrl + (_baseUrl.EndsWith("/") ? "" : "/")), "subscriptions/{subscriptionId}/providers/{resourceProviderNamespace}/register").ToString(); + _url = _url.Replace("{resourceProviderNamespace}", System.Uri.EscapeDataString(resourceProviderNamespace)); + _url = _url.Replace("{subscriptionId}", System.Uri.EscapeDataString(this.Client.SubscriptionId)); + System.Collections.Generic.List _queryParameters = new System.Collections.Generic.List(); + if (this.Client.ApiVersion != null) + { + _queryParameters.Add(string.Format("api-version={0}", System.Uri.EscapeDataString(this.Client.ApiVersion))); + } + if (_queryParameters.Count > 0) + { + _url += "?" + string.Join("&", _queryParameters); + } + // Create HTTP transport objects + System.Net.Http.HttpRequestMessage _httpRequest = new System.Net.Http.HttpRequestMessage(); + System.Net.Http.HttpResponseMessage _httpResponse = null; + _httpRequest.Method = new System.Net.Http.HttpMethod("POST"); + _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); + CloudError _errorBody = Microsoft.Rest.Serialization.SafeJsonConvert.DeserializeObject(_responseContent, this.Client.DeserializationSettings); + if (_errorBody != null) + { + ex = new Microsoft.Rest.Azure.CloudException(_errorBody.Message); + 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 (_httpResponse.Headers.Contains("x-ms-request-id")) + { + ex.RequestId = _httpResponse.Headers.GetValues("x-ms-request-id").FirstOrDefault(); + } + 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 a list of resource providers. + /// + /// + /// Query parameters. If null is passed returns all deployments. + /// + /// + /// The $expand query parameter. e.g. To include property aliases in response, + /// use $expand=resourceTypes/aliases. + /// + /// + /// 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 + /// + /// + /// A response object containing the response body and response headers. + /// + public async System.Threading.Tasks.Task>> ListWithHttpMessagesAsync(int? top = default(int?), string expand = default(string), System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + if (this.Client.ApiVersion == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.ApiVersion"); + } + if (this.Client.SubscriptionId == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.SubscriptionId"); + } + // 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("top", top); + tracingParameters.Add("expand", expand); + 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}/providers").ToString(); + _url = _url.Replace("{subscriptionId}", System.Uri.EscapeDataString(this.Client.SubscriptionId)); + System.Collections.Generic.List _queryParameters = new System.Collections.Generic.List(); + if (top != null) + { + _queryParameters.Add(string.Format("$top={0}", System.Uri.EscapeDataString(Microsoft.Rest.Serialization.SafeJsonConvert.SerializeObject(top, this.Client.SerializationSettings).Trim('"')))); + } + if (expand != null) + { + _queryParameters.Add(string.Format("$expand={0}", System.Uri.EscapeDataString(expand))); + } + if (this.Client.ApiVersion != null) + { + _queryParameters.Add(string.Format("api-version={0}", System.Uri.EscapeDataString(this.Client.ApiVersion))); + } + if (_queryParameters.Count > 0) + { + _url += "?" + string.Join("&", _queryParameters); + } + // Create HTTP transport objects + System.Net.Http.HttpRequestMessage _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); + CloudError _errorBody = Microsoft.Rest.Serialization.SafeJsonConvert.DeserializeObject(_responseContent, this.Client.DeserializationSettings); + if (_errorBody != null) + { + ex = new Microsoft.Rest.Azure.CloudException(_errorBody.Message); + 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 (_httpResponse.Headers.Contains("x-ms-request-id")) + { + ex.RequestId = _httpResponse.Headers.GetValues("x-ms-request-id").FirstOrDefault(); + } + 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 a resource provider. + /// + /// + /// Namespace of the resource provider. + /// + /// + /// The $expand query parameter. e.g. To include property aliases in response, + /// use $expand=resourceTypes/aliases. + /// + /// + /// 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 + /// + /// + /// A response object containing the response body and response headers. + /// + public async System.Threading.Tasks.Task> GetWithHttpMessagesAsync(string resourceProviderNamespace, string expand = default(string), System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + if (resourceProviderNamespace == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "resourceProviderNamespace"); + } + if (this.Client.ApiVersion == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.ApiVersion"); + } + if (this.Client.SubscriptionId == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.SubscriptionId"); + } + // 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("expand", expand); + tracingParameters.Add("resourceProviderNamespace", resourceProviderNamespace); + 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}/providers/{resourceProviderNamespace}").ToString(); + _url = _url.Replace("{resourceProviderNamespace}", System.Uri.EscapeDataString(resourceProviderNamespace)); + _url = _url.Replace("{subscriptionId}", System.Uri.EscapeDataString(this.Client.SubscriptionId)); + System.Collections.Generic.List _queryParameters = new System.Collections.Generic.List(); + if (expand != null) + { + _queryParameters.Add(string.Format("$expand={0}", System.Uri.EscapeDataString(expand))); + } + if (this.Client.ApiVersion != null) + { + _queryParameters.Add(string.Format("api-version={0}", System.Uri.EscapeDataString(this.Client.ApiVersion))); + } + if (_queryParameters.Count > 0) + { + _url += "?" + string.Join("&", _queryParameters); + } + // Create HTTP transport objects + System.Net.Http.HttpRequestMessage _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); + CloudError _errorBody = Microsoft.Rest.Serialization.SafeJsonConvert.DeserializeObject(_responseContent, this.Client.DeserializationSettings); + if (_errorBody != null) + { + ex = new Microsoft.Rest.Azure.CloudException(_errorBody.Message); + 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 (_httpResponse.Headers.Contains("x-ms-request-id")) + { + ex.RequestId = _httpResponse.Headers.GetValues("x-ms-request-id").FirstOrDefault(); + } + 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 a list of resource providers. + /// + /// + /// 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 + /// + /// + /// 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 += "?" + string.Join("&", _queryParameters); + } + // Create HTTP transport objects + System.Net.Http.HttpRequestMessage _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); + CloudError _errorBody = Microsoft.Rest.Serialization.SafeJsonConvert.DeserializeObject(_responseContent, this.Client.DeserializationSettings); + if (_errorBody != null) + { + ex = new Microsoft.Rest.Azure.CloudException(_errorBody.Message); + 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 (_httpResponse.Headers.Contains("x-ms-request-id")) + { + ex.RequestId = _httpResponse.Headers.GetValues("x-ms-request-id").FirstOrDefault(); + } + 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; + } + + } +} diff --git a/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/ProvidersOperationsExtensions.cs b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/ProvidersOperationsExtensions.cs new file mode 100644 index 000000000..94c6fd2e6 --- /dev/null +++ b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/ProvidersOperationsExtensions.cs @@ -0,0 +1,207 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.ResourceManager +{ + using System.Threading.Tasks; + using Microsoft.Rest.Azure; + using Models; + + /// + /// Extension methods for ProvidersOperations. + /// + public static partial class ProvidersOperationsExtensions + { + /// + /// Unregisters provider from a subscription. + /// + /// + /// The operations group for this extension method. + /// + /// + /// Namespace of the resource provider. + /// + public static ProviderInner Unregister(this IProvidersOperations operations, string resourceProviderNamespace) + { + return System.Threading.Tasks.Task.Factory.StartNew(s => ((IProvidersOperations)s).UnregisterAsync(resourceProviderNamespace), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// Unregisters provider from a subscription. + /// + /// + /// The operations group for this extension method. + /// + /// + /// Namespace of the resource provider. + /// + /// + /// The cancellation token. + /// + public static async System.Threading.Tasks.Task UnregisterAsync(this IProvidersOperations operations, string resourceProviderNamespace, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + using (var _result = await operations.UnregisterWithHttpMessagesAsync(resourceProviderNamespace, null, cancellationToken).ConfigureAwait(false)) + { + return _result.Body; + } + } + + /// + /// Registers provider to be used with a subscription. + /// + /// + /// The operations group for this extension method. + /// + /// + /// Namespace of the resource provider. + /// + public static ProviderInner Register(this IProvidersOperations operations, string resourceProviderNamespace) + { + return System.Threading.Tasks.Task.Factory.StartNew(s => ((IProvidersOperations)s).RegisterAsync(resourceProviderNamespace), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// Registers provider to be used with a subscription. + /// + /// + /// The operations group for this extension method. + /// + /// + /// Namespace of the resource provider. + /// + /// + /// The cancellation token. + /// + public static async System.Threading.Tasks.Task RegisterAsync(this IProvidersOperations operations, string resourceProviderNamespace, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + using (var _result = await operations.RegisterWithHttpMessagesAsync(resourceProviderNamespace, null, cancellationToken).ConfigureAwait(false)) + { + return _result.Body; + } + } + + /// + /// Gets a list of resource providers. + /// + /// + /// The operations group for this extension method. + /// + /// + /// Query parameters. If null is passed returns all deployments. + /// + /// + /// The $expand query parameter. e.g. To include property aliases in response, + /// use $expand=resourceTypes/aliases. + /// + public static Microsoft.Rest.Azure.IPage List(this IProvidersOperations operations, int? top = default(int?), string expand = default(string)) + { + return System.Threading.Tasks.Task.Factory.StartNew(s => ((IProvidersOperations)s).ListAsync(top, expand), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// Gets a list of resource providers. + /// + /// + /// The operations group for this extension method. + /// + /// + /// Query parameters. If null is passed returns all deployments. + /// + /// + /// The $expand query parameter. e.g. To include property aliases in response, + /// use $expand=resourceTypes/aliases. + /// + /// + /// The cancellation token. + /// + public static async Task> ListAsync(this IProvidersOperations operations, int? top = default(int?), string expand = default(string), System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + using (var _result = await operations.ListWithHttpMessagesAsync(top, expand, null, cancellationToken).ConfigureAwait(false)) + { + return _result.Body; + } + } + + /// + /// Gets a resource provider. + /// + /// + /// The operations group for this extension method. + /// + /// + /// Namespace of the resource provider. + /// + /// + /// The $expand query parameter. e.g. To include property aliases in response, + /// use $expand=resourceTypes/aliases. + /// + public static ProviderInner Get(this IProvidersOperations operations, string resourceProviderNamespace, string expand = default(string)) + { + return System.Threading.Tasks.Task.Factory.StartNew(s => ((IProvidersOperations)s).GetAsync(resourceProviderNamespace, expand), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// Gets a resource provider. + /// + /// + /// The operations group for this extension method. + /// + /// + /// Namespace of the resource provider. + /// + /// + /// The $expand query parameter. e.g. To include property aliases in response, + /// use $expand=resourceTypes/aliases. + /// + /// + /// The cancellation token. + /// + public static async System.Threading.Tasks.Task GetAsync(this IProvidersOperations operations, string resourceProviderNamespace, string expand = default(string), System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + using (var _result = await operations.GetWithHttpMessagesAsync(resourceProviderNamespace, expand, null, cancellationToken).ConfigureAwait(false)) + { + return _result.Body; + } + } + + /// + /// Gets a list of resource providers. + /// + /// + /// 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 IProvidersOperations operations, string nextPageLink) + { + return System.Threading.Tasks.Task.Factory.StartNew(s => ((IProvidersOperations)s).ListNextAsync(nextPageLink), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// Gets a list of resource providers. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The NextLink from the previous successful call to List operation. + /// + /// + /// The cancellation token. + /// + public static async Task> ListNextAsync(this IProvidersOperations 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/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/ResourceGroupsOperations.cs b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/ResourceGroupsOperations.cs new file mode 100644 index 000000000..6326b3ace --- /dev/null +++ b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/ResourceGroupsOperations.cs @@ -0,0 +1,1934 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.ResourceManager +{ + using System.Linq; + using Microsoft.Rest; + using Microsoft.Rest.Azure; + using Models; + + /// + /// ResourceGroupsOperations operations. + /// + internal partial class ResourceGroupsOperations : Microsoft.Rest.IServiceOperations, IResourceGroupsOperations + { + /// + /// Initializes a new instance of the ResourceGroupsOperations class. + /// + /// + /// Reference to the service client. + /// + /// + /// Thrown when a required parameter is null + /// + internal ResourceGroupsOperations(ResourceManagementClient client) + { + if (client == null) + { + throw new System.ArgumentNullException("client"); + } + this.Client = client; + } + + /// + /// Gets a reference to the ResourceManagementClient + /// + public ResourceManagementClient Client { get; private set; } + + /// + /// Get all of the resources under a subscription. + /// + /// + /// Query parameters. If null is passed returns all resource groups. + /// + /// + /// OData parameters to apply to the 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 + /// + /// + /// A response object containing the response body and response headers. + /// + public async System.Threading.Tasks.Task>> ListResourcesWithHttpMessagesAsync(string resourceGroupName, Microsoft.Rest.Azure.OData.ODataQuery odataQuery = default(Microsoft.Rest.Azure.OData.ODataQuery), System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + if (resourceGroupName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "resourceGroupName"); + } + if (this.Client.ApiVersion == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.ApiVersion"); + } + if (this.Client.SubscriptionId == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.SubscriptionId"); + } + // 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("odataQuery", odataQuery); + tracingParameters.Add("resourceGroupName", resourceGroupName); + tracingParameters.Add("cancellationToken", cancellationToken); + Microsoft.Rest.ServiceClientTracing.Enter(_invocationId, this, "ListResources", tracingParameters); + } + // Construct URL + var _baseUrl = this.Client.BaseUri.AbsoluteUri; + var _url = new System.Uri(new System.Uri(_baseUrl + (_baseUrl.EndsWith("/") ? "" : "/")), "subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/resources").ToString(); + _url = _url.Replace("{resourceGroupName}", System.Uri.EscapeDataString(resourceGroupName)); + _url = _url.Replace("{subscriptionId}", System.Uri.EscapeDataString(this.Client.SubscriptionId)); + System.Collections.Generic.List _queryParameters = new System.Collections.Generic.List(); + if (odataQuery != null) + { + var _odataFilter = odataQuery.ToString(); + if (!string.IsNullOrEmpty(_odataFilter)) + { + _queryParameters.Add(_odataFilter); + } + } + if (this.Client.ApiVersion != null) + { + _queryParameters.Add(string.Format("api-version={0}", System.Uri.EscapeDataString(this.Client.ApiVersion))); + } + if (_queryParameters.Count > 0) + { + _url += "?" + string.Join("&", _queryParameters); + } + // Create HTTP transport objects + System.Net.Http.HttpRequestMessage _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); + CloudError _errorBody = Microsoft.Rest.Serialization.SafeJsonConvert.DeserializeObject(_responseContent, this.Client.DeserializationSettings); + if (_errorBody != null) + { + ex = new Microsoft.Rest.Azure.CloudException(_errorBody.Message); + 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 (_httpResponse.Headers.Contains("x-ms-request-id")) + { + ex.RequestId = _httpResponse.Headers.GetValues("x-ms-request-id").FirstOrDefault(); + } + 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; + } + + /// + /// Checks whether resource group exists. + /// + /// + /// The name of the resource group to check. The name is case insensitive. + /// + /// + /// 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 + /// + /// + /// A response object containing the response body and response headers. + /// + public async System.Threading.Tasks.Task> CheckExistenceWithHttpMessagesAsync(string resourceGroupName, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + if (resourceGroupName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "resourceGroupName"); + } + if (resourceGroupName != null) + { + if (!System.Text.RegularExpressions.Regex.IsMatch(resourceGroupName, "^[-\\w\\._]+$")) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.Pattern, "resourceGroupName", "^[-\\w\\._]+$"); + } + } + if (this.Client.ApiVersion == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.ApiVersion"); + } + if (this.Client.SubscriptionId == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.SubscriptionId"); + } + // 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("cancellationToken", cancellationToken); + Microsoft.Rest.ServiceClientTracing.Enter(_invocationId, this, "CheckExistence", tracingParameters); + } + // Construct URL + var _baseUrl = this.Client.BaseUri.AbsoluteUri; + var _url = new System.Uri(new System.Uri(_baseUrl + (_baseUrl.EndsWith("/") ? "" : "/")), "subscriptions/{subscriptionId}/resourcegroups/{resourceGroupName}").ToString(); + _url = _url.Replace("{resourceGroupName}", System.Uri.EscapeDataString(resourceGroupName)); + _url = _url.Replace("{subscriptionId}", System.Uri.EscapeDataString(this.Client.SubscriptionId)); + System.Collections.Generic.List _queryParameters = new System.Collections.Generic.List(); + if (this.Client.ApiVersion != null) + { + _queryParameters.Add(string.Format("api-version={0}", System.Uri.EscapeDataString(this.Client.ApiVersion))); + } + if (_queryParameters.Count > 0) + { + _url += "?" + string.Join("&", _queryParameters); + } + // Create HTTP transport objects + System.Net.Http.HttpRequestMessage _httpRequest = new System.Net.Http.HttpRequestMessage(); + System.Net.Http.HttpResponseMessage _httpResponse = null; + _httpRequest.Method = new System.Net.Http.HttpMethod("HEAD"); + _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 != 204 && (int)_statusCode != 404) + { + 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); + CloudError _errorBody = Microsoft.Rest.Serialization.SafeJsonConvert.DeserializeObject(_responseContent, this.Client.DeserializationSettings); + if (_errorBody != null) + { + ex = new Microsoft.Rest.Azure.CloudException(_errorBody.Message); + 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 (_httpResponse.Headers.Contains("x-ms-request-id")) + { + ex.RequestId = _httpResponse.Headers.GetValues("x-ms-request-id").FirstOrDefault(); + } + 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; + _result.Body = (_statusCode == System.Net.HttpStatusCode.NoContent); + if (_httpResponse.Headers.Contains("x-ms-request-id")) + { + _result.RequestId = _httpResponse.Headers.GetValues("x-ms-request-id").FirstOrDefault(); + } + if (_shouldTrace) + { + Microsoft.Rest.ServiceClientTracing.Exit(_invocationId, _result); + } + return _result; + } + + /// + /// Create a resource group. + /// + /// + /// The name of the resource group to be created or updated. + /// + /// + /// Parameters supplied to the create or update resource group service + /// 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 + /// + /// + /// A response object containing the response body and response headers. + /// + public async System.Threading.Tasks.Task> CreateOrUpdateWithHttpMessagesAsync(string resourceGroupName, ResourceGroupInner parameters, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + if (resourceGroupName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "resourceGroupName"); + } + if (resourceGroupName != null) + { + if (!System.Text.RegularExpressions.Regex.IsMatch(resourceGroupName, "^[-\\w\\._]+$")) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.Pattern, "resourceGroupName", "^[-\\w\\._]+$"); + } + } + if (parameters == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "parameters"); + } + if (parameters != null) + { + parameters.Validate(); + } + if (this.Client.ApiVersion == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.ApiVersion"); + } + if (this.Client.SubscriptionId == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.SubscriptionId"); + } + // 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("parameters", parameters); + tracingParameters.Add("cancellationToken", cancellationToken); + Microsoft.Rest.ServiceClientTracing.Enter(_invocationId, this, "CreateOrUpdate", tracingParameters); + } + // Construct URL + var _baseUrl = this.Client.BaseUri.AbsoluteUri; + var _url = new System.Uri(new System.Uri(_baseUrl + (_baseUrl.EndsWith("/") ? "" : "/")), "subscriptions/{subscriptionId}/resourcegroups/{resourceGroupName}").ToString(); + _url = _url.Replace("{resourceGroupName}", System.Uri.EscapeDataString(resourceGroupName)); + _url = _url.Replace("{subscriptionId}", System.Uri.EscapeDataString(this.Client.SubscriptionId)); + System.Collections.Generic.List _queryParameters = new System.Collections.Generic.List(); + if (this.Client.ApiVersion != null) + { + _queryParameters.Add(string.Format("api-version={0}", System.Uri.EscapeDataString(this.Client.ApiVersion))); + } + if (_queryParameters.Count > 0) + { + _url += "?" + string.Join("&", _queryParameters); + } + // Create HTTP transport objects + System.Net.Http.HttpRequestMessage _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 != 201 && (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); + CloudError _errorBody = Microsoft.Rest.Serialization.SafeJsonConvert.DeserializeObject(_responseContent, this.Client.DeserializationSettings); + if (_errorBody != null) + { + ex = new Microsoft.Rest.Azure.CloudException(_errorBody.Message); + 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 (_httpResponse.Headers.Contains("x-ms-request-id")) + { + ex.RequestId = _httpResponse.Headers.GetValues("x-ms-request-id").FirstOrDefault(); + } + 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 == 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); + } + } + // 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; + } + + /// + /// Delete resource group. + /// + /// + /// The name of the resource group to be deleted. The name is case insensitive. + /// + /// + /// The headers that will be added to request. + /// + /// + /// The cancellation token. + /// + public async System.Threading.Tasks.Task DeleteWithHttpMessagesAsync(string resourceGroupName, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + // Send request + Microsoft.Rest.Azure.AzureOperationResponse _response = await BeginDeleteWithHttpMessagesAsync( + resourceGroupName, customHeaders, cancellationToken); + return await this.Client.GetPostOrDeleteOperationResultAsync(_response, customHeaders, cancellationToken); + } + + /// + /// Delete resource group. + /// + /// + /// The name of the resource group to be deleted. The name is case insensitive. + /// + /// + /// 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 + /// + /// + /// A response object containing the response body and response headers. + /// + public async System.Threading.Tasks.Task BeginDeleteWithHttpMessagesAsync(string resourceGroupName, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + if (resourceGroupName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "resourceGroupName"); + } + if (resourceGroupName != null) + { + if (!System.Text.RegularExpressions.Regex.IsMatch(resourceGroupName, "^[-\\w\\._]+$")) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.Pattern, "resourceGroupName", "^[-\\w\\._]+$"); + } + } + if (this.Client.ApiVersion == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.ApiVersion"); + } + if (this.Client.SubscriptionId == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.SubscriptionId"); + } + // 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("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}").ToString(); + _url = _url.Replace("{resourceGroupName}", System.Uri.EscapeDataString(resourceGroupName)); + _url = _url.Replace("{subscriptionId}", System.Uri.EscapeDataString(this.Client.SubscriptionId)); + System.Collections.Generic.List _queryParameters = new System.Collections.Generic.List(); + if (this.Client.ApiVersion != null) + { + _queryParameters.Add(string.Format("api-version={0}", System.Uri.EscapeDataString(this.Client.ApiVersion))); + } + if (_queryParameters.Count > 0) + { + _url += "?" + string.Join("&", _queryParameters); + } + // Create HTTP transport objects + System.Net.Http.HttpRequestMessage _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 != 200) + { + var ex = new Microsoft.Rest.Azure.CloudException(string.Format("Operation returned an invalid status code '{0}'", _statusCode)); + if (_httpResponse.Content != null) { + _responseContent = await _httpResponse.Content.ReadAsStringAsync().ConfigureAwait(false); + } + else { + _responseContent = string.Empty; + } + ex.Request = new Microsoft.Rest.HttpRequestMessageWrapper(_httpRequest, _requestContent); + ex.Response = new Microsoft.Rest.HttpResponseMessageWrapper(_httpResponse, _responseContent); + if (_httpResponse.Headers.Contains("x-ms-request-id")) + { + ex.RequestId = _httpResponse.Headers.GetValues("x-ms-request-id").FirstOrDefault(); + } + 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(); + } + if (_shouldTrace) + { + Microsoft.Rest.ServiceClientTracing.Exit(_invocationId, _result); + } + return _result; + } + + /// + /// Get a resource group. + /// + /// + /// The name of the resource group to get. The name is case insensitive. + /// + /// + /// 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 + /// + /// + /// A response object containing the response body and response headers. + /// + public async System.Threading.Tasks.Task> GetWithHttpMessagesAsync(string resourceGroupName, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + if (resourceGroupName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "resourceGroupName"); + } + if (resourceGroupName != null) + { + if (!System.Text.RegularExpressions.Regex.IsMatch(resourceGroupName, "^[-\\w\\._]+$")) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.Pattern, "resourceGroupName", "^[-\\w\\._]+$"); + } + } + if (this.Client.ApiVersion == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.ApiVersion"); + } + if (this.Client.SubscriptionId == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.SubscriptionId"); + } + // 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("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}").ToString(); + _url = _url.Replace("{resourceGroupName}", System.Uri.EscapeDataString(resourceGroupName)); + _url = _url.Replace("{subscriptionId}", System.Uri.EscapeDataString(this.Client.SubscriptionId)); + System.Collections.Generic.List _queryParameters = new System.Collections.Generic.List(); + if (this.Client.ApiVersion != null) + { + _queryParameters.Add(string.Format("api-version={0}", System.Uri.EscapeDataString(this.Client.ApiVersion))); + } + if (_queryParameters.Count > 0) + { + _url += "?" + string.Join("&", _queryParameters); + } + // Create HTTP transport objects + System.Net.Http.HttpRequestMessage _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); + CloudError _errorBody = Microsoft.Rest.Serialization.SafeJsonConvert.DeserializeObject(_responseContent, this.Client.DeserializationSettings); + if (_errorBody != null) + { + ex = new Microsoft.Rest.Azure.CloudException(_errorBody.Message); + 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 (_httpResponse.Headers.Contains("x-ms-request-id")) + { + ex.RequestId = _httpResponse.Headers.GetValues("x-ms-request-id").FirstOrDefault(); + } + 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; + } + + /// + /// Resource groups can be updated through a simple PATCH operation to a group + /// address. The format of the request is the same as that for creating a + /// resource groups, though if a field is unspecified current value will be + /// carried over. + /// + /// + /// The name of the resource group to be created or updated. The name is case + /// insensitive. + /// + /// + /// Parameters supplied to the update state resource group service 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 + /// + /// + /// A response object containing the response body and response headers. + /// + public async System.Threading.Tasks.Task> PatchWithHttpMessagesAsync(string resourceGroupName, ResourceGroupInner parameters, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + if (resourceGroupName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "resourceGroupName"); + } + if (resourceGroupName != null) + { + if (!System.Text.RegularExpressions.Regex.IsMatch(resourceGroupName, "^[-\\w\\._]+$")) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.Pattern, "resourceGroupName", "^[-\\w\\._]+$"); + } + } + if (parameters == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "parameters"); + } + if (this.Client.ApiVersion == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.ApiVersion"); + } + if (this.Client.SubscriptionId == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.SubscriptionId"); + } + // 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("parameters", parameters); + tracingParameters.Add("cancellationToken", cancellationToken); + Microsoft.Rest.ServiceClientTracing.Enter(_invocationId, this, "Patch", tracingParameters); + } + // Construct URL + var _baseUrl = this.Client.BaseUri.AbsoluteUri; + var _url = new System.Uri(new System.Uri(_baseUrl + (_baseUrl.EndsWith("/") ? "" : "/")), "subscriptions/{subscriptionId}/resourcegroups/{resourceGroupName}").ToString(); + _url = _url.Replace("{resourceGroupName}", System.Uri.EscapeDataString(resourceGroupName)); + _url = _url.Replace("{subscriptionId}", System.Uri.EscapeDataString(this.Client.SubscriptionId)); + System.Collections.Generic.List _queryParameters = new System.Collections.Generic.List(); + if (this.Client.ApiVersion != null) + { + _queryParameters.Add(string.Format("api-version={0}", System.Uri.EscapeDataString(this.Client.ApiVersion))); + } + if (_queryParameters.Count > 0) + { + _url += "?" + string.Join("&", _queryParameters); + } + // Create HTTP transport objects + System.Net.Http.HttpRequestMessage _httpRequest = new System.Net.Http.HttpRequestMessage(); + System.Net.Http.HttpResponseMessage _httpResponse = null; + _httpRequest.Method = new System.Net.Http.HttpMethod("PATCH"); + _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) + { + 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); + CloudError _errorBody = Microsoft.Rest.Serialization.SafeJsonConvert.DeserializeObject(_responseContent, this.Client.DeserializationSettings); + if (_errorBody != null) + { + ex = new Microsoft.Rest.Azure.CloudException(_errorBody.Message); + 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 (_httpResponse.Headers.Contains("x-ms-request-id")) + { + ex.RequestId = _httpResponse.Headers.GetValues("x-ms-request-id").FirstOrDefault(); + } + 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; + } + + /// + /// Captures the specified resource group as a template. + /// + /// + /// The name of the resource group to be created or updated. + /// + /// + /// Parameters supplied to the export template resource group 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 + /// + /// + /// A response object containing the response body and response headers. + /// + public async System.Threading.Tasks.Task> ExportTemplateWithHttpMessagesAsync(string resourceGroupName, ExportTemplateRequestInner parameters, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + if (resourceGroupName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "resourceGroupName"); + } + if (resourceGroupName != null) + { + if (!System.Text.RegularExpressions.Regex.IsMatch(resourceGroupName, "^[-\\w\\._]+$")) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.Pattern, "resourceGroupName", "^[-\\w\\._]+$"); + } + } + if (parameters == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "parameters"); + } + if (this.Client.ApiVersion == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.ApiVersion"); + } + if (this.Client.SubscriptionId == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.SubscriptionId"); + } + // 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("parameters", parameters); + tracingParameters.Add("cancellationToken", cancellationToken); + Microsoft.Rest.ServiceClientTracing.Enter(_invocationId, this, "ExportTemplate", tracingParameters); + } + // Construct URL + var _baseUrl = this.Client.BaseUri.AbsoluteUri; + var _url = new System.Uri(new System.Uri(_baseUrl + (_baseUrl.EndsWith("/") ? "" : "/")), "subscriptions/{subscriptionId}/resourcegroups/{resourceGroupName}/exportTemplate").ToString(); + _url = _url.Replace("{resourceGroupName}", System.Uri.EscapeDataString(resourceGroupName)); + _url = _url.Replace("{subscriptionId}", System.Uri.EscapeDataString(this.Client.SubscriptionId)); + System.Collections.Generic.List _queryParameters = new System.Collections.Generic.List(); + if (this.Client.ApiVersion != null) + { + _queryParameters.Add(string.Format("api-version={0}", System.Uri.EscapeDataString(this.Client.ApiVersion))); + } + if (_queryParameters.Count > 0) + { + _url += "?" + string.Join("&", _queryParameters); + } + // Create HTTP transport objects + System.Net.Http.HttpRequestMessage _httpRequest = new System.Net.Http.HttpRequestMessage(); + System.Net.Http.HttpResponseMessage _httpResponse = null; + _httpRequest.Method = new System.Net.Http.HttpMethod("POST"); + _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) + { + 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); + CloudError _errorBody = Microsoft.Rest.Serialization.SafeJsonConvert.DeserializeObject(_responseContent, this.Client.DeserializationSettings); + if (_errorBody != null) + { + ex = new Microsoft.Rest.Azure.CloudException(_errorBody.Message); + 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 (_httpResponse.Headers.Contains("x-ms-request-id")) + { + ex.RequestId = _httpResponse.Headers.GetValues("x-ms-request-id").FirstOrDefault(); + } + 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 a collection of resource groups. + /// + /// + /// OData parameters to apply to the 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 + /// + /// + /// A response object containing the response body and response headers. + /// + public async System.Threading.Tasks.Task>> ListWithHttpMessagesAsync(Microsoft.Rest.Azure.OData.ODataQuery odataQuery = default(Microsoft.Rest.Azure.OData.ODataQuery), System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + if (this.Client.ApiVersion == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.ApiVersion"); + } + if (this.Client.SubscriptionId == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.SubscriptionId"); + } + // 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("odataQuery", odataQuery); + 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").ToString(); + _url = _url.Replace("{subscriptionId}", System.Uri.EscapeDataString(this.Client.SubscriptionId)); + System.Collections.Generic.List _queryParameters = new System.Collections.Generic.List(); + if (odataQuery != null) + { + var _odataFilter = odataQuery.ToString(); + if (!string.IsNullOrEmpty(_odataFilter)) + { + _queryParameters.Add(_odataFilter); + } + } + if (this.Client.ApiVersion != null) + { + _queryParameters.Add(string.Format("api-version={0}", System.Uri.EscapeDataString(this.Client.ApiVersion))); + } + if (_queryParameters.Count > 0) + { + _url += "?" + string.Join("&", _queryParameters); + } + // Create HTTP transport objects + System.Net.Http.HttpRequestMessage _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); + CloudError _errorBody = Microsoft.Rest.Serialization.SafeJsonConvert.DeserializeObject(_responseContent, this.Client.DeserializationSettings); + if (_errorBody != null) + { + ex = new Microsoft.Rest.Azure.CloudException(_errorBody.Message); + 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 (_httpResponse.Headers.Contains("x-ms-request-id")) + { + ex.RequestId = _httpResponse.Headers.GetValues("x-ms-request-id").FirstOrDefault(); + } + 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; + } + + /// + /// Get all of the resources under a subscription. + /// + /// + /// 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 + /// + /// + /// A response object containing the response body and response headers. + /// + public async System.Threading.Tasks.Task>> ListResourcesNextWithHttpMessagesAsync(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, "ListResourcesNext", 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 += "?" + string.Join("&", _queryParameters); + } + // Create HTTP transport objects + System.Net.Http.HttpRequestMessage _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); + CloudError _errorBody = Microsoft.Rest.Serialization.SafeJsonConvert.DeserializeObject(_responseContent, this.Client.DeserializationSettings); + if (_errorBody != null) + { + ex = new Microsoft.Rest.Azure.CloudException(_errorBody.Message); + 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 (_httpResponse.Headers.Contains("x-ms-request-id")) + { + ex.RequestId = _httpResponse.Headers.GetValues("x-ms-request-id").FirstOrDefault(); + } + 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 a collection of resource groups. + /// + /// + /// 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 + /// + /// + /// 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 += "?" + string.Join("&", _queryParameters); + } + // Create HTTP transport objects + System.Net.Http.HttpRequestMessage _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); + CloudError _errorBody = Microsoft.Rest.Serialization.SafeJsonConvert.DeserializeObject(_responseContent, this.Client.DeserializationSettings); + if (_errorBody != null) + { + ex = new Microsoft.Rest.Azure.CloudException(_errorBody.Message); + 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 (_httpResponse.Headers.Contains("x-ms-request-id")) + { + ex.RequestId = _httpResponse.Headers.GetValues("x-ms-request-id").FirstOrDefault(); + } + 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; + } + + } +} diff --git a/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/ResourceGroupsOperationsExtensions.cs b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/ResourceGroupsOperationsExtensions.cs new file mode 100644 index 000000000..3eae9be6e --- /dev/null +++ b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/ResourceGroupsOperationsExtensions.cs @@ -0,0 +1,423 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.ResourceManager +{ + using System.Threading.Tasks; + using Microsoft.Rest.Azure; + using Models; + + /// + /// Extension methods for ResourceGroupsOperations. + /// + public static partial class ResourceGroupsOperationsExtensions + { + /// + /// Get all of the resources under a subscription. + /// + /// + /// The operations group for this extension method. + /// + /// + /// Query parameters. If null is passed returns all resource groups. + /// + /// + /// OData parameters to apply to the operation. + /// + public static Microsoft.Rest.Azure.IPage ListResources(this IResourceGroupsOperations operations, string resourceGroupName, Microsoft.Rest.Azure.OData.ODataQuery odataQuery = default(Microsoft.Rest.Azure.OData.ODataQuery)) + { + return System.Threading.Tasks.Task.Factory.StartNew(s => ((IResourceGroupsOperations)s).ListResourcesAsync(resourceGroupName, odataQuery), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// Get all of the resources under a subscription. + /// + /// + /// The operations group for this extension method. + /// + /// + /// Query parameters. If null is passed returns all resource groups. + /// + /// + /// OData parameters to apply to the operation. + /// + /// + /// The cancellation token. + /// + public static async Task> ListResourcesAsync(this IResourceGroupsOperations operations, string resourceGroupName, Microsoft.Rest.Azure.OData.ODataQuery odataQuery = default(Microsoft.Rest.Azure.OData.ODataQuery), System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + using (var _result = await operations.ListResourcesWithHttpMessagesAsync(resourceGroupName, odataQuery, null, cancellationToken).ConfigureAwait(false)) + { + return _result.Body; + } + } + + /// + /// Checks whether resource group exists. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group to check. The name is case insensitive. + /// + public static bool CheckExistence(this IResourceGroupsOperations operations, string resourceGroupName) + { + return System.Threading.Tasks.Task.Factory.StartNew(s => ((IResourceGroupsOperations)s).CheckExistenceAsync(resourceGroupName), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// Checks whether resource group exists. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group to check. The name is case insensitive. + /// + /// + /// The cancellation token. + /// + public static async System.Threading.Tasks.Task CheckExistenceAsync(this IResourceGroupsOperations operations, string resourceGroupName, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + using (var _result = await operations.CheckExistenceWithHttpMessagesAsync(resourceGroupName, null, cancellationToken).ConfigureAwait(false)) + { + return _result.Body; + } + } + + /// + /// Create a resource group. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group to be created or updated. + /// + /// + /// Parameters supplied to the create or update resource group service + /// operation. + /// + public static ResourceGroupInner CreateOrUpdate(this IResourceGroupsOperations operations, string resourceGroupName, ResourceGroupInner parameters) + { + return System.Threading.Tasks.Task.Factory.StartNew(s => ((IResourceGroupsOperations)s).CreateOrUpdateAsync(resourceGroupName, parameters), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// Create a resource group. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group to be created or updated. + /// + /// + /// Parameters supplied to the create or update resource group service + /// operation. + /// + /// + /// The cancellation token. + /// + public static async System.Threading.Tasks.Task CreateOrUpdateAsync(this IResourceGroupsOperations operations, string resourceGroupName, ResourceGroupInner parameters, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + using (var _result = await operations.CreateOrUpdateWithHttpMessagesAsync(resourceGroupName, parameters, null, cancellationToken).ConfigureAwait(false)) + { + return _result.Body; + } + } + + /// + /// Delete resource group. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group to be deleted. The name is case insensitive. + /// + public static void Delete(this IResourceGroupsOperations operations, string resourceGroupName) + { + System.Threading.Tasks.Task.Factory.StartNew(s => ((IResourceGroupsOperations)s).DeleteAsync(resourceGroupName), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// Delete resource group. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group to be deleted. The name is case insensitive. + /// + /// + /// The cancellation token. + /// + public static async System.Threading.Tasks.Task DeleteAsync(this IResourceGroupsOperations operations, string resourceGroupName, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + await operations.DeleteWithHttpMessagesAsync(resourceGroupName, null, cancellationToken).ConfigureAwait(false); + } + + /// + /// Delete resource group. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group to be deleted. The name is case insensitive. + /// + public static void BeginDelete(this IResourceGroupsOperations operations, string resourceGroupName) + { + System.Threading.Tasks.Task.Factory.StartNew(s => ((IResourceGroupsOperations)s).BeginDeleteAsync(resourceGroupName), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// Delete resource group. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group to be deleted. The name is case insensitive. + /// + /// + /// The cancellation token. + /// + public static async System.Threading.Tasks.Task BeginDeleteAsync(this IResourceGroupsOperations operations, string resourceGroupName, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + await operations.BeginDeleteWithHttpMessagesAsync(resourceGroupName, null, cancellationToken).ConfigureAwait(false); + } + + /// + /// Get a resource group. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group to get. The name is case insensitive. + /// + public static ResourceGroupInner Get(this IResourceGroupsOperations operations, string resourceGroupName) + { + return System.Threading.Tasks.Task.Factory.StartNew(s => ((IResourceGroupsOperations)s).GetAsync(resourceGroupName), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// Get a resource group. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group to get. The name is case insensitive. + /// + /// + /// The cancellation token. + /// + public static async System.Threading.Tasks.Task GetAsync(this IResourceGroupsOperations operations, string resourceGroupName, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + using (var _result = await operations.GetWithHttpMessagesAsync(resourceGroupName, null, cancellationToken).ConfigureAwait(false)) + { + return _result.Body; + } + } + + /// + /// Resource groups can be updated through a simple PATCH operation to a group + /// address. The format of the request is the same as that for creating a + /// resource groups, though if a field is unspecified current value will be + /// carried over. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group to be created or updated. The name is case + /// insensitive. + /// + /// + /// Parameters supplied to the update state resource group service operation. + /// + public static ResourceGroupInner Patch(this IResourceGroupsOperations operations, string resourceGroupName, ResourceGroupInner parameters) + { + return System.Threading.Tasks.Task.Factory.StartNew(s => ((IResourceGroupsOperations)s).PatchAsync(resourceGroupName, parameters), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// Resource groups can be updated through a simple PATCH operation to a group + /// address. The format of the request is the same as that for creating a + /// resource groups, though if a field is unspecified current value will be + /// carried over. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group to be created or updated. The name is case + /// insensitive. + /// + /// + /// Parameters supplied to the update state resource group service operation. + /// + /// + /// The cancellation token. + /// + public static async System.Threading.Tasks.Task PatchAsync(this IResourceGroupsOperations operations, string resourceGroupName, ResourceGroupInner parameters, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + using (var _result = await operations.PatchWithHttpMessagesAsync(resourceGroupName, parameters, null, cancellationToken).ConfigureAwait(false)) + { + return _result.Body; + } + } + + /// + /// Captures the specified resource group as a template. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group to be created or updated. + /// + /// + /// Parameters supplied to the export template resource group operation. + /// + public static ResourceGroupExportResultInner ExportTemplate(this IResourceGroupsOperations operations, string resourceGroupName, ExportTemplateRequestInner parameters) + { + return System.Threading.Tasks.Task.Factory.StartNew(s => ((IResourceGroupsOperations)s).ExportTemplateAsync(resourceGroupName, parameters), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// Captures the specified resource group as a template. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group to be created or updated. + /// + /// + /// Parameters supplied to the export template resource group operation. + /// + /// + /// The cancellation token. + /// + public static async System.Threading.Tasks.Task ExportTemplateAsync(this IResourceGroupsOperations operations, string resourceGroupName, ExportTemplateRequestInner parameters, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + using (var _result = await operations.ExportTemplateWithHttpMessagesAsync(resourceGroupName, parameters, null, cancellationToken).ConfigureAwait(false)) + { + return _result.Body; + } + } + + /// + /// Gets a collection of resource groups. + /// + /// + /// The operations group for this extension method. + /// + /// + /// OData parameters to apply to the operation. + /// + public static Microsoft.Rest.Azure.IPage List(this IResourceGroupsOperations operations, Microsoft.Rest.Azure.OData.ODataQuery odataQuery = default(Microsoft.Rest.Azure.OData.ODataQuery)) + { + return System.Threading.Tasks.Task.Factory.StartNew(s => ((IResourceGroupsOperations)s).ListAsync(odataQuery), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// Gets a collection of resource groups. + /// + /// + /// The operations group for this extension method. + /// + /// + /// OData parameters to apply to the operation. + /// + /// + /// The cancellation token. + /// + public static async Task> ListAsync(this IResourceGroupsOperations operations, Microsoft.Rest.Azure.OData.ODataQuery odataQuery = default(Microsoft.Rest.Azure.OData.ODataQuery), System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + using (var _result = await operations.ListWithHttpMessagesAsync(odataQuery, null, cancellationToken).ConfigureAwait(false)) + { + return _result.Body; + } + } + + /// + /// Get all of the resources under a subscription. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The NextLink from the previous successful call to List operation. + /// + public static Microsoft.Rest.Azure.IPage ListResourcesNext(this IResourceGroupsOperations operations, string nextPageLink) + { + return System.Threading.Tasks.Task.Factory.StartNew(s => ((IResourceGroupsOperations)s).ListResourcesNextAsync(nextPageLink), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// Get all of the resources under a subscription. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The NextLink from the previous successful call to List operation. + /// + /// + /// The cancellation token. + /// + public static async Task> ListResourcesNextAsync(this IResourceGroupsOperations operations, string nextPageLink, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + using (var _result = await operations.ListResourcesNextWithHttpMessagesAsync(nextPageLink, null, cancellationToken).ConfigureAwait(false)) + { + return _result.Body; + } + } + + /// + /// Gets a collection of resource groups. + /// + /// + /// 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 IResourceGroupsOperations operations, string nextPageLink) + { + return System.Threading.Tasks.Task.Factory.StartNew(s => ((IResourceGroupsOperations)s).ListNextAsync(nextPageLink), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// Gets a collection of resource groups. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The NextLink from the previous successful call to List operation. + /// + /// + /// The cancellation token. + /// + public static async Task> ListNextAsync(this IResourceGroupsOperations 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/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/ResourceManagementClient.cs b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/ResourceManagementClient.cs new file mode 100644 index 000000000..e50189527 --- /dev/null +++ b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/ResourceManagementClient.cs @@ -0,0 +1,337 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.ResourceManager +{ + using System.Linq; + using Microsoft.Rest.Azure; + using Models; + + public partial class ResourceManagementClient : Microsoft.Rest.ServiceClient, IResourceManagementClient, IAzureClient + { + /// + /// The base URI of the service. + /// + public System.Uri BaseUri { get; set; } + + /// + /// Gets or sets json serialization settings. + /// + public Newtonsoft.Json.JsonSerializerSettings SerializationSettings { get; private set; } + + /// + /// Gets or sets json deserialization settings. + /// + public Newtonsoft.Json.JsonSerializerSettings DeserializationSettings { get; private set; } + + /// + /// Credentials needed for the client to connect to Azure. + /// + public Microsoft.Rest.ServiceClientCredentials Credentials { get; private set; } + + /// + /// Gets subscription credentials which uniquely identify Microsoft Azure + /// subscription. The subscription ID forms part of the URI for every service + /// call. + /// + public string SubscriptionId { get; set; } + + /// + /// Client Api Version. + /// + public string ApiVersion { get; private set; } + + /// + /// Gets or sets the preferred language for the response. + /// + public string AcceptLanguage { get; set; } + + /// + /// Gets or sets the retry timeout in seconds for Long Running Operations. + /// Default value is 30. + /// + public int? LongRunningOperationRetryTimeout { get; set; } + + /// + /// When set to true a unique x-ms-client-request-id value is generated and + /// included in each request. Default is true. + /// + public bool? GenerateClientRequestId { get; set; } + + /// + /// Gets the IDeploymentsOperations. + /// + public virtual IDeploymentsOperations Deployments { get; private set; } + + /// + /// Gets the IProvidersOperations. + /// + public virtual IProvidersOperations Providers { get; private set; } + + /// + /// Gets the IResourceGroupsOperations. + /// + public virtual IResourceGroupsOperations ResourceGroups { get; private set; } + + /// + /// Gets the IResourcesOperations. + /// + public virtual IResourcesOperations Resources { get; private set; } + + /// + /// Gets the ITagsOperations. + /// + public virtual ITagsOperations Tags { get; private set; } + + /// + /// Gets the IDeploymentOperationsOperations. + /// + public virtual IDeploymentOperationsOperations DeploymentOperations { get; private set; } + + /// + /// Initializes a new instance of the ResourceManagementClient class. + /// + /// + /// Optional. The delegating handlers to add to the http client pipeline. + /// + protected ResourceManagementClient(params System.Net.Http.DelegatingHandler[] handlers) : base(handlers) + { + this.Initialize(); + } + + /// + /// Initializes a new instance of the ResourceManagementClient class. + /// + /// + /// Optional. The http client handler used to handle http transport. + /// + /// + /// Optional. The delegating handlers to add to the http client pipeline. + /// + protected ResourceManagementClient(System.Net.Http.HttpClientHandler rootHandler, params System.Net.Http.DelegatingHandler[] handlers) : base(rootHandler, handlers) + { + this.Initialize(); + } + + /// + /// Initializes a new instance of the ResourceManagementClient class. + /// + /// + /// Optional. The base URI of the service. + /// + /// + /// Optional. The delegating handlers to add to the http client pipeline. + /// + /// + /// Thrown when a required parameter is null + /// + protected ResourceManagementClient(System.Uri baseUri, params System.Net.Http.DelegatingHandler[] handlers) : this(handlers) + { + if (baseUri == null) + { + throw new System.ArgumentNullException("baseUri"); + } + this.BaseUri = baseUri; + } + + /// + /// Initializes a new instance of the ResourceManagementClient class. + /// + /// + /// Optional. The base URI of the service. + /// + /// + /// Optional. The http client handler used to handle http transport. + /// + /// + /// Optional. The delegating handlers to add to the http client pipeline. + /// + /// + /// Thrown when a required parameter is null + /// + protected ResourceManagementClient(System.Uri baseUri, System.Net.Http.HttpClientHandler rootHandler, params System.Net.Http.DelegatingHandler[] handlers) : this(rootHandler, handlers) + { + if (baseUri == null) + { + throw new System.ArgumentNullException("baseUri"); + } + this.BaseUri = baseUri; + } + + /// + /// Initializes a new instance of the ResourceManagementClient class. + /// + /// + /// Required. Credentials needed for the client to connect to Azure. + /// + /// + /// Optional. The delegating handlers to add to the http client pipeline. + /// + /// + /// Thrown when a required parameter is null + /// + public ResourceManagementClient(Microsoft.Rest.ServiceClientCredentials credentials, params System.Net.Http.DelegatingHandler[] handlers) : this(handlers) + { + if (credentials == null) + { + throw new System.ArgumentNullException("credentials"); + } + this.Credentials = credentials; + if (this.Credentials != null) + { + this.Credentials.InitializeServiceClient(this); + } + } + + /// + /// Initializes a new instance of the ResourceManagementClient class. + /// + /// + /// Required. Credentials needed for the client to connect to Azure. + /// + /// + /// Optional. The http client handler used to handle http transport. + /// + /// + /// Optional. The delegating handlers to add to the http client pipeline. + /// + /// + /// Thrown when a required parameter is null + /// + public ResourceManagementClient(Microsoft.Rest.ServiceClientCredentials credentials, System.Net.Http.HttpClientHandler rootHandler, params System.Net.Http.DelegatingHandler[] handlers) : this(rootHandler, handlers) + { + if (credentials == null) + { + throw new System.ArgumentNullException("credentials"); + } + this.Credentials = credentials; + if (this.Credentials != null) + { + this.Credentials.InitializeServiceClient(this); + } + } + + /// + /// Initializes a new instance of the ResourceManagementClient class. + /// + /// + /// Optional. The base URI of the service. + /// + /// + /// Required. Credentials needed for the client to connect to Azure. + /// + /// + /// Optional. The delegating handlers to add to the http client pipeline. + /// + /// + /// Thrown when a required parameter is null + /// + public ResourceManagementClient(System.Uri baseUri, Microsoft.Rest.ServiceClientCredentials credentials, params System.Net.Http.DelegatingHandler[] handlers) : this(handlers) + { + if (baseUri == null) + { + throw new System.ArgumentNullException("baseUri"); + } + if (credentials == null) + { + throw new System.ArgumentNullException("credentials"); + } + this.BaseUri = baseUri; + this.Credentials = credentials; + if (this.Credentials != null) + { + this.Credentials.InitializeServiceClient(this); + } + } + + /// + /// Initializes a new instance of the ResourceManagementClient class. + /// + /// + /// Optional. The base URI of the service. + /// + /// + /// Required. Credentials needed for the client to connect to Azure. + /// + /// + /// Optional. The http client handler used to handle http transport. + /// + /// + /// Optional. The delegating handlers to add to the http client pipeline. + /// + /// + /// Thrown when a required parameter is null + /// + public ResourceManagementClient(System.Uri baseUri, Microsoft.Rest.ServiceClientCredentials credentials, System.Net.Http.HttpClientHandler rootHandler, params System.Net.Http.DelegatingHandler[] handlers) : this(rootHandler, handlers) + { + if (baseUri == null) + { + throw new System.ArgumentNullException("baseUri"); + } + if (credentials == null) + { + throw new System.ArgumentNullException("credentials"); + } + this.BaseUri = baseUri; + this.Credentials = credentials; + if (this.Credentials != null) + { + this.Credentials.InitializeServiceClient(this); + } + } + + /// + /// An optional partial-method to perform custom initialization. + /// + partial void CustomInitialize(); + /// + /// Initializes client properties. + /// + private void Initialize() + { + this.Deployments = new DeploymentsOperations(this); + this.Providers = new ProvidersOperations(this); + this.ResourceGroups = new ResourceGroupsOperations(this); + this.Resources = new ResourcesOperations(this); + this.Tags = new TagsOperations(this); + this.DeploymentOperations = new DeploymentOperationsOperations(this); + this.BaseUri = new System.Uri("https://management.azure.com"); + this.ApiVersion = "2016-02-01"; + this.AcceptLanguage = "en-US"; + this.LongRunningOperationRetryTimeout = 30; + this.GenerateClientRequestId = true; + SerializationSettings = new Newtonsoft.Json.JsonSerializerSettings + { + Formatting = Newtonsoft.Json.Formatting.Indented, + DateFormatHandling = Newtonsoft.Json.DateFormatHandling.IsoDateFormat, + DateTimeZoneHandling = Newtonsoft.Json.DateTimeZoneHandling.Utc, + NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore, + ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Serialize, + ContractResolver = new Microsoft.Rest.Serialization.ReadOnlyJsonContractResolver(), + Converters = new System.Collections.Generic.List + { + new Microsoft.Rest.Serialization.Iso8601TimeSpanConverter() + } + }; + DeserializationSettings = new Newtonsoft.Json.JsonSerializerSettings + { + DateFormatHandling = Newtonsoft.Json.DateFormatHandling.IsoDateFormat, + DateTimeZoneHandling = Newtonsoft.Json.DateTimeZoneHandling.Utc, + NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore, + ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Serialize, + ContractResolver = new Microsoft.Rest.Serialization.ReadOnlyJsonContractResolver(), + Converters = new System.Collections.Generic.List + { + new Microsoft.Rest.Serialization.Iso8601TimeSpanConverter() + } + }; + CustomInitialize(); + DeserializationSettings.Converters.Add(new Microsoft.Rest.Azure.CloudErrorJsonConverter()); + } + } +} diff --git a/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/ResourcesOperations.cs b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/ResourcesOperations.cs new file mode 100644 index 000000000..10b207ced --- /dev/null +++ b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/ResourcesOperations.cs @@ -0,0 +1,1492 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.ResourceManager +{ + using System.Linq; + using Microsoft.Rest; + using Microsoft.Rest.Azure; + using Models; + + /// + /// ResourcesOperations operations. + /// + internal partial class ResourcesOperations : Microsoft.Rest.IServiceOperations, IResourcesOperations + { + /// + /// Initializes a new instance of the ResourcesOperations class. + /// + /// + /// Reference to the service client. + /// + /// + /// Thrown when a required parameter is null + /// + internal ResourcesOperations(ResourceManagementClient client) + { + if (client == null) + { + throw new System.ArgumentNullException("client"); + } + this.Client = client; + } + + /// + /// Gets a reference to the ResourceManagementClient + /// + public ResourceManagementClient Client { get; private set; } + + /// + /// Move resources from one resource group to another. The resources being + /// moved should all be in the same resource group. + /// + /// + /// Source resource group name. + /// + /// + /// move resources' parameters. + /// + /// + /// The headers that will be added to request. + /// + /// + /// The cancellation token. + /// + public async System.Threading.Tasks.Task MoveResourcesWithHttpMessagesAsync(string sourceResourceGroupName, ResourcesMoveInfoInner parameters, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + // Send request + Microsoft.Rest.Azure.AzureOperationResponse _response = await BeginMoveResourcesWithHttpMessagesAsync( + sourceResourceGroupName, parameters, customHeaders, cancellationToken); + return await this.Client.GetPostOrDeleteOperationResultAsync(_response, customHeaders, cancellationToken); + } + + /// + /// Move resources from one resource group to another. The resources being + /// moved should all be in the same resource group. + /// + /// + /// Source resource group name. + /// + /// + /// move resources' parameters. + /// + /// + /// 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 + /// + /// + /// A response object containing the response body and response headers. + /// + public async System.Threading.Tasks.Task BeginMoveResourcesWithHttpMessagesAsync(string sourceResourceGroupName, ResourcesMoveInfoInner parameters, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + if (sourceResourceGroupName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "sourceResourceGroupName"); + } + if (sourceResourceGroupName != null) + { + if (!System.Text.RegularExpressions.Regex.IsMatch(sourceResourceGroupName, "^[-\\w\\._]+$")) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.Pattern, "sourceResourceGroupName", "^[-\\w\\._]+$"); + } + } + if (parameters == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "parameters"); + } + if (this.Client.ApiVersion == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.ApiVersion"); + } + if (this.Client.SubscriptionId == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.SubscriptionId"); + } + // 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("sourceResourceGroupName", sourceResourceGroupName); + tracingParameters.Add("parameters", parameters); + tracingParameters.Add("cancellationToken", cancellationToken); + Microsoft.Rest.ServiceClientTracing.Enter(_invocationId, this, "BeginMoveResources", tracingParameters); + } + // Construct URL + var _baseUrl = this.Client.BaseUri.AbsoluteUri; + var _url = new System.Uri(new System.Uri(_baseUrl + (_baseUrl.EndsWith("/") ? "" : "/")), "subscriptions/{subscriptionId}/resourceGroups/{sourceResourceGroupName}/moveResources").ToString(); + _url = _url.Replace("{sourceResourceGroupName}", System.Uri.EscapeDataString(sourceResourceGroupName)); + _url = _url.Replace("{subscriptionId}", System.Uri.EscapeDataString(this.Client.SubscriptionId)); + System.Collections.Generic.List _queryParameters = new System.Collections.Generic.List(); + if (this.Client.ApiVersion != null) + { + _queryParameters.Add(string.Format("api-version={0}", System.Uri.EscapeDataString(this.Client.ApiVersion))); + } + if (_queryParameters.Count > 0) + { + _url += "?" + string.Join("&", _queryParameters); + } + // Create HTTP transport objects + System.Net.Http.HttpRequestMessage _httpRequest = new System.Net.Http.HttpRequestMessage(); + System.Net.Http.HttpResponseMessage _httpResponse = null; + _httpRequest.Method = new System.Net.Http.HttpMethod("POST"); + _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 != 202 && (int)_statusCode != 204) + { + var ex = new Microsoft.Rest.Azure.CloudException(string.Format("Operation returned an invalid status code '{0}'", _statusCode)); + if (_httpResponse.Content != null) { + _responseContent = await _httpResponse.Content.ReadAsStringAsync().ConfigureAwait(false); + } + else { + _responseContent = string.Empty; + } + ex.Request = new Microsoft.Rest.HttpRequestMessageWrapper(_httpRequest, _requestContent); + ex.Response = new Microsoft.Rest.HttpResponseMessageWrapper(_httpResponse, _responseContent); + if (_httpResponse.Headers.Contains("x-ms-request-id")) + { + ex.RequestId = _httpResponse.Headers.GetValues("x-ms-request-id").FirstOrDefault(); + } + 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(); + } + if (_shouldTrace) + { + Microsoft.Rest.ServiceClientTracing.Exit(_invocationId, _result); + } + return _result; + } + + /// + /// Get all of the resources under a subscription. + /// + /// + /// OData parameters to apply to the 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 + /// + /// + /// A response object containing the response body and response headers. + /// + public async System.Threading.Tasks.Task>> ListWithHttpMessagesAsync(Microsoft.Rest.Azure.OData.ODataQuery odataQuery = default(Microsoft.Rest.Azure.OData.ODataQuery), System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + if (this.Client.ApiVersion == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.ApiVersion"); + } + if (this.Client.SubscriptionId == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.SubscriptionId"); + } + // 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("odataQuery", odataQuery); + 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}/resources").ToString(); + _url = _url.Replace("{subscriptionId}", System.Uri.EscapeDataString(this.Client.SubscriptionId)); + System.Collections.Generic.List _queryParameters = new System.Collections.Generic.List(); + if (odataQuery != null) + { + var _odataFilter = odataQuery.ToString(); + if (!string.IsNullOrEmpty(_odataFilter)) + { + _queryParameters.Add(_odataFilter); + } + } + if (this.Client.ApiVersion != null) + { + _queryParameters.Add(string.Format("api-version={0}", System.Uri.EscapeDataString(this.Client.ApiVersion))); + } + if (_queryParameters.Count > 0) + { + _url += "?" + string.Join("&", _queryParameters); + } + // Create HTTP transport objects + System.Net.Http.HttpRequestMessage _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); + CloudError _errorBody = Microsoft.Rest.Serialization.SafeJsonConvert.DeserializeObject(_responseContent, this.Client.DeserializationSettings); + if (_errorBody != null) + { + ex = new Microsoft.Rest.Azure.CloudException(_errorBody.Message); + 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 (_httpResponse.Headers.Contains("x-ms-request-id")) + { + ex.RequestId = _httpResponse.Headers.GetValues("x-ms-request-id").FirstOrDefault(); + } + 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; + } + + /// + /// Checks whether resource exists. + /// + /// + /// The name of the resource group. The name is case insensitive. + /// + /// + /// Resource identity. + /// + /// + /// Resource identity. + /// + /// + /// Resource identity. + /// + /// + /// Resource identity. + /// + /// + /// + /// + /// 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 + /// + /// + /// A response object containing the response body and response headers. + /// + public async System.Threading.Tasks.Task> CheckExistenceWithHttpMessagesAsync(string resourceGroupName, string resourceProviderNamespace, string parentResourcePath, string resourceType, string resourceName, string apiVersion, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + if (resourceGroupName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "resourceGroupName"); + } + if (resourceGroupName != null) + { + if (!System.Text.RegularExpressions.Regex.IsMatch(resourceGroupName, "^[-\\w\\._]+$")) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.Pattern, "resourceGroupName", "^[-\\w\\._]+$"); + } + } + if (resourceProviderNamespace == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "resourceProviderNamespace"); + } + if (parentResourcePath == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "parentResourcePath"); + } + if (resourceType == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "resourceType"); + } + if (resourceName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "resourceName"); + } + if (apiVersion == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "apiVersion"); + } + if (this.Client.SubscriptionId == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.SubscriptionId"); + } + // 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("resourceProviderNamespace", resourceProviderNamespace); + tracingParameters.Add("parentResourcePath", parentResourcePath); + tracingParameters.Add("resourceType", resourceType); + tracingParameters.Add("resourceName", resourceName); + tracingParameters.Add("apiVersion", apiVersion); + tracingParameters.Add("cancellationToken", cancellationToken); + Microsoft.Rest.ServiceClientTracing.Enter(_invocationId, this, "CheckExistence", 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/{resourceProviderNamespace}/{parentResourcePath}/{resourceType}/{resourceName}").ToString(); + _url = _url.Replace("{resourceGroupName}", System.Uri.EscapeDataString(resourceGroupName)); + _url = _url.Replace("{resourceProviderNamespace}", System.Uri.EscapeDataString(resourceProviderNamespace)); + _url = _url.Replace("{parentResourcePath}", parentResourcePath); + _url = _url.Replace("{resourceType}", resourceType); + _url = _url.Replace("{resourceName}", System.Uri.EscapeDataString(resourceName)); + _url = _url.Replace("{subscriptionId}", System.Uri.EscapeDataString(this.Client.SubscriptionId)); + 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 += "?" + string.Join("&", _queryParameters); + } + // Create HTTP transport objects + System.Net.Http.HttpRequestMessage _httpRequest = new System.Net.Http.HttpRequestMessage(); + System.Net.Http.HttpResponseMessage _httpResponse = null; + _httpRequest.Method = new System.Net.Http.HttpMethod("HEAD"); + _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 != 204 && (int)_statusCode != 404) + { + 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); + CloudError _errorBody = Microsoft.Rest.Serialization.SafeJsonConvert.DeserializeObject(_responseContent, this.Client.DeserializationSettings); + if (_errorBody != null) + { + ex = new Microsoft.Rest.Azure.CloudException(_errorBody.Message); + 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 (_httpResponse.Headers.Contains("x-ms-request-id")) + { + ex.RequestId = _httpResponse.Headers.GetValues("x-ms-request-id").FirstOrDefault(); + } + 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; + _result.Body = (_statusCode == System.Net.HttpStatusCode.NoContent); + if (_httpResponse.Headers.Contains("x-ms-request-id")) + { + _result.RequestId = _httpResponse.Headers.GetValues("x-ms-request-id").FirstOrDefault(); + } + if (_shouldTrace) + { + Microsoft.Rest.ServiceClientTracing.Exit(_invocationId, _result); + } + return _result; + } + + /// + /// Delete resource and all of its resources. + /// + /// + /// The name of the resource group. The name is case insensitive. + /// + /// + /// Resource identity. + /// + /// + /// Resource identity. + /// + /// + /// Resource identity. + /// + /// + /// Resource identity. + /// + /// + /// + /// + /// 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 + /// + /// + /// A response object containing the response body and response headers. + /// + public async System.Threading.Tasks.Task DeleteWithHttpMessagesAsync(string resourceGroupName, string resourceProviderNamespace, string parentResourcePath, string resourceType, string resourceName, string apiVersion, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + if (resourceGroupName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "resourceGroupName"); + } + if (resourceGroupName != null) + { + if (!System.Text.RegularExpressions.Regex.IsMatch(resourceGroupName, "^[-\\w\\._]+$")) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.Pattern, "resourceGroupName", "^[-\\w\\._]+$"); + } + } + if (resourceProviderNamespace == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "resourceProviderNamespace"); + } + if (parentResourcePath == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "parentResourcePath"); + } + if (resourceType == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "resourceType"); + } + if (resourceName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "resourceName"); + } + if (apiVersion == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "apiVersion"); + } + if (this.Client.SubscriptionId == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.SubscriptionId"); + } + // 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("resourceProviderNamespace", resourceProviderNamespace); + tracingParameters.Add("parentResourcePath", parentResourcePath); + tracingParameters.Add("resourceType", resourceType); + tracingParameters.Add("resourceName", resourceName); + tracingParameters.Add("apiVersion", apiVersion); + tracingParameters.Add("cancellationToken", cancellationToken); + Microsoft.Rest.ServiceClientTracing.Enter(_invocationId, this, "Delete", 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/{resourceProviderNamespace}/{parentResourcePath}/{resourceType}/{resourceName}").ToString(); + _url = _url.Replace("{resourceGroupName}", System.Uri.EscapeDataString(resourceGroupName)); + _url = _url.Replace("{resourceProviderNamespace}", System.Uri.EscapeDataString(resourceProviderNamespace)); + _url = _url.Replace("{parentResourcePath}", parentResourcePath); + _url = _url.Replace("{resourceType}", resourceType); + _url = _url.Replace("{resourceName}", System.Uri.EscapeDataString(resourceName)); + _url = _url.Replace("{subscriptionId}", System.Uri.EscapeDataString(this.Client.SubscriptionId)); + 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 += "?" + string.Join("&", _queryParameters); + } + // Create HTTP transport objects + System.Net.Http.HttpRequestMessage _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 != 200 && (int)_statusCode != 204 && (int)_statusCode != 202) + { + var ex = new Microsoft.Rest.Azure.CloudException(string.Format("Operation returned an invalid status code '{0}'", _statusCode)); + if (_httpResponse.Content != null) { + _responseContent = await _httpResponse.Content.ReadAsStringAsync().ConfigureAwait(false); + } + else { + _responseContent = string.Empty; + } + ex.Request = new Microsoft.Rest.HttpRequestMessageWrapper(_httpRequest, _requestContent); + ex.Response = new Microsoft.Rest.HttpResponseMessageWrapper(_httpResponse, _responseContent); + if (_httpResponse.Headers.Contains("x-ms-request-id")) + { + ex.RequestId = _httpResponse.Headers.GetValues("x-ms-request-id").FirstOrDefault(); + } + 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(); + } + if (_shouldTrace) + { + Microsoft.Rest.ServiceClientTracing.Exit(_invocationId, _result); + } + return _result; + } + + /// + /// Create a resource. + /// + /// + /// The name of the resource group. The name is case insensitive. + /// + /// + /// Resource identity. + /// + /// + /// Resource identity. + /// + /// + /// Resource identity. + /// + /// + /// Resource identity. + /// + /// + /// + /// + /// Create or update resource parameters. + /// + /// + /// 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 + /// + /// + /// A response object containing the response body and response headers. + /// + public async System.Threading.Tasks.Task> CreateOrUpdateWithHttpMessagesAsync(string resourceGroupName, string resourceProviderNamespace, string parentResourcePath, string resourceType, string resourceName, string apiVersion, GenericResourceInner parameters, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + if (resourceGroupName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "resourceGroupName"); + } + if (resourceGroupName != null) + { + if (!System.Text.RegularExpressions.Regex.IsMatch(resourceGroupName, "^[-\\w\\._]+$")) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.Pattern, "resourceGroupName", "^[-\\w\\._]+$"); + } + } + if (resourceProviderNamespace == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "resourceProviderNamespace"); + } + if (parentResourcePath == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "parentResourcePath"); + } + if (resourceType == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "resourceType"); + } + if (resourceName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "resourceName"); + } + if (apiVersion == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "apiVersion"); + } + if (parameters == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "parameters"); + } + if (this.Client.SubscriptionId == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.SubscriptionId"); + } + // 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("resourceProviderNamespace", resourceProviderNamespace); + tracingParameters.Add("parentResourcePath", parentResourcePath); + tracingParameters.Add("resourceType", resourceType); + tracingParameters.Add("resourceName", resourceName); + tracingParameters.Add("apiVersion", apiVersion); + tracingParameters.Add("parameters", parameters); + tracingParameters.Add("cancellationToken", cancellationToken); + Microsoft.Rest.ServiceClientTracing.Enter(_invocationId, this, "CreateOrUpdate", 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/{resourceProviderNamespace}/{parentResourcePath}/{resourceType}/{resourceName}").ToString(); + _url = _url.Replace("{resourceGroupName}", System.Uri.EscapeDataString(resourceGroupName)); + _url = _url.Replace("{resourceProviderNamespace}", System.Uri.EscapeDataString(resourceProviderNamespace)); + _url = _url.Replace("{parentResourcePath}", parentResourcePath); + _url = _url.Replace("{resourceType}", resourceType); + _url = _url.Replace("{resourceName}", System.Uri.EscapeDataString(resourceName)); + _url = _url.Replace("{subscriptionId}", System.Uri.EscapeDataString(this.Client.SubscriptionId)); + 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 += "?" + string.Join("&", _queryParameters); + } + // Create HTTP transport objects + System.Net.Http.HttpRequestMessage _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 != 201 && (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); + CloudError _errorBody = Microsoft.Rest.Serialization.SafeJsonConvert.DeserializeObject(_responseContent, this.Client.DeserializationSettings); + if (_errorBody != null) + { + ex = new Microsoft.Rest.Azure.CloudException(_errorBody.Message); + 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 (_httpResponse.Headers.Contains("x-ms-request-id")) + { + ex.RequestId = _httpResponse.Headers.GetValues("x-ms-request-id").FirstOrDefault(); + } + 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 == 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); + } + } + // 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; + } + + /// + /// Returns a resource belonging to a resource group. + /// + /// + /// The name of the resource group. The name is case insensitive. + /// + /// + /// Resource identity. + /// + /// + /// Resource identity. + /// + /// + /// Resource identity. + /// + /// + /// Resource identity. + /// + /// + /// + /// + /// 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 + /// + /// + /// A response object containing the response body and response headers. + /// + public async System.Threading.Tasks.Task> GetWithHttpMessagesAsync(string resourceGroupName, string resourceProviderNamespace, string parentResourcePath, string resourceType, string resourceName, string apiVersion, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + if (resourceGroupName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "resourceGroupName"); + } + if (resourceGroupName != null) + { + if (!System.Text.RegularExpressions.Regex.IsMatch(resourceGroupName, "^[-\\w\\._]+$")) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.Pattern, "resourceGroupName", "^[-\\w\\._]+$"); + } + } + if (resourceProviderNamespace == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "resourceProviderNamespace"); + } + if (parentResourcePath == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "parentResourcePath"); + } + if (resourceType == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "resourceType"); + } + if (resourceName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "resourceName"); + } + if (apiVersion == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "apiVersion"); + } + if (this.Client.SubscriptionId == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.SubscriptionId"); + } + // 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("resourceProviderNamespace", resourceProviderNamespace); + tracingParameters.Add("parentResourcePath", parentResourcePath); + tracingParameters.Add("resourceType", resourceType); + tracingParameters.Add("resourceName", resourceName); + tracingParameters.Add("apiVersion", apiVersion); + 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/{resourceProviderNamespace}/{parentResourcePath}/{resourceType}/{resourceName}").ToString(); + _url = _url.Replace("{resourceGroupName}", System.Uri.EscapeDataString(resourceGroupName)); + _url = _url.Replace("{resourceProviderNamespace}", System.Uri.EscapeDataString(resourceProviderNamespace)); + _url = _url.Replace("{parentResourcePath}", parentResourcePath); + _url = _url.Replace("{resourceType}", resourceType); + _url = _url.Replace("{resourceName}", System.Uri.EscapeDataString(resourceName)); + _url = _url.Replace("{subscriptionId}", System.Uri.EscapeDataString(this.Client.SubscriptionId)); + 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 += "?" + string.Join("&", _queryParameters); + } + // Create HTTP transport objects + System.Net.Http.HttpRequestMessage _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); + CloudError _errorBody = Microsoft.Rest.Serialization.SafeJsonConvert.DeserializeObject(_responseContent, this.Client.DeserializationSettings); + if (_errorBody != null) + { + ex = new Microsoft.Rest.Azure.CloudException(_errorBody.Message); + 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 (_httpResponse.Headers.Contains("x-ms-request-id")) + { + ex.RequestId = _httpResponse.Headers.GetValues("x-ms-request-id").FirstOrDefault(); + } + 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; + } + + /// + /// Get all of the resources under a subscription. + /// + /// + /// 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 + /// + /// + /// 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 += "?" + string.Join("&", _queryParameters); + } + // Create HTTP transport objects + System.Net.Http.HttpRequestMessage _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); + CloudError _errorBody = Microsoft.Rest.Serialization.SafeJsonConvert.DeserializeObject(_responseContent, this.Client.DeserializationSettings); + if (_errorBody != null) + { + ex = new Microsoft.Rest.Azure.CloudException(_errorBody.Message); + 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 (_httpResponse.Headers.Contains("x-ms-request-id")) + { + ex.RequestId = _httpResponse.Headers.GetValues("x-ms-request-id").FirstOrDefault(); + } + 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; + } + + } +} diff --git a/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/ResourcesOperationsExtensions.cs b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/ResourcesOperationsExtensions.cs new file mode 100644 index 000000000..a3977f3df --- /dev/null +++ b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/ResourcesOperationsExtensions.cs @@ -0,0 +1,418 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.ResourceManager +{ + using System.Threading.Tasks; + using Microsoft.Rest.Azure; + using Models; + + /// + /// Extension methods for ResourcesOperations. + /// + public static partial class ResourcesOperationsExtensions + { + /// + /// Move resources from one resource group to another. The resources being + /// moved should all be in the same resource group. + /// + /// + /// The operations group for this extension method. + /// + /// + /// Source resource group name. + /// + /// + /// move resources' parameters. + /// + public static void MoveResources(this IResourcesOperations operations, string sourceResourceGroupName, ResourcesMoveInfoInner parameters) + { + System.Threading.Tasks.Task.Factory.StartNew(s => ((IResourcesOperations)s).MoveResourcesAsync(sourceResourceGroupName, parameters), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// Move resources from one resource group to another. The resources being + /// moved should all be in the same resource group. + /// + /// + /// The operations group for this extension method. + /// + /// + /// Source resource group name. + /// + /// + /// move resources' parameters. + /// + /// + /// The cancellation token. + /// + public static async System.Threading.Tasks.Task MoveResourcesAsync(this IResourcesOperations operations, string sourceResourceGroupName, ResourcesMoveInfoInner parameters, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + await operations.MoveResourcesWithHttpMessagesAsync(sourceResourceGroupName, parameters, null, cancellationToken).ConfigureAwait(false); + } + + /// + /// Move resources from one resource group to another. The resources being + /// moved should all be in the same resource group. + /// + /// + /// The operations group for this extension method. + /// + /// + /// Source resource group name. + /// + /// + /// move resources' parameters. + /// + public static void BeginMoveResources(this IResourcesOperations operations, string sourceResourceGroupName, ResourcesMoveInfoInner parameters) + { + System.Threading.Tasks.Task.Factory.StartNew(s => ((IResourcesOperations)s).BeginMoveResourcesAsync(sourceResourceGroupName, parameters), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// Move resources from one resource group to another. The resources being + /// moved should all be in the same resource group. + /// + /// + /// The operations group for this extension method. + /// + /// + /// Source resource group name. + /// + /// + /// move resources' parameters. + /// + /// + /// The cancellation token. + /// + public static async System.Threading.Tasks.Task BeginMoveResourcesAsync(this IResourcesOperations operations, string sourceResourceGroupName, ResourcesMoveInfoInner parameters, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + await operations.BeginMoveResourcesWithHttpMessagesAsync(sourceResourceGroupName, parameters, null, cancellationToken).ConfigureAwait(false); + } + + /// + /// Get all of the resources under a subscription. + /// + /// + /// The operations group for this extension method. + /// + /// + /// OData parameters to apply to the operation. + /// + public static Microsoft.Rest.Azure.IPage List(this IResourcesOperations operations, Microsoft.Rest.Azure.OData.ODataQuery odataQuery = default(Microsoft.Rest.Azure.OData.ODataQuery)) + { + return System.Threading.Tasks.Task.Factory.StartNew(s => ((IResourcesOperations)s).ListAsync(odataQuery), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// Get all of the resources under a subscription. + /// + /// + /// The operations group for this extension method. + /// + /// + /// OData parameters to apply to the operation. + /// + /// + /// The cancellation token. + /// + public static async Task> ListAsync(this IResourcesOperations operations, Microsoft.Rest.Azure.OData.ODataQuery odataQuery = default(Microsoft.Rest.Azure.OData.ODataQuery), System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + using (var _result = await operations.ListWithHttpMessagesAsync(odataQuery, null, cancellationToken).ConfigureAwait(false)) + { + return _result.Body; + } + } + + /// + /// Checks whether resource exists. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. The name is case insensitive. + /// + /// + /// Resource identity. + /// + /// + /// Resource identity. + /// + /// + /// Resource identity. + /// + /// + /// Resource identity. + /// + /// + /// + public static bool CheckExistence(this IResourcesOperations operations, string resourceGroupName, string resourceProviderNamespace, string parentResourcePath, string resourceType, string resourceName, string apiVersion) + { + return System.Threading.Tasks.Task.Factory.StartNew(s => ((IResourcesOperations)s).CheckExistenceAsync(resourceGroupName, resourceProviderNamespace, parentResourcePath, resourceType, resourceName, apiVersion), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// Checks whether resource exists. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. The name is case insensitive. + /// + /// + /// Resource identity. + /// + /// + /// Resource identity. + /// + /// + /// Resource identity. + /// + /// + /// Resource identity. + /// + /// + /// + /// + /// The cancellation token. + /// + public static async System.Threading.Tasks.Task CheckExistenceAsync(this IResourcesOperations operations, string resourceGroupName, string resourceProviderNamespace, string parentResourcePath, string resourceType, string resourceName, string apiVersion, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + using (var _result = await operations.CheckExistenceWithHttpMessagesAsync(resourceGroupName, resourceProviderNamespace, parentResourcePath, resourceType, resourceName, apiVersion, null, cancellationToken).ConfigureAwait(false)) + { + return _result.Body; + } + } + + /// + /// Delete resource and all of its resources. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. The name is case insensitive. + /// + /// + /// Resource identity. + /// + /// + /// Resource identity. + /// + /// + /// Resource identity. + /// + /// + /// Resource identity. + /// + /// + /// + public static void Delete(this IResourcesOperations operations, string resourceGroupName, string resourceProviderNamespace, string parentResourcePath, string resourceType, string resourceName, string apiVersion) + { + System.Threading.Tasks.Task.Factory.StartNew(s => ((IResourcesOperations)s).DeleteAsync(resourceGroupName, resourceProviderNamespace, parentResourcePath, resourceType, resourceName, apiVersion), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// Delete resource and all of its resources. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. The name is case insensitive. + /// + /// + /// Resource identity. + /// + /// + /// Resource identity. + /// + /// + /// Resource identity. + /// + /// + /// Resource identity. + /// + /// + /// + /// + /// The cancellation token. + /// + public static async System.Threading.Tasks.Task DeleteAsync(this IResourcesOperations operations, string resourceGroupName, string resourceProviderNamespace, string parentResourcePath, string resourceType, string resourceName, string apiVersion, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + await operations.DeleteWithHttpMessagesAsync(resourceGroupName, resourceProviderNamespace, parentResourcePath, resourceType, resourceName, apiVersion, null, cancellationToken).ConfigureAwait(false); + } + + /// + /// Create a resource. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. The name is case insensitive. + /// + /// + /// Resource identity. + /// + /// + /// Resource identity. + /// + /// + /// Resource identity. + /// + /// + /// Resource identity. + /// + /// + /// + /// + /// Create or update resource parameters. + /// + public static GenericResourceInner CreateOrUpdate(this IResourcesOperations operations, string resourceGroupName, string resourceProviderNamespace, string parentResourcePath, string resourceType, string resourceName, string apiVersion, GenericResourceInner parameters) + { + return System.Threading.Tasks.Task.Factory.StartNew(s => ((IResourcesOperations)s).CreateOrUpdateAsync(resourceGroupName, resourceProviderNamespace, parentResourcePath, resourceType, resourceName, apiVersion, parameters), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// Create a resource. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. The name is case insensitive. + /// + /// + /// Resource identity. + /// + /// + /// Resource identity. + /// + /// + /// Resource identity. + /// + /// + /// Resource identity. + /// + /// + /// + /// + /// Create or update resource parameters. + /// + /// + /// The cancellation token. + /// + public static async System.Threading.Tasks.Task CreateOrUpdateAsync(this IResourcesOperations operations, string resourceGroupName, string resourceProviderNamespace, string parentResourcePath, string resourceType, string resourceName, string apiVersion, GenericResourceInner parameters, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + using (var _result = await operations.CreateOrUpdateWithHttpMessagesAsync(resourceGroupName, resourceProviderNamespace, parentResourcePath, resourceType, resourceName, apiVersion, parameters, null, cancellationToken).ConfigureAwait(false)) + { + return _result.Body; + } + } + + /// + /// Returns a resource belonging to a resource group. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. The name is case insensitive. + /// + /// + /// Resource identity. + /// + /// + /// Resource identity. + /// + /// + /// Resource identity. + /// + /// + /// Resource identity. + /// + /// + /// + public static GenericResourceInner Get(this IResourcesOperations operations, string resourceGroupName, string resourceProviderNamespace, string parentResourcePath, string resourceType, string resourceName, string apiVersion) + { + return System.Threading.Tasks.Task.Factory.StartNew(s => ((IResourcesOperations)s).GetAsync(resourceGroupName, resourceProviderNamespace, parentResourcePath, resourceType, resourceName, apiVersion), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// Returns a resource belonging to a resource group. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. The name is case insensitive. + /// + /// + /// Resource identity. + /// + /// + /// Resource identity. + /// + /// + /// Resource identity. + /// + /// + /// Resource identity. + /// + /// + /// + /// + /// The cancellation token. + /// + public static async System.Threading.Tasks.Task GetAsync(this IResourcesOperations operations, string resourceGroupName, string resourceProviderNamespace, string parentResourcePath, string resourceType, string resourceName, string apiVersion, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + using (var _result = await operations.GetWithHttpMessagesAsync(resourceGroupName, resourceProviderNamespace, parentResourcePath, resourceType, resourceName, apiVersion, null, cancellationToken).ConfigureAwait(false)) + { + return _result.Body; + } + } + + /// + /// Get all of the resources under a subscription. + /// + /// + /// 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 IResourcesOperations operations, string nextPageLink) + { + return System.Threading.Tasks.Task.Factory.StartNew(s => ((IResourcesOperations)s).ListNextAsync(nextPageLink), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// Get all of the resources under a subscription. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The NextLink from the previous successful call to List operation. + /// + /// + /// The cancellation token. + /// + public static async Task> ListNextAsync(this IResourcesOperations 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/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/SubscriptionClient.cs b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/SubscriptionClient.cs new file mode 100644 index 000000000..d8b827833 --- /dev/null +++ b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/SubscriptionClient.cs @@ -0,0 +1,306 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.ResourceManager +{ + using System.Linq; + using Microsoft.Rest.Azure; + using Models; + + public partial class SubscriptionClient : Microsoft.Rest.ServiceClient, ISubscriptionClient, IAzureClient + { + /// + /// The base URI of the service. + /// + public System.Uri BaseUri { get; set; } + + /// + /// Gets or sets json serialization settings. + /// + public Newtonsoft.Json.JsonSerializerSettings SerializationSettings { get; private set; } + + /// + /// Gets or sets json deserialization settings. + /// + public Newtonsoft.Json.JsonSerializerSettings DeserializationSettings { get; private set; } + + /// + /// Credentials needed for the client to connect to Azure. + /// + public Microsoft.Rest.ServiceClientCredentials Credentials { get; private set; } + + /// + /// Client Api Version. + /// + public string ApiVersion { get; private set; } + + /// + /// Gets or sets the preferred language for the response. + /// + public string AcceptLanguage { get; set; } + + /// + /// Gets or sets the retry timeout in seconds for Long Running Operations. + /// Default value is 30. + /// + public int? LongRunningOperationRetryTimeout { get; set; } + + /// + /// When set to true a unique x-ms-client-request-id value is generated and + /// included in each request. Default is true. + /// + public bool? GenerateClientRequestId { get; set; } + + /// + /// Gets the ISubscriptionsOperations. + /// + public virtual ISubscriptionsOperations Subscriptions { get; private set; } + + /// + /// Gets the ITenantsOperations. + /// + public virtual ITenantsOperations Tenants { get; private set; } + + /// + /// Initializes a new instance of the SubscriptionClient class. + /// + /// + /// Optional. The delegating handlers to add to the http client pipeline. + /// + protected SubscriptionClient(params System.Net.Http.DelegatingHandler[] handlers) : base(handlers) + { + this.Initialize(); + } + + /// + /// Initializes a new instance of the SubscriptionClient class. + /// + /// + /// Optional. The http client handler used to handle http transport. + /// + /// + /// Optional. The delegating handlers to add to the http client pipeline. + /// + protected SubscriptionClient(System.Net.Http.HttpClientHandler rootHandler, params System.Net.Http.DelegatingHandler[] handlers) : base(rootHandler, handlers) + { + this.Initialize(); + } + + /// + /// Initializes a new instance of the SubscriptionClient class. + /// + /// + /// Optional. The base URI of the service. + /// + /// + /// Optional. The delegating handlers to add to the http client pipeline. + /// + /// + /// Thrown when a required parameter is null + /// + protected SubscriptionClient(System.Uri baseUri, params System.Net.Http.DelegatingHandler[] handlers) : this(handlers) + { + if (baseUri == null) + { + throw new System.ArgumentNullException("baseUri"); + } + this.BaseUri = baseUri; + } + + /// + /// Initializes a new instance of the SubscriptionClient class. + /// + /// + /// Optional. The base URI of the service. + /// + /// + /// Optional. The http client handler used to handle http transport. + /// + /// + /// Optional. The delegating handlers to add to the http client pipeline. + /// + /// + /// Thrown when a required parameter is null + /// + protected SubscriptionClient(System.Uri baseUri, System.Net.Http.HttpClientHandler rootHandler, params System.Net.Http.DelegatingHandler[] handlers) : this(rootHandler, handlers) + { + if (baseUri == null) + { + throw new System.ArgumentNullException("baseUri"); + } + this.BaseUri = baseUri; + } + + /// + /// Initializes a new instance of the SubscriptionClient class. + /// + /// + /// Required. Credentials needed for the client to connect to Azure. + /// + /// + /// Optional. The delegating handlers to add to the http client pipeline. + /// + /// + /// Thrown when a required parameter is null + /// + public SubscriptionClient(Microsoft.Rest.ServiceClientCredentials credentials, params System.Net.Http.DelegatingHandler[] handlers) : this(handlers) + { + if (credentials == null) + { + throw new System.ArgumentNullException("credentials"); + } + this.Credentials = credentials; + if (this.Credentials != null) + { + this.Credentials.InitializeServiceClient(this); + } + } + + /// + /// Initializes a new instance of the SubscriptionClient class. + /// + /// + /// Required. Credentials needed for the client to connect to Azure. + /// + /// + /// Optional. The http client handler used to handle http transport. + /// + /// + /// Optional. The delegating handlers to add to the http client pipeline. + /// + /// + /// Thrown when a required parameter is null + /// + public SubscriptionClient(Microsoft.Rest.ServiceClientCredentials credentials, System.Net.Http.HttpClientHandler rootHandler, params System.Net.Http.DelegatingHandler[] handlers) : this(rootHandler, handlers) + { + if (credentials == null) + { + throw new System.ArgumentNullException("credentials"); + } + this.Credentials = credentials; + if (this.Credentials != null) + { + this.Credentials.InitializeServiceClient(this); + } + } + + /// + /// Initializes a new instance of the SubscriptionClient class. + /// + /// + /// Optional. The base URI of the service. + /// + /// + /// Required. Credentials needed for the client to connect to Azure. + /// + /// + /// Optional. The delegating handlers to add to the http client pipeline. + /// + /// + /// Thrown when a required parameter is null + /// + public SubscriptionClient(System.Uri baseUri, Microsoft.Rest.ServiceClientCredentials credentials, params System.Net.Http.DelegatingHandler[] handlers) : this(handlers) + { + if (baseUri == null) + { + throw new System.ArgumentNullException("baseUri"); + } + if (credentials == null) + { + throw new System.ArgumentNullException("credentials"); + } + this.BaseUri = baseUri; + this.Credentials = credentials; + if (this.Credentials != null) + { + this.Credentials.InitializeServiceClient(this); + } + } + + /// + /// Initializes a new instance of the SubscriptionClient class. + /// + /// + /// Optional. The base URI of the service. + /// + /// + /// Required. Credentials needed for the client to connect to Azure. + /// + /// + /// Optional. The http client handler used to handle http transport. + /// + /// + /// Optional. The delegating handlers to add to the http client pipeline. + /// + /// + /// Thrown when a required parameter is null + /// + public SubscriptionClient(System.Uri baseUri, Microsoft.Rest.ServiceClientCredentials credentials, System.Net.Http.HttpClientHandler rootHandler, params System.Net.Http.DelegatingHandler[] handlers) : this(rootHandler, handlers) + { + if (baseUri == null) + { + throw new System.ArgumentNullException("baseUri"); + } + if (credentials == null) + { + throw new System.ArgumentNullException("credentials"); + } + this.BaseUri = baseUri; + this.Credentials = credentials; + if (this.Credentials != null) + { + this.Credentials.InitializeServiceClient(this); + } + } + + /// + /// An optional partial-method to perform custom initialization. + /// + partial void CustomInitialize(); + /// + /// Initializes client properties. + /// + private void Initialize() + { + this.Subscriptions = new SubscriptionsOperations(this); + this.Tenants = new TenantsOperations(this); + this.BaseUri = new System.Uri("https://management.azure.com"); + this.ApiVersion = "2015-11-01"; + this.AcceptLanguage = "en-US"; + this.LongRunningOperationRetryTimeout = 30; + this.GenerateClientRequestId = true; + SerializationSettings = new Newtonsoft.Json.JsonSerializerSettings + { + Formatting = Newtonsoft.Json.Formatting.Indented, + DateFormatHandling = Newtonsoft.Json.DateFormatHandling.IsoDateFormat, + DateTimeZoneHandling = Newtonsoft.Json.DateTimeZoneHandling.Utc, + NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore, + ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Serialize, + ContractResolver = new Microsoft.Rest.Serialization.ReadOnlyJsonContractResolver(), + Converters = new System.Collections.Generic.List + { + new Microsoft.Rest.Serialization.Iso8601TimeSpanConverter() + } + }; + DeserializationSettings = new Newtonsoft.Json.JsonSerializerSettings + { + DateFormatHandling = Newtonsoft.Json.DateFormatHandling.IsoDateFormat, + DateTimeZoneHandling = Newtonsoft.Json.DateTimeZoneHandling.Utc, + NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore, + ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Serialize, + ContractResolver = new Microsoft.Rest.Serialization.ReadOnlyJsonContractResolver(), + Converters = new System.Collections.Generic.List + { + new Microsoft.Rest.Serialization.Iso8601TimeSpanConverter() + } + }; + CustomInitialize(); + DeserializationSettings.Converters.Add(new Microsoft.Rest.Azure.CloudErrorJsonConverter()); + } + } +} diff --git a/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/SubscriptionsOperations.cs b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/SubscriptionsOperations.cs new file mode 100644 index 000000000..5cea9d375 --- /dev/null +++ b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/SubscriptionsOperations.cs @@ -0,0 +1,735 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.ResourceManager +{ + using System.Linq; + using Microsoft.Rest; + using Microsoft.Rest.Azure; + using Models; + + /// + /// SubscriptionsOperations operations. + /// + internal partial class SubscriptionsOperations : Microsoft.Rest.IServiceOperations, ISubscriptionsOperations + { + /// + /// Initializes a new instance of the SubscriptionsOperations class. + /// + /// + /// Reference to the service client. + /// + /// + /// Thrown when a required parameter is null + /// + internal SubscriptionsOperations(SubscriptionClient client) + { + if (client == null) + { + throw new System.ArgumentNullException("client"); + } + this.Client = client; + } + + /// + /// Gets a reference to the SubscriptionClient + /// + public SubscriptionClient Client { get; private set; } + + /// + /// Gets a list of the subscription locations. + /// + /// + /// Id of the subscription + /// + /// + /// 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 + /// + /// + /// A response object containing the response body and response headers. + /// + public async System.Threading.Tasks.Task>> ListLocationsWithHttpMessagesAsync(string subscriptionId, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + if (subscriptionId == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "subscriptionId"); + } + if (this.Client.ApiVersion == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.ApiVersion"); + } + // 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("subscriptionId", subscriptionId); + tracingParameters.Add("cancellationToken", cancellationToken); + Microsoft.Rest.ServiceClientTracing.Enter(_invocationId, this, "ListLocations", tracingParameters); + } + // Construct URL + var _baseUrl = this.Client.BaseUri.AbsoluteUri; + var _url = new System.Uri(new System.Uri(_baseUrl + (_baseUrl.EndsWith("/") ? "" : "/")), "subscriptions/{subscriptionId}/locations").ToString(); + _url = _url.Replace("{subscriptionId}", System.Uri.EscapeDataString(subscriptionId)); + System.Collections.Generic.List _queryParameters = new System.Collections.Generic.List(); + if (this.Client.ApiVersion != null) + { + _queryParameters.Add(string.Format("api-version={0}", System.Uri.EscapeDataString(this.Client.ApiVersion))); + } + if (_queryParameters.Count > 0) + { + _url += "?" + string.Join("&", _queryParameters); + } + // Create HTTP transport objects + System.Net.Http.HttpRequestMessage _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); + CloudError _errorBody = Microsoft.Rest.Serialization.SafeJsonConvert.DeserializeObject(_responseContent, this.Client.DeserializationSettings); + if (_errorBody != null) + { + ex = new Microsoft.Rest.Azure.CloudException(_errorBody.Message); + 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 (_httpResponse.Headers.Contains("x-ms-request-id")) + { + ex.RequestId = _httpResponse.Headers.GetValues("x-ms-request-id").FirstOrDefault(); + } + 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 details about particular subscription. + /// + /// + /// Id of the subscription. + /// + /// + /// 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 + /// + /// + /// A response object containing the response body and response headers. + /// + public async System.Threading.Tasks.Task> GetWithHttpMessagesAsync(string subscriptionId, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + if (subscriptionId == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "subscriptionId"); + } + if (this.Client.ApiVersion == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.ApiVersion"); + } + // 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("subscriptionId", subscriptionId); + 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}").ToString(); + _url = _url.Replace("{subscriptionId}", System.Uri.EscapeDataString(subscriptionId)); + System.Collections.Generic.List _queryParameters = new System.Collections.Generic.List(); + if (this.Client.ApiVersion != null) + { + _queryParameters.Add(string.Format("api-version={0}", System.Uri.EscapeDataString(this.Client.ApiVersion))); + } + if (_queryParameters.Count > 0) + { + _url += "?" + string.Join("&", _queryParameters); + } + // Create HTTP transport objects + System.Net.Http.HttpRequestMessage _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); + CloudError _errorBody = Microsoft.Rest.Serialization.SafeJsonConvert.DeserializeObject(_responseContent, this.Client.DeserializationSettings); + if (_errorBody != null) + { + ex = new Microsoft.Rest.Azure.CloudException(_errorBody.Message); + 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 (_httpResponse.Headers.Contains("x-ms-request-id")) + { + ex.RequestId = _httpResponse.Headers.GetValues("x-ms-request-id").FirstOrDefault(); + } + 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 a list of the subscriptionIds. + /// + /// + /// 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 + /// + /// + /// A response object containing the response body and response headers. + /// + public async System.Threading.Tasks.Task>> ListWithHttpMessagesAsync(System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + if (this.Client.ApiVersion == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.ApiVersion"); + } + // 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("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").ToString(); + System.Collections.Generic.List _queryParameters = new System.Collections.Generic.List(); + if (this.Client.ApiVersion != null) + { + _queryParameters.Add(string.Format("api-version={0}", System.Uri.EscapeDataString(this.Client.ApiVersion))); + } + if (_queryParameters.Count > 0) + { + _url += "?" + string.Join("&", _queryParameters); + } + // Create HTTP transport objects + System.Net.Http.HttpRequestMessage _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); + CloudError _errorBody = Microsoft.Rest.Serialization.SafeJsonConvert.DeserializeObject(_responseContent, this.Client.DeserializationSettings); + if (_errorBody != null) + { + ex = new Microsoft.Rest.Azure.CloudException(_errorBody.Message); + 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 (_httpResponse.Headers.Contains("x-ms-request-id")) + { + ex.RequestId = _httpResponse.Headers.GetValues("x-ms-request-id").FirstOrDefault(); + } + 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 a list of the subscriptionIds. + /// + /// + /// 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 + /// + /// + /// 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 += "?" + string.Join("&", _queryParameters); + } + // Create HTTP transport objects + System.Net.Http.HttpRequestMessage _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); + CloudError _errorBody = Microsoft.Rest.Serialization.SafeJsonConvert.DeserializeObject(_responseContent, this.Client.DeserializationSettings); + if (_errorBody != null) + { + ex = new Microsoft.Rest.Azure.CloudException(_errorBody.Message); + 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 (_httpResponse.Headers.Contains("x-ms-request-id")) + { + ex.RequestId = _httpResponse.Headers.GetValues("x-ms-request-id").FirstOrDefault(); + } + 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; + } + + } +} diff --git a/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/SubscriptionsOperationsExtensions.cs b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/SubscriptionsOperationsExtensions.cs new file mode 100644 index 000000000..e204de556 --- /dev/null +++ b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/SubscriptionsOperationsExtensions.cs @@ -0,0 +1,151 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.ResourceManager +{ + using System.Threading.Tasks; + using Microsoft.Rest.Azure; + using Models; + + /// + /// Extension methods for SubscriptionsOperations. + /// + public static partial class SubscriptionsOperationsExtensions + { + /// + /// Gets a list of the subscription locations. + /// + /// + /// The operations group for this extension method. + /// + /// + /// Id of the subscription + /// + public static System.Collections.Generic.IEnumerable ListLocations(this ISubscriptionsOperations operations, string subscriptionId) + { + return System.Threading.Tasks.Task.Factory.StartNew(s => ((ISubscriptionsOperations)s).ListLocationsAsync(subscriptionId), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// Gets a list of the subscription locations. + /// + /// + /// The operations group for this extension method. + /// + /// + /// Id of the subscription + /// + /// + /// The cancellation token. + /// + public static async Task> ListLocationsAsync(this ISubscriptionsOperations operations, string subscriptionId, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + using (var _result = await operations.ListLocationsWithHttpMessagesAsync(subscriptionId, null, cancellationToken).ConfigureAwait(false)) + { + return _result.Body; + } + } + + /// + /// Gets details about particular subscription. + /// + /// + /// The operations group for this extension method. + /// + /// + /// Id of the subscription. + /// + public static SubscriptionInner Get(this ISubscriptionsOperations operations, string subscriptionId) + { + return System.Threading.Tasks.Task.Factory.StartNew(s => ((ISubscriptionsOperations)s).GetAsync(subscriptionId), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// Gets details about particular subscription. + /// + /// + /// The operations group for this extension method. + /// + /// + /// Id of the subscription. + /// + /// + /// The cancellation token. + /// + public static async System.Threading.Tasks.Task GetAsync(this ISubscriptionsOperations operations, string subscriptionId, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + using (var _result = await operations.GetWithHttpMessagesAsync(subscriptionId, null, cancellationToken).ConfigureAwait(false)) + { + return _result.Body; + } + } + + /// + /// Gets a list of the subscriptionIds. + /// + /// + /// The operations group for this extension method. + /// + public static Microsoft.Rest.Azure.IPage List(this ISubscriptionsOperations operations) + { + return System.Threading.Tasks.Task.Factory.StartNew(s => ((ISubscriptionsOperations)s).ListAsync(), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// Gets a list of the subscriptionIds. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The cancellation token. + /// + public static async Task> ListAsync(this ISubscriptionsOperations operations, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + using (var _result = await operations.ListWithHttpMessagesAsync(null, cancellationToken).ConfigureAwait(false)) + { + return _result.Body; + } + } + + /// + /// Gets a list of the subscriptionIds. + /// + /// + /// 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 ISubscriptionsOperations operations, string nextPageLink) + { + return System.Threading.Tasks.Task.Factory.StartNew(s => ((ISubscriptionsOperations)s).ListNextAsync(nextPageLink), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// Gets a list of the subscriptionIds. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The NextLink from the previous successful call to List operation. + /// + /// + /// The cancellation token. + /// + public static async Task> ListNextAsync(this ISubscriptionsOperations 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/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/TagsOperations.cs b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/TagsOperations.cs new file mode 100644 index 000000000..39bbcdb0a --- /dev/null +++ b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/TagsOperations.cs @@ -0,0 +1,1110 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.ResourceManager +{ + using System.Linq; + using Microsoft.Rest; + using Microsoft.Rest.Azure; + using Models; + + /// + /// TagsOperations operations. + /// + internal partial class TagsOperations : Microsoft.Rest.IServiceOperations, ITagsOperations + { + /// + /// Initializes a new instance of the TagsOperations class. + /// + /// + /// Reference to the service client. + /// + /// + /// Thrown when a required parameter is null + /// + internal TagsOperations(ResourceManagementClient client) + { + if (client == null) + { + throw new System.ArgumentNullException("client"); + } + this.Client = client; + } + + /// + /// Gets a reference to the ResourceManagementClient + /// + public ResourceManagementClient Client { get; private set; } + + /// + /// Delete a subscription resource tag value. + /// + /// + /// The name of the tag. + /// + /// + /// The value of the tag. + /// + /// + /// 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 + /// + /// + /// A response object containing the response body and response headers. + /// + public async System.Threading.Tasks.Task DeleteValueWithHttpMessagesAsync(string tagName, string tagValue, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + if (tagName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "tagName"); + } + if (tagValue == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "tagValue"); + } + if (this.Client.ApiVersion == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.ApiVersion"); + } + if (this.Client.SubscriptionId == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.SubscriptionId"); + } + // 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("tagName", tagName); + tracingParameters.Add("tagValue", tagValue); + tracingParameters.Add("cancellationToken", cancellationToken); + Microsoft.Rest.ServiceClientTracing.Enter(_invocationId, this, "DeleteValue", tracingParameters); + } + // Construct URL + var _baseUrl = this.Client.BaseUri.AbsoluteUri; + var _url = new System.Uri(new System.Uri(_baseUrl + (_baseUrl.EndsWith("/") ? "" : "/")), "subscriptions/{subscriptionId}/tagNames/{tagName}/tagValues/{tagValue}").ToString(); + _url = _url.Replace("{tagName}", System.Uri.EscapeDataString(tagName)); + _url = _url.Replace("{tagValue}", System.Uri.EscapeDataString(tagValue)); + _url = _url.Replace("{subscriptionId}", System.Uri.EscapeDataString(this.Client.SubscriptionId)); + System.Collections.Generic.List _queryParameters = new System.Collections.Generic.List(); + if (this.Client.ApiVersion != null) + { + _queryParameters.Add(string.Format("api-version={0}", System.Uri.EscapeDataString(this.Client.ApiVersion))); + } + if (_queryParameters.Count > 0) + { + _url += "?" + string.Join("&", _queryParameters); + } + // Create HTTP transport objects + System.Net.Http.HttpRequestMessage _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 != 200 && (int)_statusCode != 204) + { + var ex = new Microsoft.Rest.Azure.CloudException(string.Format("Operation returned an invalid status code '{0}'", _statusCode)); + if (_httpResponse.Content != null) { + _responseContent = await _httpResponse.Content.ReadAsStringAsync().ConfigureAwait(false); + } + else { + _responseContent = string.Empty; + } + ex.Request = new Microsoft.Rest.HttpRequestMessageWrapper(_httpRequest, _requestContent); + ex.Response = new Microsoft.Rest.HttpResponseMessageWrapper(_httpResponse, _responseContent); + if (_httpResponse.Headers.Contains("x-ms-request-id")) + { + ex.RequestId = _httpResponse.Headers.GetValues("x-ms-request-id").FirstOrDefault(); + } + 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(); + } + if (_shouldTrace) + { + Microsoft.Rest.ServiceClientTracing.Exit(_invocationId, _result); + } + return _result; + } + + /// + /// Create a subscription resource tag value. + /// + /// + /// The name of the tag. + /// + /// + /// The value of the tag. + /// + /// + /// 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 + /// + /// + /// A response object containing the response body and response headers. + /// + public async System.Threading.Tasks.Task> CreateOrUpdateValueWithHttpMessagesAsync(string tagName, string tagValue, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + if (tagName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "tagName"); + } + if (tagValue == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "tagValue"); + } + if (this.Client.ApiVersion == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.ApiVersion"); + } + if (this.Client.SubscriptionId == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.SubscriptionId"); + } + // 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("tagName", tagName); + tracingParameters.Add("tagValue", tagValue); + tracingParameters.Add("cancellationToken", cancellationToken); + Microsoft.Rest.ServiceClientTracing.Enter(_invocationId, this, "CreateOrUpdateValue", tracingParameters); + } + // Construct URL + var _baseUrl = this.Client.BaseUri.AbsoluteUri; + var _url = new System.Uri(new System.Uri(_baseUrl + (_baseUrl.EndsWith("/") ? "" : "/")), "subscriptions/{subscriptionId}/tagNames/{tagName}/tagValues/{tagValue}").ToString(); + _url = _url.Replace("{tagName}", System.Uri.EscapeDataString(tagName)); + _url = _url.Replace("{tagValue}", System.Uri.EscapeDataString(tagValue)); + _url = _url.Replace("{subscriptionId}", System.Uri.EscapeDataString(this.Client.SubscriptionId)); + System.Collections.Generic.List _queryParameters = new System.Collections.Generic.List(); + if (this.Client.ApiVersion != null) + { + _queryParameters.Add(string.Format("api-version={0}", System.Uri.EscapeDataString(this.Client.ApiVersion))); + } + if (_queryParameters.Count > 0) + { + _url += "?" + string.Join("&", _queryParameters); + } + // Create HTTP transport objects + System.Net.Http.HttpRequestMessage _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; + // 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); + CloudError _errorBody = Microsoft.Rest.Serialization.SafeJsonConvert.DeserializeObject(_responseContent, this.Client.DeserializationSettings); + if (_errorBody != null) + { + ex = new Microsoft.Rest.Azure.CloudException(_errorBody.Message); + 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 (_httpResponse.Headers.Contains("x-ms-request-id")) + { + ex.RequestId = _httpResponse.Headers.GetValues("x-ms-request-id").FirstOrDefault(); + } + 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); + } + } + if (_shouldTrace) + { + Microsoft.Rest.ServiceClientTracing.Exit(_invocationId, _result); + } + return _result; + } + + /// + /// Create a subscription resource tag. + /// + /// + /// The name of the tag. + /// + /// + /// 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 + /// + /// + /// A response object containing the response body and response headers. + /// + public async System.Threading.Tasks.Task> CreateOrUpdateWithHttpMessagesAsync(string tagName, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + if (tagName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "tagName"); + } + if (this.Client.ApiVersion == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.ApiVersion"); + } + if (this.Client.SubscriptionId == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.SubscriptionId"); + } + // 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("tagName", tagName); + tracingParameters.Add("cancellationToken", cancellationToken); + Microsoft.Rest.ServiceClientTracing.Enter(_invocationId, this, "CreateOrUpdate", tracingParameters); + } + // Construct URL + var _baseUrl = this.Client.BaseUri.AbsoluteUri; + var _url = new System.Uri(new System.Uri(_baseUrl + (_baseUrl.EndsWith("/") ? "" : "/")), "subscriptions/{subscriptionId}/tagNames/{tagName}").ToString(); + _url = _url.Replace("{tagName}", System.Uri.EscapeDataString(tagName)); + _url = _url.Replace("{subscriptionId}", System.Uri.EscapeDataString(this.Client.SubscriptionId)); + System.Collections.Generic.List _queryParameters = new System.Collections.Generic.List(); + if (this.Client.ApiVersion != null) + { + _queryParameters.Add(string.Format("api-version={0}", System.Uri.EscapeDataString(this.Client.ApiVersion))); + } + if (_queryParameters.Count > 0) + { + _url += "?" + string.Join("&", _queryParameters); + } + // Create HTTP transport objects + System.Net.Http.HttpRequestMessage _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; + // 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); + CloudError _errorBody = Microsoft.Rest.Serialization.SafeJsonConvert.DeserializeObject(_responseContent, this.Client.DeserializationSettings); + if (_errorBody != null) + { + ex = new Microsoft.Rest.Azure.CloudException(_errorBody.Message); + 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 (_httpResponse.Headers.Contains("x-ms-request-id")) + { + ex.RequestId = _httpResponse.Headers.GetValues("x-ms-request-id").FirstOrDefault(); + } + 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); + } + } + if (_shouldTrace) + { + Microsoft.Rest.ServiceClientTracing.Exit(_invocationId, _result); + } + return _result; + } + + /// + /// Delete a subscription resource tag. + /// + /// + /// The name of the tag. + /// + /// + /// 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 + /// + /// + /// A response object containing the response body and response headers. + /// + public async System.Threading.Tasks.Task DeleteWithHttpMessagesAsync(string tagName, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + if (tagName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "tagName"); + } + if (this.Client.ApiVersion == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.ApiVersion"); + } + if (this.Client.SubscriptionId == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.SubscriptionId"); + } + // 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("tagName", tagName); + tracingParameters.Add("cancellationToken", cancellationToken); + Microsoft.Rest.ServiceClientTracing.Enter(_invocationId, this, "Delete", tracingParameters); + } + // Construct URL + var _baseUrl = this.Client.BaseUri.AbsoluteUri; + var _url = new System.Uri(new System.Uri(_baseUrl + (_baseUrl.EndsWith("/") ? "" : "/")), "subscriptions/{subscriptionId}/tagNames/{tagName}").ToString(); + _url = _url.Replace("{tagName}", System.Uri.EscapeDataString(tagName)); + _url = _url.Replace("{subscriptionId}", System.Uri.EscapeDataString(this.Client.SubscriptionId)); + System.Collections.Generic.List _queryParameters = new System.Collections.Generic.List(); + if (this.Client.ApiVersion != null) + { + _queryParameters.Add(string.Format("api-version={0}", System.Uri.EscapeDataString(this.Client.ApiVersion))); + } + if (_queryParameters.Count > 0) + { + _url += "?" + string.Join("&", _queryParameters); + } + // Create HTTP transport objects + System.Net.Http.HttpRequestMessage _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 != 200 && (int)_statusCode != 204) + { + var ex = new Microsoft.Rest.Azure.CloudException(string.Format("Operation returned an invalid status code '{0}'", _statusCode)); + if (_httpResponse.Content != null) { + _responseContent = await _httpResponse.Content.ReadAsStringAsync().ConfigureAwait(false); + } + else { + _responseContent = string.Empty; + } + ex.Request = new Microsoft.Rest.HttpRequestMessageWrapper(_httpRequest, _requestContent); + ex.Response = new Microsoft.Rest.HttpResponseMessageWrapper(_httpResponse, _responseContent); + if (_httpResponse.Headers.Contains("x-ms-request-id")) + { + ex.RequestId = _httpResponse.Headers.GetValues("x-ms-request-id").FirstOrDefault(); + } + 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(); + } + if (_shouldTrace) + { + Microsoft.Rest.ServiceClientTracing.Exit(_invocationId, _result); + } + return _result; + } + + /// + /// Get a list of subscription resource tags. + /// + /// + /// 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 + /// + /// + /// A response object containing the response body and response headers. + /// + public async System.Threading.Tasks.Task>> ListWithHttpMessagesAsync(System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + if (this.Client.ApiVersion == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.ApiVersion"); + } + if (this.Client.SubscriptionId == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.SubscriptionId"); + } + // 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("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}/tagNames").ToString(); + _url = _url.Replace("{subscriptionId}", System.Uri.EscapeDataString(this.Client.SubscriptionId)); + System.Collections.Generic.List _queryParameters = new System.Collections.Generic.List(); + if (this.Client.ApiVersion != null) + { + _queryParameters.Add(string.Format("api-version={0}", System.Uri.EscapeDataString(this.Client.ApiVersion))); + } + if (_queryParameters.Count > 0) + { + _url += "?" + string.Join("&", _queryParameters); + } + // Create HTTP transport objects + System.Net.Http.HttpRequestMessage _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); + CloudError _errorBody = Microsoft.Rest.Serialization.SafeJsonConvert.DeserializeObject(_responseContent, this.Client.DeserializationSettings); + if (_errorBody != null) + { + ex = new Microsoft.Rest.Azure.CloudException(_errorBody.Message); + 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 (_httpResponse.Headers.Contains("x-ms-request-id")) + { + ex.RequestId = _httpResponse.Headers.GetValues("x-ms-request-id").FirstOrDefault(); + } + 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; + } + + /// + /// Get a list of subscription resource tags. + /// + /// + /// 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 + /// + /// + /// 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 += "?" + string.Join("&", _queryParameters); + } + // Create HTTP transport objects + System.Net.Http.HttpRequestMessage _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); + CloudError _errorBody = Microsoft.Rest.Serialization.SafeJsonConvert.DeserializeObject(_responseContent, this.Client.DeserializationSettings); + if (_errorBody != null) + { + ex = new Microsoft.Rest.Azure.CloudException(_errorBody.Message); + 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 (_httpResponse.Headers.Contains("x-ms-request-id")) + { + ex.RequestId = _httpResponse.Headers.GetValues("x-ms-request-id").FirstOrDefault(); + } + 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; + } + + } +} diff --git a/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/TagsOperationsExtensions.cs b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/TagsOperationsExtensions.cs new file mode 100644 index 000000000..bd881880f --- /dev/null +++ b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/TagsOperationsExtensions.cs @@ -0,0 +1,225 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.ResourceManager +{ + using System.Threading.Tasks; + using Microsoft.Rest.Azure; + using Models; + + /// + /// Extension methods for TagsOperations. + /// + public static partial class TagsOperationsExtensions + { + /// + /// Delete a subscription resource tag value. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the tag. + /// + /// + /// The value of the tag. + /// + public static void DeleteValue(this ITagsOperations operations, string tagName, string tagValue) + { + System.Threading.Tasks.Task.Factory.StartNew(s => ((ITagsOperations)s).DeleteValueAsync(tagName, tagValue), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// Delete a subscription resource tag value. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the tag. + /// + /// + /// The value of the tag. + /// + /// + /// The cancellation token. + /// + public static async System.Threading.Tasks.Task DeleteValueAsync(this ITagsOperations operations, string tagName, string tagValue, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + await operations.DeleteValueWithHttpMessagesAsync(tagName, tagValue, null, cancellationToken).ConfigureAwait(false); + } + + /// + /// Create a subscription resource tag value. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the tag. + /// + /// + /// The value of the tag. + /// + public static TagValueInner CreateOrUpdateValue(this ITagsOperations operations, string tagName, string tagValue) + { + return System.Threading.Tasks.Task.Factory.StartNew(s => ((ITagsOperations)s).CreateOrUpdateValueAsync(tagName, tagValue), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// Create a subscription resource tag value. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the tag. + /// + /// + /// The value of the tag. + /// + /// + /// The cancellation token. + /// + public static async System.Threading.Tasks.Task CreateOrUpdateValueAsync(this ITagsOperations operations, string tagName, string tagValue, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + using (var _result = await operations.CreateOrUpdateValueWithHttpMessagesAsync(tagName, tagValue, null, cancellationToken).ConfigureAwait(false)) + { + return _result.Body; + } + } + + /// + /// Create a subscription resource tag. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the tag. + /// + public static TagDetailsInner CreateOrUpdate(this ITagsOperations operations, string tagName) + { + return System.Threading.Tasks.Task.Factory.StartNew(s => ((ITagsOperations)s).CreateOrUpdateAsync(tagName), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// Create a subscription resource tag. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the tag. + /// + /// + /// The cancellation token. + /// + public static async System.Threading.Tasks.Task CreateOrUpdateAsync(this ITagsOperations operations, string tagName, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + using (var _result = await operations.CreateOrUpdateWithHttpMessagesAsync(tagName, null, cancellationToken).ConfigureAwait(false)) + { + return _result.Body; + } + } + + /// + /// Delete a subscription resource tag. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the tag. + /// + public static void Delete(this ITagsOperations operations, string tagName) + { + System.Threading.Tasks.Task.Factory.StartNew(s => ((ITagsOperations)s).DeleteAsync(tagName), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// Delete a subscription resource tag. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the tag. + /// + /// + /// The cancellation token. + /// + public static async System.Threading.Tasks.Task DeleteAsync(this ITagsOperations operations, string tagName, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + await operations.DeleteWithHttpMessagesAsync(tagName, null, cancellationToken).ConfigureAwait(false); + } + + /// + /// Get a list of subscription resource tags. + /// + /// + /// The operations group for this extension method. + /// + public static Microsoft.Rest.Azure.IPage List(this ITagsOperations operations) + { + return System.Threading.Tasks.Task.Factory.StartNew(s => ((ITagsOperations)s).ListAsync(), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// Get a list of subscription resource tags. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The cancellation token. + /// + public static async Task> ListAsync(this ITagsOperations operations, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + using (var _result = await operations.ListWithHttpMessagesAsync(null, cancellationToken).ConfigureAwait(false)) + { + return _result.Body; + } + } + + /// + /// Get a list of subscription resource tags. + /// + /// + /// 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 ITagsOperations operations, string nextPageLink) + { + return System.Threading.Tasks.Task.Factory.StartNew(s => ((ITagsOperations)s).ListNextAsync(nextPageLink), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// Get a list of subscription resource tags. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The NextLink from the previous successful call to List operation. + /// + /// + /// The cancellation token. + /// + public static async Task> ListNextAsync(this ITagsOperations 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/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/TenantsOperations.cs b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/TenantsOperations.cs new file mode 100644 index 000000000..1b3c30775 --- /dev/null +++ b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/TenantsOperations.cs @@ -0,0 +1,381 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.ResourceManager +{ + using System.Linq; + using Microsoft.Rest; + using Microsoft.Rest.Azure; + using Models; + + /// + /// TenantsOperations operations. + /// + internal partial class TenantsOperations : Microsoft.Rest.IServiceOperations, ITenantsOperations + { + /// + /// Initializes a new instance of the TenantsOperations class. + /// + /// + /// Reference to the service client. + /// + /// + /// Thrown when a required parameter is null + /// + internal TenantsOperations(SubscriptionClient client) + { + if (client == null) + { + throw new System.ArgumentNullException("client"); + } + this.Client = client; + } + + /// + /// Gets a reference to the SubscriptionClient + /// + public SubscriptionClient Client { get; private set; } + + /// + /// Gets a list of the tenantIds. + /// + /// + /// 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 + /// + /// + /// A response object containing the response body and response headers. + /// + public async System.Threading.Tasks.Task>> ListWithHttpMessagesAsync(System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + if (this.Client.ApiVersion == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.ApiVersion"); + } + // 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("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("/") ? "" : "/")), "tenants").ToString(); + System.Collections.Generic.List _queryParameters = new System.Collections.Generic.List(); + if (this.Client.ApiVersion != null) + { + _queryParameters.Add(string.Format("api-version={0}", System.Uri.EscapeDataString(this.Client.ApiVersion))); + } + if (_queryParameters.Count > 0) + { + _url += "?" + string.Join("&", _queryParameters); + } + // Create HTTP transport objects + System.Net.Http.HttpRequestMessage _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); + CloudError _errorBody = Microsoft.Rest.Serialization.SafeJsonConvert.DeserializeObject(_responseContent, this.Client.DeserializationSettings); + if (_errorBody != null) + { + ex = new Microsoft.Rest.Azure.CloudException(_errorBody.Message); + 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 (_httpResponse.Headers.Contains("x-ms-request-id")) + { + ex.RequestId = _httpResponse.Headers.GetValues("x-ms-request-id").FirstOrDefault(); + } + 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 a list of the tenantIds. + /// + /// + /// 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 + /// + /// + /// 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 += "?" + string.Join("&", _queryParameters); + } + // Create HTTP transport objects + System.Net.Http.HttpRequestMessage _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); + CloudError _errorBody = Microsoft.Rest.Serialization.SafeJsonConvert.DeserializeObject(_responseContent, this.Client.DeserializationSettings); + if (_errorBody != null) + { + ex = new Microsoft.Rest.Azure.CloudException(_errorBody.Message); + 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 (_httpResponse.Headers.Contains("x-ms-request-id")) + { + ex.RequestId = _httpResponse.Headers.GetValues("x-ms-request-id").FirstOrDefault(); + } + 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; + } + + } +} diff --git a/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/TenantsOperationsExtensions.cs b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/TenantsOperationsExtensions.cs new file mode 100644 index 000000000..77c9442bd --- /dev/null +++ b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Generated/TenantsOperationsExtensions.cs @@ -0,0 +1,83 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.ResourceManager +{ + using System.Threading.Tasks; + using Microsoft.Rest.Azure; + using Models; + + /// + /// Extension methods for TenantsOperations. + /// + public static partial class TenantsOperationsExtensions + { + /// + /// Gets a list of the tenantIds. + /// + /// + /// The operations group for this extension method. + /// + public static Microsoft.Rest.Azure.IPage List(this ITenantsOperations operations) + { + return System.Threading.Tasks.Task.Factory.StartNew(s => ((ITenantsOperations)s).ListAsync(), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// Gets a list of the tenantIds. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The cancellation token. + /// + public static async Task> ListAsync(this ITenantsOperations operations, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + using (var _result = await operations.ListWithHttpMessagesAsync(null, cancellationToken).ConfigureAwait(false)) + { + return _result.Body; + } + } + + /// + /// Gets a list of the tenantIds. + /// + /// + /// 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 ITenantsOperations operations, string nextPageLink) + { + return System.Threading.Tasks.Task.Factory.StartNew(s => ((ITenantsOperations)s).ListNextAsync(nextPageLink), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// Gets a list of the tenantIds. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The NextLink from the previous successful call to List operation. + /// + /// + /// The cancellation token. + /// + public static async Task> ListNextAsync(this ITenantsOperations 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/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/GenericResource/GenericResourceImpl.cs b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/GenericResource/GenericResourceImpl.cs new file mode 100644 index 000000000..3b1fd1e44 --- /dev/null +++ b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/GenericResource/GenericResourceImpl.cs @@ -0,0 +1,223 @@ +using Microsoft.Azure.Management.ResourceManager; +using Microsoft.Azure.Management.ResourceManager.Models; +using Microsoft.Azure.Management.V2.Resource.GenericResource.Definition; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; +using Microsoft.Azure.Management.V2.Resource.Core; +using System.Threading; +using Microsoft.Azure.Management.V2.Resource.GenericResource.Update; +using Microsoft.Azure.Management.V2.Resource.Core.Resource.Definition; +using Microsoft.Azure.Management.V2.Resource.Core.ResourceActions; +using Microsoft.Azure.Management.V2.Resource.Core.Resource.Update; + +namespace Microsoft.Azure.Management.V2.Resource +{ + internal class GenericResourceImpl : GroupableResource, + IGenericResource, + GenericResource.Definition.IDefintion, + GenericResource.Update.IUpdate, + GenericResource.Update.IWithApiVersion + { + private IResourcesOperations client; + internal string resourceProviderNamespace; + internal string parentResourceId; + internal string resourceType; + internal string apiVersion; + + #region Getters + + public string ResourceProviderNamespace + { + get + { + return resourceProviderNamespace; + } + } + + public string ParentResourceId + { + get + { + return parentResourceId; + } + } + + public string ResourceType + { + get + { + return resourceType; + } + } + + public string ApiVersion + { + get + { + return apiVersion; + } + } + + public Plan Plan + { + get + { + return Inner.Plan; + } + } + + public object Properties + { + get + { + return Inner.Properties; + } + } + + #endregion + + internal GenericResourceImpl(string key, + GenericResourceInner innerModel, + IResourcesOperations client, + IResourceManager resourceManager) : base(key, innerModel, resourceManager) + { + this.client = client; + } + + #region Implementation of IResourceCreator interface + + public override async Task CreateResourceAsync(CancellationToken cancellationToken) + { + GenericResourceInner inner = await client.CreateOrUpdateAsync(ResourceGroupName, + resourceProviderNamespace, + parentResourceId, + resourceType, + Name, + apiVersion, + Inner, + cancellationToken); + SetInner(inner); + return this; + } + + #endregion + + public override Task Refresh() + { + return null; + } + + + public GenericResource.Update.IWithApiVersion Update() + { + return this; + } + + #region Setters + + #region Definition Setters + + public IWithProviderNamespace WithResourceType(string resourceType) + { + this.resourceType = resourceType; + return this; + } + + public GenericResource.Definition.IWithPlan WithProviderNamespace(string resourceProviderNamespace) + { + this.resourceProviderNamespace = resourceProviderNamespace; + return this; + } + + public IWithCreate WithApiVersion(string apiVersion) + { + this.apiVersion = apiVersion; + return this; + } + + public IWithCreate WithProperties(object properties) + { + Inner.Properties = properties; + return this; + } + + public GenericResource.Definition.IWithCreate WithParentResource(string parentResourceId) + { + this.parentResourceId = parentResourceId; + return this; + } + + public GenericResource.Definition.IWithApiVersion WithPlan(string name, string publisher, string product, string promotionCode) + { + Inner.Plan = new Plan + { + Name = name, + Publisher = publisher, + Product = product, + PromotionCode = promotionCode + }; + return this; + } + + public GenericResource.Definition.IWithApiVersion WithoutPlan() + { + Inner.Plan = null; + return this; + } + + #endregion + + #region Update setters + + + IUpdate GenericResource.Update.IWithPlan.WithPlan(string name, string publisher, string product, string promotionCode) + { + Inner.Plan = new Plan + { + Name = name, + Publisher = publisher, + Product = product, + PromotionCode = promotionCode + }; + return this; + } + + IUpdate GenericResource.Update.IWithParentResource.WithParentResource(string parentResourceId) + { + this.parentResourceId = parentResourceId; + return this; + } + + IUpdate IWithProperties.WithProperties(object properties) + { + Inner.Properties = properties; + return this; + } + + IUpdate GenericResource.Update.IWithApiVersion.WithApiVersion(string apiVersion) + { + this.apiVersion = apiVersion; + return this; + } + + IUpdate GenericResource.Update.IWithPlan.WithoutPlan() + { + Inner.Plan = null; + return this; + } + + #endregion + + #endregion + } +} diff --git a/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/GenericResource/GenericResourcesImpl.cs b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/GenericResource/GenericResourcesImpl.cs new file mode 100644 index 000000000..4936f06f0 --- /dev/null +++ b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/GenericResource/GenericResourcesImpl.cs @@ -0,0 +1,129 @@ +using Microsoft.Azure.Management.ResourceManager; +using Microsoft.Azure.Management.ResourceManager.Models; +using Microsoft.Azure.Management.V2.Resource.Core; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; +using Microsoft.Azure.Management.V2.Resource.GenericResource.Definition; +using System.Threading; +using Microsoft.Rest.Azure; + +namespace Microsoft.Azure.Management.V2.Resource +{ + internal class GenericResourcesImpl : + GroupableResources, + IGenericResources + { + private ResourceManagementClient client; + + internal GenericResourcesImpl(ResourceManagementClient client, IResourceManager resourceManager) : base(client.Resources, resourceManager) + { + this.client = client; + } + + public bool CheckExistence(string resourceGroupName, string resourceProviderNamespace, string parentResourcePath, string resourceType, string resourceName, string apiVersion) + { + return InnerCollection.CheckExistence( + resourceGroupName, + resourceProviderNamespace, + parentResourcePath, + resourceType, + resourceName, + apiVersion); + } + + public IBlank Define(string name) + { + return new GenericResourceImpl(name, new GenericResourceInner(), this.client.Resources, MyManager); + } + + public void Delete(string resourceGroupName, string resourceProviderNamespace, string parentResourcePath, string resourceType, string resourceName, string apiVersion) + { + this.InnerCollection.Delete(resourceGroupName, resourceProviderNamespace, parentResourcePath, resourceType, resourceName, apiVersion); + } + + public IGenericResource Get(string resourceGroupName, string resourceProviderNamespace, string parentResourcePath, string resourceType, string resourceName, string apiVersion) + { + // Correct for auto-gen'd API's treatment parent path as required even though it makes sense only for child resources + if (parentResourcePath == null) + { + parentResourcePath = ""; + } + + GenericResourceInner inner = InnerCollection.Get( + resourceGroupName, + resourceProviderNamespace, + parentResourcePath, + resourceType, + resourceName, + apiVersion); + GenericResourceImpl resource = new GenericResourceImpl( + resourceName, + inner, + client.Resources, + MyManager) + { + resourceProviderNamespace = resourceProviderNamespace, + parentResourceId = parentResourcePath, + resourceType = resourceType, + apiVersion = apiVersion + }; + + return resource; + } + + public override Task GetByGroupAsync(string groupName, string name) + { + // Not needed, can't be supported, provided only to satisfy GroupableResourceImpl's requirements + return null; + } + + public PagedList ListByGroup(string resourceGroupName) + { + IPage firstPage = InnerCollection.List(); + var pagedList = new PagedList(firstPage, (string nextPageLink) => + { + return InnerCollection.ListNext(nextPageLink); + }); + return WrapList(pagedList); + } + + public Task> ListByGroupAsync(string resourceGroupName, CancellationToken cancellationToken = default(CancellationToken)) + { + throw new NotSupportedException(); + } + + public void MoveResources(string sourceResourceGroupName, IResourceGroup targetResourceGroup, IList resources) + { + ResourcesMoveInfoInner moveInfo = new ResourcesMoveInfoInner() + { + TargetResourceGroup = targetResourceGroup.Id, + Resources = resources, + }; + InnerCollection.MoveResources(sourceResourceGroupName, moveInfo); + } + + protected override IGenericResource WrapModel(GenericResourceInner inner) + { + IGenericResource model = (IGenericResource)new GenericResourceImpl(inner.Id, inner, this.client.Resources, MyManager) + { + resourceProviderNamespace = ResourceUtils.ResourceProviderFromResourceId(inner.Id), + parentResourceId = ResourceUtils.ParentResourcePathFromResourceId(inner.Id), + resourceType = ResourceUtils.ResourceTypeFromResourceId(inner.Id) + }.WithExistingResourceGroup(ResourceUtils.GroupFromResourceId(inner.Id)); + return model; + } + + protected override GenericResourceImpl WrapModel(string id) + { + GenericResourceImpl model = (GenericResourceImpl)new GenericResourceImpl(id, new GenericResourceInner(), this.client.Resources, MyManager) + { + resourceProviderNamespace = ResourceUtils.ResourceProviderFromResourceId(id), + parentResourceId = ResourceUtils.ParentResourcePathFromResourceId(id), + resourceType = ResourceUtils.ResourceTypeFromResourceId(id) + }.WithExistingResourceGroup(ResourceUtils.GroupFromResourceId(id)); + return model; + } + } +} diff --git a/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/LocationInner.cs b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/LocationInner.cs new file mode 100644 index 000000000..cce738347 --- /dev/null +++ b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/LocationInner.cs @@ -0,0 +1,6 @@ +namespace Microsoft.Azure.Management.V2.Resource +{ + public class LocationInner + { + } +} \ No newline at end of file diff --git a/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Microsoft.Azure.Management.V2.Resource.xproj b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Microsoft.Azure.Management.V2.Resource.xproj new file mode 100644 index 000000000..a970500dd --- /dev/null +++ b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Microsoft.Azure.Management.V2.Resource.xproj @@ -0,0 +1,18 @@ + + + + 14.0 + $(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion) + + + + a5986bdb-0d0d-48aa-9e49-ece96bac8aee + Microsoft.Azure.Management.V2.Resource + .\obj + .\bin\ + + + 2.0 + + + \ No newline at end of file diff --git a/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/MissingInners.cs b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/MissingInners.cs new file mode 100644 index 000000000..4c29e81df --- /dev/null +++ b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/MissingInners.cs @@ -0,0 +1,9 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; + +namespace Microsoft.Azure.Management.V2.Resource +{ + public class TenantIdDescriptionInner {} +} diff --git a/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Provider/ProviderImpl.cs b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Provider/ProviderImpl.cs new file mode 100644 index 000000000..426a07141 --- /dev/null +++ b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Provider/ProviderImpl.cs @@ -0,0 +1,39 @@ +using Microsoft.Azure.Management.ResourceManager.Models; +using Microsoft.Azure.Management.V2.Resource.Core; +using System.Collections.Generic; + +namespace Microsoft.Azure.Management.V2.Resource +{ + internal class ProviderImpl : + IndexableWrapper, + IProvider + { + internal ProviderImpl(ProviderInner provider) : base(provider.Id, provider) + { + } + + public string Namespace + { + get + { + return Inner.NamespaceProperty; + } + } + + public string RegistrationState + { + get + { + return Inner.RegistrationState; + } + } + + public IList ResourceTypes + { + get + { + return Inner.ResourceTypes; + } + } + } +} diff --git a/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Provider/ProvidersImpl.cs b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Provider/ProvidersImpl.cs new file mode 100644 index 000000000..537ab2b13 --- /dev/null +++ b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Provider/ProvidersImpl.cs @@ -0,0 +1,57 @@ +using Microsoft.Azure.Management.ResourceManager; +using Microsoft.Azure.Management.ResourceManager.Models; +using Microsoft.Azure.Management.V2.Resource.Core; +using System.Threading; +using System.Threading.Tasks; + +namespace Microsoft.Azure.Management.V2.Resource +{ + internal class ProvidersImpl : IProviders + { + private IProvidersOperations client; + + internal ProvidersImpl(IProvidersOperations client) + { + this.client = client; + } + + public IProvider GetByName(string resourceProviderNamespace) + { + return new ProviderImpl(client.Get(resourceProviderNamespace)); + } + + public async Task GetByNameAsync(string resourceProviderNamespace, CancellationToken cancellationToken = default(CancellationToken)) + { + ProviderInner inner = await client.GetAsync(resourceProviderNamespace, null, cancellationToken); + return new ProviderImpl(inner); + } + + public PagedList List() + { + PagedList innerList = new PagedList(client.List(), (string nextLink) => + { + return client.ListNext(nextLink); + }); + return new PagedList(new WrappedPage(innerList.CurrentPage, WrapModel), (string nextLink) => + { + innerList.LoadNextPage(); + return new WrappedPage(innerList.CurrentPage, WrapModel); + }); + } + + public IProvider Register(string resourceProviderNamespace) + { + return WrapModel(client.Register(resourceProviderNamespace)); + } + + public IProvider Unregister(string resourceProviderNamespace) + { + return WrapModel(client.Unregister(resourceProviderNamespace)); + } + + private IProvider WrapModel(ProviderInner innerModel) + { + return new ProviderImpl(innerModel); + } + } +} diff --git a/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Region.cs b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Region.cs new file mode 100644 index 000000000..317741643 --- /dev/null +++ b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Region.cs @@ -0,0 +1,42 @@ +namespace Microsoft.Azure.Management.V2.Resource.Core +{ + public enum Region + { + [EnumName("westus")] + US_WEST, + [EnumName("centralus")] + US_CENTRAL, + [EnumName("eastus")] + US_EAST, + [EnumName("eastus2")] + US_EAST2, + [EnumName("northcentralus")] + US_NORTH_CENTRAL, + [EnumName("southcentralus")] + US_SOUTH_CENTRAL, + [EnumName("northeurope")] + EUROPE_NORTH, + [EnumName("westeurope")] + EUROPE_WEST, + [EnumName("eastasia")] + ASIA_EAST, + [EnumName("southeastasia")] + ASIA_SOUTHEAST, + [EnumName("japaneast")] + JAPAN_EAST, + [EnumName("japanwest")] + JAPAN_WEST, + [EnumName("brazilsouth")] + BRAZIL_SOUTH, + [EnumName("australiaeast")] + AUSTRALIA_EAST, + [EnumName("australiasoutheast")] + AUSTRALIA_SOUTHEAST, + [EnumName("centralindia")] + INDIA_CENTRAL, + [EnumName("southindia")] + INDIA_SOUTH, + [EnumName("westindia")] + INDIA_WEST + } +} \ No newline at end of file diff --git a/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/ResourceGroup/ResourceGroupExportResultImpl.cs b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/ResourceGroup/ResourceGroupExportResultImpl.cs new file mode 100644 index 000000000..81dfee186 --- /dev/null +++ b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/ResourceGroup/ResourceGroupExportResultImpl.cs @@ -0,0 +1,40 @@ +using Microsoft.Azure.Management.ResourceManager.Models; +using Microsoft.Azure.Management.V2.Resource.Core; +using Newtonsoft.Json; + +namespace Microsoft.Azure.Management.V2.Resource +{ + internal class ResourceGroupExportResultImpl : + Wrapper, + IResourceGroupExportResult + { + + public ResourceGroupExportResultImpl(ResourceGroupExportResultInner inner) : base(inner) + { + } + + public ResourceManagementErrorWithDetails Error + { + get + { + return Inner.Error; + } + } + + public object Template + { + get + { + return Inner.Template; + } + } + + public string TemplateJson + { + get + { + return JsonConvert.SerializeObject(Template); + } + } + } +} diff --git a/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/ResourceGroup/ResourceGroupImpl.cs b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/ResourceGroup/ResourceGroupImpl.cs new file mode 100644 index 000000000..5e7910dce --- /dev/null +++ b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/ResourceGroup/ResourceGroupImpl.cs @@ -0,0 +1,194 @@ +using Microsoft.Azure.Management.V2.Resource.Core; +using Microsoft.Azure.Management.V2.Resource.Core.ResourceActions; +using System.Collections.Generic; +using System.Threading; +using System.Threading.Tasks; +using System; +using Microsoft.Azure.Management.V2.Resource.ResourceGroup.Definition; +using Microsoft.Azure.Management.V2.Resource.Core.Resource.Update; +using Microsoft.Azure.Management.V2.Resource.ResourceGroup.Update; +using Microsoft.Azure.Management.ResourceManager.Models; + +namespace Microsoft.Azure.Management.V2.Resource +{ + internal class ResourceGroupImpl : + CreatableUpdatable, + IResourceGroup, + ResourceGroup.Definition.IDefinition, + ResourceGroup.Update.IUpdate + { + ResourceManager.IResourceGroupsOperations client; + + internal ResourceGroupImpl(ResourceGroupInner innerModel, ResourceManager.IResourceGroupsOperations client) : base(innerModel.Name, innerModel) + { + this.client = client; + } + + #region Getters + + public string Name + { + get + { + return Inner.Name; + } + } + + public string ProvisioningState + { + get + { + return Inner.Properties.ProvisioningState; + } + } + + public string RegionName + { + get + { + return Inner.Location; + } + } + + public Region Region + { + get + { + return EnumNameAttribute.FromName(RegionName); + } + } + + public string Id + { + get + { + return Inner.Id; + } + } + + public string Type + { + get + { + return null; + } + } + + IDictionary IResource.Tags + { + get + { + return Inner.Tags; + } + } + + #endregion + + public IResourceGroupExportResult ExportTemplate(ResourceGroupExportTemplateOptions options) + { + ExportTemplateRequestInner inner = new ExportTemplateRequestInner(); + inner.Resources = new List() { "*" }; + inner.Options = EnumNameAttribute.GetName(options); + var result = client.ExportTemplateWithHttpMessagesAsync(Name, inner).Result; + return new ResourceGroupExportResultImpl(result.Body); + } + + #region Fluent setters + + #region Definition setters + + public ResourceGroup.Definition.IWithCreate WithRegion(string regionName) + { + Inner.Location = regionName; + return this; + } + + public IWithCreate WithRegion(Region region) + { + return WithRegion(EnumNameAttribute.GetName(region)); + } + + public IWithCreate WithTags(IDictionary tags) + { + Inner.Tags = tags; + return this; + } + + public IWithCreate WithTag(string key, string value) + { + if (Inner.Tags == null) + { + Inner.Tags = new Dictionary(); + } + + if (!Inner.Tags.ContainsKey(key)) + { + Inner.Tags.Add(key, value); + } + return this; + } + + #endregion + + #region Update setters + + IUpdate IUpdateWithTags.WithTags(IDictionary tags) + { + Inner.Tags = tags; + return this; + } + + IUpdate IUpdateWithTags.WithTag(string key, string value) + { + if (Inner.Tags == null) + { + Inner.Tags = new Dictionary(); + } + + if (!Inner.Tags.ContainsKey(key)) + { + Inner.Tags.Add(key, value); + } + return this; + } + + IUpdate IUpdateWithTags.WithoutTag(string key) + { + if (Inner.Tags != null && Inner.Tags.ContainsKey(key)) + { + Inner.Tags.Remove(key); + } + return this; + } + + #endregion + + #endregion + + #region Implementation of IRefreshable interface + + public override async Task Refresh() + { + var result = await client.GetWithHttpMessagesAsync(Name); + SetInner(result.Body); + return this; + } + + #endregion + + public override async Task CreateResourceAsync(CancellationToken cancellationToken) + { + ResourceGroupInner param = new ResourceGroupInner(); + param.Location = Inner.Location; + param.Tags = Inner.Tags; + var response = await client.CreateOrUpdateWithHttpMessagesAsync(Name, param, null, cancellationToken); + SetInner(response.Body); + return this; + } + + public override IResourceGroup CreateResource() + { + return CreateResourceAsync(CancellationToken.None).Result; + } + } +} diff --git a/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/ResourceGroup/ResourceGroupsImpl.cs b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/ResourceGroup/ResourceGroupsImpl.cs new file mode 100644 index 000000000..57416678a --- /dev/null +++ b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/ResourceGroup/ResourceGroupsImpl.cs @@ -0,0 +1,82 @@ +using System; +using System.Threading; +using System.Threading.Tasks; +using Microsoft.Azure.Management.ResourceManager; +using Microsoft.Azure.Management.V2.Resource.Core; +using Microsoft.Rest.Azure; +using Microsoft.Azure.Management.ResourceManager.Models; + +namespace Microsoft.Azure.Management.V2.Resource +{ + internal class ResourceGroupsImpl : + CreatableWrappers, + IResourceGroups + { + private IResourceGroupsOperations InnerCollection { get; set; } + + internal ResourceGroupsImpl(IResourceGroupsOperations innerCollection) + { + InnerCollection = innerCollection; + } + + public PagedList List() + { + IPage firstPage = InnerCollection.List(); + var pagedList = new PagedList(firstPage, (string nextPageLink) => + { + return InnerCollection.ListNext(nextPageLink); + }); + return WrapList(pagedList); + } + + public bool CheckExistence(string name) + { + return InnerCollection.CheckExistence(name); + } + + public ResourceGroup.Definition.IBlank Define(string name) + { + ResourceGroupInner inner = new ResourceGroupInner(); + inner.Name = name; + return new ResourceGroupImpl(inner, InnerCollection); + } + + public void Delete(string name) + { + DeleteAsync(name).Wait(); + } + + public Task DeleteAsync(string name, CancellationToken cancellationToken = default(CancellationToken)) + { + return InnerCollection.DeleteAsync(name, cancellationToken); + } + + public IResourceGroup GetByName(string name) + { + return GetByNameAsync(name).Result; + } + + public async Task GetByNameAsync(string name, CancellationToken cancellationToken = default(CancellationToken)) + { + var resourceGroupInner = await InnerCollection.GetAsync(name, cancellationToken); + return WrapModel(resourceGroupInner); + } + + #region Implementation of CreatableWrappers abstract methods + + protected override ResourceGroupImpl WrapModel(string name) + { + return new ResourceGroupImpl(new ResourceGroupInner + { + Name = name + }, InnerCollection); + } + + protected override IResourceGroup WrapModel(ResourceGroupInner inner) + { + return new ResourceGroupImpl(inner, InnerCollection); + } + + #endregion + } +} diff --git a/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/ResourceGroupExportTemplateOptions.cs b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/ResourceGroupExportTemplateOptions.cs new file mode 100644 index 000000000..8dda66a5e --- /dev/null +++ b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/ResourceGroupExportTemplateOptions.cs @@ -0,0 +1,15 @@ +using Microsoft.Azure.Management.V2.Resource.Core; +using System; + +namespace Microsoft.Azure.Management.V2.Resource +{ + public enum ResourceGroupExportTemplateOptions + { + [EnumName("IncludeParameterDefaultValue")] + INCLUDE_PARAMETER_DEFAULT_VALUE, + [EnumName("IncludeComments")] + INCLUDE_COMMENTS, + [EnumName("IncludeParameterDefaultValue, IncludeComments")] + INCLUDE_BOTH + } +} \ No newline at end of file diff --git a/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/ResourceManager2.cs b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/ResourceManager2.cs new file mode 100644 index 000000000..b38005252 --- /dev/null +++ b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/ResourceManager2.cs @@ -0,0 +1,270 @@ +using Microsoft.Azure.Management.ResourceManager; +using Microsoft.Azure.Management.V2.Resource.Core; +using Microsoft.Rest; +using System; +using System.Linq; + +namespace Microsoft.Azure.Management.V2.Resource +{ + public class ResourceManager2 : ManagerBase, IResourceManager + { + #region SDK clients + private ResourceManagementClient resourceManagementClient; + private FeatureClient featureClient; + #endregion + + #region ctrs + + private ResourceManager2(RestClient restClient, string subscriptionId) : base(null, subscriptionId) + { + resourceManagementClient = new ResourceManager.ResourceManagementClient(new Uri(restClient.BaseUri), + restClient.Credentials, + restClient.RootHttpHandler, + restClient.Handlers.ToArray()); + resourceManagementClient.SubscriptionId = subscriptionId; + featureClient = new FeatureClient(new Uri(restClient.BaseUri), + restClient.Credentials, + restClient.RootHttpHandler, + restClient.Handlers.ToArray()); + featureClient.SubscriptionId = subscriptionId; + ResourceManager = this; + } + + #endregion + + #region ResourceManager2 builder + + public static IAuthenticated Authenticate(ServiceClientCredentials serviceClientCredentials) + { + return new Authenticated(RestClient.Configure() + .withEnvironment(AzureEnvironment.AzureGlobalCloud) + .withCredentials(serviceClientCredentials) + .build() + ); + } + + public static IAuthenticated Authenticate(RestClient restClient) + { + return new Authenticated(restClient); + } + + public static IConfigurable Configure() + { + return new Configurable(); + } + + #endregion + + #region IAuthenticated and it's implementation + + /// + /// The interface exposing resource management API entry points that work across subscriptions. + /// + public interface IAuthenticated + { + /// + /// Gets the entry point to tenant management API. + /// + ITenants Tenants { get; } + + /// + /// Gets the entry point to subscription management API. + /// + ISubscriptions Subscriptions { get; } + + /// + /// Specifies a subscription to expose resource management API entry points that work in a subscription. + /// + /// The subscription UUID + /// The IResourceManager, the entry point that works in a subscription + IResourceManager WithSubscription(string subscriptionId); + } + + protected class Authenticated : IAuthenticated + { + private RestClient restClient; + private SubscriptionClient subscriptionClient; + + public Authenticated(RestClient restClient) + { + this.restClient = restClient; + subscriptionClient = new SubscriptionClient(new Uri(restClient.BaseUri), + restClient.Credentials, + restClient.RootHttpHandler, + restClient.Handlers.ToArray()); + } + + #region Implementaiton of IAuthenticated interface + + private ISubscriptions subscriptions; + private ITenants tenants; + + public ISubscriptions Subscriptions + { + get + { + if (subscriptions == null) + { + subscriptions = new SubscriptionsImpl(subscriptionClient.Subscriptions); + } + return subscriptions; + } + } + + public ITenants Tenants + { + get + { + if (tenants == null) + { + tenants = new TenantsImpl(subscriptionClient.Tenants); + } + return tenants; + } + } + + public IResourceManager WithSubscription(string subscriptionId) + { + return new ResourceManager2(restClient, subscriptionId); + } + + #endregion + } + #endregion + + #region IConfigurable and it's implementation + + /// + /// The inteface allowing configurations to be set. + /// + public interface IConfigurable : IAzureConfigurable + { + /// + /// Creates an IAuthentciated implementaition exposing resource managment API entry point that work across subscriptions + /// + /// The credentials to use + /// IAuthentciated, the inteface exposing resource managment API entry point that work across subscriptions + IAuthenticated Authenticate(ServiceClientCredentials serviceClientCredentials); + } + + protected class Configurable : + AzureConfigurable, + IConfigurable + { + IAuthenticated IConfigurable.Authenticate(ServiceClientCredentials credentials) + { + return new Authenticated(BuildRestClient(credentials)); + } + } + + #endregion + + #region Implementation of IResourceManager interface + + #region Subscription based fluent collections in Azure resource service. + + private IResourceGroups resourceGroups; + private IGenericResources genericResources; + private IDeployments deployments; + private IFeatures features; + private IProviders providers; + + #endregion + + public IResourceGroups ResourceGroups + { + get + { + if (resourceGroups == null) + { + resourceGroups = new ResourceGroupsImpl(resourceManagementClient.ResourceGroups); + } + return resourceGroups; + } + } + + public IGenericResources GenericResources + { + get + { + if (genericResources == null) + { + genericResources = new GenericResourcesImpl(resourceManagementClient, this); + + } + return genericResources; + } + } + + public IDeployments Deployments + { + get + { + if (deployments == null) + { + deployments = new DeploymentsImpl(resourceManagementClient.Deployments, + resourceManagementClient.DeploymentOperations, + this); + } + return deployments; + } + } + + public IFeatures Features + { + get + { + if (features == null) + { + features = new FeaturesImpl(featureClient.Features); + } + return features; + } + } + + public IProviders Providers + { + get + { + if (providers == null) + { + providers = new ProvidersImpl(resourceManagementClient.Providers); + } + return providers; + } + } + + #endregion + } + + /// + /// Entry point to Azure resource management. + /// + public interface IResourceManager : IManagerBase + { + /// + /// Gets the resource group management API entry point. + /// + IResourceGroups ResourceGroups { get; } + + /// + /// Gets the generic resource management API entry point. + /// + IGenericResources GenericResources { get; } + + /// + /// Gets the deployment management API entry point. + /// + IDeployments Deployments { get; } + + /// + /// Gets the feature management API entry point. + /// + IFeatures Features { get; } + + /// + /// Gets the provider management API entry point. + /// + IProviders Providers { get; } + } +} diff --git a/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/ResourceNamer.cs b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/ResourceNamer.cs new file mode 100644 index 000000000..ab4313931 --- /dev/null +++ b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/ResourceNamer.cs @@ -0,0 +1,82 @@ +using System; +using System.Collections.Generic; +using System.Globalization; +using System.Linq; +using System.Threading.Tasks; + +namespace Microsoft.Azure.Management.V2.Resource +{ + public class ResourceNamer + { + private readonly string randName; + private static string[] formats = new string[] { "M/d/yyyy h:mm:ss tt" }; + + /** + * Creates ResourceNamer. + * + * @param name the randName + */ + public ResourceNamer(string name) + { + this.randName = name.ToLower() + Guid.NewGuid().ToString("N").Substring(0, 3).ToLower(); + } + + /** + * Gets a random name. + * + * @param prefix the prefix to be used if possible + * @param maxLen the max length for the random generated name + * @return the random name + */ + public string RandomName(String prefix, int maxLen) + { + prefix = prefix.ToLower(); + int minRandomnessLength = 5; + if (maxLen <= minRandomnessLength) + { + return RandomString(maxLen); + } + + if (maxLen <= prefix.Length + minRandomnessLength) + { + return RandomString(maxLen); + } + + var millis = DateTime.Now.Ticks / TimeSpan.TicksPerMillisecond; + var jan1970millis = DateTime.ParseExact("1/1/1970 0:00:00 AM", ResourceNamer.formats, + new CultureInfo("en-US"), DateTimeStyles.None).Ticks / TimeSpan.TicksPerMillisecond; + String minRandomString = ((millis - jan1970millis) % 100000L).ToString(); + if (maxLen <= (prefix.Length + randName.Length + minRandomnessLength)) + { + var str1 = prefix + minRandomString; + return str1 + RandomString((maxLen - str1.Length) / 2); + } + + string str = prefix + randName + minRandomString; + return str + RandomString((maxLen - str.Length) / 2); + } + + private string RandomString(int length) + { + String str = ""; + while (str.Length < length) + { + str += Guid.NewGuid().ToString("N").Substring(0, Math.Min(32, length)).ToLower(); + } + return str; + } + + /** + * Gets a random name. + * + * @param prefix the prefix to be used if possible + * @param maxLen the maximum length for the random generated name + * @return the random name + */ + public static string RandomResourceName(String prefix, int maxLen) + { + ResourceNamer namer = new ResourceNamer(""); + return namer.RandomName(prefix, maxLen); + } + } +} diff --git a/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Subscription/SubscriptionImpl.cs b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Subscription/SubscriptionImpl.cs new file mode 100644 index 000000000..2975a389b --- /dev/null +++ b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Subscription/SubscriptionImpl.cs @@ -0,0 +1,59 @@ +using Microsoft.Azure.Management.ResourceManager; +using Microsoft.Azure.Management.ResourceManager.Models; +using Microsoft.Azure.Management.V2.Resource.Core; +using System.Collections.Generic; +using System; + +namespace Microsoft.Azure.Management.V2.Resource +{ + internal class SubscriptionImpl : + IndexableWrapper, + ISubscription + { + private ISubscriptionsOperations innerCollection; + + internal SubscriptionImpl(Management.ResourceManager.Models.SubscriptionInner innerModel, ISubscriptionsOperations client) : base(innerModel.Id, innerModel) + { + innerCollection = client; + } + + public string DisplayName + { + get + { + return Inner.DisplayName; + } + } + + public string State + { + get + { + return Inner.State; + } + } + + public string SubscriptionId + { + get + { + return Inner.SubscriptionId; + } + } + + public SubscriptionPolicies SubscriptionPolicies + { + get + { + return Inner.SubscriptionPolicies; + } + } + + public PagedList ListLocations() + { + IEnumerable firstPage = innerCollection.ListLocations(this.SubscriptionId); + throw new NotImplementedException("GeneratedSDKIssue: Generated SDK is not using LocationInner"); + //return new PagedList(firstPage); + } + } +} diff --git a/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Subscription/SubscriptionsImpl.cs b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Subscription/SubscriptionsImpl.cs new file mode 100644 index 000000000..4aa1ccab3 --- /dev/null +++ b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Subscription/SubscriptionsImpl.cs @@ -0,0 +1,51 @@ +using Microsoft.Azure.Management.ResourceManager; +using Microsoft.Azure.Management.V2.Resource.Core; +using Microsoft.Rest.Azure; +using System; +using System.Threading; +using System.Threading.Tasks; + +namespace Microsoft.Azure.Management.V2.Resource +{ + internal class SubscriptionsImpl : + ISubscriptions + { + private ISubscriptionsOperations innerCollection; + + internal SubscriptionsImpl(ISubscriptionsOperations client) + { + this.innerCollection = client; + } + + public PagedList List() + { + IPage firstPage = innerCollection.List(); + var innerList = new PagedList(firstPage, (string nextPageLink) => + { + return innerCollection.ListNext(nextPageLink); + }); + + return new PagedList(new WrappedPage(innerList.CurrentPage, WrapModel), + (string nextPageLink) => + { + innerList.LoadNextPage(); + return new WrappedPage(innerList.CurrentPage, WrapModel); + }); + } + + public ISubscription GetByName(string name) + { + throw new NotImplementedException(); + } + + public Task GetByNameAsync(string name, CancellationToken cancellationToken = default(CancellationToken)) + { + throw new NotImplementedException(); + } + + private ISubscription WrapModel(Management.ResourceManager.Models.SubscriptionInner innerModel) + { + return new SubscriptionImpl(innerModel, innerCollection); + } + } +} \ No newline at end of file diff --git a/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Tenant/TenantImpl.cs b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Tenant/TenantImpl.cs new file mode 100644 index 000000000..cc2763c65 --- /dev/null +++ b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Tenant/TenantImpl.cs @@ -0,0 +1,30 @@ +using System; +using Microsoft.Azure.Management.ResourceManager.Models; +using Microsoft.Azure.Management.V2.Resource.Core; + +namespace Microsoft.Azure.Management.V2.Resource +{ + internal class TenantImpl : + IndexableWrapper, + ITenant + { + internal TenantImpl(TenantIdDescription inner) : base(inner.Id, inner) + {} + + public string TenantId + { + get + { + return Inner.TenantId; + } + } + + TenantIdDescriptionInner IWrapper.Inner + { + get + { + throw new NotImplementedException(); + } + } + } +} diff --git a/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Tenant/TenantsImpl.cs b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Tenant/TenantsImpl.cs new file mode 100644 index 000000000..56e4b5357 --- /dev/null +++ b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/Tenant/TenantsImpl.cs @@ -0,0 +1,40 @@ +using System; +using Microsoft.Azure.Management.ResourceManager; +using Microsoft.Azure.Management.ResourceManager.Models; +using Microsoft.Azure.Management.V2.Resource.Core; +using Microsoft.Azure.Management.V2.Resource.Core.CollectionActions; +using Microsoft.Rest.Azure; + +namespace Microsoft.Azure.Management.V2.Resource +{ + internal class TenantsImpl : + ITenants + { + private ITenantsOperations innerCollection; + internal TenantsImpl(ITenantsOperations client) + { + this.innerCollection = client; + } + + PagedList ISupportsListing.List() + { + IPage firstPage = innerCollection.List(); + var innerList = new PagedList(firstPage, (string nextPageLink) => + { + return innerCollection.ListNext(nextPageLink); + }); + + return new PagedList(new WrappedPage(innerList.CurrentPage, WrapModel), + (string nextPageLink) => + { + innerList.LoadNextPage(); + return new WrappedPage(innerList.CurrentPage, WrapModel); + }); + } + + private ITenant WrapModel(TenantIdDescription inner) + { + return new TenantImpl(inner); + } + } +} diff --git a/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/project.json b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/project.json new file mode 100644 index 000000000..6872b4776 --- /dev/null +++ b/src/ResourceManagement/Resource/Microsoft.Azure.Management.V2.Resource/project.json @@ -0,0 +1,51 @@ +{ + "version": "0.0.1-prerelease", + "description": "TODOResourceV2Description.", + "authors": [ "Microsoft" ], + "packOptions": { + "summary": "TODOResourceV2Description.", + "iconUrl": "http://go.microsoft.com/fwlink/?LinkID=288890", + "tags": [ "Microsoft Azure Resource management", "resource", "REST HTTP client", "azureofficial", "windowsazureofficial" ], + "projectUrl": "https://github.com/Azure/azure-sdk-for-net", + "licenseUrl": "https://raw.githubusercontent.com/Microsoft/dotnet/master/LICENSE", + "requireLicenseAcceptance": true + }, + "buildOptions": { + "delaySign": true, + "publicSign": false, + "keyFile": "../../../../tools/MSSharedLibKey.snk" + }, + "frameworks": { + "net45": { + "dependencies": { + "Microsoft.Rest.ClientRuntime.Azure": "[3.1.0,4.0.0)" + } + }, + "netstandard1.5": { + "imports": [ "dnxcore50" ], + "dependencies": { + "Microsoft.NETCore.Platforms": "1.0.1", + "System.Diagnostics.Tools": "4.0.1", + "System.Net.Http": "4.1.0", + "System.Runtime.Serialization.Primitives": "4.1.1", + "System.Threading.Tasks": "4.0.11", + "Microsoft.Rest.ClientRuntime.Azure": "[3.3.1,4.0.0)", + "System.Console": "4.0.0", + "System.IO.FileSystem": "4.0.1" + } + }, + "netstandard1.1": { + "imports": [ "dnxcore50" ], + "dependencies": { + "System.Runtime.Serialization.Primitives": "4.1.1", + "Microsoft.Rest.ClientRuntime.Azure": "[3.3.1,4.0.0)", + "System.Console": "4.0.0", + "System.IO.FileSystem": "4.0.1" + } + } + }, + "dependencies": { + "Microsoft.IdentityModel.Clients.ActiveDirectory": "3.11.305310302-alpha", + "Microsoft.Rest.ClientRuntime.Azure.Authentication": "2.2.4-preview" + } +} diff --git a/src/ResourceManagement/Resource/Resource.sln b/src/ResourceManagement/Resource/Resource.sln new file mode 100644 index 000000000..ab1005bb7 --- /dev/null +++ b/src/ResourceManagement/Resource/Resource.sln @@ -0,0 +1,22 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio 14 +VisualStudioVersion = 14.0.25420.1 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{8BB2217D-0F2D-49D1-97BC-3654ED321F3B}") = "Microsoft.Azure.Management.V2.Resource", "Microsoft.Azure.Management.V2.Resource\Microsoft.Azure.Management.V2.Resource.xproj", "{9D3D3952-32A3-4B58-88D4-7E41C84ACF7D}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {9D3D3952-32A3-4B58-88D4-7E41C84ACF7D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {9D3D3952-32A3-4B58-88D4-7E41C84ACF7D}.Debug|Any CPU.Build.0 = Debug|Any CPU + {9D3D3952-32A3-4B58-88D4-7E41C84ACF7D}.Release|Any CPU.ActiveCfg = Release|Any CPU + {9D3D3952-32A3-4B58-88D4-7E41C84ACF7D}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/src/ResourceManagement/Resource/global.json b/src/ResourceManagement/Resource/global.json new file mode 100644 index 000000000..91ef4ba6f --- /dev/null +++ b/src/ResourceManagement/Resource/global.json @@ -0,0 +1,3 @@ +{ + "projects": ["Microsoft.Azure.Management.V2.Resource"] +} diff --git a/src/ResourceManagement/Storage/Microsoft.Azure.Management.V2.Storage/Domain/IStorageAccount.cs b/src/ResourceManagement/Storage/Microsoft.Azure.Management.V2.Storage/Domain/IStorageAccount.cs new file mode 100644 index 000000000..12f7eba15 --- /dev/null +++ b/src/ResourceManagement/Storage/Microsoft.Azure.Management.V2.Storage/Domain/IStorageAccount.cs @@ -0,0 +1,89 @@ +/** +* Copyright (c) Microsoft Corporation. All rights reserved. +* Licensed under the MIT License. See License.txt in the project root for +* license information. +*/ + +namespace Microsoft.Azure.Management.V2.Storage +{ + + using Microsoft.Azure.Management.V2.Storage.StorageAccount.Update; + using System.Collections.Generic; + using System; + using Microsoft.Azure.Management.V2.Resource.Core.ResourceActions; + using Microsoft.Azure.Management.V2.Resource.Core; + using Management.Storage.Models; + + /// + /// An immutable client-side representation of an Azure storage account. + /// + public interface IStorageAccount : + IGroupableResource, + IRefreshable, + IUpdatable, + IWrapper + { + /// the status indicating whether the primary and secondary location of + /// the storage account is available or unavailable. Possible values include: + /// 'Available', 'Unavailable' + AccountStatuses AccountStatuses { get; } + + /// the sku of this storage account. Possible names include: + /// 'Standard_LRS', 'Standard_ZRS', 'Standard_GRS', 'Standard_RAGRS', + /// 'Premium_LRS'. Possible tiers include: 'Standard', 'Premium'. + Sku Sku { get; } + + /// the kind of the storage account. Possible values are 'Storage', + /// 'BlobStorage'. + Kind? Kind { get; } + + /// the creation date and time of the storage account in UTC + DateTime? CreationTime { get; } + + /// the user assigned custom domain assigned to this storage account + CustomDomain CustomDomain { get; } + + /// the timestamp of the most recent instance of a failover to the + /// secondary location. Only the most recent timestamp is retained. This + /// element is not returned if there has never been a failover instance. + /// Only available if the accountType is StandardGRS or StandardRAGRS + DateTime? LastGeoFailoverTime { get; } + + /// the status of the storage account at the time the operation was + /// called. Possible values include: 'Creating', 'ResolvingDNS', + /// 'Succeeded' + ProvisioningState? ProvisioningState { get; } + + /// the URLs that are used to perform a retrieval of a public blob, + /// queue or table object. Note that StandardZRS and PremiumLRS accounts + /// only return the blob endpoint + PublicEndpoints EndPoints { get; } + + /// the encryption settings on the account. If unspecified the account + /// is unencrypted. + Encryption Encryption { get; } + + /// access tier used for billing. Access tier cannot be changed more + /// than once every 7 days (168 hours). Access tier cannot be set for + /// StandardLRS, StandardGRS, StandardRAGRS, or PremiumLRS account types. + /// Possible values include: 'Hot', 'Cool'. + AccessTier? AccessTier { get; } + + /// the access keys for this storage account + IList Keys { get; } + + /// + /// Fetch the up-to-date access keys from Azure for this storage account. + /// + /// the access keys for this storage account + IList RefreshKeys(); + + /// + /// Regenerates the access keys for this storage account. + /// + /// keyName if the key name + /// the generated access keys for this storage account + IList RegenerateKey(string keyName); + + } +} \ No newline at end of file diff --git a/src/ResourceManagement/Storage/Microsoft.Azure.Management.V2.Storage/Domain/IStorageAccounts.cs b/src/ResourceManagement/Storage/Microsoft.Azure.Management.V2.Storage/Domain/IStorageAccounts.cs new file mode 100644 index 000000000..bd17df4b0 --- /dev/null +++ b/src/ResourceManagement/Storage/Microsoft.Azure.Management.V2.Storage/Domain/IStorageAccounts.cs @@ -0,0 +1,32 @@ +/** +* Copyright (c) Microsoft Corporation. All rights reserved. +* Licensed under the MIT License. See License.txt in the project root for +* license information. +*/ + +namespace Microsoft.Azure.Management.V2.Storage +{ + using Management.Storage.Models; + using Microsoft.Azure.Management.V2.Resource.Core.CollectionActions; + using Microsoft.Azure.Management.V2.Storage.StorageAccount.Definition; + /// + /// Entry point for storage accounts management API. + /// + public interface IStorageAccounts : + ISupportsListing, + ISupportsCreating, + ISupportsDeleting, + ISupportsListingByGroup, + ISupportsGettingByGroup, + ISupportsGettingById, + ISupportsDeletingByGroup + { + /// + /// Checks that account name is valid and is not in use. + /// + /// name the account name to check + /// whether the name is available and other info if not + CheckNameAvailabilityResult CheckNameAvailability (string name); + + } +} \ No newline at end of file diff --git a/src/ResourceManagement/Storage/Microsoft.Azure.Management.V2.Storage/Domain/IStorageUsage.cs b/src/ResourceManagement/Storage/Microsoft.Azure.Management.V2.Storage/Domain/IStorageUsage.cs new file mode 100644 index 000000000..79a28446d --- /dev/null +++ b/src/ResourceManagement/Storage/Microsoft.Azure.Management.V2.Storage/Domain/IStorageUsage.cs @@ -0,0 +1,32 @@ +/** +* Copyright (c) Microsoft Corporation. All rights reserved. +* Licensed under the MIT License. See License.txt in the project root for +* license information. +*/ + +namespace Microsoft.Azure.Management.V2.Storage +{ + using Management.Storage.Models; + using Microsoft.Azure.Management.V2.Resource.Core; + /// + /// An immutable client-side representation of an Azure storage resource usage info object. + /// + public interface IStorageUsage : + IWrapper + { + /// the unit of measurement. Possible values include: 'Count', + /// 'Bytes', 'Seconds', 'Percent', 'CountsPerSecond', 'BytesPerSecond'. + UsageUnit? Unit { get; } + + /// the current count of the allocated resources in the subscription + int? CurrentValue { get; } + + /// the maximum count of the resources that can be allocated in the + /// subscription + int? Limit { get; } + + /// the name of the type of usage + UsageName Name { get; } + + } +} \ No newline at end of file diff --git a/src/ResourceManagement/Storage/Microsoft.Azure.Management.V2.Storage/Domain/IUsages.cs b/src/ResourceManagement/Storage/Microsoft.Azure.Management.V2.Storage/Domain/IUsages.cs new file mode 100644 index 000000000..a83f5e763 --- /dev/null +++ b/src/ResourceManagement/Storage/Microsoft.Azure.Management.V2.Storage/Domain/IUsages.cs @@ -0,0 +1,18 @@ +/** +* Copyright (c) Microsoft Corporation. All rights reserved. +* Licensed under the MIT License. See License.txt in the project root for +* license information. +*/ + +namespace Microsoft.Azure.Management.V2.Storage +{ + + using Microsoft.Azure.Management.V2.Resource.Core.CollectionActions; + /// + /// Entry point for storage resource usage management API. + /// + public interface IUsages : + ISupportsListing + { + } +} \ No newline at end of file diff --git a/src/ResourceManagement/Storage/Microsoft.Azure.Management.V2.Storage/Domain/StorageAccount/Definition/IDefinition.cs b/src/ResourceManagement/Storage/Microsoft.Azure.Management.V2.Storage/Domain/StorageAccount/Definition/IDefinition.cs new file mode 100644 index 000000000..c0b07b581 --- /dev/null +++ b/src/ResourceManagement/Storage/Microsoft.Azure.Management.V2.Storage/Domain/StorageAccount/Definition/IDefinition.cs @@ -0,0 +1,155 @@ +/** +* Copyright (c) Microsoft Corporation. All rights reserved. +* Licensed under the MIT License. See License.txt in the project root for +* license information. +*/ + +namespace Microsoft.Azure.Management.V2.Storage.StorageAccount.Definition +{ + + using Microsoft.Azure.Management.V2.Storage; + using Microsoft.Azure.Management.V2.Resource.Core.GroupableResource.Definition; + using Microsoft.Azure.Management.V2.Resource.Core.Resource.Definition; + using Microsoft.Azure.Management.V2.Resource.Core.ResourceActions; + using Management.Storage.Models; + + /// + /// A storage account definition specifying a custom domain to associate with the account. + /// + public interface IWithCustomDomain + { + /// + /// Specifies the user domain assigned to the storage account. + /// + /// customDomain the user domain assigned to the storage account + /// the next stage of storage account definition + IWithCreate WithCustomDomain (CustomDomain customDomain); + + /// + /// Specifies the user domain assigned to the storage account. + /// + /// name the custom domain name, which is the CNAME source + /// the next stage of storage account definition + IWithCreate WithCustomDomain (string name); + + /// + /// Specifies the user domain assigned to the storage account. + /// + /// name the custom domain name, which is the CNAME source + /// useSubDomain whether indirect CName validation is enabled + /// the next stage of storage account definition + IWithCreate WithCustomDomain (string name, bool useSubDomain); + + } + /// + /// A storage account definition allowing resource group to be set. + /// + public interface IWithGroup : + Microsoft.Azure.Management.V2.Resource.Core.GroupableResource.Definition.IWithGroup + { + } + /// + /// The first stage of the storage account definition. + /// + public interface IBlank : + IDefinitionWithRegion + { + } + /// + /// A storage account definition specifying the account kind to be blob. + /// + public interface IWithBlobStorageAccountKind + { + /// + /// Specifies the storage account kind to be "BlobStorage". The access + /// tier is defaulted to be "Hot". + /// + /// the next stage of storage account definition + IWithCreateAndAccessTier WithBlobStorageAccountKind (); + + } + /// + /// A storage account definition with sufficient inputs to create a new + /// storage account in the cloud, but exposing additional optional inputs to + /// specify. + /// + public interface IWithCreate : + ICreatable, + IWithSku, + IWithBlobStorageAccountKind, + IWithGeneralPurposeAccountKind, + IWithEncryption, + IWithCustomDomain, + IDefinitionWithTags + { + } + /// + /// A storage account definition allowing the sku to be set. + /// + public interface IWithSku + { + /// + /// Specifies the sku of the storage account. This used to be called + /// account types. + /// + /// skuName the sku + /// the next stage of storage account definition + IWithCreate WithSku (SkuName skuName); + + } + /// + /// A storage account definition allowing access tier to be set. + /// + public interface IWithCreateAndAccessTier : + IWithCreate + { + /// + /// Specifies the access tier used for billing. + ///

+ /// Access tier cannot be changed more than once every 7 days (168 hours). + /// Access tier cannot be set for StandardLRS, StandardGRS, StandardRAGRS, + /// or PremiumLRS account types. + ///

+ /// accessTier the access tier value + /// the next stage of storage account definition + IWithCreate WithAccessTier (AccessTier accessTier); + + } + /// + /// A storage account definition specifying encryption setting. + /// + public interface IWithEncryption + { + /// + /// Specifies the encryption settings on the account. The default + /// setting is unencrypted. + /// + /// encryption the encryption setting + /// the nest stage of storage account definition + IWithCreate WithEncryption (Encryption encryption); + + } + /// + /// Container interface for all the definitions that need to be implemented. + /// + public interface IDefinition : + IBlank, + Microsoft.Azure.Management.V2.Storage.StorageAccount.Definition.IWithGroup, + IWithCreate, + IWithCreateAndAccessTier + { + } + /// + /// A storage account definition selecting the general purpose account kind. + /// + public interface IWithGeneralPurposeAccountKind + { + /// + /// Specifies the storage account kind to be "Storage", the kind for + /// general purposes. + /// + /// the next stage of storage account definition + IWithCreate WithGeneralPurposeAccountKind (); + + } +} \ No newline at end of file diff --git a/src/ResourceManagement/Storage/Microsoft.Azure.Management.V2.Storage/Domain/StorageAccount/Update/IUpdate.cs b/src/ResourceManagement/Storage/Microsoft.Azure.Management.V2.Storage/Domain/StorageAccount/Update/IUpdate.cs new file mode 100644 index 000000000..d4af33fa0 --- /dev/null +++ b/src/ResourceManagement/Storage/Microsoft.Azure.Management.V2.Storage/Domain/StorageAccount/Update/IUpdate.cs @@ -0,0 +1,107 @@ +/** +* Copyright (c) Microsoft Corporation. All rights reserved. +* Licensed under the MIT License. See License.txt in the project root for +* license information. +*/ + +namespace Microsoft.Azure.Management.V2.Storage.StorageAccount.Update +{ + + using Microsoft.Azure.Management.V2.Storage; + using Microsoft.Azure.Management.V2.Resource.Core.Resource.Update; + using Microsoft.Azure.Management.V2.Resource.Core.ResourceActions; + using Management.Storage.Models; + + /// + /// A storage account update stage allowing to change the parameters. + /// + public interface IWithSku + { + /// + /// Specifies the sku of the storage account. This used to be called + /// account types. * + /// + /// skuName the sku + /// the next stage of storage account update + IUpdate WithSku (SkuName skuName); + + } + /// + /// The template for a storage account update operation, containing all the settings that can be modified. + /// + public interface IUpdate : + IAppliable, + IWithSku, + IWithCustomDomain, + IWithEncryption, + IWithAccessTier, + IUpdateWithTags + { + } + /// + /// A storage account update allowing encryption to be specified. + /// + public interface IWithEncryption + { + /// + /// Specifies the encryption setting on the account. + ///

+ /// The default setting is unencrypted. + ///

+ /// encryption the encryption setting + /// the nest stage of storage account update + IUpdate WithEncryption (Encryption encryption); + + } + /// + /// A blob storage account update stage allowing access tier to be specified. + /// + public interface IWithAccessTier + { + /// + /// Specifies the access tier used for billing. + ///

+ /// Access tier cannot be changed more than once every 7 days (168 hours). + /// Access tier cannot be set for StandardLRS, StandardGRS, StandardRAGRS, + /// or PremiumLRS account types. + ///

+ /// accessTier the access tier value + /// the next stage of storage account update + IUpdate WithAccessTier (AccessTier accessTier); + + } + /// + /// A storage account update stage allowing to change the parameters. + /// + public interface IWithCustomDomain + { + /// + /// Specifies the user domain assigned to the storage account. + /// + /// customDomain the user domain assigned to the storage account + /// the next stage of storage account update + IUpdate WithCustomDomain (CustomDomain customDomain); + + /// + /// Specifies the user domain assigned to the storage account. + /// + /// name the custom domain name, which is the CNAME source + /// the next stage of storage account update + IUpdate WithCustomDomain (string name); + + /// + /// Specifies the user domain assigned to the storage account. + /// + /// name the custom domain name, which is the CNAME source + /// useSubDomain whether indirect CName validation is enabled + /// the next stage of storage account update + IUpdate WithCustomDomain (string name, bool useSubDomain); + + /// + /// Clears the existing user domain assigned to the storage account. + /// + /// the next stage of storage account update + IUpdate WithoutCustomDomain (); + + } +} \ No newline at end of file diff --git a/src/ResourceManagement/Storage/Microsoft.Azure.Management.V2.Storage/Generated/IStorageAccountsOperations.cs b/src/ResourceManagement/Storage/Microsoft.Azure.Management.V2.Storage/Generated/IStorageAccountsOperations.cs new file mode 100644 index 000000000..0e16d1624 --- /dev/null +++ b/src/ResourceManagement/Storage/Microsoft.Azure.Management.V2.Storage/Generated/IStorageAccountsOperations.cs @@ -0,0 +1,304 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.Storage +{ + using Microsoft.Rest.Azure; + using Models; + + /// + /// StorageAccountsOperations operations. + /// + public partial interface IStorageAccountsOperations + { + /// + /// Checks that account name is valid and is not in use. + /// + /// + /// + /// + /// 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 + /// + /// + /// Thrown when a required parameter is null + /// + System.Threading.Tasks.Task> CheckNameAvailabilityWithHttpMessagesAsync(string name, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + /// + /// Asynchronously creates a new storage account with the specified + /// parameters. If an account is already created and subsequent + /// create request is issued with different properties, the account + /// properties will be updated. If an account is already created and + /// subsequent create or update request is issued with exact same set + /// of properties, the request will succeed. + /// + /// + /// The name of the resource group within the user's subscription. + /// + /// + /// The name of the storage account within the specified resource + /// group. Storage account names must be between 3 and 24 characters + /// in length and use numbers and lower-case letters only. + /// + /// + /// The parameters to provide for the created account. + /// + /// + /// 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 + /// + /// + /// Thrown when a required parameter is null + /// + System.Threading.Tasks.Task> CreateWithHttpMessagesAsync(string resourceGroupName, string accountName, StorageAccountCreateParametersInner parameters, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + /// + /// Asynchronously creates a new storage account with the specified + /// parameters. If an account is already created and subsequent + /// create request is issued with different properties, the account + /// properties will be updated. If an account is already created and + /// subsequent create or update request is issued with exact same set + /// of properties, the request will succeed. + /// + /// + /// The name of the resource group within the user's subscription. + /// + /// + /// The name of the storage account within the specified resource + /// group. Storage account names must be between 3 and 24 characters + /// in length and use numbers and lower-case letters only. + /// + /// + /// The parameters to provide for the created account. + /// + /// + /// 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 + /// + /// + /// Thrown when a required parameter is null + /// + System.Threading.Tasks.Task> BeginCreateWithHttpMessagesAsync(string resourceGroupName, string accountName, StorageAccountCreateParametersInner parameters, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + /// + /// Deletes a storage account in Microsoft Azure. + /// + /// + /// The name of the resource group within the user's subscription. + /// + /// + /// The name of the storage account within the specified resource + /// group. Storage account names must be between 3 and 24 characters + /// in length and use numbers and lower-case letters only. + /// + /// + /// The 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 + /// + System.Threading.Tasks.Task DeleteWithHttpMessagesAsync(string resourceGroupName, string accountName, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + /// + /// Returns the properties for the specified storage account including + /// but not limited to name, account type, location, and account + /// status. The ListKeys operation should be used to retrieve storage + /// keys. + /// + /// + /// The name of the resource group within the user's subscription. + /// + /// + /// The name of the storage account within the specified resource + /// group. Storage account names must be between 3 and 24 characters + /// in length and use numbers and lower-case letters only. + /// + /// + /// 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 + /// + /// + /// Thrown when a required parameter is null + /// + System.Threading.Tasks.Task> GetPropertiesWithHttpMessagesAsync(string resourceGroupName, string accountName, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + /// + /// The update operation can be used to update the account type, + /// encryption, or tags for a storage account. It can also be used to + /// map the account to a custom domain. Only one custom domain is + /// supported per storage account and. replacement/change of custom + /// domain is not supported. In order to replace an old custom + /// domain, the old value must be cleared/unregistered before a new + /// value may be set. Update of multiple properties is supported. + /// This call does not change the storage keys for the account. If + /// you want to change storage account keys, use the regenerate keys + /// operation. The location and name of the storage account cannot + /// be changed after creation. + /// + /// + /// The name of the resource group within the user's subscription. + /// + /// + /// The name of the storage account within the specified resource + /// group. Storage account names must be between 3 and 24 characters + /// in length and use numbers and lower-case letters only. + /// + /// + /// The parameters to provide for the updated account. + /// + /// + /// 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 + /// + /// + /// Thrown when a required parameter is null + /// + System.Threading.Tasks.Task> UpdateWithHttpMessagesAsync(string resourceGroupName, string accountName, StorageAccountUpdateParametersInner parameters, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + /// + /// Lists all the storage accounts available under the subscription. + /// Note that storage keys are not returned; use the ListKeys + /// operation for this. + /// + /// + /// 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 + /// + /// + /// Thrown when a required parameter is null + /// + System.Threading.Tasks.Task>> ListWithHttpMessagesAsync(System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + /// + /// Lists all the storage accounts available under the given resource + /// group. Note that storage keys are not returned; use the ListKeys + /// operation for this. + /// + /// + /// The name of the resource group within the user's subscription. + /// + /// + /// 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 + /// + /// + /// Thrown when a required parameter is null + /// + System.Threading.Tasks.Task>> ListByResourceGroupWithHttpMessagesAsync(string resourceGroupName, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + /// + /// Lists the access keys for the specified storage account. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the storage account. + /// + /// + /// 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 + /// + /// + /// Thrown when a required parameter is null + /// + System.Threading.Tasks.Task> ListKeysWithHttpMessagesAsync(string resourceGroupName, string accountName, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + /// + /// Regenerates the access keys for the specified storage account. + /// + /// + /// The name of the resource group within the user's subscription. + /// + /// + /// The name of the storage account within the specified resource + /// group. Storage account names must be between 3 and 24 characters + /// in length and use numbers and lower-case letters only. + /// + /// + /// + /// + /// 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 + /// + /// + /// Thrown when a required parameter is null + /// + System.Threading.Tasks.Task> RegenerateKeyWithHttpMessagesAsync(string resourceGroupName, string accountName, string keyName, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + } +} diff --git a/src/ResourceManagement/Storage/Microsoft.Azure.Management.V2.Storage/Generated/IStorageManagementClient.cs b/src/ResourceManagement/Storage/Microsoft.Azure.Management.V2.Storage/Generated/IStorageManagementClient.cs new file mode 100644 index 000000000..151234f3e --- /dev/null +++ b/src/ResourceManagement/Storage/Microsoft.Azure.Management.V2.Storage/Generated/IStorageManagementClient.cs @@ -0,0 +1,80 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.Storage +{ + using Microsoft.Rest.Azure; + using Models; + + /// + /// The Storage Management Client. + /// + public partial interface IStorageManagementClient : System.IDisposable + { + /// + /// The base URI of the service. + /// + System.Uri BaseUri { get; set; } + + /// + /// Gets or sets json serialization settings. + /// + Newtonsoft.Json.JsonSerializerSettings SerializationSettings { get; } + + /// + /// Gets or sets json deserialization settings. + /// + Newtonsoft.Json.JsonSerializerSettings DeserializationSettings { get; } + + /// + /// Credentials needed for the client to connect to Azure. + /// + Microsoft.Rest.ServiceClientCredentials Credentials { get; } + + /// + /// Gets subscription credentials which uniquely identify Microsoft + /// Azure subscription. The subscription ID forms part of the URI for + /// every service call. + /// + string SubscriptionId { get; set; } + + /// + /// Client Api Version. + /// + string ApiVersion { get; } + + /// + /// Gets or sets the preferred language for the response. + /// + string AcceptLanguage { get; set; } + + /// + /// Gets or sets the retry timeout in seconds for Long Running + /// Operations. Default value is 30. + /// + int? LongRunningOperationRetryTimeout { get; set; } + + /// + /// When set to true a unique x-ms-client-request-id value is + /// generated and included in each request. Default is true. + /// + bool? GenerateClientRequestId { get; set; } + + + /// + /// Gets the IStorageAccountsOperations. + /// + IStorageAccountsOperations StorageAccounts { get; } + + /// + /// Gets the IUsageOperations. + /// + IUsageOperations Usage { get; } + + } +} diff --git a/src/ResourceManagement/Storage/Microsoft.Azure.Management.V2.Storage/Generated/IUsageOperations.cs b/src/ResourceManagement/Storage/Microsoft.Azure.Management.V2.Storage/Generated/IUsageOperations.cs new file mode 100644 index 000000000..4cca6554b --- /dev/null +++ b/src/ResourceManagement/Storage/Microsoft.Azure.Management.V2.Storage/Generated/IUsageOperations.cs @@ -0,0 +1,40 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.Storage +{ + using Microsoft.Rest.Azure; + using Models; + + /// + /// UsageOperations operations. + /// + public partial interface IUsageOperations + { + /// + /// Gets the current usage count and the limit for the resources under + /// the subscription. + /// + /// + /// 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 + /// + /// + /// Thrown when a required parameter is null + /// + System.Threading.Tasks.Task>> ListWithHttpMessagesAsync(System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)); + } +} diff --git a/src/ResourceManagement/Storage/Microsoft.Azure.Management.V2.Storage/Generated/Models/AccessTier.cs b/src/ResourceManagement/Storage/Microsoft.Azure.Management.V2.Storage/Generated/Models/AccessTier.cs new file mode 100644 index 000000000..6eb22c241 --- /dev/null +++ b/src/ResourceManagement/Storage/Microsoft.Azure.Management.V2.Storage/Generated/Models/AccessTier.cs @@ -0,0 +1,23 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.Storage.Models +{ + + /// + /// Defines values for AccessTier. + /// + [Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.StringEnumConverter))] + public enum AccessTier + { + [System.Runtime.Serialization.EnumMember(Value = "Hot")] + Hot, + [System.Runtime.Serialization.EnumMember(Value = "Cool")] + Cool + } +} diff --git a/src/ResourceManagement/Storage/Microsoft.Azure.Management.V2.Storage/Generated/Models/AccountStatus.cs b/src/ResourceManagement/Storage/Microsoft.Azure.Management.V2.Storage/Generated/Models/AccountStatus.cs new file mode 100644 index 000000000..18931fa65 --- /dev/null +++ b/src/ResourceManagement/Storage/Microsoft.Azure.Management.V2.Storage/Generated/Models/AccountStatus.cs @@ -0,0 +1,23 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.Storage.Models +{ + + /// + /// Defines values for AccountStatus. + /// + [Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.StringEnumConverter))] + public enum AccountStatus + { + [System.Runtime.Serialization.EnumMember(Value = "Available")] + Available, + [System.Runtime.Serialization.EnumMember(Value = "Unavailable")] + Unavailable + } +} diff --git a/src/ResourceManagement/Storage/Microsoft.Azure.Management.V2.Storage/Generated/Models/CheckNameAvailabilityResultInner.cs b/src/ResourceManagement/Storage/Microsoft.Azure.Management.V2.Storage/Generated/Models/CheckNameAvailabilityResultInner.cs new file mode 100644 index 000000000..2950737cd --- /dev/null +++ b/src/ResourceManagement/Storage/Microsoft.Azure.Management.V2.Storage/Generated/Models/CheckNameAvailabilityResultInner.cs @@ -0,0 +1,68 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.Storage.Models +{ + using System.Linq; + + /// + /// The CheckNameAvailability operation response. + /// + public partial class CheckNameAvailabilityResultInner + { + /// + /// Initializes a new instance of the CheckNameAvailabilityResultInner + /// class. + /// + public CheckNameAvailabilityResultInner() { } + + /// + /// Initializes a new instance of the CheckNameAvailabilityResultInner + /// class. + /// + /// Gets a boolean value that indicates + /// whether the name is available for you to use. If true, the name + /// is available. If false, the name has already been taken or + /// invalid and cannot be used. + /// Gets the reason that a storage account name + /// could not be used. The Reason element is only returned if + /// NameAvailable is false. Possible values include: + /// 'AccountNameInvalid', 'AlreadyExists' + /// Gets an error message explaining the Reason + /// value in more detail. + public CheckNameAvailabilityResultInner(bool? nameAvailable = default(bool?), Reason? reason = default(Reason?), string message = default(string)) + { + NameAvailable = nameAvailable; + Reason = reason; + Message = message; + } + + /// + /// Gets a boolean value that indicates whether the name is available + /// for you to use. If true, the name is available. If false, the + /// name has already been taken or invalid and cannot be used. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "nameAvailable")] + public bool? NameAvailable { get; private set; } + + /// + /// Gets the reason that a storage account name could not be used. The + /// Reason element is only returned if NameAvailable is false. + /// Possible values include: 'AccountNameInvalid', 'AlreadyExists' + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "reason")] + public Reason? Reason { get; private set; } + + /// + /// Gets an error message explaining the Reason value in more detail. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "message")] + public string Message { get; private set; } + + } +} diff --git a/src/ResourceManagement/Storage/Microsoft.Azure.Management.V2.Storage/Generated/Models/CustomDomain.cs b/src/ResourceManagement/Storage/Microsoft.Azure.Management.V2.Storage/Generated/Models/CustomDomain.cs new file mode 100644 index 000000000..77570e2b4 --- /dev/null +++ b/src/ResourceManagement/Storage/Microsoft.Azure.Management.V2.Storage/Generated/Models/CustomDomain.cs @@ -0,0 +1,66 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.Storage.Models +{ + using System.Linq; + + /// + /// The custom domain assigned to this storage account. This can be set + /// via Update. + /// + public partial class CustomDomain + { + /// + /// Initializes a new instance of the CustomDomain class. + /// + public CustomDomain() { } + + /// + /// Initializes a new instance of the CustomDomain class. + /// + /// Gets or sets the custom domain name. Name is + /// the CNAME source. + /// Indicates whether indirect CName + /// validation is enabled. Default value is false. This should only + /// be set on updates + public CustomDomain(string name, bool? useSubDomain = default(bool?)) + { + Name = name; + UseSubDomain = useSubDomain; + } + + /// + /// Gets or sets the custom domain name. Name is the CNAME source. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "name")] + public string Name { get; set; } + + /// + /// Gets or sets indicates whether indirect CName validation is + /// enabled. Default value is false. This should only be set on + /// updates + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "useSubDomain")] + public bool? UseSubDomain { get; set; } + + /// + /// Validate the object. + /// + /// + /// Thrown if validation fails + /// + public virtual void Validate() + { + if (Name == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "Name"); + } + } + } +} diff --git a/src/ResourceManagement/Storage/Microsoft.Azure.Management.V2.Storage/Generated/Models/Encryption.cs b/src/ResourceManagement/Storage/Microsoft.Azure.Management.V2.Storage/Generated/Models/Encryption.cs new file mode 100644 index 000000000..b088c8908 --- /dev/null +++ b/src/ResourceManagement/Storage/Microsoft.Azure.Management.V2.Storage/Generated/Models/Encryption.cs @@ -0,0 +1,54 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.Storage.Models +{ + using System.Linq; + + /// + /// The encryption settings on the account. + /// + public partial class Encryption + { + /// + /// Initializes a new instance of the Encryption class. + /// + public Encryption() { } + + /// + /// Initializes a new instance of the Encryption class. + /// + /// Gets the services which are + /// encrypted. + public Encryption(EncryptionServices services = default(EncryptionServices)) + { + Services = services; + } + /// + /// Static constructor for Encryption class. + /// + static Encryption() + { + KeySource = "Microsoft.Storage"; + } + + /// + /// Gets the services which are encrypted. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "services")] + public EncryptionServices Services { get; set; } + + /// + /// Gets the encryption keySource(provider). Possible values + /// (case-insensitive): Microsoft.Storage + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "keySource")] + public static string KeySource { get; private set; } + + } +} diff --git a/src/ResourceManagement/Storage/Microsoft.Azure.Management.V2.Storage/Generated/Models/EncryptionService.cs b/src/ResourceManagement/Storage/Microsoft.Azure.Management.V2.Storage/Generated/Models/EncryptionService.cs new file mode 100644 index 000000000..80cfa35fc --- /dev/null +++ b/src/ResourceManagement/Storage/Microsoft.Azure.Management.V2.Storage/Generated/Models/EncryptionService.cs @@ -0,0 +1,58 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.Storage.Models +{ + using System.Linq; + + /// + /// An encrypted service. + /// + public partial class EncryptionService + { + /// + /// Initializes a new instance of the EncryptionService class. + /// + public EncryptionService() { } + + /// + /// Initializes a new instance of the EncryptionService class. + /// + /// A boolean indicating whether or not the + /// service is encrypted. + /// Gets a time value indicating when + /// was the encryption enabled by the user last time. We return this + /// value only when encryption is enabled. There might be some + /// unencrypted blobs which were written after this time. This time + /// is just to give a rough estimate of when encryption was + /// enabled. + public EncryptionService(bool? enabled = default(bool?), System.DateTime? lastEnabledTime = default(System.DateTime?)) + { + Enabled = enabled; + LastEnabledTime = lastEnabledTime; + } + + /// + /// Gets or sets a boolean indicating whether or not the service is + /// encrypted. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "enabled")] + public bool? Enabled { get; set; } + + /// + /// Gets a time value indicating when was the encryption enabled by + /// the user last time. We return this value only when encryption is + /// enabled. There might be some unencrypted blobs which were written + /// after this time. This time is just to give a rough estimate of + /// when encryption was enabled. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "lastEnabledTime")] + public System.DateTime? LastEnabledTime { get; private set; } + + } +} diff --git a/src/ResourceManagement/Storage/Microsoft.Azure.Management.V2.Storage/Generated/Models/EncryptionServices.cs b/src/ResourceManagement/Storage/Microsoft.Azure.Management.V2.Storage/Generated/Models/EncryptionServices.cs new file mode 100644 index 000000000..972bb8ced --- /dev/null +++ b/src/ResourceManagement/Storage/Microsoft.Azure.Management.V2.Storage/Generated/Models/EncryptionServices.cs @@ -0,0 +1,39 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.Storage.Models +{ + using System.Linq; + + /// + /// The encrypted services. + /// + public partial class EncryptionServices + { + /// + /// Initializes a new instance of the EncryptionServices class. + /// + public EncryptionServices() { } + + /// + /// Initializes a new instance of the EncryptionServices class. + /// + /// The blob service. + public EncryptionServices(EncryptionService blob = default(EncryptionService)) + { + Blob = blob; + } + + /// + /// Gets or sets the blob service. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "blob")] + public EncryptionService Blob { get; set; } + + } +} diff --git a/src/ResourceManagement/Storage/Microsoft.Azure.Management.V2.Storage/Generated/Models/Endpoints.cs b/src/ResourceManagement/Storage/Microsoft.Azure.Management.V2.Storage/Generated/Models/Endpoints.cs new file mode 100644 index 000000000..c97f0d4fa --- /dev/null +++ b/src/ResourceManagement/Storage/Microsoft.Azure.Management.V2.Storage/Generated/Models/Endpoints.cs @@ -0,0 +1,64 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.Storage.Models +{ + using System.Linq; + + /// + /// The URIs that are used to perform a retrieval of a public blob, queue + /// or table object. + /// + public partial class Endpoints + { + /// + /// Initializes a new instance of the Endpoints class. + /// + public Endpoints() { } + + /// + /// Initializes a new instance of the Endpoints class. + /// + /// Gets the blob endpoint. + /// Gets the queue endpoint. + /// Gets the table endpoint. + /// Gets the file endpoint. + public Endpoints(string blob = default(string), string queue = default(string), string table = default(string), string file = default(string)) + { + Blob = blob; + Queue = queue; + Table = table; + File = file; + } + + /// + /// Gets the blob endpoint. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "blob")] + public string Blob { get; private set; } + + /// + /// Gets the queue endpoint. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "queue")] + public string Queue { get; private set; } + + /// + /// Gets the table endpoint. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "table")] + public string Table { get; private set; } + + /// + /// Gets the file endpoint. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "file")] + public string File { get; private set; } + + } +} diff --git a/src/ResourceManagement/Storage/Microsoft.Azure.Management.V2.Storage/Generated/Models/KeyPermission.cs b/src/ResourceManagement/Storage/Microsoft.Azure.Management.V2.Storage/Generated/Models/KeyPermission.cs new file mode 100644 index 000000000..e1dec6cc4 --- /dev/null +++ b/src/ResourceManagement/Storage/Microsoft.Azure.Management.V2.Storage/Generated/Models/KeyPermission.cs @@ -0,0 +1,23 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.Storage.Models +{ + + /// + /// Defines values for KeyPermission. + /// + [Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.StringEnumConverter))] + public enum KeyPermission + { + [System.Runtime.Serialization.EnumMember(Value = "READ")] + READ, + [System.Runtime.Serialization.EnumMember(Value = "FULL")] + FULL + } +} diff --git a/src/ResourceManagement/Storage/Microsoft.Azure.Management.V2.Storage/Generated/Models/Kind.cs b/src/ResourceManagement/Storage/Microsoft.Azure.Management.V2.Storage/Generated/Models/Kind.cs new file mode 100644 index 000000000..628595871 --- /dev/null +++ b/src/ResourceManagement/Storage/Microsoft.Azure.Management.V2.Storage/Generated/Models/Kind.cs @@ -0,0 +1,23 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.Storage.Models +{ + + /// + /// Defines values for Kind. + /// + [Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.StringEnumConverter))] + public enum Kind + { + [System.Runtime.Serialization.EnumMember(Value = "Storage")] + Storage, + [System.Runtime.Serialization.EnumMember(Value = "BlobStorage")] + BlobStorage + } +} diff --git a/src/ResourceManagement/Storage/Microsoft.Azure.Management.V2.Storage/Generated/Models/Page.cs b/src/ResourceManagement/Storage/Microsoft.Azure.Management.V2.Storage/Generated/Models/Page.cs new file mode 100644 index 000000000..6ecb206c3 --- /dev/null +++ b/src/ResourceManagement/Storage/Microsoft.Azure.Management.V2.Storage/Generated/Models/Page.cs @@ -0,0 +1,46 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.Storage.Models +{ + + /// + /// Defines a page in Azure responses. + /// + /// Type of the page content items + [Newtonsoft.Json.JsonObject] + public class Page : Microsoft.Rest.Azure.IPage + { + /// + /// Gets the link to the next page. + /// + [Newtonsoft.Json.JsonProperty("")] + public System.String NextPageLink { get; private set; } + + [Newtonsoft.Json.JsonProperty("value")] + private System.Collections.Generic.IList Items{ get; set; } + + /// + /// Returns an enumerator that iterates through the collection. + /// + /// A an enumerator that can be used to iterate through the collection. + public System.Collections.Generic.IEnumerator GetEnumerator() + { + return (Items == null) ? System.Linq.Enumerable.Empty().GetEnumerator() : Items.GetEnumerator(); + } + + /// + /// Returns an enumerator that iterates through the collection. + /// + /// A an enumerator that can be used to iterate through the collection. + System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator() + { + return GetEnumerator(); + } + } +} diff --git a/src/ResourceManagement/Storage/Microsoft.Azure.Management.V2.Storage/Generated/Models/ProvisioningState.cs b/src/ResourceManagement/Storage/Microsoft.Azure.Management.V2.Storage/Generated/Models/ProvisioningState.cs new file mode 100644 index 000000000..f3700a223 --- /dev/null +++ b/src/ResourceManagement/Storage/Microsoft.Azure.Management.V2.Storage/Generated/Models/ProvisioningState.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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.Storage.Models +{ + + /// + /// Defines values for ProvisioningState. + /// + [Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.StringEnumConverter))] + public enum ProvisioningState + { + [System.Runtime.Serialization.EnumMember(Value = "Creating")] + Creating, + [System.Runtime.Serialization.EnumMember(Value = "ResolvingDNS")] + ResolvingDNS, + [System.Runtime.Serialization.EnumMember(Value = "Succeeded")] + Succeeded + } +} diff --git a/src/ResourceManagement/Storage/Microsoft.Azure.Management.V2.Storage/Generated/Models/Reason.cs b/src/ResourceManagement/Storage/Microsoft.Azure.Management.V2.Storage/Generated/Models/Reason.cs new file mode 100644 index 000000000..24e926db0 --- /dev/null +++ b/src/ResourceManagement/Storage/Microsoft.Azure.Management.V2.Storage/Generated/Models/Reason.cs @@ -0,0 +1,23 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.Storage.Models +{ + + /// + /// Defines values for Reason. + /// + [Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.StringEnumConverter))] + public enum Reason + { + [System.Runtime.Serialization.EnumMember(Value = "AccountNameInvalid")] + AccountNameInvalid, + [System.Runtime.Serialization.EnumMember(Value = "AlreadyExists")] + AlreadyExists + } +} diff --git a/src/ResourceManagement/Storage/Microsoft.Azure.Management.V2.Storage/Generated/Models/Sku.cs b/src/ResourceManagement/Storage/Microsoft.Azure.Management.V2.Storage/Generated/Models/Sku.cs new file mode 100644 index 000000000..c59d94246 --- /dev/null +++ b/src/ResourceManagement/Storage/Microsoft.Azure.Management.V2.Storage/Generated/Models/Sku.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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.Storage.Models +{ + using System.Linq; + + /// + /// The SKU of the storage account. + /// + public partial class Sku + { + /// + /// Initializes a new instance of the Sku class. + /// + public Sku() { } + + /// + /// Initializes a new instance of the Sku class. + /// + /// Gets or sets the sku name. Required for account + /// creation, optional for update. Note that in older versions, sku + /// name was called accountType. Possible values include: + /// 'Standard_LRS', 'Standard_GRS', 'Standard_RAGRS', 'Standard_ZRS', + /// 'Premium_LRS' + /// Gets the sku tier. This is based on the SKU + /// name. Possible values include: 'Standard', 'Premium' + public Sku(SkuName name, SkuTier? tier = default(SkuTier?)) + { + Name = name; + Tier = tier; + } + + /// + /// Gets or sets the sku name. Required for account creation, optional + /// for update. Note that in older versions, sku name was called + /// accountType. Possible values include: 'Standard_LRS', + /// 'Standard_GRS', 'Standard_RAGRS', 'Standard_ZRS', 'Premium_LRS' + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "name")] + public SkuName Name { get; set; } + + /// + /// Gets the sku tier. This is based on the SKU name. Possible values + /// include: 'Standard', 'Premium' + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "tier")] + public SkuTier? Tier { get; private set; } + + /// + /// Validate the object. + /// + /// + /// Thrown if validation fails + /// + public virtual void Validate() + { + } + } +} diff --git a/src/ResourceManagement/Storage/Microsoft.Azure.Management.V2.Storage/Generated/Models/SkuName.cs b/src/ResourceManagement/Storage/Microsoft.Azure.Management.V2.Storage/Generated/Models/SkuName.cs new file mode 100644 index 000000000..7961c6ee3 --- /dev/null +++ b/src/ResourceManagement/Storage/Microsoft.Azure.Management.V2.Storage/Generated/Models/SkuName.cs @@ -0,0 +1,29 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.Storage.Models +{ + + /// + /// Defines values for SkuName. + /// + [Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.StringEnumConverter))] + public enum SkuName + { + [System.Runtime.Serialization.EnumMember(Value = "Standard_LRS")] + StandardLRS, + [System.Runtime.Serialization.EnumMember(Value = "Standard_GRS")] + StandardGRS, + [System.Runtime.Serialization.EnumMember(Value = "Standard_RAGRS")] + StandardRAGRS, + [System.Runtime.Serialization.EnumMember(Value = "Standard_ZRS")] + StandardZRS, + [System.Runtime.Serialization.EnumMember(Value = "Premium_LRS")] + PremiumLRS + } +} diff --git a/src/ResourceManagement/Storage/Microsoft.Azure.Management.V2.Storage/Generated/Models/SkuTier.cs b/src/ResourceManagement/Storage/Microsoft.Azure.Management.V2.Storage/Generated/Models/SkuTier.cs new file mode 100644 index 000000000..fd48a95d3 --- /dev/null +++ b/src/ResourceManagement/Storage/Microsoft.Azure.Management.V2.Storage/Generated/Models/SkuTier.cs @@ -0,0 +1,23 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.Storage.Models +{ + + /// + /// Defines values for SkuTier. + /// + [Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.StringEnumConverter))] + public enum SkuTier + { + [System.Runtime.Serialization.EnumMember(Value = "Standard")] + Standard, + [System.Runtime.Serialization.EnumMember(Value = "Premium")] + Premium + } +} diff --git a/src/ResourceManagement/Storage/Microsoft.Azure.Management.V2.Storage/Generated/Models/StorageAccountCheckNameAvailabilityParameters.cs b/src/ResourceManagement/Storage/Microsoft.Azure.Management.V2.Storage/Generated/Models/StorageAccountCheckNameAvailabilityParameters.cs new file mode 100644 index 000000000..aa98e9d6f --- /dev/null +++ b/src/ResourceManagement/Storage/Microsoft.Azure.Management.V2.Storage/Generated/Models/StorageAccountCheckNameAvailabilityParameters.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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.Storage.Models +{ + using System.Linq; + + public partial class StorageAccountCheckNameAvailabilityParameters + { + /// + /// Initializes a new instance of the + /// StorageAccountCheckNameAvailabilityParameters class. + /// + public StorageAccountCheckNameAvailabilityParameters() { } + + /// + /// Initializes a new instance of the + /// StorageAccountCheckNameAvailabilityParameters class. + /// + public StorageAccountCheckNameAvailabilityParameters(string name) + { + Name = name; + } + /// + /// Static constructor for + /// StorageAccountCheckNameAvailabilityParameters class. + /// + static StorageAccountCheckNameAvailabilityParameters() + { + Type = "Microsoft.Storage/storageAccounts"; + } + + /// + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "name")] + public string Name { get; set; } + + /// + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "type")] + public static string Type { get; private set; } + + /// + /// Validate the object. + /// + /// + /// Thrown if validation fails + /// + public virtual void Validate() + { + if (Name == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "Name"); + } + } + } +} diff --git a/src/ResourceManagement/Storage/Microsoft.Azure.Management.V2.Storage/Generated/Models/StorageAccountCreateParametersInner.cs b/src/ResourceManagement/Storage/Microsoft.Azure.Management.V2.Storage/Generated/Models/StorageAccountCreateParametersInner.cs new file mode 100644 index 000000000..30601ad2b --- /dev/null +++ b/src/ResourceManagement/Storage/Microsoft.Azure.Management.V2.Storage/Generated/Models/StorageAccountCreateParametersInner.cs @@ -0,0 +1,157 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.Storage.Models +{ + using System.Linq; + + /// + /// The parameters to provide for the account. + /// + [Microsoft.Rest.Serialization.JsonTransformation] + public partial class StorageAccountCreateParametersInner + { + /// + /// Initializes a new instance of the + /// StorageAccountCreateParametersInner class. + /// + public StorageAccountCreateParametersInner() + { + } + + /// + /// Initializes a new instance of the + /// StorageAccountCreateParametersInner class. + /// + /// Required. Gets or sets the sku type. + /// Required. Indicates the type of storage + /// account. Possible values include: 'Storage', 'BlobStorage' + /// Required. Gets or sets the location of the + /// resource. This will be one of the supported and registered Azure + /// Geo Regions (e.g. West US, East US, Southeast Asia, etc.). The + /// geo region of a resource cannot be changed once it is created, + /// but if an identical geo region is specified on update the request + /// will succeed. + /// Gets or sets a list of key value pairs that + /// describe the resource. These tags can be used in viewing and + /// grouping this resource (across resource groups). A maximum of 15 + /// tags can be provided for a resource. Each tag must have a key no + /// greater than 128 characters and value no greater than 256 + /// characters. + /// User domain assigned to the storage + /// account. Name is the CNAME source. Only one custom domain is + /// supported per storage account at this time. To clear the existing + /// custom domain, use an empty string for the custom domain name + /// property. + /// Provides the encryption settings on the + /// account. If left unspecified the account encryption settings will + /// remain. The default setting is unencrypted. + /// Required for StandardBlob accounts. The + /// access tier used for billing. Access tier cannot be changed more + /// than once every 7 days (168 hours). Access tier cannot be set for + /// StandardLRS, StandardGRS, StandardRAGRS, or PremiumLRS account + /// types. Possible values include: 'Hot', 'Cool' + public StorageAccountCreateParametersInner(Sku sku, Kind? kind, string location, System.Collections.Generic.IDictionary tags = default(System.Collections.Generic.IDictionary), CustomDomain customDomain = default(CustomDomain), Encryption encryption = default(Encryption), AccessTier? accessTier = default(AccessTier?)) + { + Sku = sku; + Kind = kind; + Location = location; + Tags = tags; + CustomDomain = customDomain; + Encryption = encryption; + AccessTier = accessTier; + } + + /// + /// Gets or sets required. Gets or sets the sku type. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "sku")] + public Sku Sku { get; set; } + + /// + /// Gets or sets required. Indicates the type of storage account. + /// Possible values include: 'Storage', 'BlobStorage' + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "kind")] + public Kind? Kind { get; set; } + + /// + /// Gets or sets required. Gets or sets the location of the resource. + /// This will be one of the supported and registered Azure Geo + /// Regions (e.g. West US, East US, Southeast Asia, etc.). The geo + /// region of a resource cannot be changed once it is created, but if + /// an identical geo region is specified on update the request will + /// succeed. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "location")] + public string Location { get; set; } + + /// + /// Gets or sets a list of key value pairs that describe the resource. + /// These tags can be used in viewing and grouping this resource + /// (across resource groups). A maximum of 15 tags can be provided + /// for a resource. Each tag must have a key no greater than 128 + /// characters and value no greater than 256 characters. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "tags")] + public System.Collections.Generic.IDictionary Tags { get; set; } + + /// + /// Gets or sets user domain assigned to the storage account. Name is + /// the CNAME source. Only one custom domain is supported per storage + /// account at this time. To clear the existing custom domain, use an + /// empty string for the custom domain name property. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.customDomain")] + public CustomDomain CustomDomain { get; set; } + + /// + /// Gets or sets provides the encryption settings on the account. If + /// left unspecified the account encryption settings will remain. The + /// default setting is unencrypted. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.encryption")] + public Encryption Encryption { get; set; } + + /// + /// Gets or sets required for StandardBlob accounts. The access tier + /// used for billing. Access tier cannot be changed more than once + /// every 7 days (168 hours). Access tier cannot be set for + /// StandardLRS, StandardGRS, StandardRAGRS, or PremiumLRS account + /// types. Possible values include: 'Hot', 'Cool' + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.accessTier")] + public AccessTier? AccessTier { get; set; } + + /// + /// Validate the object. + /// + /// + /// Thrown if validation fails + /// + public virtual void Validate() + { + if (Sku == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "Sku"); + } + if (Location == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "Location"); + } + if (this.Sku != null) + { + this.Sku.Validate(); + } + if (this.CustomDomain != null) + { + this.CustomDomain.Validate(); + } + } + } +} diff --git a/src/ResourceManagement/Storage/Microsoft.Azure.Management.V2.Storage/Generated/Models/StorageAccountInner.cs b/src/ResourceManagement/Storage/Microsoft.Azure.Management.V2.Storage/Generated/Models/StorageAccountInner.cs new file mode 100644 index 000000000..3be3639a3 --- /dev/null +++ b/src/ResourceManagement/Storage/Microsoft.Azure.Management.V2.Storage/Generated/Models/StorageAccountInner.cs @@ -0,0 +1,217 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.Storage.Models +{ + using System.Linq; + + /// + /// The storage account. + /// + [Microsoft.Rest.Serialization.JsonTransformation] + public partial class StorageAccountInner : Microsoft.Rest.Azure.Resource + { + /// + /// Initializes a new instance of the StorageAccountInner class. + /// + public StorageAccountInner() + { + } + + /// + /// Initializes a new instance of the StorageAccountInner class. + /// + /// Gets the SKU. + /// Gets the Kind. Possible values include: + /// 'Storage', 'BlobStorage' + /// Gets the status of the storage + /// account at the time the operation was called. Possible values + /// include: 'Creating', 'ResolvingDNS', 'Succeeded' + /// Gets the URLs that are used to + /// perform a retrieval of a public blob, queue or table object.Note + /// that StandardZRS and PremiumLRS accounts only return the blob + /// endpoint. + /// Gets the location of the primary for + /// the storage account. + /// Gets the status indicating whether + /// the primary location of the storage account is available or + /// unavailable. Possible values include: 'Available', + /// 'Unavailable' + /// Gets the timestamp of the most + /// recent instance of a failover to the secondary location. Only the + /// most recent timestamp is retained. This element is not returned + /// if there has never been a failover instance. Only available if + /// the accountType is StandardGRS or StandardRAGRS. + /// Gets the location of the geo + /// replicated secondary for the storage account. Only available if + /// the accountType is StandardGRS or StandardRAGRS. + /// Gets the status indicating whether + /// the secondary location of the storage account is available or + /// unavailable. Only available if the accountType is StandardGRS or + /// StandardRAGRS. Possible values include: 'Available', + /// 'Unavailable' + /// Gets the creation date and time of the + /// storage account in UTC. + /// Gets the user assigned custom domain + /// assigned to this storage account. + /// Gets the URLs that are used to + /// perform a retrieval of a public blob, queue or table object from + /// the secondary location of the storage account. Only available if + /// the accountType is StandardRAGRS. + /// Gets the encryption settings on the + /// account. If unspecified the account is unencrypted. + /// The access tier used for billing. Access + /// tier cannot be changed more than once every 7 days (168 hours). + /// Access tier cannot be set for StandardLRS, StandardGRS, + /// StandardRAGRS, or PremiumLRS account types. Possible values + /// include: 'Hot', 'Cool' + public StorageAccountInner(string location = default(string), string id = default(string), string name = default(string), string type = default(string), System.Collections.Generic.IDictionary tags = default(System.Collections.Generic.IDictionary), Sku sku = default(Sku), Kind? kind = default(Kind?), ProvisioningState? provisioningState = default(ProvisioningState?), Endpoints primaryEndpoints = default(Endpoints), string primaryLocation = default(string), AccountStatus? statusOfPrimary = default(AccountStatus?), System.DateTime? lastGeoFailoverTime = default(System.DateTime?), string secondaryLocation = default(string), AccountStatus? statusOfSecondary = default(AccountStatus?), System.DateTime? creationTime = default(System.DateTime?), CustomDomain customDomain = default(CustomDomain), Endpoints secondaryEndpoints = default(Endpoints), Encryption encryption = default(Encryption), AccessTier? accessTier = default(AccessTier?)) + : base(location, id, name, type, tags) + { + Sku = sku; + Kind = kind; + ProvisioningState = provisioningState; + PrimaryEndpoints = primaryEndpoints; + PrimaryLocation = primaryLocation; + StatusOfPrimary = statusOfPrimary; + LastGeoFailoverTime = lastGeoFailoverTime; + SecondaryLocation = secondaryLocation; + StatusOfSecondary = statusOfSecondary; + CreationTime = creationTime; + CustomDomain = customDomain; + SecondaryEndpoints = secondaryEndpoints; + Encryption = encryption; + AccessTier = accessTier; + } + + /// + /// Gets the SKU. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "sku")] + public Sku Sku { get; private set; } + + /// + /// Gets the Kind. Possible values include: 'Storage', 'BlobStorage' + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "kind")] + public Kind? Kind { get; private set; } + + /// + /// Gets the status of the storage account at the time the operation + /// was called. Possible values include: 'Creating', 'ResolvingDNS', + /// 'Succeeded' + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.provisioningState")] + public ProvisioningState? ProvisioningState { get; private set; } + + /// + /// Gets the URLs that are used to perform a retrieval of a public + /// blob, queue or table object.Note that StandardZRS and PremiumLRS + /// accounts only return the blob endpoint. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.primaryEndpoints")] + public Endpoints PrimaryEndpoints { get; private set; } + + /// + /// Gets the location of the primary for the storage account. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.primaryLocation")] + public string PrimaryLocation { get; private set; } + + /// + /// Gets the status indicating whether the primary location of the + /// storage account is available or unavailable. Possible values + /// include: 'Available', 'Unavailable' + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.statusOfPrimary")] + public AccountStatus? StatusOfPrimary { get; private set; } + + /// + /// Gets the timestamp of the most recent instance of a failover to + /// the secondary location. Only the most recent timestamp is + /// retained. This element is not returned if there has never been a + /// failover instance. Only available if the accountType is + /// StandardGRS or StandardRAGRS. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.lastGeoFailoverTime")] + public System.DateTime? LastGeoFailoverTime { get; private set; } + + /// + /// Gets the location of the geo replicated secondary for the storage + /// account. Only available if the accountType is StandardGRS or + /// StandardRAGRS. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.secondaryLocation")] + public string SecondaryLocation { get; private set; } + + /// + /// Gets the status indicating whether the secondary location of the + /// storage account is available or unavailable. Only available if + /// the accountType is StandardGRS or StandardRAGRS. Possible values + /// include: 'Available', 'Unavailable' + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.statusOfSecondary")] + public AccountStatus? StatusOfSecondary { get; private set; } + + /// + /// Gets the creation date and time of the storage account in UTC. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.creationTime")] + public System.DateTime? CreationTime { get; private set; } + + /// + /// Gets the user assigned custom domain assigned to this storage + /// account. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.customDomain")] + public CustomDomain CustomDomain { get; private set; } + + /// + /// Gets the URLs that are used to perform a retrieval of a public + /// blob, queue or table object from the secondary location of the + /// storage account. Only available if the accountType is + /// StandardRAGRS. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.secondaryEndpoints")] + public Endpoints SecondaryEndpoints { get; private set; } + + /// + /// Gets the encryption settings on the account. If unspecified the + /// account is unencrypted. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.encryption")] + public Encryption Encryption { get; private set; } + + /// + /// Gets the access tier used for billing. Access tier cannot be + /// changed more than once every 7 days (168 hours). Access tier + /// cannot be set for StandardLRS, StandardGRS, StandardRAGRS, or + /// PremiumLRS account types. Possible values include: 'Hot', 'Cool' + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.accessTier")] + public AccessTier? AccessTier { get; private set; } + + /// + /// Validate the object. + /// + /// + /// Thrown if validation fails + /// + public virtual void Validate() + { + if (this.Sku != null) + { + this.Sku.Validate(); + } + if (this.CustomDomain != null) + { + this.CustomDomain.Validate(); + } + } + } +} diff --git a/src/ResourceManagement/Storage/Microsoft.Azure.Management.V2.Storage/Generated/Models/StorageAccountKey.cs b/src/ResourceManagement/Storage/Microsoft.Azure.Management.V2.Storage/Generated/Models/StorageAccountKey.cs new file mode 100644 index 000000000..4a53d2d4b --- /dev/null +++ b/src/ResourceManagement/Storage/Microsoft.Azure.Management.V2.Storage/Generated/Models/StorageAccountKey.cs @@ -0,0 +1,57 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.Storage.Models +{ + using System.Linq; + + /// + /// An access key for the storage account. + /// + public partial class StorageAccountKey + { + /// + /// Initializes a new instance of the StorageAccountKey class. + /// + public StorageAccountKey() { } + + /// + /// Initializes a new instance of the StorageAccountKey class. + /// + /// Name of the key. + /// Base 64 encoded value of the key. + /// Permissions for the key. Possible values + /// include: 'READ', 'FULL' + public StorageAccountKey(string keyName = default(string), string value = default(string), KeyPermission? permissions = default(KeyPermission?)) + { + KeyName = keyName; + Value = value; + Permissions = permissions; + } + + /// + /// Gets name of the key. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "keyName")] + public string KeyName { get; private set; } + + /// + /// Gets base 64 encoded value of the key. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "value")] + public string Value { get; private set; } + + /// + /// Gets permissions for the key. Possible values include: 'READ', + /// 'FULL' + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "permissions")] + public KeyPermission? Permissions { get; private set; } + + } +} diff --git a/src/ResourceManagement/Storage/Microsoft.Azure.Management.V2.Storage/Generated/Models/StorageAccountListKeysResultInner.cs b/src/ResourceManagement/Storage/Microsoft.Azure.Management.V2.Storage/Generated/Models/StorageAccountListKeysResultInner.cs new file mode 100644 index 000000000..03548ba49 --- /dev/null +++ b/src/ResourceManagement/Storage/Microsoft.Azure.Management.V2.Storage/Generated/Models/StorageAccountListKeysResultInner.cs @@ -0,0 +1,42 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.Storage.Models +{ + using System.Linq; + + /// + /// The ListKeys operation response. + /// + public partial class StorageAccountListKeysResultInner + { + /// + /// Initializes a new instance of the + /// StorageAccountListKeysResultInner class. + /// + public StorageAccountListKeysResultInner() { } + + /// + /// Initializes a new instance of the + /// StorageAccountListKeysResultInner class. + /// + /// Gets the list of account keys and their + /// properties. + public StorageAccountListKeysResultInner(System.Collections.Generic.IList keys = default(System.Collections.Generic.IList)) + { + Keys = keys; + } + + /// + /// Gets the list of account keys and their properties. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "keys")] + public System.Collections.Generic.IList Keys { get; private set; } + + } +} diff --git a/src/ResourceManagement/Storage/Microsoft.Azure.Management.V2.Storage/Generated/Models/StorageAccountListResultInner.cs b/src/ResourceManagement/Storage/Microsoft.Azure.Management.V2.Storage/Generated/Models/StorageAccountListResultInner.cs new file mode 100644 index 000000000..b621bd25a --- /dev/null +++ b/src/ResourceManagement/Storage/Microsoft.Azure.Management.V2.Storage/Generated/Models/StorageAccountListResultInner.cs @@ -0,0 +1,42 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.Storage.Models +{ + using System.Linq; + + /// + /// The list storage accounts operation response. + /// + public partial class StorageAccountListResultInner + { + /// + /// Initializes a new instance of the StorageAccountListResultInner + /// class. + /// + public StorageAccountListResultInner() { } + + /// + /// Initializes a new instance of the StorageAccountListResultInner + /// class. + /// + /// Gets the list of storage accounts and their + /// properties. + public StorageAccountListResultInner(System.Collections.Generic.IList value = default(System.Collections.Generic.IList)) + { + Value = value; + } + + /// + /// Gets the list of storage accounts and their properties. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "value")] + public System.Collections.Generic.IList Value { get; private set; } + + } +} diff --git a/src/ResourceManagement/Storage/Microsoft.Azure.Management.V2.Storage/Generated/Models/StorageAccountRegenerateKeyParameters.cs b/src/ResourceManagement/Storage/Microsoft.Azure.Management.V2.Storage/Generated/Models/StorageAccountRegenerateKeyParameters.cs new file mode 100644 index 000000000..e7da24cfb --- /dev/null +++ b/src/ResourceManagement/Storage/Microsoft.Azure.Management.V2.Storage/Generated/Models/StorageAccountRegenerateKeyParameters.cs @@ -0,0 +1,49 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.Storage.Models +{ + using System.Linq; + + public partial class StorageAccountRegenerateKeyParameters + { + /// + /// Initializes a new instance of the + /// StorageAccountRegenerateKeyParameters class. + /// + public StorageAccountRegenerateKeyParameters() { } + + /// + /// Initializes a new instance of the + /// StorageAccountRegenerateKeyParameters class. + /// + public StorageAccountRegenerateKeyParameters(string keyName) + { + KeyName = keyName; + } + + /// + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "keyName")] + public string KeyName { get; set; } + + /// + /// Validate the object. + /// + /// + /// Thrown if validation fails + /// + public virtual void Validate() + { + if (KeyName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "KeyName"); + } + } + } +} diff --git a/src/ResourceManagement/Storage/Microsoft.Azure.Management.V2.Storage/Generated/Models/StorageAccountUpdateParametersInner.cs b/src/ResourceManagement/Storage/Microsoft.Azure.Management.V2.Storage/Generated/Models/StorageAccountUpdateParametersInner.cs new file mode 100644 index 000000000..6308d0008 --- /dev/null +++ b/src/ResourceManagement/Storage/Microsoft.Azure.Management.V2.Storage/Generated/Models/StorageAccountUpdateParametersInner.cs @@ -0,0 +1,122 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.Storage.Models +{ + using System.Linq; + + /// + /// The parameters to provide for the account. + /// + [Microsoft.Rest.Serialization.JsonTransformation] + public partial class StorageAccountUpdateParametersInner + { + /// + /// Initializes a new instance of the + /// StorageAccountUpdateParametersInner class. + /// + public StorageAccountUpdateParametersInner() + { + } + + /// + /// Initializes a new instance of the + /// StorageAccountUpdateParametersInner class. + /// + /// Gets or sets the sku type. Note that sku cannot + /// be updated to StandardZRS or ProvisionedLRS, nor can accounts of + /// that sku type be updated to any other value. + /// Gets or sets a list of key value pairs that + /// describe the resource. These tags can be used in viewing and + /// grouping this resource (across resource groups). A maximum of 15 + /// tags can be provided for a resource. Each tag must have a key no + /// greater than 128 characters and value no greater than 256 + /// characters. + /// User domain assigned to the storage + /// account. Name is the CNAME source. Only one custom domain is + /// supported per storage account at this time. To clear the existing + /// custom domain, use an empty string for the custom domain name + /// property. + /// Provides the encryption settings on the + /// account. The default setting is unencrypted. + /// The access tier used for billing. Access + /// tier cannot be changed more than once every 7 days (168 hours). + /// Access tier cannot be set for StandardLRS, StandardGRS, + /// StandardRAGRS, or PremiumLRS account types. Possible values + /// include: 'Hot', 'Cool' + public StorageAccountUpdateParametersInner(Sku sku = default(Sku), System.Collections.Generic.IDictionary tags = default(System.Collections.Generic.IDictionary), CustomDomain customDomain = default(CustomDomain), Encryption encryption = default(Encryption), AccessTier? accessTier = default(AccessTier?)) + { + Sku = sku; + Tags = tags; + CustomDomain = customDomain; + Encryption = encryption; + AccessTier = accessTier; + } + + /// + /// Gets or sets the sku type. Note that sku cannot be updated to + /// StandardZRS or ProvisionedLRS, nor can accounts of that sku type + /// be updated to any other value. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "sku")] + public Sku Sku { get; set; } + + /// + /// Gets or sets a list of key value pairs that describe the resource. + /// These tags can be used in viewing and grouping this resource + /// (across resource groups). A maximum of 15 tags can be provided + /// for a resource. Each tag must have a key no greater than 128 + /// characters and value no greater than 256 characters. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "tags")] + public System.Collections.Generic.IDictionary Tags { get; set; } + + /// + /// Gets or sets user domain assigned to the storage account. Name is + /// the CNAME source. Only one custom domain is supported per storage + /// account at this time. To clear the existing custom domain, use an + /// empty string for the custom domain name property. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.customDomain")] + public CustomDomain CustomDomain { get; set; } + + /// + /// Gets or sets provides the encryption settings on the account. The + /// default setting is unencrypted. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.encryption")] + public Encryption Encryption { get; set; } + + /// + /// Gets or sets the access tier used for billing. Access tier cannot + /// be changed more than once every 7 days (168 hours). Access tier + /// cannot be set for StandardLRS, StandardGRS, StandardRAGRS, or + /// PremiumLRS account types. Possible values include: 'Hot', 'Cool' + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "properties.accessTier")] + public AccessTier? AccessTier { get; set; } + + /// + /// Validate the object. + /// + /// + /// Thrown if validation fails + /// + public virtual void Validate() + { + if (this.Sku != null) + { + this.Sku.Validate(); + } + if (this.CustomDomain != null) + { + this.CustomDomain.Validate(); + } + } + } +} diff --git a/src/ResourceManagement/Storage/Microsoft.Azure.Management.V2.Storage/Generated/Models/Usage.cs b/src/ResourceManagement/Storage/Microsoft.Azure.Management.V2.Storage/Generated/Models/Usage.cs new file mode 100644 index 000000000..df2b71cde --- /dev/null +++ b/src/ResourceManagement/Storage/Microsoft.Azure.Management.V2.Storage/Generated/Models/Usage.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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.Storage.Models +{ + using System.Linq; + + /// + /// Describes Storage Resource Usage. + /// + public partial class UsageInner + { + /// + /// Initializes a new instance of the Usage class. + /// + public UsageInner() { } + + /// + /// Initializes a new instance of the Usage class. + /// + /// Gets the unit of measurement. Possible values + /// include: 'Count', 'Bytes', 'Seconds', 'Percent', + /// 'CountsPerSecond', 'BytesPerSecond' + /// Gets the current count of the allocated + /// resources in the subscription. + /// Gets the maximum count of the resources that + /// can be allocated in the subscription. + /// Gets the name of the type of usage. + public UsageInner(UsageUnit? unit = default(UsageUnit?), int? currentValue = default(int?), int? limit = default(int?), UsageName name = default(UsageName)) + { + Unit = unit; + CurrentValue = currentValue; + Limit = limit; + Name = name; + } + + /// + /// Gets the unit of measurement. Possible values include: 'Count', + /// 'Bytes', 'Seconds', 'Percent', 'CountsPerSecond', 'BytesPerSecond' + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "unit")] + public UsageUnit? Unit { get; private set; } + + /// + /// Gets the current count of the allocated resources in the + /// subscription. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "currentValue")] + public int? CurrentValue { get; private set; } + + /// + /// Gets the maximum count of the resources that can be allocated in + /// the subscription. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "limit")] + public int? Limit { get; private set; } + + /// + /// Gets the name of the type of usage. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "name")] + public UsageName Name { get; private set; } + + } +} diff --git a/src/ResourceManagement/Storage/Microsoft.Azure.Management.V2.Storage/Generated/Models/UsageListResultInner.cs b/src/ResourceManagement/Storage/Microsoft.Azure.Management.V2.Storage/Generated/Models/UsageListResultInner.cs new file mode 100644 index 000000000..0abcedbf9 --- /dev/null +++ b/src/ResourceManagement/Storage/Microsoft.Azure.Management.V2.Storage/Generated/Models/UsageListResultInner.cs @@ -0,0 +1,40 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.Storage.Models +{ + using System.Linq; + + /// + /// The List Usages operation response. + /// + public partial class UsageListResultInner + { + /// + /// Initializes a new instance of the UsageListResultInner class. + /// + public UsageListResultInner() { } + + /// + /// Initializes a new instance of the UsageListResultInner class. + /// + /// Gets or sets the list Storage Resource + /// Usages. + public UsageListResultInner(System.Collections.Generic.IList value = default(System.Collections.Generic.IList)) + { + Value = value; + } + + /// + /// Gets or sets the list Storage Resource Usages. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "value")] + public System.Collections.Generic.IList Value { get; set; } + + } +} diff --git a/src/ResourceManagement/Storage/Microsoft.Azure.Management.V2.Storage/Generated/Models/UsageName.cs b/src/ResourceManagement/Storage/Microsoft.Azure.Management.V2.Storage/Generated/Models/UsageName.cs new file mode 100644 index 000000000..2322f5d1a --- /dev/null +++ b/src/ResourceManagement/Storage/Microsoft.Azure.Management.V2.Storage/Generated/Models/UsageName.cs @@ -0,0 +1,49 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.Storage.Models +{ + using System.Linq; + + /// + /// The Usage Names. + /// + public partial class UsageName + { + /// + /// Initializes a new instance of the UsageName class. + /// + public UsageName() { } + + /// + /// Initializes a new instance of the UsageName class. + /// + /// Gets a string describing the resource + /// name. + /// Gets a localized string describing + /// the resource name. + public UsageName(string value = default(string), string localizedValue = default(string)) + { + Value = value; + LocalizedValue = localizedValue; + } + + /// + /// Gets a string describing the resource name. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "value")] + public string Value { get; private set; } + + /// + /// Gets a localized string describing the resource name. + /// + [Newtonsoft.Json.JsonProperty(PropertyName = "localizedValue")] + public string LocalizedValue { get; private set; } + + } +} diff --git a/src/ResourceManagement/Storage/Microsoft.Azure.Management.V2.Storage/Generated/Models/UsageUnit.cs b/src/ResourceManagement/Storage/Microsoft.Azure.Management.V2.Storage/Generated/Models/UsageUnit.cs new file mode 100644 index 000000000..efbe98348 --- /dev/null +++ b/src/ResourceManagement/Storage/Microsoft.Azure.Management.V2.Storage/Generated/Models/UsageUnit.cs @@ -0,0 +1,31 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.Storage.Models +{ + + /// + /// Defines values for UsageUnit. + /// + [Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.StringEnumConverter))] + public enum UsageUnit + { + [System.Runtime.Serialization.EnumMember(Value = "Count")] + Count, + [System.Runtime.Serialization.EnumMember(Value = "Bytes")] + Bytes, + [System.Runtime.Serialization.EnumMember(Value = "Seconds")] + Seconds, + [System.Runtime.Serialization.EnumMember(Value = "Percent")] + Percent, + [System.Runtime.Serialization.EnumMember(Value = "CountsPerSecond")] + CountsPerSecond, + [System.Runtime.Serialization.EnumMember(Value = "BytesPerSecond")] + BytesPerSecond + } +} diff --git a/src/ResourceManagement/Storage/Microsoft.Azure.Management.V2.Storage/Generated/StorageAccountsOperations.cs b/src/ResourceManagement/Storage/Microsoft.Azure.Management.V2.Storage/Generated/StorageAccountsOperations.cs new file mode 100644 index 000000000..421142b7a --- /dev/null +++ b/src/ResourceManagement/Storage/Microsoft.Azure.Management.V2.Storage/Generated/StorageAccountsOperations.cs @@ -0,0 +1,1896 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.Storage +{ + using System.Linq; + using Microsoft.Rest; + using Microsoft.Rest.Azure; + using Models; + + /// + /// StorageAccountsOperations operations. + /// + internal partial class StorageAccountsOperations : Microsoft.Rest.IServiceOperations, IStorageAccountsOperations + { + /// + /// Initializes a new instance of the StorageAccountsOperations class. + /// + /// + /// Reference to the service client. + /// + /// + /// Thrown when a required parameter is null + /// + internal StorageAccountsOperations(StorageManagementClient client) + { + if (client == null) + { + throw new System.ArgumentNullException("client"); + } + this.Client = client; + } + + /// + /// Gets a reference to the StorageManagementClient + /// + public StorageManagementClient Client { get; private set; } + + /// + /// Checks that account name is valid and is not in use. + /// + /// + /// + /// + /// 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 + /// + /// + /// A response object containing the response body and response headers. + /// + public async System.Threading.Tasks.Task> CheckNameAvailabilityWithHttpMessagesAsync(string name, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + if (this.Client.ApiVersion == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.ApiVersion"); + } + if (this.Client.SubscriptionId == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.SubscriptionId"); + } + if (name == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "name"); + } + StorageAccountCheckNameAvailabilityParameters accountName = new StorageAccountCheckNameAvailabilityParameters(); + if (name != null) + { + accountName.Name = name; + } + // 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("accountName", accountName); + tracingParameters.Add("cancellationToken", cancellationToken); + Microsoft.Rest.ServiceClientTracing.Enter(_invocationId, this, "CheckNameAvailability", tracingParameters); + } + // Construct URL + var _baseUrl = this.Client.BaseUri.AbsoluteUri; + var _url = new System.Uri(new System.Uri(_baseUrl + (_baseUrl.EndsWith("/") ? "" : "/")), "subscriptions/{subscriptionId}/providers/Microsoft.Storage/checkNameAvailability").ToString(); + _url = _url.Replace("{subscriptionId}", System.Uri.EscapeDataString(this.Client.SubscriptionId)); + System.Collections.Generic.List _queryParameters = new System.Collections.Generic.List(); + if (this.Client.ApiVersion != null) + { + _queryParameters.Add(string.Format("api-version={0}", System.Uri.EscapeDataString(this.Client.ApiVersion))); + } + if (_queryParameters.Count > 0) + { + _url += "?" + string.Join("&", _queryParameters); + } + // Create HTTP transport objects + System.Net.Http.HttpRequestMessage _httpRequest = new System.Net.Http.HttpRequestMessage(); + System.Net.Http.HttpResponseMessage _httpResponse = null; + _httpRequest.Method = new System.Net.Http.HttpMethod("POST"); + _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(accountName != null) + { + _requestContent = Microsoft.Rest.Serialization.SafeJsonConvert.SerializeObject(accountName, 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) + { + 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); + CloudError _errorBody = Microsoft.Rest.Serialization.SafeJsonConvert.DeserializeObject(_responseContent, this.Client.DeserializationSettings); + if (_errorBody != null) + { + ex = new Microsoft.Rest.Azure.CloudException(_errorBody.Message); + 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 (_httpResponse.Headers.Contains("x-ms-request-id")) + { + ex.RequestId = _httpResponse.Headers.GetValues("x-ms-request-id").FirstOrDefault(); + } + 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; + } + + /// + /// Asynchronously creates a new storage account with the specified + /// parameters. If an account is already created and subsequent create + /// request is issued with different properties, the account properties will + /// be updated. If an account is already created and subsequent create or + /// update request is issued with exact same set of properties, the request + /// will succeed. + /// + /// + /// The name of the resource group within the user's subscription. + /// + /// + /// The name of the storage account within the specified resource group. + /// Storage account names must be between 3 and 24 characters in length and + /// use numbers and lower-case letters only. + /// + /// + /// The parameters to provide for the created account. + /// + /// + /// The headers that will be added to request. + /// + /// + /// The cancellation token. + /// + public async System.Threading.Tasks.Task> CreateWithHttpMessagesAsync(string resourceGroupName, string accountName, StorageAccountCreateParametersInner parameters, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + // Send Request + Microsoft.Rest.Azure.AzureOperationResponse _response = await BeginCreateWithHttpMessagesAsync( + resourceGroupName, accountName, parameters, customHeaders, cancellationToken); + return await this.Client.GetPutOrPatchOperationResultAsync(_response, + customHeaders, + cancellationToken); + } + + /// + /// Asynchronously creates a new storage account with the specified + /// parameters. If an account is already created and subsequent create + /// request is issued with different properties, the account properties will + /// be updated. If an account is already created and subsequent create or + /// update request is issued with exact same set of properties, the request + /// will succeed. + /// + /// + /// The name of the resource group within the user's subscription. + /// + /// + /// The name of the storage account within the specified resource group. + /// Storage account names must be between 3 and 24 characters in length and + /// use numbers and lower-case letters only. + /// + /// + /// The parameters to provide for the created account. + /// + /// + /// 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 + /// + /// + /// A response object containing the response body and response headers. + /// + public async System.Threading.Tasks.Task> BeginCreateWithHttpMessagesAsync(string resourceGroupName, string accountName, StorageAccountCreateParametersInner parameters, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + if (resourceGroupName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "resourceGroupName"); + } + if (accountName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "accountName"); + } + if (accountName != null) + { + if (accountName.Length > 24) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.MaxLength, "accountName", 24); + } + if (accountName.Length < 3) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.MinLength, "accountName", 3); + } + } + if (parameters == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "parameters"); + } + if (parameters != null) + { + parameters.Validate(); + } + if (this.Client.ApiVersion == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.ApiVersion"); + } + if (this.Client.SubscriptionId == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.SubscriptionId"); + } + if (parameters == null) + { + parameters = new StorageAccountCreateParametersInner(); + } + // 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("accountName", accountName); + tracingParameters.Add("parameters", parameters); + tracingParameters.Add("cancellationToken", cancellationToken); + Microsoft.Rest.ServiceClientTracing.Enter(_invocationId, this, "BeginCreate", 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.Storage/storageAccounts/{accountName}").ToString(); + _url = _url.Replace("{resourceGroupName}", System.Uri.EscapeDataString(resourceGroupName)); + _url = _url.Replace("{accountName}", System.Uri.EscapeDataString(accountName)); + _url = _url.Replace("{subscriptionId}", System.Uri.EscapeDataString(this.Client.SubscriptionId)); + System.Collections.Generic.List _queryParameters = new System.Collections.Generic.List(); + if (this.Client.ApiVersion != null) + { + _queryParameters.Add(string.Format("api-version={0}", System.Uri.EscapeDataString(this.Client.ApiVersion))); + } + if (_queryParameters.Count > 0) + { + _url += "?" + string.Join("&", _queryParameters); + } + // Create HTTP transport objects + System.Net.Http.HttpRequestMessage _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 != 202 && (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); + CloudError _errorBody = Microsoft.Rest.Serialization.SafeJsonConvert.DeserializeObject(_responseContent, this.Client.DeserializationSettings); + if (_errorBody != null) + { + ex = new Microsoft.Rest.Azure.CloudException(_errorBody.Message); + 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 (_httpResponse.Headers.Contains("x-ms-request-id")) + { + ex.RequestId = _httpResponse.Headers.GetValues("x-ms-request-id").FirstOrDefault(); + } + 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; + } + + /// + /// Deletes a storage account in Microsoft Azure. + /// + /// + /// The name of the resource group within the user's subscription. + /// + /// + /// The name of the storage account within the specified resource group. + /// Storage account names must be between 3 and 24 characters in length and + /// use numbers and lower-case letters only. + /// + /// + /// 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 + /// + /// + /// A response object containing the response body and response headers. + /// + public async System.Threading.Tasks.Task DeleteWithHttpMessagesAsync(string resourceGroupName, string accountName, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + if (resourceGroupName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "resourceGroupName"); + } + if (accountName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "accountName"); + } + if (accountName != null) + { + if (accountName.Length > 24) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.MaxLength, "accountName", 24); + } + if (accountName.Length < 3) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.MinLength, "accountName", 3); + } + } + if (this.Client.ApiVersion == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.ApiVersion"); + } + if (this.Client.SubscriptionId == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.SubscriptionId"); + } + // 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("accountName", accountName); + tracingParameters.Add("cancellationToken", cancellationToken); + Microsoft.Rest.ServiceClientTracing.Enter(_invocationId, this, "Delete", 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.Storage/storageAccounts/{accountName}").ToString(); + _url = _url.Replace("{resourceGroupName}", System.Uri.EscapeDataString(resourceGroupName)); + _url = _url.Replace("{accountName}", System.Uri.EscapeDataString(accountName)); + _url = _url.Replace("{subscriptionId}", System.Uri.EscapeDataString(this.Client.SubscriptionId)); + System.Collections.Generic.List _queryParameters = new System.Collections.Generic.List(); + if (this.Client.ApiVersion != null) + { + _queryParameters.Add(string.Format("api-version={0}", System.Uri.EscapeDataString(this.Client.ApiVersion))); + } + if (_queryParameters.Count > 0) + { + _url += "?" + string.Join("&", _queryParameters); + } + // Create HTTP transport objects + System.Net.Http.HttpRequestMessage _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 != 200 && (int)_statusCode != 204) + { + var ex = new Microsoft.Rest.Azure.CloudException(string.Format("Operation returned an invalid status code '{0}'", _statusCode)); + if (_httpResponse.Content != null) { + _responseContent = await _httpResponse.Content.ReadAsStringAsync().ConfigureAwait(false); + } + else { + _responseContent = string.Empty; + } + ex.Request = new Microsoft.Rest.HttpRequestMessageWrapper(_httpRequest, _requestContent); + ex.Response = new Microsoft.Rest.HttpResponseMessageWrapper(_httpResponse, _responseContent); + if (_httpResponse.Headers.Contains("x-ms-request-id")) + { + ex.RequestId = _httpResponse.Headers.GetValues("x-ms-request-id").FirstOrDefault(); + } + 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(); + } + if (_shouldTrace) + { + Microsoft.Rest.ServiceClientTracing.Exit(_invocationId, _result); + } + return _result; + } + + /// + /// Returns the properties for the specified storage account including but not + /// limited to name, account type, location, and account status. The ListKeys + /// operation should be used to retrieve storage keys. + /// + /// + /// The name of the resource group within the user's subscription. + /// + /// + /// The name of the storage account within the specified resource group. + /// Storage account names must be between 3 and 24 characters in length and + /// use numbers and lower-case letters only. + /// + /// + /// 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 + /// + /// + /// A response object containing the response body and response headers. + /// + public async System.Threading.Tasks.Task> GetPropertiesWithHttpMessagesAsync(string resourceGroupName, string accountName, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + if (resourceGroupName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "resourceGroupName"); + } + if (accountName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "accountName"); + } + if (accountName != null) + { + if (accountName.Length > 24) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.MaxLength, "accountName", 24); + } + if (accountName.Length < 3) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.MinLength, "accountName", 3); + } + } + if (this.Client.ApiVersion == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.ApiVersion"); + } + if (this.Client.SubscriptionId == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.SubscriptionId"); + } + // 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("accountName", accountName); + tracingParameters.Add("cancellationToken", cancellationToken); + Microsoft.Rest.ServiceClientTracing.Enter(_invocationId, this, "GetProperties", 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.Storage/storageAccounts/{accountName}").ToString(); + _url = _url.Replace("{resourceGroupName}", System.Uri.EscapeDataString(resourceGroupName)); + _url = _url.Replace("{accountName}", System.Uri.EscapeDataString(accountName)); + _url = _url.Replace("{subscriptionId}", System.Uri.EscapeDataString(this.Client.SubscriptionId)); + System.Collections.Generic.List _queryParameters = new System.Collections.Generic.List(); + if (this.Client.ApiVersion != null) + { + _queryParameters.Add(string.Format("api-version={0}", System.Uri.EscapeDataString(this.Client.ApiVersion))); + } + if (_queryParameters.Count > 0) + { + _url += "?" + string.Join("&", _queryParameters); + } + // Create HTTP transport objects + System.Net.Http.HttpRequestMessage _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); + CloudError _errorBody = Microsoft.Rest.Serialization.SafeJsonConvert.DeserializeObject(_responseContent, this.Client.DeserializationSettings); + if (_errorBody != null) + { + ex = new Microsoft.Rest.Azure.CloudException(_errorBody.Message); + 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 (_httpResponse.Headers.Contains("x-ms-request-id")) + { + ex.RequestId = _httpResponse.Headers.GetValues("x-ms-request-id").FirstOrDefault(); + } + 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; + } + + /// + /// The update operation can be used to update the account type, encryption, + /// or tags for a storage account. It can also be used to map the account to + /// a custom domain. Only one custom domain is supported per storage account + /// and. replacement/change of custom domain is not supported. In order to + /// replace an old custom domain, the old value must be cleared/unregistered + /// before a new value may be set. Update of multiple properties is + /// supported. This call does not change the storage keys for the account. If + /// you want to change storage account keys, use the regenerate keys + /// operation. The location and name of the storage account cannot be + /// changed after creation. + /// + /// + /// The name of the resource group within the user's subscription. + /// + /// + /// The name of the storage account within the specified resource group. + /// Storage account names must be between 3 and 24 characters in length and + /// use numbers and lower-case letters only. + /// + /// + /// The parameters to provide for the updated account. + /// + /// + /// 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 + /// + /// + /// A response object containing the response body and response headers. + /// + public async System.Threading.Tasks.Task> UpdateWithHttpMessagesAsync(string resourceGroupName, string accountName, StorageAccountUpdateParametersInner parameters, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + if (resourceGroupName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "resourceGroupName"); + } + if (accountName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "accountName"); + } + if (accountName != null) + { + if (accountName.Length > 24) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.MaxLength, "accountName", 24); + } + if (accountName.Length < 3) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.MinLength, "accountName", 3); + } + } + if (parameters == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "parameters"); + } + if (this.Client.ApiVersion == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.ApiVersion"); + } + if (this.Client.SubscriptionId == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.SubscriptionId"); + } + if (parameters == null) + { + parameters = new StorageAccountUpdateParametersInner(); + } + // 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("accountName", accountName); + tracingParameters.Add("parameters", parameters); + tracingParameters.Add("cancellationToken", cancellationToken); + Microsoft.Rest.ServiceClientTracing.Enter(_invocationId, this, "Update", 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.Storage/storageAccounts/{accountName}").ToString(); + _url = _url.Replace("{resourceGroupName}", System.Uri.EscapeDataString(resourceGroupName)); + _url = _url.Replace("{accountName}", System.Uri.EscapeDataString(accountName)); + _url = _url.Replace("{subscriptionId}", System.Uri.EscapeDataString(this.Client.SubscriptionId)); + System.Collections.Generic.List _queryParameters = new System.Collections.Generic.List(); + if (this.Client.ApiVersion != null) + { + _queryParameters.Add(string.Format("api-version={0}", System.Uri.EscapeDataString(this.Client.ApiVersion))); + } + if (_queryParameters.Count > 0) + { + _url += "?" + string.Join("&", _queryParameters); + } + // Create HTTP transport objects + System.Net.Http.HttpRequestMessage _httpRequest = new System.Net.Http.HttpRequestMessage(); + System.Net.Http.HttpResponseMessage _httpResponse = null; + _httpRequest.Method = new System.Net.Http.HttpMethod("PATCH"); + _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) + { + 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); + CloudError _errorBody = Microsoft.Rest.Serialization.SafeJsonConvert.DeserializeObject(_responseContent, this.Client.DeserializationSettings); + if (_errorBody != null) + { + ex = new Microsoft.Rest.Azure.CloudException(_errorBody.Message); + 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 (_httpResponse.Headers.Contains("x-ms-request-id")) + { + ex.RequestId = _httpResponse.Headers.GetValues("x-ms-request-id").FirstOrDefault(); + } + 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; + } + + /// + /// Lists all the storage accounts available under the subscription. Note that + /// storage keys are not returned; use the ListKeys operation for this. + /// + /// + /// 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 + /// + /// + /// A response object containing the response body and response headers. + /// + public async System.Threading.Tasks.Task>> ListWithHttpMessagesAsync(System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + if (this.Client.ApiVersion == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.ApiVersion"); + } + if (this.Client.SubscriptionId == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.SubscriptionId"); + } + // 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("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}/providers/Microsoft.Storage/storageAccounts").ToString(); + _url = _url.Replace("{subscriptionId}", System.Uri.EscapeDataString(this.Client.SubscriptionId)); + System.Collections.Generic.List _queryParameters = new System.Collections.Generic.List(); + if (this.Client.ApiVersion != null) + { + _queryParameters.Add(string.Format("api-version={0}", System.Uri.EscapeDataString(this.Client.ApiVersion))); + } + if (_queryParameters.Count > 0) + { + _url += "?" + string.Join("&", _queryParameters); + } + // Create HTTP transport objects + System.Net.Http.HttpRequestMessage _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); + CloudError _errorBody = Microsoft.Rest.Serialization.SafeJsonConvert.DeserializeObject(_responseContent, this.Client.DeserializationSettings); + if (_errorBody != null) + { + ex = new Microsoft.Rest.Azure.CloudException(_errorBody.Message); + 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 (_httpResponse.Headers.Contains("x-ms-request-id")) + { + ex.RequestId = _httpResponse.Headers.GetValues("x-ms-request-id").FirstOrDefault(); + } + 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; + } + + /// + /// Lists all the storage accounts available under the given resource group. + /// Note that storage keys are not returned; use the ListKeys operation for + /// this. + /// + /// + /// The name of the resource group within the user's subscription. + /// + /// + /// 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 + /// + /// + /// A response object containing the response body and response headers. + /// + public async System.Threading.Tasks.Task>> ListByResourceGroupWithHttpMessagesAsync(string resourceGroupName, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + if (resourceGroupName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "resourceGroupName"); + } + if (this.Client.ApiVersion == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.ApiVersion"); + } + if (this.Client.SubscriptionId == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.SubscriptionId"); + } + // 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("cancellationToken", cancellationToken); + Microsoft.Rest.ServiceClientTracing.Enter(_invocationId, this, "ListByResourceGroup", 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.Storage/storageAccounts").ToString(); + _url = _url.Replace("{resourceGroupName}", System.Uri.EscapeDataString(resourceGroupName)); + _url = _url.Replace("{subscriptionId}", System.Uri.EscapeDataString(this.Client.SubscriptionId)); + System.Collections.Generic.List _queryParameters = new System.Collections.Generic.List(); + if (this.Client.ApiVersion != null) + { + _queryParameters.Add(string.Format("api-version={0}", System.Uri.EscapeDataString(this.Client.ApiVersion))); + } + if (_queryParameters.Count > 0) + { + _url += "?" + string.Join("&", _queryParameters); + } + // Create HTTP transport objects + System.Net.Http.HttpRequestMessage _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); + CloudError _errorBody = Microsoft.Rest.Serialization.SafeJsonConvert.DeserializeObject(_responseContent, this.Client.DeserializationSettings); + if (_errorBody != null) + { + ex = new Microsoft.Rest.Azure.CloudException(_errorBody.Message); + 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 (_httpResponse.Headers.Contains("x-ms-request-id")) + { + ex.RequestId = _httpResponse.Headers.GetValues("x-ms-request-id").FirstOrDefault(); + } + 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; + } + + /// + /// Lists the access keys for the specified storage account. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the storage account. + /// + /// + /// 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 + /// + /// + /// A response object containing the response body and response headers. + /// + public async System.Threading.Tasks.Task> ListKeysWithHttpMessagesAsync(string resourceGroupName, string accountName, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + if (resourceGroupName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "resourceGroupName"); + } + if (accountName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "accountName"); + } + if (accountName != null) + { + if (accountName.Length > 24) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.MaxLength, "accountName", 24); + } + if (accountName.Length < 3) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.MinLength, "accountName", 3); + } + } + if (this.Client.ApiVersion == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.ApiVersion"); + } + if (this.Client.SubscriptionId == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.SubscriptionId"); + } + // 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("accountName", accountName); + tracingParameters.Add("cancellationToken", cancellationToken); + Microsoft.Rest.ServiceClientTracing.Enter(_invocationId, this, "ListKeys", 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.Storage/storageAccounts/{accountName}/listKeys").ToString(); + _url = _url.Replace("{resourceGroupName}", System.Uri.EscapeDataString(resourceGroupName)); + _url = _url.Replace("{accountName}", System.Uri.EscapeDataString(accountName)); + _url = _url.Replace("{subscriptionId}", System.Uri.EscapeDataString(this.Client.SubscriptionId)); + System.Collections.Generic.List _queryParameters = new System.Collections.Generic.List(); + if (this.Client.ApiVersion != null) + { + _queryParameters.Add(string.Format("api-version={0}", System.Uri.EscapeDataString(this.Client.ApiVersion))); + } + if (_queryParameters.Count > 0) + { + _url += "?" + string.Join("&", _queryParameters); + } + // Create HTTP transport objects + System.Net.Http.HttpRequestMessage _httpRequest = new System.Net.Http.HttpRequestMessage(); + System.Net.Http.HttpResponseMessage _httpResponse = null; + _httpRequest.Method = new System.Net.Http.HttpMethod("POST"); + _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); + CloudError _errorBody = Microsoft.Rest.Serialization.SafeJsonConvert.DeserializeObject(_responseContent, this.Client.DeserializationSettings); + if (_errorBody != null) + { + ex = new Microsoft.Rest.Azure.CloudException(_errorBody.Message); + 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 (_httpResponse.Headers.Contains("x-ms-request-id")) + { + ex.RequestId = _httpResponse.Headers.GetValues("x-ms-request-id").FirstOrDefault(); + } + 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; + } + + /// + /// Regenerates the access keys for the specified storage account. + /// + /// + /// The name of the resource group within the user's subscription. + /// + /// + /// The name of the storage account within the specified resource group. + /// Storage account names must be between 3 and 24 characters in length and + /// use numbers and lower-case letters only. + /// + /// + /// + /// + /// 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 + /// + /// + /// A response object containing the response body and response headers. + /// + public async System.Threading.Tasks.Task> RegenerateKeyWithHttpMessagesAsync(string resourceGroupName, string accountName, string keyName, System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + if (resourceGroupName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "resourceGroupName"); + } + if (accountName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "accountName"); + } + if (accountName != null) + { + if (accountName.Length > 24) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.MaxLength, "accountName", 24); + } + if (accountName.Length < 3) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.MinLength, "accountName", 3); + } + } + if (this.Client.ApiVersion == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.ApiVersion"); + } + if (this.Client.SubscriptionId == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.SubscriptionId"); + } + if (keyName == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "keyName"); + } + StorageAccountRegenerateKeyParameters regenerateKey = new StorageAccountRegenerateKeyParameters(); + if (keyName != null) + { + regenerateKey.KeyName = keyName; + } + // 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("accountName", accountName); + tracingParameters.Add("regenerateKey", regenerateKey); + tracingParameters.Add("cancellationToken", cancellationToken); + Microsoft.Rest.ServiceClientTracing.Enter(_invocationId, this, "RegenerateKey", 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.Storage/storageAccounts/{accountName}/regenerateKey").ToString(); + _url = _url.Replace("{resourceGroupName}", System.Uri.EscapeDataString(resourceGroupName)); + _url = _url.Replace("{accountName}", System.Uri.EscapeDataString(accountName)); + _url = _url.Replace("{subscriptionId}", System.Uri.EscapeDataString(this.Client.SubscriptionId)); + System.Collections.Generic.List _queryParameters = new System.Collections.Generic.List(); + if (this.Client.ApiVersion != null) + { + _queryParameters.Add(string.Format("api-version={0}", System.Uri.EscapeDataString(this.Client.ApiVersion))); + } + if (_queryParameters.Count > 0) + { + _url += "?" + string.Join("&", _queryParameters); + } + // Create HTTP transport objects + System.Net.Http.HttpRequestMessage _httpRequest = new System.Net.Http.HttpRequestMessage(); + System.Net.Http.HttpResponseMessage _httpResponse = null; + _httpRequest.Method = new System.Net.Http.HttpMethod("POST"); + _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(regenerateKey != null) + { + _requestContent = Microsoft.Rest.Serialization.SafeJsonConvert.SerializeObject(regenerateKey, 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) + { + 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); + CloudError _errorBody = Microsoft.Rest.Serialization.SafeJsonConvert.DeserializeObject(_responseContent, this.Client.DeserializationSettings); + if (_errorBody != null) + { + ex = new Microsoft.Rest.Azure.CloudException(_errorBody.Message); + 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 (_httpResponse.Headers.Contains("x-ms-request-id")) + { + ex.RequestId = _httpResponse.Headers.GetValues("x-ms-request-id").FirstOrDefault(); + } + 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; + } + + } +} diff --git a/src/ResourceManagement/Storage/Microsoft.Azure.Management.V2.Storage/Generated/StorageAccountsOperationsExtensions.cs b/src/ResourceManagement/Storage/Microsoft.Azure.Management.V2.Storage/Generated/StorageAccountsOperationsExtensions.cs new file mode 100644 index 000000000..9b99c2f69 --- /dev/null +++ b/src/ResourceManagement/Storage/Microsoft.Azure.Management.V2.Storage/Generated/StorageAccountsOperationsExtensions.cs @@ -0,0 +1,486 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.Storage +{ + using System.Threading.Tasks; + using Microsoft.Rest.Azure; + using Models; + + /// + /// Extension methods for StorageAccountsOperations. + /// + public static partial class StorageAccountsOperationsExtensions + { + /// + /// Checks that account name is valid and is not in use. + /// + /// + /// The operations group for this extension method. + /// + /// + /// + public static CheckNameAvailabilityResultInner CheckNameAvailability(this IStorageAccountsOperations operations, string name) + { + return System.Threading.Tasks.Task.Factory.StartNew(s => ((IStorageAccountsOperations)s).CheckNameAvailabilityAsync(name), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// Checks that account name is valid and is not in use. + /// + /// + /// The operations group for this extension method. + /// + /// + /// + /// + /// The cancellation token. + /// + public static async System.Threading.Tasks.Task CheckNameAvailabilityAsync(this IStorageAccountsOperations operations, string name, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + using (var _result = await operations.CheckNameAvailabilityWithHttpMessagesAsync(name, null, cancellationToken).ConfigureAwait(false)) + { + return _result.Body; + } + } + + /// + /// Asynchronously creates a new storage account with the specified + /// parameters. If an account is already created and subsequent create + /// request is issued with different properties, the account properties will + /// be updated. If an account is already created and subsequent create or + /// update request is issued with exact same set of properties, the request + /// will succeed. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group within the user's subscription. + /// + /// + /// The name of the storage account within the specified resource group. + /// Storage account names must be between 3 and 24 characters in length and + /// use numbers and lower-case letters only. + /// + /// + /// The parameters to provide for the created account. + /// + public static StorageAccountInner Create(this IStorageAccountsOperations operations, string resourceGroupName, string accountName, StorageAccountCreateParametersInner parameters) + { + return System.Threading.Tasks.Task.Factory.StartNew(s => ((IStorageAccountsOperations)s).CreateAsync(resourceGroupName, accountName, parameters), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// Asynchronously creates a new storage account with the specified + /// parameters. If an account is already created and subsequent create + /// request is issued with different properties, the account properties will + /// be updated. If an account is already created and subsequent create or + /// update request is issued with exact same set of properties, the request + /// will succeed. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group within the user's subscription. + /// + /// + /// The name of the storage account within the specified resource group. + /// Storage account names must be between 3 and 24 characters in length and + /// use numbers and lower-case letters only. + /// + /// + /// The parameters to provide for the created account. + /// + /// + /// The cancellation token. + /// + public static async System.Threading.Tasks.Task CreateAsync(this IStorageAccountsOperations operations, string resourceGroupName, string accountName, StorageAccountCreateParametersInner parameters, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + using (var _result = await operations.CreateWithHttpMessagesAsync(resourceGroupName, accountName, parameters, null, cancellationToken).ConfigureAwait(false)) + { + return _result.Body; + } + } + + /// + /// Asynchronously creates a new storage account with the specified + /// parameters. If an account is already created and subsequent create + /// request is issued with different properties, the account properties will + /// be updated. If an account is already created and subsequent create or + /// update request is issued with exact same set of properties, the request + /// will succeed. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group within the user's subscription. + /// + /// + /// The name of the storage account within the specified resource group. + /// Storage account names must be between 3 and 24 characters in length and + /// use numbers and lower-case letters only. + /// + /// + /// The parameters to provide for the created account. + /// + public static StorageAccountInner BeginCreate(this IStorageAccountsOperations operations, string resourceGroupName, string accountName, StorageAccountCreateParametersInner parameters) + { + return System.Threading.Tasks.Task.Factory.StartNew(s => ((IStorageAccountsOperations)s).BeginCreateAsync(resourceGroupName, accountName, parameters), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// Asynchronously creates a new storage account with the specified + /// parameters. If an account is already created and subsequent create + /// request is issued with different properties, the account properties will + /// be updated. If an account is already created and subsequent create or + /// update request is issued with exact same set of properties, the request + /// will succeed. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group within the user's subscription. + /// + /// + /// The name of the storage account within the specified resource group. + /// Storage account names must be between 3 and 24 characters in length and + /// use numbers and lower-case letters only. + /// + /// + /// The parameters to provide for the created account. + /// + /// + /// The cancellation token. + /// + public static async System.Threading.Tasks.Task BeginCreateAsync(this IStorageAccountsOperations operations, string resourceGroupName, string accountName, StorageAccountCreateParametersInner parameters, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + using (var _result = await operations.BeginCreateWithHttpMessagesAsync(resourceGroupName, accountName, parameters, null, cancellationToken).ConfigureAwait(false)) + { + return _result.Body; + } + } + + /// + /// Deletes a storage account in Microsoft Azure. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group within the user's subscription. + /// + /// + /// The name of the storage account within the specified resource group. + /// Storage account names must be between 3 and 24 characters in length and + /// use numbers and lower-case letters only. + /// + public static void Delete(this IStorageAccountsOperations operations, string resourceGroupName, string accountName) + { + System.Threading.Tasks.Task.Factory.StartNew(s => ((IStorageAccountsOperations)s).DeleteAsync(resourceGroupName, accountName), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// Deletes a storage account in Microsoft Azure. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group within the user's subscription. + /// + /// + /// The name of the storage account within the specified resource group. + /// Storage account names must be between 3 and 24 characters in length and + /// use numbers and lower-case letters only. + /// + /// + /// The cancellation token. + /// + public static async System.Threading.Tasks.Task DeleteAsync(this IStorageAccountsOperations operations, string resourceGroupName, string accountName, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + await operations.DeleteWithHttpMessagesAsync(resourceGroupName, accountName, null, cancellationToken).ConfigureAwait(false); + } + + /// + /// Returns the properties for the specified storage account including but not + /// limited to name, account type, location, and account status. The ListKeys + /// operation should be used to retrieve storage keys. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group within the user's subscription. + /// + /// + /// The name of the storage account within the specified resource group. + /// Storage account names must be between 3 and 24 characters in length and + /// use numbers and lower-case letters only. + /// + public static StorageAccountInner GetProperties(this IStorageAccountsOperations operations, string resourceGroupName, string accountName) + { + return System.Threading.Tasks.Task.Factory.StartNew(s => ((IStorageAccountsOperations)s).GetPropertiesAsync(resourceGroupName, accountName), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// Returns the properties for the specified storage account including but not + /// limited to name, account type, location, and account status. The ListKeys + /// operation should be used to retrieve storage keys. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group within the user's subscription. + /// + /// + /// The name of the storage account within the specified resource group. + /// Storage account names must be between 3 and 24 characters in length and + /// use numbers and lower-case letters only. + /// + /// + /// The cancellation token. + /// + public static async System.Threading.Tasks.Task GetPropertiesAsync(this IStorageAccountsOperations operations, string resourceGroupName, string accountName, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + using (var _result = await operations.GetPropertiesWithHttpMessagesAsync(resourceGroupName, accountName, null, cancellationToken).ConfigureAwait(false)) + { + return _result.Body; + } + } + + /// + /// The update operation can be used to update the account type, encryption, + /// or tags for a storage account. It can also be used to map the account to + /// a custom domain. Only one custom domain is supported per storage account + /// and. replacement/change of custom domain is not supported. In order to + /// replace an old custom domain, the old value must be cleared/unregistered + /// before a new value may be set. Update of multiple properties is + /// supported. This call does not change the storage keys for the account. If + /// you want to change storage account keys, use the regenerate keys + /// operation. The location and name of the storage account cannot be + /// changed after creation. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group within the user's subscription. + /// + /// + /// The name of the storage account within the specified resource group. + /// Storage account names must be between 3 and 24 characters in length and + /// use numbers and lower-case letters only. + /// + /// + /// The parameters to provide for the updated account. + /// + public static StorageAccountInner Update(this IStorageAccountsOperations operations, string resourceGroupName, string accountName, StorageAccountUpdateParametersInner parameters) + { + return System.Threading.Tasks.Task.Factory.StartNew(s => ((IStorageAccountsOperations)s).UpdateAsync(resourceGroupName, accountName, parameters), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// The update operation can be used to update the account type, encryption, + /// or tags for a storage account. It can also be used to map the account to + /// a custom domain. Only one custom domain is supported per storage account + /// and. replacement/change of custom domain is not supported. In order to + /// replace an old custom domain, the old value must be cleared/unregistered + /// before a new value may be set. Update of multiple properties is + /// supported. This call does not change the storage keys for the account. If + /// you want to change storage account keys, use the regenerate keys + /// operation. The location and name of the storage account cannot be + /// changed after creation. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group within the user's subscription. + /// + /// + /// The name of the storage account within the specified resource group. + /// Storage account names must be between 3 and 24 characters in length and + /// use numbers and lower-case letters only. + /// + /// + /// The parameters to provide for the updated account. + /// + /// + /// The cancellation token. + /// + public static async System.Threading.Tasks.Task UpdateAsync(this IStorageAccountsOperations operations, string resourceGroupName, string accountName, StorageAccountUpdateParametersInner parameters, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + using (var _result = await operations.UpdateWithHttpMessagesAsync(resourceGroupName, accountName, parameters, null, cancellationToken).ConfigureAwait(false)) + { + return _result.Body; + } + } + + /// + /// Lists all the storage accounts available under the subscription. Note that + /// storage keys are not returned; use the ListKeys operation for this. + /// + /// + /// The operations group for this extension method. + /// + public static System.Collections.Generic.IEnumerable List(this IStorageAccountsOperations operations) + { + return System.Threading.Tasks.Task.Factory.StartNew(s => ((IStorageAccountsOperations)s).ListAsync(), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// Lists all the storage accounts available under the subscription. Note that + /// storage keys are not returned; use the ListKeys operation for this. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The cancellation token. + /// + public static async Task> ListAsync(this IStorageAccountsOperations operations, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + using (var _result = await operations.ListWithHttpMessagesAsync(null, cancellationToken).ConfigureAwait(false)) + { + return _result.Body; + } + } + + /// + /// Lists all the storage accounts available under the given resource group. + /// Note that storage keys are not returned; use the ListKeys operation for + /// this. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group within the user's subscription. + /// + public static System.Collections.Generic.IEnumerable ListByResourceGroup(this IStorageAccountsOperations operations, string resourceGroupName) + { + return System.Threading.Tasks.Task.Factory.StartNew(s => ((IStorageAccountsOperations)s).ListByResourceGroupAsync(resourceGroupName), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// Lists all the storage accounts available under the given resource group. + /// Note that storage keys are not returned; use the ListKeys operation for + /// this. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group within the user's subscription. + /// + /// + /// The cancellation token. + /// + public static async Task> ListByResourceGroupAsync(this IStorageAccountsOperations operations, string resourceGroupName, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + using (var _result = await operations.ListByResourceGroupWithHttpMessagesAsync(resourceGroupName, null, cancellationToken).ConfigureAwait(false)) + { + return _result.Body; + } + } + + /// + /// Lists the access keys for the specified storage account. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the storage account. + /// + public static StorageAccountListKeysResultInner ListKeys(this IStorageAccountsOperations operations, string resourceGroupName, string accountName) + { + return System.Threading.Tasks.Task.Factory.StartNew(s => ((IStorageAccountsOperations)s).ListKeysAsync(resourceGroupName, accountName), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// Lists the access keys for the specified storage account. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group. + /// + /// + /// The name of the storage account. + /// + /// + /// The cancellation token. + /// + public static async System.Threading.Tasks.Task ListKeysAsync(this IStorageAccountsOperations operations, string resourceGroupName, string accountName, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + using (var _result = await operations.ListKeysWithHttpMessagesAsync(resourceGroupName, accountName, null, cancellationToken).ConfigureAwait(false)) + { + return _result.Body; + } + } + + /// + /// Regenerates the access keys for the specified storage account. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group within the user's subscription. + /// + /// + /// The name of the storage account within the specified resource group. + /// Storage account names must be between 3 and 24 characters in length and + /// use numbers and lower-case letters only. + /// + /// + /// + public static StorageAccountListKeysResultInner RegenerateKey(this IStorageAccountsOperations operations, string resourceGroupName, string accountName, string keyName) + { + return System.Threading.Tasks.Task.Factory.StartNew(s => ((IStorageAccountsOperations)s).RegenerateKeyAsync(resourceGroupName, accountName, keyName), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// Regenerates the access keys for the specified storage account. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The name of the resource group within the user's subscription. + /// + /// + /// The name of the storage account within the specified resource group. + /// Storage account names must be between 3 and 24 characters in length and + /// use numbers and lower-case letters only. + /// + /// + /// + /// + /// The cancellation token. + /// + public static async System.Threading.Tasks.Task RegenerateKeyAsync(this IStorageAccountsOperations operations, string resourceGroupName, string accountName, string keyName, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + using (var _result = await operations.RegenerateKeyWithHttpMessagesAsync(resourceGroupName, accountName, keyName, null, cancellationToken).ConfigureAwait(false)) + { + return _result.Body; + } + } + + } +} diff --git a/src/ResourceManagement/Storage/Microsoft.Azure.Management.V2.Storage/Generated/StorageManagementClient.cs b/src/ResourceManagement/Storage/Microsoft.Azure.Management.V2.Storage/Generated/StorageManagementClient.cs new file mode 100644 index 000000000..2f025553a --- /dev/null +++ b/src/ResourceManagement/Storage/Microsoft.Azure.Management.V2.Storage/Generated/StorageManagementClient.cs @@ -0,0 +1,318 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.Storage +{ + using System.Linq; + using Microsoft.Rest.Azure; + using Models; + + /// + /// The Storage Management Client. + /// + public partial class StorageManagementClient : Microsoft.Rest.ServiceClient, IStorageManagementClient, IAzureClient + { + /// + /// The base URI of the service. + /// + public System.Uri BaseUri { get; set; } + + /// + /// Gets or sets json serialization settings. + /// + public Newtonsoft.Json.JsonSerializerSettings SerializationSettings { get; private set; } + + /// + /// Gets or sets json deserialization settings. + /// + public Newtonsoft.Json.JsonSerializerSettings DeserializationSettings { get; private set; } + + /// + /// Credentials needed for the client to connect to Azure. + /// + public Microsoft.Rest.ServiceClientCredentials Credentials { get; private set; } + + /// + /// Gets subscription credentials which uniquely identify Microsoft Azure + /// subscription. The subscription ID forms part of the URI for every service + /// call. + /// + public string SubscriptionId { get; set; } + + /// + /// Client Api Version. + /// + public string ApiVersion { get; private set; } + + /// + /// Gets or sets the preferred language for the response. + /// + public string AcceptLanguage { get; set; } + + /// + /// Gets or sets the retry timeout in seconds for Long Running Operations. + /// Default value is 30. + /// + public int? LongRunningOperationRetryTimeout { get; set; } + + /// + /// When set to true a unique x-ms-client-request-id value is generated and + /// included in each request. Default is true. + /// + public bool? GenerateClientRequestId { get; set; } + + /// + /// Gets the IStorageAccountsOperations. + /// + public virtual IStorageAccountsOperations StorageAccounts { get; private set; } + + /// + /// Gets the IUsageOperations. + /// + public virtual IUsageOperations Usage { get; private set; } + + /// + /// Initializes a new instance of the StorageManagementClient class. + /// + /// + /// Optional. The delegating handlers to add to the http client pipeline. + /// + protected StorageManagementClient(params System.Net.Http.DelegatingHandler[] handlers) : base(handlers) + { + this.Initialize(); + } + + /// + /// Initializes a new instance of the StorageManagementClient class. + /// + /// + /// Optional. The http client handler used to handle http transport. + /// + /// + /// Optional. The delegating handlers to add to the http client pipeline. + /// + protected StorageManagementClient(System.Net.Http.HttpClientHandler rootHandler, params System.Net.Http.DelegatingHandler[] handlers) : base(rootHandler, handlers) + { + this.Initialize(); + } + + /// + /// Initializes a new instance of the StorageManagementClient class. + /// + /// + /// Optional. The base URI of the service. + /// + /// + /// Optional. The delegating handlers to add to the http client pipeline. + /// + /// + /// Thrown when a required parameter is null + /// + protected StorageManagementClient(System.Uri baseUri, params System.Net.Http.DelegatingHandler[] handlers) : this(handlers) + { + if (baseUri == null) + { + throw new System.ArgumentNullException("baseUri"); + } + this.BaseUri = baseUri; + } + + /// + /// Initializes a new instance of the StorageManagementClient class. + /// + /// + /// Optional. The base URI of the service. + /// + /// + /// Optional. The http client handler used to handle http transport. + /// + /// + /// Optional. The delegating handlers to add to the http client pipeline. + /// + /// + /// Thrown when a required parameter is null + /// + protected StorageManagementClient(System.Uri baseUri, System.Net.Http.HttpClientHandler rootHandler, params System.Net.Http.DelegatingHandler[] handlers) : this(rootHandler, handlers) + { + if (baseUri == null) + { + throw new System.ArgumentNullException("baseUri"); + } + this.BaseUri = baseUri; + } + + /// + /// Initializes a new instance of the StorageManagementClient class. + /// + /// + /// Required. Credentials needed for the client to connect to Azure. + /// + /// + /// Optional. The delegating handlers to add to the http client pipeline. + /// + /// + /// Thrown when a required parameter is null + /// + public StorageManagementClient(Microsoft.Rest.ServiceClientCredentials credentials, params System.Net.Http.DelegatingHandler[] handlers) : this(handlers) + { + if (credentials == null) + { + throw new System.ArgumentNullException("credentials"); + } + this.Credentials = credentials; + if (this.Credentials != null) + { + this.Credentials.InitializeServiceClient(this); + } + } + + /// + /// Initializes a new instance of the StorageManagementClient class. + /// + /// + /// Required. Credentials needed for the client to connect to Azure. + /// + /// + /// Optional. The http client handler used to handle http transport. + /// + /// + /// Optional. The delegating handlers to add to the http client pipeline. + /// + /// + /// Thrown when a required parameter is null + /// + public StorageManagementClient(Microsoft.Rest.ServiceClientCredentials credentials, System.Net.Http.HttpClientHandler rootHandler, params System.Net.Http.DelegatingHandler[] handlers) : this(rootHandler, handlers) + { + if (credentials == null) + { + throw new System.ArgumentNullException("credentials"); + } + this.Credentials = credentials; + if (this.Credentials != null) + { + this.Credentials.InitializeServiceClient(this); + } + } + + /// + /// Initializes a new instance of the StorageManagementClient class. + /// + /// + /// Optional. The base URI of the service. + /// + /// + /// Required. Credentials needed for the client to connect to Azure. + /// + /// + /// Optional. The delegating handlers to add to the http client pipeline. + /// + /// + /// Thrown when a required parameter is null + /// + public StorageManagementClient(System.Uri baseUri, Microsoft.Rest.ServiceClientCredentials credentials, params System.Net.Http.DelegatingHandler[] handlers) : this(handlers) + { + if (baseUri == null) + { + throw new System.ArgumentNullException("baseUri"); + } + if (credentials == null) + { + throw new System.ArgumentNullException("credentials"); + } + this.BaseUri = baseUri; + this.Credentials = credentials; + if (this.Credentials != null) + { + this.Credentials.InitializeServiceClient(this); + } + } + + /// + /// Initializes a new instance of the StorageManagementClient class. + /// + /// + /// Optional. The base URI of the service. + /// + /// + /// Required. Credentials needed for the client to connect to Azure. + /// + /// + /// Optional. The http client handler used to handle http transport. + /// + /// + /// Optional. The delegating handlers to add to the http client pipeline. + /// + /// + /// Thrown when a required parameter is null + /// + public StorageManagementClient(System.Uri baseUri, Microsoft.Rest.ServiceClientCredentials credentials, System.Net.Http.HttpClientHandler rootHandler, params System.Net.Http.DelegatingHandler[] handlers) : this(rootHandler, handlers) + { + if (baseUri == null) + { + throw new System.ArgumentNullException("baseUri"); + } + if (credentials == null) + { + throw new System.ArgumentNullException("credentials"); + } + this.BaseUri = baseUri; + this.Credentials = credentials; + if (this.Credentials != null) + { + this.Credentials.InitializeServiceClient(this); + } + } + + /// + /// An optional partial-method to perform custom initialization. + /// + partial void CustomInitialize(); + /// + /// Initializes client properties. + /// + private void Initialize() + { + this.StorageAccounts = new StorageAccountsOperations(this); + this.Usage = new UsageOperations(this); + this.BaseUri = new System.Uri("https://management.azure.com"); + this.ApiVersion = "2016-01-01"; + this.AcceptLanguage = "en-US"; + this.LongRunningOperationRetryTimeout = 30; + this.GenerateClientRequestId = true; + SerializationSettings = new Newtonsoft.Json.JsonSerializerSettings + { + Formatting = Newtonsoft.Json.Formatting.Indented, + DateFormatHandling = Newtonsoft.Json.DateFormatHandling.IsoDateFormat, + DateTimeZoneHandling = Newtonsoft.Json.DateTimeZoneHandling.Utc, + NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore, + ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Serialize, + ContractResolver = new Microsoft.Rest.Serialization.ReadOnlyJsonContractResolver(), + Converters = new System.Collections.Generic.List + { + new Microsoft.Rest.Serialization.Iso8601TimeSpanConverter() + } + }; + SerializationSettings.Converters.Add(new Microsoft.Rest.Serialization.TransformationJsonConverter()); + DeserializationSettings = new Newtonsoft.Json.JsonSerializerSettings + { + DateFormatHandling = Newtonsoft.Json.DateFormatHandling.IsoDateFormat, + DateTimeZoneHandling = Newtonsoft.Json.DateTimeZoneHandling.Utc, + NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore, + ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Serialize, + ContractResolver = new Microsoft.Rest.Serialization.ReadOnlyJsonContractResolver(), + Converters = new System.Collections.Generic.List + { + new Microsoft.Rest.Serialization.Iso8601TimeSpanConverter() + } + }; + CustomInitialize(); + DeserializationSettings.Converters.Add(new Microsoft.Rest.Serialization.TransformationJsonConverter()); + DeserializationSettings.Converters.Add(new Microsoft.Rest.Azure.CloudErrorJsonConverter()); + } + } +} diff --git a/src/ResourceManagement/Storage/Microsoft.Azure.Management.V2.Storage/Generated/UsageOperations.cs b/src/ResourceManagement/Storage/Microsoft.Azure.Management.V2.Storage/Generated/UsageOperations.cs new file mode 100644 index 000000000..d80357a32 --- /dev/null +++ b/src/ResourceManagement/Storage/Microsoft.Azure.Management.V2.Storage/Generated/UsageOperations.cs @@ -0,0 +1,219 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.Storage +{ + using System.Linq; + using Microsoft.Rest; + using Microsoft.Rest.Azure; + using Models; + + /// + /// UsageOperations operations. + /// + internal partial class UsageOperations : Microsoft.Rest.IServiceOperations, IUsageOperations + { + /// + /// Initializes a new instance of the UsageOperations class. + /// + /// + /// Reference to the service client. + /// + /// + /// Thrown when a required parameter is null + /// + internal UsageOperations(StorageManagementClient client) + { + if (client == null) + { + throw new System.ArgumentNullException("client"); + } + this.Client = client; + } + + /// + /// Gets a reference to the StorageManagementClient + /// + public StorageManagementClient Client { get; private set; } + + /// + /// Gets the current usage count and the limit for the resources under the + /// subscription. + /// + /// + /// 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 + /// + /// + /// A response object containing the response body and response headers. + /// + public async System.Threading.Tasks.Task>> ListWithHttpMessagesAsync(System.Collections.Generic.Dictionary> customHeaders = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + if (this.Client.ApiVersion == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.ApiVersion"); + } + if (this.Client.SubscriptionId == null) + { + throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.CannotBeNull, "this.Client.SubscriptionId"); + } + // 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("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}/providers/Microsoft.Storage/usages").ToString(); + _url = _url.Replace("{subscriptionId}", System.Uri.EscapeDataString(this.Client.SubscriptionId)); + System.Collections.Generic.List _queryParameters = new System.Collections.Generic.List(); + if (this.Client.ApiVersion != null) + { + _queryParameters.Add(string.Format("api-version={0}", System.Uri.EscapeDataString(this.Client.ApiVersion))); + } + if (_queryParameters.Count > 0) + { + _url += "?" + string.Join("&", _queryParameters); + } + // Create HTTP transport objects + System.Net.Http.HttpRequestMessage _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); + CloudError _errorBody = Microsoft.Rest.Serialization.SafeJsonConvert.DeserializeObject(_responseContent, this.Client.DeserializationSettings); + if (_errorBody != null) + { + ex = new Microsoft.Rest.Azure.CloudException(_errorBody.Message); + 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 (_httpResponse.Headers.Contains("x-ms-request-id")) + { + ex.RequestId = _httpResponse.Headers.GetValues("x-ms-request-id").FirstOrDefault(); + } + 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; + } + + } +} diff --git a/src/ResourceManagement/Storage/Microsoft.Azure.Management.V2.Storage/Generated/UsageOperationsExtensions.cs b/src/ResourceManagement/Storage/Microsoft.Azure.Management.V2.Storage/Generated/UsageOperationsExtensions.cs new file mode 100644 index 000000000..73633513e --- /dev/null +++ b/src/ResourceManagement/Storage/Microsoft.Azure.Management.V2.Storage/Generated/UsageOperationsExtensions.cs @@ -0,0 +1,51 @@ +// 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 0.17.0.0 +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. + +namespace Microsoft.Azure.Management.Storage +{ + using System.Threading.Tasks; + using Microsoft.Rest.Azure; + using Models; + + /// + /// Extension methods for UsageOperations. + /// + public static partial class UsageOperationsExtensions + { + /// + /// Gets the current usage count and the limit for the resources under the + /// subscription. + /// + /// + /// The operations group for this extension method. + /// + public static System.Collections.Generic.IEnumerable List(this IUsageOperations operations) + { + return System.Threading.Tasks.Task.Factory.StartNew(s => ((IUsageOperations)s).ListAsync(), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult(); + } + + /// + /// Gets the current usage count and the limit for the resources under the + /// subscription. + /// + /// + /// The operations group for this extension method. + /// + /// + /// The cancellation token. + /// + public static async Task> ListAsync(this IUsageOperations operations, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) + { + using (var _result = await operations.ListWithHttpMessagesAsync(null, cancellationToken).ConfigureAwait(false)) + { + return _result.Body; + } + } + + } +} diff --git a/src/ResourceManagement/Storage/Microsoft.Azure.Management.V2.Storage/Microsoft.Azure.Management.V2.Storage.xproj b/src/ResourceManagement/Storage/Microsoft.Azure.Management.V2.Storage/Microsoft.Azure.Management.V2.Storage.xproj new file mode 100644 index 000000000..d2c2c79ab --- /dev/null +++ b/src/ResourceManagement/Storage/Microsoft.Azure.Management.V2.Storage/Microsoft.Azure.Management.V2.Storage.xproj @@ -0,0 +1,22 @@ + + + + 14.0 + $(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion) + + + + a9b44e1b-c26f-44ab-b13f-f22742371135 + Microsoft.Azure.Management.V2.Storage + .\obj + .\bin\ + + + 2.0 + + + + + + + \ No newline at end of file diff --git a/src/ResourceManagement/Storage/Microsoft.Azure.Management.V2.Storage/StorageAccount/AccountStatuses.cs b/src/ResourceManagement/Storage/Microsoft.Azure.Management.V2.Storage/StorageAccount/AccountStatuses.cs new file mode 100644 index 000000000..6f6fd6d80 --- /dev/null +++ b/src/ResourceManagement/Storage/Microsoft.Azure.Management.V2.Storage/StorageAccount/AccountStatuses.cs @@ -0,0 +1,24 @@ +using Microsoft.Azure.Management.Storage.Models; + +namespace Microsoft.Azure.Management.V2.Storage +{ + public class AccountStatuses + { + public AccountStatuses(AccountStatus? primary, AccountStatus? secondary) + { + Primary = primary; + Secondary = secondary; + } + + public AccountStatus? Primary + { + get; private set; + } + + public AccountStatus? Secondary + { + get; private set; + } + } + +} diff --git a/src/ResourceManagement/Storage/Microsoft.Azure.Management.V2.Storage/StorageAccount/CheckNameAvailabilityResult.cs b/src/ResourceManagement/Storage/Microsoft.Azure.Management.V2.Storage/StorageAccount/CheckNameAvailabilityResult.cs new file mode 100644 index 000000000..ea6ba6c9a --- /dev/null +++ b/src/ResourceManagement/Storage/Microsoft.Azure.Management.V2.Storage/StorageAccount/CheckNameAvailabilityResult.cs @@ -0,0 +1,38 @@ +using Microsoft.Azure.Management.Storage.Models; + +namespace Microsoft.Azure.Management.V2.Storage +{ + public class CheckNameAvailabilityResult + { + private CheckNameAvailabilityResultInner inner; + + internal CheckNameAvailabilityResult(CheckNameAvailabilityResultInner inner) + { + this.inner = inner; + } + + public bool? IsAvailalbe + { + get + { + return inner.NameAvailable; + } + } + + public Reason? Reason + { + get + { + return inner.Reason; + } + } + + public string Message + { + get + { + return inner.Message; + } + } + } +} diff --git a/src/ResourceManagement/Storage/Microsoft.Azure.Management.V2.Storage/StorageAccount/PublicEndpoints.cs b/src/ResourceManagement/Storage/Microsoft.Azure.Management.V2.Storage/StorageAccount/PublicEndpoints.cs new file mode 100644 index 000000000..5cf5a78d4 --- /dev/null +++ b/src/ResourceManagement/Storage/Microsoft.Azure.Management.V2.Storage/StorageAccount/PublicEndpoints.cs @@ -0,0 +1,23 @@ +using Microsoft.Azure.Management.Storage.Models; + +namespace Microsoft.Azure.Management.V2.Storage +{ + public class PublicEndpoints + { + internal PublicEndpoints(Endpoints primary, Endpoints secondary) + { + Primary = primary; + Secondary = secondary; + } + + public Endpoints Primary + { + get; private set; + } + + public Endpoints Secondary + { + get; private set; + } + } +} diff --git a/src/ResourceManagement/Storage/Microsoft.Azure.Management.V2.Storage/StorageAccount/StorageAccountImpl.cs b/src/ResourceManagement/Storage/Microsoft.Azure.Management.V2.Storage/StorageAccount/StorageAccountImpl.cs new file mode 100644 index 000000000..59f76de66 --- /dev/null +++ b/src/ResourceManagement/Storage/Microsoft.Azure.Management.V2.Storage/StorageAccount/StorageAccountImpl.cs @@ -0,0 +1,332 @@ +using System; +using System.Collections.Generic; +using System.Threading.Tasks; +using Microsoft.Azure.Management.Storage.Models; +using Microsoft.Azure.Management.V2.Resource; +using Microsoft.Azure.Management.Storage; +using Microsoft.Azure.Management.V2.Resource.Core; +using System.Threading; +using Microsoft.Azure.Management.V2.Resource.Core.Resource.Definition; +using Microsoft.Azure.Management.V2.Storage.StorageAccount.Definition; +using Microsoft.Azure.Management.V2.Resource.Core.Resource.Update; +using Microsoft.Azure.Management.V2.Storage.StorageAccount.Update; +using Microsoft.Azure.Management.V2.Resource.Core.ResourceActions; + +namespace Microsoft.Azure.Management.V2.Storage +{ + internal class StorageAccountImpl : + GroupableResource, + IStorageAccount, + StorageAccount.Definition.IDefinition, + StorageAccount.Update.IUpdate + { + private string name; + private StorageAccountCreateParametersInner createParameters; + private StorageAccountUpdateParametersInner updateParameters; + private IList cachedAccountKeys; + + private IStorageAccountsOperations client; + + + internal StorageAccountImpl(string name, + Management.Storage.Models.StorageAccountInner innerObject, + IStorageAccountsOperations client, + IStorageManager manager) : base(name, innerObject, manager) + { + this.name = name; + createParameters = new StorageAccountCreateParametersInner(); + updateParameters = new StorageAccountUpdateParametersInner(); + this.client = client; + } + + #region Getters + + public AccessTier? AccessTier + { + get + { + return Inner.AccessTier; + } + } + + public AccountStatuses AccountStatuses + { + get + { + return new AccountStatuses(Inner.StatusOfPrimary, Inner.StatusOfSecondary); + } + } + + public DateTime? CreationTime + { + get + { + return Inner.CreationTime; + } + } + + public CustomDomain CustomDomain + { + get + { + return Inner.CustomDomain; + } + } + + public Encryption Encryption + { + get + { + return Inner.Encryption; + } + } + + public PublicEndpoints EndPoints + { + get + { + return new PublicEndpoints(Inner.PrimaryEndpoints, Inner.SecondaryEndpoints); + } + } + + public Kind? Kind + { + get + { + return Inner.Kind; + } + } + + public DateTime? LastGeoFailoverTime + { + get + { + return Inner.LastGeoFailoverTime; + } + } + + public ProvisioningState? ProvisioningState + { + get + { + return Inner.ProvisioningState; + } + } + + public Sku Sku + { + get + { + return Inner.Sku; + } + } + + public IList Keys + { + get + { + if (cachedAccountKeys == null) + { + cachedAccountKeys = RefreshKeys(); + } + return cachedAccountKeys; + } + } + + #endregion + + #region Fluent setters + + #region Definition setters + + public IWithCreate WithSku(SkuName skuName) + { + createParameters.Sku = new Sku() + { + Name = skuName + }; + return this; + } + + public IWithCreate WithAccessTier(AccessTier accessTier) + { + createParameters.AccessTier = accessTier; + return this; + } + + public IWithCreateAndAccessTier WithBlobStorageAccountKind() + { + createParameters.Kind = Management.Storage.Models.Kind.BlobStorage; + return this; + } + + public IWithCreate WithGeneralPurposeAccountKind() + { + createParameters.Kind = Management.Storage.Models.Kind.Storage; + return this; + } + + + public IWithCreate WithCustomDomain(string name) + { + createParameters.CustomDomain = new CustomDomain(name); + return this; + } + + public IWithCreate WithCustomDomain(CustomDomain customDomain) + { + createParameters.CustomDomain = customDomain; + return this; + } + + public IWithCreate WithCustomDomain(string name, bool useSubDomain) + { + return WithCustomDomain(new CustomDomain() + { + Name = name, + UseSubDomain = useSubDomain + }); + } + + public IWithCreate WithEncryption(Encryption encryption) + { + createParameters.Encryption = encryption; + return this; + } + + + #endregion + + #region Update setters + + IUpdate IWithAccessTier.WithAccessTier(AccessTier accessTier) + { + if (Inner.Kind != Management.Storage.Models.Kind.BlobStorage) + { + throw new ArgumentException("Access tier cannot be changed for general purpose storage accounts"); + } + updateParameters.AccessTier = accessTier; + return this; + } + + IUpdate StorageAccount.Update.IWithCustomDomain.WithCustomDomain(string name) + { + updateParameters.CustomDomain = new CustomDomain(name); + return this; + } + + IUpdate StorageAccount.Update.IWithCustomDomain.WithCustomDomain(CustomDomain customDomain) + { + updateParameters.CustomDomain = customDomain; + return this; + } + + IUpdate StorageAccount.Update.IWithCustomDomain.WithCustomDomain(string name, bool useSubDomain) + { + updateParameters.CustomDomain = new CustomDomain() + { + Name = name, + UseSubDomain = useSubDomain + }; + return this; + } + + IUpdate StorageAccount.Update.IWithCustomDomain.WithoutCustomDomain() + { + updateParameters.CustomDomain = new CustomDomain + { + Name = "" + }; + return this; + } + + IUpdate StorageAccount.Update.IWithSku.WithSku(SkuName skuName) + { + updateParameters.Sku = new Sku() + { + Name = skuName + }; + return this; + } + + IUpdate StorageAccount.Update.IWithEncryption.WithEncryption(Encryption encryption) + { + updateParameters.Encryption = encryption; + return this; + } + + #endregion + + #endregion + + #region Actions + + public IList RefreshKeys() + { + var storageAccountListKeysResultInner = client.ListKeys(ResourceGroupName, Name); + cachedAccountKeys = storageAccountListKeysResultInner.Keys; + return cachedAccountKeys; + } + + public IList RegenerateKey(string keyName) + { + var storageAccountListKeysResultInner = client.RegenerateKey(ResourceGroupName, Name, keyName); + cachedAccountKeys = storageAccountListKeysResultInner.Keys; + return cachedAccountKeys; + } + + #endregion + + #region Implementation of IRefreshable interface + + public override async Task Refresh() + { + var response = await client.GetPropertiesAsync(ResourceGroupName, Name); + SetInner(response); + return this; + } + + #endregion + + #region Implementation of IUpdatable interface + + public override IUpdate Update() + { + updateParameters = new StorageAccountUpdateParametersInner(); + return this; + } + + #endregion + + + #region Implementation of IResourceCreator interface + + public override async Task CreateResourceAsync(CancellationToken cancellationToken) + { + if (this.newGroup != null) + { + IResource rg = this.CreatedResource(newGroup.Key); + } + + createParameters.Location = RegionName; + createParameters.Tags = Inner.Tags; + var response = await client.CreateAsync(ResourceGroupName, this.name, createParameters, cancellationToken); + SetInner(response); + return this; + } + + public override async Task ApplyAsync(CancellationToken cancellationToken = default(CancellationToken), bool multiThreaded = true) + { + // overriding the base.ApplyAsync here since the parameter for update is different from the one for create. + var response = await client.UpdateAsync(ResourceGroupName, this.name, updateParameters, cancellationToken); + SetInner(response); + return this; + } + + #endregion + } +} diff --git a/src/ResourceManagement/Storage/Microsoft.Azure.Management.V2.Storage/StorageAccount/StorageAccountsImpl.cs b/src/ResourceManagement/Storage/Microsoft.Azure.Management.V2.Storage/StorageAccount/StorageAccountsImpl.cs new file mode 100644 index 000000000..d89d77218 --- /dev/null +++ b/src/ResourceManagement/Storage/Microsoft.Azure.Management.V2.Storage/StorageAccount/StorageAccountsImpl.cs @@ -0,0 +1,136 @@ +using System; +using System.Collections.Generic; +using System.Threading; +using System.Threading.Tasks; +using Microsoft.Azure.Management.Storage; +using Microsoft.Azure.Management.Storage.Models; +using Microsoft.Azure.Management.V2.Resource.Core; + +namespace Microsoft.Azure.Management.V2.Storage +{ + internal class StorageAccountsImpl : + GroupableResources< + IStorageAccount, + StorageAccountImpl, + Management.Storage.Models.StorageAccountInner, + IStorageAccountsOperations, + IStorageManager>, + IStorageAccounts + { + internal StorageAccountsImpl(IStorageAccountsOperations innerCollection, IStorageManager manager) : base(innerCollection, manager) + {} + + #region Actions + + public CheckNameAvailabilityResult CheckNameAvailability(string name) + { + return new CheckNameAvailabilityResult(InnerCollection.CheckNameAvailability(name)); + } + + #endregion + + + #region Implementation of ISupportsCreating interface + + public StorageAccount.Definition.IBlank Define(string name) + { + StorageAccountImpl wrapped = WrapModel(name); + wrapped.WithSku(SkuName.StandardGRS) + .WithGeneralPurposeAccountKind(); + return wrapped; + } + + #endregion + + #region Implementation of ISupportsListing interface + + public PagedList List() + { + IEnumerable storageAccounts = InnerCollection.List(); + var pagedList = new PagedList(storageAccounts); + return WrapList(pagedList); + } + + #endregion + + #region Implementation of ISupportsListingByGroup interface + + public PagedList ListByGroup(string groupName) + { + IEnumerable storageAccounts = InnerCollection.ListByResourceGroup(groupName); + var pagedList = new PagedList(storageAccounts); + return WrapList(pagedList); + } + + public Task> ListByGroupAsync(string resourceGroupName, CancellationToken cancellationToken = default(CancellationToken)) + { + throw new NotSupportedException(); + } + + #endregion + + #region Implementation of ISupportsGettingByGroup::GetByGroupAsync and override GroupableResources::GetByGroupAsync + + public override async Task GetByGroupAsync(string groupName, string name) + { + var storageAccount = await InnerCollection.GetPropertiesAsync(groupName, name); + return WrapModel(storageAccount); + } + + #endregion + + #region Implementation of ISupportsDeleting interface + + public void Delete(string id) + { + DeleteAsync(id).Wait(); + } + + public Task DeleteAsync(string id, CancellationToken cancellationToken = default(CancellationToken)) + { + return DeleteAsync(ResourceUtils.GroupFromResourceId(id), ResourceUtils.NameFromResourceId(id), cancellationToken); + } + + #endregion + + #region Implementation of ISupportsDeletingByGroup interface + + public void Delete(string resourceGroupName, string name) + { + DeleteAsync(resourceGroupName, name).Wait(); + } + + public Task DeleteAsync(string resourceGroupName, string name, CancellationToken cancellationToken = default(CancellationToken)) + { + return InnerCollection.DeleteAsync(resourceGroupName, name, cancellationToken); + } + + #endregion + + #region Implementation of CreatableWrappers::WrapModel abstract method + + protected override IStorageAccount WrapModel(StorageAccountInner inner) + { + return new StorageAccountImpl(inner.Name, + inner, + InnerCollection, + MyManager); + } + + #endregion + + #region Implementation of ReadableWrappers::WrapModel abstract method + + protected override StorageAccountImpl WrapModel(string name) + { + Management.Storage.Models.StorageAccountInner innerObject = new StorageAccountInner(); + return new StorageAccountImpl(name, + innerObject, + InnerCollection, + MyManager + ); + } + + #endregion + } +} diff --git a/src/ResourceManagement/Storage/Microsoft.Azure.Management.V2.Storage/StorageManager.cs b/src/ResourceManagement/Storage/Microsoft.Azure.Management.V2.Storage/StorageManager.cs new file mode 100644 index 000000000..fc04b8ca5 --- /dev/null +++ b/src/ResourceManagement/Storage/Microsoft.Azure.Management.V2.Storage/StorageManager.cs @@ -0,0 +1,142 @@ +using Microsoft.Azure.Management.Storage; +using Microsoft.Azure.Management.V2.Resource; +using Microsoft.Azure.Management.V2.Resource.Core; +using Microsoft.Rest; +using System; +using System.Linq; + +namespace Microsoft.Azure.Management.V2.Storage +{ + public class StorageManager : ManagerBase, IStorageManager + { + #region SDK clients + private StorageManagementClient storageManagementClient; + #endregion + + #region ctrs + + private StorageManager(RestClient restClient, string subscriptionId) : base(restClient, subscriptionId) + { + storageManagementClient = new StorageManagementClient(new Uri(restClient.BaseUri), + restClient.Credentials, + restClient.RootHttpHandler, + restClient.Handlers.ToArray()); + storageManagementClient.SubscriptionId = subscriptionId; + } + + #endregion + + #region StorageManager builder + + /// + /// Creates an instance of StorageManager that exposes storage resource management API entry points. + /// + /// the credentials to use + /// the subscription UUID + /// the StorageManager + public static IStorageManager Authenticate(ServiceClientCredentials serviceClientCredentials, string subscriptionId) + { + return new StorageManager(RestClient.Configure() + .withEnvironment(AzureEnvironment.AzureGlobalCloud) + .withCredentials(serviceClientCredentials) + .build(), subscriptionId); + } + + /// + /// Creates an instance of StorageManager that exposes storage resource management API entry points. + /// + /// the RestClient to be used for API calls. + /// the subscription UUID + /// the StorageManager + public static IStorageManager Authenticate(RestClient restClient, string subscriptionId) + { + return new StorageManager(restClient, subscriptionId); + } + + /// + /// Get a Configurable instance that can be used to create StorageManager with optional configuration. + /// + /// the instance allowing configurations + public static IConfigurable Configure() + { + return new Configurable(); + } + + #endregion + + + #region IConfigurable and it's implementation + + /// + /// The inteface allowing configurations to be set. + /// + public interface IConfigurable : IAzureConfigurable + { + IStorageManager Authenticate(ServiceClientCredentials serviceClientCredentials, string subscriptionId); + } + + protected class Configurable : + AzureConfigurable, + IConfigurable + { + /// + /// Creates an instance of StorageManager that exposes storage management API entry points. + /// + /// credentials the credentials to use + /// The subscription UUID + /// the interface exposing storage management API entry points that work in a subscription + public IStorageManager Authenticate(ServiceClientCredentials credentials, string subscriptionId) + { + return new StorageManager(BuildRestClient(credentials), subscriptionId); + } + } + + #endregion + + #region IStorageManager implementation + + private IStorageAccounts storageAccounts; + private IUsages usages; + + public IStorageAccounts StorageAccounts + { + get + { + if (storageAccounts == null) + { + storageAccounts = new StorageAccountsImpl(storageManagementClient.StorageAccounts, this); + } + return storageAccounts; + } + } + + public IUsages Usages { + get + { + if (usages == null) + { + usages = new UsagesImpl(storageManagementClient.Usage); + } + return usages; + } + } + + #endregion + } + + /// + /// Entry point to Azure storage resource management. + /// + public interface IStorageManager : IManagerBase + { + /// + /// Gets the storage resource management API entry point. + /// + IStorageAccounts StorageAccounts { get; } + + /// + /// Gets the storage resource usage management API entry point. + /// + IUsages Usages { get; } + } +} diff --git a/src/ResourceManagement/Storage/Microsoft.Azure.Management.V2.Storage/Usage/UsageImpl.cs b/src/ResourceManagement/Storage/Microsoft.Azure.Management.V2.Storage/Usage/UsageImpl.cs new file mode 100644 index 000000000..42d9190f9 --- /dev/null +++ b/src/ResourceManagement/Storage/Microsoft.Azure.Management.V2.Storage/Usage/UsageImpl.cs @@ -0,0 +1,43 @@ +using Microsoft.Azure.Management.Storage.Models; +using Microsoft.Azure.Management.V2.Resource.Core; + +namespace Microsoft.Azure.Management.V2.Storage +{ + internal class UsageImpl : Wrapper, IStorageUsage + { + internal UsageImpl(UsageInner innerObject) : base(innerObject) + {} + + public int? CurrentValue + { + get + { + return Inner.CurrentValue; + } + } + + public int? Limit + { + get + { + return Inner.Limit; + } + } + + public UsageName Name + { + get + { + return Inner.Name; + } + } + + public UsageUnit? Unit + { + get + { + return Inner.Unit; + } + } + } +} diff --git a/src/ResourceManagement/Storage/Microsoft.Azure.Management.V2.Storage/Usage/UsagesImpl.cs b/src/ResourceManagement/Storage/Microsoft.Azure.Management.V2.Storage/Usage/UsagesImpl.cs new file mode 100644 index 000000000..d63e4753a --- /dev/null +++ b/src/ResourceManagement/Storage/Microsoft.Azure.Management.V2.Storage/Usage/UsagesImpl.cs @@ -0,0 +1,35 @@ +using Microsoft.Azure.Management.Storage; +using Microsoft.Azure.Management.Storage.Models; +using Microsoft.Azure.Management.V2.Resource.Core; +using System.Collections.Generic; + +namespace Microsoft.Azure.Management.V2.Storage +{ + internal class UsagesImpl : ReadableWrappers, + IUsages + { + private IUsageOperations client; + + internal UsagesImpl(IUsageOperations client) + { + this.client = client; + } + + public PagedList List() + { + if (client.List() == null) + { + return PagedList.EmptyPagedList(); + } + + IEnumerable usages = client.List(); + var pagedList = new PagedList(usages); + return WrapList(pagedList); + } + + protected override IStorageUsage WrapModel(UsageInner inner) + { + return new UsageImpl(inner); + } + } +} diff --git a/src/ResourceManagement/Storage/Microsoft.Azure.Management.V2.Storage/project.json b/src/ResourceManagement/Storage/Microsoft.Azure.Management.V2.Storage/project.json new file mode 100644 index 000000000..cec9fc836 --- /dev/null +++ b/src/ResourceManagement/Storage/Microsoft.Azure.Management.V2.Storage/project.json @@ -0,0 +1,46 @@ +{ + "version": "0.0.1-prerelease", + "description": "TODOStorageV2Description.", + "authors": [ "Microsoft" ], + "packOptions": { + "summary": "TODOStorageV2Description.", + "iconUrl": "http://go.microsoft.com/fwlink/?LinkID=288890", + "tags": [ "Microsoft Azure Storage management", "storage accounts", "storage", "REST HTTP client", "azureofficial", "windowsazureofficial" ], + "projectUrl": "https://github.com/Azure/azure-sdk-for-net", + "licenseUrl": "https://raw.githubusercontent.com/Microsoft/dotnet/master/LICENSE", + "requireLicenseAcceptance": true + }, + "buildOptions": { + "delaySign": true, + "publicSign": false, + "keyFile": "../../../../tools/MSSharedLibKey.snk" + }, + "frameworks": { + "net45": { + "dependencies": { + "Microsoft.Rest.ClientRuntime.Azure": "[3.1.0,4.0.0)" + } + }, + "netstandard1.5": { + "imports": [ "dnxcore50" ], + "dependencies": { + "Microsoft.NETCore.Platforms": "1.0.1", + "System.Diagnostics.Tools": "4.0.1", + "System.Net.Http": "4.1.0", + "System.Runtime.Serialization.Primitives": "4.1.1", + "System.Threading.Tasks": "4.0.11", + "Microsoft.Rest.ClientRuntime.Azure": "[3.3.1,4.0.0)" + } + }, + "netstandard1.1": { + "imports": [ "dnxcore50" ], + "dependencies": { + "System.Runtime.Serialization.Primitives": "4.1.1", + "Microsoft.Rest.ClientRuntime.Azure": "[3.3.1,4.0.0)" + } + } + }, + "dependencies": { + "Microsoft.Azure.Management.V2.Resource": "0.0.1-prerelease" + } +} diff --git a/src/ResourceManagement/Storage/Storage.sln b/src/ResourceManagement/Storage/Storage.sln new file mode 100644 index 000000000..6838b430f --- /dev/null +++ b/src/ResourceManagement/Storage/Storage.sln @@ -0,0 +1,28 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio 14 +VisualStudioVersion = 14.0.25420.1 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{8BB2217D-0F2D-49D1-97BC-3654ED321F3B}") = "Microsoft.Azure.Management.V2.Storage", "Microsoft.Azure.Management.V2.Storage\Microsoft.Azure.Management.V2.Storage.xproj", "{552B2B51-6B0C-4439-8286-70637C8CA314}" +EndProject +Project("{8BB2217D-0F2D-49D1-97BC-3654ED321F3B}") = "Microsoft.Azure.Management.V2.Resource", "..\Resource\Microsoft.Azure.Management.V2.Resource\Microsoft.Azure.Management.V2.Resource.xproj", "{9D3D3952-32A3-4B58-88D4-7E41C84ACF7D}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {552B2B51-6B0C-4439-8286-70637C8CA314}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {552B2B51-6B0C-4439-8286-70637C8CA314}.Debug|Any CPU.Build.0 = Debug|Any CPU + {552B2B51-6B0C-4439-8286-70637C8CA314}.Release|Any CPU.ActiveCfg = Release|Any CPU + {552B2B51-6B0C-4439-8286-70637C8CA314}.Release|Any CPU.Build.0 = Release|Any CPU + {9D3D3952-32A3-4B58-88D4-7E41C84ACF7D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {9D3D3952-32A3-4B58-88D4-7E41C84ACF7D}.Debug|Any CPU.Build.0 = Debug|Any CPU + {9D3D3952-32A3-4B58-88D4-7E41C84ACF7D}.Release|Any CPU.ActiveCfg = Release|Any CPU + {9D3D3952-32A3-4B58-88D4-7E41C84ACF7D}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/src/ResourceManagement/Storage/global.json b/src/ResourceManagement/Storage/global.json new file mode 100644 index 000000000..514de4073 --- /dev/null +++ b/src/ResourceManagement/Storage/global.json @@ -0,0 +1,3 @@ +{ + "projects": [ "Microsoft.Azure.Management.V2.Storage", "../Resource" ] +} \ No newline at end of file diff --git a/src/ResourceManagement/gulpfile.js b/src/ResourceManagement/gulpfile.js new file mode 100644 index 000000000..6fe1aadaa --- /dev/null +++ b/src/ResourceManagement/gulpfile.js @@ -0,0 +1,151 @@ +var gulp = require('gulp'); +var args = require('yargs').argv; +var colors = require('colors'); +var exec = require('child_process').exec; +var fs = require('fs'); + +var mappings = { + 'compute': { + 'dir': 'Compute/Microsoft.Azure.Management.V2.Compute', + 'source': 'arm-compute/2016-03-30/swagger/compute.json', + 'package': 'Microsoft.Azure.Management.Compute', + 'args': '-FT 1' + }, + 'storage': { + 'dir': 'Storage/Microsoft.Azure.Management.V2.Storage', + 'source': 'arm-storage/2016-01-01/swagger/storage.json', + 'package': 'Microsoft.Azure.Management.Storage', + 'args': '-FT 2' + }, + 'resources': { + 'dir': 'Resource/Microsoft.Azure.Management.V2.Resource', + 'source': 'arm-resources/resources/2016-02-01/swagger/resources.json', + 'package': 'Microsoft.Azure.Management.ResourceManager' + }, + 'subscriptions': { + 'dir': 'Resource/Microsoft.Azure.Management.V2.Resource', + 'source': 'arm-resources/subscriptions/2015-11-01/swagger/subscriptions.json', + 'package': 'Microsoft.Azure.Management.ResourceManager' + }, + 'features': { + 'dir': 'Resource/Microsoft.Azure.Management.V2.Resource', + 'source': 'arm-resources/features/2015-12-01/swagger/features.json', + 'package': 'Microsoft.Azure.Management.ResourceManager' + }, + 'network': { + 'dir': 'Network/Microsoft.Azure.Management.V2.Network', + 'source': 'arm-network/2016-06-01/swagger/network.json', + 'package': 'Microsoft.Azure.Management.Network', + 'args': '-FT 1' + } +}; + +gulp.task('default', function() { + console.log("Usage: gulp codegen [--spec-root ] [--projects ] [--autorest ]\n"); + console.log("--spec-root"); + console.log("\tRoot location of Swagger API specs, default value is \"https://raw.githubusercontent.com/Azure/azure-rest-api-specs/master\""); + console.log("--projects\n\tComma separated projects to regenerate, default is all. List of available project names:"); + Object.keys(mappings).forEach(function(i) { + console.log('\t' + i.magenta); + }); + console.log("--autorest\n\tThe version of AutoRest. E.g. 0.15.0, or the location of AutoRest repo, E.g. E:\\repo\\autorest"); +}); + +var specRoot = args['spec-root'] || "https://raw.githubusercontent.com/Azure/azure-rest-api-specs/master"; +var projects = args['projects']; +var autoRestVersion = '0.17.0-Nightly20160706'; // default +if (args['autorest'] !== undefined) { + autoRestVersion = args['autorest']; +} +var autoRestExe; + +gulp.task('codegen', function(cb) { + var nugetSource = 'https://www.myget.org/F/autorest/api/v2'; + if (autoRestVersion.match(/[0-9]+\.[0-9]+\.[0-9]+.*/)) { + autoRestExe = 'packages\\autorest.' + autoRestVersion + '\\tools\\AutoRest.exe'; + exec('tools\\nuget.exe install autorest -Source ' + nugetSource + ' -Version ' + autoRestVersion + ' -o packages', function(err, stdout, stderr) { + console.log(stdout); + console.error(stderr); + handleInput(projects, cb); + }); + } else { + autoRestExe = autoRestVersion + "/" + GetAutoRestFolder() + "AutoRest.exe"; + if (process.platform !== 'win32') { + autoRestExe = "mono " + autoRestExe; + } + handleInput(projects, cb); + } + +}); + +var handleInput = function(projects, cb) { + if (projects === undefined) { + Object.keys(mappings).forEach(function(proj) { + codegen(proj, cb); + }); + } else { + projects.split(",").forEach(function(proj) { + proj = proj.replace(/\ /g, ''); + if (mappings[proj] === undefined) { + console.error('Invalid project name "' + proj + '"!'); + process.exit(1); + } + codegen(proj, cb); + }); + } +} + +var codegen = function(project, cb) { + deleteFolderRecursive(mappings[project].dir + '/Generated'); + console.log('Generating "' + project + '" from spec file ' + specRoot + '/' + mappings[project].source); + var generator = 'Azure.CSharp.Fluent'; + if (mappings[project].fluent !== null && mappings[project].fluent === false) { + generator = 'Azure.CSharp'; + } + var modeler = 'Swagger'; + if (mappings[project].composite !== null && mappings[project].composite === true) { + modeler = 'CompositeSwagger'; + } + cmd = autoRestExe + ' -Modeler ' + modeler + ' -CodeGenerator ' + generator + ' -Namespace ' + mappings[project].package + ' -Input ' + specRoot + '/' + mappings[project].source + + ' -outputDirectory ' + mappings[project].dir + '/Generated' + ' -Header MICROSOFT_MIT'; + if (mappings[project].args !== undefined) { + cmd = cmd + ' ' + mappings[project].args; + } + console.log('Command: ' + cmd); + exec(cmd, function(err, stdout, stderr) { + console.log(stdout); + console.error(stderr); + }); +}; + +var deleteFolderRecursive = function(path) { + if(fs.existsSync(path)) { + fs.readdirSync(path).forEach(function(file, index) { + var curPath = path + "/" + file; + if(fs.lstatSync(curPath).isDirectory()) { // recurse + deleteFolderRecursive(curPath); + } else { // delete file + fs.unlinkSync(curPath); + } + }); + fs.rmdirSync(path); + } +}; + + +var isWindows = (process.platform.lastIndexOf('win') === 0); +var isLinux= (process.platform.lastIndexOf('linux') === 0); +var isMac = (process.platform.lastIndexOf('darwin') === 0); + +function GetAutoRestFolder() { + if (isWindows) { + return "src/core/AutoRest/bin/Debug/net451/win7-x64/"; + } + if( isMac ) { + return "src/core/AutoRest/bin/Debug/net451/osx.10.11-x64/"; + } + if( isLinux ) { + return "src/core/AutoRest/bin/Debug/net451/ubuntu.14.04-x64/" + } + throw new Error("Unknown platform?"); +} diff --git a/src/ResourceManagement/package.json b/src/ResourceManagement/package.json new file mode 100644 index 000000000..f4c06a772 --- /dev/null +++ b/src/ResourceManagement/package.json @@ -0,0 +1,24 @@ +{ + "name": "azure-sdk-for-java-codegen", + "version": "0.0.1", + "description": "Tools for Azure SDK for Java build processes", + "repository": { + "type": "git", + "url": "git+https://github.com/Azure/azure-sdk-for-java.git" + }, + "keywords": [ + "azure" + ], + "author": "Microsoft Corporation", + "license": "MIT", + "bugs": { + "url": "https://github.com/Azure/azure-sdk-for-java/issues" + }, + "homepage": "https://github.com/Azure/azure-sdk-for-java#readme", + "devDependencies": { + "colors": "1.1.2", + "gulp": "^3.9.0", + "gulp-exec": "2.1.2", + "yargs": "3.29.0" + } +} diff --git a/test_on_linux.sh b/test_on_linux.sh new file mode 100755 index 000000000..d07824c72 --- /dev/null +++ b/test_on_linux.sh @@ -0,0 +1,23 @@ +#!/bin/sh + +set -e +base=`dirname {BASH_SOURCE[0]}` +rootdir="$( cd "$base" && pwd )" + +dotnet restore +armdir=$rootdir/src/ResourceManagement +for folder in $armdir/* +do + item=`basename $folder` + if [ -d $armdir/$item ] + then + if [ -d $armdir/$item/$item.Tests ] && [ -f $armdir/$item/$item.Tests/project.json ] + then + cd $armdir/$item/$item.Tests + dotnet restore + dotnet build --framework netcoreapp1.0 + dotnet test + cd $armdir + fi + fi +done diff --git a/tools/AzCopy/AzCopy.exe b/tools/AzCopy/AzCopy.exe new file mode 100644 index 0000000000000000000000000000000000000000..0247526a1c709447b146d1ca4c29eb674d1ec975 GIT binary patch literal 261792 zcmbrn37i~7*+1Uf-P3dKCbP4d+1-TfCM28A9GhbSHwln~Lk!3zVgks0B?29G2uCIp zqaq>(RKzQSN<3avR76F^`$9ZGR76FxAmV-Vdf>JEzu)Jnp6S_i^!@z)n@o4rQ&mqr z_0&^OJ$3f;PkWu^SeE7D_w2Kl^+~+>w?>}-`LPqhJwx~QSRYG2Fz=IH$2~Cbl#4gj zhqp`w7fqaV>F{~yTy|M-#qhZo3{PymY{0~23%EhvR?&#mJWt}}bQJ**uK&1_3Bhp6^H}bazr5>HQ;F16lNh@g{W$KG-HcYo%V{^h*or@5mpJg)Y=^UnX^Ess8Z)&rT7Z{K_ELm#;Pug5)n z`~_cs>~kmF@Q3?e^^;m-(X0P`-wl6wZQ_Ds$A3NX;;!zG|LgaEJN>A~e`j5D-P4!f zy6T&Af4y$o>wr49bqCbSj1NZuTOt}eKB4EPy+9- zkrn=icdhX&0PJLu74(G(17dL%WTgy<+$vvY`&A^d9k*V?y9se~?L;%luv5b@g}Mrz zup5jNj3WBhK5*V{Fm@e{$tw%r)`J%0mv?H}3DnD$`VvIl=E8>>Fg``%xWQ6{WxVQa z+X*I1494*AGr(B2y>ef9M;JZPTxC18+82-8?rL90LCs;v|FTFl0MIa;fTxsbC!5>M{BbR?xGm z*j-r^0i<_N9EOt24puTWZI_zNuvAW$Hgu;W@ow6*{OgXgX9;pDmXEd@P*3i}bCKF# zg~a8-9S~EuJlEbS?@=EO+H2rJSR-%V(2Z_+x!nM}-2ho<7zmkm%kyogDGmU@T?L2( zfLR3K4T;wPaah@CNMvw&Fly??j^|ipo%Jj;Gr3vdi#D{o724(;sWx(;* zAx3qse*|9shi%I%-3Y0K7!=(-N&iSdGnHWty$hlJ5}HdPG*xo;q%?*tb>i9Ei8lB! zvjcqz3rMLu^P2wYR(fD}_9RQLe==wcvq@CD4W0n~u2(jmzTgvrZ#HBYqD^Myi&?t? z{<;fuyZ`r_4p1AO-PcsLkUG8o0*Mqo9zrxg$)gbW{{bLbc z@{eN?UhV|X$9uIx>aMKQSgl;Y0H|0SydG(V3+)0qY{gWAo zx*%b_74$({i3o6Eb^WInBpdGe}4 zVxO!s`AjRTOevo*#m`9b3tm34_4O!TwV=%)4?u7aN>j>I79s5B>0#75rEDe3h=zBQ zR;s$qt2xP-f@bsCR_@ubpjpY=6ciQ7b{aHTCh|0@b#}DmppeVwT9|TzAow_GDSOpr z(Ig*iC+W_2w~};Al0GS0v7B6qVT@@{k^F-vKty$`soU?vBkjGqG@8MW+Zpuads-Rv zL}}7m_((hEjQosN%o!51kTe`m26v$xMz3qa7a*Z_DTSH&nMf!cdMW7f7bEVT{LGTd z99)rdMXB7-&O4vaxAM;K8~sCwDJ0Z#{zkaxgaRn-!L~M82kz1#gJoT49kkoJitS;& zJppyRWn#R`+EVg2Lek6cx3`y2fBtFkl*VQoYF1jky4_Jpnx`n8`D za0Ws&QSd>DPhD(Jd56MNhxW+?AAk!A#PMP8L7&y|tfoqZ^xntNR&8{8O9Z}@Pi>!Z zx^m3+50V(vLlOJP&xyHEb-n(vq@DB+MkEi&!FNlnTCaX4s3;`!Fnp*>gR|hxCv(Nk z-FB*eHarUp8NYy#e5R1KZNC@J`a!_z&w|TFD_({-Ov@RjN?(C0EpA?hvcPx+%~H<< z8s{tF+-Tg_(hXaHaaO!W#25J8l{?|gyS44;6Rs{55~kqyBer%{Bk^b>ST{^{6%zSG zb*xxG#;S61y`HKZrAc~JWyxf3-h@YAK{PS z_j~-l5`i-iQek}wus`8PHwdxWze8F%^3U5Bu;a$qb@Ot^s~G1dn8|8-me2Ih0cnuL z!%%|yxg_&EJj%3jQE#-1jg8Q21&@R5Dl7vEuNQm_DN4D?-pQV9QZ#RW*t$|`>ms=| zZ=TgdMSGcl0dZf5hq&snGriyCjKiD9BS*PzL+lR+< zf^jrZyEij6D+RTbhwXy_J=y^qSM{io_NFgZnnPF`Vp!jj{<*N7Mc47_(E`w65A?1?dm{ zKY^k>`CQ34QO68um5>=&Aez9fXXvbLahSEqo zqG|t*v}#rs*eSN+YOe@m2u4jlDSXRLu7;L60?hOyretrvw;1-ky(Oc%_T+oDM^ER| zd1Fv!C#_@^qiAXYZTQKyeoKmO%ZSan_Ixk~e@Xm)gWuEmdH7K-@M^)IfjfgA1t$u( z5o;lSl$|Ji5n^FXZM`0F%Klg3Mw>Bu$_db8q6ufbs8TXb=Mh%Lw?Rg=%UC7T+f)Ee zgcicWnV>I(X`+4#MDQUzl#kE0Y7Qeke>2Jxyo8TS@E8a##S^1H8D=>CW#SXILg@$> z#q=?wO%w|1jDI~np+51fCEx(saDGRC)E(-CilBOglF@9Dfgx$6Z``#9STX!Ijdcrf z>_R302^pF3*CIPb@fV<&9S-^TL6HIq>B!l8E7nwhq`Nhsfk?tgf{yOqL>=6RrfEau zk4t?>LlX5Vz3zTG{*5p=3{Qi*k&e1CVXZ;oiXtCE`gI_Ea=Gat+Imko2Bu&Vq@vHxvX`)a2S55+nV*1eaTj)n^Ap0S_+dM9kwId0i;j9Gj)tk} zUyf=CCh#b@m7csC)LGS@e+6FfZN;nhD_A2O6}f7SIMpSJz`qiqK4hd)JHSA$Zb85i z$?+OMWP&6dQ-uS{HWO$owG8S+Ye1P0F-e7tK$*LIHr5lY*_+i&vEjSp{W{M=9^G?K zIJUH9eF2>W+9&y6O_~0utIPqjFfG?>iAClF+k{51>X}KL$zf10)h1?|&UDbuwv$cv zVv`nZjX9*HV3o>Y{&{QRA=dEgK_=&<&{i$XCK~+^v^wExMMeIVE!BznpNP1sgz8jK z*{z*0qswm~XG~hbwH>Y|dU!L3bX`o#Yqt@$Jc)aJd-kiWnZK%)5SnA3%vZ)DOLnY4=KbXn!5*BTjbnYY%_M_bMZkQ`ZBM?cSU?u46jLzrrkKfC@h zlwJqW_4`1)%w*a1D)Mf2qY8|ZqGZ=!NhquzIMKgnnlw*z;=X*di8!wX!ff$eiTWx= zg>mGTG2zCy6I>6FOwF=0^A2%vB?jfXz!*8z1www-aBm3j|ab*$sNCLmIxY!IY)V8=8ti zBHoCIlO>N69n7bSCc|vaC`Qt+c$9<+*)nM~x>E55Hz92y(VOtm1!QVRpb#vYoli8O zCqc zuLlex&g~3~a3?I}Mk%Bz8RM{IOcR!jtPIvbA|^{&duU2Y7m}0y&16cU6Y9SKz%uO; z6vqPNE$Bq+&G>P=6#jh*j;runiu!i&rmkoFmGD0Y@5}Ly#s|oHBVhay&iIEY=N$iy z%u(CwD8dea{PbFOla!;0z8RrSVXCm zA1Kw|3S61`ZalNei7jZ?0R|?Sk>tcJa67@R;t60(5%wj(+-We|X{GUkw-cG?+S+2x^EeiELcD4fnN*Je&&iF->V$FvS@=cFe*my2ibWvrg`(2`xK>Ms9(;O$Nc z0h;rHCc$jY{g-jfu~R-Yw`Zq)n6Vj7QhSEAeVDU3mfkv4R>nUC&dNN)?jAc)hyFIu ztX+pTR*x-tO=Liz869FEfnmb)k$g|y!&Kb~>e9Nr6X|SPHeUUML~$xyTyPsf#mLf} zH~_#PS^?q!0Oo`O!~wwK5Fic!AZ;2$8~{{8fH>CM{tJW90A=xT?$aO-nK}d<&wC&eOtisVP(KjRwDg z!S>Xk*dsH69DjX%*5MmbmFqFRaxOBEr8ysCRuEW*c- zN5<<*_Oaz>CKq7zJU69;74_XFY|QQJp3F`SI$mGBm-uB)NyibkwP3_rKssnIz;v?a zBTpYn4&B&mplilv*^L|U9-119u-LUH1|fp>O5PTmx*_*Bw-v` z>CxE5CNwu}gd75c8GJxHdt0H>?B<&U9iO!%*0m*~!3CCj%{NO*icj+`blMG)DOP;* zT?CY*WaF4AwGc><*!9h~GO)oXS5HwD#B^9UqcxZd?RbsD%!ApWXwd&OVis4U<s5uHBOQqp|Kve3V5!y5>7O*e) zEV)eFljV$U_}`$yH*8_+4?c%Tex1ZH`$?3E?`jov($Rc19`=B+rj*+|&H^c;Z2uzE z{@&Sy*bQbAz~smTUtq59W~xDD=tsbF#2_g6A_H$@V21z^vK2zm)qJ~z@wo!)OH4<1 z@FimYG9IEWo9~cV!u&G~KUbp&Ch}JhPip`p#U1-|2*EEnI6_R%{&~B(q)8pR<#Le3k%%)fCvl~h`fr9~1WGa{~ zjlxzk%^s#{@L4?%C>f671~H5L1@|M8mNb+*t#n}&%Wl}flGRtCq@rlFBIlTjoSZNv z;qtMRVk=^=T#U&$+rNaZTI)-otEUKkiMDmA=&vKPk!t3>a{S+jp-o0oeCA(Fu^B0f zId0IPq&$YX=CucbZ}@{yS?I&9@8blN*oG zK?aC}<-(o?^nbQ>wq>8Iq}tX|*2qgjw{IPHg}OufFKq2e61^>Iy-BT(olK!prP870 zEXrp!iiXgsB~iK3n>bp{cNo(B8pmvUl*@COZZXW*|ES z^aJd7hLHwJBJWf)4tv{5)ppADZ-SVNC-z(LEx2{h3gWTu@@jifN2%?>(YbW**rI`L z8j*3Z%e4aw#zo$CdabEh=zwR#@Hra|5Q4xtfb$WamT>7^GyRFN9_?>Em$SQ>aw!UV zkdT2W;;WuT{R)_67$nh)igE zI~X|lSS!lZvc2}yEc9rzQx$HR`2k>}%)4P4{}7&P8pQkvj*30Bq`4IOdq+)_IGw?x zjInlNrSuPkv~5xtc<)B&j!{4(HZ{ya-F7gy{$m6;mms*jZ&aOMYGDk`i-irq1KZ)e^pW?BT6*h4^GTOgQ2+GQXQgPTz zw_L#3DYXjGu^-H~PD2?gD1-l0h$XXQ8DizIrEhL3{f6w&8OhN+Hmy+tYAHB=2FHl* zj4}&s$?Gn++6kr}2W50s z)opEJ_Ow(=biBc<+2Pq8}+!T4;0Ec^iD@{j9~er6Y_W{Uy8_%|Q&wGt9{sC77G zaJ6;jTqA0jW>-<$DcpV3Or0H!va14euraC$M7n+9Hz0wK9WBUj0pZw>Daz|)62bpB zG^b8v7{FyM0BGSpxT}OJ^nniNT0QJ;b1-_kkyw8Rgu(AkKD!9{10jDT1aWR630M7{l;s9Vg1c(EG6(K+z z0IUoF;s5~cPmziPWn`ZOIgRXv%NN=u{}pi93iV&9?tdVL|0=pUQ-@8H5Ur%nsZlJ#eUnEXt@G(z z=XexwXzhFv(|(#^!NWwK=J-$IbD>x=Ug_|+Bc}F~m}3fOT`2KJ2^xvdnrWqvgMebr z4TvN7Hy(vl<+)gWoPx7k@q7_@%a!cFkKDBv`qu+dX@mc2!FK~a%T89# zycnDrkhwJJ6x{&EX~rY2qV2Lh5Wn z{kN)nCf&EGJ5Tr9==R@>=l=Bfi6@8pMb`=U(_di15P9DMM9bzPQ+l~-K>`YNzj=Qd zg)({AYR!jj5UIIutknkp2_7hNX?42dVEbq#-irId58J;LPL5iBh=x-gP(SUyJ|T-N zSp{~WIknrTMrw^@)|>WvI`WEWL*-|v@6cqK)260B~#w5C?5!jCpwG0rREDAS~l$la4~(k%u3!s1VZ59K|upuPr2eE={Yy%9v>b7au_ z@v!~R#Q zmj5l#QRED4#-D>n#{YUJAnV`X3CKAEH@*~^ilHyb_vDi$Nd`y1M2Exw0?432J|H%C zfjj5D+w!SW5|92A9{xuV14pRF9Jh3G+8g!KDH;D15@vqXmR!TRWZq0N%8 z-U&Di*+`j-*k`MSO<*bju6@drnO@?o)34=We{IU+h2`;D#pu^!$mr%a6c}YmN(pk4 z=u>l(2|lb;5?gZJ$!r?7S3+&CyesowmUXT*cc+y=JB1d3`;}JW8*tkw&UH6)N=Rkz zbcDhd7hBX6C24F?yKw~Sv6}TCK#kN7Ky7Wa8!!$D`aVH(38K;bK8gSeF$4gQJW#l+ zo<9t4=))k*p9jC=&u1i9W|F8<@(+Zc>SqDogJ)G|3>^W_LU^$KAy+vVo)LI5m5RRz z?}9rk?~e6i&W)5r=okQ)2{7jS4on@!Ao&sEJs*>0n0h63wS>PI9#4hP^?VOXV8w|t zxvHfpN@+~%!D?=(!zfr-^GuaInZ^l^V-&TadWFywHe-N128W@o1+`;65Bxq3Kd4Um zqn=*{7b*mLiVZ(_5i+aROwNA*qt(EZ{WKEcg@|CL?E1Cga(&3P-U~eAf`>(10mW*u zHbg+fqh5Xm#ja}U-P&{gD!h)&T5l|EL>5bCIYj}MHp(oIR96L+z=(j=@X{)j>XkaJ zERy-5{}jdXN0G4OL|NFzx~-eu*6v#ufN0aVD&gT+EW{A8z1avic?+wXOW%Szez{mib0qD1FU3wiT<-zT#K9pWiADjKSy1wwr-Hr4V*_UfV!37gCi(1*cRfsN#*aArg>@C%A<$uOzpm44EdBFH7cMMmA3yX zBQp218hNrUI5<2PpfnXTPkd)bJJ zvzXyY0qxUlE8A@)FmHiA&1N5L;uqV(-AbYI%28AI3@gFTH=M^r`_0?+Ly$$r6B;^3 zKHqFnj-J>527G4Qs?JuKxY2Y{Fvue37!L(a=zjAP+b}h$4R3R%GCXlFybzf$p{jK{ z`8mj5mKptVxcn7(RDUE&u6(ZTuY`AG;wwmGA2+!9#hauDW(X#m$U_W95`?%=hU&GioF=^FD&c=YJi!mR}yO zzWCpQ*LItyGL}lsgN(4;c))tu2=OAK10va+=gS0TzpOmK@sj zaJXxjgItX_yle0>M=z4L7kr1gUB>h4kF{{&CuQNiTMK_Wn02(RSa6i=G_nMnJHvGxj4e5bOro3;1S*Msu$uBpqepxF zqw6%+uOL?)3&^lva!r;>yPzAoL{|4C`}?Cl-M|92aw||%vg8<>{S*J}1NFT?FAHd% z4w~#z{RkAkc@EvWd!PiG+OGPM48D-T^`q##NSsw<(%dA8=pn`E$jQ=Q#?$u$NpzNWp!#??x)eU{z6&CHky^BSAs;lhb-yyi2;BFKz zcs@{;59zamE-K|JinT|_nvo(Cs^fZ$|2O!$YUg})#Srw*l_z8-Jj%-1hRa^59Cw4T!>O57$e z!HPt9#{U_l!EU^t;OY6D0;E;!CH=s(K*>x3v5)1>X@M^!C8y$1%Ssj2Uj+9yStBaI z;9N(V0_4sSQD2k!^35#rsU2G=NIaE|Nqw)r0V#J9B=9D4LY&LPIDcWBjf_K(z?Q4!QXeglW*$6y+3GlDrU6g42*qfU!xY zNfF9poa15CuGxo~*27Hy#!Sy3VFc~qLkc>62Py?8D%v@3s&56BZXCa9ezcwQT;!a? zs^uu!NAP0id?s_IfaX)_DeubZIbRXx{7frnf_CsBIaiiNa;+@@hqi`E{@zMLkiaDg zI7C&X9Ga+Kg*WlfO4 zMG(e6qSRQ{0Z8@hvZLg zwel8jT^%O*S1SoYJNS?!w*Lo&RLR+E!nprtT#;dd1THdc=TlSO7E*N1$kI#TtAZ21W0G8+vsW3jav1JELxosh?b6?3xM_nxoaAiwDBeTx zK&<31?AO^3KMn}ko_DsEKqBOA3VCpY2CDQ^&{3jjJTB*W!SevkCRebRXp3lDK&!Yc zQ1np3P40DB3F1{h!dC3xUSWCUeP%&Rz=(n484^CD`T z7;zP8B8t>iqzOfOsUr1CTs(vo$2M+*KNwf#>kTSvOnf;_BG0>alSR$DnpcnJp~$PH z2wh)Ch#vm$D)+SFLl(VE0%y|=0{<5P)VgqLYeoq2{NDpsu44_1y{XCQS-{d>kN_}^ z-rb$@wo~g~2GW!D0M7tRX{ZMp@wjPg3m}*XG_vA_YqTOO$>4H?PG-5%Z02Q^?jrJ# z)kcr&&ybbMRtRigwGR zMrgC#8v0qh3^i^Ox}Kce&M+gyOjKK}@z5AArW7ak{v5TSFt$Vjp-BY4B8-UsLX!vO zANITPNrVX$SIDVgR6#B*Yy~*}zB{Ip*C!1g9d;4eb?8UCi6o!Pw?B2YTlR>zWq&H>fpi1V}?WvBx1w4 z1RD^WvT;iLr3|9>zJMG;UaH$UvX9CT#7j_%CcL3ZiJqGt3_`MbIS$Ol0 zczz21bMPL72O6y7Zy8|x5l%cf7sWc-=Uf!@nw*Pbi7}*qGpeL1m5FmvQcYHaUOg9; zM(vj06pkt}eX|{=LpTi0fv>DOQSLIPK;O%Ak{HAGW&5zx3hO-`w*5k9>mW)(+2e|* zSKkU|XN@Pg5*{4LJvGw3)*zs*exJQn!~|nkRlkY|DhGDh@v|Hm*0N6uip=F|M(Qx3 zFVcQnP3Cl80mpu;J^3`+G_Pav3Yp5Ph$j3t8w4%8n$utDn;vi{LZM$HiSrpLSdN`; z+jNDv(j%5+0arh`!P!iSD~Y5Oxe6M6JNnp=i9VMM!?g--fJr>Bfcp}pJXj<711Q3( zT6Z#)=4DQp2B^=buE&iAhD{6M&Chg$Me;7pP||5#IKfO7>g9N-0hga4793s|09Dk4 zgZ|{0_+%q((Fz^y>0tapQ65WJtMp_25w?AcS(Bfbbj7~hQ*HkV76nD(8%L8tL78)j z{|m2~OPoFz$)Nu@7s)xL=Ng*r?Uzt&&0TNLajFMtKf`%QQ7#RZxlbpM8s{J`L--E1 zYY5$(^x4KYrxnEkKqCZ*0{}F6jUf&Injt_Op*eyvhRglL*0E?W{${j7xyJxDNfSBB zeoHTMsev4#DLY8B)|AQLfp~LI+j%|Ei+ks*;ToFbzm(~*2)kwCNIp))!`}(m&Knpr z3EuB~4N1DWHKm%R6u5pjUkQH(Up=l5l`b=>yBL{876%G+V+arj05^pIaRBhz5Fn20 zaDyNZ`eZ0>*f#f76gJ_fHPb$m%j?1<;y@WW2MHV1>@|0TR}jIqc(k^iw{VmU4sAPohckiVEeOy^P!hQL;KgWNUz4Dd^n8x0l-lU^O)skUb;9) zfHSePm5l^}y>AS&5y#DpdjR5URGX_4`(!|Vde(himi2t_!jumO2X+Hh$Jx=9J#N(; z3Oye~mVM5T>ZEV%(NdX>*Lm*g=SAO&Z2sGMQQ9C_JJsE3k<**D#|2-W7hQyxIWIbM z;%2ZV5-TFdi6kO4bFWJbP6;)&`FQY zm1$3p#BpuelO~KoW!|mdi57r50I+@om5<63Oao!H~$g&SOBs@ub1=**Ru}imV*vWb@`B%~^nV z{~ykDVm}M+Ou#e*Z!YSa-+7Mn1nQ4ZvCCEZ#u+KFB_vourpsi*cL^*>s>*UiqMsM0WttB$#BT7_gr;!q zeu-7e?7f9KX&RG2W{JLN`>z7sl}lTBv79Ey@m7xCBXB@-T!N_dYmVPxh~3~za~w1| zPA)VFOl-;SE7&-T?65?OamTfA@v2|hKjDHt{y_`MFR5OhJ!3&S&Ym5KutJN!*hd|A zXpF_eSVL=IKw|*6#b24(lMtLCn*+Y!#uIyXcy4T^Wgpr)Hzs*s7@#1B4Okf!-Q)RrfUj|Knmp&XTyxxsl+)=N*vCHQP_AkjDiM6asFc% zX%-^Qe>)p?h|S#ru*7acD*}(17I|?meAo^i0amty@8fOS0iD_oUI*^59sB^0CLeJB zi0&V%`^R)YN;j8XUX9q4{e(3SS_F0`WS_Wb@3*A?4`4liH{%C3S>wOP1JW;Cx z@&LJZsoPH1Q65jSoXl%a)drxPqy?jHbu=F)IRnBtY~Y*RWSCev+-{Ke>LG}z93jOx zJxdR_g?XZsHT_^K{bG~eu%9h{OVBmZC}abJdY5Z=(6 z)<$imEjUa@S?|mO9_k6+qrqQ9Pp~u{dZG$k=;K0J#E=!5f(U?5b`i`v3b|p==AZh0U6QN@}7vYPv^C4uxc87Lunw7RFr^yzDcFx9R+V>HN zdkW&3zUt=)VH^D!-lmPxscrPFpqOp+7l1VRfcsZ;|B`OD%bO8{?b5TZMgQ|c;RVxk z;4SBM*()872R8A_dkF0L41VL!0}yRfGBcL~Foyu`z*t0*Z6HR@>nX!%&1eLS)S#`{ zzDz*U(fYC*j3Y*r#@6To6;<;$OkRg>$TWW|nDj|-@CHDm^Xe}{f~}$mk7pj8j&i5`3G-gj6cBz z0AInI0Eiref0{v!_EQuKw$WjPkQrJs$~iy=M(-(UN^C9Z|1x=B^Ur)0n}5;QUlsT_ zz8a*chBaeS$+K>DgQdg0v?YzMAqw5ylr#$^N@+t=_|VsUMi5aZR0H-k|4uh*9D^w> zR`mV?5(7K%%`7>SPL^@!rm0wtHB6;dQ3sK$3y6|e7x0aHnAFjH3O?8%l%i6>+shk* zj8KjL68R$4rLC(sPN|s9iI4N&8$o1KB z--JxbuErRd!X))5S*0Wc9Qrx@A`KEbJH4IXT9SOM_=RLB5k^@tPLQFAahm@G6ac=o zNBA=Iklx7fFAd@geFj@vo6hFH87MfbCm?-nBt;7?&&UxiFO@jhs>D^K$<)YO$mJHg zPTn-9n5W&4SA<8+XN49%i_1?ljm~a}f7$vrw$2j#N8)C;h{K2|B+hP#phz!tA8$wS zcS9T64a(WdpYeJG5f8a^g3MN_2yTU76_?_wK&c3r1R^^%LuX}yDh3nzjg(W-PEyY% zG0aX;9z?bB?teb}ERLtL>w7bM7;G30*TB+{XU=ULgf~nyne&D2k-u%wzx+k|H`YT( z|HiqeQ`-zGeb z^lkmfhW!=#Hq#wxPvkV&6M5xr?P-z2*##v0HGE-mY8~EX%uBj*&KhX2I^UWxS>Rb) z9>O}GnPIsNoV-H3g2b6P5#c&l4kpdf%*u6uSR}KmF=%)&`VpiYY^$P{j~_z#)>dl7gE=I~mdM0G}@G@6~*j->UsBi1&jD5nPGDF4hZ-PT?6g49HHvpe+N)u^TRQKIsQB0$tHE0B8P*mtEf*HWM)ndF=3-g|7bvQ z`1Hewk&@@q=#C^;VRB)>OdFVqsXLvPn5IW8xI1n~etCDacgG%eq<6ea9Ami5tK7ag zp*t;Isinc6~~$@(%Txy%_!+ROO_kBc0M2=#XZ^)^#(9tU^v z2_XL{6hp^S7olD^fZxW}a?r2P*0S+7wicbRwUWj99#jZztpp%V7Z13TbbIPXTXvf% zb!X|$sJol)9No0X-Uci>PWmm{DePR>rp$x=Mr)jOFM{~H7UFCXik-jZG(@o@sT7% z(VoAF!3Y3+7MHIxoHPDqoTQPW#O5^E%ISyXOSDX;!0S=qm9p^bzY7v%uw$u)Lbm3W zNY#gVEfxwITKI_#L=kr4V6^ZRHlYdviHSD12xDRP2qS;_pBcFZ^G#NS7ovWGccIm- z#583`$lIZdG~^Ws8J0`tlo6~H@t-yNl4SKje0K?S#j{Gpx^h$`M^70Kt8DowcL4mC zwCUn98qMTRD$3S=?tbCf>F~h2APU|GVJa>iGAY>YYZGHG(g?JjMI)ozXB*f(Ke zVDXgw{yR};kKx=_INtp_*wBsNBlvmveE@w0WX!r5kH6rJsVhD30(WQ+JP8{ssJfO|&Rg?OWLut$G3LIevwkz{=AkH)eS??%e{ z?TCn-?b?@F6{Ks;y&X#Yq5y|R+azS>di4(gfqy3+SZOQyAE9H9Eo}+=YW%z5$Ly64 zBOl**Q82s&V+Y`l_=q?>;eV7dn18~W4?50Z{(Y?lv|ii=Lwh3Gr>k*Jll#ETeBXtL z|6<0MO{X}ia1`V%Tk^(+O35*=elkf(){<`hGQi9I$+4Ag9a~(nxf>s3N{+gK_;na1 z2=m6~cEt4R7cipW5m#S%y{=eCt_ot0hdG#zwXsu)E`DuHf?$Vzj3wY|r8xFk8+#!z zOf#>H{Ge`dGZ5>CxjM$sk$UE#=_dd*H;3lEX)=V{`TWyJ8uEu`)BMGeDV8ypx)EW# zSs6R@Sr@LzDr`fpTbzwB*i#=zXmy_B`S-x#e*%yCC-G?4P(95I%$XC~9%m!Hu|2RI zL~M@%yp8Qar_S?y0Iij_2QK<^n|#210Nr!cjlFVibFRAQ(LJp01L>YmH*4bEz@l?O zk3)}~L)sh6L&mJ5gZPY-DvReq3w;PNu<6Vie;*z&J%pA9QE6YVwBX}_fCOiuSj`1+ zp_e0d+^_027ZT8()vY;w;l7I*kQ|-lT?FLK5k_qAiRo2AP--bD;-@F`8)ZZPk|e#mHouR(OYBT^$WD{6q&9g!bWgybOi`{BwYA5Iu3 zi}i(h2jFj)K7w>@SY`@HM+OvAT-Dl6dL+3b7$b$O&>9n_wGm(h9+zzI8zD02=2-}_ z?+4@p!zwhGPWqC}%H?7cM{aH66g=hwT6xG#w1OmDsEwa?PQr>VdDG^Zy=n8z%#yP{ zeB(%~I-33P!G5C9(0;lc_KB%GoC<~%?tK9v4f0~eayr$mHNAw12Te_*#0VrvYr4X~ zNKN2kTR@uFhzzhkTLm>=*qjdp42kkU2NU;$otkue4H2eh)u2f21{)9NhyPRcdVCIeydA7WS0Z;2MCZ}Jj|R?P z#I9iVb=Vac-&^Ol^#$w-%%dj&1U|W>h41iJZfh0X^@x^*83X-QD5zz`_kMQ0`4Ws-pOyp>qt#UTX z1zW|aSkS=}PB1nzAm2iFdB6kA^}U3SZRAmpfQ^K=9VG^3hu{0n`xS*#@-?YQwf{Y0EhB%6b8nQBs~_xR*;Bajb01e!H9_ zukI8-a_9x0fuzg#4%O*jNhTok$BI{N0>mSu<_ldBllx7?bnh=ZE43#Cs! zOXP1RE}Y=*bJe*L&PWKnZp6Ee(=?w2IhbdMnh@gH)0rV@ z{1PHM6U-Rbo01z}2B3U{T|K~_I6f7A9=O(RPn_BE$qksaJ#I&NV07i}TEZDT1-0l0 zKmkwjlu{WZL7wyc3huQQYbss0xss^*M)645Ta0A^D`ZU4h!Ql&hf5c{pnfK8JT{y3*=Z4&LZlb z8#zllgMG_{UL$Vqk+kiy`t{`gm3pqp^rN)la zb8UO#e(+XDc`{P-w@Qo0JUaB>*`S$!cKz!peDg;%D2I8{{>DFn!sd_Z*Td?M(;4m- zd@WF5(*r;}CxWlHjz#A?z4TaX8r$^H!kD@ zV(#|jPQvYYaY*tD5F|q)aR7kX83l*~fM10GaRBh^5Fic!9wPwnz2=P#Nc?~c?lO8K za;dLn8^9(587s)B4Q zM1BMD37$pZ$tK{bV`zcFjMF3r9HV748wY4V3~(F`oP&Qc`b_@Wjpc~lcmjmi(4Euc zlXl}&%EkbdebBgjl+JH~MB|)`JmgzuOsTMvP+Qz=Q2!LD$CjzbB*KS9ye8oxRA?Ze z`4k@GZ*3Fy!&a;Yg9bNmn7erckG6pTNu?2lETZ)vq=?N8zP;ZVK(TLnLB$OAO&_J1 zF*M(WQuq804rM@L{%vi>X)RG#JG@uf+RS>o3k0&BNG<9~ScZD~2*5G*^t9c;Di&}b zjHi!DepCtp3mX(OX3e+4Ox6tcCF?NXmoVSEO}<2gd<84={pf!4Jp>VP@hGurz62~3 zF=xIMcU)A;U@fvZJMz7R`F_mgOGL<5up(c~y~mYTcy$nXbt%%aZHzMmmB1BnqHR2c zS{>1VR-=$u9eHEwC11bCtGH><{2H=jYuj6 za!&%}O8ivdMgKeCG44L-(9seeP4zaUg1TU`>0o@aH#r8KC@8g&Gyl=Wk)!tegm!ib zCRjQc#UrGC7nE&%F3KiMn#_%KU?k&ssSe-498^fh;eLhVK1hZxMyLWx!4Tc4CgEf! z-(yunfHrqQNZm5p!4qY61vBhY(rIx!3N(r72UZ#fOsvH4@R^W22h~hRb0r=a;!{2_ zx-f#$V2!SL3Ty4f)*APrs9zuL5TXr$>(7d_SxnzN_ci-0&#a>BHp!w?@^c> z@1{-u!*CS`MK3#E5fE|WZVt!C3Ylk%AyNN6Vl}be1ViExIC+A@lWzf!g9Z%O@;r3) zGlbV_xJ0cXEhD_`sujeuGU$0buBD_s#e3Z5)!O%FEt`%L_Z&^f$)k77uLBv-qg1$oYrXnQNG-Hho2U5}7*8CrmorBs~IZsJkJ7SU<^SWG)av-01C zY}GR43885^!*2*kzyBwOqb(p?;s$#WI!z0qMNQA5=>M3!7BgZ0!P2GfKUjMDu$WZ7 z&7Y9{9grshp$cQj7|d+DLC9EN2pgT%f<+nIi9{532U;pNCS-`BB}CB@rf3D$fmRqH z7Qga@pT*6LmVsOKI{6fcN}q$K>A!p*X0|e&OIJJ7&hm{GZ2x6aO_AO}zsbq3=oN0T zayN_0`&8H5A9UrYD`^|eNBcOG`b4&Cco`9AGkcA`Z+mOZ3%O(b#fT4Go3{rYe;>(m zt21y5V6^nSH*aodOiF?3Q#3In!<0^T3Vh$R$yu_<$vC12UtFE3j?+sU1aKNwQ`*BU z;&Cm^<5<+S%3rhv2xO+^p^a=BsfeUDQVO|`bvbNPlnR=rnhmg}pVhAeoleu3ICbC? z2dBKo!C7~4a7t<%oB|dHr!;iHRR*wpuXKrUQQ(9pW!0jgwlD%nC91L$Otu)OG5MwW z3}&}Q=Ms(St#s}s3BL2JL~*kd&@LFu;V!awfTzZ=pnlU3V|0o7i}rwS6(p%r>?lPH ztO84vF&9ev8JgJ|y^yw;5;>+YZPHQGL=Y_*&Y7Z6O5-qXiOm}{l4P=R6DHx7EyB^V zTTv*Zlau}v!X!l{YBi}{xU`RJA=Bt$!4p+LqnGI$nX}G~F6y<5n^kk+%{s^K14A5R zwT5O;gv>`=oN!dw5GKvV*!4?{aCn-aGxo?Ly>=od-|0E?#ZAGuIVzJk`3lAgiNz0WJL;n3-59qiQ5ORsBE}bP32V~!~t_BTPf(D&nth%L4EYRAap zp^sIYxcdNexWVJyoF)1>D8!Y3Mc(Qg0Yq;F1jbefFFo-vg^q1So*a`Ut#;A>ApOTj zE`1DPp!}~P<>ENn=Ee%IX7^*Rn=bY#3F}6b>CaS7bS5(C z)rUSE&k(L;Zx#2qZR(F_%EUVF5<^v z4f*Y)U-Ih`|Ftc@E&eyP{Eql)fvpAr8*=%2&ztoSh|GW6!e-`nzci@(3+?-BnT`h~wU#J{rTpDF&s zTmHQG*U>-B{CdTIV#{9;|7rANDcNiGiGOn|{Vefsr(ftTivM-=V_M8>mc+lC{(k!V z#eXmTuqnLe0R8n}Lc*GZbm}B`L);A#6Z{HcwgHfu4gksN0I)nA018+KfD+aLponz< zC}SM}3Rwq$Qq}>Wm~{YHuN?qZYzKgn*8!mDbpR-P9RLbn2Y}Mn0id{b04Q%A018wG zfD+XKph$H9C_^0p3Rwq$Qq=)qGwT4bopb;wI2`~=P6vRZ(*dCDbO0zk0^rQcY3dKf^V;hR;$H*13LIebGEHpKzJ0U@Xe~`n>EZgE0%B8C*Nca->go)S&MwL^7v+*@y)8@n>EBYD~4~@2j8p)zS#)) zCXe|hYxyQe`6eUzCjYP}?xsy#8u5RPhURk&jv*T6UK7@Z=yI-MA5ec9P~58T1%HF1 zkRD%*kbGM9yX3Ivu9O`IY76(TA$Y|vkvvtB<*x3u*}-1vym?y(7FKUe7Hz-0O zSMhsu{%`5z-8|ofn#m_-n~g{%94ky=O_$wMC5?E$L%iCzCwqExQ$@_>&DKv!<&&YI z5upv&55 z!jJ3Gm?y(60s2RH9=}7u=jY?cc}o8A9^F&$-iF`^6LOWsu!P71Zpx!vjOEPbLNklm z$wlg}x^T}%L}9{%V1gZG0@l&RrsF){A?uVBp3}q(^@)73ruXawXX_HfTm{WI{lh!|S zs{fuc2GRB(LsEY)9>E^~0^mmkysZtuJbIf&J(Wv(dsINV{-8|SD8-$41U;i^3N!LE zir9!k`Q4MBA;l{s9y)@PJJ&Op#E{Phm*MWYzTi)AT>%RjA1T3Qcq;WtAqRO0$6o`E z_e42fETqx_ns%lzv$CjnrVm-n6w)bNnD}S7O1hzweI) z>gJf_Ymm1lR}TpCRM{f$$kZ9ux?lA>`Wv;WLCh zBoIDB$ae(7X9)SOK==$H-xCO*A>``<;WLChED%0J$kznIX9)S0K==$HKM)9?A>@Yw z;WLE%NFaQMkVgf=r-4ZC|ne*;17y%6feR1vz@bOZQM5(yHt zRY$H^t>RMs7Et!9NgM-|Oa_W&6L&@=uHK`|J&(H9;n`=NZ;QNhocIA~svV-kX>@3g zm>3Wb_5|X?HW?hm^bxB9efA1KLVcEP#lK1|gQ1+m+lG@rjr=UYMK^{uVFieqKc+A-v$n8=xxyeMOO$twZjz6CZLIaeM{|n)ob|r zmL@RXh@Mc3P3<`U6Tsm=!-tC*LLZtJGp?Th8NAh^Q#AfPjPh4LoG>1ahI31uhm(WQ z&QSZ+WGWmW`@bOqkG2o5e)^U8lKwBv8yzS@lm5@l`{(BU3%v0S)XiX?+@~hDsg+NQ z04_n$K!BBZnWJ|2El8OkmnaXtgbI*Kyy!oR=N0q^s2gavi9e$Un0N+{;3rJIL(M~; z=kco8%IRQViT^7UP>VoaO8L14k^$|H??a?Y?&zWY?kMKBW`s3St*B!D9MY*`mM{58 zxG-L?!%~#Yqq;?{O%+6w`ZKN69Q%tks=brhS!iUbdwQVCB0NAPta44W?_7 z5d7NnwdqAR3~HfU5%JAD;eJjdUeo3d&Uv!SPDColv{A{RYkwK&CVpxCj2P}s?A8pn zwlm;PMC|{IN)7HDw5=y0%lvanqe-WK4dxB8jX(Fas-8c6&u%xQyQD$lI6#=(mVZQC%gS)$NTGBph&uC z*3(ctw-p~KW&lOje_jg&VPTu)_)6Mr6>U}MlEN90KMBzzZB@c?=A!dsD-g5P00b6- zbdZieb@ZwDX!m(FbI;y+NE^LpPg<)}LqnI@jA(1464k7wp-Z?llxUS{MjZ;GolY7$ zhr#g|l35-h>2OoWI5J{x$Lk2jov9*;_+GRPbnYH~nNmJiLiu@5TE zq^FL8K87j88iEVe!wvzi0qtku!afYj1zb1)#2F>HaD_{Ur<7UwMe7dN!{DVz!@u@F*D`Lbo7TZTPd1j-=v(w(n&XyG&-B5 zvu^v#l~Wuhh89_;HMDKQB7tEe`YoFCC)-4G-onJtI4 z{pr6HCD@bP(p>|;G>V&#DaGdvVU?;9Q#%V}|lD_7Hrjj*nuZw6 zcO+qM(>F96{2Hts=?s(lcI0Z(SE9^AH9gtRiMFAY>UKDQ3a>Gn9)J%=n$wmu9n8Ca z7&*ukHD?Ty?T}rm2g%r$~f+F@&%k+|2ZD- zB4wi`J)=NtyKKmr<`TFkmu0lqJ{D+oibt$B#@mCV+5AEnwqb}q^y(=JIgsmFtRAap zjjy12tw z=*uDj_8!v>Zn1rfj_wk@e?7~U@#NYw%)iNfDIVSxu)4oIP#$dWI2rKsOxv;J#K53Q z#(`c|EX5&xz>UCz2~O-UiJW+Ji?Y8Yax9WNPO!fuas<-FjuW%LSeHU5J(XlU5LzTAcl8qi&BP`?4))&>n*DO{GJ2xX!{^BCTVC{0RWGvZ&`fb&tJZ&&{hPv+}a zR`ot_y$ah)MRx$bPRX2D8qo;U-qbF)>JUdo=in~rlQxVyK5Di3q z1A|dt)U5WJLco6IXBEj4xnB?ZQ1h}sDTl@v?oYa+#SJPVU##Hhhy*8V)joxd*V?2c zX!o1xp`p-<1I_TT5Fic!4i5q10AO_p5C;HjLV!3xJ9XYiQ0KeaJjT|tg`gfB51@tp z1L^j~h)n^u7+xNnmXGwxq1nu2#puIEtI%@5R^x;RY>g&#hE@mIag@o;O5tRa;?skH zPBEpQS!WhbN*C_2E|T_7z)T|6N5*lGSM=^ABAAJM86GKn^O+LP$cv`O%IA?#&^XR3 zx<2pL#`Z}mqa%|tTM{iFuJ;?M#m5nFWd^=u_f;qXJq_LqtLh6@h<~)*qg!OPx!_1SrSRV2iT63OQv)m z1kbeCyxULyc=W&hO=LeEr}RC@7Q%3e5SjMEa4>W33M(Ye9oP;K)|`F!+K_&fvlU=IRB|%(#}wFX2`D zDVF8Bri$om%(5I1>l)giHE)%!AMdyI9zo`Eyp*)w2|8ZeZg0B1bR~OGr+ve~fw!gQ zib1~{ti|`{D`$I2Tn#w@LU7##UwYwsaoG{7ND^oyW`lxEu^Z8LORaPmRrQ;+;ovYF zK_^QaviRQYAkZ#KdkHrLErCYQy~}n%9A5biN_Y5sGJ{+#{2|F(Q8BGcN|4InQQNq_o@DB&@%B|B$a?*9ukxdbZIUQdP6Mq{#fW#EcEE^IK0=zLcb6T zMN^2OcV#T};#la1VxiB(LPuuA<+dRfx+@m?p;+isvCxBN#^rW(Ec8pU&_BmQNAhua zH^f43j)mSI3&jVdV(MZ|EOc8e^zK;bGqKPk3vs#ajD(B4^baVKJ- zx5Pppj)l%I#^F6W7J6+g^qyGgR4jC9DK58DVxd>WLLZHV4)(|4Jvtdm2#zL=+h29ejeIyp@4aL#0G8TGnEOb{a^qyGgld(|jri$qUmc~NY$3iD!p}S(C zcf>-!5(|AI7W$7^Xy3fJQXCfx-5d+OGZy-2EYzDHm)p^?(Cx9%J7S?v#zL1L7?<1j zSm^z+(9D833}?qe?~a8|#X?V87>D;WvCz~=T-bLi{mI;6ARrD3;j|oG*ynndweYPmRRVcvC!d4 z9Nsfyp|`|BpNNGPt8sYO$3nNoLhp=)ej^t8WGu9&7DvODHT^>in(Xr4ivCuuS&_`mSzmJ9Xjm6P$Tr6})EcBhR(EDSde~pD6 zcTgM+Z|Q_`9?a%?k@W`7$8g>c5$a1Yfw)cAeLY)da)WmOG-3xI!K=Da-vMT%Gg;%t zPQ?t?rX@l^Pk^~=OyteA18kqqRI$;5@2y$PjmnN|L5o>RteIp+FdHTr=$aFw&ZadexPUt&EXHY^i{jUwF}kq)!t{~vqb0vK0O^?&as*|giHO`5*x zW1G@8ZIeykEomuD`YwGZZGlo`lWf}1BpY@&q@^uXC?JmtBB)dz@=z3!w+ITNqWD5Z zMa2hv;@dy^iKw68gYWa&69=3szJmLrJUz!KYwE zax$wotax@QPGRCZwZU!E^l>ImE8+9_ut|L{7CSm_puPj|yhmWty%s(Iuwh5wWILj8 zqj9y}H2qXnytZl6pO!Z5u-Y>>{K&w5+E86GtpDty!hV~kM+$K|rz*8b!_>t`3O825 z?uItXL5M+xQeBWm{c0!2`C(Jh^1@+d*fBP!Fl?%M0-t%PvMOy*Q5ccaj0c6{E3VYN zSG6C_>XB*lQ!TDw-X)KvV=!TL!6Ax)DM9AJf z$)22u%ya~bl=V|DPUH)$5a0z5hEG>9Ij9v%VvBMF=jN|~Ew8$4=}DW@eT^f5TNfUA`xC$@-?8!m;_Xy6Ao+37YWhHl6%Xajx?!{_ z*Fi$KP4&v>&6dP5);C_V25koju5tY-WLY<$z0;#n{c`$}CCl+tHYhT5fTwbguySZ) z&56TveKKeBOPf8#3||8d1GAHIRmk%WYe*_#zu}cBJP&vwU4kA(B*OibtQ*GX^1;uq z0j}kRid@}*qL;c#%SwCU!$NK=D@Bjc3ty#Tr!FrFk5izrB4)t;0W3eX+=~+#Zp0F} z1L3`w5kEm(b5p_jKBIU&|beH!xl)xUY5t; z5|=bDfO7{XF-C=xaOw>+g25x49EAwF{Sb8fA*$Plr*Je}em))1N$|C96L<1?BEfMzpy7=^j)WAQgr}Dh%~Xg*PS>G6e%J zEYLFH^ny)y6^KlrZu~6B40!_IX$oMk7C{j=YW8@&mHr&GkK-v6)}BI}rjOO1)6QqC z{=z?4Ml`6Cb4eTMX1GwJ3?&W0Uj%>PX!$kICeB}`$^IMdc{e>8rOyPW3s{Ne@9=1W z{0@p1%5PXMOn~pSS>J`5#7eHvVx9SbJmAGD^Fki*Vzqf84|uW0ypRV2tJb(NS5AQ3 zo^}S7x-0N7qd!iU=L21@m5+6y_?IstZRKDZ|0M|psb?{Jk}E#5&pZ49yTUUd5bhRD z{S2v|Sq+ML?){YLL==YaukbtcDDOq05+!>09+|64shp%Juv-s+`>W)3l2euu9NPi@u@kg7c764zJ}{ zOkb3TAu(@6d-68Er8tontiG@e??U^QBbH?I51)zKm?c(&*z*~D^~kGl8(CPjOs8Tc zlAC~faw7tGtV&+K&CW)Bby9UPb{JGK&wNlKJN4^f&Xst!RU~jh#++QNqOL00j>mDjAJg|bl`W+Z9=QM2;p+jZv8C%`?PC<@3E=BskYI=UCDUC*2&n$Eo;U-5 z+oLw%O=UIU;n+^kYbLCW;Wf{I_$I1WT{6C;ayNx8Ci;={!+8BIHUoA;tVE-5M{fjI z`sph)4x9nW78;RWjkgE3Q_9JG930*F4|{DE0yeM3Tnr#TqU=!qX7G6G@7()zwh@o= zUE0L&@-nglp}i3wDpb66>EjAFOb8>4_D&wyWvU;Yd2KMRyF2f)uSz|F`)RqntL>TX3% zu>*t8s%7|vEtmW~8*8X=!?b%s$!$oOJPkprz5ufMc2ufr$goiI^LQ9vBM!qc>;%Ei z57KH4%Dx1&DyWX&(t)=D9yZ{qhpO4?S8fSQo(_nWi-A9O9=-=`=)S;~#nDNOLlJH; z89wc(HxEgf6)5vI%1R!~mOKN1VJ?IL=@g-klK9*4b}|H0IS!lvPgskXUhX4D3)Q2r z>cL@k19@?{vJr74W_|FwWo(%Ia~!xK9!pEC}fU=N2JH$H+d$C4JUUX zl(H4PwL$PG#T|H2FTAr{ct(KMhW4SG78YnvWkk_aoha)7`>_S9dRhAOAjrUep-OCE zi5y@iJfF>H=D6TAG*-XY!(Tw6bR2IhOEI*w4K6rceR-RW=>G{v@U0!g)N%} zw|TetVI829&{n(v}5DYRm;mD#t^?q{#_j`@-rGs-Za? z708uCNodmH>BYF;Z3R;5F7i`$5s#E2uM}Ew!2TfW04L*a=uq&=t(rJ~P;s&iEjU}x z{s}mw0AB&X*k&}op!-H72BEcX>PZ4^O?CN@!Zw@)SHX&`bSwa{K7{h9n?nqXZjN@= z+Bapa=&()XrlRN9BDGX5v=5TCPyp&j(jXZ{dJmU>$#8js3aBei=_m9DlZNV>8BO&ek$>>1I!Cp??O8aDOMj}7zPyFQp3sR zDE0;H1a#jGRqvF(EyYW*{VJ~o9Hno&Z!2LH6@44Bng1Tb-$nSF2dWRlFUKhS$UjI$ zi+>(Hob@TFyk5be{x=UP??l^D4<|}k;yb`*gT{>|qsRdv0Q7OGnzfHnrH^A~GaU>< z9sD(jz7LZ>Fe}-I;jmE1z3_6p#%4?m0P0e$B$dkp5c5dIP^M)kJq85SBA+*@OxvhU zV$-b$g7Z50IUpyZ9OQLMsH_8Vr?2$9QF2q{+>D&Blh>e--heO!g~4DBnw87&!W&X-`oU{4sWww4TZs`yc#Toa`)#LmF9H~v+@;VMII^Fh(JvPo-n?x{kCQD} zZvW)TAXD`O9Ezb}Vb5HoI^16kt18I>4)D7DrXzJ$zpcZ>nS957i(wi47Rs0O+j90> zY?V3_8XI2ud#xlLCONZv?Wpo1&T|E*0D~^;PJi9kX8LQ@VX);taHvJOxevb(u-wao zC(HUNLh1w9Htc)PZ%^YL|1hGP`7-hM&6n%(?IXIMl4|Uy_8e^U>GQsH?lb^PE| zsd^|)jaCn3sT0-1kW@@Pl&2P`hoPx@^)M{8Rvr#grx+nM!H}HV%9q6lsZOvhxNmYJ zep^sq=mtFeBodm47x;J0lI^9I8<{^4A1~-ZMjVXtJ@FBcSonxC&~m`PY6NVgdej%4 z0v*AEEda2gD!+i9>va^E3`YUkxHO;`H>1*oIlfE~mBU$5EkqT!Wv9+j57^eL9!911 zsE5(13)I62sYB{vOzH~tFgA5WJ&a3zNIii159_B$>T~*OK`l%%KtbQ7l z`jLJbocfu5Doy=HJ*Ce?f2{ky=&Q_kgcw4PQ4{$q3zGB_lPly{EqPlZIAcbhV#ztIY*@%?aKki?MoHr1se+ zf%)A)J`@?OEG<<{usU^szyp-kOPwE=dIdC6tjpFJj>OQCB3DgDpErBn)Io5m$@8r) zT?x9v;12g9-UeGV(m8VuS5j{sY*mV$H=y!AIjD_=tme@HGT-6v$B2{9e<{>W83-M< ze{p3PjU1U?tQSP6V6tywj%1-FFi(P%!)y$PDvWQ$X(Qi3EVTq^rB)%}3rlsZvq^uq#c1>oEZIAe`StNc1}gh;FWru>eq{FeNVs(eO%M^`>8zb90F zTYkq>enWl_vj5Y1zn{Nc*^mdkIAC7L1IxS!Wy%~+T?l(V5*TY%MYdSEY0+Q)E2vWpa; zE*7$80iPP7rIb4rGHD-?n&jLbCwZ`>j+V>1>`mFyBG%X`vVfFjd#l`m!jEcu<289q zq%8#xhxTI>bZi4-<#YxjObY;iljj0&SOEA;-r>Il&g}U5SAO?t4w}%Tt@eh!=}e*{ zwmFebcBh&XY3FHkBHofnRYg0}&B;`ITT@kZYa*3yOLm?-CpLrsRYjL}w`aOjiIY1M z-I-Lpy(+q~yQ#gc`P9VT#^mlq=gCd;=f~$Z&z(2(q}g*4GZvgQv3FtJotd_dgekot zk%6qYV3Lr38|#+w|1qE2e6S(5=g@hFFFdrTc%bL9AH3(!mpyy){qMN;$fofGsmwf-{uip9nUmRHd!`%me`opunw(&jyUu#)cdy>@(nWu@e!KmImw)%Q(|`Q?_Cy3{(WFc(fG>;{o#jyAKZ4q zqop4&`%UTB*F=V_J-B7)uy?#Ltml(UhW~2mdxzgx_=k~?j(hopyWjt*F|Tx1j9Z`l z+V~3(?us5+@zsj0mkgUybKM5haX(Da6swFqwLpCE`4GD;?Im7wZUmSj7^EFq# zxNXZ7?>oKZ$!pF$|B|2WIQ^!MvqBGEboP0bXT+zTe0RL#r|)lm<^xx^t-axkZOxC& zIp^@0x#u(`@7X=>mJRK5e!Z#lYu{Ynb%A|;s^eoPXI9mgo%htWFZMjNzjgmRqnGS| zy8PgUr($#omliUA9+5^Ka>k}{--QC}^zFK5iuU1&re9X?* zO@;le#IklG&q??l2sj%s@jV@7S0UX`QP$w;m5-0PC|TA4^ZxJMlao<*h{>e~mQ1!*3dR?*WYlqfVa%+%>4*Er^GJJ2snHPlhe) zXLz24dR>a=gP_4wl-m!mx`6lnc>j0Q?KZ&K0$ett+ywA=W&->;ffF{bScg&85`6zM zU>`;uKOMEKdX!fHobE%ryoh&Kqdqqx?TMi42GsX1(C2lO_dd{XKFS=2I(!y+itzmh zD7zoNeGf3}@EZqRe+f8e;~O@*T0=nN2K@aU@R#CUF>rZ1{(b>m{|Xx3fWKc57nJdR ze18b(;%JLf;Q1cF`V?q%Kj5qfKHd2HI&fQnzYBmv1a&?e_+Ej5-N}~qC44^&SZjdyxxnQF{5^`YnthL$DS%vaaXsc4RTMg*;7vMV> z=^sHmFJPWo;GH^LySCTrw3@A@I4rFT&nv7Ho;s{LToTcZ=LFugS?&1E;C&s^bm6%Z z)0TR?Op(nX6@dhE>hU6pkH?acbLbUI0izTDvF6#7Ye31(_(B>H zpS`$pBMD40p!G(?+XMr?{|!Jb&IO7YOyv}ABzXpR47ULQ!Lu<4;!1GWf*=rVn+wWZ3Ia9^QpZ;fq8|sn z`>Mvt$S}iOx<5lk*d~M3BvvN{bjiS1BGW8yrfpI;^0_J}ceWoRTQqkza@k5`Zm?!U zrp{Sv?UI6zr8C@!jO*C}I)tgo@@qljP9Q~IZN-1=hKhT);Y|jGG~zE|ZID##p#FNk z0+96tNvXu@o9uk2T6YUtlKnj;g>?v6)5erM{HyOLEle;ZjKV1;rM9ErY!#ZiLZLx` zr-V%mD3@Js2Cx~+kcFTOSGyqio_y6H-;MlxF278jB7M@r=PkH;LQ2Xeou5R@P(!vm z#Q^JCgG>vS0Rbh7H$dc(I6e3y#gEP)S0M8oX6^y0DACEeuJGY#uv6NAD0(I6&yjIS zz8Trh%>dsG;B1SX=&;urt0JO%1z89>ic-nB2VvKypvj(VH zwMPd>F>x+hKn(-_;qYN(KZA@<91LI8q1NkA$uxddcU>x+z#gWkLcyeX!qpcH?|8dZ zH58DuvcWSRm%`X1^DltxPn5__qGaX*32Kgo5YjvYXSJwb>xNh}22n z%1wvfLsQy12YPUY0;qIPw|*;tzS3P=tj{9Z4D*5`pV2k80_7AW1}l-kfI?won*Wc; zw8&(lbWlSkrLPy|wJ3)S>5j;aD3_|kHcT8=7-;NH8I;wA(z@|ASlbrN++p`hHab!qqwIba|(d#jNs#uK%Fw+qigtsw2 zi)6EiW=4kKd?oE4k!=pMxf6@r+)C0l3o(__S&x}nl|Lhyko|@;;Rn!wMrp`Vmg1ytfd4BpP0P-tG*K$i*|jT=IcJ?>S_h z%#W*(r5#z-i0|cH)6R2Y^r&RgPKYMITvYh2^mLv zX;ug6Ww`J>e4On4m|d)!^tahbId7v--3`ue!BwDc(%mpKReGUPPSF&irc7)fH*tId z>}}bJDQZqdroEnolTPd-p%N`F#M_b3S1BVV4K3ZIcf!CmE?41hk_V@1!W(&cbY<7g zIC45{abDP~Ar#!tKdH`Ym$jackIl%+yABe<&3osZtQuzbOE+o#+$>1zp(weZcg@ct zz(&xWQ*$@T2WzwF?(e;B!Xb;%ue=pz!o6sCB@w-II5*RT)s_|WW>V6JBdFg7<7O#b zlSMf%wvVlYnDWA-SxgzrIN+)YL~lm;<@zj&HlX-8WDYwkt!-}cC7ZLj+pCggGwlNn zM@gK`xYHXk0{U@x$G_e`M(KE6MZ_3;eP$6w&%ybY*1 zMOO-}-l^rYEBE{(?{cJ~As}VF)&bk~1`Hq>a0SD)06|5PgEzF@%l)hP-g8i^J$PK7xF8iSi)Nru3*{%n$HE#r%88OL}E^Y(T z;P5vB&WqFK0MhtIfVfo4ja?{%g}*lkxOa100HAM(f-bh+%7?pQ?#ds>>^Z8E5oTSW zciSHT__N=7@YI7T#MI1X;CaVH5;H|;K+mCC$Ik90$;|+FTK+iG25&S9MGnr@T~hdQ z9omD%%>01&wfwjN6*sdbHBWO3Gkxw36tlQ@F%8nYo6)md@kjMMdm_|`_Y|6GYwjNC zK?(##fe{BvpV$o2E5o!`5MP5Vy40g(NrT+pX{r~*jQ}x{rE)}6GLN6R+|gqF79Use zV{RR;cYP_6UE_qeoXB3ND%o~%YGz#kuf!i2>|7)p=N-Dd+KsZ1_aMobzLKy8`;nls zuLNunrTQq2K8VCseJ57SK!zR^)E6HO!_%cDuOQ4#pdr(%2@Id!CTa+uvgd49Bf}z& zOSBu9MFhn=j98mi0cysMG`h!cLP9uegHT>jANN47nn~1%(DEztOSeh>=V$J z^9OV)0I@sg#^|~H0nxhBH%7nA9}o$f>9cD8l|P_HX`#M|U39)~bm|w%B1!IL7gFlw zHqlW#Etiv&xT6BjrXLCbbJ$vbvnIur>d@p9Dwa&+)p**FagF~awF|C{wnCNNg-i+j z*SmYC1v@oqq0rrpRGrpS1`oH4-dS0#?2N_xpx+UXTr2LqK^O(D64_!Z8=HydNYiI1 zrgw@S=~uX?Bg?ex;`E0KIgZgp0bo6DYe1ewODOv=V(j8+EklKn6odK0)asbTmO zRkk8l$Nk{#`u#7ntj*qmQ&|{u>q2J0GQ)^>A-*0YUoITMRkWh3uzu$SYw-2chp}8E z`ONI>UcHC*Ql;B7droB?*%x_-$-R!T&nxQ*E$=bCh;QovY@e{IA} z?F@UgJDQDQl!E{l^|s+|(4h-`*Q-IiibRXuL?pK1jcgNYUrQyUt^qOqAiOcE1i|Yq zR{;pN4V&(tUA7Oic;_N!Dxj3f+@34nMJ6ETPGDT#Jz6#%8#_Gr zpfD1j=DCIj|FGz{#3;^XgLQ-WE!H3Y470AARk1QB8HP&@*OtGEs`^(|C}&*HD=O5~ zA6Pntd`&SZDGeQ&fimF$SF zXlqYI8#2jMd}kt>Nk;42lTA)Mo{q-5x)K1`#Mgk@nao7f-CbSDR3_09voHK-pwLCs z`amF)F9J+gv2VtKifFPcgS|1)#GWn?Cml_+fp95QEP7tNy*m+2rlQGC{3wFTyL5El z%mY=?eX|(MJ`l5$|J+hz_KnBf)+-aq>dlERZ1RbtrG$KG)#B+ybF#A~p4uBtC3cb$ zX!YcIiBwOjEt810fh1~!k?9(sYAJf`$}OGoCcHv5z|BYyZ*ERvLteBq-htGV zYseE? zCZ5Vf&%yS^&Um{Q?VLb2^#zoI%7da0C@7>TkrU+3eA{K4E}-W)X~+Rz#xYXmr_GT4@Q3viG0LuK~fMNSh9{T zeO)=MSj|42b@jkRtx(hE1bazSqB)MLvbrg>WfG6np}{INKgWC)`47!($QUUjL%JpM5hCh#2@KF4TCX2C(;7Y zuB>Zsk18Q$KJ)=2PAcc4?lN7@J{73f{S%7le#5mu&q^iE?S>jdSq%b{ZM^yq5}<$8 zosW&)nxd|5^Y&1_H{@OQ6M?+wirmgVvEK z>@aPu=*&u)7X|#7rS_q`aa-DlI@Zw*3^)l+rZMQAm!SUM8pmlMB8-7|2NZzL?hcOW z3!>AYv0?B)ya}oW4N0QQZONB8m`<5j(wazwQ30KyB5E*k2xZS)p(YZLh%m;GW}dMt z$3$bs0XxntqC8>B6ot{Ei3(MFa%c9G3FF84GIZI{}tXL-I!veKM6nUq>NW}-f)J287HTij_;;E~x? zucYYWWBWh9(6YWpp!!lx%ckUjElIBar{s=8GlM`NWhlcZv#y z2^Hs))yn)plLA#Huc}}OqkyRS#i_?qxVEw?9CY2$I?0`#ZRc}Fu#mvqnUwBIusHap z^U_ET45v3tL2sa`wpG^=@bxz`fuk12>`H$PH5=rrT$K2z0ZC+a??RX4Tm3DmHp86K zdmXF5nSN|CDA7A-uZ^xTrV&nXdoZ%>Oknb?47kw9Jrh-kKA!MI5-33zvlETZoUj|K z0I9vTC6Vgve)=G`5MnBA5yeV5T{Y=pKlBe6x> zF*)Q3SsWgG@!mae)LNQ~SywcHDjy>x3=J`Rt$bp4$o}RUsY3i z=L>vkypz(kwG9I}DX}Zj-i6ME8gwYj3F{&l!x*u*3(`gpxHYF#umvPz2ek>X1_teP z%r0N+vYQ}UnVxD-GZqNpLi0Mefuq8tCBw?-E4)mT1o;`@V)g`Cz!Hq6Ak~x{G+3xH z1$C5}2BtLC+=i)+(xTlpb-Hil{Mph)V@+CFxl||1?7~!9%p#;?U8;E(moQ2qIrBR& zU1cDh09*bwRKtojg3`5%WI=2{*Jqk{1JHiGNVnL@?0ryN0(%QbLtvn0>t0!Jme%5d zNU0K;zDkTlW?c@ffN{mMR2U1Y-fE>fdC@>~#AVG%6i?|=Y7hy6Ww_jE;9wq_N1FD6 z^^~sb(FKEmHDeY64NNcrby?S#{fFY3rMnW%yVot7>m{x8yfoh4+})0RqF*r8u6TNv zC_2Wj24N#&g9>pF4iN6tGC8r(rbh>48Y@@;rL7y%azW6vwlyV2|>&u&3A6zFwr-9#i{5UlR5>P)g4tc0oDYMI3~V+PTgLG$Y6nzp94c3R8x zpjmep0XZZiu`u0H5<+rLad{L2LPuMgvm|GcA_#)F7L{$S9{NuWY`+GqqGJVAY0I2~ z_T~X7P3X@w4d&BbWa$(Fl4=dPQ@M6k%et@2s)2ar(6megalFy8#aXGX3Zjur$Q%49)= zpX)A^m-6J&MWz^VE%H_zgD%!os-&rt-I*ZdJQ_`4vt@|`zokpG8oxJRP}#=iswt7_ z;p%LrC+RUKaJ~eY(`rOO5Hw@d0te&e`cC9nh*E^D!nTJNaA{O?7vQpN`hPgWwo( zn!xNl4&fWKf1+qXWy0Y@k2v(mLp4%6i8!{g1@Wtt?x3l#)qUBA3>!|EN5#X%m9 zYHXrTuC3}prK&-b>rjr>NhW52{9NYl&LN^5OJ6e%CSmvtZHj%!JwHJic2NOQuvx-?4m)Pxq^yW zFPYZUx~h%yK{=L7j^&-rsl8n^W#@%kqhxAKaEY28-Fao&AelC_wunk(3J_OFU-)=H8-0#_-B%OV9QnXa*%?6MFNPFd9QFq&ZK1a}9svuDYe zUWX~PpmP0F(_HCJoSUf~1o1%Tp%bSJ{#>fzOv-2w6u92WLXb7Wfs*S&*S2ugvXjH|#K{aIJBW~*_2OvCsP1Wy*lsi}xHPE(`dI8a~cuWwM1-$pZt@cpXGAz2?V0tMx`l zq6M~H)@)EUJw}R_ZgF-b4hnn_5>AnhDNh_^%sMmFNnbUCz=@3m9RP-W=~c3H4lUHf z0eS&02$G|N94jpxpI8qq6n%q=bZ8->S#@>25GWm-jDQL3C&M-Cm)0&)PEpm#)@s-U zwClUDiJwcf?-V+_o6H@$g3W-smwFbjWT6}aEZU4I47}-$dlrfas$otPw4D^%6Kt8} z9I0#&D6=$*958e3+{Fz9L3!L|l=e8LSsui5BNhY?b%#2T?5S=-C+cZyfn$+pelBJ; zajM5!bw?m=So2O8Lz1c8Y^qL-njEFsJ;BiDQDu4?JqKjfgxdNPR9Pkds3&^o=h(Z5 zmAdx!1g<<&`bZEQ%wD8ts4)priNsfn)!9xPf#ej^t4|9NGhWs@weImjh{-CBvnxpN zxgmX&>!hl+*a5I=6o}div@E>a$)#0M5!iZ*ijl*?E0L;UE8_8qO-&Vg&0W_;i!37f z2H8Fq*jtvzv3lh6K1~L$n`pmG7VWZB5OulKA=_NiVx-3o(jIsazzoGjaCM0flqs)T5FQV znB|UC+7_t4L(sv`05deboS9!wk>Sx8CS$pkyBu$W=s_9e*W(jWQ!VMuvhO6HrE;IP zFT(sN>Ue_~^`#d^3x07R2Qd@gVGadjJi$g(Zp}YikCN{&a&N0`4ZFmw6 zD(AIv+glz(jq+iE`D!QhBXmQ>np93v3L!fd<6yZ0a+#S`gRfcqB2MO$L3Q-{*0{}U zYG|;<_!LMjRU;}unB!v)vhu4;qo;JjUrBAXaw{2xSJ3yPvW(24pcUwyoft@hz~xvc zK%;bKF$~AXAV{(x4oeQ#{qt$1Ab5_I#~JSRCJte9r=i$Wq}oC7ARAiS_Vh+C*SH@9 zOOK^q9`a+QnO!!i1yWAX=kzRCH#l1BoBf4?i7bW&3r=ZkF5rrLSFa^vPF_*1(W~K-Gc;Z-w6RkXj5y#> zgam?;m0@QvXy1!1D6r#n05X-*q?Yg4`z#wG0^#}F8WPfr<4)ztDRXz2pSYhV2tSb> zYSaFk9#S-Gib~py`AIblU}}F6CSh$bu20I^?3G5@KLSS<$1y6Xl8y*e zgNlnFmuPyS7zB+Z(NZjx_s}3G@m1-)d6dm1{J*a5U z;Y2^Sp*QZOKQ?AN;LF-YYZ^AJkM55yZP-ecSe2>#Y{kI}X^c{*W>sho#}X9SX+&&- z_PU?qDNE|RHl3hK=>DaUz!45|Ob!(>m)a0+&$WL{i*4mTyz6-wsSd*MqAdpw;|lsM)> zq;|jyB9wOxCAfjmosE;MQe@qAkE~HCs9c9fJrtmc#tcAQDLbYCD8bpR1B}(DS%i~N zf{I1g(<3bC>pwgRgEESbQt=3M&bfcpw*&f)wr|TmE6c@p>-E4}%2k))At+=eax1Or0oqD+QsUTokjp3Uin^kPcL2P{N z4qOo>Vil$_*@{_aL{V?CK_E)$7=)NiaCC*RcIYLLI5el!u~zUA&jha93j-(ifXV1S z3==-Icc39liax-oK@eU>gA|IZ0Y}Y)_RzPxjmL`^ffWyeB~%p|;3r$mzOA69p%eQz zcVQBp>z}(<0eU%@0UUwd5YC2CofWb~RvLrwa8(@f+>u?buEOuNFR|8vy`&M$X>g$r zxHM(j;3U>09AE`aMK(SKAt!5(N7yPJ@6)%JHB618IMSFt`05Kx+e!wKsNve9qotzQjvSKPA*S;x8%P4 z@MS!vt3XicwC0I#f$LJ>IN+PpzTjLR2*%m_Ff|rEnsa>+AhrKO%=+5*o?V!RLe=rI zeCvb29lPs&R&(T<=mr~6NYzfQrN-q{u1*L$G#A|DG1V~EQf;IRssx7v>1CP}kOv}c z;h;mWIhU2YfEj#{?z$`#7{cUi8Xg)RXYwFep2h55&gMoOxX$E1 zhYl&Ege;L?v&^IAzqguB4b@bVXME@bs+74aSSO~8)>Ps#Tu1XK&ubrXlZ?>lh1^x9 z?LIl|#KEu(VPwqK7D>#*v;{)mdaOc0O~5{7tQ^v=G5g`d8d;@oz`+%IT`i4AhuVHR zJB9;=50|$wDLh}M?(6D<=^SW9&?=>L*Pz^VV@(q?r(X1|D;3l7{~N^^3qe>rtB{}J6XHDeV6RaTIK6opX5E=$;( zvAxH?cbTVn%NZBJg1V1c3pf2FQq^g!$^{bCyE%#a53J#;pXg0tT7v`w1rgM2dK8%| zq@Yz;)m6?KWc!-^NI}3*o)XI)37ky0@`w3U$ATTk3y4HXV-5GeQr5#UVELLZr(O?-Y zjlHlmTLL7V$^y3zv{GIMF@<*?K)&=iFbm64RZ|n0AV{hYZdDG@F`jT1>@q!REme-X zuC8S;7*9HLU0ZW1nNGH5&J;<2kfO-hGaZD1l4R^75Zd~1S`xvr>g(wUsuToD^>&fa zK9U%n6Xp(xCrt0q7(uW^XOqUTe_T{^+R^sMEZ-wWNX$M&GD@#eCjy|O!>A{Rvi!^U z$pqH;_(mDe==pzaqs+JMn$uL3Jv8tbfbJZhzO6?v-Sd30-q6VBuSv43#290IBO1<4>W z1fqTlx8C(zU30ppHoYDj;A4vtX$huvP^(**io=Nz_H?=-V>XM`S9qUaQ(ALI?RI@k zoD6Q&%J)Z)aqjFR?mJ8l!dVDM9T{bHW7iAM=?JQsv#by})M>2EF)pYQPVkgNXjEBP z+(WbHT^@MC@{xFV97cw3IL9ooCym4U8qb~XB0YL?egRN}oqVEn)(!hy}*o2^O7{W-c zh=B#1;F+522y;&$%VJegFPtUhAiNCWRO`qptFdVV6Bkyn=|H!y=mM;x%LDYl^z2~~ zohb;fUJdOm7CQT|wf!y#lI%ct*66tKgN{Y;PVeM05chp^{t^Vu?Cqhwjd{Gxm|q9W zVqmG4)XBk77(NIQvn|j)h0ZV&7l%MjHsi#O%6dF`jB87F$UiVE1BjF>K3zFg!D8mbcI$Bfn}DY#J?P8gZnhFqo|FhbW8~S=e7pc z3-X={na8hbkUB;dr(3FXd5gB=aff}*8d!nlVjWJ>(3jK^wme3bH^Iq(>M*h}Q_hAL znc^~(x#Y#mG%@>vW$M7b9-M+l7IM>*^G({mcH|lnYg+}YHbx#Vth(T2$^q~umQ*vF)nk`-McN4@0W*s3UYGI2wri@i6yS~$&} zUv(86QO_fkfp0!n%=A9U85AZU)zc070WqzgJU+tD+FV|6@dl{*%pnEeLsWAxz=;7?$d zW}0aGG@3C^xy!fR`lxxXQnRY-tO_+``?lIW|A5ln>Gn|y&igRux1ice7Put8M0$Qc zedQPme*+Bn2JTaOBMg^a{j1*U>YHT_PSeFu>9o6#*EuY*5!B`cy%8&BU;WQRC!7EK zz~~<=2$VHlpJnE9r5YdKLauZVkd;R1MS9lWX{l_|#O!yz)$PKiG>1icV*^pWg4$n0 z)-9?!j$82FjI5$6>CTZI_gdNrV5y3zTT7sJ#q13%M)esC6=_+Am8BMFYq`d7Q3GLf zG`#@Y1I%Gs@oV2(YoD+*>pXfIWukJz`!NjL%2?LNeO@w*Dov_JbZd2Q4MvJkAwUHSvtG2kx6uJ0mu6;(=&= zP1-JTV$1!}mHz0d{^&Y?bfZ7o$Y=u;XSv)_DICoS95t`ElwjGB23Z`{AZStd z+q`X8EgGk>?v35@(VfVJS(NOFLc?wcP?^%8M(V~0N83`|z?+28R?gMDI%^a@&Y+%T zH5*m*y06*L8?#TT%S5TUITy|8I|cm2_v%lmpg8`>;h-^lywYTVn^CZ`64*=Z(Y~n> zk~$Njn7t|A9^wj<{aAg=$W}e_NZA!%noBR0}a^z{jiA> zOCl2|MjIraj;d%$g#S&PiL>sO>0@><;g^vm=UQ?G-B;R8N!Th`>T}KuD2bSU8lAE$ zlj%y=*3@+D)sBiWLXGhrsTi&bM8b3o2T|a=<7!r;H||Zr+!s}tvaI$@9FUwjbBdZ* z>v|gJrZ-Z60wm{-)*9&GM)8t5HLTFb19U&-f4f`OhiLUEC+1tB8oFg5jvfB3x2Q|~@ z;lZ4f9)|L7vWiX(eN}3Z)|!)D1+k}bfFuXIW0g+^WmTjk;;D%?S!MCyTUHZcN!=`( zEF0DFUA5EVP1C@mQmwh(e#-s?)4ACW<5o)V%tLj0byrV~ayHEy;4~kn8iE|9Q&pJC z%=1=;4Uv=4%*;+n9q|awQ88az~f^hTaQ|AG6#=qx|w|A%*?3td5kz5b!JJ`X3jv}R;z0w#Vb=Jt(VloGO}7D z)XZ5u!yMkmt?i9=pUoj3X4WYD{4&Wo6|ce>*5B5#S2Db9){L2RX3U&1yK&~sSujO?9`Cg(i{cWS^Xr=w0dHwldhVOB^%R zK(wqz)=lr}V6&p`;eu}^8TE-p!Z&$pvn<6 zKVr_zL!&!7HD?_IgeeaqdOih|d7 zww=4M1iKjreZmEnZV7L$gzVgCOygRB$w^BhjoU9UO{3L%7mBXNP8vL;r(vq*SR|^P z*)n>Ea=_Ns0qEy6u~UFUqmv=Y@dea&+j{UwmDmbY&PH}F;{b~K5u>Ggsedh3XSdK_ zQv0Z8X-CfX1Ep~L54Yd0r;$4p%nfQ%sR3>GbfX>7?M`F!Sup~(x73<1=6S2UIYYuF z5}pp|oSbjxNsVr1+5cg3JCO#yF^t6LrTS_wKCfl4uF-*a+Iqe?Z3DwP2CF4JO+v$g zeDB|*$~PpjF4SPR%-kWQkks4Jm{<Fa z0$+rN(@yc_mb(bqIq18olW4<&7+yG**p>ruF#+Vn!cgJHL>6-ZY?3-`7;IOBunn_28+`w5g%6|+?r`nBA zCPG+((v}WdK4d$*Y=`w`fr&<4S(lc1vR)yAJTmJ-&{DRk8NFk7zDMkvq8ON!I)MDg ztp91Wq%g+-m3z4ltA*aw&SH4XJ|YO`V<1+NDq3?2ZF=BsjIJ`qm4VuG0=Cjxy{#o$kHzA7b1>qmTfb*2 z6)BZO5@%L{0Tz>0kN1VgIuf(bI~K&Wcyg2$8Z_^50tduwJ&$QCQOszB|B*5Yj3V|M<_VYIE0Wko{~)r4*f zN`i>OqE1@ME`qm0X=f**qgu<4sWU*~mRnqN><}sVGGr{hEuBVz|W>SIcGyjsx#n-e&Q7FS=dSKb4=WY+^)9&*)K-c3F-B`s{N?5Ih( z?v~>n{8QBU>A8p(3opD^SDEnaeqaFQ6*R`7z>2!nYnLyR3Pn#|OvN^4k9DrnHAQ;A z+oK!g8t$CmzHB>?;Z~gAMbie5OIQyKjrT8(;fu zuYGfRHP+pEOI)_9ceIS3&&%nIm|+hUZyOQw95D3gi-t;Iz{QD$SRRVj5Q6B0izu)6 z3)?Sd3!8-$GPfTXq`W>S0^%R1cCulRE_f@CiTip zuC(f1NksJzzx}~Y?{5aLEQkE%>k?J$I3 zSY|x(tTI4<^t}xN;`q9X2Y9bG0F_!Q=E=R%H=Q+NKqP^{l z$+C100$rvnLGV1ou{)H~DkG}M@oS$0uYC?8 zFhs;#bZ$o=Z-{$D5I)Bb?(oQW_feTGG5^NI1-_x?GDc@F;u|}-LsYr9a#wpG54c;$ zf*3(hyN_>ccbUL>64%q?+u9v^sLf`_x3wSN*1nsk-$F>LopO40Th2U(=sdoy-R&{{ zr{mk&14l0K68!p=sb8JMlmA$@{@-a^yC?;3(Pb8aRMn%r-k-yjKPWiPUJmCd64CvG zG=}51SvZ~AOv7ZOxI@n4w^{t}zRf~l>j?_-?F>ndHlX*N4)UC8U3(RlgC&e zzi-))hxaYB_c#ldW~H(^iX%bcLm)1`bR((fialL}l><$KcI(*yH)HW)@b4Pbiyp4q z0&dXKjteN-UGxw|*R#TDR!)=;Q(k5_V_=K^vky}jsk6-IoZ+iw&U$*SivG$5sSHAl zpvndT@t!Pyw3Fk5;FyIn=VbX~WTF*x4GZKU!=<@?T^@2aMExJV?MV30cvc+0!#PTi zw?qnOSJEFynfD#=LjBE-&sNDs=4U9=60VTSRMy7&QY-A zhF6N>lIi1jIOB4XAnLj5kvLHPo8RFq`moub>FKEMKqaw`?vC5?A}! z%po<<#>Cr}+!RDUEONKCsw<(fY(rJi0m*q1Kw-BAU*|iYrI3Zc$Wnb}DWO3t!b}@i zYs+CJ+V~uV7lvK>3jC6-tyGnR;OSGet1vK#myKMbriP1S zzM@BOPj<+qP?BRLO&gdkKY=>6yJn$$e;f31i{|9Zo!xQl1;`|@$A$}QLDkIFf;53R zO^9b12SLCfSlwOKnPfFs3HN5LmP6&6+uN}B0L_c(1aBB_Yih&pT{;ry0gQkgl95@5JCH#m4fE#I1<24kQeblY*PV6_pBQDMFyq`{ovLBr4H zwryP%uauj@YxIEI|J2)gqJhE|y`Yc#c~r&z7hljL6|8euD93}^TL?+ceg9-9@)#tY zTp338s7p2P!ZDeFR7O|DY3SV;>T!d(Vwu%PyR+=51^>(MDhuj9$FC~$@Y4UStICwn zI2vm^w|c4mB+Iu-OZ4=ue>sZ>_UPk0{(qat&4y(U72L<;clzct`8BGVC|cC2Fwh>q z(-+<>_4Ldz3-ZuKz41Uz`G3iszA}*bk5jANPIEF$Ej$y9nk|pna4-3FyPtY;jRVxw zbXI*vnVP0~T{nVs8b5yqwt}8T!31Y6suK%#P$?DIN<$wVdivHRn=^?_HO?kV#5*d? zB*a^fAZW(K<*jE{J)&45QZvLLU|DC|(a5i?09@zRb_sQ^Qg`4SmxxuE#$+qoiQ*y=`x=~vu&=MmP>%<-~8K<}~ui{J=ph2sK zA24bVgcmRMBGUM z@Z7UaaDIh8=ER}6t5uM#obRxs!59u%0c&d-eG!}NN1eS|u5LQk-V$oH}9@@bjkow-cG-^n@D5nR3(9}UK4$x>N zt`Xcttd>+oC(5xFlcq8nd_$;H1@Ttkb`{>BK|vAr9OR}4N{oHPB_@G@XXHRurHu7o`Z5-rN4vAqDG?F|B z963fC!y5FFJWf&G2bYN*Nr6=X=U^wD75C5yenF*X;SVv1L;b|W$S$G{c21wqgC_2w zZCvG(Zjd%O$<2AV+Y;SE765~g6X^oUiv_;g=yt-YX5Jm(L=Cc<*2t+raJD-G(vH9y zc)O!11uTw3$|${@1r7=ueW1|>brvrUkf8Hs%TE!SY8N01=IM80y(sB+~xCkSSm3U=?Sn4#x zK-5-XTy^erX;X?ZO28fR&f;1SLaJda;_-=1O<9_pTrNrqrm$8U1P7{{zU;{*EhIru zHo2nOUG`ICphVM-oh+K?K&YEAgP`%OP>7?Qi8Ry?=(t!i3-2wq{F+jxw`#Aw`kH@Q`O-=cwZGwihh|3#UrOAn9HPWHv3~A*;%(Gk_UBXq^ z$lQu#;BV1?J;$`7+pMb(Zh=7d_UJ}|&FN!f>AdLsn%Rk8p6H-wc)EYuts|f*6%dV* zhc8GD`hbvF>&MhY%Z6DqW<*!kV+FbcLvav)Q59F?3c%!=_D~Lr$O(evYc;3~ysk?+ za4$g<1j%%D`VK%&FVDKWVUfAKp#kS`qJsOQ=7qk7zy-wFU)dm zpr|sX3L3cd0N7w`<2jgm?O%i*7Po_a7U)Hm!f>N5L)ZC0JdoZw?$^1nJ&1f{5vf+* zH4wUC$d%uJ(>my;MlJMH&UysV4sDfxTLb~qURkCsxM*w+$X^7vhqhMi?Wv{=QT*v= zOp`zfLAkG&ebs5)pu)A>qD*O1jO~m`fqapzjEhdjiCH(#02Uk+_#h;lBAuy|*iv@F zuL!%kaK#_pKZFia%^+|xuYl(Qj99Y!La35c#sop~iWmxozW-&>!nx1SLkmUUpduYw zi1|Z#AZTLButG-AQx^Z#35(V=Y*-K5$I^zaWE4M}D23jy31Z}QAO^N|;9%+66oP7~ zhgHQIxH80Csm)2e)IlK&l=$EAI{{Pq+&ksoFLV4(K&25-KWgCT3cIB-C>t)-?(|hx{ZxHctH&= z-vEFsY_1_oahP$N+sGUra2D7Rmz%U;Wao~VG~GJXDwZ=*WYxMIAOxtcPwDlVW?JtW zuTu^^3u5*m2bpYN^kcTZWDG;XpRxg?e66;?j;v9d?QAWzGnOCQV= zxu(&^nwbYGxCrmN{i_1E=~Tol%c^f!Q*T=~ zo-Au1{?3~dn-QBmWA@CG_@>BeN4W7i%bIwBWj%)9p^xCXL9Wh9GsQD&ZR>sW@or0l zwd;^=mEzsRm0MOX!|xu%XP}UY^;iaDV*CqPR_V4U9zLc207U*WX|^@olF~;4g>&#~ zI}&`Qz_PaB_Y}m>#qU1+-iz;r_(jyZ7k|W%nVQYAJa5!SMg%=^b0Abj=5^n}scZJ`J=ST27#CkFOB|Hx(@iSGIX3ZV)!qHg{_l@4-SvBuE6s+ z>+K^LenGC6JpTO{a68=rXWn&2EqH&~8)r8R#hFD7`JdWqh2*+7Z zPvF-?#UCPJ>qixjRfMep6Ir{eiKJEAMAqU4gb{1Zv$6&gOI3 z9MUQ}m(L3pvh?zLru_1dJ_9V|py`e>u(imS_02VGnEZ z>OMjU9Uu*WZO9+P^VmR{<>%LB&TP3_$!W$+0 zxP;G0_>zQ$mk{R2ONdYHB`js*CGQP?(Qdhfyqdm*(B3WK{Rku0h)aw6hpi2ll9Kx_ z9Sgqw>ZPB#bddF&gfB^0cp2Xem9XKmIhO&>WrTdbgzveG^}78sLjIDxnfVTWUG)yu zdb@-@cr(a4_>Rw98nJ%(4wh1NIiIf#t-QP@bl&B}?bDYN&Nn1{O~TL>S65e9vk``^ zl~)i#{EDv(9d6xp1^M~&c!Sotl3}%k%~!q`Y4%8X0YY%Nyx*{MaCo@&g)7+?zK1Yu z{rXDM_E06m!B-K&d>wYubOOq+s8X?l0jy3AY?(uHA>X z9}ZgwLi?8GJ2jux-JcDi$zAo>dy`Ip1dOe~28sRwWruUN53UA<>5($?`cuACRI&L5h z-yz|35`JF7AxHRis)VZ~yiURo9%1@tj<5xvKSFG;eLtUXk?<)ALpPGD{cj{y7b8S# z-by?lzm@&*hqp3)vZ+xhjt?fiPx?JW0hgoCWQ4olH}D*B?I;wkAlp;4V_T@h)?q$6WO8Bm-tE;D3zr6P=_fE6^gb=)R-&gM4V9&ab+<5YR?CERnBZq85_)>v- z-zD!4-A8Djlkk`K5$1sVS(kALhgfUwe;i*glQ)mt|AG6#)%TM#$3M{jfkD;+gb}Ox z0ZQx-JiuJ{OZcS+K6B|ftN206jjIq2w{Cw>c=f@@Du!F*AF8%uR?kE24~4C#ANoTi zV#OXNgdaUjOy2Veh9CRHS66au;z-5Nwhr2*)-bCYqcCFy7+X)rmm<`!2*0IPhn2xo zM8>yL>xjh0S&QY{J%|mnDy%x|1BidldKzJcwOqax*-s;1g|$Y$jX=z@s;p-DHdVe= zSuNHQd`b#1>fdtPADavl3fmy<1|x zla%$=ol@1mA~woeYkf&#kq~2>7z4}^p$VZPYpafJMr@;XhV?!9)`pZt)^_WMLYMte z3yQ4st=ENSSIV~wtYVO|)Ve;z+FoV#m)I?cwOH3!LnL;O#NK5Mvkyi~t;Z$hwbm%x znow$e8?i3yI%}Myd_}&!$C@bL3Jdt{Hfy2HHX4Umk@aC~nSBXj^Pze$w%U%^L#*Y9 zO+sv~9m2OQh)uN~K#Z8RAYTh&8w5&Ppgd@8ly8T0Y?G9C6JlM~gI0rldtAPK+&WES z&q(YMt4W}|qGK(#jT-&6AOrq+#A=mq0}4sAPg+UaM$XZQjk2Dw_6n2}<=ZzILwtsO zd&&Bsd^@?2l>fbsohq?cth?mf4vGEQx=&)e5i7D@wH}h#+a)&6e#O2RwS70#w<2qj z{TG{@d<$aFT9tNjh_Me#tlEx*So;0QH_Dn}mxM^&PYaZ}h>>RBL2RQn*B&IXmn3$Q zT`sXu5x>>iBPDi%#1`6PBvvW0MRrtTwGykdt0lHUV)gbMi8V`XnY}<_Jvz2fVpkTC zg3Ij1g4y*FTVaRMs;GmG4J=@d9z_=|vR2wd3fK-$%C}SP6C~v~C3c!Ur+~HnDPp6n zxV^rBwS7gtB@iRbS0%Q`-cnG2Z$G+>FfXvrlGvvYld~?g&z9KCYxwPQy9xO$>#XY; z`;gsHP>vFAM+`iuV|DK_F~W?$pDFo`u^&k6E;}i)|CHFh_PG-K(~V4dznzxY(wi82 z(C(Jlg%bO?-6OGQB=!k=uf#^*#*~lR`y}>u#3osvvJXg1Vf~bSp~M#4!IaP1mrLwb ziT%vJR${-0xG1vh(EBC!$GaFC8M;GaiY_xk_eksqck|n<(0vk{@iE5cgdULCSrVHU zdPriIOKd^tVTnBJV-^cu)WJX#Pj~k4N|){m(%7Qvb8? zeszTJ&x+iHFcY~A;lap<5WZW&4@J(x^MjJ+3z3iD`J0h@5dJdq0Kzc?K8|qCfJYJ5 z4%Wp58V4YUV^beMP8Sfu0{T9Nf zNI;repoxm&__NO-4&Pn7Qu+15|W-yYg}uw&@Wp)%{b zp?4ts=uoEr-O#)7wcjwlf9J5TAiN!+ZGCCjS-?a+e}5S3J8BehIC&IHJaZIr+c%1J zyiuM%E#XaLnC1xye>{e1?6FL9;@G_fwzX<3>G_SZEcZD)+tzO-e0?n8N5=6@&A4|V z<-5kc2ce=^d6e(xA`FK+qT{Wt2fL$%g5Bm9ee9W}8P&vPd3M!0+;-#1QVy;2i1c)oPvJ$P0%N=zy&0-Q;u2=ALTwy4Zn zdUL-M%B*+aT#oRk63)Km@1x7CizWQFgcCo&H)#n!FX6CT`<-B0H%~qja6Uencz$Q{ z*?9irm=!PBNNOiFlY%6L4#Tf&b_xjEEu@L_p=O2X$P&0plXq;kAfZcUYNorIm0 z>oKc8gwVE5n#yq7)QYfebxZi}snhXnPuqfU!L*+6rh^UBnC2mbn+`rN&xOH|$*>~alZE-z8bV%FLkjQ5^QMCz zmp4DF8P{*q!T**wWi$BxL<#3gxB{W!$;z4I`fWXU>L7+QS4by>%Yt zWY@eSfcCC=q#HTJ(4lbtgZ;N295IdIdI=-)rW7IgXFlb_j`_sDUBdkm9-jYweEo)m zf1iJIXr?uO!E1Q4WWnnQ8yAEkkb4qdv!EEycP$u*@Ns$mkv#u#K^fi@pTv}-B%Cf` zorK#YY&&TH=oA+euD zxar{c>qwd3B1A3fnQ}sX?Eu?)t)6dQT-t``zc1zc;mf)PY&w`+c5`TgwRai69$v=x z*Dj+pJAyZx4nBmhw)Gi#|J`NR4lu1VV%jYO*e(ns^BI;R+;s3aNC`fdaL95(TebWa zlz7qdPom#Fw*1?8etJ3KU$TNFeptfKuJ}FP|6~Qz|4qXAEB^*)XRc)F`|(_6J+X4~ zz%uJME2ks;@dF>8WLpns#`UwUXEMz7pBXcnY&v*yH*we~;pq~dBVo6Mmq>UcLfabL zLmX!HEG&WC?l}eF&K|zMQo@h*e9N9`ov>#^$xLe|LfcxphvRS4o(4RhyN8_o&ON8$ zS@H9&d;S8+^VhvMml!Jjf6~qbEXwNb|MxjF1A`3vrn1PUfD3BjlA40x0`5!h3kawv zf&!YjLhgzS?zkkVnWmrPxYE)2WnO16M+WP;V`#CDT*8BUt*Wc^nc=HQ1w%5 zQDaX#YCWw9xVBKS(=^r3&O*hsX{}ImxKQx|M{gJ697uAhiUux?Mt$q0s-Hef<4_*G zR7IyQor-hv%S$_==FO#Dz$;68g4dTmhco$I&aq#nGJ}{+m#N-5ElYE>qv6Z?A~PRl z4^g^evX_S#vhowWa#L$jKPRSaqw7-h2Qf&e*JGUb0!O^WB@D z$5trinzNhL*7FF zr1px_oO6ZqZ*!*amLHKBwMFH$V-DJ)dYixHF6uXIQS*6w%L9}@*rMiH!O>ex^UEsJ z<7L%z_{)F#tJ$ifqw4;=K2PN=->MkI<(IiUgUbiFyd>|106Thjt76sVD&IN>HQzC< z+tjic`+3c6YQ)CdRG+Q4Ek;fcE|1x^9OY?<{_}b>1^)ZCevXea+jg}cs?MSIcC`g# zx2q8cZnvU`?ComYS=-fYS9A2W?P@I@<@yhpUu}0n=7a6(2y)+{SZmQXv@*^ZM%g$b zo~*B$qsnSof^ijEb*&n$cD(wbu%oh9)toQBs*bPgTpqqmonamxFK6qh(Nzz$@9_~) zxo=IF9o^gaDl%&=DnvgiudC(CVm@qZoYPcP%@)Vh>yLYQm}B(+FvpIXyfHZ(ucp7D z&OgK6IE=kw${P<`oeNaY)mK`VTN_~;g$EgS-P#0}r!Cr{1?(fX!s@MNx5s0LYp}|k zUHun_B*f~o<-^kO4q02aYvK=wv6z3Nwy0|3VXtd@w%RnZ(j}uEJzH%7InlHb)n~pn z&9RJJXbIag>r}_%uvKh@)+LVb!Zxt2v~F@dhgT@Jv(2#Xb^HjnSKCR)PhoFr`_{1% zc1oMK?HcSHTfX%v+YQ)d9qVeljmMly9ZRwO0{c$KCfWWZce^6CIn@<4>87@BPEo>-LhBfrBb{1^0Gi2m3?sydAUr2BVl$mgBAA+o8Mc;f3R^zy za8w+GSTtKcec_YN?v*ZK|%VlXC)WBwHap=iDAPQ^$ro4}tY=WVFjgyE=4C+kEE~SgCre z6@9L89wWkNbCh8_kQq)DO_a^1ci37rHDVW>V-QQkyThv8x6aujf-1EA=A0|)(&6SR zR!E*M?L~d^UCY&DzO%WWc(9`HIVq?>csx<*o%UiJy|>zf+UFTCveR5AY< zx2Nd)NA2uI6uGxhBh03cT|W{{Xry{;7;~v`wTY&*k?jOscP)qQ()J^)86DR4z%@!V zrzYyHWj^9;f;)traQf4=^08T5+`g$|L2eI(dL>@{J7H<*W)te&Z1wMirJI|bY(vqH z`V5xQl+5AT)=h3@6i1`k@~wN_%0(RI=-5%j+R+ppyMS0bnx$i3A=aK2>e$bSwWpOj zX764`9q2_Jb9XNn9q45p>+N1wcBEZ8Hp;yb?0}9fb8jZ&sZ_^aa(@h z&UVc~t%(Hs!idplc+oR~Qliz;UK48B6KJ9~wd@JhsDlwx>#P%{XjAK~8!cg*O?TWA zWOq8I&DW!w>_Jx_S%2A!dUsU46jF1KQL+!+HRegLEw+h%Du90{EQ38)%YHPIGp`9{ z{pmF}W6v5uhacGpuGvl(aaL^{i+M&Bb7=_4c4s>VyAa&2n7B>KuQQX?eMO}0YX=k>l! zrksCuYrDxK)2StW>Rk*n~B&=8mwchYnsF?O4YF)HSJ*;I#ycqH#wUo z=-9_K|AI}|v70qJn&!|P9W(iMhb_^un!X8QF0IzFNZ%OPX0}2a;@jUek1DiHge@Sy z-f9^N=}q4x(?WVqTetLT`vH(;yD+L!yJ4+3nWh@!Mz3D{vO zqHnd`2zbr3mdg3WF`FI)95k(`-RkXD%*?IU5z~tl#fSV1@~veP#WY3RQ?-tpiYa=K z%A7$RYL$zPl&7r+Y!fZeHn7$i(`G8sHWIdl-q4nf%&l~cEgz3ZADXt&*}=x>d9^+@ z?Vual7Gv~R32zkOUp{SQi)JgN-L<|ly-Eez4%Yh4w3`lVdzbAN+cLUd>j%WT4^_Ra zr2Dnni`Qs1TOnBke>S~F``Ck~ z-w81&DAN2kb!3}KsX;bTN;BBh(w4&t*ok)aW}A=E$J!2sEQ5Wa?Zc1~^Ktq{+l`Q2uv^;9p-0Ro=)N|e&{HtKWFCR) zhF&nAq!ew>gxbU@n#)#5okB00PtjIw!$Q9>pQeIT)h?eVBlBI_G19R0pn?-h^EyKW&a1TKQg~=Gq3rKBe~Bw!_M4n6}?wpV2gJor+ueeoh72*22D^HQH_# zNBUOKQJ&dstF=xiOC_Dr=3b{e?4mZmItk)SD%aMqP7Lg8ZEfrHv3y0}YwKO-Bk>j8 z(>AZ5^jTC(y<$e-JlBH?svp)&~+Viitw?!Nw;+@ zB*G8&s}aKy(Aw^M@|(c3w*DB=(e4(7vgKRvM|6cXGGfR~w7X4-I%hC`Go6i`PP+n%f)@V!*)V!sas_C zfc&3-xIUxAZ`6QIJ-aTl`-3_fG3$5efT9o*QT!SokZuUMoeAZJBvJR>gwKI>|mQs*Xmuc^AJ(_Dl?xR)VpHm zDO~3o=2QPWJ8yB;7>}>#eMA(;)Lx!w?<0B}nY>ke#UUeR{iXg`dw=nc5wp5Am;gJY zWAz%8;gdWUbgX%UauFcPbxiHawZv5&Q+skPaf{8^nt@`_JTvq2#*eI1hBm}=Sn)HPv1hdt_YLFchV6uPnK4hb_p}pdR~x4Gp7z38WSH7}5=0c+Y)WsK zAUlb+Z2A0rv$J?kXR7CToyBk?6Em}kE+T_%C2eSU$-ax&%C?MNZFtqbrx?CQjbN;o z-Xiyr{bk=<%zR|!qK{bi$j+Ghij9xV-r8U6V^imzBD+B%Y%TX`J=M_7Iz%*N%eQ{q z&%~*p&h5BTP+OzsK8g5MzGqsIsG}<~$M6EMo(;MYjQ^Z7Vn;T8Djuc1MtJpGn zz0q82y11+DOrtN%nIil}BX+e>S20$!({{JfQtLR8tj(eEQfsy-U@Iiw#$CmDv6W4& ziE=SPgln~4#iqD8mXUn&mqXHdr#atZ=j|y{`B$nt{tEebgk&bnb zDx=AwM8^`N%Ee^yijJvAiz(tYZR*itig;7o*r+>lsyM1`2HP2JtJy9X#;-k170ruz z*0eLKt;1ANQDRtGR7ZztqTfctK16J~IH&C!Sf1#-$%s9G<%{AihS{2Qb9h0##b#WG zydci9;Z>?8{Si|iV^n9b4+6?@(@Chdr<-JpSz@BL=q5HXTb$CSj@#LyxA8dk089a$)P?=sA{=^Teb zF;iQerfnUTiu=1&tdLqXUF5J#wAy1>$EM32mWu+z_&Q{TSj}eaXDdVrn{lpNDPA>V zR=;L=jwfDc%eU5ThUa*ql+C!JUM1pQQzIC?tQNi5j9!YwNF!!l-|TaTA~BXN-}*|k ztFT-hdjqjGqJYilbB(CI_i>+VMI@Wi=Q`2Sh*|BM-*#9h;@FIK>%{6u?QCMb_~i}m z#oDQ58Lbz8vE^HbwJb->dccU~w(L~xMd7NgfUUZ=%`JN%7N~76Te!B9Ei1)~q7hrZ zwY+6tWIm%~w-MVQVsy;0Ro`kGM1qdZt~;b!vFNF-cB>TF0BupN(qO~1wPzcpZFs9p z#Im$aZZ#e@N!vV*y`XIq$L4E$z13u7F4cC7`&^^#JljTX*Vtas_6yr<+N{s2nH|y= z@N7Qp9c@puy{m0~vpI-;sIB9(3t?BZ4dPzD)RxBfowgUARcqpowiO)vRofnp$%Dog zJI+>3+xu+p+CJs+YHGXw>@xHjtnL1@MX8G3A)*C7%w!wu%GC4Lc8eMQlA`*v-~`tL+eerwscOwo?o` zZJ2ADzSUk8OWrjsxXqqwyTrctloe8Bn>VZN5jVBPwK-L7pIH9B5$n_DlWGUW5p9`m zhFjkh-x|hejl-hn2P)Gz-Vcj(!>n!FmeE@xSKENL3F0l0uPwW63~WAIr6_3I#_@<) z%63g0Y#RqFF*507+j4P4l(Q95W!uh4$NB0|y_$VIHUV~+V>9V}wg+s+`%cG&*ZGHQX}04DQJ?JusdlHu%@0*9 zpEk$&!8%@en7PXFjM&F!WWFa-E~?lues=wyC}3MjpT%u^@`b-BK%X;%L!7ik$okWXj89| zT^0A)jD6y3A<9*zF~T+B%r@IPyMw3gnyAiZjBrgHGh%$j`Hgt5O1p1Gd6mp>#l+84 zpT-E+MLwG`!gpc`o6+ZY;#QT|4RN1snf3P$jchkWv(Hs8%dD;)o5EUa^Xu3O)?Qn9 z$Lp4xVvx3hY+2e0*yd{6#rC4M_u2MoyT|sfwwm#(&kAiV+3sl@%4Yk*m{}fMu(q{q z&9%M5)>YdLwiIo432KB%+CtctXp3RnqOA|xVQu5tKGasi_N}&)Y=3II#pYRI%+slp z8n3Rlx@^(fId?P<1K+6J@PRTBO! zvrcF8)3%50DQ#b~b<|d?i|TWTwtj3m+6vg_Yb#+Z)^?ojb#1rU&T6yks`~s=TLjyE zZSC2dzcl8V!4|4*0b2`gC2ZZb?PnXV?Izn4ZLZzacuTd_VcV)Lj_ruHWVVairm=me zt%QxfGG=y!&0E_gw))z>XKSnNceZ}oe7mc;WN53$Hd9+1+Zt_YY`eA1W;>y6Gh4Z~ zci8S|`;yIi)tKk6YysLldZ^K(v^8Q&&^CxIQQLU73EGyk6=-{jZKJlg*bZp>i0yrC zKd@cZX6dO$|5ckGo9oxcJfqm^XzR$>ZO*;aJmocGW_8)BYwO4ssV$K$PFpV90BuXz#%kNaHe1^}Z0odr%J!PJ zn{21FnR~0be6G!l?XI>kwrbxP^L&OaP+KRqrrHLvb=Ee9ZJ4%&Y!kH=vn|qgoNcqV z3bsSqeq}qSE#Nsd&uiMAW&2%QUpDt|jd@OF3)i-pt+lrI*m`UGg>95JzdmY&JZ+uW zR%)BbwnN)Sws*8$WV@uzp|9%Y2W?NYnXel&OJS?2Z4Fx^ZAaMJYrDcWNZX%mS=wCs zsS)OCYsU7XwjONzv}Llrt8Errg|;HLd)jue*}gO8d7Ld+TLoKlZFkwaYIEtY=8~fA zDYi-4`mrt1Hl1yYwk>RjwY|sop|-nh-)i$6phoypTWdDY8^$~bv(?o$hb>y$7Pdax zjgKGnndQ0Pl&Pz9o3N7$xtBuv z@U`JqJ9){7Src;HtoE`(Ti+ZX*mZ3wIe4E--qtog2k&#qU$xE7xg#B<{GCUzzL;|l z=BQ15Hl~{N(55~cQ%(9A#&dC$p^vPsgQI-fFxoRdLD*zxHsiH>o4m_5!+HoYXZgFf zbK_%RmOs?!GpyIfyEwT>C$@a+z42`wT%@;-*-h|ta+Lwv+$Pk7g=zDfP)2UDp|+6Jjd$2)l#=DlD(ndnfjMh!)WAT=~*$QdL zgs#F{Ue)&Igdis$X@^e`tF8Iwgh;3AGMo*sUr(@!8nUIfa<-n@Zm=!acAxD&kDgC& z?LAhfhV+xFPqp1|kgsgcX1r7HCr27F>w$@boc!ciwtVa9iP^X_d$$pzD-)BP{AHj; z^^#9lYwxKRAP=z_uet}yvuwtz9D%YH?vYW;@b$!zPC>FWTRu^4rc3|N?~&{mK;+!`)t;vONDxgmF|Q-u7M zEuY@Vo#9kZcElZ2Dt0!vz^Q>;j=L1pGOU}>(V?Mi^xhtF+$$VqkDRlpau*UL~ z*@(5;Zxc_;ueJ4MlX^{Lu@!JH#%KMWmQ!3+yOk6_Il}pAc}d%l$-}Ktva`C~8?o%k zkpMjJgQ?JQxZf=c}B--O^JbBG-B8bc9>ep6fZTx4E}U&Yq^ij*eBY^t8B)$Z6kkT zGd@q$MlJ|NGkp$;mdgyIALrOavdVwK`JUKNX${aP7Tv2dz;w7eN@Sp1T3&luS& z#xV7&UyK~2O}!2lBk#B4n8OE4I$2^QJ~oSgm7;y24Kb^>(QF3{<5&G+WGS24%k7bQ zg)N`@F0+ZY@}9OVHunyy&wN_QCX$sIXT`SC!7$2Md#y%WSzaX;EAOXpCM{jp(IHkA z8^&j_IJs5F&aShGIC-^7yEy5rW4`OdeB~p5YV&9N zW`k;{GF9xBVYH89ql>G?atx#IIp(pkYRuO#iruMtS@5^mG94SoG1I21?QDk8I*#SB zRf;P+2LyGKN42T-(oLS#rq)Y0nYcyuQt1%)Y6>z(8pi9Tn;ff6t(R_cs?JpFrJJ0^ zW~`TP((h01h0mYe?8s~!Eawb0-RthyjZ+S_ZI(t7S>+_?U5mVpxhi@*xkt}ICXu|hm zsG2W8Ny|_pXgfy_aQQTsKLt&64PX9arn@LxsA}{YXS(2+$341F(2HwoGV6en8gn^@ z%k4oE#dFPosjjY)61kkl(Ht&M zZ`54koG&hO3rURMKCZ^W^eASyQ#`|4-Q%w;FHdCr5d* z=Kp7`s%@X_*{JcsOeEFf`PAd`Gmpx+kDY6}aZUKN$H&Ou_d`{0?6*eF!?N0@DpS(n z>8`FOO6Go4RMn`cqNLGWHZrrgyohNWYsOL-eHwd(qQrNvs2=`pxmI!yAIGVjwOlsZ z8u@m?ss}IdpL#HkosHaTE7K?&^;N0rB_DAn+K;lCPJkSYX3Vn>>P?i+qpNe&KP_F=wO4gX zjYp92+`|m+VF~zfyRS!C;@)r7|C7<}sK(e+78>1Lo@FteR#E&UvdVsP;Kc@VFvLt(4@jg5Q zxIHRAtnqzRBT1D_WaLy`&rj}SYFt5cd5zWO9;)t3RUg-?);C7x!+lJxJ<0PlQ48*& z2Xhc}7$|8>mGVR`&tNWmL`kc;Ty+nrS~jjaN;tdhB4Q8*~51=qxKO?S{tLqQ8=fP$uilIC)GHPgPWsyAkC zJPNFwu8yWsek>^AoT|%Zl#Mm7q7vV3qejo=eAR=bt=!6p8vPjg`?>zVS(8e1rS~hw!&K|}Q^bXJe-51pQG0H~$G&hMg@DA$DbOE%`7oZ(o;-k;V z|KD@&aL;?IskLXEdw)UAKb70#${8cfP+QG-q^r8rRm;X+{p9(fYR;48s`WcI-rB&ry50aV1}M?=rTy(aMM08poG$4mZwA;auOGX`C%PqAaN=*Qm1r zUW(!){ePC#QLIK+%P4hu0A~(-)SGcFE%f>{`WepAs!MHL(PeUd4%3+Vl0~ZjTMHG9 zvN7VnU3DaEe4J^t`rm2vS#!T?rJl4^K28eY65RU&*Efv6vZxU&0p zpl%4p9fCUb{e?r3HxzY4kv9}|Ls6HCZ{|%!T`DcY-?R90qv04k4S%DI|M7f3m$LDE z{kBxEN<3f+(=QGg&Te42r~yWaATCER8#A9_#xUcVJ(&HONz63nI4}m^$fTHwPL-S_; z?owvjFk8Bo;5$pE;k%G`qI}w9H^Bz}GTYttvMGE{b=TXb5px1uAD9-*32}8WubtD} z)y=GysEm%xsl&K+(olL2#^+8&r<=04{dVeUS6 z4A^IGoNHtAh`G~U%ed7u<|%XMxW<^5&n*OZ&0Pr|2jk5x=k0V&GS8mZl^&Ru%-ieQ z!@O!HB$Ql#97xia4X|J zPn%aRNOC)G-n_sj&YNFZFv9ILm7;vze5&D0w+H4s3*H3n3(DMt#i!t;n}a2!;61ko zruqdxm>!rK7j&i5^lZVWZfWMaq2IXK=wRF1Zl2gne|4*2i7!}fpUa;rRnfoPf-EBn ztnO*%(FK1YUqx?IUIAXGra1)(;Q7E`-6AYU3ZmU_o8B)-kc}-@3fjA0rmqTCx;|s^ zTG+!q#uB`+57=PgV6fxDVeVyEI<@SIoi&RVhPk9!RLwYi7FJQcvecPYEn4I*gj!2N zY+SU$J>Rl(5!R>Wtwn25zPQMS^5={GH0N4wpgfOz$mO<$D8KEVYiY39(<9fiYJN?R z64bopQNqVyiEOiYJIV=*Ujy4LKIGv*Aq8brBKx8~f@gJ^*S2Dmcwl<9;XzZG9J076 z?()c9JOee87l&Z)S~BmnN0OYkxGV0?Q<;kDPCd0ONf-<71fu+bhnrZp_?pK9liz$3 zYEI4j-s7}9yIAe{UoAEv|K8#R)YFpRJc2~f66x8Sx62^jF1e&WEqvPIyFAfT?ZczM zrpw29reL07E^ea7@;rR$V#@LaanO>pe3fT9x6R?UK_YMYRmUVbcX=5F33V5CkWlx< zshKy&{9kRTmZE6+9?ydor--rkmw6pd;WaRYURj{}Kfe4sPd9OW`F+rNg`HO+ubG*= z56t9!ps{GW+|%oUsrHHhFk^nGR{=*0sKJU~-BNT}?Jdix&5BlDF<2*Uk=b!Y64-mi z9xPGs74NyJW8`hQ4SQ@Ejx|+&VEKJTp4W2BXTFz%S$#*wa?Gj~YHavw*X88Bayjb# zSH3SFn3}9SB-Iuy^NJT)D~nC>Vjj2-ZR1`0i!Cd^_S&q=$5#I8wL_P`TY2CwRxfvdkoP44Pq(@kBo za`hkHg<}6|+=I?6LH{P)OK@U!M^lNYT>YEehFRSKe_DMY$bcU^7Y*e+#NB8(Y3t@vb0&T z7v*%WpA6!Rz2-eP6&h9ne_~fF#9OuBif~RXdFzqcWqsDfJ z)_iAD$Eljnb=S5v^6frZQ|LO+?i%XV`LiQ3e_k^~lnJr6jLL+|T09Dfz_khB(_GU5 zHK#?NwdjGa6!ffd8T(s|xDKAHaTn`Woh^TH_`F7A^Sre;Y83LCDYAQI?H$w{UhCvm zV)rq6n}?h;ragAgmNb%k?9?62d+fTEi~_&IeZrMAxFpv1cg#G@rIJRXY!-P1gM2G# zVo9>EjmxTsa$&=`@vgt~HgywgOLBe7>~@yam1eFFl50z*`<~_+Pp+w9d9P%v?|Hjx zC9nIQryoiZgr897XHWDQ<`N2i;9G#+!d&WeISO|@+;&q-bl3MT9~U$ExN9tWZLHzf zSfqiixMu-&@w+ajY`kE;OX{q9mwY$<>ULcOZZe6x6pr#9tc|XAK| zM*Ph$j^}Wl?`Ak}rygyEMV(bnTN-Uj^gM0pu_@MHJvt}&2Z@YLJ^ioSse8>GWX7g` z{NM>b{nyUBB#p7#&JcK^U5NM7D_!Y%^uOXc}T$W!x{ zgJGL5pdVFskm{VK&R_}tov}oC91*cEhq>T<^0Ie8XVLX#JSuTcgzWjUe?Sd;r-+7N z&hjP!y?I>?;`P~CsB?&$Y_KpRAi`cPse^g(%Q%yp*D`m!{GxO)A7y?9KErDxg-1-` z5mR`q82S0O1d+nMJuuzemgLnKy_E&T*mrrwCgQp09^mPKBrry#fi}?t>oW%LH=le( zy?3qd9vsJeOAU*il0B*q_&VKF_L9 zs%w=T@&1nLK{>*_^8?>P>9q5nEVK{X85vY4ue(N}e*ezuL522%cTEV&m8rX?2Bpcc zol8*@wsUn*K6=9)?!1-?<+xooQ7F~jkmFFl2|bKhvj>?Ab{#}{*)H6DD2sR9!@E?k z>?%dueY;Kt3A@b;-b0@oH+>8q*>x>wkG;e0n_xJo>dnE8@fhI|ybaeIb%UqySW|?0 zv^s6+9(CO^1zWjI@J!yyGx4rif+*me0_1$)TVzSuJwN!eeS?L|gA0&Z6ucanJA>DW zUTc1JTPN^+B&boXHgl`Z+-fst?%>RQoVkxPcW`EqW%}-pArI^q?M@5nZz|cX*6^;~ z!>uJ)pC()_ESdLdh_I@C40GQ7O-PB{yx@?>Hms9!p&n1qm>jHk&}y6fZFhoju&N`g z2bL~4vy8w zL9|!xGE0Dp?d$YMO$@Vtoy+o6!&mC4J@!bQN^;qU z^@E<{T`MVd@A*0xxt~gEv#+wwW$Lx>`#STi>S}PFRb2^nX=I)DrJ-X37{%priJ@|lW}~6UZ$5&zD#d{l{ljDd_-K>-%Pskbyt$C++Ri! z^7ejpX8V2ra{qbc{Ccd*9=q1BpA0MHGOlo5S2H{Zmh*_h?$o?1n48NRsyFr6;U<3H z|GkF;KWaG0f;SG@1#xc<-1Akmn(uX0sH?22qG)+5Tpg`{qq*xiyTflJL|n%*9yeW= z@4kWOjC}UC;<1gjv z1+po)M0T)u$M3^f&F-`ww9-zg=5Q80IMYS>5ppWzP4HV8VRfdPvN?E5#)EfdPw>7R zXvI8Ds;$|imeFcb%V;yHWpp*Exp|t_A*Z^j1oSg)0Rv4}Q6FmBj&it3t=0Ob-6%IQ z?FXYwhrs5hx4~AXV_>xDG#F=kA0u`&T|l|B=^ogf$L($U4dvZj-p6w|z;igvb120e zoavP5fCHAxR0iVrVjQe=5jiHBXfDC_nqq$1QBt0{DLB*I+|fkE<{98V^I}IU9W$$? zJ7rc&ch;S^+9)>c2o|jlu&&w?@J2}&8%MNgzWe-?vc^%wrc?;ZXc?aBKISKBz zoCWt;J_Qe0u7QUwKZB(fa(1R;77KXFQVl$7aRJX+yuphWfAEqe6s)kc$B)P~wo^+T zW7pg<65pn9E+CTD(yt97X%m-c&_0w~((Z^z+D-#%N8&elERm7)COLyg$;li^Pt$Nj zThj2rNa{sD)r-V$AT30zPTWH;T2VKWVrdqbOubM)nv%e58rvWZttPqTiLY=J6f>ix zDkn1Yn8nPavL%hGQNd+0shl8Y3^R$D&n#iankPG*3n;^VdQRp_rm%1;W(+flnQT!r zpJ7qUQfdh?^>Hh+<5o;z&#jmt_9`ca%Zbb+W*#%2SWb0S1`$LnhH(Z^}C}YkutUQ*3D#tpgaw3*&VW0*!jng5mN3hh70gN|dGUzMXlAH) z2=>f;Z&hE(4DwOsXrGq!n@?bMbuRMCLR6t3C|W*{?~S;nkniU{tX8Nvw}%k9AzdliS<0+n2Ig=N%sgf>vw}(EIm%3A z((~LWGm)9cEM-KJgpI@%u9Y3r8v;JxR zbNtu&@ATj6U+RCt{}X@vfNlYa0TTj>0=5L~4R|Zyvw$B0ehIi=%R4YMFh20Pz_P&a z0)GztH83bBJg8Mr+n|m?U4wcDjSZR^R1oxH(C0z-gQ^AB3=R%%9NZ&#eDI0ju2egu zf5?Q886itU_J z+8b-1sqI=Pv(D~16qXj26;=?oHS9oGS=jqw*TZgyiSVrOdEpe{5aAQiJR&w?Ktxi6 z8`d-KR0(j#b4`I~p=PqjvkxnNiNKM3@SEi|@V>DxYWz_XfGwilHLiW7y7 z@$T|eynj2LTHtP$mNXMR%t8;d(Zd|{P(abN5Lft%a3e`?(E-28*^!2bPBc_>#jiRJ zq+~IOQpI2zA%@_+fuS^7q|z8H(olysSgu?Le3XQiImCl!T~?yL++_{;BfiOr=!VN? z@HdxNKs(pnV4&-M@Vw;^*xa=gZ0~v;Y-F}cysz%5dT?UaV1_XxJ!c~t?O6bJ^;`-X z`D49Q{#38ysQI_@RPSquep&;+R!Kk9Xb%2fLycIiW-F9y)>P$s%rt+MGl@ChU)8Vi zS2;WU^T4$*3v!*!&F9E#TRBfX-nr?9*I@wf3jhS3%s@BPu z%%7OOnyIC5_qc(~>&+Csn*R)b)kd|t*QOGmi?Kv2)`Qgo9^;BEed*YPp_{RZATir}m}i;>M#s zF;3NwjGKz`9`hk^eY^L-w_`pBKX0e@pMH&0EAI}90Uhq4{*FntitM1+ql3*xw7i2q zxT`}f`1;Uz@W{|^;P=d$iK_ezvo~`hb2W26^CRXRrbCj-ug~nkjBc!I`ZGszO)hge z^Dy&srfHbU^kX(*F6CBTxtzwF&wPpb4)b%SNLFpbnC+O^%uUS8Oy?Ap)0)|hnaNzq z+{!%3tYDf`RlYy7A+rrLi@B7!nR%S&d4$W^T>gm5ySV%Vm;Yi`8?O4S&1}qU&m6(b zW3FNDW1eGPWj;y8`CvS^;U=3oY{prfSJLZ%$&zu#e9kR8uM-Dr_Aq|j-ync!OZ5& ze#~sS# zh3Pd`wSAh|lbOPtz?{L{%sj)q&6ML*t6*jxr6yO^Hb(srX^eTP=ncsIgpvp^cb%mDg4H(b63Rp$B&ioKd;Vj@7v;> zh$^0s2fuk<<^0NYoTxHuOxlS0n~|!1)D)G!Zkc*aG|s61O}TiRYWrmVgI7ld8TD4Y z#wl?HwF6YwS|_N3r)05d7 z*K886wkke{PXY>Dtwo^R7uRqSS8WZz5xDx3G!j>Gk}`1}C-DpFO~CQE5|lK7o&l%e zdJeCA<7!UeUPZ+jxT2Hv0&^zCpk@|x4zBPduK8k7GY_-I=Zcy0as4Q00VwfX@$o3H zV6MW_NZg67xEj}$f{K`Hu{08&2<(QM^?2?eX&v)LERCQIpu|_oK8NyF<||kx+%pB@ zGyJ#~m2?Ia^gceTDCs@s2lzZ9e!~)!bQzyHlvIx2lEIwOrukxa7~gL(_oQDmaN8WZo*qTUI_J|MDDb^);ui18@9 zfs#DL^C){VeMBy5yqUgYGV1-9L1HTE1DT;>I_hhKlIn7#Y)9r+P|^;u6Xl(tq*ui*@HKqaQPO_=vIc&g6qNLa*bg2MZ-58I zLGTcM-2%UaD&9i*P3BwTZPXkACB2Q$I^r|!;wV@qj)U)rli*Q&noi<3iq3$?#e3ih z@d0>JoCix;QQhW@B>i^o)cez=f&6HhvFOX z0)9C_(nWCt{78Hcek^_jKM}XVOX4T+GQOu@(iQOw_^EgR{)BJYmvmSBf%*RoO8O1o zrZ4dxApX%G0QOa3LisPIz?UOnj|H)(NqdxCnO@QXHQu14n$i&rz<1G03YIRY4*?~G z;yqUEV<7f1>49<>GeUZyCLF}?n@S&)>oOb48YnlFzF-^ak7$gng>p2rtqejrR)&Ca zvNqUGhJo#61lU2=13StFV7zPy;&YE+C;2qkSvCQ?$Yx+y`3%?%-@YO7?&Y&!57`Fn zDPzE1G8XKOZ$`)dDLa6DWIWgx-++#Do$Lbkm)*btvIjU&_5ugV=fJ_TFE~W@2Zzdm zV4@rhCdr}TFqs4<%VaP`rh=(*1UOu#fg|K-aHJdqrpZij6h6;}JMv^Um@dbIW90K- zhRg*sSj%2b>`1fzQhY;6%9)%$1A5N%)3o9A9!7 zI7O}ir^;2}G+6{rmuta1xgN}y8^9N22{=P;0%yvXz*+KTa5g^YCTWh`4$hT3!Fh5Q zIA87o7s$O}f!q%+ly88G9F!R7KexI&%;SIX1iDtQK6 zE#Cu+q7eh+SwKZ38w+u(Nj6SzbE4DOV_fUn92;4b+axLf`K?va0iuStRTz4uBJ zxKCQZ{n8$MUE+Im=nd%z9*|DpLFob>l5XIe_-+|Vhou+zmh=IS$Qt0=(ibe{_tMK` zEtKDpLEupt0v?mK!Q(OvJRu{%ld>LoN;Uvb%ZA{)vN3o@J`J9gO~ChLGw^-+4ETX; z37(VBg6Cx$@Ix5`UXZciMcEGgNOk}}mhs>xvJ-d--#mb`3hs2rSw;2$Kb5_}a`_zi znd}RGF8hOD$bn#m91K>nb#5vQnALU?XsOb&V)Mkd6 z4x+veGu-qh>LWm$Crxjm+ziB-%JeqMeVF}BWvJ=POf?-vd8Fw$_=4#qILmYzEHIq` z7n|M#SC~EkSDVg*FPbiZC8m$Smrb95ub3`_Z<;;@kC;A_QFPN}!j;`UlLc2;rFLGT z3%z6KgIC{9;TLJT(g`~gc+74LYTmWW1kc)y1K+osj{0+U7TgK)D_RYp-_dFy{fW$h zMD`|iZDoH0G}~vQ#?F2mXtke?nrikI+!x|*KL)Suc_MQVc_VWWRY&F^s)@`&`w5Nc)r4cHo) zLns=VL#Qn>hf-JcIg}ERIg~mhb0~F0pF^oTGKW%6WDcd?$V{aP_9ta3Wg#<_a*&xy zW9{(?E1HPRRGNg$RGNa!;go0ZC5F=r_=S};TEbj}no+crxg0ekUh%*+{BNc}muFoD zxEykw<~H8Fre~1nB+nAhZJwt*FL^ffYT{Myb=%9%+t<61cdGXo@BQBIdVk@4*Zbod z@xDEM(|l+79`-%vTj6`tx4mBzf2V*p0UZK11o#Cy1vLwf4}Kx|rQn0X_91Q|z9H|1 zq=z1;eW}icFxQAUu}s?GM^xI26|yz{j~1(BC;UG*foO}srpI-aIZxgFXZ*vH9h&Am z2EkNyd=!)ttaHT6*qUdbffYkIha;#q)$m+H{rh{{X`ZU??|Ij7 zAMW4ts!`bd|5?|}eR;u?bpsbZS(m;~)v14KNiV&DQvNNAhqF5?k;|x?qn7 zVyJfm+0y4ZS?V)O4yq9(#^Te*H~s!FdAQG#o}ocz5BJ9Sn{582&Mb3s*m0DD#Qm_w zB0YSvIWK&c`PXn>@K#+iQ^u#Kwx*a#v6*9YBU2})Qtzy!jO^j5SwnlKjvJqvozrb> zPFiM0Hg!o$&dSWr9G(-|H!UM2^ZD$UN#nCpBYWj!W+jbCjf_jmN$Qe0A$3e@M$V%? zdZy-N<#x|ZPfO0#L;R<1jEU&v-bvY`dnJ!dRddXGSeKQQoZ2}pJ0~>*b@81ulati^ z{=0r7+hvR&lbXdXI;N(NP0h+iw^)p}>6ybGbrs(}Ej_hs(wNkqso9z76L@IksM_9{ zoc?66ccu#eb3-H6D;IMf^F)RkS@-&nJ@if*mY&)@D|19vYIZiZP4Z~Wr`^P{nOQmi z7>XbB@1cwwEPJxCy3iXoTkOcBjEvND>SAc;)CrL8Nm*EUxF^QivO{_t@1XJQfbmPl=vfqjHxv5Vy-W#nX&S_?+qqb*ZKA4kIA)^1{QDj(kTFrXKaXC0fFl1d4gqpnVJ503-fM_>c=(MwX&*M=9n>9A)V7Q9;akut5>bf#!~AVweCqJ zb3rW^7usc{bk9u7$l(c8m39+xKFH?tRMqOo2fP0=~e<)o!&6Cdb3Q`3`jQd87<8XIL88ek4pjx2Q)Jv?_mK50Ix z$w|r?pG`)8eNwZAWoD;#&KxlUt9(p$a%NU~+AuQqHtIHP6n6LjaP0qwaOC4Ne;Sr4 zp0`g*YRcp4T#Emj#HD4A&CFIOJ3WucxU{4Z8JXERX~|dve>>~*zF^EYvfr5WhYe7S z?3J38mXw}0i8m+3qv}yjm9Be^$95ls2d}?pKT?(2Cn~0yU@!9bi6EKk!oU0!mV|vE1nd#|R!D?rX?4TaS(vq=)jME_o zPHg;ed8#B1p8NfXn?j33i(VrueuHBA+N7{e;U1EQ+Q9G^p3j~?H#mG$6l@eq|ceE5IbLDUI@ z6#mC$#)#CMp$~g{GWxeo@#IB_I?DOP`R|>ol>ZU^51sPS_wX3}+a*zzx#~moZ{dGm z3?2E0x#-A0b%$-)Ju7v1+C&O$EOE1oyKzO4O*nf$x(Lb9mzur!AXv`Ux0a-cvQHQH=QJM98 zR$5MKOnN$vG9HfFXQtyZ5+jX#Si=ucoTl48KJG?fKT1mPH8wRh<>8^#dnA@V1!r%H zP0C14O~c=$T#p%IoPbxl~1mJl|IBN#3&9Dw{BVW^~yV3HwJbjEYDG$9V=inHik z=8lI#y`qfInM0X8q?YzUF!*6`G{@(&piu{n=#Liv=7=LFDAnMgy_rH`3L-1W9?;FP z95rckcmdR*a{0(Yb$+3GxKy+Qs4HLT*J$(@7!v_d&r3F$7Xirg6&N&O+<{z`QjlZ; z7Morumvco}O9&Pj;D_OTCO->HghDt!ofB2a_1fMAklSe><#;7m9+?FS&Eecx+h}2q ziSptx5IqzJkHZYGP{n8jX^>UffdPwhKSvNoAIL+;h88%Us~#`HR)9tu;Aiv+<(al(K-;z?pW5KCg49Eg`FbWTD$AVM3j zj=TsGHE03GLf6%y=x)2;Hf`>jP7N9)PgIg48?E7loyIc zAX>wxT>;aJGG0hAk{D{9CJ_QqVxduC_Gj`1k#kP7w+4ke2cQ^Rrvj*i2(=^HJ^AXK z9iOQk<|$(Kftw(W#HL2YN%u(k(GBX2k%vi-)>kJ&tzCIqdaIj6H|FPKieb zpsLye^i0sbm_>8ex}X#fZLE0Dyw2h`K#%9?=6 z3e$6Tp^zy<9VSPJPe773EW>02n8*qsq4C^2YNnRV0BgySa0rpOEvCeg0TvJ$83oLY zR;DxaP_4xP^coQsJ|RW>lJ8-y9lnN_ndK#iHV{z8$57hz;kGpHbh-dhfJ zPWDrqA`&nniwjbUl%ap5JX>*cP)0pcjpt6u}JpLs+jGxNG!yV=6+OQ~t zDTGnp*Dya_2)my$3}sq45G3P7$+b@;MV(;3WM8Pbd@hV~lgt|mxsY>RSaH^+a^&T{ zU5Z-KsM=p~RuPSX6nd!`dtu=Xleju!c_l|k;;tn`h+~kL;J82{SC97mh1tGw8dnOL zRUvk;7|UNFsl;e}xQ1@x2^{t1-R#L+hD;y_w+Q4Z9@Slt?%!{6d8pwF)zGxsh39!)f0AM7I_bCKz zi2%x94CqWY%iQqLc`YgDPQxb{4<9RH3{%GtU**lYU=%J#ZjmpVb)|(W5NyPPqXWep zE>-h0i#GSM9OlE}mdU9JX|Xd>Rs3k6_&&tW6gPsr-IFQPOw|PHYnN~blzasK6mz5) zYwBnjw%x%@r7C8tOwUeaW}!=q&n84GGHUVPeXuHilnS2$Bv$$#K@jC!#lhTeE zuI<1$v7;{Ao3Xgs%m( zNHGf_#1jG^IK32OMQ{a}#W`{f90er|VQ?nWUkEW2tibR>6$V!c?5^jjpWj&_&@0NY z0K5d&spMwzFmF7MaTu1HxJEJMSh>4Iuf8}{sLcX$CZc;VYl>v=JZDoi1YXP2nfW>N z&N$4|07!URZ7@ZHIHw%^vPOYM$yuNhWrLr@=TsXn;#K{S5O51|zqGd!BA6+(>9HcGqk4V?;94jbIM-N=MSx1i8AzoUd5v=$zS@?z9efN-8WV64a8s zY;eqTP=UySV+@u~9Y?)&+6v!Lw+g21VR(~CL32kl7~&jEz)Oh3{TP3o_jg~(PvVo( zq8kYIkL^F=C1MY{C|6fNA{12B^1^i0l|P%>fzDmG(_-88X$-1@T_kP(V+NZX|zGVUFs*ZX)mA3AqDfBU#jf{B-t__SWm{bNTb;XSAQYu6r( z%)pBlASN3+-KQ7#<kqV*HHX-A-(o}MZ!%7AttSJiooNGJ&?Mm3QDrtoEt&{ZUWDSW4`60==%C8CNc z*fr7hWF+T!=&)aVjB~{cbHW)+4<%COrXAM>M2r!M@vO;mAh?=! z+b`BG%en*>qA~mm@GL(LB*2%SgBMELzpER0{jIz?R-Wc3EZ#)rTiFX zeajUH=1|DF*f0vh7pv3Qj2OD4VI4OJ-w#9UT9a;Q!&Xtc5rlJ?9iyLOTvgELYd+XlT`3v z1fODG$rmdoFW!-#om0}m$HCHBSYt5Z&*ZXw!CSw?OMi_ND4d{rI+jJELJnrODr_`{ zT@1?6_1|{_SodjjE~3w%lb9BV+rp_@hIm6ip(S)IuFV07V{G>ZVKp60Ajf#1{1 zESroMFu_PQ3b0Mg<;KB>_z1w$z=f$9Syskmhq;2CYmD?mY6B-?r7YKik1s-ndw|{z z7?QO8K`H*C8jTQ2t%d;QO<`8ncc&do`I?V~Nh5g8z zFpFUxIukMs11;n$vp8FW1hJ5bIPIkoF~XgK4G z0c#pYCp;6-E$|b3vI*ANIVXM^Tcr)FqB!n!iNa$e#{fC@FhEuqIBo3PA$T6ki#ElS z!llmC(-NbgnkuLKSh=jhH5Hxm@B$V@q=f;`Q*Q@4?v!EAW8u^t>R6g_h~c*hz9zVU z#fN`U@Fj`j!IHXy)rdloBBaK1ReCLSN;3F>KvPQu3WY44!WygRsu#lVLb^RDWopAH zhak{TXLO;zr18HQFB3^&%Nb;y;WdG^II80*Fj)2C!vMdX=Bfz<{-Ys6r_mttf*-;* z+Kv{i;hhvF@0N@Z?@+qGumJf2z9_O4nh#q;YF4MYksKpVCTj~3rIz1dQ5mKsQhVRk zBjNS~9#XDpkW{K(suz$&94rAs__4WsDQ9U>V2BncL4I3-H&Hmqg?5Pxi?dBWChqoV zdazh|5zc=_%D$ZcHSEYKHsAzH;w;C-6L{1Ti*&_?D>YS)z|sjxu7l3yxq+%TdVMy+Q>B2%bhb6UKcJ3N$LyzcU zbQkIzf?>LRQE~@raTsGus1q|~`#wyoNMHwtVO}$%5z~Pvmq94ZF-;%pq3lo?aw?ab z_x%V|uESW;0JxwMXeBzy<0XK73BL*0BnkmCQ77VJBKU;866df?*vl^K?a7ApBZc8! z%i@tUAS0`ZhdD6r$ZDD}q{7Wu)EvSfjQO!mS^&NNF0jZnN>~QR3OMsix-*tv%0rQHC8WfN1+rcZ^s16F!sN9v%wwnJ zI9H|x92u`|RZTh%BJ88HiQOtf*3KSa?Goh%D(4K4KsZ7J z_VojVb0q*Oy?F7%US`SA_?a(YPd{%o5M66kCsq0cE0)zH*PV5^Olywtj|SD}If;XI z?X#7H$>cL@bgRX*6i5At^4|dCNEqs8F3dY^V136vf4}!q- zco0XJu#HU}!AJuUF$-xZs(twBRF^P>WK)LqUgg9u3Ur-dJs&nu7lW#iB(7!+4<=rM z7+Z>1k6Yzg8|9IbO)LhZ@{J84>lGp)YKdZv>gWR)BVo^k3!W8kj$4J5(7gJ?+$3hW^a^*g}V09(ZNcfx1mgI39N{x z%Y_|AJ=}-u#Y~6embIYwEaa)unA`){7K#JrRC=3tR!Z6c8{`=Atzz;C(u zV6fD}Et9PiQD>8g+t~^Q0vlzqPE+R@;gN`bsVZF$j4><{4;vcxG1hm+L5T5Ay%OtX zbUssWzizLC9c##YiKM-{C_)h9zhkdWJ}Xn%YGXt{{gj-oMVD}(wy$U#R<&^1Hr=rB z!{OisOn-Yt4u|it)(zXj>qJORvG5D@5L@YB4XZRR$ijQq0=AmbyfD_T@H@v8xG`s* zyZh0~*%I6@XEWt2WI(1sd%@1Vh_MHKO=z83U=enQHPmUdiUlG+6D23kL?F=wa{Fzp z2}WC_CP*ZGO_AgbO zpu?c9z>W=Nb~sBTrb%Erh(MPw?@bPj=>?OBrBLAzA#WHJ;9H=n9eg_xbO2ONx3z9a z+Y3OkT~wxBU1A$1U0PcpTjS!{NA8{Bfwn~vBT5qqv|0-N81P)%amTt(8f9^wkyr-j zrU(SJ^=+#wRzQxNIuego$2-*xf;pa>E)}yN+KJLw6)qbgU@0a{H&J4(s1Xbm`r!o= z;@xLinr3`qD(g;yi4{U*T&xhLX;26~hvWuE&bb@hP=O z4XfkWJy1T#Eo8(3HZ7~Gj*4`Kn=NSvf*JEXgGe>WD7NTtWk*OF>vE9w(X1;LInLJF zDgsEI=T;Wsy2uMn+(^-OJCjhG-TLIwwOc{%N2?|ZuQQh>`(@;^2nk08x~lzX5jP-r z-CtFw63JR8-XF#;(0ij%y>s;`dF}={$Q}R^rb%QkGJ<|$+i<}`!v?n7u z#1<>S>rf|)XCkaR4~gPPSy1y7Ym+=bOO=f(3)Fu0s>9IHQU&A58E^4b=xA_h6mZNW zc+dphqeOzF?&vT(o5xD@75od^RsB+#N>%3xxQx>!nJ7_E!Th%S0Ejb<#7kfx1vSRy zGc$0QtIK_i495f~N*K!N^obG_I?QhfEE>j%e9uWernA?~5SX8iuYzn7CBeEg5i4GP zN#kv9^6-P1n+vq+0#mSr)<&ySBPd2|(<$AkSd9)tHaE17Agd}HUeUJCtPj;MSsE*T z7%%zpV`GxW3Nj)LeadMip#PAZUBcAtD0k3;e8a#1Z2?#qVs;Wh%At}~P<^}55V4|( z;RFRapH9n=JxxIgoR6#@>-fQuf?GVSqTjAlB$1FHLJG2?`EZH0G^B}kK!A+!{0C{M z9+1U$h7qnY7zTKH)`cRmQ1onZ4AXylz=us6YDAP`Vl1$b*aUiXj8Z^Hj`M^*DM$lc z5w+pY|4ji_%>ID<>df~NUHA6#f^jNG-2WykKzK(@Y)P@}1TN`32 zARg>(jfh3wc`VjqP-mct)utbhxN~B$cH$@&E<&{q&XsfPU|l2X;ay{5H8^K)EFu9k8ch?5o8|$rm5699RsSP<%8}Mu|fQOFV$(15P%b1Ii^%t_rMEF7u*a@~dNzfU) z7zXDAlo#fqDp;xIHdjRw**Kk|Qr2<#HO$k7YCLe_WRPyEmxfDe;)MqinL@>BH&SgF zgCiZW+GD;tihXg^OtII9Ao~eqG<52YNbEpBMAQ1pZ9Uy6C^VMPQwT0nq>|S~5($v2 zFY_t2NfKWS3OBA}%m@rp(o|!(>*cUs<;Iyf;;7&2VgTtDPk>{O-n>ZBz7c&ymc?NJ z4Z1W6ker6WMG0=C;{>gaM(FUUm%*dmSX{*p=8-g5AYH;{z=fg?ru7eSjVp3?D}8h) zy@IWq>@@}^3>?tVBVgcZthGu)M~E;3&@pdM8g|Bx@~a)QOD=PeO#CG7gbqLLI6SRv zj&+9lQ70_cf^D9Y-0K-EVk0CpfjMI>r#~p7_AFL&6|9$qH$kANlLWTNDpDQD&#orf zo%up(6{Q`@t*W%6x$0^voxnbhc%{=h7#xR7vTOLBxm-~Y2O1~ZEH0*XwZ{=2#z*xl zA_eUSY_uaYJkH6RU>qw3{xrqAn1+D>i$#Yca*!s_fhRT$!Qt5||W3j9H7{;qv5ieDsMj-%` zK@atp%b~;i+Cg6MH{Ge-6)G|rLO;# z>VgABAb{oIAP>Ge=Rx?fG<&>n=PTgBdg?t8%t^52e5;v7Ml$QAu&zeVF2N~K!i*BZ zvyqS%USEWPQ4X--6nY{6y>hG)+5oFDUbV^N$c(2f!`E>vSh8`XjPcCk#Chc#xz`(b zy3A&W*}>$EPnwneCSzk?12x{)c3yE#z&myek2J3AVRqaeI~W>bu!1i?V1NA zHTJZ7NkpztXve(lnkeRB*I;$0iHrOK?(x;S#vxQO^s?#V2CU;255%r-3@GV^?uMAh z+n&;8ViC?2-p~#16l~H?4b#_)0?A{Y1(XRYd@ey9&$f#aW~lXQyGZGhno3vU&8~4* zG@$mHR8GUO?C5;2tMg#H)T{MguO>aYAnLhZO)f#1C%AA1tGePZ1e#=08Vb@ok4+HJ z$W!eq(EL#yDL_3oIK@2FI;uAGPBXf$XPSt)m{;13DQ=W;XEEu9v0zG*-e{FJp(omY zKNT-Dvs}mn9rr#r_B>mWtV&;izhIY8%wKHN2hz)>q&L_Opac)2UBnaYdx5#cB<2AY z#qC1gU(p)sd45%$sOR-{H04kpdVHM?T+iEE&(j+^b3HF_80a(?>)~w_QS06Hl~*@b z#@2aVV0848v+XP zl!+t@J*7c9U*8E_YIe|SoX8&v8>hNxF|lE_aapT|UlLxZW~T!xbt0j-nxBHqs+M+46%;_G@nW8pO(Pe`HA+qoJ~XMHbcBs5~VISn-QZYtR; z+fvc>zYmuppMgiyPvdzr{a|`B8+bA6xF>zbUY+O~?`547wVum5Nou{8b&}M2EbAnx z^;XtNQtPRNHGUy4Wv~(;?x9?rchaT`Xwvgc`Xf^iFP=o}mxy^JJ%NZM-ZXlRC(`#q z*7rchypJj$qFS}{*Qf#NJdc{Pk=IdURpi7yju-JZ24iC2Y4k(X%NX%6hU@wR1V&vA zFyD1o{)Ih@ZXLg`n8m${+A7bZC;=DnCfa!Yv3|jbCovM^yogSz1loDG3_OS~B2%30oD(!^&0wdagSjT8}$~tVBb?1gjp})MLdKt?_gukpp9`As8>*jhdR!I#@;~D zr7TLEedc)qFXREVKD)U0FLd%*&tDi2di`uzt;g>vc>7l8>AR<~m(MarXhKZr=35;7 z$-V#Biv@-W+*QH1<9M8N;rt&Q_4Ia$2(dzimsP}Sa$2ifH$n#;7kGjtgs0p`iU@(D zPc^tKhD(Qo4~gLfzgsXQv3>wkxEirIPz;jV69)Y7VOMr+<+h%6Vk?Tr)~O_x$d#=} zWH^}XdM0Dff^--iGQe<1XCT21zIN16$BIv zSW5|A%IfU0BtIVNNxb!2Ie>jG_7%RSb`Yz*cKzp*6Q?EZEdEeaPBpbGhBEp2-SbmWF-g+5KH0GujM!j0Y@v2VdHcKyScNJU94ic6{G=h7 zpm%3%3f=O4Hy0364+LSLLg4nM$aLgbg*1S2^=PFdWu(N{kr{jRlDCBv$G!xbBxY3= z`U%dZdQ%VMdTETauc$eq!K(b@G!Z>mszI!5RTGpu@@7-FGfm!WKbO&5aXF(y(2kL_f^?L@1VBAlbgrp3-Ttu>^;zU z8_&<;050rIk>KDYGN5Q=9E2y_!gm>LR7fHdm*Qj03oJjT;22jEBHaarSqAMgf)lDj9qIAc?X+7#XSUjSK z)!Jbkne6?wUS*NW9W zSlo*pm3F;B*m~d}&Nq9Z(^(!*WKUbJEKJD?547i0PM0YPlvN%-3(+r2k+Y(EIy#&| z-M|8;KX4u#TB>i>KYeEW*Px zJhTv0iln%FKzd0eoJEBxQYW+0guqIJo+lcREDs~P$11c)Y%2SaQzCYpLAK$IN?3a4 znw}|~%`8^vgn@*Y1Hsrcpr1T$2*eEw6_YcC9Pd(}hTg#o)~gxZwVZWFhN#1Hq+HG{ zhU8bZNAS;Q${9HY3~Q`%l-TyvaMx3FSgIqEBFxH`QgF&;^&XK%h>3jQ4(As1Mo!Z- z)9x}heUnyuU5r!TaW^b`g&b%jaK<4vdga(f3?YIm(phB8Xz}bq>3~Y)lGqvGl~oBH zXq1kZChPXvNiKYmo#dQVPEF(L&ob&Rj8sA_94|r!!=}l~iWZkz$3f$0OyVjTaEB$j zk>G8Q$ysKzPitL`pD607V9 zlnxTi&cQ?gFJg=mwdl|+Sj@LYNu|b)Ca4WCKpzx}c4`|(1k$?ytxaL|#I2C>eAor( z9l1PEvH@YU4g+>W{V_;ys7SpSJ7`H#lBi<2pS^gtR6Z4wxXt2SjgAvkaXt-?S->(| zIphJfTCr8cGUA9$d-u3;M{G~ztKKYm5WFu}nJ(w$grl$&88=Z^aL*oE;O7Lf>YwRMJPBE6y&S3iF_1+n6xyaBcyd zhr2zrV__u}XBQw?!W4TCjuYZSK7(^4u&+Nq#T#?=LKRY1Z5TS0XJEua-yQU+d{1#HuV=+f(li2=<0K)*tEJuy*#q?gM$eZPos zm@#rN9&`gpcSP}uN&d>cCcy%Tu;*E<8Wjij28<7TOdv7Cw@pvtD$B}zA+xv_Lw}{8 zH)@G2vL?IeO4fCB+tlP_A53L--I20vRgqTPj&n;6?V+gP$ul^$q-?Bj_7J2Nm*S&D z1k#0uwIz7PxN!i@d^qG0_4C4wFH7Nf!K{a6vdK= zFG|t!Ns_XK@zq-L_dxF|ovqLnBx|6w*F$y-79!cZAi@~Ach&hn;HW5MaBUO(w{pQa z(ZAE+rXHLnnv>yPO<(1O!0q6&lQ5_NfUOF_q(87{uO-h0wR(L%evxa-2|~s|QHK;K zkzncUzS3#v3_kJOkOmbwHw(Kdo`hYRm197lsz%2NHgH-tL-Q(}8gU`MJOpFFz}e(w z9&{Us*Px+5RB1lIQy44)o#z?{+N>M>=r&dCgO2<_QI723ENyr16D2FLo`sWnj0y(u z_O?MuHCo8b^KLn^3C2Gw8xQ7-_q$63FczATB1qI8-V}K8=-~(9luoHL8;7fj*mPw8 zZ*teY+J%uX=V~N{qQlU~Fg4J5Xd5mO!&PFLB9NlfBaWBu?&rW3Vbp=G5EAw-clQDj zEytM`4nY`D{Bor*oPrET@d}|!EMIqmH-aen0CrHcMFsW@!35xiV)iBMrQ^j6uF!_K z!my!7+=p?aMMxI-BHRsaY%G6@!h3-R^^;K&ujR$>g42KxR{VY&fs8=9OPz_?PG z>BQpPW2f&dd)&kEom);q_P;6ozkGn4G*WqhCY#L_L6n-Xxb{ z8*VLw#@olv+eh&Y1OVx-1a|irj@)-wcu6>R?`LLkW=I%}99F47>qCsF55MAxP^E!4DJ$7WEDCddgQ0N2*4qc>!1z<0$ z>;|VetXR}R??+g?(qSO8%>Eo;4e$Uu2-w(Jj-@$k07(2Bi&VEMMwlW?{}5iczEQ)0R(VAPMI7<5rUn;*5^5zK{H>K8@Kj*v%-XYyE( zAgY*0;5y!B1JbnWymSO_Ff4l#DepJ3}f8lTF~*Fi2}g z%ZPsj_omKdXtk1Spev%;890*RQhoq4htL)(YUAN5)%+QZwOC+L5dBspvPIQx&)+$) zZQHidfx(`^fuVgpgL`-M_3Rw&$@xy5RoHDRt(q*1n7FHV=s zU4?;!+Hs%k^b7P#Dw0QLpfh4ZH%w0$ClDlCugj&v-jRyTOG)oT+~dB-37C#hiuFTx zY(ZVLNC42{4>$&8gtm_jwzEeN0t6`h3Uf&Wb1(sZMZ0AwUd;z{GfJ*{L&-h)EZjjy zaVVi21P&Egz2z+7FfQ}r4L^3Onn7aJN@-)-renFRI6~0fIz*ZA0*+b_Y$ux*TC6yD zFaaKZafh44qX+lT2Wx(Cw%qT%q)74@13tumvP?C4b} z6Sdwy>X|iR7(wrjNw_aY2|EkU=QOq!wh5#g%1)7sThN z<-ml3$;Dv@chpNb3-d#Vo#<9>cV&s5r}Ljg7<4T0+U=N}EU@<~{ZQ3bmy_yPEgJgl zEZI{B1bS_(G<5N*K-pO*@1RT|J#{#yC10Hap;oR67*NNm(hUZyv~2gT%6r-m#dlT3 z53SA{+YiloRpo74WqGSb(~eb^2fA1le3@022Wx3nJp%Y!wxx&mPWt_na{a;qy4SKf&L^Ldq{Nw8W`1`ic`@=8f(mp;n36K#%< z-0F+HxNzC3b9Q>f3-N0c3x~RwjXwZane#AXzAGFL_=?4Ub~ID1#LYm;1O`UVT9O^4!mYt}4aXrl9qqw9e(6pvha0wWrxk~q{d^dNK~KZsCaC0WD!*XdY- zA9YxkIpnfTPKyDGi*rRnl%GYYKtn5hfabODoE)h2P7ZkP$pKp53!zVPfEKv5#s{{W zqq*EE_=n|UP^c2>jbsNyIp%ewTqZ)b+s^&j6;mSpWfs??%=r z5f*-fB6FPh;ycEFaR@OkAPDu<2#MQCBqpV^CI){5c-XErj1fRc`H*8NC>U4f<;UIdaQ0eZtr+i1%VX6-Tdm)9Kn!=tG=}2IJ5jD@HgMIvuZ0 zQ~jV5Ha|_3BPRQm`h|i}5;MD1va-t9pB<1XJ8wn>gjIJEgnCOYC9u;$STn$}rDKLb zXYt9FK_Ih${vEKTGGjnB&mCNNX$jRWc#IU#t12k?yVAP{ ziZYh9=uZ%CxQ)H;A|`dBph9%MDnK#)6?ler6wzRrYd{tV$Y?^JS>Ol5wWJsmu~rW7 zkfdY>J#bayIspF1>)bfZlBrJCqz2yUb&LUlUaCzB^oye_mUf!6<92#P_N)0RFw&5i zq4%sp4zGSf)~{mmXO#G>oBFM(iG<^%nUmnUQH^9wMXoYeS}0`qfX-xj0w>?9^3xtm7w5HzU>Oe<`$cXDw}y;*jls8Er^YL~WL1uf#Qk`>v*c(dUxwF_ z%wR$R4>r>^dSQ?dKyXK-Tb_8&T)v6}dbtDxzVu*v4O@qU_4;EKFA+V+^wENq`6CN9 zShD9j=dc8jMUit0&LGHY&0?%~*7-CPGf_g%;#%Y^R(F_tPZtiOAH-403)wJ92Kf)! ztapH0*RVC^)Iv~uoRig7(imEDTx7Rx&?XGXG>b`%(^%=PYe6B9u(kq{6`p7e#Lnms zJl-(I=qipz2G*NcR)7T+;c|u|peA(|%qUi_mCAd{Sf~-TN^2sxw!}*LV5Ny$ zX=vAW$iijZ)gwZ!c7002NV`xu>{fJ%On||q0BYex0zb{zQOI_gWbxM)uF{nQ?>AfL zxY+eRhXa`mi!V83l+G8{kF#rPRo9dOCO8lYtblDqfrsC&gyf!r2oQoM_Fv#+M@E^N z^d_dlJ+32M`K5y(ZZ>o+(NK;Dy4s756ZJNQtGyON2gp`|)RL_bvMZ<&^qj?WaH%&e zi>0Wtwi7Lq>ebbSik*bQ@@g!@!}TGm-mx2NK7|^%#vRguFL9=TVwM|;6>wHOeoP-Z&EHyknld0kUtg%W=yYEHHbZ!8*&;lGo zxum*TxcyphCd8T~GJ~Z8teJ#5#r0N;Zw3=B<5+N!3bERNRm9%4*klvOIOJ%8Jt|OfG)uH zVJ?;r8|SEBj`FBb4Ma~?kN{gZgmp(2s-^t}`Xg4SYyt5yyI1Lj=+rlZKUZQ)l&PAs z!L+X_nIhhE<^ep-H6=5T_p-_0D=%?1Db_w0|=zKF028e2ig zF8r^p*RLnhaWf!vf6cm^!$#jkR1i9-X(+uU2%N>&ag>}hcbk55$m}yi#@s({P9V*M z8AZrRppUtjkDcI9jqPwiZa%RxJ z9Qr41o^SfhL&n@*FE#rX>x_a@)4)W7{B>(1U1Wf>Q>cf`!FSebx-h$e_mCyby6X^M z!e6iq-Wfj&NXNU57us_GJ_Ipq}sg&@{0-6~>NT`Tg z#XdIM3+(L8DR2jFgR_uBu&iyfr6$()2#=pMi4Jm4MmW1{OvhQ2#~RpLv)SkVgQzRg zi#IrFKxo3=jiuXo2qjLVyb}7j1en?DA;+5zUl5wLERF3lmy%r>JXluc~af`_FEgj0gDJudBG#0za*Igap* zNT)fZt3ux8Z4BiATQ-dr9zhBx5lj=LK-0~}wDdx*n&noCKbJ6#gi0ccLXvg{RTQQ0 zT0&1_m|-DXfIJFg3W5^QOJpvfq%?>nFUXyicoGZ+1xr-6;aeKy#~igx#1uqH0m3yc zXi;Kgg9~0LiCeq>)>wVa$@D6qo`Ek8L0TH2&j|cecrzPE0VzqZEL}m8HA^quk0dPI zHBc#;$jKvy{QsZ;?^EU|hImS}5a*#pWz_`0A(Z72d`b;Am~Ux}S+$^`r`EgCd>1$p zGNsFXS0FnjWUWJlS<6wV1jL$kU)s~O(B~(N> z+EIFImj-IdS`rW?iCL#GP|lkU(kK-kcD!l28~?}ge*|bB2b>(6iLpEJA0ufbY#b0H z?fQL)u_98%#eF+ zJx$L>s@s7#zdp0p)nnGzO1eY9dJ!$3u~;Gw=LH{d6(gKfYStbF_Kp#oS8MMPQ;Q-U zNYSBWHcw~yi$X(``1^$|PD={2*_S3d_E7t>z25XzlW4sWZNABvJK4I^_^S-hIv4Oo zu}~5?Lq4F+NeUtRRgvPD#8c0>5ha28H}#+n;*uf(>y43a(IlE)06M!HUj^hx3n$|v zNUymE?Ps2nIg2vF@uU}+@O8*ui6hLaXe$gMbwcmBkNQxQV)g?PwlXZ&jXErQL|UbE zA4+dZ>hVa6MPoeiR7+cbb4H{ z8y}<0Sp8Ba&<|7SdpL+KyiX?8SzgkM5}Q^#)KmX z%YojDwQbwW@;D;Z+N;`&$E`dm!#Z_io$E`=5RoJ3NtQuOQ1Vf>vpyq z6L*F!si$2$rLunc!ex=??+3nBb~~!Jn#!+`qA5Ea<%|HghtM|ak;;L4rN_xPihIfz z?fY;%cjJuDD`v8`Y<|;|QAG)CHTiBer8}LD^b+!vIrWPw-*N5{v^1oGNL%v1sJg=P z8?@>dhPAM!NK3A%ZOI|w7*8+0y*34Do!(G#9c9Ud<*zwZo8Pa0M7XDZ+v8LZ4!>4Q zQ>`~_le0QS+U@qgbiATG^y@u{R+6T}v2X&d5f4GX%gvllleio0#8F(*@*GAI$`MB= z=74)6x2T0j{}5$sybY9i4YWqotY$e!DnfVBvEy2oLuGqZL$;&z)h-QT(eaeJDceBF zXmZhbLQTElIR01AiqOU&ZV7$J=PoB@ijKde3(`cbG&Q%ow8U!IZxg7C61rkXejKS% zw_bDY7<$K9J7Ip;SJLkTgs%G3a6T06kNT7t^SjmfGkyCm-s5I>v<_m6y<1OH=5j~bq*T=b#bUXMa8bKZd7v0#3Y^y@*b1!W5!V8oLXSND*D5Kg-{n!= z$fqm6-f%=W17VIlS~ZLIhqTxzPpuqv7;;>A0PRvulh_gZ-F^sI!D*eq9z7AY-r0IQ zF8OX?%pFKyKt3IdeTocv@+PJ$LaIb%naY}Rp-3DW3EDLM^-|XIY9z;zr5JH*H-_G2X_LTO&*pc!g|o}ekjiNGJ~77@s^voen9eM5%!v9I&6PfeMr1b3`eSbJ zV`^*j{5FwvwSFrv-A#UZlrIH98T#D3l-Jj$q?Aza-NjO=RPa(opmS2q;mk{Sb-g;h zc)_m2>xDH-FW1xkQt2P`;v$$o=*L80uH_%Egh=W14>pRUPtl8u;8*!D9PI)L)9=I1 zRQ0`jUbzt*I**|jf2&`j$_tKUQJ;jDe!x$EA+M*GCxW|L53ZLkLXEyg6r;0-DPy#D zOBCL4w5daH*EUMq7{*$!td}xEOXGfD*We@SfoxR5-F^uXDx-JX%T*J1_yTc9{J03b zCmO~)+mG3P1X6%fu?$&Iv@$c4OVLqp6sc(Ca)$8;WI5L|@OcpVsh4roq?|J&aX$d{ zc;=?grz28yjOPp~HA5W(O;5apXnM7qIZ|R)5;Vg4eZPYrAMqaCe&MvvFXU5iBtK+U zZC&Glo!Z2OAdKr&Zsa7-`ZlxKSuZWUE9ybinXFOK5~_g@Np!O#jdF&%eyuef>SW{{ z;xHWPu=-GX#rI1eK_AugT!nhOqaGiF=FXp`Bsa2a6+N(eF40Is`! zzEbPp|7XHl2xp|tzp{GhYV9lKN#|#d_q56U;>)J~M~Pwerl)`jrwel~kvdKeoD#vr ziPb|(|84PlA6e^`ox_z2qTtO2z^!ZePn%2dZi>I*HdNd7BXAIBK#@SOM1 z84&oU4=|>_{u6KG7+`DQ*| z@tbRFeYDh?=25!JN*NEY_QxAv3$Y&O&5h!T6?0Rg*l^ZZxxw@_PN_2#4!e}(rXf@( z&;rmx&t2#@rd$-AfNzt*TdkdAc5|d6CpZte(jDo|@9{k-ja)~cI7`&IMYDHxxoJ&h zFb`0-jM3GVaRB`{`*W9aCrTmj|9r5}!|?ONLQGbF?iNi*e>B9d^e-)0^|FyN$rGyM z-6L9J(S#JE@{oF~(Ap6DChDi7JX7u`Jy5%2nuxA*XEcP`1&*c#$8uh-jQ4t8P8_d` zbZRM39-l(0BD_Y?vg*r_Sgrx)s-Ts%Hd8#m)7Z?dnuk5Y`B29Xl-;u;bE2BA>94OL zYAJO+QCN>ctxG*M&ifM7f4Lv)Sq`_%qz&Qv>u`SB+*!L4 zOG{!MQJ=lDmmCcg0u9DdgSp1}6^$9lg-;YG|`(GTRS1|){ zQ{y}}uwGjWl|N3ZN6-w^rWpmc)pAxms-`v#*a9p8f+(#1>_eodw>L`Z{NE0L6`^yE z*dn2Sxlz7o3&#KxxhYa-PdslPcny83k<>TTrY3c(tc;|)I-btgBh7Bo>M8tJU+(Ip zkMj$eYofX9_-O~CDSX-F=-Ks8Q0h(5Jhd$dd)oB-)`QdERex)+vH|df_C`pN7tC{c z1L=KzX!9$TQMY%L;V8vy4^u_Qw5Tsbsg`}WfZpJ`lBl1bdUm+#hT1mAah6DFTxO1I zqB(S|VBYTwqQ zsDZ!qd)|v*`Z%#VcrD`(VNZs8+ZwzL1aE`E8&>ez9NU7o?ZMlQ;B6<~4x*J4QnJ3W zWPM}F`o@y=jV0?FOV&4*tZyt?-%xVLUO;{XTHl@6i(*=+4fB~ttN4UB6kizO@q|Uz zQUy-Tdg4pv;XK!4uTzaf-o3c87bov11NJDMXXFVB4s}q2)4EU#zUQT$3iA$dJ@77Q zF#5L#xIKj4%HnStW5XT7vs^32Mf?2w5PDD75T~)yS9ibYejDtPX}#VI!1rOAus7(2 z#%1o3Qg@+LY?h0xQIGO%FKCMTvKcJSyz;)iO9y|adhrNKE1Z6{uNhDGm_`0tJ zl`Q>{JRe7eU3u1ex+RSSc$(C5dJW%~(+s~9B>=2Mq75$zl+w1jQ_8x(1psw+vH_i_ zb}bsPscRw8kwkc+vvUo@JCn?r1a=b0ooqG;LOmz~uWjwDaznB$o#Y(I_Bv10VZZZj|Qm`FQh@=b}Q6iGIhkMPMO*1Gl z-Hb+cqSdJXMOyTWwlWUrix0+ToZRxiYO-%X*AXB=b34OP@30(o$fP~FWO=~tc z0o=_^3e}s?AKk4cndnX}y%h-RZY2ROy)%jMc4DR-FCBd8u&Ewn3Z#Co{e7SP{h{|<(wmOc(LH*8g#1Fy{%`bqoygw6bE`}^57Ya~7P3ur#K*NpxDjJ0g> z=TY!m*Ri?wophH3-GN*-knZHYsZ+2(Rz)-jwT*Pyb+GFW0j;O&;2M*}H)%A<*G?ht zrVZ_Fu3Yf-9l#v8Ji$j&S^XfoAelNUo%;pF>6i59%gt-LmcEV%K1nlQ2jL2Xew$sj z6SPEX#P4!<%bKf~zL#XrJ;|`8A0<*JrFH+pSOKv+)qM%Dms&=3_am@FnjC&<6p480 z1D!5TKi4wf5{l|+S3L2R{MD6jG2pVSJQt-U*>&j_gd~%x>$>v96)7G`Q$6bdn5*s* zeb?dzVitJ`dMQZKVLvPg{1Ol-OtMlUp5T>bU?t0zFOx~LLfy-k(#y;-+uzU(mZMTa zmu<5F`q3E))BHc#8BOStUFx5qULM!0M=+A8$7d9yo%%P_S4#V{8AX}qHuk77otKi8 zE%Vu*)I4#hOe#3kSGHwd+ABTS1HKce*U2pj!~wD%EB zvD~65mRlsnato=vg(;R>E^~Tv)O$s7n_6DmwcN2GnqbZ}{}k=4KAtks$5Y!QSVgg^+b7U z`AUa&f%Hm+^h$zorBr_9dZWWGq*>SUW`GFt?QA!YroYy?p=;?Scul63ui@(&14dcC z228koJs&qE*R1U@O{wcr;3W1{Q}SlB&a|YuA%{Nz$qf;dWLzq=m)Jz=xnw}3`hD%D z9=riSJP9Cv$mqWh0P*Z}Tkdp2+y?jQcHp(mKmnsk-Zmw=#*}HN+Qp9?2pYnw4PdY> zA6RReQ%f)7n8LT^9(}`b@d^yH2xCk8@vpgs#Jh%%RzBA9ksxa%`Do$;B^#u}k9Lbd!Z-`jW+;u9$5>Dsel-C<`2}H}Xt%LQ%ugmpLpHZi`{>-|7uK%m=0>|q{GEnO^&8Tezrm{c!G8P=jCxHNxGe;h_#q!Z!DE?-Tly~YPf$oMA4=Gf;)f*grLSp~ACQlqP?+dA z@?i!nx5=|vB0nL|Z^`px^87xZ%fjDF-(}VbU^uw};~vO<>2b;hmAsdjCJ+j+32ORb zr)fbbYUVri5RQ2=VvxO-ekjkc$@3?aTu0^g!+Zi9KAR=v6Y~6)JU=GS@AC<8@B}z` zP9%H4n;C%5p6Qk;f0y*<0Au>#H&0r5JaH#OiP;t@tJ9AGe84r zIY)L!B^x?B%^E5!8#?V@d@?);KtjqFNN9+=N3HI*QJ9t_{WS++ zUrm@x#=+mt2*0ep4SrdD6FlYo6QKpp{)FBSG+w7Tz3vht>Lx}!3@YBo(jy@L`_Vtk z*O4mj7gS#d(ILpXACdR6utgRF)nA0R43KE!CdJ&Q7Rm^qn6g|q+Rsfed*25J#pKsKlban zt6uW@kKBIgrf67dK z<;2TB^EX5PcyQ;hjqYvz+JFD$^S^ZI?st9i$ycwGUh|0`960*r*PP7$!xjH&^zXla z>gHQg2j2P7+$~Rjw5{d7x2p0pLLtA=ti@AWFW;$-7JksYlhEXv)?}(9HL5>jt&(#2 z^MO{i{CSNz1k81fbUc_ao5B-za02QKZ`&(Q=dRv6(!Zm>f7i$v+^cvTSGnS<(yYA% ziide6%tU9$vv3VI zoZ#0>?H4vV=sdOjB~ocmb88}X9N%5b)az5r-?bVl>+T(nxgEIO)Ek1?4RFtu;-ZsdHVOo4Z?EVV`tw?nXlVLO>?EHzZpS znCwQCh&N4b8`|1f9G*?Bi8dA{52`IN$Ie~vjG=Sa6R2}HtwHJdW6hUy*RMkkHD%6S z55`KJ+u6CUwI!MAN%gSmbZaUJNpx;ELSX!KBPjY8N(jsAI>(LyG^EYcxx1d$+5r)S zjCZwDEx~VU=^bsU)2Y+lfU}(v8qghYF@WiW=DCl}O`RJ{wkJ%>zR^9$4?s_4d>-`E zmfExq7(90xMU8Dn^U-1nH^7a-*Q-oZJA_i} znoeZwmSIY|5m1kIqin6e?cKLezOd`F?YjuX@{iE56!E|dO}%q(06OsO1U%gw4!h31 ziCu!A?lzS3hF0sUP^`TVLiF4R`S=I|k{dP}LC8ni`;y7ThO5kmtKdmVBDQOJaD6KZ z=xOV2owLSC{L4cEODQZI+(8FswAD!Wj~m2auJ0hL__fLi-7%A@+0 zc1Wthw$>z`2(Bc|@|zv2$r$ypEIO3YByQ?6mTXd43`uF~GSCy?H^}4j1^7S8ZvO%vORwPDm#7rN{y+C6n4N7>-40>f?(Q~l zJee&awBL3a*z?>MI?=sfr@VwVcO@Zldi1$3fmQ&9{7Qkq1!)|R_OyY6Kvg}E999YK zY-_8dv5fSuO}m4KXPASmNxNOy$)=v?v>7_Cd#WO0lEo| zqdy9<$&J>8I(O(Yunenel6J_0$Oq2b*jzx`iH2`(YHMw7!V~-n-Qk(2E0J1Bbgi_= z;DWYpG$iWH8x49x>tXV)Rw>sj9GuPal`5J#TY2Y9AM*kq zbAj*k0^jEXKj;O1&;@?P3;YOVSu!wvR@PFMART21m?yQeR{KzX(T6K*FKcaY>ukdd zhJno@WAKha0u;TnRtT5j{JRcb#O1qmELjV|wtN>u9T1=PfcUfv{G=E7Nf-Ep7x;t= z{Hz!F*(+M1pxhPqUC@Ehc~UDK`tOnri6#mp!@uqAcGy{Z>(kIX)=5|Ui~h$rvC<_f z-^wP4#3l}JO-&uGYn$)~nA;4hxTLi${GeV4l7^bF(nG&%*Gj)UhmbMR1R&r^74(X* zM&GY(YD*$*Te1n*!SLFa?4}S~*@@aaITTY&uk7w=>&H+MsCyE1IiA>8=MTR$^X zc?=PYTQGDC^=(s~j|YlYD)}?Gk_STw&XUBL^TpZtNU?F^$i5@H(ttZ#$Wh}P=mnjS zbii=pX(jPNXW&4bp!P*w3uFa?9^=5VGL~AtgQ{PFkDigA6GCH_-g%)SsMrqmZLMu2 zjU`5+&vXRMqc z?vO-zS-y~0#MTK46}XC5POJ^eglOIfaW1TTp9Zsh84krCvXYU!Ih%L6`^wg}sdQ?2 zBK1IO`Ch)Av<@DD-}1{@>kWr)+|?sg1$)_2Yh-)J^sv_Y#*BW|6< zsVhXq@G>MdrsO~ssh+2`u7gWO=VjPdF+$B_eR!-m_dgU3dU6_1uU+|Nq=2Ai@ z&ADZCO=s82{jF+7h`VQHK{|HP=~iQ@`^aHqP`6X(p6FUxmPs0z4^PPOy{Xe`Yw(+F z5|tsDLKZQ&TJT1749I&xCvOlr` z1Uv@IYk3na4FG~st~Cs319^61IC^4TD^wxOc~U>68nl_NC{!)}u9pC`rC$?>9Fqc*ZLz%}hxe6uB>XHSNlwqY#woYB$Vb%maE!a$j#pzxa0@%`RL3#ra&-ODBaLkP zD{0&J4ervb7mgQk;aQevITtF?(KDIN*N#KG59iLNBh{pfIoJ}_l9>H+M}~aKMJ+h7 zIPIM<+)MefvJ*adxDsE7w{{@FvNF;AC?Br}IgrU$b_()epdO5so!3E1z;uRSAZbBi z(?mAA{aFVop^4hsHsF2fQT|Kg?*pj^V4rOWF^xl)F`nHBRBZ3txob@B@|?-T7#i1W z7;<}YdOgliE)%5%85TmECr2K{Xx7#V?*R1qC+JxKP#pF;+t$G&3|9Q$2ADvg3zBdf z>cHot$Y@hGb@JiWIKLI{wRXRKE4bk8pr=M+%8B2 ze+248nNa_hhk%~VE&SWH@&&je_?BAv(&iS_$kedy`Atru$_Nt+21YU|`pa*K^9DA4 z6Yvcm0Qg>f{%mB|%9kKEH<9Fz64+$1#3zM6t(ho zq=)I6TKP5_`aSe-H#C2i{3JSIV}fNri6k2Kqaf@@2t&g+CY}i&PwHr=EeUTdi4`z~ z4Yk!N0ZYvS6U&8vL=vTrrjD+ay4>53P;BZbM!+Cm3S}VwvWh1q$p$Fps*~%pZG9`J zY4FdQ;FzsQt^7;s+(RJR_<_eWm?Mc2?)fIRr3bnzF_#jqUEQ{wSB z!NBDcuHU&rrmYEmME>bIzxImO4*D6+ceK$@1k2V!Nb4lA`6`)ExC%NlX7zr;B{8P! zd>5n(@ZPyrL=WG9G&R>)ptUg^(+#U`fexrfMnV3mi2sqe!V zq{(sy{FCT9e|=kmQ~CHq_CJ4c&iAjwFbBh!J&uVK zy3|tVhnVjC5JzgLs$As(@8tQNcf;tnxy>dM0lDRVGAXxA8=l@N~~mn`<{nW=MFqk&19E7;+Pyga=I z0;mURVC8_<;1}YE(6&j#0g@lOi-H5Wz2e{L7e5>+UJGJrShyoJL=%>+WaVAwcZ=AU zRV3Z1^CQqC&W|d7#;lEhek8Q<&yP^VU|!|^uDnx2UkgQv1Z-8%!wEAMj#I1CK&$1& zTk75nAiiHfB<%EBQ9ECYPdGw>b+|(DpKXGXZa_x(?EqKW(G-I;M&$E%NxuN$-Rq%8 zVG18QJN~7XUr#UZBL4~*ZPHdB=fE}!N;!W5Jxe!%a3a2h6*=?#D8@64n+pyBzjqll zHqpbo@~peVVq!dD4nH+ac>dJ-_avzP{dVNAluo1d_w0NA4cu8*f^lFzxD?@6A1sGiLc@!YtoyUG+%# zjPz05Ws#r8#ZSBY`nC@C@z3B6`Pr#oeSO>dwn~7FAKE%JFxWrP&y*6*H~gO(nwj3& zm)qXAb^FY=?K`&j=eBPj$n2QO=638H*fG7MKbsxw+d7rmHZ-+!YhQnMTi?*mf!xk* z(}O#=ZX4>)?bxw%db)pLrhl-1C^t1VG%%By?ngbDT;Ei7U|?W+D3=2${oA&0&FT6cD%+RM^!07uIZeU<)$Kcj&{euJ9Om2GT%+StlI|jDR?A$)RV`lr{_MyJq(9Z2c)7u7fTl;tH zoEaR-=4J-BO>NC=o$B8@xIL4d9@sXtb!uj4dZ2Gd-_TGtgGJQK&jEJt9eHq1X8P2^ z{KUWG_ZN)cj)Z9&5=~<(ma%sx%-Vp1jOq4$u4$Q~O54k=jQOR6xrR6Pl=HK5)%2gf zH4OqBN(Z^qFp1`SjTudtXNG})`mS^y(@W`cZWfmW=Wt(5x?099Wv4UcQ|Z!7P4*J5 zF#?OC6wXoRiap22F+&50MOC?qQ|=SV%kIIAZ@B&|xY=l8j<o&L)jhWtcQf%Cl&&m}~<%^Y* z&nrz;PAYp(LI4h&q)4prCbpA>{FIG3S(dX6+{#&ywN-i;nl75Ghkc)xbuKeg?Db2$GUynho6Jo+>gn@pO%b5HyA zHEVBv@f|PzK}VuB`RKW)tsv-y$wZ=mUEkU@Ew^+wC7;$}`VOvXzhzCLIdN`#GSU3# zZGFRimwO@W`_?uk%%jb}n_Mz|*LeAwFMV=X|IKe(`tsY~^Yzx9*>C;r*8jM9@|BOC z+jOq)T=Pf!&NaRL(I#x@OKuzhIKO(&Hy(cD*f(GLHEHp$_H_h+C0YQ&S%IkOc=MW# z$>Zbw8~eJ};G=D0`#qV;9LA7pso1}vuakkT8(WX%vZqVMZ2wh#-3)2p7%nsx8`2tq z{nzwe&G@E`SA^yyFH7#hRm`X7(?|D?^j&p%NBEE+S9*hd(ZxD+xPeEAKkmP z|N6dbwME@^TZH@1&*Z0bediKed<-XAOw+lKW)3F(DTv3maz|i zdFUUn>Ha@nJo>R$_kCymH$SxX*}t@S``2H0+28&6;e|Ku{&?;;Z~puno__PGPu}o5 z@5sI8eTV+f&T}6#D}VjSKiu%_nHqizjSin=&yX@#Gk+U{=Hq#oBD5Gx&CX#q4)pA zOPX7*8&{g-z=TKwa&A5V6! z{d9BpNB`s#ul&yQ{_h*-244ThZ~ya$-qySPn@#_8?Q%gp7U?JVaM0*6dKxmZSxgQG5z0hH9oj;Xl=&e|(o?V!(R&EWtk#s3!399TxlD>P_w1F#I;QvlEAMATp-yQC| zFZtqOTfy10XX{mvD_@}GYTrh}dwugIeeJHurZ%5kz>pvpVCXXsej+vS+U|Gvz5B=i z^!6|8%s&0GZU6L==|6e&$a5b35AS^4?u;HuUJn&yH`{24)?wWem!o+6||Che6 zUUAROfAH#;ZylW9{O!!$fAp;{jDNK7j+1Xm?!EuDnZj58=%^&>mmVJMI=C?ln-OIk){m(a^edmXtxb~~(U-hR$uSq}j zwN2l9`vEB=SWC)35)ewC#_-)bzd^KezwWzngjgoA&>B z`m)=4e{|q4{_I=d{z*DrhG4VgEc z-T0f`Z~k^i^#^ahd+}>G{$Tts9(!>5i%-7lHGlZ6&mZ_ zZ#?#$_kH@%&M#N~{*J@Lm%i;a9XlU?>0Mts`RQN&?#pMt(f8c99(wj~@BQH4UigwVii<=)0Hxv-!lk@A%xW z{OgXtdbq2n<^6k;N4A((U;oaBhKlFs-k!c<$BqBm{kt0;dy^AP&jqGV)??HrPg*_v zukHQc_@yVla{A96`CrwYc{o&UAIE1H+mJAfC1cM%<{X1YDEn58HM@jtNhHZu7*Wbn zmWasMQc;8`$)k9(WKD=fC^Chl?7U~RK0Uqf)BDGJb-jPh^*b|jpSjNY-Jkn=e}8k| z=iKe2m~0-$Eee1MwR5v0AYSC^0@~mY_XiJv)KsEFN#j99WkngNcCbYmuLxj4C09qR zg0m8Uby9M2#VYTE9Cqh@P;G#q@D~6!vyV4*mZ7cSja%gKX!Px!X-Gl9f_hFtgb@HC zFbhIpl+J$zKq!}?Ooq7U01&Wv5DU4&z&ZkLzVHb`AQ6Bd_$7uAxb4>v_;1?w`=RHq z^De)@?A)LVeAUsO-iG2j&C)yf^u%MB2`gJiZU?vISPY&Z)2sC-?U^GKe8TLNVYd~U z{yYp(OUHhb!N`yidir?$^eOfxQc>uN&MJ>CkEYTvcQ1?+J8(6fQR z$Bd)7VV*Gf*<;VBbw!8jN1jTU~Nr{zJ!ZcsoZR zK6{E(|6HAyVUnvJnQl#|aiu*aGdz>lcG+-*PmZq8SPvJo7}zTyG*7oA<;laj=!>Xe zzMQu24ZFROjzO#xA9ktz7L%ESLedbr?)JoC#c|827ZmgZo`>|MDs7G@hHq&{C*?!| zB)Yp0?{Yu!4(W&&rwU0J4E*6@0S@Z|4at-s9-TNNyARHbriBJKke8|(zdOkEb?gJN zfXpX^iG4$usW-HUL<<_LKCSa|5rUq~?(Xdi{ZV#Zl>q<&56a7f%6O_OgKA&vp*%JG zot*tAX?4@r+Kw04SA$90D)U3#5%pxQ5!2{gniT{XLi`eh?|WET{WE1ZQG(s$SgZ*m&ctM+sqzsp;}wW zbj68EYYF zueyaq%FE5DW$714vt;YhT)_Af%M1WLKqpHpOCxIgue0oHzWYL{?F?o1I>pStPz$1% zJ^(@aOAJwr@M{$N98Oxyh(eipSWMY}tDaGHk3aaToeOWG`}vGr16w-USI7 zR&~6v7;g_a&tuo9h;|rA#2Cb3?-eO%^G~vI@xkl|6m5lDQy(%-MzY2jd9k91Y9Uhk z7kxY4A84w5kws+mt+S8PiGb)mrxSwMWYKZu7v7VG3?cI*{e=0)_g;J zTk0R!i&S9p;tvA_hgr=BUXqty>ai8=OI$t} zwK-}xXw>(wd8D5oW-DMT+hWYv{Xh*M(KA5&p8CRXv^%xV0@W~o2fu+WkhXvTu80Se zsr&}lLumOR6#l;H{y)+C68S*MV84EXbcm-M?~Cf;k@^cJqQ*t713W~rjguXhJ9ZZN z0YdB)h9~C9Tn0&-G!w3;+5zHyFwgPe>Nn908|PRNsngMq1e@_{;O8$@kVk#^Ukrl+tnGl;iWAsP~K&W?rUcI%hBG!wmIY*(Ic03sOcO(}x>oFPyl{ zuE)tlx^&|0?toQz8pfD062=DTzO8sJs#{fuHNSL2AV32=`Y3%+B_fgRNK=m4P_jIi zeiPm*vcr6Bf$qV5A?7diz6R0z@_(ZDPbb2Ep*P!C2t)LScn$-?Q>knfMTDOP!ehfY ze}-SObFSn6Twaja0*laO!>qiborkSv8BlUA|2NeCrKvk~t=UpeKd__KRvLI+R&=z# zHPB=iyhP6LkgXRB>RRi);P^_pE{^ONFQ-aNnr5O9%J{-SkovG?)eWmO{udZ{RAE)X z%$fE#D)7nSd+|uRhFJaKX)~??qiYGHW3l_6gw?)EnxV%<(!M??Ehgf#^l^DK;DX$S zIfh}MyFA2$q8ql}gmuEnZaX^ljL`OB20r-4DK@X6`ll|ssdc>Y~kEUPS(yo&eRX8w_UAD zvAD5?$f!pq7ULN{Ne2p*cXoXYthve)%&Mj_hir7UIPaF07VmOvxTLuj7APE+$pyHMYjW)2YseH4 zZr6G(^SWwQ|B-B0uYA}}acO-q2b&3tsr=^`GMct}SBFdZ(X&tb3)iHRY9-8XmF!oG zCi^><9VDajYp&`|b9k?umOpTFb^GEoeCY(ea5y8n9FdodZjoDn2HFcs%xSJwi)R;DDFf<2u@s4Ib z*5J|b>fprXlvYq`jkVs^u6Nfaa_=H8bGzJbv}YqKX9Xl7QXu;x5%PKgsJs0>Ut-<; z{hMv_&3w)ZFQ&@1&n7h!Ey(hn^^Ac0-EY=3Gsp^j|1K9*41W0{0))iij(M06d%OZ$ zgjWmQP)%qP*A=NbsB3>~f(6tB)U(9H#Gtxt(E4Vq)NRUyK3B*;)rzV6IZ+?E=|YD5 zzR&WE>b6kLmi5Bm_oFG~tRhHon3cOv*frA0^C6T)=40v=5vDR_mrx=dK?KL{px{J! zCMzWx)NYo!0>TMrFsjQ7d%)*O;MJ2yw7Zuj9;fhV4spDiR8b_Hs8JMe6uiZ#9mp^h zFD6KfJ9+MO*5jtc>EJs$g)`Fm`&Lv+C-*$T?oz%TD8i04Sn4fx+PmQjqD_DNsml$? z2C+)Bv5W(P)HcTVch&wJ6m(60MA@;#m@d>KwxWl39;^Hdrg7M3NM@zbcC`u1d zBK9C&C}hkebVA83Dr!bGc(XqNnObz`b@hiL2kr23CziK=IH$Wrcdc}C7g`TlvM?M! z<|!_F&Sk62&C~k2oMyuQF^W@U5{)E4q7nOcKj=Xc4HtBXeLVx?e%pxu^XkKQ`DYLC zeEZe3AoJIN0S;x~*ZiUbH?CI-Ku{i##}hzE#Qd0j!TUXe$ceS9?vYaM!9GSUayhWT z?{fvRRjIjh+}}#n$KY^6tlQuvL!DdmlBs*Q{V8y-7*&VBJ_rYjlTo zaH`M@Xrz=D9SP}I{ zxrp1x>g`=BG+pX8St_Xzo6 zqUx(g_BKiKPu2~>8Rwfz+7?;P_5V4hmHLtGL7D+BMe0e;N=`>#wU$h7{RHTlqzX4} N-@J#|ay1_Y`xj0Iglzx- literal 0 HcmV?d00001 diff --git a/tools/AzCopy/Microsoft.Data.Edm.dll b/tools/AzCopy/Microsoft.Data.Edm.dll new file mode 100644 index 0000000000000000000000000000000000000000..7b4d64537d3855486bd488e68e8d8aced7e4c992 GIT binary patch literal 659120 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 z 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

( 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�yJ4b}e`Iy&fGRER^KIZk*#4qP#-t(IHcj2$S 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≻;EXM3OORG7$%XgD!De;N^}}2WT)wza zT-}d*LwrXZx~#dkhSRw;yZeY6wH68v6Yzlsk~Rl=KYJ&y?hH$n|_(crH~=>bZo)^_ATSE$+#mz zUhjEdE9w7_oqOhY-C*Vl+&KP0bh=H98}G;6o4XI^*M;ZC0gG=mGgPjB;PS2tBU^tm*-)wyN;X3{NLk^8!fu}>m*m&-5t5u+-`!n{ReL4){Q>h3ZT*CTZ@9FMW3f)t6HPqEhmjc&b@k+Vkkn`G{MkaIVoD*E6#&WVagRe8jCvJJ+69zMY+0{dc;!Js8f_ zrF3JSpiZfCjoUrpTzgKlJi%qX<-Op1M4zDElMv_X>RVh{b0yK$Re4|Pxioq2>p5f> zo4ZTbUb(XCTJ)Z0XWYBd`Ea@|Z#8YZYcXBxy^D3-2T89ywphvChkLX4{C3{-4*F|{ zOYX|pZ;g^@3>Qc28q3E7W&%Mo_M|Un{c_)wH{li=a@s3wg z&BLBISxLi?^qtF?^Jt|@Kf&pl>EdGm(tS!=g0w=-3Y{yG(#7>@T<_K8n(Mu~QsUC* z%7M#qSHj}@qOKPi7mAC+h3DS2aeX+~>vO$1*Ee(F#l`00aA}Tf@7>!VF1()S+ugjp zo2z$ec6G+R7u>rdu1Ds4xSHqs5l)KhZ@AvbWsjKE4A)n2{TFFzy5E1`p1IiR)vBKB zxyxtqp~oq4t<-@Bo4G#M(n$GRa*UK`H)4@c^n7C6^Kj{_<1UYyA%5lQk2+4IxIB&P z4ZBcW$#M7b^$BLS+oj;{znFc#k0EW_AhA7%r0-W+xFIc~bFIY_?-9!JqH|I^r(XuI z6y1EJeU-H5_a^m=taPW9hW=n&kFnCNR(irp&-t9aI!;1;i@1D4=Y~dlaw8+PZfvBBtn_Cq{a~e=HZgWHIc=uHyTnRwS!sLDp=sAfE8S+L z&#bf$XVbLZPpve4Q=_}gN^7mOdyR2D)k-&QW_0VU)V{gVJz%BdImxDD`;>EGT3W>E zFD+H>V5I(58e^q@T4_7ZX=xu_oW#=7qgHyKQ&?KJCFifSbcB_DZKWryl;m8NwmZ#A zS6JyAEA7nLEp2y!mF~9EYAf9_(AfRUN)Od>)@!YlA-DPvr`!3ML{LMWU9y2Qjo+2{ zos|gY4xQbMCe9Yp`v}LeQ!{7QIP)0R{jEJwwi1$>$C=FyqkjK*X2KiKSuf|;SLeJq z&B$r5gqPv3@1PvV4XTW@KcdmTSW98t1od5DU*|jk|l(Szx=dh~b{W$mK za~5lJc(}JEJc3hSKBuv^fe+@ym+y__yqC{;texO7UVnJ3w<|oJczjNK?Lq8^!oD|w z7<^7>4T2|mL*OGg`{jF+Ir-&tN^3v3o>N~wALAbZAIXU?pVL|+;pv?A@;R|J7Cwfs zeNJrE!pCy*%lD2WRNreLRG$-Dli?=9^Et6K6`sSXFP{@z)8XSe@#S-JYX;oLX)m9X zTMh6${Q2Gqob&QI!!-x)#E0+A$JXa0R~vjHC%k+<+I<3ivR8yp;hdN6{S0@XGieLq zMY#ChX}I{DPCFG|jL!GYK~l&gSQ;M(Yp)2$-4)>*}D(E#d`q0m9ua@=i?rR@9-Xh@8o2hkM-m5-QJV%J>FCB zy?j2^$LF)~{hXHb@&5w+p!XvDu=g_jNAFem5$|>Q|GX9Oquwg`X>T?BENAL`?>X;n z_<8SL_%EEO^9khx_(ktS_$AKQ`GoZ;{ED{@e%1R7UhRDjukpTw-{QQTPbgo*?|9$B z?{fOi$NzfxBQKHgy-&Of_)|{e`FyG|1F!Qc;V(It=W}K+2Y=;l2!HKu41eSGfxq>t z;qSZ}n3H4h51iTaK|i=(VjFnt#CGsDi5=i=6Fb2>Ci=rWCw7JVCkDW~B=&%JP3#Hp zkr)K;nHU1^mDmR!lo$pNPV5H{O&kF4n-~G_mpBOCKQR(MATb&qo)`;{NQ{R^Cu-rb ziNoM=iHY#|#3cBT#ALWOQ3oHImjzzzvBOcvfOA+>~g8^N9|4cH#thPNE36CA#2_!~%F;Vj+A&;$*mxI0Y^yPK7%Y zi{KLzr@<#BPKQrUEQWuYI0HT@X}I2-;&;vD#wiF4u86X(OfN?ZUhPFx88I&m?4 zR$?i9c48TPPU3R-w}~s^a}!s?=OwO%&re(rUzE5JzBq9+d}-oVcv<3h__D-u`0~VE z@D+)B;42gN!B-_7fH~a=Uz2zkz9sPpd|TpC_>RQm@STY#;kyz~!FMN~hVM;03*VP` z9=<>E0{lSYMfeYim*EE!ufm*qgdb0=fS*XLf}c#RhX0gU3qO;18-6zNF8qArJ@_w) z58xLPAHsi4ddj#Mkg!iErU|65qq`Cf37$ zOC)@slav+k`-v3%K_UZxny7@=C92?mCUWp+i4Ea@B{qgXPxOJmNL0h$Bx>OA5}U){ zC$@xtNc4l(C$@n-e>*tg?*M0gPE&I7vOnC*-xaR%2f!Qqd%&Ccd%}JEL2zGx2wd&& z1K0S&;LZH~;LZI5;4S%L6e>6PQp8*f^XTl@=2KYd~5kA<@!z2AU@F>3p9_`PC zYyCF(P`?8{%s&C1;1}VEeiuB+UjQHBFN7!iC&N?xQ{X!PRJh(>1W)x(gOBu2ho||A z;pzSv@K5|D@G<_`@C^SP_*nm3c&2|oe4Kv)JjcHfZuT#RTl}T)@%}Qn)xR8W_pgLI z{Hx&;{A=NYe?46EZ-hJjo8d11R(PR*JAAUg9R8_)7kr9;5BxL#KKNAs0r=+m)H3iw8U6@0V58otF}3*YL$4d3R!3*YX)2jAg;05A7Hgzxn~hVSz~h41&*!4LSK z!GG{ShadF6gdg(1f*F%?7L zu@(Ek<12>2hg9qb*H#<=A6hX2KCI#(_=t*;@Z^foa9zb%Qdkeus#lDMr&rX%M^_w% z{ur3rnw$vtN=|~Sl9S;Ll67$J2Q5=F+4SS27F|42|PV{HvE(1 zIq=cRbKx1u^WkHY7r@6QFNB+t7sL7FQh0W98QhY*96mmICES+08g5Ts3wI>1hvy}4 zgbT@=;m+i(a98qncz$v@ydZfOd}8t*_~hh$@K2Kuz^5c1gnyQN7(O-m2>kQpqwu2S zUSod=@?{`8<4f@&)+3g0RyHOUX)>ysbCHzYrXZ%lp)-<(_r-7W!2mT;A4E`{=AN*1B0QlqN2zXucAo#Q7NcdmL z(eUTVvG5nk@$i?)TKKEvVemJ}iSW0{N$~f{$?y-!I(U6@D(t1E!HLv#*iRh|XHzra zs?PK76=7Qqu!r@=?2PKS?4Erw^L&VUx|*>FB}4m>+`F5H?r zA8t!s02fmi!Y8FJhEGl{g_oq3!Dpo|htE!33I8T_HT>JuweWeV>*4cLH^RS5-3<}Ez>)}Tc!KMTc>x0w@nX# zw@dE=bKnW-7I=1gE|zm(dO_(ny%1iSJ{kKCTJ^b$0;!1Ptvb~1fFd{6oU_}=t| z@Wbhgas4Cgdrzg8!hcRLgI`Wxj{X(Jucfa<^Qz+4(^n(Ek-ipQk-i>YnZ6NToxT}f zlfD&xJAFI+PI@`~Zu&0xZ|QsB57PI+e@{OEf1G|09+i0*9-Vmv9+P<#9-Da_9+!C% z9-ny%J|y!rT$_0oo|1VUuFJdt*JoaYr)FM;kIcLZPs_XxAC*}FPtUA^kISrv8!~I* zS(&%t#>~5LQ|3K5pZNfuo%s-+lld5K&U^|NGV9=C<}!GTXsdXLf+E$?ODQm+22*pV<|@Au|BJF|!AJ zQ)W;2=FA}Ymdp_Nw#+{8?U`Zl9hv>$<(UKEJ2NBTyD|sCcV|Yz_hd%H_h!bz_hrVz z_h)M12Qr7jf5=RP|C*TuznGZ}zm%ziU(QU0-^fgZS7fHcD>FyKt1>g-H#0Ng)tLr( zO{Nk4dnONmn3)5AlxcxK&dh~B$+W?rW;)=1WKMwBWs2~BGF|Z3nFa7SnT7DTnUmq~ zGN-`bXHJEG$Si`_XHJ6?+0$V^yBMy>o&hJbOW;)YY&e}g2d>JV3vZA;AI@bjfO}^z zgg4Dz4A*3r!kcB6!JB6fZ`!ZageHEUXeH}hJy8=EYy9%C>T@4?bT?^05z6~FjeHU)X zz6a0BegHRSKZKjJAHyx#PvPUU>)^TB&)~M~=Wu)WOL$)PEBJ)$*Ki^GEj&N_J-jfx z9zHqC0N(p)wgNsSn}UCq&A_K-E8#`iD)<-K9DG`KL-@?>#_*DCANZ_nHGFoq2L4TU zbNHO>mhf-0{ovnaw}CInZU?!ca z*;C<9vWwtPv!}u9vZurU%r1uil|2LgJi7$`B6~Lc@9a77SJ`vn|76dHzsX(zf1AA! z{w{kl{C##Qygs`O_9`!jla*J(smiP2bmg^hw(@$ovhqf_SLMy{hLyL%8&%#8Z(O+? z?o)Xe+_&-`xVrK_c(cj};LR%^gtw@C817g32)uRWqwqGBkHb4vJ_+w!`4rs0@@aUN z%4gx-DxZf3RK5TYtb7sPv+`wlQ01%e;L6wGA(boOy(?G2`&6!mhgPnIhgH4}?_2pU zd|>5!@IjRyzz0`;2#>7%7#>ymDLlGz9XzJ;Gk9#}=kS!uFX6h%ui*O1ui+yrzlEn& zeh(j2xgMTgnaDDxtE_;Ju1vwlRA%5Am6hIA zUReV#uG}2nrPr45uD$xfyY<=z9?)w$c=ujAzdkuqE^x6+z+3Ns!Rj(27o4pQ#SN9qTukAG& zeyi75_?=$k;dgu0!hh>^82nzZiSR#qO@i0;nhbx|s}BBGuc`3oy{5rm^qLNT-|J}j zhh8(_^}S}oUR48}sA`1$syy7QY7Sgg)dFu)H5cwv)du&i>VP+^Isx9ist9jU)dg=^ zwE*6#Y9ZXO>STD^s#DgbSdsQug2Und952-o_ z-n;5tc%Q2C;h|L*z{9F8g!iqw7(S?KDSU9%GI(UwSp+es$1d7Rky=as+Pm`Rd>NttL}l1thx`LQS|_PY}JEsd)32mN7W=J{5wLS7Biwp6V~UJKLGZm<@zOo}T*(ZqI!UpP2g={!Q+C_?+B&__sMGdA)OU74Uhv6nuUz z124-}!dK?1;A?U@_}bit@O8P3;p=mK;G1&Q@U6KT__o~U@a?%R;X88u;N`h(;5&2M z!FT0$fbY)j1mBbE58t2L6@DN$0RBU65BR~{p72AtLGYuwA@F0lec&f@!{8@#`@w(C z9RRP+jey_E9Rz=z8wr1s8x4P&8w-Dy8xMb;tA&5a9R_>7C&HQDli+Oc$#7-wI=ENw zsc=>AY48TUr^6feJ{sPr_YAmC@0oDl-VJa~??!mD-g$WQ-gDq_y<6Zzde4QY_HKiZ z>fHf1_C5ig-Ma|S>)izxdoO?&^Dxy##){_u25@dY=P-+524hKfTYdY+_b$uSAo#f5l*Uc*WlEffc*Mqbhbw zJm>9_-7))|w_Eljdi*ERXkZ!`Jct9sRaU9q-?XsC6R`CChWx@Zb-$7Lc{}Wsb{y%Un`2WPU z7kdCU0b79W!2qx~7y-tCNr1y;UIUPAIi28Sa2nv)g8UFLYs&1e12=)Yz(e3kz(yZR z4qqh!AA)~@ZvhiNteUd-7O+`_HBP?h4)zD5!2~cB91G?EHZbtbQIAzV_C0~$fo0%2 za67mkJPMuxFM~J1d*C17E5K4ND@)ub*b?jr_5ee{LEsQTsbEEgFL8rb&;@=57K7h{ zi@{akW^gxn82kym0Nwy^gO9-H;5(42pm_l`U|UeXiZ8E&$H8B~3a}1*3({|rHn26= z4g4Bh1TF`+f;49$&jeG!Gf;w;vmX{2A_G04RdZ0H-J09bmHXmA3!9y|t1FOJ4f$W;= z3w8hpg6W_cECA<$E5T#nui)?CE3iQ#!H%B<`*ip+JvbH=!7sova0xHXdq5pCzCQtr zz?t9@a2@yqcm`~j<_q!QAaFSN3HTK_7hD1E2LA{C3f=_=FjI3lm=2mjCs+br0;|C% z;5*Qp@yBLhTd)fl1AYe12A6>cz!TsV@Hg-+*r1YMF8~9;FmNzn?Cl)~7JyU1VsH+) z5WEHc4*m(Y=|z5kBfwnn2zUy-0FGye?n3Zua2dD_JOrKvuYr%jzX6}#_BH`qfWcsY zFbbRqeh&T&UIy=ge}Er=?B(4X31tXz`@{`;8QS^ zJ;fuz5nv{01wRF6flI+H;34oVcoihrZ`>Q~3WkGPa159aUIw3nFTwXgA3T5d=0n@JO*9_Z-IY+FToEW$8P1#z;<9Sa1b~YOa=46 zso>XODYzT_8N3eGf=|HLAkFUPjltGnS1=SD1P%w&z;U1j6u`+~DYzQk0bT?v!MosN z@EyppN4gXI9Q+o%5B>rE4K~=4{0Ccs9l`z}4;Fzlz%sBLJOG{ouYz~MdXVE+Kehw6 zf_uOv{OZS5-~sSw@H+T6_yG*ymp;aUV?hxt0_THk!2f}2I^@&AHQ=Caxks=ZtN<0; z@e3kgESL`3!2+-dECF|dSHWB0YmnNW=MRntXM&5tD)12)z60xW;56_Icn^F52JA?A z1qXqpJ5lDrZQvo0+BxCv1P%tH!8kAx91ng0&IK2PuR*3i`2;5I&aaZ}negrhd+o)u z1LuGX!7YPmiwE<|8bcD^reGT|0PGD82DM-+I2Ifair`f6Yw$a;4BQCr1b+liftSIX z;P2ow@I6THO*;g(1pUEYU^o~HCWD`V*`NcQ41NiI3oZuNg4@6!z~kTr@CNuB_!N8% z_z3{7H>d$SfZf5qU?i9bjs&y7T(AKA9GnF%09S&Wz`fuR@GN)*yahf4pMi-(slQ+@ zxBzUs3w^t6^5^oVOS5mBo;f&aC8H|-%0JPWf8w^&FmqMzHn0b`ua4^8-+OJ&O(cnD z*xACeGx{9(W=5p9fLp->>^FW8JkFc=^Eo*d);x zRD(@H4cI)fSz-&YCD;n|16zY5*g1Pl;wOpY*b%#s-K-~pvlC|}egoglPSJ`u1QDONhwN~c?Cv6arX()m`pz)BZd=}IeI zZKZ3ibbTNtz1yv{+)58vyB(@cN_VnSe=F^3r2$sjBao8bo>q6X)wNjN>D8uOonEcW zRnmKWQyp8b;L< zsrR|!ui;u{zg+QB@1oV>D&ep2o=0Bgt%lbsep~S>Z~rx-KUndcw-{3=Zh%*K!fz{H zs(6)3+b$^yVVBfQW~nalA5ko+TBTBTp)c}U6=QRC3o}W#_3cpH2{%_udT#5h?y-82 z(ullVg@0S$rAl*~vcFsLM@l32*j&9Ab5OVS9S$$`BxE$qHZ7=-^fy;eVAkmUbY8Kf z{Qb1V^?v#srIEXPKYg>3C70e$OPKGc#qU~`OH;k#I!TF6+j+>%)mOl4y%lh+;@2zo zWp3$hPxQ6wew(W$B@{F$AK>Hf@9rL|8N$orp z&V0pFy}zLUm6BW11HTtvvlUC23)7Dv-iq|N9S8+NaA#AC5JH1I?9XEGu$S8^dIxm3tWE-mN$o5+$gg`DI`At!lK$Vo1(;w+ZLBHUbkXo`_g^=rZj zX@7pD_?Ok+q#32F^1mvm1ybghDfzKYrCuykwcv?OMZcgz%64=0TIOk*t3QO7s#dGH zT59@|tkm(f-oYD*UU<1`Cm-ANPsq*HGnpB|QgKo7DT+^1e2!w>dc3OSm5Sd|EVZ(^ z`Xl63p5*f?)yA$>@^ZzQjOc%vkW#%=wHwcDBJn=6$u`x(LlsMy&unre@}+&m^3p!i zR$S62!wkhmefq+e_K})?X`kJYFX^+N(u?IK%KoB03zdze`I0{8E1T<-M#~b~r7E0D z`bZmiQJ)u;tK8A0eLhg~7m67KNnDCISG<#A@pWmRK}wdqx}?t`N|qeBw2wTIOZ!MJ zUD`+5%uD;o6ZuKCq;Nz++VJ<&a(Bb~3Xe!!$!y5*zT#_mU%8hHe6b(iSKd&=`-=VW zzH;xw`^vKz-dDmL-dA#IcwdQecwdQYc;7Z=Muzv5GBCXFxk|oPv9#yI`$~H_ystdL z;eDl59NzZ@<+@t&$BHw|r3~*|t$0^>`)YY2+gD3m+gHmo+P+%Syv!3msjswtKU2KS zlh&`f`Y2{pc2w`3=IS=&30bk(v08W+rQccc;Yz=Y((kNzcctG=@$O2qo8p0rZ&R@> z$x0b+u6~)2n^j6E;Yya0yiAq1=4yEs&DD~V%RI@w5edo3=IY&<;c2dxoNTThtmJ(a zAE+>2)K~PYJmI$$pQQ4cTC6m}KU12cQ<9z~SzROAw-sL} z!q@hCOR-%Eni<+x1fTww4zg+PM)rP!OBl*8d^)c4eY}lXK?wVcU*J}1ue1PKd zitFH4YG%SO)ktoysp&#qQ}Z*$i{aO5eyjLW_?4O);FoHo^scG-qmtzv{Zft8ve#-p zQI`KvEZ-)0t!5*|TPfZ}@!s$oH3us`5?)g?Q}H7BrJ6I9{97eU`G2kEV&vCqu2sAo zexv4L6ID|8haO4iTqNHl#MktHE3R`*%p4OMrziY znq8GFx&2a&)T~!(2BTS7Bjsdejg*;{HB!b_)<}t3StDg>WsQ`al{Hd|R@O+Fe6!{N ze7#w7nBvKbrzxHRzgE+zxI^*DiWe(BU-9LNZ&rMt;>Q)gpm>$y4-|i{c)jAP-6Z51 z#XBh8Q}F?c$1AQ=JX7&p#S0XlruZEAjhdzKnwsVCOEuC~tf~2flBM-nQ}eizS14Yq zSXz>oYTi@w$BI8wEbR#;O|i5vFV#rfvZm%M<;qXDlG?Q5O%!jfcsIpE6^~MUxZhIbWaaH#>q#kEpB89Fo3TV4EE;vL%iph54w~uLCo_H0~5eRFdN+* z+~%?W;{>&b!y7)aqp7Pkf1o$9rLoXa?3mp-a7;sI!@#jkZ3CNHTRr|x=xA){Z0Tr^ zG4Vzhn_7EtA1Lk;#t{vLVt(w2jrn;hBs3@1Hx%aNJH_$HhSsjUvM9vFp~4tg+uoTk zv^S{0l>M|q3mTPxv90;Ge0%4Q`W+~7w6xC|II`HOJ)StPkS`Xww^0qnyi$#vH?MW! zSgY5%VliLntY0{fJ1`!U!|0CI)_kMfQHev4qG>Ii&0{(myCiiw3nf1eZ)nRmnKX-H zYrc4aw&Tj%4Jl8EvGTDO=y`_;NjT_RY2-V;7|RPcp{};6m^ZwBr2Q~t+76A z>6YkCNe|t>QH5@(`_$<~2Mz zGTvr&_|`&?I3|tGwWvy)3&K@XNnKo{WNk|wm51(HEaxlELcF?4PR@8NMY$YL`n0Hwi`AJdbHF*nHNo58xu*Fdnd)2N?<)TSCOE4 zGL(SEceOORr!H49PcIT;H#QR3sFrrxBo~~%{;>eNwUQvqUa&U9BQDA`?$zteOI^iF z*(*3&*~*<`J;gnwNS2j_6X!#MjxCVUG{u{UXIE;XKDyIOb2=tJyQQ6%DILs6icQmB z;x1lXZBkxJ>a)|SmO2us^QoJoQ5_wv`G)pTdC`g=Eim1hNjA6^QoTMRDTum-ZcaRk zxqUFv>=36=i(DQ}H~ymWm4sj#O?UrB^J5v%gPkO8Oun(Dt)Vp(u2%eLu-%$TsN-5Y z=v=kWalsnRkA>TVodhhS3*G=O+(7YT!D9AfCNVuoiSh8R)==)qRp`+~3QUQcc>dAe zxNUNJwA4YB_1i<9BW}t(=+mpamM&9=9)dYPF$Q6ewv={vyFHB>!U3sgMZ4WZd5G2& z6GFry>^0KkYiKq0p&sI>j;{8mAJeP4E#bzFC2WqAx$2~JKY%b@cH32owhH3C+d+nn zHP%9T?JPuUP@TH|u~OWvl>{lBH&=D!>c@iX#zq2jopaY#N1t!3g-S>HtHI`nquE(}FsiGHBF&vChiD6y7z%a7q zBoz`-v@|tHWsB*fO1kYJY+%Hnnq7$*W=D+d{7pnV_QcM7yG)Ht%y%|-G!?y2s$ITB z)Z9$ig_}RTVSdXTbqA(09nw&29^KJ4ub~jkcDUXl!>@K#r|@{t5o#RK-lKADx_077W9zgfvZcZJUnI> z^Q}j=6kDY1nrl7Yugg;iRN07>J7Zj5SU9?nXJ|NS*71zlYSp|>V?M3|5N>_P=+*)c zXnvjB&cPoPP0$e*aIZ{Vm} z0%NH!Bu`D*k2vesf^jmQTyHI0$edOOK~)SUB>!s{=}qU!ZXQFBSQm)REteOPMS51% zR#v$aSD*Fl?Zk$8^W^<2Zn2{R^MYo2v!msteBrpkaSzZ=?oP=UyIR$pu#3rLQEmI| z4oRtViKYQ3ojX0$BV|xj_Zxakc_Z6qwan@2=qd)uJ#LV?BVD&_wRdJE4(28$7i@hj zwWiXC?My{VZbr(S%SLu(7A6PF9HcgvDODcH>&&=tSJ7&ZqKCc--WY+G z`G`|9!Pkx2m1_ye!!X(~iAMFTOVsiRq{O!7Pc$CGmnF`wd5d~;dZG#WcY0Oe^;o6s zPJ^*eR8K(N=}SsesOZ`F%)MySZq(A3AR29>e7FJ`O$>MItZZme&n0RzaU@1%B~B$d zQY6HzXGJ7@YpQFo@~jsRRM5ezMFKS&ib6gga+h9PeN^QFp3qY4q{S?WPPAGlQt0(Fp{0FpzA5V6 z)5;Rdk%dA-=mu1XN>^g%!jd$~o&U(&2=~acggiVlvZ<$67KaC@|X5k1W<@3R9;l zXwxRE$E8;Hlsc{f6_fbpP+X?U>b!SUn|(msI6d9CE~A*cL9f{1bs#06O?v;j>sr^y zJES}~X{(yr%3_gDAIiY*$WEI7SzVp^q682qRTq>?H_EjdV{R0I4^`!CJr9Q!+?oqq zD@cV?Dc`OuRO&*$uz8_i1@2JJ4E-Lz5G zGRB=AQc00P6Up3iPxT#AKI&Rp^X;A7Nhi}aZip2MjY6Ylj!Btm3{~w2>0{>^v6mcm zEr7Ho%4bLwO}JQu7QliKj8?rlA{Mq$c5h}eF6(u7V^^|XfKU5G<9xWi4dw}l=D|&z z!3Ha58@eB-wDE*OP+6lUN1dJ3$-Ub&#d!*6j`AfLq3gTpqbN;uHBMBe>r-K!-e?dG zAgI`3mE2)8eS~ULZc`n7MrCvTlKU|$A|Z7*A(d_7!b@binQQaFx(T9mV+cOX^R%55 z$rks5iQWvgrF`3)L>sKag>x&sA|HB?p$aF}(iMS_Lr80ff#$i}{Env6IJ=aWJt^m; z%T1)&FpnhK!UfqF)BUlHRM6Aut|8VFo6%6a>jl{`cVlmxP~d8S7o;fA(Qy6N`FGcaQW9(7|^LAD|;lvFX9N|G38slRSkb!ulz zt4Dsz7%1O#ct@wSMYboUpJ8+k-9%uDvTZ_CG;*)Z2e!;(Tr52fu1%kIq#Edo#ym_D zl)m|(|7DbN=Sr55EFBCp<0zfJG5LA<_9nTv`a;Vb*$7lSuC1o_hb{YOW;#Ms|x3Mq~3@ z%=C*I!DOc>%U`del?))4!qwk+(sd0RlM$iSRkUWHpbhA`hQlykm>ZCVIf*HL zQAI3}C(W*>{@4rY<&CzxN+W7>ml0)T3MS$bslw3+bUBS!mpS#qYJm)UGV>P07ugCJBZAp*#Fn1BE z(GmBUwj$yl>M=(2rZtKdEGbLIC7RJj8?i=qylq6>SG1OZt&VWu8EcC#j4vYFEHw99=UKR1!1l={KpiZhy6i!n%XmL(cIH*=M;|tbUqyCsL`#HI3{^ktuq%NXaoA zy+wl~Ik@Yn!l8u?tV{{UxOPlSab8C;IL)Jj!Nsc|S(xM12b(JDP2Z%~+PXI*(r1jtjLCS)O+T_0pa0Jjz&i zQhVz{_oT=|Nv?X@MU~J%w6Bbb924Y>h&Nn2l%*)JpD&p@b7oMI#!2J9prbI?o5XZf zgD1NlX|K$)l^OYg3})mAoNLC49;*C_$~Y*>@+1oj>C_Zuw+4&5o{X#IX_Ij4!W@`q zX1%P|DTtee@pkJXiLv&2M$EbyUnOb=57uNt2P-u}zrZR>uhmSECv!vAByusjxuGyp zHr>cQ9l}l9-ij)nBa5tT1a(o%+BA^$q@TVZXU9)PPAj5mRz3;mOiEmP2Le9Rmmlr*7Jqdg+WhT zMcPsv*V-_r=(VZy#riI%mYYf1Y6DY|bsR+|JIX>dX2ygi(oU~sc71`@Nz3eU4XvD{ zmLTdyufo-CTGZ~!tyb%613xrq`BpD@Cd#Ag#Od1(I^J3nJQt65DVZyqJ0)z|$Kc9I zj3{)zsSH#!FPM(^W^v@(HM=?p<0j$BfHdT8-;E`D^=hBpLLx{=n+j&KyzP}r!ck*# zr&5=llyEvG;vBAy%3M2z)xk;mAZu)y4zfXAhh^TPP2POlDzS=+1zsJZsuMvG6;>ak z4%LaU#*Su`dtN$lI_;8ADo`t^fYsc3kbTNow35K$Jf_LK$W)YacWz=Ctso`!#cMa= z*gKZTuTx_zVR4CC#A~bbD98|=4{RS#VtV}rJq#2#bm2gP9RgMIqT2dW@YN{fRdQ=e(U74Gp zgF(mmd}lZ1iNUXXk7%#us$#U`sLcqo#AnfKa9!Zg*3eijoxZtVS9_5oG4_KM#WIDm zl9)O>WvMOHPh|uiPJn9V*f_~~B$|JhFosHP9eji%#wA9_@=I|HV?VjySZ66sG_Upv z&Y^*{Q%AwRYSKll!Dm@Qx`Ne3o}e=gKSifiHQQaf{#+yy)8{L(mLS#8+67=$l6L83 zh2G~%MK7&HrFvu`U5PL0*M(e5tviV$a>wFb-K*{rM%;9dFK|^Ml{hP%a+kz1+LJvx zrbRQAUHX-Q9CRV=mGbYE_$zjF75Ics(1py~u1_RxcZ(|eAVjAv$$Hfh4W9-IJ+E@N zypB5>q1HuW3z8`JZhIM13oUB+pt>V+;VPWhCa0@Z%5*Cebo_(H&RprPzo*+eqihT& z-eim+=YnL0COUkGq&C{kQHc&l6cMvvOrYFj))n<^vtGCwD0dkRHg2D1nHMwc_-}%@ zLzVJxTS>T)zMV=>M5DTC-9#gg$9x+{`BWXepwyJyRiOQE6JFxGn*>NpAup$a|821U zQ(pXk%LkPQ!Kgv{rt*Y?zNuV>L~(J|T2BEt+KE#$2rPRm2X)xKlua$w^+wb|Ww2kA z2<_By6@RLl$}5-_o0?(lBZb-d4Odd9Eol_an-}jxbVgmI@;91oY(|P%1s$i&pfyR+ZgCC^;qqEyIVngvSl!sm~U?y z9Ig^2TlAD2G}t`c5_bv9z97Rp4|OCmdtlp+$bK_%Hyh5}OEnyVo^4RRBR;J!2_o!4 zuBANa6_>D!(~6BcTp@y;&+wGWT}q_3uQWaJu*{BAs(Oj1t zDX~(S6Jr{uw^NYOU|a*Q2g)wauuIerZIRqgNyJ7QwdE?t)@aLY!;z9vq5Bn6H$s=V zWi?G!)^MpUs-nYqMs1~KBpkg~Cg#yG5-*zJQf)C#i@AMXBU@Vy%iO1~zoxb5xtzG$^bS8+l2Db%EXB zur9ER=){hux!9>r!{B+N5jG(A8=tKh1%S}QxgSkr5qT=S0Qgd<01h}ahD;{O&`&YnVsA+ z$xDB^m@iD|=$P9z&&$&kMihlEI%I9Zmx2SMM!JQ3RG1YPHS1c8cxZAhUDP4iAt1}k zAlUrQ*GA-%GmY$w*P(bJ|E8sEi)|1)Rj*6=a!cKwy0$CdCIqFGc6}U&l(dbhY}Uyr z##5)w$wF0Owfz*G5ynb+3pLZW@+t>i)grb$`ADWk9px;aYLbn5N<#}vVe))blJ%w9 z8BR4lNm|%haEVDd2bHgIr)FXb4Q zLCQhjESr63YeF+HWFBoeefD6H#azlGFb=bW88|h(az#JV$#>;mb>`<;-w`VpsO|D| zH<9lRsXT4;=&SXQdC%4hW@8!*6UF2SEA6DIJa7R{26H-3CDlN0^GYmIUS(B$Wqfuz| z3XHmn6lHdg$tjtLPOCyKwpPUTQ3LPJwtG|UVqRLR?%Gj~PNkiP3_=afH7Wz+m#4|g zM}2C~SgKqteaeAjWLRKQ5&N;ZP*#X1W7{Dg?UwnPNGkM|o1eBxv2)YPT%M@RC5B3) zZr|Cdqzv4qE13^!WLuSfR>6g-fWf6S8@5sgy6D3Tlx0s#mCL|UN?7ng7&{U&vFlA(_l@&&FuX0ixJkHby3M-L;JHZ4xDE#)%GS z=q{{Qz16~YVYz&eYyAbGg^ozryi~Pnp|N!J$Y{z6uuRAYzPsCUW!zO>h8m^7nDrib z|7D9aJ%m%X7d=RP$pN_XNFv+c15c)9>>)m5qSn{Twzr#bN>1OF#~wb5Tkh(LUJog; zFXJ9;g7&EUXHSPqeb@cREusgq%hN2IG`kNa_=a=$1`LwR4>AYYSymoQUBF${6BTT5 zY9#O@yPUd@P3Il%!5m-UsYG4!qO%!pqBmus^g8Hb1%VnX)&DHf*;lYPU-~?{ePuab zuNs<8FMBfh84Gnt{N zd!sn0*&dkDxeg?0mTFxUE`OiI3D_ZN}3EAM5SX0 zDMuFhN~Iph=|imf;G2~;EM^ih8MUx8uRe68FLfgvIO$!_`htdN=-yfkrXd5*)_KrS zD-L0(ErE~e=#pRkP;wok03!$WIWP+9uD()x#kJ=^Z+3>0t!grWQC)DKBa4xagIYO= zJno?6tG82Alg@T2<*K%+r$#ZP53lk`n%aV#S5f+K*WANKUHof8J*S~{5|3m%NxE|ph58$dcu zD;9{83d*^p4hPWe4rkbb zoaPCC#x8ml6J02p60bc+TAFMBQ;z-Dx#e;yXsP79&>WfTRNr~%H0`QOjXYDGahR%S z`Cpn&WQ*3}oOSW6&_ixX*t|^CE-T@{G<3pgpg!!x;T3i0i3QXDF2%--Ei1VaQQj>!ElCGY1vDsZhifN3>uFZ~a?P%vnm!z|7CTX}1qdR^04$5s}(pPR2Olw@cy1P*s2Zr2hv`+QTfpt50tavU6f=ybffu zeNRujy41;*22+D{FIWfRDud1#?XOfDsx!t+moVA-(>^CO=Fl5_BC6Rf1#_0AIIiWy zeA9${`<&opNo{dzyV^KI&ssucVKi{1!iQ|bcFv|H&Ia2p3wGuNbAsw>p7}jHb;ata?4Yn+{m@PriCylb zrBRlEzF*Rc&oU5)B$oSW}dTa3+;x9 z+4M$RIA%LVvPg^EYT!)%(Se+s7qhkwqL2$^sjk{-F4g+EY(|x&20d?SZ3A(*{#({^ z&117rhfELCKa~d@>eAXPTTDmlZm)HaL0_p(=7>slwX;h#Q`B!gmTFzkrqm@ofl}&L z`th?;_mWwWGUv$niC2L7&Te;B-MNS7LrVRY%!ZUYM= zwlW@J%wWIuJ~$NE5Eqo2?vK-nADOKQc5YCI^wgfSjdK-Wp>0MkilP(41`=BLE-KUF zotYx+-Y+j`=c}8Tu_+0laK)KI!%+y=1LI!S|TFA=m+zhL98{~XS zYZP*KT{&k$#cm9L4Km^q9)LLq(+Gt^HmYDMF=VS7qOfUb*LX-RdymzoSm!tB`>0AE z(#mgH$xm3By)?nD+EOz+z%DhUWJy;e6hOFZ@2pju8MZPfw48~wq9F?!`0$n6Q{j9> zc3p(k`ec7t6W!k7T-<;oq*K4^HL_9G;6q7}<@oR=yY=n&H=SoGwjnE9io-hkYibqV z`I^LAxFpX@vQ_%IdYt2YnO8z6Y_mU*H@khLQ<&G0zGbnwWnM%rKPg1p64BXBY9asf zIeT}h$5f$fIe{L!RIBPCg&tLg6>LWiU&{AZod5ccl9F4JFD0jdoJTXBavD7r3QB%t zFQnDUkJ_7Yfow+)mczm-`=fQ%lWRgK{?;_;v=}SZT$qbc52jqDZqTXimJA!RX%Na3 zK?`C0nuQ8?T{ebyPWscXF8R@~bQn7+9!{2FGi_Y3eizk;vm&k=qQ_q0_Qm-(?+Vw^ z2)jk{M>izKS+yDF!t`Zqf{h|r8Z5OdkBxqjF$(%e_LA1f$TDCwvgs=Y+vDQZW#C5Kj=AKO-0mHr(*8@KM|xJ%tM z8SA>PHnj`fT&u-Ad%*}S)aeMT!}qO!n8UcLdyMg=^!3v0ncSEecv1IjmAa{vnq*aV z>Wr?aR3LnOWlkWmgxkozTyy2dNZL>)llTAyeQy~i$S!Yw&3&P}GCx@1G*j}-%JUJ8 zK%5xFQ6kEIN2hrx4{89*Eci@*94nIa%)@KZF62Cv*t!^niX56 zRL{V;@~M%|jyAq+=M=md^tMr_lBW}FEp~B`sfHwhF4(g?L zaX0l_3QBlSy=_@kN{rPMy$Rhqh5}T-uxN8iWn_>*_1j#=Wk}d%0;5~%O&uZ5CIizvV4qoymZu?TuLH)IiYl~Qi}Hmb$(h8A9t z3?>E%=|hQRS5co1ku?`1wuL*+9qqD2MgkgKr^+ixhf`0|OT#y-K_9DA$s*C=4+5Ei zn{ta>6ob~CrL4%SRwiam%dh5>OWciH=_{JKGj2@wuShS5bn)E}mu7W6I~df27hzN# z!J9;7yG8mkGysW1-GuZeZ+&vhyrh&kBwJHHC-y!5SDf%FH#WdkETh^-5HVV3jRw7qN+PpBK!++6KUMLzE(N z!NOS3PizW)CBiJ$7`@!EU4EsRHhQO1t3Z=xdtLHdU6JaNT9-9=s4s&YOy*7wJoyeOXob8kZs{UJ9b<_%GZbN&ZO%>J~+VqvFdiqLb zy-tnIWUt?wi+)Yo9RNM)4w<;w`azgDzdOb z%9!eLsINd8Gp7yPnmj6o0yMg?UGPe_sR`Scx`{uQLxbbbV(G5LE!fE^4uL3I#);hS z;nKj+A1vlgx`WVJ@07Q;3N*ALf_wwc=Rp7O+e^UJS&B`wy%#Xy zmb|CIgto@Gb^=%Gw`94ZYdhQ{H?2GSDt|ngkU*118)g!#Y-o#ofMauVGQPTVTBFpb zbG~{h!?zGYv2MjbukI@oUzYsIk=y zCGaA)DRBi@|H`jHvHe4Pr@0qC;wXzE%ZV;xOEFoCzJV990VNiNbE)Sbb6G-b(!WUYsh!E=mU61M`M^jLwFbT{l6U>x!^(Rq+qPLk{ zk`w2WvZYM_nN}C35F`L^4@Vt0W$HIv{o75>xV9~ifXm+!$XHJcxU08STnlLn{5DQU zP*dSYtQLw<6;mpGypRgLP2WvwdaiuiwAM9F__}~1Ht{$Y#X7pzIZIkiZ}KC^K`fc z4D=FynGOuDkT?7A(D-A)4_qM;s>5_3EzYX8F(8ZmMSEN9#}qfio`=DOYW;UK!j5p73o+cK*m*OVMUC03L#xt9yM4cv@}F3s{uDzr&DpD37^^VK-|??xoIRIg}War0dYA zu4nQjjB?Sf6lm1O3~nSN+pDw5IK)I-wdN_h_Z8EUg>Q9Yyp{^yrkE1uD<;_ls~fLVdPPMgyD$g2B=d6-!TD3)F(FEpyk@)= zBbL>sFa+u{DP~;9p&q}hDMV)5;N8;Wj0jCd%UNDk`1n9TNy*~{B}s)>TBs0dsHNti z92(QUSW_;D7WLPX(;cq8=%Y6#C;d_zv+Y;yExkn}CyMMEj!G&}6%7w?Rusz$IlTf0 zw`{lZ-JUDK&^sQSq6vu?oXKMK2rwc}f4IC%mhQRFu)%m1uE7_q=hdwTKW{vtm(}xJ zniY_mvbu|A?N9_Gk(5+?+7w?8F&+~O(+@763upnK zPn72|UMk=>;w(K)YeeCnu}XrIu*$+*mVIMRQn}BWrPIwIIrEA`mg(Do-^Qe}?9#%(mQveIFrHsEh_mKGPDH0eHED$;8!&{??Nx>km$igYqJAH8KpP?xIKf8K5-R#*S-oK8 z8Lk3qhf#`K`5cT;k1xHn9{_ATBCWYM-2$dJw|P0?B}+Fik_ZhgdE4_%UX1fEf$~BK zYHS46oEI(VZH0Qz4rJwJgM!vl(|Qj|&|@>VrtU1x zEryIBsniyc;St)inn?kww$N*_A6Q%-0@m_Y=&z(@HUsy4r*Vu>_kC{8Vj(^^4f8@g z(QL+A_dW$`xIz+SvZW*_mJ7;4-;-^?GFasWOhbA~1I910>mHmAmVc>0M)NB&5E7v` zMTm=DwnJnjf)OFP0b6ggT-J+qB`?9Rdv0{Vq}7RY?ha3L3m&&LtJ2$E#E5MM=T2HX z#k#UUVLB?hrX{L-rFk6nii#HznT2rWOafOF^Kyj;Cw;Eot{c}FR-&RZLg`wv51|{h z8Gwxbvq6dGa0N*7ro_t-D+)zhq$1M-e#4fZc1Zne9ITMh)*LJq?1s!@)^+uyRn<~g zTvd*_PSbsY*I;m2(MNC`a5lXf+XjgDG$(rC8t zgl3xPsOTA@>z$uX2Z=B}nq9p1j?X1YHI2;vC z3MGW$tSDeSCZHr&GyxIVg73;LemBY*rrNO62z`>gyccGnNZ4Qr}AbH ztdEtS&^{l+@<)=5v$RkVW!w>aC)^1t@t>Ga<2WuB;u}|&RhU@y#)+5SPo}MxW%a>E0bW1Tsd`!JGT6|q{2yO5d#TK z4tEIvF6%*4$s$yi*jSJz6%|sDxk*k`>q#Poee#OKYe68z4VxqlMr~4@SlT3-*FDmo z#_b{e7#9UrcR0^Uvur4zVi;53!{x)l8dkFLQ!d_Y zMxBdtVw0jcsI44tH%6Ga+(HaX3Re{4FK#EsU)*MVU9$cCw;+LLV+L6HBcAc;+T0Wl z;)M(z+E9}?rd^wxesBlW5emiek7=UROC=?>3Z^ga+m@rHge4CFC3(wh`vL(WdC&2Y zq#`;ou>xL#jGkP+Fx|w*==}L%ClLYHF^w3TX_y8RxFPRaqutKa&(Go7x*I%wEKmLm z%1o529Y8!SUR~Tm%ww|!mF})CK+0q(l!nZ~ofUHn5I=keH84OLm&%T{xpuhP`sQ7T zCal9JaJmMdW^wlZ-(V8M%UHV@5iKxMpnxT57eh1gQYn7qk_~(E4icIVq{bXLKlb(@ zPrAUn&g~oaMA^yRr|qjP$W~qy@O^w_%HGEA%+9sofXAm=O~C6~7F5hH2I7Z*|Ge3n zyV|;n+rRj~oJ_a#>`}TUrxE2Q^n|^Y0i%WsGStf}6F>MiC7@k69(srJ=bUx-iC&kUPBrjg3>WN9NIZN#0ELZ#ScNggRBD@6Xq zt=bq^8z9}g4SP#o+EGEwR|Nb}wVOcXvq1@(lZF2a$dYAM3;2jY06ITi*a`1_Aou zcaz%jF_}G5jA~+-E{Uem2aL`Tf8{pURf+Y1xnGwi4K(mBM7S!h==A}&eHi8a!5Cnrafh6lS z;xTSMVHcBtmcKG8rs?HP@jZrU#xzlx{@RC_YS$~p6l!TTcw?HJoRXQv83VbkLuk!X zW`U}%2bi3F|5p+c#qZx`S3{(~pSJWlOra$%&gc`Rz5s}NL0&-xyjW76!D4iZ>x*Xq z$-pyhD}7e?xW1U%J5;gTCNYZ1MZ{O8W|OzLP{HZFFo(DaF?*BiAN=wreU_Ube7e5~ zV%`?iM3AyR`Gy&9DJ~?n&+8Y*vvU4~2&6?a;&=h7qc?z=sFpI*%o@fr4Yvuj zFsn%Qlg)fTi&~TcIC#1MJ4K>{vOdC+N`?f7&tw&V)Pm5Ea!Q=c1L2LeNp<)vtY5O> zOpHY0sP_ZU9v?jTPnGZ}jYoH^ZJkF!>2*x;!+``p3OKp%zjegs&>e&aBiAn++A_4v zxP#Nelr^{oW|}2s66leVr3HVvxZp45OMb1WFX_2L`b3t%gCEJ{V z97P8-$UVIgKu>Akp@v{Yxt$Fb!!1tX7B(lyWn$PTm9~d9uc3oq*Fcs)cT2)gd0WIeeN2BQep!c~%Z5=|;XU6LRnIV@V)t z|9ifHICgxPWg62F1{3!-yfHN|Ra7(F)71{*{TOs8Y9OjF_zr!x@L^yaeB1cCg*%W_ zEu%3lJprO}maK##3`g79FXg>7*YbC8Yh|+w_@Q(Jx}0xPfeLsJojh%Y6%0}rPjxEkK7AEd$$v<;rMQlUKc#=MCmxGV-41oC_s^q|}Cy4^6SyPUa z2OleXs$XQn=*dmXf)77RElWS%tHs&IOazwTtoSJkm>Q+Tp|>9u$Z z%$TOJKGv`PVylvHAn_(}6fRx+G@$(=-hz6p!& z`|xfM6I+|`IdFvBHITX|N=2cn=H}$&d=UtI8*|~}hHUx3l5ILWy0lYWA-2{jzf+q9 z!n!m&!4D1~OaYF62}$;Y=25!bxF;-k^|oA2r#dSvG&WQA;v(-ohO{lfh-4ju`8n&P z;5k{-Y6Vj5Y(vg6O@RwFkp*KlQ0dj#=?CZe9Y9&J*{>5yz>}dln)dWG1QzoP2=CGL6BO z63v-gP5ttp73R(LB z;>G*yY%j!@3tEPCQ>uyWh=w2lAYKq}nOR(2B-z*TU9(I0k{mI;dRIRHq~kCw939iU0;F@!C z6Gh|H=~O9=2E>#ME86m-b7Rg>r^Tc`C0 z9^ry4v%Q5Xy)_c8Z>YYpS=^2s-282S$5{HkQiG*?8#i&8iobw025^4kSb*83)aY%P znx&!&MMfX$`}`u@SxrG(h}5fQ7+ZxFbh?lpgNW$45u2s5C@0E;7E2}o5P7XPZ{}U) z&~jX3KMR24upz=ijSRLD7$paXWmkIPXC-SDYfxS*YPE_(5z7V3H3~<_d7COP&Nnk$ z3;nic@|reWaa0P`Vn!57ba?pXg+ZgX3q{N3WRUlw%7e;J)xEA|L|;IC!C}Y8P_l|A zjyvyet5MQ>AG4COoe;evjLWb<^U!YChDgc*J-Cf>P?8k(BVKLZkthrrywyd+*99@_ zV%fu{57qs*pRyLzTnj})3z}Y0w0jHYp3Ev%byl2PVfwNKC#N~E%?9Q0mDtJVbbzCL z?3GSa{0VMs221%VEH^P8i{%@NqT|9OZ|w?Pm;zUL=J+G)cYJ1+s-n;o3Sw(4gj-_K z$_lPB(5jMMt4gLs?)QNU%|f#vXxCdzQ8aRH^z!(m@5zGt2DTrCpK51oL$)SFb!o!1 zl3+zK0g{zx?k318EMmeot9g+*)p{+x^C#=7eJsu#YgnMi-b1N*XGMkuY=ybjWGt3g zZ**J=rY4lqi0}}bAEXpcd!vGsX@-6M@?6t7_v&1r+&I>Z)%4Cw87=&ongkmQ3gUaj z3(t}1z&aSmMjSV!)-PiC$UHgq= z@o7AL9tr93>A0oA84B;EuxFCQM~O|~1HA3hte{G#JaB{W4XmQbM_({EmXR+*kfnwY zTZ9ue{pGE!?+?`RLN+jzH)QmpP=2Bf-xF`QL5{JyM@9J3XG&{@1-vijHy>YJ_L_R?kD~(=V4TdDFWT zi9=m3ME`~Q%@d~Oiqn{`x=My>q7zGfN{nucP7xX^gO$LwG5LbjyGVK0!@~!lfieEswzhh75gnF4xGq@UvcQoduQn4fkh3|GW96=RKPvY z02xLl^t6)oU4R{sc_Nbc*P4j*p+gckEiT?#z))Yk9i~w@)`WeRHB86FLLIwV7ZSSn zyP36)t=IjoF$8p6CMC-!aS6KXP$Y2JrE5_Ps0&)hh|qv$Zo&#bk(KB7fxVQ>Ty$Ob z6#Se}$cd#SlD6ROOc+0)STO0LYt)>hwONW3fFP6M{l5@MzLB{_3K6CGD?14vTO%K!=h zE~ym*^J@xId5@`;@M1R<$uKoWP2HdvO+pS8lE%?f;7v)T0!ZC*OjVmfW)|da1CW+d zOkJg5OT}(lCuurH&U)bB`?P2xWF<1B%l1X!CX4AbbOrrwvwO9DFNRYk+_2P6gx$65GFI8|j64ey)Te7Ttf-Ndk!yUiYGy5bA8W2TL`v>E9~8n0eUMs-8zBogoaTb#*R#)b&H>nIpkg`FGq z7_zu%HvgU<8hCZ?HM!gZ_fyT?gZ~fW6P7X7E1HY|hTvT>6M|l3WNw>4Y;gLRTq0>F&;W1+Kibd z9PUxfwcK-TYhjm`3>rIPB^5$CLAaP1(v|jt6HVLoYiKra6BIJ$&NoMkm_)dc1z;gv z$ls+B#b9}8F;K9wxM*Md*1KR^^i?FVQ5e3#3q!&8DSil(&@w2(F&dtsA5hn?u-Mro_z~p%Q|fKU@qOg zJDGq)+hC+ja=nbeB&-Gyy8^RBg5fv^_#8rOO4zV@d0_!(`_eb~`ylRSZsDWSa0-TJ zaknq3Pj9UKauWbZ^Wc;!w{^wy!lN>E#}~?FrT@8X&}K$H(1Q) zK(VJ+TQ}~u5J2x=C2-k)1morDxm%c)ztoUoe-PyY+`M<@;5I>pVv??$l;+zF{_vklF5r+Hr^2`u`VW;$#od0zw+o*Qao4TkDmnJ9j&kxY%sJu`o9u z0BU{ctsrc0@~7$j(-PGdRcJeW{Y|Fw+Tv_-Ou8)}l>{}37cY)GZJqI|T_Mw}o`u6~ zNCg!fN?6hAFwYm$VSzxGV*vAtY3#=Jg}I40at{W+LfOTIVcP)Xs*!Hu^t~>%DdyNH zW)~*dq<3SWWmVAK%Zv2Z`$fiS^+0+EJ78c`u*+Yl1nmx7)p!@jUbkvNQ?Vsk*Mi%yLhI5} z(5LXyh`y>-*yI^&R5~-eLGfxeabcKGu`8zKYKgzGPECx3Eo5kUb*-W!i5gy?d$)O) zf%NF13jV8#x9n1v?dT3!=HBf#h%hTkM%@Fhs>RK&Uu)>nVr6yKVh}D2r1Q-icbnW} z=sHT3P)s;ozE(!6hyv{RrLE|wZKKh-0Un? z;#6&)2>7012XtjzXn#wz;wWWTHc(mcL6^Xg*3e7}$qDBnUuJsC7Y$%+fE84Wa z`n*j}X0Gk7Et{V@hhr9GvO?-cXnAD{yiQS}j{u5Ajn)U1Y>9T?Wvve~TG7=Zq>l`e zoO$nPlH~&*EUnyJjA5{w#R|4^1l0=|GsCitYM9$`__`8jCo(tkOagJcbuCaaEyG?k zXV9;TcUYYy8`0g`FGV)yICLEXQ;TvOi1^EHMN{@9HZ+Y*_LTeGwN3Mv*f86{BU^iP zBu9Tdh4nDW^cWhbuI(8WS8dpAhW<0D2L!^IuCSrkZI%oRFG;&^_SFYu0(R5*!2Y)R zQI`TD`HT7CSaTVJ|tKX(-p=VtOf5-B`Gw7xvv1N0<13E@K||S4c%{w^Qsu zcf@Vqe3N=v+>3NZRw+uHKJJ2fm793;P~Z#^$0zQK@JGIs-M?{c1P370Fz=2>83Oje zqBV%S0GXUJkP>I_mm7t)KV~GvbOc)o)Jnot$E3E`QzzhX91POy6 zJHL{{0U@O^A>D?%2*~?^%^dAYKgGHg8}i+n4%#qoqjYU9=yh{X#n_W>&0sL<9RutN zWFEV9jcLwH2yEHBPz^mUEG{=(-9;h{BtjlbX1z9LZxFK5br57T+laUn&eE;w2B9w9 zs&dS|-lvhqe%qxqT_gbI`Q~e7%lFM!H?HZWW^#em=BpRz$?Lhz!wCdhUMyHNPq(R3 zG~h~#)qORhLaR-W*2@L8U3on~f-0b)Q1@z|ZWKYywqb}-x9*V=BZN&#J25CR3Z!A- zL0m{!h(hhwcDBsk*j9=6CHcsJZm>PMbd6}z3AD?Lx(sv2$fs@?sKT!o71a$+Ae*pY zj+7Xf6A@tiXDP8;?NH`d_>iEfy09DLOUpU~}&y(MPdZ-A;o?g2tG z@HNPZac>oL)Kj5gfWo5jva*mYwwT0PT<=r|N-Z4Vtmt#7mf)0}FzQw#U=fVuUa<@f zW_P>=_*K0O9teUI}Hdvj9p^*qJ#XHG>U`fM zh)_4wi;+;>8)t93A0_QNSPALpCq=u~3h3G)+R9_37H!l-hzvx>bTbQEPICQy&uG%Z zl`Attcyp2q^It!clzX+3eUGGYut7ToSNrfNAS^V)??Xh*6~nuzjD%Q)vy%qOQPx=7 z!ZX(fLh3i@6q4mDa>DG`r7{2h2U@ zu}(N%UX}UU9Ja0ek@5}l<=j*dCzVYl&|aO3MftT8kCyiyj7r>mk`9~RB2O6DhVQty z7vSX;1H2{M=Sg7?1Rn%N+>1ZloMih65EI5eHFed#9q5vRhD>a`wC=*zI3h61_{SFkAkbJT_c77W?8FWu)~mkSz|jm5IjZ(P*adAY7fpE8JHO{Vezy5+tJ z;&@OdU{lCOqj!_{g+59WysEDbk5=OKl&xS-`1*Ec6dkLe4uN=(kZd4@(jC#+z zp_qlaE9L4L@rq;(dMRYs3>1@XQVZ$1x{%ED(u5?z4{efCjrc^T%L)9&L*qeW%JoBX z!#Iosf4vdN^TynT=@zEBZChKM82w6sWkwIWaH*bByD>+u(*?taFFb!5_L?dv_-c8rBtv`qX7C+}$TEUiabGTZ=0zpxk2ba=&IBg%av zNM>xjD)(Wfw+wX*6W$1<1&^^~T$E;UXd6{d!Z_erVRZv1#13tZR;oc9da90==dLNs#}z3D`iLri=q zL8pep)(Dur4TT_1tIZS+J4M3RiHE&nBY|*}61MV`CdEJt?hrUuD>}SY&DF0 zVI3K*voE&*r|eKI7Ra2cmKlAWl~ZS0QRqGQd3N@V5;n~A)FJ8Jl^M7~kF z0=QG88NXaE-wcvBeBN-z@lV@L!!{H%z)j7}_}d^u{7l>7vMBvDa5O}ldbDQyT8m$SoUfHz9rkZkna3Q@HesUniSd;76`)(-fCinu~kx)?dh%#NpwP z+ih{*lq~+^d)rO%Ga52MP!N8KunWgo6@2|O{C91*;I((+ZIXUo@n6V9c4KC=)oMJ5 zlh+K_jq}svwnLFV>z63~g(?m0uN;uZe2YV~4R4_TTBRb69^uLl2mkBcxk=abjwLrS zt#=M#oak@@>1jdp4i#R@V*=pmvj+H!W$U>>`t>#luCk= zBVI0aQA%UFrsKEC=KY#e0dX8OOu*rAznf{?cMH7S#TOzxe1S6tz&2XoS!pFEDx}%w zo5`XR-xX*)Ximbkkh_i+?oNq}cXJE)f~wSKlC97+IlM7TCXilj&5N&+3G{qApMVs- zosAYs;~Aev#Sl#LE2%;;xBcan@CkYC zUx(KR&4-DI@gbXDz%_%D%B%W_%NFjt2a-2~oo3CFr^%`I#2jV_d+KD(Hb$La_q>nb zAjI%TDwSaZdy;_k`gxejxPE%}jyT@i@|{7Qi}aI&u6@hl@&Nx`G{1*8IX5BlQugD7 zQ^JQgh2ea$`^h)RmD~K4HhdA$&=#R$42>}ddM@KhdkYPqM{+GrfZ-apXD)5b+U4{l z6&+W06A?G@>!4GCLt6O4{p|+4o3hQ6BFt-x2w8yg!NbB+z-5Bd)WY>d@&Hin3CK1C zk%PcQp3I`7P(9#+`?2*2Y$1+%l)NUTgn~%&KLP#%7zPUm%#o-Bx@+xoP5d}k3p?w6 z>;%iH8D+;;ML(JF3invL+f(kY+QpNL zX6LJ7QBX-3&Qx3Dbf7T;9|rPp3v*nBYJ6_7ZE75{i^M0>h61=UPME*#-o*D{n-t`{{j}vcu!Yzu zELf34^~?*Wn-2RcxMG{%iw3naPB5Agf*52tfE=TM$L|Qoh@S$)m26_P9FxBzqOu`` za6A#44}ipL4&@ng(o-`(5l>>!uPIs~KdcX=F<;Trq<=mwM1uHC&V$dQ27#Snz10+)-vKo>rh`*`!Dk89Ex)hU_MbwweKs{8WX#CZ zUi*kPCSKH7qDkOj-so+V_;*ZP*WUZ!XS54C13FV&V`D^aiF3O=Th@ zfJIk$^5za7_NLm}Qd>WL3@r-+YA%ep$o#CWJdmepbILz{VnN6@z~Q<_-Te|N=Cv`0 z0jw$CR}s;S4~6@Ef5rEh$9n|!BOOW;O*s%Z*_^-){`^n@G%Jh>xr&cA0*6Ov448tc z^!2t}x}&BX3|Jbw6Ec@9iElQyW+CuMM{T!AUDLXQ2eAB0X0pv6b@RvEJUHgKn?FGk zZm0wp^>;Yps=JBSl)wlADqQe*V`>3c_nO=a$+&%r>Q1C{IhT=xUL}xa+1cy=6{yAV#3qqB3f_~PrLzhILAnfQ!b^B68Fzc+ZiFP!&r0m=l;zcmNo2(x1#uX;Vz6lr#%SKR=mTLb~vL>t(Q0E zFonlQ01UsUPT<#KmGCqNVbVmBgf$(Rn4o%1oemK)+jHmOLAwXcgO5Vy4%e#TGQswX ze|6^Ur4wgIFO7bA^vu!GFP}Ji_WYO696xyye=c1dIdOF4)X}rYf1n{!6jpA0T;-GW zlIusNUdIaZE5P^gVO@|Oy?^TH(W4X1(_cR3JZW5RPD4%O-c}hMpZL;Lb9(Y}V|J2P z!3IlPi-=Pbw|Ppdej3@;m!?{XpKW>R#1F^61_o)mb2=0{o3-Y0B&~C--uxeT-^4;P zYwbk6ny1p%PS&e)8lM81Rh@h8GAP5Ta9_p!izKG<5(9#gFiSO zGtOigXFvIoz2HYx<$betd1`X9naF7!R`mjF(IiFVh9<+%Uzr0BgE(Ml!MsAm7H4Z> zeB4WAiMcv<)SZKtOU4Z1w+ZhD+|CCLF&FfD5^&X5_nz7Pu`l=dBvD z&)95Jwgpg@5;UBap%+I|E?s>|e(6TiJpw6btEii=jY;-cTN=FN57WR(k)<(xl2_nR zyfG&_IT~G>_$r(U#WVv!46wn`Y|+i)RoB>6PxH)#{J4So{t?tj8%x&y;#YwUf^bTY zkEDc_{F<>W3se+@#kv{_*CD^Bal>aYC;a|S6e==BQLV~=NE#Fj%uvKpw#5&o@W94C zv2=k84Q!D*or}OkW{D9qnketQc?4qN8$TT8Q*OdGgp}eBOfUYxQXGqze(#vO(s-lk ztpE|7A`F3_I7}2_!1W1qevGxTkea$POI+EMquBwQKst;Tnk_Epxy)wm<0RpbirS!8 zaW4m>8#qYXc@f_UDj083+>mR4;WI}4;By6Y58D#BeWZnr+E{EMn^P3&eZ8k1s;Y&5bUC{ zX?hjZJ~XYrpj{~EsM-i*Z^)iE#8!weq%&dakQd(|bgPj4XjJRuX9baoU-*DF!aoPR#H>T#H z5gL9^B)Z@?!bl;aa2QotpTq^&yK3<~VBioSn|Mg}tX)>F;WVVuZYQ9XxDpg(4-Ate!Cn&)y zOpRJ=L2b5iFzJ=Kxi=O?4IhP`)i)4PL9icpZ`_-A=h(pzoaI$Wo8XQ)Xr<2CaIaxF z;4#KmA)p{yO?aP@3jrwpn=QhDkEcs6%&#uFr=6$C(Zs!Z?rQZHxqVT#c?-n3VWEk7 zi&C|tX;5?RN8_Jo@^!#r$>6NiBo8D(Cvt^~1sq&G@Xx^1&@v%e0!)|&=8lW=)Ag{p z?c$C*$6K4yn~j?ch4GEabfzIF;<P4gNQt}nz z@gBDHn>Vn-&v&Rf7+jbDza$3{A~kU|!fs0BDV?L<{HOCY3R<{udgkMbeg%G|?@isw z)A*Q83@PCJ!TAOk#VfE5Z`^Inrc?qM6G>(Q8~i>3n53vnnj(997yOy=@o9Q8+6*1= zl|U`g(hrp6FM#klSowO2DguUW>FZz@MdOeoKvc7($QUnuEPi~DFv0S%FEzbMaFNz> zj~#=t8iC{MU$r){GKPeaU#rq_xMtvSY4Z+l=RGj!@Ev`At?{NiCwu&G6=)o~j^`|7 zZgEKc)<>ADQwT$otGt3+L}f}OX$&I>-7gs6-jPc&8`CzeY%024s`GC-5WI&V`c*gx z6+0x~F5^vyu!r!H5A0*h^dVOzgH@}NX_yvt6J5WBqM4KG7>KZIe#JuOSnO9+&0>lY zWk>}Nup*N}qJZHD2+dcJ!Atz!05<}UeyK*BFjN$GlhpJF^f_=NwDpP&VZG)XvT7g$ zT{zB(f*rvulxjf(`dYR6=Y3OJ5orA#gP7P+e4v=chTM{zNTBN1sBuDEmJ6uk+h81bZ5!`(jSZr9vaI|h{kSCr^Z zI*%v=xMHDCP6Hms+Twe=F1|P1ofyuVaL*_DE@6K}sV)8^r1-^4wOo*v%(q_U4i)x= zeAc@Ll0y+O?VNvX%3g;lS=>g4kLb=IP6u&B+M{#8+*1QsYqZrQ_O|r_nFqSDl$2<2 z`M>!2%d!{(-(;|!Va2|3d!fyH!m_g*Z2m;pN46?ucunY?IEg1|As3{7Gc(#w*0hmM z*Cd3~HFqda*NiJUT{o7bCL5lv$#|!0vf62=-#FfND?yOON;TQ@bWQvEbj`)^>6#|> z>ADnhyPlXi12&1BuUjcw4AfmhoPp+zO<_S%OM0HkSP1gIUM(0eNn6L$<2_Vn^?*S0 zCqQcQ$eE0zkJaRuGc`HkOiiLbQ39^v6g|UOSs9kdd=IB1un<9l@)IaAuK?)MU%E8M}?t zWVf>!yN%Rjx3d|$jnrhfvl+XM)MU3t#%?1u*{zYW8&oh)Yx38vjK5CQsH2JCu;K7t&G1;)a0*Q z8GoIq$zQiJ{yI^Uziwsxb)qJJ-OBjuL{0v>mGRe!n*4Pul?GhRDYljbKg{yKHsG2ZvqBF^7Fh#OV)%(Kai=@3p`i@_%|raM)W z5hgRHJ5`erCNrixRg)1WGp0LLlMyB}raM)W5hgRHJ5`erCNrixRg)1WGp0LLQ|U}* zOn0g#``~VZgndrcR64jfBdt}F=_WI#J6)6Mni?s;!O12A5I8+^1fJdn4z4K9B=SIr`l84KJ+ESnF;@{w~=c}9tjcM-9FxcGZC6E3)1_;9DA!;ii7enwA5dzNTyb#a4^A;@) zq~{puHNNrPBaCR58C-aB&pLFy*}%;%l8G}J4TOj_Zp^)b>u&sp|4Y*i1fsv(Tu8R_ z+meZcK4D~mKd&%r6$vPUM_Pjgf+}1BTx8tZg>i)#JZ~nLL z+j#o2JL|sd{>qKGA0Tz(l;_-c+>xx@QTMz%j@n;zUv-DwmS^v}yD0M~ZU+DOix_*U za~s#d-F9w^+ltl~@8YHk+zf>L7w`|)v7lBHH5zz6g5N2m;9e`d&7sx;(kAdUgR%`= zCO3!Q5nz7||6aiF3H)s$o%zh2aEo|ux>?k0;QuM4&7%J=IQQfQJWt~vZV8GxJ6^*( zuzP$4xwxbZ`R zI)%Hl+~+S!{~GSP)Vn9+)+|E#(iN1t?`oBOvH_fMiAO$iUmdMT)i!a-2YN8&{!%c} zk$wgBCz5yf>~*}`443=lhUR6q=cN}5xD(7hOG@DEPXKnDL#yka9qpd~#qRavc)Blk zhm@4udc?UeSC_6DpEl;Fy7VQCCazyZzc{yUpHk`+#vJ!@AZ4LrP0bB8clgrBtJ~4s z4!G@M+cUVWkrd~Sk6}EC7dhujlJgBXG8KixsYKaTCFz-^$c+d2+;HSX~D>1v8anZ2(8BXakYj^Lh@zT9WY-S-xxEFB`@y5(`lIf&NTxF)kx0Mn8%M`@w2d5&2y-U!KY!hx zH)Z^ABPHi#r^+<&`PLcdzMy>19F8MU9eaC8ffzAS-|33q{*9rJ%w4Y9JiCBEd74!CZN56|L5GB z_#4_DdKJ`0?P7g#PrU>f_W^ejed4^~);rG4K9$K?+73-~dkLLfrWEV;na<)Idi?jP z9v~-%@pznEKw8Jl?7Z$?!wg@yL`YPYI1j?fd8;EBBlPe5Juh2bmm6 z%i)uPeD)K7OqfR>RJ5TpND5KNkYbMvHb>$ZM&y%#T^teM{TL;s zdz^o-g1;eCcKF|&uZpYzzdauL+-*Gu{yPer^$4(ZTmKmPN@XCqlhViyopXN#si6|; zkKBu}0BP;g>MH2UXD%YOgFUINhzm3_wGXB49lV{FCy(b2jwJ1emmsU= zfIXgfzKp(1QJ3r`_LOVv7i{C5=TU|>yBkt_fEvQ<{hi_IU@?!H<2FV?tSQWs%4N6n znzRQA{JEEqM$KpAQyv}nd6uSTQccZ~t13k;MkwsL+FTW-g08y)oXqa3DEGPISXPt) zMPjw`ByB6TDiZy-hnASlk9(#FEz#zC2$@<27sfhw@D=ov)*$r7`Q1{g}&{j5rI(#8CMdDcsZOXIUoKuajZ^aVG^<^;~Ney(?{$VLC@$=-`=KXotFKQoKF6UggXN zD#D6{HNc5qn#XTiGR~ciq|P?5c!uN76&oQHXyBl>+krx!A(qq$ag`J}>x)&r=NJ|} z3hs1O$)ZlFSnpM?fGecj!CSzRda+u%atKnM%2NW* zJboYbrcsY&$jL>&DLl)N3#55GK_AisOI^(0f?wsC?*q3~-X;F8A*13zOJ8VK=%q{G zJe9VTiSaq0h}d;U9^+`od`U>fdqdtOYQ z7n0|>e(N4 z9B07#tqc$sjA48>C>P)zEcP=hJcz43TsAM7>43$ksyQ*5WFf!cPGQ?f7xfF+z=E3h z>Bo@c;7U6W>ZHKn0@Oe4wWTOc2Dk+LBA0IzD=(uoK0PdSHV=ahCegui+BK9RHZU~5 zP|l^}lhl|9(>)vI|*#qRdd$g;&&zVuS%ObJN!MkhaAQRx!eVe6BQ9|va=Ih1gyWZlpW zl;%>KidIs@={+m7P7DGk?l^>PTx>7zqyb77mfK6ihrH$uV_?W75g~y$KbLOSa-|0v4a6R4O_MQYi{t zo=xA=necso@*>8ewEck5)dgi}OB^+HYsHxld9rLbgPmiaOHZ#gpJGdCDewN+n>q@B zvCJ$N4FUesIlKok2kyrRlQeoK&ifabm%Ax)I3BMjugMIhPBc zE_tlAsyglqWlrEImTZF0SCuQ_1&yE!3|Cn`#|v7Zvh@mD`C?V;ELU1W!DZHM>2U)i z(|PIf60q;G^w_KJ4|2UMbFkIkeUUMW*6s+7lrpl&I9=6~8cV#y$rR@KU~xP%P5-6N zx#fi~^>>Gb_0wj7#HFp@0NlsX39)2yw?_+p5KSmHsl61JA0c;iE(!mxaopP-6+H> zjNaL5xi}7&Wv7jWYcfXeSf`pMyNEwN&4#gAKtJG8Z>VHdXPW9ObKi_(L0C^_Q!f(2 zWx%EWOXaKkezz7C;%0cC2hP;k?Cl%Q-84){ z9~>*y)pS3N3udGfE{3T&wJr9Vma^3>^OE~Br3Q0*O$#i-Rt-p(IUNhB=KCgQi(AhI zl`WEP+_=I@M?>*g0Jdt4wjKulXyniZ;eCPc-6<3gIIOwuqSb@;_v?#uC+RDs)S zQI`Bi$K3;1>bR93eeoRl70Pw?l<#*i=FCH+pr@;Jq^*b70grG&!(Z3Y7{}<{LmHjC z=5A1oDS4?qZ5*q(CThE6GqbCN0Y$~%jrAXZgp zes8GVYtQSnW=qx?;DQekLLAXR=$%~hHg&vgC)^aX8o^k!P4wEc@|>8cRaK}lNi?^?})LoS8=gf z;-Wub^UbHqi%{M@-w0rzE>(ambn;K7~1QoJeMANhh zGt;}k$_X#7j7)Qo)Thy`ZibqqM1(&OP(4FCkk*aWa7+K#>)5CmHbYK#4Y|Xdq7e6E z(9tv-JEPBNG1Gccu@KXmm>bRptveD? zDJWy|3dF?chH!(lzD38n6RKijok^leqUXjjeyb~H+F?B+n zQ@gPzh~zNst$zA6_-1OzE&Z4Ozo1`4{D1o75igH#BpI3~l)!(E|LG4?a^Skx2;;y1 zuLD7oR}Z17a!O?=Oi@9y1Ua3QWfIqdXR3Mq?|U7cqWgoEmBsZLvslCcQK2(vYP0C| zY*U!-D`L61!Ffcq{jjstiT>Tvf9`ema#DI&1XVC{X~?YzWllHOD{e&_y?Sj@#MvA< zn_t9s9}A--xAY%+?T~dK4FfB#{nLQH)O68BM8{yUrN8bKDRU2-3hIWC>07g-%3B9m zW%O=kc5B+qJ(~Xbn6?-LTprTYofKJDjA8f&!`GJnW3S`#XptF(*`QXrqV+$25@=DV z*(i|tC~i&Up2wKsATe|W1+aSmQj=HNRcl!I_Ct_*x6zBJ;gg7d129L7I#QkKX<2pk zd_q&2Hne%95I6D3P+E$X_P?9ckrAW06mz{VLF-OoXSAx&`MXbo@KZuo3!^-4$^c6E zX|7H7LyXjB<$6(!rhFUGS?+bD%2K(8l&TzmJDbq<;^ z*xgp-?m@5Po^xJRpQ2o&5Vol{tX$7N+@cL+5WDvC`@QzlJd1{Zk(|v9VfkT8r04$8 zp%G7IS$oRMW{VWDay|Q~i-Iqz%c9vqql^KWE&P6i!E;OhL$8BcY&5k48MilyCN80| z{E&d@@$QHn2V(#JlR&IW@YP4DXXj|Qu_~IgwbALBT+}&UWI-cRk_eCYY0S`E<}!Z> zo1wfE%n?v6*a?Yp?NmPZE{6!$La(NLmo>mE#e`I&XM^ONQO_H6l(*cEVnCmshqsgS z{*==7UTJ<*JQzF?w+LJrh+(ppE; z6}3eWbc*(%Q=RJv(mH+0Zt4H{uL{xUhMwj9L_OHI9vewLdi4fOs_BxtevruUAZW=mj=sAB4DKr~maGDVg1KsKc<`6@TAE8jEps9r4 zGZiqz&rVNrb#p(v-=(rGA85DvzSM;Oh*-Kfx5hCl`#PR)?s@f?T3{A$p&_6uQE5o3 zajV|-(%PfvIb_S+v#Gnz;c}wq&?jpwT^`%e8bilrvX!=gkIDnvJuhSpdWs7zCR#dO zm(D#02E@3;8)$>^lm9A%UN`7?GsrxI_SQXen{|d>6xXk*hNr`PM9#JF8nx&~CmAmH zDsMFcB!;I}A@P!EOcIH?#Usjw;6p6o=p7|p$2ia??3Ci3kDX!ori8&!L6pTHA*qnC zEi<>Y-s{NZhD{zOTNRjF+*xHOjJO{nmSwYOM9#`gA^42hL+ zOMl-h@m6h)P?6_nMa&_YqOR(G28eN+jxiN!XOyVDTcP*8R_k%vF!gx3sW}N|8QpNC zmLKIvDd|STQU##KG?r1c(fGSwQJ^JNJdjc~fz@a!4OPL2bky@MYnf)$>|>M>jq>Wt zF1jIFh8WT8**B{$8?NiB4ha(DVF85**sN!Ns)E7aIwm5kBMsa*c|+-hn{6{Ybjz=W<6o_Bk+t)@%vO}EV59=IFBdrjv*{68QWOZRtvM6K(bEV(Gj!zlqj+-l@xlz8)E%Mz1ltJ@>fGtv$?b z@5_bm5-MLlY+?#}9*(jMrIg%gCyYy8M*mLG+(M+f!DDH3RF&TBorc6ku*_03%c1EUp?Kp*gne%w_ z=N#JR`9fR%+CsNypG~^l=S->{U2fcV;@R2sG@VMSHWn?MZQ}vA^ndo+_j1#^e&V%C zw)tO2n&g6#H+U*@#A~YrJe<79aPf>4NcYioRL(fb7wghw`1Ue zHpYG$GuON9;yy6#)99_O_O!eV;%4;4Y`~%^%hrd8r${^BS?v{dMLxSWXmM^ir?CrZ zScq~?5uRPLu<_2{19YA%DOIr(*zL>}3@4nMH11Aa4k$w`*EFb{Aoh*l-=J}go7-#e zB5$@GB|&aB#ZZO%XVA;7RgY72`dT0BlX1C?&LdZDr(!JsZMlA=BC-hm9D1chkqXK+ ztv}T*SB`G845e=SMT$0_&~|92nTOZa_A*qBubLXg))Y%#XjQqyt$og_+@cvVEeJT> z9Iz#3Y*Q&~MueDLb5wtesobFHF!d^xo45QLXw+T}ma!S-En0eZBPqw^9!l{RBJ}iOCb>Mk z{05UANt%!*E~wTA>9*x$io(T2-_3&AQjCTcxC!mELlINm|_^xyT-Npvy+b-K>VJ zti*Al>A(%Xc-4;)n2}bLcP2mG8`V&wq_OKftE}}@_t$8v!;EljQU?(YULNJ11jA^5 z+!u5^S3~OB=p(7%64;5Mrw;-RxUY6Em$t&aYVHbf{OksNce1K}u3JY@M`NFO{U!y2 zJ62W8;8*IRKdq`!C2}fSJ6*SKEC>Gg6E`0-~R?b3I?-)y1 z@ztMi*KN7FKCf9*`^~64S_$sv!@*`>E1as6h znW7F3QUWb#Ixeq@1c`2GsuW5UEZM(O4LQez5sj3Yq~1~Rn1yeEabtQ>TGAB{ zXNu?L{MS?_>eScKA&;1*rL3!cHAF2+qSTKri+KBvo2tez*H)xEnjBS>%#zWW*!DC} z%GEG3N*tm1PpBp8Ao5har^d}y_bI1kew#{dkrpu2^C_nLyHi-aoyb%5oAug@r&JzM zyZ^RMyXp3#NrXq#{?a>j5O@Woa|=UE;w~z$M})}9I(S&;O)c=w)Qy?D_yMHke!;WV z^{INu6lScLnMAvu%mAzXSf`rmR8`fN!l;KU1&M`1s<iR7H& zTjJ;ky<+a027!>d%+$6fFoxsO-xz(+OfSd86_Bn&2a$_}9C^vvVKm zakMIfIX^Pv!c157y}V_X7!Y5%g!!I<0h=2fmYOeUN@MeND_33HZeb=?@sqtd%zTFJ z07NHz=u)ir3GM>iFIQvAtH5~oZNb>^2mfNPC7dlT(=fsP_=7Bg?pi1Tfsd!TCaTk(Bu@_WB6702FKZY z5On@t0j3shQ5VxaxrM@$PVp!&4`Q8|z-D=(JIZP-&unr8^|;MaKog2J>8W5r?tc zaF!_Jl5b!9X?HBE?5NPzX}vjh97{-Q_4L?uJ|jxO+-s9fmCsu}wyj1oB`0Yhx~|;u zZlySS<%5ClShqT<6=T%uLLaJdDbr}E_vLOa6{*C1$x4?;s#Nx?R<@W^rnR=*>qHGg z`RuQOodYRS1jty{j#cdqLwn2i<2Y{S_p+KAoZ7kR*S?Rk0h+}UnD@3y*d zpS7Ci$mYT~9b5OgsuDTXMhfo)rDDXtVsJUT6P^p`hO|9}YF7$z!}?&%zRRI=&#z$c z1Qy*=bj;Hdu@V|IJp~&{ogGA@UebdB25P{syccT7MP-&S0waYYOUYi>*6vQ>M_X z@GU|uk8A?-YI*e1SP`9f%0uqYXxUghVq#-!8^NYc^{$`% z=dZ2aT>XC!_kHg_xc>k0m*4ru(kC^3P=Eb0-k&!>Kg7d3A8r|5`UiXXkv+U`4(8NDjmbJBP!?OGxpSAP{D>G>+)}7@A%i8T9gfxlsYG~p=S(Y`i z_7kgR{aX2!Pg$9_hb4QsZx7G;hvm1F8{YlR)f8X~0 ztKvlZ@M1I%JJK%$5H!>?yGL=_TjTTTwmY7 z;K9ds$?uaxU)j?4cz7HdO`b0$&ttK8e|+4Pl(-U;_aw<*-wxng2OrzI{ovN^7=YpB z!EN{%cnp6IKE}tse*6(U_||W4{e0WSKYLhq=!*OumA{wd@0k4k`gV-vu`LJCxBka4 z8N<6VMSU^>5GHFM^m8ikG`a1N8}8rE5^Enw!O5LRw@BV++%_a1*oN0W%xRxYidN?I zNag2H`LRQ8XzizuJ;%R0q}AcWyAN&kvwC=Vx3zT`PzL&a-NW0q4=*hNy~Ddu7LUUy z2~c<nsYCvBb+7}kq()`N48qY+@uf9NBd#={Oi z0G0jmub>HyPzepP^^LvqSGkGr*Sbi%nu>6+q;mW*F{~_YC z{!5bJq0rvEJuSaAG`Iysacs+HzybV=-$DxU_>3d&0E54W0>Y`PFXg`R`Hwao=k`haUf4hGgkC)?<4o zNe({;5NHlV-8Z~?pRF!`z_yk@Knu?s@MR+7fy;A}vHU^Iz%zk9uRsCeXeihZkXDe- zhTbw%3Mea}7v2TZQH6wg7#hPU4vhik0>N;ymk$h$?b06eF+e;Z5Z`&A3wC^pw?f#%(h^vA^kw#_5(Zl_B~eJ z>mDXB<(aj< z7At`?*w%fv^|ztc*N|eh_^fUHZJe{ObI!gV=IfQAuiJd#G0fL1h552~%sQ0dbNCY= zd<&}Cqlw1=;add=_KrSY4%mJ#p<#JuA1}u~E>TS46_s8ImF^~$_?%=!dcI5ACbU-+ zS|~K1)aLVU>LaKJ;W?R%X<@c$w0R@cx<9-;ZNnW4n;49 z_I^0L`Ufk;=P(;Tl-XEbGyb!86Lc5%a2Qk@K&O!bp(>#?b$Fl|snOBaU8`}Ig7_}Q z=v_{~F#mgf8CaD@=A1PH$xx?&LU7$E$r0Kwit0DC|Hd%`&U z%N`qtf7ugis~U_V(B4sd7i#YcwSTwEYX5FmsQtS_+xCv(SXv9i2qp8L%|D-IoS?^+ z);NyqA95VmKg7s?%c`vGMuM-R&!p^cDP_|PfhHKB8Ny#w{LX+M=9MQTX^&30e-n=T zj%SPQ!<0=cfjUBfE?H|)ZlZHv2xU~K8#w@@b|P~ zHu_d53B?yc@HxqdAf5*Z!Di*HVQSo=ceVi={>Ag#v|;g=L;W%SEPt?rY`pZbSVt?r zHH%%$L>s^0In=_>iswR(`IzKR-AS=Hj_93(tjqzNN*Uvw^nv!3>|}za0pe zuO-C8=R(QlgxGlr4BfH;$?ACui{Q96ia44S~`YsHoy$VHN zP-M_SfUL~piOU&4gJI>LG57r+--|toZZAP-;*n zc=@ePzk3|)N@D4q6esu&U_C(_{Ti<^rpM#+u;hDZYp=2(+j3g6Y70JY({gN-En3oywWqg);c!pp9)S<1)(0OT~yk&6sb-!E{ zd<8S$hq0lYOCqH5&(G#p+-u?)km=QA`w5Tb=GsCYBJuytg(1V$wC#+8< zIMzQzb5Mx`CO_6c1kAPH2Oj@L!sC1n(&ZQ0n-5L8*t-dVwciVy|4vw&X3Vk07KhuW607kh1>aAXetG{-UV= zJ{IK)=12O&r7!gBkL73epY-QnJQ) zA4O?J8(QhtBHQ$5L4PLo=ePRfp`4SqrQd1dul47${wNa5+RbIfZ29M!w_ko%?&{l5 zb>}?T_eoKCmA;zHfN# zC&P=wtNnuq2K)9M+A;hfO&I>c0l3-vm^b_YjJgOgOUwAPx=lf&@BvyYjXnTbT2@@P z^&i~=a)HEzxpshpb5V>jl-=RB9DEEZA`#_>f)#JO^alBNz$O4#d-$Lf+djzt9C#c*>b4p__yjt=^zZ2Vp&2B_bQOt_Se_nUJwOwD z>ECZ1@L8V%6;{;v9Oj`SIjaiEK`dY)10i_;s_<`yX9zgDM|SO^W4mvUYO4>B4HbqO ze4;m=<>h6Fl6B>`fFiy)bd}In_oIp7)hCe5o-gl)SDnt{)j|A`G)T5VJkhYxoF|Zj zsUd@{@_A*yh(o|w*^gH*9q}4Ha;y7IX0Niy^3U*R^?9kb{4;riu=y)w$ZQh5J2GVi=EZ=>v75vlvFPYV{cv#b)c5 z0bF{IOEXdY7{CwYY31j`E2`wzKZN>`wADY*-ed2ir;mnLKa!`l=ZDvx*QZ0nYlq}%<=XJdHFg`;0j2?e z@eH>Xp5c+h@Z6LgQR=$}p0L$=O%ga8{}HA*h)qj?!u}3pi?P{XZQei1UAj;Ja(ckQ4Sx;8^Fx=^SC5TbBw!!c`7MHdFs8R4!Mp1BITKqV>i}v1sE8h4fgNh@?O!VC-5rL_ z?KfvuFOqe{ShQlR7q!?tlJ)66SXiD`J|13?mE*K2`_*J+A0fSb!Yo)%W}050!GVaUp-u%IaP2kPP5gM$(sF`c)q>_?hmW{LD5U z0^)F2*gAcc&jN#cA~f8%E&)C7VY4fjeUepOqwMkPOL^8NJ`PP#0;4m6-~K~8ianF= z4d}@Hw2y!wT!m=%fLP+&lU(TdxPX|tmy1xJ%7_8fN!~$_V3NUoTfhcx2#CarEc_(K zIZt8gwq4jzrRrOIOE~Ol;9M@nlApqW#GFuJ+YkUezWrcG_%!CJq8vdylV!y!%zHXR zIL+f|u>{uR0POJuZ}kg@fx&hVgt9YN@r9;W)%T||#9Aa3tZ+za^EM#f!4 zlriqVjYtwkl21rvUmKBaye*zp872GzN=)ME1>7co6#q`)>8Lw_zl=hgaU&WKcLafK z+7h3xBQ)|A{Edx_<2w2yI8MScj|`X7g3HN(%c=Ufd?NUq5qypXd>&ax74X?d511g2 zI)dNiY>qto*(5H<@Xv6WeN-f?og4{(NzxYF$-qm!x8hIA#4}n^EG23q=tqWWWG*rv z1Ack5iT7RbjJjcZzKkj3QCa-uisDrmKVKc_T-D*W`%HCVJF)p(_w0Ckz~SnG8eMJB zMyd;G;B+;99pGvegZr6u7%Va3_F@%iLP)PqiBrHcWE%6W#PgXlM20l;^5-c?y%ApM zWHHrOkZk8TW6ZFg713C7p6dByRw*JtCgu3#2Sg5(8;@rl2S*W9%s^sN5Ce;Mr&kv2 ziUmJaJ@A7JnQsGS3zy!Vo~Y`#gL}gk5go_qGfZOeGVjOZSn!$G$115F&}=)2l%MS! zEFLjCP)tbAoDJm1*!J_4S2F2ot~kbn_SHH&)&Hq{Agzl7oD7EZ>q+t_ICEsa1)y(b zhSNkPwNICmcy5B{bU(#=cJ2e>WcH<}UGZ!oa9flSGA{48vwYk2nBx;92s;a8=N0xd zkps!&JiOh)G6tAI=naSvu&`27rw^hI^OQjT5vu(pQ=-nU!QwY%`fbdHm4kRZ(e4%+ES?h>E*=DLx&4fkuezpTm>E1`!5bGi zRg>-sCRtRy&1}C>$1aKto{Ma{{_6<9AA?o1TTd_OS*+dZ;kW)9D96)bc+g{!$mW@I zJ=cmrA}+jWLM zlkyZB*HUbS9X*_8Yo|D+@z6V|_P=4F;_0Yzu|X?lojp)wNjs;`0sf<6W*Oi%US_eI zoM#ZX>nF+%bUPk(q+4dWkzpCPJ%r^NloJt*~`Qh}ESWVhay?w_G@FWw-Lhrp8H2&4QwRl^`g4)@|2|9(M6rANzUR83%B?>JyL>8Mf)R zYqudqNlmw1Kg|(d$$0qNa_}wQC|A}P-*tl=1GU5SQ^i}jDrRKS(A&S?vSr)kE&1&k{Whe1Gj1Tyf+kYnB((@UFZ9Pso^^^IQmJ6K zU@QXqbTDDbDE)>aL)3$uheg&U#D7g9Vet%))Y{Kbe*Fn8zqEvnAijn2Pq557 zw+Gig8YD~r{Yd`v5Z68uC?E0k1v8OMSmN>5{Qx3H^bz^8j!kQSB4mBPl(pTS^{}&u z3~9&5sc5kwdhvO5L;fTX*M8$cuYG83xM$(a_kp%+zY$06+K2M9j_v|KYjX|pAMi$F z^JDEpds=tqg+s32okFgE(s+`7YiaP{p`B=nfj{ss1J3$>{lRWw($4yz?D_QvC=!Ca z-j6N$Y4J8sbL!wDoQ9hoNq(%hF|I~;Sk|`<`}p91=e7WC+Y=lwZFn2pnoH97{zJQP zjtb|xEXOh!8pu+Rhf)x@;SrOFzt;2t-63F)4#e?VKM>kHU?s8nt3$Z{JiM4F|9mL( z{2rMH5++B3v6k3al;;6r3>*;Lz${WA4mvS%>@fdhnhe=tp}xa|q%G~>0m(#D2(e1A z+#gBoj7M$lpX}im{#emPOOU-zkmK@?Ealg}$lddY_K=KU*VfL+&)Prf&oAUhV@cQk zATP^5(yU+qf9$;ve3eI)H-2-Ia6<@}fHXU_b2nQEbtFfwL`~& zMY&=>fv%X1Zn2-F^EfzFI%zg9F{Gkj4+Oq6_~V>=1xGT_rP$m-q?K%|2$Um*Y^5gG091fO49P}bB?H@p z!{yjK#I{UP7-fKhA~}auVtl(i%nU8VNM2Kw}}>-ImnE zvxZKi;8`PXVb^DU;~Y*B+6~NMzT|HagI25OsFj)aWEYBGwSL)%ATt0y#&MMNiU#W!ma%sIqUb8J%4Y^!eYmwJl z%Q+*lv%=hvPOii)F>D9oG%K5l=g}xw+HpcnpdKI~VJnGKIg&z6aUg6B^}5vjUf3iO2;t)|G+lCAu5i-g=lxyFd!dK7P_Pg>)Gj3=up&3;CLC z<9Vdy6x9aw6Ug=uc)jOO;H<5ICr){O%+oGBHlX~4z|-afKkV~w_mXsb-mRWD>UmKf zizK?q%8Qf4Ru?Xe0&3x8RM6_uN#I@WrCzSQtOIU;xkzSv-Zj1yK9W{?DKG`GaELWr z>Yzl#%!IiL{g0wclD0HZu||X9lbDK_LEsq8^po-i&pXRYk=XC^AMpH8x;!kE$`55p zX2dp1%13j+DJV^oM}OjsFHfG&AMpH82VA_)KF^;x?(?7Y`49U1hg^S7G4^4pfboQd z@e3q~;~654HpaLib+pnbHj04uYkO(rjz5YUH{c@(e;Q2r-+~D`*};-E`%zalva=5$H+!`w>u z<646$lzz8Rq)w@e39H$4542skE>a55S)qjzhh*Yl6$Q*H_QP@9tB(M?*DS^F7P&pG zNE4QNCi}TyaJIW`Iq2qt`UE}9iRu&GNfWkA2LgbDn%tf*(cR}kTzrQqf)j_8AXTYl zz82J+oDe5dxr!t247ts?!;0@U%}BqCRZi#m!bc^BV)6(v9Cs_RM=I|eF_kdkv;@ii z)C9@?^Gq#~1B*LHbyTu{qONKhm@Ob&EpVJw=wJzCX&1l}d`aXStCt{>Mv=$vKp-sR zw#puyEi{JH<-ZbH_9mTvOjcQ?Tr*G zk1wyO4enyOQO;pF$vn59LpbPS8k>H}=p058 z)7Um(XfSF;gG3fnXGYqn0ODASd!{npEfA*)z!ns)ObNZ;*vY(BnI7mf9BSB^j?%B&ri%2KKJGMg~GH##{sKJXn(Zj7|gdg6of{#ZTcN@75?OiAZo(eo$M66g9ae%M4=w8SB7hnc1 z(YRy_svFKYg{6HwAPUa5dSIl$i!Z>DfYZZ+ zU=+FOrg+WML%*y>ok6^`LF72hZ1rFrj)9mMK!L8W7?027^Q3ZlK9&VIel<{@FXvO8 z1wkBkp2Mh;ITD4#&T{}-D4>M~gf|)R{tQzsRtOH2ELI0x53rVKt&^71ry7YqG9Vsm z!mwaxl!aI{eyIonPOmz8d&*6~=R))$eB#pQkx!zIs%uWN2uHFqD!mtGWMjrR< zR&8eFu^UcH;7)fsLGNC3(^>(-`lhuGDGK^5v8W~|OOPttWb|Zmii>-%6mIX=lR=LO zrzJ@Cr6x%Br6q`WrzVJZrzdDjOVE~8|gw$>aH{*>S`m9EHap?sH z0$xRhfMhye;N;-Itz(1;$KiYJbI=V67H^{uvLCMxsY>DUtD1pYbS0$>nR!@_ndDFb zGu`zWA1a_>sDSo)x=vCJIre!C8Cfohil9sm>JTqGsv**+M!nouP$GI4Bf>Cwa>-=% z91jTi#h z%?R=kE6had=N0vHOkUGMLrW|~FToIv@`KBd46Q;9&|REs5T$-_c$T3!EgguX3e$6d z%>peuIpm+rahF)QNoIewnvrG^VaPk7Fbz^n^&DbX0a8Ca|yBVcuZ$myf5uj8Z|@os;7 zyzN32uj5jG__d$?o);J#~W-9jKfiWIfd8Al0z^MG=W&%KC0(c}z0LEa9JoMV@e~s0bi_lsg2aEp$RCl!;vxflJck z`xyUaSV0+&s#OFkQbpWBY%VRw*+=rEm>u0082GY+q)UH&A>u};4oG>LA@4%o zr-;xgr&B@aB080D@cM$f0A+4*s$X2+f&!!bd4ZfraM644WM@a<{W$;Gj%PZJe~ZuG z<@0ay`8T-!C6f2nfZg}zVN;YW#?b{s)nXhMGX5nvfMNWNKKNXm;`socEVYlmd6e9W z2Te`8ywNs#W3_rePS;F9{m^qk5x;839S<%9peH$l1z^x{G5(jZy|X|hG{h_}qG5NQ z2a`_2>CK~qMJt3O6%$?nj$p-wAF;DxH__^ih}legsey=hyayd$Tuk)`He8Hz%<&a? zq87Jtb9nzx?g&FGfv5z2E(>}mV^pSCSA7t!al>x>3)Nswlt2FApwSh3uRH6heYQqoMJQz|czagB#6+dH*Z zX~ISTvNa6@K$zi)ETDic-n)7N4ppFn3`+|+H9;&sIK7z4T^cBaKP^F8kQ;3z8Q15| zgoC3BX$2@$>y-uai}dQz0K754ZC*tI`(9EdDviY{UTF;0y0x@7KeKhJgt{{)@~wCw0q|}%{f>BGaJv!dEYI;aaI4PNs4$Rn=p&_J1QsAKvG4`#3nb4AZeXZ_YD)#oT~bw)G*UxG zIxM;2hAA~+d4ok20Qlr5F(rrvGM=4~ja6|39zPU>b=iXTQonjEGFyUtQ~(xF-_rvs z$AIK;8dGveFnAs$b3&g%i zkaAXz9^MP4hsIg)#7~&0g9ftSK=2r)$^{FR%0+`Ov&Rn^NTq>jgdhnJ(UDJ+Cip;w zY=dBAgAf>{vBe+)6OXhNz#s)_V-@f?6UHunP(!|Zg^9UOPRSvHIG}{>&NpA?GFIxmu)ORu0=PRYA*sqe_y17iY^W0)hhSiJ|v z=rc3D2k;IKGz)BDL#B->4q{e?uL6e#igR5*bPsNFR|Lw6gZU7Cqyb4R`)N=L)c_Vz zuJ(HOnjn>$2uwm&LF7W+N_{6$aNlV~f#m9g)md5KdiO@g^8!DN5AZTlJ1&qn_YD;4 zuuf{(J2Ha@GJ|2x%!CAULk2LH0U5x2J0kYVKQP0P~f~ z4B+I!j9~6JWJv8~PVJn^m^ywUGkAYSu!Dh-p~%EQMlc^*$&fmpIWR9GBiDhQw*y@Z( z>@yj`v6hTrJ2OMXx-zDY6=ej+Gq-pAER}yaGm^}ePwdK=I+mGFoRt|UU_M4_SaW<}6sGUJGEs)DzGIxGgLr7(nEXpHHOrjhTK|h^3BpnZ2S4#a2Q@Q? z@t~U6hp?Lw4$2#wu!7k~)yj(Ixj|0LHwPnllSx}Y8K5$cXIv|($P7>~07@R}&`-PC zFw&ZNkV*$o^x^SX^|Y7x_PQ`PR;`a2s}5X9x&tO1cB~DSqpoka@!{z*9gAa1+J`4g zv=7ge8DG@+u;FE3-cz-ME^LAE;Sn=~uhRJN@QHy0s&ns=R3+ppJ z`>^rFR=YlVnUHPZ%r-FlwCmexd^j7xg-lo_>UE6*p zh@_=~vFI`{q_#Y%h(Yt|JBf`W)p>mx0?E3JWpNX@!2rKlR z%)5$)zA1F3)2X2|i_Z0QZlv>0I*aHmrn7|3yXZ91xrxqFI;-idq0>ZXEu9uRchK2D z2j9L8BQ(H=p^a%)A=Z!kJ0%!o$YiUpz|P|hw1zs zok!?AO6TwCJWl6RbpD;r_vsv^^Fum6qVr=q$LPF7=VdxSp>v$hPwD)O&d=$bpz{kl zzohdkIw$G;n$B*>6m&TKk!=-fbOE}aHC^XSZ{^A0)-=q#jjBb|5BSwv?soh5YMMW>O@ zO>~yhSw?3$otx>bpmPhIm2_6oc{iQ+&{<9ARyw!Qxt-1$I!$!e(rKpCLZ_9^Iy!gI zX`{2A&Yg6y-rm9?Yd>pk!RiG|C9FRAh$uF?Fl=kF^eM+@YOpCY2WHrul7)2fv?%iM z;Zde8v7gITOV)3wHRCrd`x`}iGnMa2Q2P((;VFSid|7b|p6XC9 zfT(-o*TD=O#k)&2@=HIhKJ~uP%#=9wJ`;1Ow9578uSHyKU^;SD!Q~}V{_n?cVCwe< zq@ItP(KC^1USI~?YPj|tF&WB6NYY}q;{%1|*11n=yedZu0ikJq( z@c+4zcAk_|jWndY8nH8l_IjkAgH%;QJ@YbW6#wSHjY``2NM8#GYukW$*1@#Me5o<% zCnnaDIj2jRH3-dxpK+{JE&fdxoUGM6_@@I~J)qUV$a+ne-1CrnCh!t#9pa};d8C)^ zIUm0@_*V-|^CS)ZbCIS7Vb+kXKOZ5|JWqUeD5n~9u?MQ)GXEUJk~+3C;Vh3~z6He| zVeUD=^gov~t3cfhY)G+pT0nCX{?%YpioDp2aYR0?f=Q1&$bT(>HQ~1z>6#^OI$-M% z*Md~7h-IEygxQwtttzCilmE&0Z1E`4bL_B<>yWP+J~bk1kej*q@I)2db%-ZzGvTWi z{4;=!<+Hz9kZ-L}Ny?iMBF#)seu+xSETaZFNY70C&ym9ZA!g#OM*3FxX+0&K^piUN zvVNq9SZfi>nlc^77O^zrm*b0R6+h9(5l_r4kF_O-vQ)MyM|%}8vc2e%My6qVvF%9h zTBIUvtRuOeHDcXJ0iPaX4-q3v=4!qt!7JO|r_|NQczGR*ua)r4 zBsQM;aCd#CXBs;3&4;tUWkSimF%UglMq?9S3>rE?360WxW@3&1MG9qyHm~N~9#|n3 ze}?&5hkAk{QvrOWhfgx_%e;4^BL2rCI?h#q-}G)Md>7h^dD5SU;bTmh(yM1+yf(c4 zTm||mGgRLIifM=E?#6oq%MBg8+|PDWn*)5~ke}?`Bu&vGpEyqcY_G{VeBa)avWMe5s=qmE$8Q+^b-bw+OSexzDzUSc@CH0|gaBIDC6w@d$Uw}p=-nSRN{ zx_p1e#Oq!uwV$JX$tUpSE1Zj_#i*V%F{*%sy>mn6k|B}FH)qc&sYR;BGS6ZevC84YhrrfmTQ5I5sv?YRRkNOY zdya+Noox}B>Y<9_yIy1t&Pj?r%sY>B(U5$b2QT$zTdb)K)fpa$;5%0o=KdNR!M-)y zLP)O~RR9R!9X_wvJ=vCOSkADf zrxa6DQR2XZwW8736;$KMKys8x#5!4~D`0;iTRK?p*BZQPdFFpRP<86rI`L+74!dVF z)LErDv`B|@D&nA{9BK{N`?IAvmA%hK1s6nTqn!Op3YAb|3#QKFoUuD$ec>WYY4$wV z#E_YK>@WRqp+1f7$KHCnhqtcBFNO!+jTYVv?ohnIMXlzFzx|&|7-q?T%VLU-#zp&qW|hZ4n`o{=oMN7=rEX*|y4?OUoQ63aWjCs-15IRg`6>4LIs3 zWR0M`0WH=grfZ5_Wz_TQxA&$j+LYBKdoDj$+j*3EkL=T=?$O0*QCY_QX*Er6Nq_pw zF=Kq>G*!PvT;``r)&5+@M7}?sD!uHiSDGX3zq3=7ftrWk3ZD1#uu>_8x0>R8#q<7H z)6?0v)9aPy>C)3bVqI$NY};wLEY5DhnYEHNeC_IQZl!ISJp^jzi!tbphGwEL5t5mzaL4B@ecXzgpo;u_*)yNZP6mh1T4N+O!X46$3gYaCn?8vs3#%O4$PiJIf zX)y6-ha>CS(PZJh$8U;LW7y~(=|p91c}^F1-UOMhW>5uNCu&D4c4i^?AI!Ez)64WL zeakR$x1gkXD2pczxHY{V6Z#$Q#C>kMrU&f)w}P%r;?AfNuSwBcG8v_-t|O%;YgSPv z@AR=}_>=6>4)$PIaWU=}f7xrI!`FMM<*Rw`Y%~nd?WZd10ZO#ZVpZT`PgPib_{L8N zIYxaHiaeb4W*dbpkCyN#jM{2YTi!<8EX|hN=g9oC9^JJClyYffP-e{`sS^UF@@tts zO_BEAY^yPnQq1~^I*0mJ7tJp`Dv~-eo5K%hJElQPImHpVoTg&?U;igj?f*cEpApR$ z!90_oYYg1?e}jGsCS~dxN!!0xEwmYP$6HBxDp#a_wr!+h)^@U`kTv8+FGo{{tX+p| zx5ju*O`%n9XQWT7oq?>i+0=oYj@Un64=2qSp6slZ`PWw-X>CrCwMMAinQaeb*1(MJ zm1zdbT4a*dh94|2!}nZ8zJckB3X3{~O>09dY$NC1uDLg`BHO0q(uAUtyHYg6&>FrJ z5YC#dfvjzn>;rZDgOZ%`B@_Cr8DJSGHFG=HFsa`S%v4m?H5nQDH)$lNvaV-@QUdR6 zpRvq(f#}z^%z+7ILse3gI-~zno9Ro8tox4za|dRms~M~svOcq9%JQ#&jRZ2|*jopi z)aJlOrY|IBy;L>G{iIMoqF!^ZwQ<&a``$6a3P<+KG@3lg z(cYm=DkbR~ID9~cU&Omb_Fy?D3>SXHq=bXn{jw9;&ONDGOsZjwJ+KjNLYtgX>C-nz zSqH<{*`Gvty;OK(DmCXyj4muWvbH6pVteh@P`$7a3wgeHx0$v&ICFDj z*}KAF?2LZO)%?yAqEzc>hVj=$@w2j2WWQx<>gz9;6Zi0vHpywEIj_}DSwsVPDo-nnDg zfupRo^w%nu>%dOwF?HBnjdOJdkh2&2FzXe_@U5#%lVjG)P0l;b7$=@BloG`3eQ`ZF z2XVAQ8uJ^DQDl9fLve+A{>*R#TQ~J{*+$10uB)XkLEgx^fZMZ5x8VBs&7dXgb;0l+ z_A7!)F!(no-RU&z69<`u%Wwf=rm)Pz{A}Vn>(vT5k@F%g59*SiI_In8p{LbkTHj|~ zs9$kP7r~1_2n`{;g7&5s>R(j9-a@lpbQ=~oi(b{M#)M`1ngd=5@YcW^C`zq1M_yFc zqWSE5>mx5bYwKXDoL9&CIfK7;(`H@Y;iL5R_iOgcf^*BI)MdiR+du2Z7%n&|8eeNu zi>q25(OWNrJNu(#{>D(pjWU&b%VNv!6)8-rnY~S_5Tdje%Y^zN{KYYk_%CdF~3h)-VdMTT=LB_wFXD=#+ zd3f1oFP&BO-*Hm{suKfQGjpbbO5?<<)zI zZ^$)Vd^h90htx@hz0Jk!y6h1S&uNgdcUZGc_{;|9bIhm16MNNWmvZr~9wH#W`{^E@ z(_f6@KJFaxWS2T=Fyg!5BW)zll52_{F#``T;_USqUd-@@{NV8HZ@eKh7o4eSTe2@c zot4dCP{nXMGG^Nm8xb-!uF@>h3sY^xot;dJ*b!fU8eSmf9vAGJA=SvWt?mm&UXg0# zZ4lALQ_v&dE*f5*nYEO`Xn5%+-mGQMPQ{2o#b2Cn5a#jMPv9=uU9c0IDGCC+@niAdSPypF2R zoRxj*eMCalafK9Oj<}qq%uE@(G4YW;lXYe0GASN5N=;b_^3=J`UU68MOID_3mS;w+ zMi42Wn!u6ky{%(7%kY#ZV$B3_XJ(|HbXlaS&7_n2=lRzz>MWhXhVff|sMqp3bqmIc zs?FtUKUST8>qG_F{qr#G^N8rZXh+rg*PlC?zl`NT(v8e)JHGotlr@>Mrz#tBkVTzV z;yY=S1<_2I4E9VD&$XE{WRfw%%c>h`)>Mfx?QGe2Jc!Jan!NsO$=gTny&>?CzUNJ%I?;ZipNek z*twy!GIMfecu#+#L>Vo}0X*SJD|0b2CmW6=KHJkFL~hJnqf{PV2t8S88=FDDx2^x$ zTVXAIs zfe{Vqn=oLM#>$t%NWaNmpSeuVGaL*?Au);&HFi$4c-{AG8I@^NO>=$}BO;W-g9Ee+ zx|EWSlt#2p&CXn2>PTRAWd!%G*%|~Z3$#@13T~7Tv6=iDQ>bnSMLrAM&H?B00TV4;^DVZzDC${)< zY^qAJR3-M>g9D$0dl$sG8lc)h<$-5+lp?W3xQ*?{vBQd)Vrx8p@X)fEQ)^Fp)Qn2T z9bqP-;0&%#K1>@~NyfZ5dt}MyVdDdDu^i<2K>yw3)UHrm%PldAib*CLOIDgMB_zAvvpQ9uD-qjm_$|EX zxw258lfkH<7!Gym&qT;@zBJjUoU5F4-nhyn9^OXjNv}6a(<6rSSEsy>#2Qfws~3o- zne3Tr0Rq1mr6e>+d zV{oS4<8RbUG9^gmQag;9%y`PMVc;rfy^@jK#pF}WRB}kq@Tbj8pR*!dZD?K6pK%#V;I$&!k9anK zW8Rzk$j$1pR7wJx%(&L~-hbBTQTzyb<3({C<(g?1PT+X|sF&iO*>zy&dPY@$E_{W0TOJ(yhxvg3 zymalC#Qou@KrkFGkH}AP5MNu1g!2m|n(hw)2uJdfCW0ina3ckQeEvitA$(trzx>SB z=x`ozjvmGDD#xx=KQrwefl2sqmmLW33v{D`a1dU)Y)%!v>W0s{mNM$vDS*dfoI-6e!{Pwdi(B@s?Ux2&h%%0v*zME zran~m%c@ysf=tiX!hj4Fi7!}y|H zc^IFJ8~y&pt(~1sceH*W5Ev&P7ppSgRSx7A@&l0}es2uF_(n3m>ScdEr!;`?iiH8; z#|&@g7n{TQ)d&vU_tIEdQ0ZyhH`?+JCB_c#`nd8CG*0lih?dgzZHZfUje*@%3Fwf zmMq3M5{Y9m;A0hhEa5k4_)Wk)8lNoB$q(g}BzEVcisiZap1MD@X4Y*r$PcPmzl zcLygThl(&RSuHp=gm1~?`>gncHxjEV+9y#j04Cw*V*FU4JY+>hQSKxKBJ$)xy7ozA zLSplqJcuxInP2%}b9*C%p5JpAg;tQ?%>!q=+5b)rt$^hH~)u{;LbE$A4n`0lv zc(%5cL5c(mC`t+-XL2GU@^d2K5VwS&E+f7`b#i>cdF)(Wz7<~(1g$7LzF-XMYv96( z3(9;c%OeFyqmyDvK$~q;S#+=6hpB=)Fk1$&?@ zR9H}e4;AANKLbJ3g$zFsAyWH<;ku|5??7$K!{xbTDJ!i@M0@N&Dqb*1Kt@NW^snH^{Mr-n#TCKrIWUV-w*XUXiX5!mY{NBiK zlcvJRZ_}BW(DiyFAEMaB-=X6PGx*V%?d-K!yC7`0Vr)>d7Gq2*8{e2_DrcpnDzaj> zPQ@6Ls?UlQht$9?lyt>btWT$7oJrSj#m|_w?3cETC4jx8=O`GAb5BAEWX^Tqt67sn zXhwk-TC)&KfdaIQ5-(d{JS;SR#)|cuK8S&r`ZWbCRd<3Z6lg_&?G74pcI&Ry)d-GJ z;tO9o?cFQiOO5R|xGB7L>ruQrs4<)Trm9G@PnrTfwO12D7`#&Q;gUI~=)-ADJI65X z9K*D8tk_|H>4!CU0f{c&;4tWqmMk{tkEWqtY|t+@=oeeDqki;9HF_Y?=nW3jZYRbX z>?cy&ZLDs$vAW&HS}|84V7r~r?RH|U#%%H%%%=+tW_(~?rcjNsP-85#VyFGYp4J#o z7ix@dKHbuoU3ZIk+Rgs3cU!Snbbl~L_m@+IIh*mxgO*dI;srKVVR6Qjn(*jKk!B^a z$0-7G^#^UkmNULc#*R*AkVd>Q=tMM9!c6?66u%P{0#91bBzl}EJUSB-x?U%0@=x*Q zpMnfBQe7-l43;T6E0eok4@-mPoYIZ%G)SX6WokS+WokTjtMS-vGzX{5f+~e!D0103 zWjPI|OAzHW=t78Cb&88uceAqwDn1qq&KlKw2qO;%hSOd$&k)nDIl$-?^9<+CGn_jQ z=}pOCFQ;8`E|KVh4Gz;}U6y^==ifO7dZE43vX5dyl0HN}uwA@c@@qeWzBp&di*tr7 zXNc3bGgKcs4+|*F_igx|@qWwcLoUlXf*8w2D$ID@;4Z9F2!Y4ysVvWBMX<^#$j!&P zqM$(W7iQeYLF3JoEk?t22899zfJPh|T~L7HOc)=24vPj4+MOXaU89&#o^+E?$ztO+ zqNI8%2}sgO;M0Fv|91veQu#$!JA+VwFa$)$4NnfCzaW{NLHvo58%CW-k0g~JgmbYd z!DbW+Q9cA{!7Sr}A(r!bvz8K8mj zAq|WV`G6e;NM%f?v`tFemojO9NgvQL*|CJ=sQvX zL%HA*F#ixV&#(xq-7iTzm+z~WZHfFUl34~8%- z*ITitLO>n+ytQ7q>PbmytqQXPH>g$@AKGa0V34$J z(*i+O+rXX7Q@E3PrFu1si94yJT{4eDKeo?uT&0P#x{)?4Qi}~!qM_y}MFb569hP(4 za$FH|REr44hZJ9<|H*Y1=dge8f{fcorh$uA=_PLfCM#6@%AhSt>{L)^vhX}B#C#{2 zBe6%vl}Q|@UsTdLf?vwhBjd=fM|7a1=d_ekr1NmvFX?52u*`(|MKcmd1#C<}AwPHF zr!XYu6hfqbF$*0U!{u}A>0oJ~G)LNA#x>gB=?J1jB?)+1MlzDaMuv`YL$DHIgaZyu z$p;=&=ug6-m)OM>KRjD3JH~3p^T>r;N@CBD-?p$8b~026Z@IMvgdka%{HcRj`fnRm z87Rk(Vhwv+P}+POYFvfX+hC_d>haoIWp86j{Ij-ADd3>Aw$LVkdTj|~V4w`-lTevh zCu6@rqo_6`oaV`Vm?yWezUYiC(vZl+A-BcaQiLwSkMzkFtON@~c_1Ivd^l1dv`Zzh zxP};jL1J_ePO!boT==?em>lp8_8DA&5OJYroYQ+Y(D@<>QoPh<(dEvjT@ ztlf%7*toHMbs?BL_rVHk#RsfJCC62~EQm1Y9dv$*gO!{rUMrCCN=hcl4t6>v{S>c6 zX7nIPR`nvM*Qol*FTzQ!!X$^PLt~KNq!u-*649({yi!@$oEj-JIizb&x)ZxfA*b&T zLaAYAmP4H5598eRgIy`dbxc8Juv7*B=pa3$pCixIqYV5=v#e&=KF@(nRN%LhsbyNR)mE%U%HL<%Sfhdvh$a{?u%rOnq9V|ld%LVyo(n1?mY$su z3#3BC3?P~!`GI@auiSnT>_}$ zE%-$NkVJ4oaM+N}5lPn}joKjoZn_SYAkJTLpQ0Jpil)F!Jggta3=r2AkvL%{zTX$$ zuV$GzVJy+6TI3F}ptejDn5-*)}mhF=hg{&qoKI;sP|;Q0db%EcPi&0oOEK^L3N6j<;!+K_bVuBU)# z6&0>014w#d095rH*2VPUw=5L0V#OT(T>Z?(z{NnNMg$8oe<0rYbAAZIU zj4H^R-n}r}%J75nio!;A2_OkzXyOFsC>>z7a5_RklrO393z5{jcYX-6ivnNd2baBA zfS2h+h?iLn`K)dAfU`g)Iifnh3YA^LYU~45QnblVF{U%vCnFHviAn(&1}ShurnWst z31ZUtfEy_c<%Y&%s)Knheufb9FEli_Iy1B6CMi@p|lzV!egMXtfIcdfIo&RuL6T!s5q<2!%)P%jIM5kjMl1)i*vEn z&=jo5snE1BEfo&^8!RfskW|H3t1b<>NELE)Jj-Ay=6~=8x-qGzs|5F|5KbJ_aE>g- z7wcatiwtuf;O`XuTd#f-SYJy1!y+NA1|2-3eq$UGM1NdGw}C$U380w`;fMvtSadgN zgYw>JCD(}cG}*3uHrcNEIk^%@z|YB*s*4f9;g)RI;Pz;!5Ey{~Fr*R&O}6VFD+yx? z0)jyOh&4MoyMT+#B2YoCYdsZ6SX_vtks(!G7R_oe7wZRoKreuxNkTHPzb)h>DR^X= zm!y<3wQWR_gP+h&XSRho`TV&D}4KOFni zTu@7niU5}zXcBkKd*MO?3o-mmyfQ@eyu$s}Wl&||W?UK#eVso6$W zv)CgFgETBd$U0n-lsM<>d4xVfOG5cLoFEa3_bJ9>KV{>?!!>Slr7WD$o5C21^;R0z zTNyMvg~^rNBt$kepQOykCLw_6$ZZXpA6F`VBx>q+$>o?>&qo^xH^6_f@sCvsw2qOk zA;Zu^Rkqy}LYCS_eo_5MpMq4lkct40LU0*^QpBDoze;>47 zxt?NIw1eMCT`Ai__fxxAeSN|}9}!8mhc6I%kQGuf6G81^;ZThmT`J?FJj_zGsGJax z0(H8oO% zV9iSbI{OGzZd&@-0Hb09DP^^>thN*siQ}n3u>mJ|p2aIWaWFM_h^Q0FO^r&*x=Xo< z<3jP2SX<~ikwtR$2r|jCZ52-cO+pK1y!oA^g8w6ax)m+hsUU@o>IXU~Lxw<@crly_ zi9M`;x2xae6vn;P|D;qF%wy0}MUE37K>LF@fTj z*$KyyHVPjRYl3l-2f^$FX*CIkZIz-M)--04zjc7)qEbEE$==QdEg~n0VQe7}TmCZTpf?5&F}%gV;MTsl0k9 zUnpPI4Z0gr5(b|be{CB}ZJjT1s6bi2t@Ucc;tyt@^%qfBPZV%V;j=u`M3`CU@t1XJ zKnqPVm6{^BlUud1BH3s4?1sgTHkD)_R=1O&GjGSA-WwncjMTdq>D{;j=qZw@7@Xj2 zXF2*u6fEfTC>SfYp54G%Ox?iE3V_*0M5d&+%m@{hQgZx6pwX!J_-GJ1@58RKq3=FT zA9+-nU9h8^yw6{V-e*iQo5pBznVR=25|i7lQZH9PYGrMP9*{Z;ap)jFqO*UonHJ& ztP>UD1ecW@2$R=z5e!OIl7^sSH>i`Cp59@_x!Vj^>I}Zzp{vOlQ?ETjE4GAmy;L~a zKhX=rIN;Zd4gJ6%K(!<-mnG>qtU=3t zjaa7xmIRT3bxA_~i?ZyRwkkk}HT%Yc(G`zZKMPIx_RZF^%x)nx+{J9J%A;|-u z=F$lIK|naBLNmo4GmLOD#S2ISm6C1!{fq=-6^x975bR&7!+lxVNPC1~+u+f>u9(s} zk`hezPf)Bcyy&$NSdik?M(W9qu!SJ(Yg zio2y&tf)v9`=wj4DzBKlVIRfu>10GrD3pmDlH8ahtsLVV2N8@1&;WCG1@|2#2~ruL zwQZ$Ir+Z|-sew~tCHLzZkW5_zL#3&~Aw7R$lPq~iCl{C&Mn)>x`$36Fem)e3d{D$(ePl%mD)lB&S*cCFI(ipcIbh%Pj#j7pix50=kF{)bOpb8z)A!XRZjM+b0 ztatQjQu)h_{nzLdWmMw&vHUnmDGIvW3_6`5LAsT>QGwVF-6F9a6NX*?;3{Go2A+Ef zMQ2gHjq0-63M;acm=+lVat;ctZV#zr216oeQ5uK0f?M0xOvEmVja|S#D{O-ia>>-IDb> zQGHXWjJ<~whtM>rrwfJ14eka9U;tpjZaCXY*7GP2u-h1SQi%L;mmDFdPlZ&^DmPhg zM&?nBOwaH1`~0r93MP?xrbmw4I@_^mBJrRGdT;VRtN;;|O|WrXav)%q3ApS~Kv7Eh zs9i-NTAPI8^cZ%dWe17Ep5j5IKCvqg1gUr=yOtcJ+4VYlhZRLQMuTK&rXt6z_;H!Z zj$6rNIu~Ik{sfSjvQOxE!q_qPPH_*TTQ~wI8=0g|``8CWGKrY&5kri7#J*>;6)P63 z#a7Q`g;ij>)Sf9`sXbG4JYg`!l;;aixB}2AGsU{wz&*Qs*>~yegcu^~2f<&Z} z>}+N%e|p@b{Gh=Lpgujj-6P%b3T~_(!N%IF+b1R1%gF;o=+-f9w^!2I`%}ZozSMBM zJ1yLn8g?iIsE|Vta)#1Js2Xwb1D(>O7E273yQhGX^-{9l#7)+-%|M}8;|4k6Fz4%l zB#d_(rjb+5CY`-s7<#`yYo9NGi4|-wTA0p)9VJ?ESUy|39VcNruo4$nMn#kTA7zltL;am!THC^wzj zfhE?iAxfIc9Eg!9dzBz3HsGo~eFzA4vyUkX8qy|?E1{Y=Zqh<{CXP#5i37PwN@u3k zb8ce4Neda5*ss#+c{p)K<2z&0KqM#5s5FcNKHH?FkDM6Y0IHpvrK8^1N zX@T})oj$cRCkmFwFprVaoAzK2PBDbSoUz4T!rOY!2s?f}>Bgr$c*ir$Iqt36mwNXsZbD zw6`{X_PiqgV^oo12T&qM)et0$QNWW!Wra3lJi^_oOnZ+ z+xuc-6ml`Y(%dM1$n+`<7B>uo*WHkGGCEmC@mls=$KZ_#n9C2q9}*{2zT%kp+;*cpMHk=#2~Zu<;Zcf57WNo4CJ z%tzEO!7C7b1ZVgm&g9Sq`jl6CBJ>bZQr7`Wr-r5n-nzvIkRm_}a60Tp#&-E;PWuPDgMp_Cth7AE_*kXfyq!Q<$+*sX+IUku7nmr1o$CRFisg(1Pqm2gc~X$ zR(V<)SB1Fw#ReO4b+!fMHv71^YByIP@iWHofNO=2@a!O76tK4KRtBCLC9BbUU>?Oe zHINfBeB&pi5~2Y*2kDQ=0wysa8&yMCJ`m`fR!!?n79PcYtjVgN$t)-~B?5kMP|+%! zJh6`o;gHx$B_EP3WpZ$lw3R_#qQTe^6#;DMki7?0r@%ukj~Li{Sk+F(MTW}UQl3K1 zDRu8^IX1?XN`vh$8@G*sBvw=rxPm$qvXUz>b_d}KoyJb5n%N#YFQBr!??gzhc=rWD znhvD?;L3ruK}~XDYlF0}x-kR|1YtB1Z@(zM>^WrCx}`YZq3^?38-$deLvn*k*{qU9 zFqlB;XZ4^JL?WelC;$h$@X!pOF5rEF@?1P!62wy|81lJ6Ox?K_D@hK<`9@4>Y{oI6 zQP|SNW+pBRNy>1r46AG$OMTqx!Ce7x7%{KAh5#RFxP~Ql3w0Q$admsXmhAB1Q3>hup$V%^-{k z-lvAhK6Eiwr26+CQQSlS>>9ity52oggV~$NtaN0}2 zbDR#D7i=o$+^qypUb&(8A%7^r^GsgcfC*6?CW`ssRD=&sA=GyooDKGhK!fhxFI*l8 zieZB{tAL{Kq)0XV&InuY3ATxDTVn1^}~Aes3^(Y*(52|+IE%2kncaU=<1RpPy9d7a3z2cR-W zR23OdB#6WhbUCh6BFa?@V_&Jg2dUBEP=LJyIf{L|?NU1X#NIom5GvO`3@OXr@A>21 zp5N*7{MaWZKBkxXR}di}M-MR9?$aLJDnvSHYR(a6c8)-vLw0+9XNU;|&dYV=^3$9# zB^%UA9L$wPSiIpv-MYF#xN!$b&IMY$K?vK8`v4d&o*%n`tdxSQ3W`5b?7?GuJU?zp zyXox%q(Jg&x_XOTy3SxIN;IcTdHP3pqf*$Ya9|#l6tFtiuz_(EoA?e`c;beI9EMVF zT3Y#4;o`>*5EIkyYu&_7=EUKKUYOTwJU`ScHX-4@)V+BEt-;|e9<353hmw#`%!f{m z^59sKq#MMnC6I$S10)0w(5|a)Z%A03+>>=!VhSNnqtxUiYrlfIZd;VCS=XX?ht26~3JT}YoJC&Y4vBUGn zruh8Q=Bliiua5Q^Uz!%rZ=d%3u>8Ap#=6+hf=9EKx=AGcFdJGiJuytTCwVB_DaK7} z^qwmyltHF|JrJ8kH?c$f(kC(LR=K1oz%CXWE5d;}D<<8g{lZGhAD1d>_#t2V@jm|% z&!2eM^T&?){0%<;NuOVuN8xu?dho<9&+oKIok^#Uh4BaA})V zU4D!;G7a7`y(}P2J}Q_ZhH#*ax-`8*ps34;)+Vg7f^~JOg%S`@qg@1GZ25!1ieu zyweZfX}~c*L&S>ZkP;?J+^pWJwU;7U9EgmAKANxOBza6bH0%)!?k8^2setT&^#;Av7Kfaxe+3jZjA0(DP8sFf&+U zEkWgBS~|$E0#VUblYu#0F=R}8*l5<;x;!rgG@9X@=p-H|K{hg+Udei9wWtv1Ooly6 zo*e-5z@n&o#Y3ta7XY_juKk!+wrAw=BD|=nUJ0@Xd_bPm=F>q~1b8WF0}vn&4e0F7 z5eC{wC!VO`Jxll_2~5-&dLH;VYoqao?2Ny)Q&2FSM}r1ae$FwQMHDd>z3 zXo!#dh);0Sj47e%yEvioDj;-c4;VGTs0YMJEL~8y2c%#UoX(IBNVR|kIfFjn0s~y& z0po`Z&O;tBK?{k{S?K}erjO#jK1%Qqy`-Gtr4*%vz@)Eqc}kSP*j6v4V;hoeAJA0O z@mF)QNjcey%KC-A0b(8DO3VbY>fzvpt}FS_7dwyV>oX z2Izn9%5-t87?Kra;9jlCfy_TJKEs2F zif?CS`X{FapXI~WbHXJ~6%J7p@DPPO7RN_yN}O82u?x5|fhu?ZZ?#jCn} zb`_?vImn5JqwtbVP_oP%ji*`hQcQ_+9f*Xh!ry|=s>F;Y9tV$4ZYeKu=HW>?KE#6% zCUJW4r(wuYTFFOjK-+beF9*@b0K-E#$OjLJ442q1(sGT*q7bm`XR#KAg}#_8QMHwV zSJ~NUc}TzuD=&@4YwIu+;WaJn!2lk{ws~bR!l(;#0uvXnZ{EDAbJM!6X$?(XP1EMJ zY?#*4-W~|x{p~Te)9R+xOslJ|no%1F6y*d$3J?thF2L*DZqCZNn>KfB+T7H&e$&Q4 zpe849%~zkS%osbZvT{y)d*$Z!ceHhNR&H+XY~6f!Ys<7i;G&$s1#XV7ey(!bl6lK3 z=WlM>(0b3N&F{tY27Kh5E}wqSfm#<>9=vebd)IfYXx+Si-TG!Jd*R0UTiV-~Z{E_` zl~b4#$Zy>^_2y-PKx|`9AlBw$pSHZUvrFo^yrDq?ol`0sx2$bn-~7(jd#{T|t81eC zuclspW~xv$S{JPrfR3-NuAN>}HNA={1x_FSRn45yTwU7|ZHm^cn=!q4ZS{<**7~aY zs+P4)Rn5`n8CBC;*44MPwys@UU0YvQQ(IHjR99CwBU&4cuA5#{KeMi-x*lcMtgWeC z*IKo1U0rka%yreRtuvaM&y`{CKW@dDH^UT_+*18!rGg|AaqSZ6&X4Xch zPp^xvn=zxlYVErEwd!nrNxuR|7>XPr{;HlsNt#8 z1I*KM?dscaXm43v9j%$Mx_U-^boH`LTQ)bhcCOyE_RiIFHr_k8@#fV_TiaWkI$KwJ z-S4t_b7#lqO?R$tXzhG&*QSn4DLPu#lA!;=|0PBjy3{>Jf2A8t@$~!B1p>EYz&5nE zFK$}DF|eVtdDG_BRyF96=he%Aqc|n=n;OUwK zPr&?lI=2Si6@g{=u*nL1hGQvw3-OVQCGs`5CHOe>yCmt;dB6QDzY;MjkRSN*@AKT> zw`)Xs_*D$60r+XazZ_uYr^wAmruoT?b@(m^|C_`QPvBD}{B#LFq~ZVGsw4>P$y?5E zAAlx)IYoU!X*i~+q=};5>i-&iq62M!`eGLgAMfA?llWybelw^OaDMi$8Tj~V;7y>W zD=-bTs*mtZ)1M-lhR=8K+adgKQDCBrr$cDH*ZmeHv`lu|e2doKK>9x<wQt3G}fYyb@*2!ztw@Nzzo0w_)HAj zh`pjdo4XOzw)<)~yl&^FBN4a;`1obKI|LJ3zXP98Vej36@8or%%qKB8hT}b3n@vON zO8I}gjDS^PAng1JU|9>>U(H7Wq0Wjc|vZ!;x&QYVU>RHh9$FVt~ z;11`42LSqLFej&KOmy_9{Hw#c!3**O(M6*QuO5|?m*dO`=H%_TJ~}IUo)0oEIyyHe zup{r2K|2t=*q1MF{7a)Aiaq(oYhT#%`-g(BJ{tbjA5KpA#13bI6Ls>w7Ikv}aYt?t z`*x+%LC)Ga*L;2Phd)<(xm0d#bgWBQPCiJuM<~k0_lZh_H!rIyjh2i;prEwymZr|O z^&9W#+O)B%I2tA}R2o{^+OlEO#+IszXoQf$(#%Vvs*9r+F+R7n%+*FKm#^Q@I(1oB z(}s@9#<_E%73YnG0$yDet*W0sefo@dBUl%$b%W8^7vB=f#zx1GvN5H3i{I6_wCalJ zWhz*)aqjw#w${y+4a??L&Re$R+PTsBHB+ZY>+7aA%$r|dby@UMRijA88ZE=}ZhdoW z)XBNT-@-Zhfm|nN92g>}FzDpu1pfV@E3NK-kKgv#)~mwzumAY7zZpC8(_Oz=@Yk~c zn0@}!74N(4=s!I0=a*ml$X)OJZT)Hc6J@tOSwA>*s$uV4_kZTv_=$i2_M*<2J_agA1P?>30-O}+< zg$uV;zWdpYAOF{Z+dtCt@{Fp)Umtwt`Mbv^c3(R0TlYU-_ow*YS8o|L>Bhd6e|cin zjiC=;@a1D4{A2HwXMXuFQ{Q)F$rlIS{%>DNT3@W&^{totBhT%>=I8IqdHHW{{Bzy+ z9&D<6;0Jlnzwq=Y3cm5;nfT3DemD8cQR^-{^`n9Lr*C=ewy*81+4qShFHZQ}%*ZD% z_)5=z{pB~GE8qOLKYBC>j?Vd%lQSAEk{>Nclj0j<6Z6J@Vp`wLKNx@O_YZyb*YTl0 zwS6%D_{^^h50zhb%D7M)IYwCAe}L zl0;XID!{1BhixGzZ&CEd=mHat276}d0`9rzo=gR_ZaxR*u4pOgy)3UNT4+$_7Wml( z0}||#6Da!Zzn?z!pMSsj$~p1`Y$g&cK@cW+lL-L_MdA$`RPp)9^C%YpSOJJ z-=6#3U;pv4$BsPJ_%}0SKM4P+Y1s`wx$42M#vYyUKt z&e5gU6tzB5*))4u)j<14F8;t*{`A+<#-(c>xb{6?Uim~<)0`)_AN%a(OBOx;P{+b6 zZrggt^Y5y-D=~k6`8&V#^0;UJ?TY6@KYL%{6XylaU(_+LerjxQ<7b||<6D2ecmK14 zk8l3O>C0*!er5TOt(o=KH9Oz?#3LX4`r2bB9Prmfz?wc1c z`p}{kUn?DR_wPb~8hpp@zx2Jh^ofeef4*+&H@}&9xaY3cl5ZxT8{N?J(x#t({><*# z4NpAzHfEBwUVY?4(b;zx!L$Y~wK~&4&GkvEi*9@Q*2eo+ z^!)3Mv%Z;k;?uoPz3_kH(VIB9OY$HucFvDBRHgOL^k@}XDZlip>98c#UcI)ax~hI% z)%2-#>zbRU!eF&->dfYv8B?dPYp$)G(Xy_&2DUa%qDBC|P;%n=Z||MBGUvG&)22_H z_~k{96kZfv!2}oOy(DdU{qg@uKDlS^qn%sNdv4sX>wfU{r>0zZ z+h3OFUmL$`c5L(~|M{-VZ~N{CzSRD<=RR}$t+{1am0$6}&@Y~Cz38cLj{WE5U!Pq6 z?!KSD|C#f@w4(YeFAu)(@gMxt#&Nec{Nc!+-(L9Ql4t%Y{M*V;{QjlCUUBP*XJ2jl zuk*h>x$u%lfBcOO=drTQLzfP|Z_3=?y!y)n$9`7+na3WQ9$305wC_88?LXQ%s`k@g zUDnfDa?j|G)UNvSP|vQwUtg*Ez?9SXMtP17%@A{hu&r8QRcc2Up@M}O?{Z6E*rl$Mu zt2&>0qYpURo%^b$Mz1E{<(5uzC%np~n>KY-&c$4%?8&W_bGCG~ZQ8uP>t4~yqS5;4 zRghmZr&mLm!4xdPY6k!Rl(Vm;T76;js@3O5TmDb^BWo%vZ}_{rm$hGi;deI;zVN$W zzW1*WO)Nh4<7>O(7yR=zJE~8<`lGMju;kJgHwS)DdrRTA=Ra4u@bsy+-HYFO{}WH& z`_8*Q@s7~<|NF8ZKf0ywo1f`y_|W%aKlsn5e_yxrxz+QI{?li#J2tuPp$k6!#OBTw zzdLXH@&B&fzIn%Y@4mg_o_XzK0=bIatlOoH)yPY+&S6uPXPcJJybJa_Q%N|&Dd}p*#$+CsfcSPsyn7d<6&)Y{X z%Upin4AyQ2XNweDZlo5Z*n%j8vI#?q)sIYysSP6z7>*ZU9WKAHL$hk;^&h%?{y+U{ z)9lYzKXvD?!q;rvweXL>x_!&97rkxj_vU_f%wJ#l#nh@#T{^h6@nQSoTX$b~&7!Y- za@UH1pLG1ozP+#9`_#hCf4u&eb3XL^OGW3cf8mLN%Bg=I(|B;jH>UpN#&7TM`1!7} zpUiz?#j$-Ke&;Q}f8d6J-~H!rfAf=`i)v==Tk*)LWtS$e+UZ0-{_^%v`R`v|^2&XW zKYyb1iH|Nhbm6x@viX6l?%ME)3towwTK3&L1}}Mab@?|wdEe7leBs{a6%C)f=^KCg z#iv%T_~9pl^BS(X{q*-gcf_gQcxLAVrN@7@{^w7Aa>~CRy1F>r`nP}ggFk%o&(`Im zTkE&~?tK^C_%GjjX~l`d-4B+ney(=n?LYi@`NF@Q`u|mH?$J>0YaAbUW*EaTY#}qF zP%iJd9;fDniqU2;MsmND`+c@Fa*4^Ep+xSNA(t@jl@d}phJ;EHTXM@KVM`aOZNECF zID2)@+53;PTIbK-yVh^5cfIfP`@GNd`M#}8^+S@22vG@$-Kd5Qx;L|vZ!sF4Wa0xy z67iu5gj~vl*WTUj3;xBHsg_}B^uiqk4(oS)#ct5R63tgiDq^e`6fNOZzq15~(-Y~savpasq@;JzhjP%> z0=Bu!Mb$CxXZbyqnuEL`QWu#ksF1g)v$EIY`aH`Ga4Ok9PX^!zA>qyj4|?Oen#4cA zDfISYd=0yf=Y~hl#R)_?qEX9~_sJbRK;z~C`Mvao-zfJ@Uk_$G--F+P78uik0M}3h zv^V*U`@B>GLo;pb?>FxMH+mN^yz9nB2&sEQy_A0#Z<(0v$TGv4GJ8kGiL!!=56T`G zF#`b^p_e?5$?2koX*={%t21qZ-NO*C*^rincpkxbaL&x-_@15j)MR7xR#x346+ec| z#7WK15Q`b@So3cBhr@k*{q{BewR)UIYo*>7+y>=;);F(>>7SO@SC*@aF|i==PjM)& zd!9Q7_{P4r0`fkDKgnpAMQ4P+e~5g|d(GU3)Oh$@0ReKvz*R_2!L>YN>JfM3k)pMz zG9d#IK3YN4D+}tcY}rz#ywMN@p#SRHGpv5|T_tisjWkskcd936Y~R@n3@7$0QUY}! z-{sV^^(|Mxh(_xLhnkD-ev!Z-rpRA|ApR&uMh_54e}fUL}qTX70VfU4v3^j zh%`li=$bdNoy$EzSQ(bIr*u9n)iWbT-dF&AUq5Xy9#dTZQ;(XN9Gr90hgmQxeWycxj)Vv}IVQVsqcYhUvA1 zuq%_7$^$i;h#dh~;oU*7{iLJ-YyE>FHyavijonxUdK(eJ=!kq#z;#wn*j|E_k3shz zoZCCsyh`X%92ioKFxtI`AnRZ~e{`wzSyo>6U;SDl+L9*~D|~_-uT*1|(lmvhzEazLypc-g8qifX ztxBscp;k5&UOXxBG&L4^5~HG8&g)xfleDX?a4D)A{p6*zNmurw;q!NFE`IT_FqQ}F zh3|Y>MlVib1Kwd{J7m0rG4w$t|A4Xu%Bu@m{0T?nybS7#643Pm;BotYUg972_xIXl zOFkDy-rj82{wb;XIB@*i)H5gOcem6u3S;JtCpEL+ zxl?$vMz@gS#5&--Z3{n+43G-dBUJxHrYHlE2a|3EhD3z;ziZaEe_uh@%1Hy0HmJi$ z)$xmjU43z~9MT7j9nrV!P^~Hf_jfzRmy)B`jUTdXRd)oV!_K%AVq{EiebTzeG2^by zEVv-b!5GE!@m(_A-|@=b`KE6JC2Ya-irC;G(Q%YLj_=1 zr6}Q=S`U>hmAiEF%D(fmQA1C5mB9>=ib_kem6k)l2zOHI<2>C*+ImVI0QtPo!3#SX2Pt~2`+hsmxG@j`#K8}FC0ezCfo!Jx6r12lHo ztvAGtqp^#EmxMmoWb$|G0lu9_Y^z8+Kz!@2IdHJA3m!JG9=}!`7f$fAV^dSr+#F5S z!LjuB_4vkKcjU*vkH}u>G|T#nS{stZzY1)x6;QNp)(ZFXRJLYZ`%$2!K#)sqSfb)^ z6%&=aKrn~S0}c>JQt|l7$YM*%RT2iHI8$?@e{6&OGPY;$z5C-o^c(rd*>L;BEA+W> z1vw;B>`x&dV@YHCs_R+&sYX0?l;GH+c&J9Z{l}6nLD3Sgx#6Pf`_EkTMR`0Em#qN9 zyy0{&jnt*nKxbG4Z&6{zcok7+aK%n8m#atW;rLJ4WNfDbK>)KFnpsgX`Nmp(ToN8V zs!=OHtIGw$&|`$%p^TC>7GmyCM*dz-93S15W*s|2nxy)5Cj)wM?kpHow#J| zF{ro#in}NZL6pS>x7Y1eaDQDu++R1`_k91xOxJem)TvXa zs!p9+?s1QKan8@>ashu2Jdn%17gzrdv)_OGvz6r0>GzN3-c`DL_xBDx^6uRq^~4K1 zD=%xu7qrj1WaT+$U3zJ}Y314Ht!!_;bmfJYu6*bTC$GFDKKHz}BO~R#64WOimCHSH z$j^;`Wc-x0wD07+-77G7Z#Sk?f$WSHb3IXO&6SS_gB7t_U6@x?EU`RuDE62w@hrSUGv8C zHoo%bA3yxUQ?6_u{Hph@y>`FayARsq6CXS9x1X&3t$xevFMrF+JFmLnMYmt{qWjkz z@w}tXcv*bM50)SO-q*k8+3)@F$1nZ<*H`Z4Kj`GwUi0N2@4jMa`|~dTuSL&YJ~c0) zXiUu`)IsA=ZzgmR^R#Wy*v*e<#Bw8-8{ap`ZKNVYxmge??ysA&Clv2ZhFxZ`XWp9(?&|gYc5>>sW4vY(1YL0ok4!6sd}5Y zQBXN-d11rbd=viGuy?cEXm^2on{Q6y3~j7;^amx7l#ZEjg(p=^$4oVrD&~- zK8EP=pc=GBT|zZTQX+58^&GMrdF55`+%ha~ zJ+s505N?&Q)H_vq$sKf-$mc}Gi}qFdkMZJlxW>Tf>65vzGwG3E?Mp>-z*fDnT(pRc zt-K#@tT+6LjWyE!+##e>Sk;TyThTR>ndzC?Vpxxmjb=HV*dFdjTIWIhL=e-YaoW`W zvgiO}8eZchFWP`_rtC!r%Ju4vTBBw~?BUfSQQkPni%Phj-=(ymVX{X>G*nc5Xk$zW zTYk8B$nzs;4jadNbAp^H5g~3Y9`b2BuoULkm7NQ(Cqk}}6zgdDw z0%R>nu=cLDkJ}*u#7JM*z9g%l?*z2kzI+E@CxT(S+Xw8#Eo@)W7bmfAE%TlDkE*Ja zaAgJ%La77`N}s<&84@iLUcWgPt-*v&P9Yy=C z1Jm5r-eXC5o*zFL=yDLoh^EE>nh#lg4(XIstwl6KSoWqPH=xxketaky#)IZD)gXQd z-r+(ks8yOJZ@T4R{P-}U>uc*?P>c`98y~^XYH#|%ESb=qI<>}EB!Ytvl>qU#pr!e+j` z8ES@;46V_`)1Np}EO}Smg1|&?o=OJbExvzZ7`3mY%-I*%f*%RnADaq!#E5}T+MZ0e4Rk?XxVxiKT4 zdb|bXBFsT!51`CLgs>=q@!2Jq2fBRbjni=T&x=;VsxAX;R^sbbBD6PyiRcu_X)O)n zQ*mdQ^zMh+_U!<49!<;^N~6;UUeFzv(|Iv8X^t?$82(+k=7A7_iXg$tRiTaJeJ4ps zyQ*k$q}9^Q<{^Ty%3(9l`6+uoDq>-=@=gkbI*sp}&wUdYl*rlF1OdmILHn2T!j`5V zKO5TIF0?I$GgxOF7yN!I@5*D za-p+b=o}Y1S0UH0;86}1Gat_~^?NPfpYdu96juM53)kYSm7Akpc^t58@!tsIiL z{ulMeT1KtoU{P)RP~#I`d>%O4_p1?3#MfHk#pmPJu8S|gxmVL#^hA8oh5Rsr{L>sa z{o6Sht(X0KWz78BW$d-E49VjI=rjmn^J zs7KGPGZ!sI68kbQ%Q9CA{h15>nG5wK^VDGG2a|bvGP(#hZ(TN+bX;E&%<3z0dNRJ4 z4D(bkn5i-a(S~8?Ny4Ehi;ou5xwf)~*-1X;BA1WZBgvr&tQkG9q z^ZIf5rgxfe?=&AnZ&IG3=Jn(9t=wt8D9y)Eoa9r~ynbB1-3RiuAKS;WJqDAm=u2W6 z*WevBmN8f`o@$KjELZ1V8`TxZkZf_L+c#J>MvSrH7CO;P!PiKP|I|!NVA|HWOBW3q zM|ia^A`^IiO&wkH;WE~iH_&ex?W%z{C+Ky{gR5>uuw2Nz(f=^~SixKT_|woLWxg3- zN~2bqCl}%vPuW{FC*<|hTp1Sd=2Y;y-8~B>Xcgtq{w+hxTIVI;CAU#la7x+D_mvB+ zu;5g(hSS6L&pqMgn!aokdx?o3br5 zdGI^Q%22vA{v2^G+juY*L_Z{mg7z7l)!t;1>OzKl%#RqL!Q08y$cw z+4^uxSS%Ue;tq7B$OcH8uFdYZ(*%F^A7V~w;~#d!0}nh_<@g4S88#?vw)r$ z4?0~1nMo-yTv#x$|s(G2VG9BSyo_QAm*XO ze6!xD78*kgm^mzYOU})Wgz9LyRk>Guz^yHQv?ymyKE2!QVjutQ2!<-D#X8!$iDNGT zmSwAWC(Ew_Gct$tK)wVSSqo{t<+d;iXC}f;s9DCaFz6hKLQ-iyHiKH~p!#6q=Ro#w zbB_e1K06w2qRO6{C>(Cm5ZjmR&oEMJ6la2oN^?=Ed^Yw07cM>u!$0RW)&CefP(f3toXEbw*@3)f+%Sy}8wkCd)bYRfA%3iZ<} zg%DNZYhwvH)j%sD1BfqzQsL%A2^irT9xQR=~pj+&MnR+!5otV zwCZW`i}Axy&5T4SdQA*75z}nbwAX#8f|S#@FoZ|UpHeU_ZhvQt@tu~Uapph4NwG-< zXGRhNyW&D)kO@b*;JvD$(?b|*LriS0B1x7>bV-?^Y7Tl^sqT`ul^g(!iyY&|iVIOy z!a@SvENA@tg19(4HI^$(J|<$uZ+f9&%3x`~eC{RG1Fj_XI1mZR4N^b7bL!9ZCQ`bV z3{%iZb1$efbJ=t?SV&+{7;YAgveNqhF4orXQ5?@V7l+k6|Ldn+w@tt5wg;Z zJF%^Ctk=1kHnavv#+voDtLYEkRt6j`CL#uCvqCZOV1M7Y^eZG<1MJ|MuE@Rjf6xJlH4i`2?rza$s9~a$>I86$AkqXLb zU3WB%rhkc^uyUoJ%SEpha_4=Wywm4KH}s-jVP1x`XGBNV zs=g%cMC(3_C!GOtr|A|?`a^b+Ztk!d5AbHjW7=phwK7_#gqQvU8Gw)>4)wj z-Qth;>JejWQtPf!^;X9`zx`#gco8fP+WqTHMtn8WQNlaEZ!vcmy_NBUwdSvtVTIZx z-iPI48#BaZ5kpSXn^Pt~-axEY$>o@)4JT~Q8uPa=p)Sib#>t%+&yR)Mmq7k9hsI@= z2{?@Y&JvMT=*?PGYK=ISBqD!dwGdwmYConghchF7ybd>-rufz}2i6B1zf@Epl=PNr zAwn?>EAoZWEqI5`_a=NJ=6fT)@xTxJNx4~Zn46_b7D(WrsVNre{skY<~n1; zgcTcBi`9IgSgHoqu(JwycsZ1N1hUH*%sh7hQDr9Lmy@xz&X4{|m7`biGqbq8#D}kU z_r%eFrPd+K<<2YlX^eS}g+=v?d@csB{$U3P?@ZB)XK`DP@5j3$2_O$;3fX6{5SO?K zMh``=2EvR4n_%FOAN>uo97cyfh~5HE8WWmxhH_7&TxJmJ^q{0p*O9+%BhGLk-iFgE7VFxRYYrE+4c8ng#dI)qT`MuB*Oh0Frq?*N^<))K?=-bl zJ9N#NHQ`K9C^z>A+E>GvB%e0wn(Er+XhKGDCFoIV?(&xTH))e zH2xcw=#A*pG9c9(d2EhvN1K$Lx(OF<@5@?_x*Fy@h$EH@7HzGySW>PkF1N zEM9ww&DMSnO?@3Xmt;A8Z7OPGD_TjMTk(zt1#K%f(ZKQgUIgVv+{E@F8LVs#`4sB8 zQuU1fPU>PWA6-Ia7yF)%asLNImBS$Z7A_jG>Bk=K2EsAp7Ut;_(8Py}`S?U>flBmi4aM)mzr`EPcOMCuR0owWSB1$HX1PKmS0%_b_|fUHg<8$K zLAXF;8q}Zum!WhVIM#1}PHbzz3P1j#28lF^#XeC7(|B1FT0K#>(}G#lJ{I--{wUN^ zpsrWc{t5bZL``IQ&@2I1A4~zgkISfLV4&zg?0$4PJdZQAOKYGKg7dN zrwUEBnGm$Utr{N)7=m&f4S_;)f}DK!cr^>V42sQm8I-2B8c39!D^if?aJ_!x=Mdr? zgBUtdKA@n3jKs~<*4rL_mu#K)Kv;Az(eo#g+YCD2SN!{k->N8!*S2FbdN4ob`TL0s zJFlXeolmK*r&>(s17zrnrCjM`v|^6YGc6xo4;EcW`SDZvX|b5Kz!n0?@AooQ!o_2? zP=za<{{;DPI12=NDjEtKM?$^RkzwhK@%M0es3 zEjoHlR!%k0ig!p;!_0mOI`o#XwV0jCyT}oJn4cMMqT#YSG|>+-1Sn4vom=5U{1E_) zoj)PA<4kmyiO>;`{f78H@QoLmh3Grx@z_ovHWq!~wwMX2Xll{cBIj1~@khZnUYr;& z`SC?UwVzilM&A>7xmw;HR+vXSHGZn)IFw%#?0BVGao{$^j+Z9Jhy9odK5QM4Wgn@I z^kuh+etfh#S{*Sw^{YS6fHuCUx~S%IZmTY`nSXq^DowFe1>=*z=*O4X@1^`!3!N89 z60FVr9Ac7V24wvzf$Z!9(UpQ9e@xum#x&zcZ-iJ=J`1!69V`rO1IX0ou#=}gjrnBw zM#T$TCFZQo5AikRd9_9cYz&zHzN$E_{b|G;Q!Dm_ZxZE4AEz)c`a1p@f1=5JBd>2< zHAI>&)I>ICK)7%)Z(%7C4#`%K;K(G*w@IWNx=Ez*#$;(1bWf(1SbiTR$5(MhA4BI| z7y-K*iBr!M2z2_n%PE6$s$RW&lHlhAF;nS$0(v`}$U=_RwD4INs_P0MEru0roX`TwQzJ20ftkvByyGwp)%f2;C8 z_3xB#XsvuNhcL(P+vEmgtL0r*Dl8z^+#~-z>?{u zYi~7~_o0nB)c*D7mu<1VgkiT9e;R(ZSa$UqRf$R1YWwFNNq+RFqz-p>-dmwjaq*{so zn2G9`R~?pBtGt1UY-i*#*^G^*IY**D^>X^vQJ3@Po#$i*S~Wh_T3;P&A1KWQRRm)I zp(C@uLALEZUIOSrUP3>oCzuf)52vo#p|YsH4mU5r8rY_AJ0Iqc1U zf8c@U^gkKBg3wu4*e&TiQN2R;!ON+&{`oUA3EsXT2d#dA46_c>Qiv_81u6BlX&tis z)3vobB3O|kpiIqmSTeM(PRErj^W@rpTze;bjtFr$p+|#A{5cw;9M-SC1BHs+@acoE zFU0o}7afLhm6?QHwtf^nX0Dk1PJg-vR@rPup>sxbM%!r|EN&0rkhTon@_D4KB`uk; zVyU(97buXHJp~o&i+C%Yeb7u;(o4;>6KgEw3#L*POfxE&Hd8QdrVvY;VY}6Sr5;#= zjRzshpr$;K9*Hxvja{catMq*QP=enK-OTCsPsej-Z+7eSWwi70(8!!u?Hm9Zoi726 z=^-O@q`9Qz$Sg!0KMse(Vie$(TruCjuUu*oaD~KQCbugowF%U7yKiuNwbHfkp{#wy ztDb^A<9Q7iEVB`{q+nWirGTpayR0h~OsSsvzDpb~OvD&+!eZ-qjB`>wJ>!#SeDaJ> zp7F^uK20PnVr8xxjOXiDU&~OSt;AY2zYUq!^gq%Zu35Ybf%BhZF1g;~#(&tJTc^7D zkw-Dn5fUj^vwsDbqar~l-QZ~Otv6n&nP*0w!aft4EHwsNO8^|3=3FBMCyIRmbE|@( zHHyijXFBL?hO^homF8%{TDeRvHE*)}{FDans0{<1506TBupRUEDe1_r!|`pjz02$% z?BruC#r&sLdhva+!w8f{BP3Riffi1WzXl)TyC}h}5zv$D9Bv2xPAy_Ykrp;U%=lf{JoIB zI)5MLkFiR6UhZl9UC-a!`1>(`f8%dMS<~`73z2dyW_iO|Q{%G5Ox3i68HlQB#hJ!L zg&u5O>&-MF!S|gVV!pdW%=dPP`Thz_MEy>#~QLL3hYyWcJgZ+ShuAmL82xj-lx^oMfEXN*xZMU;1s%ieDBX zrtFmo%ufzn+M!vFt22kNn}+4axzX7y=$TG#?wd}O&S8SxiqXX+a*Lx>ihfE3C)WV2dwAWjkBVi-e&e5$ zXeS^2_!oHBf6nUX=N?1-4%E2Q?y7z)3!8rXMtPZBF-Zyd>K5IcwPJIPU$9cF&cj6+ zzu%VCkD`nN+iXdh6myU4Z|?9-P4+iVJ{WD$QO3xwG=D7F8k7Cp4Y&tE%S5GfDx=A8 zk@K5ff%x-}rP5}D+Y@2wpxKwVD$3$@?!4JLwm2uy+PcGo!pul!IbwC?2i7D7$&kLzd}yb znw;ll+DncDGpQ*neC9U{SZ*$dH7&28>8_VD(Vyagv2gAsF8&7IM8`lx=ePKV{h$~v zQ&&6|1UfN1VfP4x^dO9%}Y<0}bqZ7PVy3A^A(lEJnIN}Z49Hm__gSWmL!ogr zKe2J5oKJgjE$P8~IoI}2%gtJT^9uSD{g%?1eca(|6z*3+fVPQj1LIiO$Sy@2MzRfE z4dx%03hXMtI=>@+tD-DkcORM&qj6IkD`=)6CfeI^gs#wI0`bxqw;tGGiu%rgpZf1rB;ofnEOj<*-=Ad3=3qP zGbp!aNArIDYL*W}ST=`irEOIiI19!Nvr=w?bwkx+zOxD(8#ln_9C@|z-Qtj$?LUu~ zdq`O63dsmaIG>j9d;q|W&Ev`P2Nf5kSt`9OSY4H6lq{8e=N(jWV{=6>SvFXb7m2KV zXA8~E4%zy7Ml!bRj)SXiJPC4LNP7s>X;)KHv}&YvPN|JASv4;zwf~p}Mw$-`77ax! zA+Ov#MBZt6X=jny3}t&NS2)1R%BAU!*B9xfhS+E56GuCH@sr51A38}~?bZEgcTi!w zsU<$>()f*PkUI?exXqzqw!U`v#5cLNp7`8Ib*IGO&@m3S1Sdu(sC=Zw<8VgUs(U6t zVZ5E9H*ce9qCF_gmNIu`(vvW|5`8#}N(-GmD6q}7VRS@|F7a;>2j|@k1HFz9;`n~( zD+VXlZ1{Jfjm@bv!g>&sT@Smjfygwex@l(Ecy*HryAAba6xL+~lO_h)BH?SqAg3?- z+MCWD0o>%(stA>biMF;D5>l%AK>mf& zUa-^BXav<`1@&O6wD}El17mI&out0yMQoXe@m~=L*Ux;lsn(6j`QnhNOH7Y9v3}@m zl}L2}?ytNtq&7R+U(4nvd!sh^WIM(*YX4m0`4L#d)#AXow0Sx6I~CzFWqw7QzAo2NY8=tvH)p%LCoFLuzMy*k)*Ta1l_Z7 ztc{u2b7&OUhy;+FjW&OL56#GNf)Q^{(0;rIG}xvDHy~$AT%40LHi0^CmjKZb_EQG% zs|_y0#h;YZTY&|xS)Q}xQyqN`zXv_Ir*=`YFeJVzyQn?Q#;`ZU>d z$gR5SOv)#5QHVI3^Ir0oJAbEyN+{!2d04isatA9)c_fHg)^j|i`7lm`VDMnJ^{OZ? zCy;48U&8S8XUejJGBI|D@=U!yDtcWe1F}(JawsQ9OlI!Da)pqm=SvDP3wO3R{f6^# zPn)o=MKss40r*xV(JtRbug@_0g$_%~a_2XyY;rbb@7$y2(z7W}3%_Oy&kCfOM8w-c(tes^Pa}4MD)o@h z932?tG4=;Ef#ynPa#qc-*3RHyoO+GUw_Kmqf^>$)^2}H7JBibKoZxdtHiw11U}oLz z;ptMXE5gY3a71@#MhwZ)uvhdKo*;j1hCGb#QhR!HYWWmWlpL^nZIN1(VV7}w=1vX9;?y;>M6x#HPMkydLrAyjm= z)R_c6W=91<)*g7g^I=lXD{A8ckY$0eWfd5>z4h3@d0rwZ#okwKc=&k zqjw;{Wp7T69Gy>%Iguaa;|s)c@>pK@j9!QyI8mX=YzG=;UgOrtm~VEv`fMq0?T#wR zsvwD7I{Re5)hS5pcHraTSZLdN0Buh9 zADgnDv%o5=1pJIitc%Lc186+UHWIYfB(zM;PP4kJaZyJ{ubOC_*|=+B)?8S4S~V_V zObt+#Ce$V4Y5fl?amFqm7HTG}aKU)z$;K*Mebu`h>*O+b8(}qzUU&P#T~BB+=TuuHp=HVQ4X3dYvb2wBtu*4zYoib^lhl2 z5thV|M)c#i6KZj5L@pltVzl8oRXdkJ&Q^hSE|X87S`3vttX&w( z?wz3d?M6uFS)|8%5F7Tc#CD$Bi}bY!fs5tN6}`xt(nv05V#6uBBdORS$_c8Q`v6!o zmpiOx%hBFF0G2!stzH)p0J;@V1@r)J=>tGxE_Yf2Kt)fBxU~-ewYl6ulPyPRwSR?V!4qw<^lw+h0{Sbh8vWT+WcABb7S` z@YDXOpf>cNP+T*p0|j-Epb8;S2lt?E>w`K(P!ASVSMM7f+Jky?AJjtxb(o;85Y*v4 zs5kXN9U-VA1$8A*wdkQ4*w%}wSSDI-Tt%_YK`-yg90lB}8E>_}cqr&eNUZP!3YUT3<#+vA8@)v4_Yc7l*h7ZG^%i7opylzAWX}aj}b-qb!h3dR$ z^y7zvq8u*D#hWR8Cb>h2O23JqYVbt4+kz;@U5x(RM|>X!<`By;?+nZJbrZc;M@nAZ zHg)yhNQ&^uVCsO8yGEBn2HHm~C*MVj54drdqy{c^!ll++YVU20%LT0Qh_#OPLKsJc zt+m*>ys<$y*KFd#+~t~6mgvcp+#IUI>#`p`EQ1jVEjGR7`q5JW;*p#=QKYG)-ZD&B)5_m zHOk!3KV!->XE*#(Md_#%fHb+m|R< zaFMn0eM^YsmV+XTS)>M2cej##t9ow9m*`RAU%i!E@@4$zWBCrB35lJPD8OF!sYfRp z8KwuW1{Q_h>4D|SealvRE9sTF=oDbk6i&ry1!3hrZ~K%c8tF&+S1RR}sVrJiz02L# zlMLF}9@w19k^r4aO*Z-X+nc{N{5APwgtnt{>u_iJdk}xe{)4{_q)~a9dvk~L_fY;G z#$Pyn*6BxucvR37e@yhqsVh|N(cD}8W3sWdG1XYsSl(FC*sU>LYD||K)0M{baASI; zF+JLtUexGt3aPwhpd(om)B+zi@R*uAEi>+N(;TY%Dh?H3dqsIuf4vCu?TkgjY zW4X_i>-4P$Q}*Lkraf%JnoG-$@(erW&a)?v6WHT9O_H?M#i(#6*$dHoGDeF2Wz-%1 zY1}n?@vk9cq`A5jvtVNfY4h{MxWZ~k!wf-kEaeLW$5I9$!uU4XK3w1R z7!TJU?9MXiEQ|ya`&HFvaNTLS#nzHy{3R%Im16(HLagH$!pbv)<)-W7UKz&*TpoEm z_1GAk*gFI7SqD3la=rF}w3p0lO>gsl8Wi+Cm|d(e>o?{y_~Ye13Y}*OUfT{$J+sD? zcm{Z_fiN%ig-oWJLzv!^$R~)8X#h4EGYV5gj@K6$~Ocot(jd?=uoOif2=1CrB z%p;zc3w2rhJh0RKG06SDo~3>@tu=U-y6pFz-np<|Ji?Zp zf$OOe9ZjpY9@&F7JKNg$NVPG|O&dSMh6n`ogP91sIm6lL&k;PP#pn{)pf(I!MUIZ2 zN!!pLoz8`BqWyhjXQS{U7VH~a5tPPzRliK1GUCq9If4Kw2Jq{_xRevRe&-vox*W8) z$j^y$=4qM#iJrI7Qf1_GSOs$Dsf;<*#~vyw>-_5*fTl}opkqb0GV}|EhVT@`A0^+#u{;Me5y?C_22I zNl8q4HR4b&H2T6UdLK1zdc^_@$jlfptSidVXM1EvH;7hDl2w+k_mBfU z#TbEl!w|`jwS{Ms8&)aC-KU7tG)w>5**y=Xi@3_%_gGZJZ6~wE^`;b;uQ^!faA?xLrF&hqI6d8zRyzvZdkXLm4|N?bnczKJ+&-b^fGL&tk%fPDQnT zo#%Gc#w^yeJboXXm%u@X^x%DPSxd5y{CiNvt9lqqnJR@@xsA?N>Q_ zoRkGtwCF#w*QRtX@$Chxis$Gpbp9wBy_CMBT=XWLH?EEb(~D-;cxEq%U~;o_HWklz z-b2ZiLJ+?Zm*%-ePPw`Fj)1q3GF)_k2#WxVqkmrXe%fX5 zPToywX=F*eW}A?aUEImrtfZaa$$PSrxRdu(bM2{=>~3E4B*eb^6s64Rmtp5O67qK; z?p((UyDTHk{Hmgv-SsMqxk9S2GRYP4{_xY1u;m|}9$$Dp?;MR+?c{RXTB_&UBplzR ze)b1`va4(eS+kyn_9axyLTH+Oq5TFzvjd^lKnQbLU%mq@bVfo9S}Vk?goMty5VY(pv>!^=_tZa$R!|(6Q_b}zfq95{dKzIKBIpqg!aPJUSh@)F5WyVa zB2tfxr{%_Yngor1Ui3vG z{r2}IUz#DHcq_$nrY6C%QB9GQbQgX%>IxM_E5h1|3C@u)X(fsSLL-idBv!E&whV?r zl29s8C?lDkpSVCZOXC<#6!#8Cuf`bZ`8T zIXlOsdY()^{c{cDx0}k%pg}z&@HM-PQ3$<$=TTXmspyYj>tKQ?Z&j4VM;MKot%}S4 z2=-RC=v}Ezf!1`G9T`9!lK4WhX>U;&YcWPA&BxpN6L}J_SE#|)Pfr24GO09+)%{5e zTr4CoQhKLcgkSx_o5OTdj#-{_nnE@fEyN(x?1WfX{O+ZsI~;5X#ROzGEJs)??EHoF zMY>K749wqIQFi24Dz)yse}^)6apX7A&xUhTtDT;ll6EPiZN+?GC>vf*dddc5|zFh`Ul3@FVA<-e(N&i306P6frm za=R5MdaQ2^=0*35oeKUOPZB(uD<*_CX$_Gs2h0xf9B8J1YK_IXYl)HOxo+h#T(p%( zs|J!^k-2{Q?9ovmvh0F<(H11F6q(ov$z;#f(bLEavk9#MUk$P~V!QZdADHcaCJ5 z)t=ZNLR|s0Qjvd3LQdNJVvmGiSI+%!ur6ue#J^xSAC*qNRlHbzZf@55u z&O0Hmz z+~sB?RBJJ<3!c0yI`fX92a2JNjnR3?2X~l%0+AJt?)FJ&^$3zi>bdn>ZDCYXLFB0a0; zmfje^oe?;Cs(kx<(Vc)!L@N@Ao-gRjHKo+v+M3Z?-%fb8bFP$wLSnJcsp%z)urp1L ztpcd`g$?rjoo$0YS2(D*&IBBXi^5Ak&sNYu`@?E_q=dsAnEG+!Ezm#QWXpXHPlfBf zg@~QJuU5ETXDD>(>2ba3FT0#`^(C=zooLEfZ;`S zu_KLW{cC64-+OM>_3Mz#(LQoQJ{5~13TsM&d@Z%Auy7|_~~jAZ!-fg zm*ljmP>8!k^%mmfm*p&%L*ch`X=}(QzUkf|!Oye&D$3N zh*uFk+-5jrcO$ioxpsIS*yfUQo&iQ(y}@of0X7Dja_b^5z7bdNxHVgk_t+{J^P;T+ zJdrO+SQ6E2qPd=qMEEq!6(n*2ZxXZAGx3gaJolquU|r4a+~B@tsk!RggXStd2!z4P zwcm-kRmmMX@j`V+;b(2EIxn4F>1|?6!+K}D5TT&oc}B!wk%k6raBd}{cMui zxuVu~)xd(j3#wnbGn1?(kd?fSThauqVC<=iRldC);m6NlY3t1igrd<~5>ywF@Cne#cRPpLQpBBUNHpUR$eSri({pm<(&_6%1iaEE} z8E1IdGuxW*7FxwvUp)uDIIEcHf#-nh3hLxJBjK5J$7btW^AaipH6)*z+ivrEW2ZaFjLG3m86R9!&*qiS zy$RY_j3Ix!7vV0YK#=HfAFQx@dy!o*2~(Jw9anjCVwSI~7x5&#(~0L@*dALW&Zw9g zRJr;y%KIfM!mO&;SY?wmlVS7_)hR*Flk9!Si_xJGzE+`UdBV2{akQAn7tolf3;EdiC6S6S@f(tdmt?3H#(NzUITPldSuSBy^O@7 z#%1jXdwfk~_cd;R!DH51{)*fvNjY|~=nB&7^SRpzqbb;36yF{1Io8wd%QJzPIVvAB zs)Y7R8C!3SynDLqmBh7H6lkZdw7Wf8ru!*_kB8}?MCTRI!vHw{I(T6xRUSjF-E|a2 zS$yw03bVb68_nBol-A-fKbk+0C$`Q~c?_KH(KM4k&Ese^$=p*8Cr>{rAWDB8f8+dx z{57jf*+g|4D=lwQJEv1T2d-tww3-`J5!Md78F4I>$yOOiAGUw4mE%{6;qDj*))X~- z{3@c@%(6#B+(GEYJRE~Y9C$pIZJ2!aacVBA*Tl7TyLqmG``R4~$*aK^JrV+v{pi5% zN}|)Dm#bZOghm8a+{_xiIjL?EA3{~)J-~r%oq^LDb-4;AI8sw(6S;$$p;xhANvmt0 z_5{AUz&K!gVI$3%QhWo#j4E$9)f$E9+oaRJ^aHcZO=XNr*6*L`U%&gYOmn-fJ;ZsI zubp+CWosFol(b^)?#?q^URzImm9@Oasl@5w*$JLP?l0+7Ya*wA)N%)&km`?q4l&eQ z1Nwdsb$%#y4%-)N#Dp_;q|u)Lw2EvHb0oGLQZbEaSA1oCAUY=3qT5<+S7f6?(TtHT z>={aMCGD1_I)wALswqA~`Lv|;7IuSkjDZ6*K5c+T^uB+OBHoZp1lLiN5c+WH?{RR` z#+AiwD`a^FTFQ9jg}k5sXnT_s#N@T}KEpi+2DZnmh!n_?#DJ-``Z_pXxS*|``|q}uw#hrk z&|{c$B}r4WrBX4L1-&_pM+}c;U@oy&28rRlOkHjAa{iuoKb+~lFbMSAVFOkTj z$GcEZG#t`C-nnzShI7-wOg^2D2yvLu5W4!Y8p~=wfI(})eds4wFW~*l#rqT0m!}GY zy=4BqX*X+x?OS&ZhGyk@BVaZ%7`95ZRJ?N%%J}vuh;2zCY^Xr9;l$wltH~P1uMw}C zeWhn0VfnqF1WErR=b+H<6dN|cSPVRSoNQz&C=N}cCH zgE~-X5>e$ci9<`@65gcKG`tDuJq1|TU%43DL+3~LA$Ex@-vU3cfuHv9QdVLzks8J<*AJ*|DFMgI{ zZQmq#=EU3Ilg}_&*Ww_1;AHt>;I(d$0;T&o*5QEC_EKvqNX|7AVPk&p4b-F&oDd~o zC$V7D2-Z9%iP$TtW;V&#cKQNLRcyHG_tjuUU&o|GH(8AD8|DtB&0eHF&|;%joww-x@;lxwVY*MBR~+H4f?*(;hE4*Krw7L6|>==P=7o`zJTwUqrluOlvO8}1En zJ{O&U)9Fz&!{UiOwdg=&VYmn|5lPn}|R2G}3&ZchHs&2cg2a6&{i5a=<{(!ZD z8Mma#75mIjvV%E;7mxhf!<>D`v~0fk2Iaj(a%o8TjA^e|2X+8&l{;g3y11z7&cv7+vKKm zpk$Hmp2#9gO|@Xs<=yUa($(FpTMd%o+RcbOSFE0#=n#LUo-d`IeGiPb_R4D&Yol1! zy)zw>vp^@QRp_OOtzdm%wt|WyuV8u+XM{j$LtBL^x}mL5w8u%y&4&klGiFjU2X8ox zw)FI)d?@nxTf!fk8M)?oxYR1g<-6%&=PQI$eFKW?1^L$A393KPk6QI4ke!*aBQVXN zmes`Zp>b^cJxr$4lbsu(V5_D;rW2F7S=^UN=1iQmBW`v@^r=U~a0`U-$#|1PzO1;T zGvN*PPs@K6`Cm?cE;j}CflQ5Ju7PwEoFjbz%a;h*BIkmC4GC_@3n40cCR{+qw&Aa@ z13r(%|1^=1l=eDKw(Ulxr}wh0RCn}v{UT1xyIA+$nuZCZ>kYWCfG*w9mv+J_JadzR zn?p5MH+TQCuWyzlj033is^ywqT7mOJj}f)vUQ&{8Rb0*Y z6P-+7M};NRo@tHMz-dp|V5KK97@6*d#Wxq7YdqueRcCPJ2E9GQJIbyZspkx)a^6u- z@0!ln2+TC=V)|a)6;A@~vukZdTMHeGQ9iqPJ7p*Cx%R(rp*7>;YtETo8{b5en7PHr z6#a7XvK$mU&wvUuf@esaN>>Ux$Agw6dkJ0o_rodoRg~+e_J+ln7_9L4FH$O+qka;O z?m%VXKoz?kJOgjKNp0UevV}YpCpvY9SUANmUOnJw=HehhN^K8-zg+_|3+GmQ(NAZjPrJ}lC)fb2@89CMrA z`Kx-)p8r`mw3#)c*D~|I1<$ddPHEpw>VfYfhdty>V<;kiwSF!|%txAMl;SDrP^T1+jfBY{dk{fFF`%?RTnf<=peqUj~ujIFA?*?1eWQ~7a z{~AAxZwBcMUB!sy>_8vw{ZCLY1W3=l9+kW3ZEhX^5-&Q40y&xUdPW;=t!$H%@7^GX z6J0lI3}S!FTn&h)JWZ9b&NsQ>$w>D_Y+DM%fiKYQ$uUi*4Geml98qP4o zO5FO$OR^QBvnWQJFCU@x!pBPIHg6ES<-alx8I1&N6#W#gz1cp4)=a@iWv7& zQMR@d<7~YNrfQDSIW5-3_RpP13)**U!MaJ3+5V}#Yw+57)3^1ejFVsKRV(N+N2yEP zEXVJ@Q4XJ3q7-*@EwHn1M0FIUr4irkkwL+8=haxjV_5wd;@1AVihDSmQ;C)eH$YTM^xk(+y+`kJj9uqC4ZYT4pY&#vU*4JdL2%%W3^WLJ#a zZK~;3?iZE8t>Nt;-fr%UUD>|j)PIPM73~hByi25vFs%OyUn1{O2Tjembyv^Kv7mGOIu={p%3*C2^ zTkO6QSCv+7xymj#jTat;g-5RN$Q2&B!o$7GWGibkOjx#Rrm)(No(EN3W^{ux_h*UJ z`TB@Svjh9e-FE{3(f=VQ-+d2GUq3!a%(i~K-kTF-^a3)fRKd$thJ{V_)}4svTU=9F zTRjXJVy+u(t4my4?TanU+Dg9>R?;S?{*vCVGG}Sb>jhvXTVrOO+w6GOmzM9UbKkKO z(*9$|UW3MybnY7|YwLSmWz&K8O^SP;;@r4<8uih?v|sd}1AaeX{|D!Qg$8zK=YSQC z@7mSaz&NnO5Jvy$?<>q3gZ#fN>npm!#YcGfHTL!nd%lCHzQdjt)csN4bZW=Ot~ z_yK_h(Fbuv$$yFxos~Ba5g$w=%#%$?bL!G)3L3CJBoIK&WeAaC;rXj(hF90FJ|B8E z(My+g?@XY~)jV)4eAB;F-tA@-Ms=aQ3t-kI8#Txq>)eqCXMUAka%TtLMT0VOx;FYK zH0)Zk-?0ZHZHn(}Nu2SD3Zu#nbBx-D-3MtQF_<#o`c z>>xTL9qQy=@S&@8HWB1(+6-9yVPc~ffwtmX*{x&PjR;@B;kM3u$QHerr080HSO>qC z2#zV}6FKk0JHpp?-jBPQ@R3x9V|fSlA5rilp=qry%zuL7Y|!!< z_@K}@Z7dvVj+cyqY=cWw3h@W1c(M@wVgEwdiw0NYFn@2DO=DxCv{hEClB~8qFDW;4 zMMIai$-Nx63s@orZi!@LA9AV}VWv-W_4PPKykEj!_4DJYpZ=wHsaBMcyqD5SLAxpM zfq3aRpM-QTa0*}dzZCFQtFZfN`Mo(s*(K-hr|?O}l|!ylLMu?AJ?Zl zAyoPv3+6H}+WFD9sASMKdd?ORLH8cA@b-mXr?e0LIIsKQPxo`ecWIK(3j|QWgp2T( zU79;v`6yT2tiIVi?z^K{Jg)aMDa7bf-01SVpHZ2~kuI4$yLT(Xo0H>i6+cN=!al3g zsijD4phqd2AylLSa#JAX?GGF2qg=;dz={uw71`5}hpRcxw3d0ayf1Stb1%r?&F2%G z3JSM{IY0bUxETMApT@7;NEfs-L|kX>$Mj`~=?il5-7m^Pwf$0pP^m(!WVuS0Yv~m9 z>#U%3g=A-0ADZ#|4*>Mt)l1~-<*pWA0UNdWnw)(1tLCT)`4E$d*?+6FAMqWae-+6@ zf~0FXp;IM@Ug4IT#;Zt$%`MmP4t@oY+B_ikQIGz!gkIz!h6DAvSgrC3SD&wg6;ZvP zoZW9Z|KH^QhWWeSObQj43RiT$o2Dx(on-Ms$@q{Y!{|9?SNuhGS>y#lYdUayX!GQm zoaLbl3N1%J=?Qtz{SJVz{o4r@$|q_RE!W~XgmRx_#g3JJrK>dSSXElm*8QIOyWdYx zC`qUkE!X19OBdGbPOF#f#wSs)TQ%-ROO4OZ6?0#ua@;N=XZHMUq5Ht%k6l?mm17^7 zDob>*vi+W#TIIVxQ(CmUvsNV58}}ANa#Z>vZbo3G>B|${1u?oJ#d^li{SbO?%joHx zjqX|IeJ@es&i{y*t}-{-MHXUivz;R)nPq3$K~?&oJXeO}P0%&=ITpRd z<540RzTNHF*FrN7LVp;3bUwmQ_b1?PoRMhJ3*#C6tWwvLOHFOSFY)Ho1V*A=&cxg{ zlIia*QNSWXLeX!m`KW{VpT;F1OPz12%zYyLosIcO1=&rl?BvI&#WP zutN2+f=opuzibO#T-d}sFA`+X&FG!gaSnwrHjXZ!8H=t`l9T=|zCqK4T5Cp z$sXlyNx>H9wk`WnHcoAS26<_Ji=WQNz_V2?s@0f1Up^7(mFk8Yhn@hv`nSV4#Gt;2 z>u&m#vnK9efPvYtVBaHc@)G$f;+>fOQc3ylujDY$|JvMq_c!K--QVJ>NrXYJz~u^F zuHfYgzCUdFMyIO_`}W7xj5cP`JoYdBrmD^HXF^xdJ4Nj_L9sTvWya65;i_*hGTRFM zWtK{fe+NBGCG>p_Mt4c{ZQ}l;BD^^{HgR|VfKP-ggIwj1o5l;WQC_jI9-mM>dRJ&Z zsUR{h7i;apfOM=QTy?Xxl)X^0$+gd)DFkZ&BFA?tP{=YBaGU;o8^=7_ri{F-b4t#9n?uCuUzKrPBSo$O5m{D(B$7P54`!fYok8^m?FqVsTDT@r59E8#NDd z$?<2Px6&Lh#Gl2()ldhgy_sbB!~&(zB7hcG{$?MVbnk6#Zu&U4uJ~Vm9{B$>JCeJv zI->M7+Rpy5$zj%&$4azrFeY}l!xdKb4>%{sW2WBIhxm22Vejc)pWiqCgJCo|0)b9+ z^El$Y$~n#zgRK3p$_X6q`~YtC5&cVXn=R&szB&Z14*9Otfw5e*(AS|=1KFcRy*FBL z$VZC~J3=fDXfP2A)K#=z zP>|dEKzcTS-$-W4y;tSZb8XeR&BYz0UW(kP@p!{8*h!h?q%dqN9o^U0}h^?_ha(h{`((xgEYlwhUdDTO6K<{@EO8ety8sF!Tq zJzB%P-iG_+^A4jthL<+(awi^NP~)~!5%2B>LI_}IT?*84p{JPCRjR^Dwhn@^Sr2UM z{jImET)pq24#0$KS9m8Py}+|;a!L!y;XvU6go_Lz##pm6PFu-vz&wz$GL0}#Dib8^ zo+g;5FJX@~!8~cgr@iR8km|QT+}9b`017vna`dE5heL{GPKI_H!lBhG1qn#5psaDs zLxcf|8*C7wA4*TrnEG~;Qyb~#)doE|<&4%%#9(LRIloVcaXjf}Yc$y!-to`#%`9V4 z-1#qZ^2Olzleh(L*oM&?z}nyeFU8pY=>gz-r{Vjms;kxKARRY5I)=meqvYv)Lp9LW zB9rhk9=BAVI~*MEG8}*WM>u9CJ0Ayy9#{GpZn5HXO8booL5dMi#G8F^-);CfyXame z@Z0rayon0-Wq>)9#J>O2vaUsL=?7<$_dj--ms4wg^k$4%c712Kxo0uHfex#840RTq zM;PsyeGqTS5GPl(zudp$5+?V1SLOD3l+z7F_tBL79xK~cCua=u($o83T#w`{8sm64 zjddf0G>{7EUeTL?cCR(wC04k1+njCqy@oT>sQcQ--6Ym4Teav`ux;9ag*nA*D4hsp zD6PF9Ecd>Din9{UWjsJ0MISuhJ+M8bGSc-C=u~5V7}quCElFc4#^lx0_rY?G{(r<1 zUGnYYgCqJw!cuFz#B+3X>e3Mp^Iwf2^1F7u87pz6!bh7#MjD3l0o8 zJmzNOkqFETX8+ztRqZ`@-xPl< z`CH9ji$7M7w)cjx+6Bw?xXt6|Tf#U$W4~+dmrE|hth3*J?RVCG*W2%Y_WL0F-QRu> zu-^^(oi1JVYH5@EWXm4uu)ckZn&NWp6KJ!kTIV}3V5>@QKbi&yo`0-DOjDElmR|LL?!_i!Rw<9nb zCues8=O7&PK04rRIb3+1UM`Kl3kEmee2n~esvJGDElS#VQn#4zl{2&TiVotRl4Uak z7oP+Gl;iZjBBBt9 z*;<7;3LUcCTFwm>dqXop)&8o8Hnh#r!L%xmN$ZA7HN57+^*4soYh0m_sgdfSf277?{3EzAWu)lfX-dpDGh%ezY5~q_ zK0&%XDWsZrSUH`ZP}G;7OFv2e3_M&w6c<9Djfifm29rDHhx1APlpQpPtK>vlej&}j zbjSRUBxskVRFo4e3C{<>E7eK@ zKAwVCQg8~L$qHp29>75BtH@4avvp+ z)zy80cu<_&cZE}7N<&5j6dVZ!b&~^RDBM;u!ANk?WfRftmyvH1OOvHdo&-~Tr)2m{ zf@s`)52Y)7spDiOAPGr)h$m@9hcZlsA_=A?oYyNsGC~Q3UJ3mS(2?l01s#q=0MY_o z^TUMAJ(Oy7Q1l z=Nq)9f$I`t0?U~5Hcy)X*@AzQ3<1SB1#(0VYkg6qVOhcTTjtCL9ZJgr1DceX_%}|N*X2?N>tK}ORGxXcAU^-#K& zN;=E3>aszU%TgS_?%`NoT`nBU4TtGmzO8rBhpN$^8R-}T|AG_Uias6P#t*#tJNexl z=Cuo>J^y&0e;IzqKd-&2&p(^_8FRzjXBbC6-WxyFqzU=iyqJ8&ok7phZ_PYV(`>S2 zzWtU-y_*^57STFE1shhb=`6Mkb zzepct-IM!-c=#)(5xwZow&ru#VxDF1`bymC?X$du-<8+n8=ke!#Vjg#6B>)rx%l8s zA$JovJ_!z&gN2Y!M4rDR`MZL@4bS4oTjH?nP=Qp*Nxvk&&5_@Iw#uwqCUoFk<<8Wh z#YyemaP4wW4(8VBk2#^mX!{$gy2W;}EMiNx1hlI5*wGa?#4F&bg?Kf+J>|kDy!PS9 zN%U7F&m_}pAGaWU`al?dRqU7`l=1&v4RFdxN$!8`> zwOFwW1*s1*6Qp_qxeGax2u(_uoE)u<{y_D&N|(p9?ni$o6tpi?z0GD7L_D<`eN9 zvQK^nUT~bGGK22P32p^dhK0+M3sL?~C~0#)_chx5za-m+K3P->eX^*O7xa&E=ueT8 z@180rs!;3J9$qvocgls`3uU|`s7MR&N#Tj^qeV_1gxPocfSj4^E~uK}?N1@@d(fT&} zBiSE!$NiLe)%lYOixyKz7;}1~S-B6h7JjTFHLpE;MN!`ThM1I!>wtdYnd@-rASr1 zyIwALH|c!^vnbw&^S046kae!rF=~XZ12AImO$2B3=Tw_^m&L1Fl_nAIhQ1`i<%zVo z=VeP}kDTjvj^9Gx8EM^#}6VSABxmDta9s!ULMD!Q~p8u z2H_A~btpm{KR~Igd9DzQ;{k6U?HuJ3{y9ov7(lr{5v>O=B<_8^26NQ*wO~S=GP*YP z;{!xjo`>CDuBtv_A+{y|oG!zlFN1QBkq-{SQ-@o!>TIZ`p*>qeWrDeboK*QKgk<@L z#NT7G`YCl1W_WJbwz0RBL*5`5B~=su$^1?8H^!f=o@erR34dGoJDR`eF8Di;@P=pd z!&CCISw$-#j2*R23@2W+TN0p;@N8TX_<{m^C4o06uqp{)qV}Rj68MG!%_Q)71@=e+ z?6Psliz@mpqWoUeKY_z>M z1Uq_4831!ZU+o6i7q3*eX(1ds&z>~J0N4D@CxN?llxLsI+-VaCV0_WoqINSYyxdoK zuelojW_r>P1HXM$bEn7z5YfkWPRoq4ALiM2L3f&60OO0t7CTN=c0~qL*fI>sr+fCP zyd5zW#;djQvF2V_2*$1*_Qt&SNuwr5i+(gxv6FO^&YMzBff* zW}dFs~=wukJO2N3w=3QRwVgS+?*ICS&ilLW-6P8;w8E&b>F{kFYP{}hqs+q>b3s-&mD>$7_#W!Z*^@i2+_cGd`P&;2*h{w2|F z&pDLC1HVT^=nl|KQvrLT$=)AW!Q0OAM0-N=F1YJ5I(~=tNcDj)0bc^$CoAlcJ_B6w z5JikMA6be$F{`jM9$B;TrmsY+zb1W}2HF;>Hnr9($rkII`?pvV0{SG%@%HJt)4sGb z-u_hWi1?x#JR34wE8wv_#^YVo-M2S}9f|H7@sU(r|NQp-!gucf7T@6x9rzY42HzcO zd*hBD^JRryawh?~ECXr0&euav)<3i&NN7%C_6B!a3n$-Crra-^d^c6@+p}`pY}*a= zu6D0c)B|+J(++VCH|YjC#K~~5({3P{+Eq75`u@SWeJ}3y{W)m*iqUkWXga7z6B_+L zqDiZPm{EfvYE3bw+wO{{_(C=K0AZioS^qpZ_n^yqGK7TMKfisR=z7P$*XH){P{w?X z*-r)ASFN70@V(RUJ(@m_naU$ge@pmlaudTEbPh0wp~+`jEb19qR1(n}6`Ety<%OH= z$ogp-;WRvRTG8}}_TJJc_JLcBd9o$#OPT)-T{<_A(oqy0!}iIDhJ8hX@3$^QezbSh z*QKjICtKtn?df|i<><;RM)h6~E^HUo&IoB-rin*!`Di+Gn?+%Cv#7%SBF*{#A8~I2 zXJ=96f8RXM-Fr!Hcjw+tXSpFE;o&X~qyal&2LZ)p5)=(CATB5fJaBJ7hxUemiiiOL zQ85Z43gW)uf{rVWGw$HNM#O!^anzarIL7z;J5|rUPj`ajJMa5`-h9%xo;r2v)TzDd z)TvWT_$lnr!tMWOea8RW3XuQbM>r#ho=sJT_PhPLS{+m?7bp1@MZ^UNJ6GKy@Dh9R<|(5ztitN6HJC+9vq2z2O%NK4tLj z|HyZmW0$!FnRvb;EZ>_Db9XjcA^1s-#`a4DS(%1BPmooDToJ@|+~`^Cr0l)nd)WXj zl7*0Rv|0%2Gr0^ablKgl+)FR!X>>w6FQIGJC!=%u-l3XF1-(2Kq>4%f9mSP~B-Z)! zgI=GCrK(HCdPgcqm6r;-I~AnrO9kDR3Q`58g8m~Fq$*4Wl_~=cRf(yf15-h&$5hb6 zQbDT9RL~<+L8^*W&=XTZs*_aEnW-REbt>qhRFIlVD(JFQkQzcN=rO61pPL^Z|$;I@42-rJJafTtF{h*q-W1w@ufAgTIzRqq2CJrTwB6f#;LlLXVgrNXnH zS`iw?LI-C%I7ovpbEqYu3MAKHin7KUp4#2B7)y~OU}uLH&Ye9OgcCMGFOSxO)+*Gx zuh!Vk>%`2S39y;~rDQUBjdH=TYba=ESp3@x(Vc4LFYFKAq^0qjMQ{c+iAunmLTBeY zee=fc!&BCY+Xv^}rI*dnXs68^xA)IGyVw@8s=2nR=aTf)hdDLpOgd+obEMgd>_nQa zj)zlmIZ(1WN^%S~fu_%<`AU)=o3B=xJ*I}4Om0}34db?9oHaVv(-?xCh&h7jNVs%Y z>#t5~qCMQ@M5Wwa2XoDQXl`$Zs}@srwr^DjPX_58mafW8M3-u6&1gOUDEQF7MEw71 ziaNPPaJkj;KJUg|p`cvvg>tx0@gj3`y%*!E5h$iyp~)4VT;a(zyz;7rlJNt?LZk58#PQPg+ySX)#bsm|?45I77^2!@1c7&U6 zE7h|6$o%Rn2&(PjE%erkuu$E#C0nTN;_0DwKFn_3(kzl-HXClIu)MnKPPtXDLg!$Yg$?c6RMK-2=&AIT$Zi$4kw}R*IFPT}cEbVg8(yr*01h%u);pXB}ZRA=tiZGey=%Efwt2@obfsG@gP5JnZQ;XRt=Rzo?euBeW2q;nr);0mEd)~0&&4V8hA0l3lh9tn z%13Pqs9?X*1;Qh(MV7aZDlM-ot8qks8b|i^r!i*XUvq5xOVv-dBe3B2W%{iyTqF}u z>9O3lwg290?CnT7h<&wwYYSs1mmva{`*Y?Z7~{+I zWLUC{xPItH0F6H-a1I5h{Z;qi&L>F4op`#D=rF<{Z78n;CA+6OKv4s8@9?b29P&78 z_VkU>%yTYr-x?>ir~5Jd>g`ob02Fq$mh%%9c4Z5@qMIlLbRncaT&$usTxK-lJuZsz z8=|eTg+mUV-*E5PmmV`fsvr~S(gp}B({k388T~p(zpgb3tsLv~rM{psysgR@aXPc( z*wk1j{&~cR}-gd1_?bxIIr_KH}`QI1gk9uS*lAwn(uEU z5Be8uZe1K~)?;Sn)_FE71)H(D%SUd5>GNjO=~`iZ0#;kAg3YdtECy_C9TTn0 zW+)*mcCeZF)|!})9XZl)0O8sDjhkCbeJZ?S#B}H|Y0g{$i*AA2N$wQ*&t-hNvaiDP zzp4$p0h0pBN56ot6?Or^;nczTX&PtT;S3d4PUj2t5m3c})#Vcw;5w_<8g}D{@iSE5 zENTdxJb%g9njUYNb?pJ9#8p@mzN z&p7dQwa8(e?r;a*UQGVMrhBrl(e0mS)wQC6@~j=7as*vuj`gl3}uQ$bEdBt>b*&XNgtuF3tWxw zw+LR>x9?3NEb|fiYQi-ip`2*bx%lNI!jzBDR}`+sj9joZh5jL{?o?@c1C@)4wO>Qi9FND7OS6udWy zP%rryDQ#4T(pNC`-Xz8jtq1B=SM}0X^#uCLr%7FV<y;*T?e$9g-Xua&^(pO9SJz&9G-(M-lL$%G_jN>*y7oGveQy#Wsrr=mr>pC} z_NVtI5t6Ex>gT+wpG+#o)#PLnA*uS5GN{AoD}#D(5+SL2X@btH`l%!ZSCLamgnreh zltUfL@}zZnZ$Cz&gDy=`OC!;}UXjFLk3nl&(T_3YTgS@E$|MHUBPc7A7~b2DG3;Zk zs;o-#;l`d-Nj|){A7jMFs8{Mq8V;qNq~X2&7^6PM>dNXQ4JLiKTAiffz5N)AeT@Ao z`z2{Ol>L%4ytf}?iI1_Svc|>e>#nYGQ3n2g9Hs$|nHP<(t*rHN5_QwHK2G1?k2B`u z>|fd6#p!Fa?(gCZ{QWrNKF+$zIv*#YyUxey`}=Vwe4O=_^)60dm$b6pMM?qsv6lK+ z2UHG7VkM*xNMiK?Nvs{(cqFq+REd)L>cGl@jz}`59Oz?2$%NIYG#o}Uh%^$6Nk64E zE6s$48xxud#xjr5sHdL^|WF6cyqljfaT{0Wyn87O?Cy z=AlHd=nL{ZwS0Uu$fhujY|~^nTE{*eUi2@KTm5fsB=s#Q{aOjL?=-81H!3&T-Yan= zO_Eox`LX492Za-VLfn*BERgoqM=#s3(ZJl?|KxdtyUU&!_GN{;%IoMA2Q zuhgzCKGD|6ty(^QCrfWxBa`doC_KuI)J6E(3;f#f(J^IR&0fIaI}}^rt9?jT5-yOH z1i<(8Hx7K^Uvu2%LANcAHP1AH#>$1_j%gXLs79Z(?qqwclc1%4UR$=-yMwZz1Ya+Q zHz08Ashr-e0_1vckb@NUHo4X4J5a((X%Ky$kM%0U+X*mDZuIUbZI{7CV+eETi1nFcGp_!Pq2R+P5ttG-H>`g0k!`ZGn=T@)|M6oU%v@&sGCSsu&pS$Yq3UddxvSIuNNM1X!D zE$Z@rp=Ad7p3({mJ(Xin>y=`G@0|iiRWd} zmk9(d`V{Wm+n_V#o9^rzM%@LLI9HvR0BufAgD$PfjW=!=T3@Y?jrDPO%hJsZr4 z*`05Z1l8Jp^e{w)(Y?gr+0%y(%ePk-3f9$lk$S+NLAG`uO+oSA!?e3_j9Pg=1M%^c z>iWGouP;BM&3$CEtg;%Ep#tqXG%elVt1Rr@*U!P#`U2u&ZpWxSDNe|c0tFIFram?%Y~~4y=8kn%*S#V9Q=$cx|np#lF8cUTtH%|t|5>Bu9TlL9UXeO6@xzZ{#f1q5$i7hUt zEh_OFWW~`)iWPnDbykFkgVduoKAs7HH{CWJd?ddIoPJ`7X8H{3=m^|L@^?SqtHF69 z-_PRjH2fR+Q=B7y!pAIn3i2K0UX3dP;=V#=t;2cp5kGVvb4PrJk6FbCqOZYMeWE;j z0DZ^%mX>ER-kSKT<=G+mtUzh6bDACYWH~=N!WDKBVvnmu8dqEUIZ8qFb*Li|D`QV; z(?7!;nthr^n&%c<&vvm9XIjM0nVhh?XWM2Tokah(6`E!h&|Er&(|Ic!4H!hW(J*9N z#rkM@_8e%JqEY8Bm1j>Mq~$X;S)OIg^_jwhG%d;Dvhpm)Q;Bb?Jd5H(;#*#x9g%M^ zkkM>8i}{vurZ(mZWJXU*$(tSx4ogOZEj~kziYl8YkA3H=WYNTSeW_ApLU4Ue^Tn%I zlxMFSR1!YUEfdCStg z>VYa`ieS9~|3yGvakq+_l}5YEmd|B@WdB0b<5ec|%KL9F6YBmpqa8s8O394I>*KC@ ztt`*}t3}dEV&g09(?%9F$6dT*iC6B&+vbbQ3e=~(-#*H>KiY2L%;B6MQjXd!5Ji0F zJxnuu*U91iIw8(syxKvW`l@oX@%Kk_14F*20W&@7@KBdpKw+;jr(i=4<}67oHL5H- z_Dw1ZH_T{+iiXsH8A3Hm)<-RY*&PdTMufB2vwNcs zyxhfIn?}+t2!}N6z*8=lZm9<+S}(1@{UZa78;Q$2sBQD(Ov%qo5@u_D`2elwPr@4v zq?%u3me*=u7jdlB96;^&*Fl&A0%K4p!$rIF;FT|m^>TUk78od+9)2G>RGz)cpaoR8 zJv3JzE;lbOnv#4Uw7A@SdeIcU9jHB8?9|h7mXw>v6-`&YAE#1oP8Ur9y$>2IH)&jI z&#kedT^{j4*(ug~3ICdD=yn=o{Rm=xA1!1n0NwcU1u)E~!Z2LKgPiTpdko#^5xC8C z>!)6=mh%?Pt+u$vVN-8=A5+w9(%88M>zGi>+PmeJT+1z`S}t>$YzsY}Le;t$A=sp2C< z8V1|HU)WBk)9tjil8Gn5|E_A-B{n~9zlu*JuB&1V?e$dsTF#zDu&Zig% zx5}$LspiSPe7TL|5YGm2ae~;V!vz@^d=kM+lHgXUUh;%c^c^$`&7$q!yK}nF!|Q+2 zZn>~wWju?7icX?}U|;KqYFJy;Ct3{Z2l!=!wdrugx9SpT{YK4gT9i4O>yxIJWjEzU z$x05q{wUeX=4+?>Et&3;Su%gmC@~amVo-1vLLKY*>QN`KdvN(;Kc4wNHnywf^z)ut zxcI@V91i(SdtpY~_w?Y^I67%~pY=s%`^lrA{a>OTx?v+drfh(k8y51-YI1ez|v7c(*>5d@S}KJG4h`RKqNr z&vM8b-&rSic7vsVu75m?2bSM7X%07wYHs>Ho!9aNk+Cxep;;P47SkN$Fb|QHH3wl~ zXgD&n<{$_*4IDWCAnIv*%QZu8Om$@(q5$$-vwYtdt4?GR_!l&X+@Cx1!c50mWFx z4C2{_axAmVR!3u*sx9z%X%Y&OY8mDtYYGl?k;h!*Fbg~G6ef=t8fIW7^c-g3G1(i7 z@#2oR@Y`535p;JTa>O=vHuF??(!WGY)^sDiZ1qcE^ZG+0yZt`C?CFUI)%v$kMmq#D zc=RDesNGY6HOt#)&=|1q-j@}5qIWM&jqYzd^|`xT|{A1L~&`~DEC-QL&qo$Y0iZ-Gj(-&PD_$}89WsCRCoJ|O&EfsaPv z=C719=--ha!7`W@gliyWogIF;afeGQ>?|E4t;M9poqlL_4w4_`4vHcwur3ja?}?iD zw-49GCCA-En_QfUPJ;H!4T@OK1_y6cgnZLqk_uZt99@b%GGJYbwq3Ov&Z7W|xVIi)ORip_8?mRN{ zlnG(?UT%LMRjP1Ll@8*yt%8a8a3~~pYR57MY)o{h&?RHQ$SgwU(m73~c!HH`2Xxbz z87J@*{!Zsl(v;`%_ZgdND=mHfSuzZ!qS*Pd+_@xSi0znz!$S+KTqr_CcImL2m2)D2h7col;w;r&MOc(vhlsUy`>xIYS z>YqO|3VS~`LJ?)v>~iC=+(V40!=j(c;jrju=H_}oH#gt=g}H^^FU>9Xeub;#MMtip z%T;{2iZ563xSy_$I+x!A@`v%LEh zGT3`iK`{I~b923aGdJJ+y}5tF+`Ay~BfW^=j5K(I(fNS&x)6pJkjwu8Uopvoy|imD~6U z)B`uWqs!>N2Jb!*$faSYo8W{VCv-T1JDhCw;3d%x#k+n0>pssq5*_>>`Cvc(Qk>z5 zk)m0qiH^W$xAMob-6!cAl|9sjpTg(J#CX2gk!cu*g>GJJ++(43hraz&6(K({UMkux zS%-$cTx+aSj?Si=jH3$||D3izUYZz3_@jHP4ht1Futppf>S^&Wgf%?2*hxl;9ocVj zsA!h8_Ny!zt3(ecz4l0DNpyLCY#Uo#sYE(y92-kw%9xCciG~<4$Hyj;nB&nEgP3EL z35!|m$R>-6fyP(VVeTKV7CW;0;-Iwx`rTYj7_KbFFhaG0>6UBaoz()p!_-P>7^<}prZS9|LV;jK0IZM&G-u->Q$hVKeVu*ClAwOvhEh;JX;0t`bl0$xl+An*;Y*pk zJH2D%pC(VUg?KBMosjyk*RE~Lizd0L*bZTiB6@@x9qRTuUY#g4O0DJ5NhkyttK0~Q zPv%SQ6t(9QRMdr4Gt~eg%p>uP=Q$kO*=EAp!dXvYN+E^l6onMCmBP*~7E){!mMf$b zJxU?vY^AjGR0}CL3iTxl8j2pRpy6y~Xy@ZBXqcc1=Tyio9;2YqY-MCiWfZ7RuaH7K zR?sEc%Hl1RB|t~_ERqGzAld?a+U2lPX%&O$Q~*mdg>jS+Cr>|dgzD2@oxevh4Cs%3 zA`?{h%_L!Fubz#|!aQ>me_F)MQX8qG>_iVi2Uk88g+wlJp;7x-~}lkqUpSg@2v!Z1r5{tB#Ls|i-fj`J$jYwaC*uH$^Jc|)@gUB6(l}mG2w1eGxvg{lAgpx)fsa=p1L&eH zyPvo|SgrWcX~4$Dq9@>RWvVjf!kc5fk@|Exk@J$;?jv`v-3u12Sg2%C19NP>8YLg4 z+f^Zt4^OcR12yd&tU~N#Gl*`y$!6wAZ%FgVW;=DBH2dV6 z-T50*k^^SOgUvpS^EM{ca^4PxH`kIFPF6fr9oEAA8I&D5-W%2zO11czc(~ogLR%M= zHk5gSxK9AUaPx~nflkf1mo*!cY_}>Vk*6_;$M(2MUJ_4Kb0ps%f8d0laG z>#&WcGXH&7m>0j=)0|AXohE+2$PzK(uoUiDs-a}SmaLc<@ z8?v{dea4cFnPIgHrE#=R156D=cKnef#Wj$mB>05*MJR4uE;NYC*v#&neypN(?!NHLQN^I>?5Vf$P)s=rQJZ^-15K>j$Vq*UFf~s2_lF zeFf!pxc)5bzDuVMWF;ZsPX81ddzf=Ck zpI9R=*0qkqRkf%q=j&&kej;P4?e4YrT*=>R{*>r?{+b6+Ms|BvS{7C7wYEWqp0g0Y7WUhFWWKA z#uMD;1ame@j zd=E(<^WnjSvfo1#D80OF=FUY{aI_WEFnTMSk8*zM^b<8#y@0kIot-<8BIc)(t}a%z3|}FkqPv_-a33!um%Apw_rj2XJ60$n$7`oc0t>}K9ro7G$H>%MW>{~}oHUF)XtV#cEj|us2 zoq0|9Z=G!|x9>gUJ4Dt~*8%4jq1f73$=a|Skg|s7GJm7|jq!(6Gt-=$9BQsxHq_j2 zYN)w#`A~D&ilOGxl|#+S@`dB@{GwJqwPN)}?W#eo!L(NI=VQ~K_x$y*NwHJUq1pYL zNR`#It=u^qvpQ5{R1oa(rRb-4TG>@Y&9GiV&o5ocinZ^Q(SsSpZr_=rE2iuvBqQ9u zrq7n~McHSTruce}@pVQjzWCDHOOCHxomXQyUhK0iO=No#DhVGFB|mU+`Nlax1|!})SLRCY@BNR*|!=}`*x-A3j8J5}-^Uju&asIERa%|tjq53=NC zv^KJ5O}F4=7_x5b^_1$9Go1SM2^dj3u*C500L&?VM>fO87TLLA#Nx2*&+?$7;l(L+ zS&Tw_4;An75JcxtU=0izsoVx>W-$a1)X)af_)sc#PjguE`6!x`{~i9>7bfF{<7c4o zx@@K#OhhqpFxnqP=jtQHv@4)x$Fd1bO2KlTMp2*c{87XFX7w~|heziby$|k%^_O{A z=Ns1b9xKh$2sDhR*$b_rZMk8rBR|*F((US}fn2G(fuA8>fSkcC&mNnqdK>3I4Cj-| z|DYx;QzNBi)5E3u#Po(zeZ};l&8G%)|5GaE{Dh@KRXmsE8~<~Rp~6Ib7<_@M<`F%a zXv0NJv!|FDOe_v)v&&TojFB@AfVtzpKlhngrt?2)0UKSS1(wSq@dCj&aYbK-W z^<{~*?~l?HZZ1Dy@r+OqDEM= ztq|r0>IdD-%aqU65)?5D4;4U!w}r3oCzv<+u=W_sp@(wDRWyY52m;-g_i;kxJ=yp? zh+KOP=2P`C+-1329w}h-<3h|;m@ysOthSz9$#rD7CFC*HDOWxpqX(V zJ{thP4cd6F6w{SyOyX}Q&0h&4J?E2P%+j>XqgY!dZk92kmzLrSfR7h;FGjonI+*31 z7Yy^|FRc{pomDMkZv8-J@oy;+bP4>{j5B=yo}f0gNOd@iTucWr`qD5*;=dRJN5y-aN&jO3{HcjAJien+3vy1vrAkcjM6 zF2bod>#O4qA6WTb=VY?gL&h-@Dv50Un3*CS@XLI9dF^mBsA92b_H!gx8qY4pXx3UU zzSS+8`cX4w`o}>-B?9DMKV39aM#T-^o)|Ao@a9^sx?ydh!r@9K>jYQhg@O!Z(N&V0 z8{@_1C@6?wJqG83t7w`6+Pcx3YGxoj$X|b68(L zQ^`-5;nNg`EG-p}If#XZE2qF@@T*mp7jLt++lun>$LX6f$G7>5F9g<}NJB0GGO;H# zH9F1h8sGM_y0~eKe#pJea=eWn_e98&jC(-@5zJw9-S}cc^7YN}C2~6(1$v%7-NPaX z=;P<(b@lAtzFGtAu)Q>hu8_GSG-;P51Moy6wBf2f6s_n39iHr-F+yC&+qmwj-gSM1 ze7v19&F1Y|bM$sF)TeVM!{IQflD(MY5Zza;6x7|p{aKNkbM*v>#!P*yJK=~jGqI^Bw>O#6U8i3J67swGs z%-?5aq|`>>DX%k&yI((h+&rV4tPg~lXOlL^S(Pl8A6)q@9?i}x!z@c)UUa{POwi2A zVQVrM+B4Q%C2~as*h(oh$ZZf8#sF1gS*gP@NE97NNzS~$8+HbT=L99;2KIWA8b<}FiF;8S^Y{{B#oqnwBF=Jtnp1Bax^!wC5&E99%vn9uJO8eP>FOPNAH4=vxA53$&Ju9f-fvJdU^qiv#Hpy+2LR5w9Kb#Rpd;Y` z_5pyCa0jrDL1Ue2?GZly$gB#DV+)nS5 zk-^Rh>bjT8hv7l@UWoaI@aZ9Q7dBieIn&D)HbU4Z`|(EceZKEoJo^qRCy(009VFk{ zkgp6!Z`K#@($A61$m}&1K4j31JLIu|2+OW0U^FkvqYPnjpPjFay11(x3UBLvg?tv` z|Drv#9>L=S5L_>tgo_9w*Tlu(0SoCJl$E7y0oN+g-q0_Nsyy(KldErS6jnlri z<8FF{22)3}z)*Byf1fgNww?zjq|t8{}pia_0j2Kb5-ZtR8XVyL;HQue*bL0xuwAS_7$%r zMyT}=c3dyZTO_A_jU89Tb)LiW9g%RJL-QR`a-NxdM+BW`L-WYgk#56(BW^Dz-w&j| zB~ee{yY(%m^p>G=gs=?#`iY4eFU?UZ+`W7y#j5sR%$!3w`-;kFu05QMI{j*509fmc zLD~#4nsr^LJvy4rMi=$b0;-Fn8P*;)VA=O*ezY)JjGj;Zl^G_GD3+s(7|OfHD^(V@ zms2Gy**II*I%rOAd?SjykFYsTtz<<5`1BP#qx6jfm79caz4Oo2TJk(ds^SxTW z0o9x41-@pUZ`VBEYvoG{;dS$ZZcYc?BF{Oz( z_i9Pb&ioSYzq@M6#kZzuzaj0pO&;2y_P0O9Jy88J+4`U~pdp|02yWEM;|66n{<=}~ zjl^H?0XC?n0X71s0lLZ41KBJZoe%~g7pTYNiBEFC!4XFiP1Rj~y5Y_%Hw5?o5; zyEszqr`;7Y6o`>e*qO#))em!`5V{Hn#-Pmr0c;1dOJwvmR^Gar4{yjedhopV4gebJEb9j%ERCSQPQRjgKD# z*JD8;)trxhhHrTGH)NYdZLT$yZ`X3R%rEESPq5lYVavu1R=nGhR%Js9M(Z`#*<2kV z!2c1T?wypvSRUoc=h4>Kn`c|&-B;@qt=@_FReV*7fFJ}u*zn05oWDen=`R#ub*NWPqw4H0yqm^8J@e#i#8?&s<=C`YU=iR8DC5_(daL5~xu4c8`_Uy1-xkz0% z-&&rJU&`94HZzuwx7ZqMd%u6@8Qq6azGgca{Q~Ysn#XXxl8-iKPcX5d{N@cwS-GenOQg4!;3eAHBnZr8>Q{394P{R6CX z6PO%!663|T5_Vb~>~{`!d7VHr)@Fl$qwHLT(k`!8+n~`!+OJ!yLf@}7md98}wP0N# zUP|K4Q9&X#IP?2F+Q^0g!c~!SOzY6t`9x|E{k@0GQ&@;Pu#sdfJ28=?Q;lW|HpUL; zYS>P0XD2wVLrYQ&%ukRs0@Dq(@!3)jqYIdzG&*apcme5iWX3w_x3JuOP(dbF*GhaF z@~cJEEONkBk?ujxn~SpXZ$VX8qbYWE##1D+4fE}Q;J zuDoBp%jmquwNgfQ@yA7iY}l^Juv>Jar7)q6*ZmkH3vJxhlXXX~7^piI=#H;~?Ch0& z+74?lm$uGwkYF$s^`}=g(=>js-~ECjg34OeO`7BL>JJ;l(d%e;1%|wLLg4T1GDm6u zT6igl0rX#6hH-k}lP z)O_!!_!`r}qa9l0; zv}s4xWw$Vee3VGEOL5(5cM8>h?)MRip`|)?3*(DLDhz-Bo3LoB|Gi7BPjY;pBt09l zTU{^TQi0aXL~EZ+KglD@W;Hw)hj%}{Qy)<6mstA{pXh;|(+0tVeE8~;Agj9SmP%=O z_tfri{qD?e)?#WARcjI7vvO>3h<%)t{P?HE)FRr>2!F^sq?;kH!Sj5KDGa~ zINGp%hTOQrn4tZQdAe!OwzTKDY0rge&v|Lj`Dsrq4|2)>g5P)xT{S+E!6=CSg1`GV zI!@yX=JNl>=U~z6>C;%z1T!1m%=dcR9sNlNVUKed<63U~N|9!FWI#^eYf(-RUyhQY zA8!5i&%|v-K_u5R@^Hw9@gGLjJN$O1kdJg2f#~-MjHB&?QkWCbHkKBx3B!y0C+I=t3K5;`h*#!`hiOY#3Owop&VR=>p$KfjiX6Gbj6`-jkrZ z4Y)}8NXNs8u0^~T(By{W!&PUl>c@J2Kh`~bIjZ#~XL6G#Vev10j9krQAPI5oS(--x zc4Kz2ICu_)K-@=*q*{<)U{-F^R#`wkUN?~&e1B2vi>7}a$kNl zbMVngx#ewL$-W0cypGhOJLzN`3~?D;-i0S@v^7o-ze7mPwstwzeQcucq)3A(BpdOo z_z7u>SigvGB-51MMA0c;o2Eq}C`S8PuGLDz=saqO!Ow($jZ1>LtI+{9ZiBg(^2tM4 z{8|jgB-_B)iJI=gast}-%&XPM@8!h^L89gW|tzl2GHSGbd$x5lcxKiFj z17Lvt2!*ftcDOkbcvN2o{n=zA%HnjrzCYds3mZ9)&x{U5XE2^eXEStf`WS$`$=hwk zPsbPErD!>eIIW~MQN|h8$EE0>NOL<&eYaj(M;^N$1++sTgGbP6#vc=FL(OBjY5Q?~ z=10pcVYTs$o-+YWUE5tl*If@gEgqlZtu<-XXgcgFy<|I*cIbC>3cO2N*$B`s++D>74UBP`pAO0iTO zW!uPU7r%alp^&vRYYrn3K~Z8N8n@QkAK_s_1-~g~Be8pFrF8KqxmGuz63R&>s2ok# z2$Lq6n~IB;!oBS&wMIMI`o2#4(M0GE0c_NN0o~{h*M-;8@k3Jy;JDcJcCo-Q`T3Ml z{7Ev_2=WsgxKLD0W74f(hBDmc)E_I3UA7{UkbyoaiNnw+=jZ2A{lj@H6m9i_>?pc$ z#b`O?+mz98sa3KLz_y=3k-aTcMvI{dC}8GwcvVM;i;!i(GR=x(%8Lx`#xKyiiOroi zGpk-vV6Kp?q|~YfB^N_afK~J?QnXAZp0{IjtLX`9*Wm~wnlj44XpWtCE?S8%jH@te zrH5QAuSQVvb-l`vlOb|@F!wTsoM7%+``u~3*YI04I+7I(XI@9W9!r^bFSN@J*`Cly zt0zRJgPtN6f}T;b_E*lexNB}i3v-4&C)}D5MT*E=Q!vQHM1DfEj&Gkq_<0{jO3X& zdE*Kh$T=DV8CTmDaPe*GTxx6&^NNA(Y0Mq0fwBZnNH`JRurT4qvUk(p=zKT8wviNa z?hU4#>8Y@v;?1rU_kOAJHX3)jXhJOfME?iQ+o;D$+=3pF-D$F^6>SkIn`lV+PjFa} z=KVC|mKmxDwU4aXa^%7^dYLplEe+hz#prIMS2Jhl8)=5({s6{$b9sF#Dfh=x?rkj4 zJx$u_6CFF#rwF4ri>>HC)Re=lG(9EU zcA~~by?#+}iLk}VcRmSrbkx4_N-4b0r}1)`lc0yK2=)X8&DKf19~NqcZ8D@53vpY^ zl0_5PW%)Xh^DI~%13`@EiS1Gtk7zzS*^;)khR##5!@)Y>^_0GojFd;&O=u)%kH&#k z#NlK<7sl^`^!hOVq|yqbM?jXFg<%|Mg6{lEtfrHiaH&W}ekN%=f;4;`S%D2r`U10N z5k@CL4$YO5anOzWD>R3*>)HjlGY=w zj6OvKwoIq&RYURbp>EaWgO(<|L?h7g!2J?n)=+cRQ@O#Qw#FMcx%jb45RsMuG4qQ& zjO_6rn3?+eKDy8>84;o&Qta0kW!h1X%x_25?luBPL!tXw8vPD|3?6a%iFH%n!=^|& zhro^LA~il7vGL6w z!5tsgR&>GpltJ0jO5)FxC=WxsR>r+Fl?Rt}Tmw_xqwg%^C;fG%7MSVwg+?di39U;f zTWvhELIjS{x^?vUafszBSH;z9c5I7ljzUKHa=cNyvGpFF_Ds- zJ&u#F`&sxUdDCjagQA!wY-|8{036JbyIF21KgkVdE@(9b{HS3ylG+z z<4t@rEMhhAaK5-vXBs?MGb&hhvlyxR_?opXwIu2+5fB_D;s2JfSafsVhtvGeAKx{L zXpBy0*Xh1+Ma8Wv;?+=hqVV=84NzX=h}lf7S;HXgug3}F$bR>?-v+)K1#bCX6QJX`Fn zEB6EjS?kvQ*`RDzze|?I+HOS`Ff~xY8+r zi6S=I(i9CghM}l=6qkcJQd-vz*5^iiX8O}OuaS@s^e^)9U$uSIe(_w^(O-t8@$u#( zD&z6J`eb6Ds=vIjs`u3?5nG%D%~YeVu|gSlEA@A=QXglfKJHfPY*s;3G3R5{7@Y|3 z*@*Bg{fXv@l?j(V^A73Xx6kxXOp3@BO$aX*rVkO@CcKx#CrEt4C7zFmlq9mw)(MEF z?o&ROHutM6jlZH#<}i}{${T0}M(ivFbT=6Ub$0`|SU4CDU-*>V)d|H)@R)6Y#Z?cg5e zztv6$T`AX`2xEiI>qnau3DCi%lrKd?U(Ck7t(Hcg@RpnQx$_iCkaa9?{KNib$p%yp2T*DY^Rw`qzVHBiK zW-VdNMgJ+$$A~_bME|X#(*yjZw9;n{We-=+YVul?_#FNY^nMxk8%`Jt?#u9}qNs+y zm4@&8`r%1mPu3UKm=<=f@?M?G_v}x?b*g8xZ&e!fhK*M-c&FRvOA@}VztUBXqZ#+} z<`x5{Rp5gxZ#FFeI60KS9^Q-j*;G zaGxbrm=6ejWE4$Iy4h1IBgx3LDH)l#ZcsZloxKHX6t1`|7!H%+=%bWaYB-YI(Dldf zW;To@{c(EHsz)c^A76Arko3pj1ScOFT0foI{z4|d#?pnxFirS6!Ww8^X?o{Xfl$F!-YQyuXnrk~B z2Nr#r-Bq^p1AYE8pW(JM*ptKoMOY528gSnR@apr;#Lwk*f1g^v9bEoynqoMye`0I9%E%QulPvQBXXOUc4 zeU5bU7H_Wt3n{Sto_tqw>2Hug^m%a8X*8UUG4W(_WNpn;qE5$yoTR?`LkXp{%PXz65|nJ zzv3gx?ukNvG~W{qioGW)9HI0?21$NTgvgANPE~&1QcgDjUxv?9KEA0k{9?KcKf{}? zP;m9f>#BV7)~fy9%r9);VxHIY>uTPuLv>G++o6^2^NsIZPcb?y9;S8TDb=we?4 zVAm2GwAH+&m2PjI-G3Cj-x9lD61&W=rOYg8K9Mw~9vy!U-7=hi#$i9n*Jt>eu#zn+ z;AEQk&~COXET~Kt>hA3anf)?DEq9Ji8-A+VvTW;~0d4(rN7`WrYr_{t9OTjy`<(#| zpqDZdaLeUtIl11;Pz~04$5t%h4&YeC>n!sw8IrV={sGj{z@( zuQkC`g4O?6mO%O+%M*zIAb!b#bcrP2xDp)(ia1`)<}BPPB}w~?kjc3Xy~ge3=+vt3 zZdLttUx~E4cO8+`G~GbUt-5nnhS}crz(=tvl`S{NgKYO%Ovb$%ggd8S<^vs}J(K$D zA=Z|)W;s1{Q?k1!5c7Y5kX9+%;<4-RP#t@wy#0w4nPZ-unb^csNm~%M+Jty$FeWQa zSrqSUgLJ=3+)E{r6lzQ>EF+vAcpNiv7v_Yd_|a9!lp5D^7I-%q>3)wW5h_l303R0M z`vN=$fK=qN(Yuw~=q7$)#3_bc%iDi+dmbCK-`n_gXaNYZ$c(s+SSLrA0{EYeU! z(&#CT-OAg&8hI>@_by1|4p4)+H{0)>{6>b5r14~>vE8R3B+?KTX(%FTTsA)qZ6w~8 zPU4hc?k!;Qwhg~7$d}W4+^2~C4o_bg5EeRwFBjn-i23`({3Zy$AHoaj7X-S>0aT}5i02@9_hSL=?p4D>D;x?blzdAZM;I@ZuWuy;Zktf(PEY0dG^KZyPfxfcq=+Q+(!CS<&^{Bo%MyCO5;BB2 z0Tz_wSxV<>pN>#TM`)z;via#;5_IpUk@UE?3j6L?qfY!opqdl}3eCr)XM>Axf092v zopc;Z`~di6hAiR7KN3kH)2oMQLr(!$|0q41PHa?Z@rt%3r6I_TItYzyD2zLdKK@ff zog0R1)Z1OOksY>|tXjf;wy#Cwi~9pGsmIFIK1 zut;H?b05sKMx}BsSt}W?BiqCwuO<-lf6T9fT0BD2+a*L+iE>`>T7IKXL8;U6-k5Z$|{=ZohfDna13C_ zdav-t*+KME_1>^|i>P&frh>ki&qle{C|C7=s{1<_zI46=KevLVWvLG!yE-HM58UTc zR$&LLVHZYUu~qr)`n;Epn(G{)v*r8v{q(xc3K99k4V|7B_kNjsi+XR{R-su z`O?;;Fyp)E#=i!wr}VHWEDm+a;yy7^>nWYa2V8oX?r2RpPB_#sj%;A1>02#@ z(QhEs*yFJo35@!00q&JjvjWJ9_`!vVPi=pr66N;YDS_$6nMNPRmsG2FgmAI_HW1vq zc5vDK9Tav5WblY?p;Kw%^FObj!@~}*T3r}@iTd4#@7uOdOTy;+YO+wOcl9h@%9pH9 zaeoUFJ~@}@boY0Fc33tjN`=#s-=tizE|wb~sx@!oIXvyzkoL@`J)7j=70M*qk?Fvr zERbT$rUvLcNQ$xS%}SZ-kXNqx&&Kp1V`6tP25}leXu_H9q&!L1PI2ei!Q2P5PT0(V z=jIcgr=3S%>h5GkfVH@u!ZGs>2k6V2iz47PS}v$+qOVaQI$`7PabQ-73XbB_`esG4 zXp#>rX&VEjOOTgdoE^mzZ7B~ddtRca_9NvlzM7$I5OT&Kgd%9=f@{y=v_5)DAKchb zz2-S=yLQ~JayVWS!Xgr76aH=i9th^{#BCo)%T!6hY?k1t%1=)rF5E*$6w@Lwk7jMH zd%lguZvk^%dj)4|MrATZg`+iv=JotvKzu6Zv-ofZN2t*M14r1WE(>d>wlT^^9 zVO&$8BeRzqztwp9AhkhHsWz@m>hD897-SW|-rP#Mi-A=c;?VlwX_WT`@Gj#=-D|0~ zky6+baw*$W)a@!SY{^*#&-w~(kCgW0U!K%4drWn^qCu|{^xvrY;bQc4pwTz@;SR#C z>NSTmRP9iX+})AitLG|b)oZ2|V!68_RWa`&Owy6}nw#sr54UkcXlm-NeEqjoRV^B# z1d^=4dO>-oEbmpJ%qqfj~lIQ1-kYc^qE?8+dkIrwuOTm?iJ^9sQZ3upM2xRaGy~?Iz ze7}7%F4}AW`PFb?IsUjhuuE&1FVRyh zI+`^A%SU_w8SaSyT&KY60q6JRZ&2fVyB24xbehq(`00rxZ@}`aUO!>NG-mGuiJ|nh zrj(3X|N3iN?%yzUu4|91rv_fbTBiFaYN&U&z`5QB$%OGg@mUV$lm$C4%Iob7l=tFy62SAk;=UMvk$YAn6GasE zK582r@mh;s08boXa}gmQ@q&TBaxz2jL_y-8L5#}6$c+{EEM381iV9OULTig7xgcs1 zgpt!NP#!OYl^ln0-GlJNA15N_RwzW~Li0I>t!y^H^jjG38KGbS6Q%KgQ5@~nv=b{| z<2QN*%#bNV$;W>NgI6SJNs1ExH{R5|_fde%d;f$3PIM@21#=&p=li&PlEDQT)=wF( zM^>W0K&88f9|k*3u0gC>RhOP9yp20RE5v^#c)ZX&lVf$1N*Lly2g>eLj_|lpPg&1~ zl*!v^Go}G>D5spSr$J)!a;#E}Z`Eg>Vu}|Le?1U8|NaT*R~S9SYm#Qj8~7%`+&I8% zU~8{>(xC8|qW}59U-* z@z=FJnNwlKYpkT~bALXg8Ga~qL;Iep&N7m7w_v!1NM3Z;FAK%?w))zg@1~s;qRS|R z=t#n7YkgY90-DM@tavKvl;eX{(gVEs`4n7uLP&T=Zx-S*Pcd^mlctig)E|fj9-f49Lt+qftA$PZ zMsQX7x}#BTV8O@fO0Uek;5Gd-2W`OB-j5+VOUqBHGPAu;;GoAmC$AqpP%{~kfM*NgVxp1Rij&Wk8haCMX%-oIpeCT1g?GWl1y)b^6bBp=xM7-D_wxnR4Dc7z%qMp7# zbxN;hA|9;%*;MGVBI~_KaZzJDk~tb~v*GJDfUu zTCeh0h?8rr%th~|N?S|AZJdY&IcE~*3lwGxo374irpq$yvCG}<-9KdP@Ztbjj z`X5Q-A^1S!)!7#f3XQ%U!zVv9Uz@V6DQ6`#=dQ4tl19OK8h?{%Zqw||y0yJ0i(8)u z_VLm88CZC9*0mDl(z4^WQc0du_QgJ>R<8E?2>8B~yrxXS#0N8YFksyS&boG6ldNnD zFf~1mMB`U-I-l4#ItxHoOMrDlJ)sx0P!jF<<1%Q*d>m=D7N?@yl%KSv_Qk35LB6_K{|avQMQ)?ZN;< zxy;t(Eg13P(K?O~%Se4l+v%OpDZke3q6hf$mFO)n>kL#&sNxWYUxu6_r+ae>Zg4j>7)#)S_QL+xYpSWof{h=?8o^KVe8AVr_3O`S8npTo|xAOv@*ovQ)F3F-l#PtYqN61 zV`Mtsb8VrTluL95Rlz9}W`_*|>s5arl@?Nxf zKXvXZ##IuxyKaT#?Qdl`(wL+*JQ7c{kLL~Gfv@&V!&5uQM(aX5czI_NVhy^uW(fj8 zm@O-t{bePW8f6vFx7Smk-*at^dFukvZmtY5O2CnLVEK(cNOoz8NigrHa(yv657hQI zaXADu zgIs1e?sj;bC}Y@o_D%Ra-g_W4R4@}$Plp|BNl9O`Fr3@mTASNkG`VMMS#ERmMvApH zn&;~a{aJF7t9q?9MGI?}f>Lz8a`ea?Z_Adk1BB2Z2GE>E#AzXz*--U6M!_mZb2e-* zZ+IG9{wqeeDWzapV~X4w`f=oI`4M{d2Cg2O7iCs&2tJM6>0ju0u4g-(FJ0(zGL{XU z@ALgkqR5$jeorizq_PNE&1RQTbHANR`y| zqzn$MrnoLsy3uDBWHnNqm#s}Z1J;=IeuxM%d_Aure~73_6T6FV)0cjV7*g2>nUhrT z{7dn(Vg@~M6;1R$MM#Ap+UMDJMNR>i33##3qV?Zx(7R0iYfymQQEH~#oc5siLYV&C zCDt(SMlkS0jDlfTM`esOFSBEi z{<{ngS&w8UO@C_U$DaPXg)aMF!QqgzW zJ`FxJtuyIw|AK<=(1oV%Wh$7kHNnN-E114pLpHy4Uo7xwu6v2xOM*EOY>kIIks&Qd z`S+{+7Jx*w8nN)n?=YfAqgSFhtc$;-M3~m)#_tfF#PhDS=RNWaxRN|T(8inzwIlJ0!RbgKzOhu;naSez(N>>IQ%ww5JJR%iOdNjq2m&xaR@9u*GgAw+bjXnmenog`<# zk!-;td5OS%X^BAIl*qik!v2|=Cpvim0&_hof- z8X>g3-wQQ=mAfAUh*;v&I4dykAO8y<7&MW;HuE!NYAgSCqD?`--TS;!>C6d_9kSJnmHZfwlWyna!`1bd;G(+@nmYtCc=U2A zW*DK6qRy;I$91rsNN*QKPnsm=q~5nGv<`BdxL_aCJ@mub^&shDDc}9NN@E@{-~Eb} zkm`9Oe7{6|N1s>mxN4nzXeLhYGm+o6Kbs9#&biF#DURrMV&CV$#G?Uq~x-R6pJQE(klU%sHX= zV-+n#%bi%yPes2H1siKFfUB2UdFrYRRmBkjRkfX?fNXp(Ww;$lzUw^?5UIOfy+Vamfr}Yd}&ErSsq2&m`s)4it5Ma)H(6V z3ti2X#nLXRf&B)2y%_TgT$Cg*jqV=g;t{&rq6fiQ#oHiPV`()}@bJCt_!r}|Q= z?ma$+t$OR`{0`-eMp(V3Nf(NY9ds!A9Mt|sShar)lkG7O>a8|J={AhZn~Zx$!;9o$ zVW+OA_AT0uHO>vb^~P z+>w^{1t*Y}{voqb18zxtkxB^8!nAiOnibxrb+8oSUh*v|#<{^}{{&l`-DI%YJ;H{t z&)EmcX6_-KooaWT_x0;uM-s~3dY;zpXKzs>@9Iz2;;QxOn~`9vT}pEa>-^fQZj+qn zE?}3^Zq6%|c4=qmR1XNfxF5R&FcS#?Q23Fi7i%1^d3S$W(1F)W# z#^T|%4c9f!sCIu3*E>`PHTS6|Pdl>Y!szEJYEB|pnPb{so=qJ8sX@3R+h;(esqab* zsIzIpq$OgPY!vWIED4Xi@fbtqH{!6_s z{?<(Ctjy@|m`QJ-d19|E`lULBGiSCWI-dvz?mkhqNOQEdKZSd(c&=9WLpY*;mvw*5 zd@VubCE98I4ZJ_5@lFZcb*9fK)$TGC9H9P9w4ggBP@?=G@;H!1GAdUm^G~h1^xUrMq{l)%8+7iY`Se(p zXB+cTRJ|VM2YnREU30I_(h;)K_;Pic(0(x7D%84nG0-tktsTIs4mOr?$M~+D1R0$L zT{noohWI|3K0^&ZO&V>h#K$R=8v;D^q_?xZ$VO|0p%-d}(Jt|k!ax$>Fx(o2CX>0| z(m7c??N3xr2A6RNNXH#K4!h>&LX4>$?JvF)cIJetO<~9|)3J!+ij3(yj8@~>j{G5O zOKjsu>1Z9PesY7-n`3LkUUP|#hSq_P)`cLL!Rg!#k-&bP^hPTCVhmBGR1azTb$mRm zrvhLXupXZ@RUK5ji!g2z=0hyq3DSLq(sfwqHcYE<5Mes~Yvetd8;vik^Ep*_%&jgR zV(B{{{WEkq3jGX@R*eHRN7A;0@gib0zEi#CFN|b6R03Aj6NAFoq4Kvjkp`;Tv^zWq zp3KZB`yh9g`AYG0F-k|vnT64!ds%7JP+ zG!PPs>F$AKSSATeWG9FO+(3~<1QnI5)1Z&E9pk=5d|Xl7LBxI62X|1>$9>-+iu;NS zF1Us7`*Z5v+qWkH{eEA+KYn>-`qp~t)TvWdr>ah!vWPz@;-Dnr07cwv5r0&~T1C7k zRjFh#r&T3OQ>`&s%WHmu;VD2tO}7(-A`-!pZ5Uk zh!_@Y${1F(i(^t?DP$0qsgD9nWAF~X`j;(h4p>Y_nbJ+iG#jAebcLdipn!UF;@ME4 z9pCjHNUiWVwc|#xY#IkSjxlpr8D0BeH>#ikTuj9^=(6O@Z_*i#-$jWF{jPLQHo!n5 z%`+>}91d3chw{Z2XzX>(VfNDC5x?8PuyYs*+GTr~X}G!EEkQhpL!&(IVcxc| zjS+7_wf)9j)k=#;P>u)KEeZG)#m4>~Jnwn!OH7Z2wr(p3(V#1jc){ytoRB;BTE7<~ z8Sxy#^)E{}sXh$W+q8LuE;3BMov_BYRNZ;ltu+~R#>moBv`-XxoeA%ebQHQ1ptM81 zr>XmfeHxqUlG{LJv>sUQPkW@0dPLw;Y*30nD+TY%smFw7w0j-HUF_BFb@WeuGzd!G zekgT&IqizgoGubfzI_y$cvk%Pz~65{pGfJQ!)XT=J%0f@N_01KzT7#2Acr!3Gn&WM zQ+5v|Lb8^OX%M50L^9@Ikx|?Zy4KCD8-&qTG1=ate*g+$bgH7S3>Q*m?m~Nf5Wu~a zB7e_mPV;G0=dILP{XJYrb-=y&+@8#mKGQ!cfuYK)FI=Gn5X4diFzpuIM{rqCrJzFS z>em)tw;)b$H2pReiio@UyBRdvL%tx1M*qX!&*fpa{K4@ zKR(d~dR*?L8@!u6g~Rg;bN$-_56v(9jxovI39lCxhW5p&#k(cTUPj0dTusRLIo499 z{A<3HU(9z;1iR$jhK6 z-r1i9`-0Zz*0PPq1eCv8waX0TSE@p^6tS}7ut4d z|4nD?3A>{q^~@zpmzaZ(CNuQ$&_r<$N!q8FdkDC2VQZ}OQqyB8^pqg){sy=4B$!YB zptOXbt9B3b+Y$8qM%8(M>Kp^;9SX8=6kT2>MVBpvMt=to=aaTJie;+f2=CDpb|R>6 zbUYy};k)vL(FyV~iI^`Roj4GAl6)un$mnD|JL|}n$exxwIz`c!46NZ3I9mtcoGM?x zkbBDu_g^H+45DiyAhM@Kz^=Y%3Da18UnuTniK|t5c3%dG-WKpnw^Ie~wJ4XioY=9+ zglIeDyXg_Mjo+W5O^_?b8WYdI2FZZUG}A}8rdVG%6;8dTIB9Ac*A%A~E-?S}LdU)< z7oKC^RSVbKclE-}_T6XUxAtvR7FO&h01e(6^^T#13%z4_q3azZ3$O5w(S>(<$I^w{ zykptI*#4G%Y~d*HSiaEpj`4*To5PFEr$Npgsx{Z~8*BW|$8Nh#r#^TJ^?Rkp^w89t zt0=4$8_rSI1tc5}gjP zN%s#*ceG`*zFUvkGb_JbDQ&I{a}FF{P5weY;xMCnX5mEMJ9rWanuSi+(ot(+7j^J? zoj#P}bFU#!x_4^3>KoB=L-o2;7Bfh@S%vhAywQHdf_)bxr5a*9#dx z!b}Q#vZa}#yC}(gMKU>ZR$Iu`SPZ-l7~yc)OtvHW<_i4joay!a-OS&&_?t%wfzIE( zN#pLbK{$3kBXy!=syLy7{R5gJdWY__py#BKIC?LNRn_7~n2DGNfYwNJj>EtQ;^Hcj zz((&ReZH|}r&xsbi3Wam7C*^a@^E);nnBaAQ?f8nRaKe3=;*uf~(G+8;hRmer)~2N8!h zF2hURJ%l1#)1lYcTOOi^PDK6e$Y$|1bL@K@oeuFZ?v)g!>&gbo&7>Sg!5V|sB;|U0 zy8VkGRkWZupx_+|B;}m|nYlVHb5)ArtW5F>#g)2TbL#WypVz8?8a!~j zi_+;ZR*%a`SB&D9o#>Gkc$pyRWvAiN<)=%%bW^$2D5uXa39a&;&o8~hKwZsm4Ce7T zXUc5#jl|Eiut?C8Yl{=Ibf{sb*^0h`Jkb-BF@sCFRI#Uo#tS9?3W!V<9v5`gB4fq! z7%!}z1Wxw84!U**ADe~evw^*r(u(C;trGp0$|%`mRlJVlL6!TUWP30LRk=G*Xq3<| z%h3}BEEyCRf-dH-@|}+o=$+9|P~PmkU5VoU#J))G4eI~Z&MWAsy78+#JQ|{pvxn`x zyN3Y5YOp=R{okwAr_YC>P(r(aPmej>7*=T{_~{$H3^iDJ6d65~WJqN0eL}_z<+~@d z*S#ochk`!lQ<;DjSuJK8BG7zel3TY^-s-$)E(MwBB10ZtwpYbew|lB z63%6M%8bsra-(Ff>;ceUC4!lj`3Hra&-)_szLC5!xy<;;1CWF48cnp629;`m9Q#<7 z)-4njjI#2S{0o8UgXpEQ4KXv!eqJAZF6fFp?E_N1aG%1xhP897%n_Pi_;8cVdMJ=f zy&9&l@DfHMlY0+8tT-9|?IgtfqODp{Up=v-uijnJX0y@O9%AIGl5$~W%7=E&f%OcK zk3d#8C==0}1xw?@C!ojmqKEq|K?M$0EJgGZeEzvF-m@7kw%5B$(?K)eUgNEuw^w46 zI(}fqYnr;R^v8EYFpu#q>%Nz960!v7hON3psAqJn>q2|v6;-e3&a-a&3EU+;zk4GK zJQ^g7ehsDSJhL91N7g=?FC`)B4gA`8T$DYS+?&$+FafD;;~GT&Q4PMjXAS&YX7&u$ z;u;iu4bbHt@|HiDXgI^+e%1aNN)FaeHFXzQMdgfM#*cp@YoxOAnKX!1{T0kwRDC?J zN5~?or3;Uza-Z=x%p-O%ZBJ#5`3IkD_*=tyF=Bz<8RVq}J#$s#Z4&n>;IsW>uU}Pp zl!=4tPb(-^iF+HbU6uW7R~qu8OUF{ku`ENyqg*y&*2Jo~fg=)DL_J5%!dn#vC!b>NKNgL!Yz_ z4v$~`NQa01Yrcx*Nf~{Z?HyOds%@4gh@;gRe=jdE+4RluNN5jp4V6|OQY}r+E-S5` z9c}JkLhZg#YK+cJ*13?b5&pXC;audg&x5EJBf#en0bIbWhp-QOEI1@3um;fi2~vK3 z=G>5LLp+s3LiZg~UB>ce39E)nLT;r+>@rt*ZPGj3w}~eT+DYzN%J==Eq2u_e$u?2+ zCB<*$jcPJHRRGfrN`DaP-(q8$%8%N%ylMv_CrS3eofRM24DQ}cq%WtK>yq!Sd&?JI zj##q<9zMPtacQOMUM_5p@E#P-RNIM)JzmHpr`jT7zli45PGF^9P>0opq-IMWngyG| z^lDjAaArfu#TKI#WbhtQ2+!8W0~U+bK3;Snezx;n0PJ9)qRG&=3-ub%E$LjO`I4mq zjPqks(_pM1)L^Uyn0EBb3Fw49SJy+-S0l1=;5>f9{aN@itt&_Leny|5D@f7Bz>Jo_ zA9ouWDDuQ?@=zfhYO6rmx({+32H3yQt05z6ce>#lSU-R%F`W-N;&0~V-_vRqv z59VkG(I3rmK;y8*4ZUZGjRm)p9vNnLQ4U`N1n=ey{Lb5Le^D&7&8PQF!pXT3+nIV* z+&2bVew`dm5k10W57DR92&YjyFKq(VZz@z?G^q0@qUo&d9<3p)_V*eS*Po0Q14x;G`6-o z85G`W_Cb54eI#(z@3w}6Wty$-{_ruk*K{6 zjX6*PV_ZBogks6~__LsMnTlix8#v&ni{qb$xIlfFJoz3&r-s1^=R|YHL50WTpz=qT z11Z{cPm!DNDe_1~!YnF>exUhm19ZO^^B=E3Zy*+;&`&vbiB{lq2lC_JZPg@Y^OL5? zS;5ipcBry2I2_E^4-SDJ9Hx>=XneC&5eAGkzRfFXe|(z>(xm$blU6vq>*a=bi67j4 zWC)|Dz%DYvgsh?f+Z=Tx{g&~h(j95k2h{i zJ&hT1ON;-k1j|5g@X}Jjb8E_yS6ibK-|Q_yJUF#wf`_aW~-{bQX7ko9~!((G0Jpb zTYsU)6dHCmiY!m0oD79*Q@0phie&HJ1U$#GZyo6I$=e}8YdG&l)5s)7+bHXN z5gNzSA`-g}-Q3ojeg9%WHj-Td0_)HZtNEsc$Cl(SgktZZ4d}~8N@g%^TP8D@W-+Na z>95J~)1o3(h9ftFBZ%7OJ)m*K;zrst#Clzm^fqJ3k(seBU3f321;NfAv(FOk3o#aM z!tb@EB*XZ7h2X$Cy5H{%;c#|U=++xHVg&=?hBDMrpJ{Q`*{89tGn_`FPm;HHYqE0_ z7R6%A#%Twz$tg28nQdd?b(N6fUly;>9hTxVrD;ltO>3I!V^~a4@S&4)_YJy2wY^^^ znRgoMuF}t83F~urm$I6sjHkfEDSsw#N9e;uXB3R5z*0YLHijv%+>b%N*Ob6u$f&Hr zknvyh9%H@@xC+(SrC@z6+ysKvDpGvLsyFvujTuG*=DUQ;G~em37XLMo_m1}XdLBDQ zp2qwh9JWWu?S6DehtEBn74Af*3%_H^Y`r>{jV8%z>=Ee#n9bMY1s|lDp!{rMj%12Z z8{Zey^e^Z<35Y#rDQ1UL$Ob`}-9!*3EfIv-M7pbtO~?ZZYpo8tN)o+F8g#zQ zVy?%0k=Hz8(O#Yw zuh6{G?H70jusE~Ynh6V|t_tes`S7AV|K;;+$mB@?)E&c9)8#eeBrvyAvB}+mmX3aY zL&++K0%?p#CJUEIM1YlZ+!#S6A#e}G7fbH6ln5(%Ueu05&y8_V8B?>mK;AX_Y9f3b znKcnUimxAY3PS7HU>|O8bS@{ zBavC?#3Hi=HYyUFEz|_(Gh-Zgke$xq3#A&?2o@;o#(iIsq{{Uh+O2ADFuxyqO-^vU zC$z6&ibR_|Ww6-!-|$-Od?C*5%yj;6{xVhQO-wjD6lCGcmms@6f>dj@D9lg7@D~ zBNe6%TKko?AgYeAl(i*m)MoFl*jm9mmeGfp4tPnkg^@0FQ>FD)ac7c`j^rYJwJeb% zGsxRoG+E~bYrEo^234uLrsB z!DAn=apwfEVRow$kj!q$`b@@GHuI+qX>Hu-;)nj4mjuzdWUDqiL3Exu2sz&z7X%?RCR+ZFF_mo~3f%(mefj&$ zA{nTB*qIrukNS-%>N8&p(JS<=WYfwT_pvlG6V9aa@iZK(9m%AE0H!e%`ABy-okkrl z&pwfl#%0Cot7v_ZV*EI54gwhFeSkT%Tr0S(KC?9unW7!BUu`7+Q}lh$e?(#ATRN=g zr!aRgg699gPr5ljVXw;@No0`CSWDB|7=K#!Yd=c!-t+l;8Go!cqe%r(6AXBzt{Jr{TDfFpe$KE-1C!5vzr;wv!ckZ8^ zTL8U}jDg%$AWZZ(`!y6A=M5HU8n{qxgi8!CZU(y47 zhG6j$C?`IrU3I)<-{=K^!yK}OeJ$uJU-VG6^w}M=1aZ*G1V#U?v=+MXar6ewKf|)A zpJ`bf{rNN+TKjh{sN)!x65V5g)UJ8qDH_%q<*8}c^|^gPOj+(qFxH@?Z}dV+hj?nc zW1*4We+s&)pnE!_Ijm`(%b(8Zhn-;aRC(>xCwU4Q-jduZ;C)E& z+Dt2=Qec*PIX2PF($298Qabg$4=bHNx0N(tN1PpL-x_Kccjg?&U;; zUgu_{qWg-K=qt>BRVKq4=Hr@U`LV*)aFD6q_#1HtCpY4T1HI`BfU!dTEDZ)@c`iwQ zF>|aAqvU6<2KDXmFtaZ=SV0 z?_P>?sA$R9M}HZ<+{n}l}F3<0- zZOACP2#c1gHi%f0s#%n(HW*cm_pW}NyXfR48U}L7I^jOZVLbbU*#CKcqgSdKrSEzJ zX+B09qT}*<&S8hkVNc0Wbx}GSKX_d;ZvDaLEgQg;VXOhl9=tXvxG(HE$s@bXSHmaZ zI*{lV17@T%Q0`i=@`^Fn=uG&PBw;?O(&k9lMNzZ!D#9GsbDA?AC+*#8&iZ)DhX7@q z&Ci61!&jm{ivof8i~|h!8lW&Big(~TBj$4djb2Ms(fEuL>$ST}AEPRr*QwND@!kkO zLrA_tHF`b4Bh3|+=o%dMVEd~Gc5JUShvGXHKhEBY_7h7?G?lbCiD_UPiuE9Gbon=SUH)vFma0c@v-L&HN<#^xq%U zrw7<^kh%R9f?)}~c9v>mo7Zwa&^=VIq#jb+=Hk}yEuM*k%vvh%v_Nkpfw|Q2>h=IDq8`L%4 zLe1QAHHO(p401=(2R=c$?snQW`W-*mV4{pU43M#$&o_3n*sJyA47i$6>%7hI3%Xw; zr1w>RY;ANMq0}R=eYX)?Pb&+;h1Mkc(^{mtHCW+6VHHXFzs^sS;k_$I?@Ro!8LW() z&88_8=iUzDmfWXpf4(MJLOGJR8cevbfGbit#L(_nt*4sx@7<~1jonF&da6-8M+Lb< zLHCoQ%j+Q{D+T5(c2$>_?W%-SzHFN^-X{I!z&2^zPe*bqo$sf!edRHukl#hwFf2P{Z#%Q z&fnYl`v!mi;O|}}eguCn;BTJWr8$UhrDDg4+{S0U@8hC{6yUC6Vcxq%0bLc1xdCh{ z;pp**j+#!Ht?6PYO6ub#_lUC+mZ`gG+%kJ$rf1l@Rj{zR#K+&Qm-eBDGPMU3OKdp! z%!bJH-6Rt_nPe;XNS5Mc_PR1S?eaM3vlypUdqAR3!%TeOCN<^CEt{jac#H5BbJpfSmB-c&+o1 zm>+*cNKZfT<4@%NvE1Uv_lqAj=j;OZr-AJuu}`7JhWJqe#B2DQ*J2R9Gw59bvw79T zEVw`r-D~NC(OWeF{2VWQro?PwV1Wup^ftx(R5AVh*v}%snlX6N&y>mpE>>pp_z8W; z@yuj$%Q|krOgYf#TZUoD;x>{`J(v*^- z42u^}AK+!H^jt>K5b6@3F@cZ>{Pw!54(pCL_{zuKgErUXem(jC)iXd<-r0&h8z zjnAQcc;zGOXYWR*q`iNM{gC_h30rj6k%`4En_`ic5>3`hg6B16*Rj7P@v7vddC#|D z?r3oMU*j7|S#1nyqMA_cyhBZ`5HEGf_Pq&&6MlUV3uTy4eJ2TJ7syJAZ?b$S7E5J= zBo;|!e*}AH z9Xu2upb_(4kJ3mV)Y}Mtbmx5*zPcYQ1+F->G3o(*kswx!mtCW%_bUUE&Xy;sF8~c4isjhU-X?p)iC&$=htKzEb|VEMY)3co#aQ-oGa#>=Y2PnJ zpCHc4Y*b~2)(2b;AdM9DQuImUeLijQwVuTya6OFqe?l%&{sP>y3kKbH8N zt@orY?Dwq}!1>Fk5=8UxD!ra6737{ zuzF#oeChMhGfP z168vt6YXYSvdsHEzA{6x4YDN$<7=vqA<$}OXwZUCDM6yIgBjDG1$+ayP8cz(W4GoE zpF(a8_|#+hm@L+6?n3TX1YyyA6=Jc{a~I(+NrXED+{EjiHs3HDeu<0_bbn>P zzu?z$QL4gyR!^IP^m}sORNX&@KqDP~WkPvhDbb^{n@xfM5?y`4KFw&wecLmFWH5%l+_zMh z(BC+l7%H|Nl3Y039A7w-QOcviAY(IpJdDHKPgA}ono>$jn?&K777n`@be?W~BX+z$TkN9?QGz|dKUF-MO`f7tuP2)wf1Kz5}1l4MHY@K(Yu|%nS6#U*%U@)D=F`8OCcHL z7{Pg;Jd??n(-qt}^tU)CChGNC-hEC*3e%aq$8T2(HSd0zx_ui~bG%cL`;Pj{jj+Eq z;lrMQjnQR93BKG?SBU$X0Q)#2iWS0mt#&`uzg7_^_3s4K{i6sI?o#N;J^JsHaI83C z+2+4PGjwjE$dSr~5h$Q2E2r`#)ysWXVAoQ7#p)SH=BZCN6lT%cYKK##Xxq~X3sZ9HGg>Z@M+$c#{; z<$3g{?`sUQ6Kst_M-p-@UyXtqh1T+S2#$eKXvqB}<)6W!;tutO>?rZ0G@&t?EO(7F zwNDJyIQ9Dzsap+(1v%`NQ_wXCLY#Tyanxm~+&Ur-H9i!1>$8~MNsF=zy;E~c{%MfE zmmCM^sh)PN#H%_!!8h@j+{Ng@b47_&wsHmCKl7V+U!ZYHT)8sAgL_946BQQjHAX6H z^L(W~ryHDYpS~Eqjr-W#B(lze1zBM5kQ98w2$~(ebl>@_Q1TXN%>eKz8vw$ds$Irz zwaVt+vms)vY_BX-xqz$`V&Wn1^qhP<%-!c?AJgIzsHN__HR0*9H)GGg3s#o8>17L3FgcVlp-sb2kcK=5! zyb5BSr?Ws0(ndj~mnUXw6Fd=V@B3ss1_Zf91d(3U^5XJ>X+w>(#UunhoUzhqVYKXC z16^DDjk1O@yBiC)Nh$poDSJ(f2V?g7jxc4G!XGhtUXw7;Ut*sdd6GKXE%JCXytjSA-ZNAl`KZrv9C8yhQGRnLV zg7Bal7pyO0p3qW=IWEXOkMe(DysEj4OJ{ykI|??i_hqtmnKqV)+d#si8O&hhASG5o zj*4SUT8!Nqr-#dzU#nGVxon$G2x_NdnZ7$6fDkG9_grwy%8*Cl*N81y zSEKg`f9v@h6zDvw>>3uz%fAv0Qi5XQs$q zI4#O{NEF7DNZx%0EYQ{EI9aP^zhX$O;-r7hhSi`cBSaf9uQA_`h$O zcyg#&$4aTlvGacLawf_bS?~P?0%wXhI+n1&W;b*i_gg$_F*X%)pQAF|G8pT8npuy% z)t;KIRP(U<6S@;g&KJx+J0YcM8=MvoRw9C^)-XIL}oi;;UkIiM-4a(cz%1_ic zNd1R2b!;aIb*;`XC<{}vzvfdyQY}Qkk*jL}ptoRb<@;0h@$INRV0-(!$PgH^I#>p4 zEy(ns&Ke3D>q^mu%v;0d+QI1W*+YdRsDzZtrTC$TiXFDt*pW9$^=E=>rA1m(U>D*} zxCY|{(f25&%;AnODMf!LG-Ce)nkpbQ2o-H0EQa@C@cg;p#Q@h6g+A$TsgO4Os{W}k z4eRxx;_5k!A_&yv^DjdnM{8{LYby20*Hoe-$;Lg&ePH=%pQLU{)LU!C*C3H7MM>{H zDZk-uYoTzbAlWve`(sM$IMp0^kat!WThmCuwQSmdrD@X<4!W1@DEkTqub}%6I5M=y znX3zT=(bJw?}XH^PAofh|B2TVCYq-p&Zql9-ieNr&l7b2MdF~ln_sMaLLAG2fq9k5 zo@;!+AXDc5H87vSmpFN~`y+*zE=Do8fi3D^&_)yE#fkA!=d*Oh@$widRYGd4T<8g{ zF~n)rC~T~Yo=3yOZ0px>;PqvO$Alx?uY~!bYODBl%wShcGc3Tt=-IC7NN8lPlo zBkrn4M^nZ5e~~#wSGB2K?cR#Kqm`f5GfK)r_Hfe19*-$uU(}2%rl^g~bD#nkC012D zoJE!ROTrL7o$U(PRr+=~*<7-EqD?kE|`(okgQBKV0TeF(LV7RQ0}) zcb*k;&YCjl1|&*4&E}wc7jz7|>{sSPUY1tm_9cc#d(?9JYESOw77zIDk@QI&>f|yJ z6Y%y=VH6uQ8rPZL**LmGOkA4zm=zluleG5RqZEsEccz8>XX*dkPj9sF_nvJpov^gUe{48rx;Q#DksC3rQ#%YwdXX+}&dLmlV6vLeafO`=19bE;G+V z=Un^XNLV%|-Cxrz#&^ZsCE$R@A$Q(iLcE@w4H>Oew+UpE7zgBn<>iQHYpeCywcar` zy9c>KcSj$(e`=;ZTCUsXs(T^On@h^W<(YFArt-PRHjdi)E=k_(T~v2SY%>|jpV$2! ze1hmm*2Sm+e^_z($lH%~?C*F7k-#-|i>TXJnJ>z}C=yi|;^K#el849B}@EH!HH}V;2 z9>O#WMB(oCQHcnax59+3foG^-opiX+@9ra`+`@y4Rpnx-Tygu8jxEVEe3e?YQC0df zkMy@wq%D;F7fvNTo=@j{?-Wn=k3)MW5-hLwSn8F?;pPE_)_(sMy+M>}_lVMW_JWee zI;~_yclvj$651=7)#lQ?uDNTU-o1sND*N76Z%_KT#w!Z_3V$nwu0X5r(Fmw1w{TEs z^E4&Of-zt&83D7qI$AX-I}m1cO-8iiZ7XeLV0OSNw!CTN$uXT}?qqHpoA-*4IR zB;X|`>9bj6Hnj+N00%Y_?l3oIcE;W7D8=u{Bj@Y7iPu|tlj^1ldc4Bi+2D1D@Y1s# zfmxOv3QP77ELUTU9jeWZE6wOH%b`+qCXIScxo-NF*OVu{9fE7hQ*pqw&vQ-L?SiXp z8w)=5?+n`-pcRHHYWw|RsKAf+oQ>Ql2GTkVy?wB2*NgFJq%p~TGbOV(T!e9a-q5!G z*jQuZLudnpH=Y~YZYtysrfz?tZu#iHV6J@hM1JjMt9IFY;NvO}Nj`z_;zYstNT>P2 z_kHC3gZibAjUT_nYA`A;=oF++QjQfH2ghOYdz6LNx_+3+PyRWEeqg}|uz$%j3`uUA zwtNJQU^ATnt&4%%P?!KZDh@0q>6en;n=SVQU{KRwrnlf~c21rBogTHI_*2uq=1fhe z%s+N9ETWK;|IgV@ZHH2tc{Xr!WTrHzon*AmFAXz#Igi zdgQa1g8+1me1JI!_*4>L4*D*A_=&WU{`t)WG~ZDH$#X*u#ScBrhGI}Y*!Rv7mmf8S z^w7Z3#dy?c^!bYapt-|v?|7THxO+(tJs|nEc^^7I`JnRy__&8+5yO&xYn}T;rRay6 zxWP+h>8qlXKJ_mo+CQsL#i+P5$RW#Tr>RvunCLcjj~Y_Bq16>SFK)Ev8ucNREal@` zvf((GyBM7X5DffEO-fsWNAo9Pmk}U0-{Gg!8msMm4C8@25-HDpgz@AGlqSfOMM?_l!<&Zv7tU?3u-*Gim5F&&%QxryaoM#Dp}>L#f=<9tdQJ*IeFc_xJfc z!RtI{)Y$is34UhBf<}es{jga3V!Gwq|n!dmlf)f}Kf z*)uK1b?QaG)xfxh*wDlYP2zJAe`P}}+)sDMG+-h?_Ca868 z+5MC`rQZ1oKCj})g$Zp?jHHInlPr0krCEtV6x>e*VkH~Cf`NI%TIXkkbbc;aOcXM) zM;$faPQqY+Rb8zU8TYR>W<$~Vf#Q>FKd5pN(s=M86P3pPvlmnv2hN^@cXrGC8vs^m zTzbgzO5@_qno;r0K7L-C!6 zms*bwy6X9@hxy)ZDnssg;+cZC1!YUsJc;geN|L9!5#QF-*DSh2Az-^&Y_w+!Mc&XG zCH~Yje#mX!s;T7c@3=;hlspL-B{80>bAg|#yW;8zD5K&S2V71CxC zmCt%HZGFy`55phjHoK8wSUQ8sj$UN7;&Ob~esA-dsY8>-- zdEddCU*H|*Y<{MKf8l)>A2LSLht3|t@5Qr6%zxDfUpl*qfCaDAszaQ2^QU82UHP3y zDK=Ny$Is^Tzn7;m9Q%G`zH03IhWSQf->1!2iG4T7mw4WaCzwtsaPT4uOdF*nChi;3 z3=TEhDre2=#O?aRQKY6P>jF=PY^ard)tA&f!$?}`ug5aUD#f|kxFxvEI>0>)pC!&_ zj|DE<>ihE1=rmKVpGA9WhAW@N^)(%CAS>7$4^ z9ZE?ZZiwsfuApRf;2B3hvi}+^>j)Z0r|1Q%ZO*O92#+MFFe5=>TR=h4Z^*Td2Y!U( zQ#0eANjp=rY|~FR^LH6N$c$s|II`&#lR?Jw7<=B@@TC~vU)5%=XmWfnF4J+gPZY-0 zI^<_su!){)65h!a6n1_Kn#rgZ`jI2vAJH9!e;EBGQQFhF#?&6sD<8Q z9Ei&nadjYr)W^^gY`Cyo)P@Ut5fb6qgxBX5<@*@-7WuaJ<(ihhFoVLQOT{ccE_OSq zW!-K1D3jj1-4+Fb4$_gw&m63u9;OJ*$;Zy<5m**zkx3rg|Vpwim0=lhg zxUC$OD66@pHnTi8-A@s2bB`cJ+bO)UZ$Dx=wqhTt7~q84D$$5?_fgN(XyxW(c_KQl zlFWniUo;WVv%!{I0u7Ru+dCZ~z*9skADi-k5ukMeHM}sb;WB)050cuiX&$#cw@(J? zxW1LJ91RKKbylrqnG~U?NF}U96{TPxP1|FjQkPPxcpov$oxnU3P>-ebM2(fEezdnr z6>Lu@ZC?j7s(t@*H`Oa{WX*@#V5UV6#<#JU)bMzGk4bBPHom8&zJ+-$U1+v!{jx3I zr1a(!j09WuBmqoOiP}nXKPB0B2f#9^@}5vb;Wl>i4py@E9z0UW8;_vFw~eFX^-5G0 zH6I1z>`9%KoBy^urm1Wz-iz||FCkW@`7gf)w#oLIRdbV>Xts{G#n+qs)Aq(|Cjtur zdyI=4eKx~r&)KPgWpzy?aOEol6b2TK7m`B%;-RfS zCeM}Q=`xuLHNs|6WyaH}pQ}F(#}k#s*;JOX$;=Lc&O+E4;F7=7sLe;?v!*gd>Z@3N z5ncTpY7PR}3h)8uxKF?v*Qk8>y*78Ypim#l*Sdp}hhClEn|RfynKUXg8fcQ|e;NOE z`Og1@pU!^)i3?jk*A;lmGWqZaNkvYBCi**19zi>iCUJqZ$p zI*rU%!#0PjDkneDIe;>w{rPDg5_DCTzg6DeUpoqMfEfkxIXDeWb8riv^m=dY&*X0% zUb>u3Rn)3ltEW4EA%rV4(O>z->B34?1f*fiPZbc43C+<3t8f=5q8m@{Uxjd~sT9xvXAZNgkMOryw*>u3UB! z#kwcs6PHDQCks!LO!1z`KjdVk9cL-}EXhM7yReDFi4tBU-0Ce9eH`CSPlUILL4F~` zVnBY$Dveeb3(+pXk{Tt2bf^^o#u4)z|GHT*`0)hbnvLU&?5(Ehx^dwr|Ro zieU8${2YF5 z_kgVgz}Cm7_BkU=T2wdOU`9xkGqGl2W3>hJ%~2TL`mNPdW6{oP%Q48Sw#4Q{+)6#Q zlFTz?9uu88+8(D0OemI=b+o-$nDviIy)P60td)cQ3(zso#&-t%hKu-${lWph8Uq>e z)iS;@U&-lho!lDp)pA05`Z2!xmiS8juL~blf#-9NR8G*eE52G!#FelVMm2LNm#a`y z@WWuS#l0*3)<`$s;)j;DQYU)jDtw|h;Xf<^Ag3-DE0Ra9UAy=YM7E3I5huYs&&*4Q^`4{#vVMzfN83OvjLxny|Fzm8NT_p~HT z_{{ILu%{}lLOLPW?3UcqlK|DEc}dAVBMDHQnrD~XGm`+-u6c6F`inGhR5A6Jr5ebs zmKIbpT^!4Fe z-{A)VYlyDuW(no+38#{T&&VcJg)N~RKH+qd@SJQy5yBG6;S;V*63%54ia?f74xeyU zk`Pl6DYJA%I7=vpPq;csc$*qD<|-p!>wIc0YDRg;(_4)z*vC?1`aXD){H~ywm5K?v z`goX)N&-}E9cPMj6v@%Pk?Vi-3EwcS^T@2`@a60yXpO2bXgvifz!$ViQ9)OqxS*l9 zpk3>dEOB}(<`aSY0mamYWh>|VxNa%WE8l9On;o* z+CRhqwR|$7*<5-8F+*uz9xm_W?ehq<{+bmPs#@NX^!7$|FD871;4PY;{Tw%y3s(AK z19p#tqr5vQzdwK)&t(QsjY?RxkK4~0XLpS=RsWu8CPviE#-wAe#yQ5^cmzuauPz&- zUj8u$n6L%u1I$4H`+q*b92&zfpgx#OWv%;M`mBli2pf_ZOv;ydEFm5{q!Q^vAIPmV zOKsaP<_!Jzi)D;+w1%Oo0a8w+et(bU13_4*)ln>PmvC~kwnVxo{cIVE2!PYS3;o9EdX#Qp^8Jms}yjn z0!|}9JU2vJUC3Ae*u#5~XlGEk8@{*{O#-TYv_NUGQ&sXAtaiIrGZ6_1K1Qwy-wqQ- zcDOv*8#?*~GfxZe73}Ws2)vSyWTxHiODly~aFSx-D7u2+EVUf8q}cDZ1wno85VYse z7JMynLk|6#YE)uW87{aNvD?$Ca&5KFUFK@DjEiGm*0tQ(_)V(9Q{=5?gS2X{6-3&B zZ66RgZ^FQyC_q@3`Sn6*D6vC)DJvW;ueI)ZA+#C=-=(N!4jO5$Fb-?EwCeHglC#bNlinBI$;8slDJ{2WrF3(V&J~l^t$MK?x;*r&;Z0|>>NdA|D7MC8ykiH&+b>$fx5T|B zwl0K^-Ro{*Dz}FHD`DaTmZPr7ed^RNT>-1!^xXA{oFd)2WDA8w-ttN`0l@b1&I-Zh((hQAJ0&$dV|Wa9RLAG{ zI5z!;puR}8~x8Uvb^g0BGT zF<18jhGmC7F*dMzEUR^=%&%L==mY(UJm~Jn1g-VOzI@~Lg`9qU@pGgFty}jeq^BR7 z0)I%T*-!j2H2Soit0+sxe&R=oxR$?p9o8cy7(|286*3!NuV4?>tpdpwI@1Dg9=k$p zH&@II1UieoHN?f~4M21h!*)a`toGI_s%|B4P!e?Iw^vGg2l!0(=?a4T0Q}NxD0tE` z#6}c7c9!utK(;>^xL;63Z$$B@5||k65*v!&`(7#|3DSU!wm;SK>v)0OyA4G_mH_7G zrU4s@2Cpx38Cw0O>Zzr8J|U*2uj%FR>5|?$RjI3A8CBHRwlb{EwZ2uGBWuO288;*^ zoX7-|cw}a@foKG4t7)!S(qzByXU-|ywVvyGK>{%&u6Z|_ErN0ZnC!PJ~%X+ zTbsv{PU-BU!u>k@WbhoPEbM>D0*T==v)zyh?2R%m z6L7|K19>rACVgPkhfAf-J1u}mQNrX}zk3hrp)=na>;%zfite#R1Rr^p;}lS==WYZM z@fh1C`8{&!<==mwE9qMki~80+6*p-Q7GD$`Fyb+a|vM_1j#(AEy0*LPOGPY_7wRUg!Sdk^gD>`{9f|!*BPwcG-J8+uQ}I4s^X$$LTDSW zKLgLgnPz&7eK^f2eyNdsw>Gx*buPW4JAHI0$L2w<1}>qtKJC245yIV=+=2XQvqv@6 zvV0yXky?B=?V>?<19*22R^7~4#2&T@GA5>4$?;#`R8*Y*5b}EyF4f}3r&CzbuFNn- zprmw2da-Bwp`>e%Ve|g4B8)75>`;(}WACWOZnojGo1T z2N)-L0@7n|4gfxV=WzVmC!UDraE%puv&0QpiD{g^n5^QDLhgrDq^>sp6WHnn0acT0 zuELI6t|A)OGP?4fQJyfkr~{O(#A?x(SG3^fqdR{#J}LK9r;^X)u`G85cECK$?&4oW zpK}FWCxM(&_=mEgb6?+D* zsA*z?yBy*^Z*NIf!t6qWY+jrOJ&=P_yJ;=_5|WZXZ9>T1OYB?D5Arl^$+9V+lUDp-$v z$&q>Fi>U7=QF07MeJ_cUBNOH8{b2B9ZKS*Rs%#{yE66|8*KLP*?w7cH6dNWYgO9|v z@#g@Cfx;3>ef>m{kzK~Xf_llGujV9QvIHY<&Unlhld|&k+|q!nEk9I&f90pSuP@CP z6S!Xy7JZ(gWD+t4D0rvdExZ~kv3Cm5{~W9euFrfanDQA7MPJ+K3lyDTr0PeqK^d%^ zFl1}YGokya3d{G{&V#d}pTRjjHo4&}t=~0QaJ~ayDZa%kp7xaeOO&UpWMOnD)XGE9 zF^V#B-k?ZJ=PuxJo;b_P2<5#zpZ_Y$Zy@P32J)qfPuLQR!t74{5{NTAxVt}G)MHzf zBgmhrK4Fi2cb#;zp(-UbHl$%iC8$kwmQ#UfjU=-ZeOPn=o@kulnO|{4MXGiab`gl^ zQLM6~GbD{4$!16#_!t5^Z^dj>Pl2|@HX5ZpCn z4}y;nz!sLt%Gw<*FU<`xhb>7X?fF2T?eD7B?&4Cibk?fVoS{vpV*?%`#qKIqc1!rA z^w}D8kFfqXuWoBm>JOpKoU7Dt|8D&@>?r}=*HYJtT}v;B+$#QudgzBW!|Qo4tlrdJ z;L8dZm9^2z+N829N@e-CpH{1^f5v4g0cBb0n!%!!e+`!M8cNBl6j#u%wOYT0rsg2w zPt@#B-7~5bL_bxOyO+>?3-(Y9(C(rj^(z7ymnmRi?@qdb_w`MMsf;^CZTBmFr{>mq z$IfSRY#i;2tTEkpy6Y(^F_c#pzF6iEpLvWY2ysLF%+!MEzV4E&;DyXb`Gs4x*8Ksq zNK*o!89aQxJ_*$=Cuc`ws#Ymdq}bn&n{;nTiT{?E z4)wm2k!ccM0To2n8xkG0U8sq@8oT9h@~Gl&&}?oF+_1>ueQlpH)AWB$+ow@qJoEdk z?AF0+V*v5Yw>M1vGlw?TTuRfm*SI@VxbbkKaBdL)Ee-c`dWgb*F1O!a>(?F+0^ULT z2ldDlt?}p(^5|a}eTa^|>%f@1-Cs${Vt4QCo9?r7##7E6s4?n2SZsjHT5CefDkWa| zoc`knp2C1rZB^we@gi!oZS2opXdGmCeNSyd8RgNAM>6H_)D7jo>KKk$Z&dg{+?34 zDTUXlE$&b=5Af?nrgpZMHMO(7Y?H0LntaXwTJ_=qBje0nCumCPOlP*81F`sQz4%sK6c8a zcjW6 zM}8oAI{CPND--=&5J1^B1q1;ky88C*kr&kSoy470S|dQO1b3IgeJYFl+Iz;`+jBob zrFBoV-{bjp$_4HU-xK$PgnKc@U75gLDHGfUA>g$@efzkVg!@6leRYbvzk4(zct4|k z*`7ZiaXWeur89z>Dag?Ew7MuVlddB;Ug(+m;TeD-4Oz*gc`N(IiQG%Raov2ou$Mkmjg&!Rd_wQZTE*Pe=yXER0BX`bGx z5IR&U_k_`QPKx|)(F`bin|cbe@G7tPgjWI!P0-S7pW^{HBhux}JEW3@yo;f!RjHvDrgmzwq92EUP;Yq`82;7Dg9B|b4 z{>8UN9Ye0Hv);|!!k=VHoeijMwHr6f-~7$|wzEzxb?*O!WM71gwc;kfHw4zmFUxeL2Y>@ z=f|Is6BT9mMiFKV73`WdGEsIia?7Ajaa<8?+F*V%#;m-&?6F;u;96N;>El{#PY<9w zyeG1eZTTc;iLc1Ho4k(lmA*V1(FUmBCp?>?MqC@;GHJr-bs*V4k_bCb#oyx;ogEw9 z%Xl(B9P0kaH>c7=o_S(KJfv9~Oz)Bu~4X`h%=6u7@{6md6^~ zU&^0sL2Drb+uGmL_##?9fc{1Qd?26bMnGZ_%iN#B?T&=q5T=yI2Q$1LrH<=;_2?!c zF_6G*A-;Eia@muY=_+l1zgzJ@N zalGQ*NdC0dk^xh7&*zrYNLjh-570vQ6hFhC=4SnIR+pRq9zQ|%T5dV>GwD44+WA^WwrbxyP9nH^Zy|;2>3E*lzyj;Nv-%~d z;0!>-vGWK?o^mOtjGcF-jJy9ZLgTc(OxPNGZ=>3W(ng)}m@`zZQog4ul?pwPqJ*tQ zVGF+q4FoYE)_i1Vf-ExJtSVr*Ss0Z(@fxMB)vsRSwU<A!S_iZKu8h<<+ z{y2>K2Lo>v=`QHS#Oxm5zJPhn_7#mv=kv&dYZq=q;I26|xNyG{cRhAXVxNrNH>2i1 z6}x|ndpdR>N1Bzfdj;-QvHKOcSI6!bbERM(bMGGCp|WEXIP5IAFH-ErFHw`RLi&zw z!oprWJ1pUTfQG1pwNQH+GZs^O(Ve1<J=-PuSQ^a2_yX;9tONE-AxnFhT+)1YeTq(RltNrS3!lLl3z`vzURFh=7xDsf96 zB~LYJY9SWm$Gt4y(k}wf(g{QSYD2cppH>kkEc!bQzy9tY|25Ao$PSmDn3{1s*BbA| zV^bh>Vd_md;ckK#GmJYh%^AAKLhN7^gP%uxVvE+it(Kb?t>dxY#_*y1+To45bVAK8 z`~NHDg;-_7ygy!uB2}DQ z%|~|<%Ahew0ULKd2X33FD|&EVX33Y_W06IN%NwsJs%(aGStFe1Wf?AI=PT}5L2YiV zL^o0kZ%McsR%#AT;;yz_Cn`lT`Zy$Svyiu;u+i^Ykz~bU^kJf-x3gi{Jh^PJY~67a zKwHz=%{?6`;{~qWpFt2W$ebkjtF<;UyPnv=NDkma_O|Y0WzvX}XV-x|BLz1tD}r<~ zaq+fE@*o<+XrWeg8x`a4bpDb&o1ulh8_C1Tk)Dj?#=&yr+@zxRYGkv@-6m%79OlyO z1<49(fWAt1L22Wfq0&al(52`B$dcoQ<^uED192vA9IhQNwoc^cy(U`U=F9MDs`b8F z)9ERh!^q$y?9b|2@Pe2>i1LFD(usP$jX{I_+^Q|J7mIv1#OVW7^1|1au1-mi1M zUuSOTWa=Ecn+EEk&LmqB*Q zmE#tlXMo7XjXuJFtHx2IKYpOmd1Wg@fDQPpciV_CkFP%@9Nj#!2$)3-v1KsK7^0=O ztorFRNTf{S@o*D;f_Wy{bf#BoALJ7T#!q;nc|O^id;eVt&GIl0CM#2#p^BEJ8TJF; zr~4#&V0Empm;Ny^T-qod>bQp#=U*Ut6^&u~^eVN^9V_|qLo{h^i>r3|7PwjM#K>&y z@6)VG>$NCi-!vkjjW*ndo2%o_(%knqTy3 za~qX8=5A?|<)^!&%_}mrX+C~0ggIe=Fh?YWQN8vg%<6ufV%`t||HJyXpTY>TXXQUN z(4S7sJ?*o;{*sgK1@>E1|0#wj_QUOsK1}tlz*|naL66-9CP@upA$f+lg@3T;Ydaau zsEJ==l=c>X#8)<_tyjhCYF5VXdwrG9jQCz!JKVacoasud%9&~R)be1r3Zp;4r193- zO3Rh^bCbqZw<0ASd**|4Z?n#`U^a_c%37K-vpiVI)hI*FY1d{sD|Po!W@`90n^k8Z z8xMfZY%a>@9zlKY1^qBxnUCHHp`#6qAIu|1bAM(Ir*0N&NYTw=_4Q#oJ;SYmMmp7O zR2jqYz`HfQG6$B*whu#Y#2YRGu#3lwe|V3_drQp2%W|haII#r~+HI<1!6BA)1NRW{ z4x_dF4zZmQEv0>^#2Ph|=3MPH97p=S$P#ZLDwQQ3o)H|-jvdR}Na60!OiX=O#jT4( zQ8ziFSqdxecunrSedBjjEY742#T}5B@X>w?g)pV4q zy#azTxsWaGM39jF=qVt6Javi-W*bQI9?#$+@Y$nn1uq;-Oqh|PTHa(8d!coR`&ZbQ z8bOTI1X?oj#q)E;>=~W_+(H|yhElAuC~-NG*CNxWwII2>ic&+q5`-jM=5seP2A^p7 zNp(270~TvfdQmQV5D9J zTxV9)#+JRW>Q<*+Px^S039(EsikAC=U7>YM4B$_~?Ct;reR;~*Anq{QR4QZFQR~kH z#ddK)OVGr-PjNx3(8Rm6xS)k->}{R+pI~2D%otwqq}?h;Xwglz-jklzc>AS|_n*`> z+raBGO{05!P1@t6KCcbA;S6Ydns%D;s53@?i`m^TP!Kh5rKRGDG(Z17JbOxB8=p%s z!k38YMa&jH(bD@i;1lhwQNzw+#xOwmv(3FwB-`o6|6@k0M)$9XJ?fE4Fcz z+P%Cwl2#I&C9iJU;%D0d@hv;}j3AWz!6&)bc1-Rw#U&=cs!zyr_Q}wZTbpV&?f%qf zS0SCGUav5IR9do+a`x7xy33g`bG5kX*HEm<>juhaw@%qaH@6rw18(K)_u~jt%Fbl) z=GI;=%I6nWOeXY{!LiRzB)*MJjCxS#KN|G5PWiJ$6o*)psDY4fYZ9alVNWfpFfn*scV_Xbgy9hnIGRtYT zJ0l*G!rZ=8_Y~vf{)ADL#)LiTe6Y&?FUsaFP(Jr5(r&f1X=K6mY?sS#sJ;ZSMfWz+ z+nX4r2u%W+#hJz2&Fkc332r;DN(foU4xsxN+)hTyR=z&cESB5hSRMm8e%|}+psk#8 zd#u8{&2Im+R$RR8<5?&pckKWhu5T7wOT)3!Wf)rwq8Cwz=7_x59t@%v;~h)hn?EGC z`BBLnTF5<$`kiX^yC3*vK;n zP0#(b)QU6OMPUxO{3JQ#)}^&#ehzX^0hfClF6jw1?_$oOwu?;Cr02COIJQDmX13PZ zMc+%7r9gN;lbdChcMCOcVcv|)TF@$UtAZoRyeiH-mS%R#Q)fn@i(9Kw=;FGnJ1!ms0=JRR8Yz z?5k%FV9ozta+`{~6ay|G1qZ*Qsweu5N>H@(Snu`;n4Du+cQN@+xC_+88Q}35rsP-c ztMSP8Sf^%(31LqKa7rz}Qnan>OrU=nZgv% zT8}I)Sh?}(><@RbvxQNJ<7vfPW|H;&Q0{<(P17~^#vrOQf3%kRZ}b+(JB503h@9dl zxI!K)c-+vJ++CEOZf+Ym@Z`CTdAjUa)niWYQwPK7vU?@rqYSS0aCP3j3NP0e`ww0t z6zG{0j9)!~zB0}eH084U1a)YyEVox6@QtyFqE}5Wr>`vGrFyIRj^ij6sxSfX^!Q)P6*z4(wj0PiRw);F_|J)lOp}iigiN`@o5)w<7_V0B zR_OT9*br9hoiXZ9C}?b`JXU37JBdadALflxzLs3a~)=A|_ro6t)h4^3}uM^n7Ik-{h5k;v*<%!HhNvWnNP{4{T{ z_gh}4C7G7b`!q3xygQ#t%)E$!=Nu#UUEtg~lQFQzmE-iH%(Mm~R73TRDhwoaDf)Go zy9xQ^O!cW~U$(rtH7SiQYXsdcLH+-ClL=$9Jxb3&y~iE|!1P8MgFzwSmX-(6{WbU= zRW3SC^01y>a)0P2@`?~Tg2~i|&SIrKn$q02RTW<`JGaTCi%dJkgSaZZXAnhOq;C8w zRrF53UMUi;X zhlYvEC2DG5Xs=;S+emVMEZEFA&~FJ09E5`lyOMg-L00?3lMpdx~x z@}MdKrKkYz3!oslu!%ty0TFja#C_jzUx^EDqvN>DjN`b3|Mz$9eXm}12c7>+KIwYz z-Fxmi=bn4+x%;^vyl&1gpEf3AH(l<@R=$5GbJa|RWmB+fwlh<48J)0;jEeEm8dH}v z_SJbOTWZJ@M9I{z7%y=OpFllp&^$SPFUAv2-xDY;@MUm$byu78TJ-RQKA**S87b2` zcmRGDVSk#I#<4=D*@%!jLt;@?DxV( zm=3XK1+w^;)YzfsRLKU|KCD0leo-|Gg?C--Q5Lo|{f%P03JB~Z>r>HQ7@S7*JcEh| z#xBkcDi&O~VCl4U;{`lVGWv4>W4NgauAvzwz2s){`?fS|(!)43y1w*QRU_)Gv&W5FQYYVis4{8%n{o~~Bv*{*9H)-}G=$@+g)Lce4s4I+NMt6FLC;X7H*2CT_VJl6HGB)@U!+1^_-|7^O5=Tf%m9zy!#dx9Ar zfVtACS?CrBGE&YcdQx7Gl$@}%cmQLlWLH09cq9;iqaWQc#l#1Zohg6Qngb}>c*`zb zn>sJ_BT5bV=&iUy+=v}NJ z3y<~zss)$p36B1l8s(5(4(A9wEdncmq2|6ND*!fQIsA;qm6Y3qh2Y;)1it(GwHe)C zZ=X-jt$VdA8~KjZe)O&IO#6K z2Qs1;LUX7zyvq+7>jsG9Kv!QzbM@7>g9m#v$L=FyRwDNI{t5Y!dKd1stM)RRp*?6WG}NY0w<2HjnZ%j^EJo&J_nPv zZlN8=5n|7~Cd8Vn*~MmIyNee{j^9S(-CoJXGMbsak^}kwd?x=YzaW>KeGRRDR8?XUTrYRFTc*&!zIm_t8N&e|VgRLP$N~(~QAh1JsLM zg*!Q14}P@;1@?oziudeA0IRe20IbVi18`XO7J$bzpX_zOT_T_v#8{sH*?(dM=57

h{49<4JUw){PK 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

mG)e!UqeZV8&S+Ego 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 Z(S^mGX2eup9?gtoj&FD{|5&}oLT?? literal 0 HcmV?d00001 diff --git a/tools/AzCopy/Microsoft.Data.Services.Client.dll b/tools/AzCopy/Microsoft.Data.Services.Client.dll new file mode 100644 index 0000000000000000000000000000000000000000..28679b9580218e6a9abbaea397a6df2e1128d985 GIT binary patch literal 667304 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

jI7%nO6I?yA$#A5cKi8v~ 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%0D|Zl08-^i(+0J_z$&fR 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 B{sRC2 literal 0 HcmV?d00001 diff --git a/tools/AzCopy/Microsoft.WindowsAzure.Storage.DataMovement.dll b/tools/AzCopy/Microsoft.WindowsAzure.Storage.DataMovement.dll new file mode 100644 index 0000000000000000000000000000000000000000..30dcb1b0a6afb9aab56ce332b573d27cdfc56966 GIT binary patch literal 184480 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

n`rUr{nS*zlE5^TiJ; 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

!JCe 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 e(=Ka#<+Fa7S zK2FESv3!X2HH5z^@z~}oK>yL^GiGl8i<=Y7y@WxdM8cpkDg@stCHpvTso32guUVAS z(?3vi1wwuRI5GCongRIURucl{^99E^@c!#I4;Z(y`#yF*wZCx5fbnz2KQhidKp`(a zKqrhh9H^Q$VC-Ob7rO@!teG@me2Vc=#-G7=&>+iX&>+iX&>+iX(0KI#QOGhGG{_nm zG{_nm#5IQ3fI`*?zDR_QI|CijQa4~sJ=k4WWqhVIQg;TL;&>e_JGAxNX4S#&3DE}eBXjQu#Td6%(ocTfHGJi^>%eBfXo+|-)Sh#L?7 z&bWv9W-x|~dkm2NcpKPk?SrdBSK$_$Q3Z2i7+DJsksAmp%judA7mFn(KJZ zzTH29n`-S7bRLYXiIfaMDH&*3(4<*fdqwLUO z?@PwqLz5d{GAa+z`QxFY!`|aL?^(CJF^K+aOc_L6oQ*&(htU?B4_(rDoO3)b$bFi9 zPjfq-X5Z7?noom%*n8UOJah$8P8^y%=?o~ZHlE?LO=k=`)AY8HJOm5G_{1Typy(X` z8G}wYtruT9G-1p$xl1bk(D+R59}d0K_)_kI!)DVPxm||~njYh}F!E?jc#iq@0&AI{ zv6gv-IsBSImc}c_6IZQm81&G2*Fg`RY#sE_8P-7$omL(6(7Dt>51l~W$6@wyn0*{( zABWk;VfJyDK@Xjj9rVzd*g+4SejW7CIoClCooF5O(Am}J4C-aiL5dE0_i^}r9DW~% z-^bziark{49zE+Y$uQaN(-;>q7Uq5J@ZC+v*d{;5*84H>=;6nTk1@}Wv6X&|?fGNk z$A|An$X^|PxTz3pACoZ~Ex_*<6^gMuGcCb=UBz%EfphVzamARK78=F4*Qy3sjS-<3 z^V92r_4r+*0&$0U!YmMXA)Nv-gt!G_m?=*)<@-!|4l|Yl@w}K1d`P8q+| zfs{>3xtV=i*|(j2ceC$R?Au{d3PJN(Pm$;|{}0@Earhw)|5*-yABX=EhkuxTA7$Ss z*moGd#o{@0YHqQ3-dq5D!CVD=(cB39nfYGeh#3XGVjc#*YMubTW)1;gH&5mki29t7 zyaKTmSR|Treu>`~Yt8vBDD63KgR(p4zkyffaO>E74#2z z9)SB6&(Gk#)$<>~J3Kd|;{f__5xq=B!I7a zZUnyO`8@D-&p!iy?|B{gmgns;kjY$1ZFw%Gwknr6vo4o7Q=LnkIhaRvKb%KxeN)~i ziytp_FGtOU+nJnt^D9jM!Fyl$a5ysPuBA>z-jI$VP@=utb^Va0A z1ih9irwb@dvXE0_9A-SpIKp_E(I}!YIYm^eS?r#}SW|SuymdlN5vR$NIz~TZfbl5f zJ&gAyQ^#%}y94Y#%6Kp1Q;Z{w zFEi$hrPSsy){H%2etJ^PSW3B$DFMc#jQ27=#W=$FGNTyBwPvhfoWoedSj$+)*ufZJ zOfnv2yqEDQ#*uN9`^dNx=4F##W=c*mmyofJF~E3~aj5u&Sv_T_m}1?_l&2U+m@)$2 zf1L6%Q*y>L-^QOXZ<|^%p2E*zN*!Z>@hIaE!hCVs5Qn*!DNixJ%$QTc1Gv<_X?u>I7YZ&Vo1B^!*hZyf=9AbH6**y$j z&rC6y>%};Wv4*jhv4b(mIK()@h|3C*O9f*MV+UhW(x-As7&{n~j6;mWjHem#AqS;1 zjmlgx?S#4cqFGF-VM+}sH&oOzrGqIQplqDwXUZVs5GXIs8e-pjm@>@nVbIMvCz&$B zlo3$AH0Lx^jOmnb$8^fKWBLiReeMvuhu|JJZ$2(WklhzvP{VufZrAbJ~< z>>g$uVeBa5)XGkn7cJ;0XLmWuwqS_eLvSY-4zqh0?y-wTfI~nEIXqM133J!QBkUfT zdBXhD#T6G3z2c%1=7$&80AovPm{NNYm!I7opwC^J1pXFC;YZk4RB)IIqI6WC?v+Ep z#$`iH8But`T!iJ?6Xth;6moDD#j2Qn!i-c^%;vaok6qEh?j+o|tw^$aNZ|={(#jEb zkHGi7m0}LX5_3+NYgTmtp8yhNWbO%b>*|rYKb;}%sXLPYdU~`1d?x3 z;R*BoYwwvyr8>!Yno-O@VdkzA^C_e;pL}aT`RuwHrgXqPcYO!DlL}9mkFFnL_YizH zY^Yg4acdTwF#mN!lHEzTW0wpA$5szBrD7qc%;;wvWE^6=hjEzkB;yF@uc#`onqp^&`GuAS8EF(?o zXZIlE5L519_b|Ipvimfnv7GC|IE%4{v6gX=@ie1R#d$F%8HX50svZ#QYHC-I@6h@a zW=ZYPdaCI#+;`Rvvpcx~eSAxD1JgH3JYoLBmZ41)YnV}N=8`aWFeVv?7>5~aY90`u zt?Q_zkV(cN#$m=0MzMv{VXR>sVH9;tXRKiyVjN~1spFIzIAz8m#$m=0M$t&V9ljH0 zprOM@wMhDiGQ>FY9&(FI2`d|jhX4lxchjxdT=&XKW(v4b(mIKn6{qc9ze zNyZ_@Va5?gv4hiT<9r#1c9WFWy!R-Tka3t%TuGD~#w6n~qqvIcj7i2}MsYRM8Iz1d zjKhrLedJrg*uj`&9A*@II4)z7ahOqbFr6{UILs*gOlM3o4l{~QrZXlPhZ#kH>5NIn zVMY;TI%AS?m{C|vXG}5j7i2}MiF8bZ_ZB zrQaxhy!2G5$2;45#Jg(3jtRRbTt6XqV(G-PiOVNmGckYC(n;GV-7;z7eZF z`MC=|wcx=8PcPW9Fu3rK3y&?De({=%e|Yh$7snPKTKv}H?Mq%+GG^(CrT@G%TzR~5 z*0Pn$o>=zlWz&~`a{02V#;RAU{!n#vMb65jD{or)$(55=EnM}*Rf|`zT77bL+nOJ* z39tR_+QaK^Sm#~;@%0Ng+_&L78(J>eeaWvcdFPU3^|9(ZtDmVpTRmyx@{P}L?A>(T zrW-bWWYZm+YByiL*}wVr&7a>qy!q7Tvzu?M`D)FZHCF8nwP$PJs{NnZ-YxsL9NzMU zEe~$_`j+ZCU)=}m{;qCe{gw6p`UCYh*WX!hG*ma7Ym=Hocf=U696X1hJcwNi%Y%& z`ZUIiOTG@b#LSR)d#C0Iai5n;^>wckQih*3k;>*SmCU_z;x&jhKQ{`LWpIb7nfyHH z#Z#yZ(;4SZIh#h=KZQ~*Gb=qpjGej?D8tW~x*l%H0hwlK8imX(xjT$I_slZ8LrT86 zc_Q7C?oOwroXQ_4AD=74A7@dGjM;>r_dE(g9XI>izb0vi@V{Bpk0ONg(|H}9} zK{@=Zh`1u)j4@=7WFJdr}z3dwsNY35uer5yppwHx$;oRKOOD+Z; zW4zlH>+d}u7%Rk=Hc=}N=iLCe>?1O@M>bKf`40O&y@|>&XTygP=GvlLfd9(${dJV` zhZ*l;{AwLZ_{lm7|AV^4I0O41o@Kxn>Q)2KG8WX6`{gm006&pa1N><{#rkzU$>g8d z{mVuw)$bT{o5($hah^n$#^p^R#9iM+c|F-g{BifPXPYR^7n*LebNP;s(wBYV2fpuv z{*sU4zUia%|KxcA6v+qKPi1N{<((xIGH@y3Ud9CDVa6F#Ddi7eN|?x9RxHGqo5}s+ zwqtPrZrjbkvD9WX_W2~(QKH|1D66#jQeyxycAd>wj21p5!`e| z`eFuajOoA<(Td;BDG)6{1LJ-^V$Eh;1WjV%H$27w7ekZaTrPA8PKF~r6Ix&bkWRXp z&;(Nuca4|^_iDzq$iaX{m;uUq=pPgNQx^f>BW3|FMLzh2FX$svG&638rok^o0`WDF zSOoMVPg4Y;bxdK2Wxy`vY>IB=X^0-iYml3X9rM+ogrS2>v6rzId79z~w2&!|iH-36 zFwn#r?q=Xk&`5^(81#{e+r|lRhEBpS2QhveddU>W8Bd_p1~i-xl)F)CoNh&_4eX1w z!2M|;etlA01~+~~8u&G=?i#pxneY*4OjA4z#IIsOYntMljE_Nk;sh+?6Icf}#p8_M z!EY%TVi;(OlhA_(ZX+gq8k{i2Q;grkiZOnh5@LkQbcnGsQTZ>%(^h*hM#S zbLCNB2~PBxVjj-(nYbtM7;r7l@|j|t@loJ<<7Qw3PV*U}k#Q?d^qHcG@iLt1!*6af zwi~yD-p07oxD)it8Fw3>0(}?b6~^75zZYnVD~(UXeHGBeeP;K-{XU>6_89j9JB-hP z;%5vPUjU_(F=*Tmx&<`FLE{0qj~EZaJ;->I@fA=$3N*#XjE8`?7+(h-Hy#1~<3LlK zFun=A)p!heoAEgC6ULLk+l}u4?=VgR?=+qQe$x0J@Kd<+*~H%QGr+rz9{~T(_#yDq zxMSHALpVW(FMy1H27bo)G4NjFr@+q|F9APi{44PD#?OIYFirvQ!`UvJF*aTXe$n_P z@B!oBfnPGt03S5|1Ndd*H^8qLXMtZe-T*#i{3q~h#+$&e8~+7-*mxWGi18=jH;g|6 zziIpr@KFOdx{Ak)9N@Q%T;StIKJW>n5cs4q2Ka4b9Pm5Fc;K*63Os2{0Djk)1boVv z0({z-2K=5e1NiqwIq>_&MZjl_S-@wFIlvzn^9=l|xUm54mw*PoK3xR&2;(n}#i0BO zXo}w$OMz#NWxzL$D$xJH__nbUl(&F}c*j@`_n#R5Y^(+4zk#O6H`l{m05ox4^b)v> z7{{6$K^X(YZ=#u-;U330-mC?s1ZavxK{&Bd~v@AxYqOo*O>v}deZ`KFuQ@5m?2;*Zp6c{xB^Xlk=zS+8{oK-mK{@ICDzxc!U)^Eyz1K#a!b z2jK1knxe-Xgc~PpfqTuPpj-pQcRl6}aEBQq=8d34858C)(Bq8#=0`x^&v>ng+swoO z&=7~so8dmhc%6A1l=lNo@d5J$-1v0`xChPK;6B25y?Hw*M}da;ka;KEH!^<2{1hlR zF@DUv8}yGd-fVsv^jm=F_2xamPnh=tZ^vC)=-uWQfOnerBg`j(=-uW6z`M)`LAe`< zo@jmr_zm+R;G^c(fsdJw0KbL1mQ3vXJ_h_x^KoD>=Sg69&UcK<#AkAEhL-qj?s2h0 zd>-x{;y$?B#24Xi6JLV6U3``C%b@HOUt@e2l*`4VjNbrdmv{p1UE*7C?-t)?90uhI z+=D~-T~OYO-w`4FJ}6g;XW_n5JO}qx;veC@N<0tu)#3%le*)!w;wOwRf`S=X?iX;< z{9kfE2mD3uG2lq<{lI_AeE|4M?g8MhavwB0#IF&nL%fDqe(_tl{o-}FJH_wd?i9a= zJ0Si5cR;)acTl{;_(xDI@!yOh?>O|jhtbTt8QQD>?rxC>caJDy91BWF6vG`7C2(IO zyl`J5Cc?c}Oon@}m?nQ?(4++;J!|D!2N#F3HSR&5bh6% z9>y+ElHwZ1Fernfk1+zu5s`rVh={>`RP1Lw2+H;1TDY&rKKF5PgLpsOH;5$M9~4L6 z{-C%X?i?*ipx z;`4BSOxy?eE#k{?-y*&W_i^zxxQ~m6;r_Vz2HYPPkHURIJi+)aP;M39W*i3PHt{s> zrn^miH}5F$@AHlUzn^yl@LAj;cbj-F?*Q;0^By$*XZKGNcjtXR?<;vvl|Ea##k<3M zg?H=3mWi7uHBS1#q@PUgnA$aU;j|A<_m)+ZEh)RS?CP?K<=-v;arqrHhi0Cc`Nqtg zijs<%6`LxWDn2^liF7W<-!A;^#@`kAdoR+u5`S0W?`r(L4}W`*O9$<5;I9*Z0n8bK__OfW zg?zj5*Mq+h{;t8g)LzUT!uadOUj%4uAFY&x)VUzg@gD|9)}Xf>Yx01!qO`!c*ePg=fX@ z@yuCtRvcY)O5Bd;#EVafr5B$S|A6OD@C+|LB?cFt6~DuC&5~1M3w{9L7kIvj=SP>` zF7CqLKP zi^ii}iOOA}NHBUJUVCkS%&KflL}UJLtFqpo@NbLmw|cEeqB0l`i|zhIXuq|se)YSF zsbg7*o@g*G+N@Z}9}ZpX?+jaY;b?!bF%-7mO?s7f3W-oOvegRrS+SH*x@aU3i-yCLSVmWOZXF(pz@|sV+kU-3PWKKI)kn=*AwxOuPN7u*yDaKmmqoqmvZz;Gjs~>h09B^n)e1dU zU~g+Q6iL_(^PXrYS|buq_#+7?U_&exjnzeimL0C)V8CKALwj+bX*ig$B5{_xCKTQu z-e&bib&jh0sE)9$VOz_NE85y?+jq7#>=rWMHh%;>g@kdm)@U@WoOKrZ-wrDt?T-bl zxIiD=>W}xxTBb;UZ2&A)+?c?eMBG z6bZ$9GU@1D-7yp}(}&Z~ByVGO*&J_<1~3SrUb;m!p?#pwX&22#9Y~J_wTVP5)Y+c^ z2elUsawHHIxa$u(Z*4vPm=$z~N{QmUs2;MVzYC*C23fU`PN%KUvVs^}0{vk>b#qO} zGqBecox^1iS#E11!S-mvA3jHr^oV;#8S{2n=nbvWa40Y!b|ymMxaf@sqOowOQ?w1l z6IL(A+CV=>j)BU$*g#(bP3Q0H86fFX0YppZHC7;@gYW2%BtpH=AbODJrt;aZ81u!p z{%|4`@W&JNR@mw$#{23+@xExBG=gY|^!Ey@}+aP`oCvFHGmMiO>_*BJ3tC`oIw5)`1-9|JcztvWC^VL7qLMLmM`(9T$B zJ4SaZBf9$%y@s#-i0>DJ}%wi0_d zYFs-|87YcfUc9k)n|hu{Vb}I2dh`hHs+-u^M;uo}d!|P!C%{7Do?RIqtB-(G;sU~y zGVW3h(nwU7G!p8OMnR3zC^B1j7fTC}_6mVw+lvGyl7P@E$pW*vF}L{-hI;#Z8xErD zQwy}CL$e36fQ>}2(f)*_K#nb9G`9;UCgmY+@xbN}Py$eb^{bgqLDNdpl}YkN_DA=k zThzv3KtSbTyb$cRZL%#^cLIK?O&BKBO%}OR2`MKX!CQ3Q4+*>ZOKP*BnWyMp?y_>Y#a)R+XNR37Yh%7x=1PS=)tHmQ)!c z$emp@T8TgpWegoneaNvJr95C%B9W53JCAZB2`g=YPJf4JY;v*#RaA!`QqKH8DxAHN(Omm1ia zQ&3yVVTd_GGU0l4d|7cjzWnO=vV_}F9k~E=GiJbQY^|e7J8PnNWs?w zpksxA1r)a~>$hm07DKm_^^}E6Z+Uy3rzd`{_DqlAn6XV3tX)T%NU>Dn^D#)Mp@BGsl7m-8blQP;g;#Z zrB;=zQ-WkLH^oX^-*_*EM+`4$ea+?#VZ+76-5N>tu)B;(8wwM}Xv2^2fV%cOZE|TK4 zTA-$_K1t!CaFu8*lr+>$iBn5V)*1E{B!_z?1jLoBpx&86z^t3sz3QzyfS2VDRVN9{lVZK`z3~Lu>F?vuIIsWVK&Ht(`hPBI+@b7rBsEn-$`6#g;=R7CsAF~ zHmQx#T53^%m3V5Saga0;rDAg*rE)F(aPZOmC>|N#uvmF-i{#h+PW~<_;I!QDGCoNK zd(o^7PNM1pawBsvX9tvXabC$6twGzR%k;PFm)d%n z0bR|L>FH{lOi$T5S?G3CWcta*$fVoF&G1rk?PA7gi;_I;(~{>ZIp{1#nq@3PuBnL< z5W5Hhy9umlSrgS;U4E?QJA^uapof(dZwkVUwqm{rEkj}HiGvbH{UNN`@F0c>s1p|{ zYgI>U1e}4+4WT;SM7C#A2xPPRBDxxCoTl_x-|`fbQ=~{tqPeKdgSY0nwC=TTm=+Oras7Z9$Qxq2&O&J7vP(gA-ZXBVLMrczLi-w_~lsHI< zv?~?WC4jaUSqQ}JMl6HC0+5E5jIJB5JsNHH$1rp*gpO}ITO zA4>VfcShpxCCc(63(|%?PnioA`dtOb&Zgv>>Je1#c9?HiLA3Vs zphRtJfnhR9ZOO=Rwc#-F#FFe2k_i4Peqrr`Z6aQ7$9QP>CpNV)Zn_I%FU~0gL#QY3 z9&o?mi3n{OJ0#0K%R(c#9Y8MM^6qlOzJBcQqS4X&XkU}0m8}+P4weNxA=tczlqDEd z+a_b_ZdWML16x;b98(Guq|G0fDfC*sYV@EI*~?+AJp*wZ7f=UjSi_9wmwDo*;h?A< zC3ME%I7&DXJfKYV-~riM&6vIjXh2>$r{d8I$JQ^>$KTC+qmHkOz#%RV#S-AL9U%Q( zA4<@4a0q9K_)rk_WbFE@B`meOuioT?$11;GROAs!U)*<*68~V<}gsBv2D?$C@4ILzad8LOv>N zwI*h?mG%%Sq~1lf&qrZ$#ImaG&zSSBt0koc2N7w5N7O+t;p`(Xr|H0oCKqd*1kj8z zrfGk+nPhyXyC%*o%Cy{1-G{~(>OAdHCj?D;=j3FE9y-#~km7}&yNYFb8m0!*dJUOT50Tmn5Gizc>_{!2~H zHNXsHA9$>|uyA zly-LCCOObj6|x7=syDmuc~x3!G$nboSb_%S$*~;Pp$W;Fljky0<4|j-YiE~oP7SQt z)d&+VxW!5wu&f9t0R2qICUE=!?C=HSsnMKXWAWmXEq}Id#gYUc`IUmNyFqFyx({+I z(#a`oErxmR4(a0<04lvdjmvz#3iEV26@jj>#iH3$TBsB4Kd!a9mNl+oy)r^)O}9>OGDx4x#Dlb*}Zf5w_1sF`nSWXaL13+ z0sz&HhG3k5i}m-xE=%Q8TQB%6m9RZ?Xbxc!ko$95SRVgVZ8qJL>qB%_6Vn@JT{i1Z zk3YK2*ci%|0VP=3$SG-aswB}P$%=Tm~(KT`o}pRCGHduA#= z?ei{_-n&(JtgF(dqONY^2+m)i=p4y*DY*+)aJqlcftd3sHd`}E!Aw_bSSUN6LK{t) zWzua$mg(gvu}nWlfo1wR$}7{)QCyjRj?%&e<2(xMLX}lE^`m>2qo}fl(gUY%gES>2 zqfk=WwT$DRqMRgolql&MhgjrDthC)-IxAHnWq7A4Bk7;2h_sSmL-GQYkgF$YCOYMF zdFpgE51l}9t|NBtdhx9T&NsJ(L%mpbP;WS*E)Tl3(P0i+!3nO0;TTZgbHw}c`3=@M zV2Nh)#s+u~oyk{E*C7aALq%HHQR`vtYdiENMfMbF2Gw@%Ol$e58-1d{rKA$`?zmig z=QfZ|?DkQvk~P?}0t2xwkWNK;aITZRsPzS{FSbN%cFCmFiiAz&P)JD^0#k09$`LE& zd0ky~uJ*aBe4gt1y5w}O-QUfNUwDrO`@^)Prs%X#nI0C>H(GGL!@Rw}x6_Jo zXHyBK`ZVLDS$mIPZuI%OvU|dMqV+XSpqW0+P@8w@pKtloKIfwLP7g!t59u`My>wDr z77`ucr+z{+GuXpuAubV-(hll(W|Alr7WV8IJd9wul#e>lVLb}K^DK(Y4k|uTc^!`( zC@4QsI)2LSa5h-z-TsP#J%bo^*+J>(6XEo%24t)fkp~5I_3f0mYTF|tDn;WDthk`k zMKpUSig<3nRC9ogL~xK#e(aXvBNNo#qD?IjIaaPO!k^-*)25@*X-PHO4}ryG+x0P- z9@FghAj7uRpXlM1lH<7*|uzB{0)%nmAIZhShFZm3uN`67`n#XeD({ssvO=aw$wK)B6jUL zg7Zc(s3uHi2T`(fg2RmBMX^Y5QyIlsQ|YphCEJ3MZJcx}CEB;ghXVki0FJ=4N7EUB zEfV^4$-UlgpJQ-~M}}lpYi4EoNOon?i7lDb?2O0^mr|p|e1W zY5a!G66XLo4jKgPH7Gu)CVFM(kuT1gHoqe{j$ZJ0AkNa245{g=?@6MQHWs{b+9T~y zm&z)uUyncD7V3s(#i1v=gfb+3RiXV ztpuOLU>nCNz2hO|o`YUS#{zFK+Dqqd@lZQM7b&7|smrUNb~z9>P2>xOv0o@n z-M@7MI^{~Kv&~#Y$*5wcX9o8vS7kgJfR1xb;Fj6hlP5*baTC@Cq440&>-$Ci;Ssq5y>$RyRn=Cmev z(ilpsR5-!}Ni?d7E9KfgA6w-bnA6ovA zlRRwcl5Yy3npv*uoFTOQu}Nx8M-8K^IBEc0w^0M2W|@AvE}1^=dSv*zt3_MY>FuRR zy3jg^E~9=YX6q90St*;7lIgS|ulArN<6Q&_!8;s0O(t*Wty)U2jG9q+`PCjp%kXl? zlOODH>XPg-Xj2GI(NqYBpvQ7mpwVnRnVbroQ7Eb@pJ-4gB`A6KJNetkE9{RcQYjP$ z9g0-CY8&w0`81s+_gwxIUrudcJFxQNC}|`viE{}E71TMbjxTNLBUM?6j7mBONvH;y z-sdP>X5iFfW%@gX%J6fQQKYi)93@a6)7h-)Qma_1!TRj)5x;?>7p~!MeRt?+s3nkGK3*iz0Eb}3?HY=eR(HQQ>iWJ^!!{PT@v8XaA zWC5D=d6u}SPRS~xjdc0(lu>oLQ=$pGK>O$*E9=~Z^O>ZGrzrIS>mUPQB` zEeb=32No!B{-T4vrq(xC@X6h@@Cg-;V{1RM;=wPSM!H`+xP@ac2rX~Ll52{XAH~&$ zHj<1rao5-8-8?Peq_lCN;;q0}7j%UUTN!GR#7>*bVSBT-x>iD!Iday!AN8ALh_wm(MD!Q@>Qm(hq31Ha)%93JWRYk7j!dj(6P<7I#SjkG|*S)Si=x)SmO%I zn|ZKq?K<~{rc_Bl7zD|PJQWdFU$RHH_V>zxgjmWlq)#)dMPlS7ugT)WiP&q8;;TNJ z==w^W7i;4<(IyW=I>R%M6^=sD0qiugC#-|P9!*~o(q35vhsGa{z=s#`sZ(t{jx_^1 zb&3JRSy1!i8`1#*F@<^)WE5g>Q@0PXS<0Ohi;jH5lfHR`FT9BMQ5WEgM=EYBxTrE${-JK^uTE0nM_XgLj4fxE?Hcppl<6wdm!t ziN4?gQm9l$T%v?e6tLXUbE!3er59ZN6HwAX!eFJW4N4s!aGfZ{;4jaR#Y9wIOVukc z4~z3z5LyA{iwV^C8~h&7BU(&eG=uqg=Jh3Vl%u-v-DUU&4*%0PZ!%$ODqh&c^0e)i ztcsxm`sN3;QH*L8NGNahbU<|SfmG%QA6;e5qBrR3=<^GKNnzTBGH3&B zy#z=T$!|+llSzK47iNXZpWSY{%nP~(pX8}9@F_%n54ml-i$+Dp_C?QC3}k-=Nqa4Kj2IdBPZX(y`s6O%hl&Y&0lp)E7bD_oEY~ zgd*c7XoYe1OlfMD^0Ms(7tI%OskE3hEu{X5+8+_9AxIs3cBvd`?(k`O>V1yzaY8(z zV%!p#ns=iYk#+%l)V+)>R9Ng~a%~;B1%n#XdJGF-L6BU2Ev<1CJ8hiD$`@>SFVtzIvM_SnhHZ)B%#j$ zq7*Av2+SKvgniP$v#ksHsy{ZeO-QFB)?-<^mp<`vD(MgI_xFWXuHYMu?eR3FfpC*4 zu6Mvkw<#xexss|e$gO!`@%Ndu#OzS8Z~=3L3^rWhYT;sCsvB*I+b8kr@UfddfGTY+ z7X>D>{hbWBCsSkg#A_qb$UtutA7r9U*esS(}1;_AD377;aM^Q`z>~2HOgs z8{)h3{T6*>LgsynNA;$vJ$q=}C+iz&(MQo(AjH+yTlzy`SiG1MS8qz}+0!Xs@v>^q zoS5G#r-m?e6Y#WB&S73aO@2x$6%@dVK|DHW_{qlXKOcVLS9AVpeISH2v zE%=GUP5v&c1y_Tr@4_hrhA<3xxS>RTTF8zTx+MYia(W3~R6xzcts!h+x`vbt4mq3! zd+^yfH7!*@T|J1A!5(H%XAB#B(J87%3mDMRti7p^;WJ)PF-}68%lCuW(N=ePsvA?C zl2SHOqIDm2{CsiOv1BQI5r1F2Cz`m7#x459oqC{>1lGuSjnP- zbx@rB;n^z{g{}T-un!%L#Vg}JxlNrA1wl(We9s&v_T;qJI;#1i59m|SjA`aJkLrJ z&E6`ZD-%(e`hwm#d1_=?^|)xo{1SYlGTPcxpqCJzd37gFZ%WOg-Yz;g$cO3FT!jRw zP4zdDac)?wSz^lD9veVZ*==>Kw!}afwhz3pO$Z|%y)x_7ZZ_uvqS~K&D2ap~g63`< zOZZX_dr+Y`Ul=`dxr1+4R_^9dWFKEREpKuXwUGg=_reUPV(s9WkCNjoy%J)9O7V2s zk(G5AO={W@jA`)t;NGv;&x8xy@Imnq3)rvQ_)h$$X z_6ucky-^5d4q#o3j+GFD({C!H{#dm_m54e7WmJWVVWufJUYP)imjse#r$kk&MRf!! z5^{yWX@2MnL6sjw4Y!POO6U^Ij?AAHU~h15Q}>=dv_jHMUxZbWDqXv0&jH*zUX|8! zs=&!nYLq4uRS*h?HBirJT(U@Qfv|6fbce%+3ACCNg4%?TJ;2d5WVzb6vth)sYNW`u?$CDo*_A*MDxvnU$|h0O*LBZ)CHBhtqBQPo z3QLK@vWmR-87q+I;14D3E=BdGm3#JJJ%Jg|t4P)H)V{C+V$D)dz9i=>Aj)wJy82=X zO@>6r`#U)y4u;_&r8}%xldWKE2!{ghy8q4CZx1QwX1xy95ZND!MI&t0xp*dbk%Kn3 z-5;$uJxnWvEJN>#G*f3q7lv(|aE;NDO@i+8r`%kxNUJGhtj4TTwhMg$PYhqVl9S;E z0PFi*=JzT=f!Ie5_B8mU3_mHiDN_GmnPv{GT#Expt`RsTg023t)OLAR#YaPqj|03 z7Lpo;owS0&4tXkBdea4e!q?)+($0tQ^^&syGEjMvB@J@B zE7WQO8-kHVuuw>CYOr}k1x+g_imCe^TPu{4ohrmNoyp)>8k5QTOkpw^8E#vJ%oD|A z@KWcN#!rkmSt>vl7nU1&@7}h;P^%P9uO`mY{#u;2#;|mN@d#o=HK7V4c$SnY677PZ zL|9RRy>3?;Iw?!|_3D!Kme>xfFYFJfiw~>i;l~uNq5kP*MlR?&^jWoIBtjOmg(B+XiUzhxZSRb_D z^)g|9Rvb`wOR7&eB^{+vOZ0jQ04C}iD!E(0jO_&9Qy1R3^k6GS8JsJj`)cHYJf^Rw z^%iGz=4K$04kQWHn5yt^yhwh#ufODcNeDBiKvif8xrxPDp%qe?LZd;yqsmq+Pgg@U zYo}X>JP6vACkjIX=CDX+l%uA3YFwOd?}{eyQ$MB~u4X;qs>5tV)~&8`NOR0h|#P?VR3a(A21qGh;^u z19Wk2+N4}AA#BCQ6x+wOo$+WG7t!%C2-tZ_Q)}ylR7WQ*h2u#o1on_z{j1&-*h42Z zp&$n8uNk?II>I+r(wm~(lr#J&TT?qUL$s;Qrt8$CSuwni?NULFkvQi7TqD#4>YWwoiG1$&ewJpl+;&%JuYgTOuk>;QinE2r^{^c;llDlFw z$ok^AgN-BFcd^NJTY1T#{6&CTRvSD?lE3zbD)HhSN8BDgz`Hx{usGcn!if!9$a9l9 z2`knc!pS50aZSvz_q4j+Nsjn_ZJ8slJ<+{doDYhs76|!O3m`4Z+uwVtO)z&N7}q=1 zkJM$5U0LJj^CDJQ@9QOE*fehT58yn7Jz5I+ekp$IluwIcIoO`*2d(;OFSbeL&o80r z)b#8(y35y0;8n_@Z zhM!(d-6Br&Ku^Yo6AnbnpW&ljH5}4{SjajfgJ6d>#WiA*V--egKQ3?KFF3r>wHeG-!n?j{je*w^qQ8X^wKL^ z>9hIh0;=3oqiIiFdP+c-o>;-Vt<-^(jZNP(P?&6VE%WJTBk>z#a${{*5B4T;mKNKG zKFA)9Wl$HuC7OI_QZK_{g_V1=+S$NBz$c`zIGE< z*I6>khjtZICvffB`ce-zs`lBA9h0?cQXvf#>2{+yP zN!?j@V~!w+uFW&;8?VG+!GJt%iwPl)l<}l7EjmsFp*!IaRJ5P=K0k5+W)pM3?9n5fQ*!2=5W5_~FKZKM};+0l4v#cyL*Whcn6et3dcDd@Z;Zh(ltz zxDHRFFogJB@Dbx1RSG*1IwVB-R)KH&1m#SrS_nt^;Uq4oVtiL>=(Y8DkHfcEdo>ZI#h*5z=shI;ThEB}$rClkEob9OEQeouQi#0+_lTDnZ$m4Jj z&1SYJBoSryjK3T%{IDbhfjWnn;xxA`vudny?xqms>7lkE6{uyzpijs`%UK3` z1H#D8Oes=*MWOD7qEPc#jF+8zK00|7I=L7p-}PH3c-Dpgh(}`YHsl)MREe8iC_$yz z#r321#O%x^L?qC%o5_w)iEd48>_@kWay@#HDsiS#?10PNKH$%!T5y5n3ZH~Hg72?I zxB<`t%sb*!BbTSw?#k^*JzL!Epkomb^`UgB`(qgp0|?0@4V9|>ufDJxT2T+`-nt)L zVCw62cs=m6A>V6}jt_O(k2J%0$B$EHmg|zyVp4shq8V}VX&h3@5_hAHn=Z9=h$VYu zm}M|)&J$#8l4hNbQ1u|1u0abA6D^R69h~YYWw}J=8R6EDgAd7;R27mJ&G5sia=T61 z)d(X};>rQu9nU>PrKcfkWxg$_Zy4$6UPj#0ZP9{q=o)6@VjW`A7=ly6C@=L{UH1!U zgO+S{b?TTp3Q1`qH6q8vETw@8l_MC9E>1eS{F-O!DTz_y(Kti0K&_Tl3RY&%ZyWeQ z^|RD)b0d7UnId~NNvW0% ztTQ0JUc8gBlO_Jj^!U2Xb@{TyS)U%K33*WMDBn()0#esyiJ6gGiyFPOtYnE}rRPTD zAgS39o@Bb{5^K#t3ZClglqbrgX#_D6?2{#zJ*i_0y-{e{a~kkQIbuT@Pm&{QPniql zE`6h@KgoM68=o)JeJu?B&`2a(h~84oqMb+$KSJOde@BruD_uIMJY>X@CLj(S0Fq{K z@~UNDx6!A0M|u_m>j3A_kzxe@k?tejZ3iDIhb*xh zS`nT!Gie~1zBG7gyrgjxGb4=d?dYv!2wEaDH|XtUB*WC#wQ;Y#{o>?L%E?l-F`A_N40&M_;+e_w?4)qa0au4d4z*dsZ7^eRiFs z+g!I<77qBb$4oD8x*TRniRXoy7c?*ILTfsfUpw60LM)JUn#obGAPWJzLwHL2y&WzZ z^~FULjyOu=b(VCNYJXa2Id5uE)tY@S3ePZlGq1Q)|Bf$I%TiFGNe7WFI*;Js3=BV&^w-pzA zFDnBROz$?dpqXDGCV6)nX3j!1QeJ^4@1iU4EJM_*bMi|4W6;3fLE%jfm0G!A-=N4N zE)NQNNe=N#atMqiZ_^kzj@etDhiJ&qlZTLiE)F770B{>_o2W=)Lf7QqywoGoa8zR+s|Poa!RXoN`=Ch znNRlC|W;d(vM8md2*16hq4-1;bE@ycn2qzS`@N} zBLPv(iIPPViKMtT6$$lFWhWvbi&E@ij!g7mM3DvGN_-kD$eZL%-e7o}wWF0{p}oL} zw8TDcAtXbGYvKZ@A%@~HyHjUsN0Ad#QT z=kgAgpeR8EsiF58DjP&%=2XFL}L6 zcB(8ML>ycx^5ntClZV*o+Cco1!EYrWhC7NNs6|}kB9yYHEYNzjEOYp#AzCh|Pjqyhv!0H0^mkF63#K1u9^m~X&88!M{r~vyH=pt*! zYufQDgpf)Bc`Sn@7UQpsMgK1LxP#h}lkf;p1E~`&1;1eV={uPwqjs7J+q%ETV-@8f}sEYB&z2QDjKFa2y z!h5JDo+5%V1Y-%t5flTw4d6)Xj!PbTO0gHCIW_csq-^nk8p+|O7vm;ae;@PtzI^Bp zZ@;&nH0x@pU4fXaj1{d4qcYL@sa+q1fQ%tY8H3;^-p#x*Xt*)tH%yA8sDLC2HU$Vz zk0F7*-z?9Cn>-5&Fev0AbG%FWdYW7OX$XOg@*u@~2!n_>`5@y%$OjVtP;LQ}2p`HR zfV3jqBapUSvShsTiXf7(D3VWjlaCcwKv#z zbqYky@gz6wld@r-EPyyApY$f5FA`+XC7-7N=YG$h(Qk(>_-Go5d4^EOQ>A%!U$+mu?9ViOQ>*Hb2*CrzNPe(lO%s~W)P7w33XB{k6%r{EE}^1c&86m2JY2{I*Gn)nmBB?$ zt^qluMv!Fh*lO~_urDM>d$+x}9KYIrajNE2Hfw#N_ z!SISEHu2_x_8FHeAR1Q}VRDgtvKW76DbyB?mD@7;-vq0Wb>CwtG+zupI3hGw;i*(m)<`0*H!m@`N?rZ`OD_Lc-^<6&y4@` z6(4)yUsk`;y#A(!y8KsPzU2D(6E}YOnKwUiGm$zRP{I{u}ZurIT_g=i% z+w|a5*5WsxD#*S1ep0x_#h4z5NzTzOoI4KruOglU%qAo4r;gIVjTGiM|%`s zDB)5V`nfLL*+{?EYM=EoM0@eL_uxJ@Toog4kY2jWs))&x%oTKnPX&$(2E$fGKYhMk z!Dq4QB9K^g0QbN2Byai~7G?SQi=xh4^GV->30~Wn3W+Ek43(7*_CiU}dI#1t^74r` zH8&q(P=K)rVv|$s9ULq!F9WThyo`ir@V3&yJ0Zwr@VO0L%;Yg)@NSanT9WkQGI($s zm>%@l5;n7{yj3jx5Ht|W%kuM0?^JK{1>0CAgBQZjHoJ1q&Ciu~Fe5xuo~E*qkp(Xq z6qix|S5fmTj8Z?u7=gmr^FFAV~vgO3;{+e@&Z5D~8vgd(euMaxZS z@R_1yrZJ`n`B9A0!Ftqmf}mk_f|!v%##;{BW3VL43kqZqiKfiNv4(3SKV$vH1?kmvCEOtrdhk-ni_j3dZ&@Yp`Tk2wJBWn}*lik83JFsSgkMd-El zG=YI>I6;h|Hm>I|yz*6s@ui@oAP@b$ti;UC&oR-m`HH!U#V~k_!L@}L{03jbSPCpC zLNYIv4sIQfmZZ9uF5&l=t}%r5zpXA^I-~B8)OF1GGI%W(A*g0sxk6i2g-{lr#SPwu zVwEQEC?`!|l*y(zoeNnRJWaLuC91OzBRn;!cOTTzPCW9}>sZy+-hHKm&8V(-@XWOQ z0`GNB6MOfmpx%A^4YBX9THg!0_etamw8Af$1I-20q|Njypb(2Nu%oYxgTVj}{09GX zi@i~h?1-R^woUJPExqh<-)7v@22hm-SWt_<#yX!>zmlBfzh_OpkP9Np^RD%(+zEn|6ml!e!3g| zR7tR`@PHu_f0L@7`?98$s>ZunXm>+sbqTNfn=!v>v|G6(^RMEfT!o_KWAyW02Tdgh zhGNzZ#p*?C05HE}Mt-4tIDlC;g#UR=DE@1V_gQ7gCfY*3UNN(SYtTU>0F73ECJj$( z=a8Qxxur)6p_fRz9)ZoPG~|(S1rVlAXqfHf`@z5PFloj zFtf@1*~zO@$h^s*210Z?EcMW2h9^-+CK(fqF(uej0{xi53Yca?pvv46~u%`$s{(S}x zDE}{q%gn;?0AhbU>3qnphmJ6pCXCX6Yt7?i_XJ~UBY|`o?M1*kn;;6tkX~0lW4U*# zmr|wS_3L1tirC7g;E{5&pC*;!>1|z}KNi~z*rRBrMscU&ZT2?1-&KUah6R+#6%1lb zbojAO_5MEQN1x;47a=At6#+ahnX5*<9bD$UecT4&~u!4?ixt(hkGkR6gKFH98{Gqvn;3>+wh zv6;M!{E!%jA?XC0NW3WlmQv}W0sqK6Hf#^)&p}HEuUE2nWTTR}BO6yi(vECIM@JI8E$Q@kj+BzTY>Fcr!-nYo z-wuLVxR}}BaV?qbN7t8Tp$bH01+wbx#I?X}kK-ZqUS{IIA4TT#}5rZb4d?|@qp$%%zkvs7j% zdKGe?(REmad0-JOv;rjvGcd;vYL9URCHg?&&0ptBi4vZHA!Puh=8Wjly%{6Av?Q`v z{gLNHmu8&k(t`P1G}4wyn9oJRd@h*zT)xPB@K_mdyNH?3r9H-))|6_^d$!_cTZUP0 znLO+1x6OJjl)|j`m?yVJ`q$hREJmG$TQ-Ykwh0nu%h6(UaCZQ$5KULBpfVd<*5uJ{%;c@)UyKbJ#aK?D6)la_Q_5@wSThrwW1=PSOEl?DC?+zEJ&{4g{$1cWSqYxx zG#>?UG9HvzUOvOSWC$q1L@xoNOYoJ+rusBCEd9j_)c3>LT!)hKw`2-bhH;k3;oRLG z^7TtJqqTbaR~S;Ia3u0|H-@tt;2<#oev`D#Y2Wvwk3{ab=sXe)X&(l(4*w~~S4Edm3lOE*|3Sh_#=p75EI+Ko^;MXB&VcZD@-g%D{x&a=(=LNu!QE7;`R04@FZCmMqC(g z<=L429>E|&+aGa@#Cee3m2R3!47XB_i>nNUpyGm45-cfxL35Tg0-&$bV=HsyhBHij z@i;t$Ka#$wb8vs$-9d#Gnp z3H*&R0~=sLA#UUL7!X^d`x+b9VR&_N@EY1< zC~OU+#ZV}bw+;CD4RX(K{65bIUzp}uY-zFBh@anxcnTauq*mwGs%Rw`En#34>-#{W z`(LXO^EHO_T8<=d0S!IV$7tGPhTpn@Xf$8YN8e&hZ{;w3XpeEZHHsEpUpg*-zyLk~ z0C401lLC?ei^LLuBHGmuEbG``>O3Oxyn!MRDvAJ9YS>j-X4aKJW3|VuTWVdEL2J>S zAX7HxXNrXpv1AQJalR9R799$5Ez<}%7y)#g2YlMF#>E2%?QtO?ONaK*LtBvrlLzyZ zv{ONDXBt)q46B12Vbs49VOp>->}^6LP{#<=0Rdv(3<)W;+C%V542v=b`4aC+nn??z z(L!ioCNx`J%D>I+o|JBT$iCL_TJW!=m2@#GUAa~ge4ppH;9f}^3Gnj;@O-SDL3BbJ zS`Q^`56)>xlQx)F>>fc0F)E=PRl0p2sP3z6_9To7;Iqb0tOou zIMx@?ra~2Py{1y=f8Ye7fZRz5^v8u+q&TWg4_xoWUt504N;SwzHHb?|KV_xrWTooF zrKF!au>L1TC2z(|P5qL4axd&DP4*SI!X z_L1)85u2EVlK3VHr$t6b!$ra{dT*^TVPvc@E(vn!3h`zl7HA0rV*bEH%#YyPKx`ax zY!g7ZpZK#u{8%Dv78Hap@DBu`+25J&Su&@+xs0s9vp`{Hmxa54Fc^dGih zmNUd|wi0(u$`MuqB~~*O$tU(+0K11HSjbRph?X^spsH<;@^G{{|2&cctQ1Y*e9~aSwE+ z#Vw*BnsQ1ZxsL`3^mm^5#Z>k*9o+HL-Qnrb+~Dxv3vBXOh(d3WevvnD(%+H(gZZNh zzaPWzH;^81TQaB)Z70(pWOA2to5u?57yYEEp~z2~LhftGgBznd)Ul;!q*#}Q?g+Ku zNq@G*mUXFdor?q^939dZ2W^Xgft$jDUn<2Q)Mf1gQ8BRVs3r6>($=moa2^aGu+4)v zYz>CeWJA{X=xDlc%b#sMxR^oI3)(13m=uRb71;4AG)XuSa%sb$1l?AM_L>2?m=qx# z;p>580buD74ACG}u%Q@!RD)+ym!yYG=(u1( zh94k^Oa6Q(b*bYhphC`~`1dXZQx%Tq(}rib3<+$G9vh^D+(`~!D7h`zrG?1f>{oF8 zBltpz1c63J=@K*K+%kN45s|y zYOcB@{(;M5bGWLiOjQ9rZoxfKC><04u^~?SVUB2E4vR$aF!=PK7brBSdvasjJ#m>A zGyc;-qc!tddL&85YZu$-?u0cJ<<0%U5;8PGH zK7h2Q48@u3McFc>_ng8A(oJq z(?;cnB6?~`e-iIEgc8m3(KSNpFG475!yqjG z9rg{2j)pNFawZCF5JngbQH7I0oWU*=AleeZeJCb4AxaoG zvBl-EH8|R&9qz(q5Q^ck<|F(dTn`W<s(4J#pOKI|uhYez8d z4-Pze0{hK)5dYjj_Pg40XNJ0nl z6R<?AYI{=im@XKqttK-IFVemT#Z}Tw|y~35Qcym<@P`c zW$9$VD31}M-XzG1lmr+hxs7D!gv1u;yjFl+1ho>j(JDfGRRXjC2y1v16OPTELvv6V zJU0fOn*eD56LGoL^%WA^;Rz@Ost`&Fp)A5mr$j{*Ln)R}8XuIPR{nmHZ6eybBdQU? zhTdiTi;&X1gi@cN`XlZ|RFUv6I-)tT^`%7Fb7xXN zG;W-(S-xoJ2wongO_3Dq1W74u%Tr)NdK^tyE+ZC?e3HJ&qkc&pZji;KsuUPQ5g<&% zh!jS!lr)(m{6w0hh7ufbG`S|#P*_v$M@UR%zno87#6reL)Obl5~G(f*AXzEJ!Um@B_(;Q-ZW8#HAPJ_rU9aTlPB9gQNL!=F9H3kmtNRjlA zOxyKckg1X?2$_l|YnZo>ugI9}P9JuOb&8BfhI(f|7om%vSKq;+!FJ}Zz3p7hU0s~4 zMBPavx<-OFYb4%}lB5`2T;EzW#e3TQ{}NDW5|;c7Z-c(&9Uos_|YTPOow-yuT|zSo-8X|lYNA>B*@ui zY{lqvo2NKwOb)s8uzOvs?Jt)XnJJ{dnB*F4ojZ5HuJH7|nv=abKxL|Cue^z_w{trlr(6`qaiaMjK=s9Wrd@~Y=d;AqAsilGb? zQ6%+&q>w^Vho$A9Q=YZ`^I~h`Kc{4@vcM?FKoN435(j!E3PfPAhLWD7yX2T;F6b|Qz_e-8+Im2E!e87u ziPS`RyR$lwT*)mJIP&ZQ9TM0DD0Fp31>ZVHP)3$DJ=<2@C#-XM?`Mlb59fK0&s$i! zCTL31K-=z>UD98wY?>*0$TM9UVgHum{q{>&#;4c({d4s~t{A<$yV>{PifZ%XeDz25 zZWnY8sjTc9;yKm-s@D$kk?zP|Kd)YDWfQOeG&o>iL$%+D=#s!MRoYWL}=@otB_1B*E*AJa3dihW%zw52OoNX-6m6gFYA3Q}r>AzMg zjSC%ebl5t+^W7~A{-sj?=B=sox#ZkajXI5jS0>X+kDfPrG%xG8ZMJZBo%V}u_Y9MC z+-8Q9-8|PZO1*f?-H8JX##}XMFxaDSemi>Jau8z;AjYoB#2ABXma_eN%FLfiKsf>H zRtu_;Dc?m{7?Fl_r`MBpdbB(uM7#Q;6+x*WBYTrJB0C!^8(SpEdXs&mhh*B^?}Dv` zAQMYug)d0tuL`CWAL4o+xTmn+FG7)J%&#`bhA=T zNlT+Jy3>ZELBsshYlr#V$UL7PTr^E{tzh$0)ucC@15)Zt-uPWEpAmZZkF4yy4Zpd) zjdpm|ebKIi+*7R0OJ~h@PZk8bZtZk(M#z$5$8EPZjfy)Js+ z?n>PA^}+KP#g^ zH`vaG9F97-1`Fgxp)2VuYSBK{qzJK+qGm5^k!>GaQ__aC>tk(8nu~f*3^un3?M<48 z^bVP5-Y3i|L=+lE+V-)xX(j;AY1Ey)yjy1!;h!fs=uWgGhUGYmqtF??@~H$4KN8h(IqAgrMXYMBspL6Meqv*X8*hG_cZC?vQ@>PrsiVoG3~PJS8&3aHSTeQVdd2H4HIqIv zZx!i#Ik}AM>~a6Dw@%{^KQ=DXI7^ilHvP0E=#T6P6*EsBnUx#))POqn;{4L-Lqh(z zt}3|h$G^7P_qpw%PD}F~SLSnz%yrfscTM8d-+Fzc$fLJEUt@&Au9-SbZl9VWJ{)xk ztQp8pu`YN{o%-Fe6Z@I=DQ@m)#X(!DvNxn{P#F8c^S+*iVu_ENWybrI8(oBN6`OiS z>1w@CVC_}eyf&;sW1P2(M`lkw^QNkwmHmQjvhM1f-2Wuewr=F}d-XaebWbbo>US}C zUd_+W=~DVVSCrxP))=ehDeB6`rMTb&`Ov!a)-~8D9&ibi~E^bY9 zo^w6z)~iD=dl#Mwbh*8w)Zwm4M7G}MqJ+eN7ag-|KiXy`N3q`?tFWls>HF1 zzfAJYEZP}qd9#zsrxi&(YmzPftF_3{Z!c$td^~q1$W`RC-&nKOk-V7DQ{ANNX*(~6 zJS&G~=kx8A<_CHOP$s<;t@aMN?j8E*vU$i07l%hB9O6&c{0*1JX7uo@o3YjNrRznz z{`MPoPYW#SxFPeL#*YF0kCi9~DO{0Au<;mNFSP-0uLCs_tuY{W57+{?Jpu6UWUiY|ut47xrl0LL7^B~D*&;(I%tHSw1cEQkJ5P#m!C ze*A%byWghl@kn?x;K`slXYY0B7Edh|^!n!ZtCUsjhr(5w zwe^vYwiK8ht}s>Sg)d!m>yLu>{2t2T_E|4x7@x=9V2R9wylFU&odApG3X$-I-~v6W)clxLW=9u-9=HT(4f~_&DVx zYxk8VvpWWhHsigYv0}5GRO4*dxBf|1V^v3!3|zdcO|FX;Myq12vS7`H9Y_7 z2l-78+|*0Maz6X$Sj;-2XgH&0)ga@@6DxmQbtdyhuHkmoz;%rU+ZRO4?J(K=KynnJ zzq<6L&dfh`=62h^=;GvJH<9Jq+xMq9Tqk}Aal3S3(V2a^?|BKC$2K|aU^-6z9GSbi zM!i^lx1A5?+6f1eQeuPrelC&UIuXcT59>|;g#0G$K(_z^Zfi~ULGoLK53Nab_|HxE zzb3sm=0}&`x#hm1*Q_XuPWKMg+&{HuxRFokg=$@|ZfegiZN4H^y)U$u}U#0Dl z)p_uW?Ky#DkDEkP-ONJ`>1?$(JXTI)dZocR>uw9zzkEGOVD@3=qec2p9(irbKW5~2 zHuJs9MdhmTJF3bCvkKn*6uolNb(7n!eq{@)9+7=k^0H-Q?7~;0 z$@TAlxR$-E&M^Cjx0f|varXMf`0jRDw$YvNbepJQ+;d`acI_3VG|z%}^EPX^X(>}1 z=RF-U{S#xYz7Jw%Nz{u_66nLbD~tupsczqu>(gPD8uRm(rT$=%7g z&~=Fa=XZ)Hjtf;J(t8_7@6CTDz1y4!HVMPJ9cZndz4%0+f^+Zc$Gc0X-MWx6 zd>EtLB5BIlm=2oTE*zfu<35Y4{DO>_kbNVW=e&fPK5MFHIM$3juw&F(!99J(f|3K% zUoNR?=*M_gbNENDVnwEVO{1T7wfD9awU06<|C)O2Vb)6}%lQhAm-p({HNNT354F?R zSg5{X*Tf&x^;*9)ikq-%Uw)r;lgv*I=RFAt9H^7CL^!a9t!MSFQskK|axhI$sdy6a z@OeI0^UiT@@Y2TX`#RQpEtzx5)^z-)BlQPos|=ob)i1&D8F}`=^zgv3jE-C_-sPKG zIe+xuKXKG9bIV8X<}aum9#FSFJ}bJU&(N!XrX1O-J0qm$^Mc%-HcHdP2zi-BrF|JNp2Y2l%8#bw8^^J_UPr_EojV>fagE`zGnT|zHx`rjFXf! zo+TR|$)%1N`~O@%*&#hYIe2$$zUEIywz@U)<3297ir)F@&hUy1qcal^t=C`34`Vu* z?->2#zFNZvd&WmP`)$QS&8b~2t%^CZd1EuWAIW<@ z@2ugq`YzsQ);{yN`-Tx7m##9qBC_IP?32ye7eqZj^G=NoyfLhE{*CvR8wOg8(1|*u zx#^>bVr7H*VkOvmN$76>oLvH2e_NSNWX9*bv@)cwiH+3C3Zf2jre_w|cV(t&6%mh= z|5Y0)gOUqbB2WhRjIB(+`Yz;Xw{fG)*7Y~LvTsX<8+2{iEjow>la6^kQoF&5)(lwN zqW4Y_idRVKH9oWf7~XO%AMAZ%^$b~Ckg>%hc4C}Rel!KkDvM$e4n+ZRRu%(O-0e<` zKef|mNut^0KIzLBh5MPzwk)~jJ!4=|H~y^ouh`0i4?>>cCr!C?r=LIDFJV>os7BA_ zPnL&|oOvtwebJkapKN=CE$kkhZ=51nsQvt=)3~(922(nz6bMS=1^eB*Zrs&({;vH4 zv=k5Mo@{v2_lm&k#G}sD&y4T?%S1Rl{K6?U??RWiW@8+W`d-l9{`ocUlj)xG7K@k6 z${oF%rPhB)hT^ZG9esbPoaz~8Vz9N-u{WKk-qoAbcYjIz+pM7xKR;Gb89YU?XXk^R z?)e(={tVZg7kz*7xz%fC-_zYXE_vfr9~<%8UVV_`zj36l47GwtMS8$y0QX7xOHrhTR|-TT zE7Ho^-U=q6ExGSeCGWoF#Ht_2oQ?^zowH4eF=vj*^9q<%5wBEKcQ5Odxnkk0!~V5P zURs(e2Dlhh6?Y0Z?^U&}GW%8evJV%`uG}j#4{cDh6eamuoGX5}!s^E}t47=m`g6XW zb9_IqQRmb=4c}gQy6EJsImec~=x|L-CnjC{qtz6>P}5-#8&4*W;;cEWHeDxqfH1{k5YO$-X*hy@xsI+_lj9YW^~%KKcnva8Z~=q)4PlQMouRF5Kw| zxGT7eiXsx98}2La%X8lq7Zl03pgzUt@)nW@y)jj>(mj;C(2#Wmfy*CIx!d-vI*!8|IR}(!j{;`4JgFW9k;3Hk9edB<$AAeb6 z?G&|TZDfd3mR1aDkL_`*Wa$L)>l3c-F^-2J()ZLx0HWu70J zOSj=EmpuI`JU^)9%cZiycm8iJxo?1A$(29x76#qHqo2_gobb-BpvR!d>aktHskInrf8)TjZdmp7Yd-Xd z;+KE*)(3p?&}SX{+hXOoqkr}Eg;fjJJ>j%JU-e(V{o@}_Klg7Zj@|ml)1EtfS)=)_ zzx3=p`IEtqZaX`D+jrkLf5!u7fAQA~{@?j88vOk!Z+OcQTh`t&^7xUDJnEsthZKU7 zVX!L*s=KJq;&^3cgL_nIj08cYx3r7$78|346N*(SMM+(^T{Hj>9@BHZu~H~#K&3PR zy^JnZw3zN{a60IsC!)K*ZaKPZ^z7-5E1ahbSBvSc1*e1V0ZJ4l2kMridyt;T8nmcN zvQFWNdjRpb_PS%@^#HC`ksatWa~`DPI#5vdAW3WD@-U7`5*CV$gSj_pe#Nl6SyJ3N zS)79w9ds^Cg_Ka5%9SgSe3%NmL5qwgOm3&Z3;9(G)4g-l%N31DP_HWTgy{T}BT^_P zQ^ZxGsnua2nI>3BHgHWga)~QYoC>3fk%?UydiOwapgTE)*y*q~5f-`)3072JH}A|bmgOY>@7|0TvJLm@jL@gDVb5s1;q4~r_LxR58`p^ zq3)g>riZPy{>caC06jO(9Z5-6CxVSS>fzOBC}hxg*kHhrbw#Iuo{YQ|?6 zyZ}CtRy9N-4{1rHaRkIFQJBnfPd0N|A0}Ir!FG2~w(`*H!w*)(aPA?2qe}1On$QY5 zRde?%FLlK#m5pp~lpF=x`l#eGh?1juge~M3nc1W&tKm>k80s1dhYIn4Ds>-m)V+(N z#$>juBbBf|6vW3sa(cK>dqi>M%&Zg_@2+;&i)V0+Pc~Yoy6o%M?-XKGjcVf?ZmLFO$tgtF zZtN?MPba4m>>ur!=`NPfoU9bfwH}vix2Nf|uN2RSPXl#oIYA5*t+%p5Z_Okhk~%F^3c?pD)3NHY^qGOpB-Q~jqkv76{LFX zrA-Dg0-hWSjG6ecj;>_+HR#ergR_3owB+A04KG4;RCsZZFPmhdF8qAtZ5TvhH1|_epR@ z(`c1r>{Df7q!U_-A7=&2IEy*kxchjdSFw zyoZ8Rk4~O+RFbCv@e>@~#qxX{abBJ~38I^?%ju>-VR{+YOrB35oIDX)%g9r-B+n=6 zKL2>Gk|({Em#5&J@-)oRrV{Q$o<`GX<>lFi-iJKJz!G_)#wJgdN%B+)B~O(rlc#Zx zJdLd&)uWSV`NrOc zy2hUA=1n)XbW@oxY3oB?mMV>8snSW7DpA(fjca6SJO!y9oh<28rJDk@+j>uMH?qWb znJlj)PP+MwFnv0~MRrr5FvZ0$)@y2oxWQPwFuls)Pve?NI3=7sSrVS(GTc4X9XBLm z*#PAcR=bri(X(`$R36@0im9E$di;#;q-Mh!R%9R)nb`oNX|&4m zQ;Byrpbag>PXpSvskhzMlCu~n#80o& zpa}jMByU<#5WKR*DCp4%9_uZ^3lOKuXpQSTC+N2dK^I+SrpwoWf-Y};H9Umrvv^9M z$%T4&bIwMz;K@AHJl-xLlT$HiE&{68%n|d!tHDopfx5I2hzlCQvvr%N`?f{^72gO1 z?`Q;uINDUQV|B||+-CEtLBw5`Vqtu(`=Bo)h#q_=rw0Os=}Wn$ zN=^^;a>B`T$#SU=DpFMHD|DNG30GAreu^p;A5`!TAJh;>n@UEd%4u5cgBnF6m9Nz{ zbl*OxvhS!<`Jl{pSe>dovX?5I?4`<-)v@tS9UE6csz+DHI0&j^0kS$?>@&TJIPWvP zhTtMu3KXWV=9QcD0!+}$kTjK;~aS!TS2NvCr_LN$x{I5Gck&PKC+mQ z&5D8z=exn2JX)AE8`6ggtm?~-)&9pdO9oZYr z&>k8uAhW9lGI)%0G1>eVhpk)kBI28G6Tlc4E>?@i!X{YwH+sX_LtzNgLP@R@@|%U+ zxL(1xC>W-KBrg`=?E*ML8jNqHrwnHQ$^|UNB`*=yTMf$+rwS)81sbLTBrhX4e(^D1 zRGQR^mA=8yB?*TUrngvlx9|_8kjcwQG#m{@@hb>SKYq9rR!i4mSh||;5N53@*@k#8 zx9UEB6W1Y351s{jw&$G`Gfai~W~CV}SIbx$OPMOca1;*p>>WLTs;c%l5~D_u3|~ct z@{Sa_ZMYIvE3PhFVQwJS7aT95vgLpF-h1ytJz{ppq%qa&BVR-0T{!{Nj{5ljzWlvI zy;=GD!fIcx{B>Xc-hBCc+vT^s+U4)B_IH-QHyj%9V0ho(+l==T*H^X%%S=R|U)cCCU2XG|M!;P^M7ZhbI>2oLh;EpEkShk}4{d9b z3dh(0{*K~d zZy_*!Ja#~AYP|C)-RIxORpT8rL3ZG~#)hK&kmrGF@sUFwwX_U*-U=-Zc@$}e#*0NP zZJsp}#@*Y%+uYyzY}T!I)Sr=0*tkvA^a(MNx~sTvs>(f}@hCYoA2)!zwu-HZw z{+=Xuiwcq|YPf7RlJQ^{Hqwy2#L8|YUUnmKS9O~QFod~U+_G0TVr0Ej0@J;E@(y^} zyJ}%1ni|Z(lXn8X%Ma*{Ib$mCIkllJe^~ZHfAn_2L$C?A^TYZFR8JSd;HmuP2>jZ^ zd2Idd1*TulUPy5|{4S>00$vK4y^uo6UPymsFVqBNFVqUnUPy@vbT`!uGmp%45yK(o zF&uhyh68s_hC=}7k?DO%On&3!R~S7z9N%Iy*OjQYQ7=wvk{{6k+Rta9rsi7PiqT`nxA|oNVdLE-XnsY()Lp+oIC&4y*=|yY^IziGHBX0; zyjLl{YAHTv*U#J4LB42VrO_*yD0v^qHvjN`0@fbIhuY)Ub)WxNu4<2XT$8olJ$Hz; zR8hV?PP+DJ$fHfAr9EP7tUW5ywa2fC*t*n;lw&qzJ+?f<~prJR+64v7uJTB zvo0(+7A8=uU(mmCJbWims-BV4N?x`}e zzRJXn%9$X8RF6*ORy&mw!1Y!5s?1|XL2#h-XShF1ze(KiV0F;Co*8)lGhCua-v^Fq zLpaSJD45>P)y&@J^C6LYt{(%F0E|+#TCHvE)3d{f>3k=fcNhiCa&fvwgdXFMiu4Z& z%|3@*!&I^LnS)&H+-O&DMe;FFGW3sU=#$JC3U_SZxSwd@PCML{Gs77jrVU)Slhq9L zsSFgR-+^$LimNdFHrK2_`X1rr)8Hka;W9ilG!%c9!1M`7O63l#L(L!SKL0JQLqlOq z$39sb?%#6*lh)Wgn_WS`ip%S^* zjOVy}@?bzyC+8lL&jZ08n2ZNXyS~8VSd8;snSOwm*M=S!sLv4prFMLA@2b74_Pl^x zd>xKdN9tSuU3J*_GHA^osbG%s@xI=_0(^LMa%5;U{wl$~Fcnfc`5F(v@aAZ7d(MDH zwSTIAXmoE4yRkZJcdn`*mZw#l93QF~t^S@| zo@{;cz@fU4m62RbxLQoUDav(6`TKir&M4QHQeHW8T%PjSWNm27QSNr7uXZQj616c$ z?Pm*T8b{hxEzqT!vQ- zt%|=(03EG+9bMJjqpEZ|x+;w6=uAidQ+1sxZg^EVw0iF-25oh9wZry0x+?x2#MTe3 zal#!%0hlXmkEPP=^wr?*;} zE>?S|cI3-qZ}W%xVj6Tb9qwhGtIbTU+SkrMA5rbAZ_D%9x1HC;t@2D-TU?;w%|f(! zr)n#8S6PJQ2%s52nQ7^R2MiA^tQ=mUj?3(k)p2!2{6nO)FuDjl5dR49#Ie{6{hiM5 zeCmaPV{j?qVed;FOQ-e#o-g4(#9e>t=dS0nk^3hW!GFOs%{-`KO7i$e@q7^Q9gE;v z10(pGa&R7b3C`Lle%mpfrcUPGDJBTML*Jtx&Qvz$lf^B>cdA70{q1?gLD%|GH4ycq zYBcIcr6KA^WrD09m1USo3J_xwQSrC%GClHJoyEWj=CX- zso0#Z(+P{f-sm$L!2D8VjemzXb{SH6P#)WcTU5}Eih$jC2| z!Nj5+E!o>ktArY?B){Pj-@|2hwN#I6O%WkmJ`*)Q#R&c?24n6mzlq7jQ_d}#XhYqw zOa86?a5{oZklii(tXQyS5nK*K7xl~ew~~6t*h=kkoo|4 zWtf#sL|9idKEu)E@G|B_#rDp zyXWBNIn+TM21`@&fw1xK$gEj#EEU^%;v^QQ#xjod)cBn+g~IGkP@GP)aCgB`hU><#yfCXq;0XlYtuw_j!eyWh@jRXGtgdn{sT+dDs5{ zG+X{f@pCt^R|{ltv*oTndiF+N7J>}7S?d<~D+2#r;D2!Od|I;_!fHA+Cr&fs3?cpw z{c^I`u%&BdU*-22M6n452U1ebqd&w?w^L6bVRs#~`^Jw(9zsvZK?SzY3zw2E^YsP#aTC020uqVL1e(!Px82l_G*U%nd~ ztXHGm)j{jRs>Q4iL&BEi8n{Wyh%%$m0wg^^&D2}Stvzj)CAURM;|iE^w_Kz(us>1Z zzO%RIwq)q>J0Xso>+xZ$WyWfI!)A}Nb8T~az%{m!ypIdFGqi;WjG!OKByJVxjU8PdrF8$8Ba%*&SKU7!g37L&Cmg??sHLlkBnuWVtkrFv0h29WpaS%|oe46*J65C^;%HOJmS2%# z1dURD2EGmT8guM^RJ8wlH1(ig&gT;+9eQyixXf|eSWLy1UZ|p^7pfome5w}n`BWVQ zx|^y70#Q@qCs1li>;%e9iJL%AQ(`7iX-d2VdYckgre`J+^vntzq(SD42-DRHd*X zrb{=)$-<&z#5dWT5i?=q6Y}UDq;Tr4Esm3qnseu%!cIQk0yH0> z6m^qxeZmWT_6xj%sA*r<-NA-ua{_KuJ!^iS&WNhyCx7Jp7O! zx_u_`VdE~fhes%wy6Z`Vn<_#Ec&Gp>h#xndtl&uV6hjeqI?KhzO|2(4ZW2ms+~n|e zwINaM$R}xJm|7AEE7=b*ZP~d9NatAD@<@QQns)PrVw;RL^xsgZcd8{e7F3FdK_yJx zRb^>1%& zVQ;iYZEg*vaPqe37`2>C)&d+Z4VB^p2-q}_YK#>^&9ii$r-;QNHoH)tlePXm-%+il ziej8S#A|EjIagQ94tcbxw9q;bT0gIg`ANSjjTbWl@@4B@9jXpav)n>hjINVcVjg^8M{lX;jv#I6ea zF{8D!)J3)uCvNm;I%vdYoFt`ANRB}>CJTl23#?dG9yYujA3XZKIM_MJ=3X0V2_rY& z?Bj)ijW>@E$9&!PHO~>Ju5SCnc!R6kO_p3y3?qm7{cyA2A^W=RbHmL(KinJ$s{_r4 zi;Lu<;pSseQ zWU%=t(R3vl4C9TiB#*adtf=9^aH#5soK=VHOETz&oP*hXYFqm195gA~2?)3|rWu|Z^(H*ffBhX&P-+#djAwxY&tX3I>p)naZkwheBN*-k?q z{N2HCD@J|@E5R+mr=cc-;4eJO>A3~J&P10R%gxi@=|?-t-k->9cKGb45QhOWpIs%8 z&n`8W&#t~L^Rdm|;$xd74N^TiANvsW0v}s|{8;XD(9Onj+lbRT?nh&3&n3J!x>NSR zhCt`>%uYhPDlR>e%Ra_IqQf}o(YnoV=c+~Ahe|JP93*(hILHu3n@YC)ILHVZrTjRk z4fVBvv26cG67Msq^!REnwvOm8C=FF* zW9#$5V*MeS6I{Vh%iTW3?}0K>VY-7@_9NQ$v0QVV-{TB;A=lLPdk%0ZfTY#swf24< z%Ron2QDslmZTY%M-{oDxv+wPe zXN~t#OWzyS9dEohx}5Z$Io=yFN1{b?UpI@bsLuCBhU~dp^xkNs`FPN0>1$y!$4OqG z7mL@QnuQax#yz^*xM{MBJq#wx){w_Mpa$r;4`ZI;QZpfiXBZFYFvsv}%T`g|1A>S= zAVc;Hm)zDbJRn6n4@lWNCN{qeCGh;%VCot@=KwaEYF=RpRI$UAYGvhCCP{u!^V-tudPU}%70G@|G5TuAZ~0t%fw_QMYi*IQA(92=s-exd+6;J0SGL?}>$7b) zw6!s7TzMxJ63>?0j%Gb#NmM5Jl+t`zA2`1h2p+>#WsmJ8a#Ph@(!;)=Bc} zGo<9|Gh{b3&m+shL=BsMU4VVaE)X>(<;*;qNx(dcTc!y0=*%NyTy-k~IP>_1Fn%D4 zrQPy4;@PPch35XKK&W-FQG5ay4WY*Y+1q*xRBGDmF0>?uK6x8qQLnWXnHPkgP#2G{lythcd`+17{#y`Q;1h)y5GfcsDY z1?`(MMmH(_h$~yYDI}F^t?pWdU;zLJWB>~QI4}cPARBdS9pEdeZ@L^?Kk#IP%KCw= z@1-8ukt-3;kl|GC+}5^a)29GO*eA9@^G_A(ZWO}_y!kYqLzp=xxSkf!)qJ|1b67@$ zjj(|6u5^3xWnn5R$%Du+;ax(-wzuQWxIvy+)7GM^bf2H&s;xyw$i(&T`L6M+D8IXi zVz0)48}evVY1v)$DrjkMts>b3!n^)wh*+xY)InGh<2qwXP^%v+%om1fs#W=MvcOELSDmem?X!-Im+WTn9YS*zyB0irW2f_FS%`T=8)wdPw zwM?WXP$#wUP}v7$Dr*4%yxekHZh?1)l94-*V~XDHJR@&6(~byN++8|l6j*-a2qtSN9H@tBP*@FIX#?z zro?8gA>BnVOa(}GLN3`tT2pKqRK@meE1eYkYTf6XT&38Xt?$;k4T5{EKEr9XVU9MH z5UoBELegqQW*cverqL?LybJdmZ`#mOd^FJZp6wUCsO7(kfkJ$YMcaJfag>o}W;&(P zNT*aDbm&;Hn#M6YWb6c~9-R&$a2aX=;^Re6n?x@|2!4|&bX6}v0@SS_O$*G+)JKraw07<CA%uAQlu!z-|h;Cf%y4v`y9}@|IVa~s6nDcfSlUs$H z)%aV&`DbSo*s4!3wQSBIo9W*8LZx~X;j4fe{q@|bl4|33p1zVZno?4-`F&?LG(hzE zU8JD~%_cktJdJNp4CkLu(A$LP5lo(j3~Vk_qavHi)QLDsz^Ld2y3IeAt42jfI$LmV zmN=pV*Q>PqiCe^K42T#@&U84?6udnY=Ic)=wDIQvqrV)NauDiZJ13{^;UavJCup- zN8VlS<#nVzo)2LjZJNqycL!0~iy2-73O7oyv6b1IsO1hES&11|EjXMD!I_-zK#*aW z8H;!gw}Z&33mj@Gxk#ui#c#3iQaSUb?ln@U8*!T3l;`%bq}T_(I_Yw9u@KgoSlAjN z=^(sI0B*TWgQaQ@8x1OZYul)kY@>nL9xgJ&)~y*ft9Yw$)}mPFXbYor;G*vxS$FKm zMIT2Z*zcehye*L-H=Fq zr~s}H#3Ps*Nysd=+$LpihL~;7ooDCs5GG zk)-)r;!w~VbxU8(wQZtolb6{jZMqZ@t*U*a?(;Wr)v8*ukSBfuxv_B_pr0KvLlrq> zHq;xod)>mST1C>rXojy7u~gSBx53;<-=1G_3+G=0B;Ji=U1XSwzXU(HGJfDO9~SrP z41_Ki=MJHH6IiqOTJYiuB+BMz9;3QkQb6sI^aZT@0+#ayWRIjTAj8+JfNqbZ6|kqH zfMr)e|FX$#BYy)7gsHCX)wC;5W2Z!av&HFZhyFPC?F5{Y-iE;})pirzd}`*ao(o1{Do~Wq+p@Nr=56AL%kKZ0%VG&^ zTtdhijmz>$lr9rUOWTg#VzVDYz&EHV+4pBj-Jj4p*aM{ z%WhDr-Nb2Zb3&N@3qfaSo&v6W8>?YR%RC5I&f;5ipMMiqjc1^w$h7Z z$V#4#qO2rVf^z%}FkMZxp{4jLpz;+n-|0_(YWYqocp+xkk@>0`e=-kc^&=rtFZ0AU zO+wU*l|4xH=;{Sz)r$b}E=NcHW4xB0hom9KfC)sq&F3EuJ2#1KcDO1At<6C-Gp@~&nZ>RioCR@YzO zl9e*=@H0=LjBsMIQfZ{iDv#zdRHDq^G_H}I@f4(bbh2Y2L9!FT`I{PhJ{vLoAIF|s zF=hYfvF9U6ylCu6`84+Z5qDT+%=t{I0@D+$7O~+cBT-t-^Wa#+&-aOf4L=JuRXIHv zUxn}I;8&CMD#oDKhy)Ic?5`-9tJq|E0%g#1V>{F;k&PG=&C5hOKU7<5+t>{B^Vq$m zIgJ<%yR;OWVS66CuRNy_qhXf~TWv$-{3~~xFS_65)CA+FTcz$Oov~X?o(1o<%IwP^ z?Me_WKPv7CS-1wHlb0?<%MFKxrqWLyy%a4s4i=h{AXieRc7*R%BiWRt4NU81oRE=!A(GCVa+!eYC8|rZVgOL zablphlYwu_P}EJDSpa|-Bf_00{Hbsk<2g4U@j5bSJO?sY3uJJ;4WEo3%B7%v?zW0B z#*V3J!>+*|`t}OMFPEFRW#{2TPC00#`y1}7Bd_C0nlWF zPYLHgoDmGu4-rhQ{+^3Oml|KC!uaCrVthZyRmKvX#_k$BL8?b*cM+iMt^m&N;^5;; z%;LM820h#B^id*Pd!72jAowi5aQ>4@BYnakeVlN+1vQ?B2%Db*R;x_1o>ZZcME;g< zYn|wu_Ba$z#u>m*kj6&F$@59qf#7VOA!w|;6v3G}LwErQ+D$U|eQZV%lmjwFXV%`N*JIMd`?jZQcaIesc3+MBx15NCkzW9Bou&wq^T z5bL2(H`}=~XoEJz`2|r|;$Btz9rkEbi6M3c#Im=kj*(nZt>a5x3JVVC3?gbJ#qkWv znlQ?c1`otK5uK+s!g?PX|DV#)mzrS ztx{;;ChZ{Aqif$ZVzqApT>EA|Vk;WadD5eVsrd-Af2%!kijM;Z?c%ZAfmt{vJ_8lOsD zNrLq~Qw`40bd{+w=JdC<+fR~-dpeOAWP{O47Ev$W~w2-X`n zlFi6S{AO!00SbAd`23I3To0xUJqkzpsFl%uVzBc0etclhv!Jzil}(USwW7B~8hXFwHBa$g^V+KE)D}zM=H`uX^Azc> zO=s_e?yx#=r_uj=x|#yt2VIR7{yE)c+0CZUd-&+bMdUDfu3L@TR_I|C=+@$^QSjZ> z73g%k%x#^nu0W~V5pAXB91tALihl<%|23rP)lk@r1@Gj#T;280lq2fyOY}85?xdYn zOYRH=H>1R>l3OUn<~=mUaxDWL0m$C-v(;Bg_fetC($%Zbk>T#1xigJAo?T^Xt$Q+y zpPUFpdp9`AlWuNus!-Q#_jF^49JSZf0iT61{n8DcTGg|=S~W4T({x_~9^99J-QLvf zCChSBE&m@?gJmV%oZg_9B|0W&`WZ_~q;<*;cnu};i|M8Cr(UnwbYJq4Oc=G~OaIZxtCn zz~jjDIx=6gb^nV>R9S}3heZb`tkQU!==5cD`W&5SLC4k8wQbECt&Z~cu9Nt6)3RXr z0ld8%wW=HLUsCI}YOPl7-(9Wkt4?eCs?%D|7*q%7SGxA2GvL(r(aB)^Ej$LnSGv~x zTbG5iKIf6@EAR!Z&yfM4&k@&j8H3hkP~sSeZW4OhN6CDE{e|<#;ErTY;t_=@#4is= zPNMF~tt7-rRM@#LijfPG_yup~&RG9*Nf-p@SpQ=wzvk`7e-}RL^gCZ3C%J z-#~5C=*~rP3chf9Wid5|_x=Qx@=|i;rR2&v+2X3c0~R;Cm#UVp8bg0!xY)x~H=cZD zrjLM-+;;G(D;MW)UqW)g9c`syWLR6#wYPR5jn3;yPX0 zqt{SlUO?~WxoFU-%a`z^g>DY`*fvktg_?U=wVMHrx*Hb2EyK(*b>I)Dam;k**-*dI zoxF$Z^inoBG{v)VQJW2xAJ@9QOe&s@o@LnRSw<#3xyoz%enD{Vxxwl3{WJ$JU;0tf z!DW_5&hb8h501STc3JLI-!?wz5Aa+Ypt(+B?<2BrVQ77AXWv4fT_d{&W!7Xd!G@O? zOdTCWAGLN!_{1RkSQb7thh# zlCkoJQk~F;EHp-lm$ATB61vSos|bC>LaPaV)I$3a`j~|fP5fSEvQzWh=h2_L`EAw* z7G8Xrt-G}Rivbe|!FKZR#9LJXEjqWiWa~>=B~=(M)j0k0h$<(0zEZvZaCdDun%uA4 zvyN}QRlC>T3!MvYe|@!k&0}d#RE#EEqD?=kGKf>3S}nc!vQ3{2%P})IuIxp<|I%8= zMS0hhx8>VgkV`T-!ub}j=qp9!R4J2%Uk23!!C!_YPf#|LZb4^JR}0rYmPYI3{c+?W zX?(zCi`^^+h~NIg!j8dU7b%Lh8$&C>&I?|6g8}L{hHEZvfp!>d>_!gySqxkWaBMMf z6~MKNfvW+=i-G$AJY+F&e}J<&;9w9=JT+W%QN}8fmlbw6k>5ZOLSL7=C>3*C)naAx zQHAJbmyge0q!pk94!LMYAsSOCR%oR{YZY3h(3nE26&h4%KSFC1*q^|TUPLV64F=H~ zrr!78R_xxk>6WN(az$7uzbwW-Aj(GSiui5D%h%zBB`DQ3*I!IsRBFAG)u^;q{oeJr zq3HA++j>iDHvP8NH+g1MyRlr}3AZ=%eZj4Iy5Rt;AU?f$L2c*EfItSWUv%?iE%$W5 zD-OTs?Z5rmACKE{vwd@L|3g1(te9*LeXF$RXwa+08-}~<=<5UZ(47}93VYFxVZI_4 zfmQ9kIaA#=o4%JRnj`j+XktT*_Yqw!g`wG}h}zBlTL1v%bpQ)wV{jtQ&mt@U;DQWb z0RR_f01E)vkpV1_(L$8yc?Bs#N#7?lM|_%*;Ye>}v%X~n_pkgI`q}!u2Xm)C51!0V zb31S4H;bbi6yi_NG#a1e(z}N$3D%Dcm-k>a_~v04e+uwawcPf!dS_oj)W}4E`SBf! z9O!9$S_D2L0+Y{BOfmkfVpec`Ov}^jojhMr-SNM=sP4w+lUc#(cJeZ*qPCma zI~gmg6o0{`DmA{SR9~`G{Y05l+dE0YOA}Shx}QThGN?W*=#eeg{MUEj7y(!Ln&Ov9 zc^zu(T)s2;6r+RHXZ8z|uMnyA%6vgl!T76O&Yab(i9=dBb9k714Is00@z>kP0`(!R zZ*b?`ubZ_tEB{R(XHK5ulCPTC946laVk?usO~7YnFwKX3N0EGyVeS%5P8fyTjlxKn ze3yV*PR#O*sm)!(x@LIf_mP5}xsGAO<{lc?*pD#R{ z*iaoeK=b9e0r&dz5{3EJ9k&K+b}P+G1xR(RB|iX=h3_Cdv3OqX{=AbD>1E!@U7Edz zn^GqBvW^d=DwBaRy@zx2a5{T~Oo9v5Hs-&9=j=z|Ungi>CO&!>Cvk-iia#s1*Wasz5)4RoU!}&W1dTIZFpp&+8;#^rhn_fPb z=cVr&MTK{bKh$lW7gzSKk*Qk$u2Jxgca4TP+ElXT-!&RRqm+Nw*oH27*LcGXt#^&e zzvG<*ZfXGY_D(`2(K`thHhULg4D&9+*a=cSx_1#w80%ex0PbBx*2*NuV(`q+&aq{l z@=h@FjjQ$SmO{A3)dF%%H~8*dp=&g)D7P45dHnMw`o;K~4D^cGBI4=Wn?y|OBAe_< z7z>(zaIX`iSza{;91MLOAXW+Ar84iv)FLFkFzn^7*NT1R&2)W1*?N=xW>{3)%C@wa zk8<)8(f=uzS&WuXv}$Hs*>wdvVnb#>{u!6)<2+OgB@Oy>LH|hx>OPXYxy*izN_JfR zvoya@8p&~1org;^HpA|O`zpyVmFQPoCNC)ushj^2ZV+E%&Ly%L$@r(pY_TA0HnGP= zEvmpJLgW39P^byGYn^w4{&I}TSJ}niY3)G z`2&|iiRmWFSDa7lxYGtjlmo)Jo;bw`i^k;zgxqb=ZJ}s+$3jla}2C#taba(JN zdIN0*a&DUpnLQ6gFI+*avvhnn8G zQ0bY9dVE`~$G<0bVe@+Dv0m1mAYy(1mr14E%{d#Ir|JuJE>To=yEMa^B@N@>0b@>P zKedT9!Nf!D)ioTi2u?dM*z_5ii^e-A0O6%ICE_M6FU>2{=N^O5(S=`G-|V&34?WqS~Kjd@4oG=3(u# zj7D@h;?9RJ1P#ijKU&srMar?UHW*>uN*6T}|FsQmgaZ6M2Pg=zHwP#R5V8}tMTq&X zMz^4hz2UTrYdwhosC_;o(-;c?xGDo!06>}nEC66W16Tk+GXq$lvY&hRc?4zJNuBw# z_KSoPZ z@ZbgfZsj+t*&U91GxCmRqCz+KD8IVF?L4?V!aoq9Ll|2g;cqR3mCGairG>C+d4zjg z2&+30>^M3xm+faa>u-QdTZY4!b;r?3luj=Au_j~Aqw^y4(gUt_65F}!k6uOR;$o@G zTy9DrA6`KA*f1N+y4K~tMsPcH8fN^1BRB41B=yuRYqKIb8HRQ?k(EPVr+`IusLXX3s?}HR5Z0%u(oOcYLz`g^b3-4!l7U%qFpdjw|QzXiOpJ`U%!o z9c-9lz$Su)DkAYuRF8TFE< zZWQ}_1pW|Y`+MwEgR&M;8WVm}_aJ|uADEm9!jFhg* zW-zH+vVn`!Y<54JHt+cX{&Ka5w_Nl+w3C`^`*~r*yn7Gw$DkHWg z`J+UXYCG+u5myJL@^un_vI(S;EeF4>-|AAYJW9z7;98GW>2R?y-q*A3?7}Ht&&s?H z+4EW`hJ{n&pCboXUuClx?ABvXU;H4_JMr|yhl$oIjf>cV<4(PZ4;O5WgSB!q3{64# zg7$1T1WI%S=vxlda?$}d%GT(z{ie)?N@)r|$UGijZD-dfs(SB|t#v#QPJhX-gd7LB z>rdmTQQd*n`BenuPi+%ftGJK2mNW<@6`v zowuxb7p)DYmcdpcrDx7x>kA%omSgjjka-C8Bim@=Cg+K7W`@M9gBz`MaNtCj2TlB{ z!=jAlZ@@U&Lvl@vw_fm2}HQVIDTx>s{YO#J%PO}+U)qG1% zq_KUI>v2YgI`JENaJlDzZN5W&Dx(~8ct>xF>Jz~;-rSj@lYq!=~P@%X}40hY2&h9 z(=t|zx;E;}Zr}J|X#4fcsLCQil$d&0yyhHf)jpshX?}kjDqNmz?2Y5jkU? zD(CE2<6NjjQ)~dT28gDKWgYF>+2wiNJ|y^IxyzcG+L`32K5)(d(WVaW%ciz^N$Va5 z@y70?9RIX?^lbd^I=Ip_EAV~ihS@ubl20C!^?G;~s>ytJXBbO+Jm!8nd$WDXkugpX z+!?I;@4)wEg#RA+zUt-J=@E?NqOpzS!q~2xMrD(}eM$ z9N=^T4qptI%>gXQmK@+=O7dU<;;me3$-@CiiLe%K!p{N#@FpC<0swBz02To7x(r|e z0I$yg763p$+W1zcmIvrlkWbCyVqR> zo$fx!>+Y|CG<7lE<<*iO#owEyS-HJzQ*`pBkte%^^<5LzccyGp2Y>#wk-K* z7gQ3-xA{v#sJ7sy+IfUSTL@#zBh0iARxXclSPNm*@(7z-2&jp^qWk;<9hGZ($1et)xESz|9Ny_&T9tJy^N||{- zBL_H33Uf{l5DM^!Hejv3v*M;x&lWU(B-dJUw%4ooWjbL2l;r&xzybh1kO3?J;DZ^! z0sxpVaC&8d%Ich6J*BNze?S=0tKW0?dZnP#D^7`F32~VI5lB-P)2kzw(JQ67pL%8F z9nIu)O5OaO@~bxmH@(UuNGuLvY^Wk0vy| z-nMnk^%R3E+(r#nM3gKmPWd~TNr1*4-Gz+UuU*l-7)`=Ea@r!eZyQc={ zK1BX=U*giZP}%u2RYwN+IL_Q@-Nf-Jbsy)FO|Nk{)3rizRlI{lwM`s2D6ES_fpP5@ zV28C&U(~I;$?Iqy*FzJTgxgCnS z*wLQ*q~b2&!R1nz`&J8J`4#4VCcve_u$&8X_qG7W0#-r{PDm~%dAWFr^l*Zd5=~Br zsi@f^=IOOAfdefnve#H+Mqa2=QOJGJR{o-`{O><)qX}(sHosc z>z+J_6?l)~eI8o|7;yHN$~|TG@wi$;s+c^16rfxJ%Jlb`Yw6CPe^%-lsps%Y(hoOh zwJA8{A~)xvx6@CAh~mU6?~Zq@u5+Y5KOM%GF+M5pEKE> ztYC}bT0O^VC7vU4`p!M?AwQkg_Ttv$TC|J#U3VVE6%?(}0P$*p3?84&@KC!Up6FZb zACEq_@YE-s7heh5&S9o%hIv2yROQ?|`C!hSdYXbP?Pk@A%C}9&^H!rx2lVs-c{-5( za*tX>>`HZXqxO_IS-ZU~LciHGUv*B8e#AGgWt!gOxprIPU zbQGiayl-*PQ(U^K1Kitps={xyv*n6P;MXQjI0UNABe2Q9QQYk|=0MTtLs5+{qlj+! z1oQ|lQ{N+aifE%p!0>wnXZWFLlrHu>Zg4E1M%mUmw?aV0V}$?2sbgA5eO`iv?D8qIqOFNFVr^aD>3As6m zt>{_Wsuw$`*x^}lTR5*m$4wN7u$Xe;ot0?q=IK{}+qL@Q;da^66V#J|ObEu^ez|!PmHnsGs5HPq2=3D%`{VgjT9rvJhp5t+_XNC2eR;Zi)#Qi!owDS9JkVoUCJ z!Bl@V_asnC@iU2?h^E4bmEAZ%SL>0f=J*-~=ohZ_fTjg(uIPBm)udeJ&xPr8z>shJ zT<+dCR?zvz&m$z?`1#y*xT?Z0Q22!kE5{cRaOY3I3A(#XUP|9v!ljZivdn_Va-U3@ za4_1AV3>+Zd>xnMSzMaebHPUz%H)HY_|$XqY{k4-F~&vm5`r8jZ0B-TnlDwvm?f!K z7S{RHKIyAvNp1_{mx08teB8U26S_-lXa*52EZuk`4kUj_N|Z7mn0_Y=^v>r&t@3cZ z%k~ph8mx`|CPYt^+w0WEf^e0i$E$wPvx)bKwjXVUcYd_QK5=;_5G(2ws$@lGMhls0 zUT=)dR9E=ezA9WT6q>4qXyW`8VZ0mcu(0;|!_t;l0G_&sck@MkLoRqGY1!svDDf*5 z*E@G5isL=+p}>+A;#Vo^2Uel6GGBDY!#us;eXg(4iDp9bYkQvC;dl1VZ78=~jDpVo zGu5>FMT`#6jBDs9R)>Wr>z2Gm2)q1@=Nf%8rE+fb`;;!UaFf@jwxdL#iSrA!L-_s$ zmMI%e7^-yN@Ro_s(*IcL^-CoGCWTn?q9_FaXC*xOo{tOp7KIQq1oT+` zg#1BkkI;Do(fM&hRNqt$3v;KSXEu;BqtFaJAX%QHob#IA4f&!|_uv^sD>Ac|psi_#DhlB`VGQMEbO^bpLWc(_Lfv z)jIR*cKHcPeveu%zs2b+zx$nz)duSxWv0;r09IxI3jknA zr^B!SfYlkm0s!{Q02TnSe+IAsfHfJw0`!^E%jC_-Ugld5u8u-|6UM#+y9@Qke~Rxw zA@qtrs?U_?Za|qTlOs9k*i1CHTTu0A>3Ein1x^X$?~*!<@8YUeq%uhLL@MTcuT8w{ z75%q}k%e%6nDl;`YJH}6?w!(I8&j_c!@be(Ky}CazZHC}T=H`u6P!gg(oQ#R%Ui8T zTIz1)d>iO2gSTRy8>UiEeP~N}h`e2yAIQ>Qwi86QH|ls~a4q`g{kFd|NhQDSZ`{4# zrl9lN9_8mW{{f__3x3UT9?XsYHTb-=Y)f}v5#Kg0#F@r^pizqjl$ zCqJq#S0{(lGHmDN)W$;mE(C71wz~CU8urH9IX4EjkURN$u*;!`v2-AZ?+6>FOPK>~ zci1^H`9?lAGsU)7u`tlXaR$c1)XIo+FnZ811LjlCtpTeyDvkHV?&iNBTP8n33eFtJU&*kJ}!g?PR zIXPg2BW>PKu%GP%_*s?YtwaJdWxbn~9%a@o`bGMF|IhSWIye6;G=~}Q9;R;k(K3|R zQ}ixvdS=~?eP48U)lEOJ|M*jIa+NFQ^hsg-3o)(M$L!hKYQ>rxYw{e!Ize3wN31t8 zt}2eJJIKBQR~5I82N9T&#yNS028aoxrXl*VmG*e|q)Lc)+U za^GTfvGifovJl&*iD}RZ;HjY~hacI;#_@>m0oQaY44zBA&t4|qmK6IYSC&nN9OT;0 z+L7{A`jh;w3;Zq_eXD`~$(22p7H_7Vwq$JhZ6>5`Z!>`>HwU;XSa-Brk{Gh19lKkB zP1=38ouTm@_;vlDJ9gs(RCc`0JQaNhdU9&kY0gdr<+k-|R?9k0zJ3(N=Yn$`0`Ky3 zT)pGHC2fw6_*#wf_zrm~4?oY|JGZ;l*b2#q$qXwo_r-Q&?jP^doM_}|__IK6Tg=pq zV~T0fHdBRt@YCn{@wO|M*Gj7IBO?6+_*GS+%<&%8XZDbbFebG~&7*i3euX>r&X}X9 zt@@E1=Q~?PvJks=CH4-w2bAF!cCoaA0=b@G%J~#9qcICK3S_dwle=5zAzOJ#8l+``pEg&g5vj{ zXWF~SuV0+b{NDSK?gf@#+?ij=Mwn-=0 zD!#*8Yl^PEX2W5pY_%_P)kmc+M9h3tDuRJ9Rh0jz)RovCJ}PC%qm~w0EK#K$+w{$z zZ5BdgY_r40f26kB+rf6lv0ZUru$_Fo&yM9&xwD`3p<*YXzI;x2Wj?20S`kb@ec@2Q z|5k2)M^2qbKeM&dXZ3NcyuM*4d9{axlS~#RK zKIl$-i=3m@%R+7YQhdoh_l>V8+jH4HXP#{>@nNni3&Z;6R2%HibABa7Cv6dumhFnYz6_` z*$i&p=Z)m`66h7&7eh<5W<(Gbr^?0nB9ct63hniGC2Bkxc!JweiJB~OE>2dNvV1(S z#wUOoC~Qok&hZZc+6gyN@=2oDw$YF4+gHXt*rXnmGO}XAJY(Cj;=N>_K?jj6Y8bCqF(s zts#B<1t6Y-t9Zr)+F0zO?jU%XY#>96loN`vMAed%Be<2{*U>Tdg#b>~;Z9M8)`JT+ zUIj6|kTSS&`$`~D@PzO$OQgql=G!3ppSB z2EpV@5Kg|V%U8H;{tawmXE~o3D`*AKiGv%?^K@U@&Q_^CAsZ0J8tUP0bI|Bej~s4y z7`Gu^i`o(J3cn#b{P`aHgFCoh2JBQY}_a`t7P3Z5_v(FU(g};k+8)^vJ<_ z*~`nFuG_z+$J<ZBE!uwv1l9w>ms(6-E_~i%jnKp!iYR-a&VIhX4$(5JwdE#H95YC zg6V4O?A9*~tRJsvB|)xNECUlADOipb~I$a|_T!Z#>a3RanQw`1a}?I1|@efXO$>X!=;kfvfWPH~T`a zC*KlV#%+!c6G2Ofw}EEimn3S{RdNL4qKA*vm0NQ#Ls5-#J$xIS9e#8yMnr#~=eL{R zrC3+JAJ#kyw}9EKfT_e_7v>ioYr%g{i_+quzxzAyKMfyHa2WPmzg(X!leMJJe!1_n zRcY$8RVP`WZ8nZRTO8A8>(TYum(rx^vjvFho3t2A^9q|$virK*q~L!1$x_F@$R-WrpF)`)#AYh(!SzjUzv3(4TkAVU`U?8G zYE)P?R$nW(rSWa5mHCe2sK`Fnf3*AL`pg4-S8iR!cU1lDMp$lqnG}`DxY+KTr!gSU zH|S8=gVifH7)VByk-mkM>q}GRk{vue(p#P?mtC-L?<(s@wT=PIVE)>G7c)T@6Z`Zn z_TJL&8f)AF1}j z+c$^*M5q%rc8;5>v1>mxU0a^kBPs2e?FU#s-sFthvqwLtBm2=E2IZjP=QP9MPr+%& zcHzg!uPg=cWq#)d-@UP3zV;U&J>kn7XU7XsVsiIf`yhn^2Fad0-2-aVPcA zRP}_ZpqrmVc1sdTbjgpwtj~1sc^77Q35IkexeJVB50~Md$#pC#{hKVFSdP$k|R)g40psi>OVQ(c?u9I8Z~w%WXtPwvGH zBOKwSMmSZP23}s&TrcSOVB=?^`anam+UEmQR?K%$%m!_n1zAglPNR2D!WM=}L>n=y zaQAk|1??4)3))`>a&bFAxCg=5{lOF9-7m-&vBIMjEnu$MT-Yq;t=R*&v$#G-2T~ zHvjaxZ&<}YrxmI@F@11qSZnnui^%4?lSNUcdn?dAPB$x6Yc37yTM@ zV^pZtyBx>e+&d{bzY}Q0XK{Zu_c89--yJ;vfQNT6KS0pt?Sy|amtXPQNav8@3;r;k zMdy|roX6lI^4kuLj|0!s`8v-wCZJzkAw>U|;eU#F+;y9`Q`D*aehh3q`1vtL27d%_ z2Al!o0&;YJ&jO}jZY&`i)-jei1yp(_oBvboYAmtV?!~5TMmDA}sz^(ipkq`qt8?<$6DNtLTUj`ho7x=>WME) zn9eE(4H?4p2!bhlRIzJ`^R~832 zN&uI+18fyQnY$eNdn^Ypm)6ZiY9!wgeK5+|gW~yUy%CYRZsqqz6eUbW-K|03@NctP z7^MdTOf=!%JX-mBtk%2tCauPEqv^%k|EKLe0IMppxbeC7B`+^8h4h4)CpAD4I?}s} zigXYVkdTBL@*o9)$CFT`i+~Ngf?ZUsEB1oeSlh}ft0HSz`|7T)x)%I?zcX{+yDtgq z{=e@ZcysSLGjq&~Ii^H7ask7r1;<6FnqDt8hGUB6XrA4;%9z=1eOeF@Q!c(ckg_9g-Syx1F7vd$lMJg;~aRSBm~yv<2KgF)r5qOX_UN+`#?UXS^!HIO5UyEJZU;ax;cU zcNl-47-1aa(%p<>UAoa~L=9R4!H_6J6dsA1+U8I?7rGjPjVzcZ+>q%{%7>>Q-q8v!S+88>k=#w%A2ol$n{4 zX>cq=(rq-$&d4@nk?a^N$kJAT&r<3kT9jq9b>`rsnTBO^!!pOs5|20> zmQ$lFbL@;npG^44b#1=-0P2Eat8dYKzT7apyrgla%qr_%0N^Gi?*wj&?h$BPm zSsYsD;mAFVt%>E>T4K%ES_>K#G3sENXEb+2Y-vPn?iR6mRKz7{k4D7ic18;$Vv86N zn`;r9J0c28c^cdYO(ACx-g*Iz*a|Z6a_Ao?|HkH65a4SM3#OUN;P+S&(foFZm1|Cc zjZih%Vs504rZujLRjwVB8EUYh>SRvSb-4&1q}HooEi+m=ifUyP)zYmfY&mfn1o}-! zQ7!F^Rz^{+VieU8fV2>5LnE=T1@8^$3=tAZ^zcH1D4aO^Z@Qds5Xk4<@QMI#yT4=7VB077NHZBn z7XJ|z|4$lmUyyDmLlwhd5*RF);&uiN+BsG~+~VLxbn|puBoZ$mmAkU7Jg^tJg>1oh z5F875G&0$7TG-YF=-cX@pq`TG3+})*G5Ea{Rr()kYQg_Tn;NlfY7%Rj8aut<56Dy) z|E^wkXHE3IL=2aFb=U9*EG|DIUt8QMHqL(2oqxXD3+ zuT3sL#^g)|Q^k1=T&ZaxY!AT%nBvjaSPX6N%F?uc7EJQ;;f8RWI!nz>r_w6dqE5|V z_#Lc7#&g0a1(Go)&KaE!r>b`ZM$wV|0?-|X1ZqiwQupK94g;M$T=_@*U*I7gLm#v~ zDT-&@P56BP+(wL1&>|yy2p#+u;PZipOOm-DX8mdqaC;3NVC3)5!13o=6XfVPW-fRR zQeSQ6f~;uH1?gNk7o-X~7o>q^sMNSH&BR$GlyNpDg)BNY9uU-%!U{bpB%+`c8q)7G z8~~qdzz1veFz>z(0ptgs&2|*-J@W+r3j+-91`=PCbZxlv$aXyUE`hurl?l-u06E=e zxuAp~{fo@KibtALdQCL<1?YEh3b1tQmCvFk>yvkrZBIflGHJ`5>dP&FdcAym=thv! zQe*A%N08{mIc^_R&b6H5Lel9dD%Jv7T_f>(0>1*(F}|{h2z-r^nvk(%9o-PuY4G(v z-AaaH{=)3|pw~QJR?a|(!!`;Q>BTEN*9RR&#eCCC(q>D}df)VF$P{lTn%;n){*&R+ za7WWrui?*=ZQ- zJ5UJ~6I{#o6)NTJ$iN#hikPk#5(ui#*RLI>D`I z>>@XchTAvw8@r3#UBUHsk%uU{p15P&uFFAL-Q#viqIW5jNHGL4Rdf(hSj@EEl#UZj zoRF;twGr)0Gjdl6J+D4U*5pGuyk<>I3`^|Ty(SjLnl-T&D7pDdLCfLKwPwX;5aXxH zkQTKg&n{SN^iwP~{S>W&%FUlXSPG6 zAzQJ+LdFoqhlhw?jq#|%Ork@=IkXs&!Jp``>Cfa#qsF!5gvlSrlZTh{x^f}H3>=n# zXfDU&eGgbXqp&*2L%Zoc;D;n}w&cYZ-()#H&bSs~8C(xZG&4TDi1;zh%ogoFNLq}!_#V1e z43)$fUS+EpVzlC@XU6dA#PI%|-!vvWM7G+X!sp>O){KbJX0(iPA%+n%(y01oBuTV$ z&~_#W?Ht6A-QJkYwKq1+Tl6iJ>TcdqtQi0~-+j0j#y1PKkO6Dty0iN)8EuR|SG%XN z#I$>kPi`>no-K~;o&{pNXWL`Dr_j>wX_QWL7qdfir(|gE1a)(VX|cHzQBW%56P}Ux zEcomOpa0<{R(t|Ec0*(J&u9-g=`TTAO-fc$qI|VBGcGH|hfTM7?eiC;i9KlkXmVnq zFOeg6e^$ynS^!;zzxlc?tX#Ifu;Pv;yEZxMeSmnnYO6^qW3KZK@Cend*10cITOQK) z&U0A$yg8_&J@k2)9jtU)L_DJQ%RSp5Z>&}!U=o-PiwGT`YLi9N~b-tYw^CPl>A zVz>{+BT0LES`yRKDu<3GjKH@N9HDTk|bIY_CD7fDTUqFka zFQ6sR7f?A))0cWc(-#e^5JBDat98>S!ZdyCcl4?M#>u=3&#Pd8n-D4c6d{Z{4FP}f z;X8r1tKnh1;fr}2(&1LzhqYO2#1+A`Gft)n5o}&H`Z zw2cp{kXy_vPi}6puROVQmdX7HyV(ti9^G}5jG`ayk{Q?VtuelG6gfd8J$A#}srdRZ zUXF=)g`f|{pPA7)4G)YGd5cXwK|gK)C*e}`@zD%qNy*4Ko&(otzG=nfsswssDY_^) z-91{1q8(SPhOQJ-RN$xX!|fxu;(uiQX&Ef@ZB)zz_{uK8XPWh=D*?9z{3l#9aOEG3 zxCB8P{MG?~s$iqRA>jCPtxM4cVtoBDB){4CdfF3xJ$ueb{|kh#u5=gWXWu`aXdl72yq8e`i)#1Re5S7sqh|gT%=gQuE5oDWM3jqoG(xA{f$x%vH8zT2dH7{0ps zVNS>L5et6jHCDd*`Gnse$hTVfVY$l9FJAK__P5VWh~^W1e<0uO!moEMzZA`nSnylc zSo!Mb6Mlan-yOma?ZaKZRLzfA@I&9#&|d226MiSk7d;aKi+c6Wgy;$kXVAPlXF~A4 z6J&r*qdR0fmop(QL;F9$nGh1?J`;kA(HPmH8`y*k)Om`A|EDAJ& zCq;@7>F{|_gf2p|y9ns;O%dLK`i<6N4vKJVt=>TqLotpdzrx;z?;~(QJTQVXyAO;I zp`;cY92mi*{3P!G#rY6YEHQ$Z^C6;Wv(|YDN{Bx!5X<=xU>ei6o`X8vi1-h19f~V1 z_^_fE8*3}uI@9rn3w3r?Ra z){Z`xQYiQqea+uSP$IH$?Fsvugo^ zuV(7^GUHUBtxBanHb)M^njY=a^m!Bba0V9T<2t?gM-NgE_pt)qr1%Z5x)5WLyXiN$ zU-23gLiQ_i^aIbO?gM-7%*2Pv5am7);X0Q0CD6(35x{rN0J+jMI1oWne~#2Tsbnm| zv4w({l^pJ7FG|iWD2GuxX9h%h48d!r5JC{IfK2@}0zQST7+c>UVn`{tU7JS*h}=6s z)Ro)Z%D_Jhm7ot(;BM@x7&H}elujBpPPDm&*Ok{I%<$O-7$?fUx^ti(JH)t5pY5EN zfL(Z!I$JV>7?$t+89sBEg5Snr3zY9@p}(0vHDEfVGKVQ}y5Ti1jU>sa*qqja55gf2 zPrnOA6_Xp@4Wuc>pQ(=L-~wD{OY9eIi5_rFgB+P4df=SNmCdaOESVWSaO<4WL$1+7 zidzrZI_KzNf|!QrL2sSI$hdiWYK$IIv>vdJnvt1J?DQrgJ`R;=sr9fvst2B);2bKU z4@rm|D#0T6JH~p}W{R0aUZjG5qhK9aF!6#huSMw!&IsQ|P3j89i$U1IB^8VY0zQn( zjCn0eQkx2neJ$$fNOKm%G?YdkdY74%o`v%j#Av0K9%C&HhE?oN&x)J{ktNlglAjnk z3_|D7Z40}vCI4Sg%lar1S2Htlk`hNl3;^fw9+t-r$wjiRlop?g0e<*K#)TLb;S;aX z*3|{vmYQL+7EcuH1NBJ{uL9i+YyI#Wja^) zpN^0>S{OCJ^+QeWMJ7Gy8-@DSTfXlGu0hO5I)Wyg7stQ*hBzqlYcLL^f(%EF0|BX0 z{F)MNhe)}wbpzT%NIMO*^(Q2-+7uQU?9g4zfOE)rl{aZRTe;zV0F3C-<3Pjr5-Up3 zFVkRMS@pqE68SPtza(>yq++S{+d9#gWJESRf2yaEh-`LJ1%H8LqUm|bkh+9am^!nymf@nvK#{DcIigldjP>iwJjuW7;arjLEz-I~0 z--WorxJqHiprVI)+xSpC98qTj@dAF0;ST}X18G1K|IvHn_YdGK_%yfAWn35F_;WqO zptZ;N)-#aqUgKM-K>AiT9zMgMfjB-^nhAU?O9~%LQ2W?A?PG~3D218J7&cDLgLL;f zW7r1}$uVqB|J%XN4*dzRtn(Cht=@>r#Zk+lhe+Tv5D0DnhOcKvQt4Z7FoTWX4(&(E zU}vuPK8!n^Q)3MktkYpg#q4_3cS>Zq5qUbr@g$|<)cFx!S3Zc4Q|HxYxS=IwT0-L)DB8^FT0pbr z54&L$f37~2rE5^{_nUerf7Uyzfc4H|IQ1@SLA{e7>Ybpj_cglSiO}`#Jh|0tAFIIs z0nqnk1rJDdJdT8(;A6P=1T#^Q?eQ{<9eNDdcA4>b?)W+eVs_{Wz^;~0&n^#Zk~&Yr zr`Mi9?gdleRO=-hfn<97tCPm;7^;`^lA~#=~rc0Ey~bUoacen@9Qa z&gm*V^Byin*2E{FPO9)rHg>{i?5Xe%53-#?t4~4;<{3NOJwG+1?CSIRgb`i`Ty*#} z?!)A*5&G~D)}w)QAVru8MN?&tqrGW7~BsjcMV7nlvxfdF1t6G{5ua@eRn24MZGmz`r^I8YA?E{|sEZ*Ivmu zV~;GX%O0h>$(8<{iP*n0Q{=o0CbvWNGPwpr^_$rbaX0a!}x{8;{ zWxUOkV3Th?tl3p1adi zbM@J>xO1;snDL8Ljnuz;{1V01AHP6+)dxTB!gr5fwgKJ)Jl6s}xN`i$CdzXwaE_n4 z7l4zV_^%Pb7}dE*?BD_NTqpGt;_#$ajm16sZsgW~9{|UnYy3jPjp@gRA?cq?KSsr{ zAERq<`Y*9`^j|C?`Y(dI|5~T}FCt?5FQ*^7)(-szk)hWS*dff`5DMZoW|4)ertmW| z-tj0K`|2N}ABAH+j0EDdd=ReacYb#D8hTii6ZCcXH{6FcTa9>=2(mS_>CZ^}_x?6TdllK4ga|s3u~E zNFX>H-CwYE<1UG6qD%Ua*Oh-oNSAa0T~hM94+uR*#kwR(oE>J~dM-(G)H3MmDJ656 z;KX<*&DZbd3-4t34vg}R@lI~O^}Ul;70a&qmPh!;Jao`}lihsr(82J17COXt-&o$5 zhYoJOu@4>W&=I80SuhC8v_|zIK1IY(a~E6{$JA1rGN!&97>=naq@>cf-e5DBFkIq0 z!1vjJx^1Y%xhzdT47W4+$O7X^ZZ&HvHDF_15t9$6_OOd#y{^6QVHx-~9iq%82AEEB zEHX-BQ+ufe13{}jk9uG%HqKE9Y@Fl87GQxcmUPSV{v z!3IvFlMm2hj84*R?2nLAr)R|IBwcjE6Q-z=%uG8yGki>hWmq^8-zkhh!R?S0TBDeD zi17tip`lF?xpl(e4kXDh>w*xd>MDW2DK;v|g6z<*;2PTd>(Y22< zij9mNP&633`ZIpd#w)ec8{6k|?V}ZNci@+Wdni-J4l{9I3fxl$4>0ogCUE?@#scgy zV#WgFk$S%w3(!AsEI=2?IW2tx_hz$ib;btL&7Z2)S-dMB`%vJ;&u- z@DlLjNuZx0ZR8wQJM<~Q(8mZ|w|X9N20O!FSoiuIQ%U&=QtER|(MNj=+9OTl8Gl8z zC#cUcjqq?0meHo)Tj+I;U~PDgX`DRUeYi2X1^>jE9tv2l(TFGh!dLt|{%h>F5XqscQoZ=$8 zdINih@1&M=_)px2SqwX*5nmFa>rrxIZQQKyEoVpjjgEo-G`;8U;;BUKz~;+Icp);yrfL-dKOM21al&edpFVV zzK2zn@YiniW}=S~{V$EC*r7<(X-+YRYD)GHQ_FYJ!vA)Y+d^`!Ab0p1qC*l{Us_tN z99&w^1}#goFsElqDe>S4_Aa-FqqlETC4A$(LFs=Yy_Zo2Y{zX7`CmrnLn1?wkLm1? zmM&UWJVAF@%22*PbIDlI^)^pVn3c{w@EFiwl=B6`4D74hs7E>29*3TjQP`;MdYeZQ zXG>nZ8MGK(pYzHhMit+ZlCC4|G%|hR{{olpvsW_COg`(?H_am_h_?+)sa&=tO z=BJk@Jw3rZI;D{(+x%plv&OBzF6DfOq~TL=Yy!^F-zM3e?w9$bdHQSm1W}ME#@#1G zvGx0eO|b0=Xxs1L>YfJ|eh(1y9bz0);690MGGu0DY^6w@aRL!L)X zpFo|mPhcx|`T(g?^Z}F@eE>n-2W--P01*YHs6x#1xKHtH(8D4op3ZVdTjA*Hi%>H> zTW~Y3SU#rF7A0la$FsB1N%%VB0k+t2KiFIDl3dDOY`b8x)I$5(M4|^P0g^5 z=M088`a^!6A}k_Av#>Ea8$P30S`~_H&hKui3Qw0~;}yRR%zl=CafKb+glMCA#zyNA zawpSW*jq5=_HMK=bmrb`;)+_}gPhPkK78;KF7-M`>M36FsqGW=>oEDBk;trFo{eUC zoJ}(;?1_VFtGCfp$MH6#!(Wj&OtKE*I1yxruZ6? zC&lC5iy~fCSW0vlr*5#RGexuzSy^_75!#pHu?>?54{o9{x7r~_IdcwIa122Z`vUO^ zRpyFjs=xDwYby2G;_IT(OycoipJsOnU;CK~;_?a+70FkKaA+Gm-Ys~xixUBv81G3z_#Twz7W zoDdZgj(Lj~6KkSS0Hb0Zvm`cR)^p6FO|8>lC$v@l;UBGIX~2a*<`t*prxYy0owFTE zxoS1$tRnj*$j8jkY1TG5hrV@?s-COMM+)MtYWKa(^b#+Wlm$OZQC`z zpZN}OUO^G6nIEz43%4&{Q)AvZt_ zb`Wv{1Qzdf7P%ROHvrnBm%yIIp^T6|4y{c+je3x8>PB`qa+bq1g`IF5L`tq%6lG9P-Iwm~g;mjwlC@9U|T8PDmacftZ}6&f~=xs=h;J(-Jwr zPuRK!wYMA3TTh24!x|kq_@tyMiPZ(5pNU7A!$AUO(;0ENupI5pOIl>p{U)5ziECj8 zN5WRgj;?Df$SwwG^sFGCD%;}n*>we1PZ4G?(xrx9`k#AyyfZs2Iq<8uCt zMHnnOvEUd8%9S4{Mk^vGqJ*PHu>^%(>;hipy_2NQDGBo4iC;cxj92L{XSeYAQGWtv zlzQ}lL4lsH^;1nJICCryzYVK-uf&7Q$Ts;}Phpjj1_L3fj_)W2!$9C%EVAH zS|;qKZd^8|Y)m%LWyMCvEz?xfYAqv17LIaHcT^`g(B&BpLT;|L3uwdCmDsY@6^)fB zF*Y0MX`J(+F+A`<(t?-lYn7Yi00DS!Wbw6 zxFD3s*Qe8QuV0_$fm)KK9@XGp7$O!s$s9|>yy$G^-Rh|5)LR!&(MbePx#hcegTI!y zgvn0w^*u`l3WQy6RCAMv2fc-CI;MKLNhF)sl}!+GlgKuXGjN#aT*=Qkvq@wG$3s4y zIy=nFAQlH=oE|a~yUMWjEQ{2n*!Y4K?wwbvsg#1y+x3kMUu$O!kMR6gVI**Mo3&XU>)7rRUB=#Zp@T8!E(eBTh?DCz@2I(zj8(o!0} zH;6C4G3vGbwgscH){35lD@e3uv+>oFi zzhLE^>w`o@$1fg*chvZdP0nD-Lma-a-Jj3P?CPDIfwTq+AApgtIl{1RS{l)U2;IOm zq9qZ!6=*~&B6LgAh7LkJ2b_Y0p9M;pa{*C@7qdSl#XH;TQvQS3h&#SY78jPA9KVvjb8?U&gYh07Yn{pQS9bMu@A*!yW2e2 z$6K(GBgam*Co8J}%d6f_9?X~K!#DBI)=vf|z}x7dB`0<7gHCm4bdW3Jic)P4Z@ppc zQjY7KfFUPu?D*rE;qko5Z&A<_&Zz3&$W!IbMbI8WK`-FKn0?1#k}?*TPT-XUpNRfX z{_LFKrI6()2210>$n`Biymy$W5|{`>Z^?=)wkGQNjobi1(lP^*8z3kZm~ed*&Q+ef z*~c?Ol(DEE=cX)T^a-33m5IKPOsboqjHXQPZxlK-D8HW9B&*_ndd|T0-W=dxfRDHF zu<2qHNS31f=sLKpFY4mm9@8U9OZDqN_D)RIXo-mB>G)pFIQd zFPeUqMPWb7g0Y`vp`1=s1V<+-VyO^8-HBeJJ5eHZC)&@>71OW_)@T*VnnN-8yhJ^( zoQT@W%_&%m$f8yrOj%4-;;Cj6ugpR1EK`x4sv^^+$;buU#o8}d4yND|oi%aJbQ8uC zhd`fe#oZu_Su4H)Y+EA=hu@&adLjbftwIe3MY}i-dCfsN z5dtAf)%}(}{{$CJ-8IeNN~ugUxIL31anolb9(K@69YDB=<6#i0p?Sg7><$3<=@B%%){P>%B~5IJyuERumw?=IfKS zuog^nB&89c{!vZTrA)GN23pv0V%8#shtPJfMMkj^+jOr*u0RFx=Nb=ELk;Zo&&E!v zf7&TUpq;Xk96J@&!cNH&gFS-UPO;L#!5$IrF+J9tB5k`L;@GyQ!>0_u{c-Qrk@59F zz*vuyka3}|2u?7_CLOf+LA=UI+>$cZ-i=jaKR3 z__u3Uq`i}Sj2^Mvu3k2JWH}tYiI~uv2%$m*wcf7KdLzQo8^^|cZubi4R9^`d`MsVn zTah;|%ogO053}`nae^|iX*`HH zMG!)_BM?E%0rVMb@W}cB3CXjmp26$Np$OSjuaxS07bb|7&M4DVPvU|=yiS}QW?nQ^ zv}<`l!bp9_+DH-$Y4JoFJlBFWL{AMqE%zcd9a|xm`y+tP6zq%AnSyf3uAf($oO~vV zrN_#Z)&i_7^06Q(h!ntWHBoG|En?n{DYb0BPey%U51zC|pdx>m#wh+=ZIr5su`N6o zQm+}?VgcAjSpjULtWVC_sDGKWu?igH6D7m=M13kmP#fP>+W3et#>chdQ@{r+T383g zt2cg}I@1#)7Cqka6efD?U@Fi>?ev3yRdC*V?U$dNc0MVcpKcz%po^DhjdO8*-A!|1 zgeD(X^n?D3;4S;(+WsiMCG9^NpX~D=#iC&k&1Wk3n0Ju5{lwm#9v9iD9VbgDDfvl> z=0QB3G01#4Tcx*G@i)QSDuw&bD*kV{=h-6PK%T!qo*cio8Bb>mVo!oUn23Ve!I_+Q z@^(tzv?+i~32#A=+~*c#^YH<+Kgrt)`S6f<8)KQ8i2+|o_<02AB7I0c2tU?7S5)%x zYlj~OjPgZ8tPrWrlSKk2=L^WWZT=L0=fUg^JNG4<&OIb7^5&-jXwUSW1A=N6llMci zc0}>X;&Z>zv}Ana5ho#u@$&f#{FtqZ)&7qoYr6#~eW&g?R2`NOycx@oy52kr&q351 z&=dW~S%{?n7;abZfu{+N2W(dlpko-v+Yk}e*CThBbnKO5BiQ5K8|j;F1Dk?dkf6P$ zMmIAFgH=fvrJ=>R3F(3ZL0vz-WW&b}c|D=zr2_l9rB^%#EL@N@9ERhaDE)7;y z%%5Etm|R{}JwI4EuxD{s{woX&udS%5ttuZ_SzcRHRZ>wH7+X8LVt(nF<;y1q7nWBJ zoPF}iCA~^}_3qZUN6+%EefqX($gH-qX8xjbhx>%`8a6>HmVaZ1j^O_fPu{oovgLg? zKcC{=x~pjVrK>hRciryWF5P{_Jwxs+-F4)yvwME~Q1Jr~JW+esvrp|!p89n0=qnFg zn_@qg|Jrvi9{BY8m;W~Zy*F>Ru6w8L)`Gv^JM6R%?;5@0X}|r;y-EW&;8rHwX<*As_T}v`(eP)4uO{z73P1^sc8SgO+7C7cuv3mNofO{ zTK^rmWT-u8W$li^)AxCX=X|wq_=AU&MowA(@c36g`EJ6C7d$&@PWZ^VtC!51|IOno zD!={v0S}8;3LE>>hyLcX;5P9!L`aXWpW#!^8h&;oQZZde$A#OmreB8f= zd_Ulqhu@>1w+gs&8HTaEHCCJ1iPO>wBU5@=WCCD-t z_xq8p&u}Cv2Z~vS35VH=q$+_aLFP)}s~X|Su}N2V<`GCtQl-ck#NF~nGX0871@24} z!DF_F+^|%IP)g4cB3cPf*_$uPC|VW%)k^WpRaqlkct~jB2qZiY(o<(8NamESx{(Zf zkfCe+3}d9|PPT^Para6CF27YCzU0#W6i_WgmClKjh?r6cS&J(xp$hT+k+c3P zw)!Hnw;zSVW-|1kypmW1i(ivNHSMM*T2q5vdvXhbz= z8uYzEMVn*iI|Nb1<6&s@e!8D_IzlFyD^?%d&)tbE-6tSRIo$k-JZ;0q@B*?8nE;yf zPxPs=&7Su8``-6w5b5J467A=HKXYpgcv??DYp9S`I|1Pe$l)l2rRQj5@NXrXATF9N zVLy^}CwrZXU66J#EV}MJ8tdY}K(@9Mk$}!pE1iR-({ay=i}os+7_N1l1XMZbIo+=w zXRv>!-&u~a6}vsgvWr`;Iw8}r|20#zH+H($nIO~We`E&|!&z}S*15XbZ>u&{hNqey*z<MF{h(YOCw1CG#sFS4}WbT2)?BQyv()0&}v!?26!Q6t1$S1fo=Fy2XJ| zx3JZ@L5_-GX-P$(Y<^XFX-%+dxjS)}28lKKY9uU~TOOz>nO#xt&M;y`Nli&Wid7=T zog?xU2LwL{vQ`I5Am5_-)z$MW=LUjRfq5lMA#ZtkWuU5@S}iNKx<%QR1<$Lj2$qxu zbly2t!A127hhlXNTfI+^MGF^bJYTFjBCNy^=0j4+C1uo13Qj@ApzEMK-58Z0lXSYB*po+1EJL^2dxxdvIo>2ZL@(~q(jTX``N&|a+*)3RZVJL9m^ z7cCCLvY<&_6|tfZpD;NvCs?(pqy|>HT+|4uD}yzG>e|K3NM*OtGy;oCD(BBBhxJP7 z%7W$9l^tr(8s=Bm6vJvX8DqI+tYt|D`KbwG%G$*G5_w8h6)HDaT3TC0^*{t^6_vG% zX2T$1iG>=mI9RP4MyNY9QIAioOfh^==Ycb@Xi*8<6-lJ+P!=p$RMjq)vh`w9m)ON6 zHS>%um}U_XI#4>Vq^blpR~6_0xjGbEgP1LrH!brI=kGhVqP(QKJWvgTm_KKEprkQk zC5zz`w2753t0}MK;!3eKQ|k?J(mv=WVg%_II4h=}&MT=7%q>S7N82w8%qFk0`E%yL zB;nVV>LnYR?9dg%gNtF9y?(cWno`CpvNIf5Nkv6@MS%WKnl=?p@3^QIHZvQ3P%3h1 zd9jrp^>%PlfkB$0)l%2cfLI?E7=UQ_H>=eNq6eDzoO)D=hqsL68+Zb``G#(Tc!zL3 zaVZb!*5fz8;kR%sO$q9$2?hfdK{P!yF|-r5r>J%c1B+vApn4wLTb0Ytib*1?6BAR< z(!ms4&0NoXoLe;vb|O|Gt7}RYEq41dtNWygPj~ugr~gNB9rsh#b+*Pz{@K29_GJ*n~eU4XUMF81B)vN4LJj#ACRJb;-MM#{2nL%Do$F zpLn*|WY6V%nyEIB*7&1sWPAAz{NfOm~U+%Sw|m>7Rpt4TZi zx(7Qa^6|`%?Rs$23b}uZ-^2J##3cP@EJfgrSy>~+Qn*?P{A|EXhjn*Z%Wr}!pXeOH z?;J$z#uZ{p8m7a5T<-A{L+-KkPTu(Q3m%Ut)!W`Tyna=jU?up~aD-kpHsK8~zU7rL z9rr=GzdT_@LaI8Ha2GKD6wD72_VF?Ay}oTeze-5_0O5?pK8b$yYa*!)^fNq7!ioO( zk#YsXRCSx5^mCI`l3%q*+UE1BAxT}5ylSanE(6A|o|N!)gc+!kv+-q+QiOhWMRK1+ zulhLoP_keB2lt?mLQHwep=7VRD3z3NlJGeRe{8~1e4fE@d?wSBXYu}#tV78;YIt^! zY_BTGe#4uiD&&4C?!D??xeR|q=vS@tC{J9|K8ZPMa8ss#s3|Et-0V0ye>=mgLZgUZ zbk^vzyy}MuM<;kyn~CWYy{eytXHR6BYPsJk;cXH=E#cb|ekWo2BXQ!$@5>A#d zDB&szA3yuLv%Tu**`)uGgeg<3DSkC^%KO0Vp7I7LJT77GRHiAG@DzlpYUb3y*%|7k zGtY)R8>cRvjj>K{uI%ZwmJ6oS zPHvb^?gyrmW1kreN6ny(&71MJGn%QAnUiLE)h#nwgKx{d?_8$oaBkMQe)Y_`w5y*G zdexP)DCftsXm7Wd5dWftKTB9Vo0#RZ&z$X7ug~5ydyD#MHosysvXmBkyM*Osyx)ir z)XK=^VA*sWU07XyHeS%ZaSkbm=du*f%)M@|S9P05>-y`wtaEYJUj=KSR|Re64BW%^ zf(-vAp?5KL(tI)NdiY}ID#3lKS}OR~) z!W9y}FJas=QeLu*lvg5brLtE{PiUq_tYBS~;NGhiNLVXjhm}8s;2Bnu@}!lFtz5}A zbpbGMi=MsePb=B7^24mzvM^Jw3Li>NRj(r)?D;5+r$!#u2$ojPf5SUi?)@s~e3qiy zDyE+<;igqxl2Vm__2+e|Dh(l8_iD!e6`^14S;O=P)=-A!Ynd|d0&0H!2Kta=8(E?& zw==vIVXB(HW84m}s@t)2QmT4&$HO~P)u#x9_HjI>L>t*Too?CqU-mk6csxEB@2SV* z-hy9GQ)>|)kF@a;ce%P9cYc+mt_S{AdGh9$eVb`2#d=5Lnn_$sK==}_>VPm!b&|Lg zJo_h2ypo8NP2`&jX=;MRr7L!DX==7WxsXCZmLQ;PoIg1X(xhQO4><(XIFV(CKyB0% zr2=VckAbF2+?@io$HS&Nv@R_N!&d2sddP=S)fJI!=|Y#0WDKY)CUsxpv2Xx&xOjUq?JfyNs{H>sf z>cHy#vW!!C{=Vi8g@Zp(8+u>mzY*s`V0gDxh|F`%^=+1$swq zlDG{5y{EPdbf-Ya)Wrh5BGBK}Wdi+Mp!d}k0%gaO<_GF(fw~Cvk-9;ki2{ABZWib~ zfj(7th-6m*YKr>WCz`kqP)GGGAxQm_#QmW5OWgYsmt+A#+zyl~hp&=_lj#QjO2$<}2y>-|}Qrdn6n9zZuu#rYi8 zRO?!Snqn*0eruL>y+E@BnrrPA=mLQ%ts4dUM4(#hW`THYRJ=Ohx>cY_fcC?3ZWrhk ziCb^&73fEa+hpA((ApVHxy{-q(ES2kYTYYP2fX&W-@4kmU!Wf6lEYr>L4i&a=q~F| z0$l@WzqQZWFVMbOgr2e<5$MzsLN8m73Dm2URE}Ct2=oJ>{njz-DS_TBW8CM~GXi}k z(D&AJ0)1c3l>fC}6lmZ)LTUCPftCS^SFP=r1$tDVw)U$6&BBx*UY%^eB~Z0MgY9<& zS})L0`=~%u7Ln!%`|kp6z)phw))e~#fgTiSru~sXr5L8~x0cu+3-q->EA3AO()`xg zp9}Oowgttjwf2_+ow0=ZF0j86Xc?e*wZ;CIK(|WVR{I-)CRZ`#rS^XW`bD7K_V)r! z#7t&C>iNF{X%2VWKMABuw9o!UAkE<(`&WUqKJT?H53Me{hE(peJpy$XXg@wG2bZaC z1r)EIwi7(uTlA&GJp+jOc4JdiymBC2o6p*b5_if{#yw{z38Z!Xf}JAJB@*|d-NZ%Z zkex1&rt-3#DUhb}s+}#6rt-R-E6{RuMEk8b?4|-;0VrPm&2BExsuhIZwOhKNzuWCx z&_{NW3;NXV<$}Jn2MVOi_b>Ytfx2QI8IP0XPZMb0DndWnV+E>PO<6pisRI2fkl%BT zKp(AP$~?~uf&ME{GtW$cwytHqmY&%Hb-aKndwR+Qnjz51o;d>T2DIPm>zOCe^!0>J z^DGePk`08WdnyFVLzleYTHvV^=qo_+=!X^yG;9;&R(Yxfx=)}@o*IERZD!nMo}~ia zFVHofWdils!noT#D+Ib)pa(oF1v&&MUOnbHU!d+=nes_boj|>@$u3^K=2;`q83O&q zvsR$10qwUAdoB>DWE)d{?Aahttw5i8HVX6!p#9e8o~;5Myof1(^lTI88$kQ5pFP_J z(lzFb+bPf!*ebW*N{zcjpgfG^_FH*zmkHEtC!uz6y9DYAC|(uDT`ACTiR%`3jX;$G z^^3bsp!EU`iMv4{&2LoP9)ZSTg<-#SR@_aVadoz@P>ri=fv}qz>g$Ve2Euezg>YQm zdx_^@oc3vAAxCTexd>bM7b2XP+y*^Vb#e!UtCATzF?pqxuD+VFs+pyJN;wMrNvWh< ziqKN)QsdCWT$buXcvosV!dFw9+3D)V(mjF6bFU14S9Tm%H#v*xtFoHn<%-|Ql|?zVX8xH)3SZ6G zQ)H>aY?fkt_PL_X3kx>vH#Q4{Lk17!V>O~`#(we6fo)PVD4Bi z_53oz@6ujJcwrtjKy6#<_B@8q=UEAkW{R42$BVkXFdT5SG`eYTU|7=0bu)mUT(?ld z)e>%(@Fs+odZy`}NO?*#(w`yWie{w$LbLtAA8q!00`}a0{bMuc(i*O4 zPHnGiP6`*dSmU$Q!!5QTe6z*H2!CjC6~e5RH~PHZ^(`sMwwCYtCf8jq;U0wJ>TUym zT;07AJ|^Lx5nAf65*}+wsl2Uz0iARSTeb3H3t*vyC$~z){n%D{iR0?B@*O&s3gq_y zesKQDCe~7Af_XQevVE7o82I$S7I2>!Ag==_{R@~cPGamovnY9!);|H$xi#;{wD#a+ z-*#z92+wQH@Jhiv(>l}dlxtC&(f-MG%Ou>^lJ|QMj;pI{L;8!`hLLMWThh5l!nY(m z-u8kBg>5bOAlLGC4ENyPQd-)V+EIqj+EF&G&*N>Mh~!${?hT~h){@~KgyZVkwOYIIixZ_OHXzu55n}w7s`Ib@i~^KPTZE5`K)(Qol&(?ZEpc9az7u z5T>g;!X>@N)r~1&iEb%ah}wJ$_mk_s6wGm)HsxsJtd6fGO|F|J;cN-#Nw^H5rPg;O zg=-Kx>Bo0^8|lxMa5_Rut?5MWZ?<5{gw8(z)1@=FI=|V1_HaYzlW?!o*o914D&d+! zO8cL}p@_{XBL1azq)=PLyf3w5-Y1J*_eA-QN}gQzc@e|-Vutw=_K|Rsgi9p65aGDG z+l#5UM~bP#LkKPP9`I3W7lXnt#SF8%Ff5jExP+4>oGW2S!V4w5MZ*0OJ}cqd5`HCN zd{@$GE@3ALdm?O1l2O1rl1%RUHge5EXsK}5V+b$pN<#a_qY_{%RN}S&m~Ok$@`8yuK=Ff9#^-kC-rcrgirK*75Eo=9!B_TPipvB z&-ZYzd416{1Mhg8(yIXBRlNow{IS{ z;i^9UasQr#z50&B{kFc8`NO_*aX-9YxXI+YE&Z8y^8ki>2GD+<9>9L;odJ~mzY=B* zOiY6n4P=@#B)oqht>rPfe_rmj%$*0#LCRAGEksy4s1~8de>mt4+*^b9A?!1lbVdw* zDlJ_t8T>uMYX|=fJX?XKUOb~9UB|NjEy8{LnLQC|I=jzgUmT@?cP&O;f<065)6gPR zhiNBgc~#G80}%f8tV>g{E_c?DEK7}=HUi-}(|Wp6_QN_}!<6IB`K^@yKINso>h#Hlr1%2Ru6>a z3tO7CBqz$HVd*G2TcSh%^;s<4SF_f)^s3|%#^#q?+R{=*C08JfwaJTcpmeOR>Qh@- zLTYs-yO8qg66$Av$t}1)TCx}6=R(;x`<_;gw0W~10bW~9&uKdXQOUKf60>wPt@`}Y z)WC+(KHHHzxojU|dz3vKfUhWvT8pN0-RLV%!fNwqwz30~_YDa@7)=Sk8NCqU@zJ#B ztTCkAX3TD+C;fEwT=^bQ?pOXiFlUt0s$*-7`0L6KBfPVm)}ArvDDDgAe2nn4IbS23 zF^81HbI5D^oNs~IJLgw~PtGCVH|F?Sd(~%iNcq<}i^{h2~$%3e! zZ(hI>X>C6u_gc@dEO5LB%D#Ylvld?67Ecuyz7AcrUr4>3yzqKp&Ruv1!k*Kbw!<@^ zF|5bgV_M>V$ry53CG{1xgml$y5$o%figrk&Yvf-Qop7%)+Rwz+AXBzm6s^Ihy|k!5?%$UCuNJY^?8+g)kPCXx%8>|l9rdlGFFL)FwKlb~ zVSSPB^_553=yqDaed#)7sdY)U-ENceYJEma?NzT;Qo@fasl%Tt?G9d*6eK1$$olFK zbiAUaP7bn8PYdQk^0R{pNa@zb!$SXwG2fzPy*Q>Y;(0jl9939qAsp&f@z3Q1I8#{T` z;U)AfA1t9%-!0kR$>HeGzo9dwisq`SVy;zHwA-y!tlw)SyiG7q$oNJ7h@=!qm5{5(%NVkI$Sh`H$Xw>{ccG#Z^JZEE_i-d z!_u8oL)j{7oLre!V(n>ND0wYH&G$t2jm2KoEt>21?_(u&(qrVd+>wWp5FeGCUS)HS z`d)=2vBvNmxiyA=uxI0Vj^!FlUz>(!_cG7jI-he%N*?uTD|$Pn);{Wm^LyY);+yBM z?M-UbaBTWXCwtYHarE9}>KL9=N9&p|;j+4Eh>g|E3w^L3Ao*p47q9lgOWd(Ks-F|3 z%vnRq9oO8^*Q*A~{irqMGFQSiYxV(uF+xje|D%1;>EeHSPK$C(SzFf+PnO4DfUwnC z_h?hwUNogWo__Dfwd8yM+H`n^S0wy$Z8O~a*3n0`SVy1SeI3&bU&r*5<$mruroTwS zKdoc>_trfGj^u8suh&J(t1h4n$r5TgwQR=QU$DHtuBpa!s3ml#fBFJSa^!;Zk;_`Y z7GcJE-Y*e4{nk%A*;1#jk8(eewqF`YFY(p52YaG78N*TB>h)~bm#?SJ?~?GKgzrlD zpY`M$zk#E&tPPlfs=^KQoTqKri_zeu4N;Ee8+s3bJR6>Ze>f5M0prQ*%<<&qmgGU9 zc|gLqHZb;Ugjg}#7^QzAnr=EXg>tWrq;R@~Gd4Dj!|sBO^#9?FpAPh@Z5t{76%uE@jB@M*jKk}b@uV>G!te;}I=gTU!iL6GL&D&`+J*UyC=Z)ihcIbq|2+y3r_BDM1 zEk8Jctt^&T@yOWO$C2&S


t+lf1(EsJxa`gwn!mmUce?qK^Gx}$g`?L4Z7SV`E6 zZJfX!P>)#LEvx4=TH5;YESIkLnVkWliGV>=ci{{>hR9!_||jrG0ex^a=to&I??)Bbum5L&>b&~f;C3;^J;+4OfU02 z>l+B4S#Xkunk8~qPMv|4B%TK7us}QVN+%yci%x6JlOk_}QdT{T3>hNwFYv;(pXQ;!OCz}k`A8<74x7=L4Oe`|OIdNO&0 zbxH*CrHr*si$Fb6=2&N{&xDFD?O43q$LN1pq%uy8?V%x3nV?3VtRYgFq?Yy95UEU6 zp9r)=jZdkwW~y%oGH$i1NZDY`QUgSQ)oMe^wN{zBS!nK1hi5EnHc#!5xb?o9QXaJC zt2+$zc*?VY?l;hzDTl2E>QMuInsNltvl>Djb+;C(KS!W;_Coc>NOE7VK1>~E2i5cA z9cY4Gt-4Ou(7#j9x6fBK0_{-oO)j$6svm{Q4izrFCUAkeO{WBh>+KCHd6v#MtH}X- ztJ+tlp^7Gdw|AlzHHJ2akpql#iwO?u2K&g$e-54bB#J+pschOo@>=h z25Oqt)^mgU%0T&P-K`td&jKA#w51zW$2n3WUns4==O)!nptZgoX+r_^GjX@1jr82C zhMBng(#8Wi)5JZIcG$W_O)zmUq#Xe?UB^j{-Kx6IBZte>sp%olt!kSd-w9}^ zfgVjiZ0#dK{2fdgoUzvvf#OGJ+~b1E0o|h$!cVLKbZ-Q@7|?xc-2x)ktJ^ak^4zap z7w8{oo87GkOv(fC)NT}d7%3lAA4g9|BoMGXyQ+*LLlnp6T}_D-XX^m z?N>hwbkIks_p87n#vN3YdcUeO5T$-tZLidEl=>0%t$`@@qw0C=0U}Mx@|eo0(h%i* zToq#f3|nz+=2xC4)S>e7?7GKiwNk-uBV9Kt{B+pYCF#3!_wB0B~ z+l@f+w`AVqdD_Vr{{*0CBG6$#2O`i{fSy%9EF)sQO33oY9gM`~W!>X>UXA9)QFt(F z{sj}KH6MlAAm58>mZaRF`eYsO98!k`(waY{jtNA~|6m_d&tspD?l)V-{aL*lBBXnS zSM_mR?mO1X}Ogk#*R5RgDs8weRMvBY-BE zxM#9D#l5D=1-eYVp4Ai3UV#oO>g+G-3jU1-YNi!XXNOgVfvB^;s%6+$#5ii{ zO*M86p#zGVcuU=EAlCce)G>i}sH0g!;@(y>gu@QCzWSP?chy5{nNREGs7hX^sjzQ+ zPYn=AYvMh%S3_cv@2RUVV9JAv7I{qNt=AAO^6zSvfoPHMtF74C<5=Ve>PZ7pvJX`j z_VUmoL)m3) zZ?V7If$F^9VV}1HZSek}euzL9d4E*;Yz>Jf;;aQGu3KJ`C(f!e z(9palfI9;-r8!Qae0R=uXTxmX6GFNbd7wOj$NuX(X45!1i$sIJTT@>%(gZ z>6VjY1+LW)?K98XC=jK-H=(I@orZh|n=B+xqF7l>tZDdwA%M^^LBu;Oq|uCtFNoo!o;Pw=nJTwi94yqa9=m8$i($(F$z#`6L)%x z$-eH^AQLyG#VkOlnYg(v7W#TvV@zDQ#Zo|11Ulej*?U?~-bl#~_*nLy)-i!}-S)Ij zxk*dSy6tU^HxTQ#w>3?m)xK%17&qTQb6X{OdRr?Ev{d4D>3nK)tCoqqt*o1crrHMR zWa~u(UE1pXgg(|g0%;5BYi+-UDG#C^x?6p%g4+nKR#&%bli1f9VxT)(b+`Iij~eK~ zRt1Uutin5V%BK<6-+IVEeLU8aNil$!zS+LtWkiTF>%ji-H>>u^^%EuA#gjOH%#1Hf#JSU);lKdtH3Bg zADKAsN%tq7WqoPlPCDr^K;N0TtxcXw9Bmypao09^6;Q%`T7v^ldM&J`R=~uq1I@8kM-zAbNqqiawE@?BtKf$seq%5m_x3-xMC`q98zDL{KpE%LVG;y!Ac??hs6ZbyiCRuGw+|P)c zWEGjXoVNETPPTfPxGrrU12o9Qjchx|f3|h1iJRVb37|0oX{o1J5B-Unn2p>rdp*YZf(2azG>D%6L)F5QGjYp+%4_8`p&Udnz;S#`U1MZ z#L+KJw=Ohs^h?vN%S_zJwzv9cSl61k>22==bc;Y*>X}v=Uu8B@&$PMgy%A`BQmHlIQRd@#eo4|?>rsK$ z`^I+I=9zCDFwl$+n*ilJ#+2)Q3lO)!3K-}-#4WI@479F8f@h(%!a$dI=xr^ut~Jo@ zh^w$}Hqc{;tFR6UbeVd!LnvvHwd`?nAhbED(mL=2p@Y`HIxIR<%}M83y9~6s)jdhetbGRBU9dlCh4qPs zq#i=n*8=HYJ7oIXgYoP|LssA*Y3g3oiPQ73kkv)vw6(6Z#tF2}m)voiCu~jCajI3v z7n8zHA0FSWW6Q+zt*S`A?$#=6r-pnFbUX~`N&~&x@d%)M4fHwU>a2$il+fu2pw|sF ztJ5~mYU^(Tt@SPGvGVy~I;)kA6Al;rAKJbIuF5L^`<(OK%c6*&xMPCi zf+Dht0xAeDD5fc{nR11zkZfK+#auA8vJ^Efty~~!F>SG=ZEV7XDa)FiY;neEu&l|Z z&1za^oO-{%-+Ar=S7+w`zW-N0=gavm=Xdt?d7g9S08=wOw7s!OMw^<6p&dabd1&4y z$C#SsLjnSBlM_tMJBM@yHO)iwb~(q?r2OF=&eWv*-7X6~H1CkhOwA95)EIZjDpT{z zA)7(n>Y=$=-f3!59c`9(o0^GHn?XHb$|gkl8h6Trrfg=^aCxUZqGg=hyW}xb^O2~8 zfV<>zQ}Z`b$)K7|+3%xjj4kp_Q}z*J*dpK4GPbf+erRfL=>M+VDnB(f@9BRI)YqnL z=FksBjr`G+*@u4Dz6LM7QyuBvu}%7E%5Ove_Qp0D#MB1Ad-`_-)x(tSAKKp7F2haP zlS4a#8mwiUmK`##6_xCwHXA!+hKni>xLZzfQL6%W$@wm7eZW1k$VF`q*e$D>(j(aY z@>wnO`y~2D-@Wp;O#M#K7_wLX}F&&h74?DN=E zP+_L*N^Fhsyc}f80^&AUX+te>ITSOlru~!KW=P? z-^d$HYFXSwQ28dcHg0N%<8qlv?TX6*wc4bfg3aUdMU$eQdR)F@Qq)tA%QsBw6==RB zKV(XeyD!OqFttIvA2+YVOET_FDha)pdD%6#z8{z0p;6|VvWsy=9Ztvn>+j8Z5Ec5e8 z3=MowK4nr7px&3Cnbd;BxWEr&*!x=Z7EtHp9Fux3abn;f<#v;LAJm`ZYbMog_=3Rm zQhcDpjR5s$$v?)4HN*1Z6@eehGE=q-)L-PICiVXCkPa=f#iafP>VoWYj;!c&_K#%s zc}-Ete=Of-YP}ecR2_IxuKqL0){CU1IQdtZa8XkkN%W$#ot3swVp3Nl<@E&hLOPijy_8^)-0n)16p#iUk1mZW^~o`KG7&!7>iJ5x;}HZm+IS>5fD4Gcp}HoO2;rxWiq8>7^ik?O^mJ0LF3i&X>0{gP)`RRmB=>V$6r2aT2BzUT-H>n?(deNjp(n$8U zNhLD%sYy*|>WWD%WvUZ?B2I{%es?l8$fO=(YP3nc!c>k){h6toP3rGVRhyK5I>mmk zN%dyxh)KmU^@>SNX6gfzDrD*_liJFZWrj}KV@&llsV1gkOzHwt<4wvKOR>*4sa{Mu zOe%?~J4|X0Q~OP-f~jLBbuUw|o78cpT1={isUJ+LQwGHskfYO?$y8sHDqw1aN!`!X z^(J+iseF_AhN)F16_QCdx0_T1QxBU|8dJwjY5`M!FsThpeP&YiO#Na~FESN^9}lFO zew(SmCiN9lX(nYIN3qW`slH4Vnbbt4ZZ)YwruLZBtxP>(Qu~-{VoLY1sp^c28X~8v z^Gs0>ND7{&a%NG=^qO{t+Q`&xexZ}c2G3AiOe$vbL{Pg-Dtq#DQ2R`Z_D(tKA(NuL zQ;vFqsSSPwlWz*1sh&5fm6I2NikMCD-6n3Iyo9JZn!0;(S@3MNiYdLyo2#}krPpQoS#Do|->jhs*7FIQS-2wt%ShqHp%$V4M1Yshwg}_BLf#Q42}7Q%uSJyxkIY z+@uP!e;Zt&wk*=JTeF*k3)Oj(dMx{V@KSZh00a{k!stk*rKLM!98WDrqQDx;B@ovS_A6 z>inoK%TyZ6bUK%*T$Wvsl+I=9vex9W&Y_}WbhwWZ&Y`ZDniQWyg|bYCbEtq=($qG~ z)i)+ZHp|tVIJc}qrNwKCWEJWulOmgyYDAJ-R;iw3O6Os@daf1qvZlm}g>iDZx@d+Y zE6Y_uirdO^6`JafeTBL>$}L-==8tyER;s9RZrMupEmJ!7D)lc-iA8z$gjK1C@$PW9 zsHTbTaJQ(GETVL{)#|BfOo?CepAKKGCTp4KWN!>#tE!mVAqLp@g{@N=9^uxj)u!e` z`#oXn)nSvm%l>Bg26dh(UDlgaEytkiVUzN^L8paE;x_gCbWKrN-=<1ta9X%-Z&xcd zCAJilMBJ|4X6l0cs9;0H9cpTh4!5vyE2udp^~GFY;|}$&nJn|auW%=1)>&FJzc zPnX~hb=IV)1n*YIIAvOPx603@wCHdKnBs^Vt1 z>>lM`Oq6af_o`q`i9eRb;pU>rtz$c zw_AmkYE8=DZuR^!cevdu)8UrwQK8G-vOQ|GNm01_)bSN=*?lTxr90gH>NAs~a=BmK zvzlZ&Ef1)Dni6}<41^K|L z>iGTYfJxD)v0puEQZ#DpS6k{?)4$U#HPGCpDM_Qoe)WJ!(WtRs?K3rL)Yz{cVoHx1 z`_;y$-0>YyubLFacR;;uQWW0-wdANfz5}XMQykv`wcMmAz5{BdsY&r2P}NN7_ztMF zXWa4CstqPZ@zts=CPnepsv-P*>;mVnR>fN6 z+N3DH2h~p|Me#kT&cEP}??H7@Qykxe>Tf1R@ja-%G&L!{2i4!1((yg0>iNkQQE~F1 zI-)7@%W7Zapn8p;#9WY5)^_T3P<3n4DWkL;RADAXX*sA`H08f#?NtAR>N8VDZRw!; z#-u1M2USe7PBo?Fpc=)LPRl_xo2m8UqqTVdQ&qpI<2$u3JE>m%-lQn@di8-xQS9|9 zh|l>h_;;wT0o7eoToUyv%%mvxdX;NxQtb7rfGHh&y}FgD^Jfc?q z;I?^0eP&XW+sD;L3$3X2X!E!_ZPgUXo={Q#ZrKy+h)I#`Nfp7Ta5~(RY7cJ0aF)bV zDlM2P(QEV5;ZLbrmg%%StzuZF!#%C`m=xK3Muqa}ot8bLa{1&-hdZXW^I4ac9aDSw zbW6(`)Sd`;IvdnaCPg-%Ro_RtWzVYleDbBkJ*U1H;+8$9rt^zCx;CFz^ED;JmIE2j zD@(N2B%3d&V{z_qFQ`uOMCouZs-CT=zM2v%w#La9RW?&P_7_znpRMT}y{Mv7+*W?0 zhPR^9G$rn@sY(8g`pKk@)$B?>uJ)#KIPq4^a~*%HK4VJ9(5TMxd7X}-QQgaDayp$S z)P7BgKW^KVd_pxcrNf<6F?>R&!<|%*yUu3fWRv>odL7@Iyr;vP)blLU;eMw+W0?;3 zJ2h=8X=>T4>Ik3dXxXc3BJU}+>@^j_J4G#fO?~XzH{wKIg_!$BTAQ9yr|0R|X>EE+ zePM>9T6seqXPLJ0hKjh+9s6lzVJlj8TGg8rg?m%w^6pd1-c+Y^IR@@=Z>h7I68(0@ z$+y%+rgW;`Qmc9Qsl(B2=u-SPo9-}w18CsZGvWlbBhFvIk>W>|TBeY{3s8xHKtse$ zQTYBP4SuWel*X~XS=q-5tX&?=q-;wyI#{eQ1>hBe;%sT*Yn>kKy znzhdL%*X8{$P4AjYUW6%+}n;WE6x9(+O%Cyb$YW$YOiI%n?L0SD#<@a8o zfjjaj{ci&$ZWST^TA+bjKiv5}!2IW!-^Bd0K&$u|NcV=&t^B_L{cvvxez6qyhS1IY zWTCxTCKOiT&JnUqVNqg0XNjdlU$H)J4a+0{J|NvCM1Gyl#Eujy3urY{o6VsX0S(*@ zLDF?VE8C%O(#Qhwo$=PNj!rqH&8bt}v2FPr;7|_(o#lpao?(ahhB(H2Z;ozDp5?6l zFLKzIIqd5|XUl(w?Re_{nK?S;*FqhOmPU1rt26Nmy{UcF&aj+KKq7oCeSK@68#@r9^g=n9BZK#)MU5LE}Gq zwvENCaWB4S8noZrvbL|$jxs^|IYy0I|5k7e+>J=_x;fhK%&&KW=k5u{e+?jx56-IT21BRczzv2p!d%Dv=Qz}H*1uK?n^^jL)@)(FXDB@) zearkqIIY1=rtH_&bX%hGZ{5>%o&GY2YNQ>{J}n7t>-}2k`QPIAQww4`3)(D-}-2VS$EtXT2%Bj-+O!oh8<=xXxd4RiibiEKq3cV_r z%JJ$JMTnlu9IfMtvzT81RAL#>5F3CNu>)uo_XB;zQ6O&10xIz`@Y*__Dg1x&d*+Bz zqBtcwUb;1y((?xM-{bVWJ~b%FB0hqj?sX;ouh~zU7+G-!FGV0wiE#E4N8xrD$_uSD zv`wtr*&2nl(0wRoEKX@E>rVz+Sku}n7SFH?pyN!ZXK616Ux^iL=Qg%O>rW}RUxWYu zQih&kJdur&OvJ6jsp)q{7Q73K^$89Dbbt#gMdmT zuwR#eXL|k{|1Wq#r^K;QWLb|hn)4DkhIq|`?`=)z*ORX~BgT-;OrWzprz3?1?xCPM zoe#9)9t!swQd_772e%pkby$N}u+CXV>)gRoJ#u>bTgMxOA2Hv;)~NOsm!u&c0>`;} z^yGW)O`c}^w7$iyplpHWdfZjYd>t?C%cNL5?|&1Q^SWJ+D%$b^JEi<_pcFbr&$Yd$ zzNgb$Fsh?WAQA1Z|UNB2KIdh?%1%3V9W#|aKYFQh5~~{XSgu9 zq4+hP82rtIyB_Wa@sgYlHv=vQZYJDpxVdoi;BJJQ54R957tRKk2e%k*30$H09KW($ zs0zhb_}c-0gYnBeFUbWpEX6%i&hQt%R$BTMM@i?k>2k_?4fnu(MVC7Job7 zZ?LEVuList@M^%T0dE_4+rZlf-Zt>IfwvvJ?ci+(Z##I~!P^1e4)At>w*$N#;O!KX z)K2hritFJzzy;&ibLOdC;O!C%;5xtsi+hlsd*SYb+Y7f3Za>@sxH`B8;SR#p!#xD| zFx;bXhvA-pdkXGpxM$#w!95H29NhD8FT#Z@I?;~=ZZ={WM>3`}W-;EtIG54JSjf1H zv5Ij$a5$a^lbs#xzYq9P@FCzic@#*epZx8MAY2Xn$k!(RHFIYto9H@gKXAaTot-wC z{1LMbcPeDfLe?o{okG?r6eL~7(q$}N#?oah-NF`@iKdj(o#u+0XZ@wqDa4!C-k!Nm7tqqHjCz2@5;^M(yS$&N$6+?&ajJZK{m|fiYf|@*g1#r>q zHJvZ3owGM|_BZ}8dvoVtQbox=^v(G8;4oEjtC__F7No$nI^=a8Mz;G9zxa}ITm zGcsEn{02njZ(&3#AAH45eihuAnJHe=b`bMg{$8W!Tux4&ExbnD9{ zLASjWvQCvjCzw?RJu5gWisxmA>=GO2<%aAP+vfQi>x~2Rmcjq*ys7@{jmCL*gseB- zoEIl|aM<-6>OT1E!0+6ndzbY_yBn_q2HhCd<)~;3$PTF&WT9SA*n08iypMeA1;tg5 zZ>HbsQZGoqUIg9vVV6^^e@dLcae3E6NW<-24;hq(L&md+@u>K${lIR=IBmx{ZB1G!c8J^@-pZ2GD@bj$7Q6jw1<>k7u4XU0t)MI`E>4cRJLD;K)eOh!$Qxe z!a3d$NhKB{sl-C~&7KfRB^Dy7#6l#MSg54$nj$2{7$N89P7ZxREXs|OQIc*wxh&S@ zE(}fJ7*jdMRE{f3J`(hFXspGV_v4|VlD?hFlywLjY$=#qEwkBXwj5>q$TwS#wN1r$ zfRyt2Y-c{($(NMtB1yT9Y?6Z@KeUI{I21r#7p_;>6SP0dxh6ozP2}qHF4>k2FCX# zjFYFiR8PywB~$&6imgjV^?kwe-ja;Ir;JaRWc5AE<$s<_;3CK3Z~1A-&3*kXzb?6} z?-v}`_t1&yV^LH`0T|^dB|Zgb`i3aVX%q4r7#^ai?hc901)uZ{RaDCnirQy{qLvw= z=sV~p*{dL^Uy~&NDI=nQMyGc>zAH~zh8MgeqS*2&@o+(9#ASID(gbxmFR0%c%U27w zM)a_Jj<1({SgtJC6LHScv*?A0GlK4XI3pejIvJ6ws1^BJGK$`f$YeYImif8gMqJ`r zK4r1@`n+AXqA&JxI91t-zWSTbn$&Y|>YvYPE@EjBr}?NTEV--yDY33(e}AeY{B94I zKqU9gNI|z1MGCs5C{obvM3I7SUWgQQ<3c3gLKG?J_Mu2YcMU`ex?d=g?-e3MA2A*( zeFwj__EPDe2l}g5OMQcX=G4+Syk-!!hs}fh1%2_jn$xzC)3!xXf8WR{+@h#=Z&BRF z6pe>l6!q>cihB1JMZH^EDdqmwh_b>+e`{h{X=JcSDzb-_+E2K3ZP~iW zaO?K6caf^;`I{mmIn*wc4}X)6yI*LIcsz11msq{(Rq%G?F4TTtcs7^nFdr&e-nJdT=*>C?m|DW#92#*i}Du^HGGIMP}$_npB~Ca0bUraC?z ze41lvQq(Kcac@wZJkF^)%jFPkeCK#$2+f$AjT;R5Ry5d{7y0&(aOa`~L)@;S@p zbC%2JESJw&E}wKO-Q#nft&Nle%XdU&SyRe)N1d}wEDs4j&lb+Jh4XCTJX<)=7S6MU zdQQ&`$aP-(EadSgRnM{4t2O2EeY3b^E^@iewRR7Q>O$#1hg__#7#}TVRO*!Ik=7%@ zGoruXHvB!8%oR1Q&${R~oD!{#ClONLchmsSp!Rn{$)CBrNzpO1W($%~b@f*%s(Ys{6w%iqQC-h~0HtS6Q~ z3I4P`dm@63-!HG}94iXuHVoSVJ9O_9g(d%`_5o~%{BN-IaHkM(4tKAz{vB^JS&V-! z_cbhr--@aJ%Vc6%|ClOk&lSUB{P~OCU}MmVHG^KTPFyi7CfL}rVoA&)VPCl^_CBO%YwTs~?JIWy?_D`uUbZ&jO{~k-cUNvUE?fV~NF%^y zYhV@OD8{A09rCrRmiDA`sr@1A`&EPE4p~0}5{Jt9v#J_=JNZ-9Fyy+DRtkeDDLqGYz_(A_w@9?|g$=*L>t?U38{F zw_Ri#^vguq2Hj4Q4}Dsh%w2UJ9Qv)IY=iD8DPlgw65qEDx$YBRVbIvS+MwBCBlu^0 zw*a5^-Nm?o(+s@xKZPXK{sg}G3ee8q#yoc2CcP@7<4m7tk0Cyuf)gt ze7@pT{79tpc+3lO(du{Nn~c>Jf#Jj<{jV1ME&eQ*(hKtb)&GKK{p#e{BL>~{5$p5B zYD)rPyM(h?OZytfS^qripEo%aV-v@Fk;~ztLBGoMh4K3883`9rR%!l(XM8Uj^b1WF z4f^FKXrd*5kCl%dI#m8wp!2kEm3(jYhJ-83v0&ag;~T&j0({yxlrh3Y3KhlD1m+}I zh?C0xRQA_dF0Aeqo@x1V^;Ze^fsbz%Ep&%Lrsez98>2HVo!9jC&j$Z+cbm_kH7YR{ zY1nMc6>)3+(kT;sykEiNC-x(2dL+_Vy4g4*$FJEPmCo(_jGVe=M)Vmucg^1RG=9eS zE%Yg0(>L+Bx@*m##2mJeW8qe9q4t~)PIY3wh1!3<<-0Xo6N|8ls7tKC`eCYn1+S1- zb9($OSJs?N+~H$g+XDTs7JQPp5jsC7&bLtS*vOh^WQVnh!wFLudj=h~(!5;f<2z{c zpgN!MwVMY8@T!3DoZMoeUv%09Yn^)SdJEluUT>kh(6?AnlJb-sG0U~nU zk>N)y^ou!%e4^W(gr9B*IA=*&_d-M#r|kw8Vy=Y0Jb-Xn`y2S%=}YL#7?ykPg z_4(TV)^OUt{BihEpPK97m-cm2J6w{tuEV}tJhEn#~5k z&XT{rSNIV@bIK7xZTJx9loRZ5}12>Gk;6rQR6P9DQ`r=!HVK&`$J;ZZ97u3745Tf6z#J@*=7V|2xF+E zJ1f3m``>dpzaZA!K07sp`)MfS6|=>j24|X<_9o_SZN&?VWs|< zsoRp3#=R);JM~InehAk{0*8$aK`OphB07m3D~1R@xs0Tfe*e-s})qz}_4?qqnjTiJF})*|f3}A$~Z!ABHng zKaqf6Q0^`kz?Uh0m40Hrct8b;E#fxA5PQUa;9gN@1d3Ww4}ZNlWV92fMUVv+@FspB ze%x&>{6X?LV2C^p>@H7O0!66&9WYG(85kj3fP-WQYoLgdVZaz!2uzR_z!7o{FjZ~= zrpbGNnesSrqC5x8mOlWe$u2&AB1aAe&XL1>+T*vk6X4I4qk#ExEI0*n0)AQk4jJi- z)XGd?y_^DkRL%h&k)^<=3Qa~Fy|sTcz&YJwQDDSQeU?V z6j#(w?T`}Vl3$>(7{2WTg`d$K7+^#KgN*U*{lp-n4j5xJ0uzj8V46W`$V4bVG0~v( zXB(7;X~uhy=CU-Or3EZ~iaE!a^E`8ovwkD%HyJks_=(qyS-{iAjlj1#J!g%dkirj) zTyQS3h0oZ+7i{4hw(vb$_=zoCVGF`S7AzJjNk7XT_ya7|(t<4e;197-*><-)2!E*M z5n!0*2r$AzB|OM-6#gg+l}3z(Vo$J8>}eLxFZh0<+Cr(_XnD?J6?a(P>EI`h!S5%Y zXMT%?O89Z#bL~2bW&RiaqQz42^OR_D3*(LAx*MWJxyT1@5dM>*#a*Hl{+(ha@BwiN z`a{I8(C;iNfxX1bzYofC2h zQhR|>D)OITY{ZW^KN`}Ax6v>8wU}ragC9QrSjSjxB@5M7!`R%Tmi@Kxcj(y&+}f*=IW6#8d$+JZ%*QZ7t_$;_P-*aY z3QJ>ux(~&k%UI1=%h<@+!kC7inT`uj^QEx4Cc<*WdS41#$Jodi=0`eVeuhyrFxQWy z)r=YbDe|!id5j1B%X?h%JLtc(M}F2pf6jY5!hVctj2Vo%jCqXJj2jqh84ofxGM;1< z?J0JFpSlhlWV9!n8H~A%d5qPJ>lrsN)-u*H9%O7}Ji&O9@dD$=j52^M8;s$M{TMSC z^B6ZUwggamS^^B?>p>qg$LPR0Wz1mA?a;5?g2)r>zrgr0qYUI&82d4%1sX=s;Iu%p znZXF!)Y+?MEQFP*xWbDV7!I;(Qfgb*oZ0yftEM(4l_HSUU zV?4-sg7G9{ODDs)Ftnu;<>F)J2>ej`84M@Hk)1h4#&E`djOmOSjJb?9#yrOLj2js1 z7!NX@U_8lqf$?KT8N#tJhBIa`<}q$yJji&G@nc5Wg+nohGxlRlXUt%ljZkUSJf1$c|(TV@zYrWvphb zWvpXtWIVyx!gzsEL~?oFw!8HSOTUY)_3nHn)~riW!3#_q9U%tocY?=4#GF;-@j@GFCIz zGBz@%Wsy!UV>M$fW7s6a_~*p1NtDjCNh$K7tm+#`vz9S;I`MO-8%E3|F@sBHhGF#0 zt_EHK5~pRxcfhb5!d%8$#umn~nWPgo(=d8=&z(s+weX+mUd#Lz=7i1Su#B~gX|st_ z&DhA8HitQL3}be`>N%XMxonM5%p-poV=iMgVF4kv5`?MWGQ2HF8Lc7)AGn)%h<>$@`)41n9EqrSj*VRDD14mn9Eqr zSj*VRC>FC0V=iMgV=ZGNqgcW^jJb@}jJ1r7jG};b7;_n`8Cw`dAxYC1a~W$H8yUsT z9F{Scv6``wv4t^hDd|)*<`%JjF<~xaEn^E~SP9ofiDCROI=6&$Y8hJ?!%8_6V=ZG? z8F3mJYnPEf%)vSiZV3*{eCyz!2k#v6-Vl4#-l(9V zcMaV&^!U(MhQ2oRt)Zi$_eLiTn?LNXVLOKH9=31T!C~(X>mHLBV~Z(|Srv0f%)Xeq zn8#vz#oA&I#MZ|?7W-7}v$5fEBjT3CrN(E+?}(!=D}g?eK0%i;}h^J)3kn=}MAyMAs3iBNmOgW5g39 z&X2H-ym{pPBi|mmFnLAt!Q`is-%MVTQkHUG%FxvE)Z|eaqvnlj8TG>`$LI~C-ygkv z%;RIS((=;Qrq!ptp7u>zkM#ZNkEFkro;%ht_UEzfGqz+rk?~nZMdqPQ$GGZoyT%2N z?>Rnl{M7NkAOF|!cTCtnA#7sS#7h%z%=$hneA4bowUZhr&6xbh$sbSdki9i~U-seb zzhxIq$;2Cv<8ab79$$b7(HPSS_)APz;MiEgFB0(DwHTLp9q@s~zQBJZ;`0SDe>h#A z(=eQL9vBe~{0n2^$T;|GMiT$x$l<_@q+Qbegp70bjZoOFy9m9Vlx zj1?qCh)rUW*ow1@?P7|!8*e@~<88&)!8t8z#9Mf)@NG!`fVT$E;#A~4ycPHX za=G0<8~B(%UNIL<{OvO6yJTCOnmxNehE6*m z_)owQ!7ad#x|1Cp*H_(1|DWC4`#SZtWo_-go}^jJc%&z3>QLYJ{0#cFy(nML_rNii zc%&DOq{MG}bpj^!egZh9_w&HHy-xrOd%q5>=zSLGsp)C$o9oE_&(~3mmOkXarB4pN z#ElChJIP_I;Ll{gr-hID_C~}0xi9Gib)mSzy9@%SeLwPF*Dn_S%%EgoVn4zO%vsnk z1Ab3Cefn<$XIOvIAI+G=a{{dvb+W?AJ=dQ5-sWzH@2JJ>(1~JACqOwY3 ze2sBTBuV=Xrko}-)($4l+}^~weu#l@AnZe^jm_;%WzsxkFgRK#B8oJ%g?&+EdHB%r zkd7ZpeE$Jt;qIXn)_(wn{ctGZchOWw-$lO*&7ZALb`avefCgYj!i&Hg5-99Vj5jkT z`n(K&TKi_8J?3>_74voMw`7>gNiW8BAh zl<@@P8ODzoe`E}vKz3poCo$$SRx$2oJj{5Kv4!y`#;y}7>d-!hh zo$&uUc^j~7=~EFx{B>yq@b+7F#{b{?zgbH?QQO&3P4!EDKhZ1|M)}_XX$CMb^1muA z;JgMTo)w%^(g&Q^feISF;Cv%-7A`IW72dF>`QlsI4xI0R3Uft!`2UWlwSMAzpu!A6 zbIFeqPX@#fKzyr$nI%a4EQ7%L35YLNU`b*=2nPS3vJ?3K0OEJ$G4CkM5uL#gQX$}X z1WL>VUBJ%(28m9pEBL`cg}J61{GC;I@I!zKGiML@yQ-excL6HQAid!4rb5B*4pd?y zQsgIksO!M#36z*&`hcGWlwvyOG=&)~9R3{4Z3-vmgflU}Nihqk#EqB*C7wJHF2Fl( zO5DV_2~#sU?xl;R3zZ6*H6_%F==_>PGY*Or0*D^>zh zD13K-mdR+yW$;^MInYN|0)6oX0=|{T_XkS&%Ugi$R;6dT_!R`^pXA z_halYH-R6)I6&SG|3JLGF2!Jc!JtGW5MN2->jfo-0Huh=7Yg`tjd2*hLXdd=M;Iq} zf*%XSH@Wg2_~RK9GmgO52TCLXrAWrJ6(vRj@f9$>Mo@U}LO2RvBq%W&-y|qJ zK|Ba)I%5XDN>E}f5bHqs2>h9hOK!s

t&qFlZTe+3Y?AK;hxl(<#C0nP@-P4Z1}HUg!%UH%^a+ZZ>?GvM3_ zM30c~z`upDM!pNqR>tk}eeicM?vm%g-^qBd{1f=QflAyb{|x{AjQjB0bV}@H+%GSH ze}M5p`7!u)K#3=;pTK_*h+p}Ye}(^H#z*l5fE0%qkI27)f0*%c`6c*I0F`)7ehqAt zmw|7{@4!C|L=TdGhyN|062F%}!v8i4SG=P7?udhk*XXy+7dBzW=Km1XuJ@`X`_>x_9fPWZctm+6(3}c)M20tE% zkydqvKanv>bpdBM;|SFa{EE>?KiKrB&{fdy&`uux3}-mGo_E>-viA5o-c z0*lpbV2PRwELArG%hXN4WojYNp=`i%l?SX)c3`Di0$i>Nfh*Kf;7U~ttWu@GRcaaV z7F7;httx?Q)CwT(x&*FMw*afv8sK`h4tT3t58R+O05_^lz)k9Q;B9I%@Gf;1aEscC z(%Z_oO>G0GhH<;v0sjuQ6Znq02l$@a4Gc5x1NJi>01h(t0f!g|fH6iLFy1%_9AP{J zOfen-rWuET8OCAYB;#@56yr(Y4C5$pmhlX}$w{>y#+)$P`Z#96v5aZp%n;+@pCK~g z&k++DCxJ6lWWzsGTo3FKLmy6HfUm?C={2ZK>;v4u^im%|W65ld@56)WQ<8v73 z=kvH&CjuDTfpeFLV@v>Ns~GDOj<4uaefj`L`wYX3l;$HXTScuNJdF~&M;t?m-7B7Fd={MhL=)rhz}YL_hJUa4 z1N{5MS@`#f_u$_z{>bKPbL{|DgB^{(A8( z<2T?uBz}PZA@M!@4~w4|{{haULirL3-^1dtXvY`;&J&_1V|Q?#5`E!+N`%4xv>3!V z7@TKBG-DJv$3z_b$3zVL&x&NmRB)aXqv3x}q{08Z$YdM~&WmCaV>URQ`Lt$#hetYG z4*W-;(J`Q7myU0AJlpZl9Y5`OSEu?;Cp*mxxjAHPm#}Ub-6nOL-tA!bcY0cSh4vcK zE1_3vuW`L5_nO|TQ|Q>xS)m(4cZ9wf`e5&;dOz3ubnkP$U%yWD@#_=ZC%Mm}KBavg z4f{0A5+2@nNZ)CFXZKy$x32F~eV^~!*!Q)*fA0Hz-+%V~TfbW(-i-JxVp#ua{b%)e z^k3OOe&FMS8V3D#P<`aF$k!tG4SsZR^Wf8izaIR|khM{d51kXeIJz>rYFN{-jxl$~ zJQ8y%=Bt=?vBhz>#N8TqXWW}{Dt>5uLj2r#TYN!$Y5dCg{qYaSKM~&$|91S}m3 zhW}>xn51z@w2srcOJ!YsS=$nVvQ;?V*g{XS|>BVCI$y z_e}V9^3Rh$xK)T(l%<-!W7q$%sTP-l={iFkW(MR3J%C2*zSmEldkW!M8cu!}5*tAMM7TMoAZZY5k5 zTJkEKMBW0o8g32TTDWy^>qWJ=6??)Ba2w$^!QBRTJNBS=z-@-R6Yeg!EpS_r_ZsZq zwjux9k^ddY|J@=A=Z4WZH_XInG7e+OII$aU58Qol_rpB^w-;_7+SVU z&%^(Mn1((*jq7o=D8?Bc&Wy~z6Ga8n^Tk8>8-zNz!1Mq~G){nIv2TM|9nvfYba_K$ zb$M5OfWJTD@4~JPVr$oC@oU#hVqUkui_f|>h~VzcVpsPD@f!YS^=J@ldNhk~dtepc z^IfsHXBYXeo{@5HuN3)JuPnJXv_TwzYYJ@^j^2^-<=!cB&2`Jb-z0nV*(BHWc|ooX zYY_hoYZiBfe=Rrky)5_kZ4gGk2GOlwvv?hUui)>(h@tAEh*-EWs-%B|SO<4E+(Edf z`ZtTk0~$o-fM)R}{ss?h5WV3B3`BVR{Tu$4460JE4%(z9MSd+`io7gOMmC7ck>{y z8)y7>*ce6mJ09CCdc}Qb{1ErG>=eID{x<%S<-NpV)>FeLSpN#wA*s;%QPNVlW%8q> z3D))_CRk(PX2Y$4J2;|2yfdO%+&FTnwWR+hE2Zr>BOAo4Bb&usT$9_B+$?M<4dRZJ zW-$;K<&H^h773#o#0|K*^^f@bCH@wTZV)Hn-WuI3%EmN^-D8?XM%n~xIoy44FT;J3 z)*yn?o5h~=2JsBs%ka+|+aLgGig$EI!8HZ}E3#R)ZKgsafop)F2*%dk+37lN-eR$<5*{ z{>toTaeH=ycprZkPqB(doEn{=CYU;%!DJA7|3E3(;5ps8CfOec1Ojyl8VBLsGSprRRHSY)4ND=N&lq3}gU`SOg? zqRQeD?JFs-u$5Gl3sRbHrzpnS%Izd`b67arQCQJhs5xR%d1;A~YSRpO=0wT_dMmQ%_BJT2%(aaCO^ zUQbo(bClVM_97Igm}YaJ(V?SFwpUHJl`KK+qmC+zVQXyVVsuBemm+%}X`ryCRW3rG zau+n!Td_T-bg8{WX#ea|$5Oiks+>k$b5jwKjVx%Uv!gpZ_%vG;HR*tpCfn> z%AvA%N~c$10x8BkYj+f4$X})VT$YO@LpkG$c*=E#ad+?XX!Ps6N{54{4z#$urD*(a zF?DI(33R!;dx1wourIb@+Tu)Plp-~Arj&E*5t(fzQ!5JW4lT<;nrD>RN}NhlY%2?k zD~rdiwC7dQs6le440%~@cMzwvvO+jq(>zMljAE=UZ)xe`#s8@?s7vv9-)6P3#9pz` zX^AJM|H)c}ClP{c8@-D3zgaEmR(fr-+~(VeubmB3a+S20lB=0RT~2e@7ZTajEv9 zDOT85RtVSd>12#sZY!!pKrHJ@D~ojJL7(7-rMn^KlycL`#AJ)bLJrn~Hb=QVJui-GY*(wTVR8*m}P-B>YR$wb~4kt6p>~`#RU3@)mXs#YBqH_w6 zvwZX&taHnk(x6kmRAdyDR_0TiqkPy3F-^)?^TkXWnF%uoyFv}7I2oRZn)f-voKk#6jb<#wsjm?CA?{H1^PEqYPzg! zFV88}dfDhs4pDwB0fopZt*{koZ4@x6w&tW>&E)8%3lSAhBjXG0MfoDNRUj|%)oh4X zK?J4-6rwpvISUV6Z3e14t7OVpv52~u-m;CaEXm7_6N}BY83sGbX1a4Jn{RHboGZi( zTT#&>q}HhsCvGlXgr-zjUSQ9637v83qBdJX1#f0)G%d&Ih4x@~s@e02+dA30c_Y#2 zC*>5$xDw1Ul^&5)@)pl4VLG6WIitvKb7U4euqr8aRB2ve35FGOc|etxq381HwiVcH zaiz89u#T;SHhw&!Vf>k4w=Z@2d27W)w!LIYMFD%Km6r2vfz7!H3O3bIxTLT|umx<3 z%rI@OGB+gD^`LgZ}G@q^idsp5Ihlv$dG@fJHkp6-Z^ ziQ1dVx_ShrF|w8R)!B5|;;BY7_7O!MJlZJb;5=huY3WkokvN@3N(+V*hyH`5y6zfz z&O?@Rfhu$Dt}&P3;6;z(j?xv_Z+miR;f|$HahWGGvyewCo1+Q?S)Mz*n@{`qa{KjI zD&f#(dg%&x+Nn%6MXdovW)72rd(c%%mib;q>(*{th)(@$@ZF`$9bYHK4AZ)#HM3Pw zdnA_zP!Cd zZlxe*6JxhJlB7q}28+V3$rx=_HMhwQ^9IX3N51 zgPjhtO!E3ltPb_EgS7Q(j5`-8q?ceFR*n-gbM0sz!I?v4p1H9@M|U31W%0=!k09ep ziqL0xu5yk)f;L&)BF%#t%)Pp*xg4j_aUc#VX>MZ=PtkLFg36MmT*O{;40CZFUR6?BjQyENFV8D199!z3;fu;*c40my_$jngsh})! z*U2iucm`!&Pty_ttDw9}>`(0Gk^&*^ygAQ8gxHo>6jD$#7^)g!I7d#FYZsKal*)%A z;elxC;>GBeJdb(O)Ej3kEyUq%zPsQZrlWl*7dO`=cWL{|3UfGf_I;Ba zmtRcb%^f)DvK?nkZVOPFfrDFY(@DvB-0akA#Wb6&yO)Z^C_c;W=#d1#wj+(QXS5jP9A+tP4-j%X~%}? zYOFIw9%aH+<&hHeJe3p9<;UX;&X8!^h5ZJ0Mc5BuvmgHwN?0N3EUH*p+PFP~@8Mgk{IbP~s5 zz1bex)L;;c>y*MHL|YMsN?(EpnoBT&Iv401g*TUU+YAY=^#?_9Eg6L~<3)kvF*e(8 z%}Kp_$$Hfs4o2FPv@%sx5_n OgdX?TgRUO3nqwkZp| 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 literal 0 HcmV?d00001 diff --git a/tools/AzCopy/Microsoft.WindowsAzure.Storage.dll b/tools/AzCopy/Microsoft.WindowsAzure.Storage.dll new file mode 100644 index 0000000000000000000000000000000000000000..e22b1552f017c8248b5314d1fb85f41daea294ff GIT binary patch literal 1045128 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

UepdEjal5krBIwROC1__) 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

    Tj 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

    vS-1 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%0A)`#$W9o|k>f=RdlEfvjgi1%JR z7SzW8R(wZr=X0`LH9*sZd*H8l8_p>-;YXWi3%?6l*GYZzc;6|QKu&xBAT4Ff4WkeF zW?Xc`E}Ouh5udgj^U1FIY)cU-sS4A@dg7X>oSte>|0b=kzYFts2R>?W38bQr#~xRy zO5a~QFVd`+lmY8f;P7mJ5`))e2y0Q)fUi0Zi=S~J;O4RQ$GTKBTZ4~>d7}Dw5&+<> z5kLYsk-%*WoOsyDN~Rz8B9!|?=&HTv=5h%V+ggpcLCz3wSLyN5n4!$3ykvkQ#F#bz zgneBrdhYm2JHUIOyxJV6aX)qb3bYj^i;a2)z_euW28^6}chB?oEa-L`znnqy2y$>` zluidZSlum7V|A&;mgart+ybxL;@$&2U@&AZGhkNrEi)s27X_wOOMCeX%o{VjMLdYYco#cU)r*>ON&a9QNc1} zvkPW4B`-OWp(_PLrsXSGgB5EY%ZKJkf%nlo(fGDN$(Vp(z9EmY$sMOscn>j?leff6 z#Bj(}-EG1u^ zFS%_-0#5}o;)K^SreiW{oxWJk*%V+g4$pBB!&9P{0&NivvQRfpi`8``=1Cfs4mENw zQgM=Iigzb`8B(>}Ezp+PAdJ>Cv9`_zO}9X&8}@D@+(w}2`m7dkAcQ;OtJY7BpyBow zc}tY*36e@{qutPgaV|e<^bwT@qqa)w;~}JXqr~F#JMygw>aCR zcn@D=FeP#`BVfXa6TV@yP2K8EM=J+Yo!2 z{_W(1p+@cylK1d-qT-atNb?R8;*k%=Uyt|}a{~Z`50C*DCM0l#JrMj{T4nGIZg?C# zhoT3+M>u=~c}0;oGIEHfIN_V(NpJ2*dJAK$CS^PQ4(10zc@OVYI*r^FkK7%Pyp<7C zbO`VZR^##Lt(05%(nP!y3~P(=xXxY*dk;upsBFAKx%oDP`AU0ZsEDZOvJ=1&_y+SOx`3L6mcBI2v zI?V?VP%#jJ32jH-8IN?Nv?Hq=H_?2Mh~!#68qprN`7Q#agoog8A&iKx`a8}E-oway z`6HUw{?9R7`lQ_$*(Y5hhJ_X*dien8w8gZdMga0z z2tKDX|II5nCh#z&ka?l>qz{6a)1|;+MMhP^CeUutfDW<(J_KBLG)A28!;C=&Nou#+ zR#aPU#E}iCgCm|(^}>%Bj*K|rLx!UywK=w;ogCS8J2;le@uTE{OeOL$!=4c*{J2Sy zKFh}2LA`*~pD+ZBVA-FsAL;z&Ib! z26={`qo}ApMx5{w#!xs(`aB}7!nGk%xOIji_yUo>NV16Iml%QJ{vfhuv8E*ez=tA$ z1OWJO1dsstJ{xIhrKXW#(g?_79XA|$Ld1vz)1LIx&sK&c7aK*ljfc;#@dJOWs0P+m@PNp)9 z@AaSpisOCAUPdmQEC~Mv!X-nD4c@{`?I+&KyFlWFUj@_)zlLATOB>D4lAY|+SK%M|fwI5H25|j=x{CMFv z00Z@QAlDwoD@0;vn~>vfq}FcS(}TDB7S6&fH|zr5kMYjNIcQSW+17~?)1TBgoYh74+LPqkVlzrzeEe!DcO1z!_c`cC=V))VRlzp^!w6|>Q)r2ebusG8;aVb}&xgL)gt)gE zXmHy{(3hm|pMhdDzm1Y@CrIG@4oL+@9>>erZi4T!-11IA&JS~F7dSMKYkm)4zSHV( zH-uA!rp+N0uT)F~Yrqo^fAqWI_W`Q)N#oDEUK+cjKL7;p^3r~Q&&4E_I{YEvD?aLl zPvV~UCvJ!2{eJKx#uELB;KvMLAu;?30!6&m5^IX#9)yFVkQtVRoFdn7Y6G?trC^|y z9$q;C^#4kFoS(zH4zNT2S@bzQ%vQ*!D?_BgQ(I(**W%MEE~WUiA{557_97UswA)u540sWSK}veUWscq>IMX7$ zuOK|J1OzCy=0HsyjZ&BK^&81jlv;g$Bmk=yy6w%S_IgVoqO=#PJLpDBsVnR9mHXY9u8KE(I!%9~Otj+{fYZ z`B6!w8<-?9xZgvQnZS^0#c73K?eGXhMewUSm1^05HdRnHFz*-w@WN$1K2W*Dk%H^t zg7rF>VNDb-lxyWqPUv9lg^8lJV)G1rJTL8NUu%&8l~u3j6B6Ompk7q&aaS%uD`~No z(!lt7k&H7dYBT9@ zdT1SHkQs6sJ7GH22AC94E5aB9+gSI;v6vEJVPI-wJru`cieQ=J9#M@hrGR)+!^C4v z&(>x>G`&{k0uA*c8iCF{3SOO)Fp*Kl{*{ZFDVbc5F%i%L3&mS`lPSb<1X}9 zVqFehhfaeGCbcD=I3gN3#B0!z(8w`fgC2%PPOV(tlYj$uAgE<$FvOfu78pEq{LYjQ z>^B8dzWvaAD3;=?Qigl*Ce({joYIlw_z;xa!vW_+Xab$Ras0y8P6rOfBP}?IDXQop zyf_0eKoi071RLsv=vKy0Ow{3>QYVsGHPbj79JOs=Qz{Xx107D@1)ssxIn(2o)&zar zQar84Ey~^!c4u0;=uQb58-#N6U7R$>q!0Dzrh0HjH2f9Hk>(^1uTM#ctwvqJe}`;6 zuA4-L&qs!N58tihs*ShE3x5p~ynFXNxDUT!Fxj6B{v83$3p-evSHU%K-2MZ}n(y2Q ziriC@dz36P@SI^<@(1_df~xiw^-Ruhc_z{7eSMLJ@Jb#H%&X(9l=Mu$j=c;C^^F&D zo{PEs^H7R-(=h3o@vdk)pu0ZWqocai3SL~y)(wyhB0UKiu@LqFhskR0xH;k?yDq^^=rml<z_0IPqFmA@uN-NJYv-1&Ped*ncRN? zYTv_CVt+wO@B!=(1^*S}CFg&g#&6MnXP)Ya?J-48<+{kJyb8Xe^lj|HdGh{Bc%|?s z-Da8oBy34ynmD<{l%TRB_;{0##9UOEv{-bFq&C<>wo=d!2wn|Th{ZM=;5oDeIV{X=^u+Zj3> z=c>8p{~&vLh6K zZcV(T1)$q*4(j!wR4b8yZ)SC`t`cpjptWsJTFk(zEWl~Cm(&uD5c{PC_2=Pt&6@uJ zleC(x?$)>>T{WM;^ePelFA8U;`@P^4RL06*0Ud8G2K*aw-7fevt`YK zVq)W6Ba{vE3z_?;W!i5FQmNn|@?u;E7PFNSuF=Lj!Aa{)w@2Ia;$*ESRWt7nTeXd6 z!}ToQf1}XnLG2i7IN6qtvhqs+>OuR7*C80w!oqx_dL_=k&_~n(a~@*!1vR!1G5UNO zt5%L|9gS*Lq|b*Z>##tuw=H0%g2%gO0@2YL-<1*(ufxqCDmH4hqjj%28#7Lqhc-Wq zM%|rAYfmj>Xw=pa%ZW>%*mvewCF75*1thHBqnsEMur|f#3kJF;K0d49D|Z5f^3nY? z+uxQf5YVZaU(p)P^oXF?!WLBW6X*fn${q-s-JgyjG=@+gb7AJKU-!iyYw+t@$ z(&lbKm%Wg>?QT|Sa>0e;5>4;0zIX2Xz~sa|0nA*2AIY&1>p_gygwKGh`w{8!yes}7 zT$v4vBUc7*K5sXsX-d%2EVCLKzpCJi*+#ujF&Q2Y%{E`zs+e)JjSo|O82PKEUJ1{Y zxpTHF);e9ohYR-Nc!@FA-8iBEQ;jbosHv{J48y~Wd@w_8%a_HQJAr}q7Lmc^e~f9( zz2iTt9134a3G_*t_aSd>u9Z3E#$&<$dbzR~S$#V?xUyaKDg@ESId&X_g7D9gMNspx ztY!Mm=F#!AD;~*dcrtfX-O*K0wKGT4=jfRuq`CvA6|kxuTU2`jO{9Fgv+bd1)$B}Y zR#(jk5;(tMQz^f@J)hBME~|LNw>>9m!`hEGVP*R}U?OYZ5&!^)juapP05IQGfCKU= zp+$4C3Vp`>C?sE_ZyXXgJtR1hgNn%dst8Lit>IwE{-p zAdL=@NtWh^DF~4C@FK5QK%K$o;K#L~GNsDy@sm}oh@w~fKgPipog4RAiw~8zAX|9< zVeryeUR<=k6nU9Ea28JUfb=GhFCmW>RG;J8gC$z5gGnCd+e$XxIk|YL=5d6L4>A0R zMcnozf3e?^hSz*zq|0Z%1#z0Q0`c?#OzumGw>beo|T)?=_h%F_|CWlvt4wPNq_aDqDsya=ZyGLSe@Ci8k76ArOM z?AzlhWkC}zCgc=?*AwG*r!>Dl=#&=YtKmmNl*XIz6MZ$j=mz&<&Ov|7v9O!KH!tEAf|@`?R@pdx!kq zVD9&sI~+)Xzt7wsGxw*>oo*B9IDjWi_+i{9{(>J{1~2VWw!Eb-cp0@}Kkx|Wf7faF z8w}s9VVK#jV5^2Z(U$mMWq3-%pJ(_r8iu*-3btt&qICr?*D!W4x`OL9`~<@{ zX!ucvZ`ANX3~$o#IK#IvY?Llf#01xB>I74FNLbzy7Q9yBD+%AJ;nNx3&T#vsU8d^z z(vRjGG>|Pg95xW#MI@|u4Fq>H1U<3d7vO#c>K$M8!{_A-%di>M(|jvVK4$QA6^^%h zNu28Nl$i6ig$5s88&4p1;JYn+JpcYy&27L@Qpu|iv>T9@8=L~h7%RNs9-@`)0qoof zh2YU6BVI!BaG>j8;J47_eF(<^=Stv=S!lTC`#aLnnsZU&OtOj3$l}3nH#`XU@P7DW zE)G7+BLRE-R29!Cg3kYOQj9i~p<}^3t9Y>5X$(9A!F?^2NeE-u77(FBPHluMhu8AT z?=|@C(CG@ub`@l6)=>laEYLKuJ!hKeo;xl0^B|?S*IUXu!uF6K=IN(MMZKq`Iuk;b zNoYO{!2r=9$RO|YF$xOcJbO2Kn0aMK@NO`8fbnuCoJdt~ z=Yxqobs&BNG>MAX)(T|UNZsNX2IdF$^g`UB+eO4ON?nX_Gr&(cL^4t82dLCo1vaJX z@G=)v<7WJ7DOE45zmR#XF!e`dvx@X}4fsUueTG)} z#+9T@KC1&snVF1Y0sB3)(DH7UxVK`~=To8f=Imz)P^bT`47CbH*!2#V8emPqcX)0v_$WunBf3(qIKv;%2wE z4LU?%o8NR4`mxCUNiu`2D+HfnNOY0ld%XYu$o82Qlg}y>>fyO%Yi*ItmW@degy;Nt zFoJ)wezu)%VB_erbXV~Mz87W-^VT~-!}DYQ7N7_Xk4%0MrGp{)0t<;|Rb%DjzJYNbeZ0~nEY()w z1UP!;Q@d`kycJr(&~b$A0eYY9HovB1Q$LSnk^qGLMFfz*S!Uu;44wc19$VOLvXf~A z(Elw$mq0WZ+JrV{PyG^UoIi~tcQda!h=OqbbT9(bL}(SJHTMX?v~ay=}k6jcwQ;&Tl2bKd`Q4A3O}G_)7HQxMeH7sqhE{@Nljd{0PNNh1=08YQK&T zhr0DdK5C!4F{Y@!;XM8=fb&mI+4v(N4wU${sv91KJ8HaC4{|Uec*joT3n++q*#I}b z5|2E}$SaVsqig4M#rtf#daxb7076x3ZsVy4#SYH`Xa}7zJA7dj)MqG_t}`dfUAM-t zZ*eYs@FmuHbL3lS3wOVaR`F;^xt(>u4)b^3*-<0_z}^TT0oqQTbH7yT`;SOvJ3EFY z)_MA|2ueG{a*jVugx37|I-&VbLxb(ch~{|_4K~gEX(F^}E*6?U8Jey(jUCa*Je>$F znwJU9pAF3kZJKov&4~z16QM=(Vxjqqq1o@;o(L@(U90#nLxa{Fm8Wy9f(R{|gyi#A zLvwqZ<}L(9Z#N?_O@tPW_UXSFn*H`^BCrmh<(+jX0n~j|XR1p~52Viat4kuZ@>ae4 zuc6tmUWm}5QN8@Pq1mrqh(H@82CcnL@@F(?76T5f7DEC6bVUFO0ANP|34qgANlNo2 zHdZY0qXbFlF@|oSB_<3XOn2y!Va@MZMzO8bg*Z_M0-vGN?ajwvD7Uehg99gSkRedU z@`Iq$QPyM2s@weby!6vP?VPYK?3kH~TfpXxi)V3@%@i5@Q&Nf$e9UT=5d8$MYiEq( z+C4@thwn?b;3LBRk3ln>ojTl|_BV||UVNO0&{Q%Qfk%e3o#X#XyFg!PUvwuw7aa<5 z0dw8x;H|?iurPn_uV4f{1vDH%`&lojpFZB(IP2p$k_Mb!;;^ww002jc3M*V^WO+u9 ztd77KlCh)#$8F;jXW~d2aIkdE%*khXCXS>5$7|yZ&BT#3;3V5Pv+|NO;G~}eN78_U zHS_(-BWb|Ffr$ubmOPRM9ISXmIJ4xDG~i%QF2b3`N76RfQ{BM92hf{eMl+peL_w@K ztns__S>(%Ie@h}=AV|qEg|#Jt$gWIDo694OW5KCt1!gQb4MDMKaE|?HBD8G8R-qX% zG-tGF&Wvc#o&0Gcv}mw6g0?+qXfOsMpJA>IqpN8?>q$d|7R@%HDHxhbp(&E)?1<(? zq#;6!=H)^&WN6M28d-xrH=;R@G(>38Y!{lMp*g=zb3sINA!&%vqPbpZh7HX{ZJLWC znirFX2<4;gsd>1wO61KUe5hxd5W6^CG6?7<`cjia2w*i4!Wtdr9ev%F=kYiOIjpL? zFw_*5r4iylROu>I`x=174~l~ciIK}3!y~@tJ{K@D+OLf#0+w&L@-A4kIeZ6O19$$J z2O|s9>~Hwa4!aa?>@~QtW8lWNj~lx!Zfxba(HP*y_H1uE7{Age?QLJN5u|ysw^0wG z13PFpl-%8O}&R3fe>K$sMPA%1Dj)qOPQU*z3@_S4ll!xe7sPh;pK?0 z_@1-%`6v&cWbyHAlM^;T7tX2P?m(}F@dh3By3>9B1u@w z1p0rHa1|2*NjQlKS4RogF`+66Co*AUl<-O>j7!3iOkndPt0~5&+18x!1|$o62Esg% z!z~evfpEFNwni`p!h*oIMKA`!5rJ)wU<`yqgl#>PnbY1$=8TDvbGA+}fksUd7!yn8 zY+cC&S}sXoOw5(Dbrln6o+N=Wu}RLApORfI*Kr6zlJa|1qxJqunH4OE@!y` zS8c@63eR9Dzbqwh75>$3LjNfXH-orET z(%X@x>~T)Bz^Bu(fOZaET&Ax-SXi?c;mPoG0l-TQ4^*0w#s|s&NR$o-+KN1~gyS;) zK==ai;^Qe)uxfq?H2!R}jB42hm+JMDEt!O-PF_+@U0FTRK$n6lmk+wscI z^4ZS+MWO8Qcw`cu&$6ce-wKz*J|68-33lg3$Y@V-ET}HgyAv*kQyYd*Q>}o`!q{n; zNE0W-HjP(tu&r!w=?HLa!;roo$1qsD#awNVU zMt;;WT&@9ti-BGxnbNj`0kAoZtZoE;xT{B{^B z#CbCxb1ha!dtjMJdHsCJN2tRCGz)w#h){cqV?1A@H4kug1@xh*Vh`4l31s!rI)o)s zx;@E()11vO!~lzZ*D>|!^flDUY7Wb*3G|1lFL9{697Nhy;44`-p{?L!&1mOr2EAIj zIN5_xs|I^br2*;&Ev5G+RLy`UI9jTjjB-*=4_>7svP(%2Pl}{18I#_Cio(9gO$s+S zk3Fr7K9>m3XAmxrrXZ&%X+V?E))Q6*1MI7$KmH&xGX2)x!E30%t@J+CRv+(#yC6v( z-_0WsC)Uz9j7nb>?Z6it(+=kKY%pvfU3T->`x;WH6_js`eht-%jRu z8ytc8Y%bHE4d~Q@c~)>*%)1mfpr;Gw!ekSfKS1Vo)Jxi(5X|2}=6Hbuf%%?XcYjaR z4}0SMa2`LaO5A`Q5zK{&)ZjbG+}S(0StO@Js>27EzlY565k&&?eYxKLzJTs4B<~ZP zmgJ7&2J~scT$pU8iaXY@HLqb+8CBbypDPZ8As1+c(+QIF@jo;ME*Uste$`7H#!bxgiSI2XEX5P#gb0vlkb;J7;VXfW9KV+#-3?TPGhn>?ZFmQ5mOLMk2KG)-^j$7D&VSf}u%7G#+V)(4yHP z`EVXV8crn)&DMx!nlwac(cCIDoMMoMvkXJCEuwijX^7CG*(o&i^GQQj-_UH2Xs#y> z5vZ3_d8b|^0KjPxKmq`q9swi(z!?!h0sx#D0VH5_iy@QW4TL@7)Pk~bc7a142NN67 z8zOmLL3xP8IXIp0&N(ttir@(ZRwcYm(gf#T(_PM@7gcc2a2Iz2=q1o^H3K3c~+l7Wx73Raa ziz!d%S_u(aG`c3kSqy3RyCy?~7LBg2aDqdc{jRSNfpyDSkGvC>%LdZu2#Ku&TqJUH zj!Ax;bQ-xW6hZ6_*3tZFB9za5IUCa6!LzVQBl|krg)81HfE8NbZoU#E0nd??pRfbu zfiG2IAJU8ML!J+MG=&%QHrD0hv*nM2*YpMC{xN&%Qrv6(n$r9e&MQq5f|IP0QV9PD zkcM$CW8oCp6xS;^r#Lx%G1*98@Z?+0uVvX5PFX5pZ)n3TBHb;@QGpP%lo3}|G|xI5HcNh(HnDs2axzt{nN zWjo-62ZQ9NFfe1rTk6ZXkwB$%sxw!twhx`{CWg-Lafi+hZemr7-Vzr2rS1bvu~K$k zfnyhYV+n&0R`qVTW4Ol*G3xz^7Tu27HsON=KtQmtVwS+Y; zsgC5da$#P|vG7(-xC_ApY(_>V3_|?QIr`)!z~h_M71v#_`Ru%+IC&aOzGKmZM%&be1Mv zNGY$h@T$xO!oIX(u=cN&R7@*7uTXI&i<6v4N(VA|QgwL3;MFJ`9LR-IA-TkQA%;ktqkRzPGlUHH8b#kKEI^^CB#Qqlb0GF~znjFU6M(Sy(&xnBG2$ zTlJmAvRxTfX7R4J}yPoeTEyas9gU>@-`n9qx)_R-6U%_s>!qAz<7-u+(K3cdMl=s^A!^_bKG{_2UN)Rd7wUBc z{nejC!R6tmI}xaS8^QUjzoM|kt3RWGbLxjz9@d)2%R9#3j~^eF@a+(?b{{^9&W!BF z*CSD#nFWbZ3Pn*CULXIDX^;mSFIDK>!ACOWiK=s!9fT*U7B4H}cm8U)@fM@2F;TQ8 zZbp|!Z0TyQMgx$^D)`c6IlwNeFT?Mp^;0L#QSiq41OSc6wHR0|G%X7wrv**( zp&M%gt^_JVa~Ve0zA&6V7#203W*BWSW+|Xy>S^rIdj7MbMOFSZMh>KFUrTuPOSbr z_@X_i=*8gEt?d1YQb$_wsaTTBByB*&$vd1ifBIiMU51vMOpO<9O~4WB$tGTq<4toI zuN=}A!AmXg!@>xgU&>2OhJWDzo(}&9w?aDn18!})SW(Mc@Q~8-9A?p^!~@d_CB-_@ zpFu;rEoxfZK?^6cgd%>5+X<6*|1 z>mu&{uKm$f&PbKk*Vm>>7f!B)J(DxW3-)p6i-1d&MNun~k;fa)8q2e40h*i4v?oT` z@Qg{3!fMIyz}6HF-TSrSWT{#oNS3DSy~)zKbw62JQcomdlDlAGAB);%a;Dk3N&QAR zMsZ(K9J;-OU2xFgY;f$`3Vp-oK;Klf$(zRxN=uflNy6MNN*3xDBunYZwb*jBp2CIB zZTTSM^`8h&BoIiJ##VnD5zwuE1A%a@5m~xy5c03aN*g1qG0IvK-;>C>^+^`$u!(;` zH12|o7cd;rJg>T(swrisIRaul>F{hPPGn*S$S!run2SMb2E1oK@ZJa>4Q`!u!LhJ& zvoih`9{z%a?8p;eVOTou#HSGSq{{HBx(+@Q_Y$jdOx@TKZ)RPwU;PwX*mpf>6^ys4 z;96i_i3_VSa*45jB_gPT`c=?!{dg+2QfYQ*HDk0|d+W>+Rc?ti*C{vj80p0n_k8MH zi+koQ^-mlH(0(+qNC-a;l|?=-hpIQvZg+U3BjJ@6kC!?{@iJy6la!fEp^EjY z(yBVdTd?$>ai2PiZ;zycBheP^q)ejh;31T?SU$_)lM;BNwNpC3?m49e=Ab0k(Z7HO zG0Tpc?u~=W<41Hfj={(y`o7(Gm;#DPHUo_rF1^@jg9%BjV0cQ?)JCV+mDd;>279$? zeDt~4H4a>6)H2JG(M~0-FJeG>%k1`oap8nz(<#`gB^VhVL7`KTsX71@1zZQ2%g22J z=X`-NriWW`Xw4eI^$8(cJh_(sG#2Zu-=cB82N&yX-GlqYQxds! z+2T~`9e?NLEs8>YBlc@uftDAz4Sz; zFo6y0gD;!=SM^>r12o=S+^#ElRWR+F>Cb-!XqBUqrArw3EF%Zm zjn_rh5GR`D+}rX&C~YLP5|5djAMMN;TV5SGmrh_-Ut?C7zJJaTnR!LGoQ)|Byt$6;4wuyuayJP zwd$#qj)MKg%nW?Hh<(iM4mTO(JU9FGtI_1|V!v)Am%{>l5o}go#ct4=lA3v8tjMs# zhj&QXGG9Ni8@*(s=1cTCLx_o+p^TK+&1&Ba`R;@r8OOWKnPUb`Ps(;~3L3_KngX?) zCzv7@BXCEnsgzTtU>pv(kl=Js<6_G63V2MZS;LUlhL?<6*IDBUYr#y=V`?Y`98X%j zJL+{-J{=P30AdfPWmJJ5`Sq64_#E<1%qQ<=o#@CKZ*8p!dhij{6m)bHhb7G#>vSw} zd{*KGw_$*SqT5T2MIJK1d*r;*vhfXZ`0{g1Y{t?fCxZ3*k^4`)q&|QDiEGUsJw8XM zYl_7+^jon%-U|sPwG zM_H85PdGKnr|iZ7ppXj3+?06EoOT*WB(BjhkK)*Umt0K)xe0#>w1rDC3q$i04v9&OCwt2pT3;umc&)!p{$4 zvmai{|3}-Kz{y!u``?}C>FJ*CnMpD;NzWvcWRd{kVY+8RGAxsXC7>XSBDfMz6hu^9 zTBnJ689I*gcexnxUU0jJQ4!o1^eXNO?&1b+*9GDNuJ^iLuh$jd@9&&?x}TnzEd1a1 zozL`BRi~;>ojP^u)Lu0-d2IjkOc7MlBB+EScxa{w`j=;TPBe*@m)ubDDrA6?8`^!l zIL}3>8IEP6t?3I&DxJz_;IJqG5%-yFI%d(TZk)N?5fS_d_Ch>%WNda;jg!|%)*eP6 z;;Efc@9%YRuv6tnLp}wn*N49^riF$ht7XR~+5caq!N~$QvP@CdXyfpsLV0)iA3*(j z%TVc^VtKQ37Oan!_()A~j%t2WBkiemgwX{~Fbs2S;v$=W>uCRu3*GmvF=6c~kWpT!h3=Rm9q4ebciyiDp- z>MRDgOTBRJwVYgIX{S7auO`me^u^qDdGmKe{@m%aTeh|k=T3q%dklZ_DJq&CMxh@c zX5PoSsU>j1+sQ^ z*&uhLeOf`hS5J`Nw1SWvYb7CwlB?_^Iqg}Ga}R(o`ipk`pcRWeyN>Ib9zUAZ+b(OW z*Bs&@fBO&9RVn?ve;MeXgKzIb_&&V=zUOt|D;={Bd_Ph34swnxOah6`PaaLYp zqXl`bf}9sI{w}bk%7LRZc7qS#;o&U!d(_(FW5*f$XyQ@Gm&SJI zV=j?CprUfc7plxw0JRdhhF=xg7Ez;3j}=^x?Qk6tT+`nn*|>en-Lhl{PlsR55#ogD z3APb9gOguT90AeRlo-{mCz7E4LU_8^9Z{+$c>EgbO*DDg8v+NU*;L`}Gtg*AlGRib zi;JQtd8-P;Bq_Nb8E)1=VER3uyBK;#q<_6^UMHR=C}hG*0?*^s&rPRBGZLWjt%$J% zYLx382$#H`kBL@wE$?n6Z@?MK*dtVm^)~`z9R@5%-lf`MyskM@Qs-KCvKLRjo=Nt% z#5wxaImqOV6LnPBcDOnz8lP{HTl-V4q;*MdAdS&d@-tNeSo>FqM~+aJ7T9zs4)X@w z8^F?=I1GGNlrTph$}A9Y6?-!*Xgt2y6>*A$`wXmz$KFRY1R&7u45rk?-N5rJo{2r# zBfW8Qi~38G0lFZ$4eF^{{>H2 z)w4Iw$I>Xk=^#_I?T9>**^am`+-wEO;{NqMa5MIpgF6%P0veq_xZS^l%ZNQNM~LZV zK(YQ4l%%EHju}|j1_b6lD$RJT1-3K`$dm2{`~v3dCG(6=BqMQ@*f!#u(auX3MajEh zuHXNAv6pZKJ)@Geb#^c3*98b0S?^m;(>+pz#ebyl6D2n)`mNwvFqYSBVdDi=Rga*7 z=GFEkfs!bBj}WpKu$)nInc!nF>r`ixC;i3kq95&duFq2@$sNc|T;a~2`okeJGI#wE zvd#@lJuKwDD!dtfWjXZR19He2QY*n9Hb$1KV$_?+H^$3xH#l-o9{&G}YYZUv#Wimq z&LnTN|Hy(%+A`>xdvn)3t~h{~4#>tlPhSVt+;tZ3l0{)Sc_VS=N7_He>o~97Lr!X~ zYTc?Ab_-b0N9?jIwba;jZfc)xgWYfxp?uG7CKa$jJzK5KI~yVJCx*T`O*u{z4LW4AG353sZHLMmWb6cZ-Tr`jv%c! zs;pM`eE!+-x$*4m_`c%N8G0eO>hzFxv7b8*%Q`k>9Thp+ z0oP~!4wd6!(aej$7uRo+z{Smf#$oMul-o$2Zm>KlME%VsT^_vt792Xv3D?Z?t+*|& zr6nZw)6}qxpg))o$i2z%2tK}Y=w;Wy6ix53F^)-Sy%XJd8wgNWt(Y|mtmUY`UC9-8 zy_CRdpff#8eWR73zw?{Ak52|c8tDWg(GTrKM!hTFcn6qKtb=&e--&&& zdy3vFZ+O(-g{!AnejZs=u269C+=nzXwaP{%!?)gq!u7g{o9#uT=fL zSP@gpjKz$T_W?@&olmWgvn09>scc9HJ*#H$i@a!3;zg4Z?LD`N6+Hhu9B_-$;8v%b zW%6LMSv;!WyR!8GtX2`bo7mwlvci~Ul3h`mT$ZOktX!5Ym)a&(e?KV4kHYeHEcQ@U zuv_Al6SU^7vw!Aased4)x!MS@+8G@YHf_r~L;knJxuG4K*0vCJz}rZP`XOa;2+R9q z;fmT|_1yZ?FI%^HZZogH@NTY)$@J~roW#DAlD4i~NJvt%8y@>+xW>Q2-pe(&73F@P z+cxfRSwy^;_?f4s_LnXC@($*a`BQtf1CvI$pJQQmVTE2Xug24FNRuhF@0KYnbhixa zwaffU3=ipn8qX$=Nd?-ddN#Ju_Q9K!PS7W{#f$+Ozb07yzxj;CmtPb1J+}{sQhTKu zqQ)(hO;goUT_4q*CqNNB!C8j@?!|6I;fzE9s2HPkUkxk{&;-RSd^@S zGWCf+M7-M3as3mJ(D*P8U?0Iqt^&ZU()8Gt!0y8Cm!f=aE;3G*d&YDIW){3}v3!{p z6Hy%1-f>C~aMXld3Umx+_D5T1?;fwkJe=PIzv@w=OO1lD(Y0=_bYs|!Ave~zF}mGN zb*MyF(e}760}qM=9vdyFJGxcLp%AO{I*W4hho;nj(?b3Xe^UR=3;A0+?f8#e$p3Ba z_zX$rr~mf0|4~{0J%MO=5he**{2ZCo)RyIA$nJ|{UMu$w!=r*8Kd$j5N{dZ)E*tev z<1!HlC{-rO7TQF%$5*0c8T@FR$tUUOlL@1>hf`EGhk#!S_+)<1<46BDw;I?zn7`zw zt&K0>_f>vc^IwYJC73A2+~0y*uqjT3Q!#5w#*&ThD@-c&k4nT=Q|Q`#PLnfK%n;;S zEjf&U=h8@btG7UX)&BlISIqf{ZIe}@>~oYqz5CB_vA++LeOZ)@#8pu9a4iPc z;-KVt1R@z1uEi;?cL~>Ga4kLU#BmjPku4b$t|cih_IGnNEx48(46dc%TI#rp z5swA%LRkTTvF)dKbJ{Z3zZ6_c4+d91xcVJeH;*nQyz^ZE5O94F3GD9&SAW2@k767E z%Yb7kMg65@gRl$)EVQTtpcqKW8NhP`^T*br2Bx>W5QCr^bX2^&QBDpQs=+p@K~N3u z4^<0&t4zllpHNdZw&-H%q;nUIJ|}IT-nMAn?Wz5L7OkszTNUL_iq>6}+Fur}dv|L8 zZnW+%seLqFb3AXd^B3hVjn}-y?cD$SF?7N*TfU`TsDA_(=X0`9tyOCe56ctiKkEX1 zj9NO_HT50Jjw9!60p}b+iES;^}9jQTUcgTinV7H>JJ26cf#GAg=8&c)Xs>e&ug`AmW?4_!nQ`PVBOta zFH3W?g?OGDfefCklLk{;7?9T&Q>6A{T)gY*G~(7)M1c(MY?!5#VpkA_>f<X?8f-aSNnaMoLB@=t-|U z{u%_ofV75-$0^rOfp6<7mUwt~sO!E8`&(LXhn_?Wg-GP4;p)>c_hOoGVHdoQ-+u!8 z6F;(Ue-le`x+qfjAB?TX{u%6aLFfaq7Xp*{67Pd}|M_$XXCuqygbO*;^o+DR^T0325v>nEIWZr)f=8bv?CWHBwxtN7xE@r0m z)x(Rqi~cC+H+wRIjdcTateFdkGRlVTQI5GIFB>K;J0pimMltx!kFe!6B;LyzY@`1{ z1zWu1!4rW8^E@7ES%5j7LosK4G`(S4${Y_lm-@K=D#h26p@A=km*eQ};a5}y<`i4Z z0rRd5X5pBR`K>@}+<76hemg=i*j+t>G1Zr_a{I6i-^N)(|6vPLF;ij$oTW_0zuGw# z3-|5*DtF8wuCpcQ15}QiTfAJkZ(hR2J<6}-;MbCaovX;HK)a8Xz+8b2t85~7Cm+}5 zTiYA$UP$HX2IcOU`O(LT{i*}TzFt&_>uo9o%22TpJck|MrlRegrQ!`OD%$?ags8ak zfU&O=6$OM|RBZVgHL~Ed`OhubEIw7wg6ILZ-w-4?^|q0m$(Jd~9m!Wzw55R(!s>sz zFjo4guT<;lu3VaYO$A;(y*orNbH|0EH|_wQ+^Mi>n8OObYVabwpB94m4D?v=$0i%8 zRiN!Ds@e~nkn%=bb0|eo>ilan2t}y*llMaxa}u<(nnT#akRzSiu-0`uYtjL5n72#k z)=wg>OdqwUdQs8Z3v}nX1sm$u&gSiM(i}gH*##BD%8sG918wNP8O?ZUN^T~Q?T_-t z&)STlOZ=-AxLpMF%cd|dcQaq>w?mIOccfEC*Po8;`4TJ>!ww;P|f~u+o169T0JcV+^jqEdwb|3gO z)q%ormsMeG!sZ!gZIYJRq*tJL z!TeX56v*HSGlQXhkinCxP{GzcK&;Hn!a6@)-~(IDW=BWQ;+1s z4fvMSj4)?%5E-EUd!Wt#=EIc&3OB{#r1m!oRR05?-48@=n*XB^Ga_iK_lE@7xs#x^ zBMB|nWpe5Gf3^8Xg&sD1L*=`_2RSKr#+Smb@b#C&di5~=7f16?in79@a5yKLk-Pq9 z`TRvb(TogTDiE-*4A}QRFT@H_W@%8zKN%%|B{-)zJSnHVeiaEenE@py`mzhfEg7^U zDcU4Z95^AgTYsXRmdW3VS}E`4u=Rb|?kbF(#42N+eCh8>xTjyyojK~bm@&4p@ehp4 zt?kqL{z$6~Z8}~hNUV9kv9z3d=ukuY^j9q@edX~kSwzxZV~e08${nAJPW0p>PV63f zn%h~q6dk+YMAF*yb~*WBLBb@%WV9&}<^G6NT2%hp=4EmKY4URkaYoC}%E74$iWuF zH>2nsl}G@uL~Qg_B~rNR79>k#I;4e@3r#vh52 zUVL5HcuPjY2041uLGpI}^cmhBdc*?oaqL%i169hRGx2 zWnCfo7Hr*P4%sP3?c_UT*n{8-kGFPao^WR{Jqy0aT4hlMB~x2v1liXb%bppm&qK98UqB}&3YBjKka&hnzwS}v!I!k z-2m!9a9q<8y%jRHMW zUEnhFrWB=F0NjuQ%;M{%zoYDKZKc6h0VaIePmrjykQ`60w86PrZY(DgJ?#Ex{Hdo( zn4T>6@pd-PUEAfw<&AxM`r6=w`RZ^8QokHDD<@0AsfU_t^^!q#GYXH`sfwyD=qJIh zo?W`^Sy%_V7zGX`-=lvtP-F%Ba5!d9zw{UDL(o!9N|zPkDO0c|Xc;UN2fBwnI5*eY zTQN)}DWqQH?sg(iJeg(hVnQF(G>3Gj($$>;bS*+XQvuK&xL(}>U+=ZTVIi2_3N4QO z*+?H(>YLPk3GwL^-JkerY(47qVwKr?`n6^;eBST4jdBV7j#u(xiu58A(D|SjWkoLz zRvKp`-fMVMKLB>Tt*GJ>#gAK4op&v z4kj6(%_PI%Oj16re=9w${KKP=y^u5D>dT5hpKkN#jl>gw-hdhSBdhc0@qs@#0BP!D z{MpgsPXk=kUHY$zli`mxAXLwTKZXmXgSRoL{xb39O*oA&vNT`M2fiq%@g>BOpYugF zG?{&cY4WosLWD$wmBudnT*zBCw{%1@t zen4nt=J|n7cxlaYpAj!&>zUddfsS5O$Fy%kZDMh3|4HmS`IWm^+}GB8>t$Q_D%lQd zYgP7(^+m3#7F1=2p}97U?I%QBKSIiFE2nI1Axt*Mo6TdES=k2lw;_c`Ligiy(e&SY)8X%eA+4p^Jqr$hSMruPGEjoHt1h2hm9Gssfa5_u z!PaA^hSY{?zx$I?x)Kzkme3X#cHKk^P)X2hh4GQ;2e+jIP2@*s!!Xjj91kPIHTD&& z>tNIC2^ag9lMxlGL%lz7ueC->^Mwnf$&Q0|n!68_=Fv(s?dHf4Qrby3u0@Q$%BnI< zR?Q{mCo0*Sj3UW+ockAO`n;7-SwcN!LLJRv%Fz8|%E*FDv4^$;z228pV%_t2<>5rz zMGNrj%~^hZ??C*rGGei|T}JG~=`5ZXIWv^r)ui`@HZPb?qJn36p~7nMqVm9&`dC;% ztgu3-)83oaSX#TW8%$QDM0jshNtHS{VFhL3yqw+*ZC`BDwqgIY9Y~Oz|3Z@TpQB_M z(UMPxXoVu3BU+6&w=?3x-jXl(a@sZRaeJHgWFGA*)D~aQJrG~#SG+Y8YJ(nZhN%oy zlunvGr|!K3@o*;lqU%d-x@bn{ly?VRuetwpjf$=cBa9BQS2~?^y+m|bxE5VsZqvoE zdJbLh%<}8o_n)q{qN{fU%^bT+5PxbjL?Rv9*UcKq4&j%;0^BVZZRmz|@DXvD9PG`N5412g%eg0~j zF6P+g)aMSm4o;{$=#o%3mdvfsN~e=9$-0MY(e<@9UCid~kFJ9g{tmiK&n%rwm(uB^ zOLd}Q;aYUv(WZ+znElapa6;QbmxQ*_KbJ10(@B?P*~7Kyy0c9evnczc>)?dDgDweo zgCiTA@}+b->5|NQIHT){$o|x0 z1C&lDT}QOS8C?f#%MPyF)1m9t?dd2W^>2c%moEHPn-8q1?T-(a-+w-gDSrcV`Ji+< z`A}_zYn9Kp+jJpo`=jea_n)qs(pxr{E~V2+*LW+O(e(uQ^*Pa%sY6oBt+x2!x_<-N zv4*;TPwOZkb@Vjv73U6^-oc4xM|u*?r*@<#A@uZKP5%DF_^zq!OeWu&?Mwdg0Q}ZG zxaV-^p>UL!pKNG#nH>hqNStJ;;q zOD{|$Sm}*T?>k+|>+Ayc<84{8FFz33^8}{x*$l@=K}bU* z9}hP<34}R zevGpSp8SHel)78ai!ux0zrxGk5+!}@jb^7??r!KvrdbT#%1Mr#9))`;Qq@zaJ!D??ssGJ-5}E{rtN4QGj;mnCiU7DF4i_$?uK)Ude99Czh!WPH3cEG=h5gO4GxsL=yJSD!;cu0lv9jRrlwCCt`&(qc z&EapCU9t`QM%fv|D*QWSmzZO}Np|un_}gSx6~fL+n4fpS{yy1N6R>|!cE)xJ{~p;@ zyRfq$S+MIEvH!d5sw~()B>N{k{LQkf0s{X4_NVS<5<-YrI`ggd*x!%+X?6)14wlyn zyQK-RzgKpsPz2U93%jK|u)kY&s1Tghxx#L#5$r5n8Wn;|R4_g&kg6E=kH~HcHr>A*&3(0W!v+cFD(5KCJLBJ0*8WH_i((H6u`#^B zF~RStbHY@g0)w@d$1V~#u5)9Xlu}eb1X@hB^{}z|zu^T-83y#DZL@@G`y?;ubY9uv zjHcJ0o;He>SHG4^+s8eZkT$}4>2}N?iZ_jQ=u3OYxm-woPulc|#GBf39{3(OS&`fq0MG<%|88ac7J;t>(5FE9FnP1F@Fp$UXzAj ziM<=|LO^<4=!=Jr=4D!+St}OY8-_!9%>xT*V?JSDHeSDhnw~1%G7?CtHE)vaIhYG zwrHwRRF_9HH2NZ8d++1OPmUN`1ZX?NUozPpnfdXFKS-{o96CwKi=n9PwSbBsYl#c5a`ce_{A-A?#kJzA>t=u+i= zMtWi2&lEVcM`H_S*rOq<@6p(bP5XYfVK()#qC5_Z_dD04gXpZl5XE7S1`ca*ugA>c zITi6?tA?R8G)C-}|HPZ!EJE4NTJw0E(Tu)ZUZen(<_XxVPbH*#$$4G#L<^?xmNz*b z*>^rr#i37gy9LnKHc{H8s&X|?lE;uyW4l3&tixu6mL~*d@K~aKmEP4)+5E!l13SoU zr*X0c)3=?5T%N{oXBxJpM2WYzl(5ZK0E?X2W@{Arz7my8C^M<*pTlSNl{^5b_D4Pt z)9Sy<6e(6;B`s6hXWMr}3z_b_k=4uenJ7z@DUEWzsSkD<`h1gi*7x8%g%Do8t6Sx( z_?hy(fdv1`Z|d)SC|^TABMb{lv6AtEXH`T6-vU@2ZqjjJ6OO*MXH)8Q1@hJN3FdG) zuWQnAAdJ3SULquxngd+gb#<=1n{=17=SMVIDI0Nz%?J&pEF&_99{iW3} z)%V)PbM!!PN}aGdY+0)CD!tVaGy$h1SC&j0jq~6YkHz(tZfNPDA9UB2R0DX~4c*1f ze;7*8W(+rPEV<6?S!2S2;l=amg6F07ZNELy_7XhUGcbM*pgp z%~JZ@ExBq>VQBT9!tk0sg%u-v3M)tZ_7p}&OM42l+CJmKc$0F~o+81D1S=A(s9;3} zE6!?Gb+uumZCSOan_%4p>n2#Yf^{oc_o~swd%9;enjY=3z%(`|@L1M1jt#>@IIdbIVuxZ~u(wD_0N)-GzwZLhhy$650| z-q()tIK`0LVz`IJ==Avac8td>hTImzJuF7sgD%Potb?Pm>nX_of2rOjOXPghr8FLbyN6(0IiD|2f@f9e`E71Y#5rY{v{s#l4GcX>Im_FWAVkCIq@H~|M(|F^(AD#ULhFQhZwzQf%muIizB=7$O6DQ zg`)$mkVX6I%5c+GzTdm(hV3!e3CGOF>dkizF?V7Z5*p!Z%Ry1K9E~%;-14DQtYcc0 zWRzsF47nw3FMkJpp%27Z)!IwOxM_PStGAcW4ejNJfi(4@y<|L@Z!(bd_VQWQUTWN- zd4Z1^9~D1y=87>#j=8kl3xfFz%qiA})OK1@Gs0F=b7Sc+ZdDT|FOEh1kM_Of2E-)pO2SlunA7cnFqm>JtmlAPy zUP|<&=cTsfqHUgZlv|rS^nq?qX=u0hR-oS6OS0_vi@~g5bo|8%2#Rzx#*5CGBR^xQ z`FVeR7{Vp1^b>+8x)jDuNnv4ZPt2&B9doN=+j}{_Jhl^u<9+c?)WXQJ`(oYTQW^Vp z%)wNRuE%&hIp%cgPShQtqX~{y&tT_r>Et<>@gxUXHB94XP0og!sKvW(K`|r`Qk8-p z^$)&;`FrSM!)vSlZ(2J2brjn4UXADemHb`KJ?jWhlf=P_72#(?Rh|oQFmy~hU*9D_(TrlP$fjU<1qAte84BpwK{*?I zhvLSWsE7J;(K91GSK}eEeB5}jpcSC%^X6^7@4uC=%EpkJsWa2uWC`6Id@pYKhP-CT zFE5nco-CH39h|KR4DrJ)Fobb>5nZUvaa&|J*EcA`%PjjC!6omMS3TLB4lk6`p+ZMa zUA8pkgA!q1d17Zz3KiagF4PZ&8G5vUi=|Ywu@!}vdsl8LviX0>pA5EgA)nO1U0cMo zk&8$rhzL(gTY3Lq@-7t<=bB4}iAkHGbHt<%<}J+KRCZR*=jf7XnEATKLt4V4cJ!a% z=O4sR&ywZW6lYJBD?-&@SU90@LC0O$iFoIIoh5*_3|E%Vli}WIWrOL+RD#pK22<^! zuc5xPrt(zIajoR_KAM2J^EB!UX`bd5$-2$c(8lE&1oF+J{2P=EdClKfUt_=_)2X^Adt(E_=>3?Ba_g>4=R~92A<+6c@jq>dvRuc!~(6HTsM8~Lqd0q`#Z#VKdWJf{46hA${Q$FCx#d5?Sxh*kcA6zllM$g zf8(R(d00c}kMhY{3I1vM%cQr++7AK-&cb8$&cn#nz!0{jNJ*+>! z6HYDCN(Wbeb!kbVd{;i%48Fc7E_KxpQOYTAR_4|pr{~f+@*P>5pd*9ykt2=_ri)X1 z)gW*$Kte?NiW7>@xp_Ht1itY{EcIjLVh%9xHrM|bgIDcrTtAG7RC;&xaSG$>;^|MP zJaq2)LQQ*$79raTK99z<+$N%w&g$p|&y8Yz$`P1EN2ouZeu6^Vx>lIe?kW1&j1|T9 zDUMoiG2%7gqBV0pvCa1C0WrH5Q|GQXK|ckMdn`Y8JnKBNt>?T3GyD4yZq0J2U$K_o zi}|JgQx_1iQ71b(0BCdD-NwW2o++&jWl5NNn8Lo5uzjTvwq#*TJ@zVjN7xO7joXvt zjcbXfQDcaRNT{Ux^F334gPe}2jFCfBD`d$^8mr4GRS1R$_JD$hLYoD{Ea%EM=N2ymRj3i?5VDu zeo`tMUWV-%e?L9ta<}y_JUr=Vv{`2|eKkk7EDgGaHP4@d`@(dr_VcV-Y1f^_xmDrp z&`LkBO5ecmYx!T*VLNKJldjn!o4BvDs8$|ZrU`G;pj7@iU-8_9mw^M67slAq~XKQBKgv?6*tV)--L!-&nsdcyT0Cf?|HaeeI- zG8>n}wq?mVsL~DYGp2d3IQJ~d@K5l$@i4r&54XOIJQeB>$HjrDu7`GL3qML{D;gfe z`@f^pPe{YvA*E;M!smrG7IO8oF|4R}e*8b&!VnBdFQkJEab=l>GWOW`nNfM}&(NE% z{{ccJ&^G3fdSMi*XCt*-lACH;wKi>Et}f$_Z)tlYL7B8F?bm0I-*fkcgzYc8zUMw) z^nH)(`^c`oY&-&Hpw|ppZ*?{I*tU@M(s_I&-spQ*N9nb<-@CggAuEifShg*5%hFRJcUB`Mt$0beF=sv~cX^nhluhU~<@SlC zv9q$EIO!+4>5yqzF3Eb@L{zFR&_$8mf&CXsA>R1}GN3sjUOgUGL`_LIo++EgGpb7p z=PSSCBVloPFq%I9Z0eCO4qM~B!GnxU{MIeQ6YHYswt=_ds3dOjFN`*#uVlUm6q>NDSPj4cw+7JS?7do zIB55*G=e%M;Uwi{Vxs9DwI8wgs<%yUIRt%|HrKbJzL5A+J;&fd9mczp-p&EJpf zA0_zMue06ConJt_P*}I5iO0!Dx&I-PZWQ07Fy1cwexbOJeOMrTUvWd{U21tw>*72~ z$Pb+a@kISj-bFWo(GwAc*t?*%ip_xR$zmml_T7eo>j3+b?oV?@CE2DVsU+-_v2*xw zPV~~>Laymy>K2YgY$)7Kuv#xVQkLXpd>FMjy+rPEHzrmH8^ST;za!|me4IT*JNXc3E{t}R1QOY(nQ4r!&IX= z)%0JKqO~E+t>o@gzCB9)V~CUQ`_hhO?fc?7bMM4(QI3mYm~Z|?wht56KQ2KG z$T2=XT2M0c4?lo(?ME^{exSHPGS3Pbl8*EOztHPzK6gbZ>-oCrX^()g{ph9@(oLUH zpndBm-(_MaMXdw9u$nq6o__u#!J`2MrFot-xnz7jwEaW%W=5d##k*3R3=kZ@lCQM7YJJ6 zWWG~CLlaW9*5+irV_0oGjzF^_O||G_R*Sse9|8T$ctZcjfo9&lc@kjWy%CgmZ_WS- zkF`zyAl0D@#j~}NgNVmIInw(?XL?We^aLfnGZ#v4ZahnGU-4*1pTvlwsm!+9(Kaa4 zj=n>+i*~f_Ilmp%+z7iA&^H>Fpl^)NLS8U_)-TZz`GS0{oVQ-c2%}1LMOPBW+G=B& z>deK$F>g*`;=pqXu?A)0QZ)L1m%1G@pUtCm>K!m=FhBKb{OGto9uew^&@>lfNi;6wLHSAw0Dh6+p9Wria&Xli z*KHRjSQoCZG(H;OX=iPFcM3QHa;uyCTAmc9d6|hNok13tg0FW2!_3Fl$NF0`dHQjA z?*k*OKL0bAd;7=zD)X2(U``<~`a`peh4nijH%tHzMk_emdYZOF)%&GsX%Bh#loDoDZnE<-CnNcl2LtM|gjAh%W3K&kfnwR~J_L%lY2!!+xmMhc%5> zeb_ zy@syJT#3=Mx<_4~Qqkh{?yZE4hu_R@JX|)Wt6M_7K0J5iqrKm9R+oBaBIlg0v%?lj z+h5rd8zw5PLdNwSlB`fY>ld3Cn#^j@CYf!K@Av0kg9_p%UYF~Y^TKrHmz`4?qw}VW zo-@P*z>VbM@=GHgF_f0XkWy^RuX+MUi*KqYhotyI=vEcc&Aq}HqO&+>I$G0h-Nxqw z&$F{Uc|0!&1cAR{VCwupsV7%pKtkm7x|=bOF!XLtY3yZ6g5+#iPfj` zn|c8smb>N6it?v1+F59RR?s2yte%dy+_q|9d1`*fBgru39nF|k{I;AmZ&QF_iy!V% zv~(QLtTOO+&Q#DB^i}9x*gEf0yz$1?y037h(?aAevOZ(n%G<(sDGK*K?ot%K-C{j6 z^69;sqRv*3+hl5$*s{%Bj{2&R?Z+)4JC(*P*wJN8ajif+>-=%2v6;;0UrLG8pUOvm z>XOM%CVo$o-_zyC<+gQnk+vUNzP4kQ!N08W47};ZtMAZTUD@s3h61g&Dn#Q<*j#79 ztGpqMO!j64rx5m@EY58R`>9v%dZv=oeA+S?`K-1>?p@Pz2Lph17yq7whZ+retf{<= zkM*#OhJTF&fPwql9UIyyA8ciy^we4%kyL56_dXaCj z%O=*PMwwxv>!sFFLT&;#_U71b9o}^-Otl97zwvH7n~<{t89ZTwjBa&Ko?{t_W^Ti0 z>=|)ob3R_d3fUudKNW{fSUiiH=9khaU6t4SZ#ic2Sm$~IRizx+P?=*jo46C4)bdBJ zjoDk&vm-PZKIN8~`=pi5*RLStSh03YF&pRn{lqC|rtZe#+J@;5b_R}Y&8&Se$9I`8 zQ$CHq3{XC$d}^d_7SqiSB`@3nlkUa&0)ngk$e+gy`;le!y*U5u(mnG+ z+ui;Z*}p8i5`6)orCam4YpE%mmq6zT7dl7!M!zTGu_u@`^0}$U^FjAmlF^LNBF^lx zxf2^|NAM{v&Y*b&^1Ux#m8TI^{|ijj?Ml}WsirNg?kAcuA^Lb}=2}7|eAygZ7UJ5(8SZ_vosU0@`o3!vf@l4sJY_IwY&tp=-%8EyT>Xfi(5O{vFx> z!|mUb{kyWO4(%qi*P;I*4R5!Fi;cAty~P#Vq=}~PdapBvG4Ve|(hM9<) zKrVmZm#33azmJ^NpNlSR{y@-Si&A|=6kQ>A@=x-)%fnl=8PONb2;^1hZgcBfTLV&A zn%@v?g`uLQ-xjb2l$V2Y{Pj`tO7a(|nw6C9uw7`c0P0fuuh=@<|Nr{0R{O6MI%Jbs zp0M{!c{bTZd(4$f=O6phSi7+kSTg;dZjobhDGE}#JUSO0>uKsH$V0bxrr(xJTw%q<0tdiRwVFtOC)#dhea71!@50Iul*ncAXy>9=R>@4j% zU9Tdvbr&aQ50AivSigXsPPz& zhpI*FBBA+9g%5!uXluPU##nepo|Pk)I6iC3hjvuU6=M6-UCsZ@#Lg>r`YPA>iZph- zyt*udfVf?r@_#9=Q)db5Q74g9>3Gv@7~+&0OP!18v7YP6dQ?kQkM5*V+b@32iK_I@ zZCa|1C#A5s7Fn6443ZZ!6`tnFvbHb>5cd{I$s00pgnYSU3F(+IH+1kb?%o$Qe?=^3 zL`s*(61-l5tF>pr1kuy{HJ|ED{~yl=S`&P+c9x%5enOlj#sEfc2V^gHmcuFn>wUN}-GWKi#BU5O=` zK`Dk1R$_V~YoX}osW*u%x}G9xMYj{#p?(;3^c3FHCQVgfA3X)DF0+ua_13>>C-5F> zuK2hdy3U9D;k7kDJr*CiZQ$Gdt9+sv8EP&x8{{;s3^eTB6(WXM zv&i@O$D-t|u)2B@FKrOBwq^R1^IMg-Ma^O3g$-6~ol%)uW7`o!|Js-;tXr?M{`Ffx z?6u}bY;*h9AE6}l%hVaMtfS7f``2RJ{`%MQ?R}{=|uKTzOMUF+Vya-T@M*fT0Q&+*g`#&)$8HSa6$EO5rLZeV2@>w+}P zw-H+Pu#n?nqR{6SuC&knNd$Om1}`d}r4h{tk5{}hHiTaAsgo3j*F@xL6|W%AXhw!t zyrKXz`fhm#Sn(5e^(EB2`W2Gq9t9XSbk)n~kIS7j<yAAQo5{eg zFH(*+12af={LwIh44%;StR`pcLrtR96HoS0$Bchg$KGRg?7a}+b?n{P=GL)S!F2sH zbxis1sAKJMg34)M;{-4B1;+{Efz>b3lGd+%juR~XcKtG$@%kmHwfbc+lN8k<%Q1N< zvv}&VQ)eOm+rVJ>85T;usiD3m(#js7N%M?GZasMMTK}cd0}ek zc7jBWSqeN^PQgXV5MN&tx*gHs)D-Rcmk7i>yD26>R>u@d58qA&bCs1ie51l+Y z6L4rw7#!z>LB3@fQLLEdsF#X=<+#u!I|%dH*|=`{ z9;ptarP~s)8(k7AaM}Avrc3gOsz>@e#QVaKQ=Qs5tN)GVEwp-o*e18N*^IcEE>qQE45f-ODzv)a*DP%IgqkbW* z80_LAk;Y=OX>b+R|yQ>3@PYK3`JvQFmDp-+6ec8(UdMl1-soflrc>>l7&9^EjRAL^?n#oEyHv5(0;ll_q>$VC|$nUkE+lO?oJ z+HxnmpFIy5kNXx4GBGHb%x`*>kPlDL0~F_HruwSoS=@wkhD@;{Rq7xMl-#N6i6wY*bN{q5jcJbL~_e)NcH zH2T%-u4&c?R1`V#lfM0 zAs;_=dq{@WLpB61>=^9su05!~n=>^%k4^dHDN)J10wUW!uDVhMRPIJv{|~mtA~H3I zBzM>U!Jx9gXRK7&^mvYJZ(F&p^Jv z;$<})iY_=+bZ#vTo!d7j6QN1$$a3`&{l(8bHOs6hWpY)3+8f8Qgb!Y ziFYz^Hzs<$|7G=1&!kJg*WR@{dDc<=-Pc1}E57-QX`R)?^6)%;k<}3y9qss&i48{m zyp-n_*&HI0)d>1r)qW5XageDsJ^^}NbM-MyyVFbScxRw4I2PW&j4PX_*5XJdcCOCb zPOe@{ncUA@Sud(L3hHObdM&8tzqVD5i;F=_>GI;*yfj9Sm{>s5UNOO}!(2LP%vSVO zH$}-hve_4M)5abpYk-r)++-Uc5uD>$-Su0r^_NTace}Y_l8wsj`?59H`iBfS*fl@p zBPN#@YfFmt_bNnJ{YB^tZfEOSfbb2I=S0(!7tqSAC2Z}1MeR#@7uGcs)yBVLO2M!3 z^y%9aYkdK0!LatT?`J$Ja)Uu8srmF=G5PRldP^&nQ;RiXD3#IDM9q^y!H2!NK-3z8Or;mB!?KJ(F0?p+n*ai1QYxDBCN1*ChMyAc1Q&8o?=;4z*>^KTRV+Gd@ z-G$Nd?cXA1<2Y1>WOWL2LuWmix}E?Fp<6rARTw>D^3tN6DeLWCVV#S^?zo%*PI5Ac z>Rb3MpV-j7_Gh3lUB~qHs{q!DrQNsF6B(O65q`Pu=w9t1^2v)S$yztvB4#{0f-Fqn zJZ*B~S&SO1rxr#pn_L!6*Egi)e$>$JTZOSOdWk$v9!ot&DyhdaCYMChXSF=o|CFIn zd+OH0-x2t09Gjy&rhd8*rx;;8X1nuHCE3yCJnsJ}#vI)^r{E~I9?H&(rh4kUk{ErA z{2vqiH%vbVj?N3Te^ppLvPdd(20;GM)*Q{v9#t2Sc`ZR6o=?B4Rhn9(+(G76nJik{ z6!&pdsCrC^PKS-WvctHIL9-Oht2k-LEvorS@7@*Rm`}dsEyb0h;KC(p=7)Bl}1d6aPa vp4deHZwv$UDr@J1P3QM#SXQ}O6jdMxc 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ÚGhlG@L~t0fqSVpzBWOY>Uop?RJBX-KR8Axs!(TFrCrsrKZDi zn2wMtf0PQNsbvlTM<)Pt05~QAm;=DE3BVixj!OXM0I)Fum;=D^3BVix?wju&!;3;+l2F40>23Ej5#KD(7oK2G#@ zY1Ua=`7o0pWhId2d9c#N>WURhYv>1|7Sc^ac|)-17NXd(H_B-En+q^E;zDjEq+G`| zlEM36?LGozb*<8P7=}Q=_2Q4?@@d~17v^A2y;RE7KB@yd6c>mlO7npBZOQa@dGq)f z;98@3bfw%9kgQq! z&Z~$Yj!rGi%ILr;s(DtXq_fdKS-krjqt3)=B`8>9gwcbk0MmB(2RlpPzY{-0lwd>}R`No_6vx4^ba-7Jo8d zsTF^MigX@Jk=r+24D0YWemb87HX{UwhOl({B%v?DAa`yc>^vT7IwOdK$LHW52q!D; zr#+L{A7W}jNEJ@&xtOSP_JW2jE>*O>`tQtui=q^Z>Cv!I!IG@{UZMTriWpBU2NFE$^X1D8MfU*! zL2-CEnkMhn6G8g}G)E-%(kYNci*zvWlB{opJC&W$r+_=mF5D{L0%2tGM29jubxaT+ zNcJ%Vpxi#Kpm&sPOt13sT(EIQDa?K!>WVxzHCfmKcY+B&sdIkK7h0Q{MzIPT{!Nvd zJ3FQ55-YZgR_ASvFesSGYJ#rxHR^xXzG~DyKLNXv?|2OPxi_+`$`>bA5NxsOHhEx8 zE*nY3%nxae*U(1+I>~xr&|69fqqE2vYBWrSK#r=6t~Gt2D5bzUTcX5pFI~$2X*cxKGwJ5Pf?pfd=I{I`kX3xC+4Y{ zMVBRKfgx50GMO9Hf7W|;I%^5B-TE-;BqJIFh#Jvbbm~c0YL20=W|M4e^0!%(ov)$+ zS`%b!HcWzgJ^ma>jgbUtVcu-FV7rNe_3dVzR3fb#gZ6gyxsA8p`>P`Hp2k-*Tds2D z9b&xQ2uIp{F{pYab&TC^kRcm8RQd5E7J5%gr@m z@79Q8Hpj!BRMJ8EbIo$j9fs4Z;rvtVLOyycNl}9QK5{dXQ&E3h0a8+uaCSGXnHp{R zZJY!sjr%UPy#ftA{3bo*`q5DcxTA7H6xEA%H!a^ zFg}4+Za=N^@N%(+M8UgF$Kv=tx(y9h2bo^# zM@_He=(IEZ_lJBJk9JIB~c1e0p z_S>N-r!ztO-K6d&$Ly)=2=lyc`@`hr1d}p@bnxZ-L&{bM zDD6O)cbr4DzqyQfU#Bqsgk`8YRI3i`st%cmcA`44^& z#5CTdG*H-L%n3Fg=wHX3bTg3!3!022B|F4Ept?}GZ*%>5tAH@i)kOkcCSd!uDm;U$ z-2V7>?}~0`@C;R}?&;qGI*3mK)iy3e)c~+9AzC9~YIV1+I#A*kb8&dH@9T|!v5|2b z>(7?+$dgx(^aN;piyqS~tXD54&rLO*W4t`MGI@BabA@kCi)2jFa5N}>qM&;uc`id2 zV^rB8HtyTsSXhkFUB}X}`}Vt+sieznCgw`bm8Ft<)#|tVO?;r}2m0g5N{ry~bkk

    DoWO%Rd7 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 k?X{3!{U&<?kD`MdP2cu<_djJ3c literal 0 HcmV?d00001 diff --git a/tools/AzCopy/System.Spatial.dll b/tools/AzCopy/System.Spatial.dll new file mode 100644 index 0000000000000000000000000000000000000000..76722a0ade4e6f92e7ba2e1f2fe060af9c5fb8b1 GIT binary patch literal 118448 zcmb@v34j#E**;#~J;(0seK31)?0^Ez>>-CBpddGbfXF3iJQi4Cb=k(51(bCWJkS_0 z-dBvbM)P^!#v{f9jfv5CBvBL8c*S@|Ka*$@{6EiI)jc!23!3luAL#0O>Uis|x88cI zx~jT&?&0SuM=2G;_02a*J%BrZlf>P#vl-FFbw4Xs_vAk}@BwSia|0KxZcQiFro2_D z<~4~G&F$@8M`C$PBDJnP(b}GvcF4lS8gFGwQ&CZDZ$oNV*MCguOk-9VjM-2}P| z=?C560TJMPEOkdMBWzU&ckK>K^&|YQzeK>gX@HF zK82Rbmr(exR_YMQVSYlX%_eM5w^jdsL=%YFniF4cU=7G1+RU0e(IZB z@AiibV)*q0ltU%GzYjSF8o_=tXAR?Vuc`(n+LhZpbn!iN2xK0KBB)9eZJ zZf=~h?=$Ilf4bzV0k&7IR4j>mjk$w+!F|mg%_z9PxeqY+I&()&C4Qi}4>I??^xcKP z>XTD!7g`l5Rd$U#m=P0$0Cxy6gj6xyQR8q&hB7+^cWtdV6mhXgzoi9{_=rKa=K@AY z6xdO37<_f(n~LpdDvXpK2*f~L(+Q~wpo4x|R-)W`#5B6)%HGrfpW6s0;x@r8h*oW% zgW?MF;&q4rIM3S$VM*H^&Qy#~4g#|yw5Q4)NzVY=9cAwO^4?^7qj9e*-DOdPV|1Li zAMZ&WHvmx+ZEq}s9C3k%*iPJqTqDVf;kJU{*&oa5Dq~J#C^F!fSg0WssXiuVM?A>G z$i`N2ldd)vLAts`ykm$LVNq^!&&KzLs=Qf-+|0C#ICFMCK+GCn@ryrXTUL~mhGg`9Yxiq@_uT3J9@9R z8Hy6xGz}q}(T78urqhR}4<(!2+bk9F?uNsLo54)uZ5JvMv7IhRJd{)p}x#01wha0>O)j7qO55c6x@nFX8r-;}d`a~qX07;XT z$(Ymqez)jvjwHB10xuNzB5}{pBp7cyo1i=)_asSA2)pUS%Wb!l{C-O*nPht`3v%xQ zHOhZe_I-%$xF<^SFpwC+BguKDs`J=2D!XD76#K$b=r**Y%#KB>mQ9CG26#wVpF4`ULI&ptUH+=|-+Q>4{h`p2n!y#p5-&t;b zVd`F?@?3_>c)O}8&#u-@6vr6h=o+w(+G-MV@n?6kT8&XVB(b)8G-}=ug)BBw7VZW@ zbgUC_*Wz%z`IJYztAO(OsqL+0RO)S%?5&~KaZ#g)*RK8R>1TNIaNBLhJ)l;lDQJF< z)$Ax!lH+;I9+F#$-U_R?f!VulsL z9Mdf|7d%M2YK>ork}v{`1oCvo`bxW#)ov^_dh#QVkBMHANebHIik~z;0~Hp=E9`L(y-t$3>uOY+8&FKh}seN`>dS=M!aPR zW!K?Nl4`@qPoB%WRhcSXB&#Le5A`d0tAK#KLZU-!vrI;8G^z_x>zmE zgQMz^9+s=jcDI1bhGN_O0q&0XJ)vm3X9LA-cN=a9Jrbcw;hob4$=6B#*v)z8e8*B1 zh>MYCH<`uIs(w7QAt#5@OSdWK@IzCCcFphJ8z;P`EghJ{>tZN$D+kQZ}K<*3NXc#$B~&3_YJL zRrxil8j~06Tj;I)Z|QBd-4^5#9njMpjhC|R(2*n3RbUlGPaWxF(0AzfDuku4MhftI z4{lDCdoR=L=MwhCtaR7gJVlJ7naPm;155Bg}z zGTUnfiNg9mdERmGpamX8k^(2{9S@l2wZUzCduLhRx(K9Rl;04^=jajpqiGWx7J8to z(9N{X#-K`2W`isD0gy_!BXzP|?dpT#`WpLdD@^X>XEzqOSE9|+9+GXe*UdsHjn%eT z$Hr27-2mb|dmT)f)llGGl}YNZMGp4_QU@jW|Jk@h5M_3wU76IRkmc%3mUXZ*LXB3T zTNDe5MH=i#GAoCs3%jhuu4uZnNj!varOJMVbbdh07x5 zseV)?LDf=kJrb2iIaP=?7L|qFYXerxq8uw6d43YvJHFhbTJ@7o7EikU(SKDR%1Zi5 zEFzskIim+9CHz(!u>HbKfENs*wA%c&dF*jq!wxajMkD zsY8069f^y9HMZ%UJ=vx`Ii7iry({u8g3@@xiMjVN z(tj|-nq^9A7MrH`Nmff0!0~6ZrItUEFvRHMP6B6L$oYU4=R!Bk)cTKhywQtR!N40 zPy^<3qs6>tFqV7pNTTQ#Ypx3jA%wImo-@yHv)(^MC3(%_ruX+q1> z!^dTL{yLPI@T+wA&=6~|<4GjZ-m0Y2Nh&gJu`^zw(9qB6B<*c|AwxUkmB?hA6YF&l zeqVPp66rZE?LJbYUZfhs*cgWi>FaF)N^D0b!t9YG3ozElNmgQ-F>X6*Eb{ha-qcio z`jkGER3b7SrcYx&8^ibM@a&958zNC7TJH>mB(F_15iIK zliDK6NMljut_ZZaK7BUo0ogh5%X1DUfn4Ln_#KU>w;?i6gJ_k(Qmms3-+<|1CZ+cW zC}U%uBlm_XTi*??w+unfg&=Osg@(}1zCr~S-y2$$!Lv>M5I&%Ue?l;n#N7^V8tp2~ zrQCDK7&Qx~*mmE_%7-zX^~JpOcL=T8ew0jWT=d%d?!~>sY%Gf=nsx4876$b9kj4?$ z4Ux)vLs<)P#;k})+a3M`U9Z@vg~JLQe@`qeB9vZ5OwpQ z>a<^Bj{h>pH)%sbVx4B9A0E!iLmPwXK$+VNGMGYfIk_NeOYecW^3$G_~pLdM;E z5J`eR+N8^I-<$kP&#B$MMEYr5n+!bg2=n#%sG|N|6EWt5ajZ&CT(zl|;l435yw~$7 zQR>)sO{7Lwq|nqZH<=LulDS2JhKNb}79A`CH;zZQXP<&f*={lG9rP(lD1GYN#s6aUEKa9n>}J<1Q3Kj_-f7q6Zt(8x zdKqgiW!Iw#jeV^~U|`E(Uu%IKaa{~sx%LQcZ@Ya-1+pv0T_<--g4U5D#P$tfvTp6v zy{v?kMVDKuxn&JzSp!KVC`%HS1!dJRQp(z!zHcdO2+}wnU2LFsD{Cmr8cHHTS(30K zx2zs^wtIc*r3|_~>*KPFhMY1aVQ=->hsnOBJ|m%AO3S5MeiyXDW0JjTzY4MW9AI%box`JC8SQ zXU|29cL=cu+XZ(4+=%Q+c0gl$+SzRR8#_A&G#rmE?JO4bfaucBj>R2zmbdS2XU8Em z>@08pCp$~V-HFKE)6TL7W!YKXrLpyn;2c|Ox;O1CtCAB3J1f=tc00=&{1vW zWMl;M-=dG0{6o}qd-ktJ%3vDF1pP}AO8>&cEFPh_U5=^e1@!SD7*E3{=py?3B}uyr z)6h^d6+BB}%14WgSsC_>btLRCLpgb8Fz=Fyc3C_lZ9LD)c#l0`4XBg=wR(GPIayhN zAUoWJIatUp4s~Ik6ylOPvE$8T`T!kd5Yspw9{b-1c&zB&GCi_y{@ni+xW$?Li^zPkn`4>i|K)tUY6;8DO zzTM}^ha9{gkpX(HphxQgthIvCEW`HOj}gkdh#BQdIO1uYFQ+FdUt^-kl5Dy2$HaEcMUISnHT0->Gkls@6L}tC$ zOkWb~@JtU?fEvR<%F3nNjwq}foxl`OuqH&wOh7!+SJ2=JEMPvh28q~S*MSV4p!G8G z^#IJdkDpUK>v76wHDVey2T4HYin|+GP*yA}=f_s*Sd>Q_y)W*lWtkL{`Z=mzz1=c% zxlUGL+gM2OTFl;rv2B>D^u0FX-avlZQ{NzcRz#}6#=|Yds~_(6V@KXVRV{yZlVT2vrb0!umXD%f^c@JaA$*^ zDuEE}ZG3QbZ$_{qs)T2B>W8do&skS$e&JeHY`O$Vr#s*IfA1 z%t@)X_dlRQHA>$?PhbzK*a&(%t7{Y+zTNKR9UVmO-mOTEjY)~4^}LPQ&7q-t*jx;} zJuC2D29A_dMYeYz!TEtng#yu}j^-`gg(esKHwJg~@35=`U=odI^UUy{c_urZw4l}` z!aJ$(F4=J>Ih0kY7qapk?Ma%uUgYwiuds|@`D}Q&Ahsh*!5nQW4xlQ|M3vk-;OLAU z5-7Q~?wkm@qeqs3{0~5?VT~hz)8A%rWyk@PNJz{iRH(mUp4hSj1mfql7pvGqgDqOhJLPJjFFa zt*bQ`n1krE3>D$>aQ8gqq9Rfr$<8EUQEWY6G8L=HE6?*Y>HZZK{)U4;Z7&8x)oL^L zf-K7}Jne-@$sofHtAn{(tTCFp3ORZDfsCU*Mp9=W@>)FR`J&26-A4zrPC3c7G0JEp zOaL`k1o~F`R9QV& zBB9-hsc*=8tXn-WxRj;uH1wGc^U2ILhBcHk8=_mKBcH(p`3%F=fm zUYQQOGGX<0&L>6Y3>97(4qk5n3CR4O-ep6XFGfP|5h=-+IpkiJzSoq)_^M0+gc-W` z^-h=dSb~IhCnmHZ53{u#-GT8gOW$wkGac%|gjw}qsMLeunerZBdA-OS)=10zMiiC4 zpE76ACOU3ymdyJgUdtROl^#I4t_R`hNdli|h`gV{@#ksKKLy*5aW06$Ns3PL@eq=2 z)ZuaOVF1pCAHn^GI7U+t;5Z50;9e5Xxj(9tlvv{9S&>+a%=0H94S$-J6O#R}^kazk zegQ`ZZ+aYF(W@umNk0i^GlL}DdkVflji#6)?9LqshE{^MKVKV1**}e7?w>MRQ-_W` z1CahD9Jep^8F_eq1@ljyVe#w#EaD66n=r8d3O-htwQ@%FGi1D90}jcSL&44@Qa^{_ z#$WC%<_L;uYG1uqW{$#b45S$~`(}k||Cy>7MXTCPlhB5!+Ge?<9+s?&!}j5vz#VAL zSOg8yMH0V3AsaEpN`H)Co!;+R<`MWi-25C9?YQ?m2;%kvZZg;00=hUu>A3V@=$=g0 zj)Jn&ldc30nd9Nfc~E}|--WYCj{92@=@#}P!xorR$xhc4P_g+IfGhyIub>cphIlJ| z=BP3D<=~e?#($6mVE9#dxYCf7Odt))LYs@YNs<{0|SVj7Olq8*FWX13i+P;x(9 zcp_ExBkfe9Pq}`uothbdYCF{&fC4*piVsXZ{91`@^a)~pjH3W_!?^n38jOo}hV?xh zS39oDvaVC%AA2DjTTZ!1UB_M|xCWzr@m@yT*5i;Nh6~$0haK=0glx3k-=i(?c7il}>iCda z>!i|fz28yY!6u)#X5pSM?LZx9oMd-W5gW#$WCo;eMg|?G&-nfxd5tCs$<#lPK*&b8 z`zv&LzWY7U<9qiu9rdf-Bo8pDbd4v|pHhT_7*jOxS% z<{5EKo3eCYDCJ4+~(*dWneJG)}BHon&G6M z!9B~WjtQkVi9LNCwM+)+k3{}*s?&843dNYw2`$6J6vtso0J8z~``HL0+cU1f;F^h)BP{wjfs_rAE8hyL$!F>RsA6E*kU zl?kH?23wkv^|QlOi>i|08alOf`qJq~r$3zmi{i;}H5_?dV{=raHFR^bHNuFjcfxU` zaOx(H3_Ep)kBB*S%_HG#93IvY@_vJRHVvu=3LBxviy>Y1iZ1bRUz>HDM14ztLY1=9 zSWS!IeUg*PN z7L%6P3()_p*B+D0?amJoY{zA?<9)@r0|1!mwaOx8}LA4~nHY(QPB>Ug}6eyMf&`T{2loge^93~5fU+*7CAaAA>pdK_d z$K$%Am#Y#s$-n-E_^~Aj&>U#j`zOo&3Ql}DPJ-=)H2D4Vo4^yS4C8r5j_u@$*y}Ov zrBoz;-20kdwzE`n?9HIDyHZN*>iBlHtH&zukq%~YQiy2*sdiSen@}VDocM2e(*J?8 znL!fn_JPklM#H11jL$FCTq_KW%*E`ev&|xX8iQ!eb(j;BL%h@Gi3b5;KR`SPi1-2GK|s_G z5RZ)edqe2dM^R;N(B~mdRBLn;^_tqQdcw4eGcB7 z=%m-~WHgUc6^GLYz(Qg+kqJ*vV2HLe&~=&~jm8|W zC6)<}+^2JVF=h9avg5J(a!n?3xg(qPa%|tHJo4>qt}waDAzb!2u@(0Ve`5Zthk-{jzvr z;%>ZX$^kEYKiE+lAY=Z>7{;1N*u@fUtT8X_#&K_mhh-NewHKcrH*scEh2V|FA)PEA z9!XbKthY;2qjM9Yo~_`78*9hOJ=}#^0dSt)OkCkN-7G z_xrF%VqGhn4;e4O2ZIAX2(-ra-Us_<@xip+bWGC<_#lmlx)JR`nT{7~|#2I2w!NZD*q;bp;}Z>{hSKYIT@fyUR1u9)>$Qmy86EHiH9c6QprA zRvTD!EgIN)Y&Xa45(B${j7W11&MIIq3s{?5fQ$(!fWbil1nIskz{I5c5%g$VDY~x| zt?er_vTYe*bW9Uw+h&+bW-%qTJ|UMW8O2aEg9D}r0;U9r2)f%>;i)!@CnoL2lcpQ+ zB=!|M6tu6YTux+E1Sbp*I3Wl)5zt?Yr&nJ3W%0tq-FVTI175_mjV3P{TZXlyP!{X} zL|b&X!_2fBJ3K4byzbr(&&^E;c}Ur?!z|P;4tK4Sd!%bUnSg!8$P&ThZ?=79mfb`N z>kucC1oo9AXWoqUw z(h)F*iCr^2O{P^~jln@n6YNR%YqHvwY0Gi!AMBsS2h(=bF- z(ACMvh~5Q}fRhmbR;t|7SR`e#(K7EVYZ@?~F>F(w%E<$aF87Uv_7H^Iouns6$Hw8I zo994J2N{zB2l!)n=lKOh;7w$l(EWdS=b5`c{yWdy?eX7v<}Oe0&NGWJB?a$1FV4L4 zoDW7yaaG~M)1)leHsD@A!gkMK?QM6fzMZLWXX)Gb_3dnZ`+?lF3|K?=wB98{!RkYG zgR|rzn^2yMeE8srk(RrSB(o%}+jl+MVHVmq4l#?whandh(8Z6@BR1{;q%fGRk=g(q zuJ!O1Lu@=28vH0SSr8pu5gPX#Dq9vx-Az@;n-8(^Z|Hzu1_8g(0e=bt9?=0G1Od0` z0PbN4jfPIAaWBI}BWMnZ8qfsbp4DA8`yjM1Pxi>ni~98%$;`wGMlsf`6$G@=an{TpNbsDN8jX3khlFGySy9n5*_#t~IRv;N% zrC)Y;e~czVC)v)Mi<5QGaYpO+-hZk=b#_|!oL-Ycdfe;Vjyr!kV~x%zADVJ6LB597 zw)-RI*Fl%T+c*oa;!6CN zH(1?SoB9+DFFVM1>79KfJ(A6OUhg^knw;#csb~Zax0{iZ-D;0H``Nf>fMqsIWZ+Y4^3`M-_-K2Fo2ThSE9O$>PoYp zEsa%U1nRiwBYC!TlYh45iw>G7?29z2dj+ZHgZ~TQsgFXhF6y3f6O4lp?*ostKM0>I zsmKeaKB7m{M2nzD`uu?87-N9&Uf`ad=`B49j+=soB=zz%pPniGq@ZfT!%;Xw5Yl}0 zgGa(DibMLivlf!BV#pO$d(jSy2j2k;n{4$_KfN|&GQ50bBy8lPYslxHi@?v`9OL48 zV9{ISQq2^WU?GWE(P}=qozpt9a4%S@o&8`&Q`9!wr}qm6%;CO&Bk&)Ht2o2^IE|%z=aePu&k1-c= zScR+-I6YH@S1~w;#iX3y@GGm8ujLMY;ULW5_;OxsGqp>9+3rA!BO>4a5yzWEVWjYF zkhS6%yq%bi!M79BG5A$tIvQ`LtntL9j|}^FtoL8cs^~YIy6$5dtX{}7Z6$au1h0B^ z9FsD};x%w#5~9%_A%gR1j7l| z+vz)?0z3~IGG0dF{d7FH;32fGG(8z2>-v=hPCyo%fuzpp=cw_h7Zy&?&6vQ$Ga{ZD z;_kCZ5!v)Gf=0o%b^RJ1zD>Zp(^TMY4|;@?yvy!<8Nu-p=wvU#1FLd*5RGF|41-9Y z21N&-pR6kq;=QFEEQG3-b&*~Vx-ff}W$4EDNH;face*&^{Bv-Vo{Gvk<{PMILRyaZ zeR0o%>+TSK@51Tm$YYtr7f6B&#l1*eIi9E!;}gS$QaNgtkukp|3Hu;FUFU}WyDgJk z;j5`zg)ljCpJ7N(u{tiq-3|`v@SO9%P|h zpQzO@NQC7z3HO4av6G)m`bUx8c7MTKWjdF8NstELTapNKH22aV0xz7gFlNTSu3l2w zyyUU{N(29-U5>7%iQe4)To4U^R&?#iVkbN*7Q*t;Q!K5(y*N|Ov3Bjqd_;#4jV_WE zgXvsTjqNNmg|DAA>kqf9wZ7te7s%L&_!mT6rF*> zf@z6LF@qq8Cuyv)h`pT7789=+OK%2n@@FP;CO}=k5#@FLwjIT{70(ZpMJI4{a*P;4 z3&S5irh05P%1MVgza{fU)+_xxRCY5BbovkUJwo4W^gT-7AL;u!eLLxUjJ`MN`vrY} zrtfk3-l6Xa`rf1ON&5am-&6GcmA)PHeMH~W^nF6#GxU8%-!JL=oW5t_!|B;=$3y6j zxbB5Ph1X|?hji>kLF|1xHuWh6Xp?mj)L5qrcTepP*D@|s#}DDSjCtXx!q6tl!TUA% zNyc$@op&UEnRh+j-IPg>{pma)_LyQ^q%;H8v=f3S9M#A?argd3A-RWF63$R~OR(p-qnk zcL!mz7l)hjkg4)V%Yd@Z2ovQqMK* zx&qc9M?lE<-_~JNR(*r^s10pm-!XO2#=@6G&t^fHVfBM7I^FAXd@?k+lLiMCkhhRn z-iE=thM`Ux&QRy`;?j17I%%@pC(!owdwolyCy^+$DWk)^Nrh{|94m~hr&GWff8^XM zdk>Ycq`ngULi&jGJX76xHMQ`iY%QdWL-JiyLoeP`5UFX(%TSTtl|!Yb2bErE)MnF= z8s*Ta?UlwoS@og?U}tE>#X6SY>WgbAF1GW5xY&P=!o@WHbr}5ht8%NaO@wAZi`V$Y zL>RxA2;&zMVfZKm~?|c|})@AygdtRXWelJ~amsqJUVPy434`yM& z;rB88XW2T`Wj^N?+aQg;4MiAI@x6>#8lT3{U+9Gp_=R5f6I#ndGimco+9bdAHA#|T zKkFT+q8x=24+7rx1H^LIoKg6&=UkM5nSlFu>SS1!v1O`ATY-lb&SA>>ZnrRu z!qBI_LLKCr3Cu5p>$Q>UR5Z#^EXa|_wUOFXjRd&!$iF{o4B?+h*@Xo1LKI&8AVb%NlZoYiOpn;D{yt3lZA{yFZjck04|ofAy-(_6Y_|Y( zY`2iq7RZ^ykjHcNPN=W z5ir6Q;612SrUf83>N95+^{iJs)gKxv?Swx9Q)SvwShU>|Rw|8YkZeiVHKr9c2kd4T zZuUcozKrcZrw5?|+xrgWuny`yu@P9^K9G>pi-`spsME?|-A1#hFt5 z{km~j=~7Xdm4zXry>Ly&MV&hv*S)yj#I+08Se$;t1`1ox-=)c?&?Q7~%xJ&AFC$IT zBi3xbxUpXIn$3_Z>?4r4-inC!n$+xmR3j-%+EY@q-BE+2EOt*x&9;V%ZJl1K=5Jl( z)GD`$vsz#4-tmwfp3%$Fr$QrQcD2?j5YNrW?=fM!v7a^~4fs_2+h{uzy5~$0dFe)v zFpEG1mM@-qAGt-(@eFRVcP~Ky~{{YAhxcw!%$i95!lvif}^11h!M#$K+L9!>L*`o4id&yC>1hfav^*}O?B{zx2a z)-L;MLyS+w4t!X}*#`Sy;{h{h5%>Fu&|Nqw!x!J!#Ri1_t3aWyzoHZ1srf_R^xp{j zh+cOflbyQzKf|*Z;`jK5tWJO;-9eHxT$-C%|~TH~GVTX!f0DB!mQFqz1Cr zg}H|O?9Pu-x5k6yMT?NwPnp6P{2yv5r!*Sl&(c89Spo6|C5@}PNC_X5ig$fNadlE? zT(!meC(rrwm0n39^PM#)JxbfElg&jkz5pY6<^bR=DZGcp-k6al z;j0RK?bpha*M9ksD;z}dL8JboxMMUJ_03^Jzj2Gx!$Luxi#5}-QslZ6*bEaH23d(j z-?5cN3kp6nD?+rSoUQGH>u_8cQq(qFw5+tK{&fTVWAA`t=yCuMx?_Ko3FJti1Gi=Z zIV4D6eTOeP%{OhojyNJWf&+(+n35a8QA9@!%Z=cWq9ZVdQ>-$WNQhHc(BucoyRT+S z3%v=eBfutqb|)LTp}f09>oF@08nI@SPls(K#7+7PuF~3))exc|zd#vT`mqoyk+UYp zXN!KgIG4@7+JXIx&ldGqN*fOg4Dvi?zUUxG!cIvIW1h3g19$LkSIq zjs%3o-Bqin<2%a=qBT;H(mxJx}ada>xjcjIf@U7_Sd=PWG3J78Dc;~xPMrM9U zMv8dG+80Fd;Y-ftfktQ0sW#?Y2eJsrI0pYD-|x5$=yy!6Gf&LPEJ!j>W`<=t^Az9j z@b7-s1HKo;=Ah5(YS7jS^Wi1dxf%$&8(BV3>(81ra%=$bm7C4;@t(${9O{ot8e=Z;U z#d_z%L%8N6H~sCqN&i8Rz9}`dz|Y&1Iy&&@(zy!ZJ?o!ax8EX7=F_*?b(3^;z6_#; zSX0W9C1p?@^5u|Q?o_1RO}SVc(=t7?*ECJ3rxEVAO|;1O=h7dI@SgOWQq4j7rqnfA z{`UiaE}c=uz0r|0T;r0qUxhT8Pkn0nu--M{oVo|Pax>C@7kR#pbi0>lQ>vt-_qxwT zc+a}$*6X5P(=?^t2xvB?`j+-ie=)*)(r-%rcsJ=^-A(#FWj_6;)L~iv3j%*G&%Z)= z&vJ9qgv)oECXoMuNV5m|2l{t&ue9(H6OKBt$?286>kqu))VO>MN2yHEof<8*^+8VtVyr%Qf;lv8xl)eQt4K&eZsy?!}+fv zF?C&A$GTL@g!Yzo9jWHFhQ$1J%iCI49Nco!BJcQ?_6f`P+pl@_iqT_6j2pFY%kZ(| z_Uc*Ky7rFNH7$PW3tKw)KwFQCzxk7=@&CSe{o}NMZF=?e#UJmzebx70+kVL_6VI>C zKkmXGzj^V6U+2xc=%RtA{%FUH`l}kBI_9b?yMFvX&y+rKf93i=JvivClb@PBw)mN! zUv}oN3%tY2ll(Q z<>7&czcq2lb>ok6XRe$#?7<60?sI)>X!4fT={b+SyK&CrJL{Hwd0X}2R}Y+ZbZzm* z=F@ICe$AiTPw5z4b=vytescNApXTA&Hm1~#xaSopbw33COW=Q_UVp_{^H^A^F^JoM z>wi(jsR+Lw5BRqu?m(p5A7L2g)L9s!;t2m3_ig!jF2j8*(xwqN1o&@=R*bEF_-(zhqtnrdbs{=BY{Fy=1c8hJVv>wMgmhki|?8*<A2LL#wEhFU+HndH8q9oUM5{d)Iqybqmiy8EKR> z56n?GY1DK*eC<$R4@^^a-UA8rxt>gG5`NZ2kgo?q>@>Qm(rSO0fL^mM2IZD+T{Tz6 zXCiAuu2@(eTed@(^B~!kf+?yNwG$au_huAm5}2S}^o!b@MsJ=9*|y^!6~u4t`5@^@ zpGzV1Bs~4FJFi3D$;h)1VQfsQRvb3%nE$uJa*6x24uR~BLxHqkttez-rqV})ixv3S z0$$R+ir_GO>y`DKjwaAu;ZjY4Y*SwB&?n)r0;|Mp8bV1<_Y*cbrQ0l(oCP24$6FwA z5GB()iRs9~zN!gQ)>@;qoVw@h3wyq(dtip2LyYjX@{=3QnU)pp>LEGR%j7&5gy-b; zn5e!ogw#3fTyPOLGa%60v4m)eN6U3#U}1RYm|b zR_sze>y%c%1o7FKN|6kk=V*N6KpXFw;M?UnNf|_iCjsldq?~Pqz?Knq*yMcwI^bSVbU?_+lgg* zNpBoI4I&48HzIB5AFD(n8IoyLf~iOH+X?uVdOMO&>n%CWEe&6`De>)R8hxAa zDJZRW2%ck62m0S4gm@4S$A*(&4O-FVb4QL)A-=G;ClbBaelpmP{}cx16}P zWkpBJ$|mdBUdXq5?Tzj0*0iKrSNt~xBzoq_lrynMIg3{N><{f6-ZeDQnohKP9f{^d zs%3?@s=ak%%gV&m1q&1H&1+hktp9udj+53R|I!}iPX@njZU03DnLG{IwrD=v+Pn>v z;No5=ul3SsAFn;JW?i}?vBGQbXlBcFB-&b<5zw*0Lwl?Qox~as^g33f(a?Y?zs=H3 z)|?(>cPlWhA6gZT^->_$k{HTr4^6CTS+l$))nrZXm6{g3PDA;pT25Hknrd0ukXXJB zdILpai-=}5SrcZp7Z%MSQ zS=(_^6ZN>a?BsRnnl`;I0QF6GG`Fv4Av3=2Bsx5jf$*3X@u`l4cPz>!7e>dMtTB{M zb4N$26|AHBqEcu8zY`4Y9Fftn^t!ccy_D$x=-$~{*M5Avx1l|eUfbN!+T50)G!q@o zs}h4icu(=PV$I$I(cKWt*3cYU(DL4zk5ccY`C5<|i!iV| zD`|MvwFiyq*Td9XnoVnNjup@fADU$_+7qo)Mt!7y~5sE#(St&DypW>1mthd6~ks9ZjKEV4)CN z(v+A_(@5sM^{p$j*i0wZrP)dgbx)i{dK}iI4oy?n!6LPHbPGMiuVb3@L5 zK|x;os@;~*U_)U{2(HI{&)%Rv3`P)L+_gK zq{K>qLTg7lORrJz)ZPmYMhzMiHi*bnCMT<4{4=2=I3@=(CZ9pw!FNLh+zf)E4eEv3 zNK%_NIkBq6Ta{{FyZWSz-I7TW%f%S7VRdVp7%YwhB4OrO(}Ff!kw~v@=Co5&Vc35~ zM2gK&IgXb2u$H#AgE=W#)N*2nKVPC8+qGH3IEYy#XQjF=ILTazZIE_uuNZ}IhPi7^ zt;~c=eX>UDCTrN@%wWA@b#tm2&j~3rp9-EaI>17cwf}T^j9}F}xHY3^NxF^nR0qkj zq^z?KLf3|TYZsd-)}rQBs~}C*%FKq;l!ddWSPCoB_~98yt>@;@sNthV@DLfk%Fzb5 z4Vw{rZBptFxF0kde%*I?U{ocZLcR)wEncV^{-8glwb#tWv!)^L0N|H#9$>F2F!4-` z9~O(P!|LuEmd}mduLqCfiwP{9`yH3!!YLi~Ge;@B<&Ez_D2075bq($}G7cBkig=z< z-o(5B_q%XS$3+^vum!FrtQtJHC*4r-^%7;Ry&|P&BG2qEbZ+zd+nU#q`f9-mf^Kyke%g zyO?GDLi~RgcVNj0g~jT;l2l2txakC6x@BQa!jj zq85p(YMAmCanGn_>>ITVnbvP?zlbUu%8)vj?lf^%i~EC-8%IXe?IX$C+hd*_6H&== zOtW!+@_C84w~6~}aX%2ZCDux&!rx*JCbBkFMp`7_*dRXCBcpG~Cv|2~oOw+^KI#~(<_E#h{H z`+ae*Jdj-dMcj%>^w)~J|0JeAQQTX_{Yc#CWXh-SWX2Ae%(CWArffGz$eH3^FYYbk zJ|(fAi~ox$WrbMcnM!^Rn%Y`Wu8x>`$kd2B7ygKPXeudxKJ_hx+%}CN@58-B&4X%2 z)LGLR@|3v0o6a-`&S3hbGZ=o{jBOKQ>XaF*?{jb?>WG;Pe|9E0d{z9Nvlw#zEav@* z_#YGZ6>&eBMLCzvZpDI*)_%H{+H94o{&+h$ENBZpbGN^ski5NEsup0qrw~1+UTsF) zIY43bm3TjaV-$}LqX#6|Gsf;*+Wt?1@qpnD|W zRg$to{Yq^?dAAAbqkbzk<8dJVMXHyC>tC6;R|LHRvG2LMaka+ zL|zI7JpvR4DigE==qy#EY6QJ%&;UX21D%VwIze9pZ3Eg{P?6IB>sq4*3mOc>xTK)5 z2JItgF3|Oe8!l)$5X&1aXstn$1#Jep194NVYar!wfv`i3tyQAy44N(IUW4XZR-#lr z2~>uZK&b5>fWknB3i=DsGdK@_xRme@i5sAnTZqJK{|#u%I(3}ImW~63@z+j{W0Yzz z=y)p(I3dJVAFjIKFI6)nZWIuuy9B5he|`HDK`VgDfwoBLU6OKNb-JJ*3L2}8`MXL zdjegzRDBPq61y?aNZheNf5CS>U$fZ9wg82Jc1qk2ffCli>TMauuLbIZ)!cU_?m?hD zYq3GE168A+ej-%91{$soQ(sx^#U&V6!}tmazUl)s2xtJbz5>H_soF1s60rYLC2@-p zHwa6&gCwpMaokfHBIpM|Yt^y%yIah67f=TlT5)_5=w+aj(Obp{`X|t4tSBEKs84i* zIvuOa(**4cv>MB`vusLf2~Zeoz4$;rsH_3{9uPhu4Rj9Bg+L1h-41jG%3mtz6`-rJ z8+VkTzXRQbMdy`*YVtOyTd-$voS@M__rOx61T6&GhTgeBO78#)WA*!FL8lmmZ%L!{ zi-3k84&QMBx(fR$Oo>mm0^KMnH>+y}-7V;Pb)BGRfrhL56y6v{%J+euQTMA`g-QgQ z9F^)Jb%*Vs1>-<{)GO)*`!uB73n;AK0b+S0f$p&0QLhL(*r4AFT4vCzf?5rFUC_w} z{YlW-2E8HZDudnh+SNVISWvSqb;Ul2&V=ikCebxD(1= zNBGpTcii+WMl%;-E-e?b0=T&Mk0f2sv}D_H`erpJ6hcR z#hoGUJaLza+bZsQaks!7qkd5Hjx|R82<`~=V9oxK5$egBMwIwc&0M^Fa!~EnaF3}y z4qrhVTyr<*|H_&R_Ys@1+iD++3{*d=eFN_G;@(#KXZY_BSNrdh@O#8%c$qqF+ESP9 zP3}PTUTr#Brv7)@zY(%m-=k5xrTspD1iXGD@W#UWew6L05~3x1x%h7q_aFV{AkD6R z^WhfspP%P*IJ19e-jdBP^`SdQ{0qfBQruPIro=r-+*9CM>g@j4FC*po3Zgg*^ z=_9Ty?pSfBi#t!;CE^|5&u8EcR4?y+UCBW8 zDcnOh=MTOc{i`8#Ysm<;_h7ms#63XV+2Sq~cZIm?#XViz^TeH3!(7Y6Z54ODxLe>3 zR1?bX!rKwo45q$4jIu1XV=y)3PvU+lZpjdaB!{qtS^FtD^e{@&8fW&9z^YF5LY7Ft+L6#VttE zKUmxY#9bopI&sev_ik~2Deg{jKN9yFam(sSVHn&|YHU3%@Eo|7S|skW`rGl&Nn8Cr zWdqeK^?x?*2=#S+LHP((*g&_RxWmPrB<=#Z3pbzLK+2bi`%`fr5cfCYekN{lBhxgA zyG-0o;{K1gkBj?far2v`rs7T)ce%J*#Qm|jkBIv_asMW6$v(_ALfk{eJwe>F#Jy77 zN5y?h+~{zoA1Lk=agPvpowyf@`+&HA68B%?R*zt=1H?UC+!MvUOx*j$eM#KU#4Q@h z^i$xLsr1O>2fj&6sl5;0pEN47k>PGas+7Py-J-Yj8xJGUZ;l1IG4^V1=j; zw8ex($2o39m5N&oTO`IDG3b7vkowG^$AQA?p9Z}EgolZN3cm}~Ux1=2&!EqN@)SCR#O(sgSJehZiaJzG zB@8Mm+NcVYYfug13e|9fRuyf*D&km!I*ZQ1v)?R(t}VI{s}J8Z=&_>9G3&eDpx2A8 zf}}q-=wCqP>hA_s6yJbPqkUsgeewTb?in4V`TSn-U6^~87__nY0W5F!HRz1u4m`*2 zWzcy*)vDg0%aO81jWOuD;z#j5@eG50Q@jID#Pb96BA(1nH0blCQR;Yu4lfyO?W@)ax>#LbGTa)iPBZBK zlCjo)>IZ_(tNvrng2-5Pi-~)pO?_X)K|ziLA|cy@{3B>0ljU|UZop>J`{9u-q_Mp zfSkdk@}xDb^h|3a-m3J`xz>Ry-=MjOo1_W@bgng7l^AqH>1CLRmmAauG*$I6=;YEP ztZAysptA(k7<7rCz6RYOsJ}tCmR^f|2|-#C)5#WoJHk(t-fLyhi=_`+GjtT0|o6+EMc~qXAnz2SRH8)Ih&)} z3}WeX)ky}i^to!QK`d{sy1*dvGB@C}Z`r*TUX7LCj_`}6FI#wj)u5d~c(c?XmVmcW z4H^cT8AO^H#PSxXYo$Cb&jsqIf^_{Bs0R%%EMcK~#vqoyNd4X*a<*8#XAnzYqP{SQ zrQ^*{bS1QrVtGqckwN5TiRveaRQgxd_)WK!y5re3MhpS&3MBP0?eG#B@t?#MYq2%*PMg2Td4Kj%Od8A4jMEyKc zjWmcFd89hPpc@c}wOjc;8NRXXvn+HU5a0aZ@5%6eWnWsyh@a@^kV|ubUdTaj=Acgn zP1EIBlxMSAD(F1*pR%uk9yX}7{A+7Dz9>er=c#_>mc0TmjuLHAl>AE7&!DFAJiA4$ zHfUV=z1Avqfk7{#Myu5=1}!cxw^yqH!!#APbekG((5iBxZ3e9s6iYJYX?bsy54W+l zD`-pJC*>a@WrLt673N`qFAww;4pacfaMlw!;Yl>ZrIk3%yucZl{8{oj`c~Sbk4LDM9Yt@%KcutAgl!DP8x*jq37% zmm}?s>NY_;^2kf4x<}9xHhJk(FB?Q&PF8OjL|#r-pBhA7y6`OvDbFS^TU398$jccj zX%KliL+vMsk~q>nLmezgm%dfaHz`^AR<+h3mVTz{GKi(0seWJ(OFv6pYYPt-Qv*QWfH(4D5|tD}QQVrH(P^!pht2tJMPr z-B5Y2eT{m@p!+L-ZeOcPhwFS#RX$~3ujUx^a^-LB8`L&~KCXPr{)yT)LZ^)N`Ov;e zJz&t@eg0wpRK0A_$UgtE|3_VePa4n`9M~u1+@hW|Xco|IYBM)}5x1;Qk#mQ-$ew`ohO(Kza2&I^*OZmPRmQg zpRk_J$@h#JZQ@49&vc$q6AYRhZ?~RNGX(9h=Ek=>zf>m*xWTa`IGv0K;<={QF8i0 zbGB1WHi%T-P>TfV`n{o!%0h1iG;fN3;JmF?OB^}-9Ox=Tg`B;kZZ(KB-&K!gQF%9@ z!uq|hejQM;LhmbQJfk&de^F%yk;(^ZZ$X-~4^&eY`Y@pRWIP)BSdEo9a#jZ987k!L z6V+u9X@08C&7$&YK;^agz|h|U^nMQdGCnvf?q7ng5Gog|CrTO-_e_9BhrUoB253s? z@9N(HS`_+P&Ee~`u!=ABX$^g&{v}A)U0H<(Fi!Uz%eqUDt~(YZGJRuBg3^@bz!K;`lrN^>nnlw!S{yzb}zOj7{oRz zvE~cXR7$MFvk;bI49$)4+d~!BN{J)Q2Z4TMs8AA>*3AZyW*_U}EGm7h9a*Rd$(46shhqEcsV z6U33L%c-+27Nlto3}`+X|0uMVb+yEi=HG#SZ>X@gdt2`sM9v0V|IDH?IG{46YG7z+ zfDXz*)bdOmwS1@*n#3wm%cJ3;*6;w8gojxR1Jp0vV66;LQ+T*_k0A0nH9Xo{FTf-%eG-rqRw^j+#G!L-W8AO`= zvZ~Ivpz6?Y2CV{`7{r}Ybwn6{amS>5w5lx&y$CcZi2I;wLwK@vmM$G_bc8k8IyXQ+ zK-}d4`plYYT_=cjI6pkix;2P9!kS?{9H6ViGptty?U3jGgRHj<;&cB&)(1Le-bK|b z?Srhp8FXXykw9My;+nus;aOI6Dl0*BM|ieXDQJgvfAs_5gRQ=TIHLb5JjdEs(0lom z%Y18!L6pm()_j8~i3QeC22m0Vtu})wvqjcP22n1HtgV8mA+G|RFNk$-w-#Bq2-=Dj zkT=4Mt-NXElj!~M5^JnM&zJly%oB3_?FfHS{Z$y>0F&R7;rlDB2)_Dc&{IH1T8kv# z>8hkA7CG8FOVGt?ZhR!rGlKLgPP4_YA!*H85^1((3)-6ZcFoa|mDU0sm-k7{e0!z! zJrnm;%|yG!I^7^uOSH|T%&+~-YOyX7bg}xCwJLI~b+O6)z~>t;I`QeZ^b7SFBn=@h!DpXthc!R&BNN zwrH_lYU}@Z&dhV!><00D-|zc>ggraw%$YN1&di*-KF?CyU2S~C*cNfhkdEZl#xcfr zh_ORDlh+tcb4lh7aq5uEl3R_NG*&ufM{>}(gE6Y)G;Tss77AmdHORIRKv z-ertx>_BqZ_%Byn*!YJX_gZqqkn<=%;(QZWU&bg0pNtw4ZS14u4aPEsd1(~Az^K<4 zjiMJAYcxh4q#%{)x&Aw+GW{hT>UnXB2itjxyHyVUSfQsG4hI+7%69x%uBqa z=Osp8#z;?*a)~ifWBY(@GiEWS^t{Z7GDdo)rCe@&q2s7-w;MNBIeKn4Ce0^|tecs# z-B_uy$A%07wqIk<3^^s`N+W-P;(TGqn3SuGix}G>UL7(mWrxwBu~7M<{A-MZn)9(C zvs11$rdO+U&kR|Za-DIj#$Fh*EaiIR?~IX@=9C+a|I%2f{Pz5tjDm%fjx4y$xY?Ml zFz?4hs?D2?Dus#9hIFOeY&@v3uZCO#Z17o}PROBGq}*y$X{^`KYf^q-Y-dj7SN@m$ z+l*H@?t1UEp|_^>vb9T5rwJJAjc4^7^eq?@77c#x@Ooz`>F(ANp9z9adb@O+)v% zu*Zfz=fYkZ`eF?BD;M_B&<1&@ahP-8BECd^cN%>cQSQ`NmKk>%CS%H@+-VGA>;>bo zA&0>^+{XTr@*^WpW6uovH038ok&S(salZK~;>_R(xR~tVw@-#;KZciCw zG)DVwPZ?7*MtgaC3_N4c>EX6!Y-*4U9OpWJI4JzH_oZpD6M-x9)<1@{{-Ge$N$&HIvZ zm@%?hnfE`9ziMnBumi@|j8UyD_P%WNI)|iO;vFz-nfKR5e}$n3_<=<=Hgebz;}v_X zDje4AeZ|@GNXZ?`zkj7|d{rARiHAXw@e=y$H80{gwV|=19+F5_c__xMrU+NvB z*LkXZwEy{zQN-9K-uH+7(tFrw(AXEi-ZgI0Sl{7YDStHHROxu%?T^Oa8GD}h&;Dri zUQRNfm(-U2WK7i0q6eQbQFF={U#8;e({bfnqGc5RLt{u{4@O&I=XFXjTw z*(K%7ge5A3LhG(aKW_+U49UMLy*jGC4o#B&G|6$0LRH93~ z9}a)i_=nM(u`S}0;isj3ZcJBk>|eex&Sp&QTz+XZFt%5W8s47zm9bM}6NZ03^&4ZS zU*I2=A!r!#ZpQwUN;5|(AJZ7k98I}bV>DOv$X6Mo)^pJC$bV>z&MlJU&^nU&f}nGY zWLcmws-qM+Sz~l=ks`}9Ms<`T7ix@JPl^mOrZn@)ZH%cBrON9WqZ0ivHBIi-*o5If zP3WznWr&=oFqSz)UdEWxWvKj-jeVLrTt1@Hk!IQQIgOFbZ27Xr zNY89}NMS59TMiFcnwe=MHAeHnaq9xBta0)VD~_?<3gi67$$v9O z`MsSwUY^uw<@aIg1ewp6D#Ii>Nn^BEGD(&zjHOJHm)Pm1q)nE$+gN$pH2I)TN1B}` zpVk;z;xu_cVJzh|nbAbKUn_ob@`AMK@)wMeW*3?>>OZD&1UJs4?2}m@B6$3{tiLTWqJ>m^M$g+1RCNXUdCoIx5k8 zxm{zl8#7lONaoFHwel((yE|=(yiKPgJ(tRRHAXU*$|p2NJ0MHteuc5jr7~@e zrP+n%xpJb7Wu=`bA7|_ZFU{`jEpm_Es3@ zS0~SBjLNVvtzLH6*rjQ!z#5*3>IZgfqui@8T9e!)U)I=<7<*G= zv_85?j^Ctmpf%9VavNhiMD@t0`raaUY3!Vl&-T4l{+GrABVXyeOAfn`((Mo(!0wXg zYV2BIcgujrc0g+{H*-D#zq6fPx4%(IH!)v$k;2ZG&XD0GGm`Sps}+? z4a(Rj|EaOF5%+>j?NsTOBkl#6%b03|`0;E0_k7A1*W|g3sTOijHn`#r%E6l{or?Rd%w|lb`>j03 z75AoG>56+(KJJQpOFrw0drQ9OiaR8axZ)1U+$~Oie~?9tsr>#RJ6v&x1|CYCF>@{HD$Y*TMM>B-^uEKcy zGtIv-)+Ki3|2)GqJ=-YvE^%M}5hKYg*4X3u%YfBu?3aw)rLlMNU&u%@GcHx>KFR+I zFK++7#=Zup*L+xGy$T5XP-9t)&ALpb8_8J1c7;tY7~%1nZ)>cy0B3dPM;cpDP;Gim z?-h#k+=5p!yyjgR+feZHj8yY;ja^poRz@!~|4QN{3;rpik6B`4M>5jQrHrYYTp8vC zHg>gDI`HV0fyGP}g>1wMI_S)wr- zoram^8oRgPQDC(@6z5am9B%H>7>!&x=Jsn;9PKaVm>aJpjBK`Cjx?{cv0X`{%)1y< zV_boGKw~t<6_}qYPVe^$+kt(fv7Ln!*Lx?)d_mBeO@TR{u^r-`!Y4CFn>%gnrOdJB z*9zl%suN7#b(SuF&YWP5V64mgd*m?DoS?Cf81pms0^c#4Xx^qV+NqgjKBF<(o0)8; zT(5MYJ)Ozs1dWl+rkEQwM)xYGm_N}NS$?YdI%8eX`mdQ&P2&cVLYUz@&8$$mh|+n_ z8>gE!8e0KuhPhc|9rGSFW|~)P>`Gv>%#Ss8=e#{esrjYG9tAerT%q%O5m=eos z%FVHyJJr#jGb_x~l`gQ$1;!k+T4NtEb|GWRE_2MEX^i$D=9+J7jCLL7nWx-n+2tUx zYK@UyD$N@-M*A9-=JOgOyPRSEjWK1HGt6N(Id++E`jsx?U09;p3~B72z!sXfX>35{ zqsCe0ZjBWHTV$qanWtCc{--%WW7WWF&5auK16yofs<9xjv&}O&ceQ)B#H`X7)$}>$ z0*z6dSZXfR7?tl_bCJfVg`8{FYK+Qvu6ee`X#eG0^Bl&MPhMuO)Ny2&WoDhmXusz? zvq58I>*eMujZuE*n@t)c%b#zq))?h?zS*KN%I|zL$e7A+g}IKgYsHG9zP=UaR*kJK z8sPJrH8+#x6=$7!gyYnVrOsRy6IUODtznGTN6U;l^J>O+h#!@-=hT^d6y|-ZWFxR= z7`xv4Vo4XU0}2zrDfvFIg||@d*8{s*G?*PWc4bb$+^Vs6O0LUkH1A_fY1U*u$k??a zeaw$@n#|V~=KW{My*bV1I~p53fv}G?R>RmAI^Dfv9zfj5w^Hucdbc8OjajI%yBV9R zFp)a;$B0{|<6cKxi`k^(DiGIVUasRlM_j9UgT{tTBWr*l))^ zkP|e&*4QUwAI)hq^MAmaiN520oD(stG*%2OYK9c%Js&dL&5at{%-A-~xec7{=Dj-Z z2Z&o|KCZFn7<*o0A2RlePM0$N$KX7su@U3<&NbD_Cj zVP4;)dviL?tvYTeq;#5hYwQVNUFI(}=Ol1$Hs8?L62{)woP&#hjJT8^s#@8AxGiRX zg^6I<8DUWR9(4k8aoQ?V)HJI^(lEE=MwXP#%7oN zIA@#rH;oyS_vc({ey*`}V3(QSXl%sfmvb&RlXoe*jA!hr352PBbh-Jw!o;PxKX|#> zYoZgk-R!3@@k_*QH%sR`aaWj?3KN6NQ}VAcA9BTAX+EjrW+3iLGj)NJ?kY1=VdDJq zV*FV6qprBC&8Kx7$-LUkt9H`uFvloNkjx$Cg|4`3%!_p#$-Kt=dZCl6^G-Y z;&IbU`jh6@fnSOra4PCqQatRE=C;2IKf(MeypK8eO_4~YEbzLfkeqipe1xIukDntf zg*lb-b%%XSal_%DNTDbbIJT52RI`Rq6sMLAv4~@rFsD1boGJAT8<}TqT$tLM#1rZy z*MMxxty@-LGcu; zPbsa4-{iC&?r}-F$MsZ}p6K!RSDYtO_Wv!Oo^(4A`9EbFKEgJ1!j=uYQ(|pMu_oSF zKt6}O*0rIxdu>q}{?;5k{u)4dm1_2tle_B?JKda8GaeqwS`rjZ3Q z01Z5oP0&pl(F6VXoHJOasxJ!T%?AwMDW|;N1B|U-Wf^zA?y$-$K1Vmtd+cc)YfHTO zfO473`MPW09S$*%8sF7y!5yZ)5Ig5_Y#TcVP^lJhUOn+B-Hxx%Jk0S7aW2bQ2`EML zG>mO}maAr`ir&ujiS&-6GmCMc3lg>TOPn4XiSVKyi$ioni6gRMj z-&Az3ad+-Yn$leLwG)?o;^qDC$#?vriMPT~DU?5P({E%t$(ML%Oky6DR`K*C=Ps8V z6^_q~yo86x#3XSiY@00pgDvdnlSsq+T#{8dUh+dMM`@_SisvcNEg$R7McFf6&WV)t z|DMI%vndnr?;-2aXqd#KA>O5l@PF50FSsnG!pa(dmX5{ZXULz!=UDdqHA{G(;inA$ z#W3kq;-R&q$#ZFs=naY?6i+-H$gytNQ;+_iuPmqy7=p%73%WgwJFNP+Goz06nLW{+ zaWIy@rxFoAz0Zl@aM(fO9Xw>W-vfHYXMlJk=*Vx6b5MPkSJ1=Gew0LaCkA({eY&3r?i6Z(e!u;ZfXB-hG}e-qJvAikxP0}T-ZGdY-XM- z08MctbE>{W&>GF1Ss&JVc0V%pSg%GLHA>#e((Yq9Po7Gns>*90)8Aman_tZYl+J1- zb+=?SLMiB`tG=M1iv8&j(w00-Z0l9AJ&mV5rJ_}#AwFWAzha%0P0~)ITzr70I2q6* zMg!spToclh#Hk$n88(%GKl5WidfSs<(p#Qx z68|ytQ&66qN!q>yc$4@o^v$mVrgk+-gENzg@f|;ipJ8_@;MnSMXd>X`fe-uSId_m`KaMH zt}5M_^Ek(N@-#l4))(i;mpN;geVb-h~G_ z1TRk_c$CA}Bpu_oWFF(^GrvY14H)&c_%S3Lt zK%qMAkF+`F2&1udnUMwgK_i!;A1(IrQ4hh|SEM{7>6yGNa6XWi%dm)HruiS`Yw{;@ zcsd~7iDl3`Os5;v8jDf(qsDYRY5H1zl|iMeGN^P9$)Oc#1y$hBF{eX^)w0~6cb=9T z^t@ZGmX=qMU2vX3Z=E}jC7)-|xl)6UU0S-bpvCxoVHfgRTCpBsYDLuYj~d0s%8Hva zij6gZwcJx`x!0764HbAES?tZarJ#~^qws$ekWC&cC>6I=JP!D9#b@AoxZ)_@ctvkx zsp7Q7#?LGE6;z^Ls?9xIvz6#U)#h|T&)!TI^vun4LC@Mm4SGB3S?0?Xp3zIqKUQRn zKFeH+aMYl8r*1On36)I-J&O`G=*_B8gPxe#%68bwC5;;NuGLK(-el0TD4Ps=24yQ- zbt~I*lR?k6L=AerW|KiruWT~txtQ(DgJ&XP^Qb{@XpI{5EX_`~Tc%k!=QdF2$(yJ_ zPvf+3AKb3q$THk*Dw*^8=uC6U zoOec-vmMIW4&`iza^|@el8=qPi{WmDk1%{l&YkmA--qOUz-F$CTUqB@S^quEvzOrk zh6fq0WzId!xraHckjrw^5qX$tV*8w>g&k&2>59T>cqiWxW16^m&J57+1th^%1F=!WR?2-W;rnxMDWH5G0R6_flndQtK4ko8?t0K4!VTmd=8?Jk3J*crW4VX8 z_q~ts%^B|-^n~aU&gBSt;+KW*8|2B~H^_&-&n11|An*MUdUvm)v*3k}8ppsntmtc` zS`Dqfo;$sWT5@SoE!(7)ZBi-I=B>sEm@#jLq&7Ua=pi|2-U3KCZ63W~jLn9Hz;;iZ7&ugK>tB`t<;I+)#ycgyFM5^h zi24`q`iV}Fot%VsyXOFI6S;uf#Yn)bMLyt8F&gkjQ3QCa7z?;dj8FFBX4_+c`^8g$ z;|&T=G$=gP==6HUbmL;cS;l36<;GQj^NgK6ixg!>_4$F8| z{25?|dd>L@C9E#sy$&xvM*|HEYSI!2^m-T=}ay#I7c{|`lxd(8n{3YOY`CGtQ z@?*eq`4!+i*|$%+sFJyW3+3s6welRmbL1Mp^W-MLmGTO}26+cylYA1eMZN~uCO-m< zN|~N6HppRso8+m0opK4_R=Eyvo4g!wySxqXYIzUfPWe;78|Bl0x60Q5cgc4F?~=** zJ(;`ZP{7^tRKN#i4d5ek72p$cE#Mw`0pPRpLcqPU6L7!081R7H2Kb7+9PpsLvTq-8 zNbUeUEN|}X6-VUVfajQ07w4H&7b{Jwiw2YGqRFJXXfdfS+Dxj8s7ZCP!MqJ{lX*&p zS9F^BfLqNmfZNOx!0qM~z`ZPUKg&G8GGAet2U+HukeMzHnO|h2i^C?_|9z9}|Dj3t zKVp*okD5kix;SQL1Abvn1N_=NA5eJO0X?3}0KFcn<=zZ4JUc+?@A)xcm1n3AwdOe+ zu-0?5KWfc$*&x&!!6FGQho_9|P|9{0{JdXUK5Wn&(WwgP!jJzUg@i@Q_EI42yZr z1bp9f3E+pGX8@0QlCxnkPbuIr&nCbxJWm6D?fC*wB#j#ZizPJydXsJk?46XBlP#V? zPaG?55x*EeR@^D>m_Xqf;|NYD8H-<=NFPJt7Xcp@k04g@4;3F2jl~N{2^KP(ApV8$ zX$2VLihw4DV$4Jj3@Gn*E4>)&PPl8O}P1!r4Pe<}8NK4kb!g7Qx#Y z&Kg6pyT%aZS%zXPr(&2}(hsqo2?TddAkJqQ9%h(5kvL~fB>GB*oeZC4`mRYFJC)^6 zXZZ|8DbpFQWZ21Y7sF>69%d+J6K6KVhS{XU`wVl-D0~;g_Zc>nGlgOK913q`=$T95 za)w*yQFt%I@=E4m_-rL<=sANq8SZ81Ig==NRS|rjVZ(f;Fzl@UySKb>S2d*-wWR0D z^C{fPa2La8&nNm}hGGSmh2h~w3d6Zl=@`ypxRPNf!(9xYRrJ-w*~xGh!)F;DW+>LM z9EP(PzQ5*zp-&|@w2-#Tc;Sg6LL4_UX}Y??yI@K$$cyLz1+X&evxbD<>ZaY zJ3a5ryl~#;yqofF%X>2KnY?{@f6e@Re@p%q`8VVr&hJ}rcEN=O*A?7e@Jzvhf!p;Yo$ng$;!p3%3>ir10s&Ul+bxm{e3)G^Ob5qVtOCikgbx|l3V#i?SpI8Dq0b|!vft4hp731;CJwPvFfbMVVt zbKw~)@vBf(VzH>kZ}uz_OYnD&SSrqiw_GO9!{7O0x$pxv;J4Zv#Y)ivEQnvuX%o$2 zt+)`Lbc<-m+^a)e41c;Elq@Uk=Vgu3&g0!?XI$1?9YcMBf?* zNA_<6y~wj3_xn-?5|29^9(XV47Y}?9@YaEc0iPK7g-v;N;2;ldKd22bjbZ;mQG^FF z%o#+S@zSOY`Vn|89{4Qa69eD2!>xTR!S%?dVJOJ3q(5mcBmthWG99oFu(!YZ$>;a`KItXg;S z*{MRTIhiQYlLH8s_YMInZIx}6B~{pMPd6o=C*IDA->tu*D4V;bsjz~|<|?deLD}C; ziRX#07sa0_cd8?|G-VlgP0bxfHB#Q2Z0n}~w2<2H-a=}_pK^HQFrs|Ql##=T{!z)z zIYN9=vI}tR7Mj8R9KKiC4t7?pri@m6vvrWx}A%kchi zDJrpw#a%?B2CxQi@s^?%Z__r!*~U_Y7c*Re_hiF{c+a&Vf_R6u6s-(H*jvR-V51)N zwSZDwVgvxckM~DQvCU`(ywq3&cnuyrm*QHylUa(LcsH^X*BKGOyN!0FeZW|c@cj%Q zG&(?e2vCZ5jE#UF7#D)_CqUTExCro{Mi=1M#umUdc`;&p0ZOb04K^H08Yi*dSN$t zJK(AEPQV#>^R5&#)?hz#{X%0LS1xrm&3p3E)KY?|_rc&j9C{p95B!UjjzVe*#9$e*tbZzX9B2;=n>& zi1&v|agmt>*lDH!ZZ=Z^x0<~GFE;xCUV?XUN~~rx0k1Io0bYeSXiEGh;vm2s=1G9p zn?nI_GKT@)jQ3VbaVz#*rMS&J1@MPv9^fu>6ngdmkt2#QN0@QSB*Y0`kT?og_(u9g++xE3#S)8TKK!d zKNt2Z$}O5$6e?O*w6*A(qFqHFZoseo8lFx%p-;vcCPr?2-pwfjB+U9}h?Tu4983E& z0ZsirX)GWAkS~iO>0{2IU+YbRucKf8%n(yCYg&MrQ8ng4XJKX(z+7iFW;bg9TkvVc zCx}l7pEi8f;uFRPzw9TX__X7*4xjb-Y`~`jp9}EWh|fjhdzc$-!Q5yI-aNQPd>@}n zu}5_^a^8W@HJFoKi_cDct`oEHJkl(TK(pXSOIhEcVrp*+3>WLUthwUuUQ~u$aW8NW z^rd(YW^9VDN$lhJCh^5elI?Qe1J$9^;Br1{r6Le8N~W@?_&;d|!<3%kh0V zzOTmj)%d;+-}E_v@H_Z^2j3sy`vZJ`jPH-}{RzH58952^K1>>%|6$VX{8q?l1#hcS zRq!ig*yw*5kB=TCFCKXkK7-`d_`Vw7*WsH!mm~ZEzCXbC$N2sj-=E-{KJSdYAo+Vm z7bI`T=jNii;*)`oPyC3?H+_Dnp}i$A zL#W?GA6wJrk2d>T#x}IHh=ncwD1IZobzY#QEfDU;A?5}`XGB85>bli|`sf_6`J?z< z?jFdMt!*s<{PK4c(nCQpzqvjfiiB20$Cmq}ek)T^9`>)F9f~%Q5cNCf3!B>lE%+IF zjY`F-;MmLw)wG9K`RlpR%A9lBTUzGgSH@kWvi9&g7g_~ltKThm#FT~b>+i#ZElxqr+0xO7R$^z?E$PCL9nW=5j2wtnRFSOWF&3*F zlQ>7aAP%V~R$CW`)l~|I*j>rkblsC!+?7t5!=ZJ}4d_rrVzCQtN==i$EnuSy{ozQU zA{-8dD>l>z+PI!{qp%y2#%H%Tw~$PY+U*H#OOvP(y2GxPRu&3{8=8auXh8W2Q5$Lt zwS*cwL@76p>R@?u1kDw#skOxxEtUjYTFwlH)(2|?8=^I9T`^8ssg09gu#0LDv{q;P zTbdjE(Ga^A)qbkslGvFmfcW2UL zfx1b86|{qK+oKy38Ko+)L3^hd(M*mtUu|ejAjnljezPVJUe{b7h$JqEZCzdI-7?mR zYQuqmW^hcR2@66EF3;fNwCgFcXsZ^wrBLf}k*Gfyjl^~chwO}=JYp;5t=WTa?6w=}X7>ew zNHox3#|q1BmiaLYvdJ}=yuddGqTL;#ikKZ}Y!0FkD~#=iU^wc+xw|w68(pM|V1vS( z+H|FIh_Oi>x}9EEhAXkA#HQ2(EQVs0ZMV+mB02(5YNs+4huwk|YP;b1x~a48Vs8~& zU-19BYGYg-$d;>Av_);ec0>C`fYmGyoag&J!DjWnNhbt)C5QgQWbW>6M{s@rV; zV%4rijcqE_Fs(WdG%N^37huj*8jXgV>)K(6bKFg_G!lWHEgg#js{}dnMS+M=lc$K_ z0a>(0>OWbE8PFc5C87nSABJgWM`H1n%17PTd! zvSMvJ{C-^v4PVY+U#m=toCE$=QL8Mev5H`OE6JjPnG#xAq8wBfT^R^z`)iFVt960= zG+m&w>G)c7hxPz=+#QqfcvR8a7VV%=L@W+B*VH#*wm&Z#ZHvWVo(^=i*0HddHKnwS zh?rd0DdSp~*%4%|T1JowZ#8cb%zP#Y!sBBFLiE!Ilmu9(7e3 zvB&}gcc8YpmAX`LU4Yy}7_GTBWYeuc^{Q2oK(r?|9b4MaP!p&R1sfs@{SDMDDp$>K zjzkc!5?bPF;g~2VE`8A7(o;ND16iOtT-y{5t>?v2nVJYNox{2oX(@r3*#&A*w>a2b z55_VSurUZ~&EtAr8%_F|a|w zYM#oY1nAaLDBIfBOol=CB4xGzv!c1(3GSp~EEQJNQ!;$l={bKJEfZ|tR}qY~hXZKV zE?Q$Cx+307YHDjB8t$-@huT)q7}{Ll92M0;8jfm12=Ev*ZtK%03dAZl18r#p1=)}nZS(vQbn;42M>{T+%8 zz1(W&3*Z3-aOH-fNjT~j$OKnPsO^ph>WZ9;R;0FjsA;lfkl--<942C{9&8dWhiYl6 zNN{*G#A2A#eUe)tI#)CtYTgbL5f(NUd!iV-$FDR08cY zVJ@c%%?5QgskFJ-0%SwDM6LxCx-{5O))MfCu@OL(86!A;kQS9y&5LBzfC^9N#D&_Uw6#SIp&XM^T5Z$17_C1Br_sboq%qY{-AK1-ZcM6f zanoJd%~-Qy#cVWfj23g611$~06(`#4IdyByyQnCr~3Adqbxk3+1P~_s7Zx;)|!w35Qy#K_XHOGg`Kj zy))jF20Pf#+TDf9ry4ee9N}o+z*XC)kTYM`5o!aAqId%C$XKX%K2*t-6umjJsyU2C z7vbSvzyb4ci2V!-R|W$#I1bt)C77sPNgeiGY z!sx;bVKvf_wipJe6Jn}t<&IgnplOxX%SuQ(v4J8&e-XuM)HHIt!xZNjF(TYyC5bIc zvUGq`p!Y=Ev5CP5Hf9~{T&B$z*s4`T+Syg1b8(VF2^OLKV?bs|IP{?|rd6|o6mt&q zFXekDn1-!@`)Fvd4_F1j12low(7Hf8of6x#kbtX8$4N-Y6`Pmp|8ZF$^h&HlU^d8#VwwZvbl=Sfg+<%m14C&T-mVe# zx`vI(1DQpjMixUTYr;T)rWQlAv#GY6sLDj6SS3ZUX|1PIdO3rAb?)yA{mo%4v*!EP z1c1|CBl6~zGlsTx?%L> zL!(hvcW^zkaYh+viUm{vBNcZ4(73E%RS5HusI@CQww~vKRPz;Wkw!Q`vZD?X6%_j7 z!JeYjsIS)v*xg;SCJGj7m$#CAN_ALGM``?|WiJd!9elbH8#i)HCz)|ntpkK}mTLQ0 zU^Pc$owbSFV)e`xyJxoIRB{7OC&7ZfAgrIO0>MU1)p$(<$B5k_XWy38qVXBS5USJ9 zMJ)@V4U2_=z#0s`YiS>t)(5=MgZ-H>yTjTiMig;J)X>sxyyX6*CJWtS*dr#4p)`(u zTpKP_+0|-u3PWRXMm-crpRwsk_b$64b>CF!of2rGY!GuCPFON!Z^;=aNiiPf(%G7!@UM*kV34Cc{C|oK;UF)jm}lT7?R^ z>Q)gJP%-EGqxDUU)9^3!Oi?kg9Tv3no>fht73*L$TC~npQLL~~m_^NvO**&`h7UE+ zAld2{OPX-DhdDT!@^r_#as5T>saG``BV}MR=BiXg~3j{bZa#$T%&|diyb9w zGMAioT9r7Pu3DF}oeJ}e#g4}|8Cp~2swIIl+9T09*ma@PRBjURqc!Bwnh?O$%#S^f zNMLbWZBu}b2dMkS<;Gex;iQU8$KA<7D8|l|Vr+zB*w!>dvV%nB+9H~&Hkzvh$}EA? ztx%lJr(2@qV^luzbjl!(YGnW?rJa^mvyRr~agDT%PDvx8#Xg3Oh&F3VL)$kIXEb%D zh`M1|qpFH1YYNn_SrDqgQE?diJ+zn2ODDU(mE&X`yDsPlku}Y2ZM1mP9SE7UwvcOv z??cmEWt|#3B$Oc%z_z?SS}j74vbO{=4b$=5WYp}|A~}O%EZy2~rn5~uy)&Z5GBX`r za9tn)T_3I{h_Td-jk3pJ%YRs^vi9AHj{dfmG)GLt<`2iku;P{20`1O^iGK_UIIk{a zbV1kVEwdO-RD))=$W$3T`3ho3RjsO2o1h5xl+|IL@LLJ6>qZkW2dxM;SO}%*hStQj z7i{4veOV4%P@oNtPq#}<6_o3MrcM*Gt?rPhB$&-KZxA)%2$4l)1AhV45y(dE=weM; zA8uBs-SY!cKaKI0d1%3EMcNZ3$ikr0ys9}6wu;7D*@-OCYIjLo3pmAnN$;gor5J&>X4q*9CBjwm8(PLzuDE zgqs@#zLmuhaI#ipH3db4BautuanTpr5$vUa>h=w0Rv8C9oVH^*{@; zS+Vxu)kr89H&oDYpr)vN%HeOBLmLDRo6ux+K;WXch9c2LfqL|Y?kSv@xI}H?5EdJB zvH&~j6-gUeK&jBcrmBq4*pFi}@&|}xJKLve)xm(($84G{EK!VFBU(Ma675|r)|FV` z*2*9@AD2wkS~(iSzE#88;&ilNi_oVFYAv#IBCT)8h1y$~n7Y)jv6ZaY5U8i)z)Ct_ zLKR&Q&^wNNWV|R4Z4U><8SSlYY8zQW)g^iR&uIZxl+u(VU0u<^yQhfhj?Ct?TP4%! zpw!AN8=xGRjPpv14|s6+fQ1vz6?l5Q2uq#@>~W~+09L2LdMq|8S8-}pEVKY?`%cuB zh8xxH9Z#+_A1}3dO3c$PXN^ERL;i3xHuhYzX)&Ex_QT%4srY~mdRYntSD6^VpgFD&48#jXc>fNNM*ua2iK2F3C7h3 ztG2P79!`fsn1iXw0_|5(?WmE2hf@bdy|$xMqN}=inCMutdyLh4x=C@h+C(uu%Zq8r z-I7{8)~Rc(7_4h(I3c7J7Z*u0qOdL^tPqQJlTK!$)UiyC-D2s=R(gJ-h68K=itZO! zt4R^02H$8oNi4zX#sXRdNbJzu6l}VHn+}Ok0PR(2(c+?V8c`n7yCkj{&F`Wp-iW>$ zL4x!$mAfP{TI*KYI;&q(jn&vHtklUa0`359u(U1|=7V1B;*-NayE#NVF(GyB40~zS zt6&zK?{XSy*7gjGDHu4~>6RTMyas`fz=3U0O$~75PU~o1Y*@DynH5(Mf?OGDoJS>K z3soQIVv|YK;y6T|rV`dYTJ;zbI*^#U32BE!P2NSzToM)0F;KZ@4datPhQ#RUHw8SL7fw*Ep2#3Jn z#Qq-Khjq&lL(Mvx3vg$3`hc2utWb63ke4(Clr~l#JfR4LSCsjKK@Vy(gZ}LFkSR4%KA;Fp^J8^2TP>iMaa>0q$I_k+1*Q*oB)}i?{nYENQh%o9n(HL77 z1mIxThtx(2wi|7o5J$6eijP#R3t%opJ9AFFm9Jhk#6{RE)7aZcuCl5I5VL>gip732 zT{b}{?#{tG!fvnZzU{iAHWZrg4|ceAz__K*x%>*6sN=2%w)E5xL9lvstL@)PK>T#Hy2%1Kowbz!Ii#;_UGv6G@RIbb8b6g z6QU%MOdfUPRMuHq(>|wp$BVG%aS53m)f_jQNO8m}7m5IFyy`BYuhcBU4skO&r5YCK ze9FaRo5#7z93M-yY7JNMvE)qcJ{Ke0nxvs;@a3@BtgTqJ#*dBDYGI&Ly)j0t6Uj{i65K7}V%tPOOdtOzg3{@zAi<-7&|q#5?D>_yi7`cw!x9 zyh9`&rz^%d#n>p@f5o`KSe_o;U@V(0DuFAE<+OXX+d;*$B=RlC;ZXjC7!r0=dxhB} zhucfUGg-dC@)SLDC~pxnIkOO+o+DH-XQR+pjy2z`(iZxn-t%(Sq;L#D0Xb9Bf791u!gfvIgqzr-^$z?@EkTwF_ zth=9zwu;uN^ZBx|eWg?%PtyVnDyE8;KRvS+#0?6X;YI{z zu0nYsb?A$|ckRv_)ak4FUF7Z>wZ6TOdfI2hF^#GflE3bb-Nw`tl2| zR@v%PSlzg4a8Kwglc@G%VfIv_1&3ZDOjB=xTXgW_p}N%q^GtnoiP=5xqhSfq98{S_ zaMp)gMiDfQNCd7QjRTjwoa@cabX}CSL>trTt%VmYs?;(_J@5yVJD9@O^Km1_0=gFs zfa$G9c#SOr*4_v0s{4Zt#b^i|D6s<8H=k(uTe-|mYiiTOhrreyI+_Tm^GCLJlpfXL zwIEF%t;Hc*oDRCzVM%X2%fqZ3)2#2|=u(!`x%CC>Xb2Up>dP*#>xhVqpxg?T(P=BX ziK!wTo5NCAl zkwC*7Sh|i*xZB2ywqns%BHAV>H^%M5y6Wyas&E>X6FfOtP0uf_?Fihv)B6(Ce9_e5@?6Y1auFVd zc3IR)LuA_DTM%eR;jvKGbJi*hk?rtUE29BraOX;Fm0tW z>;vF|68%uI6HT)Rt73V=?0znTBJHOy7Fy%8X0xBqh~eUH97jQO=A#O13#&NmSq+7; z%~sJtw8GUh8!F7tZBWpDaDxzPq!?ZjJiMU>E$lUcWgQ+qpl4vp^|U4CCL0+SSD&mn zS5QBBp;s7{!G^$w>Q$_ozKz5hz~|$+l3;}Lu!Nl1jFFpSIY1AA)U^47;#^Eu1P>Cm zcnpH}>gTFQFvNVGJdx4Va>c>5DX@Og&rOh6oZ_lyCkVmhh|fgXDT>+18ck+Siyz(z z;`Lfi-DRXbt_WZG2tjFLg&(vl6qevaQ%dGy#Nmmvt>+BZU_#FNaYt;}(1UeO0qlns zbgQJ8dF*(tGShWjO~L(XoHsQFsreJR+g#Mib76a=i4B4)r)TqENd{1%g&1O>b-mxZ zr^Fp0i~E@4pK3uTG!J1yOT1~Z5r9#!I2gA`i)%9uD zqhk8vi;|33#3i&vMXkFQ%gjtwWLQNk03Jax@-1pE+aW zq|&LAic5+oj2S;=%A7G1OXf@&Q#!F?&X|(&+0!OWE15cbT1okZA~zRfDC&IthRNgc zuYUZPVliFaUFLPujJg#o#^YV}^($7;?Yz#B^#IvA3F4sd(4#CYz)&pf}W9&Rbnx~%td$}Wc$@@HmiR2Wsn$(=r9 z+6rtm;i18X(qJgq(Hd&kPk-UQ02|IP=uRS|%w>foig|A^tjG7_m=hr>eZA6UGol07XhIO8al_5)&FPRW!yxEzv(0`Vk+ zTy1TLDhLxjcD%JAzU|;-u2`%Zs0}I4sHo(n9nR_OE3v6&9VPRU!FE*R;bUAEu5>-A zuNur%akWKlFEGLd(GOf$nNxc9))s+nVU@*dX5<3s>Q%SGPw-Dh;q{2Bo}`ahC_ler zji>fq1zmak7>>RPCe)I!Hnf=T)KW*|F{pc1s zQ!E?|UsqNNDV;y45p{zr;Rx=KTTA4l| zwk8`^$91*<9d>I;rM7U!hOK1~y+_Kd#Vg59#XB0u3(;#K-Za*XH;zSx7*NF_Ja-N( z%;82M`VvPAZt`Ob0DNM=e7u7U8wZGYr9Ii9CX{lL6W>i<-dwx`Erj=;VY>pkc8D_0 zuLU@^{*VjjI;bAsA;dSZUVg-2YYf^n#-wgm)YK^Cv>_}~>X8O~sX@G5lJXD(+CT|$ zY?$SG2V=X}Jl#gN{N7%DerHX?eR_bmK zcW(Kj0@`9Nf_LsV;GMi1MKMwpKvoUjyjv;CK@%o^oGFFE*+TU3yY1bfYNZi+`XQ$Y z<)C_tu#T!u@>xH!PZU-mtDTBmNVg)$YXLVV$=zZ}2a3Ibc}q0b%Gd;@A8Lx)SBt>g zlpxdHGU7FG@>As_*&Br=cO%|X%w^6D;8_$^Poz6+pQ+kB)tsi-t=|vYB2YadG3}i z`o*_rVd8a?W`_`Q9xR~;JS}l))}xJ*C9ueamSj!(8;ABvHo!9#r27CraMG;`dQl6c zS`hu(k*+nC2A>i_owGkrYDTXVgA%u30gsxf{fePIw_Y*qcx_hiY`B>OU zdsV8NX0$!qtB#<$h@w>GY;iy8%ZIk=}N=yAr450E7M$%W|L$M-> ze1b3+!Nb++QQ=g)ZCqq72fY?N{niRBO(- zt0bKbN(=IAKna5=VJo*Gcg~`+XQ>rPv)0zJLiZ&qHTjBQ35a#wP0G%izHRpqfP zwt`DaZIMPgHPTayBt5&A1U+_4CDO06%d!ymQDX~Ps{3e8cDCYI;0>+y+{$TgkcfK; zdvUjI#QfND%!UP;VMXdAVZ4vK40_qUxWtsXC_mnr z!+e$unzc|5qO#I#jY?htF2`14W}Peio1dvL6Cbt2q<62P28{+Zl1oc{rvaSIK+CtfPOkLij@Gcu+;2}!b2hS)wMt4@*2)u+(|tviP||6M zBqg$eS}nxP*Qb5Av}*1~Yj*sMAX-C6oPicWTDpDu3f-Hi?@>#kI2w(cd4!?9Mx%xD zpW?LR$%(HO_j>fZq_z60y&5Pz@qEeOQ)`RuCCAU*J>HQQQ)32=!?fC>v8HG1bx&K0 zROCrvb&QQYr;D`~jqnk8PrWblom1MDYED$gq$7<^qr&!6BtZKBh)yR#;AuOSM7oU4k%ICB1`rDW%r{zC6MtC2; z;JmX>nt1rqv;n^9#sFWcOwZ~)z}E-Cd9ojV^CNYDuk#h@8|E9KLwUY}6k_mo9@XE+ z@ZB}h@YQ$vDJ;F$*V0z~1fWBf%oms)DGb>Gyq;GzTkbu7Vy@VX#JInAbMmD{LX@{j1 zu@n*bp(r1HLzmw8RY^!hD8sirRd{^Mfk`Ay;t**IcIX9}h_ZrE7diU;>6rm2Gc4WL zj2}Yq_3ky^fcnaGY1!I_zJ*w48=hoemlvS(0D=AZF*}0@*}^xNKz0gB*16x;-yVl3>z_pO`zyjRFRb56e3bPe znJl4@^nfFsKp&JKorJ)U_)5)|#0ti~*&d@$p8=U`4F#}xlF2M8OD1P|vvom9MiwMO znDDiG^EDaT8kE)xbp|U%_9ua(6VNdFi6rRXxj&V-xT%3{JZn8Z4H_sK)tce!7~s1Q z(2HsyU9!*~`edQneH~e;R5jF4f#XLvvwERrbRJZszGxCEl)-v{7p;<*A(ezuklGax zYEhjB)4jUv9jr)4GEiTKG?V)Ye2f&J)DQZxVAUtAzR@e&KxT>tgGe$6e(F-Dt3HFC z;#=sT=t91QY>Y!}hC^g@SR5^as02}cgZpF{(hD-RzTpC z7=JS{6Wxc1j4Ns4^&TY0b+Z4xkTN@{8 zw~E?nNA0##?Nm{>+EJRY%jS4QaolZlJi;a0txJY)){jeOAx_D5CoGv(=n>Vl(Q<34 zW7MMKa2R!0iz1@k0`1(!tzaA6royOGps>8Vc?GwBZ)WFVScOv155_^L zX?WpX4(pcVg$Jb;jSBWE+aIDYFr-qGIz;Kw8Hoqog?bcGn3~Lqbd&L-`J~HauLmO; zewvB^O1=ZKkaPzZ`9p?BAkEi#M9Sno@Lkl{l2Fb*eUKgUBS)*$II0Nba24SgC*M!w z2Bq@V`fADBsIaD@FQPvogRb7ge6@Wn*3NCHL>elXxpSM2Kz~E?dr|V=KzxWRPaM496>A7+)TQ>GKEC$_Z3hx@#P_iMmd6e>=&K1DDLecdu+ynq(SphL=6rF|?Mhe2=6`M4Q2H{1QN!QKtk_2zVJq zIcP9bQw(Ljeu61eVXG8SF2uLh^ZJR*>?C+=xA*Cjjkyeu5odu@C%{zk(a>p(qgsPPJloI;+YP;*_tJV6UR&-&} zaKPEQErzvkHr1HLi;BeL3jP;84!sBMg)o|MHS~6o8rZ8)WJ4O&q+;WwTVs-Lb)vTp z$WGQW-KHejwQkweh?K-yxKYE`;2X?>cgG0c?Fin@(K}9=trFBM>u+0 zO!PJFMck9_UQN`cMZ< zpP2aE;`nDbt78-WpFCtrZp7-bMWn|b?|5hzrz%#9Z##CPP0gMUkdoW5Zixsl9SYOJ zcObD-!DzkWoM>dLMRCsu8u^LS(fVi=K4E;+c}D+4#~DLN3tAuH^&{O@Qt3)TYm+g} z*{A5AX!9tY;+dy9dOrTj>NzSRvKmow?!#)gcEgVs84>*x z9q;+#PxsR5kwZIIzSlaZLN!~*RIpbib{1k!sZh=CL#o^pIa5Mga34vL&{{FvAtuTP zt-_tgITl0JcR!y>bB?CG*2$DSUC7gfhYssxzK{h%A~06ah$lLOznaAX(RubP8dC4} zWa*LcLA9*&bv@`2m@V|hO4jY2fyb=gyduf)_Q5}_l)#vsorFQF^9LSx8h4l`7@1u( znT1P#kcQ~po>a;@jR5`Vou@Z}J^1+S;1s-%>{k>XJCnj znZR&fHFw@Fhl}Ax28b~P^3PsOBqdEG?_saqxnGhovT1sW$;f!jPNc*nBAqp%)$0yS z0wgc|uxKHj^2z5H@K8`dvn*c$L}YIEc%yn_2(@h8?n&e{Tzx;*eV|>%Hhr?14ChJMjCo`oOx>E!Q@2F?>FB_&3Yj$TL+uaj^CNE zRtIk2&{=;8ZuO{Be}WV73y}^sEhdiWlku@`2`D~y`bmhJBqktLF<`Nl+@?PWD!5C*g&*}mK9rVHj>o4Ia6I$Q0skaWsI=vXr!rU;nZqR} z{Yes)lTuFLJSPGxLzv>IRFm+Tz%r>+6$np&G`g`>0*O?v37neF?x#U6Nu7-N37jA4 zOZJ?D?}_+Kf}{%Op>P>^CIY7tlJ(~RBb_TaG#UAnKrgC+Vn9k?idfQ)>`ZjZkMQwG zPc=fROCjn1-IiGl?WUloQ0+88XFom@F+-xZSdV^0?X(!Zh}s~18bI^oyB>V?97hi> zu0kBmw*rWzG?RdnEvdGO!9SV*sNIvr$Ah2x4%v7z(v={jdgMf;rc^XTD+XMJc+zbe zLM1GJ3Zzl~R9_89SI1hC=JmixXX2;!LieTooX14|o(vl0Hy*L1!DN<;hmaw6GCp|x zlD{V-ZUWP&e54UcorG8_De+O?A}RIwrv63gRePck^?1^l@}tsH3#DAirqtVuA(8Aw zkaQ#-vKQHoEK&z9(v8YUt)5CmWg`vfT$gHyB$9PVRz1s@1Pa-H3aFHtG$q-jDfJHZ zp;{p+lsna9Kx9+5B~{4PkPttTlK6>;q%N3U$N8;7kV-&#QY#>>$s&F+qx;2mdd=Ig;ro*cjA{+&WXMA@V|FQrKl2mtb_Szpu!6eF=DIPcA~>ZnAnQ` z@7z$SiY>(d?1IYVM7JOkoqNWf+s#On%zfl$9bD16B>sBJ)I`Z+O&D89>jZ9kqJ$@U zIVE9PsV+X=c z5n|m-nf+ap#$QXB@ogfGe=Fs<$-n(lN|8FVq>lIPcTz?tVvem2tFg^U#2UXOr^Jco z?d6G*Ct4mjttb9M${C4-#OrV(_fbj`i8}sulv#O9#2eseYh{7e21h~=d^BC%sTO06JJ3&Zr<)8E&c`y29%yJl5|h%TtLC- z*K@L1L&e@d`OXO~BQ+(eTT<|U`}WDo|5-+=1zXozELrZ$C$teU9-#9+I@sDgo?z!g z4DZ9vPnKRR=FX7T;KUZ1ek>gbfItVea{C9KYQMrwEP|q&dDYbDE6db_r@zE?!aVr;e1VPePJWa z^y2t3-J9-7kzNEvW>*1i&5fa>x6IQKK=IQvOR>$Bjsp+eYADS-Jtf7&EgBqtz+}WT z0>-6VE}VQ4&X0%r7H4)%OG?2m*)&F%B9NKw@zJ-h>vY_L8J5{qiadPF>8cD4cM$R| zH&bvwfr-S21FGfFHYNc?F9(T*79&6#Z@4pqG7d{mK}CU9iA_JK3ynM}hOY=G;e1tv zwCOyU#7C$&w4u8iNfd>P9ym-q3v6_blcmq%78|&tkz!=g@y>Myj#3S87I2u!z?GB~ z>~ygJV4a7+Gac+W2Bg?b0^>O!Z=Vzoou<*zWV#P`K#-9iw;o6;PUkz)Qao9{4$yoj zr9dPd?!pp%vV2`@Nk|7w0ihYVD3v0!RE}O@qB*NwOBlZsRcxf=AXm!t3~%2QZ&tcy z%t}XfLP(e2I->IGB6?BP>E4VKkCF%lSpz!7&KiuJx^hakc^1R+fhnoj<7L$tKsUeF zcM|TssH-Wo_nVa^`x(h8>Pi=+_&RSw2~tvUn0S+~APsF}1e3a84ix~Qt1E>rqj<4R zhy%=vO$5AyGo(2jrlrd%^bIoY+YUF9(om<~USxL7%J!AoYSK(IP%2}XHv=+p$WHI`0)oD@Ca8$2{c33UqVgpk4i*WR_j#k95kxz*HEqnb*0 zlPIFvbDwcUbfF~aMkHpYi6~u_T#gzlx8zWwn=T?0QOG4uh;Ht=9QVR;Pn^y{q3>CH zDjl!$9`En>o!|Mr-*<-gUTf{O*M8Qsp7mdAujkp%(x6kxCVe=8m$VW;mf*)U{8)k4 zyHT5|Flj^PJ!*Z7A3#tUL{0SgUV8{Ii9oyt!wUr=@wFOI%^#qy3R?wOBgf+)3Al{* zq$A0L#s^lzjfhkg6;(hlhy&aqZWwp7N2R;EDtIQ46{0Z?ghXQyKqv*Of7=*uQDhc@ z_eC&Aqf>vkl5g~dAoSschCWrv#P~C_K8HY>yn#jyWGw)+=aV3yp-jV1sJ8O)pzy^5 zZV-T+=t^%+k|HMw&)@+W0E)nn0I9H1QQjn=SrO3g+wAzNKU&QP%Lw!gZ%|t+LQ{J~ z{wM@!23224>n;zJ;oXmh5ZEaqCA-3q0y<6t1$sE33K$1ayHizBm&FY&v<6?G z@*%G}e(uhTppQZ5PX&tzoH&LeSI<=h31Ha)s7VLDLg$D7%AoWBRW%v`>2#_>Z%xO+ zqaE4=x-8j{N&`a+g^)pnN^upVSDD+8yqvXvyvv;!7V( z31m123{~9BAOO}VfCA`Hzy&ThrbIQ`=S=-zpi|(tLfqAGi&B(bI}TZwf?cWNZXg&p zk?U^LeLxe?f{f!7r$A_Zguf`$3L2^dp1mijr2Ep!?sHoAxq?O{C^473u?;cb9lgFK;-ScXeTnHJpfd!?Tm zNDyw;NMev74=Cthz5$jH2@#6^g%BO&ih(l;SJt5c6%T-(4v-5D&^6J-3r*Z`353C& zq=AaSp>hj4$~Ez$4vak7S}-?50%S@6;*jCnZ5)hm<1uJLh{3V@S{r^1Ss0_7?Rcym z4Y(|PHlfW!DKLpd&%hL8L{{Vro6AVF!ni{GBvQmMjE}MLgzoD+Hjl$)aabrP zo{mEB#}WyoY+fKH#<)QOj#R=Huw+7(kQFEqv!s|*z~Tf32?J#^iGyk8KZqmaO9fmBN6Hg(0%d_*5yp{3Wa>JSSXQ*Wx#ehuzktDXM0F6IC-)0c65aO=A%(dME%nS|Ep~f25k^L zCJOvU1&e!m{13zbI-w5*hR^;2PydnczY1eiU?@OC0s#UFn;=s(Po|(J!-EH z9DK{9D17`N_*FA}&`s!8V@O(ihDcajOoW9GN3Vw#=2a6M)=kXb{-HD3r~-;35CTW| z&m0>P=+DNu0)MtZi1~XdT;KbHi)4TBZ|30P;}1SOW#TBA{}*j9jRKF)bN#!wE&1|l zc%TFk@?Y?~cvitXL~1JvGrvys{XY2=Il!rBq+>|PL@~IH4vmt6!%~?IKEr^^U4x+< z&99gAPwM|a4iIr+&<7*G-`5?V{edq3U(->(@$fhGK9SIbOy#?OO=K>FdWfU&ZN(7odf8qGAC28V$6n0(c zh^#z-2LyXC%_rizxlr8r7}@{A*T+!WXa7=P`s=U(Eh7F^G~{z5==I)@e0rd-;(M0V z5qao)cVuvfG{_3CKTP~-k)UZswz-Ngn339t044#5mLA$2ffG^qy?w2qQJLRLn~iR89;QPRzPe2k#I&v3!iKCt_jY zm4LK=;lLkc*9{KWp>zUaCxF(s^T-BrGr?E@ai7_z9OTst*>`{TpcIJwslZRc(@EWV zgS+d}!(&u4q~!W`o_Z4up-#xyBn+fr0kjWN?e~=Owf5cvwAnx&R+muzUlEx>!)gV$yd2+*aNcw?9B(l^nRb{1NbTY|M ziGaB&(}pP%DMYz|M5N@6!bW2K`=s>4RLMj_9;JX3Pr%Ij+(*$#Kl*z6mAeNrRaBiw zt|#AwwWdfM^W?g6Oinq4$;rF($RyCbFgQStWQ^_EiL3W8EO6>2m_{#QL?s|07N>~p zLs4dse7sl;OiLLeDh%2banu~})Epf)pQVY>Q6iN=^^^s|(o!JH6f;ICG{)E0%~)pG z0Cb(q(C=L`VIoiS*5FGysUT+jjDE~_+)4IWe8Q+($TI&RlB_CgfW?IynnjgE4bOjf}rq zqwWo@o;e5tW?S}caO-p!0<@YZ=J1sOd{9a%^`tA6AR@;Rp5vcW&$iVp;PoII$1U= zeQxQ@xLJGh52RVekCe++U)?oNT(H}? zcvscZp%3n;j=k%ap%dRZVXt#$+r4^^(V4BuE-x+WZ;agk+l`|~7R{~DTU>wO=D2AI z)`2>0bG-)bXP5>@rwr@7nwt`~B<;rL`@hU8*b%0?DXqCxZ{4rmSofqj=N_k%M<(ftWGAySgJINI040e zmvfEEGbcSuv_C#=m}6#sTJrYi0Anuz#+v%TSbfMVt9DYN*^)(@YJGc@tB=y_e(9@-SRWST`U8Z z%&wng8nMFpn8}2LE&XcFSk_U0UPLSEPcU!`cM@7BRCw&FnSH4v?pRG@eq>hrVD9F3 z-uJXcLT%e^^NKRRKP$O(`@%~*?z_YHc-WB_aqOMVJ4<{fx-E0_J;hLqc};!aIIg5~ zX)uj!j0LTZ;mCvCSEC zWPQ;-9E^oTNr_>_0sR7Rn1st_34>ru3x1GPYz=CRAZwA7E3oDSNqIa$V33px8W=Q) z_5fgm)|2|n6?#*NbpjiXp59@%Oxgg<7iAbgnS=oZ<^cpIIsHcf2(k>447fKF6Iydv z)@)Gr;1D>i2cG}}-7x^co;X0@sBeS7KPWr;i=K<)U9A7}>p$3?t6IGLr^KCQ4mnXv z`q%Y)$-i~>z;L60PH&|V%OmU)R0|G8SOi>KdNAa>x?MA8koB!hEWf8dt&t5la6#jc z_t_!BX)7Nut~NO6%RbW5*s$@|-ueAzIR4sH_R8q0d-Y!WD`wW4=1-P0p44=Se>1o| zgf=ke-nnpju72bV^TtKP9a_7d{doUplU=zP9D-*Uwerf!kh|NIc{@&eCCRj6Ra1F> zhi@bm6F$9TEgjyzRw?Jl>Z`GlAx|gzSuB5ja{tOH8+n8!9>b3LefVTNR4Bi4*E7Ru zsJ{EA={ZMc8Wp~_^ms;1e-g^o5Kg%*7{W^*An1#*6CulU)4Hm05z8M}!G|(f%;KnjQ^Ts}js=Z?$%NiSo=#{kPmXmrzZyxn#hXG~ zRlkSn(%v?wWa5OBqN=zF5n1D?H$M)(m$P8ygnFKOI|zKJuXop{N|jWdujSw3$G`OcDcTBz91MW%&my^FY2G0(x8>b&btd^r z4}t{%f=$EvA!J|>iCq*Wj0~qf==D`3L9=3$eiRD4I3!`(%BtP(CAvh45?(M&e|ytN zXvX&O63hLH#p?9t&9lBMW`%7ZdF+NYX3(2SheS~~rNK%W`ZCmkFy?nyMlX@iviG&j zcr=*t!K#_&mG1X&8|IZFb|pE`O7A1#7D;_s2s_&gFl9QwD%=Vjmn&j;HAGW149zG9#yt82V@!DaUblJKsw|*_?(6&&O3DaIL z8sK{LQnT-qiwigD``7XGX5QIo;Acq!M>xK&fvkTBy8Z@Ss}&1Y3x6X|Owh0+=B zc1wni&yKwGOGth7i}1oJ8>TExOUW}DPoDPnLg8#$bP@lhwQc{}pCbj@?P2>y&X< z+@HeHlbO<2-_g7q*dBJ?x#>#(r*Wq#6<0ck-y5(xw}jTou(U6I_`Z4PGUubzS>t50 z?A^=8zHon89us$i##Ie9j%N*Mp?lwXl;8PioMvg@<}MFCn zyL5hKU8Q~pJu;=b&~7iuer{KA)}|KCV$BMHhsw26c9>k53i$o12fy{^p!Ist$Ne4n zjS0Yb0|1=I!9)nZS$LEKrWB%Sf8Xo=pP~2G{E&V3ZjIkywPc=+L335hgPJXq%{@xb z-_ds;)UWl@j!SN((HK+fIrXY{x~@x_(bx@pHv3~1Hwp8eEUtR7irVijowB)YRpWpL z&Yd#P>v)3e zxF9Xdp+UtN53eXExE8!$u|sQ|j;eg?ikChMKM^xcJX8`1nway;LwC)ckDj*n-n!Rx z;TTqIW7fUzmT$}#lMa|@?ECOGYd`V)zzN=6@0CuSWUBR`_ijM%9sdr!zxpElJM`A< z1z|vMz;gnYuo+>iIVE8|mXH#!^ELR*mu?gP<X-c&z<6GLibni^sz2V{Gl(|>q ztA9>=qimZ6?zkPVPaEpz`TWU-AF@5)(b@OPE>6Q7S?Ag{elj+YS{-gCa zuVIdEp&GK^H?mw~Sa!oA)oP!G+jS+<823)n#OvCwSN4DIzGhhsZ&*O#iRZ_bs*PRT z`&97U%sic`PY$$gQk{S+dh7unAAAg_eoB8T1bh=t?9S86T9>m zNrt{E$QsI3jy06j*_nn8khiIw9e(tJL;0ikFP0v7u&p?nSLt38VXkcvqc+lWZNxNZ z2c2W(1zj{$a}S--t5|Q(@AxituFW95@lhl)Rxu;*Zw^J*^Z3!tf5`>n(6*G zCK~16=&;QlZR4XiuZ~gpktL_>gyoAOSnI{0yZwFZ5{lK|FPBX|FFxlboJ7;L?nP=< zGE2SB(lZ6tcRw#ptFh=<->bT4GT3t?g$0wrpi=eyq`Q%sK68?6)s+g~9dE!ZO=a z9X_g>mv56d$Zw|SH(yiMiAlRU(&|>g$KVg+Pe1+1nYg0ozbsvKjk?ztDCyl&#@O-jsc)nxbemv>ujINkVMa8USs-lzqk z1D7TV)0T3?BUBdcxt5_ePwTn;~abE#)b2ktE>wR?(q!IsOk)s z|ID$Ov~$Wc?Zi|g!%ltYPNf{zemCUnSXb5rzI}bW{>*o*!=B|V^`O{%IcW$cCk^`C zLdq;TNf(l|aG6~9x6J{*u8-&=kuxy;&s39HYP}IE5#+H~;*?nZ@HI9Ln~z>ix$s*0 zr94W{d`K3SPA+-7UdumZgw=o#wGQ+8$_gyBB3YReoJXnB z?v-wN>@J&M(;NMkyuP?*qt3$X%`~&j3zqA3(+k+ow}({@a`yH&aO;%qZL58I$H`GF zEvfFf`}&~6X!F?(Sbea{>&h`pjkQLS4>UP>`5CP?y!GKJC%bC9Spt!NJiBtpCh+Aj zsd{GolWaScLpCpuGnTO4ID2|KCF)Q0$Qi9$v!Et9RvZyMYVzXwr;N)q>~dC4>*_dK zn`_LBP8x68#WR1d+Ie0O8uy?pe9pCNkFPaOI<__S+*YTY#c9*q97tmaT~K*Mx7Ti* oU43~@QEI*1bzfZV1EEtY`Iu6)Ah9I>MoUzIQA674QG>1i2Ye^H+yDRo literal 0 HcmV?d00001 diff --git a/tools/CopyGenerated.proj b/tools/CopyGenerated.proj new file mode 100644 index 000000000..7386f1b24 --- /dev/null +++ b/tools/CopyGenerated.proj @@ -0,0 +1,52 @@ + + + + + ..\..\hydra\ + Microsoft.WindowsAzure. + .Specification\Generated\*Client.cs + + + + + ComputeManagement\ + + + Management\ + + + StorageManagement\ + + + MediaServices\ + + + NetworkManagement\ + + + Subscriptions\ + + + WebSiteManagement\ + + + Store\ + + + Scheduler\ + + + CloudServiceManagement\ + + + Sql\ + + + ServiceBus\ + + + + + + diff --git a/tools/CopySourceToTools.bat b/tools/CopySourceToTools.bat new file mode 100644 index 000000000..7bb988119 --- /dev/null +++ b/tools/CopySourceToTools.bat @@ -0,0 +1,11 @@ +@echo off +pushd %~dp0 +cd ..\libraries\src + +set AZTOOLS=..\..\..\azure-sdk-tools\WindowsAzurePowerShell\src + +robocopy /E .\ %AZTOOLS%\ManagementLibraries\ /XD CloudServiceManagement /XD Keys /XD PackageSpecs /XD Playground /XD Scheduler /XD bin /XD obj /XD Common.NetFramework /XF AssemblyInfo.cs /XF libraries.targets /XF .gitignore /XF packages.config /XF app.config /XF *.csproj +robocopy /E .\Common.NetFramework\ %AZTOOLS%\ManagementLibraries.NetFramework\ /XF AssemblyInfo.cs /XF libraries.targets /XF .gitignore /XF packages.config /XF app.config /XF *.csproj /XD bin /XD obj + +: done +popd diff --git a/tools/DisableTestRunParallel.cs b/tools/DisableTestRunParallel.cs new file mode 100644 index 000000000..5fa7926be --- /dev/null +++ b/tools/DisableTestRunParallel.cs @@ -0,0 +1,7 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See License.txt in the project root for license information. + +using System.Reflection; +using Xunit; + +[assembly: CollectionBehavior(DisableTestParallelization = true, MaxParallelThreads = 1)] diff --git a/tools/Fix-ADLGeneratedCode.ps1 b/tools/Fix-ADLGeneratedCode.ps1 new file mode 100644 index 0000000000000000000000000000000000000000..c51b3e39eeb75329b40fe54c0378c1ea5ca7b65d GIT binary patch literal 14676 zcmeHOTW=Fb6rR_u)c>$@@?a!lUMo-~(m)zoZo;HIK%^RbLkv!w+J+Dif1URG=Irsz z?9N`C1X3W1V((?<+;4Mc{O{*AlbWaIz>LitS93EoGh82=1?~>bTRh>_OOxSqhWjIY z56nKEX1GtyD|{c>>j9pP&D4&VVnmAj13Pca5KG_OF@NHFAM>VwotjO+Tj2T$MiI{q zj5z`HR~9Ov|7?D;bKRUV#*xwq<_$5{;T&7cgg3?8xw(!}b8wPj+!$C-@p%NuDd^z5 zfw_*r1=U%gTRgOELZenFZ`nRn$}+tkmLW3ib8c2ljn)NCvz^bk-Ffy0*?-}|`yG5&MK^(ohke9I@_tzu0aud=VQ zCB_LxD0;GQMM~fGoDT7saI8+(I6wiTPFGnC%Mbi6q77v_*kwRc9iV^}*O zWmeWl;G?so)j>&skCA8&Z<}CDYJSE4Cgu%ci;TYu+#Q*b*|iwjVe+;87*t5q>Y6_Q zld{|}?&&&USH(wvlvoc`~+QBw>VPxyusKQKnXtg!5neIGx zK%GylEYt_$mUY?srk*vA*6TU6nF;jEIMjh`KUiDHBKD%$x(Cb6U=!cAwQO0tW`#jJ z7Y)a?>iBGm7hlIt$`!|1;{!Dw${`*VR=1V`Y$UASz7MNm|~wTdUY2u z^$q@cFFi7Uo$mLc7>7sb5Xq{}^%7X8a20+NZ{llCSO4j1qj|OcJ0LEWE0QhH#~dJ; zfLtj@$G~3fRh8G!euqG7J&}#Bhvkm_Hm;lrm2zS%8X*h$*ync5IR;kt%kB;z=9mRKT**8(z6Tl#sv{}l&Jzl>bqwx2FPDTRA>?UUU(<+=I=Zz&FB4K7Zg&UI{ z-`@qzT-%Q<=j>1Jq9eO)e!wK+SdkXzLS$fUo zc<6b3Qu<(V&O`&%p4uLF51vDf#o`Y46N>mX>NR_2xgu(#b?z{5H-nu{#yIT?I$d)= zA?$Lh2Wzgb8yo9vihU?&p|$ul=m@pk#5@Cy+y%+taXX-!l(A;)!}Hj`B>i*iC5%p| zco+7kM^?fyno>YxWLMrKN9vt&s`;_W9(+2VS${iP#@-Grz-8|0T+H1trw?XyjhL(f zQo!J@2fNhlXR%|o8uj&2<$T@XHkMaqRT{19tg60tjMFNv5s!O?Zbc7lg-@FXJ7rNw=dvSgod-`T6luv+EmFFDD@ zy>>#6ON3n;x3AC!T0L#b;i0936y32r^0e5o<(KORJ!4i!*D8?eX<}ZQqO-@Yo#rU% zQOWtYIx6btHsPgy*@fgfo+nAz&1lj_Y)(C%2Y~#3XB3B zEani^fym`IJm1G3bXM^YdBPVyC3lHZj(;Or}p z(YN8Mlu=jvI#o49-TBdrtFenzNmU)MYPhRW9M99H%5%6%y{fuh?L-T4RreZn)e zNIDcl$d$WOJd4OEFDItgF~*&c=Ga%LTv(xrfA?+Ih@DY?H)sP-+3VL%*SdLtNPZ8q z-vNtc56QYc`-XA(5P!tX{X>a;#74+6lJvJbzsY>TQxBZ)Q&q=H2UvUN1-RzU%L}^} zo&yHgwCwIOx6)_W^W;t@CG=u>4p2|q_w4ya+GmEh4?qEbbHHvfe>JcGhRx;KKXP7% zN#4T~sv%7F4X7{fqp+eK?(=Tp4LiUpgpx4 zkgw~Nr`Dcn_39O}-xd3vh2LY>8belL+pve?*;%egRGV6d_JG;XpzP1~p>46N;<*LZ zd#-bNs+X}Ako^jx=x;lE*h;bJfA2(ALlk-_2eXG?^3x~-B&**CtVT*}zKynM*Unte9eCaAw{zQ literal 0 HcmV?d00001 diff --git a/tools/Get-TestMode.ps1 b/tools/Get-TestMode.ps1 new file mode 100644 index 000000000..6a92bb224 --- /dev/null +++ b/tools/Get-TestMode.ps1 @@ -0,0 +1 @@ +Write-Output "Current test mode is: $Env:AZURE_TEST_MODE" \ No newline at end of file diff --git a/tools/GlobalFilters.xml b/tools/GlobalFilters.xml new file mode 100644 index 000000000..bdf9ea2f2 --- /dev/null +++ b/tools/GlobalFilters.xml @@ -0,0 +1,156 @@ + + + + + Initial ContentFilters + + + key\s*=\s*".*?KeyVault.*?" + https://[^\.]*?\.vault\.azure\.net:443 + + key\s*=\s*".*?Thumbprint"\s+value\s*=\s*"\w{40}" + + key\s*=\s*".*?(ApplicationId|AppId|ClientId)" + + publickey|pubkey|hash|digestvalue + REPLACE_DATABASE_NAME|REPLACE_SERVER_NAME|SQLAZURE\.SERVERNAME|Data\sSource=(\.|\(localDB\))|Server=\.\\|\.DataClasses\.|\(local\)|\|DataDirectory\||dummy|localhost|127\.0\.0\.1|localhost + DatabasePublish\. + \|SqlExpressInstanceName\| + \[SERVERNAME|STORAGE_ACCOUNT_KEY|ACCOUNT_KEY|your\ssecret\|UPDATE\sBEFORE\sDEPLOYMENT] + Catalog=TESTDUMMY + PLACEHOLDER + MyReleaseDB + Password="UNUSED" + user ID + Subscription="00000000\-0000\-0000\-0000\-000000000000" + Eby8vdM02xNOcqFlqUwJPLlmEtlCDXJ1OUzFT50uSRZ6IFsuFq2UVErCz4I6tq/K1SZFPTOtr/KBHBeksoGMGw== + AutoGenerate + PublicKeyToken + "DefaultConnection" + datacenterName="\{DatacenterName\}" + Integrated\sSecurity=True + DefaultSecretStoreLocations + ClusterSpecificSecretStoreLocations + ApplicationServices + ConnectionStringTemplate= + key="(aspnet:MaxHttpCollectionKeys|SuperuserCredentialEndDate|SuperuserCredentialEndDate|SuperuserCredentialStartDate|aeskeysize|AutoscaleStorageConnectionStringTemplate|CertificateEncryptionKeyThumbprint|CsrfRegex|Microsoft\.WindowsAzure\.Management\.Marketplace\.Configuration\.Marketplace\.ApprovedAppKeyword|allowedftscolumns|alltasks|alltypes|cachepath|cluster_healing_TenantNames|cluster_keydelivery_rediscachename|companydisplayname|companydomainname|compute\.chaosmonkey\.down.*|compute\.chaosmonkey\.reboot.*|credsfile|directoryreaderaccess|directorywriteraccess|encryptioncertthumbprint|errorkeywordstohighlight|events\.followcontinuationtokenlimit|filestocopyfortest|firstadminuser.*|flowtokencookiename|forcereportsubscriptionavailablekey|icmconnectorregistrykeypath|identityfiles|identityxmlfiles|intbulkoperations.*|ironmanrequeststoreaccountsencrfilepath|liveencoderservice_pushcontent|loadbalancercredentialname|loginpublickeyurl|machinekeywordfilterlist|maximumkeys|maximumsecrets|microsoft\.portal\.framework\.identityconfiguration\.authtokenprovider|.*certificatethumbprint.*|microsoft\.windowsazure\.resourcestack\.frontdoor.*|networkcredential\.domain|networkcredential\.username|notificationemailids|prodadjustssosecretsiwuserid|prodadjustssosecretsiwuserupn|prodhomtenantappverificationkeys|prodnonhometenantappverificationkeys|propertymappingfile|protectedcompanydomainprefixes|querywrapperfor.*|read\sservice\sprincipals|registrykeypath|roletemplate.*|rootgroupcontainerdn|rr1telnetaccountkey|saskeyowner.*|scomrmsnameregkeypath|sharedkeyname|sharedsecretsfile|skusnotblockingcompanydeletion|soapupdatecredentialspath|sqlreplacementkeys|sqlsecretsfilepath|syncfabricmanagercertificateprivatekeyfile|tenantsecretsbaseurl|tenantsecretsencryptioncertificateissuer|tenantsecretsencrptioncertificatesubject|testexpecteddsasquery|tipadjustssosecretsiwuserupn|tk5iloaccountkey|topologyadmincrednetialname|useridwithinvalidcredential|useridwithvalidcredential|versionnotes|redstarter\.dll\.config.*|Event\.FollowContinuationTokenLimit)" + __ENCRYPTIONCERTIFICATEPASSWORD__ + <add\skey="privatekeypassword"/s\/> + "{KeyStoreConnectionString}" + xdt\:Transform="Remove" + https://production\.secretstore\.core\.windows\.net + https://test\.secretstore\.core\.windows\.net + https://stage\.secretstore\.core\.windows\.net + https://production\.secretstore\.core\.usgovcloudapi\.net + https://production\.secretstore\.core\.chinacloudapi\.cn + value="\d\d:\d\d:\d\d" + "fill\sin\skey\sbefore\srunning" + value="(X509Certificate|\[your\s?namespace\]|\[your\s?key\]|\[copyuserpassword\]|Overridden\s?by\s?portal\s?settings|DROP\sASSEMBLY|InTesting|Ship|Missing|\[YOUR_APP_KEY_FROM_AAD\]|Your\s?Management\s?secret\s?key"|TBD|your\s?value|User|PassportUserId|xxxxxx|Run|accountKey|apiKey|apiSecret|accessToken|accessTokenSecret|\[find someone who knows\]|orgid|\**|\d{1,3}|MachinePassword|\\\\phx\.gbl\\Public\\.*|accountname|v1\.0|owner|fill\sin.*|keyvalue|client_credentials|AkamaiPublishTrafficManagementCredential|\[enter\sclient\sapp\skey|usedevelopmentstorage|replace_your_access_key|secretstore|\$\(changestorageaccountcredential\)|__configurationkey__|testvalueonconfigfile|__svcbuskey__|.*accountkey=\"|__CREDENTIALNAMEFORREMOTEFILEOPERATIONS__|stub\-deployment\-key|key1|replace_with_ema_secret|n\/a|exception|system\saccount\skey|add\-external\-storage\-account\-key|false|cdlfesecrets\\.*|storage|salesforce\.com|addserviceprinciplecredentials.*|account\-key|.*\[issuersecret\]|.*\[your\secret\]|.*accountkey=\{\d\}|microsoftkeystore|applicationkey|overriden\sby\sportal\ssettings|systemkey|facebooksecret|set\sby\sportal|googlesecret|key.p12|images|masterkey|twitterconsumerkey|twitterconsumersecret|sharedaccesskey=\{\d\}|hotfix\;master|originentitykeys|originkeys|\[\[\]\]|cn=corp\.sts\.microsoft\.com|defaultsdkservice.*|replace_send_key_here|serverpoolenabled|rootmanagesharedaccesskey|add_encrypted_key|consumerkey|consumersecret|securitytoken|shared_access_key_value_here|.*dcmxxstoreprimarykey,.*|__diagnosticsstoragekey__|\!\!enter\sstorage\saccount\skey\!\!|tablestoragekey\d|\$\{random100\}|__storage_account_key__|wabo_master_bo|zumodashrelay|timesynccookie|utssocwebserviceuri|\[enter\surl\sfor\syour\skey\svalut\]|add\-media\-services\-storage\-account\-key|\%WINDOWS_FABRIC_APP_GLOBAL_HIGHKEY\%|apsecretstoreprotectedconfigurationprovider|\{livesiteservicebuskey\}|\%paths.xstoresimulatorfolder\%\\faleimages|for\snow\swe\sshould\snot\sbe\sreading\sthis\skey)" + .*primary\skey.* + accountkey=(__storage_account_key__|account_key|\[storage\saccount\skey\]|livesitestorageaccountkey|accountkeyhere|your_account_key) + password=(dbpassword|passwordhere)\; + password=\; + accountkey=foobar|account\skey" + validationkey="__validationmachinekey__" + decryptionkey="__decryptionmachinekey__" + \[emptying\sout\sper\ssecurity\] + initial\scatalog=northwind\; + ^(?!.*(AccountKey|password)).*xdt\:Transform="SetAttributes" + facebookclient\(pageaccesstoken\)\; + connectionStringName="LocalSqlServer" + value="Account\s?Key\s?Here" + value="API\s?Key\s?Here" + value="todo" + value="CurrentUser" + value="someToken" + value="\[Replace Me\]" + value="enter\-my\-password\-here" + value=";;;;;;" + value="ToBeFilledIn" + value="MicrosoftAccountClientSecret" + value="GoogleClientSecret" + value="SampleValue" + value="(RunAsAccount|DefaultPassword|foo|\{subscriptionName\}|512|1024|2048|4096|#*|Kerberos|CancellationToken\-.*|to_be_replaced|\-\-\sSee\sDocumentation\s\-\-|testvalue\d?|\s*|WazSettingsSecrets.xml)" + (connectionString|value)="\[?\]?" + key="(AADTokenEndpoint|ReturnPublishingPassword|ProdSecretStore|enableNamespaceIssuerKeyEncryption|SecurityTokenServiceComponentMaxConcurrentCalls|SecurityTokenServiceComponentMaxConcurrentSessions|SecurityTokenServiceComponentMaxConcurrentInstances|SecurityTokenServiceComponentMaxReceivedMessageSize|gettokenUri|AccountsPath|stringSecretList|AcsBaseAddress|GrantType|UseStreamingEndpointByAccountId|SendUserToken|SsUrl|SiteStatusServiceUrl|AccountAddressIFrameURL|PcsIFrameURL|Pcsv2IFrameURL|EndpointAddress|IsolateApps|RequirePassword|WAStatementUrlBase|AccountsCacheDuration|CertThumbprint|MsdnCertThumbprintMsdnEndpointAddress|MsdnPayAsYouGofferingsList|Microsoft\.WindowsAzure\.Management\.(Billing|Accounts)|IsPassThrough|SupportsPassThrough|ManagementServicePassportPortNumber|MaxPollHealthForOneNodePerPass|MaxNodesToStagePerPass|UserAccountMaxExpirationTime|DefaultGroupPolicyForUserAccount|GroupPolicyForUserAccount|FakeSecrets|SigningKeyStoreName|managementIdpMetadataAddress|archivedKeySigningAlgorithm|BackupXStoreAccount|IsKeyEncrypted|KeySize|SecretStoreServiceAddress|RunnerInstanceName|RunnerName|TestPassPeriod|_CA_SecretStoreCertTableName|_CA_SecretExpirationIsEnabled|MACertificateName|MAXMLFilename|ExcludeStorageAccounts|NodeKey)("|.) + key="(AlwaysCopyPackagetoUserAccount|PackageLocation|DestinationAccountName|StorageAuthenticatingAccount|StorageAccountServiceEndpoint|DestinationAccountName|ChangePasswordTestEmailAddress|ConnectionStringFormat|RunnerInstanceName|RunnerName|SDKRegKeyPath|SDKVersionPassed|SecretStore.*|http://schemas\.microsoft\.com/.*|StartupAssemblies|stashClientPath|StorageKeyEncryptionCertificateThumbprint|ThumbPrintKeyRegexStr)("|.) + .*STG\/\{0\}\/\{1\}.* + value="\{.*\}".* + .*<add\s?key="SymmetricAlgorithmKeySize"\s?value="\d+"/>.* + <add\s*key\s?=\s?".*"\svalue\s?=\s?"(\[NotUsed\]|Certificate|http.*|IcmKeywords|SecretStoreBasicRunner|no|yes|false|true|SecretStoreAuditor|SHA\d\d\d|sha1:|(CancellationToken\-?)|federationmetadata.xml|SecretStoreSecretStoreCert|key1|HKEY_CURRENT_USER.*|.*publiclockbox.*|\?*)"\s?/> + <add\s*key="(MeshSecret(Version|HeaderName)|ExcludePasswords|ignoreCompanyList)"\svalue\s*=\s*".*"\s*/> + <add\s*key=".*"\svalue\s*=\s*".*\.(srf|pfx|cer|txt)"\s*/> + <add\s*key=".*"\svalue\s*=\s*""\s*/> + <add\s*key=".*"\svalue\s*=\s*"(SOFTWARE|SYSTEM|SECURITY|USER)\\"\s*/> + onebox + 0000000000000000000000000000000000000000000000000000000000000000 + ="@\[password\(.*" + {MachineDecryptionKey}|AccountKey=\{1\}; + <machineKey\scompatibilityMode="Framework45" /> + <add\s*key=".*"\svalue\s*="[\w\d]{0,4}"\s*/> + =("|tcp:)?((\[\[\\\\)|(@\[password\(.*)).* + <add\s*key="((.*IssuerName)|(.*Key(Lengths|Algorithms|Thumbprint)))"\svalue\s*=\s*".*"\s*/> + StorageCredentials\(this\.(destblob|sourceblob) + add\skey="_TOKENS_(REPLACE|SA|SQL) + <machineKey/> + <encrypted\skey\shere> + \-password\s(\%_servicepassword\%|\(\[string\]|<password>|parameter\sis\snull) + AccountName=foo;AccountKey=bar== + Account(Name|Key)=(\$\(|<Your|\{\d\}) + __DIAGNOSTICSSTORAGEKEY__|CloudTestHostDataModel|You\-can\-have\-your\-connectionString\-here + property\sname="UserName" + server=\.; + User\sId=login;Password=password + aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa= + bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb= + aaaaaaaaaaaaaaaaa\+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa== + Uid=someusername;Pwd=somepassword; + this\.SystemKey1 + value="\$.*\$" + AccountName=;AccountKey=" + xdt:Transform="SetAttributes\(value\)" + value="your\sapplication\skey\shere" + AccountName=xxx;AccountKey=xxx + value="<removed>" + value="<Your.*Storage\sKey>" + \x2B\x2B\x2B\x2BThis + SharedAccessKey=(\[your\ssecret\]|\{1\}) + + + Name=\{\d\}|\[ + XTestEncrypted + + + + + + Mock/UnitTest Path Filters + + UnitTest + Mock + + \\OneBox\\ + ART\\TSATest + ART\\TSATest + KeyVault\\Microsoft.Azure.KeyVault.Tests\\SessionRecords + ApiManagement\\ApiManagement.Tests\\Resources\\testcertificate.pfx + ResourceManagement\\Network\\Network.Tests\\SessionRecords\\Networks.Tests.ApplicationGatewayTests\\ApplicationGatewayApiTest.json + ResourceManagement\\Network\\Network.Tests\\Tests\\Data\\ApplicationGatewayAuthCert.cer + Authentication\\Common.Authentication.Tests\\Resources\\InvalidProfile.PublishSettings + Authentication\\Common.Authentication.Tests\\Resources\\ValidProfile.PublishSettings + Authentication\\Common.Authentication.Tests\\Resources\\Azure.PublishSettings + Authentication\\Common.Authentication.Tests\\Resources\\ValidProfileChina.PublishSettings + Authentication\\Common.Authentication.Tests\\Resources\\ValidProfileChinaOld.PublishSettings + Authentication\\Common.Authentication.Tests\\Resources\\ValidProfile3.PublishSettings + Authentication\\Common.Authentication.Tests\\Resources\\ValidProfile2.PublishSettings + ResourceManagement\\Graph.RBAC\\Graph.RBAC.Tests\\SessionRecords\\Microsoft.Azure.Graph.RBAC.Tests.ApplicationAndServicePrincipalTests\\CreateDeleteAppCredentialTest.json + ResourceManagement\\Graph.RBAC\\Graph.RBAC.Tests\\SessionRecords\\Microsoft.Azure.Graph.RBAC.Tests.ApplicationAndServicePrincipalTests\\CreateDeleteSpCredentialTest.json + ResourceManagement\\Graph.RBAC\\Graph.RBAC.Tests\\SessionRecords\\Microsoft.Azure.Graph.RBAC.Tests.ApplicationAndServicePrincipalTests\\CRUDApplicationTest.json + ResourceManagement\\Graph.RBAC\\Graph.RBAC.Tests\\SessionRecords\\Microsoft.Azure.Graph.RBAC.Tests.ApplicationAndServicePrincipalTests\\NegativeCredentialTest.json + + + + \ No newline at end of file diff --git a/tools/IncrementVersion.ps1 b/tools/IncrementVersion.ps1 new file mode 100644 index 000000000..1598442a7 --- /dev/null +++ b/tools/IncrementVersion.ps1 @@ -0,0 +1,106 @@ +[CmdletBinding()] +Param( +[Parameter(Mandatory=$False, Position=0)] +[String]$Folder, +[Parameter(ParameterSetName="Major", Mandatory=$True)] +[Switch]$Major, +[Parameter(ParameterSetName="Minor", Mandatory=$True)] +[Switch]$Minor, +[Parameter(ParameterSetName="Patch", Mandatory=$True)] +[Switch]$Patch +) + +$exclusions = @("src", "Common", "Common.Authorization", "Common.NetFramework", "Configuration", "HDInsight") + +# Function to update nuspec file +function IncrementVersion([string]$FolderPath) +{ + foreach ($exclusion in $exclusions) + { + if ($FolderPath.EndsWith("\" + $exclusion)) + { + Write-Output "Path $FolderPath is excluded, skip" + return + } + } + + if ($(Get-Item $FolderPath\*.nuget.proj).Count -eq 0) + { + Write-Output "Path $FolderPath does not have nuget project, skip" + return + } + + [xml]$nuproj = Get-Content (Get-Item $FolderPath\*.nuget.proj | select -First 1) + $packageVersion = $nuproj.Project.ItemGroup.SdkNuGetPackage.PackageVersion + $version = $packageVersion.Split(".-") + + $cMajor = $Major + $cMinor = $Minor + $cPatch = $Patch + + if ($packageVersion.Contains("-") -and $cPatch -eq $false) + { + $cPatch = $cMinor + $cMinor = $cMajor + $cMajor = $false + } + + if ($cMajor) + { + $version[0] = 1 + $version[0] + $version[1] = "0" + $version[2] = "0" + } + + if ($cMinor) + { + $version[1] = 1 + $version[1] + $version[2] = "0" + } + + if ($cPatch) + { + $version[2] = 1 + $version[2] + } + + $version = [String]::Join(".", $version) + if ($packageVersion.Contains("-")) + { + $place = $version.LastIndexOf(".") + $version = $version.Remove($place, 1).Insert($place, "-") + } + + Write-Output "Updating version of $FolderPath from $packageVersion to $version" + + $nuproj.Project.ItemGroup.SdkNuGetPackage.PackageVersion = $version + $Utf8Encoding = New-Object System.Text.UTF8Encoding($False) + $stringWriter = New-Object System.IO.StringWriter + $xmlWriter = New-Object System.Xml.XmlTextWriter($stringWriter) + Try { + $xmlWriter.Formatting = [System.Xml.Formatting]::Indented + $nuproj.WriteContentTo($xmlWriter) + [System.IO.File]::WriteAllLines($(Get-Item $FolderPath\*.nuget.proj).FullName, $stringWriter.ToString(), $Utf8Encoding) + } Finally { + $xmlWriter.Dispose() + $stringWriter.Dispose() + } +} + +if ($Folder -eq '' -or $Folder -eq $null) +{ + $Folder = Resolve-Path "$(Split-Path -parent $MyInvocation.MyCommand.Definition)\..\src" + Write-Output "Setting the folder path to $Folder" +} + +if ($Folder.EndsWith( "src")) +{ + $subFolders = Get-ChildItem -Directory -Path $Folder + ForEach ($subFolder in $subFolders) + { + IncrementVersion($subFolder.FullName) + } +} +else +{ + IncrementVersion($Folder) +} \ No newline at end of file diff --git a/tools/Library.Settings.targets b/tools/Library.Settings.targets new file mode 100644 index 000000000..f70494ad7 --- /dev/null +++ b/tools/Library.Settings.targets @@ -0,0 +1,141 @@ + + + + + $(MsBuildThisFileDirectory).. + $(LibraryRoot)\src + $(LibraryRoot)\tools + $(LibraryRoot)\packages + $(LibraryRoot)\tools\MSSharedLibKey.snk + + + + net45 + + + net40 + + + portable + + + + net45 + + + + + + + bin\$(Configuration)\ + bin\$(Configuration)\$(AssemblyName).xml + $(LibraryFxTarget)\ + 1591;1573 + true + AllRules.ruleset + + + + $(CodeSign) + $(CodeSign) + + + + NET45 + + + + NET40 + + + + PORTABLE + + + + $(LibraryCustomConstants);CODESIGN + + + + true + full + false + DEBUG;TRACE;$(LibraryCustomConstants) + prompt + 4 + + + pdbonly + true + TRACE;$(LibraryCustomConstants) + prompt + 4 + + + + v4.0 + v4.5 + Profile102 + Profile111 + 512 + {786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + + + + v4.0 + + 512 + + + + v4.5 + + 512 + + + + + + DisableTestRunParallel.cs + + + + + + + + + + + + + <_ArtifactsDirectory>$(LibraryRoot)\binaries\$(LibraryFxTarget) + + <_BinariesDirectory Condition="'$(CodeSign)' != 'true'">$(_ArtifactsDirectory) + <_BinariesDirectory Condition="'$(CodeSign)' == 'true'">$(_ArtifactsDirectory)\unsigned\ + + + + + + + + + + + %WINDIR%\System32\WindowsPowerShell\v1.0\powershell.exe + $(LibraryToolsFolder)\Sync-NuspecDependencies.ps1 + + + + + + diff --git a/tools/MSSharedLibKey.snk b/tools/MSSharedLibKey.snk new file mode 100644 index 0000000000000000000000000000000000000000..695f1b38774e839e5b90059bfb7f32df1dff4223 GIT binary patch literal 160 zcmV;R0AK$ABme*efB*oL000060ssI2Bme+XQ$aBR1ONa50098C{E+7Ye`kjtcRG*W zi8#m|)B?I?xgZ^2Sw5D;l4TxtPwG;3)3^j?qDHjEteSTF{rM+4WI`v zCD?tsZ^;k+S&r1&HRMb=j738S=;J$tCKNrc$@P|lZ(); + var netCoreAutoRestLibraries = new List(); + var netCoreLibraryTestOnes = new List(); + var others = new List(); + foreach (ITaskItem solution in AllLibraries) + { + bool isAutoRestLibrary = false; + string solutionFile = solution.GetMetadata("FullPath"); + string libFolder = Path.GetDirectoryName(solutionFile); + string[] csProjects = Directory.GetFiles(libFolder, "*.csproj", SearchOption.AllDirectories); + foreach (string project in csProjects) + { + string text = File.ReadAllText(project); + if (text.Contains(AutoRestMark)) + { + isAutoRestLibrary = true; + break; + } + } + if (isAutoRestLibrary) + { + string[] nugetProjects = Directory.GetFiles(libFolder, "*.nuget.proj", SearchOption.AllDirectories); + if (nugetProjects.Length > 1) + { + throw new System.InvalidOperationException("We are not able to handle more than 1 nuget projects from the same library"); + } + if (nugetProjects.Length == 1) + { + solution.SetMetadata("NugetProj", nugetProjects[0]); + solution.SetMetadata("PackageName", Path.GetFileNameWithoutExtension(nugetProjects[0])); + } + nonNetCoreAutoRestLibraries.Add(solution); + } + else + { + string[] netCoreProjectJsonFiles = Directory.GetFiles(libFolder, "project.json", SearchOption.AllDirectories); + if (netCoreProjectJsonFiles.Length != 0 ) + { + var libDirectories = new List(); + var testDirectories = new List(); + + foreach (var file in netCoreProjectJsonFiles) + { + string dir = Path.GetDirectoryName(file); + if (dir.EndsWith(".test", System.StringComparison.OrdinalIgnoreCase) || + dir.EndsWith(".tests", System.StringComparison.OrdinalIgnoreCase)) + { + testDirectories.Add(dir); + } + else + { + libDirectories.Add(dir); + } + } + + for(int i = 0; i < libDirectories.Count; i++) + { + TaskItem netCoreLib = new TaskItem(solution); + netCoreLib.SetMetadata("Library", libDirectories[i]); + netCoreLib.SetMetadata("PackageName", Path.GetFileName(libDirectories[i])); + if (i < testDirectories.Count) { + //the matching might not be very accurate, but enough for now. + netCoreLib.SetMetadata("Test", testDirectories[i]); + } + netCoreAutoRestLibraries.Add(netCoreLib); + } + } + else + { + others.Add(solution); + } + } + } + + Log.LogMessage(MessageImportance.High, "We have found {0} non netcore autorest libraries.", nonNetCoreAutoRestLibraries.Count); + Log.LogMessage(MessageImportance.High, "We have found {0} netcore autorest libraries.", netCoreAutoRestLibraries.Count); + Log.LogMessage(MessageImportance.High, "we have found {0} Non autorest libraries.", others.Count); + Non_NetCore_AutoRestLibraries = nonNetCoreAutoRestLibraries.ToArray(); + NetCore_AutoRestLibraries = netCoreAutoRestLibraries.ToArray(); + NonAutoRestLibraries = others.ToArray(); + return true; + } + } +} diff --git a/tools/Microsoft.WindowsAzure.Build.Tasks/Microsoft.WindowsAzure.Build.Tasks.csproj b/tools/Microsoft.WindowsAzure.Build.Tasks/Microsoft.WindowsAzure.Build.Tasks.csproj new file mode 100644 index 000000000..94746004f --- /dev/null +++ b/tools/Microsoft.WindowsAzure.Build.Tasks/Microsoft.WindowsAzure.Build.Tasks.csproj @@ -0,0 +1,59 @@ + + + + + Debug + AnyCPU + {16D89061-2C1E-4E31-B16E-8A7B5B9FF51C} + Library + Properties + Microsoft.WindowsAzure.Build.Tasks + Microsoft.WindowsAzure.Build.Tasks + v4.5 + 512 + + + true + full + false + ..\ + DEBUG;TRACE + prompt + 4 + false + + + pdbonly + true + ..\ + TRACE + prompt + 4 + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/tools/Microsoft.WindowsAzure.Build.Tasks/Microsoft.WindowsAzure.Build.Tasks.sln b/tools/Microsoft.WindowsAzure.Build.Tasks/Microsoft.WindowsAzure.Build.Tasks.sln new file mode 100644 index 000000000..421bed49b --- /dev/null +++ b/tools/Microsoft.WindowsAzure.Build.Tasks/Microsoft.WindowsAzure.Build.Tasks.sln @@ -0,0 +1,22 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio 2013 +VisualStudioVersion = 12.0.30501.0 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.WindowsAzure.Build.Tasks", "Microsoft.WindowsAzure.Build.Tasks.csproj", "{16D89061-2C1E-4E31-B16E-8A7B5B9FF51C}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {16D89061-2C1E-4E31-B16E-8A7B5B9FF51C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {16D89061-2C1E-4E31-B16E-8A7B5B9FF51C}.Debug|Any CPU.Build.0 = Debug|Any CPU + {16D89061-2C1E-4E31-B16E-8A7B5B9FF51C}.Release|Any CPU.ActiveCfg = Release|Any CPU + {16D89061-2C1E-4E31-B16E-8A7B5B9FF51C}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/tools/Microsoft.WindowsAzure.Build.Tasks/Properties/AssemblyInfo.cs b/tools/Microsoft.WindowsAzure.Build.Tasks/Properties/AssemblyInfo.cs new file mode 100644 index 000000000..c05eeeb99 --- /dev/null +++ b/tools/Microsoft.WindowsAzure.Build.Tasks/Properties/AssemblyInfo.cs @@ -0,0 +1,33 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// +// 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.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +[assembly: AssemblyTitle("Microsoft.WindowsAzure.Build.Tasks")] +[assembly: AssemblyDescription("Build Tasks")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("Microsoft")] +[assembly: AssemblyProduct("Microsoft.WindowsAzure.Build.Tasks")] +[assembly: AssemblyCopyright("Copyright © Microsoft Corporation")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +[assembly: ComVisible(false)] +[assembly: Guid("1fab019b-78ba-4e1b-8f84-d5b72d785f0e")] + +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/tools/Microsoft.WindowsAzure.Build.Tasks/RegexReplacementTask.cs b/tools/Microsoft.WindowsAzure.Build.Tasks/RegexReplacementTask.cs new file mode 100644 index 000000000..6ecc14cf0 --- /dev/null +++ b/tools/Microsoft.WindowsAzure.Build.Tasks/RegexReplacementTask.cs @@ -0,0 +1,86 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// +// 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.Build.Framework; +using Microsoft.Build.Utilities; +using System; +using System.IO; +using System.Linq; +using System.Text; +using System.Text.RegularExpressions; + +namespace Microsoft.WindowsAzure.Build.Tasks +{ + public class RegexReplacementTask : Task + { + [Required] + public ITaskItem[] Files { get; set; } + + [Required] + public string Find { get; set; } + + [Required] + public string Replace { get; set; } + + public bool LogReplacement { get; set; } + + ///

    + /// Gets or sets the optional output directory. If a OutputDir value is + /// specified, the original file contents will not be overwritten. + /// + public string OutputDir { get; set; } + + public override bool Execute() + { + try + { + foreach (string fileName in Files.Select(f => f.GetMetadata("FullPath"))) + { + FileAttributes oldAttributes = File.GetAttributes(fileName); + File.SetAttributes(fileName, oldAttributes & ~FileAttributes.ReadOnly); + + string content = Regex.Replace( + File.ReadAllText(fileName), + Find, + Replace); + + string outputFileName = fileName; + string message = null; + if (!string.IsNullOrEmpty(OutputDir)) + { + string path = Path.GetFullPath(OutputDir); + outputFileName = Path.Combine(path, Path.GetFileName(fileName)); + message = " saved as " + outputFileName; + } + + File.WriteAllText(outputFileName, content, Encoding.UTF8); + File.SetAttributes(outputFileName, oldAttributes); + + if (LogReplacement) + { + Log.LogMessage("Processed regular expression replacement in file {0}{1}", fileName, message); + } + } + + return true; + } + catch (Exception ex) + { + Log.LogErrorFromException(ex); + return false; + } + } + } +} diff --git a/tools/Microsoft.WindowsAzure.Build.Tasks/StrongNameUtility.cs b/tools/Microsoft.WindowsAzure.Build.Tasks/StrongNameUtility.cs new file mode 100644 index 000000000..e21d78401 --- /dev/null +++ b/tools/Microsoft.WindowsAzure.Build.Tasks/StrongNameUtility.cs @@ -0,0 +1,84 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// +// 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.Diagnostics; +using System.IO; +using System.Linq; + +namespace Microsoft.WindowsAzure.Build.Tasks +{ + /// + /// Utility class for managing the Process used to work with the sn.exe + /// tool in the Windows SDK. + /// + internal class StrongNameUtility + { + private string _snPath; + + public StrongNameUtility() + { + } + + public bool ValidateStrongNameToolExistance(string windowsSdkPath) + { + // Location the .NET strong name signing utility + _snPath = FindFile(windowsSdkPath, "sn.exe"); + if (_snPath == null) + { + return false; + } + + return true; + } + + public bool Execute(string arguments, out string output) + { + int exitCode; + output = null; + + ProcessStartInfo processInfo = new ProcessStartInfo(_snPath) + { + Arguments = arguments, + UseShellExecute = false, + RedirectStandardOutput = true, + }; + + using (Process process = Process.Start(processInfo)) + { + output = process.StandardOutput.ReadToEnd(); + process.WaitForExit(); + + exitCode = process.ExitCode; + } + + return exitCode == 0; + } + + private static string FindFile(string path, string filenameOfInterest) + { + foreach (string d in Directory.GetDirectories(path)) + { + var result = Directory.GetFiles(d, filenameOfInterest).FirstOrDefault(); + if (result != null) + { + return result; + } + + return FindFile(d, filenameOfInterest); + } + + return null; + } + } +} diff --git a/tools/Microsoft.WindowsAzure.Build.Tasks/ValidateStrongNameSignatureTask.cs b/tools/Microsoft.WindowsAzure.Build.Tasks/ValidateStrongNameSignatureTask.cs new file mode 100644 index 000000000..d75bdc9d9 --- /dev/null +++ b/tools/Microsoft.WindowsAzure.Build.Tasks/ValidateStrongNameSignatureTask.cs @@ -0,0 +1,147 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// +// 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.Build.Framework; +using Microsoft.Build.Utilities; + +namespace Microsoft.WindowsAzure.Build.Tasks +{ + /// + /// A simple Microsoft Build task for validating the strong name signature + /// on a .NET assembly. + /// + public class ValidateStrongNameSignatureTask : Task + { + /// + /// Gets or sets the path to the Windows SDK on the machine. + /// + [Required] + public string WindowsSdkPath { get; set; } + + /// + /// Gets or sets the assembly whose strong name needs to be verified. + /// + [Required] + public ITaskItem Assembly { get; set; } + + /// + /// Gets or sets the expected strong name token for the assembly. + /// + [Required] + public string ExpectedTokenSignature { get; set; } + + /// + /// Gets or sets a value indicating whether the assembly is expected to + /// be delay signed. + /// + public bool ExpectedDelaySigned { get; set; } + + /// + /// Executes the task to validate the strong name information for the + /// assembly using the input values expected by the task. + /// + /// Returns a value indicating whether the task has been + /// successful and the build should continue. + public override bool Execute() + { + try + { + StrongNameUtility utility = new StrongNameUtility(); + if (!utility.ValidateStrongNameToolExistance(WindowsSdkPath)) + { + Log.LogError("The strong name tool (sn.exe) could not be located within the Windows SDK directory structure ({0})).", WindowsSdkPath); + return false; + } + + string path = Assembly.ItemSpec; + + // Check the public key token of the assembly. + // -q -T: Display token for public key. + string output; + string arguments = "-q -T \"" + path + "\""; + bool success = utility.Execute(arguments, out output); + + if (!success) + { + Log.LogError("The assembly \"" + path + "\" has not been strong named signed."); + Log.LogError(output); + + return false; + } + + // Read the public key token. + int lastSpace = output.LastIndexOf(' '); + if (lastSpace >= 0) + { + output = output.Substring(lastSpace + 1).Trim(); + } + + if (output != ExpectedTokenSignature) + { + Log.LogError("The assembly \"{0}\" had the strong name token of \"{1}\", but was expected to have the token \"{2}\"", + path, + output, + ExpectedTokenSignature); + return false; + } + + Log.LogMessage("The assembly \"{0}\" had the expected strong name token of \"{1}\"", + path, + output); + + // Validate that it is or is not delay signed. + // -q -v[f]: Verify for strong name signature self + // consistency. If -vf is specified, force verification even if + // disabled in the registry. + output = null; + arguments = "-q -vf \"" + path + "\""; + success = utility.Execute(arguments, out output); + + success = (success == (!ExpectedDelaySigned)); + + string message; + if (ExpectedDelaySigned && success || !ExpectedDelaySigned && !success) + { + message = "The assembly \"{0}\" was delay signed."; + } + else if (ExpectedDelaySigned && !success) + { + message = "The assembly \"{0}\" was not delay signed."; + } + else + { + message = "The assembly \"{0}\" has been fully signed."; + } + + if (success) + { + Log.LogMessage(MessageImportance.High, message, path); + } + else + { + Log.LogError(message, path); + } + + return success; + } + catch (Exception ex) + { + Log.LogErrorFromException(ex); + return false; + } + } + } +} diff --git a/tools/NuGet.exe b/tools/NuGet.exe new file mode 100644 index 0000000000000000000000000000000000000000..6bb79fe5379d098fabcabf69f3e5c9e8214c229b GIT binary patch literal 3957976 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

    q?zIcAk{U|VH1Lr>$qLBDkJ%l8D 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%0Dr|q4 zp_#Ao+`xI(HcWYQO~-gMMTPfHZM=Uf-b|k>6T+HTK+Czfwm?B7ufn$T-bfyY#K}rR z#>sK~hP%b&)9Uf0_tP9(e{pi6k(?wFo2W>c5-0Y3A_eWm=2_%?vNU z_|0G)2IjeamM7A+rdWnt26~HE^|q%N!z~9$1J|49lGCl^s<)+GqZ83vC8Q;nFl1H6 z)OLok$lbhf=z2Hz4Lg$-Oqw@6hdM`JOZe4&jT@P`j&%@vet+#q=C4ClZtr2HWQD=fP}cuoqx33zS_zY};~3Lg)=UJ9Q9ynYJb2E0KEOGP}tBmMXl9`h^d z$6xf(nSRXpBp+Sr$3lH{ryo*3&+kb;wvo^D^kbPmW~3hn>7zIOI8`4r(~pnqqt8B8 z_f04_(o89_M{*RIFxpS%ly~kYf0f6&PO5dC2BQu6e--~*@UP~w3;)_Rp_SM+=ux=Z z#u(@SH2%-#|Kt2$%m2;%52H{xpPD20W2t*d>V6`1Kbg9hrS28(hKJbGORjAHxH_e{ zHg!Lnx}Q(o>r?lJ)V(NmZ!|X-et~O^L8tJZ(#Nf-&(HLswjrM<_3;gTWbHd21#;&7 z*1lg$8}aeB#z7xe@U4c~czs)k^$ZMZJ3uiZta*i(=nNWfXe0WSh?a>+Sn~>h7SV2P zM9+$7xrl@{ukaTUy|Inx*CN_cM8cX^_^XKC)JF6h5xq`C!kSn3n}~LABYI9mJBdhG z^9me6`+vN>37lL-)%SmMyQjOSXC}~@Nlz9fVM!<_BAqT?Ri{q-+hel_jk^{-96bJpXYu5|NeaX-nyqw zojSEwojP@DLHnQ{q+bZ>r9u+ayu#l=3V-L((SNT*4^as&Tsz*t30E6ILf^!G+1 zfq(npo<#goiFlb3A*gwU|576U!6Wa7ie{gnp)_=vYah}>=6R9XUt|O|udoIR?L&Kz zekG)r3rSG(3jY++VLeE{7SaJi64bmx6vNOI9@Rp2l37Xj4+Yr-wEjuAqi?; zf#G05=;P68PnGBa_)EL>Lh~&ft6=d@Ig76UJ69=LyRKNZc&3y3IQ)ossTGG3b5<)Z z0-{=x@}^d3AXKe5mG`=};>eyP{9Z{oOi2*5tw$&+31v@0Ha-=i2{_ZQhvoKBJ%s)s zLWhfxpym}S&}bjsgY-usy+TNWnpfx-(lI?qe-hFWLK4)xLRBmch$W4ev$v~7zk!#F zl&9GWFFleFRR;TaW$i38%%F2_nPGO!8a3KSA)gML&wH_QY5i) zf2DETcMI9n!N%OyFjHy3n?b>66b>HI3_A&u+o)alHmgr*Iy%svhzOHVgP(&I&dsIS8R1l*4FrPuXlTY91+X>K_mT>U^lN$A}$ z&rJ?}LUmyWHaSfc)*_=E@MLSo zl$;6bx|pYfv_$GY>(G#o1@}2|a`xKc&rr}=YXudsH`KX3q0UqQ9W}|~(swWJD;@VN zq4~UA&R&f3h0*C-N|Dw?7b_n$Fpv+8gC^I_gp)BOdenvz8#P?ssCr{&7ML`r;Zg znf@h;>(VT)E~>?KvEqu8S3+Q&Vqbm)XO7}FA zS7m89znca**O!Lrrt`Hz@m}fiCS6oZL(`&75~V@Y^q%e|Y4!N2t@rv}-s87cx0GBV zzfN5#L`x~NCOpjQ>@O-s`Tn9}bvOHqOxN8#v!O}7yC<{|%IG1BJWgMd9h(E%xxD={ z;z0iJ@l5_OqgVcLej&SG@Gme|Nc8M%;~6kfPLQq~)`h>dX3n&gYD2Fui zgsJ)Xlk+0Ee;vAQ=+@h(6Kxze0m)7jRk@A0llOhme&AgWUR+M4_w)V7f@WJ*OinEQ(u_Kn~CpqbbustEDc_j@#VI|rp z<58L;l1pfgqPxI8fZqhXt$G-l8r6V0EKRCvsquPhTk>9p%JiQ+Fo1Itufc!-fa`*; zXPLmN8OzcAwx(xGcAWtWn-||F$Z%hp!o+aNPSDxP*iO&Y%6^!xR>lHMDP~<<2^WEw zEa#zf0sZUKI;-_FUp0NR&7*nQ{dO^yPWE_vu5VU|&LB-!kf!cl`X@B5e7duZgrifs(^a}Au@}_5Ok!^XR2|zh zNCBeRV{sw@a7IMVHll?Nk-CVyP|OQzUbdCtM7aM;L}o$cWP; z31=n}HXo1O=G1H8KmBCZ>Sw9dH}$j`+US^nBnOj2b4C&r5vflo3w=uM?A34+YHB){ z;L7t;vdZ&_=e5u+gb~=zNEPCdWGkzoIUo$ORIon1GS0oQVtvtL1uEMZdwZg0|)8t!1+Dz!_aqk7q*F$sW^{8xeKSF)g zLu8+I0Cxyd8eN5UMK55+D)bt90TbdNFR#2`oYlU-pjC|cEJ|mPkO>1k;ra}j(NIZr z@{RHq%Vt!h!wBrBmr?~Dg$;>~P1xNs!i7YmNt=0T zr?JfgkT!{FLQwMx(^b*c38$BJSWuafMq`J!$aQoruJN>fElcZ`y=g^8t$|Yd6uaxq zcpUbS0|w<@nz^ru!;5h`_foFQzQ0PX8S~TiHhxQXd#&QzGF(o_ZN?q46XI!Yz6MUS zgpqFJ)iY}=eP-*4ppadLPm8HxrsvJ+i|5sW*r>;q69?wrJw_B@)^+-7(PrD`cTO#-32Hm zk5jK!mXk|i2oYpcG1wunWC!Ce@AE2lR_6xdNT0HrUuey>rc387*+IgL^&Cui`qyJZf|?OM)iGZP~n-TN+HBMPtO!QBpBx5gi}ha2I+ z=V(uK_A{iNXLnz?_O4IS!1eyx!`-xjaCRTYM#8;u1L5qBjE#i5c?03>-i(ced(#HO z**`}#`U6a}-TX9wfrrU)lLr9Ng}t27WFO!rRZ7B2nxaI^)JyK{}|eHx9&|yt?xv%8?jijHKZ!0)bFX@j77j^gW^x4hA!`4Xz61n?w(5o5b2|Y!cmitKEV z(Gu4k3a8+V!x;+g`K$BQkCIm_yYXvT<}qz3{^W%JCi->nQ0T2f#!u0vuLFzc5?k5k ztagWjW~LRJt5%X0ZsRyximvw#g*+{`4xN05!tsnx?Wz%r6YlF1+ zVg%(J{i;v%J?~BeROVuY55mdDE=EuuW}Ipi$*WnWS+u6qz~9(rtQO!z&f$aOByZz%Xt;Dtn6v6}#fVh-W@O#pt= zf%g&Fn$K?nm~pi^OThX@n<~E$%#`ImJZJmy_JE*Q>piVZXHG)jCF|B%=#j{pj z&umN!0UOh**FEFyZKUe%Zr=V2t^L&hCTlm6l1V*m&!Fh{5GYA>`4YhC9s=tMtlQ1k zYuazR5Z`;c{A%vB(YlbF_TR9(5uVm!!Ny71hrf(S-vbUnfzdCbn^LLm&_h^3eoN& zhBKp^MF-HIzhAs|+jM3#zT2iZZZp2SGcnXzzYkXGJ{4M7=~3gGWG=pcEpzdmi4${N zn@iRD`c0r@Q>dYmZI|`?pcC8LAiap>{L9ATEqxm>7H>(NY%E^mKLkEvfK(EJ>RLBMs|@s; zI@N95&*uD?_6Y7*7@w=#qT6a0rr!r|m+ANCSqHimynn&;yCjv9EUB-%t;HPP_Ma9+ zb6@W5Fh+H7rxV=0McfgyN0`Mk!GkdsHzh-`bSaOpbKN9~-j7+;@7TFs2d=$$&eiqO z()6dt9%k|zmafPehU_d7c`L?+_@@KXM zeBa6(&;o|Y-C^c%7@}#1nZsd-j~!+XhatXom^pwABiBXt96dm}6_(HObAOKmC?%Sl z#X(P>(JXnNfi+p(1{?e^B}K zKfE(tG88GB=*MQoO^hss>a5h8B;dZ^mn&jfAu~SRe9RPx@Uux`>Sw7K3jA!NojiJpah=sVMsXlO)Cu6Q^5{ zmqhgiwAOr&Hgw!G8as5{6N-vV@^yD?=V?C-4f>#4h)I3WTX|!P;ca>qTW{AZm(^74 z4#JOspT0xbaq>=H1Kd6;#a|zGxrj|dwW z$DMljM%BC9U}8d0^9r;X?t1M(x>-oK3rSG(3Uh^oT)0E&O+s2JBtgxqjr_Oc|7Q8W zSN?*USJ)gPWYrx&2TY7sPVU6bV(ccck@F;X@o8&u+;`*F=1M)e2Nx6EEeLM*5b=B; zp!wPK=40#0!!|PI4li#JFYhPBgrMdXwuD&NN{<`x&1G3{iw^yn_r1g1{~^upM=TGK z9CxVQB5EHHH9^~YB=_=}evpT5C)rVDQBLmTlS`cb%xIN-lP)!Eg-pR#oGi9KgeN#k zS$XuB0W(M#C-?KY!)HtOt}i`Cbn2xx;@(c=Z&l;`7egS9aj z6e4d|gPfxGpNFwkdS?9SzYo7fAx{55_CXGtP?nS7MmW_s`;{MtU+q__6vx!peMA8K z#^dCV1S{C{7_|>C1#vw}lj;3d6M~jXNqe5@M>86dtFiqaeN5%wYsY+77+^_ml4CZv zqtcvhU0`|`Vq-h@-I0f#jQ692--yg;V~ZWhoIJLyFZEb04|6-_zhpwvk&9_<^YQ<6 zeCsR|*JsC^n>tEkec=~Gi+&2-vH^%!{pi|u%*8yq$yKhtE%b$VS;?(!$NbhFoMJ|; zW5;}{1!0VL8|{ygHugOpp@^h+^)cS%_=a;@kIIpLoM-DX9Vx_nuqF>()Pp5p7}nEAlas78#!~Q1>Fs+ z=@SH)5Y)WFi@Yh=e)xgV`2_r@p9M#w%jbAAx_n-*ranyY*XYtOHRb2f6Faf8)$|3x z=@)tAygluME#?K=h@?9#-6NL11m1+8<`u?ZsgV4e2iAQhd(p>z629VOgw{dt+*Qrd zkl%PCM>sOzJSKN$anLFsC!ea?42Y8%1RP4wLxwv{g;My+f+MORB$1s()tx%#3RPEU0E`YE@CK8r95h z2=%00jI*VBKM7|e=-~Md&fN>W5UgPc->qR#QH4LN&F+Bh`}f)5s83m6^;;OHrNzWTHaf!DJ1Ocl(@LM zsMl0XS?k@Gl=Mozq86-tn7!Sih~q=i6NGP!ya&bN(=-mDKJjzeHJmo3ap9AN3#P@C%cTt!Xy{?9jC88Z;;nO zBWut)kx*HQaj$88w*0_311GxyRh-_S%XZBRn}|=StElwX*io$9a8B}dB7^dY;4Zw? zEe~=F?&YM-&072IFk{$f^pM;IsC-JkLAc@S;x~&iOqJ_vz!{5Hc6y4z+MpO49K`^2 zfvm$hqwAcBbBaTq$06r&$YYw?Uz=L5P0e@&_n%Z5vpXZ>*8Ov3eK`3h5!W_Jp5~># zq}HD&sT#foZ2V-Mz|c%#T6ImG{xeUNlwTVU!Ko|24sTl9RGe<=jQAxwwVE?Bt-m&{ zUYnLtw)t+q%>y#EKZid7cO0a+kkQO+b6z! z&&J--*?fP7I#oZHw%Mr%1B->v&1R|wuD{#p)&lK(uk0U1)$;_EI}$t;SAxF3D%ZnT0rtD>3S*Pq(90j`TQ3Q2f_Wd)u z&Y3v9?DPKI+4DP#h6hTu0b@^MzCP**HhpB@P7If=WEZ~987^W zMPKv9Y@?rgp%+ga-5R}aiz!xAv)V|k={$117uSdUocbX1xH3*xs*gfGmi19|JqWU- zrh;5V-A=TqjWn#7e484HY^Oic;^MRFbHcwvhn)beIpd~Cl#)B3M!$O}udLtIX2@4S z%x0p6@FX9Dj$d*7LKnY3yH}3>X_zxs6V#>8S^p-c>=vs`2`!&U-$dl4^e*C~<2EE+ zaFrnuje&I2)u=144OM&sE-7E8cPnXIxzcYMTFKo|%0lT@tc;K*f*ww%PRf%k8Dd6* ziHOQJZ4S302eAP;G_Q=KzC4t#VDS00b$A5`o z7$7^o#U-WnIpeodudar~FxB*ib4Hh{05Aoc%|)oSHs$C|kMX1Q7(d)wki{THKSJiG z!v<;tvIxDSI2`d&<6)ydU-%5%aOO5DDcAglQwF zEyl?Q@aLrby}a^ygxh%jA~@lL=4*OLtPO=bP#y_yq$^mm8+2G31G4dz1+v_+J;R|4 zT~^`P(20`|;el?o@8?u3u4+f|SZR4W+z-lxIBFx;>P&oBQCjJDsOb}enpgUaKGg(B z)InHs4~Girb$Wb}2W?`C=_0~j)c6d&@&r<>V&g}0AzLaoYVXB`gs9lKW=HN+L-tc_ z94Hu4mSW=sxsVkU8?Ta!Rb#Qyl#BJBwLkIu_0GJ2Rhk+n3mU11u`ZC6_ZIVT-hD0R zMZ8Nb^3uZ2-fn5MJ@TS2sSS;^nDP{PF=Hskmoe@a*G%7oVI{7&Xwb!Yv_)Gh@U1-J;adM(`MVk#9Pr?2ILY^LQH-x3d}YZ&Jo`;^vvK^_3K#Sz-^Vu`p=N*? zBi!t!YkFWe#0{f+`JCw7NKQ6Bz=QUyRY>wfpd^$Ei3+Q7k-JI(m6IRy)CQ5Vv}`iU zv&Z+L!LGtfqTi_cvRUCd;Z!S$BO8*n&mdb7QS=?x`W>(zP$8eQN z%+K(ei@DWknN+I*{2YMi?2@e&Re$mbQ5(u`b)&vkN*8MrBcnJlZNMoiTBkVBOL18b zMWO7rt%dDok!M?PHuWbT>tv_Hv&`%dKgPpqAnT)V;a*}gUrW7>8f#{S-y$|J4drt3 z3le4;$|T9^mpYit9iCBe&&;^&^}W{b6+Wwi%7vbc+{6N#6cifgQk|Y%UFB{Mx;=dM zLewm3*OA5>_|Kv(DMbD|1jlB;&*!gF{}kU!oJJE zm&_%!JCo;?C{+pnHqm$TD}Y&>@)EQ5YmF>?M+se|0A4e*C>~H0zqTmUnoLu@Fq-@Z z_hJn=UcQ>-uT^1~^$Q2Sqxupp8J&^1sV=2ZkDKZf>TBX~m0~c?dRX_}ChtDx8S3cK z){88bzNbgZiel|LHKjMwvM>wbo6sjs>Pf=4amP*dO*UmMgdfSXU>$`gI9x4ul;CWP zs+oS&zpKCVfJzY~vgrL!x+5~)x;H5lmX>&PRHtFq@Hd|48jiuRj2n%c){EvDCr;T2 zQQ1t+GhvZudQtIwyq#jY-(OZ*mM^mXsd1|Z%RjAd*!2}g#>#1hIp&y_j}{JF#MaWS zU1}DXeXDbDsecsRRWKdpg5`)cnsHNTswck{gYDn(On%P;qQA=IS6{dymtSRS&mW^( z%>-J>AHW?~&(lMawLasP#GTnl95=M1l6C#dZ0gYXcZl>324*rT+9j-3(Iba-9y;HD z@^9H|K8)C&ByU#joSzv)gx+SPE6y9Fs@+4prSNC)FA~B~zZqUipM$RSLjQtC|D^MR zmGFMGeiO*}KKoF#^WM2kzZhvZ<|}H`7hPdxfmP`rKrFqLP|4pUP0h>Aalg7D+`o5m z*?TUAzj~UOqyJ5=MJb(3bwUYYZc&MLCf-%512!^-pAly@RCIKKiS`1da%QI@_VI2t z*;x)h2ggRbyiRD|{x;}*4La#ms*B`^M@Z(;Q&-f{F?}k8|0HoB$@U}{{VpL$~+DO$BlUU6nzPwnTX1?-a7M*>a0dWQf^>qjSjhTn*de-hJ# zXc@sKHKb}TrWk0|Rg;*XfbXf0io=+jD}+CD}+X|6FhqDN}fU&K-KZc)tgqOg_7=DnFeFgl6Rff+L= z`OchFQUihA)M_YF5)+EgB5n4mr1aU1u2yPX0q?bHQj+Jf;!UTC>W#Mm?%`|H`O=zv z5+8#e(=#d=g*Fn+@2X_<$)xmI+`~id<3xHtBdt>EA)VE}sYr|_k)Ap^#Zx_|=ML8pj?Q|l&Ajq zHm-af>GnLnVSVMnz$FUB*p^O>AHs&hU?uLH7%#5uPhJNKD^-oP2Qk!eK}&Tc`6t(8 z-MKf5qOoIR@BF?A&(`^wrIoShu*N@ubcDUOtWZC@j|qYNUhMobY@Hus3K>16e)ome z?^+Kv5)g{|uvi*P>l^U!b@yR~Ion*vjF`Jmf1@tt0#c;-a+%K3xH0ce_Q|+m?9cc! zW(-EO{^*;^hoG@!on1s3TG)Wh|HS(^dS}}K*{XMAz zm(|V$HLtL(1|^LQVG2EV!zdWZQc?laH>M1_J?3s!u&eM_80SKxetg3}9H^34fUqOs!B?Hvk{!ae zbgotHLhEGOZK;L!sePKs6JUOa$}huFbok>=e++wbPI8O$LhFE zF|EGYnY#~)s@1nR3=jq}6~cz7utc)El9gS_xGyEjTFa!7^iMdErpApg5PWt*?eq3I zf(g`1sK)diYJ|)@<}A3i>;kfNER%Ats8h=F4L!Wv{HEIL<kbQS}2ZdAg9xKOem^skEtH5 zBFt*Sj8wZU&?9e6kU}yHIv0;csI;Cj|kUj4}oo?#{rySAx6 znT0by$)=SsW9=@Knx=79?skrCIvz12V}XibhuXLnbhXUTfX&Rhy6{WuJJd$hv!OnI zX=ew98?6rQ?7-B=5D&Qi1ar7t6DGz2n#RPTnpM%$xe?m9d^>WcuojvUb-lK!Qg6j z^z&H}>shiVk0|V_?gVSAQ`Ez<`a1ZWsPqzApt+N%bQgd^S1I zM`hn$$=sPmfEgoh(;hmBtSgZ=8VYJ&I=dpf!fo0>2XC~4C#ZQDo{g}rv(%`Xdiv-$ z3MX1Y?VyOQZxl_F)szQgZe2Ir)JA{ruiqbA%W6!yJMYVUeeckL4pgh{+1vTq!5@-V zt+=JkQ3@k)xUswIE79OcUSBqi_Mjwwr10Tjx;Q!*3QyCnj(yn1Y~q}ioT~c#S0$&h zEdbX7N8M3vVPt6aU(DyF9UpDGam@an!E*Q+{C7@z8W`u zut3DK74ZckQNkjw-QUIu;jMuh(rK0>#+~Y6<8r>a16c=lD~(&bp4QEj8XxXLB67GKNJVD1|M=RQDWD z$?jBv8etVfV=c24RQ<205LFGh#1)KWJDV9e=}eI>#upPgP8_%9NEfe7aFZ$FuUvzj zE4oP+XIF54x>nqW!@Qf!$m3S!_B0U1ORYg=F|8Ai0q6l_&G*|5WD7&YC$00PJTu%p49w zam4Y=;jmxiFmpKUmpRNF4tqX_nZsef%3WpI4*RbhW)5JS)u0M^1II4r85Cwf5WAoysQZbJf8^oJLAcK& zvjw-kCJ)Rk_Z$G}mg*e@HLt)>x*)J|r8z&kX{W2Q3~zT-w17T{dQ#(5&F&aJVKCT< z7rTb0@Eh12Dd9eN3)tDg-G|7%le-UfCih}@A1*gC4TXJ$+`GH`2)UQK`$)O> zcK1J1z038?OA_42j4$h*-@zqr!j6rT(Yb%$}b}ddzEy_NKxx|~~D94v5Wvw!ZTx~i2% zCHXZZZGAB5^f2MKCfvf0y1EkAq@UDT17+)!1B6F%+O7eZ{ir zn86o$+{3TD+Z8y^g%g*Omh?qHCj>RGusa=1yT1o%g^nn8Z%pd6up95KFh z@+MZ`OBK0ilSNzYq1Y6~1)?ZuTMt=uL4XoY#>)i-?SY;Umnnoz_XRaCpT?_Ol%9kH zX6ZJNY$^7*sb{{%n9Y3PrLe%MJmbeWFE zTqVFYkkV?xJuRBIYd%j8(WUeejHSesE> z0_71)NZ1yp;;_Ba|0EA~OBK`_u%Fm!s!}geo0^oiKS6b%{Z9rF>^dfkpljDxRg!IS zmIKF+s!KFY<^~bSmIK-o3kDs(l5CG}TuFA|)e?`3ZIb4w28feW2{n}NxVNmU^@kn7 zL>!>i@Ks38TIaB&LSJJiz%>po?gU!8Gaq3Y(P$x%?4l6m#j=%zy6LX^Vvi(QETju5 zkYQ9v6*b!#YBF`i(FhQbKtqs}BlwXDi zT>dcRDhNYfmJS1U}J?thPc9V==cU|q?Q{8*2 zd#Ah86G)A;LsLeG60}fCwM|ir*xMY#S+%M4qg=Y1(&5Lb#=nj-ijyrn*>V=E>fl=1 zrmS)9RlUS^GkH9VxAv(w;jN$G(jS%mj62tYe}iucSDx#E^BJKHZL-uq^0s6$9Ty$J zcNYR5z4Ye**V_50wcy_aRf_%R0k_7(_pGox=~Q1kHCo9xb58DcwE8%2fZp*Q>VSPE zdw^G8ic~-HZ;XCclRbH47rZ3Pa1Zrc-N7+YA-@AmK@7M z*~5%|dFY;wpzJ%?bObJ&+AdmjV%`tL(ampmH|L>VOnHX0Xe#P6HjC513P)#|_5sd3 zzq?kHOhs!J=F_!wZ}^x{(+$U=JlA;3>yezCM+P9kTT^FcJjIT6m=P=+;3t$wAH!KA z8mJg9w^&7&pb>NOe4gQB`sX%0y#Bg7rek)LIgLrXT0=y_GI6S2h1MXiB4%lGZ)>F- zZws%tc(s1g{>WX#t>2`vej{<0-t`+6_h@%(oqR3)u;!|zJMXQ*C0qqp>@{4? zE4@{7*i$*fibQM|ywjJ$T-Y0y+nbOb`6S{E!rezzR#5W_FBa0KJxJFGX}h7b83f`YZY=o#r#t6)sDos>NM*@%14E6llV#5-gss^G?A14B=bqm zb)xYy(bz|f)p{7aUS9i)F+t5M>2|=S$y4<7rmmL9LbGB=P+9}yo@}9 z(ZkS95}FIaj!x)1T>Gc7-!3U7qPNzgarEk_M{SgAZi1l^N z1~7D5GLoIqOFM(AG&X`|^?kgM0n-CTM(0BhQf}t`q4rZ2K$mrSE#2B=KRMll!L#(* z(8%_M0`}7WdLiza8ioCsF__RL1BZPDs6xCDUWQXgNbT-m)?p{87-TQ^#H>6_H;4(8 z3MZGz%xKLf&&JrVZqCAy-92fRRZTu4pz0#)dP6)j+qavo{%e3kJS*s^oCNn+{zib# zTXMY`GVySa6@%61!=Uw7@`1CHyVBHjcJe&tP;qz%IB~hDkJbx`H12EyELM{|gZhS& z_aS6Y>jmn$5V6e1&!Qaya+7ujVHH-8hNtGsB5? z^|l)lPM<}p5vMDp%#{WE8L6-hsp?`)7MM+vB3i&&;cZn8G?`4*dhi~qgR8F=2N?U# z$qtz|WxnSV*NWwy;bH};arSIhoIXSz46c3&B(nXVFIZ2!o<4f~@cgEiN$ZKYhZoz2 zv9-m!qZj`$@3Z%dKKjqRjTX`!sL zVAzg4G$r!ZE2-F(c0<#Mzf&WI8EZv{=4#0Qw2#x1Z66~e?0%U^P-Q0THYKa%Q^{Q3QZSnq$OCIMqECU=&4@feCZF&z z5iCVvk}0;!`TQiGDpTzlYkLo=q3mPqtrA7^@B(s|6U+_0Y@hfx=fhfGXj2M|bB{wK zJ&aC3mTnh>%`|$^M|I~{M4&t8wcuh_T1#J&QD0%yo%7Zu*@seFSgTB0m&$WZ>7^>r zQ8x5&?~}XJi5^{x8|arsAp10p@^teK!$LU0$Z`|D30Wh3w;i=g&OM^a@7W<}+>pOXq<%0G1 z_MP|Tx&JMhzw&S^$`e@wa}c3s-8h@fTKhTK4$SJ#H629t@AC|Aeh1O}eAPouW8yAd z>;Bns*`LbgJ-V@sonoi}f4L@CDmTsR784c;O>M^Y3t`SCKh9iV*cbFW1TCTKtwc+* z*9C^3YJd?Dv&q%{4ZMwtiWcSq#tNLw);^UXzDRTL+N0TPcsVA7c)} z0-Kk^%mIvX^9PWa)W1pw_ew>^&%JG<)HX@GYbqP++VdfpPo{qXq4aRt;)I~)6%HVS zXr{lE*DKUa4|Kru0vsX0K>)(R-F)n`vPB}Ie&y$&$q+>N84fQ1)*syq zuZToz>Au#!3#}%tHcoCQ*s5i@25)1t;fR}&=&A?GtJL)cWLMRTD7PsA%dXW`EEuX? z*o^C$sdG(7y%gS#!rv;93`dIRX($TbAVBaL+UWIk+PZ$G ze1{zUVLn|{U`m?To3iQtAuj5qH|sQ{roj?J#Z&g>n*=MV}AAF`q!7u#>vQ`l)BuDe@fhWT}L#ZRSuScCL+Fc0<=xXh)Db5iylDuRtEHs{^ zWv@aq(sKz<+9tAUX+o%mPn_ayRyzQZjC#TxM}}X+M&n!x!h8}ot;JskziR{VXEy*x zy+W`Cr8-R1`!+PnTx&in*HUR(1 z2H^j-0r*y<>yP*34Zv^N0Q~bCfX6e|Pk-?S;Ad|D{*Dd6KfgBoF#66}G@®FbQ_ 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%0D-B$lcXj(!M5VY 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 &075Qv=WA+vP92B5(O=;-8ki!KUdW03zHFK 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

    Kr!IOq6Q7?TzDzy)-fY;^MGt18Mq3kykJ!_S6 zOgX#-1Z{OPX1L(8Oix5$Q+TVPv$dh@mDo%0ApR0w_$%a)^$nXhg)i_P#CwCvY_glv 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 z%0AEJm~z+)!rF#${zP&*0rEvM+|o5n`yW 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� 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

    atVm+*N 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

    E-dX(#V9smO0CBt?_5MK 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

    gt|@rrlN16 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

    9zD!W!R&0Y)Zpyd+2o5G-fcVmRv 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

    x4)BdgdV_?M1t7FU}ls>IKNlf6BeA(7z)_? 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�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�H?s7>kZa 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

    j5h_yN4(`Z(zwoll0)mCy`^ z0_BBU4RMK7zciid+-|T)*@kO(z(6wvR&J-rbwQ}Zsg7frU2c*x$oP1GH>F@(4mZ!I zZ%nr<4znUjuc*a_ZA$e%cBX?<9-}!se4a902J(@TEvnJ*HMDaz&L;}Ym@GCyBG{!Y(u6DPsrQZQRH{k?5~bU*xHPeD{Nc=9Xe@6UC-(z02mDb)GcC1P>0r0wzgLrGyI1`y*jW z)NJI3df!qDrt8Q6iC9#A)H$;w*XQ1u`e9a3kIJ3Q$Z@dyB1<>61Ehx?O|NrP?K`O1 z(QbQ!dpdFo}GRu6lINrP4;(k%_?iz`A3gg#(3Fad5ts-3L6cS-SX*3lg} zqbpSNH* zNabXO(&}wTGeVpgqD2J!@7sTbe}pUHVd#b9Fu<>`@$VnuTKH%9ANX|#X_K%Y#$gyv z!xaA=g_BsSgHl)U@1G%TX*;`UXB-YuYZ^;=TlZ1>8FE?TJmzL?{OrpRes(py^WFi< z9HHMq2=7i&`i#H6e1Q5B{C|iM9ER;|JWr%NOWj53F~&GXOJ9fZi_Or-|HGGE)OjhT zhWNg)?x#PX{0saWg;!w<|2@Y4d-(3>Jrt!*idM66{B9FC(=OKK?wdYElVJ+D1xy)mPFZMB(dhFw~@XoLH(dr3GbC&n;-y@U=-?Qfl>T)%Y z8gMK}^$2D50r8&T&SUABeGJfojPzgTwRKVLvacsHdg2ks96sm)lZNPffEiBkt=PW@ zDj;r#Uz}ka!w|mSlJWFqOr!+G(Y?UY{vb;X}%Kg`UP-<)7_^u=x;U{uV7v!%Aaqh!rQuSwY)ghO?ZYKB2)C0i=G- z^~uwAF^f~Ah2J$xKfnl1Y;}P%e`)4>%{%CUZ9c?bcpXrK*r_mL%VVUThw$fS{bmWS zIB}BPV1QrK;60F|*eE-s@*ZfD*t(0-q&e~l?Z<1}l~#nO{GyN2hatR2EO-W3;PIe;p%gYVG8K{DSV0l_tDcn=DC9Y*ov+K`#3~yc(q7rZ|h5$>w%2k>E=s; zLgHRmF;`vNtCiC4e0U0YBs#^ z_@~qzZeG6ZCPqVSqwERmX(jg112KvmdTRJ_ET!%t1>xk#IR#`<>uN5O?jcVlozlV! zjE!rq^bgGZExDCTuzP5MoQw2B4jVq`Vm7DJ!xZxgzxWZ~M-EUh}eFNUWu7o7zg<)sQ7)3 zi}-!QUOwTRl_N~UZKNK^IExy;B5xi`4_P~3u>ApA=lIWLuGpVM{f9_ZTIbqPYKM1s z@QdRJzf<19x<^t+B}s(Uhi&LN94MWR0T+x3{udjpG4-HNser}Wao#dxgvAhM@u7= z8lgVLu+Ha8e7!>dZ1)Ak!Cy>_ya0mVfr7pkR`LH1l=OAf;X1I7CalPO$%?NStW>Rm zLim9$Gtp;)_QQK=dBZP12K*XKX#e+MM*k)XAfcs@*ugKVMP&Z}4x#oZgNs6d%!{>B z%Z@moBZrXr%!~{&IIy^1Q>9d*cLvR#z>wedn&CYkF&P2b=NWnjDt`H`tkpBjhpd_q zbzEdAGH_+Yrtp2DWOyHWTwkiaWi7P-G1(0TyprY}{3VW%opaT}Kt7{6(pMERIV+OV%@tJ)h$_|&TpkLoA57hqm?Qo-}@u*Z-QA;jVAU^A}`?gOF+wlu`kn}|%tLt_TYo4v*Uw%OO zKGKM7oMTdzC?L7wFHoCUu5_Q52cCSAxY{fwI((nkY4$nu;@NY2SKFE!ddfT|urWEPtNYVp@kC zz(CbLDvbyD0v&x+Qe;#QI*G^7B%%s*hWWdaM(Tcmv_#9{=|%LwHB!Tst_Na^Q`U~m zgleUxa1>Ohgj4;tnfn;&%3;9Aev`^J%Y_dgp_Rn7fLH&%{20r&x|m6;zh84?Ri*8t zvUXICT5}^ca7|_AJIjx@IkxCLcrU?ARht|>oYgj9X8nIiY|kZ9xSL}|ZYns}_n9^O zPrYKzeg>uJ+l0@vD10SsVmy>SbRbYOA$%toQ)Vpxc@rtb6gq=gavQl+^y!eo(SH1W zHpAT()-O}HIg{|^WoqrBUveJsmYdD;q$Y*%+|hL|s@EFX7Z=sYN5!>HuDiChyd$ut zB+gxwp>t8a_NXqZk&WtWVmzfCsfZ?$8Xtt^4!(UXGsbrFa|Cy1HqNbfja`h6 zrZYJ!W#Vyk*v%MiWv;W^XpOlt*V(nRk+12D764S|bw;jx<^8 zAsfk`^A#J;sOE z&rx?O+UFS{2)7Rm{oIaqhYTHAebfkFm#(=zaf>7ldQt6shGp4_jL+Tt%v0Sb)d(M} zm3bvR!AO{^tNABbeCAGnzzq;}1Zpa`hpvRL1b376{SDIoO?o&)`G1$M5uitCt9Hh; zFmXAaEJ|A2)NW3zt$v17<$HNK^(*v{N1jeP8ln{KJNGg8_RmUq=d(?bN3;x+pMjK@ zMn8c)9Ik$6<0vsp?FglBqnyjrtjOhcm&NZ@reulc(^7#S|v8MByBl?3`>DUhX`TODjLMi^2|31P0WqiMG z*7Fi!&3~~hOLN0QSDraKzblx(JHRp9cS6ToXN`Q*Ya;!A1q^Vge`Dg|=__SVMQ+*`iSNh!?bv{p8N_0z8pCC76 zUOuAmu8%3ar<5#PqC2W*s%_h}(MsAaODbGdmNlI7Kl|_CAjC@gdWcocjXUK>^uSRr zQv#NyLnmLgJ>vw=P>$L!AxVBn8dIwq9PL3l){o*?r@mj8ZDn-%>rK)9xn)ZpndSVPbQwOb<6Bnl zV`}8oJGoBu@%@07j`Eg1E-krAiC@y6M(&!m`-!d(+wDv1T<|H9pQHQBz`LA-}RP_2`))_k0*wUTderQM^|8r%g+h=HcJUmP_os7}w{Ha%*1OWgc}EdP)##i2o+dI&{i% z<@i#qOt1R-ay9BW9d2H(c1!2`c3!<5tc6Q)-0cI5)I9>noJ?bZS8)O@i&nX6^5Fx; z#QzCxjlaS#?C*z;q158I5gb0804MeZYYlgQy)XDrenpQS@!4{)vFNr!N@YtEc=7{0 znH-~ffx<880e;=^elk3V99g}UJ;;2{i;_%35me_7pSg#F@J`xoQ&$bYY5TMZQSPmT zjU2Y*kSVBxG{;dMoBu-L8f(Izns#3(8z|W*mDTIowEHQ0iaEhfpjPSrPxt7h)g(7k zu0b7-o1i%_4L>Ij4j+`9mpcd1%OM-Dr&w`n0f(3^b`U=DjXBONQEd2a>0f8hPcS}i zl7hqiijY2pcaabp0wT-_?<-HzeUPw~q?E$3_WcjvpblR)VM;6}e@<B7_hX{Kn4-OwF#L{CNSK_AftL6&P3&OTWLfOiBRYNq)|4{37QHuIB zvASG)u5h_?A3oW!7RhbdW(u(IcEZQnZj+m5bN!etljEokMf{-;d=uQ3S`$|GBL;in zW)I{P65-4Cm~w8{gi*j=0HLjXgSv6};4Yx798LH(MtcMp<@?3H_NwbLKxvGc%InA< zn4dIa+|hu1%D@tOWq^|AdH9UtJH12hVer)p*dMdKV*DBa!Wc7ty+-?#C%Wr-f-gum zq?_*X-V`G+jpY~AJE4z!l8<}F81K>w*U=D0Nyja{J1WK6b2kY6Y6YuAK1152|AKzx z0J`Cbl3Y<8Bm7qJV^%I<&HXx#i?j0e6S}yX##=&<%b-hb_kC8FqGg3CK7($tJuM$qNdk63&M}a;IOPAUnE||aws84VOY4^|*O+3~b z;p3-h=NY6D;ra~ulu)YCAD|3_J-x(Zl;C=?2L{R(r8bg%u_yXrzRN)FtRb|7RH@s9 zeYVRn5xbinoqQjYBUF9pSVli+NVJl&NzHM$_Gwq3Mo6^1JLT%NM?-ikZRvWlW%Em~ zw@W9FXo&?`EyTy&38`$CGHE;M(cBZz#lCh z#Ew5 z;-*75z>}h0_^_4Fy=g^ICvsm!K7vxS3%@)Cp5#&j5oAxx@+FU&kEJzuMa)D5PeDgT zz%OB%D2MQP2@D}GVYqL$^YX1~Z`3V@LA@^J2uVB1GS184&^>0WoI2dRsGYoKR!{ho zNQw6eCl459kZ`h%!v~a&^oMKsd3ZmMjS1K{OtV$VoM_4QK(XO!pVPp-Ko5C~0U-A(*XQO4j26405cG#F#KhJBeF|cwrW{|Td?{;1?bn>s}h{+pU;ls*yj=Ge>?mY*7Fv$RQfa@ z!y~bW<4t$*>n?t68IzEbji5>MKP)TDEJec}yE zmwF1cl+Q}+Wn@2f>wREm5h?aDWw-CWQa5N?`{5Ug_u(dWCVClFOQXEhqehhWs!fxo z%YK248}oFpW@)w>HKMioHC6j1O)x^lEJ#F7m0E7;rSNj9tDXVIeOT`IFmH~XD?lFw ze&rQpgP)Zt<(@^sFWd8P+ZGBPQu(@b&=wQ>1l9Zv>+hXuWFeh{7x@ZAV7Qx#h^{@2ELakI>yf z)$p?Nz_{;V39qB{D%w=f*Yn)6!7hTXCb`HsnsvN_uul=i;i}J zwJc+y!zaH1pW+FUW6YkAaL9v3Dpq8K|LW=v1b(C!Ke&Ao-ud0Eath0L zu)m+vkREt1>0dow7~5}EuOq%RX9F5XgodrpulyI+hIk|U;jwm(S+VV3ruAiQ#iIH; z$9!9**(>lr!aJWToae1%Dm4!$Q0nu`ttU#_$kqfmh>31*WUKzMt~0e7Mu0JzOXtnM z64NB7OUyI+yFWt0aVL@bnn#uK_^jo>M_H~OzVKnG4`FR^h?TN~{6A@Xy7I|}M7b|7 zQ;vQG^U{9t5Hj~$jEqwKZun6oH>Gh`CMgjmHvuh0VzyA0C>0z~p@c(^@QT++%;Ap&O=v>ZlF*sa7 zcpDke5&rSep?;6i4~4hhu)(yKNcl-}c|JWYd)YV5mwW}duwQ2_g_~@PEu>kHh4GLf zZdJiQBBCFEaJ2avZi{xkExnR~OAySYO!c6D zEj8I0<=c_8@d$a;U#Q8bFO9(9KKluP@C>|r4a>8Re>d^3ga7yObq)2`@GoFboCL}9 zu0LkWH=FpIx*QjmbKp$Ew>h|SFe}T*dzjnKRV}abyhL(G759RGi#?s+>mqIGeiiLp z=-kCFL36x5jx_%?itsT>mJo4CNTkjQJ*=hDM6BGy{t&%SA!R5>$q2azKr{;*WjT$j z;VDAhX-MbbnlYW>^UKx@KPUFhCKt|{_6SLV`!6J0j102V+2U->No7j;A8^`;droC4 zXH~HUaR#bgmTTjl=Na{ILaSYmJC_>IF{2hvXw9odIh!m~VB*#JDh7+E*JOdsoTc0n1g6i(vJ?Mp3;`DM7f44yQ%o&Q8n zIL$n_%nQH{+-PnY?k{17@`5r`VEOzqw7)J|3-W99wOOud=?7Fk;?(ZvGfnoALC7MWf8>Ac*?DK1e8 zT;Re|Lg5#bGU~mclu_mdrHtw>C}k9NK`En_3rZO!Tu{oe{K8U#!55S=?7X0qVcykp zwJC2>)Bru~)L7#g#q~u>M_gH=7I0_bT7pXp)-v2$u$JN4g0&3y7OZ8sxL_^A%>`>2 zt}a;1aChNag3AlmGTdIUmf^ab*-bq15?mG6KjxhB;u;a>m#hiAU#h0y{t`6}|Cgv~ zG_XWXqk|=C8Z9hQ)97J|nnn{#)HJ$Ss;1D!5;cuJmZ)ho0$(~kKL@bko9Ei;3Z#6X z*Z7Xv;eILPWy?qUu*)PDs|V^>qMp#k!u5v2Z=3iiPVLO)Ol`C}QDyMh^?u zGiq3(p3uU=^^6i0u4i;09)LO>MBKN_Q)@WvWg@;`x-4+~l4S+2FICoX`BG&Ke=k+m zaQ0GV4Noss)^PJuWep!MRn~Cul4S+&E>+fW?NVh8zvh%}`487-^W&U7&_x z?m{&LZx^UxSi3-t%iwGt^Ee-$@{*Us*>;VKaJE_FVw^2&Tn1;$8kfP@vc_d_wybd( zoGoiy24~9}m%-Vx#$|A}S>s}yEo)o`XUiIfvz$Cs#SxV}V9!}%p@8tyMq(`aCcnnnvt)fAdoqNdTt5;b!gVRQt; zk4PcO=Qoc=7O7Fv$l^7fMi#A^Xk@XPIgKn@-4JvH2M}=GMar0Eg22Jg_ew_-%3kD<8PrQqxrYclJS7AXH)RSJ6+-K zo79f9{}x&S-M?`wLi2CfiqZQUwqmsYhOHQ#zhNsz<8RoC(f1p+Vzm8+tr%UuaVtX8 zZ`g{_^BcBewEXAU)OcY$>(=shBOSkS8=&GhY(r@HjoL5@exo*we&47Kquw`a!)W)7 z+Azv}qc)6g->40v+Ba-NX!ecTFp7PnHjG}^FGF+9-JLK;VkatZ)`~Rx2DL$*OV<{< zT(Y)N1ye^psFS73Qa9l*C=YKx<*e+)ir8bs;<$}Qgw}zma1!Xv{YTAq9yAJ z4J}pIC}^p=Mn9iWf}A4Ki)V}|rz*P&zpcNLp=a~Lr}J_n-CUv+DCELYLJJp^GOWL# zl;QUUr3{lVC}lW%K`Fz|3rZOtUQo&~?!r=nTNjivEV`hS;meE{Q)Xb!dL1|Fr6aB^ zQ46@Ua4o^51#1~@Em+HNZNXZGdkfYwTwJi0;pT$13|AMdWw^U=Ey3jlYZ-1YSj%wz zvpV+jhCZI=3;g*be9xpEP|7b*|TUZA|-^rg!iHeb5D;qj%*8wOvxyy5Pp%Ny2S zy1e1*rOO+pE>K=@^wQ-GJ10_ySppGT#32iJ~&nRQzdPWxu*E6bExSr9(!u5Ke^2RoCc#sk%n{OV$zQ6bBH!7IlM-yIH;8> z4r-=~gW9R$poXeAsHG|nYO0EZ+N$L68mr=<)~YzDxyy5!LyH*RkJdjeXQGvzeH%|c zU#IJ}@QT*g!0YwjoR^-^oR>b)oR{9woR@ymoR=QcoR_}SoR?m-243$^&3Wlr&3Wl# zvwiRWNnV|&WMjlHGBMr@vM|(n7KR$m!cd=C7-}yILtSNIsF^Gb^^l42v7Uut9A{w| zqnmSWtsaZ4?>xpyl@F(O7+h?@(rKU}o2a81o7YVvHY%zS8@1MmjVf%!MtwG7qjDRu zQPYjssP<-T-Uk}7(IFbK(L4O?)zsV)o=U^{+41{?+{rng7(;ZPP>2-$7a_gY3y{=x z0g@UnKvJ&-NNTeHNgWm-sks6q^;LxQS}H(NHw8#)WEP1R9)!0`>iGaThaWH0a2s=4 znL~D(sbr|lgV#_+9;l@X25PE;f!eBIpvEc~sI>|PYOaET+N)yl8mwTT7AqL2$uo1x z!qb%To6fY~tM7lqne=kn{(E)!PM=M9M5PUQyjH7usMu;A>b9DP>aFIXhO2p~U4=GRi{fl zsXATaN!95RPpVFrdD3*c#FMJiB_8VZ^jv!y_ClPKp7F@jEweLNOXyDH4Om3s)hu4$ zl`K?uB@4A($wFmUvQXEREL3$R3pHKILPb}zcs*CLP|cMr)bfcmEwAirn(dPZ6%TQp zeyi}J+zPzcY%!i{Eyh!)#ds>T7*A~$R*0s`3enV9A({#+Mtgk~qN%PzG_^H5 zHM5JQy4nUHDVI|HDU5vY`{caHejMg8!%C?4Vb9i229j(114&^0TcDzgvo2Y z0TXrKfQcS(_I-!FzQgAM^bCc*f_J8NNnEJs=zO3VmpDNqF7E|RxabB=xabE>xabH? zxabK@xabN^xabQ_xabUxxV$$s;i5Y<;i5kr8rSx@@j0vGIjK9%7obGl*(k5$OcWKH ziJ~?$QB+|jih9dLQCXQNYA6#$wPd5bE;3P6Kqkt@n&Z)nK5p2VkI28nHgj9f+HmiT zqsDgqxMS&QJ9T7ZL>rkHuZ%1Vb&-XkDzY%tL>7jM$ih$$Ss1Dz3qvhrV!RTvFw{X7 zhAKEY9-|4TF>jP2yI8MekjSrM@H(hqpeiaDsF4Z=DyD*g`l(=`nkpEmtqKMzt%||x zu7ZIotYDxfPmC)otRJ9N8d*a;Q-&bNo`5i|O!U_#X6|x0 zI=wXG5)C!t^15omMXfdAqW+q2QIk!$sM97~)NT_l>bVIQHQtEJ>%IvWy`Tvf{o&O6 z;sMv?jNUuq1pV`>&dO)o{`B4nUyy$26m|mf&NO1!14aLFihaSa-kwJGTXA>bvYh7r zNajuN%WUdZfB*O79kRFGE%&bci~D!)ET`$*Ejg{YS7KW4PDyF$K1pfmE=g(W9!Y8G z4oPXL{-m^2cT!raH!-bOXHr_KFDWh6HAst7DDFAT+~fVL4@Fzoef0efadxa9XLD)0 zc+18}++|{X{AFPnhglfLV-|*SnT26|W?>koSs2D^7KU+~iShB9g<%|LVHnSE_G2{e z0itB(X}!0XQgpGKm{KA(DW#9ogp`cVgp`cQgp`cLgp`cGgp`cBgp`c6gp`c1q?A6c z5>hgn5>ncT1Sj`hmp1}jlU8>47V4kNrx=kS%_H~K(H~CFb3OL`^2xU^ zZPuVWPiVj*ZcxqQeV~$s4p7NL?N_o;^_48tdnF5%Udcj@SF%vu)hu4ul`K?rB@4BD zY)*~mq@5pG9X^$h>2zC+6}1*(y+(_$RAv#DdMv_Hg+*9uuLw)U6=A8fA}rNai1nH( z!cs{^Sn6kEP79bZ>+b*@QPcTahE7|Jm_%t!n7r;9Fj0jKn5fAHOjKwCChD~T6V=;* ziCS*JL}fQ&@;Yz8MAbK7q6f^5Yx*9r>F)aZ>?bmA#`&S)9Hra7t#w=JZm`7F`9gC} zafrs8-Yc4N(lwfL(m$GV(n*?f(o>pp(p{Qz(r21-(s3GddhcnxVa<8zW3%&&7p4DnPxb@ck^l9CSY7Mdk>9a~ zJ3qI#gzh|Qc9tcLMI5P`#rsbs3*DxYh2B!hLMN$Yp>I^O&?PEa=n0i9bbx9WulGt8 zs=JbfT0S$^hrmvXbE4v#vZnZ06#dBcM@`ZPd9M!N>A4AyD7pcU*K{=xRb9bDqA-4^4i*J3<%T8yVYi}BQDF`jy?zU8ZNx_PHe#ce8?jN@jo7I3Mr>4lBQ|na8M>LV+ev-6JWJe_|uK$mczz86RDw86SP586Tab z86Ul*86VxG86W+m86O>`A)oh@W_)y&W_&4Qemv)M(?7}c?bIIP*}WB8GIqG@@O&hm zi<)qx*)`r2hR%x`F^LN`VedfQfF?fQdfSfQb&%fQjDHfQhcsgvt9! z11362115UN?B1*^qJHRqLj7mw#vk+8PWROuqWDS=M&t2n6IDh}#(cFiuFW;3DK*;$Mwbf?({ETYsNYH!D!7t`8m?raimO??jw@NH8Pqs0HG1_aj z5KWC1qN&Y7G&Na>rWOm))L9r(7Rqebt@OqY5ZgvQZ!wJ^cpTeQnLj} zYP0}JO%@=j!2%>TSAe9(3Xs%P5z=d@07=ahAgPfL3$E4P>Gi|CuPpekO`>pN;Y{pNV3;XQCMEva@46da+CL znyh!?#KWI+?G$@5@D#+YsWGBxZj3GEogAgePEj(#ExWcdh`Op6ywWNdsJaRUDzJiq zYOG+OGAkIU(h3GDwt|7`tzz&>u3(_5D;TJ7St znnRRX$>FtG#X)seaZsOC98_o(2Q^y7L6uf39)mp_ty~+~}W19QO zx5qdiaiSk8JGx77oldLpqR|Sx*Jm-F+APLXm&JH$vKUW27UQYKVmx(NjHd=G@Lqq# zcxta0Pu~WW=8T5oz^D$$wA}8Yju6pBBa+>0g}opKvGi$NUEs-NgWj+sh|QR zwNrqkYKo9vF9k>{r2t8d99hyxf0f-Wwq^bFoj!_i(gqdayf(6NR7N(Ay2!>+71=my zA{$3VWaFrZY#h~4fb&|&#!(5`IO^aS&auJU=iy|zw zQG}&Fim=p35tceB!cr?mSn8z+OU)Ewy>5!I)J_qW`uSvD3-R0|){yXCj5~fN@(xdn z!pTuP@<(SQJDseBS2VN+Uazm_ywqNEUh1+rFE!homwIl_ORYEOr4KacrAMrR*ZW6v zUV2M&-jsG5r^1{Sr@1aGf7|lzC;TrbMa;JKV;J#^OpNz}EDUv?g`tMCFw|!jhT6-* zP*+(PY9y#p);JE z(<#3Dt;}Gmx-lZXC#{#BROmKJk)5_H8AR1p3|`L_3{-Lj12tU1K=oEIP`4EfRBQzU zwOYYIl~yr$eO53~nH3DwmK&KLFd*gf>;nV<7B zQ`hCU+b({SFh`S3cv5t_oS!tEF7c%5bcrWbr%ODkI$h#P)#(yXs!o@9Qgyn-ld98Y zo-~~<@ucc>iHABpJ=fC>>+9nxb(=Nlt}SlBA_}i&@%pZ0p}H$ssO?G?D!Y<}x~^oQ zsw-Kj=}HzVx|+r7xsruyu4JK>kEf}zzlXpjIzS)QX}1C`nk`0qtrnuG(Lyw}S%{`4 z3(?eKA(|R2L{oc(Xlkw)?X^~jrp5}<)YgeD>8C!DbFm*tKlOtA{3PvZr!!@^PG41c zQCJ1uYpfVgl@;Tuvtm4zR*a|Cit$uiF`jxW##3<>c(1u)JXKeWr|!-!=?7!d`M$2Z zP|wlnu^E?Wvk{lqX%jALwh0&Y+k}f+Zo)-fH{qhjn{ZL@O}ME2MqJ(pnsCt*nsCt{ zHkP!#IEFo6%g}j4BPMZ%CQRNJ8Zgln8Zgll8Zglj8Zglh8Zglf8Zgld8ZglbnlO1E zXuw1lXuw1dIF+v8;d3Hxv40W#V~Fi^U(F$kujKGrui~J}t2n6dDh?{Uii4W2;-H$V zIH=<)4l1~k!)v#SgQ~6Kpk7a=>$N}YWZ+`TM?E@E5cG^MOdn<2uocRVX3G>tk+TzmMSX3Qa>`!HLZnr<-3P+ddRiulSAIC z!*{xB!Xp}Mz~l8+%|q=~^H7J?Jk(@05A|8iL#bwaT_1=Vwx^Kco{WsyF4>aQPe$a%AzR-j#rQaUwexgmE?N==0J6~wR zv(#@-%g=JZJ%xu}P<>x1{q~gnr1aZUcvAZ9DLg6t_7t9!etQZ}O20jgXSv^=!jsZ( zPvN1?ug7VJb5&d2$uz^({JcCBc-Eh!fm1cENWcEu=`sA*>%T_l7tick;wjJQTHbe_ z$+hTB&*WP4uV->CdfYR)7JcxUT#H`$Os+*geJ0nU=RTurd0&1e*P?enlWWo6kI#8; zSi|qH3cAxJsLq2c(Bi7aXz!DSXgXgZnqF3jraKj)={JRFI!Ga!o=}LU%8Sunw}ogb zu@IdyhXQTkJqHVOpBI*tw#?D#t{K%|rc)ZR8Rqu+9^O%HAP6TmjWb}Qh=mJjx0s| zVCHn9Eei_ir|3L}*C)&f)C8$o*6=+d%G1}|55KYww{ z#o2f(7iZ(GT%3)!@^L!e%Ej4uD;Gx{T%5+?G}8ytW5iqQ^v#irYseq9Wa~7v23Ap6 zb5^gv#;jClV^(UnF)Nkbn3cM3%t}{i%u3H_%t}XT&g%W9F)Q7uF)O`lX4Yj(W{hr% zUrqFhH>Q1Q9@%+NC4=})6@&Md3I_T}1p_^!f`R@}!9XvlV4&_R7^v|I2I{$r!E3jI zfjX^VNYNyE&^L=TIfqQsvub%J3ZiIJ(nj0~XO|HH+71B@1<0$wIAG zvQV#;EYxfz3w2w`LhV+vP`}kIUc;3v)Nv&XwS0V9jbW{SW&g~K15Bej?N*>gv&Cqy z)j~8iT8O4L3(?eMA(~n&L{o!>XlkzzP0bafz19lR)L0>!+L~EM{aD7559PTD%zjOd zDreStQt+MLn(&D78t`}xR`XDe)jZT?H4hb9%|oqL^H8?E%cs}a7`hLkmZyXAxkMkge;{D5wesrM95Og5Ftw`Lxe1)3=y)FGDOI7N{f)Clp#Wv zQZhmgu13gZS=+N6VO@MArIYALNatf?F&!ggF&*P#F&(2~F&$%KF&!gfF&*P!F&(2J zA)Swf#dM5>#dM5=3qKckzz)G1@~^geXl;HYZ5H+iUXhmTp?@O7+QfI|cRf>8&uIMG zb+OWnOX8^!myfw7T#U;mT#Vf&T#WA~T+~1lF6yKS7q!%ci+XFsQ>qKk=%*N5yyg%}OsC%}DQcn4F$kOHNNcC8wumlG9Tc$>|yU$>|y2$>|xx z8R>nTCZ}gCCZ}h-owPmX=y&#GPv6g~;~6|%`&inV8=>VWL`n=6A$>F!AQ_hhNJeM@ zlCfHVWYiWQ8NUTcMsfj?F4qd5!1IL^W_g0nD;-7E~FHWTCHH4DQ?&B8E7&!opF zo(aOK2N(x-@mhtK*sZ|(I4;IBri<~6?_xY-y%^89FUC^?#dzwW7*B0f;Jr?Y@zhK) zp87d@R@@x(uG`XQ!6+Crz&oN3%(=$zD(DoGi4cusA-pOw5Y#~if{~wrV60~#7~L5N z#&ZUO5uAZw%w{2clx83pml+5~;>L6&V$SAUSz(w;aa~S%lQoA*28q-v1|PW<42kt7M_lDp{zuN){@vl7*_PWTEmZS*X5B7Amls#jCKAg-WbsS?Y0Nr&@d}@p6xA z95L798bi$YxKJT>r2>ku)WVUz7Pe%xfxQNp`P}lZ{5$_|=gC>= zCFV2I`#4Wd&)7~*&v;Hw&lpZl&$vxa&sa@P&-hGE&zQ_e@8d8zJ!3C9J>%^d;tjLv zkK}LPdCz(W#!Mx?kJgd0F%ox~7$19C7{*@~hB26hVH{>*7>ijL#$y(SF`0#7TxMc? zY-V8?pII2|sm{eHPS(09eFLlob*^|c4}qR)4#G!g27iQ4D)3$-#ds>F7*G9d#473cHo`ZyLo$9UpmX+02GLLzgI7@n z19eovKqXZ$P)ijIR8s{5^;E$?MO83RQ&kLJRTT`>RRsf;bzxI_KvB8{ME08-1V|n|FXlY}9@uHmd&goa(QOvN6jz zRJ=W5>n73KXSwUwfAp>hC-=n_;Y6DSIIqfV z9QBxuqY|@m)L=G_>dVGaciA{9E*nR!72v$evT@W`Hg2r-(l!UHU)X)Db5fTi)_43U z`g*6RF1mZF&O;B|pB(gR`;(3yYk$(wW9?5mdaV6PM~}5X>FBZcCmlW3{-mSF+MgWs zYWtIp9&3Nn(NxLNxYfX(gh$@}@l^YcJ1>8sk~{LJQ${92)R2Yn3dle(>N60G^b7=} zI|IRp&Ok7VGZ2j23Po0JRFb8o?qvohkl)d zUiIsA^q60#qsRO@9X;mP>F6=PPDhXVbvk;?uhY?Eew~9}_3L!>m|v%(&98@Jgm4y# z>crLpf?ww$;MX|__3Lzm`E@$N{5lvV+qbvlBP z_|6bvYg0H!6*EKkd{5htF}Kpwp7Xx1J#;(`ev|vy!aGzrZark9V0~6Myru7~JhydU z`uJ!&uE<~H#vRW|-D#%)RdOw_q0DPhN0}&UDHBCKWumC5OcZsMiK4bLQPfv9%4;kW zMV)1$sI_Ajy?Ppmo@Iz#oHOSbW@99BGci7HvoMU>EDU2d3&V)b!Z2R5FpSnL3}ZD5 z!${4<_&CkNFiNv9jL}!a88!W$hX)=SDmSuZIMWxb?4l=YJGP}WPzLs>5=7p1+V zJe2j4@=%Q4O++Tjvmd=zWp;mC{^;4&IFAIYY#5!OH`PA{T72#J5{u4?VmDrJK(_@H zo_EJdCwB%pz;|Iau75>5EsuAuL0R|wn5A>i=A5Fs#++W0O*yI9rkvDsQ%uQ_(U~}cZNz9 zdO;-%)nCa%y;rhO;gu}ZbR`Q_T**S+R+f3S82azlFHI) zyCIusycwI--wMK(1?v*(1?wm(1?xR(1?v5(TvS|MI$zPMk6+Q$F+3T zulE1@qlNx%z0L{Nd5QS8;Jx8D?m7v=io6I^SC>zqsBS`Mu|@jh~LU zHh%iu+W6^qYvZTat&N{fw>EzI+}il*a%<%G9=A4rI^5d$>2GJ}{Ou$0u50q71)iM1 z3=LN8@yteloaf%`_wY7k?icTzyG!qrIq0{SQgnWpm{OcADW&(Qgp_ofgp~A+gp_oE zgp|~BLQ1MKAtm*dkdjJCO6g-hAtj?XAtmGRm41ZS{t)-Z_~%``%ziIXGV{HUjmhsB z5tH9D4ko{6?N5HsI-mTWH9h$~>v!^d*6PgnzAh)fXAMq%&w4x2ub=q+fgk&|Bb=KY z@5#5Ptx9lGp9R2VUT8pPB(|iV{y_d<&H{Vf<;~*n zj3Y<)mK;k@+bJX)Bl^h1cy(l9sEsTPm63&^F0wFGMHYsd$ih$&Ss3ae6XVs8g`pO* zFjT^;h*6wNZM&wrNSyda;%)RBA5|mYFm^`1VT6o)!#EiEhP6HN4eNB|8`j*&H>{u0 zZ+tC`e8aLH`GzHW22aM|ycE0xYuJ{a^|J*yB?)cvGQ4Kq0ILP)b(+u^$*-g0B@ z3~Iy8mQvu_@g*={Ci9dQvf-&Q*-3zZK)@g2i}xWig(PT7mbzTa2eW7vt&SCoYO|!r39|^EM?o z(M!SgyiT%l)JHasy2!>+57{{CAREW{&&DzCvvG{~0-TTYY#ie|8^^dlH9YaD|Lm5{ zEAK>m-McoS7%TBzi1jgEgk_u;VHxX1SjKx1mN8$1W!x8G8T&<8#(yE!YoG{A9TZ`y zg#+k&ZAkC(w!0vGrzc}EznDg1dm)XF;n_5d)!8(R$=NiFz1cL3vDq|?rP(x$nb|aq zjfFHm24>T+u4mJ*PT$aZ7@VbTCu783<_^w(-+5h9I;s1FbiV!<(=i4X(=iSf(=iqn z(=i?v(=jF%(=jd<(=j#@()svUOve~mOvgAmgmbPQ$oS}%9|K`rc-22)5uV!$DcoD( zXB)R&UD>nbj$M`!{7rF_>+*MXJRGl)bfd>p`Is(7i?L{r%dV^KaS7Ji;}Wd3$0b;6 zk4v!D9+zOPJubmodt8FG_P7kI?Qsd#+T#)|HF+`~WnFc;6B=*N!>ZFc`TM}nn%POj z(L2owk)nelq*p-!k{T#LQUL`>#(x2l(O-aM>=z&z`2|SEeG$?}eF2g&Uw~x9pN=EG zKlAvBv>|AfFyr`0=85&BMm#s%`F{mkBEJ~zqrVVM1r(yGf7})3ei+VA)2Zv zL{k~XXs?b!G!;^arbHTh^E!_;ntv;$TH9KL2s_9cyb~6-_i} z^@?fCN;^Qj3jQsno`-)Nx~0s=P5PJ)k+OcZkNU^pD1@beHRO?y?oVyIj|s zugh%7HF2Ts&;wojHN<(=d=2kIYrO_tX|30wN3Hc5bgZ>rgZ{PFYtYTsdJTHpTCYK; zTk|!%@2&M3biuV=gP!==oG04&;awSH(;_ek6Q~jy=^Vr^t82b)63SvO%GcWxA(5KaMQEa!cDKb z*21fFcj1I%t@#S#TWh_7cds>GfgZNTE6~Z-cm?{|8m~ZCTjLezZEL&&9d3=6B?OJxOHZ{G{fb;%<#Oy`MGZq=Pl(q-Qnd zq)RpBq%Sq)q!Tser1v!Cq}w#+^#0P6laA7qlOD1;?;+UPjVJHV$=@9r**z5h(0O*e zzouJ3YQQ2sQO)9=p^}AOP{~5|SF%v=l`K?vB?~oO$wC!ZvQW3xEMBRVEYxNt3)Ofg zO^w(gcgOE{(04v{I;_Hr0xR%dd&PLFt{6|f72~P2VmvigjHkMa@zhl@o{Fl#do2~? zsiI;$^>Z>!KUe&oAv_1zDW?!AnkhnhwG<$!lL90aQh=m33XoJq0g`$sKvD?>NNS)6 z>7%~@$+#~-GU6}JMLcG;Y_?u^_doP!lzcgOp0!g!LpD)HGd8c5Mr>42BQ~n45gV1( zh>hxN#70FnVxvkMu~E6r*u0t>u~FfT*r@v1oe*QH-%8n~um)Cff#$5<4H~o36&kbB z9U8OJB^tBREgG}ZH5#+hJsPvpMVhmEH)+gDS82>jceyavr|5r&cYf&%5l(2iD}QjZ z#*@&mZpI}}(um9ZM-wi(MiVZ2MH4PML=!IhLK7~!K@%=|Koc%1zY&+$dlN3Iya^Yz zeYvmS{xbqwGPk?!pUS-H_wd}4-|57RT5rZjy*J~d=9}?R z_s#gI{bqdBe=|OMKtn$71I_s81N5*N4Q64e zvn&j?l!c*QvM|&{7KU-3iSeX0=drx@T+CeJiuMIIYbcNlVwo zaaQ^~ejmTd{EXe?^o-l&^o-f$^o-Z!^o-Ty^o-Nw^o-Gr^gce5(=#@c(=#qN;&{XU z8k`?^+n=L|*;d^hecAV*v>%1^dV&T|udif~n5<&(QCh*kxUFDdBv&vnwksGI?G+4+ z{|W{wqJn`MsbcV|sbHXvDj2A&SA$ae``Fy^sc*tLGpays9q{Iv>&_khKvcLR&m;85 zJ4h3sHWS7-Sk=ozbgfDuQnXxz^cpTeQo996YPJALtrj4u(E=p3S%9P_3y{=e5z=e0 z07>l?AgQ?tWZcGW%etYeqW45kA#yt6=dU>z@pH)eh@V5wNBkUeKH}$)^ASIXoR9c9 zA?G809yu5BbIAFKpF=X@PgykgTLt@6dvtxC&gF}-67_{xANNIAMt%{Nv0sE` z^cP_n|3z3Tpa@G16k(}?Laf(85td3Q!cq&z_1txwn}l~93{O0_bNKK^_d8*ArvN4K zpN;a7pNV43XQCMGnJC72CW;ZBiDGPLq8QbgD8_R(%13f0iZPstV)UL}eQN+l-&oDS z>Hl~h8RG!Fo#vrm;dmrx#60oecaC1oA(36l;p4oDgHd0_K@C)KP!Uxe)JGKu)l$Vl z?No74NtGO4S5+KTSrrF0_uf!*rl|h>>@Q@_3oVMCpB@z1>8=TnXs-c}*IzXcHCW9< z9ai&Di`6{TV>J&oSyM{*;gCbj`K$i>}wm@AbYme)_=L_~{R8)d0NR>#;anbQ)0wTD++k?VYC( zO&^o(s`bYayCiEJk~!6{4x5LNrzK#hgmw)3t}smY$Qoz(eT^ zT$jE9#?N}T*I-p{d!6jvNZ}b=MKrzkt9b3N`6~2?HD85ZvgWJMbJlzndefS(LJwQ> zRp@nVz6w2Y?N{;Mx#p|TW7m8Ydhus-ZrLAm^;4=(>yDy};>mdSVsO&z+PK9T*Tn7p za4p<)!L@MH`_{ru$6E_GeQqt>bhou|)6>?%O($CuxA(8LaMQKc!cDI_)pwxbN_qVL zxZxPfRzt>Tp8D_89AdjZA7`q|ImEXrIlMnranOgVIOsQ39Q2hc4*EwG2YsT7gMLuO zLETq!czsuKP{&mqDdW6Y%VWD+?2L%v7_d|0>?pF1U39uOcCX+yu~XY?VyEiY#7;k0 z6FZ$^P3-iLHL=rO*2GTVSsS}|q&2bAtJcI$7u$)wWP7k{JN|CU#q`;W{#a_q^W5`q z9t}@wbl&#NuPKiAjIZf^@R?qd?)XfvNzZ(y*QAp^(`(XSpXoK}y3h2Q^x|iFO*-^5 zzNYu>XL?P#`7^yHJ^qu}$MZe@eLnSxy{cG^u$8{~{Q~hd$J>r6-maaPUC*rLmo{OI z{NDf9#!s(b8$W%0ZT$4`wei!h*Tzq8UK>Ascy0Xj+%@uhe_b0ty>xB-^v#1?vKFhm zw$#C}tKlK{SN?`8wL9`Od|JBB*Rs-!Pi3U{zLT7uK9ZcCzL1=rI!{hd-6p4}4wKVU zSIOzAlZ^B}?vv9qj+4_fF3;$@w>M;0{cU$a;_%5}+!lYcB@wL8nRM}2g_n4&!29?t z#xq`v@r>VMJma|-&-gCJGv15wjQ?Uh^-zKL`Y6UzFU5H3=kk(%&WWaOif$gu6IhR2 ztfn1#ihV^-P5DG$4f(v@n(D;C4Q8UKwoDXtm5HK)GEvk@CW@-aL^1xeQ9jZ$QH<$K6r=apT=Z^A&vhhrvoR96 znHV3pSr|rb7KSmKg<-^IVHmGj7)EOrhOwH3VWehae4J)s7^PVl#;DBHV8ruK=Fw4O z{XMN%OZ=T5TiuqG#W-a*x~alT>{j4?92esm)5UnkcQKx^UW{kl7vrgcVm$RwjHfm# z@Lngycxt8?PyL*ZRWa0$%@0hDH!9Ggono|CP9d7QDMV8>g=lJ~5KYAtqN$fcG}Tgw zrdEp4UMYoW>ZA}&mHcX6CHLJ$X=NTs8}wB-dl$D#BhRWgW)w9wW%LSb$Vk;SWTX-s zGE$ul8L8NYj8t($Mk>1@Bh}uN(K|pxM!G^nMmoibC8y|r-}OU_aH9GGoY!_Xjtb7k zQK#8Bsxcc!&1K`LtZW?hlZ~TF3UFQv**HdgHjZ&UJKK%^;VnO#rDslIHftizoA5~7 zH{kI)sOF(As(GlBY98vQnuj{7=Ao{td8o5$9_p?EkJn)}4|Q41L!EB*b=RK{iND(r zjUslT)cDO%H~pTJJF?@eYnz&Lihdh&dM!8Qq^_HCQsYfIsrROw)P7S=`an}odO}l9 z`a@$*?-fls=^ITs=^>xSJ~5mVioYAKU@bbynwZ5;*23&vWev>qmNhWbVb;J*pIHMl z-DVBU^qe&?(|OjwO#fL6vv;92Fw=|Hz)VN_BzB!SN9wOiF8a}0c*Tv@!0WxJIWL{4 zIWK*vIWJwPIWIk^IWHZkIWPUEIWOI34ZPlan)A|mn)BxR4rV~^%1X382h+}Xa(Hum zC!IIXcT#zCeJ7PS*LPBRbA2b3H`jMkd2@Xyl{eRSQh9TIC!IIXcT#zCeJ7QdzO#|q z-vRIFPT)!g@scVA?-~^h^oI%tIza^kHDAF%byqM@#}y1zYy|_gS;gR0SiwNORWMLl zC+C!fH_YDldfJvZl3$Y+eLKv879vGSMM$rp0wk4FfTUsykW@+mk_st6QW*tEDxv^M zB@`jO0t%3f`~oB+es}cx{iamUU`rz#^)tX7TE&WTA>GS*WH; z7OJX}h3cwgp~@;*sJ2QLs;-*FtFMxUDy(D)y)?XC@cLjszdj9#ot9X)z9cKvTmHSD z*L%IR5~TLh@{!g{%SDD>S}rp5(sGfZmzIkRy|i3p=%wW%LoY2C8G32?Nb9BLB111N z7s-e}W|7?Av0*3SZMtu{zY3=WV4ty^3YCqKD9^LZ=`0MRISa!$&cZN) zvoMU^EDWPI6XWAG3&Tjw!k8;#v|!KtU6I*t#44V!(l;~PJ7YKHX)K)C8@*TZWEm2! zT!K_r&PSRn=OfLP^O5Gt`ABo+e5AQ@KGIw{A8D>!f>c+|N17|=BN_4U4UzC+e1~_b z;@l>@wFfIdc!v9lJOzTcu3qC<;aYI&COo2s20UIH)jU*6H4k-D%|jJc^H5XOJXBaU z5A{~fL-jS_@mj3rp)#v^sM8Zeouc1_cZ2?1#t64Xn>U=kY3qUf{wV0O2q!u$zXY6#8wu<$5;k}v6g{g%w-@Ldl?AEU zchI>bY3aIn%}OuPnvveeYI1r;YI1tUX>xi-X>xkTXmWZ+XmWbSXL5Q*XGVG-o5|@J znaSywycBCgcYM$Bwx98s_PJroE;c7sGLD$@(lNxmm#!j~ymS?@TLD;OB*6%3603I-~nf`Q7YV4zZ}7`$>S7^tKQ1}f{+yt3k+%F1Z0 z7%OTj#CjbSVX2@ZEVWaFrD}?>)JqYTN-4rpBSl!MqY&$LQG}%;im=qeA!y-i`Fr1e zGgy-!S?$S4E%Bb5+DCX|YQ}V8YDRHlYQ}A1YDQ{eYQ|<_YDQyXYQ|r3Y9DclsTpI5 zsmG$~p3KlbkY0=Su$Q80KJ_rF=2EXl)pY8ysG3ea7FE-!$D(RF^;lF*ryh%{>C|IU zHJy4as^(I!M%8rcv8b9(&8U(!g|J(%znkK$?3=)@qObkx0NxvmRq8l>w7a4Sk3?bv z9v`FCJdECI9>#Sw4at8|oA%`aTq` z;_WC{S^v;ImY?x-#yvS{3OoPalW!k6tj9;sXf)>({Wj+GT5ifoT{q>V#+!0d?@c+W z{idAsfu@}Fgr=PIhsK=VE1GiBH=1(NLrzb7Nbm@x!EUv4oE7V4zADh-3&m*f0EK93 zy%0@R7ow@(LNt|Hh^8hB(Ntd{nmQ{+dqowZshvVJRU&g?Q$6D09GC5z>CYUy^R*0} z<{B}H{+cj(EjD1HE*mgWqYap-*9J_~ZUZLjxB(M2-GGVuZo=fX-hhd^Z@@$kxSX!w zcm*l6qJy4xQ$A61Lq4zRW_(n3Gd}9O86Q>NjE`Dx#z)0B4I@lpK^`Md`-=uhh847&Y_n_ zt8?h((dry}d9*r@UK*{=p_fOib7-pMjbWM(WG48&`;A|@kw`u`|9z*Iq;zR~UIUAK zjP}KJjO)d8jNrv|jMc?-jLOAyjK9TnjI@MwKBgAaF?tr$F;0$$cco*LvLkaGSliPz zy~!u>3Q!Uw*(e_|nJC6jCW_INiDGPJq8MqJD8^kTicy$}VoYYEe1vAA7_XTqM(@QC zz5Tg1J$vS!yD4j3wnBYQA{)_-C))7ub@>kU-g#X^Hi`CTY+eP8*r<+1Y*bAnHma!+ z8&%ebjp}Q}MpZUqqgtD>c@;Neqq-ZhQS~Q3ku|7?-8%MFS(DlprC*cw>yE5u+ZiAq z%O`l=AX?cjM2eb=kY2e3NUF2|NktYQslEavl~#bHstS-)Pyv!^DMET>6dIZW=L(BAPIHg*0HIVj3_}K@FIws0K__SOX?1t^pGj*no+OY{KLf+JK3Q zZNNkYpUqY973rN~*H+YeRda}HD>=Mgt2n6CDh_J2ii7H`;-D_8IH<@f4r;NAgDR}# z@cOIbpz^9XsJV?*%{`V8;2lv`c(xC-Vi*-Z6tz8Z7v!htoqd%IqPHprueJ&XYOR8S zN~>U?&MFwFvI+)jtb&0Gt6-qMsu;YwDj2A(3Wli>m_569PSk{$xg`JVzT(^RTXa^? zN*_24IW_`IL5`2WmXT8s3DqoK6_qSh zNF@u^QprN)RI*S-l`K?LB@5M6$wH-7vv}22vQUAQEL7w1p&HTN=nCgu>CHXzGlCEN zvoF@uyCHkcOHiG5E6}3ZVzk$4A(|R3L{poEXlk+$O)VCpslh@twO5Fy=8Dl?YlUcP ztPo9Y9T}=*OIonI(xTxhGK`!)mfs&rua2kqoXAVx>8S`ON-Ds44Q1n~o@^X-lZ~Td zvT@W(HjXOE#!(;HI4Yw6=QWXyqZ+bt)WMm&xE{{9yZ7qwolctYh;AD2cpX*qP*>GF z)LAtTbyv+p9ai&Dm(@JfX*CaZ+knUGxSEH$uI8c6SH_|9?Om9cU!B`aMRwX=nTg3` z5LH((cs*AzP{|bx)Nlm@)myr051e>#Bh0xp;}W$s;_|v{!bJr(;i49sa8Z>_xTw!2 zTvTckE^4+37uDN{%j>ua7Zu%vi`rgUQ^(WOw(t11-?0h(o)Z=KcWXWwjy!)gbcs@? zu03wdD2~yT(fdY2M!H8sMtVp?MmkADM*2xZM!HHvMtVy_MmkJWM(;BX8R<3+8R5FUOrX#M2+k4?!xaopx;imts%o~r7KC#1STV}1I8L2{~_)HPfyGQ|& z9#Md#0~8>s?*b&%TY#iC3y@S^0g}2ZLVDE{AgPH0BqRRdB{}8!JvlA*ip;KVx?juR ztFqJcvi$pjoGp7<_Pc!`-?@VyOU&=cOe~(i+mc-ak0tuCTVS|z;9bFdC@0}7&nowM zVZS2ZekkvVJu5$*7luve-gzL*IDh(@%=d1~74G|4-|OBU?ml?x_6a_5gE7-kot#?*6)z$9=iW`!XZ<$Q^c{2<}Vy|JQ=PBXxnd z_hR1erlfc%pB^N?2>$@b$n5NL;YQr&#ubPc-ODa)}!urb77JtvF@T-Yvdz*B_tc=EPGcE*@33xhddp+U?+tO=`y-l@y1!O-rJqar-tuLkCs|&X>tI(P z&XdP!G4LX7mEHBSE3C$po=5}#T&c@1%C52L%VzNo3d<<85sOzyitg1GsbA9YM)NdR z7(snTL=6;hSN_Ly46DkQ2r8`K)hl5=f2?(sYcwgJ_)gm7I%Zrg8@F8+mHm>LzlM}e zQvYKqc5oGpMcBF*>ZzaesrqzRTa?QbdwGdiFGtV3!cON$(u2ha;g)krt;K37k8y5E zA47YBrS1z|hW1!p_lo2fz6cHBdyIReEDCE94E8>d8E-EvmCI75cn`^j#2lhd&tJl) zzHeFRxAFKdln!Q+cX}=+Pk z2`5_JPwc7A-$&H%J)4sEem~xN-4^HWOg_i2B~~B#QWTv%cf|eFx!wOn{{BGz{!Bjk zYbXD{@U65$cjUe$reD1$C4Se(w~a@BEaO*6f8eT*`)~%3D(=?sMV!f%|iJ z#{EP%mF=f~B>#?kTRzwCKbN00jn**weA)}&kz5`YhPNf<+w$j3hxqSgu37@9yIPM^HMow^rs-w&A=|H;ev7AetlhP(Jr4Mk;0CfnRKtL^7-q$vWoYg??r#)j>M|}?X6)R5BZ!TMy4`{h&2=-~fhj~=OSO9{$|`$e#zq%da!_jE6QxuPG-og9($ zI$MO+Y)4A#uCNVfbTFR2D`{1^hh)c9zcdex%!TZF17}%lts__c^*Yh$+us-E#J!4Z zKGzth-XZ+o~EqSru-;$sH;C7wV^7+2}X7+?;=~h%OpUHRMNN9g9RsMy8 zrNO2gkq7dTd;d(X@Ib0=$DML+U;lbAZ5TDG+&zbSL$LPi%I&jH^e)|VzVcrP;ox2g zKjR2egt?!(eLXZ$pGf#ZENB2>j^Bz1Fl__bK>U!SOv%0aYso9F_m%I!>7$>18sW`V zuJD2epJF$r-_XddiX6tOp$kz%viH2aG2v)~-~BQnwdJQbbwU*u;7)G%l$Yg>?BLz= z-Zn6e0K?wz?{&XSzy8So{KVgh$mobpjNtIP{c?x>)LI{UZ4A#2J9pJA3XKD%L{T0G z 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

    P!%aBS7G9X@ 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 z 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

    `$7q0mOk)0&n7L;_vmCI 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

    S!LAcQfFx?Hrq0eITQ>_vDsF1 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 z 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 Zo6o;756r5+{r2p;|BdzgH{BHv{9pGV!UX^T literal 0 HcmV?d00001 diff --git a/tools/xunit.runner.utility.dll b/tools/xunit.runner.utility.dll new file mode 100644 index 0000000000000000000000000000000000000000..c22d733361aa18fa1a451dfd32ab9df7f91fd67b GIT binary patch literal 47104 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 c{{0WPzybAdryr1i=j4BQTmD!5k8FYe2LN-;

    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�jINv&l}ByRP&6OyM%U3tB!3bR`<%{-%Ar3M;28XGEn@ zGt>`FM;p*t^b&=Y*OfD)a;Oa&h8CiI=q7Sj(Djm{0;m=G1?@tQk^DhL?4B%+I-=?5 zAbO3yuB6A7Lp{(0v>fe6f1wX3va+t18I?v&(9h^sv>F{ow~(ibuAByyMIF#Yv=LoF zj;gv!3RDWUMPt!AbOF6aQPp(4+^8n%fu^D@=nDFTl2q6A3ZaImADV-9qdO>G4P7M@ zs*Jj!sc1X8fdXslD(O&p)Co;Oo6$Aos->%>Lf@lyXgpevE}_rpo7%cw3Dg=5L(9-{ z^a4fJ(N(@hbx?0K8|_7RQM|gkN=8%>wL!ztVsrrAMS=Bny_BdJYJ&Qs*=Q%ajy|K9 z`nqynR2%(-rlQU05_*qf8c+|_Mn9pcXfwKkTn%-VG^jl4f~KOK=nhKINLR^*YNFm~ z9y){`qR_^=N={T8^+EH{LG%PgG|^SQMfFgBv=ALZ4^V=px=JQg5p_Zn(Ry?Ny+?_f z>3RiGL)0J5L%Yxo|Q=Dx+>_D%y^2pupC;N;*^?bwZQSW^@g?+UP3DP!ZG=4MvO5 zA@m3Zx7GEspvtHVnuIo@OXwr|<_BG`6l#YiqRr?}6xdFW&44PS?q~+uiyokO?RAw* zs50t?rlRfW1`6z;tE5BaQ71GBZARBnXh&V81nPy>pnE7uCq1Gn8jg0NHz-4AJ)$w1 zjEW>zoW9Su% z`B7K-4mC$3(MogndeXCo~1^M0Zhe4?Q*~s*47oC1@AAg8oL~Kk0fIQ7O~} z^+r?BI&>U8Kmk2<$sEE2lxl zQDf8x{f0K7bLb@s?WZeeMBk$pXds%04xmRUw7;&G1Jy*m&@8kU-9rfm=qg!IRn#3# zKx@!R^bCaz)b%oRn=z3|<_oxjTiI$^d=qU;vsq1A$l~HFj5v@h%&^wf9l&)6@HAaKb zB6Ju%L1CkHl^m!B`U(Al)}hnr1qvIZ>t#U|P&+gVEklRV1N7BcT`vtPh1#OAXdSwM zKB8pfbiHDzB^rrVp)=?$`qE$SCK|6R7ew_@Pc#zEM(fdG^e1|a;!V)YNQ!cx(x^V_ zjE17=Xa(AXE}+NAHBm1&8f8F*QFYV?^+ms+C1?jaj&7pAQT$)@8YD&8QAtz>wMPTc zuV^XSfli~>DB&c%+`^~@8im%Pi^%v@k4=fnppNKQv<=-vf1{Aex?XBj2-QIC(GWBf zZ9vD-U1Utr%ZNsqQ7P06^+z+&R&)`)K@n5+GP0m@s5Kgb=Am8aJbI4ePt%oCqC%(^ z>WoIAg=iPLj9#OV-}ExlqT;9-8ieMfedsm{n6B%kM8#1vGziT{`_OIl9!1R1l{28? zs6P4;jYW&mZgd&FLP0b2GE$*Js4n^$%|JWQpU62&*ZT$)MNQElv;gf#_t00fb-gsG z3~GnQp>^mydXEy%(e=JVP0(Pp7#%@Rk!P;1k{IPe6;Mmm4^2gD(GheTeMZsq^wP4R z(x?gQhi0N}=rVeTqUY<%IZ+kV5sg91(P4BSeL|57bmfewII4%bqETo*+J?@e$0%T- zUPfY+6IDR1&;T?YZ9pf{Llm$`FC!_+gQ}n(&=52WZ9=EeL*!YkmysCdLKRR;)DKNX zYta$(2qjpemyrRLMQzbYvM&1KmdvD|D3ts0A8_wxHW6WThUP2Q@*X&<6Au@~qNh)1%6$2bzWU zqbDeGwXTvMH9^DCYIFe^YxLM8C=aTMengYd@8}GAiNe?F%2`oG)E$5`E2lsOP<7NE4MnrjW^@`oLIIofGQL3tP+im$O+}l~ z1@t$H+N>+*L{(8|G#;%+C(sKNe~Ye{4CO(UQ5!T6O-Jj|adZzkx9VlYpzNqDYKD5E z`DiOTk6xglZF(7LP*GGL^*|HRN^}U_Mvm>eazd09l|ju=A2bE6MMu$HFAMHe!(P!k}qnA+#wL%lnHgp$-?bT!R zp=M|d+JtVRpnZC5Zqx|%MRU;~=srsDhpv(tRYqOWWV8icL(cuWN(xjGwMOI6Msyto z9?(@XqN=DTnu89aXDIrhu2K*+L*vmN^a`asq{miAL(oQaAH^KjBg&v&XgRuuLXPMW z`A{1)4IM@wQ2L{KY#lTLZ9xxF!ee?w8PpRkMMu#!^b*BAuB#+Q*-%MT7j;B~(KNIQ z?L(K)Q}hAFKcUwkAxe+(p)#lrYJ+;B5oj7(ingG`=q55wvMwk$s)E|15ojUWgRY|w zDEgFMMs`#I)kE!3KQsZ&M;p*VbQwKH#%aCWFq9nSL?uyu)B{aKE72iz8#&JCr6okU zP$kqB4MB6zHgpL+L-Ee)Wu!m_QBBkdjYJF3PIL*qLc!3P;WFB?L`k!*aclB7pjapq48)9I)z@K@Qb=$HdGmP zLgUdIbPByd@h<6lsZbGAAN_&oAtf~Yp?hDM-8Xg9io-Xq@?y^LI_ zD(ZyBq7~=}dVu0y)%8-LVyH3df(E0>XbIYij-fx%3*@<`mm7uBpuDIos*5_HfoL*X zhIXPe=pOorLa*y}NrApaWl=-)BN~q8q21_D^cf}kQ!gzqs)@RxiD(Tvfu5iQf9ZPZ zP*Kzn{fwrf4d@Jdj)HIK%IQ%l)C~1UGtpLb9=$=4H+AJ4s0!+Y#-UZ{IC_GDZs~d% zP#M%3^+z+%W^@j{K*6_l<#eb7YK(fLsc1bqg`S|uJG%0Bs12HgcA-Zo`mP>Z1pR;} zqdn*e^54^Ai=j?v9y*8O-q$1YqPA!TI)Pjd^oSg&Ihu?Pp^qrlLp`=C>W@~TYbe1Z zJt8k^i6)`F=mkplSdT4_dZESW5{myskI0XHKr_&BN&gXBMK68pD7`B4MZAI(Px&_fjb zN>|B>s-g~PELw$5pl2xbwXT;1RYV=oShNbAK+jO<8(l9gDuJ4yzGynyjLxH1DC}=t zITI>_TB1Q{4%&wvp@_G-US8A)4Mi)_IrIsoc&DqBL7mVPv=iM$;qUd>0;naLfVQLi z$ooN$EreR5U(inU5Ji2|W4}f9(Ll5Woj`9;qEEU?5!4cmM(fZeqL(5;t|92G;&&|tI>9YFU{Jo%5wTK~RddQ=wu zfJUR0=mffo-lDJoT{#mfgIc0NXb#$euAp})Do|I>jw+%b&~UU6?L~i~&nRIWUHMy7 z4Ru0e&@yxo-9hfSy585Q5UPiIqA6$tI*VSSu&;FG%%~h{gNC75XbU=ro}&cubmi2j z2&#v=qX}pQI*4u|BfhSj7!^W|&;T?a?ML@f`~je4NP=pyvK>V_7hD=5UP#}+|d(IRvi1xM-;g;5u@ z5M4q+QF=sf)C^5PyUVX!bv&ik!BeJ3fXcStCj-sb1%&)6tN7c}e zXbRebt|B8wSNR$hMa|Gyv;#dsi4*E7Wl>MG1YJaN6X_ATQFHVQ+KXPIw2AfDCTKc3 zkHV7Z`O2U{Xa{zC0?kER&}sA#xl`z6Bt?Z#1Jno2L_5%RWTd1XDuf!K zK4>P|fo`JssdT;Us16!{mZH<>14^D+S1E%!qiJXldWa&^=&>nLanuTpLaWhP^bRFX ztLqg;&CoEk9Gyh3kw2ZTk`FaPL(p<`8ofhF)9Wh5Q5!T4Z9rF%JA)pZ7JY~6pl)a! zT88$c8|V}AWz@^aj>@A}Xds%2en-dAedNxhD7pHQN#x^g~L8}&ew(FSx5y++<_x?Xlv8FfUH z&<=DDg=N=O@}eeaB>Ej)LveEGu~|?p)E_NHd(d_C0Y&H3^|GT1s0|u|=As?wGWr`u zsp z2R%m7dG*-Bs12HkcA+OIVLm;!6zYoRpyTKxN}FGgt&RquRp=@TD4<7VMfK1y^gH?s z1r^j|^PpyE9NLENqsT&fY+=+2{epI($H@Pk9$OrBMAOkh^csC#SdT4-dZ77eH@b;D zMfBK|s03<(hN8vj5PFCb6xH=IqVlLc8j9wl-RL^{i2TKLVQU}C1^jog`CB8 zy+kMU6^%iQ&^~kn8D(|lL?{ocjyj{UXgNBB?jlb)UHNNN7&Sw~&~kJVy+;1>x?Ta) z2n|Au(NXjqMOM&NGNRI`8S00oqfO{6dX9oB>dI+RanuO?jHaL!Xb-x89wS#Jy^Ls- z0To8oQ5)13{eqUD9q0mjj^b6;%T12*qiU!f8iHn_P3RPQh&)yFGJGftDuo)N?r1Dp zgm$6}=oyMzRWB_W`W970%}{UjD_VsPq8sP~@>bJJ%ZNB!qbY`A}ul4D~`2&=Rx@T|iG!U>&`*#3%o>g4becf1f4;jQJVU?N@dgwEkGyGdz7Mq9$OxD zM|02-bQc9S)MHbkVyFq~k7lEt=sNn05;xM7^P@WGCo~Q1M7L4A#=1&oR2B6=GteG% z4+S;RRkEQPs27@r4xneq*Hl;e4z)yM(MI$qirY+&&4Oy8zGxBp1KmUMn(HbVPWM61y`^Z_O7sH+r5tWgNh-RLIrbkS8(q7tYD8j2R9L+Bw&(3N_q2x@?Op($uRI*p#8pl-Ty zI#d!hMg7nWv<>}<+&}7isZeRu7L7q`&{^~rCG4*26-15DKr|C=M_18Dl(2`cmlxGS z-O;aTJvxhCp@^S!y=>@v)ExCkGtg#q4!uCZJ$2=Ds03<^dZVdmJvxWpqa?j_niC`8PpbyLMza5^bCdd(e<*SDyR#Ziguzq zC_!JUpqi*RnuiXdXDF(lu96=$Mn9uD=rDSP68G0tN}%>=GTMb6pojr_Y<|=XjYb>L zEfhIWk1c_IM2pZx6mO6okq@;+)6p?x4AvvEphjo}+Jx?+$RT=cQPdI5L`TsFly;~d zTLTS3YtdimJ&GQt$L2tlP&+gNEkgUy4P*@0^%9{xs5+W`++*yX?lKIcv-B06p|o83 z4w!wtq_3>m*Yl*usAy`G^wl;sRn*wj0#Qp-LkGExAI-5_q|ee$Q5CcAOaHRl8JTMR zhUFbfJVN)CMxD_#v===_VI%d}Y^WCMhnAr8=p#xwN>{0fI-^DCB8op+kI0MKpo!=p z`hZf5(POKlVQ4M7fx^e?5&2OIG#TwjFHrJvdTd2B1g$_P&@+*BEIs1`jrQh|?wr(! z?Hi9mWNKG)Y6?+LQ`t}fQ9rYa4vIU*ynx66?nWj35tUcLVWG#1y$XdTCXgTw35Y0Eo9uX}ybx~xEy)Ux1_cd}&)KkMy zQj`l7K&4O>kyWoTeVs+C&E@{*qxH0qVQetxv+I3nd%tu%`pPn_{W2WQLaRj9TJ7gt z+b4b25j-Q>W-j-p$l5PYMOMAIzi1^B9X997DmrN@FRFkViq4x;XI?jqtERe2-wjj! zMONieXrAbvIdz5Tk*PhR7pBgN-kQ26vexgN=(E}9niOcnnW?V3YH6d)^E83<)i4z$ zvd)d@n(o-KyN`H`Aag__nQE;|9%Qfm==6pWZq9c;iDCFmm8YIP)t0>mc3(Y4v|t%s zMM=zheMKou4LIS6l|453dLy<^Rkqe(C{?QcWW;Wpx~ilzt4x%s)*iCAcaHRBF{dsU zuYT2QW!LjbpH(Fl$|EXo zjwr&2vZAVH-@4YGSk;ie`evWnFV^-pW<-0DbspII->KYFDmOKkYwN@teVw#*b)a6W z+TUo6VEz8{RCUa)Et1ZDMzn#zClmFX$W38-9Yjbbdd-s25+w66Iz0PBFFqdJU z2lmn5A#0G;yb9P;?ISa$sbO^c$5~>JRa1NY+o=bna({EGy)O2-R-=o@82XQ~_I!;w zM)uOw>*Z*3gnbs<^}aOLKAWyl@14kc&IC=?`qHbxtKs?_+I&Fk07@idYnWHZOjOB> zz86h2*R-ipAnKwYRtJOZ&>cPUe()2h8P`6dg15 zsiemWW=M+9P^v>X_)Wsp}%o zEcN>KpReOzdcCx-==N3qOV@V$)%30`%{s%rv_KPxvdM||2Y&r4J8 z9a?|M2y3}tTECRj0*&VXSlXAWEE9+6wr%dFQ@)Zf%(rk+FbXXp|37TJ4J?R#qvDOuZ5@CzgC*Z6-o z*4mT*@5>l!u4!pm#yoS&XNks`eeYOqpP6#CHT%Ykth?*UqFH8N{^~|--z=uiL-v|3 zmcB*ih?SyMrtI~z=QCgZ%&GRaZIBT)%=NSP#yfE)~RLytD?0Y9uPnfdT*)vNY)i0g9_A{XO*ZOS#(krog z-8yGh4wHJ8V$j#fe#KVXaorrD-Y;0Mbm?V2>lo!hB}EU+`Kq8gsENp0S{F1(WK|iD zW{O^#RpyJVXUYzdb$vNb-z~ID_WdVw#53j#m>n3~7cH`?WEEL!pI2l(&kKpHZR?Oq z@3m6WXRX1BDz4ZO6&YI#HAUS-)-r~PtTp}8mD)Z=zsh`ZXRFs$`?bd&tB#RXPwo3) zbH4v?d)%s`_PC`l?eW#JF4iYDYTsMecC}Bv=5p1Zw50ZKQnODT4@>qjviI|sj?w?z zQYf_bL>V@ z4fE==AF2CJ>p62;`Z}2NT}4kt-ORo?bG4G8T&SF=uQ^}KWiDg5shX(7O5OJ@y4X?o z)t9kj%@IF{V$UJbWV3HPnkTZ>Pu=fY>#XjEXPEP;d-=tt*2sL;R_+s7^*XoG_w85d zdyX9Q0*!U%Sg&ZCsk9=iN=7MgK5Oh? zG+A`soNpQ0E3)d@%RM7~SIznEiEf(uD6+OZ+5AA`zS);nWUamZZX&PrSzD>zby(NQ zQqpIg&ox9(&9U}tlzo;old0D6=qj?7_A?rc#-Oa}^gW^d&c;6f)E)P0b7|^5lVgs$ za;bZC>-efW^Y~_;y5qKvbj4LJBg*WXBg?R~T9nl6`_lPhpC$I0vr|T-HAj5u&fI>- zV!xBKucu#nFJ!-mu-{?)_wN_%cLetPfd8F)e*4{oefMv_udv?-sB4(@-OfeXLzeD{ zvYY$LzDoVy-rw7IDE6KHm+mqg3-lGvzN5A8mh5|A`_A`E_q%o#_4;O=ssyVg1$U5(Ph-#UA)6tjK%3iM88->hk@vz;l*!9~Z zV;h)N4vDO@_@u~s#$Ob*G^g74Yjzd&+G8D=zhu77=6tV2JxqN>@fYeoKT0kdV9xg~ zDvjzgpS_F;vQMo$)y^_?q&c>S$m$z#Sx+5E-#F1Yb3S#|`_+`XE0}94S5Ez1ku6na zu{m|BjJ2*v_LeV{zUAiBbt3C1*kgA}-&%9(A*P;1_I$SNDt2Xi4eaIG>tes^K9tJV z`n6nb7@N%HK9jyZrrxn!yRY4DSM1c$@_p!0bG{z*#a*Pg$gUhIeV5Jo)E)9)=&mVy z8Mf59VXc+j_a&u}%GP{pU95LDYF+-h$1^kEx1z`9a_#-{-%tJ0k+IJgTVMK4xRk7c z^_{T&ue&#=uMe7nHlu^+I(m-cF4mP3qfDp_YKXd`F=z?efi9w_$hkx>Edwfos-sTm z7qku?Lw8ZwQe8O(%7ZGRrl=bliI$>$=qCD%{LA#xvZ6|;H5!C|L5tB|bW`-wJj3pb z-dX2bd3}vgS9H%@b$`&%XBb1wt7z{V`fRT(&q3?l{dKNk#53nh&RDN}H)c(JCY3EY zmurQJLd_9T$UeuDNT1J~np*UYsjQ+jrt*j~nJOj9VX6jdAu43{*=uUAeHWQp+??81 zRL0aOQ6*EM-DFEmO_aVirh?`hMo&{Sq|dtkEk^b_Z<4;j=6riZV@;`VX(P;U6%PJv z7}LzYM5pwAIVtnaHv4XftUdHpwAAc#tk75aXwho3FC%>gL|e_i*79xNee=jvps%55 zpE@s4U zS+5*tqJ8bOkDGms{m)bX|Ga_~m36W9%kT1wo}=bkg~D6|TlM2}G1)w*(eR17sh zKOuD=mfl?FnbKz+!E&wiakI~%Hk@G_WIpRy?nWojB~ezhp8bj39j3k#S@(6GHM+{C zf$rFP@ukmteuRsxbxDZQFd{eC7kjPj=hm0DLv3YlbFGvLn948pikh;ww=zpp^-7y( zvH9t~Df?G6?Pb1l)T?3YKhM`)Mp)mz+Es>1pS34vAiJ_%Z-GpWeQqK9tlLDNeLPeZ zYd_ojbiee~GuPBUJMH_#pAZ1hDR!JJyWq0882 zs*{Y^W2(F8pegmf>^M4a${t}?`O;Oue*X5Ade$>}3R;g&qjxA`ogR@3)k5t>*UfeL z(s$8aWvX=^*uRjpkAnI&!R>!LcC1_pt+A6)e);vpLvw_E%zLv8r`-DlnXl|4>086t z|2)F3Y=3I{rS&@_-?LlyNLSEJ(Q9+9#>yI4dPrZyL4D^od8L+prP(R-SzGxl>)b%9 zSbcApYVU&#GWCPGw0SZjV7_|&-7X3>HAI#XV@kanOJ*uqK6$e0g|auAHqw0^P&<~Z z_M|o9$ttg8#mkE*>cN7-_F?Y~snKEu>eu$HEdf+e-@ zEvbEPNgWwW|NT+0_xP8N$1PdsoaTN}`@VoFb!1AK`pDFX-{n5m?E6||jhH;oFzT3n zxuwr~22>VVXHG{n0sStr&bl+`g_2ptw_cwIrA5}ck(#|>AFV{v*UTKD&TQ*y`&3?C z+M9j$vqv5Cu4bS8tWaaEZ{qCv?5Xy1+Lo%^*Qz2{*1@K}^tz?y8*5IrUtRw5>&KT~ zHSE`lF0v1-V?GF}WlS=cF>CI*pdtZgieAYUveY)40Dt(r6G4*?q^%_+bwM1P+))sw`^FH>| zD5g$BOVL+yZ8~l)ZH@F@GW9>7dH=jV|M%CwFRj&o|7`rybI`t83}B1?^H$o=Y5R(4 zUr+6QU|(5Vjn?0t^p;;c+%or&eKk{e@DI$sPI9+t9T|J-ZMoV$GpGLN`RuX#WINvc zV;S~T`xEOg9V7c}Izg2i$X+YEp1nnHWWJC8cDZY0+m@SWyIO;_rVfd$`-pqUeN^`) zM7dE#)ExCk)6i;k0zEyEB*`?Aq%x8uNk)<+Ns^2tNxI&9E&KPo&;I*z`QPVx zU;pEF9A3w#?|NQ)t>0dcdqnCjQn^SIM0!D_cSYJJ(m|2ZI3J9b?HrLV6{)vKWg^Af z)971QU!2&JtjY1ox!S=H z8R4)$kg~!QKYEB#{8^@G?&X@4=O6LbJ0~0>Sy$Pg>?%JknSN)wQ7a#RTBJ!hKJyJr zX&xroUoC3U=awT3SM3l}DskKNQM7omn*AcR) z-6_(8BFSmUy<1L0PWK6hC=KWDzduAtHo0`X>HF)P5hI zID6VIYVob4Je-%mAMG~q;(tpMejEbcKZU3! z&jr?6Pn{clF{yNh0^cP*BlKa9&YSEgMt%^MMk;^8J!;&3UC0j!~81s+eT>V6f zj*OBWU&%2mZ&}K3;Shg6U3o+%=U&cpe7f!n@nhDj*?*&DtIe3BB#$Ehex1gbC^a0* zsSF!^3av=dw|)HBCq3+1NG&5w3;DJ``b?xJU8AG*AtF5~(gKk_5NW4K+Oov3DI#Ty zlrK^jkxE1wA<{IFJ`kx!q!ZsxOryO>r6P?NX}(AsMEYJNYk6WU@(#?&qSjQTVv%kX zX|PD6MS4r5k45@gq(4Qfy&^H)Gev49lDzZNS=4S2sZ6ACA}tZ=Gm(B0>DZNtshuHG zOOd*Zbh}97MVc?tMB*-#H?+73n6ChKn>)q<2L6O{9!fiSb=3(hVY&i8M*13XwL5v{R%% zL^|oc#F#G-sYs-|M0!r76(W5tlD0ZAmU<$!6{%FD$3&99)c=yGRf)7wq@P6c-%m^< zQ>3OM6^nF(NTni;6G`4TmG>Z@7hT^LX`@Jgh?Ko1F$eN)t~@W3Ph*@*e^J{hk8_Hs zMQ3u!uBdmX>seu&SVlTGOb13Ae?3*#f%hugh1Y4eJfEmtBWedlZGfny&QA1qzo_Mk z+LNLtr!glsK59&6b&0cbB$^z zi}B6)E>XK|a$*`eVqThw{_;glPFD_lzF1eCM1L2rPfWKpDVnaVrM{M!S`$9YqnGG< zx<<7-|45AGWVVf{7QgoyEm3^$iE8b{8oxw*GV%(>W9${@hkJ$Gqb5;n9oA-%3XbY3 z`;$j_^XV_Tz9CcmOgK7LS;zIiXs>;X{-PwG1CZx4@*N3zH96Ul%)5*wI+EEglJY^K zmLXDsNc}|`E7Hp%eJ+wb-jz>X{Yls8*)4CarF0J0#tEceVag&64AWVp@-Vd&=~B|j zuonMh#)at$YE#0ri2FU!^I6VA-qv6J1^CCah+K=(BLfAEaZnZW{FEVU(m{yRsh3PYq_L6po zHRD6B*3O9^`JOPUFKyW06u`28uA78YU$gcGnVr|$phqNI~at`FO#h;ao_9L0%`^Tnm2-)8SjAd(B>q6QQ zCi&b~A8Nb9+C8M2Fij#I2-6~w+R}uIpE21XPM7|WYeIliN zl9<}*B3&fXH6jfb>F>{79vA)15NU--pNn)vr1Xu6IcOtNFOlvQ=^2sU7U^e^Qa(+L zO+JSMunDAH| zNU33xPXX8ZEYVVDkfLkS=a8bO2|AL}!y$T*qHS013%61`dS9sEI#RRn*)2Kjee{rRpOk(z{E4~bg*8fY|Er))}$IZLFbr0D8p{Qgmt zHgTsvYAr6NYm}}fMSI@uV%T9K)$luQ_lM_T6GeYBNG-#8iC<654^#YY^1?9vYVihb zm^@oit_{-yhUgcjcSzB(=oV76Hg=Ip!>+%Rq87>eJkhl_DeAg@2ES|+zFjE$lb=Vj zwn?rlxrQ1uzOry?9mO=_%W;2Lliw9x=o&pMeuGE@Nm0A@04W;FMADdW*yluAM2eQ} zUDA_b*Uw1Nnv~C2@1z#3jXz1xg#F2OH`vVmqwx1tHoc?#^%QFfM^(>-{mJ%T9v_^< z5K-%RmPi+fbeTwU8ghB#-&@hTznT7`xtCqzYv{#ry2;Mt|MfY%=)KmzYL<8KA7I(u4wplIOOB%!eTz>QOD;bTc{ltu z(N*3TPxj6E4*f;j#%7TYh;;lHiLQ-BDiEocNOy}gK_vNB)ND~pw*9>$x^5BaXOXNe zi8+wlX{M;jwobm~62JBzy#sR|{Y6`>d>i2sQIqei{Oc1W(UG7$avNHaXcOb>IeG>+ z*_QaPckH5l=6~ur+W0-vcf&0weh2HLFy-((+~;AEcRb^FP`?Rl@jIS-!xX>Mx<5?a z#k%@G@7>Y2hJ4Ca-W~aW_f%|j9Q%KFoyvQQ$)3oQ>o3{bm1{EIHbt%X|9LC7a-mOW0S#iZ!d-%5(MwUfTI{@T_$lAqdOw$Y_f)z@^Yr~t^4*at(KXrq)&CoJReuq4aKcxKrOXvc-uvt*YW+mIN2I4kS}f9+ zBK;xKiQ5v>$P-C^CtodUr6NrbsY0Z6BGrf_?{CSwTD87TOfA`6D0#;ze$^$~n&gvH z@>;=9T&?I3ZY9Z{mv6*0io>prNxi}(j~V3AS97}F5_T;lMeWNCBFUCZ-s#E^&+8c? z$up&LhP^!;-y~9WMdZc!_`;feX0b|4<2zE+avc&$PFG%Qk^5zx?TH~8inMEH;#yE^ zQCmSRdOKLoy_`QezDD9nN;yOkV~LK;<(T`4F_(!X$1IPf9;0jY-8fOCr%BPfxpTy@ zi$q!`lANpes72pGva9^o{e-U3r?rK2Z@6|3k{$|E{O#|@!zAY_{=QoDE}lGll2_2= zxrX*lV$8Kk(I*rC=8WcEj_*X#ReoB@uJp#|>gjM^cOyQGd6Knq1Grs6|VZY+mF$UGaA$-Uz1_KemlhvUif?8%zI> zC&f52kEZdj$5+u<;>)%y9CI#jC9e+CSmtU&m?n|F3X^<~KK{8y*KXu?Ah(Sd#1h5F z9BnVjzAF~dU-aGhp-4ML(sm@eW{Y&ONLPwfB2s+1(RF3HL=Vz6x?AulDcU;a_8h;T z_kFl*Tzx5iB={Y*X#VzzBwJhgbf7#M*1t{6RV|VkjwODN$`6yA7dd}& zp5=1Hufa!iFRzEqq!o?kC5*cyWJjLxm(o)Ujn^0;sv$fq^snoRaKrF?Ev zzPlu!`IP&Se6LczLn+UcWD6qaU>5V79?r``Qbw5M_7@)_dIDRXvB-C!bR~ zeD6~}11XnR?&orO<#~WSJC@H`%6CiUJEQ+}$&>BfE5zrvMWjDP%HEmyRId=}E|JEF zR4LL|BBgwn7&c#|8$=o@(hDNJE7CV2ow_SAmjBGwB)1p2Cgs*7x3GV@PDia!{(7rN zKJn4^o&S2(N-P8R7bk=lxMjYwr8 zJuXtRw&YpS^;MB%`?5~d)*FdA_);X<`ur^VGxj9%EBK`ee-}w8#(vj@DtSMtI2=|_1()D3F`vIU+&E&4wHcfQ$WTf9KDD*u^QS$@YaW=1*IT{^X#GfXO()l7Cp}**C=kxm#XUsFJ65rxMO=4c+*FdAK zq>iY0P54EnaIQ|H7IkeRy0#IiNF@2zrF_>i{{CgOlyZ6HR$RjU)wba@ZeyOKB#!`Y zWX#dFQA)Zr>~9e%`fckiq-d^WE&b<2S6P$q=*YcxC`Ve+u<`3E(Ve(t<4acS%rv4; zZ~!S9%Lr2R`$&^XmxXis3hBx)C7b(yT1z$u|8&@Y+Mj&hcDY!hS9td0nsDydh}yRz z9VSKFTKsQ2MSo8&*)Pp|`x5Kw1X8rFlJ(bJbR9^F#(b|B_7PI_JNZ*d*N1bpWJcmQ z;^$MlDXhi+PDu1uI#y7No*|XnL9*H}^cVeY4%y$oQ)~STS7yU``Ol2+pUz9NH;dy> z2S$HY$k0sh` zza~Z7!9J0+{fSx%>5*_O@oSM$I!)B#S0JNW{Q6{+&J$hZS0$sG{0-e?znm+(%3s*c zXDrb*Q2A@R$!dl4_xMq3BYxdBYGbSD`efKO*7s*Cm#RbGnxPR)tCaO2H;-(O$Nl z6#YWB{Qah6zwRV|)9K&&)uw-E*c#?^eYhOIld8j1|2KZoHB6U~qF*wRpH{NBNaS1b za$SYncsQ1kj75Dpeq1+(6zvP~Rw`Q0Pf$C0jm!7I*U&Y3cRks>B>PmqUp2wdPl3!to{B+LO&evN3OGx>1WH*G97b>i?ejjStyh{I5he3FqKa z-inHr{6_kV(g0F)7ex-Sl-fl{t%GF!C99osh~GYro;?@)WwQR{yBYG?GI_mDc9m!J zvTHm=cNLysYL|p_8n1NdC_o&@+RIT1&j(Co$CHvfx)sju4KjXVA9AB~_{?oN&TV1j>lx(^s%xU>Q zSaNx$Deuh7d*J`+Yc2not3oSTw&CHjRg)e+YAM_OnfP`|*0mE|pALt(mK0qZiMPcw zj;i&e>kCJXd7T)uJd2iXj=Vo8&y)Y1A--U0FCR4ra%yWIOPskTYi;BE;A`Qq^^RD| z8(~Ve<(x&=s6W~Ilv8`>sOcu#!v5=VyRA%0Rh46vCs9>mil*4g=o54*k6^rJP`NqH zq|zT%h2I{ha!Z;`WdN%D%i;f9(_AV8F+M(z%AaXI=?JPyT_s@bry!5mpLh)Q7^+G= zr55%2Xe(c(A4`23s!E1ZoBF9}E3ei+j`~7Wl?F-*_0!N+eye{x^@FG?nMx}4)6rH= z&NzX3T~w7UC5?JRw3SmbPNZHBRi%+qhx!?4D@`*_qTUQuC0j|SekR&VZsy6<&p}nm zVF_Z&S!gRAGf$yjh^o?0Xt zz`WZ^|I9O~+=8moin->kY-C-XeirqEs48uk>zHy8+RE>zpH2M`s!Bd{9aGw(t<=jp zhkAWfm3GW^Ot~0sB_r!x>ZhWrT)|x1N_N(HRL(?I>7q2H&nwYZa7`GQ5lV@@)S!GQ>LJ;Jkqc&^)aX_PqQ>JWh&arH;pc)z5`X|8Kph- zX=p3oHoAoRPE?g=l>+M1(N?}|bSd>+s48zN9jGrwTlv0GN9wy#Ro+qxsbrneiAqCM zm1Rm1m7Fs!qjDCi%G*jYmBwdWPUUP=mE}rjDn(~pLFF=3l@+W@TPZ%{N-CG5s_am@ zQaL5}Dk}9*Rdy@gn1>(GR!+^mntB6Nl|4##>OZ2boR)hH^-NTi8l?x7({rz-l7*`B zv(l4Fv)t>bG)Gn0uk>QrU(r@tp^~3_BbBzO zDq5^Bed=f{?Q(CTelgOH#QIS;(N@~$-c0=xq&(&N3UWTGO50c^xgDy?#j(ZY z_NXeC#Fmf?P*pCCEhTqARp}U8MlM8E=@eT|E<#ngEVhzdjH+^Ztcu(jX`^DR$X!rX zu8gh5Yh!D$XKXF?>rhpC$JUW=Kvn4zTTi|bRi$ri1NkOYm0M#Q$pewrELM%T$2MVU zY%}#ckX9?Ug?uN{QpL8C??P3%C$fj-wu5{hs>;%sMScru-(n8F z9rLIxN7}AfKwgQe@=mN4xe8U~-B@k%DpZyCVkzX+s4DNrQpsyjRX&KNk=LTCd>E^P z>tg9tK0;MlAFE6L7*%CMtRDFjRF#df4DzR_DnG;;koTaf{20q5??qMlDV9a9LE61o zBl12}m0x1nYvlV{ZBM=k`Hof# z$Zb(oI;b7U9Z^*Z)k1P7RFxvNhHzX2RFx;yf#k`^ceh$Xo`QT|tEJ?r$al0lh&&DXURDQ_r=zO8 zs+QqGbqJN$knLG5Coe*_XLTqpQHN1^6Zwu-hvPPN1b(fKq`n0>P-AuorU|<+4ze(2luOU z@mF;o9#H4wZ|VX(s4m3c)e1bMR^lJ(Vmz!a!9Ufdctl->inbhM+DcTlD%7-9sB5dy z(AJ=-twl>)hqksJ9c=@;+D7!WYV@^D7-*aE7;OvI(zfEU+BU4MZO7xZ9hjo+#N)MH zn5yl@6SO^;rtQTOwHmCW?ZcC_{g|#Dz>~FuSXVoQr)Y<fza12IguF@Ek1@ zn`l{huGR?iv}`<2%fY5vV{E47Vsottp0DL$3#}<$pf$&qS_`~TYl*G2R@ho=gKe~Y zyhv+@`C5Bys}*27tpi@H6=Hj>2rto!u|VsLmug+GgVq&0YTd9<>yDkY9$2LH#LKi^ zSgiHN%e6k(S?h~eX#KE@)*r9b24GihAYP@FU^lH4uhs@(cWp3Uqm^L~Z3tegm19qB zC|;)x!(Q5Oyj~lDy|s~egEk8LXru8)Z4CC+#^O!dIP9m5$D6f@*k7B3w`h}bfHnnh z)u!S=Z5rODO~(>#Cf=^i!cuKE-l5IGLE2orQ=5l_wfT6LwgAhtg?P7CfkU)PyhmG% z<=PUwS6hlhwPkppwj76PEAf7<3WsZ}@BwW#j?mWNgW6ggsjb6@wDmYj+kg*i8*#K& zjgM%XaE!JYAJw+tSZymlrftJ<+IDi_=L6xCuw`}Nv#GaYy0pi zZ9h)Y4&c+;L7b``!e_L@I88f(&uTG^Z*7eoK$)Q#I8(FmInBXYnupJ80nXNH;R{-A zoTH`Si&`qq)za`Ktq#u9((z@jF3#8L;VW7OF3=j_t6C;5)Uxn3tr1pe*|xOH!?)ahB1J`Li@guDluGf0w$66oUp!LO1w0^iz z>yMvm1F%{fh@WXCxJfI;&$U6gSsRRBXl1xX8-ibI<+xQFieG8NaGN$9zt%?Jc5Nhn zqm9BH+GzY%8-qKwvG|=f4tHte@q29|?$##Z587nhqfNmdwW+vQn}$DW)3HXIi9c(z za34Q3Py5dg7}5S~bMaSg9v;x<<8RsmJg6+3O{_FvcVRNcS^x`n6d4rb~eo~{R&rPsoSdTnf^r{EcSDrW0xc&1(lbM$mPORtNK z^?G==o`Jb~13X91#3p(co~t*)JUtuF({r$?-WZ$dx!7E9g6Hdb*g|iL7wFBgrQQNB z)LUXJy%o0B+h7|#A1~6|VZPoT+v)|_PVayh>xI}}FTzXoVl2=*gCu|ABxxM!?2e=9Iw|$U~hdS-k^`dKKf|9Q6GbS^|5%9J`VfoC>@9pNY5Yv#?a3jd$pCaF9M1@6_kvV0}K`r7yrT zeIeehSKtu667SI$W4XQr@70&$P<iL(l_A4`bHeBSK}l4CLE)0#z*xnI9A_^kLlZRoW30&*LUD}eJ4)Pci}{RH$I{7 z!AbgFd{VE$$@)HgO5cxD^aJ>`eh{bXhwvHwFiz8t;In$np#9f5^igK$2F}zid`@?8 zmhR#6dVsU_TKIxq8|UaL_@bVQbM-WQNw0(R^mKe#uZ#2bdiaW-feZ8o_^O_X3-v5~ zO>cx1dNwZ7bFflxjIZmtxL9w3Z|HfrL~n|3>dkSf-U8p!TjDak6~3*v!R2~BuF%`z zO1(Y4qZeS6-T~j$3vrcRgzxFaxLWUw@9SM~jouYM(7WMUy*qxW_rP^}Py9&lh3oa+ z__5vxH|Txw6TKg9)cfP7`T(rf2jXXX32xF$@pF9;Zq^6m7kU|P(TCuddO2>@hvHZI zFx;jO$FKDfxLqHK-{_-ohdvs=)yLpYeJp;bkHcO1c>G?Uh`aSk_=7$f_vlmbM|~>p z)u-W4`gE+(XX4NLEZnEh#$WU~xL==(zv}bwfIc68(-+`DeIfp?SKuMN693Q_<6(UX z{;4m;BlO$ zAl5Yw;VH&ptY;j-`bNy8{Wml`)iAJuVc}_pgPDehryBug8MUyXQ5zc>DR_pFirGdQ zo@vy<93vgiGU{SuqaL1ZWMHn*0M9Wpv5Ap|=NgSL&&bB}j2vugG{$B|E;cus;Q2-# zwlJFF1x9mhX|%u#jh5KTXoanfHrU3<$BT@1m~XVlwnhQAGdkeKMj^I0itrMn7z>Qf zc&X6^I~ZNDqtOiujqcdV=z&E>PrS_Ng~dj1yxi!6osGVDh0zbY82#}|V*qwF2I5sl z33f9|@oHlbb~gs&HAWfsFoxi@MmhF0hT?U`FzjUv$Loy|*xMM1HyER^k1-l=G{#_G zV=UfejKhA$c)Zz|i2aR8c#AO^2N+ZER%0p-G^XKg#&j$(X5#I}EG#u<;~mBv9AwPJ zJB@ib*qD!Z84Iw?ScrEU6*$DG#CwdzSZ*xAdySf(H(9=>8^ z-~yuozG`IRLL&=bGa6xqk&TOt9IP}N3F`D9=Msr+hw7|EFmblDl zg>M^eaJi9>D~xuy(rAzG7zJ2mbij9wLR@7O;d@3gt~NU3`$iXBV|2w2jBdEr=#C#6 zJ#d}T6F)L~;d-Mter)u?4Mt!5#OQ|`jsEzlF#xNLf%utGf}4y|{M;CXn~lNvg;9oE zj3M}?QI1=Uq4@oQrQZZ}5aH^wO3VT{IajWM{>7>nN-<8YTT9=|sx;%;LS z{$NbTJ;oIL(U^*RjcNFkF&%4+nfS9Y3-=kb@fTwb?lt57pnp>D25!(4-=xfU&R9opu4bj%It znj6tGtI;<%VPI~?W6UjB%iM~`n%l6pxgC!)cVLRS6OT7{VXCU47M^B0m}z==x*1@WSqmGQ zwXu*3jE2IiU#@EkJ}o0wU6uGt9l%xpZ*%)zE+ zV{B&TVsoBPRR@mBXgKf-wyvS^a`DS};YZhQTvjbji z7Gis|2rn^nH+*IbH2&1HC>xg3X? zEAf7_3WuAk@Bwo*jxg8YgXUTsX|BVE%=I|R+<*_88*#K*jgOd{aE!SbA2qk&SaT~r zW^TiA=5~DC+=1iGojAeVg%i!)_=LF!Cz*TkNwWqgoBQx7b3aZo58%`0L7ZwH!e`9G zIL$nQ&zdoZ_TS`kr!vDdaHeVDbEbo{Ob?$o1DtKv!WYciILA!E7tK_hYo_5#W*wYo zrsKb9A zY>rFK7WkIg5|^2+@NKgVE;sXWh1m{Qn(gr&vjD5i4*0HFh^x#Ze9tV#)n;dW-|T{G z%&z!>*$vm4-SI=S2d*=F;zwpLTyOTqkIg=~!R(8lnEi00*&jbO2Vk{15I-|ZaFbbz zpPPelvpE>QFw1a@IRw8n%W=}THER{>)@n4YHE3FE z(X!T|ZLLSg+JLUL5k0FKeQOg2)@D4$+Jd#Lt$3`p4QpH5@i=P-rdT`icxxA?TD$QC zYY(Pbd+|i82J2Y+@FZ(LrdtQ_Wa}W-wGQDa)?ut?9l`om%%%OeG(6QZuz_XaX_kYT zmWQWX0cKgXu%T5O8(ArMhLwuhRvMmZ)xjJq9nZ4rVq>cwo^54duGIj~u`;oVm4)Y8 zjWEy3#`CNkY-%;eW>zjXx0>MjRvxynn&Jgkb8Km~zzeOG*ve{!t*tiL#>&Twtag}h zwa2zr0k*R`;Kf!UwzrD#5~~;stj>6;)df3PU9qFp4GXRA*vaaFMOII|%<6^3R&TuA z>VuuFzIcVz54%|X@k(m|cC`lLRaOahvr6%5YY=v~2IDnW8TPP-;I&pc_OyoLb=ENK zWevyctr6JU8i_Ypqp*)P8gI15U|(x2-eir#e%5%r*_w#`tx0%`H5mt3Q}9-6Dh{-! z;ceD*EU{+d?ba+TwPxcT)*KvU&BZ&dc{tdbk9S!Mu*_PBcUu)W#Hz%5ti@PvEx~)O zr8v}DhWA;^ahSCd@3*ROxU~u&uvX&;YYjeVt;LbnI(*1lkE5&&_^`DRM_bkSh_wmF zSex-tYYUFGw&G*fHXLVd$H%Q5INsWc6Rcf0(b|nqSbK1iwHKeXYH+f(51+F3;}q)v zK5ZSusn#KU#yX7CtRwiW74vBSEpBuvGb{sVS{6QMIXKJm@Odl1*;Xxl!K#gOtQ36F zO2xTW8op%J!Fg6XzHHUS`BpuA#mc}1Rs($1%EX0M7QSXR!U`)J7g;%2X*I^ztz2Ae zHNiKmJX~Tm#W$_yxYTNaZ&@vInbiv4w%XuwD<4-_?Qo^l9^bJFu*&Ly?^=bp$|}P5 ztYTbkb;kFtF1W_(iXT|raIMuHKeT$_I;$ssWc9-JR&V^+>Vq4szW9mN4>wx<@l$I6 zR$Bw{GphtQS*7^7H3&CbgYgTi47XTA@Jp*4w^~E-D{B~Tvxei>)(G5gjl^%PQMkhz zjo(^haHlmEzq7{SE^9n~Z%xGA)+GGFnv8p_Dfpu`757@x@F#0J)>t#~XKNPjvu5Kj z)*Re#&Bb4>d3eB@kH1+9@SwF2f43^|kX4C)Sc~znwFLjPmf{g>87lU2jM*zuwX0CG zSD|jNM#El%ro9#|dmY;LdUWg!=-M06v#Zg!H(_9J#$)U)Sj*mu$J*Plw!IyXvv**M zy%UeOcVVi%8&9zJV4A%bPqb^Wj=c|0viD=UeE?6k4`N;W5T0Tm#(MS{i&? zZi8*?e7wkRhxvAUY-<-_JG%p3Y!_mCy9h6_i?P7&jF;M7u!G$dJKEi_(C&_%>>gNT z_r%NWURZ4R#>?$K*xBxjSJ?fqi`^fuv3cwdnVp)&%#oBHr`>+!9n(1ywjeCgYEfvm%RYX?1gx@U4cXF zO1#HjjOF$cyw_feL+xdFpS>K1*(>pWy9$TftMCDPHIA^?;Dh#B9BHq^hwSw@%HDtv z+Z%DTU5$^}n{bT186UN`;8=SrK4x#jarSn6+}?rX?VUKm-h~tG-S~vP2PfHk@kzS| zC)@k*DSJOou@B(W_CcI#AHrws!#K@8g3sEqfcD?!5eH?4ZQxAX!sl!UXW1S;ZwENr zu7xkywQ-J}f-l;sIM+_Ym+U$?&rZje?YcPMu7|JK8Mwf1fUnw_xX{kR*X%}EVQ1qa zI|nQ6#`wCOi;L|h_=cT_OYEljrrjKu+AZ)cyCp8OTjASw8(ePZ;|jYSuC&|ZJ9Yt9 z*&Xm*yAW5|MfjdwjH~U=_`cl**VtY01G^ipwY%eob`M-<_r#CvUbx=wjUU^6aD&|! zKe7AaM!P?LY7f9_dmw&hm*6J56hF5I;TQH`++vpnG3867<+q36S9UpWvxnl>_AuOT z565rp5xB!1iQn3zaHl;Qzq7~SE_*C~Z;!*>_IUiko``$wN%*5Z8TZ;#@F#mJ*4WeV zXL~yCvuENj_AK0Q&&FTvIe5UHi@(|P@Sr^(f43LlA$uYIVOQW`yAuDj7vm9o2`bJ~ zj5*6tb(W*%tVG?ZLc>{wrn4F?XARoUT6COs=sN4sb2gywY{bB+#$%jKSj*Xr$2wcE zwzCzFbGBiMvmK9jc3`Tr6Hjncozr<##kZ%`q_3vG8=q!7RtahE9NuoLYE>Qya6L6g<;O#T+LM&vNQu zV<#QYcIslTQxDH^GO&r$0MB(YG0(}u^PEQ5)XBzXP7XGA8sqs+F1B!*-~~<|wse}} zg-&y9<+Q-oPD^a#w8D#=Hkj|^V_T;kwsYF!#ZCdXcRJuDP9YXJMR=)Gj2)cL*wN{N zg-%!OigkXDr_A zjKluUc)Z1#hy$ESc&jrR2Rc*mHfJi9IMeWUXF8TTGw}{*77lV|todr0=S%~*I6 zKIE*$QO-Ji*jbOGoelVivk}KQ)%d8h3CB8{@iAu$j&ru+nPA$-<3jMJSXIKzq6qUCpZ#7%k5 zF>sb+;q#7zvmFm#Z~~m;)WR2?+Bnxq!Izv=oadzB%T67f@1)}^PF-B!)WcVu3|#0m zz}K8itZ=e$k<$n(oosyF$-%`=V|>HO#U)M?eACIprA||P%W00woEG@D(-N0Et#F0Y z23I=y_>R*KtDN@uu2X=koDTS&Q;4gbB7EN|#x+i7{J`mgYn`t6q0{X=GZepehT(Q+IDX@dz#Yy={MH$TJDt(^oihe^Ib-pAXB_T!#^VppMBL*{!XKT< zxYwD2KRHve#+imcJJWHWGZTMtX5oHkHva0&!2`}*{LPt%2c7x&yR!ffIScU*rveW< zmH4N#7>_thP;r-H%w2}6yBsxlCF*V!8ty7I-PLHhYtVMrqT{YZ*IkdEy8(T7BL;3Y z9^-DpTJB~%*4=`&-K}_>yA4y^?RdPq15@3dc!IkN)7;&7qPqv{xO?#=w+7SQeR#6F zAM3gY@D%qT)^iVGefKbCxJU3*H+C%TzpLSCu7R1Zg{Qj?X1N|VbOUVU*1|K~+L-O8 z;F)eJ=D2BimRkoKyXkngTNiWPdU%eTflb^7c&?j?d2SY-=QhHoZZcBw;`YTW-G12B?T=Tv z1F)Mr5U+Miu)AA|*SLeQhdUUrb<41)I|Q$D%dwX`6t8!OVQ+Uh-r$bFKJG}o(H(_- z-O+fHI|lo?WASEp9QJp|<1Ow)9N-umH2>L zg(KWm_@KKQN4jh9A$Ki~a@XO*?s^>UZoo&}jX1`w#z);vIM&^akGWfLoVyhtcemkq zcRNmSci=>KCqCis!b$FKeA3;6lij`elv{&S+*4~p9=_^k;6k?nzUF3Pg`0(o+(uaGX5;H_4lZ^Z;~Q=+E^(XSn{FO1b(`W_ZgX7b zw!pXDmblz)g)7`PxYEtXcieVZ<+jIn-2zvqKt z-EO$f?T#P0J#f9-6F+u);Rd%ie&Y7Qjc#B3)a{4WZh!pD9e|tMf%v&wf}7n^{K6fC zTin6;rCWwu-68muTaMe@q4>2s47a<(@f&vp?r=xqx9%w1>5j(l+%dSz9gE+)<8Ze- z9)EBr;vRPr{^(A|z3vqJ$(@Qd?lk<_osRq5nfQx43-`OT@mF^a9&qR4Z|*!i=+4LA z-355aU5J0U6?oXK#6R7|c*I?TinkPF-ZE6Z<*0cpQTM9Q@K&MetwzgRgSNL89d8}F z-g@-B4d{CtG4QJK7;h8S@;2kK-WIIwZN=lfZJ6S1$K$;nnCk7s6TDrR=IzE4y**gR z+lwc8HJI-0!;`)JSl2s%r+5dko_7fAdxtT@JA$WrvEyj}Jq=Iu49xT_Jl%6J%k!|I z7hof=7M|hN#%wPI&-79;$4kSrygJy}OUJXlx|r+L!*je0Y~nS*bG=N=^RnkA$Xlvj=j90c)d3adwaw2 z25$uR@kZi}-YD$rjmDe2G1$)=i#L1Yu)jARZ}BGL0B;iB>P^Oh-W0sen~EjgG`!uL zj-}pAyu+J?gS^>zr#A-&dvozFZyuI;^YLzP0S@sN;yqpkmV1?WueTV7dQ0#=Zz&G* zmf`*0avbih#0R`89O13P2ffue(p!TMd24Z$w+3?|a3# z#_Nn9cwKO<*A+kXy5TynJAUN#!1Z2F{MhS-8@%55iPr}=dVTRzuOC)>{qZwz0B-UI z;^$roZuUy?3vUo^@do3UUKwunhTvCTId1cY;@93V-0ls>Z@dw>!yAd;dZTcsHyXe5 z#^5e*EPn5e!` z8ZCbf+WuN}{B`L1>(TQ!pzm+Qz^}$*{7qQP-;BrlTd=mj6_4|`VT!*UkN0tJI)9nbdbVy<5g&+#*`iQfRv z^)oTg&%*QkM%dKP#%6vFHuoFj`F<|8@SETTejc{;o8pCjb8O|ez}9|CY~#1Wi~Kg2 z@8@G%za6&o+vCN40k-!$;3a+`7WhSYsb7p8{La|X?}CMXSM20>!y>;sUgr0}V!tO| z?)SpZes8?O?}J_ZzIdhI54-yP@hX1+cJl|~)qV+f_e=2_e-QTY2jjJV8TRyt;B|gE z_VS0~_5LvI?GMKr{1Mp4ABi{mqp+_(8gKH)U_XB>-t3RV{{DEp#h-`+{7HDLKN$!5 zQ}8x_Dwg=u@OFPXmijaC4u2L7@@M0n{u~_a&&9j^d06Jp$GiOnIK*Fw_xKf9?pNZy z{$d>JFTwl#r8vxAhWGo+ak#${AMmSigueG+CY7Z>>T@Krwp7y1qGH9r$8{48ALH^NFk8(;Tx zaIxPQ-|%yBiQfd@^z(43-xS~So8vOS1-|XK#N~b~T;aFDm3}_H8sQkHKC3Sp41}hr9jp_=7(Y_xO|WM}IQz^{3!Z{#2~-r{T~3blm69 z#9#bbxZj_Rzxs3VfIk<1^XK6~e?I>1FTg|oLj1$8z{7qe{^>8qBmNRpf~6P>mZ2If zM=e;1dQgQ%unNs!HCn+Mw1c(i1nbZZ)}t3}KtI@sK~Rmy1e>r{uo;gHwqWgGD;^hY z!<1k<9v|$$)L4Ae;frkx)02>9h@Qk1~W(O&FW{`?GK^mSF)WOC=q2ftAi5k9+cuW!657r z4907NGVB=)!Rvx@>=g{f>w{s~I~a~P1S7CdFcNPJMq%GzG~N`9!G6J5yg3+${e$s% zOE3`!1e5UAU@{I2rr>SCR4fUm;qAe6EDdJj9l^RO(Kk9P+P za7eHa?+GffJgCHbgT**BSc3NjOL17R4DSz?qd?q-E(}F|zY;YK-2S;#55KE)|4|tVbc`h(;R$$@t zfrGOH4_^oZoDfLrq~Xg!9h@Je<10a3ToBa5SAz^(7&O4wf=sLk zvT#w*2rGkZd_Bm)#X)0yBgn-iK@)s4$it;UQ+z9Ej?01;_;%0|mj|tIMbHLU2Ko3- z&=9PCr%;z`9e>{sOB_loU!N|BF0C<<^uQHVb(cHp35 zC;nGaghPs5_&>#NJgwM+KPmR&uwozntk{od6vg<9q6E(>4&bkfgE*on#orWVII1Ye z-xU=&rl`a}6jeB`sK!4PH8`O-gnuaxbzR-#Dgf6^5=thOmgM!eDqR@wu z(2q*t6ov}}7$FRzN*F@5a2g|pVT=;a;C$gMYJ?Gt7DiDkjA4v0jV!#@g(-{^ zrcp1-Mffhl;BteN*Ap(;HHQIzIOc69_7qsXQ zV$mtcm@4SeB^c2yn9(C7V47e-uV6)=U_-xP$AI9(py0vJ^lRk%&4#(RYt%o7gbeZpbfF4W@vLLKG{_4t6$ zfCWM$J}4Z)LZJyC5{}{yp&1_*T5zY(ijN3wSR@?7M}_0KOE`g#3GKLB=)lK?PTV7O z;eUi~+$;3p6GAWU6Z-H;p&$1Pr|>CZ0E>k|d|DX765%vHBMjpK;S4@2oW+B}2tFr_ zVyQ5O&kN&NCQRT9!X%apQ~07VjTOQSz9fWbnEwU-BPO$67DBN~n2WCnVOTB9!&e0b z)(9fLCMfZc5P`1?YCJ4N;TwVmYXvR7Da2x(Amdwt9_s}ozAc!sK}f)N1Pe9_R(w~m z;Ss@(?+H$95?uJc;K8GU7e5gE*enF`Lt!Dd2#fF|VKKG}OYmc1DYgmA@DpJ<9urpJ zr@~4+F08`Ogw=RLNXO5G3~U!N@e5%Mb_i?nOJN;$3R(D-upYaF4fwUN5xa#=_>Hg` zdxS0ct*{k)g>3vz$iY4#7f%Y?uwTf-?}hDnO323_gaRB83h_r_2M!85@xMY54hg&P zf5L7&E$qRcguOT{?8Bdh{dh(w#$SXIJS!Z)UxkA>B9!89LK%(<<@mc$fn!1?{vlN1 zxKNFM3N<((9KyeZ!#F9_;@?6YP6_q+kI;bALL>ew9Kji(31^8%F+^;}*_??|3d6+#j1UJ= zB@UrlJdKg!Fh+@IaK3mJHR1?Hi=(I&$1p}5$5?R!b>bw-;uOY-)2J6`&>)6HGyjWo z&?JVUS)7aUVi+cf^Dt3VphXlhNmQa$jKE}3jW#g~Q$!8gMJ+nSSagaqriyxWiAHpb zX7q>&m?m1#D_YSf+R!iBF(5iID7tWg=)r}e7cUh3xJV4*MdCtSEH1)}#l^TpT!NQ~ zOL3{V3@;Uz<1%ptUM8-@<>D&5TwIMS#B{tu%)pgmCSED7!Byf~yh>b$tHmt5T3nCm z;s(4%+=vbx&@m{e8^Tb1VpLiIzi?w*aScmyyJw6~dV1d|(4~j>yP;A17 z#G|-FY{rMh7ThVe;v-@k7Kz93QSmtL5>Mb`Vms~@JMeL_6ZeQ+_#d$w_liCEgxHJw z#6Emd?8p7$DSS#Cz+!O_pB9I(L_Ceph{Je5JcG}QXYrsog3pPgSSpU;^Wr#`i4*vO zIEm%r6uu}n(@KsTPHKK^GiAp>qM&RqB z8V`$6_=c##T2YH{im_NH%J`P3$9mC-Z;NJZ5EJkn(SnVl72g$Ycto`0d!iGYL>Im< zdhn>|#ScV3Hj6?0P+W*D;v)P=T#T*a68uvT6aW$S0 z)A4gL1KY(+{6buV9pYO2Qe20fVitZSuE#EM1AZ-T#BOmDej{$i9&rnPD{jSJF&n=V zbFfd$#gpPT>=*O!dvQCS67%r~u>c3eLi|zOfrH{s{I6JqL*g#{pST-Oi+k`VaW4*w z`|xLRKb{eb@fWcK&x!}|SMeZ@h^6?OScaowIsPtI;Fws6e~48$E>`28Vhv7+hwv}) zFiwiK__tVxQ(`^-BR1f)*ogm%M{q`L!dcQ$43U~~w$y@iq*gpfYQs?J7@jK~$GOr8 zJWp!JFsTF2mpXBt)P)yF-KdayP>_02l=@JT`cWyJ!fU9HG)bXomgZu-6ov`X zJWP}nXpuxrl9XtbA~0D}qfLs!6iI`2NsA6C7M+resgfRDk`djK89h=0rb!m`N>=nq zHuOt&3`kB4N-kU=d2pfR#S0}rE|P+Hk+cvOON;PgX)!L5mf$7QQd}x6!%L;*xJ+7s zmq{yexwHx|msaBnDIKqnGH|7oiC0Q%aFw(cuaef`YAFk^meymsv;nV?He!af39pql zW2UqPuamao8YvsEmvV5el#4e=+i;zfhc`;wF-ywFo1_93ZIe& zuvi+zr==k*kxt_?(l8#7&fv4sSv)9>;B(R_mP%tWA+w%G=6`9NegT>Pr3v~)Wd4^X z>6efhRhq(fX&O&TGhFXSW-W>T$my(8$V?^8p$CzfN(!Zikh@hm7uCuzj8x9!dK7Y3 zDix?viWsd_qE;D!F-kSYDx*-R)S#@?Vw^G-^-38HNnSXjUd*ywZXRN-HKR zZD>*2F-hq}tI~zZN)OtUUQAK?(XI@lL%9&0%0-x}T#PQ|5_Bt@fBq;Rx3;JRpkMEU3m}>D@*YWWf|5g z%dt^efgdX?u}xWppD3&Gn6d^xRUX3Q%ES1XvKGHl)?u%*o`1*hkTp@+fG3rW*snZ- z-z%H&l=3M4pls%q1IX&5Y{7q&tvIc0!+({>Ff{x)o*RAw=Z3dqcz6eD!aGqP-i3zn zZZwAXpeei;6T}0|<^tZ^T7OthgLq4_eSo$Qg?nlTN5~1hHY-HV! zFw*BBpGbrmFNjD$WrPL8Bdiz^VdFI_WR{4q(~-#h5aFaX$jlJoqGOPmA;LrJkU1g3 zi~0yZR}9D}8xf>U$P5s%khUN*K*S=nMl8nUh$U!?Sc)kT%Xp0)nE@h}(@tath*&|p zkQpFiCGA1({fJex54ravR?`9G-j7J97a(_BL8PDHH3$%rgo z^EWb{Bi7UZAmce=1N|?upHXe3)yT}L+C)bo<5sm9&8jUJuiAqw5jsYuG)?cRX#dZ1(>QTM7L@OdQ>|xO;yC7^&C}~ zRk&4Ejd!YQFk5v9?@}GcyH&NAtE$6$RQ0$`)qwY^8Zl3G1n*Nd@waS8?l{#^d_dLA zl>+3BQ?=kjs#e^gYUBFD$c(BwMn8hA%c|qJOLYPtQ?=u6RR=z<>cl;&F5Ii?#wS!g zxL?(a#i~AhQPqzxsZQa`ssX-d6*7ye2C-T-gf*(uTz?I@6IH|by6OzRp*oATsu8~W zCUOs|MzLNs#+A2`laXp1-%(9qqiPc0RZU@&Y8u~H&G5>j$Z1FwB6Av2@gEwV)uIZ; zR@GcNWY)*XXjFyKpCI$IY99S5a>`IC@V_b%hg3?g{|`B3s3Pc}kW+?AP5+FXGE`CY zFUToFrJ;XCP8ljK{Tp)1P{q=}Bc}|NO#gx01u8xL7c%BmM*3f523DK#8g&9!GLW65 z+Cpa{yGON^UW<%CwT)hf>;~0#dJ{6P)J}RcGOpAvdJ8hT)E;^(GP=}WIvW{XYCoNW zj4^eP&PB$UdLg|H8Dr{2bRIIs)Qjou$l9%5LgynRO}&&ZKxTOLGP)31wbje%oye-K zUO^WjBTc=M-i6Hk>Q(e}$QrF)O+Sy!|LS!51!VqLXV5Pq^S?TiehHcX)obXNk@;V} zmVN~pZ|ZgQtH`KRXVI@AqfWh^ejSi25KsjqE_wrSuH44n~&I zA;|eRvYeiSoPQ%L=ul*r5?M*lMb5vGRdg6~{*A1r=OJrlWDTuA&cBg|Xc5^_M;@k? z$Ql}1OGhBuSI6a$P@TPWIOJQ?7$}@JNfE<6gkRQhmo-nIYysB#zy2gjzvyzhJG$59E`7G=RtqOAC7lnswZ*|9sy$@l*T*`YqtAV9<>&fO$m|^z#NVS9a%BwJheR#H>8Qo1n7;&-^Oy3~aAa>be;KVp zPGR$xqhbCEOqjnCm(O3tS1(7N49s6mUxkdB`RVjE$ev+-27Mj!1Ymw9eLb>^n7@X; z0eOe#ucg-`XZ-o==#9wUV15>TJMwPNUyl#W-+%@4H*)28dJ?(! z=kKJako$dp5j}&mXU*2^qURtxSj}#X(d@xk&0f@L_MxoVkC$tTdF2Y^e4#0!S0d*N z%>jB9GWIkF>D9k$X^6MrR=Rpr)M8MD9UN1-%Bj2Q`)ST4a6HRMG2@rz@Ij zItzKXH8u2lWS^!vL~lUedCg&ZBeI@qYUxeLda9|THzVt*rk>t{tf!g=dMmP?Y8vTm zvS+RMSM~BI~K#61#U5M=8 zG{@;3$l9toLGMJ?R!uuygsiQa4tf`|i_>({yOGhN>7w@_CofGmy%(9OG(EUa)6117 zk$s(}kA4a{BWwEc4b3U8)FP)O%>Z48+~b--x*nOYG(+@z$bGFjO}~#kqt*;#hvp1d zzC@lLYtGVNAy1DrBlOqE9jzIqzd`P3%^3YHa^}*E)88RyF3kje5;-YrCh6~y`A{=O z|A0I_)=bksBKtbc4E6EZVsLg}B8eVt}5{R^_M(}dB#BKtbc zJo-0eU#C&fzaz7#Mx_5ho*rwI^qV?*=?Uil8P9z}1Y z-$ll7^d|Z}WDG}drr$@#aP$`X17w|w-b#Ontjp2a^he0gO`>z?&ym?RIv2l)-o}*< zQd2}c8bCc-pbQkh-ljwZ98yWM_1@yPbn2#=`zeC1+^bYzYGUlUq(%&OvKDvnh z0U7hryXYU0)jWDPJ%P;O(R=7gWDbwsOHU#Dx9ENJG%}w@@26*w{hPL!4ndwNX-nvH zktZ111N3<~dzM~%kTxJEacwCbkF1Q^GCC1CiEGR0B;?71wgQv2m0YnQqfuK$+mTbb zwwiV#r*dr#?LyAx+C%8k9_C6KGH$iCv=2FC2GST-!`vjy(U@w$N7~&;PZp^p(geuWh5RLUxJTWAxR? zimyFRUxPgV*PfuSMOJ@pJAECp`fEGr>yfod+exoO)+TKiorSDT+HQJ1vNmaZ=ncr) zr0u0QB5RYjkKTl=P1=5XGqN^mPtjYDwMjcbZ$;K7?I4|vJhjsf(RU+H611o3dyppy z+F|-$@c-scv?Hom7kDVR69ZcjLf3iN%|LL z7S&GCzaq1!cAEYTnMJiT^zXA#R!R6Cdc8<|D5Ve~)9 z{!KfN{ulWfoK`{e%guC1j7ZN$p2fu|>2r`#9TP#Hi;U_RHGLj38^=V^=OeRmjE24d znT=z#w1CXUF|o9S%*HV?9gfV#F?w2s%*HWBIuaT4F=n*IBw$L61syR~zUo9qV2lkf zi?QSK7$?^+M@C?b3$KXr;K~>;UKQiV)iFVQDrO-bj9G-w#Vp3km?c;hvy|`f3Nl;9 zEW?_Z<@kEc3OpRMlCQpj?9XFX(QhJWgqYR%YfL(h#$@2{F`0aI44FM**5G8!TKqR= z9oJ`&U0-Y#&WT-*p|KlqZtO-pFLo1##csw6Vz=OBv0M35%aI*mY&N|D`L~PBp;sbz zR%|YP74q*GyN$jY`6*az9^M?g9dC)v$Gc(+_-YQazltrSbCLa3><)SxvcHPmN#`N^ ztJorXJF>ru-9_gk`>WX9bOExzirqsOBKxb@z4Q*`NoMRm9E#n~mH#2{Pi!&%9$SKA zu?H|#cMy%bQZ(tx(5x#*yRHHqx=M8FsxVbojV@gcx^;)pqdSZXbhWrhSBHyr^?0$a z0WZ}x;^n#{xI)*2SLlx7N?kKvscXSix>j7RYs0H`$M7cIasFx7BTpc8C-4?sJ8so= z;GMco%+__`UAk_}*Y)57x?X%(*N0E(`tb$bDXh^A;On|Ud_y;cZ|P3sJGx-3T7ljpC=eF+8pt$Io;V*shzzFLYDbp_|4pbu-wh3o)`9>gM3rx=`%a&BY#F z7!K&>;ZHgR4(miCa|<%J=#==2E&|W$)cC6|3P*Gr{7t9DQC%$lu9I<0r^i2ZMjY3f z@lRa>PUtN7m(GflIvf72v*VP`iT~(aIIZ*GzdA3@==?ZK4q}MB5NFGaaE`nf&ykm4 zsJs-Ux5=e=r(A~Fayi~5 zS744@iFeCYm@8M~J#r0hlMms&@?p%AYwbqf~C7A3#nzawA=YoOI+P zxJz!r$K<12-;JDf#vd|N(?4e|&!$)otbJcdW*ar{7@z-D<8Ka!`gRi4I=G+34BG9TaD$&q3~> zI46BBatFn^=<|>}D9%HlkK93VUit#$4vO>B0&)k%1!)Nxw{Z*c(zr#K6So-ej$4Ac zaZB-@xMi3Zw;b<_Tfv{&j;s-JD=|NA6+RHRn(GC~8WERH7a}L+xD0$IE)x&Lt>OB! z$k>Qmi_gWa!_v4cd_HbHmc?zr7veTzdE6#^F>W(f#BITs;5q^R5?4fjjEs=DUGyi& zIEmX$e~Qf2aeL^`kW)1*%;{UKE752L8BMM+l-jm--vqs z5j5zV(5OF(c6~EC^eyPrw_>Wkjlb80oDTHIFrYt&PwHoo zUA~zUAF?yo&!LBqow+^~f6~vzVSO0>te=Nx^a?zy7x7oU5=ZnA_?uphf9RudT(9B# z{E2*OdM*B?kHty7jDPF(IHfn@KYBAx>l5%_y#;6VRy@aG<2!^R>!86-&qdZjgOd(J z#(=>^&qF?ag9j50UanY>pH>_Ev=!Mu8-lbA**_Z=(stx?H!Px^$mecYOuLX1qG1X8 z3`@~(ScU<^a$ICs!D}u;c3Fm%^u@^8(69FROXngZ*|3kk7n%JG`|10TdCyQx=Ogo;p@c3#<~_p!x)9kL8xGPtke?bGO6f>=@`T+6- z$#9rHh|I2rTDlaOT@7_~88W*X>gjT1b~QB66*zm=ONK_e5}92MN9ZbKb~QB7)yP@N zaFnh=o-7%f=|jlA*U&;AMs~l3R=O5hyA5r09kO;Cj?wkV+HE*aHy}G?!wI?(nYRt? z^buswZ0MkykeR{INgqX4c0(678@lmBLl3qXdhsJeAGR9$@ngd&Y%>htCx$`%%P_=u zm_+VA!)bb!@iZM`9HwU@bFA?Utw45(# zqs=&jDaMd^W?kbPbQnYNBI8_KWemfsjPr1tQ4!DRLPnQSr0+xaaz-V6KeDzOBj^W^ zpJf=;^n=J*!x%-shWxa`sG(m+-eIE_-!;bK5u=Rn8THs?G~&lbGaff4V879VXN*?- z#c0E`Mmzp$bmEB7g})g+_=nMpe;NJ!EtAO1W(?9($joM3NKYd(n{g36gY5QAi!s); z1a+pRT$hm*%CwBuBk!SUIhsr>&}>?X@upRnU|NldrgXHJGSF_yzZjYE zOk3$okf&j$Z2D4U#xv#6mm$w0Ou6*s$Ufh+jlKdodz$j-E0NFLw4J^RnH5d>c(thj z(@lk3zXq8VO*`moky+8SlfDj_6-`C-^~kJf+C|@h%!;Pnc%x|#SF(_EglR8koAzO` zX+J(~D(0&t$Sh$h!BW!!eBN}B>t)DnU@E1{arUeVQyJEn%JDT*1s*b0VuPs)-!WC= zC#D+w!gL5bOo#DHQ!RFz>hK#=J@%Lyu-DXxKbVg2{RfcUj;V1i6)luX$YHGtV(=q(RbR5S`C-6^GJ5HE7@Gny*PMW&#Z&No;nR@UaQ!h@N`tV;< zKhBs=;Vkn2hL{I&ws{EWm`~$5=3xvqpTTp@XK}811kW>%Vwiah&o__bJo5xzV4g&k zd5V8pHFCx@Pt#Gz^9u6}vdShfijYxco`aW|L%FgPXV1FSJeOXEoDXec?C|HS91Ly{BHUOzhX(HhuMkkb_ zHld8`G02LRP>%M53a&Vixi_H_?@Xw|`xB}$KcNOI5)Sd2myl7HaF~7>+4(2b(yt&p z|AadFRpk9isHa~;-lc>F`gP<)kkClKfxK@CN9Z?^_bs7`ehYcu5{}YuBhSGSnz1{f z1;0sX#h!#V{5Ihj_9h(XmER#}frJzEN#s3DXs5qN-ou0r`UhmxC3NDS30+*7KxUYP zZk$Z$!M_uFxju!ww~2jtPGUcXCZ57`69@3T#6dJB4)ID8vaThbrsI)yEpZqV6VGtP zg1p0tXK5?4druspZOHy1ag??rqc?Gkb|ULk;y7NEIDv~3C-J((DO{5{jq4I;c;$`A zT#*=($nRJpd*H-5^zFzVI5CvI1K9&7&ZX}}R*l3k`YvP-oH&opMLy+31wNE0a%Bh3 zp7n5|lHQ3tUrLOii;$;7iE8>OWc5jmqMt^d3@2*nXOJfViCX$ulOxR4&e*|UC3Ttp8d z^Ht(vdI*`X5|_}YkuzrEQhFFUVv$B-YWysFTQcjm6=PXMFU4fjlER}R6a?Y|; z(N)MAZKyF zWYxAbVx#2Hd|WpLrWXBSdQUGmgCrJIe{Nr z+Of^jfoCn9e1~6=^~lmi|AwqbmTvlYWJhP|q5nX}u%(y&6B)ynKKd_Y3|so?zmZkm za*F;3S$&cQFg0lqT}eaePCAXAq+wo@hU}e^&R}}dS*~1zjLD=C`nIG|dh`E#d(s%a zC21U=PnzJXWyt51G)b2upI6cpRwPYhRniQ;mK0*)Q$Rk2q&f6q)#=( zSW+x~5}9+7WO@*pbCUG*5HjZ^8S!+I8GlMj;QBB!=OkJ1Op=u=zaXDil8ycq`Mi?s z^l!-LmE@#q>mlx(X|-tMMgkI#yaU@MUWzR$15JE7rAGZC!`2 zTC=dmx*lJ%ZooseAiltN31*WJ?lR?!jj3Ui{Fy4_mDJ@gr+7wpvT@W9tEI zvmV4xtfhF&T85um%kj9i0zb1>;t6XNer~PCc54lOVLgN$*2DOvwH7*_?ll2r1TLmZ)74&g7>(|Fc8jK5mX;E44s{$?G) zQR^uFZXLrh>p1>loxpMHB>rig!U^j%{$-uPNoztpg#yf=9n9!*}3A0)59*5sA=aq=oWp1c}AOHRj*Y1@I}ww)MdE5iAEdG+QYKZDqK?R*s8p6?n0&5|`Pk@G@I9uC&$Qm9|5eZaa+E*lKZ&tq!lZ)nk^e z0dKN3;zrvMyw%o(TWm-14qG$k*jn&zTPx<-+VDQxF)Xkh#|LdEaHp*uAG3AfZd)fl zVe7(uwr+gd)`KOsUVP5hho!cDe9?9aD{KS!s%;Q!Y(se1b{cDK!}yl%3?8wa#b(5E#@}sGIA+t}xJ`@y*kWnY{kly zY2b)uJ@xzpD*piZmAEj)^)|7nwIHdsFQVQ{tlpXk4%1%6yQiPwU?85ex-S|by z9_&cji(jSe!>*M5*qu_0-=vh_w1V~=a~*Y z9fi#54kN8W?n;N5)*{d99SL*-@;j>z3;G>a3^;6fvBQp6IGlL3!-eS%4_@Q&Vur(y z*E)iHhfHJ)I2O`tkU8A3h+d1#w2sB}lgQrEv4nmKdBWgWN%Og%aM)sjvRd3k&6wEZTOBO4;vlZ@m)tg9&r@ldyYbEa_qqO9Xs); zqX<86?80WpZv4=(2U{F_@gv7RY<29%j~&I><|x5W90%~2;~;+OD8=KBGW^U@jwc)y z__?DJ+Z|Q-g`*lf95wi*;}CW_4&zsjTI_Pv;n$9O>~=KZH;zW^aU8*K9ZlHlIEvpn znz7H(f+roV_=BSj2OP)nN5^rTaGbz@9PNAx)5wm((Lv90cF-ZtPI@*n8l7GAIml>q zcGKq~qtV$zpNH%^oV|E~vkw){eiWRiP;?HU(mBX0!;xpd&LLWbjA7?#jB^g7&3T6F zDahW#d6sq{XG!M>?Ly`*=P11Z`PqJH_dxUq$W|r=NZexl^1$`gP<^aW16aK<*Uh zBKl3_PH`@#-$L#b=MwzXxs)r%krC@$MxQ`-6wc+SPhEkA)RmZ!x(X9hSED609c`%@ zXiv>VXX+YsrLIL^>N;GMnuQmouE)ix8}QQ9jkqjz6JC+J8CRxm!7Ed@;;Phayec&Z zGg5Q$+SF~BnVN^!rEbTYQ}c0iY60G!T8LXxcVJHHPRvg&!iQ6L;iIX$aaZad{7>p$ z+?%=&pGw`2#i_;kY-$M}Og(@vq#nfb)KYvowG69L%kj0;3OtlriEpM>VO?r9Hm26# zcc9+FCtmC7!c12;Ugzq;HLhN~-qnX|UHy22>lChY4d9Kg zLCkUu;Z3g7xZX94H@nW@2G?1<#WjK(U88ubYm9%wO~^ax8mAva)^XPa{W$V8&oznv zaZTY~*EH^P&ES)+kQ7!5*BpGx6^g~Kx%jjz3`<<|@EMl^54c2p)}_RQt_Xb2rN&ZM z6h80LV3|vcFSuf{+$H0SEym!JL^neAOc`V(ZfcP*qpMdowYBDw>a&s~e@PGmlJ zEup)R`P{XX?ndTw*D|^Xna^Fz>0V?$cdelNkY@s}m3Ydv3I|-P@kduWUmZlA1GqBi zA>=uLE0aEroGe^x=wakJfNL#%202-{*3oB?lZ7jb9zjkPuJ!aNaocW2Xa$oO~X&<14uyK`w1^0OHCHaZ@e zRor=WA~LJEx6?_;PR5;2CnNKWyMRtXW*c`Q?Lg)n_YOK0nR(nhX*Y6`br;cT$ZsIH zchNp%U*z6R2ar|9y@y_atTOJs^o7W*<=#hMgv?s*{q)7i&yL;2^d-n|Ah=8DOOe^k zeE=_WAH?PEQoP(|eq?5I*Wq4wJy)JU?lN}+{Umaixf|)Hkh{!%gnk-X9o$X$n)@gob~khV4dgCx zw_uaIl`HQfJ0Eu&e&9Za&F(@e_9s9&`8Nr|v#H z?(WCW+^6t_djLOo4`RD}2)}Tj#t!!|e(64go$j;vm3suc+@tuldknvEk7JK}0#CXp zvEMy~gYIcO<+Ors@-#N#2sqq*(oxf-E-+NWDL8*=m}&m9^$bT-1>mkT9D^CPH2RTi9)F^tQQ1WOn+M`9SCzjX5AmiU7qt2s8*<-{wj~Vrz z1T=UoX!Kao_bfq&XDK>8 z%P`fm99^Cj==Q8ck7pI8c~+y>la4-52Kqgj81SsYpl2;E@T|jyo-Dl3vmO_DHsD2` zjkwse2`~0+#wDIDc!_5#F7;&NrJfvI=E=p&Jlk-&Cl4?8Y{wOze7wR_fLD16akXa$ zUhUb5n>DQDJ>~eErvg9lRARHI3P1EzW4osYzwjL5dv+ir&~q3&J+=6irw;o(^?datvdc|t zKq;+}D@x=EN!k%Q0(t(B)`WMZ9mSlqX1qJC1#{C{@&2?nd^qhG?o2z5kEETzqO^8= zG_3=7rFG(CXkv$58Z+ zqslwMbv3f9_fFDL$jQ_@MQf0|!#hoDk>^F;89ElZJG>zdo);l^hj$LGNA3=9C~ZXU z0`FYfg4_k(FxraT1>SjR^D4NKf{b>rNV}2I?p4xh$Y}RQ&^~0ed)0IR8SUOEdI2)p zy&C#LWVCy=^hL;M_r}r}Bct6b)0ZHl-K(cBMMk^VNMDAGcCVSf92wQ#1Uenrp?NKs z;k9z*T4aajwb9ohJ2bDIz8=}3d7bnP$PUfxqHjcYXkHI}6S70|dg+^y9h%oq--7JW zyg~X_li(h;9VYhcbe&a31 z@4O}0=RJTYy$7-1TgspP9$AmPW%yrjIsWRcz!7gH{^qU1QExR)cx!n5U&s#1dx-uU z`5B7$F#Qj5+Va-Y|03&=w~n6WtD{4F_4I7ygzjsg&p}QczD7LPcLdM#HKFJ`ijuDx zmA)1X_qAe_uMG{pW0>GO&UZ*e?kV31^!wT|;OoGkuM-#ex^SVd8!z*rIujYgz7f2|H;VWA#_%EE zIPUOG;KRO2-07RbM|{&*_eJ4TJ`EQ8v{>Sc#bXwQmu=>RXJpz9smkZz5zARNW0$`JzxH=xx4#R&@pog7zX!kd_hPTV55M#GW1s&Np7al3zkd+F z_YdJI|7rZeKa2zZGx($bEDrid@W1|19P*Fh|NP^4+CPCm`6qGMKZQU0r}2z`27mE~ zq_T7N&%s~)p*Z57i@*89aMV8!fA=eJ%rD{}ekG3kBk)hZ8Ylcw_?KUUlYTA!?T^JN zzl{I*^*HS};=g_~&iE5>R=|QG0V~c9*l^aoa@vIjusx4>$80W!Y@(&-D4`7Mw^ zUxdtKflRzKum+a})^hzaK~}V zuD~JuI&c`f1GV@~pbozc)bq+-;7@@@t_&mNJa7aj0!>``3mL1yqx3n*SPeGQ z=OSY@*g~I&oCJfdv zwu7B?3UcBLcG0QG9yr)dyOBL`u!l}V_NBpIyeim-tAqV`b?_8lO-IIOZ~!xcgLrLl z2(J&G#;o8l<^<2+1HrRc5FEh=gQHj&9K(l#(}FBmNdN<7hC!#cxR=v&sSs&RJl^c?)c)T3|=@0w+c;aAE8M4<;?}qIH2E zlNSWhwqPMHSg;5eE?A8J$JbpzMYZ`}eADL=BfShmb zPo`N9CRbSxC0APyC%0OUB)3}!kQb~2$&1!w$(z>W$lKQA$%odV---Z$ffS>G#uHk^Fo^ ze~{Gc50kd~qokewIBC%TMLOwEka=88)IYNJ(9IwAgPSD>b!}WK`Nc}%#oc;khQ~!vZqklrC=%0~k z`WNIv{VQ^r{tdZO|Bl?K|3Gfhe2i7Tx#2%TxM%UF1PJOuCTQsSK8W=t8DGbJ+=!b>E|A=4HnQ2Rw>p#5Sp$bJbq!G0+@*?u`W&3+{rWxtw?xBruzZNHXGwqH-qv)@QAw%<%< z+ixXT+HWV<*zY9Q+wUef+3zKH+V3a#*dHX1+aD%R+8-s)+8-w`*#AY|v_D1OvHzQV zXn&S`Vt<}|X`f5JvCktv*yr zr{OkTki6bA+$BpG{vk^m9+0IBkH~U{CuDiUGqQr=1^I{J6AgdZa zk<|=e$m)h~WDUc2vZmo*vVlR}j^9L(JQo|Z^u{F5#RiGql;lyxAd~h69qDB#$^I@R z*O8$#y(`HzWhhJUM)G`WC{OQ6@?DSN54tbOZ;cI==z%1+Lqiq%SdwegP>nv0r=(7%#g zQw~m~;^0D7bZ{f9ICzlt96FN?9J-LL9J-R`4&BJs4n4>=4!uZg2S0L*LmzUSLqBq% z!vHeV!JpjbFqquwFqGWyFq}N(Fp|9L5I|mc2qf=2j3pmAj3XO5j^|P}B6*H*45c?A z`JU8qBE1>OPh}k^lOc{_WRzn#8RIyOOmv)1COJlv3ms$0MUFGb?T$0aosP4~XO4;F z3&$k#u2Twm&uJd{kJEhevC{%R$`g|Bt(+FppOJiT<+OX(>Am6z>A`4xfkUw0Wku6+bkgZ%_k$$dk z$Ud&`$P2C?$cwI@$b8o?e0?sH+)7=)(XWy`in@NM7m&PKaQm08CV9=^rncmFF(jXb zo0cw-d@gPhT_(9Ty2*4M$>WBbj$V@Fal@@7y)?W4K!-dKHq#6Spe#Y9x;*Zq?{DNFGnzYS3$uJkGn-qSqmLRpwTQv~;US z&Ub4-_Hl1S_H%DS4s~zF%g749wQBS>za?ycz2B)3v`GkPq^weN00X1cc__q(@a z{{fPFhkJYaVUpW`yA}N?$t}UX6a6^JbEUft{V$Sxjk_)VG0CmM-Jbr8p7e(?>Ule?HNF}^9-~c$G^h9 zS1*QtGn=oP!M`xgRmZDpl1ZuxP4ZRws-RZKn&tCX#3#s*RwtWXQ)QUus;}|ao9jzn zQ)QdJvc9I;XL^kN2TV_phfIw#XH3_Yzs6r+zOgP)S(?2gJD7bSJDN={S-{^<9w+r? zf0K4*p`^j=Ea_<0fOIy?C0)%vG4F2nh4eK0MtYfjCwtn_DWqc|Fq6yaDNK-iUNHZ$i48>q_0?FA1B`z06yX-sY{y-saaz z-ct27uf(bS&CS>|(AND4|&O=A9>lrUwN;xY<;ZRd;UV{1lh6m$z~nZSsjj%*&R-h%Q~EFW>9yu z%2gZG)>h-n7}R>J@nsEaJF7&}V3kBVTBVTAR^vI<)oL2u-D&{oX*Hkpvg*TrZ>!%f2}>#pE;U``m5FAG9Kzes}|)v)IY3-(p4Q7keZG)*kjUhC@DJDBTIBNBTIGc z!>MID4yTvv_^)-4da8AL@j8(|>RN9c!7HhDd6e>F+UoSd(c zq^!vSWcK9FT1i?qIm|+mR!q)QOVX;z9_(2&nXiMijmgr|4kk-WdnN~x`Eh&X?775bJ?Zmgf17&J*U5uz z>Pv<6`qB@2LrF~WCzUCKZJJ0`=}n~S^p=vI-cquon@X;9Q^}p~Ds7sQuX2^PObH;j zO$j7-ObN4am3B?ZQ@cugri^6IzA3qCcj*w5?$Qw^-K7&ux=SaSbeB#u=`NjN(p@^o zWLN11$L}iL;`lz&9lDQnkKRKv3G*jK*kGGpQU!W1sUqD^s!8{gYSa5lZRvd_OL~9F zn%-a1(+5hfVfm_ol6zPH=^55pJ5cfp3$qv~d57hx2TDF+9_;BJma85ktz&YGw1LSn z(iSGiNZXhkBkf>vjI@i%G149;$4Muc94DP*a-4LA$#K#-CdWw^m>efvWOAHziOFE; zDwDxd0h7Vfjj%xS7L&o!9VUaNdtoElbDzoa(qksaOHY{`FTLcL_EnGBJ>G8rNjG8rPNrgqkbNSdi(79oN7b(YRKdSsWFoiq^3+xkeV|YDMd}q zX%H#JOkLL?S-LZIs7PVXu=_8XV z(q|@9q_0y0*i*=4iu8lY6iF4Hr=BZ`@bx9gojzomCA+Z zv!?=+^Q6j5&XcM#IZvw2XWcP7)NzMPsa^$-74GF=+T zsp--nPED7FaOy&76vtU8jpjHDr7=t{l!7?ULMfQZg;EHU3#AE6W=IiCW=N4tW=K&? zW=JtiW=L^NW=Qc&W=OM`TqMn9a*>qE zVlq=&!(^tE!(^tkj>$}E1CyE3CMFk4yO>-o?O}4Uw2#Tf(g7wHONW?TEFEETv2={d zEa@CG+0tv~v!%B``+MfIrH{;KOP`s~mcBBdEfq4qR5FQJUvjA=B68_UM1X3kR3c(C zdrC!wSuB;xMC7xlTtuFFjb!&T9huxH4T%V}*(eQ*7;E!Lnma9D^+-yc7C@#?8^@lE zX<-(Rq|9k~>PJ%6wDIi8o|dbABUO*|w|OJgj2vw9PO49TCpDyhkebs!NG<6fB~$uG z$(;U0($l|4c662KOIL~hbd4B7*N9>C5+apeLZs14igbEOkwGsdGU=s67QM8{rk57W z=w-#8$b3~xiOoE}J8PY<)GCG^wtIMr_YNcI?}=c?-p z&*}a)b%odT!8Y}T59g{Ux^u32qBrNNC;D=(dZIt)swW0=u6kk+=c+G;F&qFp~|$1ST7ZNlZ2nQ<-caBA9F-BAIL;qL^$TVwmhG>PO|P zI*Nu-0c6vtK(cvMm_>P63}9&Pl(mr1?o&7@xRjq1jp{!H472~66HNle;{DNNdnsZ837 z2qx`CB$M_cib;crW6~hvnKX!msO^;uVh)oAk<6q)%#GU0o>V3sL^_iWB7;c>ksXy^ z$w4e*(m||X(m||>%45$OCSApWC=acxIP|k0Vcu07i|Wjt6U@7clN`rYoaS8a;u4eY z;xd!&;wqEwqJT+vaf3;Baf?ZJafe9{@sLRm@t8>u@svpq@tjEy@sddo@tR2w@s>$X z@tH|a@s&wWQOKmH_`#&7P(_DXcnVE)K6^}}^VFS1iD(aPXHhCTmtH11K-F24i|)*x z3QTqu6`AZTDl_RNsx#>&YBK31YBT92>N4pi>NDvj8Zzl68Z+rF+D5z8^A?s&dW#NB zdW(+H9_+DZ(p%`6^cHqZb`_4%p*CHGGm~9~E0bM?d-O#1crw{lcrn>kcr)oEx-;n` zdNS!Fe3|qSy_xh8eVOzT{h9O;1DWhDMlji3jAF987|mpNF^0+RB8bWEBAChUB7{j_ z5yR#56>&`Zig+e{#VjtTuSj6hSIlA3S0pp(CsLX86KPEPiF79YLF)4;; zd@&`4=Xxkukgm5K%FC>Ui-orbmr<@tVna@s`PW@jhmVjtwNoFqtWWn9LNxOfD4(vE59TiaAU!70FC46?0>IuqTztr6P^Vr6Qfl6=DOK zBQD1_sFfqGGM^&~n9mV6V#925#4YA?#2w~y#62cA36r=sCYywa%cU!E0jf=+L|i-e zl!^%H8Nj%SnvWOpSQ%4>`uOknm*O!Cn_2poC1384=K%PKvEXUIu%d_asR)#dkfjIlZskn%+-tOYbLJ(g(=a^Z~M- zK2Wx!50nk`!LlcPu%JKAJ@+|r=Ie|V}UPB)(=g@=X1N0#I5PiISl0IHO zO%IhX&_m^m^ojCS`b4>aK1seopCsR+PnPe{C(HNfQ{?;fDe^;lnEaR?CO@Tz%dhF- z@>_a@{GJ{mf22>7KhvklU+Ix@Aw5$5L64G6X8V(3_F$W6S)oVECFn77DSC`thCV~C zOrIfFrO%XW(`U+c=?QXEdV<`Xo+!7ZC(5SuB-xRkBs`qUSJ?Sa37k#em zO`j|K(C5kB>GR~C^iayg5>T+XJikeAU{$Sdfp z=ZM89Sa>%E3%NltU7u*)xI3$8rRdkL5@vAImX`xy>KTaZEmz! zHqYgZ#KAUi;tt$c~exAJ8s-^y2+{3vVY?t=V zSFKjOnN%x2OsbXca{|epOsW-MCe=#sIV0KAmr1QMiAk+8g-NY4l}W7@i8oRhL(4CgrQjE47mX$i_*5 zWYeTDi}FfyCd(@=nJllEGFeYaNaCkV%A6z~|CLmF10{{#N;$(3S}Er^LM!DWM`)#7 z;s~vj%N(JVa+M>rQVKYNsd9@+Q{@hmrpmpf*ruk+eI`wnhfJC(kCUR=^OQ+*xu z%6lfwmCs3CnwTqJnKV}lnKV~^Bz0zwDmhnet#~KrtE?5D z)V|3h+0&m%CuL5uzm1cUoIKdZS(!_BR#NFMN*dioNvFFi8FW`AlkTQu(cP46y1TNB z?yjt$dnl{u9?BZJr?QTZ?x}3xqkAe_lC`Zpm2G@tY*(1KKcM9BZb$2 zN@fbL50&f`ULPvUQh0r+tVrQCq_Qf7*O1DZlw9>F<#UR^%_!w-%3zxSrH~$={GbOa zj&uD<=edJz#wf1zF^W5Vtl~)@t9a3a6mNQv;zJKshRo&XRLZcq{G3V|F*lYyqvrB+ zDrNLseom!~nLC3$L38=(lQMyGg(#CaSEw?D9;!^GPf#N06O>5$L?wzoQHh~XQsU^7 zlz93yWgUH*vVlHb*+rkO?4idhXXvrYIr50lq zdZO~0K1X>=pQF5|Co5m+$x0zTMfpKbQB?DI^j0+Uc=T3G=<^gopQkAFG^GMPO{qxF zR7~laiaC9WVohJ7=;_&t9X(qy(3dKX^reb3eVO7)U#7Uzmn)w1<%$=5mC~EOO6f~q zt@Nj_RtD17D1+#0lp*vSWehz>38Jr6g6V6O5c)c00)3q_iN0Q$LSL^;rEgFo=o^$s z`X(iwzDb!y->f9iH!E}K+mvkjHf0%ohq8vgL&>4_v>$|3pzBp6i^b^Ww z`U&ML{iLEw<(Wm%r1H$7n9xrtf__?2=%ECFqNiV0?C6&j1O1BPNWY>u)2}M7^s9q>X}b)_f$ zhT==Vq4cKTQU=m*DTC;DmC^LO${6~6WlL(l>b|lqHGtfa8q1ztsbLoPl|89>>if#R z)EVqKkeaK0qFm)%Pm}`A^;Ee*f2!P~KU40|pDFj~&z1Z1=gLF+3*|BWh4PgCQh82) zsl24WQeM+vDR1eomG|`5%18Pen+OVP~dr&~$|`bVWA z{j*Y?{#mI>|Dx2Ue^Khvzbf_VUzLXRLdA4Gul5!5`Ft0kw4ML0NugpnpYH;c4)gg= zLFqXE3wx~R=c>Oedd~G-vEy7n6a)Q-;z(ENyyz;OH(jmsp{sS>=^9;6x<=vR+7I^86CX@8tx7NAR+v>dNZFSys zOI=U8rOub$Ue}x6Ue}l2NjD~qpPuQ0()j6_Zc>_L+DSJhjh~+Brl#@JGhIZQmOYVa zd|#tW<6O47bk60VTSa%!t)V;Xw$Yt+JLs;uGaSuTcaEdE>Mo@%GxL4!Yq2};uqv`>Z}Ew*^{t3{<=F0 zEZB38$)UQc>G`Umy6WixWbO1ovTk~q#ZX=S^gK>&m_Cv{jni}00Xp||o(*-L>3m0{ z^P-Q|dDDY+gE()nZbdq6?;n=tAh>x-@#Y zE}b5s%b-W-GU?NFS@dbTY!xJyy4a9;@3$kJIg;$LaRbrv;d(qQKvmsY;+ce($SVtj97FkJ+fl{#IxQd$^!8 zdSVDBAqvUJz-ny59vsGBn8R_-v0lb4yuoMui&9*e>fnEWqTn!^f?=!X6nipiLX6l7yHcH$t;;WC~fg|Eds)~`@Z_}>_!B|5?jy)XU^xf^O)8(U^jG@Ov?SSES;%B`VdQ*n&eii%YnN*Z7VS zg4+lhq6J*g8GR9m5QHHP3y_VC*opl(iZdv{6MRJpS*7{|4bTE@;Q(*=VI(FZ67fhv zCYB=yyKxMca0l;UqNr4*Q4>vIgDx0=0K{V{w&E}@;x^twt>f~5$7NM(*un+fF$|%I z#C)v60bIlr6rvP&q^hWoX6OVr^ub6>$9(*W-8hSzc!h5$U6QvKf)%==H%4L#W??Qe zu@1X%7-w)7&+#6bQd|zyLJPEoHN4@6K^TW9%tki;#4a4dDdgfAw53(5lBkaQXaOsD zpeI5Rg9Kz^1=e93_Td=L;1X`&DLzA8My1lB0;;1G^l(8B48?d%MJ$rB3^_Q4v$%-| zc#R*ZP?rDE7@EQwF7U-LjKfsKBLz#5gM&DMpN~nbS8y8-@e&_lJk6+FIj&n6dn?wq z=!DMbf&LhVF$hH}bK$J9n1@WP#0G4`J{-dtq7vP>hE0u{@MD9MPDKO!m!XU5IR~#TM+t-zdO6JcFtNk8`MuhA@L2ywDdx zn1lo@z!Gf2ZXCgBT*Y0yLLo~0!Tk$0(Fm>Z`|DeLZCkY8x@dJ|^?(n2;g3-WMi^p{ zh%_w08f?ZM9K{*j!ApFCsv@^PR6q?h#Lw%MwH@?uMi=zKAcSBlVv&gX$iiA|!(m*& zH9W#=l&Qr15RG68;yh1J-AT{wa>xQyF) zj5qiUbrr5}{DGQih*oF^TX>-l#v&ZCn1f7g!X6yKO+3dZXn0{#8dXsj&0vlWu!AeQ zqaTJN2vZP^WGu!?Y{V`c!QZ%!`*?v5&{pGqhl;2P21off$KkL}EVv z!~vYaCEUORyudf;s`FfmYN!VbbVY9rLLeq05;Kv4g;<6hY{7mU!x`Mc2Pidu-Nrmw zdtv~FA_!rKK_b>+I}YLu@^KHZQ3$D~ivQ=aN>v5*(HxerhbQ`AFpRgsK-N%16m9>$ zT`pvMH8x=<4#4+g?cT-&m* zBkW=PIBu-VS-Z0K#So0gbR^;TWl5*6#6}#%DO|u++{Z_l)aLp^E3D?2omh?McVP8G zPxQwyjKKs%AP#eohAgbY2JFBAoWM;yz(WDf;}2*5aS%?_QbH>Y!QCOlwvf zIKl%x;Sb~d1lFjcK8rOC%dr{8&to_1Vf;R}aXnRR`%Y0eJ`O#le}<+m_iy}xrZ9&k zY~TPl7?0DnX!R>v{fpL-MeDet_4oB*TqmPvoIGKSdO*Wi=#M;Yq*Oic#E&l)aP*u zwb2so-~bQ!!5v>$qeY}D3bNRxmZoqW_oR-q#d@IfC8#%N4M3=*&#r|Zbi;6jA_9p>!zygT9-Ku1UO?5D$2e3#eYA!xJTVM`n1EO$Vm_8* zBlhAL@^AxB@D`#8w_(&obF_yYywC@OF#*v?Ll#zHBX;5-{=x-3#3%fV8cn%x!UA@1 zg*WFiztt z?&3ARKs4vF!Wxd~jPB@%p%{a3q+$s+;Uq5L79K&}g2!nzg&Eqz1-&p3V=w`;Fb|nn zgIzd{Ts()mCEvTC5^A9Z+Q1%O=!yOqjVXx6Y@}itcHjt3<01-hA8+vuN-Lh%P!&zl z0d{bM5Bw2^c%)$kcHuB`aUG9fy#Kvo{RXWm*A1$`ct5ODv^FVP+puyV;8 znl%(LMcWCisaSzMID(TnhXOpoTYQIX#&Z&?qdD|&K`;1YBtj8^8A!%LY{EVq!x`k` z7M|b(zC)OEe?UvLgB!Y{H$pHKF_?!;tiU>K$9|l^d0fXE2n${dqc$wz2v2lJUkt%$ zOhGhKk&T@=h?BU0+jxXm_zZPxUQ3}os-Yg5!wU9rM>h<@D1;&&saT9P*oqUli0gQa zcc|Hh`x$y;5XNIM4&gQ);S)-<<>fS*z#aXOg7tWfitTue!#tcoF7D$s)Rvr%CTIgk z^ui#7VmjtxCD!8xDz)da4(H+Bf!8v~#zR!H;_($uh{YT%#wr}cIb6YQyunu}9l1ZC z4w}FW?O}&5@P$7{BLv}CgcUH}-q#ha+gK0dG_K(ve1@tM$44Wyf+cL>4j&9g2-0v6 zXK^3KV?SqoU(^d(O{{r*Ks7Xk8H{sQtoHDRAN(;2!I*+5%tk6!VhfJKc-{-F*KiNd z@E(OIWyAG~+GqkZbbvSb9fc|waY)4qtiv`OMFF1UBUE~Bqo{ydXo}Y81SbqdC?b%6 zR4m749K<k@$we1-orr%Y)>{yKko*6L^k zOL)V0+ySfsn1C5b!7{AFUYy2t+{Z`Aoq2467bapEwqP%g;VkapIsQcjFRov-gaH!~ zg;_|)Y8=B^T*f09FPG7GdZ{kluFxEoaEBiTVH85}dwwcC7K^bK#;?Ox*1b4~eB8uC zyuxRwz4;iZg=T1tPH;qL^gw?M#~fr~6*giQj34_D>q)%EH<)zgdkR!XBluwif-o6T zNW*d*#3ek$SCsPMc?6xY0lRSt_wg?(cjJ2lw1Yj|;DbIGfW$(FpR}?Bq9sjaR7Jm4*#M=Pac!d1}^A_*+|D) z?8INVi2Epnt{3+g*dP!S5sgGF!b%*&W$1jlUBD7U5sIZ)kF&UqSNH+hkJ}NN!wR10 zg^>uxTo|v*Ka1AQtjCatm(cX)xdpY*2p!=LUkt!_L}4K|!+5OStY`27<@#`4VF8w4 zH8x=nj^H|;p;TXfHjAOi#73OMExd!$kNXr12uD0pum;=k7cSsE8usUYhqkbW1ANd2 z!!Zuwh({8Pmw5r}I_$+=d_&CvyhcEG48ugkVL1-sJZ|GV>J8+61mm%OvtV0~9`Hv9 zrXe1gSb_D}f#W!bn^606yM+^s$Lh>#yiXf{#@3@)A5g51EY`;t>*2-vjAA{dSYK4E zuPoL#7VEo<^`pi5*<$@lv3|E$e^#u2DAxZi)^&sa?{oa4Sg%#AH!0RFiuF##x>K>< zrC9eX)(02sfyMg7VtsnCKD$_-U(}Zr+qb${-(0NkE!K}0>*wj$a2L;@8qDn<6=4o5 zxS}h3F$Bize>CePL?QvH$b|8<6|C!u`fk?aFy3~~vgYG1p5O!2LwF29dDMn+t}$yz zxS$IH5s5W0p1z57AM%Q}ud_bE8+<{Tp}&6D(Tuetyf6}>m=5DHX0m2sZPE5t*26Gf z{!^^ExP^!K4&5*=BdVhX+QJpy@WTYeAPMPMha3iFVO_1J;KIEAaY12K}vNYq9P zw1oj4=nmu8tuN~kj6paOFdr+h9=mZEr*Hwc@d95^dK8xrRxrRDz8HwHn22deLGh{rly#vQ!I z56FRB-)ILn@XsPuSy+utFn&FZcGC|R+s>t5!(BYZI}}11!)+6LI8RO1MraFbc%ml; z;P-Jy(t{C(7%WB(w%|B!<2l|#9?R<;R6%2y!UkQ@8)1k?GXBIC{Dlj+jUSMMc%6b4 zXbU&^z#kJZ3-hoH>u?x<<0|grJv8HZu0k`kMkhF86oL_k7$hPM%drmIaR4u%3g+vC z%4mqza6*4fMigdY9u?wk@DiFyoDcP2fIni8j$D{b z=6fED!!}%n{S=<3a0vEcyavKn{DlHMgglk|54Fr?$H~3%>Mqxa{Fat?gh-KJ=bGV8-c!D?h z0!=KpGgOE1V>V=M1xwhX3wmKZjHeq-E9xml>vGo3IELH!jEZsGXVD5aaDo^5U@)d& zHWpwRHex3Z;VcSp4jVkVI8(%A1>e~ zUPC*Z=VzFs3v#d(hjA6p@eMT+_`LA@y7;{wezgDs04im?UyPLQ`0vKSpCR zval9gaTuqOho|@kc@AGo)PWUT(F=iyK@zgD5&Llw*YOnJQ6h=^BkI8#JunL4NWf~G zz;!&q8`MbVX8>poJ9wcdMqx7IFb8SK!YXXX0i4BU{DbHC0(AgQn;JZwx{>QjmqUIE-_+j%Rp}9}x4o z{h=D_qXn$sh@KdRsYt+jY{zL_#C1HydlbSXjr##Aqc)ns3SQ`s;TVfaSc*;9jnlY< zdw7O&3%ISL4Xn`_eJ}(wu^6kd38#^V`*?vLP|~^1(HL!D4L9_{5CkI(^RXQJaRTRY z4fpU2#{1X@*6%2@kk1SC&<3604j=S^@%kOi8er^5LN?apAkHEmxA6*vD4D_MiSCHT zava6qFn;Vj*6VnLcQ9GR?GCnZg*W^Vj}&C!3@+gY9^eH&K+fcLh~_X})&SP=n2sdu zf$?WIhgprM8@qA6&h`Vm#1BY|`C8!jOjUY4G=&B9`2BbLE_CBu57vGdU$kvJb~t@T z(e|H3>*k_$chP#dXgyW5<`%8jSnn3~7px!f9a0vLcc_KNFhd8p!W;dNicG9PK5pR= zN-p7VF<=U7IH3#tFa}c*hr>9JZ>X8g_iAVhCwO5rLXn0gSdINSjk|b-+Dmy}LuVMj zKHZDfzN|xv`e@cLEJaSyzAdbKa0I!yhI@Dc)iPdlp$^)^1AQ?HQ;>iYFy5}tvl>6{ z71rBD{SoUcd@9;jFX!|Ia71VL!+0IWvL;~>w&EI&vA^t!U&pV;S`QsyoVR0j zFY4V{`(t#`_5{{Q7%x{G>l~zE3AW-O{)X}NJl1DL{aw-egH^2Lwu#DU1>A1hkVuwKGFyeiuFiPdBkKd(V;w1gg>2u38X;T~$O=6MXA z(FY^20LyS1Pf=nGw>y}_7A`Pe?k=o;7>DqpeX&JrBJ2F3Zu%#m4?-{vvoH^tSdA^% zkCV8FJ9vV(Xqdxo93eP|s%v@thZPKXfJ*E5JTMSrunuofWj)s`4CsOp$ii-%!8JU^ zXEfZvb2>U<7-nNG-lFtIo+mIIL5M*LGO-*d(Qgy4(Xbh3aTyQr3FS8P+=Y5*hSspd zB+SPp{Db%S4zY!=H#)!t{uqTxh=cKVn#!65g#9$?^ zK);LoI|8u)+1QM|xC!-cu1i?L7K1S#${udZFoho?@F%w56dt0=Ud{(Sd@&j`k%0~9 zxsS`TpXWMU#Cudbz{khmc#9wCcaZZU6bZP87x;)Fhj?v(IXI63R6NYr1}~r-;c}uH z>Z3Jm(F;Qmjulvk-8hbNM|tfITZH4nrE;n=>N{kj^pH%FH2m|2WXY0Dkw%eor4VvM zi7DjXl9$QU(k79-N>}lhv8ra0TE$m{BN^6e=Kc_87m;dWAjpy@P_@5u|_b~(h$7#mP^4I_Pc*fIKW&Gzcjh}<@<0WPO z=V``|XFT7P|8Y#?`3@}k@8>g~RyF%SPy7Axwx|B*X}>?-g8BdbwCf!6!MguE&3H`X zX&?W~<^28e4sQ6*^BF&$@p7Ks_@Af!K41GS|NS)M*Jb_xIL&xW&B6bDzAD8|GhPPc zZO*HiF>jaowKetUR`wI^&(l`^+!|I^`MGuB=T_%xzqZOZH=a+a{cEf5&#iXter?74 z+)8Z!Yb*QbR-Wgtt;0XJ{_XN>>(0+DH{V}dN((Ea@U2L9X{ z_Q$WSsGnN{>iya}{&UNv!>=vl|D&GAF6&=g75RT)^Qy}E*Ou}Bx6b#GgMV!e`?*zP z)UT}>Kev9ENUDEL1TQXyN)3%9tF$nY%Bdu&vPwu*RkBn~rAReZI+Q?3ltO8gL0ObT zc~rn3sEA6aj4G&#YN#&NR@FdFsgA0aR9{tFYM`nkHB{9_J=8}7sj;e|)I`-tYN~3C zCQ@@%Q>g`yPc8U&mn~H-q*khyl9{TNWUexWnPj0dm)fW-q_(QoXoI$B2TQa^2Uwva zI>8z?;D2ADvV|S&VSoc1;RI*6z!h$AhX*{-8D8iDZ*-N~seI5)vQ%|P5A;MY_)48r ze&~%p=!<^nj{%Y`?{aIa@|WyXgCu*^U<|=f43ivH!!ZIQF$w{a3;)*CRTU_?@t(IH zs;@`CHP|d_F%$AO*5|D^FNRo{27<+~1 zm@7QPT;u&)ukp^T*HrVR0^WDEK(#=+#XGFt;@`vG<6Tkz;r&kU^G>D@c#qPDsx0ZT zYKioW_aA-3zmpodKFenC3wHl3hFZmthqhzk$ zBw468V+;SgjIENhdKaP9^ zCvi&Zr9LhBs{fXHtIyyp&PjdM=WzkKxQIMlLcZj$zKko<5cO4Qr1}~Pa2+?K0QF7W z!fo7Pw*7aqzv_QyueFok@}UCseUaj z;T=_%sNdop-s1y4;uAjO3%=qT3h^C3@Gn$iiCPT}v|_2+1d>>$7LdhqwIWuibz-Hu z1WKY5N~4Te#rveLQkN5ds>`E-$Wi|x)~hRuP3lTwv$`^>psLuSu7>KUA-1Y(qL$dM zt}S+|>!7aKrLHITsOzHv8j5}DM&f|FF`A$$nxVNkqHZDnR<{%v)vaI(Gnm5ytc?wJ}*S5ZpiBT8$!i87k*qO7KeD5vQu z{?PP-uc)N)6O}c+MKw(yQA5*L)YkMve+q>_#tDNaSU70L3wKS3@X&-}0w#){nn|L!W-_KA zO!U`GMK~fb4Uw2G256!XEdn($Vyq@s1Zme>QZN_ukc#<8 z!vZm0la7VRz#?Q~u?W#*VF|LaR7}(?!*UU(Ss`LIE3rz<(5%K9F-!9&aVCz19JaaDp>j;40f`-QW%nc%n1B&_#CCdZVlCr1e2JbVm=lhqkBe ztL-KC)%wc)w0?4bZEtyuwh#KEANpee2EreMFc?EH6vHqaBQO%95P;DL#2Ac45XK=G z;}L>TOu$4;!emTA7^Wf|5txQZOh*)=5rbI7VFuzc6SL%T+Sy1zBId{wwMj@u3g%)S zQZXNCSb%gaM20+By9k+BEYH?vVF|La6w9z2E3gu)uo`RdCvvbB>*P7w_1J)oa*}qF zoTA-~E!Zm0)o#Of?7&X!!fx!rUhKnu9Kb;w!eM!y_6UyR7>?rv{=!L|!fE`CGdPQL zIFAd+#YN=d67q3bPSsw)Ra}!Zv<31K?RDIcS7>j_E48=e9PMp+t@e(*L3>x;qP-_? z)&3(N(B8)bJj5gUp!PAI$cMB~@eI%L0x$7OKCFE$AJOt|hT6AyCm++k#|M1GC;7Pc zGrr)f{QuZ{52&V^weNc;*@1+jNVOpdBB%rsS_nnK0-{nB1q+B6iYQHrEg}M9!`KzE zV!_^f$KJ3jc2w+L>|MYA49V7W&V9~vo^P$Q&U)AT=3dv&f37KeX7=pavu8HBPYAy0 zo)mo7Jtg>|dr9z9_p0C*j1gTG@I==Ie9;Yo0LF@L3WP8n(Jg_l=(a!v6N~N$^kDih z1JPZ9q3EHYj_8@7F3bp4PxM@13^NhE7MQ}!L~jM=Fbi0HSOd{}K|_&9JNKBi0($6lMdng*6iyvv#oNB6HRr<^XFUYQVOHwSqaqBrqqKGfXOK%*tRcB1_g4 z<_2?zdBEf_PnZJcC2GQYi>z25n6Jp1Z4GM!^Mm=r+QQnw+QT}CY}f!;Agm)S2-XSK z8P-MQ$OgkgV4)%j8zypMyTZD`!eQM-&TJ2nl#LL{*hrBJ+f(Gq_7b_Vy+!V9ACa7m zf<=ow*}kwCSU-`1jTL#Z{Y9-=rKk%VCkkfcVF|EA*Z@&CHVHNmHVBq1>dmHz`m?F9 zG*~)puqc7WuK}`|qJeCdD4ER`rLaRpsq9cu8aqrhm>n+4U`N1Iu#uunHU~CJl*Q)4 zM#J)8`LF`f2zHEUBwGj@E6QQV!N$WTz$U_qV3S~K*ksrg*i_gw*mT$o*i6_g*lbua zY!0jhHdmC(&J*Rc^F;;h0@y;>B3LPGv1kmtL{!Kwg)M`X!Iq20vMWU6*p;I3>?+X& zb~S7bY%OdZY`thAyFpaMZiL~N_1MiKHM<426}Anw9kxR>ncXRx!tR3Y7ENXM!1luS z!S=(-VFzFbVTWLcVMj#M*rTH9>@m>{_PA&!djfV6c1kphtq{#-Ps7f@&ce>Y&WnoK z3$Tl#IqW6aWzjsg5_Sc46?P4F9d-kD6Lt$$1-lKqBU-@Tg;m4ui59Z=MWyTm*hA4$ z_K~QJeJonfK7l=jJ%c?LZDL=DHnT59Ti92kt?X;jHnv8zoqZ$P!M+vkWZ#K)vF}B@ z*$=RfuurhhurH!L>{r+~*mu|u(O&i^?3ZXC%ZT@}JQyD)fU)BJtPrLH(-oJqBA6Ja zCqBgL!wg`CusX21Fe6w!m@&)*W(qTdnZxjFZft$=VYY$z2-{G6lx+lS46}qafmy+< zVNGE+Fk4tNm>sM+%pT?dYau?ywiF*{TfrP*5||Ur8776vU@kCMm>bL;<^hw7Pq3ci zQ>+5!1@ngah)=V=u-33P;tQ-F%pcYk)(+NQe39)SzQhK=0>#%@{H7WkB)-LVf^~*< zfdz|ivmxR;Y$z-Y))m%GT+N2Vy2E}{Jn;qHeDPD=0&%ivjJQBlD4r=AD?U$`@K}bd(vsCAmN5g#M~7(%5}yv^ zMI88un9d;aiI@%bz_BECBkY;?MF{Io(lXw>^Pq(ry6TQvG>OLb_=H= z1u5Td;gZ@+n7u-5Pf*`pVYSA$U-(Vq+b^^x(eXJTYz;-e91toszC&1HsP!EZuF&|7 zaK|_zJgD&<<9x@2eHJd)#QQ2Fzl%qX@l|+6 z!q>6U_*fkejgQr7ukq>VL~DFH zI!PLzlTNlqxp2yjQy!f1UURxQu+UqStS9@(`amUEg)m}$KINuOm?R7MaJMJ*u zLz?nE)77@_GhJ=#zR=aS&g#Jmt*IiF zvetj1No<Y&c(-{xeOxgz10L#7oxKjIaNmEkv1sfd@DHL3eLBR%Wn-A zx`qo~$NAQAz73pj1Lxbq<+6=aJ2kN=8K-&=c! z(D&BP!kxXfZ6M>6E2rE!CFhiaQ!6;Nic@Pi#q-ggh1WjX5%>+K_K`m_qMvL(Z3%{Q zYB;AA&V_2rcR{1@YinV(K0Ie?6y9X(ri~ZGDFykHaQaD$(5k_l%H&iwr-pK> zh*PULCF!Zn#hFuvy|g|Vr(8MZ&M7&k6rA$rlrN_SajJ8a_MQ^VsZdUJe*!v( zAuM6;fX9L#QV+=|jr_46Gn8Ks&w|7G&{1r?pSje9U7V)Qo zYNm?%A5qT>Fo%{W7w^cBIQTy)<0$!HC7;wz&Fq4{$v;6!T2jq;;0h_i9y-yJK^5L{ zA>}75!k#kGmq9u9Pe~jB7P>0=jX{}!l)qy)U+7$hP=@_Kj7Hd{Bc&Y-s%Se@P(BHn z4Ud`$5tH2dfoeQQk(i`?Va7OK6_CG>)1H zgujCN3t3WP{o9TYNjtJ6O!ZRFe%U_l)l0e z=nAR}=~0xzE$}FXJ1O^rYUT=u+hEo(%m2m0AI1r2P7-_O>bXxl(gCQySF%qMVbtE2VERrU^4GhaYw+W(bI z6Jz3$gB46iP{~A4Pa`s9U!)+OYB6hqH@PWQ)NiRrS}CC=DOF#} zR7y)d;<3~tS9+vgB~pnLPryjMR8!KrUJ{a< zoZlXLyGBPtZ;d)69xLQKu@0QF4*HX`B3CTH=9;<>OdOeL_EhhQr z>Yqc*9O^Hpan{n%hO|7(C3VfowP^uH>UF2=4JsK@1~rocU9R8J0yH2wS1@tV55;A~ zqhA5~cwPXPdtU_$*;>yd=xbSV0-# zNy?*QMl>KE!U)d^lv6-G#RAaBb15k2Zv zNbtR^1h%4*`#xDlZ>Wi!f_ zlu}AJN-{n-@gS|y#KV(%d?-nqH1Y7Gx;b6jIW zHR#Nn0j~5WXStgvVRuSn1<|II?mTjIB}3Y?f>O!cu_T(%-{?80WEwOfN3^0m3%c{J zf_jQqV1yURttVv^WpB!PENO?WRPUuM6Q@{_^G<8QtbrcNzXC?k_Ag-?Ta&ujfM$lI z#mdCwjO;O915ddD$*q{4>(#VI&OCBlHFE)>?)2X0%p-A>G-oA^Szqx9p@l5TGnZkT zl6*+2axuw2jjw`dukR>$)XY|BHDhK&>fRj0odT>Dhl4dfdEhIbT1|4uWg6R(n1m`i zu9nd8wuCtjPYH7y3}st2BYAcP0|nWjoL>ssnXU&b`By<_(^p_2YhXv>NI-8>LKPDX zVoU}rm^3ihbQ~z>M>Qw@Q6PFFxW)7g7!t+U7T9J|(Id+Fh0u1UlR-7J0+jR1sfU!X!0ZEbG5d|O zPAmKshnWqiX8b6_z+7ekDCZY|cBbSEE;8FlLvMj9<};W}S-~VY61@>DCqG$$y6=Oo zpm#tu(^NuomVp(t%`5q7&?Qu#jh+g9HhLkAvw_BWU`TQ!?NiA=1&_BWxwjV6K2XS# z&Ik>KU6d8pk;!sU>cv?-z)jH&cyEy zrt!&r(^nV=n9&DA*+TC6g&o3nUfjXb&IbwCL<$P5T!mTc`id@su>IT<$MWP!L+8# z0@L`lEP__mSqm0w=2zFD-RqMa+`xbxmW<4DKI=+6hM=5p0;b_DJaQC!=sm`M zpqdE+E9iVr%?zae0_vYc{bgVpe+~6)qIx&gCn?W^h3s`u&aVM;(3m98eIBHh&Vp*@ zJ*B&x=*g77D0_O6<4yq8Ofl7@oN8txw2C=M{pYCvF4Z5YUsplmSb`Od6V*OclUl2p z9?&W#f%>zkpOj6_%!Zcpw}EN={a`Nby-g|A%tLsN1wRK1Su*plVEA4nRXwnfC9|&* zCWv|pK@~HJ>gk|)Akldigep2u%cX47ptm=E!Jt73sH&3><}wRGIe!^gLA8of&1|Qh z!%C0%0Lb;+qE&s%U7r0nrMJAjDTODWIG`oaQhMbmx&!d{QH#2Q}Ib%K0-9nk%f0c?%kIX>cA( z?zyvQ%wkH@KoZANuSGlDyStECO||$1bUCG(`3haa2-=e)HV5(CL3JC@okyMo)94f8 z_AVjRp8#&}Qrp7gp-bpfRUu1as+k?|xbu#JZRxpCGcTd#d_pzj(1C<{foDTW4uJyF zK93vqfk({@rQ8atn4?r*0{0jX3Lv3bluJMrv!Ciyl;pgtnd{J%eA0jLtk;pS1E^y9 zQ$2)o9_4=OzYbRNnIIC=1gxNAh&xXT9S}lVtP|xDjedkSUlu~xDTK7Yaadv}l&vxG zD49a&(KJ-fFM(ERMx;&9YUUdCe4@HhXEI)Sfoi5BWelid@~EByD(Ol>3C+RGlH_k@ zNsbs!&!(D@bRltCgYG=Sq5Sq>FB((LBtWChDb0dO&aR-EX+s%BJ%hkX{#fdn0h$Na zjy!9i3t6Huo`jIK2r{k~Q{s6Oo-}^#NZSp1i=`6WW=T91%yj5bb_b|tZiCLIWgXhwx>|BQ21qxYm2PvUf z(AiL;&xR8J*-&z)*ke32jMQ{Ah&cfIKrZFkP;%XM>_$B024qwT=tkP}d?=xsxrF#? z<`(6BP$qarwNqE(mxJbkwRf)8)DuWOwRfd3=v;=3>S`vIhFW$bM{f=8F-`#0%rNk} z#dJ_b{c2`Dv{O$q5<2xH`Bc!_IrXd^A8P%iMmY?jnwb-hzv#AFM_CD~n6IFk5p_o& zup+5EyAu|&t>E$OPIB<ho_Kz37UpkN078F zDO-caVd0cX)RRd$5_IMjQtcQ?>PVKV)l3waOUD)&OGb%3#)N9-1q}`8Nn(xx)yyyB4zecn753{zT9~ZA$pobJ()ffbhO8+W^de{6n2udB z^tfuK0P)i!NK2a2yI}^^6DfyKs%Se8L~)-H6T}3AFJlkq->EOW?x_*tGl3z5%wh>6HrB;Z7D3eO&6GHS{Bc1n`UAM6rE&U<&t-jr%) zQXHPgsV-qoLPtc2;t89A&Zf~+&jI_$cVHTy zJTvCl=_isn36t_5_CT^q2bFL{=!>0A3OGZdbS!*1K+xyf!ObeY`>u!z5o@+hdH zPl$nnZ_w=;)EPk5Ha$SBi-Ix%d44Q6pcE4pvV?N}I~vL)k#T@Lrt&MspSt1`0@x9ycPC^Lrvx#mocM%ptI;K8dr( zxJ3%-?a^Q{lLo38{Lkw_k_vxSi8v*cMs)$ zU2Z@^W%eB?JA>i&N~)76(UclhIrEWWVBH;Gic~e8hV+A5`P+>lnrb3)Gr%G zN)is@IhxXMIMK`q!Wznvxcn=ab)cHrPx%p4G4)3hj{>YsFoY$vJymqiNX?Kv9XbCJ{7e#QVJ3;> zz$B4W7>H@@zSDdNnIy8mgH(vR*^hYA_zuu2hOmONgo%MhyMd`R&-A1TR8Ir@C6PU* zeo5qraz0tl$GQakG65M&F}li#M>m(0ytZW;K|2jZ6#PyxVWeINJZdHztYVgdiS|b+ zD?mqj&F0V@vKUKX458RN0GCL}`rZ;rBs6A6;A$swU85b)hVFFTcuWdu z!zFZArQCq5zLqexYp`n(f0g+bFi=oIHCg$rd0<=pyIf@76r&i>0lP+5Xwls=kO>T1>?wh7gN>+2iyCCSeFLV_{m@uL(*c^6gtpx7Uew3#gr>R zXVYC^6>|U#cf3tC8K2e6Yv>9(VplPrq16m|l~F}k3yUeE9h<R~338K4e`K1pc|j`Sn#ztpigG_OhRbF>fiJI7>D z;g~`7Ffh<@6!^ta4gPX01#_9&)+Xbmit1v@K*!|>&9Pq#20CsAm5w_>h2wrO(f$bK zDKOCSJSddhr}`#}_dyl&0h9>{?Mw-=Up$HQ zB68ky?CV13*qeb^Z`_QJy+(iaSLi~|*pv%sa2dEhF^V(^V*D_F$eO+5#|Pm*(B zpkpPdX1;?}jBqMpT}m^sglPs=P-15a8Y>~xp9#K^Yyjc&wX%@afjI?&Ui45Kbvwj7|I?70|j5eRp!EC5~mR*@ucx3 z&@wgv3>0L5m~+z5nP9Lf(b%(~JOYNYRg|AV?1Ri9?M%uLD3}1f%AAxcP_T(=;`cWq z?Qn6JsDzZ6j1qx@me4s=m+KRcifKe>sFXTWwgJtW zb)*ad-O{6}Ur9Nbas=fh5G!CTNjn$1{|NFiI-DYXN?>QZ{fQ zdL7*tPUDY+elE)g#V)(Sc`TXXV0X`fJZX}7MGKc2_;YCw#A?YRvbq}wM!L)duUjmo zdK0K-c7yh2H>jr?#QR#H%0*mC%0^Z#iug{@N~sU1W+JGL28-DQaED6)Z=`_OMOs2yI1Y3+EdXQK zWgwomKxqLv@6rNt-lYZPyh{tnd6yQD^B&4JUP?-y1?EsDH6rg$sF`wjDwuPint29d z#=eZS67iIa$$p2W9$A0$HzHc%=7i8dHbONaBv4L_YcySoH?kqemL0fp-0+rHtl;1(O^u{ZR#|BKXCaVG1O@Pj$Ya{+f z#G{lhpmEkvZlyd%d5*FgjQ4m(`I%C074bBtlv4(Qcz+Ttmdiv^Pc-E(5To=E(lg0= zLLp18uXvAot4T~UGxSK8K*xKyQu>2xrWe)y!4)2PlryNm4D>f5`NVsyhmQBy3*zlf zdR)R{s^dMb($I$>W*s#CC+g8#L)xS>SmDtXJV)OMs_=+`j`tWunL{~+axvu=%7c`b zKs^6~ZnWf&J-$Fc_Rw8RTCzE%Go>%6qOF0QacEt6H?Wv`$_+>>m5T}Iv4l$L5SnTX zrJAyYax3K_&{keSd7XM5QvHQee;s<7ycsyy-UU2oPkM#D8KF$x3!ZlJTAfW}7JzDI z7PwbQ&O&v|71Xm4EaD#nt6a!zJW;N*o}8%$phtRpFj3x#vM2almPVOFSxUKVhijQCf{+NGp+0r8ES7r8JguAY~qC=P(5f^jrdldv2vX21a{Uf#>W= z&sRztZzgOB7P9_eo+nvDSYRJY{XIYxor&4XS3=v$cT*mtJV#kg`3$`3sk4Q|F{QMo zbfT0~cAyLaAA81vN@)tXL_$WePo7huJ<^HRS1gBap*RZ~N*;l7#S73@{*zK~E9qAb zpfj%x*jW)nnL??eoB(>HuL651Hh_Z_X4^BYiU3Q2{Mi_<;)?L%}JE zzLbfS+2A(CEXt*no2Y*`&DT*-4UX+QTp?fyvC{QV# zM7a=LV80fuVm5;#{Rp=yPJnLdSHKotk3qSD*+FXY3L|_AFC*v{UQNKhE%!N+TKhnE zRkOTPSV;&luf|S3Mm-x6$Gl8 zIIx1rrhXOW1khJVQWY~tz<94y;2z`WpqhD0X|Ri=vIMieY{AZoK*}DV+AEzhA5_sC zawr#jEriF;l;l~V@oa=AQGST>Jmqb0jn@mxuV5uh;(Mew+)a*R4SJ-@srIGpOxYiF z)A-Y=9!LFZ%6XJ~K#%l`R9~a|HPs)$9QuUS!b`A+JR#Nt<%(utyjK8-wF|0;Qaz2b z40Pv_7Ra&R4{eiCJIWn_PLy8+mC~D(4=7(!ex&?GDcVcom{VF&I#7CmofT~;JA%62 zO3K01lS`?loJYBeatGy6%1e~hl&>j&Q0ng^IX3{^H0^0mJ?@n4D7#X|P^M500WG|z zQ7!@ly|#lrypDi)^B=VLegr1Ue^Bc0Cq1wkh&>e0R^Em(7?dkwz{j40L4|iNSS=>& zc#l2R(9S%f72by{H*g3;csDE+}i?@$o?Wz;hY9O+l9=R@atuLe6S zc2XV#CwN~5!bqw10HeLzQ$~ObyoZ8nrVzwiM$}(SSq5(L-U4=3 z90cWx#~@a`!C-IxL6WB>80>8eMtjRB+kr>DyHfTBmC|I&Y%tn;66Gw)rQlWXO<-q5 zIprDfsP|3qvG+%?gsvbdyn_yr84+o>)lOuUpo$?Hd-U-C@~&;qanN|*49ul_nkxF- zT5dp|UgiAD@R!i1&T=tXQ8aX~g2&MPIjEF=0k2E>hsnIL0VtE(gZ5^0g-sd+9q8E; zjP*$XH_5ZWY_Eyn6vceX)s$PnP4a`3=fFhyHPC>G6BxqkGP4*9M#9d4o(rqQ!^l;< zUSEyBc76bR2z$zy)_Vr~hVbvq0Q}r=oPZBwVM3TLObpY98NdvA0|a&OZ#|d=Zx&M@ z)&SNJCgVw17nm!|4b~36_OK4HAv{Jjl*fpN!G^;|z*Ml2uu%xhg^h;g!SK5rq5{|$ zSRrgIY#eMhucKiJY%XjI&$QlF*f!X9*ghO%KMZeMD15-$PhaSfe|*>a$-iNoKc-z; zMu%bX!Lj(C@1xW!rOU8wardSj`L59PtA%NnwBvrN-2%=jPLK(zrP|@ zmJlm*i3;ix9G{UGACesypA|*vlpfa~iT~+`&ln-h8m~gt$G>6t7ytb6;W6aco`2yd zkwz2z&8Ig0fPV-gx!|w7F^8Y(=fh}!?}PXz3f#a5v_TBmf$0Vn#DwA(aANRp2onHJ zKKt0$Kgr*evy1@0W{iw9pEjC*iKq4`+7SF-DX1@kiDfd7PZE>N#3RpCCV@$#k(wbl zyeWXtSa>rL9?N7QUK+mDem2s*avsW*g;+`OC;mlF$8ZvPjFkJ&jp+}KUzTP};BSZg zQt)3qQfJ{Pc(P=&nLvEcLd$DINeSZcy$d}`JUx6D#+*x^PRlqPX=7<#BtkIaDp9U9 zUV8IXj!za&>lz6q-m27_jjy+zib|iKFX%eF9P{xAjjWr=gK%S zZW@y@u8a$r_TuBl=ph|B3t2QxDoUCBN3DLhjT6F$!Egt`U-I$LGVy4A5}UMHIy0P} zkwj(ya{Ax2g%euYAGsvsUvf@sbI7FMNUM;V3<2X%di-4nEpMnMCg}mB1loF&Z{*DW z*>1nf?a1Jl!EsfQGZcq&u0%=yJb%CIigz!Wy8jUO?_2eEn@W&p7LF`ItNw1=*7ThC zqYk7NDd>gCXeDc0SATnUe&^%#NBWlSeVAuFR7LZ7y{Fu#&9IbY>ml(OnMrA>zBV!^ zsf~4fsxmDuDK*j8rbqVxiKmTqW>#!!Tx@b$YP_$_@c2xdHmwcy4E20sGc)5;`X>*! zMi!}=zBbtzsa~1N0r4rZnUa(wWky-eo0;M?L}p{15}TTo5TBV9@#pc7 znYA^SSx_8Czoe|;e^VwWDJfTKYzhhxJlsD$Jvm7kn}rfP#ipm*IM?Qom64s96_lEg z_HUNQ#fGNCu`}b9*%>&d<~uwY@q@Eb&iJ^njHDq+$?=Ktng3?4uG(C!@%fz(ZXe2Q zQsOT0L*kRIlL>uoVl#tMholXP&#Vp{`-i}oKUr^WoSH*v5fotSy=kpn9e(R$;;+A7O zj{RiF)8&`ux84rdW7 zEmdYDtwWr;Cc53?<5JR6<77>wjfqFk#4K2Qx3R`dJv}Xh-Wz01rB)Gy*L&Lhs z?4@?KUz?=1OG+OQpJClTyn}Uz@DQ)IvbJ(bfQLLl640TYi_A`HTU(>Xe_5mO_>3V* z%6Mr$&*sk-#!t%$@_BX9A$WTHd>)Tk9+27e6tixW!{LV}^IRt!_Y_UHYrd}D_eG{= z`I-Hdc5h#GQN@(3^jZ7JdUWKYamLwoZ;#Mjx6CJSL zH=DP0rR9-9V@CGO+UOBCFQZKi)kOSv}Nl{%}1Nsx_!RhEg)U*rQf$9-?p^c zc-VbQU1@ic-ii&Dc9sT}29|ah+ipNsR=St7voa&uiJJ#GVIJh1J}8NJozpYY;j?hOY}-7M3MH?5#g#73Uzrrwu`irw4?UBlt0!-bAX{khyK+8;xqn5&RJ3u zQeHdOK&q$BQXu-XyWoOEci}M;Ml{wj9ecR^Rrtudzv?eFXOg=gzF3m*Zs5@^;a0ho zc`;qzegEpTa>E66J*yi#+AmG#8wGD1^KqejtJ(-i=EqkQk_N}hX)}@xHn(kiQ((!}x2+!^6 z!%~Bw%X(F*JpE11NrS`ROsRMH;Y~yR9LJesgA*-=Uvn7ou=G{;z4DAVbBity_3RhE zp&)L)OW*yGP7BH&sop#t;Wl(yldLYQk9U52Yhd;8-Y0uoUvQoG@YDUJyGFdqp3`kg z<@kGRcC=hOYGPiCMincH~9OT(;BD^P)xY{2RUM@IB7I(W!^^|zjBN0s_B zf~0wkRCjVmhHec^i5b>-!}d?JO}f3_bs<>sF!OfD5FgXk#fFO0MO~|-E_l~WPJAZq zw<@^zf_D3E+U`D3_iAUO1@nVzx-J>B`oa7azE_sM)~nxf<=0IiWpnCuF0V0t$DG*M z@k*bco>wQ-lL&XWTXv+dU9xTlU8u*SN+r^C<2ON=&^X$Pi$XsM{bx=;mwj8+qV z>dBrpKl3Q%__S%eW=>jCKUVH0?Mg20dMw6^WdYLmvcEe&xUrG0Bs6L1Dsxx3x01R^ z4%_p9zD{@~v%vkYn1A-Yk}{kx&&HKV4~jIVbpf8DZg%U8vGDDHPc zb)_`3K*enLMm>{|{FU8($4KzB0SpYxjK(CYSonSgcnjF`s`ZAWQW8=KE`9 zK_1-7+9QJH@W{P}Ib_X8cG?zJ%&dgAHLC(L;37{_a1F2K!A)_}|#|8R=Ad!I}qZB;vjHTyk;bxTXjvTlcaRZ;?Z zn2)#i&(0cRRKTWMRXY`6{AdM@xoZHXZ zx^2mj@Z{EwuB4r=c=K$~&th|-M3xA-0tn%uV-5y$Pq*TL-DmC!;#t+OW>|uET)hhAYZ4 zG9%tt%zW^}eP%}Kl_4=rhIS|@^fW)8*+;lLv75SVbCUCo2KqmzXSKLD#JPKwskGPU zi|YPADo(}($ijBnn>_H7p37)qVs)pt0q5jCo(s1QjViNPsII6tCBo<6T5*ivl6C~^ zixI51v@RJLOnAIstWYYzKYxr~e>swnS+QkZmc@g^SgEm&So2(B#$$yvV@!WJAD_(F zeq4}+TxvdXR`r~I-YaEk%YF7}Jpa8>tac@hTrlK%L9YKee(`zOrEi_vJYd7~G`~$Q+Xg5o?$E)kSP+}$~`bL87uZRfvv_xjcSu~u$AJ0s@SgxeOj zT$bN>#=V)kmT&Kce4e!U)Dx4kX(1;XU7V6JtL5O7c?~}|t_i=Ac-rPyl;xQvllIwf z9_n&BGR40CN$;}T- zz8W_d$9v9vGs3FVo(t6xPtFgUT|eriyLn9249lR&lKt!4+Bbe>WY&<0u5$0w^z5AD z;#Y-rCWWTdF$wV<*`nk8j0^9QPaS-bzBF=rWX?==X`_yU-k;7bP1MUO^LQz7wm9)9 zLvH*&ZIe%8{+Di>)vo68P3lanGP)i2KJ9G4f(*)wDiV>x@>TXWS%^MYo(#-AIw zGEn9`_tyQvzE_!1{R1zY9e;9X{jYU0)CZUPZs7Y3{FO9s_C2GOMqA}!qAQ1erTIF# z7{6a@$8YliWZwnC_$`%VZh-;Z-Bn7Ss$FFCtE-fJ{qH^Q|4*a$qQ%LZ?%eD+ zz2(S3P7SK}-MfFZq^oV%y0caFLz>lnbz#MYF6*+S*7ct2R(79d7BsU_+v)4)L`j?9 zU!bnn~huW_I+Yw$M34g<1L>(4q3YRpl$dm_16yP#OM2N zIKQziyX4FAY|QJr@(}I_AL@t7C*S8lh|LW%H&=^VFkF|7!SMtXvlR zAD>?28x3D)zPM9q*}5*7J>Tn^IK}@TGwT0akM3w|qvDB&qXg|es-A9LH}vM&;a!7y zo1C%+_en7@S#x&3YRXQh%f?G4rS#t!$*%~pHVG@K8sT>@a?ggIa~oG%^2V;+Gwf~A z`4`^2SNHZ$(G#9fcf3~VcJ`4?ddtR>!$e@N`B{y#r#Cc(XMr#^^a;}KBvgK%{|?QE?-W|It`Kew#v{y@hsi< zSD~KCokM!DlWVT-w0Is;lzY^@Ro|uM&-do&w^dyZ&uIEedTP(G_^3WS3q8|17jKx( z`QWoFq30Hf^W!gtV^4RDc(NdUX7XA^m&+fAm#?lrqJN9mOXjt3(;3>Z|4H8_DOUM4 z`o|sjoNKq`;g=UV+wL!0ndQDSE10{HU=l2Sk(5{=;2LA zFEo=TJZWp(x8aF}HcijBd)n&hp7$M3J6^u#GP+CimK~eL^nMocdim{=1*g2y_T|}U z>C}5Qq-puQ{Db!0w{IHgJ7MvV*sZCHO_rCh4y-Xw`!UfadGpUZT~AE1J(;j?f#o>k zIKHoBL$4`2A2fZqZR08B)?wX+m;If>*3R5mHf+t7(%IP!uTLLml5OMcvQm^<+Gmno zdFkshrKyG8buGBj;%i@>7q)Tg zVLs@j$y_ei`|qtw(AD36ST^~+_*|N|pG?;@i_~I)%;1luXBO+b zzn7-)P45jx!KI>zKq8wY2QDxFpz~wLrUF7 zyZq(8dKh+kmCPV85xc3@h(mVlYrkbI#_FGDvPRZk$kGelYW(xwigi{tAAdlqdNh5s ze}!3({+@y2*E{p_%=ZtlDpK6}85OYpfL%@EwIex|yAxiSR`NPmiKld$-&f~Do#^l1UZglZAIqOMf9ur` zLF43Edw0LB9CKovLGQ~y9aeQK?%i#N=aF4aD~{T|+qlkp@~Fz9%B80#?47vb)XBLE z-@IJCuluwyi}RZYOY`~7exDs3Sw7zku6ndTPX4dm|NnX~;*Z`KEv^5%)B>44_eGb7 zzR2}9p{y=lUvrl!WS&x2>>K<;U(A@$PyfrNrDk5czkIeRY-txTwY%=0eFclGq_0dg zy+5bR7{fkyO1!5XaH=shDl5uut1I*}|Mp_U!s}bYpA}#Ali%tcHBnIc-KzQXooU}A zJNmr5@8URnP~S!gi5o5}1{>}#XBupHerEk-=o>$8SZW_bqxCH}_@q3L~?c{Hmg~hux>|ZTPf)%DxHH6ym-X zi@SQo*IO59>Fj^}!iLN@=ik5T=YIC<0{fTCH@}_!x!v3>|L<$hoEv}a$i*h->hFHH zWKZ+%LGkCOezW0?k~$vkUSNJVs^^szr-DTfibIs++M8Gu{HmuP`s&cMgD=L$=AQYs z+(YMibG!SI7VlmNrTNX8{=Pt2o-DsvJ@|fa50QN<+n>^W+pp+5vbv-R`;G0$ix;qb zTyD~+--&r_DOn`?r+Zg)8RL(%taZ?plRB1dqKmrZAM(ANKl0eVPwCR{OWj;k#=J2; z7yi|!G~aMKCe>I77JUA_2+YIB_o*lIdOhJ#Cy9Sq$LK2Kg|F8nIJi~jwCthk58(We$eTNRv+G;??H}e?5>fT)gHu)OwqJT%N!RmCCvME&*0uCrO8n1H_4U-! zlwhwFN8fo!Ud1?;PG>eX?sBi<)30WBxmTwgs47l9yV+v<@y6{}G&?ma@6jXKF7xZr ztuG9Cwf{`V^J5*?->TE};DL#UUp1Q1%jDxR@6j3c$A^DgQ!Z^?I&@#R@#Q0~J=r*8 z-Qq@*E{|Gn6lS!)`b6Wnuj8D)9SKY@KQKn+u_0!6Vf$o$UCG^zbs8;cZKs`y=VB(V zs$I6QBYRNV#RGwW>-k+oyg$}edPWRpYxeDN{ZKIA^yAS1pCUJ0wE17G3VXP@v~p9# zdn#QMTqQ29?h1*UJi$W}>)JnF;-U0Zy2;&TO1J(Vf3uR(F*WXCnDA2mY74pCW?Rb2 zQ`!7k|9o5QFL$ld(lhDK7+$yt;@VkOMXjIYUD#~f0>3N!64v&K zbie-oiPwP+B}TzFw@!UfF{EprxMs_Y;P)SlAMERBZ@M~7a&=I_8Gi;!Qo49NAL8pd)jYvO^;o-+&c*+&r=hXd)@c% zZT96r)#D?t1vX)(!fmG)Z9VD0``BlDxya3J#X4`BZ$mA1v>elUkazctvL~^rZKqC| zR6cxfkn(C-qKI3 z?SOKfCLvNiU;f--n=Ex!g!nFQVd2r}LeaD8<#=1elyH-cmdG)a(@4>w}>`}ve#=lNXnQPXE{l28*!Y^++yPvGgdoXCS zpJ9O>b8^(k9UWJvJU+hqguH!RskG5PDHD~rIINXuah2zL!|+@A8DXy#R~hwfBM+zwZVAd^P>|T|tIL8Qc}z6}3w; z9`vgWyM&m({I~B~`TT!;Wr0s#S>WT91zdA$YQAO|HFjEeEp>IiQLx+Yx7&L*UDUQw z%Rx_jhppbJ7Ju5E*S0jAtYj2Q+K<=iqyE=@ZIz4u4`aBrsDl> z!C3XDn40t5$|ubnxA#EPEW4Qc4%<)LJ9yg7QFQV+H*(YT^^I*;tV(zhYc;UiA!tF& z_$TrOcH5W$oajvwzpB`PeYrxPgpPA~tYx(&xHxHO?+1KcDkIs)3 zi|anM4cc3OXZw*I9vnQJG2(8<<7Rit14@p*KGZn!W`X)eaFBGxn#p%w^jWmwd)3B- zdk2g2R4=c*?EE;W#R?OL z7i=fENqdtBRxIvB($Lc2(#~Up{{0ODT)wz&v8Io$FYaa+BXx~&aiKT6zS^4`Zg$MD!)A!ql<1Ya+@wPL0o1MJX zT>BoqleOjF4XE_)oA`EY*_^xGhc|S(bS*2Pgmla3HkC~cN6cEfa=IX|G~p@~L&maP&R z%zHWD>j0-&r7hdE9Mm&NX(did?LBAqgM#-5ro0Pib^E*b`F-xMQ|;D2++hFmeAT-; z8%i9C=LFaB)qg9RaK-AdOZ|H_Mw=GX*RxVhn}7;gY6sU zZhCM3`L?5%b<&*8y(SDuO#(0tXF0E>L+kuDCcz2%2et%%sGgGBIL$1l!-^pf z{aVH^JsjPw|JcKpN{`~PcW%7<{MLN&T>I)XWyR-TMJxU9_tBj{uC>lkoeMgfvaL+_ z$Hs1}xpk}&yZ?^=@j4E#ZpS;nDE_!OYW6ke%Hn{1z1|gKX!4+l0_p%*nI6c%WBQHK-+0o(UCTbht+dwI^wmz-ljI+R-RrK zeQ@#kd69!7LOOOh(DvlKA${~lcO3L%_@aaRQc?z-c_y2$0%lY?81S_*)tsjq0z7f{9M;q%G zN!8yHPX>gXZ!g|{WUfh8vmJ+0tG^}u7uLW!I{C#6=sP{e{pju?oi6$J9;Ti)qOrg4 zWBbG=;m@5?glVrXt(@w1FgJXCRPU_)3z~ntzj_qY{is^n=Ius7_0;y4IS5KZ)4x6I>7?~Wo)Wd66ys*=` z^o%<{&wsD!Q|PTf!qO|dW=z_hv6U7JBhQYBin+N3KRS8r(-4a$nXTvB)XX(s$0)z| zJo5ilbLHVst$%zL+YGXWtj)MIB%HxmvRqjbB84VJ8Ef{RC1jsbVyS_dMr)<~j4e^I5*1?-=76-RzgrkJ_=* zjaKaQqw>z=vmJJqpi^DWk09!Fjuf{R9Iw){e=YucbRbIRe_7>Hfh@+|__2--i>7pg ziSteTR`^Gu#qC|4e02G-k|wq)3n3{aHZ6d}rm-Q?;Be5}V8el9*o|**)!Seb0EhTt zQ1~ys4H9%W4gKdu!wlLRB&Z1J83}<1hz8fsr>V~vBjHdmG4r)CLWOEA>b;rk#H9H# zJA>e4;(Df=MR%bWNOQ=T6;v^081jSB;L(Q`$Z^})K;)4DK3Q2(fViX_?kGSN2!qa1 zh!4_<1^;*k7Aq~MCZ;B>Di0=uWMsZG14|)oX#%|)7cj(U{F$dCh&$JKI_w)*`SD5!f_is@YI{?9TMZxz)QGA`0UR4pG@cDya@pV4N zVow(GZq(!lwoCJi0k$#r?uN{58Au4}?9yxBlRCRjR9C$qRC?S~wiZ1$!)}0~!fxNg z!+nwO34$%$mjD>&0qRV%W+7(`)fhT-@5|BMQSFV+Zg&IlJ4k67jLj4Cn#9I3K{LrC zW_#Zp(F~S6!|zV8i9A6x%xj9?A64=2s%Z;>%}MwX_d;-BQ9t3s-UENmJbKpA==Xvv-_KIp-W`5?VJy|e{A7z#OvJH{Ckfjg z{@IA$28&#^V*oKg2DFCO80udT(ff_LL3T=6W2dX>A>u`V7zGe7d__=+fYJuPgmPei zlc4JBXsxqTHGKmKODk)_DF^rOpr`s^OWzlIy4oK4UG$XpWynFsp+^I8KN4NwO37&{ zXy-ext~ShLOPi>Nu76y_J8}VcDyyyQ?E2?NXS_;ku3Z)yUMPNTZ-}Q8JxEe#U3y>; z)-Y$rO7>__QQ4E&W5T&&vT&Re7bkdF$9-Crxi+^f;8DOES-+z{^1g{btsQv?k}Jo= zIWKXVX!ZPhzWqqelXvyr5N91gT~I)==`}nf_JXlUaltax;Qy{jYGam-awR?%ya<;n zGCz^fjaM0;eG+dS5w>Dy9?)B@O&_^qNPdz_+r=W;2klsul$NTv7~mIc7vXi)v2`$M zf$xJ{XUyEA3}kF@ddX$(n^dYn_wxf21>{iqLN6>Q-_Mo#TNn#5d5g>AJyKn6(2$uz zISL7xERPd9w`e8=RyQ|hHc$Hn%?v8IAo@++;{@mkUAOf4ol9m1A^oFR+Vtq%@2xbw z#(uuGFYA4ut3Scs+4DN_aV8>LzG(8%<4)3D*G9g%`)8s2flEB0I}PP;AM2`RG>Z2= z=cYjSGEQvb{D71=tH^x0gdqm~zBXI0OZa}?_3qf)nX0LEOGmACB`z-1LMj3Tyhe{ zO-HE3rx_{wxUOjghPUmGKaQWSuuG=<>4^({?jc&NAmDU?1%t{>1%ptnd4`eMpJKp& zUIAaB-=fby`;)%814df%Q@LQh17`K~zlr{T2vnv1d-C7U*5J?zdU!p4Ih4u#jUFS+ zmb~q%vYFm~!HFOA3J{J;qrxaZZZ2+~$I<3Ilsxer8gSptEPl=<{d0lrZ=u6>(6Pfg zPM!V{Hp=tlp2DuQ@E~mXbJd)rAr_35GV71V4zW3C|9DK)gS=sPYiU6gWr<7IwHbQ5 zVDLVz-GLlJJ>Nhdkf5w^&cuEIirZguo4{Dwth9w!QU8!jv-9I2mWh=V-PzO2TEjDHpMi=8d{Ug7st0Z5i+i@3Uh2?0jeMSX zF1-x@(csosR{yW!)}IW3gG>W#eOV2FucHfS_GAAlboq_BzjgWlC|I**{ewL*X$HH- zJ}{piZuy`f{PrnlX(1Ql;ZhrYLc7HiYgQ}en7AzuodQ*+CONJ2doMF^(lRI2K(^l4 zUVCH_(x05OZ6=rC* z;BTSc-*jmFvK3Iz&|s|UJOvfX^2T_0Pp!h{-g7tZEU>AV= zGy!PK0|@X91{H#V*>2j^Ll{rk`t|X0pVjL!o9>2T!7BDfhG$KTPh^6jaKl z<8MCkT7O1RyQsWT;n~wOc}Csj9Iv9O(%y8(2TQEaBQN@enyNK;E&T8%A^`aeO=&Vq z=KFa>R^Hwx2kl-rNIRYr(^1k{yBDpCNU@=Bk8Zssa#inUjPSzLi)e9zvP|V$_Pb+Y zhEsvs+x1)(@%+8}8C-#%j7Nf=YKbarU9xx(@gm@D>pfiD7M!hMbFMJz zWcRW5T+@~N?W|M6_wEkQz2LS}IAxbJ2^$_9@nT=*MPlG8a1VA4yUAcxf4V9J(wtg0 zI2%>$B+F_>px-9zfLTsRfAvJ!JoyZw3n6;dX%GF2=9?4B%TI>tHuaX1z#A zO4t#_@Tl-B=h0<32`W{TS7%BzQ4^u&Fn~C;X#yAnme>jqn*d@1K+L1s`fIxv%$x$m zz;yqA + + + + true + AnyCPU + Library + Properties + 512 + true + + + + + + $(LibraryNugetPackageFolder)\Microsoft.WindowsAzure.Management.Storage.5.1.1\lib\net40\Microsoft.WindowsAzure.Management.Storage.dll + + + + + + + + + $(LibraryNugetPackageFolder)\Microsoft.Azure.Management.Resources.2.18.0-preview\lib\net40\Microsoft.Azure.ResourceManager.dll + + + + + + + + + $(LibraryNugetPackageFolder)\Microsoft.WindowsAzure.Management.4.1.1\lib\net40\Microsoft.WindowsAzure.Management.dll + + + + + + + $(LibraryNugetPackageFolder)\Hyak.Common.1.0.2\lib\net45\Hyak.Common.dll + + + $(LibraryNugetPackageFolder)\Microsoft.Azure.Common.2.1.0\lib\net45\Microsoft.Azure.Common.dll + + + $(LibraryNugetPackageFolder)\Microsoft.Azure.Common.2.1.0\lib\net45\Microsoft.Azure.Common.NetFramework.dll + + + $(LibraryNugetPackageFolder)\Microsoft.Azure.Test.Framework.1.0.5785.18045-prerelease\lib\net45\Microsoft.Azure.Test.Framework.dll + + + $(LibraryNugetPackageFolder)\Microsoft.Azure.Test.HttpRecorder.1.0.5785.18045-prerelease\lib\net45\Microsoft.Azure.Test.HttpRecorder.dll + + + False + $(LibraryNugetPackageFolder)\Microsoft.Data.Edm.5.6.2\lib\net40\Microsoft.Data.Edm.dll + + + False + $(LibraryNugetPackageFolder)\Microsoft.Data.OData.5.6.2\lib\net40\Microsoft.Data.OData.dll + + + False + $(LibraryNugetPackageFolder)\System.Spatial.5.6.2\lib\net40\System.Spatial.dll + + + False + $(LibraryNugetPackageFolder)\Microsoft.Data.Services.Client.5.6.2\lib\net40\Microsoft.Data.Services.Client.dll + + + $(LibraryNugetPackageFolder)\Microsoft.IdentityModel.Clients.ActiveDirectory.2.18.206251556\lib\net45\Microsoft.IdentityModel.Clients.ActiveDirectory.dll + + + $(LibraryNugetPackageFolder)\Microsoft.IdentityModel.Clients.ActiveDirectory.2.18.206251556\lib\net45\Microsoft.IdentityModel.Clients.ActiveDirectory.WindowsForms.dll + + + False + $(LibraryNugetPackageFolder)\Microsoft.WindowsAzure.ConfigurationManager.1.8.0.0\lib\net35-full\Microsoft.WindowsAzure.Configuration.dll + + + False + $(LibraryNugetPackageFolder)\WindowsAzure.Storage.4.3.0\lib\net40\Microsoft.WindowsAzure.Storage.dll + + + $(LibraryNugetPackageFolder)\xunit.1.9.2\lib\net20\xunit.dll + + + + + diff --git a/tools/autorest.composite.gen.cmd b/tools/autorest.composite.gen.cmd new file mode 100644 index 000000000..c4d28d9e9 --- /dev/null +++ b/tools/autorest.composite.gen.cmd @@ -0,0 +1,20 @@ +setlocal +set specFile=%1 +set namespace=%2 +set autoRestVersion=%3 +set generateFolder=%4 +set packageName=autorest + +if "%autoRestVersion%" gtr "0.17.0-Nightly20160707" set packageName=AutoRest + +set source=-Source https://www.myget.org/F/autorest/api/v2 + +set repoRoot=%~dp0.. +set autoRestExe=%repoRoot%\packages\autorest.%autoRestVersion%\tools\AutoRest.exe + +%repoRoot%\tools\nuget.exe install %packageName% %source% -Version %autoRestVersion% -o %repoRoot%\packages -verbosity quiet + +@echo on +%autoRestExe% -Modeler CompositeSwagger -CodeGenerator Azure.CSharp -Namespace %namespace% -Input %specFile% -outputDirectory %generateFolder% -Header MICROSOFT_MIT %~5 +@echo off +endlocal \ No newline at end of file diff --git a/tools/autorest.gen.cmd b/tools/autorest.gen.cmd new file mode 100644 index 000000000..76d81bff1 --- /dev/null +++ b/tools/autorest.gen.cmd @@ -0,0 +1,22 @@ +setlocal +set specFile=%1 +set namespace=%2 +set autoRestVersion=%3 +set generateFolder=%4 +set header=%5 +set packageName=autorest + +if [%header%]==[] set header=MICROSOFT_MIT +if "%autoRestVersion%" gtr "0.17.0-Nightly20160707" set packageName=AutoRest + +set source=-Source https://www.myget.org/F/autorest/api/v2 + +set repoRoot=%~dp0.. +set autoRestExe=%repoRoot%\packages\autorest.%autoRestVersion%\tools\AutoRest.exe + +%repoRoot%\tools\nuget.exe install %packageName% %source% -Version %autoRestVersion% -o %repoRoot%\packages -verbosity quiet + +@echo on +%autoRestExe% -Modeler Swagger -CodeGenerator Azure.CSharp -Namespace %namespace% -Input %specFile% -outputDirectory %generateFolder% -Header %header% %~6 +@echo off +endlocal diff --git a/tools/nuget.targets b/tools/nuget.targets new file mode 100644 index 000000000..1eeaa9941 --- /dev/null +++ b/tools/nuget.targets @@ -0,0 +1,138 @@ + + + + PREVIEW RELEASE + + + + + + + + + + + + + normal + + + + + $(BaselineReleaseNotes) + + + + + + + + + + + + + + + + + + + %WINDIR%\System32\WindowsPowerShell\v1.0\powershell.exe + $(MSBuildProjectDirectory)\tools\Sync-NuspecDependencies.ps1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <_NetCorePackages Include="%(NetCore_AutoRestLibraries.Library)\bin\$(Configuration)\%(NetCore_AutoRestLibraries.PackageName)*.nupkg" /> + + + + + + + + + + + -Source $(NuGetPublishingSource) + + + + + + + + + + + + + + <_NetCorePackagesToPublish Include="$(PackageOutputDir)\$(NetCorePackageName)*.nupkg" + Exclude="$(PackageOutputDir)\$(NetCorePackageName)*.symbols.nupkg"> + + + + + + -Source $(NuGetPublishingSource) + + + + + + \ No newline at end of file diff --git a/tools/references.net40.props b/tools/references.net40.props new file mode 100644 index 000000000..16e19ae0f --- /dev/null +++ b/tools/references.net40.props @@ -0,0 +1,49 @@ + + + + + $(LibraryNugetPackageFolder)\Microsoft.Bcl.Async.1.0.168\lib\net40\Microsoft.Threading.Tasks.dll + + + $(LibraryNugetPackageFolder)\Microsoft.Bcl.Async.1.0.168\lib\net40\Microsoft.Threading.Tasks.Extensions.dll + + + $(LibraryNugetPackageFolder)\Microsoft.Bcl.Async.1.0.168\lib\net40\Microsoft.Threading.Tasks.Extensions.Desktop.dll + + + $(LibraryNugetPackageFolder)\Newtonsoft.Json.6.0.8\lib\net40\Newtonsoft.Json.dll + + + + + $(LibraryNugetPackageFolder)\Microsoft.Bcl.1.1.9\lib\net40\System.IO.dll + + + + True + $(LibraryNugetPackageFolder)\Microsoft.Net.Http.2.2.22\lib\net40\System.Net.Http.dll + + + $(LibraryNugetPackageFolder)\Microsoft.Net.Http.2.2.22\lib\net40\System.Net.Http.Extensions.dll + + + $(LibraryNugetPackageFolder)\Microsoft.Net.Http.2.2.22\lib\net40\System.Net.Http.Primitives.dll + + + False + $(LibraryNugetPackageFolder)\Microsoft.Net.Http.2.2.22\lib\net40\System.Net.Http.WebRequest.dll + + + $(LibraryNugetPackageFolder)\Microsoft.Bcl.1.1.9\lib\net40\System.Runtime.dll + + + + $(LibraryNugetPackageFolder)\Microsoft.Bcl.1.1.9\lib\net40\System.Threading.Tasks.dll + + + + + + + + \ No newline at end of file diff --git a/tools/references.net45.props b/tools/references.net45.props new file mode 100644 index 000000000..17e6ea43f --- /dev/null +++ b/tools/references.net45.props @@ -0,0 +1,34 @@ + + + + + $(LibraryNugetPackageFolder)\Newtonsoft.Json.6.0.8\lib\net45\Newtonsoft.Json.dll + + + + + + + + + + + + + + + $(LibraryNugetPackageFolder)\Microsoft.Bcl.Async.1.0.168\lib\net40\Microsoft.Threading.Tasks.dll + + + $(LibraryNugetPackageFolder)\Microsoft.Bcl.Async.1.0.168\lib\net40\Microsoft.Threading.Tasks.Extensions.dll + + + False + $(LibraryNugetPackageFolder)\Microsoft.Net.Http.2.2.22\lib\net45\System.Net.Http.Extensions.dll + + + False + $(LibraryNugetPackageFolder)\Microsoft.Net.Http.2.2.22\lib\net45\System.Net.Http.Primitives.dll + + + \ No newline at end of file diff --git a/tools/references.portable.props b/tools/references.portable.props new file mode 100644 index 000000000..73086f3fe --- /dev/null +++ b/tools/references.portable.props @@ -0,0 +1,32 @@ + + + + + $(LibraryNugetPackageFolder)\Microsoft.Bcl.Async.1.0.168\lib\portable-net40+sl4+win8+wp71+wpa81\Microsoft.Threading.Tasks.dll + + + $(LibraryNugetPackageFolder)\Microsoft.Bcl.Async.1.0.168\lib\portable-net40+sl4+win8+wp71+wpa81\Microsoft.Threading.Tasks.Extensions.dll + + + $(LibraryNugetPackageFolder)\Newtonsoft.Json.6.0.8\lib\portable-net40+sl5+wp80+win8+wpa81\Newtonsoft.Json.dll + + + $(LibraryNugetPackageFolder)\Microsoft.Bcl.1.1.9\lib\portable-net40+sl5+win8+wp8+wpa81\System.IO.dll + + + $(LibraryNugetPackageFolder)\Microsoft.Net.Http.2.2.22\lib\portable-net40+sl4+win8+wp71+wpa81\System.Net.Http.dll + + + $(LibraryNugetPackageFolder)\Microsoft.Net.Http.2.2.22\lib\portable-net40+sl4+win8+wp71+wpa81\System.Net.Http.Extensions.dll + + + $(LibraryNugetPackageFolder)\Microsoft.Net.Http.2.2.22\lib\portable-net40+sl4+win8+wp71+wpa81\System.Net.Http.Primitives.dll + + + $(LibraryNugetPackageFolder)\Microsoft.Bcl.1.1.9\lib\portable-net40+sl5+win8+wp8+wpa81\System.Runtime.dll + + + $(LibraryNugetPackageFolder)\Microsoft.Bcl.1.1.9\lib\portable-net40+sl5+win8+wp8+wpa81\System.Threading.Tasks.dll + + + \ No newline at end of file diff --git a/tools/xunit.runner.msbuild.dll b/tools/xunit.runner.msbuild.dll new file mode 100644 index 0000000000000000000000000000000000000000..020857f9cb9329f4c0ecd68fdd862531fa72d725 GIT binary patch literal 25088 zcmeHv4R9RSac0l#|KdknthgXWQXYb$xB!6#z#oeQK?o!Oijepx0wSruh>P6;u;O9| znq829DcYdRQCW_qShBC|lT(pIyJ9Kl=%k9ASpF;N&UPK0(>Zc%N3tVD)?MUF&MCVp zPEPjO(tX`;X8!?EiQ}rfc**T~-LGGFzkdDty_tE7gSUKyJVfNh_pP^xK94JZ1_dq; z7E#^&t}isx)1l|re_lKA{QB|fOx~EattmS>W2BO~oK-L;Ov9eb8JV0he0a>5vC?Lu zsVRJwBl^e)(E-gvUkS}wH^z{u|1JMakf{OZ;)3_S=F5*kHLdv?bn+a^ce4Yga zoj)EL{B36C|D~&gG6|nF%Y6fi38Yx^&uqP0wgNPusA zbX`Sz`!^KwMWm`5?wyCv6IRTEj z60KR+oqCu5z3*Z~j~lqy?}8p{Jrf+6)3{>PBc9H*Re5Qi8ZaSkzzOKqD!zJxZ{RO#{PG`qSu>W&ITm(qneFV|WVPi$+Q zcw+LB@#Lq`DjOcDYXhRnH6mDUgziBgVLbgPc;gsliKs($$n2xtRl1rzkF?d9S^E?MsJPp z1X;IVLC@mg2w(oD7JE~R?^4WXu?{LpQh;bIiHaZv5U@Hbf)qf&LZ}E*00E1lB1i!Q ztP6@D1rU&Q6+sFhVAWIvDS&_#R1u^A0+vffkir_Qk6+>in*EPR!ty!-*cH~_^=5oK zO0kYS!jYHvun(cV8Re_>_yB4;v9$9w4i|^@m~iXyE+8@cD)6dMjRqsZSUdshmA9zy zj09Wb2+Qz=NKh@Q@jliFsr`IyQZn)!ew(3!1?CMP(NH8*B%phKR6?%5Gp??sEkUDS z59;wPs0+l00F~97Z`R}33HhVpShQjDa3maQc&I5SZE(HhQa z7*}{P;_>S79pK9&p@gAR4bgvsN;Qq6{)j*3x4?oiake=Q(;FowD2;h8Kr^pVeqSCL z)87!VFctl+TLbz^8UKKVIqZ-6UVa=l_&fc6WoKisX~%g`lS6mzKh1_@ z*TOTWeCraj5Dw15EJ0*n1zrSAtE|n@P%IkWY(zql@Iz5_kUNDnxwJuwgfT*4jB*Gg z^kT@uY7uS<^)0;h)?1FTb_WDTeXmf&*P&tKq*F89IZsF<>hu2h)5Gweb_<7j*zN?k zuC}Gv!C{BN>%fG=t3t2~VaFlXxxxue!@*Z61ML%#QD$Qd`xfB`ABStF%lF@_`C2

    u`~u-4R_QwH34fjNiJ#YXwiBMQTDPA`_yNKP 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