zoukankan      html  css  js  c++  java
  • 在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 = "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
  • 相关阅读:
    SQL Server2008中删除重复记录
    Php环境在Windows (server 2003) 服务器部署标准 白丁简明版
    国外服务器鸟文windows,时间12小时制,如何改成24小时呢?我来告诉你
    将Capicom调用代码封装到ActiveX——解决javascript调Capicom读取数字证书信息时,IE弹出安全提示的问题
    Linq处理List数据
    C#将窗口最小化到系统托盘,并显示图标和快捷菜单
    C# 将程序添加到启动项 (写入注册表),及从启动项中删除
    C#中string[]数组和list<string>泛型的相互转换
    IIS7.5部署ASP.NET失败
    IIS 7.5版本中一些诡异问题的解决方案
  • 原文地址:https://www.cnblogs.com/hengwei/p/6762722.html
Copyright © 2011-2022 走看看