forked from 0k/0k-charms
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.
112 lines
2.6 KiB
112 lines
2.6 KiB
#!/bin/bash
|
|
|
|
## Init is run on host
|
|
## For now it is run every time the script is launched, but
|
|
## it should be launched only once after build.
|
|
|
|
## Accessible variables are:
|
|
## - SERVICE_NAME Name of current service
|
|
## - DOCKER_BASE_IMAGE Base image from which this service might be built if any
|
|
## - SERVICE_DATASTORE Location on host of the DATASTORE of this service
|
|
## - SERVICE_CONFIGSTORE Location on host of the CONFIGSTORE of this service
|
|
|
|
. lib/common
|
|
|
|
set -e
|
|
|
|
uid=$(docker_get_uid "$SERVICE_NAME" "mongodb")
|
|
|
|
CONFIG=$SERVICE_CONFIGSTORE/etc/mongod.conf
|
|
|
|
mkdir -p "$(dirname "$CONFIG")"
|
|
## XXXvlab: replication here is hardwired and not handled at all
|
|
cat <<EOF > "$CONFIG"
|
|
storage:
|
|
dbPath: /var/lib/mongodb
|
|
net:
|
|
bindIp: 0.0.0.0
|
|
replication:
|
|
oplogSizeMB: 128
|
|
replSetName: rs01
|
|
EOF
|
|
chown -v "$uid" "$CONFIG"
|
|
|
|
|
|
dirs=(/var/{log,lib}/mongodb )
|
|
host_dirs=()
|
|
for dir in "${dirs[@]}"; do
|
|
host_dirs+=("$SERVICE_DATASTORE$dir")
|
|
done
|
|
|
|
mkdir -p "${host_dirs[@]}"
|
|
find "${host_dirs[@]}" \! -user "$uid" -print0 | while read-0 f; do
|
|
chown -v "$uid" "$f" || exit 1
|
|
done
|
|
|
|
|
|
config_hash=$(cat "$CONFIG" | md5_compat) || exit 1
|
|
init-config-add "
|
|
$MASTER_BASE_SERVICE_NAME:
|
|
labels:
|
|
- compose.config_hash=$config_hash
|
|
"
|
|
|
|
ensure_db_docker_running
|
|
|
|
|
|
## ReplicaSet initialization
|
|
|
|
cmd="rs.initiate({ _id: 'rs01', members: [ { _id: 0, host: '$SERVICE_NAME:27017' } ]})"
|
|
debug "${WHITE}running:$NORMAL $cmd"
|
|
|
|
out=$(ddb <<<"$cmd")
|
|
|
|
if [[ "$out" == *"\"codeName\" : \"AlreadyInitialized\""* ]]; then
|
|
info "ReplicaSet already initialized."
|
|
elif [[ "$out" == *"\"ok\" : 1"* ]]; then
|
|
info "ReplicaSet initialized. "
|
|
else
|
|
err "ReplicaSet initialisation failed:"
|
|
echo "$out" >&2
|
|
exit 13
|
|
fi
|
|
|
|
|
|
## Enable read if db version >= 4.2
|
|
|
|
if ! version=$(mongo:db:version); then
|
|
err "Couldn't get database version"
|
|
exit 1
|
|
fi
|
|
|
|
echo "Current mongo database version: '$version'." >&2
|
|
|
|
if version_gt "$version" 4.1; then
|
|
cmd="db.getMongo().setSecondaryOk()"
|
|
debug "${WHITE}running:$NORMAL $cmd"
|
|
|
|
out=$(ddb <<<"$cmd") || {
|
|
err "Failed database command. Output:"
|
|
echo "$out" | prefix " | " >&2
|
|
exit 1
|
|
}
|
|
|
|
fi
|
|
|
|
|
|
## This is some sort of migrating code and should be moved to upgrade
|
|
## directory.
|
|
|
|
major_version=${version%.*}
|
|
|
|
cmd="db.adminCommand( { setFeatureCompatibilityVersion: \"${major_version}\" } )"
|
|
debug "${WHITE}running:$NORMAL $cmd"
|
|
|
|
out=$(ddb <<<"$cmd")
|
|
if [[ "$out" == *"\"ok\" : 1"* ]]; then
|
|
info "Feature Compatibility set to ${major_version}. "
|
|
else
|
|
err "Failed to set feature compatibility version failed:"
|
|
echo "$out" | prefix " | " >&2
|
|
exit 13
|
|
fi
|