Azure ARM 模板 - 条件输入参数

Azure ARM Template - conditional input parameter

简而言之:

是否可以在 parameter 中包含 condition 字段(或其他实现此功能的字段),以便仅根据另一个字段向用户询问此参数输入参数值。

即,仅当用户 selects Create New 在参数上时,才应要求输入该参数的名称。


详细信息:

我有一个参数 virtualNetworkCreateNewOrUseExisting,它将接受两个值 - Create NewUse Existing

"parameters": {
    "virtualNetworkCreateNewOrUseExisting": {
        "type": "string",
        "defaultValue": "Create New",
        "allowedValues": [
            "Create New",
            "Use Existing"
        ]
    },
    // Other parameters
}

我正在尝试根据用户的输入创建 Virtual Network。 如果用户 selects Create New,它将被创建,如果他们 select Use Existing,它将被跳过。我看到这可以通过在 resource.

中使用 condition 字段来实现
"resources": [
    {
        "condition": "[equals(parameters('virtualNetworkCreateNewOrUseExisting'), 'Create New')]",
        // Other fields
    }
    // Other resources
]

现在,我的问题是,

与此类似,是否可以在另一个parameter中包含condition字段,以便向用户询问此参数输入,仅基于前一个参数值。

即,仅当用户 selects Create New 时,才应询问 Virtual Network Name 的输入。

像这样,通过使用 condition 字段:

"parameters": {
    "virtualNetworksName": {
        "condition": "[equals(parameters('virtualNetworkCreateNewOrUseExisting'), 'Create New')]",
        "defaultValue": "vn-1",
        "type": "string"
    },
    // Other parameters
}

但是,我看到 condition 字段在参数内部不受支持(至少到目前为止)。

或者,是否至少可以有这样的 if 语句(这样,如果用户 select,字段的值将默认显示 empty s Use Existing.):

"parameters": {
    "virtualNetworksName": {
        "defaultValue": "[if(equals(parameters('virtualNetworkCreateNewOrUseExisting'),'Create New'), 'vn-1', '')]",
        "type": "string"
    },
    // Other parameters
}

或者,还有其他方法可以实现这个目标吗?

根据当前 Azure documentation,我们无法在参数块中向参数添加条件。

作为旁注,您可以在部署模板时使用 PowerShell parameter inline functions

我们看到已经有一个功能请求要添加 Support functions within the definition of parameters... · Community (azure.com) 我们建议您对现有的反馈请求发表评论并点赞。

您不能在模板文件中本地执行此操作,但在用于部署模板的门户用户体验中,您可以...请参阅:

https://docs.microsoft.com/en-us/azure/azure-resource-manager/templates/template-specs-create-portal-forms

https://docs.microsoft.com/en-us/azure/azure-resource-manager/managed-applications/create-uidefinition-overview

没有使用 templateSpec 或 managedApp(请参阅此处的“部署到 Azure 按钮:https://github.com/Azure/azure-quickstart-templates/tree/master/demos/100-marketplace-sample

但如果可以的话,templateSpec 或 managedApp 会给你更好的体验。