在Azure上通过Powershell创建多Interface的Cisco CSR路由器

Posted hengzi

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在Azure上通过Powershell创建多Interface的Cisco CSR路由器相关的知识,希望对你有一定的参考价值。

前面通过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

以上是关于在Azure上通过Powershell创建多Interface的Cisco CSR路由器的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 PowerShell Runbook 在 azure blob 存储上创建文本文件?

Azure PowerShell批量创建Azure虚拟机

Azure上采用Powershell从已有的VHD创建VM

使用 Azure Devops 任务或 PowerShell 创建/更新 Azure WebApp 的路径映射

Windows Azure PowerShell之管理虚拟机

如何使用PowerShell 收集Azure VM Image列表