An open API service indexing awesome lists of open source software.

https://github.com/mweisel/cisco-iosv-vagrant-libvirt

A procedure for creating a Cisco IOSv Vagrant box for the libvirt provider.
https://github.com/mweisel/cisco-iosv-vagrant-libvirt

cisco-ios libvirt-provider vagrant-box

Last synced: 3 months ago
JSON representation

A procedure for creating a Cisco IOSv Vagrant box for the libvirt provider.

Awesome Lists containing this project

README

        

Vagrant

# Cisco IOSv Vagrant box

A procedure for creating a Cisco IOSv Vagrant box for the [libvirt](https://libvirt.org) provider.

## Prerequisites

* [Cisco Modeling Labs - Personal](https://learningnetworkstore.cisco.com/cisco-modeling-labs-personal) subscription
* [Git](https://git-scm.com)
* [Python](https://www.python.org)
* [Ansible](https://docs.ansible.com/ansible/latest/index.html) >= 2.7
* [libvirt](https://libvirt.org) with client tools
* [QEMU](https://www.qemu.org)
* [Expect](https://en.wikipedia.org/wiki/Expect)
* [Telnet](https://en.wikipedia.org/wiki/Telnet)
* [Vagrant](https://www.vagrantup.com) >= 2.2.10, != 2.2.16
* [vagrant-libvirt](https://github.com/vagrant-libvirt/vagrant-libvirt)

## Steps

0\. Verify the prerequisite tools are installed.


$ which git python ansible libvirtd virsh qemu-system-x86_64 expect telnet vagrant
$ vagrant plugin list
vagrant-libvirt (0.5.3, 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-20210511-fcs.iso /mnt/iso

4\. Copy (and rename) the Cisco IOSv disk image file to the `/var/lib/libvirt/images` directory.


$ sudo cp /mnt/iso/virl-base-images/iosv-159-3-m3/vios-adventerprisek9-m.spa.159-3.m3.qcow2 /var/lib/libvirt/images/cisco-iosv.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-iosv.qcow2
$ sudo chmod u+x /var/lib/libvirt/images/cisco-iosv.qcow2

> Arch Linux


$ sudo chown nobody:kvm /var/lib/libvirt/images/cisco-iosv.qcow2
$ sudo chmod u+x /var/lib/libvirt/images/cisco-iosv.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-iosv-vagrant-libvirt
$ cd cisco-iosv-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-iosv.box $HOME/boxes/cisco-iosv-159.box

12\. Copy the box metadata file to the `boxes` directory.


$ cp ./files/cisco-iosv.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-iosv.json
"url": "file://HOME/boxes/cisco-iosv-159.box"

$ sed -i "s|HOME|${HOME}|" cisco-iosv.json

$ awk '/url/{gsub(/^ */,"");print}' cisco-iosv.json
"url": "file:///home/marc/boxes/cisco-iosv-159.box"

15\. Add the Vagrant box to the local inventory.


$ vagrant box add cisco-iosv.json

## Debug

View the telnet session output for the `expect` task:


$ tail -f ~/iosv-console.explog

## License

This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details