--- # Copyright 2015, Rackspace US, Inc. # # 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. # NOTE(cloudnull): We're using rsync and an if block because we've no means # to loop over a block. Re-evaluate this task when/if this is # merged https://github.com/ansible/ansible/issues/13262 - name: Rsyncing files from the LXC host to the container cache ansible.builtin.shell: | if [[ -e "{{ item }}" ]]; then rsync -av "{{ item }}" "{{ lxc_image_cache_path }}{{ item }}" else exit 3 fi changed_when: _rsync_container_cache.rc == 0 failed_when: _rsync_container_cache.rc not in [0, 3] register: _rsync_container_cache args: executable: "/bin/bash" with_items: "{{ (_lxc_copy_from_host | union(lxc_container_cache_files_from_host)) | list }}" - name: Ensure directories exist for lxc_container_cache_files ansible.builtin.file: dest: "{{ lxc_image_cache_path }}{{ item.dest | default(item.src) | dirname }}" state: directory mode: "0755" with_items: "{{ lxc_container_cache_files }}" - name: Copy files from deployment host to the container cache ansible.builtin.copy: src: "{{ item.src }}" dest: "{{ lxc_image_cache_path }}{{ item.dest | default(item.src) }}" owner: "{{ item.owner | default('root') }}" group: "{{ item.group | default('root') }}" mode: "{{ item.mode | default('0644') }}" with_items: "{{ lxc_container_cache_files }}" - name: Ensure opt directory exists in container ansible.builtin.file: dest: "{{ lxc_image_cache_path }}/opt" state: directory mode: "0755" - name: Cached image preparation script ansible.builtin.template: src: "{{ lxc_cache_prep_template }}" dest: "{{ lxc_image_cache_path }}/opt/cache-prep-commands.sh" mode: "0755" # This task runs several commands against the cached image to speed up the # lxc_container_create playbook. - name: Prepare cached image setup commands ansible.builtin.shell: "chroot {{ lxc_image_cache_path }} /opt/cache-prep-commands.sh > /var/log/lxc-cache-prep-commands.log 2>&1" changed_when: false async: "{{ lxc_cache_prep_timeout | int }}" poll: 0 register: _lxc_cache_prepare_commands # NOTE(cloudnull): Wait for the cache preparation script has completed before # building the new RootFS - name: Ensure that the LXC cache has been prepared ansible.builtin.async_status: jid: "{{ _lxc_cache_prepare_commands.ansible_job_id }}" register: _lxc_cache_prepare_commands_result until: _lxc_cache_prepare_commands_result.finished delay: 10 retries: "{{ lxc_cache_prep_timeout | int // 10 }}" - name: Remove requiretty for sudo on centos ansible.builtin.template: dest: "{{ lxc_image_cache_path }}/etc/sudoers.d/openstack-ansible" owner: root group: root mode: "0440" src: sudoers.j2 when: - ansible_facts['pkg_mgr'] == 'dnf'