For some things, a docker container will not work. For example, I am working on a Python project to automate the deployment and configuration of VMs and bare-metal boxes. It involves installing packages and configuring the OS and to properly test it requires a full fledged VM and not just a container.
Use packer to define the box you want to build
Install packer. The description straight from apt show packer
is “HashiCorp Packer – A tool for creating identical machine images for multiple platforms from a single source configuration” Then create your pkr.hcl
file (I am using the newer HCL DSL). The following is for a box that extends Debian 11.
variable "version" {
type = string
default = ""
}
locals { timestamp = regex_replace(timestamp(), "[- TZ:]", "") }
source "vagrant" "xfce4_debian_11" {
add_force = true
communicator = "ssh"
provider = "virtualbox"
source_path = "debian/bullseye64"
}
build {
sources = ["source.vagrant.xfce4_debian_11"]
provisioner "shell" {
execute_command = "echo 'vagrant' | {{.Vars}} sudo -S -E bash '{{.Path}}'"
script = "provision.sh"
}
}
Build the box
packer build xfce4_debian_11.hcl
This will create an output-xfce4_debian_11 directory and build the box writing it into that directory. The contents of which, when finished will be
output-xfce4_debian_11/
|-- package.box
`-- Vagrantfile
Create a Vagrant file that uses the pre-built box
For your integration testing you will be spinning up an “instance” of the box you just built.
- Create a directory for your instance and cd into it:
mkdir test-instance && cd test-instance
- Initialize the vagrant instance and then add the box that you built;
vagrant init test-instance && vagrant box add test-instance <path-to-dir>/output-xfce4_debian_11/package.box
- Update the
Vagrant
file with any additional configs that you require and then runvagrant up
to start it.