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 data source azurerm_ip_groups #24540

Merged
merged 7 commits into from
Jan 23, 2024
Merged

New data source azurerm_ip_groups #24540

merged 7 commits into from
Jan 23, 2024

Conversation

KyMidd
Copy link
Contributor

@KyMidd KyMidd commented Jan 17, 2024

azurerm_ip_group data source only permits fetching the info of one data source. This data intends to fetch the data from multiple IP Groups within a resource group by using the name attribute as a substring match.

Tests passing:

❯ make acctests SERVICE='network' TESTARGS='-run=TestAccDataSourceIPGroups_' TESTTIMEOUT='10m'
==> 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 -v ./internal/services/network -run=TestAccDataSourceIPGroups_ -timeout 10m -ldflags="-X=github.com/hashicorp/terraform-provider-azurerm/version.ProviderVersion=acc"
=== RUN   TestAccDataSourceIPGroups_noResults
=== PAUSE TestAccDataSourceIPGroups_noResults
=== RUN   TestAccDataSourceIPGroups_single
=== PAUSE TestAccDataSourceIPGroups_single
=== RUN   TestAccDataSourceIPGroups_multiple
=== PAUSE TestAccDataSourceIPGroups_multiple
=== CONT  TestAccDataSourceIPGroups_noResults
=== CONT  TestAccDataSourceIPGroups_multiple
=== CONT  TestAccDataSourceIPGroups_single
--- PASS: TestAccDataSourceIPGroups_multiple (49.75s)
--- PASS: TestAccDataSourceIPGroups_noResults (112.59s)
--- PASS: TestAccDataSourceIPGroups_single (112.70s)
PASS
ok  	github.com/hashicorp/terraform-provider-azurerm/internal/services/network	116.525s

@KyMidd KyMidd marked this pull request as draft January 17, 2024 22:44
@tombuildsstuff
Copy link
Contributor

hey @KyMidd

Thanks for this PR.

Data Sources (and Resources) are only written to the state when they've got a Resource ID associated with them - as in this case the Data Source isn't calling d.SetID( there's no Resource ID - meaning this isn't tracked in the state.

Since this Data Source is listing the IP Groups available within the specified Resource Group, it'd make sense to use the Resource Group ID as the ID for this Data Source - which is available in commonids as commonids.NewResourceGroupID - meaning that if you add:

subscriptionId := meta.(*clients.Client).Account.SubscriptionID
id := commonids.NewResourceGroupID(subscriptionId, resourceGroupName)
d.SetID(id.ID())

Then this Data Source should start being tracked in the state (and means that the tests will pass) - would you be able to take a look and see if that works for you?

Thanks!

@KyMidd
Copy link
Contributor Author

KyMidd commented Jan 18, 2024

Data Sources (and Resources) are only written to the state when they've got a Resource ID associated with them

Ooooooooohhhhhh! Thank you, that helps a ton! With that change, and a little cleanup of the tests, I'm able to compile the provider and this functionality works! 🥳

Interestingly, the checks are still failing, poking at that now. All tests are now working! PR is ready for review.

@KyMidd KyMidd marked this pull request as ready for review January 19, 2024 18:31
Copy link
Member

@stephybun stephybun 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 this PR @KyMidd.

Overall this looks fine, I left a minor comment on the use of sets in data sources. Once that's been addressed we can run the tests and if they run through this should be good to go!

Also just as an aside, we currently have a mix of untyped and typed resources/data sources in the provider with the goal being to move all untyped resource/data source to typed ones in preparation for the next major release of the provider.

Since (I think?) this is your first contribution to the provider I'm not going to ask you to convert this into a typed data source, but for future contributions I'd recommend checking out our Contributor Docs on adding new types resources/data sources 🙂

internal/services/network/ip_groups_data_source.go Outdated Show resolved Hide resolved
internal/services/network/ip_groups_data_source.go Outdated Show resolved Hide resolved
@KyMidd
Copy link
Contributor Author

KyMidd commented Jan 22, 2024

Since (I think?) this is your first contribution to the provider

It is my first contribution! 🎉

I'm not going to ask you to convert this into a typed data source, but for future contributions I'd recommend checking out our Contributor Docs on adding new types resources/data sources 🙂

I'm a n00b at Go, so I don't fully understand but I'll read the docs over and educate myself. Hopefully I can come back here later once I understand and fix this up to be better compliant.

Once that's been addressed we can run the tests and if they run through this should be good to go!

Done! Thanks so much for the info and suggested code blocks 😸 Ran the tests again, all passing after your suggested changes:

❯ make acctests SERVICE='network' TESTARGS='-run=TestAccDataSourceIPGroups_' TESTTIMEOUT='10m'

==> 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 -v ./internal/services/network -run=TestAccDataSourceIPGroups_ -timeout 10m -ldflags="-X=github.com/hashicorp/terraform-provider-azurerm/version.ProviderVersion=acc"
=== RUN   TestAccDataSourceIPGroups_noResults
=== PAUSE TestAccDataSourceIPGroups_noResults
=== RUN   TestAccDataSourceIPGroups_single
=== PAUSE TestAccDataSourceIPGroups_single
=== RUN   TestAccDataSourceIPGroups_multiple
=== PAUSE TestAccDataSourceIPGroups_multiple
=== CONT  TestAccDataSourceIPGroups_noResults
=== CONT  TestAccDataSourceIPGroups_single
=== CONT  TestAccDataSourceIPGroups_multiple
--- PASS: TestAccDataSourceIPGroups_single (139.73s)
--- PASS: TestAccDataSourceIPGroups_noResults (142.29s)
--- PASS: TestAccDataSourceIPGroups_multiple (145.38s)
PASS
ok  	github.com/hashicorp/terraform-provider-azurerm/internal/services/network	149.550s

@tiwood
Copy link
Contributor

tiwood commented Jan 22, 2024

If I'm understanding this correctly, this new DS is only returning the names and resource IDs of IP groups in a given RG.

This can already be accomplished using the azurerm_resources data source:

data "azurerm_resources" "example" {
  resource_group_name = "example-resources"
  type  = "Microsoft.Network/IpGroups"
}

@KyMidd
Copy link
Contributor Author

KyMidd commented Jan 22, 2024

This can already be accomplished using the azurerm_resources data source:

Oh, that's awesome! I didn't realize that existed. It doesn't appear to also offer name filtering, but that could for sure be done as a secondary action.

I think it's still useful to have data lookups like this, because they're so easy to consume and use. Defer to you and the team if you'd prefer to not use these bespoke data lookups. :)

FWIW, I've asked around with the teams I work with, and none were aware this data resource exists. Perhaps it could be better called out in documentation? I can look at that!

@KyMidd
Copy link
Contributor Author

KyMidd commented Jan 22, 2024

I mocked that locally, and it's not nearly as easy to use the azurerm_resources vs this resource type. I think it's still a great idea to move forward with these bespoke resources, and folks can use the azurerm_resources with sufficient knowledge or if the bespoke resources don't yet exist.

Here's an example of using this new resource:

data "azurerm_ip_groups" "example" {
  resource_group_name = "example-resources"
  name = "substring"
}
output "names" {
  value = data.azurerm_ip_groups.example.names
}

And here's the identical functionality using the azurerm_resources resource. Anytime the answer is "just use regex" I think we should consider simpler alternatives :)

data "azurerm_resources" "example" {
  resource_group_name = "example-resources"
  type  = "Microsoft.Network/IpGroups"
}
output "names" {
  [for r in data.azurerm_resources.example.resources : r.name if can(regex("substring", r.name))]
}

Copy link
Member

@stephybun stephybun 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 making those changes @KyMidd! The linter is still failing but it seems to be error'ing on something outside of this project, so I'm going to ignore it. LGTM 🚀

@stephybun stephybun merged commit 656be2b into hashicorp:main Jan 23, 2024
32 of 33 checks passed
@github-actions github-actions bot added this to the v3.89.0 milestone Jan 23, 2024
@KyMidd KyMidd deleted the ip-groups-data-source branch January 23, 2024 16:00
Copy link

This functionality has been released in v3.89.0 of the Terraform Provider. Please see the Terraform documentation on provider versioning or reach out if you need any assistance upgrading.

For further feature requests or bug reports with this functionality, please create a new GitHub issue following the template. Thank you!

dduportal added a commit to jenkins-infra/azure that referenced this pull request Jan 25, 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.88.0&#34; to &#34;3.89.0&#34; in file
&#34;.terraform.lock.hcl&#34;</p>
            <details>
                <summary>3.89.0</summary>
<pre>Changelog retrieved
from:&#xA;&#x9;https://github.com/hashicorp/terraform-provider-azurerm/releases/tag/v3.89.0&#xA;FEATURES:&#xA;&#xA;*
New Data Source: `azurerm_data_factory_trigger_schedule`
([#24572](hashicorp/terraform-provider-azurerm#24572
New Data Source: `azurerm_data_factory_trigger_schedules`
([#24572](hashicorp/terraform-provider-azurerm#24572
New Data Source: `azurerm_ip_groups`
([#24540](hashicorp/terraform-provider-azurerm#24540
New Data Source: `azurerm_nginx_certificate`
([#24577](hashicorp/terraform-provider-azurerm#24577
New Resource: `azurerm_chaos_studio_target`
([#24580](hashicorp/terraform-provider-azurerm#24580
New Resource: `azurerm_elastic_san_volume_group`
([#24166](hashicorp/terraform-provider-azurerm#24166
New Resource: `azurerm_netapp_account_encryption`
([#23733](hashicorp/terraform-provider-azurerm#23733
New Resource: `azurerm_redhat_openshift_cluster`
([#24375](https://github.com/hashicorp/terraform-provider-azurerm/issues/24375))&#xA;&#xA;ENHANCEMENTS:&#xA;&#xA;*
dependencies: updating to `v0.66.1` of
`github.com/hashicorp/go-azure-helpers`
([#24561](hashicorp/terraform-provider-azurerm#24561
dependencies: updating to `v0.20240124.1115501` of
`github.com/hashicorp/go-azure-sdk`
([#24619](hashicorp/terraform-provider-azurerm#24619
`bot`: updating to API Version `2021-05-01-preview`
([#24555](hashicorp/terraform-provider-azurerm#24555
`containerservice`: the SDK Clients now support logging
([#24564](hashicorp/terraform-provider-azurerm#24564
`cosmosdb`: updating to API Version `2023-04-15`
([#24541](hashicorp/terraform-provider-azurerm#24541
`loadtestservice`: updating to use the base layer from
`hashicorp/go-azure-sdk` rather than `Azure/go-autorest` (and support
logging)
([#24578](hashicorp/terraform-provider-azurerm#24578
`managedidentity`: updating to use the base layer from
`hashicorp/go-azure-sdk` rather than `Azure/go-autorest` (and support
logging)
([#24578](hashicorp/terraform-provider-azurerm#24578
`azurerm_api_management_api` - change the `id` format so specific
`revision`s can be managed by Terraform
([#23031](hashicorp/terraform-provider-azurerm#23031
`azurerm_data_protection_backup_vault` - the `redundancy` propety can
now be set to `ZoneRedundant`
([#24556](hashicorp/terraform-provider-azurerm#24556
`azurerm_data_factory_integration_runtime_azure_ssis` - support for the
`credential_name` property
([#24458](hashicorp/terraform-provider-azurerm#24458
`azurerm_orchestrated_virtual_machine_scale_set` - support
`2022-datacenter-azure-edition-hotpatch` and
`2022-datacenter-azure-edition-hotpatch-smalldisk` hotpatching images
([#23500](hashicorp/terraform-provider-azurerm#23500
`azurerm_stream_analytics_job` - support for the `sku_name` property
([#24554](https://github.com/hashicorp/terraform-provider-azurerm/issues/24554))&#xA;&#xA;BUG
FIXES:&#xA;&#xA;* Data Source: `azurerm_app_service` - parsing the API
Response for `app_service_plan_id` case-insensitively
([#24626](hashicorp/terraform-provider-azurerm#24626
Data Source: `azurerm_function_app` - parsing the API Response for
`app_service_plan_id` case-insensitively
([#24626](hashicorp/terraform-provider-azurerm#24626
`azurerm_app_configuration_key` - the value for the `value` property can
now be removed/emptied
([#24582](https://github.com/hashicorp/terraform-provider-azurerm/issues/24582))&#xA;&#xA;*
`azurerm_app_service` - parsing the API Response for
`app_service_plan_id` case-insensitively
([#24626](hashicorp/terraform-provider-azurerm#24626
`azurerm_app_service_plan` - fix casing in `serverFarms` due to ID
update
([#24562](hashicorp/terraform-provider-azurerm#24562
`azurerm_app_service_slot` - parsing the API Response for
`app_service_plan_id` case-insensitively
([#24626](hashicorp/terraform-provider-azurerm#24626
`azurerm_automation_schedule` - only one `monthly_occurence` block can
now be specified
([#24614](hashicorp/terraform-provider-azurerm#24614
`azurerm_cognitive_deployment` - the `model.version` property is no
longer required
([#24264](hashicorp/terraform-provider-azurerm#24264
`azurerm_container_app` - multiple `custom_scale_rule` can not be
updated
([#24509](hashicorp/terraform-provider-azurerm#24509
`azurerm_container_registry_task_schedule_run_now` - prevent issue where
the incorrect scheduled run in tracked if there have been multiple
([#24592](hashicorp/terraform-provider-azurerm#24592
`azurerm_function_app` - parsing the API Response for
`app_service_plan_id` case-insensitively
([#24626](hashicorp/terraform-provider-azurerm#24626
`azurerm_function_app_slot` - parsing the API Response for
`app_service_plan_id` case-insensitively
([#24626](hashicorp/terraform-provider-azurerm#24626
`azurerm_logic_app_standard` - now will parse the app service ID
insensitively
([#24562](hashicorp/terraform-provider-azurerm#24562
`azurerm_logic_app_workflow` - the `workflow_parameters` will now
correctly handle information specified by `$connections`
([#24141](hashicorp/terraform-provider-azurerm#24141
`azurerm_mssql_managed_instance_security_alert_policy` - can not update
empty storage attributes
([#24553](hashicorp/terraform-provider-azurerm#24553
`azurerm_network_interface` - the `ip_configuration` properties are no
longer added to a Load Balancer Backend if one of those
`ip_configurations` is associated with a backend
([#24470](https://github.com/hashicorp/terraform-provider-azurerm/issues/24470))&#xA;&#xA;&#xA;</pre>
            </details>
        </details>
<a
href="https://infra.ci.jenkins.io/job/terraform-jobs/job/azure/job/main/1052/">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]>
Co-authored-by: Damien Duportal <[email protected]>
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 Apr 27, 2024
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants