Azure: создание шаблонов: как извлечь defaultStorageAccount

Я пытаюсь создать собственное изображение в моем Azure DevTestLab из образа VHD, хранящегося в учетной записи хранения по умолчанию.

Я начал изменять файл в репозитории GitHub для шаблонов ARM для создания собственного образа из VHD.

Я уже создал лабораторию DevTest, и я могу запустить следующую команду Powershell, чтобы получить ее данные:

PS C:\git> $rid = Get-AzureRmResource -ResourceGroupName jgTl9-rg -ResourceType Microsoft.DevTestLab/labs -ResourceName jgTl9 -ApiVersion 2016-05-15

Это дает кучу информации. Если я хочу извлечь имя учетной записи хранения по умолчанию, я делаю следующее:

PS C:\git> $rid.properties.defaultStorageAccount

Я знаю, что это возможно. Теперь я изменил раздел переменных шаблона сборки Azure (файл JSON), чтобы он выглядел следующим образом:

"variables": {
  "resourceName": "[concat(variables('existingLabName'), '/', variables('imageName'))]",
  "resourceType": "Microsoft.DevTestLab/labs/customimages", 
  "existingLabName": "[replace(resourceGroup().name,'-rg','')]",
  "storageAccountID": "/subscriptions/xxxxxxxxxxxx/resourceGroups/jgTl9-rg/providers/Microsoft.Storage/storageAccounts/djgtl91795",
  "saidFrags": "[skip(split(variables('storageAccountID'), '/' ), add(length(split(variables('storageAccountID'), '/' )),-1) ) ]",  
  "storageAccountSuffix": "[take(variables('saidFrags'),1)[0]]",
  "existingVhdUri": "[concat('https://',variables('storageAccountSuffix'),'.blob.core.windows.net/uploads/',parameters('imageFileName'))]",
  "imageName": "JaysImage"

},

Этот код действительно работает, когда я вызываю команду New-AzureRmResourceGroupDeployment с azuredeploy.json и azuredeploy.parameters.json.

Однако вместо жесткого кодирования переменной storageAccountID я хотел бы извлечь defaultStorageAccount из среды. Я попробовал что-то вроде этого:

   "storageAccountID": "[string( resourceId(resourceGroup().name,'MicrosoftDevTestLab/labs','jgTl9').properties.defaultStorageAccount  ))",

Я попробовал несколько вариантов этого, но ничего не получалось. Какой синтаксис мне нужно использовать для извлечения той же информации, что я жестко запрограммировал для storageAccountID?

(Я не смог найти ничего в описании функций шаблона в Microsoft).

1 ответ

Пара вопросов с вашим следующим выражением

"storageAccountID": "[string( resourceId(resourceGroup().name,'MicrosoftDevTestLab/labs','jgTl9').properties.defaultStorageAccount  ))",
  1. Существует проблема синтаксиса, т.е. дополнительный ) в конце.
  2. Поставщик ресурсов MicrosoftDevTestlab/labs должно быть Microsoft.DevTestlab/labs
  3. когда resourceId используется, это не даст вам весь объект. Итак, когда вы делаете properties.defaultStorageAccount она не будет работать. Потому что он дает вам только строку вашей тестовой лаборатории разработчика и ничего больше, и на строке нет свойства defaultStorageAccount,

Теперь вам нужно reference функция как ниже

{
  "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {    
  },
  "variables": {
    "vDefaultStorageAccount": "[string(resourceId('yourResourceGroupName','Microsoft.DevTestLab/labs','yourTestLabName'))]"
  },
  "resources": [],
  "outputs": {        
    "defaultStorageAccount":{
      "value": "[reference(variables('vDefaultStorageAccount'),'2016-05-15').defaultStorageAccount]",
      "type":"string"
    }        
  }
}

В переменной vDefaultStorageAccount мы получаем идентификатор DevTestLab а потом мы используем reference функция, чтобы получить объект. Тогда вы можете сделать . чтобы получить свойства. Например, вам не нужно указывать properties.defaultStorageAccount.

Другие вопросы по тегам