Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

azurerm_lb_rule: strip read-only properties before sending request #7741

Closed
wants to merge 3 commits into from

Conversation

magodo
Copy link
Collaborator

@magodo magodo commented Jul 14, 2020

This is a workaround for #7691

The reason for that issue is that service can't tolerate the client sending properties.backendAddressPools.n.properties.backendIPConfigurations in request body for load balancer resource since 2020-05-01, as it is a READ-ONLY attribute (this only occurs when azurerm_lb's sku is Standard).
Currently, Azure Go SDK can trim the READ-ONLY attributes during marshaling, but only for the root level attributes, so, in this case, Go SDK will still marshal the attribute into the request body. This is tracked in issue: Azure/autorest.go#438.

Test Result

Before this change
💢 make testacc TEST=./azurerm/internal/services/network/tests TESTARGS="-run='TestAccAzureRMLoadBalancerRule_vmssBackendPool'"
==> Checking that code complies with gofmt requirements...
==> Checking that Custom Timeouts are used...
==> Checking that acceptance test packages are used...
TF_ACC=1 go test ./azurerm/internal/services/network/tests -v -run='TestAccAzureRMLoadBalancerRule_vmssBackendPool' -timeout 180m -ldflags="-X=github.com/terraform-providers/terraform-provider-azurerm/version.ProviderVersion=acc"
=== RUN   TestAccAzureRMLoadBalancerRule_vmssBackendPool
=== PAUSE TestAccAzureRMLoadBalancerRule_vmssBackendPool
=== CONT  TestAccAzureRMLoadBalancerRule_vmssBackendPool
    TestAccAzureRMLoadBalancerRule_vmssBackendPool: testing.go:684: Step 2 error: errors during apply:
    Error: Error Creating/Updating Load Balancer "arm-test-loadbalancer-200714173426984953" (Resource Group "acctestRG-lb-200714173426984953"): network.LoadBalancersClient#CreateOrUpdate: Failure sending request: StatusCode=400 -- Original Error: Code="InvalidRequestFormat" Message="Cannot parse the request." Details=[{"code":"DuplicateIpConfigurationReferenceOnBackendAddressPool","message":"Found duplicate ipConfiguration reference /subscriptions/67a9759d-d099-4aa8-8675-e6cfd669c3f4/resourceGroups/acctestRG-lb-200714173426984953/providers/Microsoft.Network/networkInterfaces/|providers|Microsoft.Compute|virtualMachineScaleSets|acctest-lb-vmss-200714173426984953|virtualMachines|0|networkInterfaces|primary/ipConfigurations/primary on backend pool addresses /subscriptions//resourceGroups//providers/Microsoft.Network/loadBalancers//backendAddressPools//loadBalancerBackendAddresses/ and /subscriptions//resourceGroups//providers/Microsoft.Network/loadBalancers//backendAddressPools/acctest-lb-BAP-200714173426984953/loadBalancerBackendAddresses/5c4d25d2-7957-4dc6-a30c-ffbb301fa9a1."},{"code":"DuplicateIpConfigurationReferenceOnBackendAddressPool","message":"Found duplicate ipConfiguration reference /subscriptions/67a9759d-d099-4aa8-8675-e6cfd669c3f4/resourceGroups/acctestRG-lb-200714173426984953/providers/Microsoft.Network/networkInterfaces/|providers|Microsoft.Compute|virtualMachineScaleSets|acctest-lb-vmss-200714173426984953|virtualMachines|1|networkInterfaces|primary/ipConfigurations/primary on backend pool addresses /subscriptions//resourceGroups//providers/Microsoft.Network/loadBalancers//backendAddressPools//loadBalancerBackendAddresses/ and /subscriptions//resourceGroups//providers/Microsoft.Network/loadBalancers//backendAddressPools/acctest-lb-BAP-200714173426984953/loadBalancerBackendAddresses/f169c430-34c1-49e5-8308-b34c07aa4174."},{"code":"DuplicateIpConfigurationReferenceOnBackendAddressPool","message":"Found duplicate ipConfiguration reference /subscriptions/67a9759d-d099-4aa8-8675-e6cfd669c3f4/resourceGroups/acctestRG-lb-200714173426984953/providers/Microsoft.Network/networkInterfaces/|providers|Microsoft.Compute|virtualMachineScaleSets|acctest-lb-vmss-200714173426984953|virtualMachines|2|networkInterfaces|primary/ipConfigurations/primary on backend pool addresses /subscriptions//resourceGroups//providers/Microsoft.Network/loadBalancers//backendAddressPools//loadBalancerBackendAddresses/ and /subscriptions//resourceGroups//providers/Microsoft.Network/loadBalancers//backendAddressPools/acctest-lb-BAP-200714173426984953/loadBalancerBackendAddresses/6a9b9e0c-1193-4606-b9fe-5f6b7332925a."}]
    
    
TestAccAzureRMLoadBalancerRule_vmssBackendPool: testing.go:745: Error destroying resource! WARNING: Dangling resources
    may exist. The full state and error is shown below.
    
    Error: errors during apply: 2 problems:
    
    - Error Creating/Updating Load Balancer "arm-test-loadbalancer-200714173426984953" (Resource Group "acctestRG-lb-200714173426984953"): network.LoadBalancersClient#CreateOrUpdate: Failure sending request: StatusCode=400 -- Original Error: Code="InvalidRequestFormat" Message="Cannot parse the request." Details=[{"code":"DuplicateIpConfigurationReferenceOnBackendAddressPool","message":"Found duplicate ipConfiguration reference /subscriptions/67a9759d-d099-4aa8-8675-e6cfd669c3f4/resourceGroups/acctestRG-lb-200714173426984953/providers/Microsoft.Network/networkInterfaces/|providers|Microsoft.Compute|virtualMachineScaleSets|acctest-lb-vmss-200714173426984953|virtualMachines|0|networkInterfaces|primary/ipConfigurations/primary on backend pool addresses /subscriptions//resourceGroups//providers/Microsoft.Network/loadBalancers//backendAddressPools//loadBalancerBackendAddresses/ and /subscriptions//resourceGroups//providers/Microsoft.Network/loadBalancers//backendAddressPools/acctest-lb-BAP-200714173426984953/loadBalancerBackendAddresses/7bb8efbe-ca52-4859-b363-b114958cc03a."},{"code":"DuplicateIpConfigurationReferenceOnBackendAddressPool","message":"Found duplicate ipConfiguration reference /subscriptions/67a9759d-d099-4aa8-8675-e6cfd669c3f4/resourceGroups/acctestRG-lb-200714173426984953/providers/Microsoft.Network/networkInterfaces/|providers|Microsoft.Compute|virtualMachineScaleSets|acctest-lb-vmss-200714173426984953|virtualMachines|1|networkInterfaces|primary/ipConfigurations/primary on backend pool addresses /subscriptions//resourceGroups//providers/Microsoft.Network/loadBalancers//backendAddressPools//loadBalancerBackendAddresses/ and /subscriptions//resourceGroups//providers/Microsoft.Network/loadBalancers//backendAddressPools/acctest-lb-BAP-200714173426984953/loadBalancerBackendAddresses/c3e48329-e5e7-4b0e-84ac-bdbee7319e27."},{"code":"DuplicateIpConfigurationReferenceOnBackendAddressPool","message":"Found duplicate ipConfiguration reference /subscriptions/67a9759d-d099-4aa8-8675-e6cfd669c3f4/resourceGroups/acctestRG-lb-200714173426984953/providers/Microsoft.Network/networkInterfaces/|providers|Microsoft.Compute|virtualMachineScaleSets|acctest-lb-vmss-200714173426984953|virtualMachines|2|networkInterfaces|primary/ipConfigurations/primary on backend pool addresses /subscriptions//resourceGroups//providers/Microsoft.Network/loadBalancers//backendAddressPools//loadBalancerBackendAddresses/ and /subscriptions//resourceGroups//providers/Microsoft.Network/loadBalancers//backendAddressPools/acctest-lb-BAP-200714173426984953/loadBalancerBackendAddresses/91c528c2-ea70-4d4b-a42e-31b93bcc80ff."}]
    - Error Creating/Updating LoadBalancer: network.LoadBalancersClient#CreateOrUpdate: Failure sending request: StatusCode=400 -- Original Error: Code="InvalidResourceReference" Message="Resource /subscriptions/67a9759d-d099-4aa8-8675-e6cfd669c3f4/resourceGroups/acctestRG-lb-200714173426984953/providers/Microsoft.Network/loadBalancers/arm-test-loadbalancer-200714173426984953/backendAddressPools/acctest-lb-BAP-200714173426984953 referenced by resource /subscriptions/67a9759d-d099-4aa8-8675-e6cfd669c3f4/resourceGroups/acctestRG-lb-200714173426984953/providers/Microsoft.Network/loadBalancers/arm-test-loadbalancer-200714173426984953/loadBalancingRules/LbRule-zavcukaf was not found. Please make sure that the referenced resource exists, and that both resources are in the same region." Details=[]
    
    State: azurerm_lb.test:
      ID = /subscriptions/67a9759d-d099-4aa8-8675-e6cfd669c3f4/resourceGroups/acctestRG-lb-200714173426984953/providers/Microsoft.Network/loadBalancers/arm-test-loadbalancer-200714173426984953
      provider = provider.azurerm
      frontend_ip_configuration.# = 1
      frontend_ip_configuration.0.id = /subscriptions/67a9759d-d099-4aa8-8675-e6cfd669c3f4/resourceGroups/acctestRG-lb-200714173426984953/providers/Microsoft.Network/loadBalancers/arm-test-loadbalancer-200714173426984953/frontendIPConfigurations/one-200714173426984953
      frontend_ip_configuration.0.inbound_nat_rules.# = 0
      frontend_ip_configuration.0.load_balancer_rules.# = 1
      frontend_ip_configuration.0.load_balancer_rules.434067275 = /subscriptions/67a9759d-d099-4aa8-8675-e6cfd669c3f4/resourceGroups/acctestRG-lb-200714173426984953/providers/Microsoft.Network/loadBalancers/arm-test-loadbalancer-200714173426984953/loadBalancingRules/LbRule-zavcukaf
      frontend_ip_configuration.0.name = one-200714173426984953
      frontend_ip_configuration.0.outbound_rules.# = 0
      frontend_ip_configuration.0.private_ip_address = 
      frontend_ip_configuration.0.private_ip_address_allocation = Dynamic
      frontend_ip_configuration.0.private_ip_address_version = IPv4
      frontend_ip_configuration.0.public_ip_address_id = /subscriptions/67a9759d-d099-4aa8-8675-e6cfd669c3f4/resourceGroups/acctestRG-lb-200714173426984953/providers/Microsoft.Network/publicIPAddresses/test-ip-200714173426984953
      frontend_ip_configuration.0.public_ip_prefix_id = 
      frontend_ip_configuration.0.subnet_id = 
      frontend_ip_configuration.0.zones.# = 0
      location = eastus2
      name = arm-test-loadbalancer-200714173426984953
      private_ip_address = 
      private_ip_addresses.# = 0
      resource_group_name = acctestRG-lb-200714173426984953
      sku = Standard
      tags.% = 0
    
      Dependencies:
        azurerm_public_ip.test
        azurerm_resource_group.test
    azurerm_lb_backend_address_pool.test:
      ID = /subscriptions/67a9759d-d099-4aa8-8675-e6cfd669c3f4/resourceGroups/acctestRG-lb-200714173426984953/providers/Microsoft.Network/loadBalancers/arm-test-loadbalancer-200714173426984953/backendAddressPools/acctest-lb-BAP-200714173426984953
      provider = provider.azurerm
      backend_ip_configurations.# = 3
      backend_ip_configurations.1963658510 = /subscriptions/67a9759d-d099-4aa8-8675-e6cfd669c3f4/resourceGroups/acctestRG-lb-200714173426984953/providers/Microsoft.Compute/virtualMachineScaleSets/acctest-lb-vmss-200714173426984953/virtualMachines/1/networkInterfaces/primary/ipConfigurations/primary
      backend_ip_configurations.3479046425 = /subscriptions/67a9759d-d099-4aa8-8675-e6cfd669c3f4/resourceGroups/acctestRG-lb-200714173426984953/providers/Microsoft.Compute/virtualMachineScaleSets/acctest-lb-vmss-200714173426984953/virtualMachines/2/networkInterfaces/primary/ipConfigurations/primary
      backend_ip_configurations.482865411 = /subscriptions/67a9759d-d099-4aa8-8675-e6cfd669c3f4/resourceGroups/acctestRG-lb-200714173426984953/providers/Microsoft.Compute/virtualMachineScaleSets/acctest-lb-vmss-200714173426984953/virtualMachines/0/networkInterfaces/primary/ipConfigurations/primary
      load_balancing_rules.# = 1
      load_balancing_rules.434067275 = /subscriptions/67a9759d-d099-4aa8-8675-e6cfd669c3f4/resourceGroups/acctestRG-lb-200714173426984953/providers/Microsoft.Network/loadBalancers/arm-test-loadbalancer-200714173426984953/loadBalancingRules/LbRule-zavcukaf
      loadbalancer_id = /subscriptions/67a9759d-d099-4aa8-8675-e6cfd669c3f4/resourceGroups/acctestRG-lb-200714173426984953/providers/Microsoft.Network/loadBalancers/arm-test-loadbalancer-200714173426984953
      name = acctest-lb-BAP-200714173426984953
      resource_group_name = acctestRG-lb-200714173426984953
    azurerm_lb_rule.test:
      ID = /subscriptions/67a9759d-d099-4aa8-8675-e6cfd669c3f4/resourceGroups/acctestRG-lb-200714173426984953/providers/Microsoft.Network/loadBalancers/arm-test-loadbalancer-200714173426984953/loadBalancingRules/LbRule-zavcukaf
      provider = provider.azurerm
      backend_address_pool_id = /subscriptions/67a9759d-d099-4aa8-8675-e6cfd669c3f4/resourceGroups/acctestRG-lb-200714173426984953/providers/Microsoft.Network/loadBalancers/arm-test-loadbalancer-200714173426984953/backendAddressPools/acctest-lb-BAP-200714173426984953
      backend_port = 3389
      disable_outbound_snat = false
      enable_floating_ip = false
      enable_tcp_reset = false
      frontend_ip_configuration_id = /subscriptions/67a9759d-d099-4aa8-8675-e6cfd669c3f4/resourceGroups/acctestRG-lb-200714173426984953/providers/Microsoft.Network/loadBalancers/arm-test-loadbalancer-200714173426984953/frontendIPConfigurations/one-200714173426984953
      frontend_ip_configuration_name = one-200714173426984953
      frontend_port = 3389
      idle_timeout_in_minutes = 4
      load_distribution = Default
      loadbalancer_id = /subscriptions/67a9759d-d099-4aa8-8675-e6cfd669c3f4/resourceGroups/acctestRG-lb-200714173426984953/providers/Microsoft.Network/loadBalancers/arm-test-loadbalancer-200714173426984953
      name = LbRule-zavcukaf
      protocol = Tcp
      resource_group_name = acctestRG-lb-200714173426984953
    azurerm_public_ip.test:
      ID = /subscriptions/67a9759d-d099-4aa8-8675-e6cfd669c3f4/resourceGroups/acctestRG-lb-200714173426984953/providers/Microsoft.Network/publicIPAddresses/test-ip-200714173426984953
      provider = provider.azurerm
      allocation_method = Static
      idle_timeout_in_minutes = 4
      ip_address = 52.184.221.196
      ip_version = IPv4
      location = eastus2
      name = test-ip-200714173426984953
      resource_group_name = acctestRG-lb-200714173426984953
      sku = Standard
      tags.% = 0
      zones.# = 0
    
      Dependencies:
        azurerm_resource_group.test
    azurerm_resource_group.test:
      ID = /subscriptions/67a9759d-d099-4aa8-8675-e6cfd669c3f4/resourceGroups/acctestRG-lb-200714173426984953
      provider = provider.azurerm
      location = eastus2
      name = acctestRG-lb-200714173426984953
      tags.% = 0

--- FAIL: TestAccAzureRMLoadBalancerRule_vmssBackendPool (342.64s)
FAIL
FAIL github.com/terraform-providers/terraform-provider-azurerm/azurerm/internal/services/network/tests 342.673s
FAIL
make: *** [GNUmakefile:98: testacc] Error 1

After this change
💢 make testacc TEST=./azurerm/internal/services/network/tests TESTARGS="-run='TestAccAzureRMLoadBalancerRule_vmssBackendPool'"
==> Checking that code complies with gofmt requirements...
==> Checking that Custom Timeouts are used...
==> Checking that acceptance test packages are used...
TF_ACC=1 go test ./azurerm/internal/services/network/tests -v -run='TestAccAzureRMLoadBalancerRule_vmssBackendPool' -timeout 180m -ldflags="-X=github.com/terraform-providers/terraform-provider-azurerm/version.ProviderVersion=acc"
=== RUN   TestAccAzureRMLoadBalancerRule_vmssBackendPool
=== PAUSE TestAccAzureRMLoadBalancerRule_vmssBackendPool
=== CONT  TestAccAzureRMLoadBalancerRule_vmssBackendPool
--- PASS: TestAccAzureRMLoadBalancerRule_vmssBackendPool (403.26s)
PASS
ok      github.com/terraform-providers/terraform-provider-azurerm/azurerm/internal/services/network/tests       403.293s

(fix #7691)

@ghost ghost added the size/M label Jul 14, 2020
Copy link
Contributor

@tombuildsstuff tombuildsstuff left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

hey @magodo

Thanks for this PR :)

I've taken a look through and left some comments inline - but I think ultimately it might be better to downgrade the version of the Networking API being used until the API's fixed - what do you think?

Thanks!

for _, pool := range *loadBalancer.LoadBalancerPropertiesFormat.BackendAddressPools {
pool.BackendIPConfigurations = nil
}
}
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ultimately this is a hack to workaround version 2020-05-01 of the Networking API being broken - since we're not using that yet, it's probably best we downgrade until that API version is fixed so that these properties are ignored?

@ghost ghost added size/L and removed size/M labels Jul 15, 2020
@magodo
Copy link
Collaborator Author

magodo commented Jul 15, 2020

@tombuildsstuff I have updated the code accordingly.
Regarding either to introduce this workaround or downgrade API version, I leave you to make the decision :)

@hbuckle
Copy link
Contributor

hbuckle commented Jul 31, 2020

Is someone going to make a call on downgrading the API version?

@marc-sensenich
Copy link
Contributor

marc-sensenich commented Aug 4, 2020

I've noticed this issue on LB creation as well, based on @tombuildsstuff's comment I've opened #8006

@tombuildsstuff
Copy link
Contributor

As discussed offline, closing this in favour of #8006 - since this ultimately needs to be fixed in the API (waiting for the Track2 SDK is one long-term fix - but that's not one we should rely on here)

@magodo
Copy link
Collaborator Author

magodo commented Aug 19, 2020

@tombuildsstuff Just FYI, the fix in Go SDK is implemented in Track1 (since v45.0).

@ghost
Copy link

ghost commented Sep 18, 2020

I'm going to lock this issue because it has been closed for 30 days ⏳. This helps our maintainers find and focus on the active issues.

If you feel this issue should be reopened, we encourage creating a new issue linking back to this one for added context. If you feel I made an error 🤖 🙉 , please reach out to my human friends 👉 [email protected]. Thanks!

@ghost ghost locked and limited conversation to collaborators Sep 18, 2020
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2.18.0 - Error removing/updating load balancer rules
4 participants