diff --git a/13-12-mongo-configmap.yaml b/13-12-mongo-configmap.yaml new file mode 100644 index 0000000..caa80bf --- /dev/null +++ b/13-12-mongo-configmap.yaml @@ -0,0 +1,51 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: mongo-init +data: + init.sh: | + #!/bin/bash + + # Need to wait for the readiness health check to pass so that the + # mongo names resolve. This is kind of wonky. + until ping -c 1 ${HOSTNAME}.mongo; do + echo "waiting for DNS (${HOSTNAME}.mongo)..." + sleep 2 + done + + until /usr/bin/mongo --eval 'printjson(db.serverStatus())'; do + echo "connecting to local mongo..." + sleep 2 + done + echo "connected to local." + + HOST=mongo-0.mongo:27017 + + until /usr/bin/mongo --host=${HOST} --eval 'printjson(db.serverStatus())'; do + echo "connecting to remote mongo..." + sleep 2 + done + echo "connected to remote." + + if [[ "${HOSTNAME}" != 'mongo-0' ]]; then + until /usr/bin/mongo --host=${HOST} --eval="printjson(rs.status())" \ + | grep -v "no replset config has been received"; do + echo "waiting for replication set initialization" + sleep 2 + done + echo "adding self to mongo-0" + /usr/bin/mongo --host=${HOST} \ + --eval="printjson(rs.add('${HOSTNAME}.mongo'))" + fi + + if [[ "${HOSTNAME}" == 'mongo-0' ]]; then + echo "initializing replica set" + /usr/bin/mongo --eval="printjson(rs.initiate(\ + {'_id': 'rs0', 'members': [{'_id': 0, \ + 'host': 'mongo-0.mongo:27017'}]}))" + fi + echo "initialized" + + while true; do + sleep 3600 + done