前面通过Json的Template在Azure上创建了Cisco的CSR路由器。但那个Json的template只支持1块网卡。如果需要多网卡的Cisco CSR路由器,可以改上篇文章中提到的Json Template文件,也可以用Powershell的脚本创建。
本文将介绍如何用Powershell创建多Interface的Cisco CSR路由器。
一、确定Cisco CSR Image的位置
和上篇文章相同,Cisco CSR Image的链接如下,我把这个文件public出来了,大家可以直接下载:
https://ciscorouter.blob.core.chinacloudapi.cn/image/CSR_3_16_4aS_CCO.vhd
二、编写Powershell脚本,创建2网卡的Cisco CSR路由器
function
new-ciscocsr{
param(
#The VM resource group
[Parameter(Mandatory=$true)]
[String]$rgname,
#The VM name
[Parameter(Mandatory=$true)]
[String]$vmname,
#The High Avalibility Set name
[Parameter(Mandatory=$true)]
[String]$hasetname,
#The new VM IP name
[Parameter(Mandatory=$true)]
[String]$vmpipname,
#The Vnet Name
[Parameter(Mandatory=$true)]
[String]$vnetname,
#The Subnet1 Name
[Parameter(Mandatory=$true)]
[String]$subnetname1,
#The Subnet2 Name
[Parameter(Mandatory=$true)]
[String]$subnetname2,
#The new VM size
[Parameter(Mandatory=$true)]
[String]$vmsize,
#The new user
[Parameter(Mandatory=$true)]
[String]$newuser,
#The new password
[Parameter(Mandatory=$true)]
[String]$newpwd,
#The Image URL
[Parameter(Mandatory=$true)]
[String]$ImageURL
)
#Get a random text as the random text
$hash
=
$null
for ($i
=
0; $i
-le
4; $i++){
$j
= (97..122) |
Get-Random
-Count 1
|
% {[char]$_}
$hash
=
$hash
+
$j
}
for ($i
=
0; $i
-le
4; $i++){
$j
= (48..57) |
Get-Random
-Count 1
|
% {[char]$_}
$hash
=
$hash
+
$j
}
#check the Resource Group, if not exist, create
$rgs
=
Get-AzureRmResourceGroup
-Location
"China East"
$rgrslt
=
$false
foreach ($rg
in
$rgs){if($rg.ResourceGroupName -eq $rgname){$rgrslt
=
$true;break}}
if(-not
$rgrslt) {$rg
=
New-AzureRmResourceGroup
-Name
$rgname
-Location
"China East"}
#check the High Avalibility Set, if not exist, create
foreach ($rgh
in
$rgs){
$haset
=
Get-AzureRmAvailabilitySet
-ResourceGroupName
$rgh.ResourceGroupName -Name $hasetname
-ErrorAction
Ignore;
if($haset.name -match $hasetname){
if($haset.ResourceGroupName -match $rgname){break;}
else{write-host
"Please change another haset name";exit;}
}
}
if(-not
$haset.Name) {$haset
=
new-AzureRmAvailabilitySet
-ResourceGroupName
$rgname
-Name
$hasetname
-Location
$rg.Location}
#check the Vnet, if not exist, create
$vnets
=
Get-AzureRmVirtualNetwork
$vnetrslt
=
$false
foreach ($vnet
in
$vnets){if($vnet.Name -eq $vnetname){$vnetrslt
=
$true;break}}
if(-not
$vnetrslt) {
$vnet
=
New-AzureRmVirtualNetwork
-Name
$vnetname
-AddressPrefix
172.16.0.0/16
-ResourceGroupName
$rgname
-Location
$rg.Location;
$subnet1
=
add-AzureRmVirtualNetworkSubnetConfig
-Name
$subnetname1
-AddressPrefix
172.16.1.0/24
-VirtualNetwork
$vnet;
$subnet2
=
add-AzureRmVirtualNetworkSubnetConfig
-Name
$subnetname2
-AddressPrefix
172.16.2.0/24
-VirtualNetwork
$vnet;
$vnet
=
Set-AzureRmVirtualNetwork
-VirtualNetwork
$vnet
}
#check the PIP address, if not exist, create
$vmpipname01
=
$vmpipname
+
"01"
$vmpipname02
=
$vmpipname
+
"02"
$pip01rslt
=
Test-AzureRmDnsAvailability
-DomainNameLabel
$vmpipname01
-Location
$rg.location
$pip02rslt
=
Test-AzureRmDnsAvailability
-DomainNameLabel
$vmpipname01
-Location
$rg.location
if(-not
$pip01rslt){$vmpipname01
=
$hash
+
$vmpipname01}
$pip01
=
New-AzureRmPublicIpAddress
-Name
$vmpipname01
-AllocationMethod
Dynamic
-DomainNameLabel
$vmpipname01
-ResourceGroupName
$rgname
-Location
$rg.Location
if(-not
$pip02rslt){$vmpipname02
=
$hash
+
$vmpipname02}
$pip02
=
New-AzureRmPublicIpAddress
-Name
$vmpipname02
-AllocationMethod
Dynamic
-DomainNameLabel
$vmpipname02
-ResourceGroupName
$rgname
-Location
$rg.Location
#check the NIC, if not exist, create
$nics
=
Get-AzureRmNetworkInterface
$nic01rslt
=
$false
$nic02rslt
=
$false
$nic01name
=
$vmname
+
"01"
$nic02name
=
$vmname
+
"02"
foreach($nic
in
$nics){if($nic.name -eq $nic01name){$nic01rslt
=
$true;break}}
if($nic01rslt){$nic01name
=
$hash+$nic01name}else{$nic01name = $nic01name}
$nic01
=
New-AzureRmNetworkInterface
-Name
$nic01name
-ResourceGroupName
$rgname
-Location
$rg.Location -SubnetId $vnet.Subnets[0].Id -PublicIpAddressId
$pip01.Id
foreach($nic
in
$nics){if($nic.name -eq $nic02name){$nic02rslt
=
$true;break}}
if($nic02rslt){$nic02name
=
$hash+$nic02name}else{$nic02name = $nic02name}
$nic02
=
New-AzureRmNetworkInterface
-Name
$nic02name
-ResourceGroupName
$rgname
-Location
$rg.Location -SubnetId $vnet.Subnets[1].Id -PublicIpAddressId
$pip02.Id
#user login information
$pwd=ConvertTo-SecureString
$newpwd
-AsPlainText
-Force
$newvmcred=New-Object
System.Management.Automation.PSCredential($newuser,$pwd)
#OSDiskName
$vmosname
=
$vmname+$hash+"osdisk"
#OSDisk storage url
$urls
=
$ImageURL.Split(‘/‘)
$saedpnt=$urls[2].Split(‘.‘)
$saname
=
$saedpnt[0]
$sa
=
Get-AzureRmStorageAccount
-ResourceGroupName
$rgname
-Name
$saname
$osDiskUrl
=
‘{0}vhds/{1}-{2}.vhd‘
-f
$sa.PrimaryEndpoints.Blob.ToString(),
"vm",$vmosname
#create the VM
$vm
=
New-AzureRmVMConfig
-VMName
$vmname
-VMSize
$vmsize
-AvailabilitySetId
$haset.Id
$vm
=
Set-AzureRmVMOperatingSystem
-VM
$vm
-Linux
-ComputerName
$vmname
-Credential
$newvmcred
$vm
=
Add-AzureRmVMNetworkInterface
-VM
$vm
-Primary
-Id
$nic01.Id
$vm
=
Add-AzureRmVMNetworkInterface
-VM
$vm
-Id
$nic02.Id
$vm
=
Set-AzureRmVMOSDisk
-VM
$vm
-Name
$vmosname
-VhdUri
$osDiskUrl
-CreateOption
FromImage
-SourceImageUri
$ImageURL
-Linux
New-AzureRmVM
-ResourceGroupName
$rgname
-Location
"China East"
-VM
$vm
}
$rgname
=
"ciscorouter"
$vmname
=
"hwcisco01"
$hasetname
=
"hwcisco01"
#Please check the haset isn‘t avalible
$vmpipname
=
"hwcisco01pip"
$vnetname
=
"hwcisco01"
$subnetname1
=
"vlan1"
$subnetname2
=
"vlan2"
$vmsize
=
"Standard_D2"
$newpwd
=
"xxxxxxxx"
$newuser
=
"hengwei"
$ImageURL
=
"https://ciscorouter.blob.core.chinacloudapi.cn/image/CSR_3_16_4aS_CCO.vhd"
new-ciscocsr
-rgname
ciscorouter
-vmname
hwcisco
-hasetname
hwcisco
-vmpipname
hwciscopip
-vnetname
hwcisco
-subnetname1
vlan1
-subnetname2
vlan2
-vmsize
Standard_D2
-newuser
hengwei
-newpwd
[email protected]
-ImageURL
https://ciscorouter.blob.core.chinacloudapi.cn/image/CSR_3_16_4aS_CCO.vhd
-Verbose
-Debug
三、登录路由器
ssh [email protected]
Connecting to 42.159.143.24:22...
Connection established.
To escape to local shell, press Ctrl+Alt+].
hwcisco#
hwcisco#conf t
Enter configuration commands, one per line. End with CNTL/Z.
hwcisco(config)#int g 2
hwcisco(config-if)#no shu
hwcisco(config-if)#ip add dhcp
hwcisco(config-if)#end
hwcisco#wr
Building configuration...
[OK]
hwcisco#term mon
*Apr 25 08:17:36.064: %DHCP-6-ADDRESS_ASSIGN: Interface GigabitEthernet2 assigned DHCP address 172.16.2.4, mask 255.255.255.0, hostname hwcisco
hwcisco#sh ip int brie
Interface IP-Address OK? Method Status Protocol
GigabitEthernet1 172.16.1.4 YES DHCP up up
GigabitEthernet2 172.16.2.4 YES DHCP up up