Finish addon

This commit is contained in:
Pascal Vizeli
2017-06-27 21:44:25 +02:00
parent 004a951580
commit 828f821afd
2 changed files with 46 additions and 3 deletions

View File

@@ -10,10 +10,22 @@
"tcp/3306": 3306 "tcp/3306": 3306
}, },
"options": { "options": {
"databases": ["homeassistant"] "databases": ["homeassistant"],
"logins": [
{"username": "hass", "host": "localhost", "password": null}
],
"rights": [
{"username": "hass", "host": "localhost", "database": "homeassistant", "grant": "ALL PRIVILEGES ON"}
]
}, },
"schema": { "schema": {
"databases": ["str"] "databases": ["str"],
"logins": [
{"username": "str", "host": "str", "password": "str"}
],
"rights": [
{"username": "str", "host": "str", "database": "str", "grant": "str"}
]
}, },
"image": "homeassistant/{arch}-addon-mariadb" "image": "homeassistant/{arch}-addon-mariadb"
} }

View File

@@ -5,6 +5,8 @@ CONFIG_PATH=/data/options.json
MARIADB_DATA=/data/databases MARIADB_DATA=/data/databases
DATABASES=$(jq --raw-output ".databases[]" $CONFIG_PATH) DATABASES=$(jq --raw-output ".databases[]" $CONFIG_PATH)
LOGINS=$(jq --raw-output '.logins | length' $CONFIG_PATH)
RIGHTS=$(jq --raw-output '.rights | length' $CONFIG_PATH)
# Init mariadb # Init mariadb
if [ ! -d "$MARIADB_DATA" ]; then if [ ! -d "$MARIADB_DATA" ]; then
@@ -20,13 +22,42 @@ mysqld_safe --datadir="$MARIADB_DATA" --user=root < /dev/null &
MARIADB_PID=$! MARIADB_PID=$!
# Wait until DB is running # Wait until DB is running
while ! mysql -e 2> /dev/null; do while ! mysql -e "" 2> /dev/null; do
sleep 1 sleep 1
done done
# Init databases # Init databases
echo "[INFO] Init custom database"
for line in $DATABASES; do for line in $DATABASES; do
echo "[INFO] Create database $line"
mysql -e "CREATE DATABASE $line;" 2> /dev/null || true mysql -e "CREATE DATABASE $line;" 2> /dev/null || true
done done
# Init logins
echo "[INFO] Init/Update users"
for (( i=0; i < "$LOGINS"; i++ )); do
USERNAME=$(jq --raw-output ".logins[$i].username" $CONFIG_PATH)
PASSWORD=$(jq --raw-output ".logins[$i].password" $CONFIG_PATH)
HOST=$(jq --raw-output ".logins[$i].host" $CONFIG_PATH)
if mysql -e "SET PASSWORD FOR '$USERNAME'@'$HOST' = PASSWORD('$PASSWORD');" 2>; then
echo "[INFO] Update user $USERNAME"
else
echo "[INFO] Create user $USERNAME"
mysql -e "CREATE USER '$USERNAME'@'$HOST' IDENTIFIED BY '$PASSWORD';" 2> /dev/null || true
fi
done
# Init rights
echo "[INFO] Init/Update rights"
for (( i=0; i < "$RIGHTS"; i++ )); do
USERNAME=$(jq --raw-output ".rights[$i].username" $CONFIG_PATH)
HOST=$(jq --raw-output ".rights[$i].host" $CONFIG_PATH)
DATABASE=$(jq --raw-output ".rights[$i].database" $CONFIG_PATH)
GRANT=$(jq --raw-output ".rights[$i].grant" $CONFIG_PATH)
echo "[INFO] Alter rights for $USERNAME@$HOST - $DATABSE"
mysql -e "GRANT $GRANT $DATABSE.* TO '$USERNAME'@'$HOST';" 2> /dev/null || true
done
wait "$MARIADB_PID" wait "$MARIADB_PID"