{"id":20324539,"url":"https://github.com/netascode/terraform-mso-nac-ndo","last_synced_at":"2025-04-11T19:42:20.272Z","repository":{"id":157059899,"uuid":"627525710","full_name":"netascode/terraform-mso-nac-ndo","owner":"netascode","description":"Terraform Cisco NDO Nexus-as-Code Module","archived":false,"fork":false,"pushed_at":"2025-03-07T13:27:09.000Z","size":133,"stargazers_count":2,"open_issues_count":5,"forks_count":7,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-03-21T18:04:18.713Z","etag":null,"topics":["aci","cisco","iac","nac","ndo","nexus-as-code","terraform","terraform-module"],"latest_commit_sha":null,"homepage":"https://registry.terraform.io/modules/netascode/nac-ndo/mso","language":"HCL","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/netascode.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2023-04-13T16:43:39.000Z","updated_at":"2025-03-07T13:27:14.000Z","dependencies_parsed_at":"2024-02-10T13:23:49.080Z","dependency_job_id":"f1fe67d3-4ee3-4a75-bdb7-4d096d70ee3e","html_url":"https://github.com/netascode/terraform-mso-nac-ndo","commit_stats":null,"previous_names":[],"tags_count":7,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/netascode%2Fterraform-mso-nac-ndo","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/netascode%2Fterraform-mso-nac-ndo/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/netascode%2Fterraform-mso-nac-ndo/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/netascode%2Fterraform-mso-nac-ndo/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/netascode","download_url":"https://codeload.github.com/netascode/terraform-mso-nac-ndo/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248468521,"owners_count":21108834,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["aci","cisco","iac","nac","ndo","nexus-as-code","terraform","terraform-module"],"created_at":"2024-11-14T19:34:23.756Z","updated_at":"2025-04-11T19:42:20.264Z","avatar_url":"https://github.com/netascode.png","language":"HCL","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003c!-- BEGIN_TF_DOCS --\u003e\n[![Tests](https://github.com/netascode/terraform-mso-nac-ndo/actions/workflows/test.yml/badge.svg)](https://github.com/netascode/terraform-mso-nac-ndo/actions/workflows/test.yml)\n\n# Terraform NDO Nexus-as-Code Module\n\nA Terraform module to configure Nexus Dashboard Orchestrator (NDO).\n\nThis module is part of the Cisco [*Nexus-as-Code*](https://cisco.com/go/nexusascode) project. Its goal is to allow users to instantiate network fabrics in minutes using an easy to use, opinionated data model. It takes away the complexity of having to deal with references, dependencies or loops. By completely separating data (defining variables) from logic (infrastructure declaration), it allows the user to focus on describing the intended configuration while using a set of maintained and tested Terraform Modules without the need to understand the low-level ACI object model. More information can be found here: https://cisco.com/go/nexusascode.\n\n## Usage\n\nThis module supports an inventory driven approach, where a complete NDO configuration or parts of it are either modeled in one or more YAML files or natively using Terraform variables.\n\nThere are six configuration sections which can be selectively enabled or disabled using module flags:\n\n- `system`: Manage system level configuration like banners\n- `sites`: Enable sites in NDO\n- `site_connectivity`: Manage Multi-Site connectivity configuration\n- `tenants`: Configure tenants using NDO\n- `schemas`: Configurations applied at the schema and template level (e.g., VRFs and Bridge Domains)\n- `deploy_templates`: Automatically deploy templates\n\nThe full data model documentation is available here: https://developer.cisco.com/docs/nexus-as-code/#!data-model\n\n## Examples\n\nConfiguring a Tenant using YAML:\n\n#### `ndo.yaml`\n\n```hcl\nndo:\n  sites:\n    - name: APIC1\n      id: 1\n      apic_urls:\n        - \"https://10.1.1.1\"\n  tenants:\n    - name: NDO1\n      sites:\n        - name: APIC1\n```\n\n#### `main.tf`\n\n```hcl\nmodule \"tenant\" {\n  source  = \"netascode/nac-ndo/mso\"\n  version = \"\u003e= 0.7.0\"\n\n  yaml_files = [\"ndo.yaml\"]\n\n  manage_sites   = true\n  manage_tenants = true\n}\n```\n\nConfiguring a Site using native HCL:\n\n#### `main.tf`\n\n```hcl\nmodule \"site\" {\n  source  = \"netascode/nac-ndo/mso\"\n  version = \"\u003e= 0.7.0\"\n\n  model = {\n    ndo = {\n      sites = [\n        {\n          name      = \"APIC1\"\n          id        = 1\n          apic_urls = [\"https://10.1.1.1\"]\n        }\n      ]\n    }\n  }\n\n  manage_sites = true\n}\n```\n\n## Issues\n\nDepending on the exact configuration, there might be issues with the NDO API returning errors due to concurrent operations. In this case one can use the `parallelism=1` command line attribute to ensure all resource operations are executed in sequence.\n\n```shell\n$ terraform apply -parallelism=1\n```\n\nAlternatively, an environment variable can be used as well.\n\n```shell\n$ export TF_CLI_ARGS_apply=\"-parallelism=1\"\n```\n\n## Requirements\n\n| Name | Version |\n|------|---------|\n| \u003ca name=\"requirement_terraform\"\u003e\u003c/a\u003e [terraform](#requirement\\_terraform) | \u003e= 1.4.0 |\n| \u003ca name=\"requirement_local\"\u003e\u003c/a\u003e [local](#requirement\\_local) | \u003e= 2.3.0 |\n| \u003ca name=\"requirement_mso\"\u003e\u003c/a\u003e [mso](#requirement\\_mso) | = 1.4.0 |\n| \u003ca name=\"requirement_utils\"\u003e\u003c/a\u003e [utils](#requirement\\_utils) | \u003e= 0.2.5 |\n\n## Inputs\n\n| Name | Description | Type | Default | Required |\n|------|-------------|------|---------|:--------:|\n| \u003ca name=\"input_deploy_templates\"\u003e\u003c/a\u003e [deploy\\_templates](#input\\_deploy\\_templates) | Flag to indicate if templates should be deployed. | `bool` | `false` | no |\n| \u003ca name=\"input_manage_schemas\"\u003e\u003c/a\u003e [manage\\_schemas](#input\\_manage\\_schemas) | Flag to indicate if schemas should be managed. | `bool` | `false` | no |\n| \u003ca name=\"input_manage_site_connectivity\"\u003e\u003c/a\u003e [manage\\_site\\_connectivity](#input\\_manage\\_site\\_connectivity) | Flag to indicate if site connectivity be managed. | `bool` | `false` | no |\n| \u003ca name=\"input_manage_sites\"\u003e\u003c/a\u003e [manage\\_sites](#input\\_manage\\_sites) | Flag to indicate if sites should be managed. | `bool` | `false` | no |\n| \u003ca name=\"input_manage_system\"\u003e\u003c/a\u003e [manage\\_system](#input\\_manage\\_system) | Flag to indicate if system level configuration should be managed. | `bool` | `false` | no |\n| \u003ca name=\"input_manage_tenants\"\u003e\u003c/a\u003e [manage\\_tenants](#input\\_manage\\_tenants) | Flag to indicate if tenants be managed. | `bool` | `false` | no |\n| \u003ca name=\"input_managed_schemas\"\u003e\u003c/a\u003e [managed\\_schemas](#input\\_managed\\_schemas) | List of schema names to be managed. By default all schemas will be managed. | `list(string)` | `[]` | no |\n| \u003ca name=\"input_managed_tenants\"\u003e\u003c/a\u003e [managed\\_tenants](#input\\_managed\\_tenants) | List of tenant names to be managed. By default all tenants will be managed. | `list(string)` | `[]` | no |\n| \u003ca name=\"input_model\"\u003e\u003c/a\u003e [model](#input\\_model) | As an alternative to YAML files, a native Terraform data structure can be provided as well. | `map(any)` | `{}` | no |\n| \u003ca name=\"input_write_default_values_file\"\u003e\u003c/a\u003e [write\\_default\\_values\\_file](#input\\_write\\_default\\_values\\_file) | Write all default values to a YAML file. Value is a path pointing to the file to be created. | `string` | `\"\"` | no |\n| \u003ca name=\"input_yaml_directories\"\u003e\u003c/a\u003e [yaml\\_directories](#input\\_yaml\\_directories) | List of paths to YAML directories. | `list(string)` | `[]` | no |\n| \u003ca name=\"input_yaml_files\"\u003e\u003c/a\u003e [yaml\\_files](#input\\_yaml\\_files) | List of paths to YAML files. | `list(string)` | `[]` | no |\n\n## Outputs\n\n| Name | Description |\n|------|-------------|\n| \u003ca name=\"output_default_values\"\u003e\u003c/a\u003e [default\\_values](#output\\_default\\_values) | All default values. |\n| \u003ca name=\"output_model\"\u003e\u003c/a\u003e [model](#output\\_model) | Full model. |\n\n## Providers\n\n| Name | Version |\n|------|---------|\n| \u003ca name=\"provider_local\"\u003e\u003c/a\u003e [local](#provider\\_local) | \u003e= 2.3.0 |\n| \u003ca name=\"provider_mso\"\u003e\u003c/a\u003e [mso](#provider\\_mso) | = 1.4.0 |\n| \u003ca name=\"provider_utils\"\u003e\u003c/a\u003e [utils](#provider\\_utils) | \u003e= 0.2.5 |\n\n## Resources\n\n| Name | Type |\n|------|------|\n| [local_sensitive_file.defaults](https://registry.terraform.io/providers/hashicorp/local/latest/docs/resources/sensitive_file) | resource |\n| [mso_remote_location.remote_location](https://registry.terraform.io/providers/CiscoDevNet/mso/1.4.0/docs/resources/remote_location) | resource |\n| [mso_rest.schema_site_contract](https://registry.terraform.io/providers/CiscoDevNet/mso/1.4.0/docs/resources/rest) | resource |\n| [mso_rest.schema_site_service_graph](https://registry.terraform.io/providers/CiscoDevNet/mso/1.4.0/docs/resources/rest) | resource |\n| [mso_rest.site_connectivity](https://registry.terraform.io/providers/CiscoDevNet/mso/1.4.0/docs/resources/rest) | resource |\n| [mso_rest.system_config](https://registry.terraform.io/providers/CiscoDevNet/mso/1.4.0/docs/resources/rest) | resource |\n| [mso_schema.schema](https://registry.terraform.io/providers/CiscoDevNet/mso/1.4.0/docs/resources/schema) | resource |\n| [mso_schema_site.schema_site](https://registry.terraform.io/providers/CiscoDevNet/mso/1.4.0/docs/resources/schema_site) | resource |\n| [mso_schema_site_anp.schema_site_anp](https://registry.terraform.io/providers/CiscoDevNet/mso/1.4.0/docs/resources/schema_site_anp) | resource |\n| [mso_schema_site_anp_epg.schema_site_anp_epg](https://registry.terraform.io/providers/CiscoDevNet/mso/1.4.0/docs/resources/schema_site_anp_epg) | resource |\n| [mso_schema_site_anp_epg_bulk_staticport.schema_site_anp_epg_bulk_staticport](https://registry.terraform.io/providers/CiscoDevNet/mso/1.4.0/docs/resources/schema_site_anp_epg_bulk_staticport) | resource |\n| [mso_schema_site_anp_epg_domain.schema_site_anp_epg_domain_physical](https://registry.terraform.io/providers/CiscoDevNet/mso/1.4.0/docs/resources/schema_site_anp_epg_domain) | resource |\n| [mso_schema_site_anp_epg_domain.schema_site_anp_epg_domain_vmware](https://registry.terraform.io/providers/CiscoDevNet/mso/1.4.0/docs/resources/schema_site_anp_epg_domain) | resource |\n| [mso_schema_site_anp_epg_selector.schema_site_anp_epg_selector](https://registry.terraform.io/providers/CiscoDevNet/mso/1.4.0/docs/resources/schema_site_anp_epg_selector) | resource |\n| [mso_schema_site_anp_epg_static_leaf.schema_site_anp_epg_static_leaf](https://registry.terraform.io/providers/CiscoDevNet/mso/1.4.0/docs/resources/schema_site_anp_epg_static_leaf) | resource |\n| [mso_schema_site_anp_epg_subnet.schema_site_anp_epg_subnet](https://registry.terraform.io/providers/CiscoDevNet/mso/1.4.0/docs/resources/schema_site_anp_epg_subnet) | resource |\n| [mso_schema_site_bd.schema_site_bd](https://registry.terraform.io/providers/CiscoDevNet/mso/1.4.0/docs/resources/schema_site_bd) | resource |\n| [mso_schema_site_bd_l3out.schema_site_bd_l3out](https://registry.terraform.io/providers/CiscoDevNet/mso/1.4.0/docs/resources/schema_site_bd_l3out) | resource |\n| [mso_schema_site_bd_subnet.schema_site_bd_subnet](https://registry.terraform.io/providers/CiscoDevNet/mso/1.4.0/docs/resources/schema_site_bd_subnet) | resource |\n| [mso_schema_site_contract_service_graph.schema_site_contract_service_graph](https://registry.terraform.io/providers/CiscoDevNet/mso/1.4.0/docs/resources/schema_site_contract_service_graph) | resource |\n| [mso_schema_site_external_epg.schema_site_external_epg](https://registry.terraform.io/providers/CiscoDevNet/mso/1.4.0/docs/resources/schema_site_external_epg) | resource |\n| [mso_schema_site_external_epg_selector.schema_site_external_epg_selector](https://registry.terraform.io/providers/CiscoDevNet/mso/1.4.0/docs/resources/schema_site_external_epg_selector) | resource |\n| [mso_schema_site_service_graph.schema_site_service_graph](https://registry.terraform.io/providers/CiscoDevNet/mso/1.4.0/docs/resources/schema_site_service_graph) | resource |\n| [mso_schema_site_vrf.schema_site_vrf](https://registry.terraform.io/providers/CiscoDevNet/mso/1.4.0/docs/resources/schema_site_vrf) | resource |\n| [mso_schema_site_vrf_region.schema_site_vrf_region](https://registry.terraform.io/providers/CiscoDevNet/mso/1.4.0/docs/resources/schema_site_vrf_region) | resource |\n| [mso_schema_template_anp.schema_template_anp](https://registry.terraform.io/providers/CiscoDevNet/mso/1.4.0/docs/resources/schema_template_anp) | resource |\n| [mso_schema_template_anp_epg.schema_template_anp_epg](https://registry.terraform.io/providers/CiscoDevNet/mso/1.4.0/docs/resources/schema_template_anp_epg) | resource |\n| [mso_schema_template_anp_epg_contract.schema_template_anp_epg_contract](https://registry.terraform.io/providers/CiscoDevNet/mso/1.4.0/docs/resources/schema_template_anp_epg_contract) | resource |\n| [mso_schema_template_anp_epg_subnet.schema_template_anp_epg_subnet](https://registry.terraform.io/providers/CiscoDevNet/mso/1.4.0/docs/resources/schema_template_anp_epg_subnet) | resource |\n| [mso_schema_template_bd.schema_template_bd](https://registry.terraform.io/providers/CiscoDevNet/mso/1.4.0/docs/resources/schema_template_bd) | resource |\n| [mso_schema_template_bd_subnet.schema_template_bd_subnet](https://registry.terraform.io/providers/CiscoDevNet/mso/1.4.0/docs/resources/schema_template_bd_subnet) | resource |\n| [mso_schema_template_contract.schema_template_contract](https://registry.terraform.io/providers/CiscoDevNet/mso/1.4.0/docs/resources/schema_template_contract) | resource |\n| [mso_schema_template_contract_service_graph.schema_template_contract_service_graph](https://registry.terraform.io/providers/CiscoDevNet/mso/1.4.0/docs/resources/schema_template_contract_service_graph) | resource |\n| [mso_schema_template_deploy_ndo.template](https://registry.terraform.io/providers/CiscoDevNet/mso/1.4.0/docs/resources/schema_template_deploy_ndo) | resource |\n| [mso_schema_template_deploy_ndo.template2](https://registry.terraform.io/providers/CiscoDevNet/mso/1.4.0/docs/resources/schema_template_deploy_ndo) | resource |\n| [mso_schema_template_deploy_ndo.template3](https://registry.terraform.io/providers/CiscoDevNet/mso/1.4.0/docs/resources/schema_template_deploy_ndo) | resource |\n| [mso_schema_template_external_epg.schema_template_external_epg](https://registry.terraform.io/providers/CiscoDevNet/mso/1.4.0/docs/resources/schema_template_external_epg) | resource |\n| [mso_schema_template_external_epg_contract.schema_template_external_epg_contract](https://registry.terraform.io/providers/CiscoDevNet/mso/1.4.0/docs/resources/schema_template_external_epg_contract) | resource |\n| [mso_schema_template_external_epg_selector.schema_template_external_epg_selector](https://registry.terraform.io/providers/CiscoDevNet/mso/1.4.0/docs/resources/schema_template_external_epg_selector) | resource |\n| [mso_schema_template_external_epg_subnet.schema_template_external_epg_subnet](https://registry.terraform.io/providers/CiscoDevNet/mso/1.4.0/docs/resources/schema_template_external_epg_subnet) | resource |\n| [mso_schema_template_filter_entry.schema_template_filter_entry](https://registry.terraform.io/providers/CiscoDevNet/mso/1.4.0/docs/resources/schema_template_filter_entry) | resource |\n| [mso_schema_template_l3out.schema_template_l3out](https://registry.terraform.io/providers/CiscoDevNet/mso/1.4.0/docs/resources/schema_template_l3out) | resource |\n| [mso_schema_template_service_graph.schema_template_service_graph](https://registry.terraform.io/providers/CiscoDevNet/mso/1.4.0/docs/resources/schema_template_service_graph) | resource |\n| [mso_schema_template_vrf.schema_template_vrf](https://registry.terraform.io/providers/CiscoDevNet/mso/1.4.0/docs/resources/schema_template_vrf) | resource |\n| [mso_schema_template_vrf_contract.schema_template_vrf_contract](https://registry.terraform.io/providers/CiscoDevNet/mso/1.4.0/docs/resources/schema_template_vrf_contract) | resource |\n| [mso_site.site](https://registry.terraform.io/providers/CiscoDevNet/mso/1.4.0/docs/resources/site) | resource |\n| [mso_tenant.tenant](https://registry.terraform.io/providers/CiscoDevNet/mso/1.4.0/docs/resources/tenant) | resource |\n| [mso_rest.ndo_version](https://registry.terraform.io/providers/CiscoDevNet/mso/1.4.0/docs/data-sources/rest) | data source |\n| [mso_rest.schemas](https://registry.terraform.io/providers/CiscoDevNet/mso/1.4.0/docs/data-sources/rest) | data source |\n| [mso_rest.system_config](https://registry.terraform.io/providers/CiscoDevNet/mso/1.4.0/docs/data-sources/rest) | data source |\n| [mso_site.site](https://registry.terraform.io/providers/CiscoDevNet/mso/1.4.0/docs/data-sources/site) | data source |\n| [mso_site.template_site](https://registry.terraform.io/providers/CiscoDevNet/mso/1.4.0/docs/data-sources/site) | data source |\n| [mso_site.tenant_site](https://registry.terraform.io/providers/CiscoDevNet/mso/1.4.0/docs/data-sources/site) | data source |\n| [mso_tenant.template_tenant](https://registry.terraform.io/providers/CiscoDevNet/mso/1.4.0/docs/data-sources/tenant) | data source |\n| [mso_user.tenant_user](https://registry.terraform.io/providers/CiscoDevNet/mso/1.4.0/docs/data-sources/user) | data source |\n| [utils_yaml_merge.defaults](https://registry.terraform.io/providers/netascode/utils/latest/docs/data-sources/yaml_merge) | data source |\n| [utils_yaml_merge.model](https://registry.terraform.io/providers/netascode/utils/latest/docs/data-sources/yaml_merge) | data source |\n\n## Modules\n\nNo modules.\n\u003c!-- END_TF_DOCS --\u003e","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnetascode%2Fterraform-mso-nac-ndo","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fnetascode%2Fterraform-mso-nac-ndo","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnetascode%2Fterraform-mso-nac-ndo/lists"}