You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
Valentin Lab 91bfd7ba9b fix: [gogocarto] improve solidity of cron scripts facing the ``no-matching-entries`` bug 2 weeks ago
actions new: [apache,cyclos,mongo,piwigo] replace ``service_base_docker_image`` with ``service_ensure_image_ready`` for compatibility with compose ``1.7.1`` 2 months ago
build new: [mongo] added regular dump for backup 4 years ago
hooks fix: [cron] make cron build again 2 months ago
lib fix: [mongo] use host datastore if available 7 months ago
resources/bin new: [mongo] added regular dump for backup 4 years ago new: [mongo] add ```` with some help 6 months ago
metadata.yml chg: [mongo] make ``backup`` relation "recommended". 2 months ago

Mongo Charm

Quick information


Since 4.0.6 based on alpine 3.9, alpine is not packaging mongo anymore. So we use the official version (that is huge). We still must change entrypoint to enforce proper directory paths.

A ``Dockerfile`` is provided for this mean.

You can fetch latest official tags:

docker-tags-fetch mongo -l 10 -f '^[0-9]+\.[0-9]+\.[0-9]+$'

change it in docker file, then

docker build . -t"$TAG"-myc

General Access

You can access mondo db, if running, through

compose exec "$SERVICENAME" /usr/bin/mongo --quiet --eval "some js code"

if not running, you might want to run it.

The following could be added to actions

list databases

compose exec -T mongo /usr/bin/mongo --quiet \
    --eval "JSON.stringify(db.adminCommand({listDatabases: 1}))" | \
    jq -r '.databases[] | .name'

Dump database

This one will use the probably already builded image from your project on your host to run a competing mongo with a host directory to store the dump.

docker run --rm --name mongo_client -ti \
     -v /tmp/mongo:/tmp/mongo --network "${PROJECTNAME}_default" \
     -u root \
     --entrypoint /bin/sh "${PROJECTNAME}_$SERVICENAME"

Then inside docker:

apk add mongodb-tools

Then for each databases:

cd /tmp/mongo
mongodump -h mongo -d "$DBNAME" -o mdump/

Drop database

docker exec -i "${PROJECTNAME}_${SERVICE}_1" /usr/bin/mongo --quiet < \
    <(echo "
use $DBNAME;

Note: if some connection are active to the database, it might not be deleted, you should check by relisting the database.

Restore database

docker run --rm -ti \
    -v "$SOURCE_DIR":/tmp/backups/gogocarto \
    -w /tmp/backups \
    --entrypoint mongorestore \
    --network myc_default \
    myc_mongo \
    --host rs01/mongo /tmp/backups/

There should not have any errors.

Please note that '/tmp/backups' in the last example should contain one directory per database.

Note also that you should drop database (see previous section) prior to restore them.