]> git.apps.os.sepia.ceph.com Git - ceph-ansible.git/commitdiff
docker-common: fix container restart on new image
authorSébastien Han <seb@redhat.com>
Thu, 8 Feb 2018 16:35:05 +0000 (17:35 +0100)
committerSébastien Han <seb@redhat.com>
Wed, 14 Feb 2018 01:01:29 +0000 (02:01 +0100)
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>
roles/ceph-docker-common/tasks/fetch_image.yml

index d357ab83f22fccdb077267d0a98eaa4ee591b232..0fccd4a34d7e580d03c992e6b8a71139e383cbf7 100644 (file)
 ---
+# 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: 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: "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: container_inspect_before_pull
+  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 repodigest_before_pulling
+- name: set_fact ceph_mon_image_repodigest_before_pulling
   set_fact:
-    repodigest_before_pulling: "{{ (container_inspect_before_pull.stdout | from_json)[0].RepoDigests[0] }}"
+    ceph_mon_image_repodigest_before_pulling: "{{ (ceph_mon_container_inspect_before_pull.stdout | from_json)[0].RepoDigests[0].split('@')[1] }}"
   when:
-    - container_inspect_before_pull.rc == 0
+    - 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 }}"
 - 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: