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