New get-devstack-os-environment role

The role reads the OS_* variables set by devstack through openrc
for the specified user and project and exports them as
the os_env_vars fact. It is meant to be used as a porting aid
for the jobs of the non-unified *clients only.

This is useful to run functional tests against the generated
environment. A slightly less generic version of this role
is currently used by python-cinderclient and python-novaclient
(get-os-environment).

In order to make this more useful, call it from
devstack-tox-functional and derived jobs. The role
execution is disabled by default and it can be enabled
by setting openrc_enable_export: true.

Change-Id: I15f5a187dbc54c82e8f4a08b4bb58d56e0d66961
This commit is contained in:
Luigi Toscano 2020-08-18 22:29:49 +02:00
parent 52e52d8937
commit 6fba3fdfa1
5 changed files with 65 additions and 2 deletions

View File

@ -7,4 +7,6 @@
bindep_dir: "{{ zuul_work_dir }}" bindep_dir: "{{ zuul_work_dir }}"
- test-setup - test-setup
- ensure-tox - ensure-tox
- tox - get-devstack-os-environment
- role: tox
tox_environment: "{{ os_env_vars|default({}) }}"

View File

@ -1,3 +1,5 @@
- hosts: all - hosts: all
roles: roles:
- tox - get-devstack-os-environment
- role: tox
tox_environment: "{{ os_env_vars|default({}) }}"

View File

@ -0,0 +1,40 @@
Reads the OS_* variables set by devstack through openrc
for the specified user and project and exports them as
the os_env_vars fact.
**WARNING**: this role is meant to be used as porting aid
for the non-unified python-<service>client jobs which
are already around, as those clients do not use clouds.yaml
as openstackclient does.
When those clients and their jobs are deprecated and removed,
or anyway when the new code is able to read from clouds.yaml
directly, this role should be removed as well.
**Role Variables**
.. zuul:rolevar:: devstack_base_dir
:default: /opt/stack
The devstack base directory.
.. zuul:rolevar:: openrc_file
:default: {{ devstack_base_dir }}/devstack/openrc
The location of the generated openrc file.
.. zuul:rolevar:: openrc_user
:default: admin
The user whose credentials should be retrieved.
.. zuul:rolevar:: openrc_project
:default: admin
The project (which openrc_user is part of) whose
access data should be retrieved.
.. zuul:rolevar:: openrc_enable_export
:default: false
Set it to true to export os_env_vars.

View File

@ -0,0 +1,5 @@
devstack_base_dir: "/opt/stack"
openrc_file: "{{ devstack_base_dir }}/devstack/openrc"
openrc_user: admin
openrc_project: admin
openrc_enable_export: false

View File

@ -0,0 +1,14 @@
- when: openrc_enable_export
block:
- name: Extract the OS_ environment variables
shell:
cmd: |
source {{ openrc_file }} {{ openrc_user }} {{ openrc_project }} &>/dev/null
env | awk -F= 'BEGIN {print "---" } /^OS_/ { print " "$1": \""$2"\""} '
args:
executable: "/bin/bash"
register: env_os
- name: Save the OS_ environment variables as a fact
set_fact:
os_env_vars: "{{ env_os.stdout|from_yaml }}"