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
README.org new: [mongo] add ``README.org`` with some help 6 months ago
metadata.yml chg: [mongo] make ``backup`` relation "recommended". 2 months ago

README.org

Mongo Charm

Quick information

Upgrade

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 docker.0k.io/mongo:"$TAG"-myc

General Access

You can access mondo db, if running, through

SERVICENAME=mongo
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

SERVICENAME=mongo
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.

PROJECTNAME=myc
SERVICENAME=mongo
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:

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

Drop database

DBNAME=xxx
PROJECTNAME=myc
SERVICENAME=mongo
docker exec -i "${PROJECTNAME}_${SERVICE}_1" /usr/bin/mongo --quiet < \
    <(echo "
use $DBNAME;
db.dropDatabase();
")

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

Restore database

SOURCE_DIR=/tmp/gogocarto
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.