Skip to content

Setup NaC for VXLAN ND

The best method to start working with Network as Code Nexus Dashboard is to clone our example repository. This repository contains the proper directory structure and base files required. In addition the team updates this repository to match with releases so that you get the correct combination of versionss for execution.

Ansible Setup for Network as Code VXLAN ND

In this section, you will clone the repository and then setup Ansible for Network as Code VXLAN ND. This includes setting the Python virtual environment, installing necessary packages, and configuring Ansible to work with the Nexus Dashboard.

Before we extract the example repository, we need to understand how the Network as Code Nexus Dashboard repository contains a series of TAGS to match the versions requirements. Why is this? Each release version of the capability is tied to specific versions of the components. In some releases, breaking changes are introduced that require different versions of specific packages. In the example repository, you can see the list of version tags that are available. As of this writting:

TAGSDate
0.4.3July 2025
0.4.2June 2025
0.4.1April 2025
0.4.0February 2025
0.3.0November 2024
0.2.0June 2024
0.1.0June 2024

The reason this is important is to avoid issues where changes pushed into the main branch of the example repository may not work with the other components since it is a non tested combination. The TAG is an immutable construct inside of GIT, which means that once a TAG is created, it will always point to the same commit, which is the exact same code. It can’t be changed.

Inside of each of these TAGS, you will find requirements files that match the ansible components that are also required.

Step 1: Clone the example repository

The first step is to clone the example repository that contains the necessary files and configurations for Network as Code (NaC) VXLAN ND. Using the GIT command you will be doing a clone of the example repository into a directory named nac-nd in your home directory.

Note: If you are not familiar with GIT, please refer to the Understanding GIT section of this guide. It provides a starting point to help you understand GIT and the relationship with Network as Code.

Terminal window
cd ~/network-as-code
git clone --depth 1 --branch 0.4.3 https://github.com/netascode/ansible-dc-vxlan-example nac-nd

Once completed you should be able to see the structure inside of the IDE.

Repository Structure

Step 2: Remove the .git directory

After cloning the repository, you will need to remove the .git directory. This is because you will be using this repository as a starting point for your own Network as Code VXLAN ND project. We provide these example reposotories as “starting points”, but you will not be using this repository for yourself. When you delete the .git directory, you will no longer be able to use GIT commands to manage the repository until the repository has been initialized again, wich you will do later in this guide.

Terminal window
cd ~/network-as-code/nac-nd
rm -rf .git

Step 3: Set local Python virtual environment

With the command pyenv local nac-nd, you will set the local Python version for the current directory to the specified virtual environment. This allows automatic activation of the virtual environment when you navigate to this directory. While we already activated the virtual environment in the previous step, it is a good practice to set the local environment for the directory you are working in. This ensures that any Python commands you run in this directory will use the correct virtual environment.

Terminal window
cd ~/network-as-code/nac-nd
pyenv local nac-nd

Step 4: Install all python requierement packages

When you have a virtual environment operational, requirements for Python packages are then installed inside the virtual environment. This allows you to have different versions of these requirements installed on the same computer without interferring with other projects. In the case of Network as Code VXLAN ND, we specify specific versions of Ansible and other packages that are known and tested to work in combination with the Network as Code VXLAN ND capability. These requirements are included in the requirements.txt file that is shared as part of the cloned repository.

  • ansible-core
  • ansible-lint
  • jmespath
  • macaddress
  • netaddr
  • packaging
  • requests

In addition we must also install the two packages part of Network as Code for testing and validation.

  • nac-validate
  • nac-test
Terminal window
cd ~/network-as-code/nac-nd
pip install -r requirements.txt

Step 5: Install Ansible Collection

The ansible collection requirements are defined in the requirements.yaml file located in the root of the cloned repository. This file specifies the Ansible collections and plugins that are required for the Network as Code VXLAN ND capability.

These include:

Terminal window
ansible-galaxy collection install -r requirements.yaml

The collection cisco.nac_dc_vxlan is the main collection that contains the Ansible roles and modules specifically designed for Network as Code VXLAN ND.

Note: If an error happens when attempting the install, re-run the ansible-galaxy command. Sometimes it seems that the first time it runs, it fails to download the collection from the dCloud environment.

Step 6: Setup ansible.cfg file

In this step you will be setting up the ansible.cfg file. This file is used to configure Ansible’s behavior and settings. The configuration file is located in the root of the cloned repository. The file doesn’t exist, so you will create it. We will be using some special commands with code server to set this up.

Terminal window
cd ~/network-as-code/nac-nd
code-server ansible.cfg

Once the file opens in the Code Server IDE, you will add the following content to it:

[defaults]
callback_whitelist=ansible.posix.timer,ansible.posix.profile_tasks,ansible.posix.profile_roles
callbacks_enabled=ansible.posix.timer,ansible.posix.profile_tasks,ansible.posix.profile_roles
bin_ansible_callbacks = True

Ansible config in Code Server

Once added then save the file.

Step 7: Verify Ansible installation

Terminal window
ansible --version

Which shoud have otuput similar to:

Terminal window
ansible [core 2.16.3]
config file = /home/dcloud/network-as-code/nac-nd/ansible.cfg
configured module search path = ['/home/dcloud/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
ansible python module location = /home/dcloud/.pyenv/versions/3.12.10/envs/nac-nd/lib/python3.12/site-packages/ansible
ansible collection location = /home/dcloud/.ansible/collections:/usr/share/ansible/collections
executable location = /home/dcloud/.pyenv/versions/nac-nd/bin/ansible
python version = 3.12.10 (main, Jun 26 2025, 09:14:15) [GCC 11.4.0] (/home/dcloud/.pyenv/versions/3.12.10/envs/nac-nd/bin/python)
jinja version = 3.1.6
libyaml = True

Understanding the file structure

The host_vars directory has the complete data structure of the Network as Code data model. The group_vars directory contains general information that is utilized to connect to Nexus Dashboard. In this case, you will have a group called nd that contains the configuration for the Nexus Dashboard.

Diagram

In addition to the host_vars and group_vars directories, there is also an inventory.yaml file. This file is used to define the inventory of hosts that Ansible will manage. In this case, it will contain the Nexus Dashboard as a host. Inside of some of these files are references to environment variables. These variables are used by Ansible to connect to Nexus Dashboard.

  • ND_HOST: The hostname or IP address of the Nexus Dashboard.
  • ND_USERNAME: The username for the Nexus Dashboard.
  • ND_PASSWORD: The password for the Nexus Dashboard.
  • ND_DOMAIN: The domain for the Nexus Dashboard.
  • NDFC_SW_USERNAME: The username for the Nexus Dashboard switch.
  • NDFC_SW_PASSWORD: The password for the Nexus Dashboard switch.

These files read environment variables, to pass credentials and

Step 8: Set environment variables

To set the environment variables, you will need to create a .env file in the root of the cloned repository. This file will contain the necessary environment variables for connecting to Nexus Dashboard and executing the automation. This file is not committed to the repository, so you will need to create it manually. And it is also ignored by git on purpose to make sure that you don’t accidentally commit sensitive information into the repository.

Note: In a future chapter of this document you will learn how these variables are used inside automation pipeline software. The key here is that these variables are read by the Network as Code automation code such that you never embed coded credentials inside of a repository.

The variables used by the automation are:

Terminal window
cd ~/network-as-code/nac-nd
code-server .env

In the opened file you will add the following content:

Terminal window
export ND_HOST="198.18.133.100"
export ND_USERNAME="admin"
export ND_PASSWORD="C1sco12345"
export ND_DOMAIN="local"
export NDFC_SW_USERNAME="admin"
export NDFC_SW_PASSWORD="C1sco12345"

Then save the file.