二头肌的条件性父母

问题描述 投票:0回答:1

我部署了一个 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)

有没有其他方法可以做到这一点。感觉有点笨重。

azure azure-pipelines azure-resource-manager azure-bicep
1个回答
0
投票

您可以在模块内创建端点:

// 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
    ...
  }
}
© www.soinside.com 2019 - 2024. All rights reserved.