Fix kolla-ansible to work with pyenv-virtualenv

One of the pyenv-virtualenv-set-up aliases depends on a symlink.
It seems pyenv runs the bash script from such a path and it fails
because of a failing comparison (VIRTUAL_ENV not detected).

The VIRTUAL_ENV is ensured to be fully resolved as well for safety.

This requires readlink from GNU coreutils but all supported platforms
have it by default.

Extra comments included, as well as simplification of directory
detection - readlink handles this (not that `bin` itself was
ever a symlink...).

Closes-Bug: #1903887
Co-Authored-By: Radosław Piliszek <radoslaw.piliszek@gmail.com>
Change-Id: I2fe6eb13ce7be68d346b1b3b7036859f34c896c4
This commit is contained in:
zengchen228 2020-11-12 01:11:39 +08:00 committed by Radosław Piliszek
parent 6a3275b47d
commit aaab1d1b68

View File

@ -66,13 +66,16 @@ function check_environment_coherence {
function find_base_dir { function find_base_dir {
local dir_name local dir_name
dir_name=$(cd "$(dirname "$0")" &>/dev/null && pwd) dir_name=$(dirname "$0")
# NOTE(yoctozepto): Fix the case where dir_name is a symlink and VIRTUAL_ENV might not be. This
# happens with pyenv-virtualenv, see https://bugs.launchpad.net/kolla-ansible/+bug/1903887
dir_name=$(readlink -e "$dir_name")
if [ -z "$SNAP" ]; then if [ -z "$SNAP" ]; then
if [[ ${dir_name} == "/usr/bin" ]]; then if [[ ${dir_name} == "/usr/bin" ]]; then
BASEDIR=/usr/share/kolla-ansible BASEDIR=/usr/share/kolla-ansible
elif [[ ${dir_name} == "/usr/local/bin" ]]; then elif [[ ${dir_name} == "/usr/local/bin" ]]; then
BASEDIR=/usr/local/share/kolla-ansible BASEDIR=/usr/local/share/kolla-ansible
elif [[ -n ${VIRTUAL_ENV} ]] && [[ ${dir_name} == "${VIRTUAL_ENV}/bin" ]]; then elif [[ -n ${VIRTUAL_ENV} ]] && [[ ${dir_name} == "$(readlink -e "${VIRTUAL_ENV}/bin")" ]]; then
if test -f ${VIRTUAL_ENV}/lib/python*/site-packages/kolla-ansible.egg-link; then if test -f ${VIRTUAL_ENV}/lib/python*/site-packages/kolla-ansible.egg-link; then
# Editable install. # Editable install.
BASEDIR="$(head -n1 ${VIRTUAL_ENV}/lib/python*/site-packages/kolla-ansible.egg-link)" BASEDIR="$(head -n1 ${VIRTUAL_ENV}/lib/python*/site-packages/kolla-ansible.egg-link)"
@ -80,6 +83,7 @@ function find_base_dir {
BASEDIR="${VIRTUAL_ENV}/share/kolla-ansible" BASEDIR="${VIRTUAL_ENV}/share/kolla-ansible"
fi fi
else else
# Running from sources (repo).
BASEDIR="$(dirname ${dir_name})" BASEDIR="$(dirname ${dir_name})"
fi fi
else else