-
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
New Data Source: azurerm_system_center_virtual_machine_manager_inventory_items
#25110
New Data Source: azurerm_system_center_virtual_machine_manager_inventory_items
#25110
Conversation
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 @neil-yechenwei,
Thanks for this PR - I've taken a look through and left some comments inline. If we can fix those up, this should be good to go 👍
...ervirtualmachinemanager/system_center_virtual_machine_manager_inventory_items_data_source.go
Outdated
Show resolved
Hide resolved
...ervirtualmachinemanager/system_center_virtual_machine_manager_inventory_items_data_source.go
Outdated
Show resolved
Hide resolved
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.
@neil-yechenwei, thank you for your updates. LGTM~
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 have a couple of suggestions and questions, could you take a look at them please @neil-yechenwei? Thanks!
return err | ||
} | ||
|
||
scvmmServerId, err := inventoryitems.ParseVMmServerIDInsensitively(state.SystemCenterVirtualMachineManagerServerId) |
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.
Is there a specific reason we're parsing this insensitively?
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.
Tom suggests to use insensitively. See more details from #23628 (comment).
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 is coming from a user specified value rather than an API returned value - so should be case-sensitive.
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.
Updated
return err | ||
} | ||
|
||
id := fmt.Sprintf("%s/inventoryItems", scvmmServerId.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.
Why aren't we constructing this ID with inventoryitems.NewInventoryItemID()
?
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.
Reason 1: inventoryitems.NewInventoryItemID()
points to the dependent Inventory Item resource and service team expects us to not expose it to users.
Reason 2: Setting inventoryitems.NewInventoryItemID()
requires the specified Inventory Item Id but this data source is used to expose a list of Inventory Items. So I assume that we couldn't set it with any Inventory Item Id in the list.
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 should not be defining Terraform specific Resource IDs where they aren't absolutely necessary - this is a great example of where we should be using the SCVMM Server ID rather than creating something random - can we update this as @stephybun mentions
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.
Updated to use SCVMM Server ID.
if model := resp.Model; model != nil { | ||
inventoryItems := flattenInventoryItems(model) | ||
if len(inventoryItems) == 0 { | ||
return fmt.Errorf("no inventory items were found for the System Center Virtual Machine Manager Server %q", scvmmServerId) |
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.
The string formatting of the ID already provides the relevant information
return fmt.Errorf("no inventory items were found for the System Center Virtual Machine Manager Server %q", scvmmServerId) | |
return fmt.Errorf("no inventory items were found for %s", scvmmServerId) |
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.
Updated
|
||
* `id` - The ID of the System Center Virtual Machine Manager Inventory Items. | ||
|
||
* `inventory_items` - One or more `inventory_item` blocks as defined below. |
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.
The property name in the schema is inventory_items
so that should be used everywhere
* `inventory_items` - One or more `inventory_item` blocks as defined below. | |
* `inventory_items` - One or more `inventory_items` blocks as defined below. |
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.
Updated
|
||
--- | ||
|
||
A `inventory_item` block exports the following: |
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.
A `inventory_item` block exports the following: | |
A `inventory_items` block exports the following: |
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.
Updated
@stephybun , thanks for the comments. I updated PR. Please take another look. Thanks. |
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.
test failure:
------- Stdout: -------
=== RUN TestAccDataSourceSystemCenterVirtualMachineManagerInventoryItems_basic
=== PAUSE TestAccDataSourceSystemCenterVirtualMachineManagerInventoryItems_basic
=== CONT TestAccDataSourceSystemCenterVirtualMachineManagerInventoryItems_basic
testcase.go:113: Step 1/1 error: Error running pre-apply refresh: exit status 1
Error: parsing "": cannot parse an empty string
with azurerm_system_center_virtual_machine_manager_server.test,
on terraform_plugin_test.tf line 37, in resource "azurerm_system_center_virtual_machine_manager_server" "test":
37: custom_location_id = ""
Error: expected "fqdn" to not be an empty string, got
with azurerm_system_center_virtual_machine_manager_server.test,
on terraform_plugin_test.tf line 38, in resource "azurerm_system_center_virtual_machine_manager_server" "test":
38: fqdn = ""
Error: expected "username" to not be an empty string, got
with azurerm_system_center_virtual_machine_manager_server.test,
on terraform_plugin_test.tf line 39, in resource "azurerm_system_center_virtual_machine_manager_server" "test":
39: username = ""
Error: expected "password" to not be an empty string, got
with azurerm_system_center_virtual_machine_manager_server.test,
on terraform_plugin_test.tf line 40, in resource "azurerm_system_center_virtual_machine_manager_server" "test":
40: password = ""
--- FAIL: TestAccDataSourceSystemCenterVirtualMachineManagerInventoryItems_basic (3.09s)
FAIL
@katbyte , the PR is updated. Please take another look. Thanks. Below is the test result I just now triggered. --- PASS: TestAccDataSourceSystemCenterVirtualMachineManagerInventoryItems_basic (240.62s) |
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.
Left some comments inline, but I suspect for this Data Source to be useful given the number of items that could be returned, that we'll want some filter options here?
id string `tfschema:"id"` | ||
name string `tfschema:"name"` |
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.
neither of these two fields is exported, so would need to be to be set into the state
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 have already exposed them.
return err | ||
} | ||
|
||
scvmmServerId, err := inventoryitems.ParseVMmServerIDInsensitively(state.SystemCenterVirtualMachineManagerServerId) |
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 is coming from a user specified value rather than an API returned value - so should be case-sensitive.
return err | ||
} | ||
|
||
id := fmt.Sprintf("%s/inventoryItems", scvmmServerId.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 should not be defining Terraform specific Resource IDs where they aren't absolutely necessary - this is a great example of where we should be using the SCVMM Server ID rather than creating something random - can we update this as @stephybun mentions
if v, ok := props.(inventoryitems.CloudInventoryItem); ok { | ||
inventoryItem.name = pointer.From(v.InventoryItemName) | ||
inventoryItem.Uuid = pointer.From(v.Uuid) | ||
inventoryItem.InventoryType = string(inventoryitems.InventoryTypeCloud) | ||
} else if v, ok := props.(inventoryitems.VirtualMachineInventoryItem); ok { | ||
inventoryItem.name = pointer.From(v.InventoryItemName) | ||
inventoryItem.Uuid = pointer.From(v.Uuid) | ||
inventoryItem.InventoryType = string(inventoryitems.InventoryTypeVirtualMachine) | ||
} else if v, ok := props.(inventoryitems.VirtualMachineTemplateInventoryItem); ok { | ||
inventoryItem.name = pointer.From(v.InventoryItemName) | ||
inventoryItem.Uuid = pointer.From(v.Uuid) | ||
inventoryItem.InventoryType = string(inventoryitems.InventoryTypeVirtualMachineTemplate) | ||
} else if v, ok := props.(inventoryitems.VirtualNetworkInventoryItem); ok { | ||
inventoryItem.name = pointer.From(v.InventoryItemName) | ||
inventoryItem.Uuid = pointer.From(v.Uuid) | ||
inventoryItem.InventoryType = string(inventoryitems.InventoryTypeVirtualNetwork) | ||
} |
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.
Given the number of items that could be returned here, this isn't going to be particularly usable.
Perhaps it'd be sensible to add a Name
and Type
filter to this resource, to obtain an Item
rather than a list of Items
, to make this more useful?
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.
The Inventory Items are automatically created by the service while creating System Center Virtual Machine Manager. Service team confirmed that the end users can't create the Inventory Items. So the users don't know the "Name" of the Inventory Item when getting an specific Inventory Item. Hence, I made this data source to get a list of Inventory Items.
But seems it makes sense to add a filter "Inventory Type". So I updated PR to add a filter "Inventory Type" to get a list of the inventory items by the "Inventory Type".
@tombuildsstuff , thanks for the comments. I updated PR. Please take another look. Thanks. --- PASS: TestAccDataSourceSystemCenterVirtualMachineManagerInventoryItems_basic (291.44s) |
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.
LGTM 🚂
<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.97.1" to "3.98.0" in file ".terraform.lock.hcl"</p> <details> <summary>3.98.0</summary> <pre>Changelog retrieved from:
	https://github.com/hashicorp/terraform-provider-azurerm/releases/tag/v3.98.0
FEATURES:

* New Resource: `azurerm_static_web_app_function_app_registration` ([#25331](hashicorp/terraform-provider-azurerm#25331 New Resource: `azurerm_system_center_virtual_machine_manager_inventory_items` ([#25110](hashicorp/terraform-provider-azurerm#25110 New Resource: `azurerm_workloads_sap_discovery_virtual_instance` ([#24342](hashicorp/terraform-provider-azurerm#24342 New Resource: `azurerm_redis_cache_policy` ([#25477](hashicorp/terraform-provider-azurerm#25477 New Resource: `azurerm_redis_cache_policy_assignment` ([#25477](https://github.com/hashicorp/terraform-provider-azurerm/issues/25477))

ENHANCEMENTS:

* dependencies: updating to `v0.20240402.1085733` of `github.com/hashicorp/go-azure-sdk` ([#25482](hashicorp/terraform-provider-azurerm#25482 dependencies: updating to `v0.67.0` of `github.com/hashicorp/go-azure-helpers` ([#25446](hashicorp/terraform-provider-azurerm#25446 dependencies: updating to `v0.25.4` of `github.com/tombuildsstuff/giovanni` ([#25404](hashicorp/terraform-provider-azurerm#25404 `alertsmanagement` - updating remaining resources to use `hashicorp/go-azure-sdk` ([#25486](hashicorp/terraform-provider-azurerm#25486 `applicationinsights` - updating remaining resources to use `hashicorp/go-azure-sdk` ([#25376](hashicorp/terraform-provider-azurerm#25376 `compute` - update to API version `2024-03-01` ([#25436](hashicorp/terraform-provider-azurerm#25436 `compute` - update shared image resources and data sources to use `hashicorp/go-azure-sdk` ([#25503](hashicorp/terraform-provider-azurerm#25503 `containerinstance` - update to use the transport layer from `hashicorp/go-azure-sdk` rather than `Azure/go-autorest` ([#25416](hashicorp/terraform-provider-azurerm#25416 `maintenance` - updating to API Version `2023-04-01` ([#25388](hashicorp/terraform-provider-azurerm#25388 `recovery_services` - Add `recovery_service` block to the provider that supports `vm_backup_stop_protection_and_retain_data_on_destroy` and `purge_protected_items_from_vault_on_destroy`([#25515](hashicorp/terraform-provider-azurerm#25515 `storage` - the Storage Account cache is now populated using `hashicorp/go-azure-sdk` ([#25437](hashicorp/terraform-provider-azurerm#25437 `azurerm_bot_service_azure_bot` - support for the `cmk_key_vault_key_url` property ([#23640](hashicorp/terraform-provider-azurerm#23640 `azurerm_capacity_reservation` - update validation for `capacity` ([#25471](hashicorp/terraform-provider-azurerm#25471 `azurerm_container_app` - add support for `key_vault_id` and `identity` properties in the `secret` block ([#24773](hashicorp/terraform-provider-azurerm#24773 `azurerm_databricks_workspace` - expose `managed_services_cmk_key_vault_id` and `managed_disk_cmk_key_vault_id and key_vault_id` to support cross subscription CMK's. ([#25091](hashicorp/terraform-provider-azurerm#25091 `azurerm_databricks_workspace_root_dbfs_customer_managed_key` - expose `key_vault_id` to support cross subscription CMK's. ([#25091](hashicorp/terraform-provider-azurerm#25091 `azurerm_managed_hsm_role_*_ids` - use specific resource id to replace generic nested item id ([#25323](hashicorp/terraform-provider-azurerm#25323 `azurerm_mssql_database` - add support for `secondary_type` ([#25360](hashicorp/terraform-provider-azurerm#25360 `azurerm_monitor_scheduled_query_rules_alert_v2` - support for the `identity` block ([#25365](hashicorp/terraform-provider-azurerm#25365 `azurerm_mssql_server_extended_auditing_policy` - support for `audit_actions_and_groups` and `predicate_expression` ([#25425](hashicorp/terraform-provider-azurerm#25425 `azurerm_netapp_account` - can now be imported ([#25384](hashicorp/terraform-provider-azurerm#25384 `azurerm_netapp_volume` - support for the `kerberos_enabled`, `smb_continuous_availability_enabled`, `kerberos_5_read_only_enabled`, `kerberos_5_read_write_enabled`, `kerberos_5i_read_only_enabled`, `kerberos_5i_read_write_enabled`, `kerberos_5p_read_only_enabled`, and `kerberos_5p_read_write_enabled` properties ([#25385](hashicorp/terraform-provider-azurerm#25385 `azurerm_recovery_services_vault` - upgrading to version `2024-01-01` ([#25325](hashicorp/terraform-provider-azurerm#25325 `azurerm_stack_hci_cluster` - the `client_id` property is now optional ([#25407](hashicorp/terraform-provider-azurerm#25407 `azurerm_storage_encryption_scope` - refactoring to use `hashicorp/go-azure-sdk` rather than `Azure/azure-sdk-for-go` ([#25437](hashicorp/terraform-provider-azurerm#25437 `azurerm_mssql_elasticpool` - the `maintenance_configuration_name` property now supports values `SQL_SouthAfricaNorth_DB_1`, `SQL_SouthAfricaNorth_DB_2`, `SQL_WestUS3_DB_1` and `SQL_WestUS3_DB_2` ([#25500](hashicorp/terraform-provider-azurerm#25500 `azurerm_lighthouse_assignment` - updating API Version from `2019-06-01` to `2022-10-01` ([#25473](https://github.com/hashicorp/terraform-provider-azurerm/issues/25473))

BUG FIXES:

* `network` - updating the `GatewaySubnet` validation to show the Subnet Name when the validation fails ([#25484](hashicorp/terraform-provider-azurerm#25484 `azurerm_function_app_hybrid_connection` - fix an issue during creation when `send_key_name` is specified ([#25379](hashicorp/terraform-provider-azurerm#25379 `azurerm_linux_web_app_slot` - fix a crash when upgrading the provider to v3.88.0 or later ([#25406](hashicorp/terraform-provider-azurerm#25406 `azurerm_mssql_database` - update the behavior of the `enclave_type` field. ([#25508](hashicorp/terraform-provider-azurerm#25508 `azurerm_mssql_elasticpool` - update the behavior of the `enclave_type` field. ([#25508](hashicorp/terraform-provider-azurerm#25508 `azurerm_network_manager_deployment` - add locking ([#25368](hashicorp/terraform-provider-azurerm#25368 `azurerm_resource_group_template_deployment` - changes to `parameters_content` and `template_content` now force `output_content` to be updated in the plan ([#25403](hashicorp/terraform-provider-azurerm#25403 `azurerm_storage_blob` - fix a potential crash when the endpoint is unreachable ([#25404](hashicorp/terraform-provider-azurerm#25404 `azurerm_storage_container` - fix a potential crash when the endpoint is unreachable ([#25404](hashicorp/terraform-provider-azurerm#25404 `azurerm_storage_data_lake_gen2_filesystem` - fix a potential crash when the endpoint is unreachable ([#25404](hashicorp/terraform-provider-azurerm#25404 `azurerm_storage_data_lake_gen2_filesystem_path` - fix a potential crash when the endpoint is unreachable ([#25404](hashicorp/terraform-provider-azurerm#25404 `azurerm_storage_queue` - fix a potential crash when the endpoint is unreachable ([#25404](hashicorp/terraform-provider-azurerm#25404 `azurerm_storage_share` - fix a potential crash when the endpoint is unreachable ([#25404](hashicorp/terraform-provider-azurerm#25404 `azurerm_storage_share_directory` - fix a potential crash when the endpoint is unreachable ([#25404](hashicorp/terraform-provider-azurerm#25404 `azurerm_storage_share_directory` - resolve an issue where directories might fail to destroy ([#25404](hashicorp/terraform-provider-azurerm#25404 `azurerm_storage_share_file` - fix a potential crash when the endpoint is unreachable ([#25404](hashicorp/terraform-provider-azurerm#25404 `azurerm_storage_share_file` - fix several bugs with path handling when creating files in subdirectories ([#25404](hashicorp/terraform-provider-azurerm#25404 `azurerm_web_app_hybrid_connection` - fix an issue during creation when `send_key_name` is specified ([#25379](hashicorp/terraform-provider-azurerm#25379 `azurerm_windows_web_app` - prevent a panic during resource upgrade ([#25509](https://github.com/hashicorp/terraform-provider-azurerm/issues/25509))


</pre> </details> </details> <a href="https://infra.ci.jenkins.io/job/updatecli/job/azure/job/main/88/">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. |
The System Center Virtual Machine Manager Cloud requires the uuid of the System Center Virtual Machine Manager Inventory Item that is assigned by System Center Virtual Machine Manager Server. So service team suggests us to implement Inventory Items List API to get the UUIDs of Inventory Items.
--- PASS: TestAccDataSourceSystemCenterVirtualMachineManagerInventoryItems_basic (297.48s)
References:
Azure doc
REST API specs