-
Notifications
You must be signed in to change notification settings - Fork 4.6k
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_postgresql_flexible_server: fix storage_tier calculation #25947
Conversation
internal/services/postgres/postgresql_flexible_server_resource.go
Outdated
Show resolved
Hide resolved
@@ -382,7 +382,6 @@ func resourcePostgresqlFlexibleServer() *pluginsdk.Resource { | |||
} |
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.
Suggest run all related test cases to ensure this fix wouldn't introduce the regression issue.
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 a regression issue on the existing test case.
------- Stdout: -------
=== RUN TestAccPostgresqlFlexibleServer_geoRestore
=== PAUSE TestAccPostgresqlFlexibleServer_geoRestore
=== CONT TestAccPostgresqlFlexibleServer_geoRestore
testcase.go:113: Step 3/4 error: After applying this test step, the plan was not empty.
stdout:
Terraform used the selected providers to generate the following execution
plan. Resource actions are indicated with the following symbols:
~ update in-place
Terraform will perform the following actions:
# azurerm_postgresql_flexible_server.geo_restore will be updated in-place
~ resource "azurerm_postgresql_flexible_server" "geo_restore" {
id = "/subscriptions/*******/resourceGroups/acctestRG-postgresql-240514110942768666/providers/Microsoft.DBforPostgreSQL/flexibleServers/acctest-fs-restore-240514110942768666"
name = "acctest-fs-restore-240514110942768666"
+ storage_tier = "P4"
# (14 unchanged attributes hidden)
# (1 unchanged block hidden)
}
Plan: 0 to add, 1 to change, 0 to destroy.
--- FAIL: TestAccPostgresqlFlexibleServer_geoRestore (2753.46s)
FAIL
internal/services/postgres/postgresql_flexible_server_resource.go
Outdated
Show resolved
Hide resolved
Thanks for this PR - I've taken a look through and left some comments inline. |
Test runs fine: |
@HappyTobi, thank you for opening this PR! Love to see the community contributions! Thank you so much for that! Looking at the linked issue and the PR, I think there maybe an easier way to fix this, but by all means please correct me if I am overlooking something. There is a hierarchy here, top level being |
@HappyTobi, interesting side tangent... your test name got me thinking... |
Added a 2nd test: TF_ACC=1 go test -v ./internal/services/postgres -run=TestAccPostgresqlFlexibleServer_updateOnlyWithStorageTier -timeout 60m -ldflags="-X=github.com/hashicorp/terraform-provider-azurerm/version.ProviderVersion=acc" --- PASS: TestAccPostgresqlFlexibleServer_updateOnlyWithStorageTier (934.99s) |
Yes that make sense and the implementation reflect that already. |
// set default tier for storage when there is now configuration available | ||
if v := diff.GetRawConfig().AsValueMap()["storage_tier"]; v.IsNull() { | ||
newTier = string(storageTiers.DefaultTier) | ||
// set the new value that the update function will pickup and deploy new new storage tier. | ||
diff.SetNew("storage_tier", newTier) | ||
} |
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 think we can remove all of this code and handle everything in the !isValid
check below:
// set default tier for storage when there is now configuration available | |
if v := diff.GetRawConfig().AsValueMap()["storage_tier"]; v.IsNull() { | |
newTier = string(storageTiers.DefaultTier) | |
// set the new value that the update function will pickup and deploy new new storage tier. | |
diff.SetNew("storage_tier", newTier) | |
} |
// set the new value that the update function will pickup and deploy new new storage tier. | ||
diff.SetNew("storage_tier", newTier) | ||
} | ||
|
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.
What do you think if we just replace the current if !isValid {
code below with this instead:
if !isValid { | |
if strings.EqualFold(oldTierRaw.(string), newTier) { | |
// The tier value did not change, so we need to determin if they are | |
// using the default value for the tier, or they actually defined the | |
// tier in the config or not... If they did not define | |
// the tier in the config we need to assign a new valid default | |
// tier for the newMb value. However, if the tier is in the config | |
// this is a valid error and should be returned... | |
if v := diff.GetRawConfig().AsValueMap()["storage_tier"]; v.IsNull() { | |
diff.SetNew("storage_tier", string(storageTiers.DefaultTier)) | |
log.Printf("[DEBUG]: 'storage_tier' was not valid and was not in the config assigning new default 'storage_tier' %q -> %q\n", newTier, storageTiers.DefaultTier) | |
return nil | |
} | |
} | |
return fmt.Errorf("invalid 'storage_tier' %q for defined 'storage_mb' size '%d', expected one of [%s]", newTier, newMb, azure.QuotedStringSlice(*storageTiers.ValidTiers)) | |
} |
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.
This will change the logic a bit.
When you remove the "storage_tier" from you tf file, the default tier will not be set, it will use the one that you set before!
@@ -524,6 +524,48 @@ func TestAccPostgresqlFlexibleServer_invalidStorageTierScalingStorageMbStorageTi | |||
}) | |||
} | |||
|
|||
func TestAccPostgresqlFlexibleServer_updateOnlyWithStorageMb(t *testing.T) { |
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 think this is a great start to the test coverage, yet I think there are many more scenarios around this especially if we are now setting defaults when storage mb changes. I would like to see tests for storage tier set above storage tier default value, then remove the storage tier from the configuration (e.g., storage mb set to 65536
with a storage tier of P10
in the config file) then remove the storage tier P10
in the config. It should then revert tier from P10
-> P6
, etc. Does that make sense?
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.
For sure will add one more test
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.
@HappyTobi, thanks for pushing those changes, this LGTM now! 🚀
<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.103.1" to "3.104.0" in file ".terraform.lock.hcl"</p> <details> <summary>3.104.0</summary> <pre>Changelog retrieved from:
	https://github.com/hashicorp/terraform-provider-azurerm/releases/tag/v3.104.0
FEATURES:

* New Data Source: `azurerm_elastic_san` ([#25719](https://github.com/hashicorp/terraform-provider-azurerm/issues/25719))

ENHANCEMENTS:

* New Resource - `azurerm_key_vault_managed_hardware_security_module_key` ([#25935](hashicorp/terraform-provider-azurerm#25935 Data Source - `azurerm_kubernetes_service_version` - support for the `default_version` property ([#25953](hashicorp/terraform-provider-azurerm#25953 `network/applicationgateways` - update to use `hashicorp/go-azure-sdk` ([#25844](hashicorp/terraform-provider-azurerm#25844 `dataprotection` - update API version to `2024-04-01` ([#25882](hashicorp/terraform-provider-azurerm#25882 `databasemigration` - update API version to `2021-06-30` ([#25997](hashicorp/terraform-provider-azurerm#25997 `network/ips` - update to use `hashicorp/go-azure-sdk` ([#25905](hashicorp/terraform-provider-azurerm#25905 `network/localnetworkgateway` - update to use `hashicorp/go-azure-sdk` ([#25905](hashicorp/terraform-provider-azurerm#25905 `network/natgateway` - update to use `hashicorp/go-azure-sdk` ([#25905](hashicorp/terraform-provider-azurerm#25905 `network/networksecuritygroup` - update to use `hashicorp/go-azure-sdk` ([#25971](hashicorp/terraform-provider-azurerm#25971 `network/publicips` - update to use `hashicorp/go-azure-sdk` ([#25971](hashicorp/terraform-provider-azurerm#25971 `network/virtualwan` - update to use `hashicorp/go-azure-sdk` ([#25971](hashicorp/terraform-provider-azurerm#25971 `network/vpn` - update to use `hashicorp/go-azure-sdk` ([#25971](hashicorp/terraform-provider-azurerm#25971 `azurerm_databricks_workspace` - support for the `default_storage_firewall_enabled` property ([#25919](hashicorp/terraform-provider-azurerm#25919 `azurerm_key_vault` - allow previously existing key vaults to continue to manage the `contact` field prior to the `v3.93.0` conditional polling change ([#25777](hashicorp/terraform-provider-azurerm#25777 `azurerm_linux_function_app` - support for the PowerShell `7.4` ([#25980](hashicorp/terraform-provider-azurerm#25980 `azurerm_log_analytics_cluster` - support for the value `UserAssigned` in the `identity.type` property ([#25940](hashicorp/terraform-provider-azurerm#25940 `azurerm_pim_active_role_assignment` - remove hard dependency on the `roleAssignmentScheduleRequests` API, so that role assignments will not become unmanageable over time ([#25956](hashicorp/terraform-provider-azurerm#25956 `azurerm_pim_eligible_role_assignment` - remove hard dependency on the `roleEligibilityScheduleRequests` API, so that role assignments will not become unmanageable over time ([#25956](hashicorp/terraform-provider-azurerm#25956 `azurerm_windows_function_app` - support for the PowerShell `7.4` ([#25980](https://github.com/hashicorp/terraform-provider-azurerm/issues/25980))

BUG FIXES:

* `azurerm_container_app_job` - Allow `event_trigger_config.scale.min_executions` to be `0` ([#25931](hashicorp/terraform-provider-azurerm#25931 `azurerm_container_app_job` - update validation to allow the `replica_retry_limit` property to be set to `0` ([#25984](hashicorp/terraform-provider-azurerm#25984 `azurerm_data_factory_trigger_custom_event` - one of `subject_begins_with` and `subject_ends_with` no longer need to be set ([#25932](hashicorp/terraform-provider-azurerm#25932 `azurerm_kubernetes_cluster_node_pool` - prevent race condition by checking the virtual network status when creating a node pool with a subnet ID ([#25888](hashicorp/terraform-provider-azurerm#25888 `azurerm_postgresql_flexible_server` - fix for default `storage_tier` value when `storage_mb` field has been changed ([#25947](hashicorp/terraform-provider-azurerm#25947 `azurerm_pim_active_role_assignment` - resolve a number of potential crashes ([#25956](hashicorp/terraform-provider-azurerm#25956 `azurerm_pim_eligible_role_assignment` - resolve a number of potential crashes ([#25956](hashicorp/terraform-provider-azurerm#25956 `azurerm_redis_enterprise_cluster_location_zone_support` - add `Central India` zones support ([#26000](hashicorp/terraform-provider-azurerm#26000 `azurerm_sentinel_alert_rule_scheduled` - the `alert_rule_template_version` property is no longer `ForceNew` ([#25688](hashicorp/terraform-provider-azurerm#25688 `azurerm_storage_sync_server_endpoint` - preventing a crashed due to `initial_upload_policy` ([#25968](https://github.com/hashicorp/terraform-provider-azurerm/issues/25968))


</pre> </details> </details> <a href="https://infra.ci.jenkins.io/job/updatecli/job/azure/job/main/185/">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) <60776566+jenkins-infra-bot@users.noreply.github.com>
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. |
Community Note
Description
The PR fix an issue with
azurerm_postgresql_flexible_server
.The issue can be reproduces when deploying an instance without a
storage_tier
property.The redeployment of the same instance will fail when updating the
storage_mb
without setting thestorage_tier
.The fix will handle the "autoupdate" of the
storage_tier
property when the value is not updated manually. (like the azure portal).PR Checklist
For example: “
resource_name_here
- description of change e.g. adding propertynew_property_name_here
”Changes to existing Resource / Data Source
Testing
For state migrations please test the changes locally and provide details here, such as the versions involved in testing the migration path. For further details on testing state migration changes please see our guide on state migrations in the contributor documentation. -->
Change Log
Below please provide what should go into the changelog (if anything) conforming to the Changelog Format documented here.
azurerm_resource
- support for thething1
property [GH-00000]This is a (please select all that apply):
Related Issue(s)
Fixes #25938
Note
If this PR changes meaningfully during the course of review please update the title and description as required.