Skip to content

Commit

Permalink
Get Image.
Browse files Browse the repository at this point in the history
  • Loading branch information
sergey-shandar committed Nov 23, 2017
1 parent 710c963 commit 03392cf
Show file tree
Hide file tree
Showing 6 changed files with 234 additions and 20 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -67,6 +67,8 @@
<Reference Include="System.Xml" />
</ItemGroup>
<ItemGroup>
<Compile Include="Compute\Image.cs" />
<Compile Include="Compute\Images.cs" />
<Compile Include="IResourceConfig.cs" />
<Compile Include="IResourceConfigVisitor.cs" />
<Compile Include="StateOperationContext.cs" />
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
namespace Microsoft.Azure.Commands.Common.Strategies.Compute
{
public sealed class Image
{
public string publisher;

public string offer;

public string sku;

public string version;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,135 @@
using System.Collections.Generic;

namespace Microsoft.Azure.Commands.Common.Strategies.Compute
{
public static class Images
{
public static Dictionary<string, Dictionary<string, Image>> Instance { get; } =
new Dictionary<string, Dictionary<string, Image>>
{
{
"Linux",
new Dictionary<string, Image>
{
{
"CentOS",
new Image
{
publisher = "OpenLogic",
offer = "CentOS",
sku = "7.3",
version = "latest",
}
},
{
"CoreOS",
new Image
{
publisher = "CoreOS",
offer = "CoreOS",
sku = "Stable",
version = "latest",

}
},
{
"Debian",
new Image
{
publisher = "credativ",
offer = "Debian",
sku = "8",
version = "latest",
}
},
{
"openSUSE-Leap",
new Image
{
publisher = "SUSE",
offer = "openSUSE-Leap",
sku = "42.2",
version = "latest",
}
},
{
"RHEL",
new Image
{
publisher = "RedHat",
offer = "RHEL",
sku = "7.3",
version = "latest"
}
},
{
"SLES",
new Image
{
publisher = "SUSE",
offer = "SLES",
sku = "12-SP2",
version = "latest",
}
},
{
"UbuntuLTS",
new Image
{
publisher = "Canonical",
offer = "UbuntuServer",
sku = "16.04-LTS",
version = "latest",
}
}
}
},
{
"Windows",
new Dictionary<string, Image>
{
{
"Win2016Datacenter",
new Image
{
publisher = "MicrosoftWindowsServer",
offer = "WindowsServer",
sku = "2016-Datacenter",
version = "latest",
}
},
{
"Win2012R2Datacenter",
new Image
{
publisher = "MicrosoftWindowsServer",
offer = "WindowsServer",
sku = "2012-R2-Datacenter",
version = "latest",
}
},
{
"Win2012Datacenter",
new Image
{
publisher = "MicrosoftWindowsServer",
offer = "WindowsServer",
sku = "2012-Datacenter",
version = "latest",
}
},
{
"Win2008R2SP1",
new Image
{
publisher = "MicrosoftWindowsServer",
offer = "WindowsServer",
sku = "2008-R2-SP1",
version = "latest",
}
}
}
}
};
}
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
using Microsoft.Azure.Management.Network;
using Microsoft.Azure.Management.Network.Models;
using Microsoft.Azure.Management.ResourceManager.Models;
using System.Linq;

namespace Microsoft.Azure.Commands.Common.Strategies.Network
{
Expand All @@ -16,7 +17,19 @@ public static class NetworkSecurityGroupStrategy
p.ResourceGroupName, p.Name, p.Model, p.CancellationToken));

public static ResourceConfig<NetworkSecurityGroup> CreateNetworkSecurityGroupConfig(
this ResourceConfig<ResourceGroup> resourceGroup, string name)
=> Strategy.CreateConfig(resourceGroup, name);
this ResourceConfig<ResourceGroup> resourceGroup, string name, int[] openPorts)
=> Strategy.CreateConfig(
resourceGroup,
name,
_ => new NetworkSecurityGroup
{
SecurityRules = new SecurityRule[]
{
new SecurityRule
{
DestinationPortRanges = openPorts.Select(v => v.ToString()).ToList()
}
}
});
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,20 @@ public static class PublicIPAddressStrategy
p.ResourceGroupName, p.Name, p.Model, p.CancellationToken));

public static ResourceConfig<PublicIPAddress> CreatePublicIPAddressConfig(
this ResourceConfig<ResourceGroup> resourceGroup, string name)
=> Strategy.CreateConfig(resourceGroup, name);
this ResourceConfig<ResourceGroup> resourceGroup,
string name,
string domainNameLabel,
string allocationMethod)
=> Strategy.CreateConfig(
resourceGroup,
name,
_ => new PublicIPAddress
{
PublicIPAllocationMethod = allocationMethod,
DnsSettings = new PublicIPAddressDnsSettings
{
DomainNameLabel = domainNameLabel,
}
});
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -72,6 +72,7 @@ public class NewAzureVMCommand : VirtualMachineBaseCmdlet
ParameterSetName = StrategyParameterSet,
Mandatory = false)]
[ValidateNotNullOrEmpty]
[LocationCompleter]
public string Location { get; set; }

[Alias("VMProfile")]
Expand Down Expand Up @@ -114,20 +115,42 @@ public class NewAzureVMCommand : VirtualMachineBaseCmdlet
[Parameter(
ParameterSetName = StrategyParameterSet,
Mandatory = true)]
[ValidateNotNullOrEmpty]
public string Name { get; set; }

[Parameter(
ParameterSetName = StrategyParameterSet,
Mandatory = false)]
[Parameter(ParameterSetName = StrategyParameterSet, Mandatory = true)]
public PSCredential Credential { get; set; }

[Parameter(ParameterSetName = StrategyParameterSet, Mandatory = false)]
public string VirtualNetworkName { get; set; }

[Parameter(ParameterSetName = StrategyParameterSet, Mandatory = false)]
public string AddressPrefix { get; set; } = "192.168.0.0/16";

[Parameter(
ParameterSetName = StrategyParameterSet,
Mandatory = false)]
[Parameter(ParameterSetName = StrategyParameterSet, Mandatory = false)]
public string SubnetName { get; set; }

[Parameter(ParameterSetName = StrategyParameterSet, Mandatory = false)]
public string SubnetAddressPrefix { get; set; } = "192.168.1.0/24";

[Parameter(ParameterSetName = StrategyParameterSet, Mandatory = true)]
public PSCredential Credential { get; set; }
[Parameter(ParameterSetName = StrategyParameterSet, Mandatory = false)]
public string PublicIpAddressName { get; set; }

[Parameter(ParameterSetName = StrategyParameterSet, Mandatory = false)]
public string DomainNameLabel { get; set; }

[Parameter(ParameterSetName = StrategyParameterSet, Mandatory = false)]
[ValidateSet("Static", "Dynamic")]
public string AllocationMethod { get; set; } = "Static";

[Parameter(ParameterSetName = StrategyParameterSet, Mandatory = false)]
public string SecurityGroupName { get; set; }

[Parameter(ParameterSetName = StrategyParameterSet, Mandatory = false)]
public int[] OpenPorts { get; set; }

[Parameter(ParameterSetName = StrategyParameterSet, Mandatory = false)]
public string ImageName { get; set; } = "Win2016Datacenter";

public override void ExecuteCmdlet()
{
Expand Down Expand Up @@ -162,16 +185,31 @@ public T GetClient<T>()

public void StrategyExecuteCmdlet()
{
if (ResourceGroupName == null)
{
ResourceGroupName = Name;
}
ResourceGroupName = ResourceGroupName ?? Name;
VirtualNetworkName = VirtualNetworkName ?? Name;
SubnetName = SubnetName ?? Name;
PublicIpAddressName = PublicIpAddressName ?? Name;
DomainNameLabel = DomainNameLabel ?? (Name + ResourceGroupName);
SecurityGroupName = SecurityGroupName ?? Name;

// get image
var image = Images
.Instance
.Select(osAndMap =>
new { OsType = osAndMap.Key, Image = osAndMap.Value.GetOrNull(ImageName) })
.First(osAndImage => osAndImage.Image != null);

var resourceGroup = ResourceGroupStrategy.CreateResourceGroupConfig(ResourceGroupName);
var virtualNetwork = resourceGroup.CreateVirtualNetworkConfig(Name, AddressPrefix);
var subnet = virtualNetwork.CreateSubnet(Name, SubnetAddressPrefix);
var publicIpAddress = resourceGroup.CreatePublicIPAddressConfig(Name);
var networkSecurityGroup = resourceGroup.CreateNetworkSecurityGroupConfig(Name);
var virtualNetwork = resourceGroup.CreateVirtualNetworkConfig(
name: VirtualNetworkName, addressPrefix: AddressPrefix);
var subnet = virtualNetwork.CreateSubnet(SubnetName, SubnetAddressPrefix);
var publicIpAddress = resourceGroup.CreatePublicIPAddressConfig(
name: PublicIpAddressName,
domainNameLabel: DomainNameLabel,
allocationMethod: AllocationMethod);
var networkSecurityGroup = resourceGroup.CreateNetworkSecurityGroupConfig(
name: SecurityGroupName,
openPorts: OpenPorts);
var networkInterface = resourceGroup.CreateNetworkInterfaceConfig(
Name, subnet, publicIpAddress, networkSecurityGroup);
var virtualMachine = resourceGroup.CreateVirtualMachineConfig(
Expand Down

0 comments on commit 03392cf

Please sign in to comment.