Con C#, ¿cómo cambio el tamaño de una máquina virtual de Azure que ya está detenida? La documentación de Microsoft es inexistente o imposible de descubrir. En mi biblioteca de clases .Net Standard 2.0, hago referencia al paquete Nuget Microsoft.Azure.Management.Fluent 1.37.1 y probé el siguiente código.
using Microsoft.Azure.Management.Fluent; using Microsoft.Azure.Management.ResourceManager.Fluent; using Microsoft.Azure.Management.ResourceManager.Fluent.Authentication; ... // get Azure client string clientId = ...; string clientSecret = ...; string subscriptionId = ...; string tenantId = ...; AzureEnvironment env = ...; AzureCredentials creds = new AzureCredentialsFactory().FromServicePrincipal(clientId, clientSecret, tenantId, env); IAzure azure = Microsoft.Azure.Management.Fluent.Azure .Configure() .WithLogLevel(HttpLoggingDelegatingHandler.Level.BodyAndHeaders) .Authenticate(creds) .WithSubscription(subscriptionId); // get virtual machine string resourceGroupName = "MyResourceGroup"; string machineName = "MyHostname"; IVirtualMachine vm = await azure.VirtualMachines.GetByResourceGroupAsync(resourceGroupName, machineName) // resize virtual machine VirtualMachineSizeTypes size = ...; vm.Inner.HardwareProfile.VmSize = size; vm.Inner.Validate(); vm.Update(); // nothing happens, virtual machine does not resizeEn la última línea, vm.Update() no hace nada. En Azure Portal puedo ver que la máquina virtual no ha cambiado de tamaño incluso después de actualizar el portal varias veces.
La capacidad de descubrimiento de la API de Azure es terrible. Finalmente conseguí cambiar el tamaño de trabajo. Reemplace las últimas 3 líneas
vm.Inner.HardwareProfile.VmSize = size; vm.Inner.Validate(); vm.Update();con
VirtualMachineUpdate parameters = new VirtualMachineUpdate() { HardwareProfile = new HardwareProfile(size), }; VirtualMachineInner response = await azure.VirtualMachines.Inner.UpdateAsync(resourceGroupName, vm.Name, parameters);Lo tenías casi en lo cierto. Update() es un operador fluido:
var size = VirtualMachineSizeTypes.StandardB2s; await vm.Update() .WithSize(size) .ApplyAsync();