Skip to content

Commit 72f2658

Browse files
Additional parameters
1 parent 339357d commit 72f2658

File tree

2 files changed

+56
-49
lines changed

2 files changed

+56
-49
lines changed

experiments/Compute.Experiments/AzureRM.Compute.Experiments.Tests.ps1

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ New-AzVm -Name MyVM -Credential $vmCredential -WhatIf
2020
# $vm = New-AzVm
2121
# $vm = New-AzVm -Credential $vmCredential
2222
$vm = New-AzVm -Name MyVMA -Credential $vmCredential
23+
# $vm = New-AzVm -Name MyVMA
2324

2425
$vm
2526

experiments/Compute.Experiments/AzureRM.Compute.Experiments.psm1

Lines changed: 55 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -5,27 +5,35 @@ function New-AzVm {
55
[CmdletBinding(SupportsShouldProcess = $true)]
66
param (
77
[Parameter(Mandatory=$true, Position=0)][string] $Name = "VM",
8+
[Parameter(Mandatory=$true)][PSCredential] $Credential,
89

910
[Parameter()][string] $ResourceGroupName,
1011
[Parameter()][string] $Location,
1112

1213
[Parameter()][string] $VirtualNetworkName,
14+
[Parameter()][string] $AddressPrefix = "192.168.0.0/16",
15+
1316
[Parameter()][string] $SubnetName,
17+
[Parameter()][string] $SubnetAddressPrefix = "192.168.1.0/24",
18+
1419
[Parameter()][string] $PublicIpAddressName,
20+
[Parameter()][string] $DomainNameLabel = $Name,
21+
[Parameter()][string] $AllocationMethod = "Static",
22+
1523
[Parameter()][string] $SecurityGroupName,
24+
[Parameter()][int[]] $OpenPorts = @(3389, 5985),
1625

17-
[Parameter()][PSCredential] $Credential,
18-
[Parameter()][string] $ImageName = "Win2012R2Datacenter",
26+
[Parameter()][string] $ImageName = "Win2016Datacenter",
1927
[Parameter()][string] $Size = "Standard_DS1_v2"
2028
)
2129

2230
PROCESS {
2331
$rgi = [ResourceGroup]::new($ResourceGroupName);
2432

25-
$vni = [VirtualNetwork]::new($VirtualNetworkName);
26-
$subnet = [Subnet]::new($SubnetName, $vni);
27-
$piai = [PublicIpAddress]::new($PublicIpAddressName);
28-
$sgi = [SecurityGroup]::new($SecurityGroupName);
33+
$vni = [VirtualNetwork]::new($VirtualNetworkName, $AddressPrefix);
34+
$subnet = [Subnet]::new($SubnetName, $vni, $SubnetAddressPrefix);
35+
$piai = [PublicIpAddress]::new($PublicIpAddressName, $DomainNameLabel, $AllocationMethod);
36+
$sgi = [SecurityGroup]::new($SecurityGroupName, $OpenPorts);
2937

3038
# we don't allow to reuse NetworkInterface so $name is $null.
3139
$nii = [NetworkInterface]::new(
@@ -144,11 +152,8 @@ class AzureObject {
144152
if ($this.Name) {
145153
return $this.GetInfo();
146154
} else {
147-
Write-Host "{"
148-
Write-Host $this
149155
$result = $this.Create($p);
150156
$this.Name = $p.Name;
151-
Write-Host "}"
152157
return $result;
153158
}
154159
}
@@ -176,37 +181,37 @@ class Resource1: AzureObject {
176181
}
177182

178183
class VirtualNetwork: Resource1 {
179-
VirtualNetwork([string] $name): base($name) {
184+
[string] $AddressPrefix;
185+
186+
VirtualNetwork([string] $name, [string] $addressPrefix): base($name) {
187+
$this.AddressPrefix = $addressPrefix;
180188
}
181189

182190
[object] GetInfo() {
183191
return Get-AzureRmVirtualNetwork -Name $this.Name;
184192
}
185193

186194
[object] Create([CreateParams] $p) {
187-
<#
188-
$subnetConfig = New-AzureRmVirtualNetworkSubnetConfig `
189-
-Name "Subnet" `
190-
-AddressPrefix "192.168.1.0/24"
191-
return New-AzureRmVirtualNetwork `
192-
-ResourceGroupName $p.ResourceGroupName `
193-
-Location $p.Location `
194-
-Name $p.Name `
195-
-AddressPrefix "192.168.0.0/16" `
196-
-Subnet $subnetConfig `
197-
-WarningAction SilentlyContinue
198-
#>
199195
return New-AzureRmVirtualNetwork `
200196
-ResourceGroupName $p.ResourceGroupName `
201197
-Location $p.Location `
202198
-Name $p.Name `
203-
-AddressPrefix "192.168.0.0/16" `
199+
-AddressPrefix $this.AddressPrefix `
204200
-WarningAction SilentlyContinue;
205201
}
206202
}
207203

208204
class PublicIpAddress: Resource1 {
209-
PublicIpAddress([string] $name): base($name) {
205+
[string] $DomainNameLabel;
206+
[string] $AllocationMethod;
207+
208+
PublicIpAddress(
209+
[string] $name,
210+
[string] $domainNameLabel,
211+
[string] $allocationMethod
212+
): base($name) {
213+
$this.DomainNameLabel = $domainNameLabel;
214+
$this.AllocationMethod = $allocationMethod;
210215
}
211216

212217
[object] GetInfo() {
@@ -218,66 +223,70 @@ class PublicIpAddress: Resource1 {
218223
-ResourceGroupName $p.ResourceGroupName `
219224
-Location $p.Location `
220225
-Name $p.Name `
226+
-DomainNameLabel $this.DnsLabel `
221227
-AllocationMethod Static `
222228
-WarningAction SilentlyContinue
223229
}
224230
}
225231

226232
class SecurityGroup: Resource1 {
227-
SecurityGroup([string] $name): base($name) {
233+
[int[]] $OpenPorts;
234+
235+
SecurityGroup([string] $name, [int[]] $OpenPorts): base($name) {
236+
$this.OpenPorts = $OpenPorts;
228237
}
229238

230239
[object] GetInfo() {
231240
return Get-AzureRMSecurityGroup -Name $this.Name
232241
}
233242

234243
[object] Create([CreateParams] $p) {
235-
$securityRuleConfig = New-AzureRmNetworkSecurityRuleConfig `
236-
-Name $p.Name `
237-
-Protocol "Tcp" `
238-
-Priority 1000 `
239-
-Access "Allow" `
240-
-Direction "Inbound" `
241-
-SourcePortRange "*" `
242-
-SourceAddressPrefix "*" `
243-
-DestinationPortRange 3389 `
244-
-DestinationAddressPrefix "*"
244+
$rules = New-Object "System.Collections.Generic.List[Microsoft.Azure.Commands.Network.Models.PSSecurityRule]";
245+
foreach ($port in $this.OpenPorts) {
246+
$name = $p.Name + $port;
247+
$securityRuleConfig = New-AzureRmNetworkSecurityRuleConfig `
248+
-Name $name `
249+
-Protocol "Tcp" `
250+
-Priority 1000 `
251+
-Access "Allow" `
252+
-Direction "Inbound" `
253+
-SourcePortRange "*" `
254+
-SourceAddressPrefix "*" `
255+
-DestinationPortRange $port `
256+
-DestinationAddressPrefix "*";
257+
}
245258
return New-AzureRmNetworkSecurityGroup `
246259
-ResourceGroupName $p.ResourceGroupName `
247260
-Location $p.Location `
248261
-Name $p.Name `
249-
-SecurityRules $securityRuleConfig `
262+
-SecurityRules $rules `
250263
-WarningAction SilentlyContinue
251264
}
252265
}
253266

254267
class Subnet: AzureObject {
255268
[VirtualNetwork] $VirtualNetwork;
269+
[string] $SubnetAddressPrefix;
256270

257-
Subnet([string] $name, [VirtualNetwork] $virtualNetwork):
271+
Subnet([string] $name, [VirtualNetwork] $virtualNetwork, [string] $subnetAddressPrefix):
258272
base($name, @($virtualNetwork)) {
259273
$this.VirtualNetwork = $virtualNetwork;
274+
$this.SubnetAddressPrefix = $subnetAddressPrefix;
260275
}
261276

262277
[object] GetInfo() {
263-
Write-Host "sn.GetInfo {"
264278
$virutalNetworkInfo = $this.VirtualNetwork.GetInfo();
265-
Write-Host "}"
266279
return $virutalNetworkInfo | Get-AzureRmVirtualNetworkSubnetConfig -Name $this.Name;
267280
}
268281

269282
[object] Create([CreateParams] $p) {
270-
Write-Host "sn.Create {"
271283
$virtualNetworkInfo = $this.VirtualNetwork.GetOrCreate($p);
272-
Set-AzureRmVirtualNetworkSubnetConfig `
284+
Add-AzureRmVirtualNetworkSubnetConfig `
273285
-VirtualNetwork $virtualNetworkInfo `
274286
-Name $p.Name `
275-
-AddressPrefix "192.168.1.0/24";
276-
Set-AzureRmVirtualNetwork -VirtualNetwork $virtualNetworkInfo
287+
-AddressPrefix $this.SubnetAddressPrefix;
288+
$virtualNetworkInfo = Set-AzureRmVirtualNetwork -VirtualNetwork $virtualNetworkInfo
277289
$result = Get-AzureRmVirtualNetworkSubnetConfig -VirtualNetwork $virtualNetworkInfo -Name $p.Name
278-
Write-Host $virtualNetworkInfo
279-
Write-Host $result
280-
Write-Host "} sn.Create"
281290
return $result;
282291
}
283292
}
@@ -305,9 +314,6 @@ class NetworkInterface: AzureObject {
305314
[object] Create([CreateParams] $p) {
306315
$publicIpAddressInfo = $this.PublicIpAddress.GetOrCreate($p);
307316
$subnetInfo = $this.Subnet.GetOrCreate($p);
308-
Write-Host "sn: {"
309-
Write-Host $subnetInfo
310-
Write-Host "} sn"
311317
$securityGroupInfo = $this.SecurityGroup.GetOrCreate($p);
312318
return New-AzureRmNetworkInterface `
313319
-ResourceGroupName $p.ResourceGroupName `

0 commit comments

Comments
 (0)