Skip to content

Commit 0b84a5e

Browse files
CreateConfig for different resources
1 parent 6d8b26f commit 0b84a5e

File tree

5 files changed

+85
-15
lines changed

5 files changed

+85
-15
lines changed

experiments/Azure.Experiments/Azure.Experiments/Compute/ComputePolicy.cs

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
1-
using Microsoft.Azure.Management.Compute;
1+
using Microsoft.Azure.Experiments.ResourceManager;
2+
using Microsoft.Azure.Management.Compute;
23
using Microsoft.Azure.Management.Compute.Models;
4+
using Microsoft.Azure.Management.Network.Models;
5+
using Microsoft.Azure.Management.ResourceManager.Models;
36
using System;
47
using System.Threading.Tasks;
58

@@ -11,7 +14,7 @@ public static ResourcePolicy<ResourceName, Info> Create<Operations, Info>(
1114
Func<IComputeManagementClient, Operations> getOperations,
1215
Func<Operations, ResourceName, Task<Info>> getAsync,
1316
Func<Operations, ResourceName, Info, Task<Info>> createOrUpdateAsync)
14-
where Info : Resource
17+
where Info : Management.Compute.Models.Resource
1518
=> OperationsPolicy
1619
.Create(getAsync, createOrUpdateAsync)
1720
.Transform(getOperations)
@@ -24,5 +27,15 @@ public static ResourcePolicy<ResourceName, VirtualMachine> VirtualMachine
2427
(operations, name) => operations.GetAsync(name.ResourceGroupName, name.Name),
2528
(operations, name, info)
2629
=> operations.CreateOrUpdateAsync(name.ResourceGroupName, name.Name, info));
30+
31+
public static ResourceConfig<ResourceName, VirtualMachine> CreateVirtualMachineConfig(
32+
this ResourceConfig<string, ResourceGroup> resourceGroup,
33+
string name,
34+
ResourceConfig<ResourceName, NetworkInterface> networkInterface)
35+
=> resourceGroup.CreateResourceConfig(
36+
VirtualMachine,
37+
name,
38+
new VirtualMachine(),
39+
new [] { networkInterface });
2740
}
2841
}
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
using System.Collections.Generic;
2+
using System.Linq;
3+
4+
namespace Microsoft.Azure.Experiments
5+
{
6+
public static class EnumerableEx
7+
{
8+
public static IEnumerable<T> EmptyIfNull<T>(this IEnumerable<T> value)
9+
=> value == null ? Enumerable.Empty<T>() : value;
10+
}
11+
}
Lines changed: 39 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
1-
using Microsoft.Azure.Management.Network;
1+
using Microsoft.Azure.Experiments.ResourceManager;
2+
using Microsoft.Azure.Management.Network;
23
using Microsoft.Azure.Management.Network.Models;
4+
using Microsoft.Azure.Management.ResourceManager.Models;
35
using System;
46
using System.Threading.Tasks;
57

@@ -11,38 +13,65 @@ public static ResourcePolicy<ResourceName, Info> Create<Operations, Info>(
1113
Func<INetworkManagementClient, Operations> getOperations,
1214
Func<Operations, ResourceName, Task<Info>> getAsync,
1315
Func<Operations, ResourceName, Info, Task<Info>> createOrUpdateAsync)
14-
where Info : Resource
16+
where Info : Management.Network.Models.Resource
1517
=> OperationsPolicy
1618
.Create(getAsync, createOrUpdateAsync)
1719
.Transform(getOperations)
1820
.CreateResourcePolicy(i => i.Location, (i, location) => i.Location = location);
1921

20-
public static ResourcePolicy<ResourceName, NetworkInterface> NetworkInterface { get; }
21-
= Create(
22-
client => client.NetworkInterfaces,
23-
(operations, name) => operations.GetAsync(name.ResourceGroupName, name.Name),
24-
(operations, name, info)
25-
=> operations.CreateOrUpdateAsync(name.ResourceGroupName, name.Name, info));
26-
2722
public static ResourcePolicy<ResourceName, NetworkSecurityGroup> NetworkSecurityGroup { get; }
2823
= Create(
2924
client => client.NetworkSecurityGroups,
3025
(operations, name) => operations.GetAsync(name.ResourceGroupName, name.Name),
3126
(operations, name, info)
3227
=> operations.CreateOrUpdateAsync(name.ResourceGroupName, name.Name, info));
3328

34-
public static ResourcePolicy<ResourceName, PublicIPAddress> PublicIPAddresss { get; }
29+
public static ResourceConfig<ResourceName, NetworkSecurityGroup> CreateNetworkSecurityGroupConfig(
30+
this ResourceConfig<string, ResourceGroup> resourceGroup,
31+
string name)
32+
=> resourceGroup.CreateResourceConfig(NetworkSecurityGroup, name, new NetworkSecurityGroup());
33+
34+
public static ResourcePolicy<ResourceName, PublicIPAddress> PublicIPAddress { get; }
3535
= Create(
3636
client => client.PublicIPAddresses,
3737
(operations, name) => operations.GetAsync(name.ResourceGroupName, name.Name),
3838
(operations, name, info)
3939
=> operations.CreateOrUpdateAsync(name.ResourceGroupName, name.Name, info));
4040

41+
public static ResourceConfig<ResourceName, PublicIPAddress> CreatePublicIPAddressConfig(
42+
this ResourceConfig<string, ResourceGroup> resourceGroup,
43+
string name)
44+
=> resourceGroup.CreateResourceConfig(PublicIPAddress, name, new PublicIPAddress());
45+
4146
public static ResourcePolicy<ResourceName, VirtualNetwork> VirtualNetwork { get; }
4247
= Create(
4348
client => client.VirtualNetworks,
4449
(operations, name) => operations.GetAsync(name.ResourceGroupName, name.Name),
4550
(operations, name, info)
4651
=> operations.CreateOrUpdateAsync(name.ResourceGroupName, name.Name, info));
52+
53+
public static ResourceConfig<ResourceName, VirtualNetwork> CreateVirtualNetworkConfig(
54+
this ResourceConfig<string, ResourceGroup> resourceGroup,
55+
string name)
56+
=> resourceGroup.CreateResourceConfig(VirtualNetwork, name, new VirtualNetwork());
57+
58+
public static ResourcePolicy<ResourceName, NetworkInterface> NetworkInterface { get; }
59+
= Create(
60+
client => client.NetworkInterfaces,
61+
(operations, name) => operations.GetAsync(name.ResourceGroupName, name.Name),
62+
(operations, name, info)
63+
=> operations.CreateOrUpdateAsync(name.ResourceGroupName, name.Name, info));
64+
65+
public static ResourceConfig<ResourceName, NetworkInterface> CreateNetworkInterfaceConfig(
66+
this ResourceConfig<string, ResourceGroup> resourceGroup,
67+
string name,
68+
ResourceConfig<ResourceName, VirtualNetwork> virtualNetwork,
69+
ResourceConfig<ResourceName, NetworkSecurityGroup> networkSecurityGroup,
70+
ResourceConfig<ResourceName, PublicIPAddress> publicIPAddress)
71+
=> resourceGroup.CreateResourceConfig(
72+
NetworkInterface,
73+
name,
74+
new NetworkInterface(),
75+
new IResourceConfig[] { virtualNetwork, networkSecurityGroup, publicIPAddress });
4776
}
4877
}

experiments/Azure.Experiments/Azure.Experiments/ResourceConfig.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,12 +12,12 @@ public static ResourceConfig<Name, Info> CreateResourceConfig<Name, Info>(
1212
this ResourcePolicy<Name, Info> policy,
1313
Name name,
1414
Info info,
15-
IEnumerable<IResourceConfig> dependencies)
15+
IEnumerable<IResourceConfig> dependencies = null)
1616
where Info : class
17-
=> new ResourceConfig<Name, Info>(policy, name, info, dependencies);
17+
=> new ResourceConfig<Name, Info>(policy, name, info, dependencies.EmptyIfNull());
1818
}
1919

20-
public sealed class ResourceConfig<TName, TInfo>
20+
public sealed class ResourceConfig<TName, TInfo> : IResourceConfig
2121
where TInfo : class
2222
{
2323
public ResourcePolicy<TName, TInfo> Policy { get; }

experiments/Azure.Experiments/Azure.Experiments/ResourceManager/ResourceManagerPolicy.cs

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
using Microsoft.Azure.Management.ResourceManager;
22
using Microsoft.Azure.Management.ResourceManager.Models;
3+
using System.Collections.Generic;
4+
using System.Linq;
35

46
namespace Microsoft.Azure.Experiments.ResourceManager
57
{
@@ -12,5 +14,20 @@ public static class ResourceManagerPolicy
1214
(operations, name, info) => operations.CreateOrUpdateAsync(name, info))
1315
.Transform<IResourceManagementClient>(r => r.ResourceGroups)
1416
.CreateResourcePolicy(i => i.Location, (i, location) => i.Location = location);
17+
18+
public static ResourceConfig<string, ResourceGroup> CreateResourceGroupConfig(string name)
19+
=> ResourceGroup.CreateResourceConfig(name, new ResourceGroup());
20+
21+
public static ResourceConfig<ResourceName, Info> CreateResourceConfig<Info>(
22+
this ResourceConfig<string, ResourceGroup> resourceGroup,
23+
ResourcePolicy<ResourceName, Info> policy,
24+
string name,
25+
Info info,
26+
IEnumerable<IResourceConfig> dependencies = null)
27+
where Info : class
28+
=> policy.CreateResourceConfig(
29+
new ResourceName(resourceGroup.Name, name),
30+
info,
31+
dependencies.EmptyIfNull().Concat(new[] { resourceGroup }));
1532
}
1633
}

0 commit comments

Comments
 (0)