Automatically use and discovery MySQL service

This commit is contained in:
Franck Nijhof 2020-02-28 00:44:30 +01:00
parent e1425bae6b
commit 6d7aaaedee
No known key found for this signature in database
GPG key ID: D62583BA8AB11CA3
3 changed files with 56 additions and 0 deletions

View file

@ -14,9 +14,11 @@ WORKDIR /opt/traccar
# Setup base
RUN \
apk add --no-cache \
mariadb-client=10.4.12-r0 \
nginx=1.16.1-r6 \
nss=3.48-r0 \
openjdk8-jre=8.242.08-r0 \
xmlstarlet=1.6.1-r0 \
\
&& curl -J -L -o /tmp/traccar.zip \
"https://github.com/traccar/traccar/releases/download/v4.8/traccar-other-4.8.zip" \

View file

@ -21,6 +21,7 @@
"80/tcp": "Web interface (Not required for Ingress)"
},
"map": ["config:rw", "ssl"],
"services": ["mysql:want"],
"options": {
"ssl": true,
"certfile": "fullchain.pem",

View file

@ -0,0 +1,53 @@
#!/usr/bin/with-contenv bashio
# ==============================================================================
# Home Assistant Community Add-on: Traccar
# Pre-configures the MySQL clients, if the service is available
# ==============================================================================
readonly CONFIG="/etc/traccar/hassio.xml"
declare host
declare password
declare port
declare username
declare url
if bashio::services.available "mysql"; then
host=$(bashio::services "mysql" "host")
password=$(bashio::services "mysql" "password")
port=$(bashio::services "mysql" "port")
username=$(bashio::services "mysql" "username")
# Create database if not exists
echo "CREATE DATABASE IF NOT EXISTS traccar;" \
| mysql -h "${host}" -P "${port}" -u "${username}" -p"${password}"
# Update Traccar XML configuration for database
xmlstarlet ed -L -s /properties \
-t elem -n entry_placeholder -v "com.mysql.jdbc.Driver" \
-i //entry_placeholder -t attr -n "key" -v "database.driver" \
-r //entry_placeholder -v entry \
"${CONFIG}"
url="jdbc:mysql://${host}:${port}/traccar?serverTimezone=UTC&useSSL=false&allowMultiQueries=true&autoReconnect=true&useUnicode=yes&characterEncoding=UTF-8&sessionVariables=sql_mode=''"
xmlstarlet ed -L -s /properties \
-t elem -n entry_placeholder -v "${url}" \
-i //entry_placeholder -t attr -n "key" -v "database.url" \
-r //entry_placeholder -v entry \
"${CONFIG}"
xmlstarlet ed -L -s /properties \
-t elem -n entry_placeholder -v "${username}" \
-i //entry_placeholder -t attr -n "key" -v "database.user" \
-r //entry_placeholder -v entry \
"${CONFIG}"
xmlstarlet ed -L -s /properties \
-t elem -n entry_placeholder -v "${password}" \
-i //entry_placeholder -t attr -n "key" -v "database.password" \
-r //entry_placeholder -v entry \
"${CONFIG}"
else
bashio::log.warning "Traccar is using the internal H2 default database!"
bashio::log.warning "THIS IS NOT RECOMMENDED!!!"
bashio::log.warning "Please install the official MariaDB add-on, to ensure"
bashio::log.warning "you are using a solid database for Traccar."
fi