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
Sébastien Han 2018-02-08 17:35:05 +01:00
parent ebc195487c
commit d47d02a5eb
1 changed files with 242 additions and 16 deletions

View File

@ -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: