Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Issue_507 - Add support for resolution_immediacy under fvRsDomAtt #185

Closed
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
5 changes: 4 additions & 1 deletion aci_tenants.tf
Original file line number Diff line number Diff line change
Expand Up @@ -328,7 +328,10 @@ locals {
contract_providers = try([for contract in epg.contracts.providers : "${contract}${local.defaults.apic.tenants.contracts.name_suffix}"], [])
contract_imported_consumers = try([for contract in epg.contracts.imported_consumers : "${contract}${local.defaults.apic.tenants.imported_contracts.name_suffix}"], [])
contract_intra_epgs = try([for contract in epg.contracts.intra_epgs : "${contract}${local.defaults.apic.tenants.contracts.name_suffix}"], [])
physical_domains = try([for domain in epg.physical_domains : "${domain}${local.defaults.apic.access_policies.physical_domains.name_suffix}"], [])
physical_domains = [for phydom in try(epg.physical_domains, []) : {
name = "${phydom.name}${local.defaults.apic.access_policies.physical_domains.name_suffix}"
resolution_immediacy = try(phydom.resolution_immediacy, local.defaults.apic.tenants.application_profiles.endpoint_groups.physical_domains.resolution_immediacy)
}]
contract_masters = [for master in try(epg.contracts.masters, []) : {
endpoint_group = master.endpoint_group
application_profile = try(master.application_profile, "${ap.name}${local.defaults.apic.tenants.application_profiles.name_suffix}")
Expand Down
2 changes: 1 addition & 1 deletion modules/terraform-aci-endpoint-group/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -143,7 +143,7 @@ module "aci_endpoint_group" {
| <a name="input_contract_imported_consumers"></a> [contract\_imported\_consumers](#input\_contract\_imported\_consumers) | List of imported contract consumers. | `list(string)` | `[]` | no |
| <a name="input_contract_intra_epgs"></a> [contract\_intra\_epgs](#input\_contract\_intra\_epgs) | List of intra-EPG contracts. | `list(string)` | `[]` | no |
| <a name="input_contract_masters"></a> [contract\_masters](#input\_contract\_masters) | List of EPG contract masters. | <pre>list(object({<br> endpoint_group = string<br> application_profile = optional(string, "")<br> }))</pre> | `[]` | no |
| <a name="input_physical_domains"></a> [physical\_domains](#input\_physical\_domains) | List of physical domains. | `list(string)` | `[]` | no |
| <a name="input_physical_domains"></a> [physical\_domains](#input\_physical\_domains) | List of physical domains. Choices `resolution_immediacy`: `immediate`, `lazy`, `pre-provision`. Default value `resolution_immediacy`: `immediate`. | <pre>list(object({<br> name = string<br> resolution_immediacy = optional(string, "immediate")<br> }))</pre> | `[]` | no |
| <a name="input_subnets"></a> [subnets](#input\_subnets) | List of subnets. Default value `public`: `false`. Default value `shared`: `false`. Default value `igmp_querier`: `false`. Default value `nd_ra_prefix`: `true`. Default value `no_default_gateway`: `false`. `nlb_mode` allowed values: `mode-mcast-igmp`, `mode-uc` or `mode-mcast-static`. | <pre>list(object({<br> description = optional(string, "")<br> ip = string<br> public = optional(bool, false)<br> shared = optional(bool, false)<br> igmp_querier = optional(bool, false)<br> nd_ra_prefix = optional(bool, true)<br> no_default_gateway = optional(bool, false)<br> nd_ra_prefix_policy = optional(string, "")<br> ip_dataplane_learning = optional(bool, null)<br> ip_pools = optional(list(object({<br> name = string<br> start_ip = optional(string, "0.0.0.0")<br> end_ip = optional(string, "0.0.0.0")<br> dns_search_suffix = optional(string, "")<br> dns_server = optional(string, "")<br> dns_suffix = optional(string, "")<br> wins_server = optional(string, "")<br> })), [])<br> next_hop_ip = optional(string, "")<br> anycast_mac = optional(string, "")<br> nlb_group = optional(string, "0.0.0.0")<br> nlb_mac = optional(string, "00:00:00:00:00:00")<br> nlb_mode = optional(string, "")<br> }))</pre> | `[]` | no |
| <a name="input_vmware_vmm_domains"></a> [vmware\_vmm\_domains](#input\_vmware\_vmm\_domains) | List of VMware VMM domains. Default value `u_segmentation`: `false`. Default value `netflow`: `false`. Choices `deployment_immediacy`: `immediate`, `lazy`. Default value `deployment_immediacy`: `lazy`. Choices `resolution_immediacy`: `immediate`, `lazy`, `pre-provision`. Default value `resolution_immediacy`: `immediate`. Default value `allow_promiscuous`: `false`. Default value `forged_transmits`: `false`. Default value `mac_changes`: `false`. | <pre>list(object({<br> name = string<br> u_segmentation = optional(bool, false)<br> delimiter = optional(string, "")<br> vlan = optional(number)<br> primary_vlan = optional(number)<br> secondary_vlan = optional(number)<br> netflow = optional(bool, false)<br> deployment_immediacy = optional(string, "lazy")<br> resolution_immediacy = optional(string, "immediate")<br> allow_promiscuous = optional(bool, false)<br> forged_transmits = optional(bool, false)<br> mac_changes = optional(bool, false)<br> custom_epg_name = optional(string, "")<br> elag = optional(string, "")<br> active_uplinks_order = optional(string, "")<br> standby_uplinks = optional(string, "")<br> }))</pre> | `[]` | no |
| <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 |
Expand Down
8 changes: 5 additions & 3 deletions modules/terraform-aci-endpoint-group/main.tf
Original file line number Diff line number Diff line change
Expand Up @@ -275,11 +275,13 @@ resource "aci_rest_managed" "fvRsSecInherited" {
}

resource "aci_rest_managed" "fvRsDomAtt" {
for_each = toset(var.physical_domains)
dn = "${aci_rest_managed.fvAEPg.dn}/rsdomAtt-[uni/phys-${each.value}]"
for_each = { for phydom in var.physical_domains : phydom.name => phydom }
dn = "${aci_rest_managed.fvAEPg.dn}/rsdomAtt-[uni/phys-${each.value.name}]"
class_name = "fvRsDomAtt"
content = {
tDn = "uni/phys-${each.value}"
tDn = "uni/phys-${each.value.name}"
resImedcy = each.value.resolution_immediacy

}
}

Expand Down
20 changes: 15 additions & 5 deletions modules/terraform-aci-endpoint-group/variables.tf
Original file line number Diff line number Diff line change
Expand Up @@ -217,15 +217,25 @@ variable "contract_masters" {
}

variable "physical_domains" {
description = "List of physical domains."
type = list(string)
default = []
description = "List of physical domains. Choices `resolution_immediacy`: `immediate`, `lazy`, `pre-provision`. Default value `resolution_immediacy`: `immediate`."
type = list(object({
name = string
resolution_immediacy = optional(string, "immediate")
}))
default = []

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

validation {
condition = alltrue([
for phydom in var.physical_domains : phydom.resolution_immediacy == null || try(contains(["immediate", "lazy", "pre-provision"], phydom.resolution_immediacy), false)
])
error_message = "`resolution_immediacy`: Allowed values are `immediate`, `lazy` or `pre-provision`."
}
}

Expand Down
Loading