Search code examples
azureazure-resource-managerazure-bicep

Reference a parent resource inside a module using bicep while parent has not deployed yet?


I'm trying to deploy a child module in bicep but I get not found error as its parent has not been deployed yet.

This is the parent bicep code:

@description('The name of the app service. full site name will be DT-xxx-Open')
param site_name string
var full_site_name = 'DT-${site_name}-Open'

@description('Resource location')
param location string = resourceGroup().location

resource app 'Microsoft.Web/sites@2021-02-01' = {
  kind: 'app'
  name: full_site_name
  location: location
  ...
}

module site_config 'modules/appservice-config.bicep' = {
  name: 'site_config'
  params: {
    resource_name: full_site_name
    resource_location: location
  }
}

this is my module bicep file:

  @description('Resource name')
  param resource_name string

  (error happens at this line) resource site_name_resource 'Microsoft.Web/sites@2021-02-01' existing = {
    name: resource_name
  }

  resource site_name_logs 'Microsoft.Web/sites/config@2021-02-01' = {
    parent: site_name_resource
    name: 'logs'
    ...
}

But the problem is I'm getting a not found error as its parent service deployment has not been completed yet and if I retry then it will work fine!

I wonder, is there any way to run this module after completing its parent deployment?


Solution

  • You would need to add a dependsOn when invoking you module.
    Bicep use implicit dependency So you can use the parent resource name as parameter for you module:

    module site_config 'module.bicep' = {
      name: 'site_config'
      params: {
        resource_name: app.name
        ...
      }
    }
    
    

    This is equivalent to:

    module site_config 'module.bicep' = {
      name: 'site_config'
      params: {
        resource_name: full_site_name
      }
      dependsOn: [ app ]
    }