From 8d1a2f90284bc5c3a7fcfbae73f0bdb2e5b03320 Mon Sep 17 00:00:00 2001 From: Irina Mihai Date: Tue, 26 Feb 2019 17:43:53 +0000 Subject: [PATCH] Nova chart: Support ephemeral pool creation If libvirt images_type is rbd, then we need to have the images_rbd_pool present. These changes add a new job to make sure this pool exists. Change-Id: Iee307cb54384d1c4583d00a8d28f7b1a0676d7d8 Story: 2004922 Task: 29285 Signed-off-by: Irina Mihai (cherry picked from commit 0afcb0b37cdcf57436e44867bac9242d8684ce81) Signed-off-by: Robert Church --- nova/templates/bin/_nova-storage-init.sh.tpl | 73 +++++++++++++ nova/templates/configmap-bin.yaml | 2 + nova/templates/job-storage-init.yaml | 153 +++++++++++++++++++++++++++ nova/values.yaml | 18 ++++ 4 files changed, 246 insertions(+) create mode 100644 nova/templates/bin/_nova-storage-init.sh.tpl create mode 100644 nova/templates/job-storage-init.yaml diff --git a/nova/templates/bin/_nova-storage-init.sh.tpl b/nova/templates/bin/_nova-storage-init.sh.tpl new file mode 100644 index 0000000..416297f --- /dev/null +++ b/nova/templates/bin/_nova-storage-init.sh.tpl @@ -0,0 +1,73 @@ +#!/bin/bash + +{{/* +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/}} + +set -x +if [ "x$STORAGE_BACKEND" == "xrbd" ]; then + SECRET=$(mktemp --suffix .yaml) + KEYRING=$(mktemp --suffix .keyring) + function cleanup { + rm -f ${SECRET} ${KEYRING} + } + trap cleanup EXIT +fi + +set -ex +if [ "x$STORAGE_BACKEND" == "xrbd" ]; then + ceph -s + function ensure_pool () { + ceph osd pool stats $1 || ceph osd pool create $1 $2 + local test_version=$(ceph tell osd.* version | egrep -c "mimic|luminous" | xargs echo) + if [[ ${test_version} -gt 0 ]]; then + ceph osd pool application enable $1 $3 + fi + size_protection=$(ceph osd pool get $1 nosizechange | cut -f2 -d: | tr -d '[:space:]') + ceph osd pool set $1 nosizechange 0 + ceph osd pool set $1 size ${RBD_POOL_REPLICATION} + ceph osd pool set $1 nosizechange ${size_protection} + ceph osd pool set $1 crush_rule "${RBD_POOL_CRUSH_RULE}" + } + ensure_pool ${RBD_POOL_NAME} ${RBD_POOL_CHUNK_SIZE} "nova-ephemeral" + + if USERINFO=$(ceph auth get client.${RBD_POOL_USER}); then + echo "Cephx user client.${RBD_POOL_USER} already exist." + echo "Update its cephx caps" + ceph auth caps client.${RBD_POOL_USER} \ + mon "profile rbd" \ + osd "profile rbd" + ceph auth get client.${RBD_POOL_USER} -o ${KEYRING} + else + # NOTE: Restrict Nova permissions to what is needed. + # MON Read only and RBD access to the Nova ephemeral pool only. + ceph auth get-or-create client.${RBD_POOL_USER} \ + mon "profile rbd" \ + osd "profile rbd" \ + -o ${KEYRING} + fi + + ENCODED_KEYRING=$(sed -n 's/^[[:blank:]]*key[[:blank:]]\+=[[:blank:]]\(.*\)/\1/p' ${KEYRING} | base64 -w0) + cat > ${SECRET} <