From 3f0771bca72a03a3e7545f35e995d78be98376c2 Mon Sep 17 00:00:00 2001 From: Ivan Pepelnjak Date: Thu, 3 Jul 2025 06:51:57 +0200 Subject: [PATCH 1/8] Extreme EXOS Vagrant box --- netsim/devices/exos.yml | 24 +++++++++ netsim/install/libvirt/exos.txt | 33 ++++++++++++ netsim/install/libvirt/exos.xml.j2 | 52 +++++++++++++++++++ .../templates/provider/libvirt/exos-domain.j2 | 15 ++++++ 4 files changed, 124 insertions(+) create mode 100644 netsim/devices/exos.yml create mode 100644 netsim/install/libvirt/exos.txt create mode 100644 netsim/install/libvirt/exos.xml.j2 create mode 100644 netsim/templates/provider/libvirt/exos-domain.j2 diff --git a/netsim/devices/exos.yml b/netsim/devices/exos.yml new file mode 100644 index 0000000000..6c6c6696f2 --- /dev/null +++ b/netsim/devices/exos.yml @@ -0,0 +1,24 @@ +description: Extreme EXOS +interface_name: Port{ifindex} +loopback_interface_name: lo{ifindex} +ifindex_offset: 1 +mgmt_if: Port0 +role: router +features: + group: [ unprovisioned ] + initial: +libvirt: + create_template: exos.xml.j2 + image: netlab/exos +group_vars: + ansible_network_os: openbsd + ansible_connection: paramiko + ansible_user: admin + ansible_ssh_pass: admin + netlab_ssh_args: >- + -o KexAlgorithms=+diffie-hellman-group-exchange-sha1 + -o PubkeyAcceptedKeyTypes=ssh-rsa + -o HostKeyAlgorithms=+ssh-rsa +external: + image: none +graphite.icon: switch diff --git a/netsim/install/libvirt/exos.txt b/netsim/install/libvirt/exos.txt new file mode 100644 index 0000000000..96580506b6 --- /dev/null +++ b/netsim/install/libvirt/exos.txt @@ -0,0 +1,33 @@ +Creating initial configuration for Extreme EXOS Vagrant box +=========================================================== + +* Wait for the 'login' prompt and 'Authentication Service (AAA) on the + master node is now available for login' message +* Login as 'admin' (no password) + +Answers the never-ending list of setup questions: + +* Disable auto-provision: yes +* Management port: skip +* Disable MSTP: no +* Enable enhanced security: no +* Disable Telnet: yes +* Enable SNMPv2: no +* Enable SNMPv3: no +* Turn off unconfigured ports by default: yes +* Failsave username/password: no + +When you get to the end of the list, you can see the CLI commands you just +generated and a list of generally useful commands. After that, you'll eventually +get to the EXOS prompt (* EXOS-VM.1): + +Type in these commands (there will be extra prompts, so don't just copy/paste +everything). Skip the text in brackets -- that's the explanation. + +* configure account admin password (old password is empty, new one is admin) +* enable ssh +* unconfigure vlan Mgmt ip (remove current IP from management VLAN) +* enable dhcp vlan Mgmt (enable DHCP on management VLAN) +* save configuration + +Disconnect from the console (ctrl-] usually works). diff --git a/netsim/install/libvirt/exos.xml.j2 b/netsim/install/libvirt/exos.xml.j2 new file mode 100644 index 0000000000..aeb81931ed --- /dev/null +++ b/netsim/install/libvirt/exos.xml.j2 @@ -0,0 +1,52 @@ + + vm_box + 1024 + 1024 + 1 + + /machine + + + hvm + + + + + + + + + + destroy + restart + restart + + + + + + /usr/bin/qemu-system-x86_64 + + + + + +
+ + + + +
+ + + + + + + + + + + + + diff --git a/netsim/templates/provider/libvirt/exos-domain.j2 b/netsim/templates/provider/libvirt/exos-domain.j2 new file mode 100644 index 0000000000..78265724eb --- /dev/null +++ b/netsim/templates/provider/libvirt/exos-domain.j2 @@ -0,0 +1,15 @@ + {{ name }}.vm.synced_folder ".", "/vagrant", disabled: true + {{ name }}.ssh.insert_key = false + {{ name }}.vm.boot_timeout = 180 + {{ name }}.vm.guest = :freebsd + {{ name }}.ssh.username = "admin" + {{ name }}.ssh.password = "admin" + {{ name }}.ssh.shell = "" + + {{ name }}.vm.provider :libvirt do |domain| + domain.nic_adapter_count = 13 + domain.memory = 512 + domain.cpus = 1 + domain.driver = "kvm" + domain.nic_model_type = "rtl8139" + end From f0bdcc51fa19a619964003a408f9215ea532e5be Mon Sep 17 00:00:00 2001 From: Seb dArgoeuves Date: Sun, 15 Mar 2026 20:55:21 +0000 Subject: [PATCH 2/8] initial config for EXOS --- docs/labs/exos.md | 28 ++++++++++++++ netsim/ansible/tasks/deploy-config/exos.yml | 5 +++ netsim/ansible/templates/initial/exos.j2 | 43 +++++++++++++++++++++ netsim/devices/exos.yml | 24 +++++++++--- netsim/install/libvirt/exos.txt | 38 +++++++++++++++--- 5 files changed, 127 insertions(+), 11 deletions(-) create mode 100644 docs/labs/exos.md create mode 100644 netsim/ansible/tasks/deploy-config/exos.yml create mode 100644 netsim/ansible/templates/initial/exos.j2 diff --git a/docs/labs/exos.md b/docs/labs/exos.md new file mode 100644 index 0000000000..6c2c996788 --- /dev/null +++ b/docs/labs/exos.md @@ -0,0 +1,28 @@ +(build-exos)= +# Building an Extreme Networks EXOS Vagrant Libvirt Box + +Extreme Networks EXOS is supported by the **netlab libvirt package** command. To build an EXOS box: + +* Create an empty directory on a Ubuntu machine with *libvirt* and *Vagrant*. +* Download EXOS disk image (.qcow2 file) into that directory. + +```{tip} +Select and download the QCOW2 image from [Extreme Networks github page](https://github.com/extremenetworks/Virtual_EXOS?tab=readme-ov-file#qcow2-files-for-gns3) + +Then copy the URL of the QCOW2 image and use `curl -O ` to download it. +``` + +* Execute **netlab libvirt package exos _virtual-disk-file-name_** and follow the instructions + +```{warning} +If you're using a *‌netlab* release older than 1.8.2, or if you're using a Linux distribution other than Ubuntu, please [read the box-building caveats first](libvirt-box-caveats.md). +``` + + diff --git a/netsim/ansible/tasks/deploy-config/exos.yml b/netsim/ansible/tasks/deploy-config/exos.yml new file mode 100644 index 0000000000..c46ac93df2 --- /dev/null +++ b/netsim/ansible/tasks/deploy-config/exos.yml @@ -0,0 +1,5 @@ +- name: "exos_config: deploying {{ netsim_action }} from {{ config_template }}" + community.network.exos_config: + src: "{{ config_template }}" + ignore_errors: true + tags: [ print_action, always ] diff --git a/netsim/ansible/templates/initial/exos.j2 b/netsim/ansible/templates/initial/exos.j2 new file mode 100644 index 0000000000..d772918c5d --- /dev/null +++ b/netsim/ansible/templates/initial/exos.j2 @@ -0,0 +1,43 @@ +configure snmp sysName {{ inventory_hostname.replace("_","-") }} + +enable lldp ports all +disable lldp ports Mgmt + +{% for vname in vrfs|default({}) %} +create virtual-router {{ vname }} type user +{% endfor %} + +{% for l in netlab_interfaces %} +{% set is_loopback = l.type|default('') == 'loopback' %} +{% set vlan_name = 'VLAN_LO' + l.ifindex|string if is_loopback else 'VLAN_P' + l.ifname %} +create vlan "{{ vlan_name }}" +{% if is_loopback %} +enable loopback-mode vlan {{ vlan_name }} +{% else %} +configure vlan {{ vlan_name }} add ports {{ l.ifname }} untagged +{% if l.name is defined %} +configure ports {{ l.ifname }} display-string {{ (l.name + ("-"+l.role if l.role is defined else "")) | replace('->','to') | replace(' ','_') }} +{% elif l.type == "stub" %} +configure ports {{ l.ifname }} display-string Stub +{% endif %} +{% if l.mtu is defined %} +enable jumbo-frame ports {{ l.ifname }} +{% endif %} +{% endif %} +{% if l.vrf is defined %} +configure vlan {{ vlan_name }} virtual-router {{ l.vrf }} +{% endif %} +{% if l.ipv4 is defined %} +{% if l.ipv4 is sameas True %} +! Unnumbered IPv4 not supported on EXOS +{% elif l.ipv4 is string and l.ipv4|ansible.utils.ipv4 %} +configure vlan {{ vlan_name }} ipaddress {{ l.ipv4|ansible.utils.ipaddr('address') }} {{ l.ipv4|ansible.utils.ipaddr('netmask') }} +{% else %} +! Invalid IPv4 address {{ l.ipv4 }} +{% endif %} +{% endif %} +{# ip-mtu must come after ipaddress #} +{% if not is_loopback and l.mtu is defined %} +configure ip-mtu {{ l.mtu }} vlan {{ vlan_name }} +{% endif %} +{% endfor %} diff --git a/netsim/devices/exos.yml b/netsim/devices/exos.yml index 6c6c6696f2..3be9e10a45 100644 --- a/netsim/devices/exos.yml +++ b/netsim/devices/exos.yml @@ -1,18 +1,30 @@ +--- description: Extreme EXOS -interface_name: Port{ifindex} -loopback_interface_name: lo{ifindex} +interface_name: "{ifindex}" +loopback_interface_name: loopback{ifindex} ifindex_offset: 1 -mgmt_if: Port0 +mgmt_if: Mgmt role: router features: - group: [ unprovisioned ] initial: libvirt: create_template: exos.xml.j2 image: netlab/exos +clab: + build: True + image: vrnetlab/extreme_exos + node: + kind: linux # kind not yet available in Containerlab + interface: + name: "eth{ifindex}" + group_vars: + ansible_user: vrnetlab + ansible_ssh_pass: VR-netlab9 group_vars: - ansible_network_os: openbsd - ansible_connection: paramiko + ansible_network_os: exos + ansible_connection: ansible.netcommon.network_cli + netlab_console_connection: ssh + netlab_initial: always ansible_user: admin ansible_ssh_pass: admin netlab_ssh_args: >- diff --git a/netsim/install/libvirt/exos.txt b/netsim/install/libvirt/exos.txt index 96580506b6..e90ec07d69 100644 --- a/netsim/install/libvirt/exos.txt +++ b/netsim/install/libvirt/exos.txt @@ -3,7 +3,7 @@ Creating initial configuration for Extreme EXOS Vagrant box * Wait for the 'login' prompt and 'Authentication Service (AAA) on the master node is now available for login' message -* Login as 'admin' (no password) +* Log in as 'admin' (no password) Answers the never-ending list of setup questions: @@ -15,19 +15,47 @@ Answers the never-ending list of setup questions: * Enable SNMPv2: no * Enable SNMPv3: no * Turn off unconfigured ports by default: yes -* Failsave username/password: no +* Failsafe username/password: no When you get to the end of the list, you can see the CLI commands you just generated and a list of generally useful commands. After that, you'll eventually get to the EXOS prompt (* EXOS-VM.1): -Type in these commands (there will be extra prompts, so don't just copy/paste -everything). Skip the text in brackets -- that's the explanation. +Enter these commands one at a time. There will be extra prompts, so do not +copy and paste everything at once. Skip the text in brackets; it is included +only as an explanation. * configure account admin password (old password is empty, new one is admin) * enable ssh +* create account admin vagrant vagrant +* create sshd2 user-key vagrant AAAAB3NzaC1yc2EAAAABIwAAAQEA6NF8iallvQVp22WDkTkyrtvp9eWW6A8YVr+kz4TjGYe7gHzIw+niNltGEFHzD8+v1I2YJ6oXevct1YeS0o9HZyN1Q9qgCgzUFtdOKLv6IedplqoPkcmF0aYet2PkEDo3MlTBckFXPITAMzF8dJSIFo9D8HfdOV0IAdx4O7PtixWKn5y2hMNG0zQPyUecp4pzC6kivAIhyfHilFR61RGL+GPXQ2MWZWFYbAGjyiYJnAmCP3NOTd0jMZEnDkbUvxhMmBYSdETk1rRgm+R4LOzFUGaHqHDLKLX+FIPKcF96hrucXzcWyLbIbEgE98OHlnVYCzRdK8jlqm8tehUc9c9WhQ== +* configure sshd2 user-key vagrant add user vagrant * unconfigure vlan Mgmt ip (remove current IP from management VLAN) * enable dhcp vlan Mgmt (enable DHCP on management VLAN) * save configuration -Disconnect from the console (ctrl-] usually works). +Disconnect from the console (Ctrl+] usually works). + +For convenience, here is a copy-and-paste version of the commands above, use with caution: + +==================================================== + +configure account admin password + +admin +admin + +enable ssh +y + +create account admin vagrant vagrant +create sshd2 user-key vagrant AAAAB3NzaC1yc2EAAAABIwAAAQEA6NF8iallvQVp22WDkTkyrtvp9eWW6A8YVr+kz4TjGYe7gHzIw+niNltGEFHzD8+v1I2YJ6oXevct1YeS0o9HZyN1Q9qgCgzUFtdOKLv6IedplqoPkcmF0aYet2PkEDo3MlTBckFXPITAMzF8dJSIFo9D8HfdOV0IAdx4O7PtixWKn5y2hMNG0zQPyUecp4pzC6kivAIhyfHilFR61RGL+GPXQ2MWZWFYbAGjyiYJnAmCP3NOTd0jMZEnDkbUvxhMmBYSdETk1rRgm+R4LOzFUGaHqHDLKLX+FIPKcF96hrucXzcWyLbIbEgE98OHlnVYCzRdK8jlqm8tehUc9c9WhQ== +configure sshd2 user-key vagrant add user vagrant + +unconfigure vlan Mgmt ip +enable dhcp vlan Mgmt + +save configuration +y + +==================================================== From cf0cfa6c83c857b2de16c333d1247d72240e442e Mon Sep 17 00:00:00 2001 From: Seb d'Argoeuves Date: Tue, 24 Mar 2026 19:56:09 +0000 Subject: [PATCH 3/8] EXOS - docs --- docs/labs/exos.md | 8 +- docs/labs/exos.txt | 1 + netsim/install/libvirt/eos.txt | 137 +++++++++++++++------------------ 3 files changed, 66 insertions(+), 80 deletions(-) create mode 120000 docs/labs/exos.txt diff --git a/docs/labs/exos.md b/docs/labs/exos.md index 6c2c996788..380dcb63cb 100644 --- a/docs/labs/exos.md +++ b/docs/labs/exos.md @@ -18,11 +18,11 @@ Then copy the URL of the QCOW2 image and use `curl -O ` to download it. If you're using a *‌netlab* release older than 1.8.2, or if you're using a Linux distribution other than Ubuntu, please [read the box-building caveats first](libvirt-box-caveats.md). ``` - +``` diff --git a/docs/labs/exos.txt b/docs/labs/exos.txt new file mode 120000 index 0000000000..eebfa82d1f --- /dev/null +++ b/docs/labs/exos.txt @@ -0,0 +1 @@ +../../netsim/install/libvirt/eos.txt \ No newline at end of file diff --git a/netsim/install/libvirt/eos.txt b/netsim/install/libvirt/eos.txt index 0882a0f581..e90ec07d69 100644 --- a/netsim/install/libvirt/eos.txt +++ b/netsim/install/libvirt/eos.txt @@ -1,76 +1,61 @@ -Creating initial configuration for Arista EOS -============================================= - -* Wait for the 'login' prompt -* Login as 'admin' (no password) -* Disable zero-touch with 'zerotouch disable' - -=============== -*** WARNING *** -=============== -Disabling zero-touch (which will also cause a device reboot) is crucial. With -zero-touch enabled, the Vagrant box will acquire an IP address on the management -interface, but never start SSH, resulting in a stuck "vagrant up" process. - -After the system reboot - -* Login as 'admin' -* Go into enable mode, enter configuration mode -* Copy-paste the following configuration - -NOTE: the management traffic is isolated in a dedicated management VRF (management). - -============================================= -aaa authorization exec default local -! -no aaa root -! -service routing protocols model multi-agent -! -vrf instance management -! -username vagrant privilege 15 secret sha512 $6$3kgdKcJLJ3j/0N51$a0YshIzKL3xtdwP6XXXRlY9B8yHFK/tLdg0I95YUIaW7oHqLsgK9TxMg8/0bL6VDkImuWT.g7WRKTxi8nNPtA1 -username vagrant ssh-key ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEA6NF8iallvQVp22WDkTkyrtvp9eWW6A8YVr+kz4TjGYe7gHzIw+niNltGEFHzD8+v1I2YJ6oXevct1YeS0o9HZyN1Q9qgCgzUFtdOKLv6IedplqoPkcmF0aYet2PkEDo3MlTBckFXPITAMzF8dJSIFo9D8HfdOV0IAdx4O7PtixWKn5y2hMNG0zQPyUecp4pzC6kivAIhyfHilFR61RGL+GPXQ2MWZWFYbAGjyiYJnAmCP3NOTd0jMZEnDkbUvxhMmBYSdETk1rRgm+R4LOzFUGaHqHDLKLX+FIPKcF96hrucXzcWyLbIbEgE98OHlnVYCzRdK8jlqm8tehUc9c9WhQ== vagrant insecure public key -! -interface Management1 - vrf management - ip address dhcp - dhcp client accept default-route -! -no ip routing -no ip routing vrf management -! -security pki key generate rsa 2048 default -security pki certificate generate self-signed default key default param common-name Arista -! -management api http-commands - no shutdown - ! - vrf management - no shutdown -! -management api netconf - transport ssh default -! -management api restconf - transport https default - ssl profile default - port 6040 -! -management security - ssl profile default - certificate default key default -! -management ssh - vrf management - no shutdown -! -no user vagrant shell -! -end -============================================= - -* Save the configuration with 'wr mem' -* Poweroff the VM with 'bash sudo poweroff' -* If the device starts reloading instead of shutting down, disconnect - from the console (ctrl-] usually works). +Creating initial configuration for Extreme EXOS Vagrant box +=========================================================== + +* Wait for the 'login' prompt and 'Authentication Service (AAA) on the + master node is now available for login' message +* Log in as 'admin' (no password) + +Answers the never-ending list of setup questions: + +* Disable auto-provision: yes +* Management port: skip +* Disable MSTP: no +* Enable enhanced security: no +* Disable Telnet: yes +* Enable SNMPv2: no +* Enable SNMPv3: no +* Turn off unconfigured ports by default: yes +* Failsafe username/password: no + +When you get to the end of the list, you can see the CLI commands you just +generated and a list of generally useful commands. After that, you'll eventually +get to the EXOS prompt (* EXOS-VM.1): + +Enter these commands one at a time. There will be extra prompts, so do not +copy and paste everything at once. Skip the text in brackets; it is included +only as an explanation. + +* configure account admin password (old password is empty, new one is admin) +* enable ssh +* create account admin vagrant vagrant +* create sshd2 user-key vagrant AAAAB3NzaC1yc2EAAAABIwAAAQEA6NF8iallvQVp22WDkTkyrtvp9eWW6A8YVr+kz4TjGYe7gHzIw+niNltGEFHzD8+v1I2YJ6oXevct1YeS0o9HZyN1Q9qgCgzUFtdOKLv6IedplqoPkcmF0aYet2PkEDo3MlTBckFXPITAMzF8dJSIFo9D8HfdOV0IAdx4O7PtixWKn5y2hMNG0zQPyUecp4pzC6kivAIhyfHilFR61RGL+GPXQ2MWZWFYbAGjyiYJnAmCP3NOTd0jMZEnDkbUvxhMmBYSdETk1rRgm+R4LOzFUGaHqHDLKLX+FIPKcF96hrucXzcWyLbIbEgE98OHlnVYCzRdK8jlqm8tehUc9c9WhQ== +* configure sshd2 user-key vagrant add user vagrant +* unconfigure vlan Mgmt ip (remove current IP from management VLAN) +* enable dhcp vlan Mgmt (enable DHCP on management VLAN) +* save configuration + +Disconnect from the console (Ctrl+] usually works). + +For convenience, here is a copy-and-paste version of the commands above, use with caution: + +==================================================== + +configure account admin password + +admin +admin + +enable ssh +y + +create account admin vagrant vagrant +create sshd2 user-key vagrant AAAAB3NzaC1yc2EAAAABIwAAAQEA6NF8iallvQVp22WDkTkyrtvp9eWW6A8YVr+kz4TjGYe7gHzIw+niNltGEFHzD8+v1I2YJ6oXevct1YeS0o9HZyN1Q9qgCgzUFtdOKLv6IedplqoPkcmF0aYet2PkEDo3MlTBckFXPITAMzF8dJSIFo9D8HfdOV0IAdx4O7PtixWKn5y2hMNG0zQPyUecp4pzC6kivAIhyfHilFR61RGL+GPXQ2MWZWFYbAGjyiYJnAmCP3NOTd0jMZEnDkbUvxhMmBYSdETk1rRgm+R4LOzFUGaHqHDLKLX+FIPKcF96hrucXzcWyLbIbEgE98OHlnVYCzRdK8jlqm8tehUc9c9WhQ== +configure sshd2 user-key vagrant add user vagrant + +unconfigure vlan Mgmt ip +enable dhcp vlan Mgmt + +save configuration +y + +==================================================== From 4613cc8a3149bc3c08122e39e155150bb76169b2 Mon Sep 17 00:00:00 2001 From: Seb d'Argoeuves Date: Tue, 24 Mar 2026 20:45:20 +0000 Subject: [PATCH 4/8] wip --- docs/caveats.md | 9 +++++++++ docs/platforms.md | 5 ++++- 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/docs/caveats.md b/docs/caveats.md index 112b445e55..15fb16622a 100644 --- a/docs/caveats.md +++ b/docs/caveats.md @@ -330,6 +330,15 @@ Netlab enables VRRPv3 by default on Dell OS10, overriding any platform defaults. * You have to build the *dnsmasq* container image with the **netlab clab build dnsmasq** command. +(caveats-exos)= +## Extreme Networks EXOS + +* Netlab uses the now deprecated **community.network.exos_config** Ansible module to configure Extreme EXOS devices. This collection is not actively maintained anymore. To install you can still run: + +```shell +ansible-galaxy collection install community.network +``` + (caveats-fortios)= ## Fortinet FortiOS diff --git a/docs/platforms.md b/docs/platforms.md index dacd162d69..e5df52de5d 100644 --- a/docs/platforms.md +++ b/docs/platforms.md @@ -29,6 +29,7 @@ | Cumulus Linux 4.x/5.x [❗](caveats-cumulus) | cumulus | end of life | | Cumulus Linux 5.x (NVUE) [❗](caveats-cumulus-nvue) | cumulus_nvue | minimal | | Dell OS10 [❗](caveats-os10) | dellos10 | full | +| Extreme Networks EXOS [❗](caveats-exos) | exos | minimal | | Fortinet FortiOS [❗](caveats-fortios) | fortios | minimal | | FRRouting (FRR) [❗](caveats-frr) | frr | full | | [Generic Linux host](generic-linux-devices) | linux | full | @@ -125,7 +126,8 @@ You cannot use all supported network devices with all virtualization providers. | Cumulus Linux | ✅ | ✅ | ✅[❗](caveats-cumulus) | | Cumulus Linux 5.x (NVUE) | ✅ | ✅ | ✅[❗](caveats-cumulus) | | Dell OS10 | [✅](build-dellos10) | ❌ | ✅ | -| Fortinet FortiOS | ✅ | ❌ | ✅ | +| Extreme Networks EXOS | [✅](build-exos) | ❌ | ✅[❗](clab-vrnetlab) | +| Fortinet FortiOS | [✅](build-fortios) | ❌ | ✅ | | FRR | [✅](build-frr)[❗](caveats-frr) | ✅[❗](caveats-frr) | ✅ | | Generic Linux (Ubuntu/Alpine) [❗](labs/linux.md) | ✅ | ✅ | ✅ | | Juniper cRPD | ❌ | ❌ | ✅ | @@ -164,6 +166,7 @@ Configuration files for Virtualbox and KVM/libvirt environments specify the numb | Cumulus Linux | cumulus | 2 | 1024 | virtio | | Cumulus Linux 5.x (NVUE) | cumulus_nvue | 2 | 1024 | virtio | | Dell OS10 | dellos10 | 2 | 2048 | e1000 | +| Extreme Networks EXOS | exos | 1 | 1024 | virtio | | Fortinet FortiOS | fortios | 1 | 2048 | virtio | | FRR | frr | 1 | 1024 | virtio | | Generic Linux host | linux | 1 | 1024 | virtio | From ad44130dff5c15a2a855fe22dc60a9c37d0d26c1 Mon Sep 17 00:00:00 2001 From: Seb d'Argoeuves Date: Wed, 25 Mar 2026 00:33:11 +0000 Subject: [PATCH 5/8] update exos docs and add ipv6 --- docs/platforms.md | 18 ++- netsim/ansible/tasks/deploy-config/exos.yml | 1 - netsim/ansible/tasks/fetch-config/exos.yml | 3 + netsim/ansible/templates/initial/exos.j2 | 12 +- netsim/install/libvirt/eos.txt | 137 +++++++++++--------- 5 files changed, 100 insertions(+), 71 deletions(-) create mode 100644 netsim/ansible/tasks/fetch-config/exos.yml diff --git a/docs/platforms.md b/docs/platforms.md index e5df52de5d..04d06ba14a 100644 --- a/docs/platforms.md +++ b/docs/platforms.md @@ -154,26 +154,26 @@ Configuration files for Virtualbox and KVM/libvirt environments specify the numb | Virtual network device | netlab
device type | CPUs | memory | libvirt NIC model | | -------------------------- | ------------------ | ---: | -----: | -------------------------: | -| Arista vEOS | eos | 2 | 2048 | virtio | +| Arista vEOS | eos | 2 | 4096 | virtio | | Aruba AOS-CX | arubacx | 2 | 4096 | virtio | | Cisco ASAv | asav | 1 | 2048 | virtio | | Cisco Catalyst 8000v | cat8000v | 2 | 4096 | virtio | | Cisco CSR 1000v | csr | 2 | 4096 | virtio | -| Cisco IOSv | iosv | 1 | 512 | e1000 | -| Cisco IOSvL2 | iosvl2 | 1 | 1024 | e1000 | -| Cisco IOS XRv | iosxr | 2 | 8192 | e1000 | +| Cisco IOSv | iosv | 1 | 512 | e1000 | +| Cisco IOSvL2 | iosvl2 | 1 | 1024 | e1000 | +| Cisco IOS XRv | iosxr | 2 | 8192 | e1000 | | Cisco Nexus 9300v | nxos | 2 | 6144 [❗](caveats-nxos)| e1000 | | Cumulus Linux | cumulus | 2 | 1024 | virtio | | Cumulus Linux 5.x (NVUE) | cumulus_nvue | 2 | 1024 | virtio | -| Dell OS10 | dellos10 | 2 | 2048 | e1000 | -| Extreme Networks EXOS | exos | 1 | 1024 | virtio | +| Dell OS10 | dellos10 | 2 | 2048 | e1000 | +| Extreme Networks EXOS | exos | 1 | 1024 | rtl8139 | | Fortinet FortiOS | fortios | 1 | 2048 | virtio | | FRR | frr | 1 | 1024 | virtio | | Generic Linux host | linux | 1 | 1024 | virtio | | Juniper vSRX 3.0 | vsrx | 2 | 4096 | virtio | | Juniper vPTX | vptx | 4 | 8192 | virtio | | Mikrotik RouterOS 6 | routeros | 1 | 256 | virtio | -| Mikrotik RouterOS 7 | routeros7 | 2 | 256 | e1000 | +| Mikrotik RouterOS 7 | routeros7 | 2 | 256 | e1000 | | OpenBSD | openbsd | 1 | 1024 | virtio | | Sonic | sonic | 2 | 4096 | virtio | | VyOS | vyos | 2 | 1024 | virtio | @@ -197,6 +197,7 @@ Ansible playbooks included with **netlab** can deploy and collect device configu | Cisco Nexus OS | ✅ | ✅ | | Cumulus Linux | ✅ | ✅ | | Dell OS10 | ✅ | ✅ | ✅ | +| Extreme Networks EXOS | ✅ | ✅ | | Fortinet FortiOS | ✅ | ✅ | | FRR | ✅ [❗](caveats-frr) | ✅[❗](caveats-frr) | | Generic Linux | ✅ | ❌ | @@ -281,6 +282,7 @@ The following system-wide features are configured on supported network operating | Cumulus Linux | ✅ | ✅[^HIF] | ✅ | ✅ | ✅ | | Cumulus Linux 5.x (NVUE) | ✅ | ✅ | ✅ | ✅ | ✅ | | Dell OS10 | ✅ | ✅ | ✅ | ✅ | ✅ | +| Extreme Networks EXOS | ✅ | ❌ | ✅ | ✅ | ✅ | | Fortinet FortiOS | ✅ | ❌ | ✅ | ✅ | ✅ | | FRR | ✅ | ✅[^HIF] | ❌ | ✅ | ✅ | | Generic Linux | ✅ | ✅[^HIF] | ✅[❗](linux-lldp) | ✅ | ✅ | @@ -310,6 +312,7 @@ The following interface parameters are configured on supported network operating | Cumulus Linux | ✅ | ✅ | ✅ | ✅ | | Cumulus Linux 5.x (NVUE) | ✅ | ❌ | ✅ | ✅ | | Dell OS10 | ✅ | ❌ | ✅ | ✅ | +| Extreme Networks EXOS | ✅ | ❌ | ✅ | ❌ | | Fortinet FortiOS | ✅ | ✅ | ✅[❗](caveats-fortios) | ❌ | | FRR | ✅ | ✅ | ✅ | ✅ | | Generic Linux | ❌ | ❌ | ✅ | ❌ | @@ -337,6 +340,7 @@ The following interface addresses are supported on various platforms; most daemo | Cumulus Linux | ✅ | ✅ | ✅ | ❌ | | Cumulus Linux 5.x (NVUE) | ✅ | ✅ | ✅ | ❌ | | Dell OS10 | ✅ | ✅ | ❌ | ❌ | +| Extreme Networks EXOS | ✅ | ✅ | ❌ | ❌ | | Fortinet FortiOS | ✅ | ✅ | ❌ | ❌ | | FRR | ✅ | ✅ | ✅ | ✅ | | Generic Linux | ✅ | ✅ | ❌ | ❌ | diff --git a/netsim/ansible/tasks/deploy-config/exos.yml b/netsim/ansible/tasks/deploy-config/exos.yml index c46ac93df2..c29c9b08bb 100644 --- a/netsim/ansible/tasks/deploy-config/exos.yml +++ b/netsim/ansible/tasks/deploy-config/exos.yml @@ -1,5 +1,4 @@ - name: "exos_config: deploying {{ netsim_action }} from {{ config_template }}" community.network.exos_config: src: "{{ config_template }}" - ignore_errors: true tags: [ print_action, always ] diff --git a/netsim/ansible/tasks/fetch-config/exos.yml b/netsim/ansible/tasks/fetch-config/exos.yml new file mode 100644 index 0000000000..929965fd52 --- /dev/null +++ b/netsim/ansible/tasks/fetch-config/exos.yml @@ -0,0 +1,3 @@ +--- +- community.network.exos_facts: + gather_subset: config diff --git a/netsim/ansible/templates/initial/exos.j2 b/netsim/ansible/templates/initial/exos.j2 index d772918c5d..790159070b 100644 --- a/netsim/ansible/templates/initial/exos.j2 +++ b/netsim/ansible/templates/initial/exos.j2 @@ -29,14 +29,22 @@ configure vlan {{ vlan_name }} virtual-router {{ l.vrf }} {% endif %} {% if l.ipv4 is defined %} {% if l.ipv4 is sameas True %} -! Unnumbered IPv4 not supported on EXOS +! Unnumbered IPv4 not implemented for EXOS {% elif l.ipv4 is string and l.ipv4|ansible.utils.ipv4 %} configure vlan {{ vlan_name }} ipaddress {{ l.ipv4|ansible.utils.ipaddr('address') }} {{ l.ipv4|ansible.utils.ipaddr('netmask') }} {% else %} ! Invalid IPv4 address {{ l.ipv4 }} {% endif %} {% endif %} -{# ip-mtu must come after ipaddress #} +{% if l.ipv6 is defined %} +{% if l.ipv6 is sameas True %} +! Link-local-only IPv6 not implemented for EXOS +{% elif l.ipv6 is string and l.ipv6|ansible.utils.ipv6 %} +configure vlan {{ vlan_name }} ipaddress {{ l.ipv6|upper }} +{% else %} +! Invalid IPv6 address {{ l.ipv6 }} +{% endif %} +{% endif %} {% if not is_loopback and l.mtu is defined %} configure ip-mtu {{ l.mtu }} vlan {{ vlan_name }} {% endif %} diff --git a/netsim/install/libvirt/eos.txt b/netsim/install/libvirt/eos.txt index e90ec07d69..0882a0f581 100644 --- a/netsim/install/libvirt/eos.txt +++ b/netsim/install/libvirt/eos.txt @@ -1,61 +1,76 @@ -Creating initial configuration for Extreme EXOS Vagrant box -=========================================================== - -* Wait for the 'login' prompt and 'Authentication Service (AAA) on the - master node is now available for login' message -* Log in as 'admin' (no password) - -Answers the never-ending list of setup questions: - -* Disable auto-provision: yes -* Management port: skip -* Disable MSTP: no -* Enable enhanced security: no -* Disable Telnet: yes -* Enable SNMPv2: no -* Enable SNMPv3: no -* Turn off unconfigured ports by default: yes -* Failsafe username/password: no - -When you get to the end of the list, you can see the CLI commands you just -generated and a list of generally useful commands. After that, you'll eventually -get to the EXOS prompt (* EXOS-VM.1): - -Enter these commands one at a time. There will be extra prompts, so do not -copy and paste everything at once. Skip the text in brackets; it is included -only as an explanation. - -* configure account admin password (old password is empty, new one is admin) -* enable ssh -* create account admin vagrant vagrant -* create sshd2 user-key vagrant AAAAB3NzaC1yc2EAAAABIwAAAQEA6NF8iallvQVp22WDkTkyrtvp9eWW6A8YVr+kz4TjGYe7gHzIw+niNltGEFHzD8+v1I2YJ6oXevct1YeS0o9HZyN1Q9qgCgzUFtdOKLv6IedplqoPkcmF0aYet2PkEDo3MlTBckFXPITAMzF8dJSIFo9D8HfdOV0IAdx4O7PtixWKn5y2hMNG0zQPyUecp4pzC6kivAIhyfHilFR61RGL+GPXQ2MWZWFYbAGjyiYJnAmCP3NOTd0jMZEnDkbUvxhMmBYSdETk1rRgm+R4LOzFUGaHqHDLKLX+FIPKcF96hrucXzcWyLbIbEgE98OHlnVYCzRdK8jlqm8tehUc9c9WhQ== -* configure sshd2 user-key vagrant add user vagrant -* unconfigure vlan Mgmt ip (remove current IP from management VLAN) -* enable dhcp vlan Mgmt (enable DHCP on management VLAN) -* save configuration - -Disconnect from the console (Ctrl+] usually works). - -For convenience, here is a copy-and-paste version of the commands above, use with caution: - -==================================================== - -configure account admin password - -admin -admin - -enable ssh -y - -create account admin vagrant vagrant -create sshd2 user-key vagrant AAAAB3NzaC1yc2EAAAABIwAAAQEA6NF8iallvQVp22WDkTkyrtvp9eWW6A8YVr+kz4TjGYe7gHzIw+niNltGEFHzD8+v1I2YJ6oXevct1YeS0o9HZyN1Q9qgCgzUFtdOKLv6IedplqoPkcmF0aYet2PkEDo3MlTBckFXPITAMzF8dJSIFo9D8HfdOV0IAdx4O7PtixWKn5y2hMNG0zQPyUecp4pzC6kivAIhyfHilFR61RGL+GPXQ2MWZWFYbAGjyiYJnAmCP3NOTd0jMZEnDkbUvxhMmBYSdETk1rRgm+R4LOzFUGaHqHDLKLX+FIPKcF96hrucXzcWyLbIbEgE98OHlnVYCzRdK8jlqm8tehUc9c9WhQ== -configure sshd2 user-key vagrant add user vagrant - -unconfigure vlan Mgmt ip -enable dhcp vlan Mgmt - -save configuration -y - -==================================================== +Creating initial configuration for Arista EOS +============================================= + +* Wait for the 'login' prompt +* Login as 'admin' (no password) +* Disable zero-touch with 'zerotouch disable' + +=============== +*** WARNING *** +=============== +Disabling zero-touch (which will also cause a device reboot) is crucial. With +zero-touch enabled, the Vagrant box will acquire an IP address on the management +interface, but never start SSH, resulting in a stuck "vagrant up" process. + +After the system reboot + +* Login as 'admin' +* Go into enable mode, enter configuration mode +* Copy-paste the following configuration + +NOTE: the management traffic is isolated in a dedicated management VRF (management). + +============================================= +aaa authorization exec default local +! +no aaa root +! +service routing protocols model multi-agent +! +vrf instance management +! +username vagrant privilege 15 secret sha512 $6$3kgdKcJLJ3j/0N51$a0YshIzKL3xtdwP6XXXRlY9B8yHFK/tLdg0I95YUIaW7oHqLsgK9TxMg8/0bL6VDkImuWT.g7WRKTxi8nNPtA1 +username vagrant ssh-key ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEA6NF8iallvQVp22WDkTkyrtvp9eWW6A8YVr+kz4TjGYe7gHzIw+niNltGEFHzD8+v1I2YJ6oXevct1YeS0o9HZyN1Q9qgCgzUFtdOKLv6IedplqoPkcmF0aYet2PkEDo3MlTBckFXPITAMzF8dJSIFo9D8HfdOV0IAdx4O7PtixWKn5y2hMNG0zQPyUecp4pzC6kivAIhyfHilFR61RGL+GPXQ2MWZWFYbAGjyiYJnAmCP3NOTd0jMZEnDkbUvxhMmBYSdETk1rRgm+R4LOzFUGaHqHDLKLX+FIPKcF96hrucXzcWyLbIbEgE98OHlnVYCzRdK8jlqm8tehUc9c9WhQ== vagrant insecure public key +! +interface Management1 + vrf management + ip address dhcp + dhcp client accept default-route +! +no ip routing +no ip routing vrf management +! +security pki key generate rsa 2048 default +security pki certificate generate self-signed default key default param common-name Arista +! +management api http-commands + no shutdown + ! + vrf management + no shutdown +! +management api netconf + transport ssh default +! +management api restconf + transport https default + ssl profile default + port 6040 +! +management security + ssl profile default + certificate default key default +! +management ssh + vrf management + no shutdown +! +no user vagrant shell +! +end +============================================= + +* Save the configuration with 'wr mem' +* Poweroff the VM with 'bash sudo poweroff' +* If the device starts reloading instead of shutting down, disconnect + from the console (ctrl-] usually works). From 28b9522617f61605217820e5c582ca65857dbcdf Mon Sep 17 00:00:00 2001 From: Ivan Pepelnjak Date: Wed, 25 Mar 2026 17:36:37 +0100 Subject: [PATCH 6/8] Fix symlink to EXOS Vagrant box config commands --- docs/labs/exos.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/labs/exos.txt b/docs/labs/exos.txt index eebfa82d1f..6c1d149461 120000 --- a/docs/labs/exos.txt +++ b/docs/labs/exos.txt @@ -1 +1 @@ -../../netsim/install/libvirt/eos.txt \ No newline at end of file +../../netsim/install/libvirt/exos.txt \ No newline at end of file From e639590e3b45010b9df00f274b17ab66f1a0d34a Mon Sep 17 00:00:00 2001 From: Ivan Pepelnjak Date: Wed, 25 Mar 2026 17:50:56 +0100 Subject: [PATCH 7/8] Minor documentation tweaks --- docs/labs/libvirt.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docs/labs/libvirt.md b/docs/labs/libvirt.md index 4b52a7da39..bc43805ec1 100644 --- a/docs/labs/libvirt.md +++ b/docs/labs/libvirt.md @@ -87,6 +87,7 @@ These documents contain box-building recipes using the **netlab libvirt** utilit * [Cisco Nexus OS](nxos.md) * [Cumulus Linux 5.x](cumulus_nvue.md) * [Dell OS10](dellos10.md) by [Stefano Sasso](http://stefano.dscnet.org) +* [Extreme Networks EXOS](exos.md) by [Seb d'Argoeuves](https://noodlesops.space/about/) * [Fortinet FortiOS](fortios.md) - instructions based on the [work](https://blog.petecrocker.com/post/fortinet_vagrant_libvirt/) by [Pete Crocker](https://blog.petecrocker.com/about/) for 6.x/7.0 and updated for 7.4/7.6 in this [blog post](https://noodleops.space/2025-06/add-a-fortigate-in-your-virtual-lab-from-qcow-to-netlab-by-creating-a-vagrant-box/) by [Seb d'Argoeuves](https://noodlesops.space/about/). * [FRRouting](frr.md) (Debian VM with preinstalled **frr** package) * [Juniper vPTX](vptx.md) @@ -304,6 +305,7 @@ providers.libvirt.probe: [] cat8000v.md csr.md cumulus_nvue.md + exos.md fortios.md frr.md iosv.md From 54d37d6f8400f620433251ade5c6a1e7fa2a2be7 Mon Sep 17 00:00:00 2001 From: Seb d'Argoeuves Date: Fri, 27 Mar 2026 00:27:22 +0000 Subject: [PATCH 8/8] define MIN and MAX MTU --- netsim/devices/exos.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/netsim/devices/exos.yml b/netsim/devices/exos.yml index 3be9e10a45..fa18345641 100644 --- a/netsim/devices/exos.yml +++ b/netsim/devices/exos.yml @@ -7,6 +7,8 @@ mgmt_if: Mgmt role: router features: initial: + min_mtu: 1500 + max_mtu: 9216 libvirt: create_template: exos.xml.j2 image: netlab/exos