--- # 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 user: root gather_facts: false tasks: - name: Ensure the default collections directory exists ansible.builtin.file: path: "{{ collection_path_default }}/ansible_collections" state: directory recurse: true - name: Installing required Ansible collections block: - name: Create temporary file for galaxy collection requirements ansible.builtin.tempfile: register: collection_requirements_tmpfile - name: Copy content into galaxy collection requirements temporary file vars: _user_collection_names: "{{ user_collections.collections | default([]) | map(attribute='name') }}" _default_collections: "{{ required_collections.collections | rejectattr('name', 'in', _user_collection_names) }}" _user_collections: "{{ user_collections.collections | default([]) | selectattr('source', 'defined') }}" content_var: collections: "{{ _default_collections + _user_collections }}" ansible.builtin.copy: content: "{{ content_var | to_nice_yaml }}" dest: "{{ collection_requirements_tmpfile.path }}" mode: "0644" - name: Install collection requirements with ansible galaxy # noqa: no-changed-when ansible.builtin.command: > /opt/ansible-runtime/bin/ansible-galaxy collection install --force -r "{{ collection_requirements_tmpfile.path }}" -p "{{ collection_path_default }}" register: collection_install until: collection_install is success retries: 5 delay: 2 - name: Show collection install output ansible.builtin.debug: msg: "{{ collection_install.stdout_lines }}" always: - name: Clean up temporary file ansible.builtin.file: path: "{{ collection_requirements_tmpfile.path }}" state: absent vars: collection_file: "{{ playbook_dir }}/../ansible-collection-requirements.yml" required_collections: "{{ lookup('file', collection_file) | from_yaml }}" collection_path_default: '/etc/ansible/' user_collection_file: 'user-collection-requirements.yml' user_collections: "{{ lookup('file', user_collections_path, errors='ignore') | default({}, true) | from_yaml }}" user_collections_path: "{{ lookup('env', 'OSA_CONFIG_DIR') | default('/etc/openstack_deploy', true) ~ '/' ~ user_collection_file }}"