在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

时间: 2024-10-11 12:53:00

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

用Json Template在Azure上创建Cisco CSR路由器

Azure的ARM模式可以通过Json的模板创建VM.本文以Cisco的CSR的image为例,介绍如何用Json的创建VM. 一.Cisco CSR的Image 首先把Cisco CSR的image复制到一个存储账户中: https://xxxx.blob.core.chinacloudapi.cn/image/CSR_3_16_4aS_CCO.vhd 创建VM的vhd文件也需要在这个存储账户中. 二.获得Json模板 在Github上找到From user image create VM的J

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

刚刚的一篇Blog采用Json Template的方式从已有的VHD创建了一台新的VM.由于Json Template封装的比较好,可以改的内容不多. 下面将介绍通过用Powershell来从已有的VHD创建一台新的VM. 由于Powershell中的各种变量.参数都是可以定义的,所以可以自己去修改.创建. 下面是具体的脚本: function vm-fromvhd{ param( #The VM resource group [Parameter(Mandatory=$true)] [Stri

在Azure上实现Linux Server故障转移

要充分利用公有云的弹性扩展和高可用, 首先要在应用系统层面支持横向扩展(scale out),这个说起来很容易,或者说对新开发的应用系统而言已经成为标配.但是对已有的.老旧的应用系统来说,这就比较困难了,不是每个应用系统都能实现/支持横向扩展的.从客户的角度来说,基本上很难接受为了把应用系统迁移到公有云上而去额外投入修改应用系统代码.虽然我们都心知肚明,本质上这是在“偿还技术债”,修改应用系统代码也是为了更好地利用公有云的优势... 对于应用系统的横向扩展而言,“状态”是最大的拦路虎,要支持横向

通过本地的SQL Manage sutudio管理windows azure上的SQL Server

通过SQL Manage sutudio管理windows azure上的SQL Server 说到windows azure上的SQL创建,我们在上一篇文章上有介绍了,那今天主要介绍什么呢,我们发现在windows azure上创建的sql数据库下没有SQL Server代理选项功能.我相信大家都用过SQL Server代理相关的功能,具体功能就不用多说了.拿我来说,因为我们有个服务的数据是写入到SQL Server上的,我们在本地通过计划人物实现对数据保留60天,然后通过web方式查询,这样

Azure VMSS ---- PowerShell创建自定义镜像的VMSS集群

前面一篇文章介绍了如何用PowerShell创建标准镜像的VMSS集群.http://www.cnblogs.com/hengwei/p/7391178.html 本文将介绍,如何用PowerShell创建自定义镜像的VMSS集群. 1 创建VM,对其进行个性化配置,比如安装httpd,增加Date Disk等,并把此VM捕获成Image 2 以这个Image创建VMSS集群 一 创建并捕获Image 这个操作在前面的文章中也介绍过: http://www.cnblogs.com/hengwei

通过Powershell远程管理Windows Azure上的虚拟机

Windows Azure上连接虚拟机想必不是件难事尤其是连接Windows操作系统简单点几下鼠标通过远程桌面RDPWindows Azure虚拟机会帮助你自动创建远程连接RDP的Profile你就能体验到公有云带来的便利.由于虚拟机外部连接都是通过端口映射连接的.当然基于区域网络目前Azure.CN中新创建的虚拟网络已经都是区域网络了当然你目前仍然可以创建基于地缘组的虚拟网络虽然并不推荐后可以创建虚拟机实例级别的公共IP地址所以你也可以跳过通过"云服务"端口映射的RDP而直接连接虚拟

在世纪互联版的Microsoft Azure上做windows虚拟机的批量部署--用powershell做部署

在Azure上我们有两种部署方法:资源管理器(ARM)和用powershell部署,也就是我们常说的,经典模型.截至2016/4/6,世纪互联版本的Azure 还没有ARM,需要用powershell做批量虚拟机部署. 如果需要批量建立VM,通过portal一台一台的加上去,无疑,是件很傻很傻的事情.这时候就要用到powershell啦. 第一步,你得先有个Microsoft powershell.顺道登陆到你的Azure 订阅,这里步骤就不详细写出了. 键入:Get-AzurePublishS

Azure VMSS ---- PowerShell创建标准镜像的VMSS集群

VMSS的创建可以采用Portal.Powershell.Azure CLI或者Template. 但目前Portal创建有很多限制,本文将介绍如何用PowerShell来创建VMSS的集群. 具体的创建过程有以下几个步骤: 1 创建Resource Group 2 创建Vnet 3 创建Public IP.LoadBalancer 4 创建VMSS 5 增加VMSS的Autoscale规则 一 创建Resource Group 具体命令如下: $loc = 'chinanorth'; $rgn

Azure PowerShell (5) 使用Azure PowerShell创建简单的Azure虚拟机和Linux虚拟机

<Windows Azure Platform 系列文章目录> 之前给大家介绍很多关于Windows Azure的内容,基本上都是通过Windows Azure Management Portal来创建的.这种创建方式虽然直观简单,但是如果IT管理员需要同时创建1000台Azure服务的话,工作的代价是非常巨大的. 其实我们可以通过Windows Azure PowerShell,通过命令行的方式来管理Windows Azure.这样在进行诸如批量创建Azure Virtual Machine