azure - 将数组值传递给变量

标签 azure virtual-machine azure-rm-template azure-bicep

我想改变传递给 Bicep 模板的数组参数的一个元素。这是参数文件的精简版本:

{
    "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentParameters.json#",
    "contentVersion": "1.0.0.0",
    "parameters": {
        "location": {
            "value": "uksouth"
        },
        "networkSecurityGroupRules": {
            "value": [
                {
                    "name": "RDP",
                    "properties": {
                        "priority": 300,
                        "protocol": "TCP",
                        "access": "Allow",
                        "direction": "Inbound",
                        "sourceAddressPrefix": "*",
                        "sourcePortRange": "*",
                        "destinationAddressPrefix": "*",
                        "destinationPortRange": "3389"
                    }
                }
            ]
        },
        "vnetName": {
            "value": "Dtldevopsagent"
        },
        "subnetName": {
            "value": "sandbox_subnet_2"
        },
        "virtualMachineName": {
            "value": "test-db"
        },
        "osDiskType": {
            "value": "Premium_LRS"
        },
        "dataDisks": {
            "value": [
                {
                    "lun": 0,
                    "createOption": "attach",
                    "caching": "ReadOnly",
                    "writeAcceleratorEnabled": false,
                    "id": null,
                    "name": "[concat(parameters('virtualMachineName'), '-_DataDisk_0')]'",
                    "storageAccountType": null,
                    "diskSizeGB": null,
                    "diskEncryptionSet": null
                },
                {
                    "lun": 1,
                    "createOption": "attach",
                    "caching": "None",
                    "writeAcceleratorEnabled": false,
                    "id": null,
                    "name": "[concat(parameters('virtualMachineName'),'-DataDisk_1')]",
                    "storageAccountType": null,
                    "diskSizeGB": null,
                    "diskEncryptionSet": null
                }
            ]
        },
        "dataDiskResources": {
           "value": [
            {
                "name": "[concat(parameters('virtualMachineName'),'-DataDisk_0')]",
                "sku": "Premium_LRS",
                "properties": {
                    "diskSizeGB": 32,
                    "creationData": {
                        "createOption": "empty"
                    }
                }
            },
            {
                "name": "[concat(parameters('virtualMachineName'),'-DataDisk_1')]",
                "sku": "Premium_LRS",
                "properties": {
                    "diskSizeGB": 32,
                    "creationData": {
                        "createOption": "empty"
                    }
                }
            }
        ]
      },
    }
}

我尝试设置的数组参数值是dataDisks.value.namedataDiskResources.value.name。我尝试使用 "[concat(parameters('virtualMachineName'), '-_DataDisk_0')]'" 来设置虚拟机磁盘的名称,但出现错误“参数磁盘的值” .名称无效。”。

有没有办法可以将这些值传递给我的 Bicep 模板文件中的变量,并且只编辑这两个参数中每个参数的“名称”值?或者有其他方法可以编辑它吗?

最佳答案

参数中,您无法连接。它将出错,并显示“参数 disk.name 的值无效。”相反,您可以在 Bicep ARMJSON ARM 中使用变量。

因此您的 ARM 模板将是以下链接:

{
    "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
    "contentVersion": "1.0.0.0",
    "parameters": {
        "location": {
            "type": "string",
            "defaultValue": "uksouth"
        },
        "networkSecurityGroupRules": {
            "type": "array",
            "defaultValue": [
                {
                    "name": "RDP",
                    "properties": {
                        "priority": 300,
                        "protocol": "TCP",
                        "access": "Allow",
                        "direction": "Inbound",
                        "sourceAddressPrefix": "*",
                        "sourcePortRange": "*",
                        "destinationAddressPrefix": "*",
                        "destinationPortRange": "3389"
                    }
                }
            ]
        },
        "vnetName": {
            "type": "string",
            "defaultValue": "Dtldevopsagent"
        },
        "subnetName": {
            "type": "string",
            "defaultValue": "sandbox_subnet_2"
        },
        "virtualMachineName": {
            "type": "string",
            "defaultValue": "test-db"
        },
        "osDiskType": {
            "type": "string",
            "defaultValue": "Premium_LRS"
        }
    },
    "variables":{
        "dataDisks": [ 
                {
                    "lun": 0,
                    "createOption": "attach",
                    "caching": "ReadOnly",
                    "writeAcceleratorEnabled": false,
                    "id": null,
                    "name": "[concat(parameters('virtualMachineName'), '-_DataDisk_0')]",
                    "storageAccountType": null,
                    "diskSizeGB": null,
                    "diskEncryptionSet": null
                },
                {
                    "lun": 1,
                    "createOption": "attach",
                    "caching": "None",
                    "writeAcceleratorEnabled": false,
                    "id": null,
                    "name": "[concat(parameters('virtualMachineName'),'-DataDisk_1')]",
                    "storageAccountType": null,
                    "diskSizeGB": null,
                    "diskEncryptionSet": null
                }
            ],
        "dataDiskResources": [
            {
                "name": "[concat(parameters('virtualMachineName'),'-DataDisk_0')]",
                "sku": "Premium_LRS",
                "properties": {
                    "diskSizeGB": 32,
                    "creationData": {
                        "createOption": "empty"
                    }
                }
            },
            {
                "name": "[concat(parameters('virtualMachineName'),'-DataDisk_1')]",
                "sku": "Premium_LRS",
                "properties": {
                    "diskSizeGB": 32,
                    "creationData": {
                        "createOption": "empty"
                    }
                }
            }
        ]
    },
    "resources":[],
    "outputs": {
        "DatadiskName": {
          "value": "[variables('dataDisks')[0].name]",
          "type": "string"
        },
        "DatadiskResourceName": {
          "value": "[variables('dataDiskResources')[0].name]",
          "type": "string"
        }
    }
}

输出:

enter image description here

您可以引用Variables in Bicep - Azure Resource Manager | Microsoft Docs & Variables in templates - Azure Resource Manager | Microsoft Docs了解更多信息。

关于azure - 将数组值传递给变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70851828/

相关文章:

functional-programming - 在哪里可以获得 Erlang BEAM VM 的最新规范?

azure - 部署模板验证失败 参数文件中的模板参数 'scriptUrldsc' 无效,原始参数中不存在

从 Azure DevOps 部署新的 ARM 后删除了 Azure Function 代码

node.js - docker nginx 负载平衡不适用于 Azure

windows - virtualbox 持续安装错误

iis - 在 Windows Azure 虚拟机中托管 MVC Web 应用程序

使用 ARM 模板启用自动配置的 Azure 安全中心不起作用

azure - azure staging 和生产环境的主要区别是什么,特别是对于启动任务?

azure - 在哪里可以查看 Azure AppInsights 中的跟踪和事件?

reactjs - 如何使用 Visual Studio Code 的发布配置文件在 azure 上部署 React 应用程序