Skip to content

Commit 03392cf

Browse files
Get Image.
1 parent 710c963 commit 03392cf

File tree

6 files changed

+234
-20
lines changed

6 files changed

+234
-20
lines changed

src/ResourceManager/Common/Commands.Common.Strategies/Commands.Common.Strategies.csproj

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,8 @@
6767
<Reference Include="System.Xml" />
6868
</ItemGroup>
6969
<ItemGroup>
70+
<Compile Include="Compute\Image.cs" />
71+
<Compile Include="Compute\Images.cs" />
7072
<Compile Include="IResourceConfig.cs" />
7173
<Compile Include="IResourceConfigVisitor.cs" />
7274
<Compile Include="StateOperationContext.cs" />
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
namespace Microsoft.Azure.Commands.Common.Strategies.Compute
2+
{
3+
public sealed class Image
4+
{
5+
public string publisher;
6+
7+
public string offer;
8+
9+
public string sku;
10+
11+
public string version;
12+
}
13+
}
Lines changed: 135 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,135 @@
1+
using System.Collections.Generic;
2+
3+
namespace Microsoft.Azure.Commands.Common.Strategies.Compute
4+
{
5+
public static class Images
6+
{
7+
public static Dictionary<string, Dictionary<string, Image>> Instance { get; } =
8+
new Dictionary<string, Dictionary<string, Image>>
9+
{
10+
{
11+
"Linux",
12+
new Dictionary<string, Image>
13+
{
14+
{
15+
"CentOS",
16+
new Image
17+
{
18+
publisher = "OpenLogic",
19+
offer = "CentOS",
20+
sku = "7.3",
21+
version = "latest",
22+
}
23+
},
24+
{
25+
"CoreOS",
26+
new Image
27+
{
28+
publisher = "CoreOS",
29+
offer = "CoreOS",
30+
sku = "Stable",
31+
version = "latest",
32+
33+
}
34+
},
35+
{
36+
"Debian",
37+
new Image
38+
{
39+
publisher = "credativ",
40+
offer = "Debian",
41+
sku = "8",
42+
version = "latest",
43+
}
44+
},
45+
{
46+
"openSUSE-Leap",
47+
new Image
48+
{
49+
publisher = "SUSE",
50+
offer = "openSUSE-Leap",
51+
sku = "42.2",
52+
version = "latest",
53+
}
54+
},
55+
{
56+
"RHEL",
57+
new Image
58+
{
59+
publisher = "RedHat",
60+
offer = "RHEL",
61+
sku = "7.3",
62+
version = "latest"
63+
}
64+
},
65+
{
66+
"SLES",
67+
new Image
68+
{
69+
publisher = "SUSE",
70+
offer = "SLES",
71+
sku = "12-SP2",
72+
version = "latest",
73+
}
74+
},
75+
{
76+
"UbuntuLTS",
77+
new Image
78+
{
79+
publisher = "Canonical",
80+
offer = "UbuntuServer",
81+
sku = "16.04-LTS",
82+
version = "latest",
83+
}
84+
}
85+
}
86+
},
87+
{
88+
"Windows",
89+
new Dictionary<string, Image>
90+
{
91+
{
92+
"Win2016Datacenter",
93+
new Image
94+
{
95+
publisher = "MicrosoftWindowsServer",
96+
offer = "WindowsServer",
97+
sku = "2016-Datacenter",
98+
version = "latest",
99+
}
100+
},
101+
{
102+
"Win2012R2Datacenter",
103+
new Image
104+
{
105+
publisher = "MicrosoftWindowsServer",
106+
offer = "WindowsServer",
107+
sku = "2012-R2-Datacenter",
108+
version = "latest",
109+
}
110+
},
111+
{
112+
"Win2012Datacenter",
113+
new Image
114+
{
115+
publisher = "MicrosoftWindowsServer",
116+
offer = "WindowsServer",
117+
sku = "2012-Datacenter",
118+
version = "latest",
119+
}
120+
},
121+
{
122+
"Win2008R2SP1",
123+
new Image
124+
{
125+
publisher = "MicrosoftWindowsServer",
126+
offer = "WindowsServer",
127+
sku = "2008-R2-SP1",
128+
version = "latest",
129+
}
130+
}
131+
}
132+
}
133+
};
134+
}
135+
}

src/ResourceManager/Common/Commands.Common.Strategies/Network/NetworkSecurityGroupPolicy.cs

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
using Microsoft.Azure.Management.Network;
22
using Microsoft.Azure.Management.Network.Models;
33
using Microsoft.Azure.Management.ResourceManager.Models;
4+
using System.Linq;
45

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

1819
public static ResourceConfig<NetworkSecurityGroup> CreateNetworkSecurityGroupConfig(
19-
this ResourceConfig<ResourceGroup> resourceGroup, string name)
20-
=> Strategy.CreateConfig(resourceGroup, name);
20+
this ResourceConfig<ResourceGroup> resourceGroup, string name, int[] openPorts)
21+
=> Strategy.CreateConfig(
22+
resourceGroup,
23+
name,
24+
_ => new NetworkSecurityGroup
25+
{
26+
SecurityRules = new SecurityRule[]
27+
{
28+
new SecurityRule
29+
{
30+
DestinationPortRanges = openPorts.Select(v => v.ToString()).ToList()
31+
}
32+
}
33+
});
2134
}
2235
}

src/ResourceManager/Common/Commands.Common.Strategies/Network/PublicIPAddressStrategy.cs

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,20 @@ public static class PublicIPAddressStrategy
1616
p.ResourceGroupName, p.Name, p.Model, p.CancellationToken));
1717

1818
public static ResourceConfig<PublicIPAddress> CreatePublicIPAddressConfig(
19-
this ResourceConfig<ResourceGroup> resourceGroup, string name)
20-
=> Strategy.CreateConfig(resourceGroup, name);
19+
this ResourceConfig<ResourceGroup> resourceGroup,
20+
string name,
21+
string domainNameLabel,
22+
string allocationMethod)
23+
=> Strategy.CreateConfig(
24+
resourceGroup,
25+
name,
26+
_ => new PublicIPAddress
27+
{
28+
PublicIPAllocationMethod = allocationMethod,
29+
DnsSettings = new PublicIPAddressDnsSettings
30+
{
31+
DomainNameLabel = domainNameLabel,
32+
}
33+
});
2134
}
2235
}

src/ResourceManager/Compute/Commands.Compute/VirtualMachine/Operation/NewAzureVMCommand.cs

Lines changed: 54 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,7 @@ public class NewAzureVMCommand : VirtualMachineBaseCmdlet
7272
ParameterSetName = StrategyParameterSet,
7373
Mandatory = false)]
7474
[ValidateNotNullOrEmpty]
75+
[LocationCompleter]
7576
public string Location { get; set; }
7677

7778
[Alias("VMProfile")]
@@ -114,20 +115,42 @@ public class NewAzureVMCommand : VirtualMachineBaseCmdlet
114115
[Parameter(
115116
ParameterSetName = StrategyParameterSet,
116117
Mandatory = true)]
118+
[ValidateNotNullOrEmpty]
117119
public string Name { get; set; }
118120

119-
[Parameter(
120-
ParameterSetName = StrategyParameterSet,
121-
Mandatory = false)]
121+
[Parameter(ParameterSetName = StrategyParameterSet, Mandatory = true)]
122+
public PSCredential Credential { get; set; }
123+
124+
[Parameter(ParameterSetName = StrategyParameterSet, Mandatory = false)]
125+
public string VirtualNetworkName { get; set; }
126+
127+
[Parameter(ParameterSetName = StrategyParameterSet, Mandatory = false)]
122128
public string AddressPrefix { get; set; } = "192.168.0.0/16";
123129

124-
[Parameter(
125-
ParameterSetName = StrategyParameterSet,
126-
Mandatory = false)]
130+
[Parameter(ParameterSetName = StrategyParameterSet, Mandatory = false)]
131+
public string SubnetName { get; set; }
132+
133+
[Parameter(ParameterSetName = StrategyParameterSet, Mandatory = false)]
127134
public string SubnetAddressPrefix { get; set; } = "192.168.1.0/24";
128135

129-
[Parameter(ParameterSetName = StrategyParameterSet, Mandatory = true)]
130-
public PSCredential Credential { get; set; }
136+
[Parameter(ParameterSetName = StrategyParameterSet, Mandatory = false)]
137+
public string PublicIpAddressName { get; set; }
138+
139+
[Parameter(ParameterSetName = StrategyParameterSet, Mandatory = false)]
140+
public string DomainNameLabel { get; set; }
141+
142+
[Parameter(ParameterSetName = StrategyParameterSet, Mandatory = false)]
143+
[ValidateSet("Static", "Dynamic")]
144+
public string AllocationMethod { get; set; } = "Static";
145+
146+
[Parameter(ParameterSetName = StrategyParameterSet, Mandatory = false)]
147+
public string SecurityGroupName { get; set; }
148+
149+
[Parameter(ParameterSetName = StrategyParameterSet, Mandatory = false)]
150+
public int[] OpenPorts { get; set; }
151+
152+
[Parameter(ParameterSetName = StrategyParameterSet, Mandatory = false)]
153+
public string ImageName { get; set; } = "Win2016Datacenter";
131154

132155
public override void ExecuteCmdlet()
133156
{
@@ -162,16 +185,31 @@ public T GetClient<T>()
162185

163186
public void StrategyExecuteCmdlet()
164187
{
165-
if (ResourceGroupName == null)
166-
{
167-
ResourceGroupName = Name;
168-
}
188+
ResourceGroupName = ResourceGroupName ?? Name;
189+
VirtualNetworkName = VirtualNetworkName ?? Name;
190+
SubnetName = SubnetName ?? Name;
191+
PublicIpAddressName = PublicIpAddressName ?? Name;
192+
DomainNameLabel = DomainNameLabel ?? (Name + ResourceGroupName);
193+
SecurityGroupName = SecurityGroupName ?? Name;
194+
195+
// get image
196+
var image = Images
197+
.Instance
198+
.Select(osAndMap =>
199+
new { OsType = osAndMap.Key, Image = osAndMap.Value.GetOrNull(ImageName) })
200+
.First(osAndImage => osAndImage.Image != null);
169201

170202
var resourceGroup = ResourceGroupStrategy.CreateResourceGroupConfig(ResourceGroupName);
171-
var virtualNetwork = resourceGroup.CreateVirtualNetworkConfig(Name, AddressPrefix);
172-
var subnet = virtualNetwork.CreateSubnet(Name, SubnetAddressPrefix);
173-
var publicIpAddress = resourceGroup.CreatePublicIPAddressConfig(Name);
174-
var networkSecurityGroup = resourceGroup.CreateNetworkSecurityGroupConfig(Name);
203+
var virtualNetwork = resourceGroup.CreateVirtualNetworkConfig(
204+
name: VirtualNetworkName, addressPrefix: AddressPrefix);
205+
var subnet = virtualNetwork.CreateSubnet(SubnetName, SubnetAddressPrefix);
206+
var publicIpAddress = resourceGroup.CreatePublicIPAddressConfig(
207+
name: PublicIpAddressName,
208+
domainNameLabel: DomainNameLabel,
209+
allocationMethod: AllocationMethod);
210+
var networkSecurityGroup = resourceGroup.CreateNetworkSecurityGroupConfig(
211+
name: SecurityGroupName,
212+
openPorts: OpenPorts);
175213
var networkInterface = resourceGroup.CreateNetworkInterfaceConfig(
176214
Name, subnet, publicIpAddress, networkSecurityGroup);
177215
var virtualMachine = resourceGroup.CreateVirtualMachineConfig(

0 commit comments

Comments
 (0)