Skip to content

Add AutoDiscoveryConfiguration to the Azure credential #1987

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

Merged
merged 5 commits into from
Jan 22, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
52 changes: 52 additions & 0 deletions docs/data-sources/cloud_provider_azure_credential.md
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,29 @@ resource "grafana_cloud_provider_azure_credential" "test" {
key = "key-2"
value = "value-2"
}

auto_discovery_configuration {
subscription_id = "my-subscription_id"

resource_type_configurations {
resource_type_name = "Microsoft.App/containerApps"

metric_configuration {
name = "TotalCoresQuotaUsed"
}
}

resource_type_configurations {
resource_type_name = "Microsoft.Storage/storageAccounts/tableServices"

metric_configuration {
name = "Availability"
dimensions = ["GeoType", "ApiName"]
aggregations = ["Average"]
}
}

}
}


Expand All @@ -47,13 +70,42 @@ data "grafana_cloud_provider_azure_credential" "test" {

### Read-Only

- `auto_discovery_configuration` (Block List) The list of auto discovery configurations. (see [below for nested schema](#nestedblock--auto_discovery_configuration))
- `client_id` (String) The client ID of the Azure Credential.
- `client_secret` (String, Sensitive) The client secret of the Azure Credential.
- `id` (String) The Terraform Resource ID. This has the format "{{ stack_id }}:{{ resource_id }}".
- `name` (String) The name of the Azure Credential.
- `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))
- `tenant_id` (String) The tenant ID of the Azure Credential.

<a id="nestedblock--auto_discovery_configuration"></a>
### Nested Schema for `auto_discovery_configuration`

Read-Only:

- `resource_type_configurations` (List of Object) The list of resource type configurations. (see [below for nested schema](#nestedatt--auto_discovery_configuration--resource_type_configurations))
- `subscription_id` (String) The subscription ID of the Azure account.

<a id="nestedatt--auto_discovery_configuration--resource_type_configurations"></a>
### Nested Schema for `auto_discovery_configuration.resource_type_configurations`

Read-Only:

- `metric_configuration` (List of Object) (see [below for nested schema](#nestedobjatt--auto_discovery_configuration--resource_type_configurations--metric_configuration))
- `resource_type_name` (String)

<a id="nestedobjatt--auto_discovery_configuration--resource_type_configurations--metric_configuration"></a>
### Nested Schema for `auto_discovery_configuration.resource_type_configurations.metric_configuration`

Read-Only:

- `aggregations` (List of String)
- `dimensions` (List of String)
- `name` (String)




<a id="nestedblock--resource_discovery_tag_filter"></a>
### Nested Schema for `resource_discovery_tag_filter`

Expand Down
52 changes: 52 additions & 0 deletions docs/resources/cloud_provider_azure_credential.md
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,29 @@ resource "grafana_cloud_provider_azure_credential" "test" {
key = "key-2"
value = "value-2"
}

auto_discovery_configuration {
subscription_id = "my-subscription_id"

resource_type_configurations {
resource_type_name = "Microsoft.App/containerApps"

metric_configuration {
name = "TotalCoresQuotaUsed"
}
}

resource_type_configurations {
resource_type_name = "Microsoft.Storage/storageAccounts/tableServices"

metric_configuration {
name = "Availability"
dimensions = ["GeoType", "ApiName"]
aggregations = ["Average"]
}
}

}
}
```

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

### Optional

- `auto_discovery_configuration` (Block List) The list of auto discovery configurations. (see [below for nested schema](#nestedblock--auto_discovery_configuration))
- `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))

### Read-Only

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

<a id="nestedblock--auto_discovery_configuration"></a>
### Nested Schema for `auto_discovery_configuration`

Required:

- `resource_type_configurations` (List of Object) The list of resource type configurations. (see [below for nested schema](#nestedatt--auto_discovery_configuration--resource_type_configurations))
- `subscription_id` (String) The subscription ID of the Azure account.

<a id="nestedatt--auto_discovery_configuration--resource_type_configurations"></a>
### Nested Schema for `auto_discovery_configuration.resource_type_configurations`

Required:

- `metric_configuration` (List of Object) (see [below for nested schema](#nestedobjatt--auto_discovery_configuration--resource_type_configurations--metric_configuration))
- `resource_type_name` (String)

<a id="nestedobjatt--auto_discovery_configuration--resource_type_configurations--metric_configuration"></a>
### Nested Schema for `auto_discovery_configuration.resource_type_configurations.metric_configuration`

Required:

- `aggregations` (List of String)
- `dimensions` (List of String)
- `name` (String)




<a id="nestedblock--resource_discovery_tag_filter"></a>
### Nested Schema for `resource_discovery_tag_filter`

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,29 @@ resource "grafana_cloud_provider_azure_credential" "test" {
key = "key-2"
value = "value-2"
}

auto_discovery_configuration {
subscription_id = "my-subscription_id"

resource_type_configurations {
resource_type_name = "Microsoft.App/containerApps"

metric_configuration {
name = "TotalCoresQuotaUsed"
}
}

resource_type_configurations {
resource_type_name = "Microsoft.Storage/storageAccounts/tableServices"

metric_configuration {
name = "Availability"
dimensions = ["GeoType", "ApiName"]
aggregations = ["Average"]
}
}

}
}


Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,4 +14,27 @@ resource "grafana_cloud_provider_azure_credential" "test" {
key = "key-2"
value = "value-2"
}

auto_discovery_configuration {
subscription_id = "my-subscription_id"

resource_type_configurations {
resource_type_name = "Microsoft.App/containerApps"

metric_configuration {
name = "TotalCoresQuotaUsed"
}
}

resource_type_configurations {
resource_type_name = "Microsoft.Storage/storageAccounts/tableServices"

metric_configuration {
name = "Availability"
dimensions = ["GeoType", "ApiName"]
aggregations = ["Average"]
}
}

}
}
19 changes: 19 additions & 0 deletions internal/common/cloudproviderapi/client.go
Original file line number Diff line number Diff line change
Expand Up @@ -214,6 +214,25 @@ type AzureCredential struct {

// ResourceTagFilters is the list of Azure resource tag filters.
ResourceTagFilters []TagFilter `json:"resource_tag_filters"`

// AutoDiscoveryConfiguration is the configuration for auto-discovery of Azure resources.
AutoDiscoveryConfiguration []AutoDiscoveryConfiguration `json:"auto_discovery_configuration"`
}

type AutoDiscoveryConfiguration struct {
SubscriptionID string `json:"subscription_id"`
ResourceTypeConfigurations []ResourceTypeConfiguration `json:"resource_type_configurations"`
}

type ResourceTypeConfiguration struct {
ResourceTypeName string `json:"resource_type_name"`
MetricConfiguration []MetricConfiguration `json:"metric_configuration"`
}

type MetricConfiguration struct {
Name string `json:"name"`
Dimensions []string `json:"dimensions"`
Aggregations []string `json:"aggregations"`
}

type TagFilter struct {
Expand Down
114 changes: 107 additions & 7 deletions internal/resources/cloudprovider/azure_credential_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ func TestAcc_AzureCredential(t *testing.T) {
"tenant_id": "my_tenant_id",
"client_id": "my_client_id",
"client_secret": "",
"stack_id":"1",
"stack_id": "1",
"resource_tag_filters": [
{
"key": "key-1",
Expand All @@ -36,10 +36,38 @@ func TestAcc_AzureCredential(t *testing.T) {
"key": "key-2",
"value": "value-2"
}

],
"auto_discovery_configuration": [
{
"subscription_id": "my-subscription_id",
"resource_type_configurations": [
{
"resource_type_name": "Microsoft.App/containerApps",
"metric_configuration": [
{
"name": "TotalCoresQuotaUsed"
}
]
},
{
"resource_type_name": "Microsoft.Storage/storageAccounts/tableServices",
"metric_configuration": [
{
"name": "Availability",
"dimensions": [
"GeoType",
"ApiName"
],
"aggregations": [ "Average" ]
}
]
}
]
}
]
}
}`, resourceID)))
}
`, resourceID)))
}
})

Expand All @@ -65,10 +93,38 @@ func TestAcc_AzureCredential(t *testing.T) {
"key": "key-2",
"value": "value-2"
}

],
"auto_discovery_configuration": [
{
"subscription_id": "my-subscription_id",
"resource_type_configurations": [
{
"resource_type_name": "Microsoft.App/containerApps",
"metric_configuration": [
{
"name": "TotalCoresQuotaUsed"
}
]
},
{
"resource_type_name": "Microsoft.Storage/storageAccounts/tableServices",
"metric_configuration": [
{
"name": "Availability",
"dimensions": [
"GeoType",
"ApiName"
],
"aggregations": [ "Average" ]
}
]
}
]
}
]
}
}`, resourceID)))
}
`, resourceID)))
case http.MethodPut:
w.WriteHeader(http.StatusOK)
_, _ = w.Write([]byte(fmt.Sprintf(`
Expand All @@ -89,10 +145,38 @@ func TestAcc_AzureCredential(t *testing.T) {
"key": "key-2",
"value": "value-2"
}

],
"auto_discovery_configuration": [
{
"subscription_id": "my-subscription_id",
"resource_type_configurations": [
{
"resource_type_name": "Microsoft.App/containerApps",
"metric_configuration": [
{
"name": "TotalCoresQuotaUsed"
}
]
},
{
"resource_type_name": "Microsoft.Storage/storageAccounts/tableServices",
"metric_configuration": [
{
"name": "Availability",
"dimensions": [
"GeoType",
"ApiName"
],
"aggregations": [ "Average" ]
}
]
}
]
}
]
}
}`, resourceID)))
}
`, resourceID)))

case http.MethodDelete:
w.WriteHeader(http.StatusNoContent)
Expand Down Expand Up @@ -126,6 +210,14 @@ func TestAcc_AzureCredential(t *testing.T) {
resource.TestCheckResourceAttr("grafana_cloud_provider_azure_credential.test", "resource_discovery_tag_filter.1.key", "key-2"),
resource.TestCheckResourceAttr("grafana_cloud_provider_azure_credential.test", "resource_discovery_tag_filter.0.value", "value-1"),
resource.TestCheckResourceAttr("grafana_cloud_provider_azure_credential.test", "resource_discovery_tag_filter.1.value", "value-2"),
resource.TestCheckResourceAttr("grafana_cloud_provider_azure_credential.test", "auto_discovery_configuration.0.subscription_id", "my-subscription_id"),
resource.TestCheckResourceAttr("grafana_cloud_provider_azure_credential.test", "auto_discovery_configuration.0.resource_type_configurations.0.resource_type_name", "Microsoft.App/containerApps"),
resource.TestCheckResourceAttr("grafana_cloud_provider_azure_credential.test", "auto_discovery_configuration.0.resource_type_configurations.0.metric_configuration.0.name", "TotalCoresQuotaUsed"),
resource.TestCheckResourceAttr("grafana_cloud_provider_azure_credential.test", "auto_discovery_configuration.0.resource_type_configurations.1.resource_type_name", "Microsoft.Storage/storageAccounts/tableServices"),
resource.TestCheckResourceAttr("grafana_cloud_provider_azure_credential.test", "auto_discovery_configuration.0.resource_type_configurations.1.metric_configuration.0.name", "Availability"),
resource.TestCheckResourceAttr("grafana_cloud_provider_azure_credential.test", "auto_discovery_configuration.0.resource_type_configurations.1.metric_configuration.0.dimensions.0", "GeoType"),
resource.TestCheckResourceAttr("grafana_cloud_provider_azure_credential.test", "auto_discovery_configuration.0.resource_type_configurations.1.metric_configuration.0.dimensions.1", "ApiName"),
resource.TestCheckResourceAttr("grafana_cloud_provider_azure_credential.test", "auto_discovery_configuration.0.resource_type_configurations.1.metric_configuration.0.aggregations.0", "Average"),
),
},
{
Expand All @@ -143,6 +235,14 @@ func TestAcc_AzureCredential(t *testing.T) {
resource.TestCheckResourceAttr("data.grafana_cloud_provider_azure_credential.test", "resource_discovery_tag_filter.1.key", "key-2"),
resource.TestCheckResourceAttr("data.grafana_cloud_provider_azure_credential.test", "resource_discovery_tag_filter.0.value", "value-1"),
resource.TestCheckResourceAttr("data.grafana_cloud_provider_azure_credential.test", "resource_discovery_tag_filter.1.value", "value-2"),
resource.TestCheckResourceAttr("data.grafana_cloud_provider_azure_credential.test", "auto_discovery_configuration.0.subscription_id", "my-subscription_id"),
resource.TestCheckResourceAttr("data.grafana_cloud_provider_azure_credential.test", "auto_discovery_configuration.0.resource_type_configurations.0.resource_type_name", "Microsoft.App/containerApps"),
resource.TestCheckResourceAttr("data.grafana_cloud_provider_azure_credential.test", "auto_discovery_configuration.0.resource_type_configurations.0.metric_configuration.0.name", "TotalCoresQuotaUsed"),
resource.TestCheckResourceAttr("data.grafana_cloud_provider_azure_credential.test", "auto_discovery_configuration.0.resource_type_configurations.1.resource_type_name", "Microsoft.Storage/storageAccounts/tableServices"),
resource.TestCheckResourceAttr("data.grafana_cloud_provider_azure_credential.test", "auto_discovery_configuration.0.resource_type_configurations.1.metric_configuration.0.name", "Availability"),
resource.TestCheckResourceAttr("data.grafana_cloud_provider_azure_credential.test", "auto_discovery_configuration.0.resource_type_configurations.1.metric_configuration.0.dimensions.0", "GeoType"),
resource.TestCheckResourceAttr("data.grafana_cloud_provider_azure_credential.test", "auto_discovery_configuration.0.resource_type_configurations.1.metric_configuration.0.dimensions.1", "ApiName"),
resource.TestCheckResourceAttr("data.grafana_cloud_provider_azure_credential.test", "auto_discovery_configuration.0.resource_type_configurations.1.metric_configuration.0.aggregations.0", "Average"),
),
},
},
Expand Down
Loading
Loading