Skip to main content

Molecule QEMU

Project description

molecule-qemu

The development of the Molecule QEMU driver was motivated by the author's choice of the Apple M1 as their primary development machine. He wanted to test Ansible roles on the Apple M1 but preferred not to rely on Docker for testing due to challenges with Docker's systemd support. Author never liked to install supplementary software such as Vagrant and VirtualBox on development machine. Author is aware of libvirt and virt-manager but their complexity and the lack of support was frustrating.

Supported platforms:

  • MacOS 13.x (arm64)
  • Ubuntu 22.04 LTS (amd64) (tested on GitHub Actions)

Support guest OS:

  • Debian 11 (arm64, amd64)
  • Ubuntu 20.04 LTS (arm64, amd64)
  • Ubuntu 22.04 LTS (arm64, amd64)

Support of other platforms and guest OS is possible, but not tested. Please, open an issue if you want to add support for other platforms.

Supported network modes:

  • user - QEMU's user networking mode
  • vmnet-shared - QEMU's vmnet-shared networking mode (MacOS only)

Quick start

Install molecule-qemu python package:

pip install molecule-qemu

Create a new Molecule scenario using molecule init command:

molecule init scenario default --driver-name molecule-qemu --verifier-name testinfra

Edit molecule.yml and add platforms:

---
dependency:
  name: galaxy
driver:
  name: molecule-qemu
platforms:
  - name: debian-bullseye-arm64
    image: https://cloud.debian.org/images/cloud/bullseye/latest/debian-11-genericcloud-arm64.qcow2
    image_checksum: sha512:https://cloud.debian.org/images/cloud/bullseye/latest/SHA512SUMS
    image_arch: aarch64
    vm_network: vmnet-shared
provisioner:
  name: ansible
  inventory:
    host_vars:
      debian-bullseye-arm64: {}
verifier:
  name: testinfra

Dependencies

Install QEMU and CDRTools on macOS:

brew install qemu cdrtools

Install QEMU on Ubuntu:

apt-get install mkisofs qemu-system-x86 qemu-utils

Network modes

user network mode

This is the default network mode. It uses QEMU's user networking mode.

Mode is selected by setting vm_network: user in molecule.yml. This is the default mode. SSH port is forwarded to the host and must be unique for each platform (use ssh_port option to set it). Example:

- name: debian-bullseye-arm64
  image: https://cloud.debian.org/images/cloud/bullseye/latest/debian-11-genericcloud-arm64.qcow2
  image_checksum: sha512:https://cloud.debian.org/images/cloud/bullseye/latest/SHA512SUMS
  image_arch: aarch64
  vm_network: user # this is the default
  ssh_port: 2022

vmnet-shared network mode

This mode uses QEMU's vmnet-shared networking mode. It requires vmnet.framework to be installed on the host. This mode is only supported on MacOS. It requires passwordless sudo access for current user.

Mode is selected by setting vm_network: vmnet-shared in molecule.yml. Example:

- name: debian-bullseye-arm64
  image: https://cloud.debian.org/images/cloud/bullseye/latest/debian-11-genericcloud-arm64.qcow2
  image_checksum: sha512:https://cloud.debian.org/images/cloud/bullseye/latest/SHA512SUMS
  image_arch: aarch64
  vm_network: vmnet-shared

Examples

See tests for more examples.

Sample platforms configuration

platforms:
  - name: debian-bullseye-arm64
    image: https://cloud.debian.org/images/cloud/bullseye/latest/debian-11-genericcloud-arm64.qcow2
    image_checksum: sha512:https://cloud.debian.org/images/cloud/bullseye/latest/SHA512SUMS
    image_arch: aarch64
    ssh_port: 10000
  - name: debian-bullseye-amd64
    image: https://cloud.debian.org/images/cloud/bullseye/latest/debian-11-genericcloud-amd64.qcow2
    image_checksum: sha512:https://cloud.debian.org/images/cloud/bullseye/latest/SHA512SUMS
    image_arch: x86_64
    ssh_port: 10001
  - name: ubuntu-focal-arm64
    image: https://cloud-images.ubuntu.com/focal/current/focal-server-cloudimg-arm64.img
    image_checksum: sha256:https://cloud-images.ubuntu.com/focal/current/SHA256SUMS
    image_arch: aarch64
    ssh_port: 10002
  - name: ubuntu-focal-amd64
    image: https://cloud-images.ubuntu.com/focal/current/focal-server-cloudimg-amd64.img
    image_checksum: sha256:https://cloud-images.ubuntu.com/focal/current/SHA256SUMS
    image_arch: x86_64
    ssh_port: 10003
  - name: ubuntu-jammy-arm64
    image: https://cloud-images.ubuntu.com/jammy/current/jammy-server-cloudimg-arm64.img
    image_checksum: sha256:https://cloud-images.ubuntu.com/jammy/current/SHA256SUMS
    image_arch: aarch64
    ssh_port: 10004
  - name: ubuntu-jammy-amd64
    image: https://cloud-images.ubuntu.com/jammy/current/jammy-server-cloudimg-amd64.img
    image_checksum: sha256:https://cloud-images.ubuntu.com/jammy/current/SHA256SUMS
    image_arch: x86_64
    ssh_port: 10005

Cloud Images URLs

For convenience, here are the URLs for the cloud images used in the examples above.

Debian

Ubuntu

Reference

QEMU vmnet-shared networking

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

molecule-qemu-0.4.12.tar.gz (1.2 MB view hashes)

Uploaded Source

Built Distribution

molecule_qemu-0.4.12-py3-none-any.whl (1.2 MB view hashes)

Uploaded Python 3

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page