Initial commit: meraki network configuration
This commit is contained in:
@@ -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
|
||||
}
|
||||
@@ -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
|
||||
}
|
||||
@@ -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'."
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user