Use config_panel to customize heap size

This commit is contained in:
Florent 2022-11-29 22:01:57 +01:00 committed by Florent F
parent b16fe0e8e6
commit 2fddcb9d5e
7 changed files with 101 additions and 197 deletions

23
conf/jvm.options Normal file
View file

@ -0,0 +1,23 @@
## JVM configuration
################################################################
## IMPORTANT: JVM heap size
################################################################
##
## You should always set the min and max JVM heap
## size to the same value. For example, to set
## the heap to 4 GB, set:
##
## -Xms4g
## -Xmx4g
##
## See https://opensearch.org/docs/opensearch/install/important-settings/
## for more information
##
################################################################
# Xms represents the initial size of total heap space
# Xmx represents the maximum size of total heap space
-Xms__XMS__
-Xmx__XMX__

37
config_panel.toml Normal file
View file

@ -0,0 +1,37 @@
version = "1.0"
[main]
name.en = "OpenSearch configuration"
name.fr = "Configuration d'OpenSearch"
services = ["__APP__"]
[main.jvm]
name.en = "JVM (Java Virtual Machine) configuration"
name.fr = "Configuration de la JVM (machine virtuelle Java)"
optional = false
[main.jvm.xms]
ask.en = "Initial heap space"
ask.fr = "Espace initial réservé pour le tas (ou « Heap »)"
help = """\
Indicate a size followed by a unit (either m for megabytes or g for gigabytes) with no space. Examples: \
"512m"\
"2g"\
"""
type = "string"
pattern.regexp = '^(\d+)[mMgG]$'
pattern.error = "Please respect the format describe in help text"
[main.jvm.xmx]
ask.en = "Maximum heap space"
ask.fr = "Espace maximal pour le tas (ou « Heap »)"
help = """\
Indicate a size followed by a unit (either m for megabytes or g for gigabytes) with no space. Examples: \
"512m"\
"2g"\
"""
type = "string"
pattern.regexp = '^(\d+)[mMgG]$'
pattern.error = "Please respect the format describe in help text"

Binary file not shown.

Before

Width:  |  Height:  |  Size: 35 KiB

View file

@ -1,134 +0,0 @@
#!/bin/bash
#=================================================
# GENERIC STARTING
#=================================================
# IMPORT GENERIC HELPERS
#=================================================
source _common.sh
source /usr/share/yunohost/helpers
#=================================================
# RETRIEVE ARGUMENTS
#=================================================
old_domain=$YNH_APP_OLD_DOMAIN
old_path=$YNH_APP_OLD_PATH
new_domain=$YNH_APP_NEW_DOMAIN
new_path=$YNH_APP_NEW_PATH
app=$YNH_APP_INSTANCE_NAME
#=================================================
# LOAD SETTINGS
#=================================================
ynh_script_progression --message="Loading installation settings..." --weight=1
# Needed for helper "ynh_add_nginx_config"
final_path=$(ynh_app_setting_get --app=$app --key=final_path)
# Add settings here as needed by your application
#db_name=$(ynh_app_setting_get --app=$app --key=db_name)
#db_user=$db_name
#db_pwd=$(ynh_app_setting_get --app=$app --key=db_pwd)
#=================================================
# BACKUP BEFORE CHANGE URL THEN ACTIVE TRAP
#=================================================
ynh_script_progression --message="Backing up the app before changing its URL (may take a while)..." --weight=1
# Backup the current version of the app
ynh_backup_before_upgrade
ynh_clean_setup () {
# Remove the new domain config file, the remove script won't do it as it doesn't know yet its location.
ynh_secure_remove --file="/etc/nginx/conf.d/$new_domain.d/$app.conf"
# Restore it if the upgrade fails
ynh_restore_upgradebackup
}
# Exit if an error occurs during the execution of the script
ynh_abort_if_errors
#=================================================
# CHECK WHICH PARTS SHOULD BE CHANGED
#=================================================
change_domain=0
if [ "$old_domain" != "$new_domain" ]
then
change_domain=1
fi
change_path=0
if [ "$old_path" != "$new_path" ]
then
change_path=1
fi
#=================================================
# STANDARD MODIFICATIONS
#=================================================
# STOP SYSTEMD SERVICE
#=================================================
ynh_script_progression --message="Stopping a systemd service..." --weight=1
ynh_systemd_action --service_name=$app --action="stop" --log_path="/var/log/$app/$app.log"
#=================================================
# MODIFY URL IN NGINX CONF
#=================================================
ynh_script_progression --message="Updating NGINX web server configuration..." --weight=1
nginx_conf_path=/etc/nginx/conf.d/$old_domain.d/$app.conf
# Change the path in the NGINX config file
if [ $change_path -eq 1 ]
then
# Make a backup of the original NGINX config file if modified
ynh_backup_if_checksum_is_different --file="$nginx_conf_path"
# Set global variables for NGINX helper
domain="$old_domain"
path_url="$new_path"
# Create a dedicated NGINX config
ynh_add_nginx_config
fi
# Change the domain for NGINX
if [ $change_domain -eq 1 ]
then
# Delete file checksum for the old conf file location
ynh_delete_file_checksum --file="$nginx_conf_path"
mv $nginx_conf_path /etc/nginx/conf.d/$new_domain.d/$app.conf
# Store file checksum for the new config file location
ynh_store_file_checksum --file="/etc/nginx/conf.d/$new_domain.d/$app.conf"
fi
#=================================================
# SPECIFIC MODIFICATIONS
#=================================================
# ...
#=================================================
#=================================================
# GENERIC FINALISATION
#=================================================
# START SYSTEMD SERVICE
#=================================================
ynh_script_progression --message="Starting a systemd service..." --weight=1
ynh_systemd_action --service_name=$app --action="start" --log_path="/var/log/$app/$app.log"
#=================================================
# RELOAD NGINX
#=================================================
ynh_script_progression --message="Reloading NGINX web server..." --weight=1
ynh_systemd_action --service_name=nginx --action=reload
#=================================================
# END OF SCRIPT
#=================================================
ynh_script_progression --message="Change of URL completed for $app" --last

View file

@ -1,10 +1,10 @@
#!/bin/bash #!/bin/bash
# In simple cases, you don't need a config script. # In simple cases, you don't need a config script.
# With a simple config_panel.toml, you can write in the app settings, in the # With a simple config_panel.toml, you can write in the app settings, in the
# upstream config file or replace complete files (logo ...) and restart services. # upstream config file or replace complete files (logo ...) and restart services.
# The config scripts allows you to go further, to handle specific cases # The config scripts allows you to go further, to handle specific cases
# (validation of several interdependent fields, specific getter/setter for a value, # (validation of several interdependent fields, specific getter/setter for a value,
# display dynamic informations or choices, pre-loading of config type .cube... ). # display dynamic informations or choices, pre-loading of config type .cube... ).
@ -28,72 +28,36 @@ final_path=$(ynh_app_setting_get $app final_path)
# SPECIFIC GETTERS FOR TOML SHORT KEY # SPECIFIC GETTERS FOR TOML SHORT KEY
#================================================= #=================================================
get__amount() { get__xms() {
# Here we can imagine to have an API call to stripe to know the amount of donation during a month ynh_app_setting_get --app=$app --key=xms
local amount = 200
# It's possible to change some properties of the question by overriding it:
if [ $amount -gt 100 ]
then
cat << EOF
style: success
value: $amount
ask:
en: A lot of donation this month: **$amount €**
EOF
else
cat << EOF
style: danger
value: $amount
ask:
en: Not so much donation this month: $amount €
EOF
fi
} }
get__prices() { get__xmx() {
local prices = "$(grep "DONATION\['" "$final_path/settings.py" | sed -r "s@^DONATION\['([^']*)'\]\['([^']*)'\] = '([^']*)'@\1/\2/\3@g" | sed -z 's/\n/,/g;s/,$/\n/')" ynh_app_setting_get --app=$app --key=xmx
if [ "$prices" == "," ];
then
# Return YNH_NULL if you prefer to not return a value at all.
echo YNH_NULL
else
echo $prices
fi
} }
#================================================= #=================================================
# SPECIFIC VALIDATORS FOR TOML SHORT KEYS # SPECIFIC VALIDATORS FOR TOML SHORT KEYS
#================================================= #=================================================
validate__publishable_key() {
# We can imagine here we test if the key is really a publisheable key
(is_secret_key $publishable_key) &&
echo 'This key seems to be a secret key'
}
#================================================= #=================================================
# SPECIFIC SETTERS FOR TOML SHORT KEYS # SPECIFIC SETTERS FOR TOML SHORT KEYS
#================================================= #=================================================
set__prices() {
#--------------------------------------------- regenerate_jvm_options() {
# IMPORTANT: setter are trigger only if a change is detected ynh_add_config --template="jvm.options" --destination="$final_path/config/jvm.options.d/yunohost.options"
#--------------------------------------------- chown $app:$app "$final_path/config/jvm.options.d/yunohost.options"
for price in $(echo $prices | sed "s/,/ /"); do chmod 400 "$final_path/config/jvm.options.d/yunohost.options"
frequency=$(echo $price | cut -d/ -f1) }
currency=$(echo $price | cut -d/ -f2)
price_id=$(echo $price | cut -d/ -f3)
sed "d/DONATION\['$frequency'\]\['$currency'\]" "$final_path/settings.py"
echo "DONATION['$frequency']['$currency'] = '$price_id'" >> "$final_path/settings.py" set__xms() {
done ynh_app_setting_set --app=$app --key=xms --value=$xms
regenerate_jvm_options
#--------------------------------------------- }
# IMPORTANT: to be able to upgrade properly, you have to saved the value in settings too
#--------------------------------------------- set__xmx() {
ynh_app_setting_set $app prices $prices ynh_app_setting_set --app=$app --key=xmx --value=$xmx
regenerate_jvm_options
} }
#================================================= #=================================================

View file

@ -41,6 +41,16 @@ ynh_script_progression --message="Finding an available port..." --weight=1
port=$(ynh_find_port --port=9200) port=$(ynh_find_port --port=9200)
ynh_app_setting_set --app=$app --key=port --value=$port ynh_app_setting_set --app=$app --key=port --value=$port
#=================================================
# DEFAULT VALUES FOR CONFIGURATION
#=================================================
xms=256m
ynh_app_setting_set --app=$app --key=xms --value=$xms
xmx=1g
ynh_app_setting_set --app=$app --key=xmx --value=$xmx
#================================================= #=================================================
# INSTALL DEPENDENCIES # INSTALL DEPENDENCIES
#================================================= #=================================================
@ -98,14 +108,15 @@ chmod 700 "/run/$app"
chown $app:$app "/run/$app" chown $app:$app "/run/$app"
#================================================= #=================================================
# ADD A CONFIGURATION # ADD CONFIGURATIONS
#================================================= #=================================================
ynh_script_progression --message="Adding a configuration file..." --weight=1 ynh_script_progression --message="Adding the configuration files..." --weight=1
ynh_add_config --template="opensearch.yml" --destination="$final_path/config/opensearch.yml" ynh_add_config --template="opensearch.yml" --destination="$final_path/config/opensearch.yml"
ynh_add_config --template="jvm.options" --destination="$final_path/config/jvm.options.d/yunohost.options"
chmod 400 "$final_path/config/opensearch.yml" chmod 400 "$final_path/config/opensearch.yml" "$final_path/config/jvm.options.d/yunohost.options"
chown $app:$app "$final_path/config/opensearch.yml" chown $app:$app "$final_path/config/opensearch.yml" "$final_path/config/jvm.options.d/yunohost.options"
#================================================= #=================================================
# SETUP SYSTEMD # SETUP SYSTEMD

View file

@ -19,6 +19,8 @@ app=$YNH_APP_INSTANCE_NAME
final_path=$(ynh_app_setting_get --app=$app --key=final_path) final_path=$(ynh_app_setting_get --app=$app --key=final_path)
datadir=$(ynh_app_setting_get --app=$app --key=datadir) datadir=$(ynh_app_setting_get --app=$app --key=datadir)
port=$(ynh_app_setting_get --app=$app --key=port) port=$(ynh_app_setting_get --app=$app --key=port)
xms=$(ynh_app_setting_get --app=$app --key=xms)
xmx=$(ynh_app_setting_get --app=$app --key=xmx)
#================================================= #=================================================
# CHECK VERSION # CHECK VERSION
@ -92,7 +94,7 @@ then
ynh_script_progression --message="Upgrading source files..." --weight=20 ynh_script_progression --message="Upgrading source files..." --weight=20
# Download, check integrity, uncompress and patch the source from app.src # Download, check integrity, uncompress and patch the source from app.src
ynh_setup_source --dest_dir="$final_path" --keep="config/opensearch.yml" ynh_setup_source --dest_dir="$final_path" --keep="config/opensearch.yml config/jvm.options.d/yunohost.conf"
fi fi
chmod 750 "$final_path" chmod 750 "$final_path"
@ -112,9 +114,10 @@ ynh_install_app_dependencies $pkg_dependencies
ynh_script_progression --message="Updating a configuration file..." --weight=1 ynh_script_progression --message="Updating a configuration file..." --weight=1
ynh_add_config --template="opensearch.yml" --destination="$final_path/config/opensearch.yml" ynh_add_config --template="opensearch.yml" --destination="$final_path/config/opensearch.yml"
ynh_add_config --template="jvm.options" --destination="$final_path/config/jvm.options.d/yunohost.options"
chmod 400 "$final_path/config/opensearch.yml" chmod 400 "$final_path/config/opensearch.yml" "$final_path/config/jvm.options.d/yunohost.options"
chown $app:$app "$final_path/config/opensearch.yml" chown $app:$app "$final_path/config/opensearch.yml" "$final_path/config/jvm.options.d/yunohost.options"
#================================================= #=================================================
# SETUP SYSTEMD # SETUP SYSTEMD