mirror of https://github.com/ceph/ceph-ansible.git
docker-common: fix container restart on new image
We now look for any excisting containers, if any we compare their running image with the latest pulled container image. For OSDs, we iterate over the list of running OSDs, this handles the case where the first OSD of the list has been updated (runs the new image) and not the others. Closes: https://bugzilla.redhat.com/show_bug.cgi?id=1526513 Signed-off-by: Sébastien Han <seb@redhat.com>pull/2287/head
parent
ebc195487c
commit
d47d02a5eb
|
@ -1,16 +1,180 @@
|
|||
---
|
||||
# NOTE (leseb): we must check each inventory group so this will work with collocated daemons
|
||||
- name: inspect ceph mon container
|
||||
command: "docker 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: "docker 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: "docker 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: "docker 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: "docker 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: "docker 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: "docker 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
|
||||
|
||||
# NOTE(leseb): using failed_when to handle the case when the image is not present yet
|
||||
- name: "inspecting {{ ceph_docker_registry}}/{{ ceph_docker_image }}:{{ ceph_docker_image_tag }} image before pulling"
|
||||
command: "docker inspect {{ ceph_docker_registry}}/{{ ceph_docker_image }}:{{ ceph_docker_image_tag }}"
|
||||
- name: "inspecting ceph mon container image before pulling"
|
||||
command: "docker inspect {{ (ceph_mon_inspect.stdout | from_json)[0].Image }}"
|
||||
changed_when: false
|
||||
failed_when: false
|
||||
register: container_inspect_before_pull
|
||||
|
||||
- name: set_fact repodigest_before_pulling
|
||||
set_fact:
|
||||
repodigest_before_pulling: "{{ (container_inspect_before_pull.stdout | from_json)[0].RepoDigests[0] }}"
|
||||
register: ceph_mon_container_inspect_before_pull
|
||||
when:
|
||||
- container_inspect_before_pull.rc == 0
|
||||
- mon_group_name in group_names
|
||||
- ceph_mon_inspect.get('rc') == 0
|
||||
|
||||
- name: "inspecting ceph osd container image before pulling"
|
||||
command: "docker 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: "docker 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: "docker 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: "docker 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: "docker 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: "docker 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: set_fact ceph_mon_image_repodigest_before_pulling
|
||||
set_fact:
|
||||
ceph_mon_image_repodigest_before_pulling: "{{ (ceph_mon_container_inspect_before_pull.stdout | from_json)[0].RepoDigests[0].split('@')[1] }}"
|
||||
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:
|
||||
ceph_osd_image_repodigest_before_pulling: "{{ (ceph_osd_container_inspect_before_pull.stdout | from_json)[0].RepoDigests[0].split('@')[1] }}"
|
||||
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:
|
||||
ceph_mds_image_repodigest_before_pulling: "{{ (ceph_mds_container_inspect_before_pull.stdout | from_json)[0].RepoDigests[0].split('@')[1] }}"
|
||||
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:
|
||||
ceph_rgw_image_repodigest_before_pulling: "{{ (ceph_rgw_container_inspect_before_pull.stdout | from_json)[0].RepoDigests[0].split('@')[1] }}"
|
||||
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:
|
||||
ceph_mgr_image_repodigest_before_pulling: "{{ (ceph_mgr_container_inspect_before_pull.stdout | from_json)[0].RepoDigests[0].split('@')[1] }}"
|
||||
when:
|
||||
- mgr_group_name in group_names
|
||||
- ceph_mgr_container_inspect_before_pull.get('rc') == 0
|
||||
|
||||
- name: set_fact ceph_rbd_mirror_image_repodigest_before_pulling
|
||||
set_fact:
|
||||
ceph_rbd_mirror_image_repodigest_before_pulling: "{{ (ceph_rbd_mirror_container_inspect_before_pull.stdout | from_json)[0].RepoDigests[0].split('@')[1] }}"
|
||||
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:
|
||||
ceph_nfs_image_repodigest_before_pulling: "{{ (ceph_nfs_container_inspect_before_pull.stdout | from_json)[0].RepoDigests[0].split('@')[1] }}"
|
||||
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 {{ docker_pull_timeout }} docker pull {{ ceph_docker_registry}}/{{ ceph_docker_image }}:{{ ceph_docker_image_tag }}"
|
||||
|
@ -25,28 +189,90 @@
|
|||
- name: "inspecting {{ ceph_docker_registry}}/{{ ceph_docker_image }}:{{ ceph_docker_image_tag }} image after pulling"
|
||||
command: "docker inspect {{ ceph_docker_registry}}/{{ ceph_docker_image }}:{{ ceph_docker_image_tag }}"
|
||||
failed_when: false
|
||||
register: container_inspect_after_pull
|
||||
register: image_inspect_after_pull
|
||||
|
||||
- name: set_fact repodigest_after_pulling
|
||||
- name: set_fact image_repodigest_after_pulling
|
||||
set_fact:
|
||||
repodigest_after_pulling: "{{ (container_inspect_after_pull.stdout | from_json)[0].RepoDigests[0] }}"
|
||||
image_repodigest_after_pulling: "{{ (image_inspect_after_pull.stdout | from_json)[0].RepoDigests[0].split('@')[1] }}"
|
||||
when:
|
||||
- container_inspect_after_pull.rc == 0
|
||||
- image_inspect_after_pull.rc == 0
|
||||
|
||||
- name: set_fact is_image_updated
|
||||
- name: set_fact ceph_mon_image_updated
|
||||
set_fact:
|
||||
is_image_updated: "{{ repodigest_before_pulling == repodigest_after_pulling }}"
|
||||
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:
|
||||
- container_inspect_before_pull.rc == 0
|
||||
- repodigest_before_pulling == repodigest_after_pulling
|
||||
- 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: export local ceph dev image
|
||||
local_action:
|
||||
|
|
Loading…
Reference in New Issue