Skip to content

Commit

Permalink
Enhance new interface configuration mode (#45)
Browse files Browse the repository at this point in the history
  • Loading branch information
andbyrne authored Jan 30, 2024
1 parent 4a779aa commit 4238071
Show file tree
Hide file tree
Showing 30 changed files with 743 additions and 33 deletions.
8 changes: 8 additions & 0 deletions .pre-commit-config.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -205,6 +205,10 @@ repos:
args: ["./modules/terraform-aci-external-endpoint-group"]
- id: terraform-docs-system
args: ["./modules/terraform-aci-external-endpoint-group/examples/complete"]
- id: terraform-docs-system
args: ["./modules/terraform-aci-fabric-interface-configuration"]
- id: terraform-docs-system
args: ["./modules/terraform-aci-fabric-interface-configuration/examples/complete"]
- id: terraform-docs-system
args: ["./modules/terraform-aci-fabric-isis-bfd"]
- id: terraform-docs-system
Expand Down Expand Up @@ -545,6 +549,10 @@ repos:
args: ["./modules/terraform-aci-storm-control-policy"]
- id: terraform-docs-system
args: ["./modules/terraform-aci-storm-control-policy/examples/complete"]
- id: terraform-docs-system
args: ["./modules/terraform-aci-switch-configuration"]
- id: terraform-docs-system
args: ["./modules/terraform-aci-switch-configuration/examples/complete"]
- id: terraform-docs-system
args: ["./modules/terraform-aci-syslog-policy"]
- id: terraform-docs-system
Expand Down
7 changes: 7 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -146,6 +146,7 @@ Additional example repositories:
| <a name="module_aci_access_leaf_interface_selector_auto"></a> [aci\_access\_leaf\_interface\_selector\_auto](#module\_aci\_access\_leaf\_interface\_selector\_auto) | ./modules/terraform-aci-access-leaf-interface-selector | n/a |
| <a name="module_aci_access_leaf_interface_selector_manual"></a> [aci\_access\_leaf\_interface\_selector\_manual](#module\_aci\_access\_leaf\_interface\_selector\_manual) | ./modules/terraform-aci-access-leaf-interface-selector | n/a |
| <a name="module_aci_access_leaf_interface_selector_sub_auto"></a> [aci\_access\_leaf\_interface\_selector\_sub\_auto](#module\_aci\_access\_leaf\_interface\_selector\_sub\_auto) | ./modules/terraform-aci-access-leaf-interface-selector | n/a |
| <a name="module_aci_access_leaf_switch_configuration"></a> [aci\_access\_leaf\_switch\_configuration](#module\_aci\_access\_leaf\_switch\_configuration) | ./modules/terraform-aci-switch-configuration | n/a |
| <a name="module_aci_access_leaf_switch_policy_group"></a> [aci\_access\_leaf\_switch\_policy\_group](#module\_aci\_access\_leaf\_switch\_policy\_group) | ./modules/terraform-aci-access-leaf-switch-policy-group | n/a |
| <a name="module_aci_access_leaf_switch_profile_auto"></a> [aci\_access\_leaf\_switch\_profile\_auto](#module\_aci\_access\_leaf\_switch\_profile\_auto) | ./modules/terraform-aci-access-leaf-switch-profile | n/a |
| <a name="module_aci_access_leaf_switch_profile_manual"></a> [aci\_access\_leaf\_switch\_profile\_manual](#module\_aci\_access\_leaf\_switch\_profile\_manual) | ./modules/terraform-aci-access-leaf-switch-profile | n/a |
Expand All @@ -157,6 +158,7 @@ Additional example repositories:
| <a name="module_aci_access_spine_interface_profile_manual"></a> [aci\_access\_spine\_interface\_profile\_manual](#module\_aci\_access\_spine\_interface\_profile\_manual) | ./modules/terraform-aci-access-spine-interface-profile | n/a |
| <a name="module_aci_access_spine_interface_selector_auto"></a> [aci\_access\_spine\_interface\_selector\_auto](#module\_aci\_access\_spine\_interface\_selector\_auto) | ./modules/terraform-aci-access-spine-interface-selector | n/a |
| <a name="module_aci_access_spine_interface_selector_manual"></a> [aci\_access\_spine\_interface\_selector\_manual](#module\_aci\_access\_spine\_interface\_selector\_manual) | ./modules/terraform-aci-access-spine-interface-selector | n/a |
| <a name="module_aci_access_spine_switch_configuration"></a> [aci\_access\_spine\_switch\_configuration](#module\_aci\_access\_spine\_switch\_configuration) | ./modules/terraform-aci-switch-configuration | n/a |
| <a name="module_aci_access_spine_switch_policy_group"></a> [aci\_access\_spine\_switch\_policy\_group](#module\_aci\_access\_spine\_switch\_policy\_group) | ./modules/terraform-aci-access-spine-switch-policy-group | n/a |
| <a name="module_aci_access_spine_switch_profile_auto"></a> [aci\_access\_spine\_switch\_profile\_auto](#module\_aci\_access\_spine\_switch\_profile\_auto) | ./modules/terraform-aci-access-spine-switch-profile | n/a |
| <a name="module_aci_access_spine_switch_profile_manual"></a> [aci\_access\_spine\_switch\_profile\_manual](#module\_aci\_access\_spine\_switch\_profile\_manual) | ./modules/terraform-aci-access-spine-switch-profile | n/a |
Expand Down Expand Up @@ -195,6 +197,7 @@ Additional example repositories:
| <a name="module_aci_fabric_l2_mtu"></a> [aci\_fabric\_l2\_mtu](#module\_aci\_fabric\_l2\_mtu) | ./modules/terraform-aci-fabric-l2-mtu | n/a |
| <a name="module_aci_fabric_leaf_interface_profile_auto"></a> [aci\_fabric\_leaf\_interface\_profile\_auto](#module\_aci\_fabric\_leaf\_interface\_profile\_auto) | ./modules/terraform-aci-fabric-leaf-interface-profile | n/a |
| <a name="module_aci_fabric_leaf_interface_profile_manual"></a> [aci\_fabric\_leaf\_interface\_profile\_manual](#module\_aci\_fabric\_leaf\_interface\_profile\_manual) | ./modules/terraform-aci-fabric-leaf-interface-profile | n/a |
| <a name="module_aci_fabric_leaf_switch_configuration"></a> [aci\_fabric\_leaf\_switch\_configuration](#module\_aci\_fabric\_leaf\_switch\_configuration) | ./modules/terraform-aci-switch-configuration | n/a |
| <a name="module_aci_fabric_leaf_switch_policy_group"></a> [aci\_fabric\_leaf\_switch\_policy\_group](#module\_aci\_fabric\_leaf\_switch\_policy\_group) | ./modules/terraform-aci-fabric-leaf-switch-policy-group | n/a |
| <a name="module_aci_fabric_leaf_switch_profile_auto"></a> [aci\_fabric\_leaf\_switch\_profile\_auto](#module\_aci\_fabric\_leaf\_switch\_profile\_auto) | ./modules/terraform-aci-fabric-leaf-switch-profile | n/a |
| <a name="module_aci_fabric_leaf_switch_profile_manual"></a> [aci\_fabric\_leaf\_switch\_profile\_manual](#module\_aci\_fabric\_leaf\_switch\_profile\_manual) | ./modules/terraform-aci-fabric-leaf-switch-profile | n/a |
Expand All @@ -206,6 +209,7 @@ Additional example repositories:
| <a name="module_aci_fabric_span_source_group"></a> [aci\_fabric\_span\_source\_group](#module\_aci\_fabric\_span\_source\_group) | ./modules/terraform-aci-fabric-span-source-group | n/a |
| <a name="module_aci_fabric_spine_interface_profile_auto"></a> [aci\_fabric\_spine\_interface\_profile\_auto](#module\_aci\_fabric\_spine\_interface\_profile\_auto) | ./modules/terraform-aci-fabric-spine-interface-profile | n/a |
| <a name="module_aci_fabric_spine_interface_profile_manual"></a> [aci\_fabric\_spine\_interface\_profile\_manual](#module\_aci\_fabric\_spine\_interface\_profile\_manual) | ./modules/terraform-aci-fabric-spine-interface-profile | n/a |
| <a name="module_aci_fabric_spine_switch_configuration"></a> [aci\_fabric\_spine\_switch\_configuration](#module\_aci\_fabric\_spine\_switch\_configuration) | ./modules/terraform-aci-switch-configuration | n/a |
| <a name="module_aci_fabric_spine_switch_policy_group"></a> [aci\_fabric\_spine\_switch\_policy\_group](#module\_aci\_fabric\_spine\_switch\_policy\_group) | ./modules/terraform-aci-fabric-spine-switch-policy-group | n/a |
| <a name="module_aci_fabric_spine_switch_profile_auto"></a> [aci\_fabric\_spine\_switch\_profile\_auto](#module\_aci\_fabric\_spine\_switch\_profile\_auto) | ./modules/terraform-aci-fabric-spine-switch-profile | n/a |
| <a name="module_aci_fabric_spine_switch_profile_manual"></a> [aci\_fabric\_spine\_switch\_profile\_manual](#module\_aci\_fabric\_spine\_switch\_profile\_manual) | ./modules/terraform-aci-fabric-spine-switch-profile | n/a |
Expand Down Expand Up @@ -235,6 +239,8 @@ Additional example repositories:
| <a name="module_aci_l3out_node_profile_manual"></a> [aci\_l3out\_node\_profile\_manual](#module\_aci\_l3out\_node\_profile\_manual) | ./modules/terraform-aci-l3out-node-profile | n/a |
| <a name="module_aci_l4l7_device"></a> [aci\_l4l7\_device](#module\_aci\_l4l7\_device) | ./modules/terraform-aci-l4l7-device | n/a |
| <a name="module_aci_ldap"></a> [aci\_ldap](#module\_aci\_ldap) | ./modules/terraform-aci-ldap | n/a |
| <a name="module_aci_leaf_fabric_interface_configuration"></a> [aci\_leaf\_fabric\_interface\_configuration](#module\_aci\_leaf\_fabric\_interface\_configuration) | ./modules/terraform-aci-fabric-interface-configuration | n/a |
| <a name="module_aci_leaf_fabric_interface_configuration_sub"></a> [aci\_leaf\_fabric\_interface\_configuration\_sub](#module\_aci\_leaf\_fabric\_interface\_configuration\_sub) | ./modules/terraform-aci-fabric-interface-configuration | n/a |
| <a name="module_aci_leaf_interface_configuration"></a> [aci\_leaf\_interface\_configuration](#module\_aci\_leaf\_interface\_configuration) | ./modules/terraform-aci-interface-configuration | n/a |
| <a name="module_aci_leaf_interface_configuration_sub"></a> [aci\_leaf\_interface\_configuration\_sub](#module\_aci\_leaf\_interface\_configuration\_sub) | ./modules/terraform-aci-interface-configuration | n/a |
| <a name="module_aci_link_level_policy"></a> [aci\_link\_level\_policy](#module\_aci\_link\_level\_policy) | ./modules/terraform-aci-link-level-policy | n/a |
Expand Down Expand Up @@ -283,6 +289,7 @@ Additional example repositories:
| <a name="module_aci_snmp_policy"></a> [aci\_snmp\_policy](#module\_aci\_snmp\_policy) | ./modules/terraform-aci-snmp-policy | n/a |
| <a name="module_aci_snmp_trap_policy"></a> [aci\_snmp\_trap\_policy](#module\_aci\_snmp\_trap\_policy) | ./modules/terraform-aci-snmp-trap-policy | n/a |
| <a name="module_aci_spanning_tree_policy"></a> [aci\_spanning\_tree\_policy](#module\_aci\_spanning\_tree\_policy) | ./modules/terraform-aci-spanning-tree-policy | n/a |
| <a name="module_aci_spine_fabric_interface_configuration"></a> [aci\_spine\_fabric\_interface\_configuration](#module\_aci\_spine\_fabric\_interface\_configuration) | ./modules/terraform-aci-fabric-interface-configuration | n/a |
| <a name="module_aci_spine_interface_configuration"></a> [aci\_spine\_interface\_configuration](#module\_aci\_spine\_interface\_configuration) | ./modules/terraform-aci-interface-configuration | n/a |
| <a name="module_aci_sr_mpls_external_endpoint_group"></a> [aci\_sr\_mpls\_external\_endpoint\_group](#module\_aci\_sr\_mpls\_external\_endpoint\_group) | ./modules/terraform-aci-external-endpoint-group | n/a |
| <a name="module_aci_sr_mpls_l3out"></a> [aci\_sr\_mpls\_l3out](#module\_aci\_sr\_mpls\_l3out) | ./modules/terraform-aci-l3out | n/a |
Expand Down
42 changes: 34 additions & 8 deletions aci_access_policies.tf
Original file line number Diff line number Diff line change
Expand Up @@ -142,7 +142,7 @@ module "aci_access_leaf_switch_profile_auto" {
module "aci_access_leaf_switch_profile_manual" {
source = "./modules/terraform-aci-access-leaf-switch-profile"

for_each = { for prof in try(local.access_policies.leaf_switch_profiles, []) : prof.name => prof if local.modules.aci_access_leaf_switch_profile && var.manage_access_policies }
for_each = { for prof in try(local.access_policies.leaf_switch_profiles, []) : prof.name => prof if local.modules.aci_access_leaf_switch_profile && try(local.apic.new_interface_configuration, local.defaults.apic.new_interface_configuration) == false && var.manage_access_policies }
name = "${each.value.name}${local.defaults.apic.access_policies.leaf_switch_profiles.name_suffix}"
selectors = [for selector in try(each.value.selectors, []) : {
name = "${selector.name}${local.defaults.apic.access_policies.leaf_switch_profiles.selectors.name_suffix}"
Expand All @@ -162,6 +162,19 @@ module "aci_access_leaf_switch_profile_manual" {
]
}

module "aci_access_leaf_switch_configuration" {
source = "./modules/terraform-aci-switch-configuration"

for_each = { for node in try(local.node_policies.nodes, []) : node.id => node if node.role == "leaf" && local.modules.aci_switch_configuration && try(local.apic.new_interface_configuration, local.defaults.apic.new_interface_configuration) == true && var.manage_access_policies }
node_id = each.value.id
role = each.value.role
access_policy_group = try("${each.value.access_policy_group}${local.defaults.apic.access_policies.leaf_switch_policy_groups.name_suffix}", "")

depends_on = [
module.aci_access_leaf_switch_policy_group,
]
}

module "aci_access_spine_switch_profile_auto" {
source = "./modules/terraform-aci-access-spine-switch-profile"

Expand All @@ -187,7 +200,7 @@ module "aci_access_spine_switch_profile_auto" {
module "aci_access_spine_switch_profile_manual" {
source = "./modules/terraform-aci-access-spine-switch-profile"

for_each = { for prof in try(local.access_policies.spine_switch_profiles, []) : prof.name => prof if local.modules.aci_access_spine_switch_profile && var.manage_access_policies }
for_each = { for prof in try(local.access_policies.spine_switch_profiles, []) : prof.name => prof if local.modules.aci_access_spine_switch_profile && try(local.apic.new_interface_configuration, local.defaults.apic.new_interface_configuration) == false && var.manage_access_policies }
name = each.value.name
selectors = [for selector in try(each.value.selectors, []) : {
name = "${selector.name}${local.defaults.apic.access_policies.spine_switch_profiles.selectors.name_suffix}"
Expand All @@ -206,6 +219,19 @@ module "aci_access_spine_switch_profile_manual" {
]
}

module "aci_access_spine_switch_configuration" {
source = "./modules/terraform-aci-switch-configuration"

for_each = { for node in try(local.node_policies.nodes, []) : node.id => node if node.role == "spine" && local.modules.aci_switch_configuration && try(local.apic.new_interface_configuration, local.defaults.apic.new_interface_configuration) == true && var.manage_access_policies }
node_id = each.value.id
role = each.value.role
access_policy_group = try("${each.value.access_policy_group}${local.defaults.apic.access_policies.spine_switch_policy_groups.name_suffix}", "")

depends_on = [
module.aci_access_spine_switch_policy_group,
]
}

module "aci_cdp_policy" {
source = "./modules/terraform-aci-cdp-policy"

Expand Down Expand Up @@ -366,7 +392,7 @@ module "aci_access_leaf_interface_profile_auto" {
module "aci_access_leaf_interface_profile_manual" {
source = "./modules/terraform-aci-access-leaf-interface-profile"

for_each = { for prof in try(local.access_policies.leaf_interface_profiles, []) : prof.name => prof if local.modules.aci_access_leaf_interface_profile && var.manage_access_policies }
for_each = { for prof in try(local.access_policies.leaf_interface_profiles, []) : prof.name => prof if local.modules.aci_access_leaf_interface_profile && try(local.apic.new_interface_configuration, local.defaults.apic.new_interface_configuration) == false && var.manage_access_policies }
name = "${each.value.name}${local.defaults.apic.access_policies.leaf_interface_profiles.name_suffix}"
}

Expand Down Expand Up @@ -409,7 +435,7 @@ locals {
module "aci_access_leaf_interface_selector_manual" {
source = "./modules/terraform-aci-access-leaf-interface-selector"

for_each = { for selector in local.leaf_interface_selectors_manual : selector.key => selector.value if local.modules.aci_access_leaf_interface_selector && var.manage_access_policies }
for_each = { for selector in local.leaf_interface_selectors_manual : selector.key => selector.value if local.modules.aci_access_leaf_interface_selector && try(local.apic.new_interface_configuration, local.defaults.apic.new_interface_configuration) == false && var.manage_access_policies }
interface_profile = each.value.profile_name
name = each.value.name
fex_id = each.value.fex_id
Expand All @@ -429,7 +455,7 @@ module "aci_access_leaf_interface_selector_manual" {
module "aci_access_fex_interface_profile_manual" {
source = "./modules/terraform-aci-access-fex-interface-profile"

for_each = toset([for fex in try(local.access_policies.fex_interface_profiles, []) : fex.name if local.modules.aci_access_fex_interface_profile && var.manage_access_policies])
for_each = toset([for fex in try(local.access_policies.fex_interface_profiles, []) : fex.name if local.modules.aci_access_fex_interface_profile && try(local.apic.new_interface_configuration, local.defaults.apic.new_interface_configuration) == false && var.manage_access_policies])
name = "${each.value}${local.defaults.apic.access_policies.fex_interface_profiles.name_suffix}"
}

Expand Down Expand Up @@ -460,7 +486,7 @@ locals {
module "aci_access_fex_interface_selector_manual" {
source = "./modules/terraform-aci-access-fex-interface-selector"

for_each = { for selector in local.fex_interface_selectors_manual : selector.key => selector.value if local.modules.aci_access_fex_interface_selector && var.manage_access_policies }
for_each = { for selector in local.fex_interface_selectors_manual : selector.key => selector.value if local.modules.aci_access_fex_interface_selector && try(local.apic.new_interface_configuration, local.defaults.apic.new_interface_configuration) == false && var.manage_access_policies }
interface_profile = each.value.profile_name
name = each.value.name
policy_group = each.value.policy_group
Expand All @@ -483,7 +509,7 @@ module "aci_access_spine_interface_profile_auto" {
module "aci_access_spine_interface_profile_manual" {
source = "./modules/terraform-aci-access-spine-interface-profile"

for_each = { for prof in try(local.access_policies.spine_interface_profiles, []) : prof.name => prof if local.modules.aci_access_spine_interface_profile && var.manage_access_policies }
for_each = { for prof in try(local.access_policies.spine_interface_profiles, []) : prof.name => prof if local.modules.aci_access_spine_interface_profile && try(local.apic.new_interface_configuration, local.defaults.apic.new_interface_configuration) == false && var.manage_access_policies }
name = "${each.value.name}${local.defaults.apic.access_policies.spine_interface_profiles.name_suffix}"
}

Expand Down Expand Up @@ -513,7 +539,7 @@ locals {
module "aci_access_spine_interface_selector_manual" {
source = "./modules/terraform-aci-access-spine-interface-selector"

for_each = { for selector in local.spine_interface_selectors_manual : selector.key => selector.value if local.modules.aci_access_spine_interface_selector && var.manage_access_policies }
for_each = { for selector in local.spine_interface_selectors_manual : selector.key => selector.value if local.modules.aci_access_spine_interface_selector && try(local.apic.new_interface_configuration, local.defaults.apic.new_interface_configuration) == false && var.manage_access_policies }
interface_profile = each.value.profile_name
name = each.value.name
policy_group = each.value.policy_group
Expand Down
Loading

0 comments on commit 4238071

Please sign in to comment.