diff --git a/aci_access_policies.tf b/aci_access_policies.tf index 25d6a289..a48095d0 100644 --- a/aci_access_policies.tf +++ b/aci_access_policies.tf @@ -912,6 +912,23 @@ module "aci_infra_dhcp_relay_policy" { providers_ = each.value.providers_ } +locals { + infra_monitoring_policies = flatten([ + for policy in try(local.access_policies.monitoring_policies, []) : { + name = "${policy.name}${local.defaults.apic.access_policies.monitoring_policies.name_suffix}" + description = try(policy.description, "") + } + ]) +} + +module "aci_infra_monitoring_policy" { + source = "./modules/terraform-aci-infra-monitoring-policy" + + for_each = { for policy in local.infra_monitoring_policies : policy.name => policy if local.modules.aci_infra_monitoring_policy && var.manage_access_policies } + name = each.value.name + description = each.value.description +} + module "aci_netflow_exporter" { source = "./modules/terraform-aci-netflow-exporter" diff --git a/modules/terraform-aci-access-monitoring-policy/terraform-aci-dhcp-relay-policy/.terraform-docs.yml b/modules/terraform-aci-access-monitoring-policy/terraform-aci-dhcp-relay-policy/.terraform-docs.yml new file mode 100644 index 00000000..da16cc33 --- /dev/null +++ b/modules/terraform-aci-access-monitoring-policy/terraform-aci-dhcp-relay-policy/.terraform-docs.yml @@ -0,0 +1,34 @@ +version: '>= 0.14.0' + +formatter: markdown table + +content: |- + # Terraform ACI Monitoring Policy Module + + Manages ACI Monitoring Policy + + Location in GUI: + `Fabric` » `Access Policies` » `Policies` » `Monitoring` + + ## Examples + + ```hcl + {{ include "./examples/complete/main.tf" }} + ``` + + {{ .Requirements }} + + {{ .Providers }} + + {{ .Inputs }} + + {{ .Outputs }} + + {{ .Resources }} + +output: + file: README.md + mode: replace + +sort: + enabled: false \ No newline at end of file diff --git a/modules/terraform-aci-access-monitoring-policy/terraform-aci-dhcp-relay-policy/README.md b/modules/terraform-aci-access-monitoring-policy/terraform-aci-dhcp-relay-policy/README.md new file mode 100644 index 00000000..168b5f04 --- /dev/null +++ b/modules/terraform-aci-access-monitoring-policy/terraform-aci-dhcp-relay-policy/README.md @@ -0,0 +1,53 @@ + +# Terraform ACI Monitoring Policy Module + +Manages ACI Monitoring Policy + +Location in GUI: +`Fabric` » `Access Policies` » `Policies` » `Monitoring` + +## Examples + +```hcl +module "aci_infra_monitoring_policy" { + source = "netascode/nac-aci/aci//modules/terraform-aci-access-monitoring-policy" + version = ">= 0.8.0" + + name = "INFRA-MONITORING-POL" + description = "My Description" +} +``` + +## Requirements + +| Name | Version | +|------|---------| +| [terraform](#requirement\_terraform) | >= 1.3.0 | +| [aci](#requirement\_aci) | >= 2.0.0 | + +## Providers + +| Name | Version | +|------|---------| +| [aci](#provider\_aci) | >= 2.0.0 | + +## Inputs + +| Name | Description | Type | Default | Required | +|------|-------------|------|---------|:--------:| +| [name](#input\_name) | Monitoring policy name. | `string` | n/a | yes | +| description | Description. | string | "" | no | + +## Outputs + +| Name | Description | +|------|-------------| +| [dn](#output\_dn) | Distinguished name of `monInfraPol` object. | +| [name](#output\_name) | Monitoring policy name. | + +## Resources + +| Name | Type | +|------|------| +| [aci_rest_managed.monInfraPol](https://registry.terraform.io/providers/CiscoDevNet/aci/latest/docs/resources/rest_managed) | resource | + \ No newline at end of file diff --git a/modules/terraform-aci-access-monitoring-policy/terraform-aci-dhcp-relay-policy/examples/complete/.terraform-docs.yml b/modules/terraform-aci-access-monitoring-policy/terraform-aci-dhcp-relay-policy/examples/complete/.terraform-docs.yml new file mode 100644 index 00000000..a601d9eb --- /dev/null +++ b/modules/terraform-aci-access-monitoring-policy/terraform-aci-dhcp-relay-policy/examples/complete/.terraform-docs.yml @@ -0,0 +1,24 @@ +version: '>= 0.14.0' + +formatter: markdown table + +content: |- + # Monitoring 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 \ No newline at end of file diff --git a/modules/terraform-aci-access-monitoring-policy/terraform-aci-dhcp-relay-policy/examples/complete/README.md b/modules/terraform-aci-access-monitoring-policy/terraform-aci-dhcp-relay-policy/examples/complete/README.md new file mode 100644 index 00000000..fb22ffc9 --- /dev/null +++ b/modules/terraform-aci-access-monitoring-policy/terraform-aci-dhcp-relay-policy/examples/complete/README.md @@ -0,0 +1,22 @@ + +# Monitoring 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_infra_monitoring_policy" { + source = "netascode/nac-aci/aci//modules/terraform-aci-access-monitoring-policy" + version = ">= 0.8.0" + name = "INFRA-MONITORING-POL" + description = "My Description" +} +``` + \ No newline at end of file diff --git a/modules/terraform-aci-access-monitoring-policy/terraform-aci-dhcp-relay-policy/examples/complete/main.tf b/modules/terraform-aci-access-monitoring-policy/terraform-aci-dhcp-relay-policy/examples/complete/main.tf new file mode 100644 index 00000000..ee237792 --- /dev/null +++ b/modules/terraform-aci-access-monitoring-policy/terraform-aci-dhcp-relay-policy/examples/complete/main.tf @@ -0,0 +1,7 @@ +module "aci_infra_monitoring_policy" { + source = "netascode/nac-aci/aci//modules/terraform-aci-access-monitoring-policy" + version = ">= 0.8.0" + + name = "INFRA-MONITORING-POL" + description = "My Description" +} \ No newline at end of file diff --git a/modules/terraform-aci-access-monitoring-policy/terraform-aci-dhcp-relay-policy/examples/complete/versions.tf b/modules/terraform-aci-access-monitoring-policy/terraform-aci-dhcp-relay-policy/examples/complete/versions.tf new file mode 100644 index 00000000..9299fb61 --- /dev/null +++ b/modules/terraform-aci-access-monitoring-policy/terraform-aci-dhcp-relay-policy/examples/complete/versions.tf @@ -0,0 +1,11 @@ + +terraform { + required_version = ">= 1.3.0" + + required_providers { + aci = { + source = "CiscoDevNet/aci" + version = ">= 2.0.0" + } + } +} diff --git a/modules/terraform-aci-access-monitoring-policy/terraform-aci-dhcp-relay-policy/main.tf b/modules/terraform-aci-access-monitoring-policy/terraform-aci-dhcp-relay-policy/main.tf new file mode 100644 index 00000000..759031bc --- /dev/null +++ b/modules/terraform-aci-access-monitoring-policy/terraform-aci-dhcp-relay-policy/main.tf @@ -0,0 +1,8 @@ +resource "aci_rest_managed" "monInfraPol" { + dn = "uni/infra/moninfra-${var.name}" + class_name = "monInfraPol" + content = { + name = var.name + descr = var.description + } +} \ No newline at end of file diff --git a/modules/terraform-aci-access-monitoring-policy/terraform-aci-dhcp-relay-policy/outputs.tf b/modules/terraform-aci-access-monitoring-policy/terraform-aci-dhcp-relay-policy/outputs.tf new file mode 100644 index 00000000..fa20b6ab --- /dev/null +++ b/modules/terraform-aci-access-monitoring-policy/terraform-aci-dhcp-relay-policy/outputs.tf @@ -0,0 +1,9 @@ +output "dn" { + value = aci_rest_managed.monInfraPol.id + description = "Distinguished name of `monInfraPol` object." +} + +output "name" { + value = aci_rest_managed.monInfraPol.content.name + description = "Monitoring policy name." +} \ No newline at end of file diff --git a/modules/terraform-aci-access-monitoring-policy/terraform-aci-dhcp-relay-policy/variables.tf b/modules/terraform-aci-access-monitoring-policy/terraform-aci-dhcp-relay-policy/variables.tf new file mode 100644 index 00000000..faa6cd97 --- /dev/null +++ b/modules/terraform-aci-access-monitoring-policy/terraform-aci-dhcp-relay-policy/variables.tf @@ -0,0 +1,20 @@ +variable "name" { + description = "Monitoring 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 = "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." + } +} \ No newline at end of file diff --git a/modules/terraform-aci-access-monitoring-policy/terraform-aci-dhcp-relay-policy/versions.tf b/modules/terraform-aci-access-monitoring-policy/terraform-aci-dhcp-relay-policy/versions.tf new file mode 100644 index 00000000..1cf00624 --- /dev/null +++ b/modules/terraform-aci-access-monitoring-policy/terraform-aci-dhcp-relay-policy/versions.tf @@ -0,0 +1,11 @@ + +terraform { + required_version = ">= 1.3.0" + + required_providers { + aci = { + source = "CiscoDevNet/aci" + version = ">= 2.0.0" + } + } +} \ No newline at end of file