ceph-ansible/roles/ceph-container-common/tasks/fetch_image.yml

322 lines
13 KiB
YAML
Raw Normal View History

---
# NOTE (leseb): we must check each inventory group so this will work with collocated daemons
- name: inspect ceph mon container
command: "{{ container_binary }} inspect {{ ceph_mon_container_stat.stdout }}"
changed_when: false
register: ceph_mon_inspect
when:
- mon_group_name in group_names
- ceph_mon_container_stat.get('rc') == 0
- ceph_mon_container_stat.get('stdout_lines', [])|length != 0
- name: inspect ceph osd container
command: "{{ container_binary }} inspect {{ ceph_osd_container_stat.stdout }}"
changed_when: false
register: ceph_osd_inspect
when:
- osd_group_name in group_names
- ceph_osd_container_stat.get('rc') == 0
- ceph_osd_container_stat.get('stdout_lines', [])|length != 0
- name: inspect ceph mds container
command: "{{ container_binary }} inspect {{ ceph_mds_container_stat.stdout }}"
changed_when: false
register: ceph_mds_inspect
when:
- mds_group_name in group_names
- ceph_mds_container_stat.get('rc') == 0
- ceph_mds_container_stat.get('stdout_lines', [])|length != 0
- name: inspect ceph rgw container
command: "{{ container_binary }} inspect {{ ceph_rgw_container_stat.stdout }}"
changed_when: false
register: ceph_rgw_inspect
when:
- rgw_group_name in group_names
- ceph_rgw_container_stat.get('rc') == 0
- ceph_rgw_container_stat.get('stdout_lines', [])|length != 0
- name: inspect ceph mgr container
command: "{{ container_binary }} inspect {{ ceph_mgr_container_stat.stdout }}"
changed_when: false
register: ceph_mgr_inspect
when:
- mgr_group_name in group_names
- ceph_mgr_container_stat.get('rc') == 0
- ceph_mgr_container_stat.get('stdout_lines', [])|length != 0
- name: inspect ceph rbd mirror container
command: "{{ container_binary }} inspect {{ ceph_rbd_mirror_container_stat.stdout }}"
changed_when: false
register: ceph_rbd_mirror_inspect
when:
- rbdmirror_group_name in group_names
- ceph_rbd_mirror_container_stat.get('rc') == 0
- ceph_rbd_mirror_container_stat.get('stdout_lines', [])|length != 0
- name: inspect ceph nfs container
command: "{{ container_binary }} inspect {{ ceph_nfs_container_stat.stdout }}"
changed_when: false
register: ceph_nfs_inspect
when:
- nfs_group_name in group_names
- ceph_nfs_container_stat.get('rc') == 0
- ceph_nfs_container_stat.get('stdout_lines', [])|length != 0
- name: inspect ceph crash container
command: "{{ container_binary }} inspect {{ ceph_crash_container_stat.stdout }}"
changed_when: false
register: ceph_crash_inspect
when:
- ceph_crash_container_stat.get('rc') == 0
- ceph_crash_container_stat.get('stdout_lines', [])|length != 0
# NOTE(leseb): using failed_when to handle the case when the image is not present yet
- name: "inspecting ceph mon container image before pulling"
command: "{{ container_binary }} inspect {{ (ceph_mon_inspect.stdout | from_json)[0].Image }}"
changed_when: false
failed_when: false
register: ceph_mon_container_inspect_before_pull
when:
- mon_group_name in group_names
- ceph_mon_inspect.get('rc') == 0
- name: "inspecting ceph osd container image before pulling"
command: "{{ container_binary }} inspect {{ (ceph_osd_inspect.stdout | from_json)[0].Image }}"
changed_when: false
failed_when: false
register: ceph_osd_container_inspect_before_pull
when:
- osd_group_name in group_names
- ceph_osd_inspect.get('rc') == 0
- name: "inspecting ceph rgw container image before pulling"
command: "{{ container_binary }} inspect {{ (ceph_rgw_inspect.stdout | from_json)[0].Image }}"
changed_when: false
failed_when: false
register: ceph_rgw_container_inspect_before_pull
when:
- rgw_group_name in group_names
- ceph_rgw_inspect.get('rc') == 0
- name: "inspecting ceph mds container image before pulling"
command: "{{ container_binary }} inspect {{ (ceph_mds_inspect.stdout | from_json)[0].Image }}"
changed_when: false
failed_when: false
register: ceph_mds_container_inspect_before_pull
when:
- mds_group_name in group_names
- ceph_mds_inspect.get('rc') == 0
- name: "inspecting ceph mgr container image before pulling"
command: "{{ container_binary }} inspect {{ (ceph_mgr_inspect.stdout | from_json)[0].Image }}"
changed_when: false
failed_when: false
register: ceph_mgr_container_inspect_before_pull
when:
- mgr_group_name in group_names
- ceph_mgr_inspect.get('rc') == 0
- name: "inspecting ceph rbd mirror container image before pulling"
command: "{{ container_binary }} inspect {{ (ceph_rbd_mirror_inspect.stdout | from_json)[0].Image }}"
changed_when: false
failed_when: false
register: ceph_rbd_mirror_container_inspect_before_pull
when:
- rbdmirror_group_name in group_names
- ceph_rbd_mirror_inspect.get('rc') == 0
- name: "inspecting ceph nfs container image before pulling"
command: "{{ container_binary }} inspect {{ (ceph_nfs_inspect.stdout | from_json)[0].Image }}"
changed_when: false
failed_when: false
register: ceph_nfs_container_inspect_before_pull
when:
- nfs_group_name in group_names
- ceph_nfs_inspect.get('rc') == 0
- name: "inspecting ceph crash container image before pulling"
command: "{{ container_binary }} inspect {{ (ceph_crash_inspect.stdout | from_json)[0].Image }}"
changed_when: false
failed_when: false
register: ceph_crash_container_inspect_before_pull
when: ceph_crash_inspect.get('rc') == 0
- name: set_fact ceph_mon_image_repodigest_before_pulling
set_fact:
container: inspect Id field instead of RepoDigests When a container image managed by podman isn't tag anymore then the RepoDigests field when inspecting the image doesn't return any value. This is different from docker workflow and it breaks the ceph-ansible container upgrade when collocated multiple services and using a non fix container tag (like latest or 4). $ podman images REPOSITORY TAG IMAGE ID CREATED SIZE docker.io/ceph/daemon latest 680c9c0d38c3 8 days ago 957 MB <none> <none> 011ee108bfc9 2 months ago 1.01 GB $ podman inspect 680c9c0d38c3 | jq .[0].RepoDigests[0] "docker.io/ceph/daemon@sha256:20cf789235e23ddaf38e109b391d1496bb88011239d16862c4c106d0e05fea9e" $ podman inspect 011ee108bfc9 | jq .[0].RepoDigests[0] null Because this field returns "null" then the ansible task trying to determine this value is failing ----------------------------- fatal: [foo]: FAILED! => msg: |- The task includes an option with an undefined variable. The error was: None has no element 0 The error appears to be in 'roles/ceph-container-common/tasks/fetch_image.yml': line 137, column 3, but may be elsewhere in the file depending on the exact syntax problem. The offending line appears to be: - name: set_fact ceph_osd_image_repodigest_before_pulling ^ here ----------------------------- We don't have this behaviour with docker. $ docker images REPOSITORY TAG IMAGE ID CREATED SIZE docker.io/ceph/daemon latest 680c9c0d38c3 8 days ago 928 MB docker.io/ceph/daemon <none> 011ee108bfc9 2 months ago 986 MB $ docker inspect 680c9c0d38c3 | jq .[0].RepoDigests[0] "docker.io/ceph/daemon@sha256:45e6f28bb67c81b826acb64fad5c0da1cac3dffb41a88992fe4ca2be79575fa6" $ docker inspect 011ee108bfc9 | jq .[0].RepoDigests[0] "docker.io/ceph/daemon@sha256:b393a73309d72e43ca7d65cd3519036007947671e373eb59aa75a46185c52231" Instead we should just get the Id field. Closes: https://bugzilla.redhat.com/show_bug.cgi?id=1844496 Signed-off-by: Dimitri Savineau <dsavinea@redhat.com>
2020-06-06 04:42:20 +08:00
ceph_mon_image_repodigest_before_pulling: "{{ (ceph_mon_container_inspect_before_pull.stdout | from_json)[0].Id }}"
when:
- mon_group_name in group_names
- ceph_mon_container_inspect_before_pull.get('rc') == 0
- name: set_fact ceph_osd_image_repodigest_before_pulling
set_fact:
container: inspect Id field instead of RepoDigests When a container image managed by podman isn't tag anymore then the RepoDigests field when inspecting the image doesn't return any value. This is different from docker workflow and it breaks the ceph-ansible container upgrade when collocated multiple services and using a non fix container tag (like latest or 4). $ podman images REPOSITORY TAG IMAGE ID CREATED SIZE docker.io/ceph/daemon latest 680c9c0d38c3 8 days ago 957 MB <none> <none> 011ee108bfc9 2 months ago 1.01 GB $ podman inspect 680c9c0d38c3 | jq .[0].RepoDigests[0] "docker.io/ceph/daemon@sha256:20cf789235e23ddaf38e109b391d1496bb88011239d16862c4c106d0e05fea9e" $ podman inspect 011ee108bfc9 | jq .[0].RepoDigests[0] null Because this field returns "null" then the ansible task trying to determine this value is failing ----------------------------- fatal: [foo]: FAILED! => msg: |- The task includes an option with an undefined variable. The error was: None has no element 0 The error appears to be in 'roles/ceph-container-common/tasks/fetch_image.yml': line 137, column 3, but may be elsewhere in the file depending on the exact syntax problem. The offending line appears to be: - name: set_fact ceph_osd_image_repodigest_before_pulling ^ here ----------------------------- We don't have this behaviour with docker. $ docker images REPOSITORY TAG IMAGE ID CREATED SIZE docker.io/ceph/daemon latest 680c9c0d38c3 8 days ago 928 MB docker.io/ceph/daemon <none> 011ee108bfc9 2 months ago 986 MB $ docker inspect 680c9c0d38c3 | jq .[0].RepoDigests[0] "docker.io/ceph/daemon@sha256:45e6f28bb67c81b826acb64fad5c0da1cac3dffb41a88992fe4ca2be79575fa6" $ docker inspect 011ee108bfc9 | jq .[0].RepoDigests[0] "docker.io/ceph/daemon@sha256:b393a73309d72e43ca7d65cd3519036007947671e373eb59aa75a46185c52231" Instead we should just get the Id field. Closes: https://bugzilla.redhat.com/show_bug.cgi?id=1844496 Signed-off-by: Dimitri Savineau <dsavinea@redhat.com>
2020-06-06 04:42:20 +08:00
ceph_osd_image_repodigest_before_pulling: "{{ (ceph_osd_container_inspect_before_pull.stdout | from_json)[0].Id }}"
when:
- osd_group_name in group_names
- ceph_osd_container_inspect_before_pull.get('rc') == 0
- name: set_fact ceph_mds_image_repodigest_before_pulling
set_fact:
container: inspect Id field instead of RepoDigests When a container image managed by podman isn't tag anymore then the RepoDigests field when inspecting the image doesn't return any value. This is different from docker workflow and it breaks the ceph-ansible container upgrade when collocated multiple services and using a non fix container tag (like latest or 4). $ podman images REPOSITORY TAG IMAGE ID CREATED SIZE docker.io/ceph/daemon latest 680c9c0d38c3 8 days ago 957 MB <none> <none> 011ee108bfc9 2 months ago 1.01 GB $ podman inspect 680c9c0d38c3 | jq .[0].RepoDigests[0] "docker.io/ceph/daemon@sha256:20cf789235e23ddaf38e109b391d1496bb88011239d16862c4c106d0e05fea9e" $ podman inspect 011ee108bfc9 | jq .[0].RepoDigests[0] null Because this field returns "null" then the ansible task trying to determine this value is failing ----------------------------- fatal: [foo]: FAILED! => msg: |- The task includes an option with an undefined variable. The error was: None has no element 0 The error appears to be in 'roles/ceph-container-common/tasks/fetch_image.yml': line 137, column 3, but may be elsewhere in the file depending on the exact syntax problem. The offending line appears to be: - name: set_fact ceph_osd_image_repodigest_before_pulling ^ here ----------------------------- We don't have this behaviour with docker. $ docker images REPOSITORY TAG IMAGE ID CREATED SIZE docker.io/ceph/daemon latest 680c9c0d38c3 8 days ago 928 MB docker.io/ceph/daemon <none> 011ee108bfc9 2 months ago 986 MB $ docker inspect 680c9c0d38c3 | jq .[0].RepoDigests[0] "docker.io/ceph/daemon@sha256:45e6f28bb67c81b826acb64fad5c0da1cac3dffb41a88992fe4ca2be79575fa6" $ docker inspect 011ee108bfc9 | jq .[0].RepoDigests[0] "docker.io/ceph/daemon@sha256:b393a73309d72e43ca7d65cd3519036007947671e373eb59aa75a46185c52231" Instead we should just get the Id field. Closes: https://bugzilla.redhat.com/show_bug.cgi?id=1844496 Signed-off-by: Dimitri Savineau <dsavinea@redhat.com>
2020-06-06 04:42:20 +08:00
ceph_mds_image_repodigest_before_pulling: "{{ (ceph_mds_container_inspect_before_pull.stdout | from_json)[0].Id }}"
when:
- mds_group_name in group_names
- ceph_mds_container_inspect_before_pull.get('rc') == 0
- name: set_fact ceph_rgw_image_repodigest_before_pulling
set_fact:
container: inspect Id field instead of RepoDigests When a container image managed by podman isn't tag anymore then the RepoDigests field when inspecting the image doesn't return any value. This is different from docker workflow and it breaks the ceph-ansible container upgrade when collocated multiple services and using a non fix container tag (like latest or 4). $ podman images REPOSITORY TAG IMAGE ID CREATED SIZE docker.io/ceph/daemon latest 680c9c0d38c3 8 days ago 957 MB <none> <none> 011ee108bfc9 2 months ago 1.01 GB $ podman inspect 680c9c0d38c3 | jq .[0].RepoDigests[0] "docker.io/ceph/daemon@sha256:20cf789235e23ddaf38e109b391d1496bb88011239d16862c4c106d0e05fea9e" $ podman inspect 011ee108bfc9 | jq .[0].RepoDigests[0] null Because this field returns "null" then the ansible task trying to determine this value is failing ----------------------------- fatal: [foo]: FAILED! => msg: |- The task includes an option with an undefined variable. The error was: None has no element 0 The error appears to be in 'roles/ceph-container-common/tasks/fetch_image.yml': line 137, column 3, but may be elsewhere in the file depending on the exact syntax problem. The offending line appears to be: - name: set_fact ceph_osd_image_repodigest_before_pulling ^ here ----------------------------- We don't have this behaviour with docker. $ docker images REPOSITORY TAG IMAGE ID CREATED SIZE docker.io/ceph/daemon latest 680c9c0d38c3 8 days ago 928 MB docker.io/ceph/daemon <none> 011ee108bfc9 2 months ago 986 MB $ docker inspect 680c9c0d38c3 | jq .[0].RepoDigests[0] "docker.io/ceph/daemon@sha256:45e6f28bb67c81b826acb64fad5c0da1cac3dffb41a88992fe4ca2be79575fa6" $ docker inspect 011ee108bfc9 | jq .[0].RepoDigests[0] "docker.io/ceph/daemon@sha256:b393a73309d72e43ca7d65cd3519036007947671e373eb59aa75a46185c52231" Instead we should just get the Id field. Closes: https://bugzilla.redhat.com/show_bug.cgi?id=1844496 Signed-off-by: Dimitri Savineau <dsavinea@redhat.com>
2020-06-06 04:42:20 +08:00
ceph_rgw_image_repodigest_before_pulling: "{{ (ceph_rgw_container_inspect_before_pull.stdout | from_json)[0].Id }}"
when:
- rgw_group_name in group_names
- ceph_rgw_container_inspect_before_pull.get('rc') == 0
- name: set_fact ceph_mgr_image_repodigest_before_pulling
set_fact:
container: inspect Id field instead of RepoDigests When a container image managed by podman isn't tag anymore then the RepoDigests field when inspecting the image doesn't return any value. This is different from docker workflow and it breaks the ceph-ansible container upgrade when collocated multiple services and using a non fix container tag (like latest or 4). $ podman images REPOSITORY TAG IMAGE ID CREATED SIZE docker.io/ceph/daemon latest 680c9c0d38c3 8 days ago 957 MB <none> <none> 011ee108bfc9 2 months ago 1.01 GB $ podman inspect 680c9c0d38c3 | jq .[0].RepoDigests[0] "docker.io/ceph/daemon@sha256:20cf789235e23ddaf38e109b391d1496bb88011239d16862c4c106d0e05fea9e" $ podman inspect 011ee108bfc9 | jq .[0].RepoDigests[0] null Because this field returns "null" then the ansible task trying to determine this value is failing ----------------------------- fatal: [foo]: FAILED! => msg: |- The task includes an option with an undefined variable. The error was: None has no element 0 The error appears to be in 'roles/ceph-container-common/tasks/fetch_image.yml': line 137, column 3, but may be elsewhere in the file depending on the exact syntax problem. The offending line appears to be: - name: set_fact ceph_osd_image_repodigest_before_pulling ^ here ----------------------------- We don't have this behaviour with docker. $ docker images REPOSITORY TAG IMAGE ID CREATED SIZE docker.io/ceph/daemon latest 680c9c0d38c3 8 days ago 928 MB docker.io/ceph/daemon <none> 011ee108bfc9 2 months ago 986 MB $ docker inspect 680c9c0d38c3 | jq .[0].RepoDigests[0] "docker.io/ceph/daemon@sha256:45e6f28bb67c81b826acb64fad5c0da1cac3dffb41a88992fe4ca2be79575fa6" $ docker inspect 011ee108bfc9 | jq .[0].RepoDigests[0] "docker.io/ceph/daemon@sha256:b393a73309d72e43ca7d65cd3519036007947671e373eb59aa75a46185c52231" Instead we should just get the Id field. Closes: https://bugzilla.redhat.com/show_bug.cgi?id=1844496 Signed-off-by: Dimitri Savineau <dsavinea@redhat.com>
2020-06-06 04:42:20 +08:00
ceph_mgr_image_repodigest_before_pulling: "{{ (ceph_mgr_container_inspect_before_pull.stdout | from_json)[0].Id }}"
when:
- mgr_group_name in group_names
- ceph_mgr_container_inspect_before_pull.get('rc') == 0
- name: set_fact ceph_crash_image_repodigest_before_pulling
set_fact:
ceph_crash_image_repodigest_before_pulling: "{{ (ceph_crash_container_inspect_before_pull.stdout | from_json)[0].Id }}"
when: ceph_crash_container_inspect_before_pull.get('rc') == 0
- name: set_fact ceph_rbd_mirror_image_repodigest_before_pulling
set_fact:
container: inspect Id field instead of RepoDigests When a container image managed by podman isn't tag anymore then the RepoDigests field when inspecting the image doesn't return any value. This is different from docker workflow and it breaks the ceph-ansible container upgrade when collocated multiple services and using a non fix container tag (like latest or 4). $ podman images REPOSITORY TAG IMAGE ID CREATED SIZE docker.io/ceph/daemon latest 680c9c0d38c3 8 days ago 957 MB <none> <none> 011ee108bfc9 2 months ago 1.01 GB $ podman inspect 680c9c0d38c3 | jq .[0].RepoDigests[0] "docker.io/ceph/daemon@sha256:20cf789235e23ddaf38e109b391d1496bb88011239d16862c4c106d0e05fea9e" $ podman inspect 011ee108bfc9 | jq .[0].RepoDigests[0] null Because this field returns "null" then the ansible task trying to determine this value is failing ----------------------------- fatal: [foo]: FAILED! => msg: |- The task includes an option with an undefined variable. The error was: None has no element 0 The error appears to be in 'roles/ceph-container-common/tasks/fetch_image.yml': line 137, column 3, but may be elsewhere in the file depending on the exact syntax problem. The offending line appears to be: - name: set_fact ceph_osd_image_repodigest_before_pulling ^ here ----------------------------- We don't have this behaviour with docker. $ docker images REPOSITORY TAG IMAGE ID CREATED SIZE docker.io/ceph/daemon latest 680c9c0d38c3 8 days ago 928 MB docker.io/ceph/daemon <none> 011ee108bfc9 2 months ago 986 MB $ docker inspect 680c9c0d38c3 | jq .[0].RepoDigests[0] "docker.io/ceph/daemon@sha256:45e6f28bb67c81b826acb64fad5c0da1cac3dffb41a88992fe4ca2be79575fa6" $ docker inspect 011ee108bfc9 | jq .[0].RepoDigests[0] "docker.io/ceph/daemon@sha256:b393a73309d72e43ca7d65cd3519036007947671e373eb59aa75a46185c52231" Instead we should just get the Id field. Closes: https://bugzilla.redhat.com/show_bug.cgi?id=1844496 Signed-off-by: Dimitri Savineau <dsavinea@redhat.com>
2020-06-06 04:42:20 +08:00
ceph_rbd_mirror_image_repodigest_before_pulling: "{{ (ceph_rbd_mirror_container_inspect_before_pull.stdout | from_json)[0].Id }}"
when:
- rbdmirror_group_name in group_names
- ceph_rbd_mirror_container_inspect_before_pull.get('rc') == 0
- name: set_fact ceph_nfs_image_repodigest_before_pulling
set_fact:
container: inspect Id field instead of RepoDigests When a container image managed by podman isn't tag anymore then the RepoDigests field when inspecting the image doesn't return any value. This is different from docker workflow and it breaks the ceph-ansible container upgrade when collocated multiple services and using a non fix container tag (like latest or 4). $ podman images REPOSITORY TAG IMAGE ID CREATED SIZE docker.io/ceph/daemon latest 680c9c0d38c3 8 days ago 957 MB <none> <none> 011ee108bfc9 2 months ago 1.01 GB $ podman inspect 680c9c0d38c3 | jq .[0].RepoDigests[0] "docker.io/ceph/daemon@sha256:20cf789235e23ddaf38e109b391d1496bb88011239d16862c4c106d0e05fea9e" $ podman inspect 011ee108bfc9 | jq .[0].RepoDigests[0] null Because this field returns "null" then the ansible task trying to determine this value is failing ----------------------------- fatal: [foo]: FAILED! => msg: |- The task includes an option with an undefined variable. The error was: None has no element 0 The error appears to be in 'roles/ceph-container-common/tasks/fetch_image.yml': line 137, column 3, but may be elsewhere in the file depending on the exact syntax problem. The offending line appears to be: - name: set_fact ceph_osd_image_repodigest_before_pulling ^ here ----------------------------- We don't have this behaviour with docker. $ docker images REPOSITORY TAG IMAGE ID CREATED SIZE docker.io/ceph/daemon latest 680c9c0d38c3 8 days ago 928 MB docker.io/ceph/daemon <none> 011ee108bfc9 2 months ago 986 MB $ docker inspect 680c9c0d38c3 | jq .[0].RepoDigests[0] "docker.io/ceph/daemon@sha256:45e6f28bb67c81b826acb64fad5c0da1cac3dffb41a88992fe4ca2be79575fa6" $ docker inspect 011ee108bfc9 | jq .[0].RepoDigests[0] "docker.io/ceph/daemon@sha256:b393a73309d72e43ca7d65cd3519036007947671e373eb59aa75a46185c52231" Instead we should just get the Id field. Closes: https://bugzilla.redhat.com/show_bug.cgi?id=1844496 Signed-off-by: Dimitri Savineau <dsavinea@redhat.com>
2020-06-06 04:42:20 +08:00
ceph_nfs_image_repodigest_before_pulling: "{{ (ceph_nfs_container_inspect_before_pull.stdout | from_json)[0].Id }}"
when:
- nfs_group_name in group_names
- ceph_nfs_container_inspect_before_pull.get('rc') == 0
- name: "pulling {{ ceph_docker_registry }}/{{ ceph_docker_image }}:{{ ceph_docker_image_tag }} image"
command: "{{ timeout_command }} {{ container_binary }} pull {{ ceph_docker_registry }}/{{ ceph_docker_image }}:{{ ceph_docker_image_tag }}"
changed_when: false
register: docker_image
until: docker_image.rc == 0
retries: "{{ docker_pull_retry }}"
delay: 10
when: (ceph_docker_dev_image is undefined or not ceph_docker_dev_image | bool)
- name: "inspecting {{ ceph_docker_registry }}/{{ ceph_docker_image }}:{{ ceph_docker_image_tag }} image after pulling"
command: "{{ container_binary }} inspect {{ ceph_docker_registry }}/{{ ceph_docker_image }}:{{ ceph_docker_image_tag }}"
changed_when: false
failed_when: false
register: image_inspect_after_pull
- name: set_fact image_repodigest_after_pulling
set_fact:
container: inspect Id field instead of RepoDigests When a container image managed by podman isn't tag anymore then the RepoDigests field when inspecting the image doesn't return any value. This is different from docker workflow and it breaks the ceph-ansible container upgrade when collocated multiple services and using a non fix container tag (like latest or 4). $ podman images REPOSITORY TAG IMAGE ID CREATED SIZE docker.io/ceph/daemon latest 680c9c0d38c3 8 days ago 957 MB <none> <none> 011ee108bfc9 2 months ago 1.01 GB $ podman inspect 680c9c0d38c3 | jq .[0].RepoDigests[0] "docker.io/ceph/daemon@sha256:20cf789235e23ddaf38e109b391d1496bb88011239d16862c4c106d0e05fea9e" $ podman inspect 011ee108bfc9 | jq .[0].RepoDigests[0] null Because this field returns "null" then the ansible task trying to determine this value is failing ----------------------------- fatal: [foo]: FAILED! => msg: |- The task includes an option with an undefined variable. The error was: None has no element 0 The error appears to be in 'roles/ceph-container-common/tasks/fetch_image.yml': line 137, column 3, but may be elsewhere in the file depending on the exact syntax problem. The offending line appears to be: - name: set_fact ceph_osd_image_repodigest_before_pulling ^ here ----------------------------- We don't have this behaviour with docker. $ docker images REPOSITORY TAG IMAGE ID CREATED SIZE docker.io/ceph/daemon latest 680c9c0d38c3 8 days ago 928 MB docker.io/ceph/daemon <none> 011ee108bfc9 2 months ago 986 MB $ docker inspect 680c9c0d38c3 | jq .[0].RepoDigests[0] "docker.io/ceph/daemon@sha256:45e6f28bb67c81b826acb64fad5c0da1cac3dffb41a88992fe4ca2be79575fa6" $ docker inspect 011ee108bfc9 | jq .[0].RepoDigests[0] "docker.io/ceph/daemon@sha256:b393a73309d72e43ca7d65cd3519036007947671e373eb59aa75a46185c52231" Instead we should just get the Id field. Closes: https://bugzilla.redhat.com/show_bug.cgi?id=1844496 Signed-off-by: Dimitri Savineau <dsavinea@redhat.com>
2020-06-06 04:42:20 +08:00
image_repodigest_after_pulling: "{{ (image_inspect_after_pull.stdout | from_json)[0].Id }}"
when: image_inspect_after_pull.rc == 0
- name: set_fact ceph_mon_image_updated
set_fact:
ceph_mon_image_updated: "{{ ceph_mon_image_repodigest_before_pulling != image_repodigest_after_pulling }}"
changed_when: true
notify: restart ceph mons
when:
- mon_group_name in group_names
- ceph_mon_container_inspect_before_pull.get('rc') == 0
- ceph_mon_image_repodigest_before_pulling != image_repodigest_after_pulling
- name: set_fact ceph_osd_image_updated
set_fact:
ceph_osd_image_updated: "{{ ceph_osd_image_repodigest_before_pulling != image_repodigest_after_pulling }}"
changed_when: true
notify: restart ceph osds
when:
- osd_group_name in group_names
- ceph_osd_container_inspect_before_pull.get('rc') == 0
- ceph_osd_image_repodigest_before_pulling != image_repodigest_after_pulling
- name: set_fact ceph_mds_image_updated
set_fact:
ceph_mds_image_updated: "{{ ceph_mds_image_repodigest_before_pulling != image_repodigest_after_pulling }}"
changed_when: true
notify: restart ceph mdss
when:
- mds_group_name in group_names
- ceph_mds_container_inspect_before_pull.get('rc') == 0
- ceph_mds_image_repodigest_before_pulling != image_repodigest_after_pulling
- name: set_fact ceph_rgw_image_updated
set_fact:
ceph_rgw_image_updated: "{{ ceph_rgw_image_repodigest_before_pulling != image_repodigest_after_pulling }}"
changed_when: true
notify: restart ceph rgws
when:
- rgw_group_name in group_names
- ceph_rgw_container_inspect_before_pull.get('rc') == 0
- ceph_rgw_image_repodigest_before_pulling != image_repodigest_after_pulling
- name: set_fact ceph_mgr_image_updated
set_fact:
ceph_mgr_image_updated: "{{ ceph_mgr_image_repodigest_before_pulling != image_repodigest_after_pulling }}"
changed_when: true
notify: restart ceph mgrs
when:
- mgr_group_name in group_names
- ceph_mgr_container_inspect_before_pull.get('rc') == 0
- ceph_mgr_image_repodigest_before_pulling != image_repodigest_after_pulling
- name: set_fact ceph_rbd_mirror_image_updated
set_fact:
ceph_rbd_mirror_image_updated: "{{ ceph_rbd_mirror_image_repodigest_before_pulling != image_repodigest_after_pulling }}"
changed_when: true
notify: restart ceph rbdmirrors
when:
- rbdmirror_group_name in group_names
- ceph_rbd_mirror_container_inspect_before_pull.get('rc') == 0
- ceph_rbd_mirror_image_repodigest_before_pulling != image_repodigest_after_pulling
- name: set_fact ceph_nfs_image_updated
set_fact:
ceph_nfs_image_updated: "{{ ceph_nfs_image_repodigest_before_pulling != image_repodigest_after_pulling }}"
changed_when: true
notify: restart ceph nfss
when:
- nfs_group_name in group_names
- ceph_nfs_container_inspect_before_pull.get('rc') == 0
- ceph_nfs_image_repodigest_before_pulling != image_repodigest_after_pulling
- name: set_fact ceph_crash_image_updated
set_fact:
ceph_crash_image_updated: "{{ ceph_crash_image_repodigest_before_pulling != image_repodigest_after_pulling }}"
changed_when: true
notify: restart ceph crash
when:
- ceph_crash_container_inspect_before_pull.get('rc') == 0
- ceph_crash_image_repodigest_before_pulling != image_repodigest_after_pulling
- name: export local ceph dev image
command: >
{{ container_binary }} save -o "/tmp/{{ ceph_docker_username }}-{{ ceph_docker_imagename }}-{{ ceph_docker_image_tag }}.tar"
"{{ ceph_docker_username }}/{{ ceph_docker_imagename }}:{{ ceph_docker_image_tag }}"
delegate_to: localhost
when: (ceph_docker_dev_image is defined and ceph_docker_dev_image)
run_once: true
- name: copy ceph dev image file
copy:
src: "/tmp/{{ ceph_docker_username }}-{{ ceph_docker_imagename }}-{{ ceph_docker_image_tag }}.tar"
dest: "/tmp/{{ ceph_docker_username }}-{{ ceph_docker_imagename }}-{{ ceph_docker_image_tag }}.tar"
when: (ceph_docker_dev_image is defined and ceph_docker_dev_image | bool)
- name: load ceph dev image
command: "{{ container_binary }} load -i /tmp/{{ ceph_docker_username }}-{{ ceph_docker_imagename }}-{{ ceph_docker_image_tag }}.tar"
when: (ceph_docker_dev_image is defined and ceph_docker_dev_image | bool)
- name: remove tmp ceph dev image file
file:
name: "/tmp/{{ ceph_docker_username }}-{{ ceph_docker_imagename }}-{{ ceph_docker_image_tag }}.tar"
state: absent
when: (ceph_docker_dev_image is defined and ceph_docker_dev_image | bool)