
When using overcloud Ironic, IPA images for Ironic inspector are downloaded to the Ansible control host to a cache directory, by default /opt/kayobe/images/ipa/. They are later copied into the local Kolla Ansible configuration under etc/kolla/config/ironic/ironic-agent.{initramfs,kernel}. The use of a shared cache directory results in problems when multiple users share a single Ansible control host, since the cache is created as writeable only for the user that created it. Other users sharing the same Ansible control host will be unable to write to the cache. We may also see issues if multiple Kayobe environments using different IPA images are deployed from one Ansible control host. The cache is not strictly necessary, since we can download the images directly to the kayobe-config repo. This change avoids the use of the cache. The performance impact should be minimal, only requiring an additional download when a fresh kayobe-config is used. Change-Id: I022c53afc0f64ccc79eeff4a220ade4c9216edfc Closes-Bug: #2069845
68 lines
2.3 KiB
YAML
68 lines
2.3 KiB
YAML
---
|
|
- name: Ensure destination directory exists
|
|
file:
|
|
state: directory
|
|
path: "{{ image_download_dest | dirname }}"
|
|
|
|
- block:
|
|
- block:
|
|
- name: Fail if the checksum algorithm is not set
|
|
fail:
|
|
msg: "Checksum algorithm for image {{ image_download_url }} not set"
|
|
when: image_download_checksum_algorithm is falsy
|
|
|
|
- name: Get the expected checksum
|
|
uri:
|
|
url: "{{ image_download_checksum_url }}"
|
|
return_content: true
|
|
register: expected_checksum
|
|
until: expected_checksum is successful
|
|
retries: 3
|
|
delay: 5
|
|
when:
|
|
- image_download_checksum_url is truthy
|
|
|
|
- name: Ensure the image is downloaded
|
|
vars:
|
|
# NOTE(wszumski): This is evaluated even when expected_checksum is skipped
|
|
checksum: "{{ image_download_checksum_algorithm }}:{{ expected_checksum.content.split(' ')[0] if 'content' in expected_checksum else '' }}"
|
|
get_url:
|
|
url: "{{ image_download_url }}"
|
|
dest: "{{ image_download_dest }}"
|
|
mode: 0640
|
|
# If the file exists locally, its checksum will be compared with this.
|
|
checksum: "{{ checksum if expected_checksum is not skipped else omit }}"
|
|
# Always download the image if we have no checksum to compare with.
|
|
force: "{{ expected_checksum is skipped }}"
|
|
backup: true
|
|
register: result
|
|
until: result is successful
|
|
retries: 3
|
|
delay: 5
|
|
when:
|
|
- image_download_url is truthy
|
|
|
|
- when: image_download_path is truthy
|
|
block:
|
|
- name: Ensure the local image is copied
|
|
copy:
|
|
src: "{{ image_download_path }}"
|
|
dest: "{{ image_download_dest }}"
|
|
mode: 0640
|
|
when:
|
|
- image_download_host is falsy
|
|
|
|
- name: Ensure the remote image is fetched
|
|
fetch:
|
|
src: "{{ image_download_path }}"
|
|
dest: "{{ image_download_dest }}"
|
|
mode: 0640
|
|
flat: true
|
|
when:
|
|
- image_download_host is truthy
|
|
delegate_to: "{{ image_download_host | default('localhost', true) }}"
|
|
vars:
|
|
# NOTE: Without this, the hosts's ansible_host variable will not be
|
|
# respected when using delegate_to.
|
|
ansible_host: "{{ hostvars[image_download_host].ansible_host | default(image_download_host) }}"
|