Installing python packages directly to the system site-packages can cause various problems, in particular when pip overwrites a system package. Python virtualenvs are one solution to this issue, as they allow python packages to be installed in an isolated environment. This change adds support to the baremetal role for installing python dependencies in a virtualenv. Typically we will need to enable use of system site-packages from within this virtualenv, to support the use of modules such as yum, apt, and selinux, which are not available on PyPI. The path to the virtualenv is configured via the 'virtualenv' variable, and access to site-packages is controlled via 'virtualenv_site_packages'. When executing other kolla-ansible commands, the variable 'ansible_python_interpreter' should be set to the python interpreter installed in 'virtualenv'. Note that this variable cannot be templated. Change-Id: I0741923065246f9c5b168059fcd66504f2753c41 Related-Bug: #1731026
2.5 KiB
Virtual Environments
Python virtual environments provide a mechanism for isolating python packages from the system site packages, and other virtual environments. Kolla-ansible largely avoids this problem by deploying services in Docker containers, however some python dependencies must be installed both on the Ansible control host and the target hosts.
Ansible Control Host
The kolla-ansible python package and its dependencies may be installed in a python virtual environment on the Ansible control host. For example:
virtualenv /path/to/venv
source /path/to/venv/bin/activate
pip install -U pip
pip install kolla-ansible
deactivate
It may be advantageous to also install Ansible in the virtual environment.
source /path/to/venv/bin/activate
(venv) pip install ansible
(venv) deactivate
To use the virtual environment, it should first be activated:
source /path/to/venv/bin/activate
(venv) kolla-ansible --help
The virtual environment can be deactivated when necessary:
(venv) deactivate
Note that the use of a virtual environment on the Ansible control host does not imply that a virtual environment will be used for execution of Ansible modules on the target hosts.
Target Hosts
Ansible supports remote execution of modules in a python virtual
environment via the ansible_python_interpreter
variable.
This may be configured to be the path to a python interpreter installed
in a virtual environment. For example:
ansible_python_interpreter: /path/to/venv/bin/python
Note that ansible_python_interpreter
cannot be
templated.
Kolla-ansible provides support for creating a python virtual
environment on the target hosts as part of the
bootstrap-servers
command. The path to the virtualenv is
configured via the virtualenv
variable, and access to
site-packages is controlled via virtualenv_site_packages
.
Typically we will need to enable use of system site-packages from within
this virtualenv, to support the use of modules such as yum, apt, and
selinux, which are not available on PyPI.
When executing kolla-ansible commands other than
bootstrap-servers
, the variable
ansible_python_interpreter
should be set to the python
interpreter installed in virtualenv
.