Skip to content

Commit 55b1d88

Browse files
authored
Add AutoDiscoveryConfiguration to the Azure credential (#1987)
* Add AutoDiscoveryConfiguration to the Azure credential * Implement AutoDiscoveryConfiguration for the Azure credential * fmt * generate docs
1 parent 1c9315d commit 55b1d88

File tree

8 files changed

+616
-37
lines changed

8 files changed

+616
-37
lines changed

docs/data-sources/cloud_provider_azure_credential.md

+52
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,29 @@ resource "grafana_cloud_provider_azure_credential" "test" {
2828
key = "key-2"
2929
value = "value-2"
3030
}
31+
32+
auto_discovery_configuration {
33+
subscription_id = "my-subscription_id"
34+
35+
resource_type_configurations {
36+
resource_type_name = "Microsoft.App/containerApps"
37+
38+
metric_configuration {
39+
name = "TotalCoresQuotaUsed"
40+
}
41+
}
42+
43+
resource_type_configurations {
44+
resource_type_name = "Microsoft.Storage/storageAccounts/tableServices"
45+
46+
metric_configuration {
47+
name = "Availability"
48+
dimensions = ["GeoType", "ApiName"]
49+
aggregations = ["Average"]
50+
}
51+
}
52+
53+
}
3154
}
3255
3356
@@ -47,13 +70,42 @@ data "grafana_cloud_provider_azure_credential" "test" {
4770

4871
### Read-Only
4972

73+
- `auto_discovery_configuration` (Block List) The list of auto discovery configurations. (see [below for nested schema](#nestedblock--auto_discovery_configuration))
5074
- `client_id` (String) The client ID of the Azure Credential.
5175
- `client_secret` (String, Sensitive) The client secret of the Azure Credential.
5276
- `id` (String) The Terraform Resource ID. This has the format "{{ stack_id }}:{{ resource_id }}".
5377
- `name` (String) The name of the Azure Credential.
5478
- `resource_discovery_tag_filter` (Block List) The list of tag filters to apply to resources. (see [below for nested schema](#nestedblock--resource_discovery_tag_filter))
5579
- `tenant_id` (String) The tenant ID of the Azure Credential.
5680

81+
<a id="nestedblock--auto_discovery_configuration"></a>
82+
### Nested Schema for `auto_discovery_configuration`
83+
84+
Read-Only:
85+
86+
- `resource_type_configurations` (List of Object) The list of resource type configurations. (see [below for nested schema](#nestedatt--auto_discovery_configuration--resource_type_configurations))
87+
- `subscription_id` (String) The subscription ID of the Azure account.
88+
89+
<a id="nestedatt--auto_discovery_configuration--resource_type_configurations"></a>
90+
### Nested Schema for `auto_discovery_configuration.resource_type_configurations`
91+
92+
Read-Only:
93+
94+
- `metric_configuration` (List of Object) (see [below for nested schema](#nestedobjatt--auto_discovery_configuration--resource_type_configurations--metric_configuration))
95+
- `resource_type_name` (String)
96+
97+
<a id="nestedobjatt--auto_discovery_configuration--resource_type_configurations--metric_configuration"></a>
98+
### Nested Schema for `auto_discovery_configuration.resource_type_configurations.metric_configuration`
99+
100+
Read-Only:
101+
102+
- `aggregations` (List of String)
103+
- `dimensions` (List of String)
104+
- `name` (String)
105+
106+
107+
108+
57109
<a id="nestedblock--resource_discovery_tag_filter"></a>
58110
### Nested Schema for `resource_discovery_tag_filter`
59111

docs/resources/cloud_provider_azure_credential.md

+52
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,29 @@ resource "grafana_cloud_provider_azure_credential" "test" {
2929
key = "key-2"
3030
value = "value-2"
3131
}
32+
33+
auto_discovery_configuration {
34+
subscription_id = "my-subscription_id"
35+
36+
resource_type_configurations {
37+
resource_type_name = "Microsoft.App/containerApps"
38+
39+
metric_configuration {
40+
name = "TotalCoresQuotaUsed"
41+
}
42+
}
43+
44+
resource_type_configurations {
45+
resource_type_name = "Microsoft.Storage/storageAccounts/tableServices"
46+
47+
metric_configuration {
48+
name = "Availability"
49+
dimensions = ["GeoType", "ApiName"]
50+
aggregations = ["Average"]
51+
}
52+
}
53+
54+
}
3255
}
3356
```
3457

@@ -45,13 +68,42 @@ resource "grafana_cloud_provider_azure_credential" "test" {
4568

4669
### Optional
4770

71+
- `auto_discovery_configuration` (Block List) The list of auto discovery configurations. (see [below for nested schema](#nestedblock--auto_discovery_configuration))
4872
- `resource_discovery_tag_filter` (Block List) The list of tag filters to apply to resources. (see [below for nested schema](#nestedblock--resource_discovery_tag_filter))
4973

5074
### Read-Only
5175

5276
- `id` (String) The Terraform Resource ID. This has the format "{{ stack_id }}:{{ resource_id }}".
5377
- `resource_id` (String) The ID given by the Grafana Cloud Provider API to this AWS Account resource.
5478

79+
<a id="nestedblock--auto_discovery_configuration"></a>
80+
### Nested Schema for `auto_discovery_configuration`
81+
82+
Required:
83+
84+
- `resource_type_configurations` (List of Object) The list of resource type configurations. (see [below for nested schema](#nestedatt--auto_discovery_configuration--resource_type_configurations))
85+
- `subscription_id` (String) The subscription ID of the Azure account.
86+
87+
<a id="nestedatt--auto_discovery_configuration--resource_type_configurations"></a>
88+
### Nested Schema for `auto_discovery_configuration.resource_type_configurations`
89+
90+
Required:
91+
92+
- `metric_configuration` (List of Object) (see [below for nested schema](#nestedobjatt--auto_discovery_configuration--resource_type_configurations--metric_configuration))
93+
- `resource_type_name` (String)
94+
95+
<a id="nestedobjatt--auto_discovery_configuration--resource_type_configurations--metric_configuration"></a>
96+
### Nested Schema for `auto_discovery_configuration.resource_type_configurations.metric_configuration`
97+
98+
Required:
99+
100+
- `aggregations` (List of String)
101+
- `dimensions` (List of String)
102+
- `name` (String)
103+
104+
105+
106+
55107
<a id="nestedblock--resource_discovery_tag_filter"></a>
56108
### Nested Schema for `resource_discovery_tag_filter`
57109

examples/data-sources/grafana_cloud_provider_azure_credential/data-source.tf

+23
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,29 @@ resource "grafana_cloud_provider_azure_credential" "test" {
1313
key = "key-2"
1414
value = "value-2"
1515
}
16+
17+
auto_discovery_configuration {
18+
subscription_id = "my-subscription_id"
19+
20+
resource_type_configurations {
21+
resource_type_name = "Microsoft.App/containerApps"
22+
23+
metric_configuration {
24+
name = "TotalCoresQuotaUsed"
25+
}
26+
}
27+
28+
resource_type_configurations {
29+
resource_type_name = "Microsoft.Storage/storageAccounts/tableServices"
30+
31+
metric_configuration {
32+
name = "Availability"
33+
dimensions = ["GeoType", "ApiName"]
34+
aggregations = ["Average"]
35+
}
36+
}
37+
38+
}
1639
}
1740

1841

examples/resources/grafana_cloud_provider_azure_credential/resource.tf

+23
Original file line numberDiff line numberDiff line change
@@ -14,4 +14,27 @@ resource "grafana_cloud_provider_azure_credential" "test" {
1414
key = "key-2"
1515
value = "value-2"
1616
}
17+
18+
auto_discovery_configuration {
19+
subscription_id = "my-subscription_id"
20+
21+
resource_type_configurations {
22+
resource_type_name = "Microsoft.App/containerApps"
23+
24+
metric_configuration {
25+
name = "TotalCoresQuotaUsed"
26+
}
27+
}
28+
29+
resource_type_configurations {
30+
resource_type_name = "Microsoft.Storage/storageAccounts/tableServices"
31+
32+
metric_configuration {
33+
name = "Availability"
34+
dimensions = ["GeoType", "ApiName"]
35+
aggregations = ["Average"]
36+
}
37+
}
38+
39+
}
1740
}

internal/common/cloudproviderapi/client.go

+19
Original file line numberDiff line numberDiff line change
@@ -214,6 +214,25 @@ type AzureCredential struct {
214214

215215
// ResourceTagFilters is the list of Azure resource tag filters.
216216
ResourceTagFilters []TagFilter `json:"resource_tag_filters"`
217+
218+
// AutoDiscoveryConfiguration is the configuration for auto-discovery of Azure resources.
219+
AutoDiscoveryConfiguration []AutoDiscoveryConfiguration `json:"auto_discovery_configuration"`
220+
}
221+
222+
type AutoDiscoveryConfiguration struct {
223+
SubscriptionID string `json:"subscription_id"`
224+
ResourceTypeConfigurations []ResourceTypeConfiguration `json:"resource_type_configurations"`
225+
}
226+
227+
type ResourceTypeConfiguration struct {
228+
ResourceTypeName string `json:"resource_type_name"`
229+
MetricConfiguration []MetricConfiguration `json:"metric_configuration"`
230+
}
231+
232+
type MetricConfiguration struct {
233+
Name string `json:"name"`
234+
Dimensions []string `json:"dimensions"`
235+
Aggregations []string `json:"aggregations"`
217236
}
218237

219238
type TagFilter struct {

internal/resources/cloudprovider/azure_credential_test.go

+107-7
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ func TestAcc_AzureCredential(t *testing.T) {
2626
"tenant_id": "my_tenant_id",
2727
"client_id": "my_client_id",
2828
"client_secret": "",
29-
"stack_id":"1",
29+
"stack_id": "1",
3030
"resource_tag_filters": [
3131
{
3232
"key": "key-1",
@@ -36,10 +36,38 @@ func TestAcc_AzureCredential(t *testing.T) {
3636
"key": "key-2",
3737
"value": "value-2"
3838
}
39-
39+
],
40+
"auto_discovery_configuration": [
41+
{
42+
"subscription_id": "my-subscription_id",
43+
"resource_type_configurations": [
44+
{
45+
"resource_type_name": "Microsoft.App/containerApps",
46+
"metric_configuration": [
47+
{
48+
"name": "TotalCoresQuotaUsed"
49+
}
50+
]
51+
},
52+
{
53+
"resource_type_name": "Microsoft.Storage/storageAccounts/tableServices",
54+
"metric_configuration": [
55+
{
56+
"name": "Availability",
57+
"dimensions": [
58+
"GeoType",
59+
"ApiName"
60+
],
61+
"aggregations": [ "Average" ]
62+
}
63+
]
64+
}
65+
]
66+
}
4067
]
4168
}
42-
}`, resourceID)))
69+
}
70+
`, resourceID)))
4371
}
4472
})
4573

@@ -65,10 +93,38 @@ func TestAcc_AzureCredential(t *testing.T) {
6593
"key": "key-2",
6694
"value": "value-2"
6795
}
68-
96+
],
97+
"auto_discovery_configuration": [
98+
{
99+
"subscription_id": "my-subscription_id",
100+
"resource_type_configurations": [
101+
{
102+
"resource_type_name": "Microsoft.App/containerApps",
103+
"metric_configuration": [
104+
{
105+
"name": "TotalCoresQuotaUsed"
106+
}
107+
]
108+
},
109+
{
110+
"resource_type_name": "Microsoft.Storage/storageAccounts/tableServices",
111+
"metric_configuration": [
112+
{
113+
"name": "Availability",
114+
"dimensions": [
115+
"GeoType",
116+
"ApiName"
117+
],
118+
"aggregations": [ "Average" ]
119+
}
120+
]
121+
}
122+
]
123+
}
69124
]
70125
}
71-
}`, resourceID)))
126+
}
127+
`, resourceID)))
72128
case http.MethodPut:
73129
w.WriteHeader(http.StatusOK)
74130
_, _ = w.Write([]byte(fmt.Sprintf(`
@@ -89,10 +145,38 @@ func TestAcc_AzureCredential(t *testing.T) {
89145
"key": "key-2",
90146
"value": "value-2"
91147
}
92-
148+
],
149+
"auto_discovery_configuration": [
150+
{
151+
"subscription_id": "my-subscription_id",
152+
"resource_type_configurations": [
153+
{
154+
"resource_type_name": "Microsoft.App/containerApps",
155+
"metric_configuration": [
156+
{
157+
"name": "TotalCoresQuotaUsed"
158+
}
159+
]
160+
},
161+
{
162+
"resource_type_name": "Microsoft.Storage/storageAccounts/tableServices",
163+
"metric_configuration": [
164+
{
165+
"name": "Availability",
166+
"dimensions": [
167+
"GeoType",
168+
"ApiName"
169+
],
170+
"aggregations": [ "Average" ]
171+
}
172+
]
173+
}
174+
]
175+
}
93176
]
94177
}
95-
}`, resourceID)))
178+
}
179+
`, resourceID)))
96180

97181
case http.MethodDelete:
98182
w.WriteHeader(http.StatusNoContent)
@@ -126,6 +210,14 @@ func TestAcc_AzureCredential(t *testing.T) {
126210
resource.TestCheckResourceAttr("grafana_cloud_provider_azure_credential.test", "resource_discovery_tag_filter.1.key", "key-2"),
127211
resource.TestCheckResourceAttr("grafana_cloud_provider_azure_credential.test", "resource_discovery_tag_filter.0.value", "value-1"),
128212
resource.TestCheckResourceAttr("grafana_cloud_provider_azure_credential.test", "resource_discovery_tag_filter.1.value", "value-2"),
213+
resource.TestCheckResourceAttr("grafana_cloud_provider_azure_credential.test", "auto_discovery_configuration.0.subscription_id", "my-subscription_id"),
214+
resource.TestCheckResourceAttr("grafana_cloud_provider_azure_credential.test", "auto_discovery_configuration.0.resource_type_configurations.0.resource_type_name", "Microsoft.App/containerApps"),
215+
resource.TestCheckResourceAttr("grafana_cloud_provider_azure_credential.test", "auto_discovery_configuration.0.resource_type_configurations.0.metric_configuration.0.name", "TotalCoresQuotaUsed"),
216+
resource.TestCheckResourceAttr("grafana_cloud_provider_azure_credential.test", "auto_discovery_configuration.0.resource_type_configurations.1.resource_type_name", "Microsoft.Storage/storageAccounts/tableServices"),
217+
resource.TestCheckResourceAttr("grafana_cloud_provider_azure_credential.test", "auto_discovery_configuration.0.resource_type_configurations.1.metric_configuration.0.name", "Availability"),
218+
resource.TestCheckResourceAttr("grafana_cloud_provider_azure_credential.test", "auto_discovery_configuration.0.resource_type_configurations.1.metric_configuration.0.dimensions.0", "GeoType"),
219+
resource.TestCheckResourceAttr("grafana_cloud_provider_azure_credential.test", "auto_discovery_configuration.0.resource_type_configurations.1.metric_configuration.0.dimensions.1", "ApiName"),
220+
resource.TestCheckResourceAttr("grafana_cloud_provider_azure_credential.test", "auto_discovery_configuration.0.resource_type_configurations.1.metric_configuration.0.aggregations.0", "Average"),
129221
),
130222
},
131223
{
@@ -143,6 +235,14 @@ func TestAcc_AzureCredential(t *testing.T) {
143235
resource.TestCheckResourceAttr("data.grafana_cloud_provider_azure_credential.test", "resource_discovery_tag_filter.1.key", "key-2"),
144236
resource.TestCheckResourceAttr("data.grafana_cloud_provider_azure_credential.test", "resource_discovery_tag_filter.0.value", "value-1"),
145237
resource.TestCheckResourceAttr("data.grafana_cloud_provider_azure_credential.test", "resource_discovery_tag_filter.1.value", "value-2"),
238+
resource.TestCheckResourceAttr("data.grafana_cloud_provider_azure_credential.test", "auto_discovery_configuration.0.subscription_id", "my-subscription_id"),
239+
resource.TestCheckResourceAttr("data.grafana_cloud_provider_azure_credential.test", "auto_discovery_configuration.0.resource_type_configurations.0.resource_type_name", "Microsoft.App/containerApps"),
240+
resource.TestCheckResourceAttr("data.grafana_cloud_provider_azure_credential.test", "auto_discovery_configuration.0.resource_type_configurations.0.metric_configuration.0.name", "TotalCoresQuotaUsed"),
241+
resource.TestCheckResourceAttr("data.grafana_cloud_provider_azure_credential.test", "auto_discovery_configuration.0.resource_type_configurations.1.resource_type_name", "Microsoft.Storage/storageAccounts/tableServices"),
242+
resource.TestCheckResourceAttr("data.grafana_cloud_provider_azure_credential.test", "auto_discovery_configuration.0.resource_type_configurations.1.metric_configuration.0.name", "Availability"),
243+
resource.TestCheckResourceAttr("data.grafana_cloud_provider_azure_credential.test", "auto_discovery_configuration.0.resource_type_configurations.1.metric_configuration.0.dimensions.0", "GeoType"),
244+
resource.TestCheckResourceAttr("data.grafana_cloud_provider_azure_credential.test", "auto_discovery_configuration.0.resource_type_configurations.1.metric_configuration.0.dimensions.1", "ApiName"),
245+
resource.TestCheckResourceAttr("data.grafana_cloud_provider_azure_credential.test", "auto_discovery_configuration.0.resource_type_configurations.1.metric_configuration.0.aggregations.0", "Average"),
146246
),
147247
},
148248
},

0 commit comments

Comments
 (0)