Skip to content

Commit bd12545

Browse files
Classic policies.
1 parent 34a94ee commit bd12545

File tree

8 files changed

+193
-42
lines changed

8 files changed

+193
-42
lines changed

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

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,20 @@
11
using Microsoft.Azure.Management.Compute;
2-
using System;
3-
using System.Threading.Tasks;
2+
using Microsoft.Azure.Management.Compute.Models;
43

54
namespace Microsoft.Azure.Experiments.Compute
65
{
6+
public abstract class ComputePolicy<Info, Operations>
7+
: ResourcePolicy<Info, IComputeManagementClient, Operations>
8+
where Info : Resource
9+
{
10+
public sealed override string GetLocation(Info info)
11+
=> info.Location;
12+
13+
public sealed override void SetLocation(Info info, string location)
14+
=> info.Location = location;
15+
}
16+
17+
/*
718
public static class ComputePolicy
819
{
920
public static ResourcePolicy<Info> Create<Operations, Info>(
@@ -16,4 +27,5 @@ public static ResourcePolicy<Info> Create<Operations, Info>(
1627
.Transform(getOperations)
1728
.CreateResourcePolicy(i => i.Location, (i, location) => i.Location = location);
1829
}
30+
*/
1931
}

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

Lines changed: 19 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,25 @@
1-
using Microsoft.Azure.Management.Compute;
1+
using System.Threading.Tasks;
2+
using Microsoft.Azure.Management.Compute;
23
using Microsoft.Azure.Management.Compute.Models;
3-
using Microsoft.Azure.Management.Network.Models;
44

55
namespace Microsoft.Azure.Experiments.Compute
66
{
7+
public sealed class VirtualMachinePolicy
8+
: ComputePolicy<VirtualMachine, IVirtualMachinesOperations>
9+
{
10+
public override Task<VirtualMachine> CreateOrUpdateAsync(CreateParams p)
11+
=> p.Operations.CreateOrUpdateAsync(
12+
p.ResourceGroupName, p.Name, p.Info, p.CancellationToken);
13+
14+
public override Task<VirtualMachine> GetAsync(GetParams p)
15+
=> p.Operations.GetAsync(
16+
p.ResourceGroupName, p.Name, cancellationToken: p.CancellationToken);
17+
18+
public override IVirtualMachinesOperations GetOperations(IComputeManagementClient client)
19+
=> client.VirtualMachines;
20+
}
21+
22+
/*
723
public static class VirtualMachinePolicy
824
{
925
public static ResourcePolicy<VirtualMachine> Policy { get; }
@@ -33,4 +49,5 @@ public static ResourceConfig<VirtualMachine> CreateVirtualMachineConfig(
3349
},
3450
new[] { networkInterface });
3551
}
52+
*/
3653
}

experiments/Azure.Experiments/Azure.Experiments/Network/NetworkInterfacePolicy.cs

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,25 @@
1-
using Microsoft.Azure.Management.Network;
1+
using System.Threading.Tasks;
2+
using Microsoft.Azure.Management.Network;
23
using Microsoft.Azure.Management.Network.Models;
34

45
namespace Microsoft.Azure.Experiments.Network
56
{
7+
public sealed class NetworkInterfacePolicy
8+
: NetworkPolicy<NetworkInterface, INetworkInterfacesOperations>
9+
{
10+
public override Task<NetworkInterface> CreateOrUpdateAsync(CreateParams p)
11+
=> p.Operations.CreateOrUpdateAsync(
12+
p.ResourceGroupName, p.Name, p.Info, p.CancellationToken);
13+
14+
public override Task<NetworkInterface> GetAsync(GetParams p)
15+
=> p.Operations.GetAsync(
16+
p.ResourceGroupName, p.Name, cancellationToken: p.CancellationToken);
17+
18+
public override INetworkInterfacesOperations GetOperations(INetworkManagementClient client)
19+
=> client.NetworkInterfaces;
20+
}
21+
22+
/*
623
public static class NetworkInterfacePolicy
724
{
825
public static ResourcePolicy<NetworkInterface> Policy { get; }
@@ -44,4 +61,5 @@ public static ResourceConfig<NetworkInterface> CreateNetworkInterfaceConfig(
4461
new IResourceConfig[] { networkSecurityGroup, publicIPAddress },
4562
new[] { subnet });
4663
}
64+
*/
4765
}
Lines changed: 11 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,18 @@
1-
using Microsoft.Azure.Management.Network;
2-
using System;
1+
using System.Threading;
32
using System.Threading.Tasks;
3+
using Microsoft.Azure.Management.Network.Models;
4+
using Microsoft.Azure.Management.Network;
45

56
namespace Microsoft.Azure.Experiments.Network
67
{
7-
public static class NetworkPolicy
8+
public abstract class NetworkPolicy<Info, Operations>
9+
: ResourcePolicy<Info, INetworkManagementClient, Operations>
10+
where Info : Resource
811
{
9-
public static ResourcePolicy<Info> Create<Operations, Info>(
10-
Func<INetworkManagementClient, Operations> getOperations,
11-
Func<Operations, ResourceName, Task<Info>> getAsync,
12-
Func<Operations, ResourceName, Info, Task<Info>> createOrUpdateAsync)
13-
where Info : Management.Network.Models.Resource
14-
=> OperationsPolicy
15-
.Create(getAsync, createOrUpdateAsync)
16-
.Transform(getOperations)
17-
.CreateResourcePolicy(i => i.Location, (i, location) => i.Location = location);
12+
public sealed override string GetLocation(Info info)
13+
=> info.Location;
14+
15+
public sealed override void SetLocation(Info info, string location)
16+
=> info.Location = location;
1817
}
1918
}

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

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,26 @@
1-
using Microsoft.Azure.Management.Network;
1+
using System.Threading.Tasks;
2+
using Microsoft.Azure.Management.Network;
23
using Microsoft.Azure.Management.Network.Models;
34

45
namespace Microsoft.Azure.Experiments.Network
56
{
7+
public sealed class NetworkSecurityGroupPolicy
8+
: NetworkPolicy<NetworkSecurityGroup, INetworkSecurityGroupsOperations>
9+
{
10+
public override Task<NetworkSecurityGroup> CreateOrUpdateAsync(CreateParams p)
11+
=> p.Operations.CreateOrUpdateAsync(
12+
p.ResourceGroupName, p.Name, p.Info, p.CancellationToken);
13+
14+
public override Task<NetworkSecurityGroup> GetAsync(GetParams p)
15+
=> p.Operations.GetAsync(
16+
p.ResourceGroupName, p.Name, cancellationToken: p.CancellationToken);
17+
18+
public override INetworkSecurityGroupsOperations GetOperations(
19+
INetworkManagementClient client)
20+
=> client.NetworkSecurityGroups;
21+
}
22+
23+
/*
624
public static class NetworkSecurityGroupPolicy
725
{
826
public static ResourcePolicy<NetworkSecurityGroup> Policy { get; }
@@ -16,4 +34,5 @@ public static ResourceConfig<NetworkSecurityGroup> CreateNetworkSecurityGroupCon
1634
this ResourceName name)
1735
=> Policy.CreateConfig(name, _ => new NetworkSecurityGroup());
1836
}
37+
*/
1938
}

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

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,25 @@
1-
using Microsoft.Azure.Management.Network;
1+
using System.Threading.Tasks;
2+
using Microsoft.Azure.Management.Network;
23
using Microsoft.Azure.Management.Network.Models;
34

45
namespace Microsoft.Azure.Experiments.Network
56
{
7+
public sealed class PublicIPAddressPolicy
8+
: NetworkPolicy<PublicIPAddress, IPublicIPAddressesOperations>
9+
{
10+
public override Task<PublicIPAddress> CreateOrUpdateAsync(CreateParams p)
11+
=> p.Operations.CreateOrUpdateAsync(
12+
p.ResourceGroupName, p.Name, p.Info, p.CancellationToken);
13+
14+
public override Task<PublicIPAddress> GetAsync(GetParams p)
15+
=> p.Operations.GetAsync(
16+
p.ResourceGroupName, p.Name, cancellationToken: p.CancellationToken);
17+
18+
public override IPublicIPAddressesOperations GetOperations(INetworkManagementClient client)
19+
=> client.PublicIPAddresses;
20+
}
21+
22+
/*
623
public static class PublicIPAddressPolicy
724
{
825
public static ResourcePolicy<PublicIPAddress> Policy { get; }
@@ -16,4 +33,5 @@ public static ResourceConfig<PublicIPAddress> CreatePublicIPAddressConfig(
1633
this ResourceName name)
1734
=> Policy.CreateConfig(name, _ => new PublicIPAddress());
1835
}
36+
*/
1937
}

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

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,25 @@
1-
using Microsoft.Azure.Management.Network;
1+
using System.Threading.Tasks;
2+
using Microsoft.Azure.Management.Network;
23
using Microsoft.Azure.Management.Network.Models;
34

45
namespace Microsoft.Azure.Experiments.Network
56
{
7+
public sealed class VirtualNetworkPolicy
8+
: NetworkPolicy<VirtualNetwork, IVirtualNetworksOperations>
9+
{
10+
public override Task<VirtualNetwork> CreateOrUpdateAsync(CreateParams p)
11+
=> p.Operations.CreateOrUpdateAsync(
12+
p.ResourceGroupName, p.Name, p.Info, p.CancellationToken);
13+
14+
public override Task<VirtualNetwork> GetAsync(GetParams p)
15+
=> p.Operations.GetAsync(
16+
p.ResourceGroupName, p.Name, cancellationToken: p.CancellationToken);
17+
18+
public override IVirtualNetworksOperations GetOperations(INetworkManagementClient client)
19+
=> client.VirtualNetworks;
20+
}
21+
22+
/*
623
public static class VirtualNetworkPolicy
724
{
825
public static ResourcePolicy<VirtualNetwork> Policy { get; }
@@ -16,4 +33,5 @@ public static ResourceConfig<VirtualNetwork> CreateVirtualNetworkConfig(
1633
this ResourceName name)
1734
=> Policy.CreateConfig(name, _ => new VirtualNetwork());
1835
}
36+
*/
1937
}
Lines changed: 72 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,38 +1,88 @@
11
using System;
2+
using System.Threading;
3+
using System.Threading.Tasks;
24

35
namespace Microsoft.Azure.Experiments
46
{
5-
public static class ResourcePolicy
7+
public abstract class ResourcePolicy<Name, Info>
8+
where Info : class
69
{
7-
public static ResourcePolicy<Info> CreateResourcePolicy<Client, Info>(
8-
this OperationsPolicy<Client, Info> operationsPolicy,
9-
Func<Info, string> getLocation,
10-
Action<Info, string> setLocation)
11-
where Client : class, IDisposable
12-
where Info : class
13-
=> new ResourcePolicy<Info>(
14-
operationsPolicy.Transform<IClient>(c => c.GetClient<Client>()),
15-
getLocation,
16-
setLocation);
10+
public abstract Task<Info> GetAsync(
11+
IClient client, Name name, CancellationToken cancellationToken);
12+
13+
public abstract Task<Info> CreateOrUpdatesAsync(
14+
IClient client, Name name, Info info, CancellationToken cancellationToken);
15+
16+
public abstract string GetLocation(Info info);
17+
18+
public abstract void SetLocation(Info info, string location);
1719
}
1820

19-
public sealed class ResourcePolicy<Info>
21+
public abstract class ResourcePolicy<Info, RMClient, Operations> : ResourcePolicy<ResourceName, Info>
2022
where Info : class
23+
where RMClient : class, IDisposable
2124
{
22-
public OperationsPolicy<IClient, Info> Operations { get; }
25+
public sealed class GetParams
26+
{
27+
public Operations Operations { get; }
2328

24-
public Func<Info, string> GetLocation { get; }
29+
public string ResourceGroupName { get; }
2530

26-
public Action<Info, string> SetLocation { get; }
31+
public string Name { get; }
2732

28-
public ResourcePolicy(
29-
OperationsPolicy<IClient, Info> operations,
30-
Func<Info, string> getLocation,
31-
Action<Info, string> setLocation)
33+
public CancellationToken CancellationToken { get; }
34+
35+
public GetParams(
36+
Operations operations, ResourceName name, CancellationToken cancellationToken)
37+
{
38+
Operations = operations;
39+
ResourceGroupName = name.ResourceGroupName;
40+
Name = name.Name;
41+
CancellationToken = cancellationToken;
42+
}
43+
}
44+
45+
public sealed class CreateParams
3246
{
33-
Operations = operations;
34-
GetLocation = getLocation;
35-
SetLocation = setLocation;
47+
public Operations Operations { get; }
48+
49+
public string ResourceGroupName { get; }
50+
51+
public string Name { get; }
52+
53+
public Info Info { get; }
54+
55+
public CancellationToken CancellationToken { get; }
56+
57+
public CreateParams(
58+
Operations operations,
59+
ResourceName name,
60+
Info info,
61+
CancellationToken cancellationToken)
62+
{
63+
Operations = operations;
64+
ResourceGroupName = name.ResourceGroupName;
65+
Name = name.Name;
66+
Info = info;
67+
CancellationToken = cancellationToken;
68+
}
3669
}
70+
71+
public abstract Operations GetOperations(RMClient client);
72+
73+
public abstract Task<Info> GetAsync(GetParams p);
74+
75+
public abstract Task<Info> CreateOrUpdateAsync(CreateParams p);
76+
77+
public sealed override Task<Info> GetAsync(
78+
IClient client, ResourceName name, CancellationToken cancellationToken)
79+
=> GetAsync(new GetParams(GetOperations(client), name, cancellationToken));
80+
81+
public sealed override Task<Info> CreateOrUpdatesAsync(
82+
IClient client, ResourceName name, Info info, CancellationToken cancellationToken)
83+
=> CreateOrUpdateAsync(new CreateParams(GetOperations(client), name, info, cancellationToken));
84+
85+
Operations GetOperations(IClient client)
86+
=> GetOperations(client.GetClient<RMClient>());
3787
}
3888
}

0 commit comments

Comments
 (0)