Allow installing extra packages inside the kolla-ansible virtualenv

It may be necessary to install extra Python packages inside the
kolla-ansible virtualenv, such as when required by Ansible plugins. For
example, using the hashi_vault lookup plugin requires the hvac Python
package to be installed.

This patch adds a kolla_ansible_venv_extra_requirements list variable
which contains Python package requirements to add to the kolla-ansible
requirements file. Its default value is an empty list.

Change-Id: Ie0541dc05e2ab94af230d0113a23c544755424c7
This commit is contained in:
Pierre Riteau 2018-09-27 12:20:31 +01:00
parent 228fe88cf7
commit 372058c19f
7 changed files with 96 additions and 0 deletions

View File

@ -40,6 +40,9 @@ kolla_ansible_source_version: "stable/queens"
# Path to virtualenv in which to install kolla-ansible. # Path to virtualenv in which to install kolla-ansible.
kolla_ansible_venv: "{{ lookup('env', 'KOLLA_VENV_PATH') | default(lookup('env', 'PWD') ~ '/venvs/kolla-ansible', true) }}" kolla_ansible_venv: "{{ lookup('env', 'KOLLA_VENV_PATH') | default(lookup('env', 'PWD') ~ '/venvs/kolla-ansible', true) }}"
# Extra requirements to install inside the kolla-ansible virtualenv.
kolla_ansible_venv_extra_requirements: []
# Path to Kolla-ansible configuration directory. # Path to Kolla-ansible configuration directory.
kolla_config_path: "{{ lookup('env', 'KOLLA_CONFIG_PATH') | default('/etc/kolla', true) }}" kolla_config_path: "{{ lookup('env', 'KOLLA_CONFIG_PATH') | default('/etc/kolla', true) }}"

View File

@ -8,3 +8,8 @@ kolla-ansible=={{ kolla_openstack_release }}
# Limit the version of ansible used by kolla-ansible to avoid new releases from # Limit the version of ansible used by kolla-ansible to avoid new releases from
# breaking tested code. Changes to this limit should be tested. # breaking tested code. Changes to this limit should be tested.
ansible<2.6 ansible<2.6
{% if kolla_ansible_venv_extra_requirements is defined %}
{% for item in kolla_ansible_venv_extra_requirements %}
{{ item }}
{% endfor %}
{% endif %}

View File

@ -10,6 +10,7 @@
- include: test-defaults.yml - include: test-defaults.yml
- include: test-extras.yml - include: test-extras.yml
- include: test-requirements.yml
- hosts: localhost - hosts: localhost
connection: local connection: local

View File

@ -0,0 +1,59 @@
---
- hosts: localhost
connection: local
tasks:
- name: Create a temporary directory
tempfile:
state: directory
register: tempfile_result
- block:
- name: Test the kolla-ansible role with extra Python requirements
include_role:
name: ../../kolla-ansible
vars:
kolla_ansible_source_path: "{{ temp_path }}/src"
kolla_ansible_ctl_install_type: "source"
kolla_ansible_source_url: "http://github.com/openstack/kolla-ansible"
kolla_ansible_source_version: "master"
kolla_ansible_venv: "{{ temp_path }}/venv"
kolla_ansible_venv_extra_requirements:
- "hvac"
kolla_config_path: "{{ temp_path }}/etc/kolla"
kolla_node_custom_config_path: "{{ temp_path }}/etc/kolla/config"
kolla_ansible_passwords_path: "{{ temp_path }}/passwords.yml"
# Required config.
kolla_base_distro: "fake-distro"
kolla_install_type: "fake-install-type"
kolla_docker_namespace: "fake-namespace"
kolla_openstack_release: "fake-release"
kolla_internal_vip_address: "10.0.0.1"
kolla_internal_fqdn: "fake.internal.fqdn"
kolla_external_vip_address: "10.0.0.2"
kolla_external_fqdn: "fake.external.fqdn"
kolla_enable_tls_external: False
kolla_enable_grafana: False
kolla_external_fqdn_cert: "fake-cert"
kolla_openstack_logging_debug: False
- name: List Python packages installed in virtualenv
command: "{{ temp_path }}/venv/bin/pip list"
register: kolla_ansible_venv_pip_list
changed_when: False
- name: Verify extra requirements are installed in virtualenv
assert:
that:
- "'hvac' in kolla_ansible_venv_pip_list.stdout"
always:
- name: Ensure the temporary directory is removed
file:
path: "{{ temp_path }}"
state: absent
rescue:
- name: Flag that a failure occurred
set_fact:
test_failures: "{{ test_failures | default(0) | int + 1 }}"
vars:
temp_path: "{{ tempfile_result.path }}"

View File

@ -27,6 +27,22 @@ kolla-ansible is installed and executed.
the kolla-ansible virtualenv will be created. the kolla-ansible virtualenv will be created.
====================== ================================================== ============================ ====================== ================================================== ============================
Extra Python packages can be installed inside the kolla-ansible virtualenv,
such as when required by Ansible plugins, using the
``kolla_ansible_venv_extra_requirements`` list variable in
``$KAYOBE_CONFIG_PATH/kolla.yml``. For example, to use the `hashi_vault Ansible
lookup plugin
<https://docs.ansible.com/ansible/devel/plugins/lookup/hashi_vault.html>`_, its
``hvac`` dependency can be installed using:
.. code-block:: yaml
:caption: ``$KAYOBE_CONFIG_PATH/kolla.yml``
---
# Extra requirements to install inside the kolla-ansible virtualenv.
kolla_ansible_venv_extra_requirements:
- "hvac"
Remote Execution Environment Remote Execution Environment
============================ ============================

View File

@ -42,6 +42,9 @@
# Path to virtualenv in which to install kolla-ansible. # Path to virtualenv in which to install kolla-ansible.
#kolla_ansible_venv: #kolla_ansible_venv:
# Extra requirements to install inside the kolla-ansible virtualenv.
#kolla_ansible_venv_extra_requirements:
# Path to Kolla-ansible configuration directory. # Path to Kolla-ansible configuration directory.
#kolla_config_path: #kolla_config_path:

View File

@ -0,0 +1,9 @@
---
features:
- |
Adds support for installing extra Python packages inside the kolla-ansible
virtualenv, such as when required by Ansible plugins. A list of extra
requirements can be configured via the
``kolla_ansible_venv_extra_requirements`` variable in
``$KAYOBE_CONFIG_PATH/kolla.yml``. No extra packages are installed by
default.