-
Notifications
You must be signed in to change notification settings - Fork 4.7k
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_dns_cname_record
: try normalize target_resource_id
with RecordTypeID before set to state
#24181
Conversation
@@ -192,7 +192,7 @@ func resourceDnsCNameRecordRead(d *pluginsdk.ResourceData, meta interface{}) err | |||
if props.TargetResource != nil && props.TargetResource.Id != nil { | |||
targetResourceId = *props.TargetResource.Id | |||
} | |||
d.Set("target_resource_id", targetResourceId) | |||
d.Set("target_resource_id", normalizeTargetResourceID(targetResourceId)) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
We're only calling this once so it doesn't need to be a separate function. Can you please in-line the ID parsing above. We should also be raising the error from the parser instead of silently ignoring.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Sure! Updated.
if parsedID, err := recordsets.ParseRecordTypeIDInsensitively(targetResourceId); err == nil { | ||
targetResourceId = parsedID.ID() | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@wuxu92 We still need to return the error here since we're expecting a record type ID. If the service suddenly begins returning an ID of a completely different type we would never know.
if parsedID, err := recordsets.ParseRecordTypeIDInsensitively(targetResourceId); err == nil { | |
targetResourceId = parsedID.ID() | |
} | |
parsedID, err := recordsets.ParseRecordTypeIDInsensitively(targetResourceId) | |
if err != nil { | |
return err | |
} | |
targetResourceId = parsedID.ID() |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
There is no document stating that the target resource ID must be a DNS record type ID. As far as I understand, it can refer to other Azure resources.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Hi @wuxu92 - I don't think this is the correct way to handle the reported issue. The target ref is intended for only a handful of resource types:
I think the user should be using record
not target_resource_id
in the configuration? Can you try a repro that way to see if the issue is resolved that way? Since the record
property is supposed to be another DNS record, this would be a more stable place to work with any casing mitigations if they are still required.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thanks @jackofallops I have repro with record
field and it works well! FWIW should we still normalize the target_resource_id
as we can with all these possible resource types?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thanks @wuxu92. This is almost good to go, could you please take a look at the latest comment?
if recordTypeID, err := recordsets.ParseRecordTypeIDInsensitively(targetResourceId); err == nil { | ||
targetResourceId = recordTypeID.ID() | ||
} else if trafficManagerID, err := endpoints.ParseEndpointTypeIDInsensitively(targetResourceId); err == nil { | ||
targetResourceId = trafficManagerID.ID() | ||
} else if cdnID, err := cdn.EndpointIDInsensitively(targetResourceId); err == nil { | ||
targetResourceId = cdnID.ID() | ||
} else if frontDoorID, err := frontdoor.FrontendEndpointIDInsensitively(targetResourceId); err == nil { | ||
targetResourceId = frontDoorID.ID() | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
We're still silently ignoring the case where the returned ID is none of those resource types. We should error if the resource type isn't any of these.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
If the resource type is not listed, we should directly use the ID from the API response. This could indicate an API bug or a new resource type supported by the API. Neither of these scenarios should disrupt client behavior, as far as I understand it.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I needed to check internally but you're right @wuxu92, apologies!
I did push a commit to add a comment above this logic linking to a piece of work we're doing on dynamic resource IDs - once that functionality is available we should be able to update this.
x-ref to the recaser in: hashicorp/go-azure-helpers#189 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thanks @wuxu92 LGTM 👍
if recordTypeID, err := recordsets.ParseRecordTypeIDInsensitively(targetResourceId); err == nil { | ||
targetResourceId = recordTypeID.ID() | ||
} else if trafficManagerID, err := endpoints.ParseEndpointTypeIDInsensitively(targetResourceId); err == nil { | ||
targetResourceId = trafficManagerID.ID() | ||
} else if cdnID, err := cdn.EndpointIDInsensitively(targetResourceId); err == nil { | ||
targetResourceId = cdnID.ID() | ||
} else if frontDoorID, err := frontdoor.FrontendEndpointIDInsensitively(targetResourceId); err == nil { | ||
targetResourceId = frontDoorID.ID() | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I needed to check internally but you're right @wuxu92, apologies!
I did push a commit to add a comment above this logic linking to a piece of work we're doing on dynamic resource IDs - once that functionality is available we should be able to update this.
…ecordTypeID before set to state (hashicorp#24181) * try normalize dns target resource id to fix case issue * use lowercase resource group name to fix acc tests * inline normalize target resource id * add other possible resource id for target resource id * add todo comment for updating the id parser logic once the recaser work is finished --------- Co-authored-by: Steph <[email protected]>
<Actions> <action id="f410411e63aff4bb73a81c2aec1d373cf8a903e63b30dee2006b0030d8a94cc8"> <h3>Bump Terraform `azurerm` provider version</h3> <details id="1d9343c012f5434ac9fe8a98135bae3667b399259be16d9b14302ea3bd424a24"> <summary>Update Terraform lock file</summary> <p>changes detected:
	"hashicorp/azurerm" updated from "3.89.0" to "3.90.0" in file ".terraform.lock.hcl"</p> <details> <summary>3.90.0</summary> <pre>Changelog retrieved from:
	https://github.com/hashicorp/terraform-provider-azurerm/releases/tag/v3.90.0
UPGRADE NOTES:

* provider - The provider will now automatically register the `AppConfiguration`, `DataFactory`, and `SignalRService` Resource Providers. When running Terraform with limited permissions, note that you [must disable automatic Resource Provider Registration and ensure that any Resource Providers Terraform requires are registered]([XXX](https://registry.terraform.io/providers/hashicorp/azurerm/latest/docs#skip_provider_registration)). ([#24645](hashicorp/terraform-provider-azurerm#24645; 
FEATURES:

* **New Data Source**: `azurerm_nginx_configuration` ([#24642](hashicorp/terraform-provider-azurerm#24642 **New Data Source**: `azurerm_virtual_desktop_workspace` ([#24732](hashicorp/terraform-provider-azurerm#24732 **New Resource**: `azurerm_kubernetes_fleet_update_strategy` ([#24328](hashicorp/terraform-provider-azurerm#24328 **New Resource**: `azurerm_site_recovery_vmware_replicated_vm` ([#22477](hashicorp/terraform-provider-azurerm#22477 **New Resource**: `azurerm_spring_cloud_new_relic_application_performance_monitoring` ([#24699](https://github.com/hashicorp/terraform-provider-azurerm/issues/24699))

ENHANCEMENTS:

* provider: registering the Resource Provider `Microsoft.AppConfiguration` ([#24645](hashicorp/terraform-provider-azurerm#24645 provider: registering the Resource Provider `Microsoft.DataFactory` ([#24645](hashicorp/terraform-provider-azurerm#24645 provider: registering the Resource Provider `Microsoft.SignalRService` ([#24645](hashicorp/terraform-provider-azurerm#24645 provider: the Provider is now built using Go 1.21.6 ([#24653](hashicorp/terraform-provider-azurerm#24653 dependencies: the dependency `github.com/hashicorp/go-azure-sdk` has been split into multiple Go Modules - and as such will be referred to by those paths going forwards ([#24636](hashicorp/terraform-provider-azurerm#24636 dependencies: updating to ``v0.20240201.1064937` of `github.com/hashicorp/go-azure-sdk/resource-manager` ([#24738](hashicorp/terraform-provider-azurerm#24738 dependencies: updating to `v0.20240201.1064937` of `github.com/hashicorp/go-azure-sdk/sdk` ([#24738](hashicorp/terraform-provider-azurerm#24738 `appservice`: update to `go-azure-sdk` and API version `2023-01-01` ([#24688](hashicorp/terraform-provider-azurerm#24688 `datafactory`: updating to use `tombuildsstuff/kermit` ([#24675](hashicorp/terraform-provider-azurerm#24675 `hdinsight`: refactoring to use `github.com/hashicorp/go-azure-sdk/resource-manager` ([#24011](hashicorp/terraform-provider-azurerm#24011 `hdinsight`: updating to API Version `2021-06-01` ([#24011](hashicorp/terraform-provider-azurerm#24011 `loadbalancer`: updating to use `hashicorp/go-azure-sdk` ([#24291](hashicorp/terraform-provider-azurerm#24291 `nginx`: updating to API Version `2023-09-01` ([#24640](hashicorp/terraform-provider-azurerm#24640 `servicefabricmanagedcluster`: updating to use the base layer from `hashicorp/go-azure-sdk` rather than `Azure/go-autorest` ([#24654](hashicorp/terraform-provider-azurerm#24654 `springcloud`: updating to use API Version `2023-11-01-preview` ([#24690](hashicorp/terraform-provider-azurerm#24690 `subscriptions`: refactoring to use `hashicorp/go-azure-sdk` ([#24663](hashicorp/terraform-provider-azurerm#24663 Data Source: `azurerm_stream_analytics_job` - support for User Assigned Identities ([#24738](hashicorp/terraform-provider-azurerm#24738 `azurerm_cosmosdb_account` - support for the `gremlin_database` and `tables_to_restore` properties ([#24627](hashicorp/terraform-provider-azurerm#24627 `azurerm_bot_channel_email` - support for the `magic_code` property ([#23129](hashicorp/terraform-provider-azurerm#23129 `azurerm_cosmosdb_account` - support for the `partition_merge_enabled` property ([#24615](hashicorp/terraform-provider-azurerm#24615 `azurerm_mssql_managed_database` - support for the `immutable_backups_enabled` property ([#24745](hashicorp/terraform-provider-azurerm#24745 `azurerm_mssql_database` - support for the `immutable_backups_enabled` property ([#24745](hashicorp/terraform-provider-azurerm#24745 `azurerm_palo_alto_next_generation_firewall_virtual_hub_panorama` - support for the `trusted_address_ranges` property ([#24459](hashicorp/terraform-provider-azurerm#24459 `azurerm_palo_alto_next_generation_firewall_virtual_network_local_rulestack` - support for the `trusted_address_ranges` property ([#24459](hashicorp/terraform-provider-azurerm#24459 `azurerm_palo_alto_next_generation_firewall_virtual_network_panorama` - support for the `trusted_address_ranges` property ([#24459](hashicorp/terraform-provider-azurerm#24459 `azurerm_servicebus_namespace` - updating to use API Version `2022-10-01-preview` ([#24650](hashicorp/terraform-provider-azurerm#24650 `azurerm_spring_cloud_api_portal` - support for the `api_try_out_enabled` property ([#24696](hashicorp/terraform-provider-azurerm#24696 `azurerm_spring_cloud_gateway` - support for the `local_response_cache_per_route` and `local_response_cache_per_instance` properties ([#24697](hashicorp/terraform-provider-azurerm#24697 `azurerm_stream_analytics_job` - support for User Assigned Identities ([#24738](hashicorp/terraform-provider-azurerm#24738 `azurerm_subscription` - refactoring to use `hashicorp/go-azure-sdk` to set tags on the subscription ([#24734](hashicorp/terraform-provider-azurerm#24734 `azurerm_virtual_desktop_workspace` - correctly validate the `name` property ([#24668](https://github.com/hashicorp/terraform-provider-azurerm/issues/24668))


BUG FIXES:

* provider: skip registration for resource providers that are unavailable ([#24571](hashicorp/terraform-provider-azurerm#24571 `azurerm_app_configuration` - no longer require `lifecycle_ignore_changes` for the `value` property when using a key vault reference ([#24702](hashicorp/terraform-provider-azurerm#24702 `azurerm_app_service_managed_certificate` - fix casing issue in `app_service_plan_id` by parsing insensitively ([#24664](hashicorp/terraform-provider-azurerm#24664 `azurerm_cognitive_deployment` - updates now include the `version` property ([#24700](hashicorp/terraform-provider-azurerm#24700 `azurerm_dns_cname_record` - prevent casing issue in `target_resource_id` by parsing the ID insensitively ([#24181](hashicorp/terraform-provider-azurerm#24181 `azurerm_mssql_managed_instance_failover_group` - prevent an issue when trying to create a failover group with a managed instance from a different subscription ([#24646](hashicorp/terraform-provider-azurerm#24646 `azurerm_storage_account` - conditionally update properties only when needed ([#24669](hashicorp/terraform-provider-azurerm#24669 `azurerm_storage_account` - change update order for `access_tier`to prevent errors when uploading blobs to the archive tier ([#22250](https://github.com/hashicorp/terraform-provider-azurerm/issues/22250))


</pre> </details> </details> <a href="https://infra.ci.jenkins.io/job/terraform-jobs/job/azure/job/main/1075/">Jenkins pipeline link</a> </action> </Actions> --- <table> <tr> <td width="77"> <img src="https://www.updatecli.io/images/updatecli.png" alt="Updatecli logo" width="50" height="50"> </td> <td> <p> Created automatically by <a href="https://www.updatecli.io/">Updatecli</a> </p> <details><summary>Options:</summary> <br /> <p>Most of Updatecli configuration is done via <a href="https://www.updatecli.io/docs/prologue/quick-start/">its manifest(s)</a>.</p> <ul> <li>If you close this pull request, Updatecli will automatically reopen it, the next time it runs.</li> <li>If you close this pull request and delete the base branch, Updatecli will automatically recreate it, erasing all previous commits made.</li> </ul> <p> Feel free to report any issues at <a href="https://github.com/updatecli/updatecli/issues">github.com/updatecli/updatecli</a>.<br /> If you find this tool useful, do not hesitate to star <a href="https://github.com/updatecli/updatecli/stargazers">our GitHub repository</a> as a sign of appreciation, and/or to tell us directly on our <a href="https://matrix.to/#/#Updatecli_community:gitter.im">chat</a>! </p> </details> </td> </tr> </table> Co-authored-by: Jenkins Infra Bot (updatecli) <[email protected]>
I'm going to lock this pull request because it has been closed for 30 days ⏳. This helps our maintainers find and focus on the active contributions. |
fixes: #24138.
There is a nother API casing issue related to this resource: Azure/azure-rest-api-specs#6641 so change the acctest resource group name to lower case to make the acc test work.