Running the Playbooks

Enable the NVUE API

Cumulus Linux 5.5 and earlier disables the NVUE REST API by default. If you want to use any of the object specific modules or the api module, you need to enable the NVUE REST API with the following commands on the switch:

cumulus@switch:~$ sudo ln -s /etc/nginx/sites-{available,enabled}/nvue.conf 

cumulus@switch:~$ sudo sed -i 's/listen localhost:8765 ssl;/listen \[::\]:8765 ipv6only=off ssl;/g' /etc/nginx/sites-available/nvue.conf 

cumulus@switch:~$ sudo systemctl restart nginx

You can find a sample playbook that enables the NVUE REST API across all of the switches here. Download the file and run it against the switches.

cumulus@oob-management:~$ curl -o enable-nvue-api.yml https://gitlab.com/nvidia-networking/systems-engineering/nvue/-/raw/main/examples/playbooks/enable-nvue-api.yml

cumulus@oob-management:~$ curl -o hosts https://gitlab.com/nvidia-networking/systems-engineering/nvue/-/raw/main/examples/hosts

cumulus@oob-management:~$ ansible-playbook enable-nvue-api.yml -i hosts   

Sample Playbooks

You can find additional example playbooks and host files in the <collections_directory>/nvidia/nvue/examples directory or in the git repository here.

cumulus@oob-management:~$ ls ~/.ansible/collections/ansible_collections/nvidia/nvue/examples/

collections  host_vars  hosts  playbooks

You can run any of the sample playbooks in the playbooks directory.

cumulus@oob-management:~$ ls ~/.ansible/collections/ansible_collections/nvidia/nvue/examples/playbooks

api.yml                      gather-config-multiple.yml
bridge.yml                   gather-config.yml
command.yml                  interface.yml
evpn-multihoming-leaf01.yml  revision.yml
evpn-symmetric-leaf01.yml    static-vxlan-leaf01.yml

The gather-config.yml uses the high-level api module to fetch the root configuration and the object-level interface module to fetch interface configuration.

cumulus@oob-management:~$ cd ~/.ansible/collections/ansible_collections/nvidia/nvue/examples/
cumulus@oob-management:~$ cat playbooks/gather-config.yml

- name: NVUE API
  hosts: cumulus
  connection: ansible.netcommon.httpapi
  gather_facts: false
  vars:
    ansible_network_os: nvidia.nvue.httpapi
    ansible_httpapi_port: 8765
    ansible_httpapi_use_ssl: true
    ansible_httpapi_validate_certs: false

  tasks:
    - name: Get the current config
      nvidia.nvue.api:
        operation: get
      register: output

    - name: Print current config
      ansible.builtin.debug:
        msg: "{{ output }}"

    - name: Get the current interface config
      nvidia.nvue.interface:
        state: gathered
      register: interface

    - name: Print current interface
      ansible.builtin.debug:
        msg: "{{ interface }}"

Run the playbook. Optionally, you can add the -v parameter to increase verbosity of the playbook execution.

cumulus@oob-management:~$ ansible-playbook playbooks/gather-config.yml -i hosts  

Sample Output:
[WARNING]: running playbook inside collection nvidia.nvue

PLAY [NVUE API] *****************************************************************

TASK [Get the current config] *****************************************************************
ok: [cumulus]

TASK [Print current config] *****************************************************************
ok: [cumulus] => {
    "msg": {
        "changed": false,
        "failed": false,
        "message": {
            "acl": {},
            "bridge": {
                "domain": {
                    "br_default": {
                        "ageing": 1800,
                        "encap": "802.1Q",
                        "mac-address": "auto",
                        "multicast": {
                            "snooping": {
                                "enable": "on",
                                "querier": {
                                    "enable": "off"
                                }
                            }
                        },
                        "stp": {
                            "priority": 32768,
                            "state": {
                                "up": {}
                            }
                        },
                        "type": "vlan-aware",
                        "untagged": 1,
                        "vlan": {
                            "10": {
                                "multicast": {
                                    "snooping": {
                                        "querier": {
                                            "source-ip": "0.0.0.0"
                                        }
                                    }
                                },
                                "ptp": {
                                    "enable": "off"
                                },
                                "vni": {
                                    "10": {
                                        "flooding": {
                                            "enable": "auto"
                                        },
                                        "mac-learning": "auto"
                                    }
                                }
                            }
                        },
                        "vlan-vni-offset": 0
                    }
                }
            },
            "evpn": {
                "enable": "off"
            },
            "header": {
                "model": "VX",
                "nvue-api-version": "nvue_v1",
                "rev-id": 1.0,
                "version": "Cumulus Linux 5.5.0"
            },
            "interface": {
                "eth0": {
                    "acl": {},
                    "ip": {
                        "address": {
                            "dhcp": {}
                        },
                        "gateway": {},
                        "ipv4": {
                            "forward": "off"
                        },
                        "ipv6": {
                            "enable": "on",
                            "forward": "off"
                        },
                        "vrf": "mgmt"
                    },
                    "link": {
                        "auto-negotiate": "on",
                        "duplex": "full",
                        "fec": "auto",
                        "mtu": 9216,
                        "speed": "auto",
                        "state": {
                            "up": {}
                        }
                    },
                    "type": "eth"
                },
                "lo": {
                    "ip": {
                        "address": {},
                        "igmp": {
                            "enable": "off"
                        },
                        "ipv4": {
                            "forward": "on"
                        },
                        "ipv6": {
                            "enable": "on",
                            "forward": "on"
                        },
                        "vrf": "default"
                    },
                    "router": {
                        "adaptive-routing": {
                            "enable": "off"
                        },
                        "ospf": {
                            "enable": "off"
                        },
                        "ospf6": {
                            "enable": "off"
                        },
                        "pim": {
                            "enable": "off"
                        }
                    },
                    "type": "loopback"
                }
            },
            "mlag": {
                "enable": "off"
            },
            "nve": {
                "vxlan": {
                    "enable": "off"
                }
            },
            "qos": {
                "advance-buffer-config": {
                    "default-global": {
                        "egress-lossy-buffer": {
                            "multicast-switch-priority": {
                                "0": {
                                    "service-pool": "0"
                                },
                                "1": {
                                    "service-pool": "0"
                                },
                                "2": {
                                    "service-pool": "0"
                                },
                                "3": {
                                    "service-pool": "0"
                                },
                                "4": {
                                    "service-pool": "0"
                                },
                                "5": {
                                    "service-pool": "0"
                                },
                                "6": {
                                    "service-pool": "0"
                                },
                                "7": {
                                    "service-pool": "0"
                                }
                            },
                            "traffic-class": {
                                "0": {
                                    "service-pool": "0"
                                },
                                "1": {
                                    "service-pool": "0"
                                },
                                "2": {
                                    "service-pool": "0"
                                },
                                "3": {
                                    "service-pool": "0"
                                },
                                "4": {
                                    "service-pool": "0"
                                },
                                "5": {
                                    "service-pool": "0"
                                },
                                "6": {
                                    "service-pool": "0"
                                },
                                "7": {
                                    "service-pool": "0"
                                }
                            }
                        },
                        "egress-pool": {
                            "0": {
                                "memory-percent": 100,
                                "mode": "dynamic"
                            }
                        },
                        "ingress-lossy-buffer": {
                            "priority-group": {
                                "bulk": {
                                    "service-pool": "0",
                                    "switch-priority": {
                                        "0": {},
                                        "1": {},
                                        "2": {},
                                        "3": {},
                                        "4": {},
                                        "5": {},
                                        "6": {},
                                        "7": {}
                                    }
                                }
                            }
                        },
                        "ingress-pool": {
                            "0": {
                                "memory-percent": 100,
                                "mode": "dynamic"
                            }
                        }
                    }
                },
                "congestion-control": {
                    "default-global": {
                        "traffic-class": {
                            "0": {
                                "ecn": "enable",
                                "max-threshold": 1500000,
                                "min-threshold": 150000,
                                "probability": 100,
                                "red": "disable"
                            }
                        }
                    }
                },
                "egress-queue-mapping": {
                    "default-global": {
                        "switch-priority": {
                            "0": {
                                "traffic-class": 0
                            },
                            "1": {
                                "traffic-class": 1
                            },
                            "2": {
                                "traffic-class": 2
                            },
                            "3": {
                                "traffic-class": 3
                            },
                            "4": {
                                "traffic-class": 4
                            },
                            "5": {
                                "traffic-class": 5
                            },
                            "6": {
                                "traffic-class": 6
                            },
                            "7": {
                                "traffic-class": 7
                            }
                        }
                    }
                },
                "egress-scheduler": {
                    "default-global": {
                        "traffic-class": {
                            "0": {
                                "bw-percent": 12,
                                "mode": "dwrr"
                            },
                            "1": {
                                "bw-percent": 13,
                                "mode": "dwrr"
                            },
                            "2": {
                                "bw-percent": 12,
                                "mode": "dwrr"
                            },
                            "3": {
                                "bw-percent": 13,
                                "mode": "dwrr"
                            },
                            "4": {
                                "bw-percent": 12,
                                "mode": "dwrr"
                            },
                            "5": {
                                "bw-percent": 13,
                                "mode": "dwrr"
                            },
                            "6": {
                                "bw-percent": 12,
                                "mode": "dwrr"
                            },
                            "7": {
                                "bw-percent": 13,
                                "mode": "dwrr"
                            }
                        }
                    }
                },
                "egress-shaper": {},
                "link-pause": {},
                "mapping": {
                    "default-global": {
                        "pcp": {
                            "0": {
                                "switch-priority": 0
                            },
                            "1": {
                                "switch-priority": 1
                            },
                            "2": {
                                "switch-priority": 2
                            },
                            "3": {
                                "switch-priority": 3
                            },
                            "4": {
                                "switch-priority": 4
                            },
                            "5": {
                                "switch-priority": 5
                            },
                            "6": {
                                "switch-priority": 6
                            },
                            "7": {
                                "switch-priority": 7
                            }
                        },
                        "port-default-sp": 0,
                        "trust": "l2"
                    }
                },
                "pfc": {},
                "remark": {
                    "default-global": {}
                },
                "roce": {
                    "enable": "off"
                },
                "traffic-pool": {
                    "default-lossy": {
                        "memory-percent": 100,
                        "switch-priority": {
                            "0": {},
                            "1": {},
                            "2": {},
                            "3": {},
                            "4": {},
                            "5": {},
                            "6": {},
                            "7": {}
                        }
                    }
                }
            },
            "router": {
                "adaptive-routing": {
                    "enable": "off"
                },
                "bgp": {
                    "enable": "off"
                },
                "igmp": {
                    "enable": "off"
                },
                "nexthop": {
                    "group": {}
                },
                "ospf": {
                    "enable": "off"
                },
                "ospf6": {
                    "enable": "off"
                },
                "pbr": {
                    "enable": "off"
                },
                "pim": {
                    "enable": "off"
                },
                "policy": {
                    "as-path-list": {},
                    "community-list": {},
                    "ext-community-list": {},
                    "large-community-list": {},
                    "prefix-list": {},
                    "route-map": {}
                },
                "ptm": {
                    "enable": "off"
                },
                "vrr": {
                    "enable": "off"
                },
                "vrrp": {
                    "enable": "off"
                }
            },
            "service": {
                "dhcp-relay": {},
                "dhcp-relay6": {},
                "dhcp-server": {},
                "dhcp-server6": {},
                "dns": {},
                "lldp": {
                    "dot1-tlv": "off",
                    "lldp-med-inventory-tlv": "off",
                    "mode": "default",
                    "tx-hold-multiplier": 4,
                    "tx-interval": 30
                },
                "ntp": {},
                "ptp": {
                    "1": {
                        "acceptable-master": {},
                        "domain": 0,
                        "enable": "off",
                        "ip-dscp": 46,
                        "logging-level": "info",
                        "monitor": {
                            "max-offset-threshold": 50,
                            "max-timestamp-entries": 100,
                            "max-violation-log-entries": 4,
                            "max-violation-log-sets": 2,
                            "min-offset-threshold": -50,
                            "path-delay-threshold": 200,
                            "violation-log-interval": 1
                        },
                        "priority1": 128,
                        "priority2": 128,
                        "profile": {
                            "default-1588": {
                                "announce-interval": 1,
                                "announce-timeout": 3,
                                "delay-mechanism": "end-to-end",
                                "delay-req-interval": 0,
                                "domain": 0,
                                "priority1": 128,
                                "priority2": 128,
                                "profile-type": "ieee-1588",
                                "sync-interval": 0,
                                "transport": "ipv4"
                            },
                            "default-itu-8275-1": {
                                "announce-interval": -3,
                                "announce-timeout": 3,
                                "delay-mechanism": "end-to-end",
                                "delay-req-interval": -4,
                                "domain": 24,
                                "local-priority": 128,
                                "priority1": 128,
                                "priority2": 128,
                                "profile-type": "itu-g-8275-1",
                                "sync-interval": -4,
                                "transport": "802.3"
                            },
                            "default-itu-8275-2": {
                                "announce-interval": 0,
                                "announce-timeout": 3,
                                "delay-mechanism": "end-to-end",
                                "delay-req-interval": -6,
                                "domain": 44,
                                "local-priority": 128,
                                "priority1": 128,
                                "priority2": 128,
                                "profile-type": "itu-g-8275-2",
                                "sync-interval": -6,
                                "transport": "ipv4"
                            }
                        },
                        "unicast-master": {}
                    }
                },
                "snmp-server": {
                    "enable": "off"
                },
                "synce": {
                    "enable": "off"
                },
                "syslog": {}
            },
            "system": {
                "aaa": {
                    "authentication-order": {},
                    "tacacs": {
                        "enable": "off"
                    },
                    "user": {}
                },
                "acl": {
                    "mode": "atomic"
                },
                "config": {
                    "apply": {
                        "ignore": {},
                        "overwrite": "all"
                    },
                    "auto-save": {
                        "enable": "off"
                    },
                    "snippet": {}
                },
                "control-plane": {
                    "acl": {},
                    "policer": {},
                    "trap": {}
                },
                "counter": {
                    "polling-interval": {
                        "logical-interface": 5,
                        "physical-interface": 2
                    }
                },
                "forwarding": {
                    "ecmp-hash": {
                        "destination-ip": "on",
                        "destination-port": "on",
                        "gtp-teid": "off",
                        "ingress-interface": "off",
                        "inner-destination-ip": "off",
                        "inner-destination-port": "off",
                        "inner-ip-protocol": "off",
                        "inner-ipv6-label": "off",
                        "inner-source-ip": "off",
                        "inner-source-port": "off",
                        "ip-protocol": "on",
                        "ipv6-label": "on",
                        "source-ip": "on",
                        "source-port": "on"
                    },
                    "host-route-preference": "route",
                    "lag-hash": {
                        "destination-ip": "on",
                        "destination-mac": "on",
                        "destination-port": "on",
                        "ether-type": "on",
                        "gtp-teid": "off",
                        "ip-protocol": "on",
                        "source-ip": "on",
                        "source-mac": "on",
                        "source-port": "on",
                        "vlan": "on"
                    },
                    "programming": {
                        "log-level": "info"
                    }
                },
                "global": {
                    "anycast-id": "none",
                    "anycast-mac": "none",
                    "fabric-id": 1,
                    "fabric-mac": "none",
                    "l3svd": {
                        "enable": "off"
                    },
                    "reserved": {
                        "routing-table": {
                            "pbr": {
                                "begin": 10000,
                                "end": 4294966272
                            }
                        },
                        "vlan": {
                            "internal": {
                                "range": "3725-3999"
                            },
                            "l3-vni-vlan": {
                                "begin": 4000,
                                "end": 4064
                            }
                        }
                    },
                    "system-mac": "auto"
                },
                "hostname": "cumulus",
                "port-mirror": {
                    "session": {}
                },
                "reboot": {
                    "mode": "cold"
                },
                "wjh": {
                    "enable": "off"
                }
            },
            "vrf": {
                "default": {
                    "evpn": {
                        "enable": "off"
                    },
                    "loopback": {
                        "ip": {
                            "address": {
                                "127.0.0.1/8": {},
                                "::1/128": {}
                            }
                        }
                    },
                    "ptp": {
                        "enable": "on"
                    },
                    "router": {
                        "bgp": {
                            "enable": "off"
                        },
                        "nexthop-tracking": {},
                        "ospf": {
                            "enable": "off"
                        },
                        "ospf6": {
                            "enable": "off"
                        },
                        "pim": {
                            "enable": "off"
                        },
                        "rib": {},
                        "static": {}
                    },
                    "table": "auto"
                },
                "mgmt": {
                    "evpn": {
                        "enable": "off"
                    },
                    "loopback": {
                        "ip": {
                            "address": {
                                "127.0.0.1/8": {},
                                "::1/128": {}
                            }
                        }
                    },
                    "ptp": {
                        "enable": "on"
                    },
                    "router": {
                        "bgp": {
                            "enable": "off"
                        },
                        "nexthop-tracking": {},
                        "ospf": {
                            "enable": "off"
                        },
                        "ospf6": {
                            "enable": "off"
                        },
                        "rib": {},
                        "static": {}
                    },
                    "table": "auto"
                }
            }
        }
    }
}

TASK [Get the current interface config] *****************************************************************
ok: [cumulus]

TASK [Print current interface] *****************************************************************
ok: [cumulus] => {
    "msg": {
        "changed": false,
        "failed": false,
        "message": {
            "eth0": {
                "acl": {},
                "ip": {
                    "address": {
                        "dhcp": {}
                    },
                    "gateway": {},
                    "ipv4": {
                        "forward": "off"
                    },
                    "ipv6": {
                        "enable": "on",
                        "forward": "off"
                    },
                    "vrf": "mgmt"
                },
                "link": {
                    "auto-negotiate": "on",
                    "duplex": "full",
                    "fec": "auto",
                    "mtu": 9216,
                    "speed": "auto",
                    "state": {
                        "up": {}
                    }
                },
                "type": "eth"
            },
            "lo": {
                "ip": {
                    "address": {},
                    "igmp": {
                        "enable": "off"
                    },
                    "ipv4": {
                        "forward": "on"
                    },
                    "ipv6": {
                        "enable": "on",
                        "forward": "on"
                    },
                    "vrf": "default"
                },
                "router": {
                    "adaptive-routing": {
                        "enable": "off"
                    },
                    "ospf": {
                        "enable": "off"
                    },
                    "ospf6": {
                        "enable": "off"
                    },
                    "pim": {
                        "enable": "off"
                    }
                },
                "type": "loopback"
            }
        }
    }
}

PLAY RECAP *****************************************************************
cumulus                    : ok=4    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0

Resources