A procedure for creating a Cisco IOS XRv Vagrant box for the libvirt provider.
- Cisco Modeling Labs - Personal subscription
- Git
- Python
- Ansible >= 2.7
- libvirt with client tools
- QEMU
- Expect
- sshpass
- Telnet
- Vagrant >= 2.2.10
- vagrant-libvirt
Vagrant version 2.2.16 introduced a bug that breaks SSH connectivity - #12344
0. Verify the prerequisite tools are installed.
$ which git python ansible libvirtd virsh qemu-system-x86_64 expect sshpass telnet vagrant $ vagrant plugin list vagrant-libvirt (0.4.1, global)
1. Log in and download the CML-P reference platform ISO file to your Downloads
directory.
2. Create a mount point directory.
$ sudo mkdir -p /mnt/iso
3. Mount the ISO file.
$ cd $HOME/Downloads $ sudo mount -o loop refplat-20201110-fcs.iso /mnt/iso
4. Copy (and rename) the Cisco IOS XRv disk image file to the /var/lib/libvirt/images
directory.
$ sudo cp /mnt/iso/virl-base-images/iosxrv-6-3-1/iosxrv-k9-demo-6.3.1.qcow2 /var/lib/libvirt/images/cisco-iosxrv.qcow2
5. Unmount the ISO file.
$ sudo umount /mnt/iso
6. Modify the file ownership and permissions. Note the owner may differ between Linux distributions.
Ubuntu 18.04
$ sudo chown libvirt-qemu:kvm /var/lib/libvirt/images/cisco-iosxrv.qcow2 $ sudo chmod u+x /var/lib/libvirt/images/cisco-iosxrv.qcow2
Arch Linux
$ sudo chown nobody:kvm /var/lib/libvirt/images/cisco-iosxrv.qcow2 $ sudo chmod u+x /var/lib/libvirt/images/cisco-iosxrv.qcow2
7. Create the boxes
directory.
$ mkdir -p $HOME/boxes
8. Start the vagrant-libvirt
network (if not already started).
$ virsh -c qemu:///system net-list $ virsh -c qemu:///system net-start vagrant-libvirt
9. Clone this GitHub repo and cd into the directory.
$ git clone https://github.com/mweisel/cisco-iosxrv-vagrant-libvirt $ cd cisco-iosxrv-vagrant-libvirt
10. Run the Ansible playbook.
$ ansible-playbook main.yml
11. Copy (and rename) the Vagrant box artifact to the boxes
directory.
$ cp cisco-iosxrv.box $HOME/boxes/cisco-iosxrv-631.box
12. Copy the box metadata file to the boxes
directory.
$ cp ./files/cisco-iosxrv.json $HOME/boxes/
13. Change the current working directory to boxes
.
$ cd $HOME/boxes
14. Substitute the HOME
placeholder string in the box metadata file.
$ awk '/url/{gsub(/^ */,"");print}' cisco-iosxrv.json "url": "file://HOME/boxes/cisco-iosxrv-631.box" $ sed -i "s|HOME|${HOME}|" cisco-iosxrv.json $ awk '/url/{gsub(/^ */,"");print}' cisco-iosxrv.json "url": "file:///home/marc/boxes/cisco-iosxrv-631.box"
15. Add the Vagrant box to the local inventory.
$ vagrant box add cisco-iosxrv.json
View the telnet session output for the expect
task:
$ tail -f ~/iosxrv-console.explog
This project is licensed under the MIT License - see the LICENSE file for details