diff --git a/experiments/Azure.Experiments/Azure.Experiments.Tests/ComputeTest.cs b/experiments/Azure.Experiments/Azure.Experiments.Tests/ComputeTest.cs index b635bf35c4f2..dbdf41c60ca2 100644 --- a/experiments/Azure.Experiments/Azure.Experiments.Tests/ComputeTest.cs +++ b/experiments/Azure.Experiments/Azure.Experiments.Tests/ComputeTest.cs @@ -44,6 +44,16 @@ public async Task NetworkSecurityGroupTest() var info = await nsg.GetOrCreateAsync(c); } + [Fact] + public async Task SubnetTest() + { + var c = Credentials.Get(); + var rg = new ResourceGroupObject("MySubnet"); + var vn = new VirtualNetworkObject("MySubnet", rg, "192.168.0.0/16"); + var subnet = new SubnetObject("MySubnet", vn, "192.168.1.0/24"); + var info = await subnet.GetOrCreateAsync(c); + } + [Fact] public async Task Test1() { diff --git a/experiments/Azure.Experiments/Azure.Experiments/ResourceObject.cs b/experiments/Azure.Experiments/Azure.Experiments/ResourceObject.cs index 6a1265617be0..72595decaa54 100644 --- a/experiments/Azure.Experiments/Azure.Experiments/ResourceObject.cs +++ b/experiments/Azure.Experiments/Azure.Experiments/ResourceObject.cs @@ -6,7 +6,7 @@ namespace Azure.Experiments public abstract class ResourceObject : AzureObject where T : class { - protected string ResourceGroupName { get; } + public string ResourceGroupName { get; } protected ResourceObject( string name, diff --git a/experiments/Azure.Experiments/Azure.Experiments/SubnetObject.cs b/experiments/Azure.Experiments/Azure.Experiments/SubnetObject.cs index c8f85cf4919d..7fedd9303946 100644 --- a/experiments/Azure.Experiments/Azure.Experiments/SubnetObject.cs +++ b/experiments/Azure.Experiments/Azure.Experiments/SubnetObject.cs @@ -1,21 +1,29 @@ using Microsoft.Azure.Management.Network; +using Microsoft.Azure.Management.Network.Models; using System; using System.Linq; using System.Threading.Tasks; namespace Azure.Experiments { - sealed class SubnetObject : AzureObject + public sealed class SubnetObject : AzureObject { - public SubnetObject(string name, VirtualNetworkObject vn) + public string AddressPrefix { get; } + + public SubnetObject(string name, VirtualNetworkObject vn, string addressPrefix) : base(name, new[] { vn }) { Vn = vn; + AddressPrefix = addressPrefix; } - protected override Task CreateAsync(IVirtualNetworksOperations c) + protected override async Task CreateAsync(IVirtualNetworksOperations c) { - throw new NotImplementedException(); + // The Virtual Network should be created at this point. + var vn = await Vn.GetOrNullAsync(c); + vn.Subnets.Add(new Subnet { Name = Name, AddressPrefix = AddressPrefix }); + vn = await c.CreateOrUpdateAsync(Vn.ResourceGroupName, Vn.Name, vn); + return GetSubnet(vn); } protected override IVirtualNetworksOperations CreateClient(Context c) @@ -26,11 +34,12 @@ protected override Task DeleteAsync(IVirtualNetworksOperations c) throw new NotImplementedException(); } - protected override async Task GetOrThrowAsync(IVirtualNetworksOperations c) - => (await Vn.GetOrNullAsync(c)) - ?.Subnets - .FirstOrDefault(s => s.Name == Name); + protected override async Task GetOrThrowAsync(IVirtualNetworksOperations c) + => GetSubnet(await Vn.GetOrNullAsync(c)); private VirtualNetworkObject Vn { get; } + + private Subnet GetSubnet(VirtualNetwork vn) + => vn?.Subnets.FirstOrDefault(s => s.Name == Name); } }