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 &