---
- name: Set if containers should be pulled by digest
  set_fact:
    pull_by_digest: >-
      {%- if download.sha256 is defined and download.sha256 -%}true{%- else -%}false{%- endif -%}

- name: Set pull_args
  set_fact:
    pull_args: >-
      {%- if pull_by_digest %}{{ download.repo }}@sha256:{{ download.sha256 }}{%- else -%}{{ download.repo }}:{{ download.tag }}{%- endif -%}

- name: Set image pull command for containerd
  set_fact:
    image_pull_command: "{{ bin_dir }}/crictl pull"
  when: container_manager in ['crio' ,'containerd']

- name: Register docker images info
  shell: "{{ image_info_command }}"
  no_log: true
  register: docker_images
  failed_when: false
  changed_when: false
  check_mode: no
  when:
    - not download_always_pull
    - group_names | intersect(download.groups) | length

- name: Set if pull is required per container
  set_fact:
    pull_required: >-
      {%- if pull_args in docker_images.stdout.split(',') %}false{%- else -%}true{%- endif -%}
  when:
    - not download_always_pull
    - group_names | intersect(download.groups) | length

- name: Does any host require container pull?
  vars:
    hosts_pull_required: "{{ hostvars.values() | map(attribute='pull_required') | select('defined') | list }}"
  set_fact:
    any_pull_required: "{{ True in hosts_pull_required }}"
  run_once: true
  changed_when: false
  when: not download_always_pull

- name: Check the local digest sha256 corresponds to the given image tag
  assert:
    that: "{{ download.repo }}:{{ download.tag }} in docker_images.stdout.split(',')"
  when:
    - group_names | intersect(download.groups) | length
    - not download_always_pull
    - not pull_required
    - pull_by_digest
  tags:
    - asserts
