public void GetVirtualMachineTest() { using (UndoContext context = UndoContext.Current) { context.Start(); var client = GetSiteRecoveryClient(CustomHttpHandler); VirtualMachineResponse response = null; var protectionContainerList = client.ProtectionContainer.List(RequestHeaders); foreach (var pc in protectionContainerList.ProtectionContainers) { if (pc.Role == "Primary") { var vmList = client.Vm.List(pc.ID, RequestHeaders); if (vmList.Vms.Count != 0) { response = client.Vm.Get(vmList.Vms[0].ProtectionContainerId, vmList.Vms[0].ID, RequestHeaders); } } } Assert.NotNull(response); Assert.NotNull(response.Vm); Assert.NotNull(response.Vm.Name); Assert.NotNull(response.Vm.ID); Assert.Equal(HttpStatusCode.OK, response.StatusCode); } }
/// <summary> /// Queries by ID. /// </summary> private void GetById() { VirtualMachineResponse virtualMachineResponse = RecoveryServicesClient.GetAzureSiteRecoveryVirtualMachine( this.ProtectionContainerId, this.Id); this.WriteVirtualMachine(virtualMachineResponse.Vm); }
/// <summary> /// Get the VM object by Id. /// </summary> /// <param name='protectionContainerId'> /// Required. Parent Protection Container ID. /// </param> /// <param name='virtualMachineId'> /// Required. VM ID. /// </param> /// <param name='customRequestHeaders'> /// Optional. Request header parameters. /// </param> /// <param name='cancellationToken'> /// Cancellation token. /// </param> /// <returns> /// The response model for the Vm object. /// </returns> public async Task <VirtualMachineResponse> GetAsync(string protectionContainerId, string virtualMachineId, CustomRequestHeaders customRequestHeaders, CancellationToken cancellationToken) { // Validate if (protectionContainerId == null) { throw new ArgumentNullException("protectionContainerId"); } if (virtualMachineId == null) { throw new ArgumentNullException("virtualMachineId"); } // Tracing bool shouldTrace = TracingAdapter.IsEnabled; string invocationId = null; if (shouldTrace) { invocationId = TracingAdapter.NextInvocationId.ToString(); Dictionary <string, object> tracingParameters = new Dictionary <string, object>(); tracingParameters.Add("protectionContainerId", protectionContainerId); tracingParameters.Add("virtualMachineId", virtualMachineId); tracingParameters.Add("customRequestHeaders", customRequestHeaders); TracingAdapter.Enter(invocationId, this, "GetAsync", tracingParameters); } // Construct URL string url = (this.Client.Credentials.SubscriptionId == null ? "" : Uri.EscapeDataString(this.Client.Credentials.SubscriptionId)) + "/cloudservices/" + Uri.EscapeDataString(this.Client.CloudServiceName) + "/resources/WAHyperVRecoveryManager/~/HyperVRecoveryManagerVault/" + Uri.EscapeDataString(this.Client.ResourceName) + "/ProtectionContainers/" + Uri.EscapeDataString(protectionContainerId) + "/VirtualMachines/" + Uri.EscapeDataString(virtualMachineId) + "?"; url = url + "api-version=2014-10-27"; 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("Accept", "application/xml"); httpRequest.Headers.Add("x-ms-client-request-id", customRequestHeaders.ClientRequestId); 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 VirtualMachineResponse result = null; // Deserialize Response if (statusCode == HttpStatusCode.OK) { cancellationToken.ThrowIfCancellationRequested(); string responseContent = await httpResponse.Content.ReadAsStringAsync().ConfigureAwait(false); result = new VirtualMachineResponse(); XDocument responseDoc = XDocument.Parse(responseContent); XElement serviceResourceElement = responseDoc.Element(XName.Get("ServiceResource", "http://schemas.microsoft.com/windowsazure")); if (serviceResourceElement != null) { VirtualMachine serviceResourceInstance = new VirtualMachine(); result.Vm = serviceResourceInstance; XElement replicationProviderSettingsElement = serviceResourceElement.Element(XName.Get("ReplicationProviderSettings", "http://schemas.microsoft.com/windowsazure")); if (replicationProviderSettingsElement != null) { string replicationProviderSettingsInstance = replicationProviderSettingsElement.Value; serviceResourceInstance.ReplicationProviderSettings = replicationProviderSettingsInstance; } XElement typeElement = serviceResourceElement.Element(XName.Get("Type", "http://schemas.microsoft.com/windowsazure")); if (typeElement != null) { string typeInstance = typeElement.Value; serviceResourceInstance.Type = typeInstance; } XElement fabricObjectIdElement = serviceResourceElement.Element(XName.Get("FabricObjectId", "http://schemas.microsoft.com/windowsazure")); if (fabricObjectIdElement != null) { string fabricObjectIdInstance = fabricObjectIdElement.Value; serviceResourceInstance.FabricObjectId = fabricObjectIdInstance; } XElement serverIdElement = serviceResourceElement.Element(XName.Get("ServerId", "http://schemas.microsoft.com/windowsazure")); if (serverIdElement != null) { string serverIdInstance = serverIdElement.Value; serviceResourceInstance.ServerId = serverIdInstance; } XElement protectionContainerIdElement = serviceResourceElement.Element(XName.Get("ProtectionContainerId", "http://schemas.microsoft.com/windowsazure")); if (protectionContainerIdElement != null) { string protectionContainerIdInstance = protectionContainerIdElement.Value; serviceResourceInstance.ProtectionContainerId = protectionContainerIdInstance; } XElement protectedElement = serviceResourceElement.Element(XName.Get("Protected", "http://schemas.microsoft.com/windowsazure")); if (protectedElement != null) { bool protectedInstance = bool.Parse(protectedElement.Value); serviceResourceInstance.Protected = protectedInstance; } XElement protectionStateDescriptionElement = serviceResourceElement.Element(XName.Get("ProtectionStateDescription", "http://schemas.microsoft.com/windowsazure")); if (protectionStateDescriptionElement != null) { string protectionStateDescriptionInstance = protectionStateDescriptionElement.Value; serviceResourceInstance.ProtectionStateDescription = protectionStateDescriptionInstance; } XElement activeLocationElement = serviceResourceElement.Element(XName.Get("ActiveLocation", "http://schemas.microsoft.com/windowsazure")); if (activeLocationElement != null) { string activeLocationInstance = activeLocationElement.Value; serviceResourceInstance.ActiveLocation = activeLocationInstance; } XElement testFailoverStateDescriptionElement = serviceResourceElement.Element(XName.Get("TestFailoverStateDescription", "http://schemas.microsoft.com/windowsazure")); if (testFailoverStateDescriptionElement != null) { string testFailoverStateDescriptionInstance = testFailoverStateDescriptionElement.Value; serviceResourceInstance.TestFailoverStateDescription = testFailoverStateDescriptionInstance; } XElement canFailoverElement = serviceResourceElement.Element(XName.Get("CanFailover", "http://schemas.microsoft.com/windowsazure")); if (canFailoverElement != null) { bool canFailoverInstance = bool.Parse(canFailoverElement.Value); serviceResourceInstance.CanFailover = canFailoverInstance; } XElement canReverseReplicateElement = serviceResourceElement.Element(XName.Get("CanReverseReplicate", "http://schemas.microsoft.com/windowsazure")); if (canReverseReplicateElement != null) { bool canReverseReplicateInstance = bool.Parse(canReverseReplicateElement.Value); serviceResourceInstance.CanReverseReplicate = canReverseReplicateInstance; } XElement canCommitElement = serviceResourceElement.Element(XName.Get("CanCommit", "http://schemas.microsoft.com/windowsazure")); if (canCommitElement != null) { bool canCommitInstance = bool.Parse(canCommitElement.Value); serviceResourceInstance.CanCommit = canCommitInstance; } XElement replicationHealthElement = serviceResourceElement.Element(XName.Get("ReplicationHealth", "http://schemas.microsoft.com/windowsazure")); if (replicationHealthElement != null) { string replicationHealthInstance = replicationHealthElement.Value; serviceResourceInstance.ReplicationHealth = replicationHealthInstance; } XElement replicationProviderElement = serviceResourceElement.Element(XName.Get("ReplicationProvider", "http://schemas.microsoft.com/windowsazure")); if (replicationProviderElement != null) { string replicationProviderInstance = replicationProviderElement.Value; serviceResourceInstance.ReplicationProvider = replicationProviderInstance; } XElement nameElement = serviceResourceElement.Element(XName.Get("Name", "http://schemas.microsoft.com/windowsazure")); if (nameElement != null) { string nameInstance = nameElement.Value; serviceResourceInstance.Name = nameInstance; } XElement idElement = serviceResourceElement.Element(XName.Get("ID", "http://schemas.microsoft.com/windowsazure")); if (idElement != null) { string idInstance = idElement.Value; serviceResourceInstance.ID = idInstance; } } } 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(); } } }