/// <summary> /// Queries by name. /// </summary> private void GetByName() { VirtualMachineListResponse virtualMachineListResponse = RecoveryServicesClient.GetAzureSiteRecoveryVirtualMachine( this.ProtectionContainerId); bool found = false; foreach (VirtualMachine vm in virtualMachineListResponse.Vms) { if (0 == string.Compare(this.Name, vm.Name, true)) { this.WriteVirtualMachine(vm); found = true; } } if (!found) { throw new InvalidOperationException( string.Format( Properties.Resources.VirtualMachineNotFound, this.Name, this.ProtectionContainerId)); } }
/// <summary> /// Queries all / by default. /// </summary> private void GetAll() { VirtualMachineListResponse virtualMachineListResponse = RecoveryServicesClient.GetAzureSiteRecoveryVirtualMachine( this.ProtectionContainerId); this.WriteVirtualMachines(virtualMachineListResponse.Vms); }
public override void ExecuteCmdlet() { base.ExecuteCmdlet(); ExecuteClientAction(() => { if (!string.IsNullOrEmpty(this.Name)) { if (Status) { var result = this.VirtualMachineClient.GetWithInstanceView(this.ResourceGroupName, this.Name); WriteObject(result.ToPSVirtualMachineInstanceView(this.ResourceGroupName, this.Name)); } else { var result = this.VirtualMachineClient.Get(this.ResourceGroupName, this.Name); var psResult = Mapper.Map <PSVirtualMachine>(result.VirtualMachine); psResult = Mapper.Map <AzureOperationResponse, PSVirtualMachine>(result, psResult); WriteObject(psResult); } } else { VirtualMachineListResponse result = null; if (!string.IsNullOrEmpty(this.ResourceGroupName)) { result = this.VirtualMachineClient.List(this.ResourceGroupName); } else if (this.NextLink != null) { result = this.VirtualMachineClient.ListNext(this.NextLink.ToString()); } else { var listParams = new ListParameters(); result = this.VirtualMachineClient.ListAll(listParams); } var psResultList = new List <PSVirtualMachine>(); foreach (var item in result.VirtualMachines) { var psItem = Mapper.Map <PSVirtualMachine>(item); psItem = Mapper.Map <AzureOperationResponse, PSVirtualMachine>(result, psItem); psResultList.Add(psItem); } WriteObject(psResultList, true); } }); }
public void EnumerateVirtualMachinesTests() { using (UndoContext context = UndoContext.Current) { context.Start(); var client = GetSiteRecoveryClient(CustomHttpHandler); var protectionContainerList = client.ProtectionContainer.List(RequestHeaders); VirtualMachineListResponse response = null; foreach (var pc in protectionContainerList.ProtectionContainers) { if (pc.Role == "Primary") { response = client.Vm.List(pc.ID, RequestHeaders); } } Assert.True(response.Vms.Count > 0, "Virtual machines count can't be less than 1"); Assert.True(response.Vms.All(vm => !string.IsNullOrEmpty(vm.Name)), "Vm name can't be null or empty"); Assert.True(response.Vms.All(vm => !string.IsNullOrEmpty(vm.ID)), "Vm Id can't be null or empty"); Assert.Equal(HttpStatusCode.OK, response.StatusCode); } }
/// <summary> /// Get the list of all Vms. /// </summary> /// <param name='protectionContainerId'> /// Required. Parent Protection Container ID. /// </param> /// <param name='customRequestHeaders'> /// Optional. Request header parameters. /// </param> /// <param name='cancellationToken'> /// Cancellation token. /// </param> /// <returns> /// The response model for the list Vm operation. /// </returns> public async Task <VirtualMachineListResponse> ListAsync(string protectionContainerId, CustomRequestHeaders customRequestHeaders, CancellationToken cancellationToken) { // Validate if (protectionContainerId == null) { throw new ArgumentNullException("protectionContainerId"); } // 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("customRequestHeaders", customRequestHeaders); TracingAdapter.Enter(invocationId, this, "ListAsync", 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?"; 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 VirtualMachineListResponse result = null; // Deserialize Response if (statusCode == HttpStatusCode.OK) { cancellationToken.ThrowIfCancellationRequested(); string responseContent = await httpResponse.Content.ReadAsStringAsync().ConfigureAwait(false); result = new VirtualMachineListResponse(); XDocument responseDoc = XDocument.Parse(responseContent); XElement arrayOfServiceResourceSequenceElement = responseDoc.Element(XName.Get("ArrayOfServiceResource", "http://schemas.microsoft.com/windowsazure")); if (arrayOfServiceResourceSequenceElement != null) { foreach (XElement arrayOfServiceResourceElement in arrayOfServiceResourceSequenceElement.Elements(XName.Get("ServiceResource", "http://schemas.microsoft.com/windowsazure"))) { VirtualMachine serviceResourceInstance = new VirtualMachine(); result.Vms.Add(serviceResourceInstance); XElement replicationProviderSettingsElement = arrayOfServiceResourceElement.Element(XName.Get("ReplicationProviderSettings", "http://schemas.microsoft.com/windowsazure")); if (replicationProviderSettingsElement != null) { string replicationProviderSettingsInstance = replicationProviderSettingsElement.Value; serviceResourceInstance.ReplicationProviderSettings = replicationProviderSettingsInstance; } XElement typeElement = arrayOfServiceResourceElement.Element(XName.Get("Type", "http://schemas.microsoft.com/windowsazure")); if (typeElement != null) { string typeInstance = typeElement.Value; serviceResourceInstance.Type = typeInstance; } XElement fabricObjectIdElement = arrayOfServiceResourceElement.Element(XName.Get("FabricObjectId", "http://schemas.microsoft.com/windowsazure")); if (fabricObjectIdElement != null) { string fabricObjectIdInstance = fabricObjectIdElement.Value; serviceResourceInstance.FabricObjectId = fabricObjectIdInstance; } XElement serverIdElement = arrayOfServiceResourceElement.Element(XName.Get("ServerId", "http://schemas.microsoft.com/windowsazure")); if (serverIdElement != null) { string serverIdInstance = serverIdElement.Value; serviceResourceInstance.ServerId = serverIdInstance; } XElement protectionContainerIdElement = arrayOfServiceResourceElement.Element(XName.Get("ProtectionContainerId", "http://schemas.microsoft.com/windowsazure")); if (protectionContainerIdElement != null) { string protectionContainerIdInstance = protectionContainerIdElement.Value; serviceResourceInstance.ProtectionContainerId = protectionContainerIdInstance; } XElement protectedElement = arrayOfServiceResourceElement.Element(XName.Get("Protected", "http://schemas.microsoft.com/windowsazure")); if (protectedElement != null) { bool protectedInstance = bool.Parse(protectedElement.Value); serviceResourceInstance.Protected = protectedInstance; } XElement protectionStateDescriptionElement = arrayOfServiceResourceElement.Element(XName.Get("ProtectionStateDescription", "http://schemas.microsoft.com/windowsazure")); if (protectionStateDescriptionElement != null) { string protectionStateDescriptionInstance = protectionStateDescriptionElement.Value; serviceResourceInstance.ProtectionStateDescription = protectionStateDescriptionInstance; } XElement activeLocationElement = arrayOfServiceResourceElement.Element(XName.Get("ActiveLocation", "http://schemas.microsoft.com/windowsazure")); if (activeLocationElement != null) { string activeLocationInstance = activeLocationElement.Value; serviceResourceInstance.ActiveLocation = activeLocationInstance; } XElement testFailoverStateDescriptionElement = arrayOfServiceResourceElement.Element(XName.Get("TestFailoverStateDescription", "http://schemas.microsoft.com/windowsazure")); if (testFailoverStateDescriptionElement != null) { string testFailoverStateDescriptionInstance = testFailoverStateDescriptionElement.Value; serviceResourceInstance.TestFailoverStateDescription = testFailoverStateDescriptionInstance; } XElement canFailoverElement = arrayOfServiceResourceElement.Element(XName.Get("CanFailover", "http://schemas.microsoft.com/windowsazure")); if (canFailoverElement != null) { bool canFailoverInstance = bool.Parse(canFailoverElement.Value); serviceResourceInstance.CanFailover = canFailoverInstance; } XElement canReverseReplicateElement = arrayOfServiceResourceElement.Element(XName.Get("CanReverseReplicate", "http://schemas.microsoft.com/windowsazure")); if (canReverseReplicateElement != null) { bool canReverseReplicateInstance = bool.Parse(canReverseReplicateElement.Value); serviceResourceInstance.CanReverseReplicate = canReverseReplicateInstance; } XElement canCommitElement = arrayOfServiceResourceElement.Element(XName.Get("CanCommit", "http://schemas.microsoft.com/windowsazure")); if (canCommitElement != null) { bool canCommitInstance = bool.Parse(canCommitElement.Value); serviceResourceInstance.CanCommit = canCommitInstance; } XElement replicationHealthElement = arrayOfServiceResourceElement.Element(XName.Get("ReplicationHealth", "http://schemas.microsoft.com/windowsazure")); if (replicationHealthElement != null) { string replicationHealthInstance = replicationHealthElement.Value; serviceResourceInstance.ReplicationHealth = replicationHealthInstance; } XElement replicationProviderElement = arrayOfServiceResourceElement.Element(XName.Get("ReplicationProvider", "http://schemas.microsoft.com/windowsazure")); if (replicationProviderElement != null) { string replicationProviderInstance = replicationProviderElement.Value; serviceResourceInstance.ReplicationProvider = replicationProviderInstance; } XElement nameElement = arrayOfServiceResourceElement.Element(XName.Get("Name", "http://schemas.microsoft.com/windowsazure")); if (nameElement != null) { string nameInstance = nameElement.Value; serviceResourceInstance.Name = nameInstance; } XElement idElement = arrayOfServiceResourceElement.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(); } } }