Skip to content

Commit

Permalink
Module 2 add bgp route summarization policies (#97)
Browse files Browse the repository at this point in the history
Co-authored-by: dtatsumi <[email protected]>
  • Loading branch information
miwamoto0203 and dtatsumi-c authored Jul 29, 2024
1 parent 44bc607 commit 1ae334f
Show file tree
Hide file tree
Showing 15 changed files with 301 additions and 0 deletions.
4 changes: 4 additions & 0 deletions .pre-commit-config.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -125,6 +125,10 @@ repos:
args: ["./modules/terraform-aci-bgp-policy"]
- id: terraform-docs-system
args: ["./modules/terraform-aci-bgp-policy/examples/complete"]
- id: terraform-docs-system
args: ["./modules/terraform-aci-bgp-route-summarization-policy"]
- id: terraform-docs-system
args: ["./modules/terraform-aci-bgp-route-summarization-policy/examples/complete"]
- id: terraform-docs-system
args: ["./modules/terraform-aci-bgp-timer-policy"]
- id: terraform-docs-system
Expand Down
1 change: 1 addition & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -173,6 +173,7 @@ Additional example repositories:
| <a name="module_aci_bgp_best_path_policy"></a> [aci\_bgp\_best\_path\_policy](#module\_aci\_bgp\_best\_path\_policy) | ./modules/terraform-aci-bgp-best-path-policy | n/a |
| <a name="module_aci_bgp_peer_prefix_policy"></a> [aci\_bgp\_peer\_prefix\_policy](#module\_aci\_bgp\_peer\_prefix\_policy) | ./modules/terraform-aci-bgp-peer-prefix-policy | n/a |
| <a name="module_aci_bgp_policy"></a> [aci\_bgp\_policy](#module\_aci\_bgp\_policy) | ./modules/terraform-aci-bgp-policy | n/a |
| <a name="module_aci_bgp_route_summarization_policy"></a> [aci\_bgp\_route\_summarization\_policy](#module\_aci\_bgp\_route\_summarization\_policy) | ./modules/terraform-aci-bgp-route-summarization-policy | n/a |
| <a name="module_aci_bgp_timer_policy"></a> [aci\_bgp\_timer\_policy](#module\_aci\_bgp\_timer\_policy) | ./modules/terraform-aci-bgp-timer-policy | n/a |
| <a name="module_aci_bridge_domain"></a> [aci\_bridge\_domain](#module\_aci\_bridge\_domain) | ./modules/terraform-aci-bridge-domain | n/a |
| <a name="module_aci_ca_certificate"></a> [aci\_ca\_certificate](#module\_aci\_ca\_certificate) | ./modules/terraform-aci-ca-certificate | n/a |
Expand Down
33 changes: 33 additions & 0 deletions aci_tenants.tf
Original file line number Diff line number Diff line change
Expand Up @@ -2004,6 +2004,39 @@ module "aci_eigrp_interface_policy" {
]
}

locals {
bgp_route_summarization_policies = flatten([
for tenant in local.tenants : [
for policy in try(tenant.policies.bgp_route_summarization_policies, []) : {
key = format("%s/%s", tenant.name, policy.name)
tenant = tenant.name
name = "${policy.name}${local.defaults.apic.tenants.policies.bgp_route_summarization_policies.name_suffix}"
description = try(policy.description, "")
as_set = try(policy.as_set, local.defaults.apic.tenants.policies.bgp_route_summarization_policies.as_set)
summary_only = try(policy.summary_only, local.defaults.apic.tenants.policies.bgp_route_summarization_policies.summary_only)
af_mcast = try(policy.af_mcast, local.defaults.apic.tenants.policies.bgp_route_summarization_policies.af_mcast)
af_ucast = try(policy.af_ucast, local.defaults.apic.tenants.policies.bgp_route_summarization_policies.af_ucast)
}
]
])
}

module "aci_bgp_route_summarization_policy" {
source = "./modules/terraform-aci-bgp-route-summarization-policy"

for_each = { for pol in local.bgp_route_summarization_policies : pol.key => pol if local.modules.aci_bgp_route_summarization_policy && var.manage_tenants }
tenant = each.value.tenant
name = each.value.name
description = each.value.description
as_set = each.value.as_set
summary_only = each.value.summary_only
af_mcast = each.value.af_mcast
af_ucast = each.value.af_ucast

depends_on = [
module.aci_tenant,
]
}

locals {
bgp_timer_policies = flatten([
Expand Down
6 changes: 6 additions & 0 deletions defaults/defaults.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -1193,6 +1193,12 @@ defaults:
bgp_best_path_policies:
name_suffix: ""
control_type: ""
bgp_route_summarization_policies:
name_suffix: ""
as_set: false
summary_only: false
af_mcast: false
af_ucast: true
bgp_timer_policies:
name_suffix: ""
keepalive_interval: 60
Expand Down
1 change: 1 addition & 0 deletions defaults/modules.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@ modules:
aci_bgp_best_path_policy: true
aci_bgp_peer_prefix_policy: true
aci_bgp_policy: true
aci_bgp_route_summarization_policy: true
aci_bgp_timer_policy: true
aci_bridge_domain: true
aci_ca_certificate: true
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
version: '>= 0.14.0'

formatter: markdown table

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

sort:
enabled: false
63 changes: 63 additions & 0 deletions modules/terraform-aci-bgp-route-summarization-policy/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
<!-- BEGIN_TF_DOCS -->
# Terraform ACI BGP Route Summarization Policy Module

Manages ACI BGP Route Summarization Policy

Location in GUI:
`Tenants` » `XXX` » `Policies` » `Protocol` » `BGP` » `BGP Route Summarization`

## Examples

```hcl
module "aci_bgp_route_summarization_policy" {
source = "netascode/nac-aci/aci//modules/terraform-aci-bgp-route-summarization-policy"
version = ">= 0.8.0"
name = "ABC"
tenant = "TEN1"
description = "My Description"
as_set = true
summary_only = false
af_mcast = false
af_ucast = true
}
```

## 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) | BGP Route Summarization Policy name. | `string` | n/a | yes |
| <a name="input_description"></a> [description](#input\_description) | BGP Route Summarization Policy description. | `string` | `""` | no |
| <a name="input_as_set"></a> [as\_set](#input\_as\_set) | Flag to as Generate AS-SET information. | `bool` | `false` | no |
| <a name="input_summary_only"></a> [summary\_only](#input\_summary\_only) | Flag to as Do not advertise more specifics. | `bool` | `false` | no |
| <a name="input_af_mcast"></a> [af\_mcast](#input\_af\_mcast) | Flag to as AF Mcast. | `bool` | `false` | no |
| <a name="input_af_ucast"></a> [af\_ucast](#input\_af\_ucast) | Flag to as AF Ucast. | `bool` | `true` | no |

## Outputs

| Name | Description |
|------|-------------|
| <a name="output_dn"></a> [dn](#output\_dn) | Distinguished name of `bgpRtSummPol` object. |
| <a name="output_name"></a> [name](#output\_name) | BGP Route Summarization Policy name. |

## Resources

| Name | Type |
|------|------|
| [aci_rest_managed.bgpRtSummPol](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.14.0'

formatter: markdown table

content: |-
# BGP Route Summarization 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,28 @@
<!-- BEGIN_TF_DOCS -->
# BGP Route Summarization 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_bgp_route_summarization_policy" {
source = "netascode/nac-aci/aci//modules/terraform-aci-bgp-route-summarization-policy"
version = ">= 0.8.0"
name = "ABC"
tenant = "TEN1"
description = "My Description"
as_set = true
summary_only = false
af_mcast = false
af_ucast = true
}
```
<!-- END_TF_DOCS -->
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
module "aci_bgp_route_summarization_policy" {
source = "netascode/nac-aci/aci//modules/terraform-aci-bgp-route-summarization-policy"
version = ">= 0.8.0"

name = "ABC"
tenant = "TEN1"
description = "My Description"
as_set = true
summary_only = false
af_mcast = false
af_ucast = true
}
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"
}
}
}
10 changes: 10 additions & 0 deletions modules/terraform-aci-bgp-route-summarization-policy/main.tf
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
resource "aci_rest_managed" "bgpRtSummPol" {
dn = "uni/tn-${var.tenant}/bgprtsum-${var.name}"
class_name = "bgpRtSummPol"
content = {
name = var.name
descr = var.description
ctrl = join(",", concat(var.as_set == true ? ["as-set"] : [], var.summary_only == true ? ["summary-only"] : []))
addrTCtrl = join(",", concat(var.af_mcast == true ? ["af-mcast"] : [], var.af_ucast == true ? ["af-ucast"] : []))
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
output "dn" {
value = aci_rest_managed.bgpRtSummPol.id
description = "Distinguished name of `bgpRtSummPol` object."
}

output "name" {
value = aci_rest_managed.bgpRtSummPol.content.name
description = "BGP Route Summarization Policy name."
}
54 changes: 54 additions & 0 deletions modules/terraform-aci-bgp-route-summarization-policy/variables.tf
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
variable "tenant" {
description = "Tenant name."
type = string

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

variable "name" {
description = "BGP Route Summarization Policy name."
type = string

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

variable "description" {
description = "BGP Route Summarization Policy description."
type = string
default = ""

validation {
condition = can(regex("^[a-zA-Z0-9\\!#$%()*,-./:;@ _{|}~?&+]{0,128}$", var.description))
error_message = "Allowed characters: `a`-`z`, `A`-`Z`, `0`-`9`, `\\`, `!`, `#`, `$`, `%`, `(`, `)`, `*`, `,`, `-`, `.`, `/`, `:`, `;`, `@`, ` `, `_`, `{`, `|`, }`, `~`, `?`, `&`, `+`. Maximum characters: 128."
}
}

variable "as_set" {
description = "Flag to as Generate AS-SET information."
type = bool
default = false
}

variable "summary_only" {
description = "Flag to as Do not advertise more specifics."
type = bool
default = false
}

variable "af_mcast" {
description = "Flag to as AF Mcast."
type = bool
default = false
}

variable "af_ucast" {
description = "Flag to as AF Ucast."
type = bool
default = true
}
11 changes: 11 additions & 0 deletions modules/terraform-aci-bgp-route-summarization-policy/versions.tf
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"
}
}
}

0 comments on commit 1ae334f

Please sign in to comment.