Iterating on ancient versions of PythonΒΆ
Some of the failures that we encounter only arise in ancient versions of python. It can be non-trivial to install these versions on a production machine, and possibly not desirable. In these situations LXD comes to our aid.
Save the following cloud-init file in python35_cloud_init.yaml:
#cloud-config
runcmd:
- add-apt-repository --yes ppa:checkbox-dev/edge
- apt update -q -y
- apt install -q -y "python3.5" "python3.5-venv" "python3.5-dev" gcc "flake8" "shellcheck"
- python3.5 -m ensurepip
- python3.5 -m venv /root/venv
- PIP_TRUSTED_HOST="pypi.python.org pypi.org files.pythonhosted.org" /root/venv/bin/python3.5 -m pip install --upgrade "pip<21"
- git clone https://github.com/canonical/checkbox /root/checkbox
- PIP_TRUSTED_HOST="pypi.python.org pypi.org files.pythonhosted.org" /root/venv/bin/python3.5 -m pip install -e /root/checkbox/checkbox-ng
- PIP_TRUSTED_HOST="pypi.python.org pypi.org files.pythonhosted.org" /root/venv/bin/python3.5 -m pip install -e /root/checkbox/checkbox-support
- /root/venv/bin/python3.5 /root/checkbox/providers/resource/manage.py develop
- /root/venv/bin/python3.5 /root/checkbox/providers/base/manage.py develop
Use lxc to launch a focal container with the cloud-init file
provided, log into it and wait for cloud-init to finish preparing your
environment
$ lxc launch ubuntu:focal python35 --config=user.user-data="$(cat python35_cloud_init.yaml)"
$ lxc shell python35
root@python35:~# cloud-init status --wait
...........................................status: done
The cloud-init file has prepared you a fresh clone of the Checkbox repo in
/root/checkbox, it has created a venv you can use in /root/venv with
Python3.5 and it has developed the resource and base provider. You
should now be able to iterate on your tests!
Note
Python 3.5 and Python 3.6 are no longer in the deadsnakes PPA. We have added them to the checkbox-dev PPA to still be able to run the tests.