在Azure上通過Powershell建立多Interface的Cisco CSR路由器

衡子發表於2017-04-25

前面通過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 = "abc@12345678"
$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 abc@12345678 -ImageURL https://ciscorouter.blob.core.chinacloudapi.cn/image/CSR_3_16_4aS_CCO.vhd -Verbose -Debug

 

 

 

三、登入路由器

ssh hengwei@42.159.143.24
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

 

相關文章