Skip to content

Commit b18f0d1

Browse files
State
1 parent 74ffdeb commit b18f0d1

16 files changed

+252
-86
lines changed

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

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,10 @@ namespace Microsoft.Azure.Experiments.Compute
88
{
99
public static class ComputePolicy
1010
{
11-
public static ResourcePolicy<ResourceName, Config> Create<Config, Operations>(
11+
public static ResourcePolicy<Config> Create<Config, Operations>(
1212
Func<IComputeManagementClient, Operations> getOperations,
13-
Func<Operations, ResourceName, CancellationToken, Task<Config>> getAsync,
14-
Func<Operations, ResourceName, Config, CancellationToken, Task<Config>> createOrUpdateAsync)
13+
Func<GetAsyncParams<Operations>, Task<Config>> getAsync,
14+
Func<CreateOrUpdateAsyncParams<Operations, Config>, Task<Config>> createOrUpdateAsync)
1515
where Config : Resource
1616
=> ResourcePolicy.Create(
1717
getOperations,

experiments/Azure.Experiments/Azure.Experiments/Compute/VirtualMachinePolicy.cs

Lines changed: 7 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -6,18 +6,16 @@ namespace Microsoft.Azure.Experiments.Compute
66
{
77
public static class VirtualMachinePolicy
88
{
9-
public static ResourcePolicy<ResourceName, VirtualMachine> Policy { get; }
9+
public static ResourcePolicy<VirtualMachine> Policy { get; }
1010
= ComputePolicy.Create(
1111
client => client.VirtualMachines,
12-
(operations, name, cancellationTokent)
13-
=> operations.GetAsync(
14-
name.ResourceGroupName, name.Name, cancellationToken: cancellationTokent),
15-
(operations, name, config, cancellationTokent)
16-
=> operations.CreateOrUpdateAsync(
17-
name.ResourceGroupName, name.Name, config, cancellationTokent));
12+
p => p.Operations.GetAsync(
13+
p.ResourceGroupName, p.Name, null, p.CancellationToken),
14+
p => p.Operations.CreateOrUpdateAsync(
15+
p.ResourceGroupName, p.Name, p.Config, p.CancellationToken));
1816

19-
public static ResourceConfig<ResourceName, VirtualMachine> CreateVirtualMachineConfig(
20-
this ResourceConfig<string, ResourceGroup> resourceGroup, string name)
17+
public static ResourceConfig<VirtualMachine> CreateVirtualMachineConfig(
18+
this ResourceConfig<ResourceGroup> resourceGroup, string name)
2119
=> Policy.CreateConfig(resourceGroup, name);
2220
}
2321
}

experiments/Azure.Experiments/Azure.Experiments/CreateOrUpdateAsyncParams.cs

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,18 @@
22

33
namespace Microsoft.Azure.Experiments
44
{
5+
public static class CreateOrUpdateAsyncParams
6+
{
7+
public static CreateOrUpdateAsyncParams<Operations, Config> Create<Operations, Config>(
8+
Operations operations,
9+
string resourceGroupName,
10+
string name,
11+
Config config,
12+
CancellationToken cancellationToken)
13+
=> new CreateOrUpdateAsyncParams<Operations, Config>(
14+
operations, resourceGroupName, name, config, cancellationToken);
15+
}
16+
517
public sealed class CreateOrUpdateAsyncParams<TOperations, TConfig>
618
{
719
public TOperations Operations { get; }
@@ -16,13 +28,14 @@ public sealed class CreateOrUpdateAsyncParams<TOperations, TConfig>
1628

1729
public CreateOrUpdateAsyncParams(
1830
TOperations operations,
19-
ResourceName name,
31+
string resourceGroupName,
32+
string name,
2033
TConfig config,
2134
CancellationToken cancellationToken)
2235
{
2336
Operations = operations;
24-
ResourceGroupName = name.ResourceGroupName;
25-
Name = name.Name;
37+
ResourceGroupName = resourceGroupName;
38+
Name = name;
2639
Config = config;
2740
CancellationToken = cancellationToken;
2841
}

experiments/Azure.Experiments/Azure.Experiments/GetAsyncParams.cs

Lines changed: 17 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,17 @@
22

33
namespace Microsoft.Azure.Experiments
44
{
5-
public sealed class GetAsyncParams<TOperations>
5+
public static class GetAsyncParams
6+
{
7+
public static GetAsyncParams<Operations> Create<Operations>(
8+
Operations operations,
9+
string resourceGroupName,
10+
string name,
11+
CancellationToken cancellationToken)
12+
=> new GetAsyncParams<Operations>(operations, resourceGroupName, name, cancellationToken);
13+
}
14+
15+
public class GetAsyncParams<TOperations>
616
{
717
public TOperations Operations { get; }
818

@@ -13,11 +23,14 @@ public sealed class GetAsyncParams<TOperations>
1323
public CancellationToken CancellationToken { get; }
1424

1525
public GetAsyncParams(
16-
TOperations operations, ResourceName name, CancellationToken cancellationToken)
26+
TOperations operations,
27+
string resourceGroupName,
28+
string name,
29+
CancellationToken cancellationToken)
1730
{
1831
Operations = operations;
19-
ResourceGroupName = name.ResourceGroupName;
20-
Name = name.Name;
32+
ResourceGroupName = resourceGroupName;
33+
Name = name;
2134
CancellationToken = cancellationToken;
2235
}
2336
}
Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,21 @@
11
namespace Microsoft.Azure.Experiments
22
{
3+
public interface IResourceConfigVisitor<Result>
4+
{
5+
Result Visit<Config>(ResourceConfig<Config> config)
6+
where Config : class;
7+
Result Visit<Config, ParentConfig>(NestedResourceConfig<Config, ParentConfig> config)
8+
where Config : class
9+
where ParentConfig : class;
10+
}
11+
312
public interface IResourceConfig
4-
{
13+
{
14+
Result Apply<Result>(IResourceConfigVisitor<Result> visitor);
15+
}
16+
17+
public interface IResourceConfig<Config> : IResourceConfig
18+
where Config : class
19+
{
520
}
621
}

experiments/Azure.Experiments/Azure.Experiments/IState.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,5 +2,7 @@
22
{
33
public interface IState
44
{
5+
Config Get<Config>(IResourceConfig<Config> config)
6+
where Config : class;
57
}
68
}
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
namespace Microsoft.Azure.Experiments
2+
{
3+
public sealed class NestedResourceConfig<Config, ParentConfig> : IResourceConfig<Config>
4+
where Config : class
5+
where ParentConfig : class
6+
{
7+
public NestedResourcePolicy<Config, ParentConfig> Policy { get; }
8+
9+
public IResourceConfig<ParentConfig> Parent { get; }
10+
11+
public NestedResourceConfig(
12+
NestedResourcePolicy<Config, ParentConfig> policy, IResourceConfig<ParentConfig> parent)
13+
{
14+
Policy = policy;
15+
Parent = parent;
16+
}
17+
18+
public Result Apply<Result>(IResourceConfigVisitor<Result> visitor)
19+
=> visitor.Visit(this);
20+
}
21+
}
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
using Microsoft.Azure.Management.Network;
2+
using Microsoft.Azure.Management.Network.Models;
3+
using Microsoft.Azure.Management.ResourceManager.Models;
4+
5+
namespace Microsoft.Azure.Experiments.Network
6+
{
7+
public static class NetworkInterfacePolicy
8+
{
9+
public static ResourcePolicy<NetworkInterface> Policy { get; }
10+
= NetworkPolicy.Create(
11+
client => client.NetworkInterfaces,
12+
p => p.Operations.GetAsync(
13+
p.ResourceGroupName, p.Name, null, p.CancellationToken),
14+
p => p.Operations.CreateOrUpdateAsync(
15+
p.ResourceGroupName, p.Name, p.Config, p.CancellationToken));
16+
17+
public static ResourceConfig<NetworkInterface> CreateNetworkSecurityGroupConfig(
18+
this ResourceConfig<ResourceGroup> resourceGroup, string name)
19+
=> Policy.CreateConfig(resourceGroup, name);
20+
}
21+
}

experiments/Azure.Experiments/Azure.Experiments/Network/NetworkPolicy.cs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,13 @@
11
using Microsoft.Azure.Management.Network;
22
using Microsoft.Azure.Management.Network.Models;
33
using System;
4-
using System.Threading;
54
using System.Threading.Tasks;
65

76
namespace Microsoft.Azure.Experiments.Network
87
{
98
public static class NetworkPolicy
109
{
11-
public static ResourcePolicy<ResourceName, Config> Create<Config, Operations>(
10+
public static ResourcePolicy<Config> Create<Config, Operations>(
1211
Func<INetworkManagementClient, Operations> getOperations,
1312
Func<GetAsyncParams<Operations>, Task<Config>> getAsync,
1413
Func<CreateOrUpdateAsyncParams<Operations, Config>, Task<Config>> createOrUpdateAsync)

experiments/Azure.Experiments/Azure.Experiments/Network/NetworkSecurityGroupPolicy.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,16 +6,16 @@ namespace Microsoft.Azure.Experiments.Network
66
{
77
public static class NetworkSecurityGroupPolicy
88
{
9-
public static ResourcePolicy<ResourceName, NetworkSecurityGroup> Policy { get; }
9+
public static ResourcePolicy<NetworkSecurityGroup> Policy { get; }
1010
= NetworkPolicy.Create(
1111
client => client.NetworkSecurityGroups,
1212
p => p.Operations.GetAsync(
1313
p.ResourceGroupName, p.Name, null, p.CancellationToken),
1414
p => p.Operations.CreateOrUpdateAsync(
1515
p.ResourceGroupName, p.Name, p.Config, p.CancellationToken));
1616

17-
public static ResourceConfig<ResourceName, NetworkSecurityGroup> CreateNetworkSecurityGroupConfig(
18-
this ResourceConfig<string, ResourceGroup> resourceGroup, string name)
17+
public static ResourceConfig<NetworkSecurityGroup> CreateNetworkSecurityGroupConfig(
18+
this ResourceConfig<ResourceGroup> resourceGroup, string name)
1919
=> Policy.CreateConfig(resourceGroup, name);
2020
}
2121
}

experiments/Azure.Experiments/Azure.Experiments/Network/PublicIPAddressPolicy.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,16 +6,16 @@ namespace Microsoft.Azure.Experiments.Network
66
{
77
public static class PublicIPAddressPolicy
88
{
9-
public static ResourcePolicy<ResourceName, PublicIPAddress> Policy { get; }
9+
public static ResourcePolicy<PublicIPAddress> Policy { get; }
1010
= NetworkPolicy.Create(
1111
client => client.PublicIPAddresses,
1212
p => p.Operations.GetAsync(
1313
p.ResourceGroupName, p.Name, null, p.CancellationToken),
1414
p => p.Operations.CreateOrUpdateAsync(
1515
p.ResourceGroupName, p.Name, p.Config, p.CancellationToken));
1616

17-
public static ResourceConfig<ResourceName, PublicIPAddress> CreatePublicIPAddressConfig(
18-
this ResourceConfig<string, ResourceGroup> resourceGroup, string name)
17+
public static ResourceConfig<PublicIPAddress> CreatePublicIPAddressConfig(
18+
this ResourceConfig<ResourceGroup> resourceGroup, string name)
1919
=> Policy.CreateConfig(resourceGroup, name);
2020
}
2121
}

experiments/Azure.Experiments/Azure.Experiments/Network/VirtualNetworkPolicy.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,16 +6,16 @@ namespace Microsoft.Azure.Experiments.Network
66
{
77
public static class VirtualNetworkPolicy
88
{
9-
public static ResourcePolicy<ResourceName, VirtualNetwork> Policy { get; }
9+
public static ResourcePolicy<VirtualNetwork> Policy { get; }
1010
= NetworkPolicy.Create(
1111
client => client.VirtualNetworks,
1212
p => p.Operations.GetAsync(
1313
p.ResourceGroupName, p.Name, null, p.CancellationToken),
1414
p => p.Operations.CreateOrUpdateAsync(
1515
p.ResourceGroupName, p.Name, p.Config, p.CancellationToken));
1616

17-
public static ResourceConfig<ResourceName, VirtualNetwork> CreateVirtualNetworkConfig(
18-
this ResourceConfig<string, ResourceGroup> resourceGroup, string name)
17+
public static ResourceConfig<VirtualNetwork> CreateVirtualNetworkConfig(
18+
this ResourceConfig<ResourceGroup> resourceGroup, string name)
1919
=> Policy.CreateConfig(resourceGroup, name);
2020
}
2121
}

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

Lines changed: 26 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -5,52 +5,63 @@
55

66
namespace Microsoft.Azure.Experiments
77
{
8-
public class ResourceConfig<TName, Config> : IResourceConfig
8+
public sealed class ResourceConfig<Config> : IResourceConfig<Config>
9+
where Config : class
910
{
10-
public ResourcePolicy<TName, Config> Policy { get; }
11+
public ResourcePolicy<Config> Policy { get; }
1112

12-
public TName Name { get; }
13+
public string ResourceGroupName { get; }
14+
15+
public string Name { get; }
1316

1417
public Func<IState, Config> CreateConfig { get; }
1518

1619
public IEnumerable<IResourceConfig> Dependencies { get; }
1720

1821
public ResourceConfig(
19-
ResourcePolicy<TName, Config> policy,
20-
TName name,
22+
ResourcePolicy<Config> policy,
23+
string resourceGroupName,
24+
string name,
2125
Func<IState, Config> createConfig,
2226
IEnumerable<IResourceConfig> dependencies)
2327
{
2428
Policy = policy;
29+
ResourceGroupName = resourceGroupName;
2530
Name = name;
2631
CreateConfig = createConfig;
2732
Dependencies = dependencies;
2833
}
34+
35+
public Result Apply<Result>(IResourceConfigVisitor<Result> visitor)
36+
=> visitor.Visit(this);
2937
}
3038

3139
public static class ResourceConfig
3240
{
33-
public static ResourceConfig<Name, Config> CreateConfig<Name, Config>(
34-
this ResourcePolicy<Name, Config> policy,
35-
Name name,
41+
public static ResourceConfig<Config> CreateConfig<Config>(
42+
this ResourcePolicy<Config> policy,
43+
string resourceGroupName,
44+
string name,
3645
Func<IState, Config> createConfig = null,
3746
IEnumerable<IResourceConfig> dependencies = null)
38-
where Config : new()
39-
=> new ResourceConfig<Name, Config>(
47+
where Config : class, new()
48+
=> new ResourceConfig<Config>(
4049
policy,
50+
resourceGroupName,
4151
name,
4252
createConfig ?? (_ => new Config()),
4353
dependencies.EmptyIfNull());
4454

45-
public static ResourceConfig<ResourceName, Config> CreateConfig<Config>(
46-
this ResourcePolicy<ResourceName, Config> policy,
47-
ResourceConfig<string, ResourceGroup> resourceGroup,
55+
public static ResourceConfig<Config> CreateConfig<Config>(
56+
this ResourcePolicy<Config> policy,
57+
ResourceConfig<ResourceGroup> resourceGroup,
4858
string name,
4959
Func<IState, Config> createConfig = null,
5060
IEnumerable<IResourceConfig> dependencies = null)
51-
where Config : new()
61+
where Config : class, new()
5262
=> policy.CreateConfig(
53-
new ResourceName(resourceGroup.Name, name),
63+
resourceGroup.Name,
64+
name,
5465
createConfig,
5566
dependencies.EmptyIfNull().Concat(new[] { resourceGroup }));
5667
}

experiments/Azure.Experiments/Azure.Experiments/ResourceManager/ResourceGroupPolicy.cs

Lines changed: 6 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -5,18 +5,15 @@ namespace Microsoft.Azure.Experiments.ResourceManager
55
{
66
public static class ResourceGroupPolicy
77
{
8-
public static ResourcePolicy<string, ResourceGroup> Policy { get; }
9-
= ResourcePolicy.Create<
10-
string, ResourceGroup, IResourceManagementClient, IResourceGroupsOperations>(
8+
public static ResourcePolicy<ResourceGroup> Policy { get; }
9+
= ResourcePolicy.Create<ResourceGroup, IResourceManagementClient, IResourceGroupsOperations>(
1110
client => client.ResourceGroups,
12-
(operations, name, cancellationToken)
13-
=> operations.GetAsync(name, cancellationToken),
14-
(operations, name, config, cancellationToken)
15-
=> operations.CreateOrUpdateAsync(name, config, cancellationToken),
11+
p => p.Operations.GetAsync(p.Name, p.CancellationToken),
12+
p => p.Operations.CreateOrUpdateAsync(p.Name, p.Config, p.CancellationToken),
1613
config => config.Location,
1714
(config, location) => config.Location = location);
1815

19-
public static ResourceConfig<string, ResourceGroup> CreateResourceGroupConfig(string name)
20-
=> Policy.CreateConfig(name);
16+
public static ResourceConfig<ResourceGroup> CreateResourceGroupConfig(string name)
17+
=> Policy.CreateConfig(name, name);
2118
}
2219
}

0 commit comments

Comments
 (0)