Linter 规则 - what-if 短路

此规则检测何时将运行时值作为参数传递给模块,模块又使用它们来确定资源 ID(例如,当使用参数确定模块内一个或多个资源的 name、subscriptionId、resourceGroup、condition、scope 或 apiVersion 时),并标记潜在的假设短路。

注意

此规则默认已关闭,请更改 bicepconfig.json 中的级别以启用它。

Linter 规则代码

请在 Bicep 配置文件中使用以下值自定义规则设置:

what-if-short-circuiting

解决方案

此规则检查用于确定模块内资源 ID 的运行时值。 如果 Bicep 代码可能导致 what-if 短路,则会发出警报。 在下面的示例中,appServiceOutputsappServiceTests 将被标记为 what-if 短路,因为它们将运行时值作为参数传递给模块,该模块在命名资源时会使用这些参数:

main.bicep

resource storageAccount 'Microsoft.Storage/storageAccounts@2023-05-01' = {
  name: 'storageAccountName'
  location: 'chinanorth3'
  sku: {
    name: 'Standard_LRS'
  }
  kind: 'StorageV2'
}

module appServiceModule 'modules/appService.bicep' = {
  name: 'appService2'
  params: {
    appServiceName: 'test'
  }
}

module appServiceOutputs 'modules/appService.bicep' = {
  name: 'appService3'
  params: {
    appServiceName: appServiceModule.outputs.outputName
  }
}

module appServiceTest 'modules/appService.bicep' = {
  name:'test3'
  params: {
    appServiceName: storageAccount.properties.accessTier
  }
}

modules/appService.bicep

param appServiceName string

resource appServiceApp 'Microsoft.Web/sites@2023-12-01' = {
  name: appServiceName
  location: 'chinanorth3'
  properties: {
    httpsOnly: true
  }
}

output outputName string = 'outputName'

若要避免此问题,请使用部署时常量确定资源 ID 的值。

后续步骤

有关 Linter 的详细信息,请参阅使用 Bicep Linter