diff --git a/defaults/main.yml b/defaults/main.yml index ada9f66..41d182e 100644 --- a/defaults/main.yml +++ b/defaults/main.yml @@ -13,8 +13,14 @@ # See the License for the specific language governing permissions and # limitations under the License. +# Use OpenStack's upper-constraints repo_build_use_upper_constraints: true +# A list of overrides to apply to OpenStack's upper constraints +# Use these with caution as you're implementing a change to the +# package set which OpenStack has tested its releases with! +repo_build_upper_constraints_overrides: [] + repo_build_service_user_name: "nginx" repo_build_global_links_path: "/var/www/repo/links" diff --git a/releasenotes/notes/upper-constraints-override-6853ffec6c07d7f5.yaml b/releasenotes/notes/upper-constraints-override-6853ffec6c07d7f5.yaml new file mode 100644 index 0000000..3cfb038 --- /dev/null +++ b/releasenotes/notes/upper-constraints-override-6853ffec6c07d7f5.yaml @@ -0,0 +1,6 @@ +--- +features: + - The ``repo_build`` role now provides the ability to override the + upper-constraints applied which are sourced from OpenStack. The + variable ``repo_build_upper_constraints_overrides`` can be + populated with a list of upper constraints. diff --git a/tasks/repo_set_facts.yml b/tasks/repo_set_facts.yml index 05aad6c..d83520b 100644 --- a/tasks/repo_set_facts.yml +++ b/tasks/repo_set_facts.yml @@ -39,7 +39,7 @@ - repo-get-upper-constraints - repo-build-constraints-file -- name: Set upper constraints +- name: Decode the upper constraints content set_fact: _upper_constraints: "{{ slurp_upper_constraints.content | b64decode | splitlines }}" when: slurp_upper_constraints | success @@ -47,10 +47,19 @@ - repo-set-constraints - repo-build-constraints-file -- name: Set upper constraints +- name: Normalise the upper constraints set_fact: upper_constraints: "{{ local_requirement_normalized | pip_constraint_update(_upper_constraints) }}" when: slurp_upper_constraints | success tags: - repo-set-constraints - repo-build-constraints-file + +- name: Apply the upper constraint overrides + set_fact: + upper_constraints: "{{ upper_constraints | pip_constraint_update(repo_build_upper_constraints_overrides) }}" + when: repo_build_upper_constraints_overrides | length > 0 + tags: + - repo-set-constraints + - repo-build-constraints-file + diff --git a/tests/test-repo-build.yml b/tests/test-repo-build.yml index a0c0a19..55f9595 100644 --- a/tests/test-repo-build.yml +++ b/tests/test-repo-build.yml @@ -69,13 +69,28 @@ {%- for package in slurp_upper_constraints.content | b64decode | splitlines %} {%- set name = package | regex_replace('===.*$','') %} {%- set version = package | regex_replace('^.*===','') %} - {%- set _ = constraints.update({name:version}) %} + {%- set _ = constraints.update({name: version}) %} {%- endfor %} {{- constraints -}} + - name: Set fact for upper constraints override + set_fact: + upper_constraints_override_list: > + {%- set override_packages = [] %} + {%- for override in repo_build_upper_constraints_overrides %} + {%- set name = override | regex_replace('(>=|<=|>|<|==|~=|!=).*$','') %} + {%- set _ = override_packages.append(name) %} + {%- endfor %} + {{- override_packages -}} - name: Ensure that requirements constraints is applying upper constraints assert: - that: requirements_constraints_content.find( "{{ item.key }}<={{item.value}}" ) != -1 + that: requirements_constraints_content.find( "{{ item.key }}<={{ item.value }}" ) != -1 with_dict: upper_constraints_dict - when: requirements_constraints_content.find(item.key) != -1 + when: + - item.key not in upper_constraints_override_list + - requirements_constraints_content.find(item.key) != -1 + - name: Ensure that upper constraints overrides are applied + assert: + that: requirements_constraints_content.find( "{{ item }}" ) != -1 + with_items: "{{ repo_build_upper_constraints_overrides }}" vars_files: - test-vars.yml diff --git a/tests/test-vars.yml b/tests/test-vars.yml index 94d1ce7..0f177e7 100644 --- a/tests/test-vars.yml +++ b/tests/test-vars.yml @@ -16,6 +16,12 @@ openstack_release: testing repo_build_release_tag: "{{ openstack_release }}" galera_client_drop_config_file: false + +# Test data input for upper constraints validation +repo_build_upper_constraints_overrides: + - elasticsearch<2.1.0 + +# Test data output from the py_pkgs lookup local_packages: results: -