diff --git a/gazpar2mqtt/rootfs/scripts/90-config_yaml.sh b/gazpar2mqtt/rootfs/scripts/90-config_yaml.sh new file mode 100644 index 000000000..ccb0a92f0 --- /dev/null +++ b/gazpar2mqtt/rootfs/scripts/90-config_yaml.sh @@ -0,0 +1,98 @@ +#!/usr/bin/env bashio + +################## +# INITIALIZATION # +################## + +# Where is the config +CONFIGSOURCE=$(bashio::config "CONFIG_LOCATION") + +# Check if config file is there, or create one from template +if [ -f $CONFIGSOURCE ]; then + echo "Using config file found in $CONFIGSOURCE" +else + echo "No config file, creating one from template" + # Create folder + mkdir -p "$(dirname "${CONFIGSOURCE}")" + # Placing template in config + if [ -f /templates/config.yaml ]; then + # Use available template + cp /templates/config.yaml "$(dirname "${CONFIGSOURCE}")" + else + # Download template + TEMPLATESOURCE="https://raw.githubusercontent.com/alexbelgium/hassio-addons/master/zzz_templates/config.template" + curl -L -f -s $TEMPLATESOURCE --output $CONFIGSOURCE + fi + # Need to restart + bashio::log.fatal "Config file not found, creating a new one. Please customize the file in $CONFIGSOURCE before restarting." + # bashio::exit.nok +fi + +# Check if yaml is valid +EXIT_CODE=0 +yamllint -d relaxed --no-warnings $CONFIGSOURCE &>ERROR || EXIT_CODE=$? +if [ $EXIT_CODE = 0 ]; then + echo "Config file is a valid yaml" +else + cat ERROR + bashio::log.fatal "Config file has an invalid yaml format. Please check the file in $CONFIGSOURCE. Errors list above." + # bashio::exit.nok +fi + +# Export all yaml entries as env variables +# Helper function +function parse_yaml { + local prefix=$2 || local prefix="" + local s='[[:space:]]*' w='[a-zA-Z0-9_]*' fs=$(echo @ | tr @ '\034') + sed -ne "s|^\($s\):|\1|" \ + -e "s| #.*$||g" \ + -e "s|#.*$||g" \ + -e "s|^\($s\)\($w\)$s:$s[\"']\(.*\)[\"']$s\$|\1$fs\2$fs\3|p" \ + -e "s|^\($s\)\($w\)$s:$s\(.*\)$s\$|\1$fs\2$fs\3|p" $1 | + awk -F$fs '{ + indent = length($1)/2; + vname[indent] = $2; + for (i in vname) {if (i > indent) {delete vname[i]}} + if (length($3) > 0) { + vn=""; for (i=0; i/tmpfile +while IFS= read -r line; do + # Clean output + line=${line//[\"\']/} + # Check if secret + if [[ "${line}" == *'!secret '* ]]; then + echo "secret detected" + secret=${line#*secret } + # Check if single match + secretnum=$(sed -n "/$secret:/=" /config/secrets.yaml) + [[ $(echo $secretnum) == *' '* ]] && bashio::log.fatal "There are multiple matches for your password name. Please check your secrets.yaml file" && bashio::exit.nok + # Get text + secret=$(sed -n "/$secret:/p" /config/secrets.yaml) + secret=${secret#*: } + line="${line%%=*}=$secret" + fi + # Data validation + if [[ $line =~ ^.+[=].+$ ]]; then + export $line # Export the variable + if [ -f /etc/services.d/*/*run* ]; then + sed -i "1a export $line" /etc/services.d/*/run # Export the variable + sed -i "1a echo \$(tput setaf 2)Variable set : $line\$(tput setaf 0)" /etc/services.d/*/run # Show text in colour + fi + if [ -f /scripts/*run* ]; then + sed -i "1a export $line" /scripts/*run* # Export the variable + sed -i "1a echo \$(tput setaf 2)Variable set : $line\$(tput setaf 0)" /scripts/*run* # Show text in colour + fi + bashio::log.blue "$line" + else + bashio::log.fatal "$line does not follow the structure KEY=text" + bashio::exit.nok + fi +done <"/tmpfile" diff --git a/gazpar2mqtt/rootfs/scripts/99-run.sh b/gazpar2mqtt/rootfs/scripts/99-run.sh index 306977384..71f07082f 100644 --- a/gazpar2mqtt/rootfs/scripts/99-run.sh +++ b/gazpar2mqtt/rootfs/scripts/99-run.sh @@ -1,96 +1,5 @@ #!/usr/bin/env bashio -################## -# INITIALIZATION # -################## - -# Where is the config -CONFIGSOURCE=$(bashio::config "CONFIG_LOCATION") - -# Check if config file is there, or create one from template -if [ -f $CONFIGSOURCE ]; then - echo "Using config file found in $CONFIGSOURCE" -else - echo "No config file, creating one from template" - # Create folder - mkdir -p "$(dirname "${CONFIGSOURCE}")" - # Downloading template - TEMPLATESOURCE="https://raw.githubusercontent.com/alexbelgium/hassio-addons/master/gazpar2mqtt/rootfs/templates/config.yaml" - curl -L -f -s $TEMPLATESOURCE --output $CONFIGSOURCE - # Placing template in config - #cp config.yaml "$(dirname "${CONFIGSOURCE}")" - # Need to restart - bashio::log.fatal "Config file not found, creating a new one. Please customize the file in $CONFIGSOURCE before restarting." - bashio::exit.nok -fi - -# Check if yaml is valid -EXIT_CODE=0 -yamllint -d relaxed --no-warnings $CONFIGSOURCE &>ERROR || EXIT_CODE=$? -if [ $EXIT_CODE = 0 ]; then - echo "Config file is a valid yaml" -else - cat ERROR - bashio::log.fatal "Config file has an invalid yaml format. Please check the file in $CONFIGSOURCE. Errors list above." - bashio::exit.nok -fi - -# Create symlink -[ -f /data/config.yaml ] && rm /data/config.yaml -ln -s $CONFIGSOURCE /data -echo "Symlink created" - -# Export all yaml entries as env variables -# Helper function -function parse_yaml { - local prefix=$2 || local prefix="" - local s='[[:space:]]*' w='[a-zA-Z0-9_]*' fs=$(echo @ | tr @ '\034') - sed -ne "s|^\($s\):|\1|" \ - -e "s| #.*$||g" \ - -e "s|#.*$||g" \ - -e "s|^\($s\)\($w\)$s:$s[\"']\(.*\)[\"']$s\$|\1$fs\2$fs\3|p" \ - -e "s|^\($s\)\($w\)$s:$s\(.*\)$s\$|\1$fs\2$fs\3|p" $1 | - awk -F$fs '{ - indent = length($1)/2; - vname[indent] = $2; - for (i in vname) {if (i > indent) {delete vname[i]}} - if (length($3) > 0) { - vn=""; for (i=0; i/tmpfile -while IFS= read -r line -do - # Clean output - line=${line//[\"\']/} - # Check if secret - if [[ "${line}" == *'!secret '* ]]; then - echo "secret detected" - secret=${line#*secret } - # Check if single match - secretnum=$(sed -n "/$secret:/=" /config/secrets.yaml) - [[ $(echo $secretnum) == *' '* ]] && bashio::log.fatal "There are multiple matches for your password name. Please check your secrets.yaml file" && bashio::exit.nok - # Get text - secret=$(sed -n "/$secret:/p" /config/secrets.yaml) - secret=${secret#*: } - line="${line%%=*}=$secret" - fi - # Data validation - if [[ $line =~ ^.+[=].+$ ]]; then - export $line # Export the variable - bashio::log.blue "$line" - else - bashio::log.fatal "$line does not follow the structure KEY=text" - bashio::exit.nok - fi -done < "/tmpfile" - ############## # Launch App # ############## diff --git a/paperless_ng/rootfs/etc/cont-init.d/90-config_yaml.sh b/paperless_ng/rootfs/etc/cont-init.d/90-config_yaml.sh index 374def0e8..ccb0a92f0 100644 --- a/paperless_ng/rootfs/etc/cont-init.d/90-config_yaml.sh +++ b/paperless_ng/rootfs/etc/cont-init.d/90-config_yaml.sh @@ -41,10 +41,9 @@ fi # Export all yaml entries as env variables # Helper function -set +u function parse_yaml { local prefix=$2 || local prefix="" - local s='[[:space:]]*' w='[a-zA-Z0-9_]*' fs=$(echo @ | tr @ '\034' | tr -d '\015') + local s='[[:space:]]*' w='[a-zA-Z0-9_]*' fs=$(echo @ | tr @ '\034') sed -ne "s|^\($s\):|\1|" \ -e "s| #.*$||g" \ -e "s|#.*$||g" \ @@ -62,20 +61,38 @@ function parse_yaml { } # Get variables and export -bashio::log.info "Starting the app with the variables in $CONFIGSOURCE" -eval parse_yaml "$CONFIGSOURCE" "" >listtmp -cat listtmp | while read word || [[ -n $word ]]; do +bashio::log.info "Starting the app with the variables in in $CONFIGSOURCE" +# Get list of parameters in a file +parse_yaml "$CONFIGSOURCE" "" >/tmpfile +while IFS= read -r line; do # Clean output - word=${word//[\"\']/} - # Data validation - if [[ $word =~ ^.+[=].+$ ]]; then - sed -i "1a export $word" /etc/services.d/*/run # Export the variable - sed -i "1a echo \$(tput setaf 2)... $word\$(tput setaf 0)" /etc/services.d/*/run # Show text in colour - bashio::log.blue "$word" - else - bashio::log.fatal "$word does not follow the structure KEY=text, it will be ignored and removed from the config" - sed -i "/$word/ d" ${CONFIGSOURCE} + line=${line//[\"\']/} + # Check if secret + if [[ "${line}" == *'!secret '* ]]; then + echo "secret detected" + secret=${line#*secret } + # Check if single match + secretnum=$(sed -n "/$secret:/=" /config/secrets.yaml) + [[ $(echo $secretnum) == *' '* ]] && bashio::log.fatal "There are multiple matches for your password name. Please check your secrets.yaml file" && bashio::exit.nok + # Get text + secret=$(sed -n "/$secret:/p" /config/secrets.yaml) + secret=${secret#*: } + line="${line%%=*}=$secret" fi - # Color text - sed -i "1a echo \$(tput setaf 2)Exporting ENV variables :\$(tput setaf 0)" /etc/services.d/*/run # Show text in colour -done && rm listtmp + # Data validation + if [[ $line =~ ^.+[=].+$ ]]; then + export $line # Export the variable + if [ -f /etc/services.d/*/*run* ]; then + sed -i "1a export $line" /etc/services.d/*/run # Export the variable + sed -i "1a echo \$(tput setaf 2)Variable set : $line\$(tput setaf 0)" /etc/services.d/*/run # Show text in colour + fi + if [ -f /scripts/*run* ]; then + sed -i "1a export $line" /scripts/*run* # Export the variable + sed -i "1a echo \$(tput setaf 2)Variable set : $line\$(tput setaf 0)" /scripts/*run* # Show text in colour + fi + bashio::log.blue "$line" + else + bashio::log.fatal "$line does not follow the structure KEY=text" + bashio::exit.nok + fi +done <"/tmpfile" diff --git a/webtrees/rootfs/scripts/90-config_yaml.sh b/webtrees/rootfs/scripts/90-config_yaml.sh index 374def0e8..ccb0a92f0 100644 --- a/webtrees/rootfs/scripts/90-config_yaml.sh +++ b/webtrees/rootfs/scripts/90-config_yaml.sh @@ -41,10 +41,9 @@ fi # Export all yaml entries as env variables # Helper function -set +u function parse_yaml { local prefix=$2 || local prefix="" - local s='[[:space:]]*' w='[a-zA-Z0-9_]*' fs=$(echo @ | tr @ '\034' | tr -d '\015') + local s='[[:space:]]*' w='[a-zA-Z0-9_]*' fs=$(echo @ | tr @ '\034') sed -ne "s|^\($s\):|\1|" \ -e "s| #.*$||g" \ -e "s|#.*$||g" \ @@ -62,20 +61,38 @@ function parse_yaml { } # Get variables and export -bashio::log.info "Starting the app with the variables in $CONFIGSOURCE" -eval parse_yaml "$CONFIGSOURCE" "" >listtmp -cat listtmp | while read word || [[ -n $word ]]; do +bashio::log.info "Starting the app with the variables in in $CONFIGSOURCE" +# Get list of parameters in a file +parse_yaml "$CONFIGSOURCE" "" >/tmpfile +while IFS= read -r line; do # Clean output - word=${word//[\"\']/} - # Data validation - if [[ $word =~ ^.+[=].+$ ]]; then - sed -i "1a export $word" /etc/services.d/*/run # Export the variable - sed -i "1a echo \$(tput setaf 2)... $word\$(tput setaf 0)" /etc/services.d/*/run # Show text in colour - bashio::log.blue "$word" - else - bashio::log.fatal "$word does not follow the structure KEY=text, it will be ignored and removed from the config" - sed -i "/$word/ d" ${CONFIGSOURCE} + line=${line//[\"\']/} + # Check if secret + if [[ "${line}" == *'!secret '* ]]; then + echo "secret detected" + secret=${line#*secret } + # Check if single match + secretnum=$(sed -n "/$secret:/=" /config/secrets.yaml) + [[ $(echo $secretnum) == *' '* ]] && bashio::log.fatal "There are multiple matches for your password name. Please check your secrets.yaml file" && bashio::exit.nok + # Get text + secret=$(sed -n "/$secret:/p" /config/secrets.yaml) + secret=${secret#*: } + line="${line%%=*}=$secret" fi - # Color text - sed -i "1a echo \$(tput setaf 2)Exporting ENV variables :\$(tput setaf 0)" /etc/services.d/*/run # Show text in colour -done && rm listtmp + # Data validation + if [[ $line =~ ^.+[=].+$ ]]; then + export $line # Export the variable + if [ -f /etc/services.d/*/*run* ]; then + sed -i "1a export $line" /etc/services.d/*/run # Export the variable + sed -i "1a echo \$(tput setaf 2)Variable set : $line\$(tput setaf 0)" /etc/services.d/*/run # Show text in colour + fi + if [ -f /scripts/*run* ]; then + sed -i "1a export $line" /scripts/*run* # Export the variable + sed -i "1a echo \$(tput setaf 2)Variable set : $line\$(tput setaf 0)" /scripts/*run* # Show text in colour + fi + bashio::log.blue "$line" + else + bashio::log.fatal "$line does not follow the structure KEY=text" + bashio::exit.nok + fi +done <"/tmpfile" diff --git a/zzz_templates/90-config_yaml.sh b/zzz_templates/90-config_yaml.sh new file mode 100644 index 000000000..ccb0a92f0 --- /dev/null +++ b/zzz_templates/90-config_yaml.sh @@ -0,0 +1,98 @@ +#!/usr/bin/env bashio + +################## +# INITIALIZATION # +################## + +# Where is the config +CONFIGSOURCE=$(bashio::config "CONFIG_LOCATION") + +# Check if config file is there, or create one from template +if [ -f $CONFIGSOURCE ]; then + echo "Using config file found in $CONFIGSOURCE" +else + echo "No config file, creating one from template" + # Create folder + mkdir -p "$(dirname "${CONFIGSOURCE}")" + # Placing template in config + if [ -f /templates/config.yaml ]; then + # Use available template + cp /templates/config.yaml "$(dirname "${CONFIGSOURCE}")" + else + # Download template + TEMPLATESOURCE="https://raw.githubusercontent.com/alexbelgium/hassio-addons/master/zzz_templates/config.template" + curl -L -f -s $TEMPLATESOURCE --output $CONFIGSOURCE + fi + # Need to restart + bashio::log.fatal "Config file not found, creating a new one. Please customize the file in $CONFIGSOURCE before restarting." + # bashio::exit.nok +fi + +# Check if yaml is valid +EXIT_CODE=0 +yamllint -d relaxed --no-warnings $CONFIGSOURCE &>ERROR || EXIT_CODE=$? +if [ $EXIT_CODE = 0 ]; then + echo "Config file is a valid yaml" +else + cat ERROR + bashio::log.fatal "Config file has an invalid yaml format. Please check the file in $CONFIGSOURCE. Errors list above." + # bashio::exit.nok +fi + +# Export all yaml entries as env variables +# Helper function +function parse_yaml { + local prefix=$2 || local prefix="" + local s='[[:space:]]*' w='[a-zA-Z0-9_]*' fs=$(echo @ | tr @ '\034') + sed -ne "s|^\($s\):|\1|" \ + -e "s| #.*$||g" \ + -e "s|#.*$||g" \ + -e "s|^\($s\)\($w\)$s:$s[\"']\(.*\)[\"']$s\$|\1$fs\2$fs\3|p" \ + -e "s|^\($s\)\($w\)$s:$s\(.*\)$s\$|\1$fs\2$fs\3|p" $1 | + awk -F$fs '{ + indent = length($1)/2; + vname[indent] = $2; + for (i in vname) {if (i > indent) {delete vname[i]}} + if (length($3) > 0) { + vn=""; for (i=0; i/tmpfile +while IFS= read -r line; do + # Clean output + line=${line//[\"\']/} + # Check if secret + if [[ "${line}" == *'!secret '* ]]; then + echo "secret detected" + secret=${line#*secret } + # Check if single match + secretnum=$(sed -n "/$secret:/=" /config/secrets.yaml) + [[ $(echo $secretnum) == *' '* ]] && bashio::log.fatal "There are multiple matches for your password name. Please check your secrets.yaml file" && bashio::exit.nok + # Get text + secret=$(sed -n "/$secret:/p" /config/secrets.yaml) + secret=${secret#*: } + line="${line%%=*}=$secret" + fi + # Data validation + if [[ $line =~ ^.+[=].+$ ]]; then + export $line # Export the variable + if [ -f /etc/services.d/*/*run* ]; then + sed -i "1a export $line" /etc/services.d/*/run # Export the variable + sed -i "1a echo \$(tput setaf 2)Variable set : $line\$(tput setaf 0)" /etc/services.d/*/run # Show text in colour + fi + if [ -f /scripts/*run* ]; then + sed -i "1a export $line" /scripts/*run* # Export the variable + sed -i "1a echo \$(tput setaf 2)Variable set : $line\$(tput setaf 0)" /scripts/*run* # Show text in colour + fi + bashio::log.blue "$line" + else + bashio::log.fatal "$line does not follow the structure KEY=text" + bashio::exit.nok + fi +done <"/tmpfile"