Skip to content

Commit

Permalink
Add nd interface policy module (#47)
Browse files Browse the repository at this point in the history
  • Loading branch information
marehler authored Jan 30, 2024
1 parent 7b802f5 commit 397c87b
Show file tree
Hide file tree
Showing 14 changed files with 472 additions and 0 deletions.
1 change: 1 addition & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -255,6 +255,7 @@ Additional example repositories:
| <a name="module_aci_monitoring_policy"></a> [aci\_monitoring\_policy](#module\_aci\_monitoring\_policy) | ./modules/terraform-aci-monitoring-policy | n/a |
| <a name="module_aci_mst_policy"></a> [aci\_mst\_policy](#module\_aci\_mst\_policy) | ./modules/terraform-aci-mst-policy | n/a |
| <a name="module_aci_multicast_route_map"></a> [aci\_multicast\_route\_map](#module\_aci\_multicast\_route\_map) | ./modules/terraform-aci-multicast-route-map | n/a |
| <a name="module_aci_nd_interface_policy"></a> [aci\_nd\_interface\_policy](#module\_aci\_nd\_interface\_policy) | ./modules/terraform-aci-nd-interface-policy | n/a |
| <a name="module_aci_nd_ra_prefix_policy"></a> [aci\_nd\_ra\_prefix\_policy](#module\_aci\_nd\_ra\_prefix\_policy) | ./modules/terraform-aci-nd-ra-prefix-policy | n/a |
| <a name="module_aci_node_control_policy"></a> [aci\_node\_control\_policy](#module\_aci\_node\_control\_policy) | ./modules/terraform-aci-node-control-policy | n/a |
| <a name="module_aci_node_registration"></a> [aci\_node\_registration](#module\_aci\_node\_registration) | ./modules/terraform-aci-node-registration | n/a |
Expand Down
50 changes: 50 additions & 0 deletions aci_tenants.tf
Original file line number Diff line number Diff line change
Expand Up @@ -2626,6 +2626,56 @@ locals {
])
}

locals {
nd_interface_policies = flatten([
for tenant in local.tenants : [
for policy in try(tenant.policies.nd_interface_policies, []) : {
key = format("%s/%s", tenant.name, policy.name)
tenant = tenant.name
name = "${policy.name}${local.defaults.apic.tenants.policies.nd_interface_policies.name_suffix}"
description = try(policy.description, "")
controller_state = [for state in try(policy.controller_state, []) : state]
hop_limit = try(policy.hop_limit, local.defaults.apic.tenants.policies.nd_interface_policies.hop_limit)
ns_tx_interval = try(policy.ns_tx_interval, local.defaults.apic.tenants.policies.nd_interface_policies.ns_tx_interval)
mtu = try(policy.mtu, local.defaults.apic.tenants.policies.nd_interface_policies.mtu)
retransmit_retry_count = try(policy.retransmit_retry_count, local.defaults.apic.tenants.policies.nd_interface_policies.retransmit_retry_count)
nud_retransmit_base = try(policy.nud_retransmit_base, local.defaults.apic.tenants.policies.nd_interface_policies.nud_retransmit_base)
nud_retransmit_interval = try(policy.nud_retransmit_interval, local.defaults.apic.tenants.policies.nd_interface_policies.nud_retransmit_interval)
nud_retransmit_count = try(policy.nud_retransmit_count, local.defaults.apic.tenants.policies.nd_interface_policies.nud_retransmit_count)
route_advertise_interval = try(policy.route_advertise_interval, local.defaults.apic.tenants.policies.nd_interface_policies.route_advertise_interval)
router_lifetime = try(policy.router_lifetime, local.defaults.apic.tenants.policies.nd_interface_policies.router_lifetime)
reachable_time = try(policy.reachable_time, local.defaults.apic.tenants.policies.nd_interface_policies.reachable_time)
retransmit_timer = try(policy.retransmit_retry_count, local.defaults.apic.tenants.policies.nd_interface_policies.retransmit_timer)
}
]
])
}

module "aci_nd_interface_policy" {
source = "./modules/terraform-aci-nd-interface-policy"

for_each = { for pol in local.nd_interface_policies : pol.key => pol if local.modules.aci_nd_interface_policy && var.manage_tenants }
tenant = each.value.tenant
name = each.value.name
description = each.value.description
controller_state = each.value.controller_state
hop_limit = each.value.hop_limit
ns_tx_interval = each.value.ns_tx_interval
mtu = each.value.mtu
retransmit_retry_count = each.value.retransmit_retry_count
nud_retransmit_base = each.value.nud_retransmit_base
nud_retransmit_interval = each.value.nud_retransmit_interval
nud_retransmit_count = each.value.nud_retransmit_count
route_advertise_interval = each.value.route_advertise_interval
router_lifetime = each.value.router_lifetime
reachable_time = each.value.reachable_time
retransmit_timer = each.value.retransmit_timer

depends_on = [
module.aci_tenant,
]
}

module "aci_nd_ra_prefix_policy" {
source = "./modules/terraform-aci-nd-ra-prefix-policy"

Expand Down
13 changes: 13 additions & 0 deletions defaults/defaults.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -1256,6 +1256,19 @@ defaults:
detection_multiplier: 3
min_rx_interval: 250
min_tx_interval: 250
nd_interface_policies:
name_suffix: ""
hop_limit: 64
ns_tx_interval: 1000
mtu: 9000
retransmit_retry_count: 3
nud_retransmit_base: 1
nud_retransmit_interval: 1000
nud_retransmit_count: 3
route_advertise_interval: 600
router_lifetime: 1800
reachable_time: 0
retransmit_timer: 0
nd_ra_prefix_policies:
name_suffix: ""
valid_lifetime: 2592000
Expand Down
1 change: 1 addition & 0 deletions defaults/modules.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -97,6 +97,7 @@ modules:
aci_monitoring_policy: true
aci_mst_policy: true
aci_multicast_route_map: true
aci_nd_interface_policy: true
aci_nd_ra_prefix_policy: true
aci_node_control_policy: true
aci_node_registration: true
Expand Down
34 changes: 34 additions & 0 deletions modules/terraform-aci-nd-interface-policy/.terraform-docs.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
version: '>= 0.0.1'

formatter: markdown table

content: |-
# Terraform ACI ND Interface Policy Module
Manages ACI ND Interface Policy
Location in GUI:
`Tenants` » `XXX` » `Policies` » `Protocol` » `ND Interface`
## Examples
```hcl
{{ include "./examples/complete/main.tf" }}
```
{{ .Requirements }}
{{ .Providers }}
{{ .Inputs }}
{{ .Outputs }}
{{ .Resources }}
output:
file: README.md
mode: replace

sort:
enabled: false
79 changes: 79 additions & 0 deletions modules/terraform-aci-nd-interface-policy/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,79 @@
<!-- BEGIN_TF_DOCS -->
# Terraform ACI ND Interface Policy Module

Manages ACI ND Interface Policy

Location in GUI:
`Tenants` » `XXX` » `Policies` » `Protocol` » `ND Interface`

## Examples

```hcl
module "aci_nd_interface_policy" {
source = "netascode/nac-aci/aci//modules/terraform-aci-nd-interface-policy"
version = ">= 0.8.0"
tenant = "ABC"
name = "ND-INTF-POL1"
description = "My Description"
controller_state = ["other-cfg"]
hop_limit = 32
ns_tx_interval = 1000
mtu = 9000
retransmit_retry_count = 3
nud_retransmit_base = 1
nud_retransmit_interval = 2000
nud_retransmit_count = 3
route_advertise_interval = 600
router_lifetime = 3600
reachable_time = 0
retransmit_timer = 0
}
```

## Requirements

| Name | Version |
|------|---------|
| <a name="requirement_terraform"></a> [terraform](#requirement\_terraform) | >= 1.0.0 |
| <a name="requirement_aci"></a> [aci](#requirement\_aci) | >= 2.0.0 |

## Providers

| Name | Version |
|------|---------|
| <a name="provider_aci"></a> [aci](#provider\_aci) | >= 2.0.0 |

## Inputs

| Name | Description | Type | Default | Required |
|------|-------------|------|---------|:--------:|
| <a name="input_tenant"></a> [tenant](#input\_tenant) | Tenant name. | `string` | n/a | yes |
| <a name="input_name"></a> [name](#input\_name) | ND interface policy name. | `string` | n/a | yes |
| <a name="input_description"></a> [description](#input\_description) | Description. | `string` | `""` | no |
| <a name="input_controller_state"></a> [controller\_state](#input\_controller_state) | Controller administrative state. Choices: `managed-cfg`, `other-cfg`, `suppress-ra`, `suppress-ra-mtu`, `unsolicit-na-glean`. | `list` | `[]` | no |
| <a name="input_hop_limit"></a> [hop\_limit](#input\_hop\_limit) | Hop limit. Minimum value: 1. Maximum value: 255. | `number` | `64` | no |
| <a name="input_ns_tx_interval"></a> [ns\_tx\_interval](#input\_ns\_tx\_interval) | NS transmit interval. Minimum value: 1000. Maximum value: 3600000 | `number` | `1000` | no |
| <a name="input_mtu"></a> [mtu](#input\_mtu) | Maximum transmission unit. Minimum value: 1280. Maximum value: 9000. | `number` | `9000` | no |
| <a name="input_retransmit_retry_count"></a> [retransmit\_retry\_count](#input\_retransmit\_retry\_count) | Retransmission retry count. Minimum value: 1. Maximum value: 100. | `number` | `3` | no |
| <a name="input_nud_retransmit_base"></a> [nud\_retransmit\_base](#input\_nud\_retransmit\_base) | NUD retransmission base. Minimum value: 1. Maximum value: 3. | `number` | `1` | no |
| <a name="input_nud_retransmit_interval"></a> [nud\_retransmit\_interval](#input\_nud\_retransmit\_interval) | NUD retransmission interval (msec). Minimum value: 1000. Maximum value: 10000. | `number` | `1000` | no |
| <a name="input_nud_retransmit_count"></a> [nud\_retransmit\_count](#input\_nud\_retransmit\_count) | NUD retransmission count. Minimum value: 1. Maximum value: 3. | `number` | `1` | no |
| <a name="input_route_advertise_interval"></a> [route\_advertise\_interval](#input\_route\_advertise\_interval) | Route advertise interval. Minimum value: 4. Maximum value: 1800. | `number` | `600` | no |
| <a name="input_router_lifetime"></a> [router\_lifetime](#input\_router\_lifetime) | Router lifetime. Minimum value: 0. Maximum value: 9000. | `number` | `1800` | no |
| <a name="input_reachable_time"></a> [reachable\_time](#input\_reachable\_time) | Reachable time (msec). Minimum value: 0. Maximum value: 3600000. | `number` | `0` | no |
| <a name="input_retransmit_timer"></a> [retransmit\_timer](#input\_retransmit\_timer) | Retransmit timer (msec). Minimum value: 0. Maximum value: 4294967295. | `number` | `0` | no |

## Outputs

| Name | Description |
|------|-------------|
| <a name="output_dn"></a> [dn](#output\_dn) | Distinguished name of `ndIfPol` object. |
| <a name="output_name"></a> [name](#output\_name) | ND interface policy name. |

## Resources

| Name | Type |
|------|------|
| [aci_rest_managed.ndIfPol](https://registry.terraform.io/providers/CiscoDevNet/aci/latest/docs/resources/rest_managed) | resource |
<!-- END_TF_DOCS -->
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
version: '>= 0.0.1'

formatter: markdown table

content: |-
# ND Interface Policy Example
To run this example you need to execute:
```bash
$ terraform init
$ terraform plan
$ terraform apply
```
Note that this example will create resources. Resources can be destroyed with `terraform destroy`.
```hcl
{{ include "./main.tf" }}
```
output:
file: README.md
mode: replace
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
<!-- BEGIN_TF_DOCS -->
# ND Interface Policy Example

To run this example you need to execute:

```bash
$ terraform init
$ terraform plan
$ terraform apply
```

Note that this example will create resources. Resources can be destroyed with `terraform destroy`.

```hcl
module "aci_nd_interface_policy" {
source = "netascode/nac-aci/aci//modules/terraform-aci-nd-interface-policy"
version = ">= 0.8.0"
tenant = "ABC"
name = "ND-INTF-POL1"
description = "My Description"
controller_state = ["other-cfg"]
hop_limit = 32
ns_tx_interval = 1000
mtu = 9000
retransmit_retry_count = 3
nud_retransmit_base = 1
nud_retransmit_interval = 2000
nud_retransmit_count = 3
route_advertise_interval = 600
router_lifetime = 3600
reachable_time = 0
retransmit_timer = 0
}
```
<!-- END_TF_DOCS -->
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
module "aci_nd_interface_policy" {
source = "netascode/nac-aci/aci//modules/terraform-aci-nd-interface-policy"
version = ">= 0.8.0"

tenant = "ABC"
name = "ND-INTF-POL1"
description = "My Description"
controller_state = ["other-cfg"]
hop_limit = 32
ns_tx_interval = 1000
mtu = 9000
retransmit_retry_count = 3
nud_retransmit_base = 1
nud_retransmit_interval = 2000
nud_retransmit_count = 3
route_advertise_interval = 600
router_lifetime = 3600
reachable_time = 0
retransmit_timer = 0
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@

terraform {
required_version = ">= 1.0.0"

required_providers {
aci = {
source = "CiscoDevNet/aci"
version = ">= 2.0.0"
}
}
}
20 changes: 20 additions & 0 deletions modules/terraform-aci-nd-interface-policy/main.tf
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
resource "aci_rest_managed" "ndIfPol" {
dn = "uni/tn-${var.tenant}/ndifpol-${var.name}"
class_name = "ndIfPol"
content = {
name = var.name
descr = var.description
ctrl = join(",", var.controller_state)
hopLimit = var.hop_limit
nsIntvl = var.ns_tx_interval
mtu = var.mtu
nsRetries = var.retransmit_retry_count
nudRetryBase = var.nud_retransmit_base
nudRetryInterval = var.nud_retransmit_interval
nudRetryMaxAttempts = var.nud_retransmit_count
raIntvl = var.route_advertise_interval
raLifetime = var.router_lifetime
reachableTime = var.reachable_time
retransTimer = var.retransmit_timer
}
}
9 changes: 9 additions & 0 deletions modules/terraform-aci-nd-interface-policy/outputs.tf
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
output "dn" {
value = aci_rest_managed.ndIfPol.id
description = "Distinguished name of `ndIfPol` object."
}

output "name" {
value = aci_rest_managed.ndIfPol.content.name
description = "ND interface policy name."
}
Loading

0 comments on commit 397c87b

Please sign in to comment.