#!/usr/bin/env bash # # Copyright (C) 2013 Cloudwatt # Copyright (C) 2014 Red Hat # # Author: Loic Dachary # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU Library Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU Library Public License for more details. # set -xe PS4='${BASH_SOURCE[0]}:$LINENO: ${FUNCNAME[0]}: ' DIR=mkfs export CEPH_CONF=/dev/null unset CEPH_ARGS MON_ID=a MON_DIR=$DIR/$MON_ID CEPH_MON=127.0.0.1:7110 # git grep '\<7110\>' : there must be only one TIMEOUT=360 EXTRAOPTS="" if [ -n "$CEPH_LIB" ]; then EXTRAOPTS+=" --erasure-code-dir $CEPH_LIB" EXTRAOPTS+=" --plugin-dir $CEPH_LIB" EXTRAOPTS+=" --osd-class-dir $CEPH_LIB" fi function setup() { teardown mkdir $DIR } function teardown() { kill_daemons rm -fr $DIR } function mon_mkfs() { local fsid=$(uuidgen) ceph-mon \ --id $MON_ID \ --fsid $fsid \ $EXTRAOPTS \ --mkfs \ --mon-data=$MON_DIR \ --mon-initial-members=$MON_ID \ --mon-host=$CEPH_MON \ "$@" } function mon_run() { ceph-mon \ --id $MON_ID \ --chdir= \ --mon-osd-full-ratio=.99 \ --mon-data-avail-crit=1 \ $EXTRAOPTS \ --mon-data=$MON_DIR \ --log-file=$MON_DIR/log \ --mon-cluster-log-file=$MON_DIR/log \ --run-dir=$MON_DIR \ --pid-file=$MON_DIR/pidfile \ --public-addr $CEPH_MON \ "$@" } function kill_daemons() { for pidfile in $(find $DIR -name pidfile) ; do pid=$(cat $pidfile) for try in 0 1 1 1 2 3 ; do kill $pid || break sleep $try done done } function auth_none() { mon_mkfs --auth-supported=none ceph-mon \ --id $MON_ID \ --mon-osd-full-ratio=.99 \ --mon-data-avail-crit=1 \ $EXTRAOPTS \ --mon-data=$MON_DIR \ --extract-monmap $MON_DIR/monmap [ -f $MON_DIR/monmap ] || return 1 [ ! -f $MON_DIR/keyring ] || return 1 mon_run --auth-supported=none timeout $TIMEOUT ceph --mon-host $CEPH_MON mon stat || return 1 } function auth_cephx_keyring() { cat > $DIR/keyring <&1 | tee $DIR/makedir.log grep 'toodeep.*No such file' $DIR/makedir.log > /dev/null rm $DIR/makedir.log # an empty directory does not mean the mon exists mkdir $MON_DIR mon_mkfs --auth-supported=none 2>&1 | tee $DIR/makedir.log ! grep "$MON_DIR already exists" $DIR/makedir.log || return 1 } function idempotent() { mon_mkfs --auth-supported=none mon_mkfs --auth-supported=none 2>&1 | tee $DIR/makedir.log grep "'$MON_DIR' already exists" $DIR/makedir.log > /dev/null || return 1 } function run() { local actions actions+="makedir " actions+="idempotent " actions+="auth_cephx_key " actions+="auth_cephx_keyring " actions+="auth_none " for action in $actions ; do setup $action || return 1 teardown done } run # Local Variables: # compile-command: "cd ../.. ; make TESTS=test/mon/mkfs.sh check" # End: