130 lines
5.3 KiB
Bash
130 lines
5.3 KiB
Bash
|
#!/usr/bin/with-contenv bashio
|
||
|
# shellcheck shell=bash
|
||
|
# ==============================================================================
|
||
|
# Home Assistant Add-on: Promtail
|
||
|
# This file makes the config file from inputs
|
||
|
# ==============================================================================
|
||
|
readonly CONFIG_DIR=/etc/promtail
|
||
|
readonly CONFIG_FILE="${CONFIG_DIR}/config.yaml"
|
||
|
readonly BASE_CONFIG="${CONFIG_DIR}/base_config.yaml"
|
||
|
readonly DEF_SCRAPE_CONFIGS="${CONFIG_DIR}/default-scrape-config.yaml"
|
||
|
readonly CUSTOM_SCRAPE_CONFIGS="${CONFIG_DIR}/custom-scrape-config.yaml"
|
||
|
declare cafile
|
||
|
declare add_stages
|
||
|
declare add_scrape_configs
|
||
|
scrape_configs="${DEF_SCRAPE_CONFIGS}"
|
||
|
|
||
|
bashio::log.info 'Setting base config for promtail...'
|
||
|
cp "${BASE_CONFIG}" "${CONFIG_FILE}"
|
||
|
|
||
|
# Set up client section
|
||
|
if ! bashio::config.is_empty 'client.username'; then
|
||
|
bashio::log.info 'Adding basic auth to client config...'
|
||
|
bashio::config.require 'client.password' "'client.username' is specified"
|
||
|
{
|
||
|
echo " basic_auth:"
|
||
|
echo " username: $(bashio::config 'client.username')"
|
||
|
echo " password: $(bashio::config 'client.password')"
|
||
|
} >> "${CONFIG_FILE}"
|
||
|
fi
|
||
|
|
||
|
if ! bashio::config.is_empty 'client.cafile'; then
|
||
|
bashio::log.info "Adding TLS to client config..."
|
||
|
cafile="/ssl/$(bashio::config 'client.cafile')"
|
||
|
|
||
|
if ! bashio::fs.file_exists "${cafile}"; then
|
||
|
bashio::log.fatal
|
||
|
bashio::log.fatal "The file specified for 'cafile' does not exist!"
|
||
|
bashio::log.fatal "Ensure the CA certificate file exists and full path is provided"
|
||
|
bashio::log.fatal
|
||
|
bashio::exit.nok
|
||
|
fi
|
||
|
{
|
||
|
echo " tls_config:"
|
||
|
echo " ca_file: ${cafile}"
|
||
|
} >> "${CONFIG_FILE}"
|
||
|
|
||
|
if ! bashio::config.is_empty 'client.servername'; then
|
||
|
echo " server_name: $(bashio::config 'client.servername')" >> "${CONFIG_FILE}"
|
||
|
fi
|
||
|
|
||
|
if ! bashio::config.is_empty 'client.certfile'; then
|
||
|
bashio::log.info "Adding mTLS to client config..."
|
||
|
bashio::config.require 'client.keyfile' "'client.certfile' is specified"
|
||
|
if ! bashio::fs.file_exists "$(bashio::config 'client.certfile')"; then
|
||
|
bashio::log.fatal
|
||
|
bashio::log.fatal "The file specified for 'certfile' does not exist!"
|
||
|
bashio::log.fatal "Ensure the certificate file exists and full path is provided"
|
||
|
bashio::log.fatal
|
||
|
bashio::exit.nok
|
||
|
fi
|
||
|
if ! bashio::fs.file_exists "$(bashio::config 'client.keyfile')"; then
|
||
|
bashio::log.fatal
|
||
|
bashio::log.fatal "The file specified for 'keyfile' does not exist!"
|
||
|
bashio::log.fatal "Ensure the key file exists and full path is provided"
|
||
|
bashio::log.fatal
|
||
|
bashio::exit.nok
|
||
|
fi
|
||
|
{
|
||
|
echo " cert_file: $(bashio::config 'client.certfile')"
|
||
|
echo " key_file: $(bashio::config 'client.keyfile')"
|
||
|
} >> "${CONFIG_FILE}"
|
||
|
fi
|
||
|
fi
|
||
|
|
||
|
# Add in scrape configs
|
||
|
{
|
||
|
echo
|
||
|
echo "scrape_configs:"
|
||
|
} >> "${CONFIG_FILE}"
|
||
|
if bashio::config.true 'skip_default_scrape_config'; then
|
||
|
bashio::log.info 'Skipping default journald scrape config...'
|
||
|
if ! bashio::config.is_empty 'additional_pipeline_stages'; then
|
||
|
bashio::log.warning
|
||
|
bashio::log.warning "'additional_pipeline_stages' ignored since 'skip_default_scrape_config' is true!"
|
||
|
bashio::log.warning 'See documentation for more information.'
|
||
|
bashio::log.warning
|
||
|
fi
|
||
|
bashio::config.require 'additional_scrape_configs' "'skip_default_scrape_config' is true"
|
||
|
|
||
|
elif ! bashio::config.is_empty 'additional_pipeline_stages'; then
|
||
|
bashio::log.info "Adding additional pipeline stages to default journal scrape config..."
|
||
|
add_stages="$(bashio::config 'additional_pipeline_stages')"
|
||
|
scrape_configs="${CUSTOM_SCRAPE_CONFIGS}"
|
||
|
if ! bashio::fs.file_exists "${add_stages}"; then
|
||
|
bashio::log.fatal
|
||
|
bashio::log.fatal "The file specified for 'additional_pipeline_stages' does not exist!"
|
||
|
bashio::log.fatal "Ensure the file exists at the path specified"
|
||
|
bashio::log.fatal
|
||
|
bashio::exit.nok
|
||
|
fi
|
||
|
|
||
|
yq -NP eval-all \
|
||
|
'select(fi == 0) + [{"add_pipeline_stages": select(fi == 1)}]' \
|
||
|
"${DEF_SCRAPE_CONFIGS}" "${add_stages}" \
|
||
|
| yq -NP e \
|
||
|
'[(.[0] * .[1]) | {"job_name": .job_name, "journal": .journal, "relabel_configs": .relabel_configs, "pipeline_stages": .pipeline_stages + .add_pipeline_stages}]' \
|
||
|
- > "${scrape_configs}"
|
||
|
fi
|
||
|
|
||
|
if ! bashio::config.is_empty 'additional_scrape_configs'; then
|
||
|
bashio::log.info "Adding custom scrape configs..."
|
||
|
add_scrape_configs="$(bashio::config 'additional_scrape_configs')"
|
||
|
if ! bashio::fs.file_exists "${add_scrape_configs}"; then
|
||
|
bashio::log.fatal
|
||
|
bashio::log.fatal "The file specified for 'additional_scrape_configs' does not exist!"
|
||
|
bashio::log.fatal "Ensure the file exists at the path specified"
|
||
|
bashio::log.fatal
|
||
|
bashio::exit.nok
|
||
|
fi
|
||
|
|
||
|
if bashio::config.true 'skip_default_scrape_config'; then
|
||
|
yq -NP e '[] + .' "${add_scrape_configs}" >> "${CONFIG_FILE}"
|
||
|
else
|
||
|
yq -NP eval-all 'select(fi == 0) + select(fi == 1)' \
|
||
|
"${scrape_configs}" "${add_scrape_configs}" >> "${CONFIG_FILE}"
|
||
|
fi
|
||
|
else
|
||
|
yq -NP e '[] + .' "${scrape_configs}" >> "${CONFIG_FILE}"
|
||
|
fi
|