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的Json模板:

https://github.com/Azure/azure-quickstart-templates/tree/master/101-vm-from-user-image

把azuredeploy.json文件保存到本地:

https://raw.githubusercontent.com/Azure/azure-quickstart-templates/master/101-vm-from-user-image/azuredeploy.json

为d:\from_image.json文件。由于Global Azure的Disk目前已经prefer使用Management Disk了,Github上的template已经改成MD的template。

下面是采用普通存储账户的Json Template:

{
  "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "customVmName": {
      "type": "string",
      "metadata": {
        "description": "This is the name of the your VM"
      }
    },
    "userImageStorageAccountName": {
      "type": "string",
      "metadata": {
        "description": "This is the name of the your storage account"
      }
    },
    "userImageStorageAccountResourceGroupName": {
      "type": "string",
      "metadata": {
        "description": "Resource group of the existing storage account"
      }
    },
    "osDiskVhdUri": {
      "type": "string",
      "metadata": {
        "description": "Uri of the your user image"
      }
    },
    "dnsLabelPrefix": {
      "type": "string",
      "metadata": {
        "description": "DNS Label for the Public IP. Must be lowercase. It should match with the following regular expression: ^[a-z][a-z0-9-]{1,61}[a-z0-9]$ or it will raise an error."
      }
    },
    "adminUserName": {
      "type": "string",
      "metadata": {
        "description": "User Name for the Virtual Machine"
      }
    },
    "adminPassword": {
      "type": "securestring",
      "metadata": {
        "description": "Password for the Virtual Machine"
      }
    },
    "osType": {
      "type": "string",
      "allowedValues": [
        "Windows",
        "Linux"
      ],
      "metadata": {
        "description": "This is the OS that your VM will be running"
      }
    },
    "vmSize": {
      "type": "string",
      "metadata": {
        "description": "This is the size of your VM"
      }
    },
    "newOrExistingVnet": {
      "allowedValues": [ "new", "existing" ],
      "type": "string",
      "metadata": {
        "description":  "Select if this template needs a new VNet or will reference an existing VNet"
      }
    },
    "newOrExistingVnetName": {
      "type": "string",
      "defaultValue": "",
      "metadata": {
        "description": "New or Existing VNet Name"
      }
    },
    "newOrExistingSubnetName": {
      "type": "string",
      "metadata": {
        "description": "New or Existing subnet Name"
      }
    },
    "existingVnetResourceGroupName": {
      "type": "string",
      "metadata": {
        "description": "Resource group of the existing VNET"
      }
    }
  },
  "variables": {
    "publicIPAddressName": "[concat(parameters('customVmName'),'IP')]",
    "vmName": "[parameters('customVmName')]",
    "nicName": "[concat(parameters('customVmName'),'Nic')]",
    "publicIPAddressType": "Dynamic",
    "apiVersion": "2015-06-15",
    "templatelink": "[concat('https://raw.githubusercontent.com/singhkay/azure-quickstart-templates/master/101-vm-from-user-image/',parameters('newOrExistingVnet'),'vnet.json')]"
  },
  "resources": [
    {
            "apiVersion": "2015-01-01",
            "name": "vnet-template",
            "type": "Microsoft.Resources/deployments",
            "properties": {
                "mode": "incremental",
                "templateLink": {
                    "uri": "[variables('templatelink')]",
                    "contentVersion": "1.0.0.0"
                },
                "parameters": {
                    "virtualNetworkName": {
                        "value": "[parameters('newOrExistingVnetName')]"
                    },
                    "subnetName": {
                        "value": "[parameters('newOrExistingSubnetName')]"
                    },
                    "existingVnetResourceGroupName": {
                        "value": "[parameters('existingVnetResourceGroupName')]"
                    }
                }
            }
        },
    {
      "apiVersion": "[variables('apiVersion')]",
      "type": "Microsoft.Network/publicIPAddresses",
      "name": "[variables('publicIPAddressName')]",
      "location": "[resourceGroup().location]",
      "properties": {
        "publicIPAllocationMethod": "[variables('publicIPAddressType')]",
        "dnsSettings": {
          "domainNameLabel": "[parameters('dnsLabelPrefix')]"
        }
      }
    },
    {
      "apiVersion": "2016-03-30",
      "type": "Microsoft.Network/networkInterfaces",
      "name": "[variables('nicName')]",
      "location": "[resourceGroup().location]",
      "dependsOn": [
        "[concat('Microsoft.Network/publicIPAddresses/', variables('publicIPAddressName'))]",
        "Microsoft.Resources/deployments/vnet-template"
      ],
      "properties": {
        "ipConfigurations": [
          {
            "name": "ipconfig1",
            "properties": {
              "privateIPAllocationMethod": "Dynamic",
              "publicIPAddress": {
                "id": "[resourceId('Microsoft.Network/publicIPAddresses',variables('publicIPAddressName'))]"
              },
              "subnet": {
                "id": "[reference('vnet-template').outputs.subnet1Ref.value]"
              }
            }
          }
        ]
      }
    },
    {
      "apiVersion": "[variables('apiVersion')]",
      "type": "Microsoft.Compute/virtualMachines",
      "name": "[variables('vmName')]",
      "location": "[resourceGroup().location]",
      "dependsOn": [
        "[concat('Microsoft.Network/networkInterfaces/', variables('nicName'))]"
      ],
      "properties": {
        "hardwareProfile": {
          "vmSize": "[parameters('vmSize')]"
        },
        "osProfile": {
          "computerName": "[variables('vmName')]",
          "adminUsername": "[parameters('adminUsername')]",
          "adminPassword": "[parameters('adminPassword')]"
        },
        "storageProfile": {
          "osDisk": {
            "name": "[concat(variables('vmName'),'-osDisk')]",
            "osType": "[parameters('osType')]",
            "caching": "ReadWrite",
            "createOption": "FromImage",
            "image": {
              "uri": "[parameters('osDiskVhdUri')]"
            },
            "vhd": {
              "uri": "[concat(reference(resourceId(parameters('userImageStorageAccountResourceGroupName'), 'Microsoft.Storage/storageAccounts/', parameters('userImageStorageAccountName')), variables('apiVersion')).primaryEndpoints.blob, 'vhds/',variables('vmName'), uniquestring(resourceGroup().id), 'osDisk.vhd')]"
            }
          }
        },
        "networkProfile": {
          "networkInterfaces": [
            {
              "id": "[resourceId('Microsoft.Network/networkInterfaces',variables('nicName'))]"
            }
          ]
        },
        "diagnosticsProfile": {
          "bootDiagnostics": {
            "enabled": "true",
            "storageUri": "[concat(reference(resourceId(parameters('userImageStorageAccountResourceGroupName'), 'Microsoft.Storage/storageAccounts/', parameters('userImageStorageAccountName')), variables('apiVersion')).primaryEndpoints.blob)]"
          }
        }
      }
    }
  ]
}

 

三、通过模板创建Cisco CSR虚拟机

1. 登录Azure China的Portal

2. 在New中搜索template

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

如上图所示,点击Template Deployment。这里需要注意的是,目前必须是英文版本才可以使用这个功能。

3. 导入template

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

把刚刚的Json Template上传。

4. 填写相应的Parameters

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

根据实际值,填写相应的参数。需要注意的是Resource Group和Storage Account都要和image所在的Storage Account相同。

4. Legal Terms

把Legal Terms相应的内容填写完整:

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

然后点击create,创建VM。

四、登录创建的Cisco CSR router

Connecting to 42.159.203.233:22...
Connection established.
To escape to local shell, press Ctrl+Alt+].
hengweicisco#sh runn
Building configuration...
Current configuration : 1294 bytes
!
! Last configuration change at 10:21:56 UTC Mon Apr 24 2017
!
version 15.5
service timestamps debug datetime msec
service timestamps log datetime msec
no platform punt-keepalive disable-kernel-core
platform console virtual
!
hostname hengweicisco
!
boot-start-marker
boot-end-marker
!
logging persistent size 1000000 filesize 8192 immediate
!
aaa new-model
!
aaa authentication login default local
aaa authorization exec default local none
!
aaa session-id common
......

 

相关文章:

  • 2022-02-14
  • 2022-12-23
  • 2021-10-17
  • 2022-01-06
  • 2022-12-23
  • 2021-12-17
  • 2021-11-14
猜你喜欢
  • 2021-11-29
  • 2021-11-10
  • 2021-05-16
  • 2021-12-23
  • 2021-08-01
  • 2021-12-23
相关资源
相似解决方案