Skip to content
Open
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
2 changes: 1 addition & 1 deletion alz/azuredevops/locals.tf
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ locals {
}

locals {
target_subscriptions = distinct(values(var.subscription_ids))
target_subscriptions = distinct([for v in values(var.subscription_ids) : v if v != null && v != ""])
}

locals {
Expand Down
28 changes: 22 additions & 6 deletions alz/azuredevops/variables.tf
Original file line number Diff line number Diff line change
Expand Up @@ -26,12 +26,28 @@ variable "root_parent_management_group_id" {
default = ""
}

variable "required_subscription_keys" {
description = <<-EOT
**(Optional, default: `["management", "connectivity"]`)** List of subscription keys that must be present with valid GUID values.

Keys not in this list may have null or empty string values.
Valid keys: 'management', 'connectivity', 'identity', 'security'
EOT
type = list(string)
default = ["management", "connectivity"]
nullable = false
validation {
condition = alltrue([for key in var.required_subscription_keys : contains(["management", "connectivity", "identity", "security"], key)])
error_message = "The required_subscription_keys must be one of 'management', 'connectivity', 'identity' or 'security'"
}
}

variable "subscription_ids" {
description = <<-EOT
**(Optional, default: `{}`)** Map of Azure subscription IDs where Platform Landing Zone resources will be deployed.

Keys must be one of: 'management', 'connectivity', 'identity', 'security'
Values must be valid Azure subscription GUIDs.
Values must be valid Azure subscription GUIDs, or null/empty for non-required keys.

Example:
```
Expand All @@ -45,16 +61,16 @@ variable "subscription_ids" {
default = {}
nullable = false
validation {
condition = alltrue([for id in values(var.subscription_ids) : can(regex("^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$", id))])
error_message = "All subscription IDs must be valid GUIDs"
condition = alltrue([for key, id in var.subscription_ids : contains(var.required_subscription_keys, key) ? can(regex("^[0-9a-fA-F-]{36}$", id)) : (id == null || id == "" || can(regex("^[0-9a-fA-F-]{36}$", id)))])
error_message = "Required subscription IDs must be valid GUIDs. Optional subscription IDs must be valid GUIDs, null, or empty string."
}
validation {
condition = alltrue([for id in keys(var.subscription_ids) : contains(["management", "connectivity", "identity", "security"], id)])
condition = alltrue([for key in keys(var.subscription_ids) : contains(["management", "connectivity", "identity", "security"], key)])
error_message = "The keys of the subscription_ids map must be one of 'management', 'connectivity', 'identity' or 'security'"
}
validation {
condition = contains(keys(var.subscription_ids), "management") && contains(keys(var.subscription_ids), "connectivity") && contains(keys(var.subscription_ids), "identity")
error_message = "You must provide subscription IDs for: 'management', 'connectivity', and 'identity'"
condition = alltrue([for key in var.required_subscription_keys : contains(keys(var.subscription_ids), key)])
error_message = "You must provide subscription IDs for all required subscription keys."
}
}

Expand Down
2 changes: 1 addition & 1 deletion alz/github/locals.tf
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ locals {
}

locals {
target_subscriptions = distinct(values(var.subscription_ids))
target_subscriptions = distinct([for v in values(var.subscription_ids) : v if v != null && v != ""])
}

locals {
Expand Down
28 changes: 22 additions & 6 deletions alz/github/variables.tf
Original file line number Diff line number Diff line change
Expand Up @@ -26,12 +26,28 @@ variable "root_parent_management_group_id" {
default = ""
}

variable "required_subscription_keys" {
description = <<-EOT
**(Optional, default: `["management", "connectivity"]`)** List of subscription keys that must be present with valid GUID values.

Keys not in this list may have null or empty string values.
Valid keys: 'management', 'connectivity', 'identity', 'security'
EOT
type = list(string)
default = ["management", "connectivity"]
nullable = false
validation {
condition = alltrue([for key in var.required_subscription_keys : contains(["management", "connectivity", "identity", "security"], key)])
error_message = "The required_subscription_keys must be one of 'management', 'connectivity', 'identity' or 'security'"
}
}

variable "subscription_ids" {
description = <<-EOT
**(Optional, default: `{}`)** Map of Azure subscription IDs where Platform Landing Zone resources will be deployed.

Keys must be one of: 'management', 'connectivity', 'identity', 'security'
Values must be valid Azure subscription GUIDs.
Values must be valid Azure subscription GUIDs, or null/empty for non-required keys.

Example:
```
Expand All @@ -45,16 +61,16 @@ variable "subscription_ids" {
default = {}
nullable = false
validation {
condition = alltrue([for id in values(var.subscription_ids) : can(regex("^[0-9a-fA-F-]{36}$", id))])
error_message = "All subscription IDs must be valid GUIDs"
condition = alltrue([for key, id in var.subscription_ids : contains(var.required_subscription_keys, key) ? can(regex("^[0-9a-fA-F-]{36}$", id)) : (id == null || id == "" || can(regex("^[0-9a-fA-F-]{36}$", id)))])
error_message = "Required subscription IDs must be valid GUIDs. Optional subscription IDs must be valid GUIDs, null, or empty string."
}
validation {
condition = alltrue([for id in keys(var.subscription_ids) : contains(["management", "connectivity", "identity", "security"], id)])
condition = alltrue([for key in keys(var.subscription_ids) : contains(["management", "connectivity", "identity", "security"], key)])
error_message = "The keys of the subscription_ids map must be one of 'management', 'connectivity', 'identity' or 'security'"
}
validation {
condition = contains(keys(var.subscription_ids), "management") && contains(keys(var.subscription_ids), "connectivity") && contains(keys(var.subscription_ids), "identity")
error_message = "You must provide subscription IDs for: 'management', 'connectivity', and 'identity'"
condition = alltrue([for key in var.required_subscription_keys : contains(keys(var.subscription_ids), key)])
error_message = "You must provide subscription IDs for all required subscription keys."
}
}

Expand Down
2 changes: 1 addition & 1 deletion alz/local/locals.tf
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ locals {
}

locals {
target_subscriptions = distinct(values(var.subscription_ids))
target_subscriptions = distinct([for v in values(var.subscription_ids) : v if v != null && v != ""])
}

locals {
Expand Down
30 changes: 23 additions & 7 deletions alz/local/variables.tf
Original file line number Diff line number Diff line change
Expand Up @@ -26,12 +26,28 @@ variable "root_parent_management_group_id" {
default = ""
}

variable "required_subscription_keys" {
description = <<-EOT
**(Optional, default: `["management", "connectivity"]`)** List of subscription keys that must be present with valid GUID values.

Keys not in this list may have null or empty string values.
Valid keys: 'management', 'connectivity', 'identity', 'security'
EOT
type = list(string)
default = ["management", "connectivity"]
nullable = false
validation {
condition = alltrue([for key in var.required_subscription_keys : contains(["management", "connectivity", "identity", "security"], key)])
error_message = "The required_subscription_keys must be one of 'management', 'connectivity', 'identity' or 'security'"
}
}

variable "subscription_ids" {
description = <<-EOT
**(Optional, default: `{}`)** Map of Azure subscription IDs where Platform Landing Zone resources will be deployed.
**(Optional, default: `{}`)** Map of Azure subscription IDs where Platform Landing Zone resources will be deployed.

Keys must be one of: 'management', 'connectivity', 'identity', 'security'
Values must be valid Azure subscription GUIDs.
Values must be valid Azure subscription GUIDs, or null/empty for non-required keys.

Example:
```
Expand All @@ -45,16 +61,16 @@ variable "subscription_ids" {
default = {}
nullable = false
validation {
condition = alltrue([for id in values(var.subscription_ids) : can(regex("^[0-9a-fA-F-]{36}$", id))])
error_message = "All subscription IDs must be valid GUIDs"
condition = alltrue([for key, id in var.subscription_ids : contains(var.required_subscription_keys, key) ? can(regex("^[0-9a-fA-F-]{36}$", id)) : (id == null || id == "" || can(regex("^[0-9a-fA-F-]{36}$", id)))])
error_message = "Required subscription IDs must be valid GUIDs. Optional subscription IDs must be valid GUIDs, null, or empty string."
}
validation {
condition = alltrue([for id in keys(var.subscription_ids) : contains(["management", "connectivity", "identity", "security"], id)])
condition = alltrue([for key in keys(var.subscription_ids) : contains(["management", "connectivity", "identity", "security"], key)])
error_message = "The keys of the subscription_ids map must be one of 'management', 'connectivity', 'identity' or 'security'"
}
validation {
condition = contains(keys(var.subscription_ids), "management") && contains(keys(var.subscription_ids), "connectivity") && contains(keys(var.subscription_ids), "identity")
error_message = "You must provide subscription IDs for: 'management', 'connectivity', and 'identity'"
condition = alltrue([for key in var.required_subscription_keys : contains(keys(var.subscription_ids), key)])
error_message = "You must provide subscription IDs for all required subscription keys."
}
}

Expand Down
2 changes: 0 additions & 2 deletions modules/azure/data.tf
Original file line number Diff line number Diff line change
@@ -1,5 +1,3 @@
data "azurerm_client_config" "alz" {}

data "azurerm_subscription" "alz" {
for_each = local.subscription_ids
subscription_id = each.key
Expand Down
Loading