github.com/1aal/kubeblocks@v0.0.0-20231107070852-e1c03e598921/deploy/mongodb/scripts/replicaset-post-start.tpl (about) 1 #!/bin/sh 2 # usage: replicaset-post-start.sh type_name is_configsvr 3 # type_name: component.type, in uppercase 4 # is_configsvr: true or false, default false 5 {{- $mongodb_root := getVolumePathByName ( index $.podSpec.containers 0 ) "data" }} 6 {{- $mongodb_port_info := getPortByName ( index $.podSpec.containers 0 ) "mongodb" }} 7 8 # require port 9 {{- $mongodb_port := 27017 }} 10 {{- if $mongodb_port_info }} 11 {{- $mongodb_port = $mongodb_port_info.containerPort }} 12 {{- end }} 13 14 PORT={{ $mongodb_port }} 15 MONGODB_ROOT={{ $mongodb_root }} 16 INDEX=$(echo $KB_POD_NAME | grep -o "\-[0-9]\+\$"); 17 INDEX=${INDEX#-}; 18 if [ $INDEX -ne 0 ]; then 19 exit 0 20 fi 21 22 BACKUPFILE=$MONGODB_ROOT/db/mongodb.backup 23 until [ ! -f ${BACKUPFILE} ] 24 do 25 sleep 1 26 done 27 28 until mongosh --quiet --port $PORT --eval "print('I am ready')"; do sleep 1; done 29 30 until is_inited=$(mongosh --quiet --port $PORT --eval "rs.status().set" -u root --password $MONGODB_ROOT_PASSWORD || \ 31 mongosh --quiet --port $PORT --eval "try { rs.status().set } catch (e) { if (e.codeName=='NotYetInitialized') {print('')} else {exit(1)} }") ; do 32 sleep 1; 33 done 34 35 echo is_inited: $is_inited 36 37 if [ $is_inited ]; then 38 if mongosh --quiet --port $PORT --eval "rs.status().set"; then 39 echo "reset password" 40 (until mongosh --quiet --port $PORT --eval "rs.isMaster().isWritablePrimary"|grep true; do sleep 1; done; 41 mongosh --quiet --port $PORT admin --eval "db.createUser({ user: '$MONGODB_ROOT_USER', pwd: '$MONGODB_ROOT_PASSWORD', roles: [{role: 'root', db: 'admin'}] })") </dev/null >/dev/null 2>&1 & 42 fi 43 exit 0 44 fi 45 46 RPL_SET_NAME=$(echo $KB_POD_NAME | grep -o ".*-"); 47 RPL_SET_NAME=${RPL_SET_NAME%-}; 48 49 TYPE_NAME=$1 50 IS_CONFIGSVR=$2 51 MEMBERS="" 52 i=0 53 while [ $i -lt $(eval echo \$KB_"$TYPE_NAME"_N) ]; do 54 host=$(eval echo \$KB_"$TYPE_NAME"_"$i"_HOSTNAME) 55 host=$host"."$KB_NAMESPACE".svc.cluster.local" 56 until mongosh --quiet --port $PORT --host $host --eval "print('peer is ready')"; do sleep 1; done 57 if [ $i -eq 0 ]; then 58 MEMBERS="{_id: $i, host: \"$host:$PORT\", priority:2}" 59 else 60 MEMBERS="$MEMBERS,{_id: $i, host: \"$host:$PORT\"}" 61 fi 62 i=$(( i + 1)) 63 done 64 CONFIGSVR="" 65 if [ ""$IS_CONFIGSVR = "true" ]; then CONFIGSVR="configsvr: true,"; fi 66 67 echo "initiate replset" 68 sleep 10 69 set -e 70 mongosh --quiet --port $PORT --eval "rs.initiate({_id: \"$RPL_SET_NAME\", $CONFIGSVR members: [$MEMBERS]})"; 71 set +e 72 73 (until mongosh --quiet --port $PORT --eval "rs.isMaster().isWritablePrimary"|grep true; do sleep 1; done; 74 mongosh --quiet --port $PORT admin --eval "db.createUser({ user: '$MONGODB_ROOT_USER', pwd: '$MONGODB_ROOT_PASSWORD', roles: [{role: 'root', db: 'admin'}] })") </dev/null >/dev/null 2>&1 &