Repository navigation
Expand file tree
/
Copy pathmain.telemetry.tf
More file actions
71 lines (62 loc) · 2.51 KB
/
Copy pathmain.telemetry.tf
File metadata and controls
71 lines (62 loc) · 2.51 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
data "azapi_client_config" "telemetry" {
count = var.enable_telemetry ? 1 : 0
}
locals {
avm_metadata = jsondecode(file("${path.module}/metadata.json"))
avm_telemetry_manifest_path = "${path.root}/.terraform/modules/modules.json"
avm_telemetry_modules = fileexists(local.avm_telemetry_manifest_path) ? jsondecode(file(local.avm_telemetry_manifest_path)).Modules : []
avm_telemetry_module_entry = try(one([for module in local.avm_telemetry_modules : module if module.Dir == path.module]), null)
avm_module_version = try(local.avm_telemetry_module_entry.Version, "")
avm_module_source = try(local.avm_telemetry_module_entry.Source, "")
}
locals {
avm_module_source_type = (
can(regex("^registry[.]terraform[.]io/", local.avm_module_source)) ? "t" :
can(regex("^registry[.]opentofu[.]org/", local.avm_module_source)) ? "o" :
can(regex("^git::", local.avm_module_source)) ? "g" :
"x"
)
}
locals {
avm_telemetry_version_token = replace(coalesce(local.avm_module_version, "0.0.0"), ".", "-")
}
locals {
main_location = var.location
}
resource "terraform_data" "telemetry" {
count = var.enable_telemetry ? 1 : 0
}
resource "azapi_resource" "telemetry" {
count = var.enable_telemetry ? 1 : 0
location = local.main_location
name = "${local.avm_metadata.telemetryIdPrefix}.${local.avm_telemetry_version_token}.${local.avm_module_source_type}.${substr(sha1(terraform_data.telemetry[0].id), 0, 4)}"
parent_id = one(data.azapi_client_config.telemetry).subscription_resource_id
type = "Microsoft.Resources/deployments@2025-04-01"
body = {
properties = {
mode = "Incremental"
template = {
"$schema" = "https://schema.management.azure.com/schemas/2018-05-01/subscriptionDeploymentTemplate.json#"
contentVersion = "1.0.0.0"
resources = []
outputs = {
telemetry = {
type = "String"
value = "For more information, see https://aka.ms/avm/TelemetryInfo"
}
apply_id = {
type = "String"
value = plantimestamp()
}
}
}
}
}
response_export_values = []
lifecycle {
precondition {
condition = length(local.avm_metadata.telemetryIdPrefix) + length(local.avm_telemetry_version_token) + 8 <= 64 && can(regex("^[A-Za-z0-9_-]+$", local.avm_telemetry_version_token))
error_message = "The telemetry deployment name must fit Azure's 64-character limit and contain a valid module version."
}
}
}