diff --git a/experiments/Azure.Experiments/Azure.Experiments.Tests/ComputeTest.cs b/experiments/Azure.Experiments/Azure.Experiments.Tests/ComputeTest.cs index f7e185c27cba..28298c23c939 100644 --- a/experiments/Azure.Experiments/Azure.Experiments.Tests/ComputeTest.cs +++ b/experiments/Azure.Experiments/Azure.Experiments.Tests/ComputeTest.cs @@ -67,6 +67,20 @@ public async Task NetworkInterfaceObject() var info = await ni.GetOrCreateAsync(c); } + [Fact] + public async Task VmObject() + { + var c = Credentials.Get(); + var rg = new ResourceGroupObject("MyVM"); + var vn = new VirtualNetworkObject("MyVM", rg, "192.168.0.0/16"); + var subnet = new SubnetObject("MyVM", vn, "192.168.1.0/24"); + var pia = new PublicIpAddressObject("MyVM", rg); + var nsg = new NetworkSecurityGroupObject("MyVM", rg); + var ni = new NetworkInterfaceObject("MyVM", rg, subnet, pia, nsg); + var vm = new VmObject("MyVM", rg, ni, "MyVMUser", "@3as54dDd"); + var info = await vm.GetOrCreateAsync(c); + } + [Fact] public async Task Test1() { diff --git a/experiments/Azure.Experiments/Azure.Experiments/VmObject.cs b/experiments/Azure.Experiments/Azure.Experiments/VmObject.cs new file mode 100644 index 000000000000..83e1a247d6f6 --- /dev/null +++ b/experiments/Azure.Experiments/Azure.Experiments/VmObject.cs @@ -0,0 +1,84 @@ +using Microsoft.Azure.Management.Compute; +using Microsoft.Azure.Management.Compute.Models; +using System.Threading.Tasks; + +namespace Azure.Experiments +{ + public sealed class VmObject + : ResourceObject + { + public VmObject( + string name, + ResourceGroupObject rg, + NetworkInterfaceObject ni, + string adminUsername, + string adminPassword) + : base(name, rg, new[] { ni }) + { + AdminUsername = adminUsername; + AdminPassword = adminPassword; + Ni = ni; + } + + protected override Task CreateAsync( + IVirtualMachinesOperations c) + => c.CreateOrUpdateAsync( + ResourceGroupName, + Name, + new VirtualMachine + { + Location = "eastus", + OsProfile = new OSProfile + { + ComputerName = Name, + WindowsConfiguration = new WindowsConfiguration + { + }, + AdminUsername = AdminUsername, + AdminPassword = AdminPassword, + }, + NetworkProfile = new NetworkProfile + { + NetworkInterfaces = new NetworkInterfaceReference[] + { + new NetworkInterfaceReference(Ni.Info.Id) + } + }, + HardwareProfile = new HardwareProfile + { + VmSize = "Standard_DS1_v2" + }, + StorageProfile = new StorageProfile + { + ImageReference = new ImageReference + { + Publisher = "MicrosoftWindowsServer", + Offer = "WindowsServer", + Sku = "2016-Datacenter", + Version = "latest" + } + }, + }); + + protected override IVirtualMachinesOperations CreateClient(Context c) + => new ComputeManagementClient(c.Credentials) + { + SubscriptionId = c.SubscriptionId + } + .VirtualMachines; + + protected override Task DeleteAsync(IVirtualMachinesOperations c) + { + throw new System.NotImplementedException(); + } + + protected override Task GetOrThrowAsync(IVirtualMachinesOperations c) + => c.GetAsync(ResourceGroupName, Name); + + private string AdminUsername { get; } + + private string AdminPassword { get; } + + private NetworkInterfaceObject Ni { get; } + } +}