Skip to content

Commit

Permalink
Classic policies.
Browse files Browse the repository at this point in the history
  • Loading branch information
sergey-shandar committed Nov 10, 2017
1 parent 34a94ee commit bd12545
Show file tree
Hide file tree
Showing 8 changed files with 193 additions and 42 deletions.
Original file line number Diff line number Diff line change
@@ -1,9 +1,20 @@
using Microsoft.Azure.Management.Compute;
using System;
using System.Threading.Tasks;
using Microsoft.Azure.Management.Compute.Models;

namespace Microsoft.Azure.Experiments.Compute
{
public abstract class ComputePolicy<Info, Operations>
: ResourcePolicy<Info, IComputeManagementClient, Operations>
where Info : Resource
{
public sealed override string GetLocation(Info info)
=> info.Location;

public sealed override void SetLocation(Info info, string location)
=> info.Location = location;
}

/*
public static class ComputePolicy
{
public static ResourcePolicy<Info> Create<Operations, Info>(
Expand All @@ -16,4 +27,5 @@ public static ResourcePolicy<Info> Create<Operations, Info>(
.Transform(getOperations)
.CreateResourcePolicy(i => i.Location, (i, location) => i.Location = location);
}
*/
}
Original file line number Diff line number Diff line change
@@ -1,9 +1,25 @@
using Microsoft.Azure.Management.Compute;
using System.Threading.Tasks;
using Microsoft.Azure.Management.Compute;
using Microsoft.Azure.Management.Compute.Models;
using Microsoft.Azure.Management.Network.Models;

namespace Microsoft.Azure.Experiments.Compute
{
public sealed class VirtualMachinePolicy
: ComputePolicy<VirtualMachine, IVirtualMachinesOperations>
{
public override Task<VirtualMachine> CreateOrUpdateAsync(CreateParams p)
=> p.Operations.CreateOrUpdateAsync(
p.ResourceGroupName, p.Name, p.Info, p.CancellationToken);

public override Task<VirtualMachine> GetAsync(GetParams p)
=> p.Operations.GetAsync(
p.ResourceGroupName, p.Name, cancellationToken: p.CancellationToken);

public override IVirtualMachinesOperations GetOperations(IComputeManagementClient client)
=> client.VirtualMachines;
}

/*
public static class VirtualMachinePolicy
{
public static ResourcePolicy<VirtualMachine> Policy { get; }
Expand Down Expand Up @@ -33,4 +49,5 @@ public static ResourceConfig<VirtualMachine> CreateVirtualMachineConfig(
},
new[] { networkInterface });
}
*/
}
Original file line number Diff line number Diff line change
@@ -1,8 +1,25 @@
using Microsoft.Azure.Management.Network;
using System.Threading.Tasks;
using Microsoft.Azure.Management.Network;
using Microsoft.Azure.Management.Network.Models;

namespace Microsoft.Azure.Experiments.Network
{
public sealed class NetworkInterfacePolicy
: NetworkPolicy<NetworkInterface, INetworkInterfacesOperations>
{
public override Task<NetworkInterface> CreateOrUpdateAsync(CreateParams p)
=> p.Operations.CreateOrUpdateAsync(
p.ResourceGroupName, p.Name, p.Info, p.CancellationToken);

public override Task<NetworkInterface> GetAsync(GetParams p)
=> p.Operations.GetAsync(
p.ResourceGroupName, p.Name, cancellationToken: p.CancellationToken);

public override INetworkInterfacesOperations GetOperations(INetworkManagementClient client)
=> client.NetworkInterfaces;
}

/*
public static class NetworkInterfacePolicy
{
public static ResourcePolicy<NetworkInterface> Policy { get; }
Expand Down Expand Up @@ -44,4 +61,5 @@ public static ResourceConfig<NetworkInterface> CreateNetworkInterfaceConfig(
new IResourceConfig[] { networkSecurityGroup, publicIPAddress },
new[] { subnet });
}
*/
}
Original file line number Diff line number Diff line change
@@ -1,19 +1,18 @@
using Microsoft.Azure.Management.Network;
using System;
using System.Threading;
using System.Threading.Tasks;
using Microsoft.Azure.Management.Network.Models;
using Microsoft.Azure.Management.Network;

namespace Microsoft.Azure.Experiments.Network
{
public static class NetworkPolicy
public abstract class NetworkPolicy<Info, Operations>
: ResourcePolicy<Info, INetworkManagementClient, Operations>
where Info : Resource
{
public static ResourcePolicy<Info> Create<Operations, Info>(
Func<INetworkManagementClient, Operations> getOperations,
Func<Operations, ResourceName, Task<Info>> getAsync,
Func<Operations, ResourceName, Info, Task<Info>> createOrUpdateAsync)
where Info : Management.Network.Models.Resource
=> OperationsPolicy
.Create(getAsync, createOrUpdateAsync)
.Transform(getOperations)
.CreateResourcePolicy(i => i.Location, (i, location) => i.Location = location);
public sealed override string GetLocation(Info info)
=> info.Location;

public sealed override void SetLocation(Info info, string location)
=> info.Location = location;
}
}
Original file line number Diff line number Diff line change
@@ -1,8 +1,26 @@
using Microsoft.Azure.Management.Network;
using System.Threading.Tasks;
using Microsoft.Azure.Management.Network;
using Microsoft.Azure.Management.Network.Models;

namespace Microsoft.Azure.Experiments.Network
{
public sealed class NetworkSecurityGroupPolicy
: NetworkPolicy<NetworkSecurityGroup, INetworkSecurityGroupsOperations>
{
public override Task<NetworkSecurityGroup> CreateOrUpdateAsync(CreateParams p)
=> p.Operations.CreateOrUpdateAsync(
p.ResourceGroupName, p.Name, p.Info, p.CancellationToken);

public override Task<NetworkSecurityGroup> GetAsync(GetParams p)
=> p.Operations.GetAsync(
p.ResourceGroupName, p.Name, cancellationToken: p.CancellationToken);

public override INetworkSecurityGroupsOperations GetOperations(
INetworkManagementClient client)
=> client.NetworkSecurityGroups;
}

/*
public static class NetworkSecurityGroupPolicy
{
public static ResourcePolicy<NetworkSecurityGroup> Policy { get; }
Expand All @@ -16,4 +34,5 @@ public static ResourceConfig<NetworkSecurityGroup> CreateNetworkSecurityGroupCon
this ResourceName name)
=> Policy.CreateConfig(name, _ => new NetworkSecurityGroup());
}
*/
}
Original file line number Diff line number Diff line change
@@ -1,8 +1,25 @@
using Microsoft.Azure.Management.Network;
using System.Threading.Tasks;
using Microsoft.Azure.Management.Network;
using Microsoft.Azure.Management.Network.Models;

namespace Microsoft.Azure.Experiments.Network
{
public sealed class PublicIPAddressPolicy
: NetworkPolicy<PublicIPAddress, IPublicIPAddressesOperations>
{
public override Task<PublicIPAddress> CreateOrUpdateAsync(CreateParams p)
=> p.Operations.CreateOrUpdateAsync(
p.ResourceGroupName, p.Name, p.Info, p.CancellationToken);

public override Task<PublicIPAddress> GetAsync(GetParams p)
=> p.Operations.GetAsync(
p.ResourceGroupName, p.Name, cancellationToken: p.CancellationToken);

public override IPublicIPAddressesOperations GetOperations(INetworkManagementClient client)
=> client.PublicIPAddresses;
}

/*
public static class PublicIPAddressPolicy
{
public static ResourcePolicy<PublicIPAddress> Policy { get; }
Expand All @@ -16,4 +33,5 @@ public static ResourceConfig<PublicIPAddress> CreatePublicIPAddressConfig(
this ResourceName name)
=> Policy.CreateConfig(name, _ => new PublicIPAddress());
}
*/
}
Original file line number Diff line number Diff line change
@@ -1,8 +1,25 @@
using Microsoft.Azure.Management.Network;
using System.Threading.Tasks;
using Microsoft.Azure.Management.Network;
using Microsoft.Azure.Management.Network.Models;

namespace Microsoft.Azure.Experiments.Network
{
public sealed class VirtualNetworkPolicy
: NetworkPolicy<VirtualNetwork, IVirtualNetworksOperations>
{
public override Task<VirtualNetwork> CreateOrUpdateAsync(CreateParams p)
=> p.Operations.CreateOrUpdateAsync(
p.ResourceGroupName, p.Name, p.Info, p.CancellationToken);

public override Task<VirtualNetwork> GetAsync(GetParams p)
=> p.Operations.GetAsync(
p.ResourceGroupName, p.Name, cancellationToken: p.CancellationToken);

public override IVirtualNetworksOperations GetOperations(INetworkManagementClient client)
=> client.VirtualNetworks;
}

/*
public static class VirtualNetworkPolicy
{
public static ResourcePolicy<VirtualNetwork> Policy { get; }
Expand All @@ -16,4 +33,5 @@ public static ResourceConfig<VirtualNetwork> CreateVirtualNetworkConfig(
this ResourceName name)
=> Policy.CreateConfig(name, _ => new VirtualNetwork());
}
*/
}
94 changes: 72 additions & 22 deletions experiments/Azure.Experiments/Azure.Experiments/ResourcePolicy.cs
Original file line number Diff line number Diff line change
@@ -1,38 +1,88 @@
using System;
using System.Threading;
using System.Threading.Tasks;

namespace Microsoft.Azure.Experiments
{
public static class ResourcePolicy
public abstract class ResourcePolicy<Name, Info>
where Info : class
{
public static ResourcePolicy<Info> CreateResourcePolicy<Client, Info>(
this OperationsPolicy<Client, Info> operationsPolicy,
Func<Info, string> getLocation,
Action<Info, string> setLocation)
where Client : class, IDisposable
where Info : class
=> new ResourcePolicy<Info>(
operationsPolicy.Transform<IClient>(c => c.GetClient<Client>()),
getLocation,
setLocation);
public abstract Task<Info> GetAsync(
IClient client, Name name, CancellationToken cancellationToken);

public abstract Task<Info> CreateOrUpdatesAsync(
IClient client, Name name, Info info, CancellationToken cancellationToken);

public abstract string GetLocation(Info info);

public abstract void SetLocation(Info info, string location);
}

public sealed class ResourcePolicy<Info>
public abstract class ResourcePolicy<Info, RMClient, Operations> : ResourcePolicy<ResourceName, Info>
where Info : class
where RMClient : class, IDisposable
{
public OperationsPolicy<IClient, Info> Operations { get; }
public sealed class GetParams
{
public Operations Operations { get; }

public Func<Info, string> GetLocation { get; }
public string ResourceGroupName { get; }

public Action<Info, string> SetLocation { get; }
public string Name { get; }

public ResourcePolicy(
OperationsPolicy<IClient, Info> operations,
Func<Info, string> getLocation,
Action<Info, string> setLocation)
public CancellationToken CancellationToken { get; }

public GetParams(
Operations operations, ResourceName name, CancellationToken cancellationToken)
{
Operations = operations;
ResourceGroupName = name.ResourceGroupName;
Name = name.Name;
CancellationToken = cancellationToken;
}
}

public sealed class CreateParams
{
Operations = operations;
GetLocation = getLocation;
SetLocation = setLocation;
public Operations Operations { get; }

public string ResourceGroupName { get; }

public string Name { get; }

public Info Info { get; }

public CancellationToken CancellationToken { get; }

public CreateParams(
Operations operations,
ResourceName name,
Info info,
CancellationToken cancellationToken)
{
Operations = operations;
ResourceGroupName = name.ResourceGroupName;
Name = name.Name;
Info = info;
CancellationToken = cancellationToken;
}
}

public abstract Operations GetOperations(RMClient client);

public abstract Task<Info> GetAsync(GetParams p);

public abstract Task<Info> CreateOrUpdateAsync(CreateParams p);

public sealed override Task<Info> GetAsync(
IClient client, ResourceName name, CancellationToken cancellationToken)
=> GetAsync(new GetParams(GetOperations(client), name, cancellationToken));

public sealed override Task<Info> CreateOrUpdatesAsync(
IClient client, ResourceName name, Info info, CancellationToken cancellationToken)
=> CreateOrUpdateAsync(new CreateParams(GetOperations(client), name, info, cancellationToken));

Operations GetOperations(IClient client)
=> GetOperations(client.GetClient<RMClient>());
}
}

0 comments on commit bd12545

Please sign in to comment.