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

    #Cada sidecar s'espera a connectar al contenidor MongoDB del seu propi pod
    #Si no rep resposta s'espera 2 segons
    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
    #cada contenidor sidecar s'espera a més a la connexió al pod que contindrà el master
    until /usr/bin/mongo --host=${HOST} --eval 'printjson(db.serverStatus())'; do
      echo "connecting to remote mongo..."
      sleep 2
    done
    echo "connected to remote."
    
    #Atenció, aquest bloc de codi només afecta els pods que faran d'slaves
    if [[ "${HOSTNAME}" != 'mongo-0' ]]; then
      #Mentre no s'hagi inicialitzat la configuració del mongo-0 com a master... espera
      #Fixeu-vos que cada sidecar té un client mongo i executa la comanda en el remot del seu pod
      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
      
      #Un cop el master ha inicialitzat configuració cada slave s'hi uneix
      echo "adding self to mongo-0"
      /usr/bin/mongo --host=${HOST} \
         --eval="printjson(rs.add('${HOSTNAME}.mongo'))"
    fi

    #Atenció, aquest bloc de codi només afecta el pod que fara de master
    if [[ "${HOSTNAME}" == 'mongo-0' ]]; then
      echo "initializing replica set"
      #inicialitza el replicaset sense esperar ningú
      /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
