From cb4e875ae1e1ec2e6ddf8a6b37f42283697fd50c Mon Sep 17 00:00:00 2001 From: Sam Yaple Date: Wed, 30 Sep 2015 11:23:39 +0000 Subject: Common start.sh The majority of the start.sh code is identical. This removes that duplicate code while still maintaining the ability to call code in a specific container. The start.sh is moved into /usr/local/bin/kolla_start in the container The extend_start.sh script is called by the kolla_start script at the location /usr/local/bin/kolla_extend_start . It always exists because we create a noop kolla_extend_start in the base directory. We override it with extend_start.sh in a specific image should we need to. Of note, the neutron-agents container is exempt from this new structure due to it being a fat container. Additionally, we fix the inconsistent permissions throughout. 644 for repo files and the scripts are set to 755 via a Docker RUN command to ensure someones local perm change won't break upstream containers. Change-Id: I7da8d19965463ad30ee522a71183e3f092e0d6ad Closes-Bug: #1501295 --- docker/ceph/ceph-mon/Dockerfile.j2 | 4 +-- docker/ceph/ceph-mon/extend_start.sh | 35 ++++++++++++++++++++++++ docker/ceph/ceph-mon/fetch_ceph_keys.py | 0 docker/ceph/ceph-mon/start.sh | 41 ---------------------------- docker/ceph/ceph-osd/Dockerfile.j2 | 5 ++-- docker/ceph/ceph-osd/extend_start.sh | 42 +++++++++++++++++++++++++++++ docker/ceph/ceph-osd/start.sh | 48 --------------------------------- 7 files changed, 81 insertions(+), 94 deletions(-) create mode 100644 docker/ceph/ceph-mon/extend_start.sh mode change 100755 => 100644 docker/ceph/ceph-mon/fetch_ceph_keys.py delete mode 100755 docker/ceph/ceph-mon/start.sh create mode 100644 docker/ceph/ceph-osd/extend_start.sh delete mode 100755 docker/ceph/ceph-osd/start.sh (limited to 'docker/ceph') diff --git a/docker/ceph/ceph-mon/Dockerfile.j2 b/docker/ceph/ceph-mon/Dockerfile.j2 index 57d31e819..bfcb8a1c6 100644 --- a/docker/ceph/ceph-mon/Dockerfile.j2 +++ b/docker/ceph/ceph-mon/Dockerfile.j2 @@ -1,7 +1,7 @@ FROM {{ namespace }}/{{ image_prefix }}ceph-base:{{ tag }} MAINTAINER Kolla Project (https://launchpad.net/kolla) -COPY start.sh / COPY fetch_ceph_keys.py /usr/bin/ -CMD ["/start.sh"] +COPY extend_start.sh /usr/local/bin/kolla_extend_start +RUN chmod 755 /usr/local/bin/kolla_extend_start /usr/bin/fetch_ceph_keys.py diff --git a/docker/ceph/ceph-mon/extend_start.sh b/docker/ceph/ceph-mon/extend_start.sh new file mode 100644 index 000000000..dce6749b3 --- /dev/null +++ b/docker/ceph/ceph-mon/extend_start.sh @@ -0,0 +1,35 @@ +#!/bin/bash + +# Setup common paths +KEYRING_ADMIN="/etc/ceph/ceph.client.admin.keyring" +KEYRING_MON="/etc/ceph/ceph.client.mon.keyring" +MONMAP="/etc/ceph/ceph.monmap" +MON_DIR="/var/lib/ceph/mon/ceph-$(hostname)" + +# Bootstrap and exit if KOLLA_BOOTSTRAP variable is set. This catches all cases +# of the KOLLA_BOOTSTRAP variable being set, including empty. +if [[ "${!KOLLA_BOOTSTRAP[@]}" ]]; then + # Lookup our fsid from the ceph.conf + FSID=$(awk '/^fsid/ {print $3; exit}' /etc/ceph/ceph.conf) + + # Generating initial keyrings and monmap + ceph-authtool --create-keyring "${KEYRING_MON}" --gen-key -n mon. --cap mon 'allow *' + ceph-authtool --create-keyring "${KEYRING_ADMIN}" --gen-key -n client.admin --set-uid=0 --cap mon 'allow *' --cap osd 'allow *' --cap mds 'allow' + ceph-authtool "${KEYRING_MON}" --import-keyring "${KEYRING_ADMIN}" + monmaptool --create --add "$(hostname)" "${MON_IP}" --fsid "${FSID}" "${MONMAP}" + + echo "Sleeping until keys are fetched" + /bin/sleep infinity +fi + +# This section runs on every mon that does not have a keyring already. +if [[ ! -e "${MON_DIR}/keyring" ]]; then + KEYRING_TMP="/tmp/ceph.mon.keyring" + + # Generate keyring for current monitor + ceph-authtool --create-keyring "${KEYRING_TMP}" --import-keyring "${KEYRING_ADMIN}" + ceph-authtool "${KEYRING_TMP}" --import-keyring "${KEYRING_MON}" + mkdir -p "${MON_DIR}" + ceph-mon --mkfs -i "$(hostname)" --monmap "${MONMAP}" --keyring "${KEYRING_TMP}" + rm "${KEYRING_TMP}" +fi diff --git a/docker/ceph/ceph-mon/fetch_ceph_keys.py b/docker/ceph/ceph-mon/fetch_ceph_keys.py old mode 100755 new mode 100644 diff --git a/docker/ceph/ceph-mon/start.sh b/docker/ceph/ceph-mon/start.sh deleted file mode 100755 index 29b2bd700..000000000 --- a/docker/ceph/ceph-mon/start.sh +++ /dev/null @@ -1,41 +0,0 @@ -#!/bin/bash -set -o errexit - -# Setup common paths -KEYRING_ADMIN="/etc/ceph/ceph.client.admin.keyring" -KEYRING_MON="/etc/ceph/ceph.client.mon.keyring" -MONMAP="/etc/ceph/ceph.monmap" -MON_DIR="/var/lib/ceph/mon/ceph-$(hostname)" - -# Loading common functions. -source /opt/kolla/kolla-common.sh - -# Bootstrap and exit if KOLLA_BOOTSTRAP variable is set. This catches all cases -# of the KOLLA_BOOTSTRAP variable being set, including empty. -if [[ "${!KOLLA_BOOTSTRAP[@]}" ]]; then - # Lookup our fsid from the ceph.conf - FSID=$(awk '/^fsid/ {print $3; exit}' /etc/ceph/ceph.conf) - - # Generating initial keyrings and monmap - ceph-authtool --create-keyring "${KEYRING_MON}" --gen-key -n mon. --cap mon 'allow *' - ceph-authtool --create-keyring "${KEYRING_ADMIN}" --gen-key -n client.admin --set-uid=0 --cap mon 'allow *' --cap osd 'allow *' --cap mds 'allow' - ceph-authtool "${KEYRING_MON}" --import-keyring "${KEYRING_ADMIN}" - monmaptool --create --add "$(hostname)" "${MON_IP}" --fsid "${FSID}" "${MONMAP}" - - echo "Sleeping until keys are fetched" - /bin/sleep infinity -fi - -# This section runs on every mon that does not have a keyring already. -if [[ ! -e "${MON_DIR}/keyring" ]]; then - KEYRING_TMP="/tmp/ceph.mon.keyring" - - # Generate keyring for current monitor - ceph-authtool --create-keyring "${KEYRING_TMP}" --import-keyring "${KEYRING_ADMIN}" - ceph-authtool "${KEYRING_TMP}" --import-keyring "${KEYRING_MON}" - mkdir -p "${MON_DIR}" - ceph-mon --mkfs -i "$(hostname)" --monmap "${MONMAP}" --keyring "${KEYRING_TMP}" - rm "${KEYRING_TMP}" -fi - -exec $CMD diff --git a/docker/ceph/ceph-osd/Dockerfile.j2 b/docker/ceph/ceph-osd/Dockerfile.j2 index ac453ce88..260f98698 100644 --- a/docker/ceph/ceph-osd/Dockerfile.j2 +++ b/docker/ceph/ceph-osd/Dockerfile.j2 @@ -1,6 +1,5 @@ FROM {{ namespace }}/{{ image_prefix }}ceph-base:{{ tag }} MAINTAINER Kolla Project (https://launchpad.net/kolla) -COPY start.sh / - -CMD ["/start.sh"] +COPY extend_start.sh /usr/local/bin/kolla_extend_start +RUN chmod 755 /usr/local/bin/kolla_extend_start diff --git a/docker/ceph/ceph-osd/extend_start.sh b/docker/ceph/ceph-osd/extend_start.sh new file mode 100644 index 000000000..a63b97b3c --- /dev/null +++ b/docker/ceph/ceph-osd/extend_start.sh @@ -0,0 +1,42 @@ +#!/bin/bash + +# Bootstrap and exit if KOLLA_BOOTSTRAP variable is set. This catches all cases +# of the KOLLA_BOOTSTRAP variable being set, including empty. +if [[ "${!KOLLA_BOOTSTRAP[@]}" ]]; then + # Formating disk for ceph + sgdisk --zap-all -- "${OSD_DEV}" + sgdisk --new=2:1M:5G --change-name=2:KOLLA_CEPH_JOURNAL --typecode=2:45B0969E-9B03-4F30-B4C6-B4B80CEFF106 --mbrtogpt -- "${OSD_DEV}" + sgdisk --largest-new=1 --change-name=1:KOLLA_CEPH_DATA --typecode=1:4FBD7E29-9D25-41B8-AFD0-062C0CEFF05D -- "${OSD_DEV}" + # This command may throw errors that we can safely ignore + partprobe || true + + # We look up the appropriate device path with partition. + OSD_PARTITION=$(ls "${OSD_DEV}"* | egrep "${OSD_DEV}p?1") + JOURNAL_PARTITION="${OSD_PARTITION%?}2" + + OSD_ID=$(ceph osd create) + OSD_DIR="/var/lib/ceph/osd/ceph-${OSD_ID}" + mkdir -p "${OSD_DIR}" + mkfs.xfs -f "${OSD_PARTITION}" + mount "${OSD_PARTITION}" "${OSD_DIR}" + + # This will through an error about no key existing. That is normal. It then + # creates the key in the next step. + ceph-osd -i "${OSD_ID}" --mkfs --osd-journal="${JOURNAL_PARTITION}" --mkkey + ceph auth add "osd.${OSD_ID}" osd 'allow *' mon 'allow profile osd' -i "${OSD_DIR}/keyring" + umount "${OSD_PARTITION}" + + # These commands only need to be run once per host but are safe to run + # repeatedly. This can be improved later or if any problems arise. + ceph osd crush add-bucket "$(hostname)" host + ceph osd crush move "$(hostname)" root=default + + # Adding osd to crush map + ceph osd crush add "${OSD_ID}" "${OSD_INITIAL_WEIGHT}" host="$(hostname)" + exit 0 +fi + +# We look up the appropriate journal since we cannot rely on symlinks +JOURNAL_PARTITION=$(ls "${OSD_DEV}"* | egrep "${OSD_DEV}p?2") +OSD_DIR="/var/lib/ceph/osd/ceph-${OSD_ID}" +ARGS="-i ${OSD_ID} --osd-journal ${JOURNAL_PARTITION} -k ${OSD_DIR}/keyring" diff --git a/docker/ceph/ceph-osd/start.sh b/docker/ceph/ceph-osd/start.sh deleted file mode 100755 index 4b26c426b..000000000 --- a/docker/ceph/ceph-osd/start.sh +++ /dev/null @@ -1,48 +0,0 @@ -#!/bin/bash -set -o errexit - -# Loading common functions. -source /opt/kolla/kolla-common.sh - -# Bootstrap and exit if KOLLA_BOOTSTRAP variable is set. This catches all cases -# of the KOLLA_BOOTSTRAP variable being set, including empty. -if [[ "${!KOLLA_BOOTSTRAP[@]}" ]]; then - # Formating disk for ceph - sgdisk --zap-all -- "${OSD_DEV}" - sgdisk --new=2:1M:5G --change-name=2:KOLLA_CEPH_JOURNAL --typecode=2:45B0969E-9B03-4F30-B4C6-B4B80CEFF106 --mbrtogpt -- "${OSD_DEV}" - sgdisk --largest-new=1 --change-name=1:KOLLA_CEPH_DATA --typecode=1:4FBD7E29-9D25-41B8-AFD0-062C0CEFF05D -- "${OSD_DEV}" - # This command may throw errors that we can safely ignore - partprobe || true - - # We look up the appropriate device path with partition. - OSD_PARTITION=$(ls "${OSD_DEV}"* | egrep "${OSD_DEV}p?1") - JOURNAL_PARTITION="${OSD_PARTITION%?}2" - - OSD_ID=$(ceph osd create) - OSD_DIR="/var/lib/ceph/osd/ceph-${OSD_ID}" - mkdir -p "${OSD_DIR}" - mkfs.xfs -f "${OSD_PARTITION}" - mount "${OSD_PARTITION}" "${OSD_DIR}" - - # This will through an error about no key existing. That is normal. It then - # creates the key in the next step. - ceph-osd -i "${OSD_ID}" --mkfs --osd-journal="${JOURNAL_PARTITION}" --mkkey - ceph auth add "osd.${OSD_ID}" osd 'allow *' mon 'allow profile osd' -i "${OSD_DIR}/keyring" - umount "${OSD_PARTITION}" - - # These commands only need to be run once per host but are safe to run - # repeatedly. This can be improved later or if any problems arise. - ceph osd crush add-bucket "$(hostname)" host - ceph osd crush move "$(hostname)" root=default - - # Adding osd to crush map - ceph osd crush add "${OSD_ID}" "${OSD_INITIAL_WEIGHT}" host="$(hostname)" - exit 0 -fi - -# We look up the appropriate journal since we cannot rely on symlinks -JOURNAL_PARTITION=$(ls "${OSD_DEV}"* | egrep "${OSD_DEV}p?2") -OSD_DIR="/var/lib/ceph/osd/ceph-${OSD_ID}" -ARGS="-i ${OSD_ID} --osd-journal ${JOURNAL_PARTITION} -k ${OSD_DIR}/keyring" - -exec $CMD $ARGS -- cgit v1.2.3