]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph-ansible.git/commitdiff
osd: discover osd_objectstore on the fly
authorSébastien Han <seb@redhat.com>
Fri, 30 Nov 2018 10:20:03 +0000 (11:20 +0100)
committermergify[bot] <mergify[bot]@users.noreply.github.com>
Mon, 3 Dec 2018 14:11:47 +0000 (14:11 +0000)
Applying and passing the OSD_BLUESTORE/FILESTORE on the fly is wrong for
existing clusters as their config will be changed.

Typically, if an OSD was prepared with ceph-disk on filestore and we
change the default objectstore to bluestore, the activation will fail.
The flag osd_objectstore should only be used for the preparation, not
activation. The activate in this case detects the osd objecstore which
prevents failures like the one described above.

Signed-off-by: Sébastien Han <seb@redhat.com>
roles/ceph-osd/templates/ceph-osd-run.sh.j2

index 787ce1365f623dfebb347a664f0da0ee5bcb7779..968dc49006621532f4dd9ccbe5b4cf6348f43b03 100644 (file)
@@ -56,6 +56,13 @@ function expose_partitions {
 
 expose_partitions "$1"
 
+# discover osd_objectstore for ceph-disk based osds
+if [[ $DOCKER_ENV =~ "BLUESTORE" ]]; then
+  DOCKER_ENV="$DOCKER_ENV -e OSD_BLUESTORE=1"
+elif [[ $DOCKER_ENV =~ "JOURNAL" ]]; then
+  DOCKER_ENV="$DOCKER_ENV -e OSD_FILESTORE=1"
+fi
+
 {% endif -%}
 
 
@@ -88,22 +95,11 @@ expose_partitions "$1"
   {% if ansible_distribution == 'Ubuntu' -%}
   --security-opt apparmor:unconfined \
   {% endif -%}
-  {% if osd_objectstore == 'filestore' and not dmcrypt -%}
-  -e OSD_FILESTORE=1 \
-  -e OSD_DMCRYPT=0 \
-  {% endif -%}
-  {% if osd_objectstore == 'filestore' and dmcrypt -%}
-  -e OSD_FILESTORE=1 \
+  {% if dmcrypt -%}
   -e OSD_DMCRYPT=1 \
-  {% endif -%}
-  {% if osd_objectstore == 'bluestore' and not dmcrypt -%}
-  -e OSD_BLUESTORE=1 \
+  {% else -%}
   -e OSD_DMCRYPT=0 \
   {% endif -%}
-  {% if osd_objectstore == 'bluestore' and dmcrypt -%}
-  -e OSD_BLUESTORE=1 \
-  -e OSD_DMCRYPT=1 \
-  {% endif -%}
   -e CLUSTER={{ cluster }} \
   {% if (ceph_tcmalloc_max_total_thread_cache | int) > 0 and osd_objectstore == 'filestore' -%}
   -e TCMALLOC_MAX_TOTAL_THREAD_CACHE_BYTES={{ ceph_tcmalloc_max_total_thread_cache }} \