{"id":25690154,"url":"https://github.com/mweisel/cisco-iosv-vagrant-libvirt","last_synced_at":"2026-06-17T19:02:15.301Z","repository":{"id":229240650,"uuid":"228468556","full_name":"mweisel/cisco-iosv-vagrant-libvirt","owner":"mweisel","description":"A procedure for creating a Cisco IOSv Vagrant box for the libvirt provider.","archived":false,"fork":false,"pushed_at":"2025-09-01T18:42:17.000Z","size":44,"stargazers_count":4,"open_issues_count":0,"forks_count":2,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-09-01T20:40:20.681Z","etag":null,"topics":["cisco-ios","libvirt-provider","netlab","vagrant-box"],"latest_commit_sha":null,"homepage":"","language":"Shell","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/mweisel.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2019-12-16T20:20:02.000Z","updated_at":"2025-09-01T18:45:20.000Z","dependencies_parsed_at":"2024-03-22T23:46:53.828Z","dependency_job_id":"13e0c320-90db-4dee-a2f5-4c300cdb34fe","html_url":"https://github.com/mweisel/cisco-iosv-vagrant-libvirt","commit_stats":null,"previous_names":["mweisel/cisco-iosv-vagrant-libvirt"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/mweisel/cisco-iosv-vagrant-libvirt","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mweisel%2Fcisco-iosv-vagrant-libvirt","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mweisel%2Fcisco-iosv-vagrant-libvirt/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mweisel%2Fcisco-iosv-vagrant-libvirt/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mweisel%2Fcisco-iosv-vagrant-libvirt/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/mweisel","download_url":"https://codeload.github.com/mweisel/cisco-iosv-vagrant-libvirt/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mweisel%2Fcisco-iosv-vagrant-libvirt/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34461618,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-17T02:00:05.408Z","response_time":127,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["cisco-ios","libvirt-provider","netlab","vagrant-box"],"created_at":"2025-02-24T22:16:33.575Z","updated_at":"2026-06-17T19:02:15.296Z","avatar_url":"https://github.com/mweisel.png","language":"Shell","funding_links":[],"categories":[],"sub_categories":[],"readme":"![Vagrant](https://img.shields.io/badge/vagrant%20-%231563FF.svg?\u0026style=for-the-badge\u0026logo=vagrant\u0026logoColor=white) ![netlab](https://img.shields.io/badge/netlab-d26400?style=for-the-badge)\n\n# Cisco IOSv Vagrant box\n\nA procedure for creating a Cisco IOSv Vagrant box for the [libvirt](https://libvirt.org) provider.\n\n## Prerequisites\n\n- [Cisco Modeling Labs](https://www.cisco.com/site/us/en/learn/training-certifications/training/modeling-labs) subscription\n- [Git](https://git-scm.com)\n- [uv](https://docs.astral.sh/uv)\n- [libvirt](https://libvirt.org) with client tools\n- [QEMU](https://www.qemu.org)\n- [Vagrant](https://developer.hashicorp.com/vagrant) \u003e= 2.4.0\n- [vagrant-libvirt](https://vagrant-libvirt.github.io/vagrant-libvirt)\n- [unzip](https://linux.die.net/man/1/unzip)\n- [Expect](https://en.wikipedia.org/wiki/Expect)\n- [Telnet](https://en.wikipedia.org/wiki/Telnet)\n\n## Steps\n\n0\\. Verify the prerequisite tools are installed.\n\n```\nwhich git uv unzip libvirtd virsh qemu-system-x86_64 expect telnet vagrant\n```\n\n```\nvagrant plugin list\n```\n\n1\\. Point your web browser to the [CML Software Download](https://software.cisco.com/download/home/286193282/type/286326381/release/2.9.0) page.\n\n2\\. Click the **Download** icon for the **Cisco Modeling Labs reference platform ISO file (June 2025)**.\n\n3\\. Save the `refplat-20250616-fcs-iso.zip` file to your **Downloads** folder.\n\n4\\. Open your favorite terminal emulator, and change to the `Downloads` directory.\n\n```\ncd ~/Downloads\n```\n\n5\\. Create the `cml29-refplat` directory.\n\n```\nmkdir -p cml29-refplat\n```\n\n6\\. Uncompress the `refplat-20250616-fcs-iso.zip` file into the `cml29-refplat`directory.\n\n```\nunzip refplat-20250616-fcs-iso.zip -d cml29-refplat\n```\n\n7\\. Change to the `cml29-refplat` directory.\n\n```\ncd cml29-refplat\n```\n\n8\\. Create a mount point directory.\n\n```\nsudo mkdir -p /mnt/iso\n```\n\n9\\. Mount the ISO file.\n\n```\nsudo mount -o loop refplat-20250616-fcs.iso /mnt/iso\n```\n\n10\\. Copy (and rename) the Cisco IOSv disk image file to the `/var/lib/libvirt/images` directory.\n\n```\nsudo cp /mnt/iso/virl-base-images/iosv-159-3-m10/vios-adventerprisek9-m.spa.159-3.m10.qcow2 /var/lib/libvirt/images/cisco-iosv.qcow2\n```\n\n11\\. Unmount the ISO file.\n\n```\nsudo umount /mnt/iso\n```\n\n12\\. Modify the file ownership.\n\n\u003e The owner and/or group will differ between Linux distributions.\n\n```\nsudo chown libvirt-qemu:libvirt-qemu /var/lib/libvirt/images/cisco-iosv.qcow2\n```\n\n13\\. Set the file as executable.\n\n```\nsudo chmod u+x /var/lib/libvirt/images/cisco-iosv.qcow2\n```\n\n14\\. Create the `boxes` directory.\n\n```\nmkdir -p ~/boxes\n```\n\n15\\. Start the `default` network (if not already started).\n\n```\nvirsh -c qemu:///system net-start default\n```\n\n16\\. Clone this GitHub repo and _cd_ into the directory.\n\n```\ngit clone https://github.com/mweisel/cisco-iosv-vagrant-libvirt \u0026\u0026 cd cisco-iosv-vagrant-libvirt\n```\n\n17\\. Create a Python virtual environment for Ansible.\n\n```\nuv sync\n```\n\n18\\. Run the Ansible playbook.\n\n```\nuv run ansible-playbook main.yml\n```\n\n19\\. Copy (and rename) the Vagrant box artifact to the `boxes` directory.\n\n```\ncp cisco-iosv.box ~/boxes/cisco-iosv-159.box\n```\n\n20\\. Copy the box metadata file to the `boxes` directory.\n\n```\ncp ./files/cisco-iosv.json ~/boxes/\n```\n\n21\\. Change the current working directory to `boxes`.\n\n```\ncd ~/boxes\n```\n\n22\\. Substitute the `HOME` placeholder string in the box metadata file.\n\n```\nsed -i \"s|HOME|${HOME}|\" cisco-iosv.json\n```\n\n```\nawk '/url/{gsub(/^ */,\"\");print}' cisco-iosv.json\n```\n\noutput:\n\n\u003cpre\u003e\n\"url\": \"file://\u003cb\u003e/home/marc\u003c/b\u003e/boxes/cisco-iosv-159.box\"\n\u003c/pre\u003e\n\n23\\. Add the Vagrant box to the local inventory.\n\n```\nvagrant box add cisco-iosv.json\n```\n\n## Debug\n\nView the telnet session output for the `expect` task:\n\n```\ntail -f ~/iosv-console.explog\n```\n\n## License\n\nThis project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmweisel%2Fcisco-iosv-vagrant-libvirt","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmweisel%2Fcisco-iosv-vagrant-libvirt","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmweisel%2Fcisco-iosv-vagrant-libvirt/lists"}