Change factories_config type in FAST and project/vpc factory modules, add YAML schema validation (#3728)

* stage 0

* stage 1

* networking

* security

* pf stage

* tfdoc

* align schemas

* inventory

* fix observability

* pf module

* pf module budgets

* align fast stages

* align project subfactories

* tfdoc

* schema validation

* add missing schemas

* Fix observability types

---------

Co-authored-by: Julio Castillo <jccb@google.com>
This commit is contained in:
Ludovico Magnocavallo
2026-02-11 16:29:49 +01:00
committed by GitHub
parent bf3f7a555a
commit fb21f6aaf8
125 changed files with 1024 additions and 432 deletions

File diff suppressed because one or more lines are too long

View File

@@ -45,12 +45,14 @@ locals {
condition_absent = !can(c.condition_absent) ? null : {
duration = c.condition_absent.duration
filter = try(c.condition_absent.filter, null)
aggregations = !can(c.condition_absent.aggregations) ? null : {
per_series_aligner = try(c.condition_absent.aggregations.per_series_aligner, null)
group_by_fields = try(c.condition_absent.aggregations.group_by_fields, null)
cross_series_reducer = try(c.condition_absent.aggregations.cross_series_reducer, null)
alignment_period = try(c.condition_absent.aggregations.alignment_period, null)
}
aggregations = !can(c.condition_absent.aggregations) ? null : [
for a in c.condition_absent.aggregations : {
per_series_aligner = try(a.per_series_aligner, null)
group_by_fields = try(a.group_by_fields, null)
cross_series_reducer = try(a.cross_series_reducer, null)
alignment_period = try(a.alignment_period, null)
}
]
trigger = !can(c.condition_absent.trigger) ? null : {
count = try(c.condition_absent.trigger.count, null)
percent = try(c.condition_absent.trigger.percent, null)
@@ -85,18 +87,22 @@ locals {
evaluation_missing_data = try(c.condition_threshold.evaluation_missing_data, null)
filter = try(c.condition_threshold.filter, null)
threshold_value = try(c.condition_threshold.threshold_value, null)
aggregations = !can(c.condition_threshold.aggregations) ? null : {
per_series_aligner = try(c.condition_threshold.aggregations.per_series_aligner, null)
group_by_fields = try(c.condition_threshold.aggregations.group_by_fields, null)
cross_series_reducer = try(c.condition_threshold.aggregations.cross_series_reducer, null)
alignment_period = try(c.condition_threshold.aggregations.alignment_period, null)
}
denominator_aggregations = !can(c.condition_threshold.denominator_aggregations) ? null : {
per_series_aligner = try(c.condition_threshold.denominator_aggregations.per_series_aligner, null)
group_by_fields = try(c.condition_threshold.denominator_aggregations.group_by_fields, null)
cross_series_reducer = try(c.condition_threshold.denominator_aggregations.cross_series_reducer, null)
alignment_period = try(c.condition_threshold.denominator_aggregations.alignment_period, null)
}
aggregations = !can(c.condition_threshold.aggregations) ? null : [
for a in c.condition_threshold.aggregations : {
per_series_aligner = try(a.per_series_aligner, null)
group_by_fields = try(a.group_by_fields, null)
cross_series_reducer = try(a.cross_series_reducer, null)
alignment_period = try(a.alignment_period, null)
}
]
denominator_aggregations = !can(c.condition_threshold.denominator_aggregations) ? null : [
for a in c.condition_threshold.denominator_aggregations : {
per_series_aligner = try(a.per_series_aligner, null)
group_by_fields = try(a.group_by_fields, null)
cross_series_reducer = try(a.cross_series_reducer, null)
alignment_period = try(a.alignment_period, null)
}
]
forecast_options = !can(c.condition_threshold.forecast_options) ? null : {
forecast_horizon = c.condition_threshold.forecast_options.forecast_horizon
}
@@ -173,7 +179,7 @@ resource "google_monitoring_alert_policy" "alerts" {
duration = condition_absent.value.duration
filter = condition_absent.value.filter
dynamic "aggregations" {
for_each = condition_absent.value.aggregations[*]
for_each = coalesce(condition_absent.value.aggregations, [])
content {
alignment_period = aggregations.value.alignment_period
cross_series_reducer = aggregations.value.cross_series_reducer
@@ -235,7 +241,7 @@ resource "google_monitoring_alert_policy" "alerts" {
filter = condition_threshold.value.filter
threshold_value = condition_threshold.value.threshold_value
dynamic "aggregations" {
for_each = condition_threshold.value.aggregations[*]
for_each = coalesce(condition_threshold.value.aggregations, [])
content {
alignment_period = aggregations.value.alignment_period
cross_series_reducer = aggregations.value.cross_series_reducer
@@ -244,7 +250,7 @@ resource "google_monitoring_alert_policy" "alerts" {
}
}
dynamic "denominator_aggregations" {
for_each = condition_threshold.value.denominator_aggregations[*]
for_each = coalesce(condition_threshold.value.denominator_aggregations, [])
content {
alignment_period = denominator_aggregations.value.alignment_period
cross_series_reducer = denominator_aggregations.value.cross_series_reducer

View File

@@ -478,23 +478,26 @@
]
},
"aggregations": {
"type": "object",
"additionalProperties": false,
"properties": {
"per_series_aligner": {
"type": "string"
},
"group_by_fields": {
"type": "array",
"items": {
"type": "array",
"items": {
"type": "object",
"additionalProperties": false,
"properties": {
"per_series_aligner": {
"type": "string"
},
"group_by_fields": {
"type": "array",
"items": {
"type": "string"
}
},
"cross_series_reducer": {
"type": "string"
},
"alignment_period": {
"type": "string"
}
},
"cross_series_reducer": {
"type": "string"
},
"alignment_period": {
"type": "string"
}
}
},
@@ -511,4 +514,4 @@
}
}
}
}
}

View File

@@ -39,12 +39,12 @@ variable "alerts" {
condition_absent = optional(object({
duration = string
filter = optional(string)
aggregations = optional(object({
aggregations = optional(list(object({
per_series_aligner = optional(string)
group_by_fields = optional(list(string))
cross_series_reducer = optional(string)
alignment_period = optional(string)
}))
})))
trigger = optional(object({
count = optional(number)
percent = optional(number)
@@ -79,18 +79,18 @@ variable "alerts" {
evaluation_missing_data = optional(string)
filter = optional(string)
threshold_value = optional(number)
aggregations = optional(object({
aggregations = optional(list(object({
per_series_aligner = optional(string)
group_by_fields = optional(list(string))
cross_series_reducer = optional(string)
alignment_period = optional(string)
}))
denominator_aggregations = optional(object({
})))
denominator_aggregations = optional(list(object({
per_series_aligner = optional(string)
group_by_fields = optional(list(string))
cross_series_reducer = optional(string)
alignment_period = optional(string)
}))
})))
forecast_options = optional(object({
forecast_horizon = string
}))