2016-09-06 6 views
1

Я предоставляю несколько webapps в шаблоне ARM, и я считаю, что мне нужно иметь много дублированного кода для поддержки единой конфигурации для нескольких слотов развертывания , Обе зависимости и свойства должны дублироваться и поддерживаться отдельно. Я изучил использование переменной, но большая часть моей конфигурации зависит от других ресурсов и не может быть оценена при переменных переменных.Совместное использование конфигурации веб-сайта в слотах развертывания с использованием шаблона ARM

В идеале я бы хотел, чтобы все слоты ссылались на один и тот же объект «Microsoft.Web/sites/config», но я не вижу способа сделать это. Мой текущий сценарий развертывания выглядит следующим образом (хотя это было массово упрощено, я значительно больше свойств в реальности)

{ 
    "name": "[variables('siteName')]", 
    "type": "Microsoft.Web/sites", 
    "location": "[resourceGroup().location]", 
    "apiVersion": "2015-08-01", 
    "dependsOn": [ 
    "[concat('Microsoft.Web/serverfarms/', variables('serverfarm'))]", 
    "[resourceid('Microsoft.EventHub/namespaces', variables('fullEventHubNameSpace'))]" 
    ], 
    "tags": { 
    "[concat('hidden-related:', resourceGroup().id, '/providers/Microsoft.Web/serverfarms/', parameters('siteName'))]": "Resource" 
    }, 
    "properties": { 
    "name": "[variables('siteName')]", 
    "serverFarmId": "[resourceId('Microsoft.Web/serverfarms/', variables('serverfarm'))]", 
    "siteConfig": { 
     "AlwaysOn": true 
    } 
    }, 
    "resources": [ 
    { 
     "name": "appsettings", 
     "type": "config", 
     "apiVersion": "2015-08-01", 
     "dependsOn": [ 
     "[concat('Microsoft.Web/sites/', variables('siteName'))]", 
     "[concat('Microsoft.Insights/components/', variables('appInsightsSiteName'))]", 
     "[concat('Microsoft.Web/sites/', variables('otherSiteName'))]", 
     "[concat('Microsoft.DocumentDb/databaseAccounts/',variables('databaseAccountName'))]", 
     "[resourceid('Microsoft.EventHub/namespaces', variables('fullEventHubNameSpace'))]" 
     ], 
     "properties": { 
     "APPINSIGHTS_INSTRUMENTATIONKEY": "[reference(resourceId('Microsoft.Insights/components', variables('appInsightsName'))).InstrumentationKey]", 
     "KEYVAULT_PATH": "[parameters('keyVaultPath')]", 
     "KEYVAULT_SECRET": "[parameters('keyVaultSecret')]", 
     "OTHER_SITE": "[reference(concat('Microsoft.Web/sites/', variables('otherSiteName'))).hostnames[0]]", 
     "DB_KEY": "[listKeys(resourceId(concat('Microsoft.DocumentDb/databaseAccounts'),variables('databaseAccountName')),'2015-04-08').primaryMasterKey]", 
     } 
    }, 
    { 
     "apiVersion": "2015-08-01", 
     "name": "Staging", 
     "type": "slots", 
     "location": "[resourceGroup().location]", 
     "dependsOn": [ 
     "[resourceId('Microsoft.Web/Sites', variables('siteName'))]" 
     ], 
     "properties": { 
     }, 
     "resources": [ 
     { 
      "name": "appsettings", 
      "type": "config", 
      "apiVersion": "2015-08-01", 
      "dependsOn": [ 
      "[concat('Microsoft.Web/sites/', variables('siteName'))]", 
      "[concat('Microsoft.Insights/components/', variables('appInsightsName'))]", 
      "[concat('Microsoft.DocumentDb/databaseAccounts/',variables('databaseAccountName'))]", 
      "[concat('Microsoft.Web/sites/', variables('otherSiteName'))]", 
      "[resourceid('Microsoft.EventHub/namespaces', variables('fullEventHubNameSpace'))]", 
      "Staging" 
      ], 
      "properties": { 
      "APPINSIGHTS_INSTRUMENTATIONKEY": "[reference(resourceId('Microsoft.Insights/components', variables('appInsightsName'))).InstrumentationKey]", 
      "KEYVAULT_PATH": "[parameters('keyVaultPath')]", 
      "KEYVAULT_SECRET": "[parameters('keyVaultSecret')]", 
      "OTHER_SITE": "[reference(concat('Microsoft.Web/sites/', variables('otherSiteName'))).hostnames[0]]", 
      "DB_KEY": "[listKeys(resourceId(concat('Microsoft.DocumentDb/databaseAccounts'),variables('databaseAccountName')),'2015-04-08').primaryMasterKey]", 
      } 
     } 
     ] 
    } 
    ] 
}, 

Есть ли способ, чтобы сделать этот шаблон более ремонтопригоден?

ответ

1

Возможно, вы можете использовать copy в своем Шаблоне.

Переместить раздел с слотом для корневого уровня в шаблоне и добавить:

"copy": { 
    "name": "slotcopy", 
    "count": "[length(parameters('webSiteSlots'))]" 
}, 

Имя propperty shlould выглядеть следующим образом:

"name": "[concat(parameters('webSiteName'), '/', parameters('webSiteSlots')[copyIndex()].name)]", 

С этим сказать, что этот ресурс будет дочерний ресурс WebSite. Дополнительная информация об этом here.

теперь вы можете добавить параметр со сложным объектом массива шаблона:

"webSiteSlots": { 
    "type": "array", 
    "minLength": 0, 
    "defaultValue": [] 
} 

в ваших параметрах файла Теперь вы можете установить коллекцию слотов вы хотите иметь некоторые дополнительные значения:

"webSiteSlots": { 
    "value": [ 
     { 
      "name": "Staging", 
      "environment": "Production" 
     } 
    ] 
} 

использовать эти данные значения, которые вы можете сделать что-то вроде этого:

"properties": { 
    "ASPNETCORE_ENVIRONMENT": "[parameters('webSiteSlots')[copyIndex()].environment]" 
} 

Это должно привести к сокращению дублированного кода.

Привет, KIRK

+0

Не обратившие свой слот развертывания в отдельном веб-приложение? –

+0

@IainBrown Я пропустил тег имени. это даст отношения. Я отредактировал свой ответ выше. – KirKone

+0

Хорошо, я дам ему ход, спасибо –

 Смежные вопросы

  • Нет связанных вопросов^_^