Professional Documents
Culture Documents
BRKDCN 2946 1
BRKDCN 2946 1
Infrastructure as Code
for NXOS and NDFC
with Ansible
#CiscoLive
Cisco Webex App
Questions?
Use Cisco Webex App to chat
with the speaker after the session
How
1 Find this session in the Cisco Live Mobile App
3 Install the Webex App or go directly to the Webex space Enter your personal notes here
#CiscoLive BRKDCN-2946 © 2023 Cisco and/or its affiliates. All rights reserved. Cisco Public 3
Agenda
#CiscoLive BRKDCN-2946 © 2023 Cisco and/or its affiliates. All rights reserved. Cisco Public 4
What is
Infrastructure as Code?
Infrastructure as Code (IaC)
• Using “code” to provision and/or • Leverages Software Tools
manage infrastructure • Version Control (Repositories)
• Automate provisioning/repeatable • Pipelines (CI/CD)
{code}
#CiscoLive BRKDCN-2946 © 2023 Cisco and/or its affiliates. All rights reserved. Cisco Public 6
Infrastructure as Code Tools
• Git
• Ansible
GitHub
SCM
•
Execution Software
• Terraform
• GitLab
• Chef
• Bitbucket • Puppet
• AWS CloudFormation
• Google Cloud Deployment
• Jenkins Manager
GitLab CI Vagrant
Pipeline
• •
• Saltstack
• CircleCI
• Travis CI
• GitHub Actions
#CiscoLive BRKDCN-2946 © 2023 Cisco and/or its affiliates. All rights reserved. Cisco Public 7
Infrastructure as Code for Network Ops
• Infrastructure as Code is not specific to a particular automation
engine or specific programing language
• The intention is that your “source of truth” of how network devices
are configured is sourced from an SCM (GIT) instead of the devices
themselves
• Think intended configuration versus concrete configuration on the devices
#CiscoLive BRKDCN-2946 © 2023 Cisco and/or its affiliates. All rights reserved. Cisco Public 8
Infrastructure as Code for Network Ops
SCM (GitLab) Runner(s)
3 configures & tests staging
based on intent
User commits changes to
1 SCM (GitLab) that defines Continuous Integration Continuous Delivery/Deployment
the IaC intent
Staging Prod
Branch
IaC
Main
Lint Deploy Test Deploy Test
Branch
NetDevOps!
SCM (GitLab) detects based on intent
2 change and activates automatically or via user
pipeline intervention
#CiscoLive BRKDCN-2946 © 2023 Cisco and/or its affiliates. All rights reserved. Cisco Public 9
Infrastructure as Code
with NXOS and Ansible
What is Ansible?
Automation / Configuration / Orchestration tool
Open Source
*idempotent
#CiscoLive BRKDCN-2946 © 2023 Cisco and/or its affiliates. All rights reserved. Cisco Public 11
What makes up Ansible?
NXOS
Builtin Roles
NETCONF
REST API
Tasks
CLI
WSL NXOS
Inventory
DCNM
Ansible Core
REST API
Collections
Python
Playbooks
NDFC
#CiscoLive BRKDCN-2946 © 2023 Cisco and/or its affiliates. All rights reserved. Cisco Public 12
Python Virtual Environments virtualenv
#CiscoLive BRKDCN-2946 © 2023 Cisco and/or its affiliates. All rights reserved. Cisco Public 13
Reference Slide
pyenv
• pyenv is the best mechanism 1 install a version of python
to control python virtual % pyenv install 3.9.11
environments
2 create virtual environment
• Allows control of python
% pyenv virtualenv 3.9.11 ansible
version to execute independent
of system version create directory for ansible development
3
• pyenv virtualenv also needed % mkdir my_ansible_dir
#CiscoLive BRKDCN-2946 © 2023 Cisco and/or its affiliates. All rights reserved. Cisco Public 14
Installing Ansible
https://docs.ansible.com/ansible/latest/installation_guide/intro_installation.html
#CiscoLive BRKDCN-2946 © 2023 Cisco and/or its affiliates. All rights reserved. Cisco Public 15
Ansible Collections
Ansible Collections
• Introduced in Ansible 2.9
• Uses Ansible Galaxy as the delivery vehicle
• Contains modules, plugins, filters
• Collections not related to Ansible release schedules
• Allows vendor flexibility in relation to product releases
#CiscoLive BRKDCN-2946 © 2023 Cisco and/or its affiliates. All rights reserved. Cisco Public 17
Reference Slide
Ansible.Builtin
• Modules perform specific task
like set facts (variables), import
roles, tasks, vars, and more
• Includes many filters for
working with data sets
• Actively maintained by RedHat
https://docs.ansible.com/ansible/latest/collections/ansible/builtin/index.html
#CiscoLive BRKDCN-2946 © 2023 Cisco and/or its affiliates. All rights reserved. Cisco Public 18
Ansible Cisco.Nxos
Collection Modules
77
• Modules perform specific task like
configure vlans, interfaces, OSPF,
BGP, and more
• Documentation provides usage
details, required variables, default
variables, etc
• Actively maintained by RedHat with
Cisco support
https://docs.ansible.com/ansible/latest/collections/cisco/nxos/index.html
#CiscoLive BRKDCN-2946 © 2023 Cisco and/or its affiliates. All rights reserved. Cisco Public 19
Ansible Modules Collection
Namespace
Collection
Name
Module
Name
Parameter Value
#CiscoLive BRKDCN-2946 © 2023 Cisco and/or its affiliates. All rights reserved. Cisco Public 20
Reference Slide
#CiscoLive BRKDCN-2946 © 2023 Cisco and/or its affiliates. All rights reserved. Cisco Public 21
Ansible Concepts
VXLAN EVPN Fabric
IaC – Nexus as Code
• Configure Hostnames,
Features, etc. (Common
configuration)
#CiscoLive BRKDCN-2946 © 2023 Cisco and/or its affiliates. All rights reserved. Cisco Public 23
VXLAN EVPN Fabric
IaC – Nexus as Code
10.15.1.11 - S1 S2 - 10.15.1.12
• Configure Underlay
(Interfaces, Routing
protocols, etc.) Routing
(OSPF/PIM/BGP)
#CiscoLive BRKDCN-2946 © 2023 Cisco and/or its affiliates. All rights reserved. Cisco Public 24
VXLAN EVPN Fabric
IaC – Nexus as Code
• Configure Overlay
(VRFs, VLANs, SVIs,
etc.)
#CiscoLive BRKDCN-2946 © 2023 Cisco and/or its affiliates. All rights reserved. Cisco Public 25
Ansible Directory Structure
ansible Where to do it
inventory.yml
group_vars Data to do it
host_vars
roles How to do it
vxlan.yml
What to do
#CiscoLive © 2023 Cisco and/or its affiliates. All rights reserved. Cisco Public
What to do
Ansible Playbook
ansible ---
# main playbook
roles:
- role: overlay
#CiscoLive © 2023 Cisco and/or its affiliates. All rights reserved. Cisco Public
Where to do it
Ansible Inventory
---
ansible # main inventory file
all:
vars:
inventory.yml ansible_connection: ansible.netcommon.network_cli
ansible_user: "nxos_username"
#CiscoLive © 2023 Cisco and/or its affiliates. All rights reserved. Cisco Public
Where to do it
Ansible Inventory
---
ansible # main inventory file
all:
vars:
inventory.yml ansible_connection: ansible.netcommon.network_cli
ansible_user: "nxos_username"
#CiscoLive © 2023 Cisco and/or its affiliates. All rights reserved. Cisco Public
Reference Slide
Ansible Networking
• Network modules execute from control node (Ansible host)
• Collections organized by network platform/OS
• Offers multiple connection protocols
#CiscoLive BRKDCN-2946 © 2023 Cisco and/or its affiliates. All rights reserved. Cisco Public 30
Ansible Playbook Relationships
---
ansible # main inventory file
all:
inventory.yml ---
vars:
ansible_connection: network_cli
group_vars # main playbook ansible_user: "nxos_username"
ansible_password: "nxos_password"
- hosts: spines, leafs
host_vars gather_facts: false
ansible_network_os: cisco.nxos.nxos
children:
spines:
roles roles: hosts: Spine
- role: common 10.15.1.11: Group
vxlan.yml - role: underlay 10.15.1.12:
leafs:
- hosts: leafs hosts: Leaf
gather_facts: false 10.15.1.13:
10.15.1.14: Group
roles: 10.15.1.15:
- role: overlay
#CiscoLive © 2023 Cisco and/or its affiliates. All rights reserved. Cisco Public
How to do it
Ansible Roles
ansible
❯ ansible-galaxy init overlay
inventory.yml - Role overlay was created successfully
❯ tree overlay
group_vars overlay
├── README.md
host_vars ├── tasks
│ └── main.yml
roles ├── templates
└── vars
common └── main.yml
underlay
overlay
vxlan.yml
#CiscoLive © 2023 Cisco and/or its affiliates. All rights reserved. Cisco Public
How to do it
Ansible Roles – Tasks
ansible PIM BGP
Hostname Features Interfaces OSPF
inventory.yml
Tasks Tasks
group_vars
Common Underlay
host_vars
roles
common VLANs/VNIs SVIs
underlay NVE VRFs
overlay Tasks
vxlan.yml Overlay
#CiscoLive © 2023 Cisco and/or its affiliates. All rights reserved. Cisco Public
How to do it
Ansible Roles – Tasks
ansible
roles/overlay/tasks/main.yml
inventory.yml ---
group_vars
# tasks file for roles/overlay
#CiscoLive © 2023 Cisco and/or its affiliates. All rights reserved. Cisco Public
Putting It All Together
Where to do it What to do How to do it
inventory.yml vxlan.yml roles/overlay/tasks/main.yml
--- --- ---
# main inventory file # main playbook # tasks file for roles/overlay
https://docs.ansible.com/ansible/latest/playbook_guide/playbooks_variables.html#understanding-variable-precedence
#CiscoLive BRKDCN-2946 © 2023 Cisco and/or its affiliates. All rights reserved. Cisco Public 38
Data to do it
Variables with Jinja2 Syntax
• Variable substitution in tasks
• Uses double curly braces wrapped in quotes: "{{ }}"
#CiscoLive BRKDCN-2946 © 2023 Cisco and/or its affiliates. All rights reserved. Cisco Public 39
Data to do it
Ansible Variable Lists
#CiscoLive BRKDCN-2946 © 2023 Cisco and/or its affiliates. All rights reserved. Cisco Public 40
Data to do it
Ansible Loop with Jinja2 Syntax
• Use Ansible loop to iterate data for a tasks
#CiscoLive BRKDCN-2946 © 2023 Cisco and/or its affiliates. All rights reserved. Cisco Public 41
Data to do it
Ansible Group Vars
---
ansible # var file for leafs group
inventory.yml features:
- ospf • group_vars files are named
- pim
group_vars - bgp
and referenced after
- nv overlay inventory groups
leafs.yml - vn-segment-vlan-based
- interface-vlan • match inventory group!
spines.yml networks:
- vlan_name: Web Servers • contains data common to
host_vars vlan_id: 101
vni_id: 10101
specified group
- vlan_name: DB Servers
roles vlan_id: 102
vni_id: 10102
vxlan.yml - vlan_name: vMotion
vlan_id: 103
vni_id: 10103
#CiscoLive © 2023 Cisco and/or its affiliates. All rights reserved. Cisco Public
Data to do it
Ansible Host Vars
---
ansible # vars file for L1
inventory.yml hostname: L1
• host_vars files are
layer3_physical_interfaces:
group_vars - interface: ethernet1/11
named and referenced
description: To S1 Eth1/1 after device IP address or
host_vars mode: layer3 FQDN
ip_address: 10.1.1.1
10.15.1.11.yml mask: 31
mtu: 9216
• match inventory name!
- interface: ethernet1/12
10.15.1.12.yml description: To S2 Eth1/1 • contains data specific to
mode: layer3 that device
10.15.1.13.yml ip_address: 10.2.2.1
mask: 31
mtu: 9216
10.15.1.14.yml
10.15.1.15.yml
#CiscoLive © 2023 Cisco and/or its affiliates. All rights reserved. Cisco Public
Putting It All Together
Where to do it What to do How to do it Data to do it
hostname: L1
<snip>
#CiscoLive © 2023 Cisco and/or its affiliates. All rights reserved. Cisco Public
Executing Ansible Playbooks
ansible-playbook –i <inventory file> <playbook file>
#CiscoLive BRKDCN-2946 © 2023 Cisco and/or its affiliates. All rights reserved. Cisco Public 45
Details for NXOS
Two Types of Modules for NXOS
#CiscoLive BRKDCN-2946 © 2023 Cisco and/or its affiliates. All rights reserved. Cisco Public 47
Reference Slide
#CiscoLive BRKDCN-2946 © 2023 Cisco and/or its affiliates. All rights reserved. Cisco Public 48
Data to do it
A word about Jinja Templating
• Leverage module and filters from Ansible Builtin collection
• Create template file(s) in a role’s template directory: .j2 file extension
# tasks file for roles/overlay # group_vars/leafs.yml
networks:
- name: Generate VLAN Config Payload
- vlan_name: Web Servers
ansible.builtin.set_fact:
vlan_id: 101
nxos_vlans: "{{ lookup('template', 'vlans.j2') }}"
vni_id: 10101
- vlan_name: DB Servers
- name: Configure VLANs
cisco.nxos.nxos_vlans: vlan_id: 102
config: "{{ nxos_vlans | from_yaml }}" vni_id: 10102
state: merged
# roles/overlay/templates/vlans.j2
# config data passed to task
{% for network in networks %}
- vlan_id: {{ network.vlan_id }}
- vlan_id: 101
{% endfor %}
- Vlan_id: 102
#CiscoLive BRKDCN-2946 © 2023 Cisco and/or its affiliates. All rights reserved. Cisco Public 49
NXOS Config Fallback Module
How to configure NXOS when a module is missing
#CiscoLive BRKDCN-2946 © 2023 Cisco and/or its affiliates. All rights reserved. Cisco Public 50
NXOS Command Fallback Module
How to send commands to NXOS when a module is missing
#CiscoLive BRKDCN-2946 © 2023 Cisco and/or its affiliates. All rights reserved. Cisco Public 51
An Example
An Example – Add VXLAN EVPN Overlay
#CiscoLive BRKDCN-2946 © 2023 Cisco and/or its affiliates. All rights reserved. Cisco Public 53
An Example – Add VXLAN EVPN Overlay
#CiscoLive BRKDCN-2946 © 2023 Cisco and/or its affiliates. All rights reserved. Cisco Public 54
Infrastructure as Code
with NDFC and Ansible
Cisco Nexus Dashboard Fabric Controller (NDFC)
Formerly Called (DCNM)
Cisco Nexus
Cisco Data Center
Dashboard
Network Manager
Fabric Controller
#CiscoLive BRKDCN-2946 © 2023 Cisco and/or its affiliates. All rights reserved. Cisco Public 56
Nexus Dashboard
Simple to Automate, Simple to Consume
Insights Fabric
Controller
Orchestrator Fabric
Discovery
Data SAN
Broker Controller
#CiscoLive BRKDCN-2946 © 2023 Cisco and/or its affiliates. All rights reserved. Cisco Public 57
Automation
Accelerate provisioning from days to minutes
DevOps friendly
Enhanced Programmability
#CiscoLive BRKDCN-2946 © 2023 Cisco and/or its affiliates. All rights reserved. Cisco Public 58
Reference Slide
Getting started
Ansible Collection Installation
Install Command:
* pip install ansible
* ansible-galaxy collection install cisco.dcnm
#CiscoLive BRKDCN-2946 © 2023 Cisco and/or its affiliates. All rights reserved. Cisco Public 59
20/20 Hindsight Tech “Specs”
NDFC
NDFC - https://galaxy.ansible.com/cisco/dcnm
#CiscoLive BRKDCN-2946 © 2023 Cisco and/or its affiliates. All rights reserved. Cisco Public 60
Hindsight “Specs” Model
I See
NDFC
Ansible
Collection
Names
#CiscoLive BRKDCN-2946 © 2023 Cisco and/or its affiliates. All rights reserved. Cisco Public 61
Reference Slide
History Lesson
Link to repo
Collection Version
& Install Command
NDFC Version
NDFC - https://galaxy.ansible.com/cisco/dcnm
#CiscoLive BRKDCN-2946 © 2023 Cisco and/or its affiliates. All rights reserved. Cisco Public 62
NDFC Collection Modules – Toolbox
https://galaxy.ansible.com/cisco/dcnm
12 Modules
Module Name Purpose
cisco.dcnm.dcnm_rest General Do Anything Module
cisco.dcnm.dcnm_inventory Add Devices To Fabric
cisco.dcnm.dcnm_interface Configure Fabric Interfaces
cisco.dcnm.dcnm_vrf Add Overlay VRFs
cisco.dcnm.dcnm_network Add Overlay Networks / VLANs
cisco.dcnm.dcnm_template Create Custom Templates
cisco.dcnm.dcnm_policy Create Policies Based On Templates
cisco.dcnm.dcnm_links Manage Fabric Links
cisco.dcnm.dcnm_resource_manager Manage Fabric Resources
cisco.dcnm.dcnm_service_node Manage Service Nodes
cisco.dcnm.dcnm_service_policy Manage Service Policy
cisco.dcnm.dcnm_service_route_peering Manage Service Route Peering
#CiscoLive BRKDCN-2946 © 2023 Cisco and/or its affiliates. All rights reserved. Cisco Public 63
Primary VXLAN EVPN Fabric Modules
cisco.dcnm.dcnm_rest
cisco.dcnm.inventory
cisco.dcnm.vrf
cisco.dcnm.network
cisco.dcnm.interface
HTTPAPI Plugin
#CiscoLive BRKDCN-2946 © 2023 Cisco and/or its affiliates. All rights reserved. Cisco Public 64
Transparent NDFC/DCNM Controller Support
+ Ansible Version 11
#CiscoLive BRKDCN-2946 © 2023 Cisco and/or its affiliates. All rights reserved. Cisco Public 65
+
#CiscoLive BRKDCN-2946 © 2023 Cisco and/or its affiliates. All rights reserved. Cisco Public 67
Levels of Complexity – NXOS Modules
router bgp 65001
router-id 10.10.10.21
> nxos_feature neighbor 10.10.10.11
remote-as 65001
> nxos_interface update-source loopback0
feature bgp
feature interface-vlan > nxos_l3_interface address-family l2vpn evpn
send-community
feature vn-segment-vlan-based
feature nv overlay
> nxos_interface_ospf send-community extended
vrf Tenant-1
nv overlay evpn > nxos_pim_rp_address address-family ipv4 unicast
vlan 10 advertise l2vpn evpn
vn-segment 10000 > nxos_evpn_global evpn
vlan 11
vn-segment 10011 > nxos_bgp vni 10011 l2
rd auto
interface loopback0
ip address 10.10.10.21/32
> nxos_bgp_af route-target import auto
route-target export auto
ip pim sparse-mode > nxos_bgp_neighbor interface Vlan10
ip router ospf UNDERLAY area 0 no shutdown
interface loopback1 > nxos_bgp_neighbor_af vrf member Tenant-1
ip address 2.2.2.1/32
ip pim sparse-mode > nxos_vlan ip forward
interface Vlan11
ip router ospf UNDERLAY area 0
vrf context Tenant-1
> nxos_vrf no shutdown
vrf member Tenant-1
vni 10000 > nxos_vrf_af 18 ip address 10.0.11.1/24
rd auto fabric forwarding mode anycast-gateway
address-family ipv4 unicast > nxos_vrf_interface interface nve1
route-target both auto evpn
> nxos_vxlan_vtep no shutdown
source-interface loopback1
> nxos_vxlan_vtep_vni host-reachability protocol bgp
member vni 10000 associate-vrf
> nxos_evpn_vni member vni 10011
mcast-group 239.0.0.11
> nxos_config
#CiscoLive BRKDCN-2946 © 2023 Cisco and/or its affiliates. All rights reserved. Cisco Public 68
Levels of Complexity – NDFC Controller
Easy Button
#CiscoLive BRKDCN-2946 © 2023 Cisco and/or its affiliates. All rights reserved. Cisco Public 69
Levels of Complexity – NDFC Modules
> dcnm_rest
> dcnm_inventory
> dcnm_interface
7 > dcnm_vrf
> dcnm_network
> dcnm_template
> dcnm_policy
BRKDCN-2946 70
#CiscoLive © 2023 Cisco and/or its affiliates. All rights reserved. Cisco Public
Workflow Step1: Create VXLAN Fabric
Replication Backup
VPC Bootstrap
Underlay OAM
#CiscoLive BRKDCN-2946 © 2023 Cisco and/or its affiliates. All rights reserved. Cisco Public 71
Workflow Step2: Add Devices
Spine1 Spine2
Replication Backup
VPC Bootstrap
Underlay OAM
#CiscoLive BRKDCN-2946 © 2023 Cisco and/or its affiliates. All rights reserved. Cisco Public 72
Workflow Step3: Configure VRFs
Spine1 Spine2
Replication Backup
L3 VPC
VRF VNI 470000 Bootstrap
Underlay OAM
#CiscoLive BRKDCN-2946 © 2023 Cisco and/or its affiliates. All rights reserved. Cisco Public 73
Workflow Step4: Configure Networks
Spine1 Spine2
Replication Backup
L3 VPC
VRF VNI 470000 Bootstrap
Fabric Object
L2 VNI 4000
Overlay
Resource
Ranges
L2VNI 7000
Underlay OAM
#CiscoLive BRKDCN-2946 © 2023 Cisco and/or its affiliates. All rights reserved. Cisco Public 74
Workflow Step5: Configure Host Interfaces
Spine1 Spine2
Replication Backup
L3 VPC
VRF VNI 470000 Bootstrap
Fabric Object
L2 VNI 4000
Overlay
Resource
Ranges
L2VNI 7000
Underlay OAM
Host Host
#CiscoLive BRKDCN-2946 © 2023 Cisco and/or its affiliates. All rights reserved. Cisco Public 75
Reference Slide
Spine1 Spine2
Replication Backup
L3 VPC
VRF VNI 470000 Bootstrap
Fabric Object
L2 VNI 4000
Overlay
Resource
Ranges
L2VNI 7000
Underlay OAM
External
Leaf1 Leaf2 Leaf3 Leaf4
Fabric
Host Host
#CiscoLive BRKDCN-2946 © 2023 Cisco and/or its affiliates. All rights reserved. Cisco Public 76
Reference Slide
Spine1 Spine2
Replication Backup
VPC Bootstrap
Underlay OAM
#CiscoLive BRKDCN-2946 © 2023 Cisco and/or its affiliates. All rights reserved. Cisco Public 77
NDFC Playbook & Inventory Relationship
#CiscoLive BRKDCN-2946 © 2023 Cisco and/or its affiliates. All rights reserved. Cisco Public 78
Create VXLAN EVPN Fabric
• Ansible Task Description
#CiscoLive BRKDCN-2946 © 2023 Cisco and/or its affiliates. All rights reserved. Cisco Public 79
Create VXLAN EVPN Fabric
• Invoke module call to cisco.dcnm.dcnm_rest
- Stop gap module – Invoke any NDFC REST API
- Use when intent module not available
- Fabric module on the roadmap
#CiscoLive BRKDCN-2946 © 2023 Cisco and/or its affiliates. All rights reserved. Cisco Public 80
Add Devices To Fabric
• Invoke module call to cisco.dcnm.dcnm_inventory
- Specify target Fabric Name
• Config parameters
- Credentials to access each switch device and set role
- Wipe or preserve exiting device config
#CiscoLive BRKDCN-2946 © 2023 Cisco and/or its affiliates. All rights reserved. Cisco Public 81
Add Devices To Fabric – POAP
• Power On Auto Provisioning Support
- Same module with poap: config block
cisco.dcnm.dcnm_inventory
- name: Add Switch Fabric Using POAP
cisco.dcnm.dcnm_inventory:
fabric: "{{ fabric.name }}"
state: merged # Only 2 options supported [merged, query] for poap config
config:
- seed_ip: 192.168.0.5
{…}
poap:
- serial_number: 2A3BCDEFJKL
model: 'N9K-C9300v'
version: '9.3(7)'
hostname: 'POAP_SWITCH'
image_policy: "poap_image_policy"
config_data:
modulesModel: [N9K-X9364v, N9K-vSUP]
gateway: 192.168.0.1/24
#CiscoLive BRKDCN-2946 © 2023 Cisco and/or its affiliates. All rights reserved. Cisco Public 82
Reference Slide
#CiscoLive BRKDCN-2946 © 2023 Cisco and/or its affiliates. All rights reserved. Cisco Public 83
Reference Slide
#CiscoLive BRKDCN-2946 © 2023 Cisco and/or its affiliates. All rights reserved. Cisco Public 84
Create and Deploy VRF Objects
• Invoke module call to cisco.dcnm.dcnm_vrf
- Supported states: merged, replaced, overridden
#CiscoLive BRKDCN-2946 © 2023 Cisco and/or its affiliates. All rights reserved. Cisco Public 85
How Does One Merge A Sandwhich?
Initial State Merged State
Merge Operation
#CiscoLive © 2023 Cisco and/or its affiliates. All rights reserved. Cisco Public
A Word About Module States - (Merged)
Playbook NDFC Before Merge NDFC After Merge
VRF1 VRF1 VRF1
Property A Property A Property A
State: Merged Merge
Property B Property B Property B
Untouched
#CiscoLive BRKDCN-2946 © 2023 Cisco and/or its affiliates. All rights reserved. Cisco Public 87
Who Is The Source Of Truth?
NDFC
#CiscoLive BRKDCN-2946 © 2023 Cisco and/or its affiliates. All rights reserved. Cisco Public 88
How Does One Replace A Sandwhich?
Desired State Actual State Replaced State
Replace Operation
#CiscoLive © 2023 Cisco and/or its affiliates. All rights reserved. Cisco Public
A Word About Module States - (Replaced)
Playbook NDFC Before Replace NDFC After Replace
VRF1 VRF1 VRF1
Property A Property A Property A
State: Replaced Replace
Property B Property B Property B
Untouched
#CiscoLive BRKDCN-2946 © 2023 Cisco and/or its affiliates. All rights reserved. Cisco Public 90
How Does One Override A Sandwhich?
Desired State Actual State Overridden State
Override Operation
#CiscoLive BRKDCN-2946 © 2023 Cisco and/or its affiliates. All rights reserved. Cisco Public
A Word About Module States - (Overridden)
NDFC Before Overridden NDFC After Overridden
Playbook VRF1 VRF1
VRF1 Property A Property A
Property A Property B Property B
Property B Property D Property D
Property D VRF2 VRF2
State: Overridden Override
Property A Property A
VRF3 Property B Property B
Property A Property C Property C
Property B
Property C VRF3 VRF3
Property A Property A
Source of Truth
Property B Property B
Property D Property C
Property D
#CiscoLive BRKDCN-2946 © 2023 Cisco and/or its affiliates. All rights reserved. Cisco Public 92
Create Network Objects
• Invoke module call to cisco.dcnm.dcnm_network
- Supported states: merged, replaced, overridden
#CiscoLive BRKDCN-2946 © 2023 Cisco and/or its affiliates. All rights reserved. Cisco Public 93
Configure Host Interfaces
- name: Add Networks
cisco.dcnm.dcnm_interface:
fabric: "{{ fabric_name }}"
state: merged
config:
- name: "eth1/1"
type: eth
switch:
- 192.168.0.1 • Invoke module call to cisco.dcnm.dcnm_interface
deploy: true
profile:
admin_state: true
mode: access • Configure and assign access vlan for host facing
speed: 'Auto'
bpdu_guard: false
interfaces on leaf devices
port_type_fast: true
mtu: jumbo
access_vlan: 55
cmds:
- no shutdown cisco.dcnm.dcnm_interface
description: "VLAN 55 Access"
#CiscoLive BRKDCN-2946 © 2023 Cisco and/or its affiliates. All rights reserved. Cisco Public 94
What to do
Ansible Playbook
ansible ---
# main NDFC playbook
roles roles:
- create_fabric
vxlan.yml - add_inventory
- add_overlay
- manage_interfaces
#CiscoLive © 2023 Cisco and/or its affiliates. All rights reserved. Cisco Public
Reference Slide
VRF-Lite Support
• Attach Using Specfic Device for VRF-Lite
#CiscoLive BRKDCN-2946 © 2023 Cisco and/or its affiliates. All rights reserved. Cisco Public 96
Reference Slide
#CiscoLive BRKDCN-2946 © 2023 Cisco and/or its affiliates. All rights reserved. Cisco Public 97
CI/CD Pipeline Demo
NDFC & GitLab
Staging Prod
Branch
IaC
Main
Lint Deploy Test Deploy Test
Branch
NetDevOps!
#CiscoLive BRKDCN-2946 © 2023 Cisco and/or its affiliates. All rights reserved. Cisco Public 99
References to Start
Your Journey
Ansible for NXOS and NDFC
• Install Ansible and cisco.nxos and cisco.dcnm Ansible Collections
• Play with module examples
https://github.com/ansible-collections/cisco.nxos/blob/main/docs/cisco.nxos.nxos_bgp_module.rst#examples
https://github.com/CiscoDevNet/ansible-dcnm/blob/develop/docs/cisco.dcnm.dcnm_inventory_module.rst#examples
#CiscoLive BRKDCN-2946 © 2023 Cisco and/or its affiliates. All rights reserved. Cisco Public 101
More information – Other sessions/labs
• DEVWKS-3928 (Build VXLAN Fabric with NDFC and Ansible)
• DEVNET-2117 (CI/CD Pipelines for Infrastructure Automation)
• LABDCN-2574 (VLXAN EVPN Automation via NDFC Walk in Lab)
• BRKDCN-1619 (Introduction to NDFC: Simplifying Management of
Your Data Center)
• BRKDCN-2918 (Design, Automate, and Manage Next-Gen Data
Center VXLAN BGP EVPN Fabric with NDFC)
#CiscoLive BRKDCN-2946 © 2023 Cisco and/or its affiliates. All rights reserved. Cisco Public 102
More information – Ansible
• https://www.ansible.com/resources/get-started
• https://docs.ansible.com/ansible/latest/collections_guide/index.html
• https://galaxy.ansible.com/cisco/dcnm
• https://galaxy.ansible.com/cisco/nxos
• https://developer.cisco.com/docs/nexus-as-code/#!nx-os-with-
ansible
• https://developer.cisco.com/docs/nexus-as-code/#!ndfc-with-
ansible
#CiscoLive BRKDCN-2946 © 2023 Cisco and/or its affiliates. All rights reserved. Cisco Public 103
Fill out your session surveys!
These points help you get on the leaderboard and increase your chances of winning daily and grand prizes
#CiscoLive BRKDCN-2946 © 2023 Cisco and/or its affiliates. All rights reserved. Cisco Public 104
• Visit the Cisco Showcase
for related demos
BRKDCN-2946 © 2023 Cisco and/or its affiliates. All rights reserved. Cisco Public 105
Visit us at “Share Your Experience”
Booth #214 in the DevNet Zone
Win prizes by participating in hands on activities about
API quality and insights while working with Crosswork
Automation, ACI & NDFC.
Find us in the
center of the
DevNet
Zone
Thank you
#CiscoLive
Gamify your Cisco Live experience!
Get points for attending this session!
How:
1 Open the Cisco Events App.
4 Click the + at the bottom of the screen and scan the QR code:
#CiscoLive BRKDCN-2946 © 2023 Cisco and/or its affiliates. All rights reserved. Cisco Public 108
#CiscoLive