diff --git a/aci_tenants.tf b/aci_tenants.tf index 05059404..33c01ee7 100644 --- a/aci_tenants.tf +++ b/aci_tenants.tf @@ -1245,11 +1245,14 @@ locals { import_route_control = try("${peer.import_route_control}${local.defaults.apic.tenants.policies.route_control_route_maps.name_suffix}", null) }] paths = [for path in try(int.paths, []) : { - physical_domain = try(path.physical_domain, null) - vmware_vmm_domain = try(path.vmware_vmm_domain, null) - elag = try(path.elag, null) - floating_ip = path.floating_ip - vlan = try(path.vlan, null) + physical_domain = try(path.physical_domain, null) + vmware_vmm_domain = try(path.vmware_vmm_domain, null) + elag = try(path.elag, null) + floating_ip = path.floating_ip + vlan = try(path.vlan, null) + forge_transmit = try(path.forge_transmit, local.defaults.apic.tenants.l3outs.node_profiles.interface_profiles.interfaces.paths.forge_transmit, null) + mac_address_change = try(path.mac_address_change, local.defaults.apic.tenants.l3outs.node_profiles.interface_profiles.interfaces.paths.mac_address_change, null) + promiscous_mode = try(path.promiscous_mode, local.defaults.apic.tenants.l3outs.node_profiles.interface_profiles.interfaces.paths.promiscous_mode, null) }] micro_bfd_destination_ip = try(int.micro_bfd.destination_ip, null) micro_bfd_start_timer = try(int.micro_bfd.start_timer, null) @@ -1409,11 +1412,14 @@ locals { import_route_control = try("${peer.import_route_control}${local.defaults.apic.tenants.policies.route_control_route_maps.name_suffix}", null) }] paths = [for path in try(int.paths, []) : { - physical_domain = try(path.physical_domain, null) - vmware_vmm_domain = try(path.vmware_vmm_domain, null) - elag = try(path.elag, null) - floating_ip = path.floating_ip - vlan = try(path.vlan, null) + physical_domain = try(path.physical_domain, null) + vmware_vmm_domain = try(path.vmware_vmm_domain, null) + elag = try(path.elag, null) + floating_ip = path.floating_ip + vlan = try(path.vlan, null) + forge_transmit = try(path.forge_transmit, local.defaults.apic.tenants.l3outs.node_profiles.interface_profiles.interfaces.paths.forge_transmit) + mac_address_change = try(path.mac_address_change, local.defaults.apic.tenants.l3outs.node_profiles.interface_profiles.interfaces.paths.mac_address_change) + promiscous_mode = try(path.promiscous_mode, local.defaults.apic.tenants.l3outs.node_profiles.interface_profiles.interfaces.paths.promiscous_mode) }] micro_bfd_destination_ip = try(int.micro_bfd.destination_ip, null) micro_bfd_start_timer = try(int.micro_bfd.start_timer, null) diff --git a/defaults/defaults.yaml b/defaults/defaults.yaml index 5e478045..0c7a839f 100644 --- a/defaults/defaults.yaml +++ b/defaults/defaults.yaml @@ -1015,6 +1015,10 @@ defaults: multicast_address_family: true admin_state: true as_propagate: none + paths: + forge_transmit: false + mac_address_change: false + promiscous_mode: false micro_bfd: start_timer: 0 external_endpoint_groups: diff --git a/modules/terraform-aci-l3out-interface-profile/README.md b/modules/terraform-aci-l3out-interface-profile/README.md index 6396e5e0..0eb99262 100644 --- a/modules/terraform-aci-l3out-interface-profile/README.md +++ b/modules/terraform-aci-l3out-interface-profile/README.md @@ -135,7 +135,7 @@ module "aci_l3out_interface_profile" { | [nd\_interface\_policy](#input\_nd\_interface\_policy) | ND interface policy. | `string` | `""` | no | | [qos\_class](#input\_qos\_class) | QoS class. Choices: `level1`, `level2`, `level3`, `level4`, `level5`, `level6`, `unspecified`. | `string` | `"unspecified"` | no | | [custom\_qos\_policy](#input\_custom\_qos\_policy) | Custom QoS policy name. | `string` | `""` | no | -| [interfaces](#input\_interfaces) | List of interfaces. Default value `svi`: false. Default value `floating_svi`: false. Choices `type`. `access`, `pc`, `vpc`. Default value `type`: `access`. Allowed values `vlan`: 1-4096. Format `mac`: `12:34:56:78:9A:BC`. `mtu`: Allowed values are `inherit` or a number between 576 and 9216. Allowed values `node_id`, `node2_id`: 1-4000. Allowed values `pod_id`: 1-255. Default value `pod_id`: 1. Allowed values `module`: 1-9. Default value `module`: 1. Allowed values `port`: 1-127. Default value `bgp_peers.bfd`: false. Allowed values `bgp_peers.ttl`: 1-255. Default value `bgp_peers.ttl`: 1. Allowed values `bgp_peers.weight`: 0-65535. Default value `bgp_peers.weight`: 0. Allowed values `bgp_peers.remote_as`: 0-4294967295. |
list(object({
description = optional(string, "")
type = optional(string, "access")
node_id = number
node2_id = optional(number)
pod_id = optional(number, 1)
module = optional(number, 1)
port = optional(number)
sub_port = optional(number)
channel = optional(string)
ip = optional(string)
svi = optional(bool, false)
autostate = optional(bool, false)
floating_svi = optional(bool, false)
vlan = optional(number)
mac = optional(string, "00:22:BD:F8:19:FF")
mtu = optional(string, "inherit")
mode = optional(string, "regular")
ip_a = optional(string)
ip_b = optional(string)
ip_shared = optional(string)
ip_shared_dhcp_relay = optional(bool, null)
lladdr = optional(string, "::")
scope = optional(string, "local")
multipod_direct = optional(bool, false)
bgp_peers = optional(list(object({
ip = string
remote_as = string
description = optional(string, "")
allow_self_as = optional(bool, false)
as_override = optional(bool, false)
disable_peer_as_check = optional(bool, false)
next_hop_self = optional(bool, false)
send_community = optional(bool, false)
send_ext_community = optional(bool, false)
password = optional(string)
allowed_self_as_count = optional(number, 3)
bfd = optional(bool, false)
disable_connected_check = optional(bool, false)
ttl = optional(number, 1)
weight = optional(number, 0)
remove_all_private_as = optional(bool, false)
remove_private_as = optional(bool, false)
replace_private_as_with_local_as = optional(bool, false)
unicast_address_family = optional(bool, true)
multicast_address_family = optional(bool, true)
admin_state = optional(bool, true)
local_as = optional(number)
as_propagate = optional(string, "none")
peer_prefix_policy = optional(string)
export_route_control = optional(string)
import_route_control = optional(string)
})), [])
paths = optional(list(object({
physical_domain = optional(string)
vmware_vmm_domain = optional(string)
elag = optional(string)
floating_ip = string
vlan = optional(string)
})), [])
micro_bfd_destination_ip = optional(string, "")
micro_bfd_start_timer = optional(number, 0)
}))
| `[]` | no | +| [interfaces](#input\_interfaces) | List of interfaces. Default value `svi`: false. Default value `floating_svi`: false. Choices `type`. `access`, `pc`, `vpc`. Default value `type`: `access`. Allowed values `vlan`: 1-4096. Format `mac`: `12:34:56:78:9A:BC`. `mtu`: Allowed values are `inherit` or a number between 576 and 9216. Allowed values `node_id`, `node2_id`: 1-4000. Allowed values `pod_id`: 1-255. Default value `pod_id`: 1. Allowed values `module`: 1-9. Default value `module`: 1. Allowed values `port`: 1-127. Default value `bgp_peers.bfd`: false. Allowed values `bgp_peers.ttl`: 1-255. Default value `bgp_peers.ttl`: 1. Allowed values `bgp_peers.weight`: 0-65535. Default value `bgp_peers.weight`: 0. Allowed values `bgp_peers.remote_as`: 0-4294967295. |
list(object({
description = optional(string, "")
type = optional(string, "access")
node_id = number
node2_id = optional(number)
pod_id = optional(number, 1)
module = optional(number, 1)
port = optional(number)
sub_port = optional(number)
channel = optional(string)
ip = optional(string)
svi = optional(bool, false)
autostate = optional(bool, false)
floating_svi = optional(bool, false)
vlan = optional(number)
mac = optional(string, "00:22:BD:F8:19:FF")
mtu = optional(string, "inherit")
mode = optional(string, "regular")
ip_a = optional(string)
ip_b = optional(string)
ip_shared = optional(string)
ip_shared_dhcp_relay = optional(bool, null)
lladdr = optional(string, "::")
scope = optional(string, "local")
multipod_direct = optional(bool, false)
bgp_peers = optional(list(object({
ip = string
remote_as = string
description = optional(string, "")
allow_self_as = optional(bool, false)
as_override = optional(bool, false)
disable_peer_as_check = optional(bool, false)
next_hop_self = optional(bool, false)
send_community = optional(bool, false)
send_ext_community = optional(bool, false)
password = optional(string)
allowed_self_as_count = optional(number, 3)
bfd = optional(bool, false)
disable_connected_check = optional(bool, false)
ttl = optional(number, 1)
weight = optional(number, 0)
remove_all_private_as = optional(bool, false)
remove_private_as = optional(bool, false)
replace_private_as_with_local_as = optional(bool, false)
unicast_address_family = optional(bool, true)
multicast_address_family = optional(bool, true)
admin_state = optional(bool, true)
local_as = optional(number)
as_propagate = optional(string, "none")
peer_prefix_policy = optional(string)
export_route_control = optional(string)
import_route_control = optional(string)
})), [])
paths = optional(list(object({
physical_domain = optional(string)
vmware_vmm_domain = optional(string)
elag = optional(string)
floating_ip = string
vlan = optional(string)
forge_transmit = optional(bool, false)
mac_address_change = optional(bool, false)
promiscous_mode = optional(bool, false)
})), [])
micro_bfd_destination_ip = optional(string, "")
micro_bfd_start_timer = optional(number, 0)
}))
| `[]` | no | | [multipod](#input\_multipod) | Multipod L3out flag. | `bool` | `false` | no | | [remote\_leaf](#input\_remote\_leaf) | Remote leaf L3out flag. | `bool` | `false` | no | | [sr\_mpls](#input\_sr\_mpls) | SR MPLS L3out flag. | `bool` | `false` | no | diff --git a/modules/terraform-aci-l3out-interface-profile/main.tf b/modules/terraform-aci-l3out-interface-profile/main.tf index 35a2d2e1..51a848a7 100644 --- a/modules/terraform-aci-l3out-interface-profile/main.tf +++ b/modules/terraform-aci-l3out-interface-profile/main.tf @@ -128,11 +128,14 @@ locals { for path in coalesce(int.paths, []) : { key = "${int.node_id}/${int.vlan}/${coalesce(path.physical_domain, path.vmware_vmm_domain)}/${path.floating_ip}" value = { - node = "${int.node_id}/${int.vlan}" - floating_ip = path.floating_ip - domain = path.physical_domain != null ? "phys-${path.physical_domain}" : (path.vmware_vmm_domain != null ? "vmmp-VMware/dom-${path.vmware_vmm_domain}" : "") - elag = path.elag - vlan = path.vlan + node = "${int.node_id}/${int.vlan}" + floating_ip = path.floating_ip + domain = path.physical_domain != null ? "phys-${path.physical_domain}" : (path.vmware_vmm_domain != null ? "vmmp-VMware/dom-${path.vmware_vmm_domain}" : "") + elag = path.elag + vlan = path.vlan + forge_transmit = path.forge_transmit + mac_address_change = path.mac_address_change + promiscous_mode = path.promiscous_mode } } ] if int.floating_svi == true @@ -407,9 +410,12 @@ resource "aci_rest_managed" "l3extRsDynPathAtt" { dn = "${aci_rest_managed.l3extVirtualLIfP[each.value.node].dn}/rsdynPathAtt-[uni/${each.value.domain}]" class_name = "l3extRsDynPathAtt" content = { - floatingAddr = each.value.floating_ip - tDn = "uni/${each.value.domain}" - encap = each.value.vlan != null && each.value.vlan != "" ? "vlan-${each.value.vlan}" : null + floatingAddr = each.value.floating_ip + tDn = "uni/${each.value.domain}" + encap = each.value.vlan != null && each.value.vlan != "" ? "vlan-${each.value.vlan}" : null + forgedTransmit = each.value.forge_transmit == true ? "Enabled" : "Disabled" + macChange = each.value.mac_address_change == true ? "Enabled" : "Disabled" + promMode = each.value.promiscous_mode == true ? "Enabled" : "Disabled" } } diff --git a/modules/terraform-aci-l3out-interface-profile/variables.tf b/modules/terraform-aci-l3out-interface-profile/variables.tf index ab084ad7..810cff8a 100644 --- a/modules/terraform-aci-l3out-interface-profile/variables.tf +++ b/modules/terraform-aci-l3out-interface-profile/variables.tf @@ -250,11 +250,14 @@ variable "interfaces" { import_route_control = optional(string) })), []) paths = optional(list(object({ - physical_domain = optional(string) - vmware_vmm_domain = optional(string) - elag = optional(string) - floating_ip = string - vlan = optional(string) + physical_domain = optional(string) + vmware_vmm_domain = optional(string) + elag = optional(string) + floating_ip = string + vlan = optional(string) + forge_transmit = optional(bool, false) + mac_address_change = optional(bool, false) + promiscous_mode = optional(bool, false) })), []) micro_bfd_destination_ip = optional(string, "") micro_bfd_start_timer = optional(number, 0)