Skip to content

Commit

Permalink
Allow the Ipv6 Link-Local address to be customizable on L3out interfa…
Browse files Browse the repository at this point in the history
…ce profile (netascode#124)

* fixing lladdr on aci_l3out_interface_profile_manual

* forgot in module "aci_l3out_interface_profile_manual"

* adding to aci_l3out_interface_profile_auto

* added default value for lladdr

* added lladdr option for l3extVirtualLIfP

* Update aci_tenants.tf

---------

Co-authored-by: Justyna Chowaniec <[email protected]>
  • Loading branch information
FrederikSuijs and juchowan authored Dec 12, 2024
1 parent 60c4392 commit 78e8a0d
Show file tree
Hide file tree
Showing 6 changed files with 12 additions and 3 deletions.
4 changes: 4 additions & 0 deletions aci_tenants.tf
Original file line number Diff line number Diff line change
Expand Up @@ -1179,6 +1179,7 @@ locals {
ip_a = try(int.ip_a, null)
ip_b = try(int.ip_b, null)
ip_shared = try(int.ip_shared, null)
lladdr = try(int.link_local_address, null)
scope = try(int.scope, local.defaults.apic.tenants.l3outs.node_profiles.interface_profiles.interfaces.scope)
multipod_direct = tenant.name == "infra" ? try(int.multipod_direct, false) : false
bgp_peers = [for peer in try(int.bgp_peers, []) : {
Expand Down Expand Up @@ -1271,6 +1272,7 @@ module "aci_l3out_interface_profile_manual" {
ip_a = int.ip_a
ip_b = int.ip_b
ip_shared = int.ip_shared
lladdr = int.lladdr
bgp_peers = int.bgp_peers
paths = int.paths
scope = int.scope
Expand Down Expand Up @@ -1336,6 +1338,7 @@ locals {
ip_a = try(int.ip_a, null)
ip_b = try(int.ip_b, null)
ip_shared = try(int.ip_shared, null)
lladdr = try(int.link_local_address, null)
scope = try(int.scope, local.defaults.apic.tenants.l3outs.node_profiles.interface_profiles.interfaces.scope)
multipod_direct = tenant.name == "infra" ? try(int.multipod_direct, false) : false
bgp_peers = [for peer in try(int.bgp_peers, []) : {
Expand Down Expand Up @@ -1425,6 +1428,7 @@ module "aci_l3out_interface_profile_auto" {
ip_a = int.ip_a
ip_b = int.ip_b
ip_shared = int.ip_shared
lladdr = int.lladdr
bgp_peers = int.bgp_peers
paths = int.paths
scope = int.scope
Expand Down
3 changes: 2 additions & 1 deletion modules/terraform-aci-l3out-interface-profile/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,7 @@ module "aci_l3out_interface_profile" {
ip_a = "1.1.1.2/24"
ip_b = "1.1.1.3/24"
ip_shared = "1.1.1.1/24"
lladdr = "fe80::ffff:ffff:ffff:ffff"
bgp_peers = [{
ip = "4.4.4.4"
remote_as = 12345
Expand Down Expand Up @@ -118,7 +119,7 @@ module "aci_l3out_interface_profile" {
| <a name="input_igmp_interface_policy"></a> [igmp\_interface\_policy](#input\_igmp\_interface\_policy) | IGMP interface policy name. | `string` | `""` | no |
| <a name="input_qos_class"></a> [qos\_class](#input\_qos\_class) | QoS class. Choices: `level1`, `level2`, `level3`, `level4`, `level5`, `level6`, `unspecified`. | `string` | `"unspecified"` | no |
| <a name="input_custom_qos_policy"></a> [custom\_qos\_policy](#input\_custom\_qos\_policy) | Custom QoS policy name. | `string` | `""` | no |
| <a name="input_interfaces"></a> [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. | <pre>list(object({<br> description = optional(string, "")<br> type = optional(string, "access")<br> node_id = number<br> node2_id = optional(number)<br> pod_id = optional(number, 1)<br> module = optional(number, 1)<br> port = optional(number)<br> sub_port = optional(number)<br> channel = optional(string)<br> ip = optional(string)<br> svi = optional(bool, false)<br> autostate = optional(bool, false)<br> floating_svi = optional(bool, false)<br> vlan = optional(number)<br> mac = optional(string, "00:22:BD:F8:19:FF")<br> mtu = optional(string, "inherit")<br> mode = optional(string, "regular")<br> ip_a = optional(string)<br> ip_b = optional(string)<br> ip_shared = optional(string)<br> scope = optional(string, "local")<br> multipod_direct = optional(bool, false)<br> bgp_peers = optional(list(object({<br> ip = string<br> remote_as = string<br> description = optional(string, "")<br> allow_self_as = optional(bool, false)<br> as_override = optional(bool, false)<br> disable_peer_as_check = optional(bool, false)<br> next_hop_self = optional(bool, false)<br> send_community = optional(bool, false)<br> send_ext_community = optional(bool, false)<br> password = optional(string)<br> allowed_self_as_count = optional(number, 3)<br> bfd = optional(bool, false)<br> disable_connected_check = optional(bool, false)<br> ttl = optional(number, 1)<br> weight = optional(number, 0)<br> remove_all_private_as = optional(bool, false)<br> remove_private_as = optional(bool, false)<br> replace_private_as_with_local_as = optional(bool, false)<br> unicast_address_family = optional(bool, true)<br> multicast_address_family = optional(bool, true)<br> admin_state = optional(bool, true)<br> local_as = optional(number)<br> as_propagate = optional(string, "none")<br> peer_prefix_policy = optional(string)<br> export_route_control = optional(string)<br> import_route_control = optional(string)<br> })), [])<br> paths = optional(list(object({<br> physical_domain = optional(string)<br> vmware_vmm_domain = optional(string)<br> elag = optional(string)<br> floating_ip = string<br> })), [])<br> micro_bfd_destination_ip = optional(string, "")<br> micro_bfd_start_timer = optional(number, 0)<br> }))</pre> | `[]` | no |
| <a name="input_interfaces"></a> [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. | <pre>list(object({<br> description = optional(string, "")<br> type = optional(string, "access")<br> node_id = number<br> node2_id = optional(number)<br> pod_id = optional(number, 1)<br> module = optional(number, 1)<br> port = optional(number)<br> sub_port = optional(number)<br> channel = optional(string)<br> ip = optional(string)<br> svi = optional(bool, false)<br> autostate = optional(bool, false)<br> floating_svi = optional(bool, false)<br> vlan = optional(number)<br> mac = optional(string, "00:22:BD:F8:19:FF")<br> mtu = optional(string, "inherit")<br> mode = optional(string, "regular")<br> ip_a = optional(string)<br> ip_b = optional(string)<br> ip_shared = optional(string)<br> lladdr = optional(string, "::")<br> scope = optional(string, "local")<br> multipod_direct = optional(bool, false)<br> bgp_peers = optional(list(object({<br> ip = string<br> remote_as = string<br> description = optional(string, "")<br> allow_self_as = optional(bool, false)<br> as_override = optional(bool, false)<br> disable_peer_as_check = optional(bool, false)<br> next_hop_self = optional(bool, false)<br> send_community = optional(bool, false)<br> send_ext_community = optional(bool, false)<br> password = optional(string)<br> allowed_self_as_count = optional(number, 3)<br> bfd = optional(bool, false)<br> disable_connected_check = optional(bool, false)<br> ttl = optional(number, 1)<br> weight = optional(number, 0)<br> remove_all_private_as = optional(bool, false)<br> remove_private_as = optional(bool, false)<br> replace_private_as_with_local_as = optional(bool, false)<br> unicast_address_family = optional(bool, true)<br> multicast_address_family = optional(bool, true)<br> admin_state = optional(bool, true)<br> local_as = optional(number)<br> as_propagate = optional(string, "none")<br> peer_prefix_policy = optional(string)<br> export_route_control = optional(string)<br> import_route_control = optional(string)<br> })), [])<br> paths = optional(list(object({<br> physical_domain = optional(string)<br> vmware_vmm_domain = optional(string)<br> elag = optional(string)<br> floating_ip = string<br> })), [])<br> micro_bfd_destination_ip = optional(string, "")<br> micro_bfd_start_timer = optional(number, 0)<br> }))</pre> | `[]` | no |
| <a name="input_multipod"></a> [multipod](#input\_multipod) | Multipod L3out flag. | `bool` | `false` | no |
| <a name="input_remote_leaf"></a> [remote\_leaf](#input\_remote\_leaf) | Remote leaf L3out flag. | `bool` | `false` | no |
| <a name="input_sr_mpls"></a> [sr\_mpls](#input\_sr\_mpls) | SR MPLS L3out flag. | `bool` | `false` | no |
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,7 @@ module "aci_l3out_interface_profile" {
ip_a = "1.1.1.2/24"
ip_b = "1.1.1.3/24"
ip_shared = "1.1.1.1/24"
lladdr = "fe80::ffff:ffff:ffff:ffff"
bgp_peers = [{
ip = "4.4.4.4"
remote_as = 12345
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,7 @@ module "aci_l3out_interface_profile" {
ip_a = "1.1.1.2/24"
ip_b = "1.1.1.3/24"
ip_shared = "1.1.1.1/24"
lladdr = "fe80::ffff:ffff:ffff:ffff"
bgp_peers = [{
ip = "4.4.4.4"
remote_as = 12345
Expand Down
5 changes: 3 additions & 2 deletions modules/terraform-aci-l3out-interface-profile/main.tf
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ locals {
ip_a = int.ip_a
ip_b = int.ip_b
ip_shared = int.ip_shared
lladdr = int.lladdr
tDn = int.type == "vpc" ? "topology/pod-${int.pod_id}/protpaths-${int.node_id}-${int.node2_id}/pathep-[${int.channel}]" : (int.type == "pc" ? "topology/pod-${int.pod_id}/paths-${int.node_id}/pathep-[${int.channel}]" : (int.sub_port != null ? "topology/pod-${int.pod_id}/paths-${int.node_id}/pathep-[eth${int.module}/${int.port}/${int.sub_port}]" : "topology/pod-${int.pod_id}/paths-${int.node_id}/pathep-[eth${int.module}/${int.port}]"))
multipod_direct = int.multipod_direct
scope = int.scope
Expand Down Expand Up @@ -272,7 +273,7 @@ resource "aci_rest_managed" "l3extRsPathL3OutAtt" {
autostate = each.value.autostate
encap = each.value.vlan != null ? "vlan-${each.value.vlan}" : null
ipv6Dad = "enabled"
llAddr = "::"
llAddr = each.value.lladdr
mac = each.value.mac
mode = each.value.mode
mtu = each.value.mtu
Expand Down Expand Up @@ -351,7 +352,7 @@ resource "aci_rest_managed" "l3extVirtualLIfP" {
ifInstT = "ext-svi"
encap = "vlan-${each.value.vlan}"
ipv6Dad = "enabled"
llAddr = "::"
llAddr = each.value.lladdr
mac = each.value.mac
mode = each.value.mode
mtu = each.value.mtu
Expand Down
1 change: 1 addition & 0 deletions modules/terraform-aci-l3out-interface-profile/variables.tf
Original file line number Diff line number Diff line change
Expand Up @@ -211,6 +211,7 @@ variable "interfaces" {
ip_a = optional(string)
ip_b = optional(string)
ip_shared = optional(string)
lladdr = optional(string, "::")
scope = optional(string, "local")
multipod_direct = optional(bool, false)
bgp_peers = optional(list(object({
Expand Down

0 comments on commit 78e8a0d

Please sign in to comment.