Skip to content

Commit cc332cc

Browse files
New Data Source: azurerm_dev_center_environment_type (#29782)
[FEATURE] * **New Data Source**: `azurerm_dev_center_environment_type`
1 parent b13c4a9 commit cc332cc

File tree

4 files changed

+183
-0
lines changed

4 files changed

+183
-0
lines changed
Lines changed: 96 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,96 @@
1+
// Copyright (c) HashiCorp, Inc.
2+
// SPDX-License-Identifier: MPL-2.0
3+
4+
package devcenter
5+
6+
import (
7+
"context"
8+
"fmt"
9+
"time"
10+
11+
"github.com/hashicorp/go-azure-helpers/lang/pointer"
12+
"github.com/hashicorp/go-azure-helpers/lang/response"
13+
"github.com/hashicorp/go-azure-helpers/resourcemanager/commonschema"
14+
"github.com/hashicorp/go-azure-sdk/resource-manager/devcenter/2025-02-01/devcenters"
15+
"github.com/hashicorp/go-azure-sdk/resource-manager/devcenter/2025-02-01/environmenttypes"
16+
"github.com/hashicorp/terraform-provider-azurerm/internal/sdk"
17+
"github.com/hashicorp/terraform-provider-azurerm/internal/services/devcenter/validate"
18+
"github.com/hashicorp/terraform-provider-azurerm/internal/tf/pluginsdk"
19+
)
20+
21+
var _ sdk.DataSource = DevCenterEnvironmentTypeDataSource{}
22+
23+
type DevCenterEnvironmentTypeDataSource struct{}
24+
25+
type DevCenterEnvironmentTypeDataSourceModel struct {
26+
Name string `tfschema:"name"`
27+
DevCenterId string `tfschema:"dev_center_id"`
28+
Tags map[string]string `tfschema:"tags"`
29+
}
30+
31+
func (DevCenterEnvironmentTypeDataSource) Arguments() map[string]*pluginsdk.Schema {
32+
return map[string]*pluginsdk.Schema{
33+
"name": {
34+
Type: pluginsdk.TypeString,
35+
Required: true,
36+
ValidateFunc: validate.DevCenterEnvironmentTypeName,
37+
},
38+
39+
"dev_center_id": commonschema.ResourceIDReferenceRequired(&environmenttypes.DevCenterId{}),
40+
}
41+
}
42+
43+
func (DevCenterEnvironmentTypeDataSource) Attributes() map[string]*pluginsdk.Schema {
44+
return map[string]*pluginsdk.Schema{
45+
"tags": commonschema.TagsDataSource(),
46+
}
47+
}
48+
49+
func (DevCenterEnvironmentTypeDataSource) ModelObject() interface{} {
50+
return &DevCenterEnvironmentTypeDataSourceModel{}
51+
}
52+
53+
func (DevCenterEnvironmentTypeDataSource) ResourceType() string {
54+
return "azurerm_dev_center_environment_type"
55+
}
56+
57+
func (r DevCenterEnvironmentTypeDataSource) Read() sdk.ResourceFunc {
58+
return sdk.ResourceFunc{
59+
Timeout: 5 * time.Minute,
60+
Func: func(ctx context.Context, metadata sdk.ResourceMetaData) error {
61+
client := metadata.Client.DevCenter.V20250201.EnvironmentTypes
62+
subscriptionId := metadata.Client.Account.SubscriptionId
63+
64+
var state DevCenterEnvironmentTypeDataSourceModel
65+
if err := metadata.Decode(&state); err != nil {
66+
return fmt.Errorf("decoding: %+v", err)
67+
}
68+
69+
devCenterId, err := devcenters.ParseDevCenterID(state.DevCenterId)
70+
if err != nil {
71+
return err
72+
}
73+
74+
id := environmenttypes.NewDevCenterEnvironmentTypeID(subscriptionId, devCenterId.ResourceGroupName, devCenterId.DevCenterName, state.Name)
75+
76+
resp, err := client.EnvironmentTypesGet(ctx, id)
77+
if err != nil {
78+
if response.WasNotFound(resp.HttpResponse) {
79+
return fmt.Errorf("%s was not found", id)
80+
}
81+
82+
return fmt.Errorf("retrieving %s: %+v", id, err)
83+
}
84+
85+
metadata.SetID(id)
86+
87+
if model := resp.Model; model != nil {
88+
state.Name = id.EnvironmentTypeName
89+
state.DevCenterId = environmenttypes.NewDevCenterID(id.SubscriptionId, id.ResourceGroupName, id.DevCenterName).ID()
90+
state.Tags = pointer.From(model.Tags)
91+
}
92+
93+
return metadata.Encode(&state)
94+
},
95+
}
96+
}
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
// Copyright (c) HashiCorp, Inc.
2+
// SPDX-License-Identifier: MPL-2.0
3+
4+
package devcenter_test
5+
6+
import (
7+
"fmt"
8+
"testing"
9+
10+
"github.com/hashicorp/terraform-provider-azurerm/internal/acceptance"
11+
"github.com/hashicorp/terraform-provider-azurerm/internal/acceptance/check"
12+
)
13+
14+
type DevCenterEnvironmentTypeDataSource struct{}
15+
16+
func TestAccDevCenterEnvironmentTypeDataSource_basic(t *testing.T) {
17+
data := acceptance.BuildTestData(t, "data.azurerm_dev_center_environment_type", "test")
18+
r := DevCenterEnvironmentTypeDataSource{}
19+
20+
data.DataSourceTest(t, []acceptance.TestStep{
21+
{
22+
Config: r.basic(data),
23+
Check: acceptance.ComposeTestCheckFunc(
24+
check.That(data.ResourceName).Key("name").Exists(),
25+
check.That(data.ResourceName).Key("dev_center_id").Exists(),
26+
),
27+
},
28+
})
29+
}
30+
31+
func (d DevCenterEnvironmentTypeDataSource) basic(data acceptance.TestData) string {
32+
return fmt.Sprintf(`
33+
%s
34+
35+
data "azurerm_dev_center_environment_type" "test" {
36+
name = azurerm_dev_center_environment_type.test.name
37+
dev_center_id = azurerm_dev_center_environment_type.test.dev_center_id
38+
}
39+
`, DevCenterEnvironmentTypeTestResource{}.basic(data))
40+
}

internal/services/devcenter/registration.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ func (r Registration) DataSources() []sdk.DataSource {
3131
DevCenterCatalogDataSource{},
3232
DevCenterDataSource{},
3333
DevCenterDevBoxDefinitionDataSource{},
34+
DevCenterEnvironmentTypeDataSource{},
3435
DevCenterGalleryDataSource{},
3536
DevCenterNetworkConnectionDataSource{},
3637
DevCenterProjectDataSource{},
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
---
2+
subcategory: "Dev Center"
3+
layout: "azurerm"
4+
page_title: "Azure Resource Manager: Data Source: azurerm_dev_center_environment_type"
5+
description: |-
6+
Gets information about an existing Dev Center Environment Type.
7+
---
8+
9+
# Data Source: azurerm_dev_center_environment_type
10+
11+
Use this data source to access information about an existing Dev Center Environment Type.
12+
13+
## Example Usage
14+
15+
```hcl
16+
data "azurerm_dev_center_environment_type" "example" {
17+
name = azurerm_dev_center_environment_type.example.name
18+
dev_center_id = azurerm_dev_center_environment_type.example.dev_center_id
19+
}
20+
21+
output "id" {
22+
value = data.azurerm_dev_center_environment_type.example.id
23+
}
24+
```
25+
26+
## Arguments Reference
27+
28+
The following arguments are supported:
29+
30+
* `name` - (Required) The name of this Dev Center Environment Type.
31+
32+
* `dev_center_id` - (Required) The ID of the associated Dev Center.
33+
34+
## Attributes Reference
35+
36+
In addition to the Arguments listed above - the following Attributes are exported:
37+
38+
* `id` - The ID of the Dev Center Environment Type.
39+
40+
* `tags` - A mapping of tags assigned to the Dev Center Environment Type.
41+
42+
## Timeouts
43+
44+
The `timeouts` block allows you to specify [timeouts](https://www.terraform.io/language/resources/syntax#operation-timeouts) for certain actions:
45+
46+
* `read` - (Defaults to 5 minutes) Used when retrieving the Dev Center Environment Type.

0 commit comments

Comments
 (0)