Fix setting of upper_constraints fact

The pip_constraint_update filter overrides pip versions from the second
provided list to the first. Update the 'Set upper constraints' task so
that upper-constraints correctly take priority over the local
requirements packages versions.

A test has been included to validate that the role built package
constraints file is correctly applying the upper-constraints from the
openstack requirements repo.

Closes-Bug: 1605846
Change-Id: I53864a34f3ba56a84ed658fa3952aba3c509e0b1
This commit is contained in:
Jimmy McCrory 2016-07-22 23:44:10 -07:00
parent 09c32c06a0
commit 373978f3c6
3 changed files with 32 additions and 1 deletions

View File

@ -0,0 +1,5 @@
---
fixes:
- The ``repo_build`` role now correctly applies OpenStack requirements
upper-constraints when building Python wheels. This resolves
https://bugs.launchpad.net/openstack-ansible/+bug/1605846

View File

@ -49,7 +49,7 @@
- name: Set upper constraints
set_fact:
upper_constraints: "{{ _upper_constraints | pip_constraint_update(local_requirement_normalized) }}"
upper_constraints: "{{ local_requirement_normalized | pip_constraint_update(_upper_constraints) }}"
when: slurp_upper_constraints | success
tags:
- repo-set-constraints

View File

@ -52,5 +52,31 @@
- name: Ensure that the nova venv is NOT present
assert:
that: "'nova-{{ repo_build_release_tag }}.tgz' not in venv_folder_content.stdout"
- name: Slurp upper constraints
slurp:
src: "{{ repo_build_git_dir }}/requirements/upper-constraints.txt"
register: slurp_upper_constraints
- name: Slurp requirements constraints
slurp:
src: "{{ repo_build_release_path }}/{{ repo_build_release_tag }}/requirements_constraints.txt"
register: slurp_requirements_constraints
- name: Set fact for requirements constraints content
set_fact:
requirements_constraints_content: "{{ slurp_requirements_constraints.content | b64decode }}"
- name: Set fact for upper constraints dictionary
set_fact:
upper_constraints_dict: >
{%- set constraints = {} %}
{%- for package in slurp_upper_constraints.content | b64decode | splitlines %}
{%- set name = package | regex_replace('===.*$','') %}
{%- set version = package | regex_replace('^.*===','') %}
{%- set _ = constraints.update({name:version}) %}
{%- endfor %}
{{- constraints -}}
- name: Ensure that requirements constraints is applying upper constraints
assert:
that: requirements_constraints_content.find( "{{ item.key }}<={{item.value}}" ) != -1
with_dict: upper_constraints_dict
when: requirements_constraints_content.find(item.key) != -1
vars_files:
- test-vars.yml