2016-12-19 22:50:04 +08:00
|
|
|
---
|
2019-05-16 15:27:43 +08:00
|
|
|
- name: Set if containers should be pulled by digest
|
|
|
|
set_fact:
|
2016-12-19 22:50:04 +08:00
|
|
|
pull_by_digest: >-
|
2019-04-29 14:00:20 +08:00
|
|
|
{%- if download.sha256 is defined and download.sha256 -%}true{%- else -%}false{%- endif -%}
|
2016-12-19 22:50:04 +08:00
|
|
|
|
2019-05-16 15:27:43 +08:00
|
|
|
- name: Set pull_args
|
|
|
|
set_fact:
|
2016-12-19 22:50:04 +08:00
|
|
|
pull_args: >-
|
2019-05-03 05:24:21 +08:00
|
|
|
{%- if pull_by_digest %}{{ download.repo }}@sha256:{{ download.sha256 }}{%- else -%}{{ download.repo }}:{{ download.tag }}{%- endif -%}
|
2016-12-19 22:50:04 +08:00
|
|
|
|
|
|
|
- name: Register docker images info
|
2018-11-07 03:07:11 +08:00
|
|
|
shell: >-
|
2019-05-01 16:10:56 +08:00
|
|
|
{{ docker_bin_dir }}/docker images -q | xargs -r {{ docker_bin_dir }}/docker inspect -f "{{ '{{' }} if .RepoTags {{ '}}' }}{{ '{{' }} (index .RepoTags) {{ '}}' }}{{ '{{' }} end {{ '}}' }}{{ '{{' }} if .RepoDigests {{ '}}' }},{{ '{{' }} (index .RepoDigests) {{ '}}' }}{{ '{{' }} end {{ '}}' }}" | sed -e 's/^ *\[//g' -e 's/\] *$//g' -e 's/ /\n/g' | tr '\n' ','
|
2017-02-18 18:13:30 +08:00
|
|
|
no_log: true
|
2017-09-10 04:32:12 +08:00
|
|
|
register: docker_images
|
2016-12-27 19:38:54 +08:00
|
|
|
failed_when: false
|
2017-03-15 19:00:42 +08:00
|
|
|
changed_when: false
|
2017-02-07 02:13:21 +08:00
|
|
|
check_mode: no
|
2019-05-16 15:25:49 +08:00
|
|
|
when:
|
|
|
|
- not download_always_pull
|
|
|
|
- group_names | intersect(download.groups) | length
|
2016-12-19 22:50:04 +08:00
|
|
|
|
2019-05-16 15:27:43 +08:00
|
|
|
- name: Set if pull is required per container
|
|
|
|
set_fact:
|
2016-12-19 22:50:04 +08:00
|
|
|
pull_required: >-
|
2017-09-10 04:32:12 +08:00
|
|
|
{%- if pull_args in docker_images.stdout.split(',') %}false{%- else -%}true{%- endif -%}
|
2019-05-16 15:25:49 +08:00
|
|
|
when:
|
|
|
|
- not download_always_pull
|
|
|
|
- group_names | intersect(download.groups) | length
|
2016-12-19 22:50:04 +08:00
|
|
|
|
2019-05-01 16:10:56 +08:00
|
|
|
- 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
|
|
|
|
|
2016-12-19 22:50:04 +08:00
|
|
|
- name: Check the local digest sha256 corresponds to the given image tag
|
|
|
|
assert:
|
2019-05-03 05:24:21 +08:00
|
|
|
that: "{{ download.repo }}:{{ download.tag }} in docker_images.stdout.split(',')"
|
2019-04-29 14:00:20 +08:00
|
|
|
when:
|
2019-05-16 15:25:49 +08:00
|
|
|
- group_names | intersect(download.groups) | length
|
2019-04-29 14:00:20 +08:00
|
|
|
- not download_always_pull
|
|
|
|
- not pull_required
|
|
|
|
- pull_by_digest
|
2017-09-25 15:41:03 +08:00
|
|
|
tags:
|
|
|
|
- asserts
|