forked from 0k/0k-charms
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
107 lines
2.8 KiB
107 lines
2.8 KiB
#!/bin/bash
|
|
|
|
## Init is run on host
|
|
## For now it is run every time the script is launched, but
|
|
## it should be launched only once after build.
|
|
|
|
## Accessible variables are:
|
|
## - SERVICE_NAME Name of current service
|
|
## - DOCKER_BASE_IMAGE Base image from which this service might be built if any
|
|
## - SERVICE_DATASTORE Location on host of the DATASTORE of this service
|
|
## - SERVICE_CONFIGSTORE Location on host of the CONFIGSTORE of this service
|
|
|
|
|
|
LIB="$SERVICE_DATASTORE/var/lib/odoo"
|
|
|
|
. lib/common
|
|
|
|
set -e
|
|
|
|
odoo_uid=$(get_odoo_uid)
|
|
|
|
mkdir -p "$LIB"
|
|
## XXXvlab: this one can fail if files are removed (from sessions dir)
|
|
find "$LIB" \! -user "$odoo_uid" -print0 | while read-0 f; do
|
|
chown -v "$odoo_uid" "$f" || exit 1
|
|
done
|
|
|
|
## workers management
|
|
workers=$(options-get workers 2>/dev/null) || true
|
|
workers=${workers:-1}
|
|
|
|
modules=$(options-get modules 2>/dev/null | yaml_get_values ,) || true
|
|
if [ -z "$modules" ]; then
|
|
modules=base
|
|
else
|
|
modules="base,${modules}"
|
|
fi
|
|
|
|
cmd_args=()
|
|
|
|
## dbfilter management
|
|
service_def=$(get_compose_service_def "$SERVICE_NAME") || return 1
|
|
|
|
dbfilter=$(e "$service_def" | yq e -r=false '.options.dbfilter') || true
|
|
if [ -n "$dbfilter" ]; then
|
|
type=$(e "$dbfilter" | yq e "type")
|
|
case "${type:2}" in
|
|
str)
|
|
dbfilter=$(e "$dbfilter" | yq e -o=json '.')
|
|
cmd_args+=("--db-filter=${dbfilter}")
|
|
;;
|
|
map)
|
|
python_expr="["
|
|
while read-0 key val; do
|
|
[[ "$key" == "null" ]] && key="None"
|
|
python_expr+="(${key//\$/\$\$}, ${val//\$/\$\$}),"
|
|
done < <(e "$dbfilter" | yq -o=json -0 'to_entries | .[] | [.key, .value] | .[]')
|
|
python_expr+="]"
|
|
cmd_args+=("--db-filter=${python_expr}")
|
|
;;
|
|
null)
|
|
:
|
|
;;
|
|
*)
|
|
err "Invalid value for ${WHITE}dbfilter${NORMAL}: ${dbfilter}" >&2
|
|
echo " It should be a string or a key/value mapping" >&2
|
|
exit 1
|
|
;;
|
|
esac
|
|
fi
|
|
|
|
|
|
## config file
|
|
conf=$(options-get conf 2>/dev/null) || true
|
|
|
|
CONFIGFILE="$SERVICE_CONFIGSTORE/etc/odoo/tecnativa.conf"
|
|
mkdir -p "${CONFIGFILE%/*}"
|
|
while read-0 section section_def; do
|
|
debug "'$section' '$section_def'"
|
|
printf "[%s]\n" "$section"
|
|
while read-0 key val; do
|
|
debug "'$key' '$val'"
|
|
key_option=${key//-/_}
|
|
printf "%s=%s\n" "$key_option" "$val"
|
|
done < <(e "$section_def" | shyaml key-values-0)
|
|
done < <(e "$conf" | shyaml key-values-0) > "$CONFIGFILE"
|
|
|
|
if [ -s "$CONFIGFILE" ]; then
|
|
init-config-add "
|
|
$SERVICE_NAME:
|
|
volumes:
|
|
- \"$CONFIGFILE:/opt/odoo/custom/conf.d/compose.conf:ro\"
|
|
"
|
|
fi
|
|
|
|
init-config-add "
|
|
$SERVICE_NAME:
|
|
command:
|
|
- \"--workers=${workers}\"
|
|
- \"-i ${modules}\"
|
|
$(
|
|
for arg in "${cmd_args[@]}"; do
|
|
echo " - |"
|
|
e "$arg" | prefix " "
|
|
done
|
|
)
|
|
"
|