/// <summary> /// Validates whether the Azure VM Network is associated with the subscription or not. /// </summary> /// <param name="azureSubscriptionId">Subscription Id</param> /// <param name="azureVMNetworkId">Azure VM Network Id</param> /// <param name="azureVMNetworkName">Azure VM Network name</param> public void ValidateVMNetworkSubscriptionAssociation( string azureSubscriptionId, string azureVMNetworkId, out string azureVMNetworkName) { bool associatedVMNetwork = false; azureVMNetworkName = string.Empty; AzureNetworkListResponse azureNetworkListResponse = this.GetSiteRecoveryClient().Networks.ListAzureNetworks(azureSubscriptionId); foreach (AzureNetworkListResponse.VirtualNetworkSite site in azureNetworkListResponse.VirtualNetworkSites) { if (azureVMNetworkId.Equals(site.Id)) { associatedVMNetwork = true; azureVMNetworkName = site.Name; break; } } if (!associatedVMNetwork) { throw new InvalidOperationException( string.Format( Properties.Resources.AzureVMNetworkIsNotAssociatedWithTheSubscription, azureVMNetworkId, azureSubscriptionId)); } }
/// <summary> /// Get the list of all Azure VM networks under the vault. /// </summary> /// <param name='subscriptionId'> /// Optional. /// </param> /// <param name='cancellationToken'> /// Cancellation token. /// </param> /// <returns> /// The response structure for the Network Operations List operation. /// </returns> public async Task <AzureNetworkListResponse> ListAzureNetworksAsync(string subscriptionId, CancellationToken cancellationToken) { // Validate // Tracing bool shouldTrace = TracingAdapter.IsEnabled; string invocationId = null; if (shouldTrace) { invocationId = TracingAdapter.NextInvocationId.ToString(); Dictionary <string, object> tracingParameters = new Dictionary <string, object>(); tracingParameters.Add("subscriptionId", subscriptionId); TracingAdapter.Enter(invocationId, this, "ListAzureNetworksAsync", tracingParameters); } // Construct URL string url = ""; url = url + "/"; if (subscriptionId != null) { url = url + Uri.EscapeDataString(subscriptionId); } url = url + "/services/networking/virtualnetwork"; string baseUrl = this.Client.BaseUri.AbsoluteUri; // Trim '/' character from the end of baseUrl and beginning of url. if (baseUrl[baseUrl.Length - 1] == '/') { baseUrl = baseUrl.Substring(0, baseUrl.Length - 1); } if (url[0] == '/') { url = url.Substring(1); } url = baseUrl + "/" + url; url = url.Replace(" ", "%20"); // Create HTTP transport objects HttpRequestMessage httpRequest = null; try { httpRequest = new HttpRequestMessage(); httpRequest.Method = HttpMethod.Get; httpRequest.RequestUri = new Uri(url); // Set Headers httpRequest.Headers.Add("x-ms-version", "2013-03-01"); // Set Credentials cancellationToken.ThrowIfCancellationRequested(); await this.Client.Credentials.ProcessHttpRequestAsync(httpRequest, cancellationToken).ConfigureAwait(false); // Send Request HttpResponseMessage httpResponse = null; try { if (shouldTrace) { TracingAdapter.SendRequest(invocationId, httpRequest); } cancellationToken.ThrowIfCancellationRequested(); httpResponse = await this.Client.HttpClient.SendAsync(httpRequest, cancellationToken).ConfigureAwait(false); if (shouldTrace) { TracingAdapter.ReceiveResponse(invocationId, httpResponse); } HttpStatusCode statusCode = httpResponse.StatusCode; if (statusCode != HttpStatusCode.OK) { cancellationToken.ThrowIfCancellationRequested(); CloudException ex = CloudException.Create(httpRequest, null, httpResponse, await httpResponse.Content.ReadAsStringAsync().ConfigureAwait(false)); if (shouldTrace) { TracingAdapter.Error(invocationId, ex); } throw ex; } // Create Result AzureNetworkListResponse result = null; // Deserialize Response if (statusCode == HttpStatusCode.OK) { cancellationToken.ThrowIfCancellationRequested(); string responseContent = await httpResponse.Content.ReadAsStringAsync().ConfigureAwait(false); result = new AzureNetworkListResponse(); XDocument responseDoc = XDocument.Parse(responseContent); XElement virtualNetworkSitesSequenceElement = responseDoc.Element(XName.Get("VirtualNetworkSites", "http://schemas.microsoft.com/windowsazure")); if (virtualNetworkSitesSequenceElement != null) { foreach (XElement virtualNetworkSitesElement in virtualNetworkSitesSequenceElement.Elements(XName.Get("VirtualNetworkSite", "http://schemas.microsoft.com/windowsazure"))) { AzureNetworkListResponse.VirtualNetworkSite virtualNetworkSiteInstance = new AzureNetworkListResponse.VirtualNetworkSite(); result.VirtualNetworkSites.Add(virtualNetworkSiteInstance); XElement nameElement = virtualNetworkSitesElement.Element(XName.Get("Name", "http://schemas.microsoft.com/windowsazure")); if (nameElement != null) { string nameInstance = nameElement.Value; virtualNetworkSiteInstance.Name = nameInstance; } XElement labelElement = virtualNetworkSitesElement.Element(XName.Get("Label", "http://schemas.microsoft.com/windowsazure")); if (labelElement != null) { string labelInstance = labelElement.Value; virtualNetworkSiteInstance.Label = labelInstance; } XElement idElement = virtualNetworkSitesElement.Element(XName.Get("Id", "http://schemas.microsoft.com/windowsazure")); if (idElement != null) { string idInstance = idElement.Value; virtualNetworkSiteInstance.Id = idInstance; } XElement affinityGroupElement = virtualNetworkSitesElement.Element(XName.Get("AffinityGroup", "http://schemas.microsoft.com/windowsazure")); if (affinityGroupElement != null) { string affinityGroupInstance = affinityGroupElement.Value; virtualNetworkSiteInstance.AffinityGroup = affinityGroupInstance; } XElement locationElement = virtualNetworkSitesElement.Element(XName.Get("Location", "http://schemas.microsoft.com/windowsazure")); if (locationElement != null) { string locationInstance = locationElement.Value; virtualNetworkSiteInstance.Location = locationInstance; } XElement stateElement = virtualNetworkSitesElement.Element(XName.Get("State", "http://schemas.microsoft.com/windowsazure")); if (stateElement != null) { string stateInstance = stateElement.Value; virtualNetworkSiteInstance.State = stateInstance; } XElement addressSpaceElement = virtualNetworkSitesElement.Element(XName.Get("AddressSpace", "http://schemas.microsoft.com/windowsazure")); if (addressSpaceElement != null) { AzureNetworkListResponse.AddressSpace addressSpaceInstance = new AzureNetworkListResponse.AddressSpace(); virtualNetworkSiteInstance.AddressSpace = addressSpaceInstance; XElement addressPrefixesSequenceElement = addressSpaceElement.Element(XName.Get("AddressPrefixes", "http://schemas.microsoft.com/windowsazure")); if (addressPrefixesSequenceElement != null) { foreach (XElement addressPrefixesElement in addressPrefixesSequenceElement.Elements(XName.Get("AddressPrefix", "http://schemas.microsoft.com/windowsazure"))) { addressSpaceInstance.AddressPrefixes.Add(addressPrefixesElement.Value); } } } XElement subnetsSequenceElement = virtualNetworkSitesElement.Element(XName.Get("Subnets", "http://schemas.microsoft.com/windowsazure")); if (subnetsSequenceElement != null) { foreach (XElement subnetsElement in subnetsSequenceElement.Elements(XName.Get("Subnet", "http://schemas.microsoft.com/windowsazure"))) { AzureNetworkListResponse.Subnet subnetInstance = new AzureNetworkListResponse.Subnet(); virtualNetworkSiteInstance.Subnets.Add(subnetInstance); XElement nameElement2 = subnetsElement.Element(XName.Get("Name", "http://schemas.microsoft.com/windowsazure")); if (nameElement2 != null) { string nameInstance2 = nameElement2.Value; subnetInstance.Name = nameInstance2; } XElement addressPrefixElement = subnetsElement.Element(XName.Get("AddressPrefix", "http://schemas.microsoft.com/windowsazure")); if (addressPrefixElement != null) { string addressPrefixInstance = addressPrefixElement.Value; subnetInstance.AddressPrefix = addressPrefixInstance; } XElement networkSecurityGroupElement = subnetsElement.Element(XName.Get("NetworkSecurityGroup", "http://schemas.microsoft.com/windowsazure")); if (networkSecurityGroupElement != null) { string networkSecurityGroupInstance = networkSecurityGroupElement.Value; subnetInstance.NetworkSecurityGroup = networkSecurityGroupInstance; } } } XElement dnsElement = virtualNetworkSitesElement.Element(XName.Get("Dns", "http://schemas.microsoft.com/windowsazure")); if (dnsElement != null) { XElement dnsServersSequenceElement = dnsElement.Element(XName.Get("DnsServers", "http://schemas.microsoft.com/windowsazure")); if (dnsServersSequenceElement != null) { foreach (XElement dnsServersElement in dnsServersSequenceElement.Elements(XName.Get("DnsServer", "http://schemas.microsoft.com/windowsazure"))) { AzureNetworkListResponse.DnsServer dnsServerInstance = new AzureNetworkListResponse.DnsServer(); virtualNetworkSiteInstance.DnsServers.Add(dnsServerInstance); XElement nameElement3 = dnsServersElement.Element(XName.Get("Name", "http://schemas.microsoft.com/windowsazure")); if (nameElement3 != null) { string nameInstance3 = nameElement3.Value; dnsServerInstance.Name = nameInstance3; } XElement addressElement = dnsServersElement.Element(XName.Get("Address", "http://schemas.microsoft.com/windowsazure")); if (addressElement != null) { string addressInstance = addressElement.Value; dnsServerInstance.Address = addressInstance; } } } } XElement gatewayElement = virtualNetworkSitesElement.Element(XName.Get("Gateway", "http://schemas.microsoft.com/windowsazure")); if (gatewayElement != null) { AzureNetworkListResponse.Gateway gatewayInstance = new AzureNetworkListResponse.Gateway(); virtualNetworkSiteInstance.Gateway = gatewayInstance; XElement profileElement = gatewayElement.Element(XName.Get("Profile", "http://schemas.microsoft.com/windowsazure")); if (profileElement != null) { GatewayProfile profileInstance = ((GatewayProfile)Enum.Parse(typeof(GatewayProfile), profileElement.Value, true)); gatewayInstance.Profile = profileInstance; } XElement sitesSequenceElement = gatewayElement.Element(XName.Get("Sites", "http://schemas.microsoft.com/windowsazure")); if (sitesSequenceElement != null) { foreach (XElement sitesElement in sitesSequenceElement.Elements(XName.Get("LocalNetworkSite", "http://schemas.microsoft.com/windowsazure"))) { AzureNetworkListResponse.LocalNetworkSite localNetworkSiteInstance = new AzureNetworkListResponse.LocalNetworkSite(); gatewayInstance.Sites.Add(localNetworkSiteInstance); XElement nameElement4 = sitesElement.Element(XName.Get("Name", "http://schemas.microsoft.com/windowsazure")); if (nameElement4 != null) { string nameInstance4 = nameElement4.Value; localNetworkSiteInstance.Name = nameInstance4; } XElement vpnGatewayAddressElement = sitesElement.Element(XName.Get("VpnGatewayAddress", "http://schemas.microsoft.com/windowsazure")); if (vpnGatewayAddressElement != null) { string vpnGatewayAddressInstance = vpnGatewayAddressElement.Value; localNetworkSiteInstance.VpnGatewayAddress = vpnGatewayAddressInstance; } XElement addressSpaceElement2 = sitesElement.Element(XName.Get("AddressSpace", "http://schemas.microsoft.com/windowsazure")); if (addressSpaceElement2 != null) { AzureNetworkListResponse.AddressSpace addressSpaceInstance2 = new AzureNetworkListResponse.AddressSpace(); localNetworkSiteInstance.AddressSpace = addressSpaceInstance2; XElement addressPrefixesSequenceElement2 = addressSpaceElement2.Element(XName.Get("AddressPrefixes", "http://schemas.microsoft.com/windowsazure")); if (addressPrefixesSequenceElement2 != null) { foreach (XElement addressPrefixesElement2 in addressPrefixesSequenceElement2.Elements(XName.Get("AddressPrefix", "http://schemas.microsoft.com/windowsazure"))) { addressSpaceInstance2.AddressPrefixes.Add(addressPrefixesElement2.Value); } } } XElement connectionsSequenceElement = sitesElement.Element(XName.Get("Connections", "http://schemas.microsoft.com/windowsazure")); if (connectionsSequenceElement != null) { foreach (XElement connectionsElement in connectionsSequenceElement.Elements(XName.Get("Connection", "http://schemas.microsoft.com/windowsazure"))) { AzureNetworkListResponse.Connection connectionInstance = new AzureNetworkListResponse.Connection(); localNetworkSiteInstance.Connections.Add(connectionInstance); XElement typeElement = connectionsElement.Element(XName.Get("Type", "http://schemas.microsoft.com/windowsazure")); if (typeElement != null) { LocalNetworkConnectionType typeInstance = SiteRecoveryManagementClient.ParseLocalNetworkConnectionType(typeElement.Value); connectionInstance.Type = typeInstance; } } } } } XElement vPNClientAddressPoolElement = gatewayElement.Element(XName.Get("VPNClientAddressPool", "http://schemas.microsoft.com/windowsazure")); if (vPNClientAddressPoolElement != null) { AzureNetworkListResponse.VPNClientAddressPool vPNClientAddressPoolInstance = new AzureNetworkListResponse.VPNClientAddressPool(); gatewayInstance.VPNClientAddressPool = vPNClientAddressPoolInstance; XElement addressPrefixesSequenceElement3 = vPNClientAddressPoolElement.Element(XName.Get("AddressPrefixes", "http://schemas.microsoft.com/windowsazure")); if (addressPrefixesSequenceElement3 != null) { foreach (XElement addressPrefixesElement3 in addressPrefixesSequenceElement3.Elements(XName.Get("AddressPrefix", "http://schemas.microsoft.com/windowsazure"))) { vPNClientAddressPoolInstance.AddressPrefixes.Add(addressPrefixesElement3.Value); } } } } } } } result.StatusCode = statusCode; if (httpResponse.Headers.Contains("x-ms-request-id")) { result.RequestId = httpResponse.Headers.GetValues("x-ms-request-id").FirstOrDefault(); } if (shouldTrace) { TracingAdapter.Exit(invocationId, result); } return(result); } finally { if (httpResponse != null) { httpResponse.Dispose(); } } } finally { if (httpRequest != null) { httpRequest.Dispose(); } } }