Initial commit: meraki network configuration

This commit is contained in:
Jose Martinez
2026-03-13 14:01:53 +01:00
commit 266d20f194
12 changed files with 337 additions and 0 deletions
+41
View File
@@ -0,0 +1,41 @@
# Búsqueda automática de IDs (Data Sources)
data "meraki_organization" "org" {
name = var.organization_name
}
data "meraki_networks" "net" {
organization_id = data.meraki_organization.org.id
}
# Local para extraer el network_id exacto de la lista de redes
locals {
network_id = [for n in data.meraki_networks.net.items : n.id if n.name == var.network_name][0]
}
# --- CONFIGURACIÓN GATEWAY (MX) ---
# 1. Activar VLANs en el Appliance (MX)
resource "meraki_appliance_vlans_settings" "activate_vlans" {
network_id = local.network_id
vlans_enabled = true
}
# 2. Crear las interfaces L3 y VLANs en el MX
resource "meraki_appliance_vlan" "mx_gateways" {
for_each = var.switch_vlans
depends_on = [meraki_appliance_vlans_settings.activate_vlans]
network_id = local.network_id
vlan_id = each.key
name = each.value.name
subnet = each.value.subnet
appliance_ip = each.value.appliance_ip
reserved_ip_ranges = each.value.reserved_ip_ranges
dhcp_handling = each.value.dhcp_handling
}
# 3. Reglas de firewall L3
resource "meraki_appliance_l3_firewall_rules" "reglas_firewall" {
network_id = local.network_id
rules = var.firewall_rules
}
+17
View File
@@ -0,0 +1,17 @@
# ID de la red Meraki gestionada
output "network_id" {
description = "ID interno de la red Meraki"
value = local.network_id
}
# IDs de las VLANs creadas en el MX
output "vlan_ids" {
description = "Mapa de VLAN ID => ID de recurso creado en el MX"
value = { for k, v in meraki_appliance_vlan.mx_gateways : k => v.vlan_id }
}
# Nombre del perfil de VLANs creado
output "vlan_profile_name" {
description = "Nombre del perfil de VLANs asignado al site"
value = meraki_network_vlan_profile.site_profile.name
}
+54
View File
@@ -0,0 +1,54 @@
# Definición de la Organización
variable "organization_name" {
type = string
description = "Nombre exacto de tu organización en el Dashboard de Meraki"
}
# Definición de la Red
variable "network_name" {
type = string
description = "Nombre de la red (Network)"
}
# Reglas de firewall L3
variable "firewall_rules" {
type = list(object({
comment = string
policy = string
protocol = string
src_cidr = string
src_port = string
dest_cidr = string
dest_port = string
syslog_enabled = optional(bool, false)
}))
default = []
description = "Reglas de firewall L3 para el site. Se aplican en orden, antes de la regla allow-all implícita de Meraki"
}
# Definición del mapa de VLANs
variable "switch_vlans" {
type = map(object({
name = string
subnet = string
appliance_ip = string
dhcp_handling = optional(string, "Run a DHCP server")
reserved_ip_ranges = optional(list(object({
comment = string
id = string
start = string
end = string
})), [])
}))
description = "VLANs para el site"
validation {
condition = alltrue([
for v in values(var.switch_vlans) :
contains(["Run a DHCP server", "Relay DHCP to another server", "Do not respond to DHCP requests"], v.dhcp_handling)
])
error_message = "dhcp_handling debe ser uno de: 'Run a DHCP server', 'Relay DHCP to another server', 'Do not respond to DHCP requests'."
}
}