From 61d92df772d6ae757f6fc0dc5b090db09abb0fd1 Mon Sep 17 00:00:00 2001 From: Sergey Shandar Date: Tue, 14 Nov 2017 17:20:03 -0800 Subject: [PATCH] Yes, it works! --- .../Compute/VirtualMachinePolicy.cs | 48 ++++++++++++++++++- experiments/Azure.Experiments/Tests/Client.cs | 10 +++- .../Tests/VirtualMachineTest.cs | 36 ++++++++++++++ 3 files changed, 91 insertions(+), 3 deletions(-) create mode 100644 experiments/Azure.Experiments/Tests/VirtualMachineTest.cs diff --git a/experiments/Azure.Experiments/Azure.Experiments/Compute/VirtualMachinePolicy.cs b/experiments/Azure.Experiments/Azure.Experiments/Compute/VirtualMachinePolicy.cs index 4eb8a800ea3c..e454a872f12e 100644 --- a/experiments/Azure.Experiments/Azure.Experiments/Compute/VirtualMachinePolicy.cs +++ b/experiments/Azure.Experiments/Azure.Experiments/Compute/VirtualMachinePolicy.cs @@ -1,5 +1,6 @@ using Microsoft.Azure.Management.Compute; using Microsoft.Azure.Management.Compute.Models; +using Microsoft.Azure.Management.Network.Models; using Microsoft.Azure.Management.ResourceManager.Models; namespace Microsoft.Azure.Experiments.Compute @@ -16,7 +17,50 @@ public static class VirtualMachinePolicy p.ResourceGroupName, p.Name, p.Config, p.CancellationToken)); public static ResourceConfig CreateVirtualMachineConfig( - this ResourceConfig resourceGroup, string name) - => Policy.CreateConfig(resourceGroup, name); + this ResourceConfig resourceGroup, + string name, + ResourceConfig networkInterface, + string adminUsername, + string adminPassword) + => Policy.CreateConfig( + resourceGroup, + name, + subscription => new VirtualMachine + { + OsProfile = new OSProfile + { + ComputerName = name, + WindowsConfiguration = new WindowsConfiguration + { + }, + AdminUsername = adminUsername, + AdminPassword = adminPassword, + }, + NetworkProfile = new NetworkProfile + { + NetworkInterfaces = new[] + { + new NetworkInterfaceReference + { + Id = networkInterface.GetId(subscription).IdToString() + } + } + }, + HardwareProfile = new HardwareProfile + { + VmSize = "Standard_DS1_v2" + }, + StorageProfile = new StorageProfile + { + ImageReference = new ImageReference + { + Publisher = "MicrosoftWindowsServer", + Offer = "WindowsServer", + Sku = "2016-Datacenter", + Version = "latest" + } + }, + }, + new[] { networkInterface }); } } diff --git a/experiments/Azure.Experiments/Tests/Client.cs b/experiments/Azure.Experiments/Tests/Client.cs index 96741ac9f074..2952ae10b175 100644 --- a/experiments/Azure.Experiments/Tests/Client.cs +++ b/experiments/Azure.Experiments/Tests/Client.cs @@ -1,4 +1,5 @@ -using Microsoft.Azure.Management.Network; +using Microsoft.Azure.Management.Compute; +using Microsoft.Azure.Management.Network; using Microsoft.Azure.Management.ResourceManager; using System; @@ -30,6 +31,13 @@ public T GetClient() SubscriptionId = Context.SubscriptionId } as T; } + else if (typeof(T) == typeof(IComputeManagementClient)) + { + return new ComputeManagementClient(Context.Credentials) + { + SubscriptionId = Context.SubscriptionId + } as T; + } throw new Exception("unknown client type"); } } diff --git a/experiments/Azure.Experiments/Tests/VirtualMachineTest.cs b/experiments/Azure.Experiments/Tests/VirtualMachineTest.cs new file mode 100644 index 000000000000..f9a6012e142e --- /dev/null +++ b/experiments/Azure.Experiments/Tests/VirtualMachineTest.cs @@ -0,0 +1,36 @@ +using Microsoft.Azure.Experiments.Compute; +using Microsoft.Azure.Experiments.Network; +using Microsoft.Azure.Experiments.ResourceManager; +using System.Threading; +using System.Threading.Tasks; +using Xunit; + +namespace Microsoft.Azure.Experiments.Tests +{ + public sealed class VirtualMachineTest + { + [Fact] + public async Task CreateAsyncTest() + { + var rg = ResourceGroupPolicy.CreateResourceGroupConfig("vmrg"); + var vn = rg.CreateVirtualNetworkConfig("Vnni", "192.168.0.0/16"); + var sn = vn.CreateSubnet("mysubnet", "192.168.1.0/24"); + var pipa = rg.CreatePublicIPAddressConfig("pipavm"); + var nsg = rg.CreateNetworkSecurityGroupConfig("nsgvm"); + var ni = rg.CreateNetworkInterfaceConfig("nivm", sn, pipa, nsg); + var vm = rg.CreateVirtualMachineConfig("vm", ni, "MyVMUser", "@3as54dDd"); + + var client = new Client(Credentials.Get()); + var state = await vm.GetAsync(client, new CancellationToken()); + var location = state.GetLocation(rg); + var parameters = vm.GetParameters(client.Context.SubscriptionId, "eastus"); + var vmc = parameters.GetOrNull(vm); + var createState = await vm.CreateOrUpdateAsync( + client, state, parameters, new CancellationToken()); + var vmcc = createState.GetOrNull(vm); + Assert.Equal("eastus", vmcc.Location); + Assert.Equal("vm", vmcc.Name); + Assert.Equal(vm.GetId(client.Context.SubscriptionId).IdToString(), vmcc.Id); + } + } +}