Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 14 additions & 0 deletions aci_tenants.tf
Original file line number Diff line number Diff line change
Expand Up @@ -425,6 +425,13 @@ locals {
vlan = try(se.vlan, null)
additional_ips = try(se.additional_ips, [])
}]
static_aaeps = [for sa in try(epg.static_aaeps, []) : {
aaep = try(sa.aaep, null)
encap = try(sa.encap, null)
primary_encap = try(sa.primary_encap, null)
mode = try(sa.mode, local.defaults.apic.tenants.application_profiles.endpoint_groups.static_aaeps.mode)
deployment_immediacy = try(sa.deployment_immediacy, local.defaults.apic.tenants.application_profiles.endpoint_groups.static_aaeps.deployment_immediacy)
}]
l4l7_virtual_ips = [for vip in try(epg.l4l7_virtual_ips, []) : {
ip = vip.ip
description = try(vip.description, "")
Expand Down Expand Up @@ -510,6 +517,13 @@ module "aci_endpoint_group" {
vlan = se.vlan
additional_ips = se.additional_ips
}]
static_aaeps = [for sa in try(each.value.static_aaeps, []) : {
aaep = sa.aaep
encap = sa.encap
primary_encap = sa.primary_encap
mode = sa.mode
deployment_immediacy = sa.deployment_immediacy
}]
l4l7_virtual_ips = each.value.l4l7_virtual_ips
l4l7_address_pools = each.value.l4l7_address_pools

Expand Down
3 changes: 3 additions & 0 deletions defaults/defaults.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -1098,6 +1098,9 @@ defaults:
name_suffix: ""
ip: "0.0.0.0"
module: 1
static_aaeps:
deployment_immediacy: lazy
mode: regular
subnets:
primary_ip: false
public: false
Expand Down
2 changes: 2 additions & 0 deletions modules/terraform-aci-endpoint-group/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -149,6 +149,7 @@ module "aci_endpoint_group" {
| <a name="input_static_leafs"></a> [static\_leafs](#input\_static\_leafs) | List of static leaf switches. Allowed values `pod_id`: `1` - `255`. Default value `pod_id`: `1`. Allowed values `node_id`: `1` - `4000`. Allowed values `vlan`: `1` - `4096`. Choices `mode`: `regular`, `native`, `untagged`. Default value `mode`: `regular`. Choices `deployment_immediacy`: `immediate`, `lazy`. Default value `deployment_immediacy`: `immediate` | <pre>list(object({<br/> pod_id = optional(number, 1)<br/> node_id = number<br/> vlan = number<br/> mode = optional(string, "regular")<br/> deployment_immediacy = optional(string, "immediate")<br/> }))</pre> | `[]` | no |
| <a name="input_static_ports"></a> [static\_ports](#input\_static\_ports) | List of static ports. Allowed values `node_id`, `node2_id`: `1` - `4000`. Allowed values `fex_id`, `fex2_id`: `101` - `199`. Allowed values `vlan`: `1` - `4096`. Allowed values `pod_id`: `1` - `255`. Default value `pod_id`: `1`. Allowed values `port`: `1` - `127`. Allowed values `sub_port`: `1` - `16`. Allowed values `module`: `1` - `9`. Default value `module`: `1`. Choices `deployment_immediacy`: `immediate`, `lazy`. Default value `deployment_immediacy`: `lazy`. Choices `mode`: `regular`, `native`, `untagged`. Default value `mode`: `regular`. | <pre>list(object({<br/> description = optional(string, "")<br/> node_id = number<br/> node2_id = optional(number)<br/> fex_id = optional(number)<br/> fex2_id = optional(number)<br/> vlan = number<br/> primary_vlan = optional(number)<br/> pod_id = optional(number, 1)<br/> port = optional(number)<br/> sub_port = optional(number)<br/> module = optional(number, 1)<br/> channel = optional(string)<br/> deployment_immediacy = optional(string, "lazy")<br/> mode = optional(string, "regular")<br/> ptp_source_ip = optional(string, "0.0.0.0")<br/> ptp_mode = optional(string, "multicast")<br/> ptp_profile = optional(string)<br/> }))</pre> | `[]` | no |
| <a name="input_static_endpoints"></a> [static\_endpoints](#input\_static\_endpoints) | List of static endpoints. Format `mac`: `12:34:56:78:9A:BC`. Choices `type`: `silent-host`, `tep`, `vep`. Allowed values `node_id`, `node2_id`: `1` - `4000`. Allowed values `vlan`: `1` - `4096`. Allowed values `pod_id`: `1` - `255`. Default value `pod_id`: `1`. Allowed values `port`: `1` - `127`. Allowed values `module`: `1` - `9`. Default value `module`: `1`. | <pre>list(object({<br/> name = optional(string, "")<br/> alias = optional(string, "")<br/> mac = string<br/> ip = optional(string, "0.0.0.0")<br/> type = string<br/> node_id = optional(number)<br/> node2_id = optional(number)<br/> vlan = optional(number)<br/> pod_id = optional(number, 1)<br/> port = optional(number)<br/> module = optional(number, 1)<br/> channel = optional(string)<br/> additional_ips = optional(list(string), [])<br/> }))</pre> | `[]` | no |
| <a name="input_static_aaeps"></a> [static\_aaeps](#input\_static\_aaeps) | List of static aaeps. Allowed values `encap`: `1` - `4096`. Allowed values `primary_encap`: `1` - `4096`. Choices `deployment_immediacy`: `immediate`, `lazy`. Default value `deployment_immediacy`: `lazy`. Choices `mode`: `regular`, `native`, `untagged`. Default value `mode`: `regular` | <pre>list(object({<br/> aaep = string<br/> encap = number<br/> primary_encap = optional(number)<br/> deployment_immediacy = optional(string, "lazy")<br/> mode = optional(string, "regular")<br/> }))</pre> | `[]` | no |
| <a name="input_l4l7_virtual_ips"></a> [l4l7\_virtual\_ips](#input\_l4l7\_virtual\_ips) | List of EPG L4/L7 Virtual IPs. | <pre>list(object({<br/> ip = string<br/> description = optional(string, "")<br/> }))</pre> | `[]` | no |
| <a name="input_l4l7_address_pools"></a> [l4l7\_address\_pools](#input\_l4l7\_address\_pools) | List of EPG L4/L7 Address Pools. | <pre>list(object({<br/> name = string<br/> gateway_address = string<br/> from = optional(string, "")<br/> to = optional(string, "")<br/> }))</pre> | `[]` | no |
| <a name="input_bulk_static_ports"></a> [bulk\_static\_ports](#input\_bulk\_static\_ports) | Use bulk resource to configure static ports. | `bool` | `false` | no |
Expand All @@ -170,6 +171,7 @@ module "aci_endpoint_group" {
| [aci_rest_managed.fvEpAnycast](https://registry.terraform.io/providers/CiscoDevNet/aci/latest/docs/resources/rest_managed) | resource |
| [aci_rest_managed.fvEpNlb](https://registry.terraform.io/providers/CiscoDevNet/aci/latest/docs/resources/rest_managed) | resource |
| [aci_rest_managed.fvEpReachability](https://registry.terraform.io/providers/CiscoDevNet/aci/latest/docs/resources/rest_managed) | resource |
| [aci_rest_managed.fvRsAepAtt](https://registry.terraform.io/providers/CiscoDevNet/aci/latest/docs/resources/rest_managed) | resource |
| [aci_rest_managed.fvRsBd](https://registry.terraform.io/providers/CiscoDevNet/aci/latest/docs/resources/rest_managed) | resource |
| [aci_rest_managed.fvRsCons](https://registry.terraform.io/providers/CiscoDevNet/aci/latest/docs/resources/rest_managed) | resource |
| [aci_rest_managed.fvRsConsIf](https://registry.terraform.io/providers/CiscoDevNet/aci/latest/docs/resources/rest_managed) | resource |
Expand Down
17 changes: 16 additions & 1 deletion modules/terraform-aci-endpoint-group/main.tf
Original file line number Diff line number Diff line change
Expand Up @@ -522,6 +522,22 @@ resource "aci_rest_managed" "fvRsDomAtt_vmm" {
}
}

resource "aci_rest_managed" "fvRsAepAtt" {
for_each = { for sa in var.static_aaeps : sa.aaep => sa }
dn = "${aci_rest_managed.fvAEPg.dn}/rsaepAtt-${each.value.aaep}"
class_name = "fvRsAepAtt"
content = {
tnInfraAttEntityPName = each.value.aaep
encap = "vlan-${each.value.encap}"
primaryEncap = each.value.primary_encap != null ? "vlan-${each.value.primary_encap}" : "unknown"
mode = each.value.mode
instrImedcy = each.value.deployment_immediacy
}
lifecycle {
ignore_changes = [ annotation ]
}
}

resource "aci_rest_managed" "fvUplinkOrderCont" {
for_each = { for vmm_vwm in var.vmware_vmm_domains : vmm_vwm.name => vmm_vwm if vmm_vwm.active_uplinks_order != "" || vmm_vwm.standby_uplinks != "" }
dn = "${aci_rest_managed.fvRsDomAtt_vmm[each.key].dn}/uplinkorder"
Expand Down Expand Up @@ -588,4 +604,3 @@ resource "aci_rest_managed" "fvnsUcastAddrBlk" {
to = each.value.to
}
}

47 changes: 47 additions & 0 deletions modules/terraform-aci-endpoint-group/variables.tf
Original file line number Diff line number Diff line change
Expand Up @@ -641,6 +641,53 @@ variable "static_endpoints" {
}
}

variable "static_aaeps" {
description = "List of static aaeps. Allowed values `encap`: `1` - `4096`. Allowed values `primary_encap`: `1` - `4096`. Choices `deployment_immediacy`: `immediate`, `lazy`. Default value `deployment_immediacy`: `lazy`. Choices `mode`: `regular`, `native`, `untagged`. Default value `mode`: `regular`"
type = list(object({
aaep = string
encap = number
primary_encap = optional(number)
deployment_immediacy = optional(string, "lazy")
mode = optional(string, "regular")
}))
default = []

validation {
condition = alltrue([
for sa in var.static_aaeps : can(regex("^[a-zA-Z0-9_.:-]{0,64}$", sa.aaep))
])
error_message = "Allowed characters: `a`-`z`, `A`-`Z`, `0`-`9`, `_`, `.`, `:`, `-`. Maximum characters: 64."
}

validation {
condition = alltrue([
for sa in var.static_aaeps : (sa.encap >= 1 && sa.encap <= 4096)
])
error_message = "`vlan`: Minimum value: `1`. Maximum value: `4096`."
}

validation {
condition = alltrue([
for sa in var.static_aaeps : sa.primary_encap == null || try(sa.primary_encap >= 1 && sa.primary_encap <= 4096, false)
])
error_message = "`primary_encap`: Minimum value: `1`. Maximum value: `4096`."
}

validation {
condition = alltrue([
for sa in var.static_aaeps : sa.deployment_immediacy == null || try(contains(["immediate", "lazy"], sa.deployment_immediacy), false)
])
error_message = "`deployment_immediacy`: Allowed values are `immediate` or `lazy`."
}

validation {
condition = alltrue([
for sa in var.static_aaeps : sa.mode == null || try(contains(["regular", "native", "untagged"], sa.mode), false)
])
error_message = "`mode`: Allowed values are `regular`, `native` or `untagged`."
}
}

variable "l4l7_virtual_ips" {
description = "List of EPG L4/L7 Virtual IPs."
type = list(object({
Expand Down