108 lines
2.8 KiB
Bash
Executable File
108 lines
2.8 KiB
Bash
Executable File
#! /bin/sh
|
|
|
|
#
|
|
# Connect to a linode bucket using mochoa/s3fs
|
|
#
|
|
# Run this script on the Docker HOST to bind buckets using "linode-bucket"
|
|
# -- Or any alias you give with "--alias" option -- driver name.
|
|
# Please refer to https://hub.docker.com/r/mochoa/s3fs-volume-plugin.
|
|
# You may bind to different buckets using different aliases.
|
|
#
|
|
|
|
# parse args
|
|
while test $# -ne 0; do
|
|
if test -n "$(echo $1 | grep "=")"; then
|
|
key=${1%=*};
|
|
value=${1#*=};
|
|
else
|
|
key=$1;
|
|
value=$2
|
|
shift
|
|
fi
|
|
if test "${key}" = "-k" || test "${key}" = "--key"; then
|
|
ACCESS_KEY="${value}";
|
|
elif test "${key}" = "-s" || test "${key}" = "--secret"; then
|
|
ACCESS_SECRET="${value}";
|
|
elif test "${key}" = "-l" || test "${key}" = "--location"; then
|
|
BUCKET_LOCATION="${value}";
|
|
elif test "${key}" = "-a" || test "${key}" = "--alias"; then
|
|
PLUGIN_ALIAS="${value}";
|
|
elif test "${key}" = "-u" || test "${key}" = "--user"; then
|
|
if id "${value}" > /dev/null 2>&1; then
|
|
USER_ID="$(id -u "${value}")";
|
|
else
|
|
USER_ID="$(id -u)";
|
|
fi
|
|
elif test "${key}" = "-g" || test "${key}" = "--group"; then
|
|
if id "${value}" > /dev/null 2>&1; then
|
|
GROUP_ID="$(id -g "${value}")";
|
|
else
|
|
GROUP_ID="$(id -g)";
|
|
fi
|
|
else
|
|
echo "Invalid \"${key}\" option";
|
|
exit 1;
|
|
fi
|
|
shift
|
|
done;
|
|
|
|
if test -z "${PLUGIN_ALIAS}"; then
|
|
PLUGIN_ALIAS='linodeobjects';
|
|
fi
|
|
|
|
if test -z "${ACCESS_KEY}" || test -z "${ACCESS_SECRET}"; then
|
|
echo "You must provide both \"--key\" and \"--secret\" options";
|
|
exit 1;
|
|
fi
|
|
|
|
# test plugin
|
|
PLUGIN_ALIAS="${PLUGIN_ALIAS}";
|
|
PLUGIN_STATUS="$(docker plugin list \
|
|
| grep "${PLUGIN_ALIAS}" \
|
|
| rev \
|
|
| cut -d " " -f 1 \
|
|
| rev \
|
|
)";
|
|
|
|
# install s3fs-volume-plugin if not installed and disable it
|
|
if test -z "${PLUGIN_STATUS}"; then
|
|
docker plugin install \
|
|
mochoa/s3fs-volume-plugin \
|
|
--alias "${PLUGIN_ALIAS}" \
|
|
--grant-all-permissions \
|
|
--disable;
|
|
fi
|
|
|
|
# disable plugin to allow update settings
|
|
docker volume ls | while read volume_info; do
|
|
volume_driver="$(echo "${volume_info}" | xargs | cut -d " " -f 1)"
|
|
volume_name="$(echo "${volume_info}" | xargs | cut -d " " -f 2)"
|
|
if test -n "$(echo $volume_driver | grep "${PLUGIN_ALIAS}")"; then
|
|
docker volume rm "${volume_name}" > /dev/null;
|
|
fi
|
|
done
|
|
if test "${PLUGIN_STATUS}" = "true"; then
|
|
docker plugin disable "${PLUGIN_ALIAS}" \
|
|
> /dev/null \
|
|
|| exit 1;
|
|
fi
|
|
|
|
# set service
|
|
BUCKET_LOCATION="${BUCKET_LOCATION:-us-southeast-1}";
|
|
SERVICE_DOMAIN="${SERVICE_DOMAIN:-linodeobjects.com}";
|
|
URL="https://${BUCKET_LOCATION}.${SERVICE_DOMAIN}";
|
|
DEFAULT_S3FSOPTS="url=${URL}/";
|
|
|
|
# set credentials
|
|
docker plugin set \
|
|
"${PLUGIN_ALIAS}" AWSACCESSKEYID="${ACCESS_KEY}";
|
|
docker plugin set \
|
|
"${PLUGIN_ALIAS}" AWSSECRETACCESSKEY="${ACCESS_SECRET}";
|
|
|
|
# set permissions
|
|
DEFAULT_S3FSOPTS="uid=33,gid=33,allow_other,${DEFAULT_S3FSOPTS}";
|
|
|
|
docker plugin set "${PLUGIN_ALIAS}" DEFAULT_S3FSOPTS="${DEFAULT_S3FSOPTS}";
|
|
|
|
# enable plugin
|
|
docker plugin enable "${PLUGIN_ALIAS}"; |