--- # Copyright 2020 BBC R&D. # # 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. - name: Clone collections ansible-collection-requirements hosts: localhost connection: local become: no gather_facts: false tasks: - name: Get Zuul cloned repos path in CI set_fact: zuul_src_path: "/home/zuul/src" - name: Generate a list of required collections excluding user overridden collections set_fact: galaxy_collections_list : "{{ (galaxy_collections_list | default([])) + [ item ] }}" with_items: "{{ required_collections.collections }}" - name: Check the Zuul src dir for cloned collections stat: path: "{{ zuul_src_path }}/{{ item.source.split('/')[2:] | join('/') | split('#') | first }}" get_attributes: no get_checksum: no get_mime: no register: zuul_collections with_items: "{{ galaxy_collections_list }}" - name: Override paths for zuul hosted collections in CI vars: zuul_item: name: "{{ item.item.name }}" source: "{{ zuul_src_path }}/{{ item.item.source.split('/')[2:] | join('/') | replace('#', '') }}" type: "dir" set_fact: galaxy_collections_list_ci: "{{ galaxy_collections_list_ci | default([]) + [(zuul_src_path and item.stat.exists) | ternary(zuul_item, item.item)] }}" with_items: "{{ zuul_collections.results }}" - name: Create temporary file for galaxy collection requirements tempfile: register: collection_requirements_tmpfile - name: Copy content into galaxy collection requirements temporary file vars: content_var: collections: "{{ galaxy_collections_list_ci }}" copy: content: "{{ content_var | to_nice_yaml }}" dest: "{{ collection_requirements_tmpfile.path }}" - name: Install collection requirements with ansible galaxy become: True command: > {{ ansible_venv | ternary(ansible_venv, '/usr') }}/bin/ansible-galaxy collection install --force -r "{{ collection_requirements_tmpfile.path }}" -p /etc/ansible register: collection_install until: collection_install is success retries: 5 delay: 2 - name: Show collection install output debug: msg="{{ collection_install.stdout.split('\n') }}" - name: Clean up temporary file file: path: "{{ collection_requirements_tmpfile.path }}" state: absent vars: collection_file: "{{ lookup('env', 'ANSIBLE_COLLECTION_REQUIREMENTS_PATH') }}" required_collections: >- {{ lookup('file', collection_file | ternary(collection_file, 'test-ansible-collection-requirements.yml')) | from_yaml }} ansible_venv: "{{ lookup('env', 'VIRTUAL_ENV') }}"