mirror of https://github.com/ceph/ceph-ansible.git
59 lines
2.6 KiB
Django/Jinja
59 lines
2.6 KiB
Django/Jinja
#!/bin/sh
|
|
{% set cpu_limit = ansible_facts['processor_vcpus']|int if ceph_osd_docker_cpu_limit|int > ansible_facts['processor_vcpus']|int else ceph_osd_docker_cpu_limit|int %}
|
|
OSD_ID={{ item }}
|
|
T=$1
|
|
N=$2
|
|
CEPH_VOLUME_CMD="/usr/bin/{{ container_binary }} run --rm --net=host --privileged=true --pid=host --ipc=host -v /dev:/dev -v /etc/localtime:/etc/localtime:ro -v /var/lib/ceph/osd/{{ cluster }}-${OSD_ID}:/var/lib/ceph/osd/{{ cluster }}-${OSD_ID}:z -v /etc/ceph:/etc/ceph:z -v /var/run/ceph:/var/run/ceph:z -v /var/run/udev/:/var/run/udev/ -v /var/log/ceph:/var/log/ceph:z -v /run/lvm/:/run/lvm/ --entrypoint=ceph-volume {{ ceph_docker_registry }}/{{ ceph_docker_image }}:{{ ceph_docker_image_tag }}"
|
|
PYTHON=python3
|
|
CEPH_VOLUME_LIST_JSON="$($CEPH_VOLUME_CMD lvm list --format json)"
|
|
|
|
# Find the OSD FSID from the OSD ID
|
|
OSD_FSID="$(echo "$CEPH_VOLUME_LIST_JSON" | $PYTHON -c "import sys, json; print(json.load(sys.stdin)['$OSD_ID'][0]['tags']['ceph.osd_fsid'])")"
|
|
|
|
# Find the OSD type
|
|
OSD_TYPE="$(echo "$CEPH_VOLUME_LIST_JSON" | $PYTHON -c "import sys, json; print(json.load(sys.stdin)['$OSD_ID'][0]['type'])")"
|
|
|
|
# Discover the objectstore
|
|
if [[ "block wal db" =~ $OSD_TYPE ]]; then
|
|
OSD_OBJECTSTORE=(--bluestore)
|
|
else
|
|
log "Unable to discover osd objectstore for OSD type: $OSD_TYPE"
|
|
exit 1
|
|
fi
|
|
|
|
# activate
|
|
$CEPH_VOLUME_CMD lvm activate --no-systemd ${OSD_OBJECTSTORE[@]} ${OSD_ID} ${OSD_FSID}
|
|
|
|
# start ceph-osd
|
|
{% if ceph_osd_numactl_opts != "" %}
|
|
numactl \
|
|
{{ ceph_osd_numactl_opts }} \
|
|
{% endif %}
|
|
/usr/bin/{{ container_binary }} run \
|
|
{% if container_binary == 'podman' %}
|
|
-d --log-driver journald --conmon-pidfile /${T}/${N}-pid --cidfile /${T}/${N}-cid \
|
|
{% endif %}
|
|
--pids-limit={{ 0 if container_binary == 'podman' else -1 }} \
|
|
--rm --net=host --privileged=true --pid=host \
|
|
--ipc=host \
|
|
--cpus={{ cpu_limit }} \
|
|
{% if ceph_osd_docker_cpuset_cpus is defined -%}
|
|
--cpuset-cpus='{{ ceph_osd_docker_cpuset_cpus }}' \
|
|
{% endif -%}
|
|
{% if ceph_osd_docker_cpuset_mems is defined -%}
|
|
--cpuset-mems='{{ ceph_osd_docker_cpuset_mems }}' \
|
|
{% endif -%}
|
|
{% for v in ceph_common_container_params['volumes'] + ceph_osd_container_params['volumes'] | default([]) %}
|
|
-v {{ v }} \
|
|
{% endfor %}
|
|
{% if ansible_facts['distribution'] == 'Ubuntu' -%}
|
|
--security-opt apparmor=unconfined \
|
|
{% endif -%}
|
|
{% for k, v in (ceph_common_container_params['envs'] | combine(ceph_osd_container_params['envs'] | default({}))).items() %}
|
|
-e {{ k }}={{ v }} \
|
|
{% endfor %}
|
|
--name=ceph-osd-${OSD_ID} \
|
|
--entrypoint=/usr/bin/ceph-osd \
|
|
{{ ceph_docker_registry }}/{{ ceph_docker_image }}:{{ ceph_docker_image_tag }} \
|
|
{{ (ceph_common_container_params['args'] + ceph_osd_container_params['args'] | default([])) | join(' ') }}
|