gpt4 book ai didi

Azure ARM 模板 : Is there a way expand a two layer nest-array into one layer?

转载 作者:行者123 更新时间:2023-12-03 03:22:43 25 4
gpt4 key购买 nike

我有一个参数如下,它是一个带有嵌套内部数组的数组

"parameters": {
"input": {
"type": "array",
"defaultValue": [
{
"clusterName": "clusterNameA",
"databaseName": "databaseNameA",
"innerArray": {
"value": [
{
"principalId": "id1",
"role": "Viewer"
},
{
"principalId": "id2",
"role": "Ingestor"
}
]
}
},
{
"clusterName": "clusterNameB",
"databaseName": "databaseNameB",
"innerArray": {
"value": [
{
"principalId": "id3",
"role": "Viewer"
},
{
"principalId": "id4",
"role": "Ingestor"
}
]
}
}
]
}
}

是否可以通过扩展innerArrays来创建一个数组变量,如下所示?这背后的背景是ARM似乎不直接支持嵌套复制,所以我尝试通过扩展来解决它。

[
{
"clusterName": "clusterNameA",
"databaseName": "databaseNameA",
"principalId": "id1",
"role": "Viewer"
},
{
"clusterName": "clusterNameA",
"databaseName": "databaseNameA",
"principalId": "id2",
"role": "Ingestor"
},
{
"clusterName": "clusterNameB",
"databaseName": "databaseNameB",
"principalId": "id3",
"role": "Viewer"
},
{
"clusterName": "clusterNameB",
"databaseName": "databaseNameB",
"principalId": "id4",
"role": "Ingestor"
}
]

我不知道该怎么做

最佳答案

因为您已使用 azure-bicep 标记了此问题,所以我觉得您可以使用这些函数来帮助您解决问题:

Applies a custom mapping function to each element of an array.

Takes an array of arrays, and returns an array of subarray elements, in the original order. Subarrays are only flattened once, not recursively.

这对我有用:

// main.bicep
param input array

output flatten array = flatten(map(input, cluster => map(cluster.innerArray.value, inner => {
clusterName: cluster.clusterName
databaseName: cluster.databaseName
principalId: inner.principalId
role: inner.role
})))

等效的 ARM (az bicep build --file main.bicep) 看起来像这样:

{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"input": {
"type": "array"
}
},
"resources": [],
"outputs": {
"flatten": {
"type": "array",
"value": "[flatten(map(parameters('input'), lambda('cluster', map(lambdaVariables('cluster').innerArray.value, lambda('inner', createObject('clusterName', lambdaVariables('cluster').clusterName, 'databaseName', lambdaVariables('cluster').databaseName, 'principalId', lambdaVariables('inner').principalId, 'role', lambdaVariables('inner').role))))))]"
}
}
}

并给出这个结果:

[
{
"clusterName": "clusterNameA",
"databaseName": "databaseNameA",
"principalId": "id1",
"role": "Viewer"
},
{
"clusterName": "clusterNameA",
"databaseName": "databaseNameA",
"principalId": "id2",
"role": "Ingestor"
},
{
"clusterName": "clusterNameB",
"databaseName": "databaseNameB",
"principalId": "id3",
"role": "Viewer"
},
{
"clusterName": "clusterNameB",
"databaseName": "databaseNameB",
"principalId": "id4",
"role": "Ingestor"
}
]

关于Azure ARM 模板 : Is there a way expand a two layer nest-array into one layer?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/76570133/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com