Могу ли я условно использовать функцию копирования в шаблоне ARM - PullRequest
0 голосов
/ 18 июня 2019

Наше решение развернуто в нескольких средах: Dev, Test и Prod.Я условно развертываю Виртуальные сети и другую мощную сетевую инфраструктуру для не-dev сред.У меня есть проблема с применением ограничений доступа к веб-конфигурации службы приложений, только если значение true (с использованием copyIndex).

Ниже приведено описание назначения ограничений доступа подсети для службы приложений.:

{
"$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "location": {
      "type": "string",
      "defaultValue": "ukwest"
    }
  },
  "variables": {
    "networkingRequired": true,
    "aspName": "xxxMyAppServicePlan",
    "siteName": "xxxMySite1",
    "vnetName": "superVnetName",
    "subnetNames": [
      "subnetone",
      "subnettwo",
      "subnetthree"
    ]
  },
  "resources": [
    {
      "name": "[variables('aspName')]",
      "type": "Microsoft.Web/serverfarms",
      "kind": "app",
      "apiVersion": "2018-02-01",
      "location": "[parameters('location')]",
      "properties": {},
      "sku": {
        "name": "S1",
        "capacity": 1
      }
    },
    {
      "kind": "app",
      "name": "[variables('siteName')]",
      "type": "Microsoft.Web/sites",
      "apiVersion": "2018-02-01",
      "location": "[parameters('location')]",
      "identity": {
        "type": "SystemAssigned"
      },
      "properties": {
        "serverFarmId": "[resourceId('Microsoft.Web/serverfarms', variables('aspName'))]",
        "siteConfig": {
          "clientAffinityEnabled": false,
          "httpsOnly": true,
          "alwaysOn": true,
          "virtualApplications": [
            {
              "virtualPath": "/",
              "physicalPath": "site\\wwwroot",
              "preloadEnabled": true
            }
          ],
          "copy": [
            {
              "name": "ipSecurityRestrictions",
              "count": "[length(variables('subnetNames'))]",
              "input": {
                "vnetSubnetResourceId": "[resourceId(resourceGroup().name, 'Microsoft.Network/virtualNetworks/subnets', variables('vnetName'), variables('subnetNames')[copyIndex('ipSecurityRestrictions')])]",
                "action": "Allow",
                "priority": "1",
                "name": "[variables('subnetNames')[copyIndex('ipSecurityRestrictions')]]",
                "description": "[concat(variables('subnetNames')[copyIndex('ipSecurityRestrictions')], ' subnet')]"
              }
            }
          ]
        }
      },
      "dependsOn": [
        "[variables('aspName')]"
      ]
    }
  ]
}

Итак, теперь мне нужно, чтобы она учитывала переменную 'networkRequired' и выполняла "копирование" для ipSecurityRestrictions только тогда, когда сетевое соединение является истинным.

1 Ответ

1 голос
/ 18 июня 2019

Самый простой способ сделать это - переместить копию в раздел переменных и использовать выражение для определения значения ipSecurityRestrictions «на лету».

"variables": {
    "empty": [],
    "copy": [you copy goes here]
},
...
"ipSecurityRestrictions": "[if(variables('networkingRequired'), variables('ipSecurityRestrictions'), variables('empty'))]"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...