terraform-azurerm-caf
terraform-azurerm-caf copied to clipboard
Fix: Load balancer with multiple frontend IP addresses
Issue-id
PR Checklist
- [x] I have added example(s) inside the [./examples/] folder
- [ ] I have added the example(s) to the integration test list for normal (~30 minutes) or long runner >30 minutes
- [ ] I have checked the coding conventions as per the wiki
- [x] I have checked to ensure there aren't other open Pull Requests for the same update/change?
Description
Does this introduce a breaking change
- [ ] YES
- [x] NO
Testing
Thanks for the PR, just wanted to highlight, that this is a breaking change, as existing configuration will not work anymore
We had the issue that if you add more public_ip_addresses, the frontend_ip_configuration can't resolve the existing ip address id anymore, resulting in cascading recreation of lb_backend_pools etc. To fix that, we remove the try() from the referencing clause.
diff --git a/modules/networking/lb/module.tf b/modules/networking/lb/module.tf
index f6e8dfe5..88265b33 100644
--- a/modules/networking/lb/module.tf
+++ b/modules/networking/lb/module.tf
@@ -26,7 +26,7 @@ resource "azurerm_lb" "lb" {
zones = can(frontend_ip_configuration.value.zones) ? frontend_ip_configuration.value.zones : try(frontend_ip_configuration.value.availability_zone, null)
# TODO: availability_zone kept for smooth migration to 3.0
- public_ip_address_id = can(frontend_ip_configuration.value.public_ip_address.id) || can(frontend_ip_configuration.value.public_ip_address.key) ? try(frontend_ip_configuration.value.public_ip_address.id, var.remote_objects.public_ip_addresses[try(frontend_ip_configuration.value.public_ip_address.lz_key, var.client_config.landingzone_key)][frontend_ip_configuration.value.public_ip_address.key].id) : null
+ public_ip_address_id = can(frontend_ip_configuration.value.public_ip_address.id) || can(frontend_ip_configuration.value.public_ip_address.key) ? can(frontend_ip_configuration.value.public_ip_address.id) ? frontend_ip_configuration.value.public_ip_address.id : var.remote_objects.public_ip_addresses[try(frontend_ip_configuration.value.public_ip_address.lz_key, var.client_config.landingzone_key)][frontend_ip_configuration.value.public_ip_address.key].id : null
subnet_id = can(frontend_ip_configuration.value.subnet.id) || can(frontend_ip_configuration.value.subnet.key) ? try(frontend_ip_configuration.value.subnet.id, var.remote_objects.virtual_network[try(frontend_ip_configuration.value.subnet.lz_key, var.client_config.landingzone_key)][frontend_ip_configuration.value.subnet.vnet_key].subnets[frontend_ip_configuration.value.subnet.key].id) : null
}