mirror of
https://github.com/aljazceru/addons.git
synced 2025-12-18 13:44:20 +01:00
Finish addon
This commit is contained in:
@@ -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"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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"
|
||||||
|
|||||||
Reference in New Issue
Block a user