diff --git a/tools/kolla-ansible b/tools/kolla-ansible index 215bcf0ee4..014e190037 100755 --- a/tools/kolla-ansible +++ b/tools/kolla-ansible @@ -22,6 +22,7 @@ function check_environment_coherence { local ansible_python_cmdline # NOTE(yoctozepto): may have multiple parts ansible_python_cmdline=${ansible_shebang_line#\#\!} + ansible_python_version=$($ansible_python_cmdline -c 'import sys; print(str(sys.version_info[0])+"."+str(sys.version_info[1]))') if ! $ansible_python_cmdline --version &>/dev/null; then echo "ERROR: Ansible Python is not functional." >&2 @@ -66,21 +67,38 @@ function check_environment_coherence { function find_base_dir { local dir_name + local python_dir 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") + python_dir="python${ansible_python_version}" if [ -z "$SNAP" ]; then if [[ ${dir_name} == "/usr/bin" ]]; then - BASEDIR=/usr/share/kolla-ansible - elif [[ ${dir_name} == "/usr/local/bin" ]]; then - BASEDIR=/usr/local/share/kolla-ansible - elif [[ ${dir_name} == ~/.local/bin ]]; then - BASEDIR=~/.local/share/kolla-ansible - 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 /usr/lib/${python_dir}/*-packages/kolla-ansible.egg-link; then # Editable install. - BASEDIR="$(head -n1 ${VIRTUAL_ENV}/lib/python*/site-packages/kolla-ansible.egg-link)" + BASEDIR="$(head -n1 /usr/lib/${python_dir}/*-packages/kolla-ansible.egg-link)" + else + BASEDIR=/usr/share/kolla-ansible + fi + elif [[ ${dir_name} == "/usr/local/bin" ]]; then + if test -f /usr/local/lib/${python_dir}/*-packages/kolla-ansible.egg-link; then + # Editable install. + BASEDIR="$(head -n1 /usr/local/lib/${python_dir}/*-packages/kolla-ansible.egg-link)" + else + BASEDIR=/usr/local/share/kolla-ansible + fi + elif [[ ${dir_name} == ~/.local/bin ]]; then + if test -f ~/.local/lib/${python_dir}/*-packages/kolla-ansible.egg-link; then + # Editable install. + BASEDIR="$(head -n1 ~/.local/lib/${python_dir}/*-packages/kolla-ansible.egg-link)" + else + BASEDIR=~/.local/share/kolla-ansible + fi + elif [[ -n ${VIRTUAL_ENV} ]] && [[ ${dir_name} == "$(readlink -e "${VIRTUAL_ENV}/bin")" ]]; then + if test -f ${VIRTUAL_ENV}/lib/${python_dir}/site-packages/kolla-ansible.egg-link; then + # Editable install. + BASEDIR="$(head -n1 ${VIRTUAL_ENV}/lib/${python_dir}/*-packages/kolla-ansible.egg-link)" else BASEDIR="${VIRTUAL_ENV}/share/kolla-ansible" fi