我部署了一个 Bicep 脚本作为 Azure Pipeline 的一部分。通过一些谷歌搜索,我已经成功地使用 Powershell 脚本进一步实现了资源的“如果不存在则创建”,如https://ochzhen.com/blog/check-if-resource-exists-所述天蓝色二头肌
问题似乎是我无法作为家长传递 ID 或条件参考。我想做的是:
param isFdEndpointExisting bool
...
resource endpoint 'Microsoft.Cdn/profiles/afdEndpoints@2020-09-01' =if(!isFdEndpointExisting) {
name: fdEndpointName
parent: fdProfile
... // params to initialize here
}
resource endpointExisting 'Microsoft.Cdn/profiles/afdEndpoints@2020-09-01'existing =if(isFdEndpointExisting) {
name: fdEndpointName
parent: fdProfile
}
resource route 'Microsoft.Cdn/profiles/afdEndpoints/routes@2020-09-01' =if(!isFdRouteExisting) {
name: routeName
parent: isFdEndpointExisting ? endpointExisting : endpoint
我得到的错误是:
The "parent" property only permits direct references to resources. Expressions are not supported.bicep(BCP240)
有没有其他方法可以做到这一点。感觉有点笨重。
您可以在模块内创建端点:
// fd-route.bicep
param frontDoorName string
param endpointName string
param routeName string
...
resource frontDoor 'Microsoft.Cdn/profiles@2022-11-01-preview'existing = {
name: frontDoorName
}
resource endpoint 'Microsoft.Cdn/profiles/afdEndpoints@2022-11-01-preview'existing = {
parent: frontDoor
name: endpointName
}
resource route 'Microsoft.Cdn/profiles/afdEndpoints/routes@2020-09-01' = {
parent: endpoint
name: routeName
...
}
然后你可以像从你的 main 中那样调用它
param isFdEndpointExisting bool
param fdProfileName string
param fdEndpointName string
param routeName string
...
// Get a ference to front door
resource fdProfile 'Microsoft.Cdn/profiles@2020-09-01' existing = {
name: fdProfileName
}
// Create the endpoit if not exists
resource endpoint 'Microsoft.Cdn/profiles/afdEndpoints@2020-09-01' =if(!isFdEndpointExisting) {
parent: fdProfile
name: fdEndpointName
...
}
// Get a reference to the existing endpoint if already exists
resource endpointExisting 'Microsoft.Cdn/profiles/afdEndpoints@2020-09-01'existing =if(isFdEndpointExisting) {
name: fdEndpointName
parent: fdProfile
}
// Create the rouyte
module route 'fd-route.bicep' = {
name: routeName
params: {
frontDoorName: fdProfile.name
endpointName: isFdEndpointExisting ? endpointExisting.name : endpoint.name
routeName: routeName
...
}
}