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.
|
|
#!/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
|