openstack-ansible-os_nova/tasks/drivers/kvm/nova_compute_kvm_install_source.yml
Jean-Philippe Evrard 0772146a59 Ensure python3 compatibility
Currently everything is wired in the venv to work on python2.
If the virtualenv was built during repo build with python3, the
linking of the library will fail, as the lib folder for python2
doesn't exist.

This should solve the issue by ensuring the existing lib folder
of the env is used.

A problem arises then: Different distros organise packages
differently, in different locations. This makes the approach
compatible with multi-distros and multiple python versions.

Change-Id: I02b296089d5351d68bb14e87e458a4f5d18a4776
2018-07-13 08:37:06 +00:00

57 lines
2.0 KiB
YAML

---
# Copyright 2018, SUSE Linux GmbH
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
# Note (odyssey4me):
# These python libraries have C bindings which tend to be very
# particular about the version of their companion packages.
# To ensure things run smoothly for stable releases, we opt to
# use the distro packages for these and symlink the appropriate
# library files and binding into the venv.
- name: Find the venv's python version
find:
paths: "{{ nova_bin | dirname }}/lib/"
patterns: "python*"
file_type: directory
recurse: no
register: python_venv_details
- name: Set python venvs details
set_fact:
venv_python_version: "{{ (python_venv_details.files[0].path | basename) }}"
venv_python_major_version: "{{ (python_venv_details.files[0].path | basename)[:-2] }}"
venv_python_lib_folder: "{{ python_venv_details.files[0].path }}"
- name: Search for lib files to link
shell: >-
{{ (ansible_pkg_mgr == 'apt') | ternary('dpkg -L ' ~ (nova_compute_kvm_packages_to_symlink | join(' ')), 'rpm -ql ' ~ (nova_compute_kvm_packages_to_symlink | join(' ')) ) }}
| egrep '^.*{{ venv_python_major_version }}.*/(site|dist)-packages/.*'
args:
warn: no
changed_when: false
register: _python_files
tags:
- nova-pip-packages
- name: Link the python host package files into venv
file:
src: "{{ item }}"
dest: "{{ venv_python_lib_folder }}/site-packages/{{ item | basename }}"
state: link
force: yes
with_items: "{{ _python_files.stdout_lines }}"
tags:
- nova-pip-packages