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

New resource azurerm_virtual_desktop_scaling_plan_host_pool_association #24670

Merged
merged 1 commit into from
Jun 28, 2024

Conversation

alexwilcox9
Copy link
Contributor

@alexwilcox9 alexwilcox9 commented Jan 27, 2024

PR for the creation of a new resource azurerm_virtual_desktop_scaling_plan_host_pool_association

Why

In my AVD deployments I have a normal worktime scaling plan and a holiday period scaling plan. I'd like to have a variable to easily switch from one SP to another. Using the host_pool block within the current azurerm_virtual_desktop_scaling_plan you would need to do something with dynamic blocks and there doesn't seem to be a clean solution.
Having a dedicated resource would make this much easier.

It would also be more inline with the existing resource azurerm_virtual_desktop_workspace_application_group_association (which this PR is mostly copied from)

Help

When using this resource alongside azurerm_virtual_desktop_scaling_plan there will be conflicts where an association has been created in the new resource but not declared in a host_pool block. Is there a way to prevent the host_pool block being checked if it hasn't been declared in the users configuration? Rather than the user having to add an ignore_changes to their code.

Documentation and Tests

If you're happy with this resource in principle I'll get the docs and tests written up
Thanks in advance!

Copy link
Member

@mbfrahry mbfrahry left a comment

Choose a reason for hiding this comment

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

Hey @alexwilcox9, this PR is looking on the right track but we'll need some tests to confirm it's functionality.

Your ask about what we could be done about host_pool on the parent resource showing a diff could be solved by adding Computed: true to host_pool.

I am wondering if there is a way we could solve this with a conditionals though. Could you open an issue describing your issue and what you're trying to do in a little more detail?

@alexwilcox9
Copy link
Contributor Author

Sorry for the slow response, only just got time to come back around to this.

So to describe what I'm trying to do in more detail; I'm looking to make it simpler to switch which scaling plan is currently assigned to a hostpool.

Currently you could probably use a dynamic block to only create the host_pool block when a conditional is true but having a separate resource for association is more consistent with the rest of the AVD resources and makes cleaner code

Here's an example of how I think it would be done with conditionals
https://gist.github.com/alexwilcox9/033de7fe2ad46236be0d6ee9062a8462

Whereas the same could be achieved with the new resource as follows

resource "azurerm_virtual_desktop_scaling_plan_host_pool_association" "example" {
  host_pool_id    = azurerm_virtual_desktop_host_pool.example.id
  scaling_plan_id = var.holiday ? azurerm_virtual_desktop_scaling_plan.holiday.id : azurerm_virtual_desktop_scaling_plan.example.id
  enabled         = true
}

Another problem I find with the conditionals is that Terraform tries to update both scaling plans at the same time causing an error. Meaning I always need to run the apply twice

azurerm_virtual_desktop_scaling_plan.holiday: Modifying... [id=/subscriptions/<SUB ID>/resourceGroups/example-rg/providers/Microsoft.DesktopVirtualization/scalingPlans/holiday-scalingplan]
azurerm_virtual_desktop_scaling_plan.example: Modifying... [id=/subscriptions/<SUB ID>/resourceGroups/example-rg/providers/Microsoft.DesktopVirtualization/scalingPlans/regular-scalingplan]
azurerm_virtual_desktop_scaling_plan.example: Modifications complete after 3s [id=/subscriptions/<SUB ID>/resourceGroups/example-rg/providers/Microsoft.DesktopVirtualization/scalingPlans/regular-scalingplan]
╷
│ Error: updating Scaling Plan (Subscription: "<SUB ID>"
│ Resource Group Name: "example-rg"
│ Scaling Plan Name: "holiday-scalingplan"): unexpected status 400 with error: 400: ActivityId: e4a56646-173e-4820-88a2-8a85aa4beee9 Error: ≤{"error":{"code":"BadRequest","message":"Host pools already assigned to another scaling plan: '/subscriptions/<SUB ID>/resourceGroups/example-rg/providers/Microsoft.DesktopVirtualization/hostPools/example-hostpool'","target":"/api/scalingPlans/subscriptions/<SUB ID>/resourceGroups/example-rg/scalingPlans/holiday-scalingplan"}}≥
│ 
│   with azurerm_virtual_desktop_scaling_plan.holiday,
│   on main.tf line 98, in resource "azurerm_virtual_desktop_scaling_plan" "holiday":
│   98: resource "azurerm_virtual_desktop_scaling_plan" "holiday" {
│ 
╵

I hope that helps explain why I think this new resource would be beneficial

Copy link
Member

@mbfrahry mbfrahry left a comment

Choose a reason for hiding this comment

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

Hey @alexwilcox9, I can see the use for this resource after you walked me through how awful it is to achieve what you're trying to do.

I've left another review as I do have concerns that bringing this resource in will cause breaking changes as you've changed existing tests.

}
}

func ScalingPlanHostPoolAssociationID(input string) (*ScalingPlanHostPoolAssociationId, error) {
Copy link
Member

Choose a reason for hiding this comment

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

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Just wanted to clarify on this front - this ID is made up of two existing resource IDs that already have tests written so should my tests duplicate those and build up both resource IDs from scratch or just test the parsing of the two combined

For example testing the following
/subscriptions/12345678-1234-9876-4563-123456789012/resourceGroups/example-resource-group/providers/Microsoft.DesktopVirtualization/scalingPlans/scalingPlanValue Invalid
/subscriptions/12345678-1234-9876-4563-123456789012/resourceGroups/example-resource-group/providers/Microsoft.DesktopVirtualization/scalingPlans/scalingPlanValue|/subscriptions/12345678-1234-9876-4563-123456789012/resourceGroups/example-resource-group/providers/Microsoft.DesktopVirtualization/hostPools/hostPoolValue Valid
/subscriptions/12345678-1234-9876-4563-123456789012/resourceGroups/example-resource-group/providers/Microsoft.DesktopVirtualization/scalingPlans/scalingPlanValue|/subscriptions/12345678-1234-9876-4563-123456789012/resourceGroups/example-resource-group/providers/Microsoft.DesktopVirtualization/hostPools/hostPoolValue|/extra Invalid

@@ -128,37 +128,6 @@ resource "azurerm_resource_group" "test" {
location = "westeurope"
}

resource "azurerm_role_definition" "test" {
Copy link
Member

Choose a reason for hiding this comment

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

We really shouldn't change existing tests as breaking changes could pop up because a test was changed and broke an existing test but changing the config masked the breaking change

Copy link
Contributor Author

Choose a reason for hiding this comment

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

I saw an opportunity to tidy up the tests, when Scaling Plans first released they were only in a handful of regions and didn't have a built in role so creating a custom one was required.
Now there's a built in role and more regions are supported so wanted to update the tests to reflect that

Copy link

This PR is being labeled as "stale" because it has not been updated for 30 or more days.

If this PR is still valid, please remove the "stale" label. If this PR is blocked, please add it to the "Blocked" milestone.

If you need some help completing this PR, please leave a comment letting us know. Thank you!

@alexwilcox9
Copy link
Contributor Author

Hey, thanks for the review and apologies for the delay in getting back to it. I've replied to your comments and made some changes

@github-actions github-actions bot removed the stale label May 23, 2024
@alexwilcox9 alexwilcox9 force-pushed the avd-sp-assign branch 2 times, most recently from fdf3dd0 to 6af0167 Compare May 23, 2024 23:27
@alexwilcox9
Copy link
Contributor Author

I also found that during any create/update/delete operation the scaling plans schedule would disappear.
I'm not sure why this happens as other attributes like description and time zone that I don't touch are left alone. In any case, I've added the existing schedules to the patch properties and that seems to solve it

Copy link
Collaborator

@katbyte katbyte left a comment

Choose a reason for hiding this comment

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

Thanks for the changes @alexwilcox9 - Looks like this is missing documentation for the new resource. once that is added i think this can be reviewed one final time and merged

Copy link
Collaborator

@katbyte katbyte left a comment

Choose a reason for hiding this comment

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

Thanks @alexwilcox9 ! LGTM 🍖

@katbyte katbyte merged commit 729b190 into hashicorp:main Jun 28, 2024
34 checks passed
katbyte added a commit that referenced this pull request Jun 28, 2024
@github-actions github-actions bot added this to the v3.110.0 milestone Jun 28, 2024
dduportal referenced this pull request in jenkins-infra/azure Jun 28, 2024
<Actions>
<action
id="f410411e63aff4bb73a81c2aec1d373cf8a903e63b30dee2006b0030d8a94cc8">
        <h3>Bump Terraform `azurerm` provider version</h3>
<details
id="1d9343c012f5434ac9fe8a98135bae3667b399259be16d9b14302ea3bd424a24">
            <summary>Update Terraform lock file</summary>
<p>changes detected:&#xA;&#x9;&#34;hashicorp/azurerm&#34; updated from
&#34;3.109.0&#34; to &#34;3.110.0&#34; in file
&#34;.terraform.lock.hcl&#34;</p>
            <details>
                <summary>3.110.0</summary>
<pre>Changelog retrieved
from:&#xA;&#x9;https://github.com/hashicorp/terraform-provider-azurerm/releases/tag/v3.110.0&#xA;FEATURES:&#xA;&#xA;*
**New Data Source:** `azurerm_load_test`
([#26376](hashicorp/terraform-provider-azurerm#26376
**New Resource:**
`azurerm_virtual_desktop_scaling_plan_host_pool_association`
([#24670](https://github.com/hashicorp/terraform-provider-azurerm/issues/24670))&#xA;&#xA;ENHANCEMENTS:&#xA;&#xA;*
Data Source: `azurerm_monitor_data_collection_endpoint` - support for
the `immutable_id` property
([#26380](hashicorp/terraform-provider-azurerm#26380
Data Source: `azurerm_nginx_certificate` - export the properties
`sha1_thumbprint`, `key_vault_secret_version`,
`key_vault_secret_creation_date`, `error_code` and `error_message`
([#26160](hashicorp/terraform-provider-azurerm#26160
`azurerm_backup_policy_vm` - support for the `tiering_policy` property
([#26263](hashicorp/terraform-provider-azurerm#26263
`azurerm_kubernetes_cluster_node_pool` - Pod Disruption Budgets are now
respected when deleting a node pool
([#26471](hashicorp/terraform-provider-azurerm#26471
`azurerm_monitor_data_collection_endpoint` - support for the
`immutable_id` property
([#26380](hashicorp/terraform-provider-azurerm#26380
`azurerm_mssql_managed_instance` - support the value `GZRS` for the
`storage_account_type` property
([#26448](hashicorp/terraform-provider-azurerm#26448
`azurerm_mssql_managed_instance_transparent_data_encryption` - support
for the `managed_hsm_key_id` property
([#26496](hashicorp/terraform-provider-azurerm#26496
`azurerm_redis_cache_access_policy` - allow updates to `permissions`
([#26440](hashicorp/terraform-provider-azurerm#26440
`azurerm_redhat_openshift_cluster` - support for the
`managed_resource_group_name` property
([#25529](hashicorp/terraform-provider-azurerm#25529
`azurerm_redhat_openshift_cluster` - support for the
`preconfigured_network_security_group_enabled` property
([#26082](hashicorp/terraform-provider-azurerm#26082
`azurerm_iotcentral_application` - remove Computed from `template` and
set default of `[email protected]` in 4.0
([#26485](hashicorp/terraform-provider-azurerm#26485
`azurerm_digital_twins_time_series_database_connection` - remove
Computed from `kusto_table_name` and set a default of
`AdtPropertyEvents` in 4.0
([#26484](https://github.com/hashicorp/terraform-provider-azurerm/issues/26484))&#xA;&#xA;BUG
FIXES:&#xA;&#xA;* Data Source: `azurerm_express_route_circuit_peering` -
fix issue where data source attempts to parse an empty string instead of
generating the resource ID
([#26441](hashicorp/terraform-provider-azurerm#26441
`azurerm_express_route_gateway` - prevent a panic
([#26467](hashicorp/terraform-provider-azurerm#26467
`azurerm_monitor_scheduled_query_rules_alert_v2` - correctly handle the
`identity` block if not specified
([#26364](hashicorp/terraform-provider-azurerm#26364
`azurerm_security_center_automation` - prevent resource recreation when
`tags` are updated
([#26292](hashicorp/terraform-provider-azurerm#26292
`azurerm_synapse_workspace` - fix issue where `azure_devops_repo` or
`github_repo` configuration could not be removed
([#26421](hashicorp/terraform-provider-azurerm#26421
`azurerm_virtual_network_dns_servers` - split create and update function
to fix lifecycle - ignore
([#26427](hashicorp/terraform-provider-azurerm#26427
`azurerm_linux_function_app` - set `allowed_applications` in the request
payload
([#26462](hashicorp/terraform-provider-azurerm#26462
`azurerm_linux_function_app_slot` - set `allowed_applications` in the
request payload
([#26462](hashicorp/terraform-provider-azurerm#26462
`azurerm_windows_function_app` - set `allowed_applications` in the
request payload
([#26462](hashicorp/terraform-provider-azurerm#26462
`azurerm_windows_function_app_slot` - set `allowed_applications` in the
request payload
([#26462](hashicorp/terraform-provider-azurerm#26462
`azurerm_linux_web_app` - set `allowed_applications` in the request
payload
([#26462](hashicorp/terraform-provider-azurerm#26462
`azurerm_linux_web_app_slot` - set `allowed_applications` in the request
payload
([#26462](hashicorp/terraform-provider-azurerm#26462
`azurerm_windows_web_app` - set `allowed_applications` in the request
payload
([#26462](hashicorp/terraform-provider-azurerm#26462
`azurerm_windows_web_app_slot` - set `allowed_applications` in the
request payload
([#26462](hashicorp/terraform-provider-azurerm#26462
`azurerm_api_management` - remove ForceNew from
`additional_location.zones`
([#26384](hashicorp/terraform-provider-azurerm#26384
`azurerm_logic_app_integration_account_schema` - the `name` property now
allows underscores
([#26475](hashicorp/terraform-provider-azurerm#26475
`azurerm_palo_alto_local_rulestack_rule` - prevent error when switching
between `protocol` and `protocol_ports`
([#26490](https://github.com/hashicorp/terraform-provider-azurerm/issues/26490))&#xA;&#xA;DEPRECATIONS:&#xA;&#xA;*
`azurerm_analysis_service_server` - the property
`enable_power_bi_service` has been superseded by
`power_bi_service_enabled`
([#26456](https://github.com/hashicorp/terraform-provider-azurerm/issues/26456))&#xA;&#xA;&#xA;</pre>
            </details>
        </details>
<a
href="https://infra.ci.jenkins.io/job/updatecli/job/azure/job/main/287/">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]>
@alexwilcox9 alexwilcox9 deleted the avd-sp-assign branch June 28, 2024 09:40
Copy link

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.
If you have found a problem that seems related to this change, please open a new issue and complete the issue template so we can capture all the details necessary to investigate further.

@github-actions github-actions bot locked as resolved and limited conversation to collaborators Jul 31, 2024
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
documentation new-virtual-resource Resources which are split out to enhance the user experience service/virtual-desktops size/XL
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants