forked from ISTI-ansible-roles/ansible-roles
library/roles/smartgears/smartgears_egi_image/templates/smartgears-setup.sh.j2: Modifications to the smartgears setup script so it can now handle different java heap sizes based on the available memory. The script now handles the smartgears 2.0 token used to get the scopes tokens.
This commit is contained in:
parent
e49a49e4e2
commit
4b9201e6f5
|
@ -1,11 +1,16 @@
|
|||
#!/bin/bash
|
||||
|
||||
SM_DIR={{ smartgears_install_path }}
|
||||
SM_CONF_F=${SM_DIR}/container.xml
|
||||
SM_CONF_F={{ smartgears_user_home }}/.containerxml/1-container.xml
|
||||
SM_CONF_TOKENS_F={{ smartgears_user_home }}/.containerxml/2-container.xml
|
||||
SM_CONF_TAIL_F={{ smartgears_user_home }}/.containerxml/3-container.xml
|
||||
SM_CONF_SCOPES_F=/usr/local/etc/scopes.list
|
||||
SM_CONF_DEST_F=${SM_DIR}/container.xml
|
||||
SM_LIB_DIR=${SM_DIR}/lib
|
||||
SM_STATE_DIR=${SM_DIR}/state/
|
||||
GET_KEYS_SCRIPT=/usr/local/bin/get-gcube-keys
|
||||
SVC=tomcat-instance-{{ smartgears_http_port }}
|
||||
TOMCAT_DEFAULT=/etc/default/${SVC}
|
||||
LOG_FILE=/var/log/smartgears-node-setup.log
|
||||
HOSTS_FILE=/etc/hosts
|
||||
FQDN_HOST=
|
||||
|
@ -13,94 +18,182 @@ PUB_FQDN_HOST=
|
|||
PUBLIC_IP=
|
||||
MAIN_IP=
|
||||
RETVAL=0
|
||||
MEM=$( free -m | egrep ^Mem | awk '{ print $2 }' )
|
||||
JAVA_MAX_HEAP=$( expr $MEM - 2048 )
|
||||
|
||||
# Init some variables that should be passed
|
||||
if [ -z "${SMARTGEARS_SCOPES}" ] ; then
|
||||
SMARTGEARS_SCOPES=
|
||||
fi
|
||||
if [ -z "${HOST}" ] ; then
|
||||
HOST=
|
||||
fi
|
||||
|
||||
{% raw %}
|
||||
> $LOG_FILE
|
||||
if [ -z "${HOST}" ] ; then
|
||||
echo "No hostname was passed from the outside. Trying to find it out by ourselves" >> $LOG_FILE
|
||||
FQDN_HOST=$( /bin/hostname -f )
|
||||
if [ -z "${FQDN_HOST}" ] ; then
|
||||
echo "The machine has no FQDN. Revert to plain hostname" >> $LOG_FILE
|
||||
HOST=$( /bin/hostname )
|
||||
echo "Setting the plain hostname: $HOST" >> $LOG_FILE
|
||||
else
|
||||
HOST=$FQDN_HOST
|
||||
function setup_hostname() {
|
||||
echo "-- setup_hostname" >> $LOG_FILE
|
||||
if [ -z "${HOST}" ] ; then
|
||||
echo "No hostname was passed from the outside. Trying to find it out by ourselves" >> $LOG_FILE
|
||||
FQDN_HOST=$( /bin/hostname -f )
|
||||
if [ -z "${FQDN_HOST}" ] ; then
|
||||
echo "The machine has no FQDN. Revert to plain hostname if available" >> $LOG_FILE
|
||||
HOST=$( /bin/hostname )
|
||||
echo "Setting the plain hostname: $HOST" >> $LOG_FILE
|
||||
else
|
||||
HOST=$FQDN_HOST
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
# We don't know if we have been assigned a private or public IP address
|
||||
PUBLIC_IP=$( wget http://ipecho.net/plain -qO - )
|
||||
MAIN_IP=$( ip addr show scope global dev eth0 | grep inet | awk '{ print $2 }' | cut -d "/" -f 1 )
|
||||
echo "Our main IP is ${MAIN_IP}" >> $LOG_FILE
|
||||
if [ -z $PUBLIC_IP ] ; then
|
||||
# We have some kind of problem
|
||||
echo "We cannot obtain our public IP from outside. Using our main IP address as public IP" >> $LOG_FILE
|
||||
PUBLIC_IP=$MAIN_IP
|
||||
else
|
||||
echo "Our public IP is ${PUBLIC_IP}" >> $LOG_FILE
|
||||
fi
|
||||
# Try to know our public FQDN
|
||||
TMP_FQDN_HOST=$( host $PUBLIC_IP )
|
||||
RET_FQDN=$?
|
||||
if [ $RET_FQDN -eq 0 ] ; then
|
||||
PUB_FQDN_HOST=$( host $PUBLIC_IP | awk '{print $5}' | sed -e 's/\.$//g' )
|
||||
fi
|
||||
# Set the hosts file with the new data
|
||||
grep -v $HOST $HOSTS_FILE > $HOSTS_FILE.tmp
|
||||
echo "${PUBLIC_IP} ${FQDN_HOST} ${PUB_FQDN_HOST} ${HOST}" >> $HOSTS_FILE.tmp
|
||||
mv $HOSTS_FILE.tmp $HOSTS_FILE
|
||||
chmod 644 $HOSTS_FILE
|
||||
chown root:root $HOSTS_FILE
|
||||
|
||||
if [ -z "${INFRA_NAME}" ] ; then
|
||||
echo "The infrastructure name is void" >> $LOG_FILE
|
||||
RETVAL=1
|
||||
fi
|
||||
if [ -z "${SCOPE}" ] ; then
|
||||
echo "The scope is void" >> $LOG_FILE
|
||||
RETVAL=1
|
||||
fi
|
||||
if [ -z "${COUNTRY}" ] ; then
|
||||
echo "The country code is void" >> $LOG_FILE
|
||||
RETVAL=1
|
||||
elif [ ${#COUNTRY} -ne 2 ] ; then
|
||||
echo "The country code is wrong. It must be two characters long" >> $LOG_FILE
|
||||
RETVAL=1
|
||||
fi
|
||||
if [ $RETVAL -eq 1 ] ; then
|
||||
echo "Exiting because of errors. The SmartExecutor will not start" >> $LOG_FILE
|
||||
exit 1
|
||||
fi
|
||||
}
|
||||
|
||||
# We use the public FQDN if there's one. Otherwise we use the public IP
|
||||
if [ ! -z ${PUB_FQDN_HOST} ] ; then
|
||||
sed -i -e "s#@SMARTGEARS_HOSTNAME@#${PUB_FQDN_HOST}#g" $SM_CONF_F
|
||||
else
|
||||
function find_public_ip() {
|
||||
echo "-- find_public_ip" >> $LOG_FILE
|
||||
# We don't know if we have been assigned a private or public IP address
|
||||
PUBLIC_IP=$( wget http://ipecho.net/plain -qO - )
|
||||
MAIN_IP=$( ip addr show scope global dev eth0 | grep inet | awk '{ print $2 }' | cut -d "/" -f 1 )
|
||||
echo "Our main IP is ${MAIN_IP}" >> $LOG_FILE
|
||||
if [ -z $PUBLIC_IP ] ; then
|
||||
# We have some kind of problem
|
||||
echo "We cannot obtain our public IP from outside. Using our main IP address as public IP" >> $LOG_FILE
|
||||
PUBLIC_IP=$MAIN_IP
|
||||
else
|
||||
echo "Our public IP is ${PUBLIC_IP}" >> $LOG_FILE
|
||||
fi
|
||||
# Try to know our public FQDN
|
||||
TMP_FQDN_HOST=$( host $PUBLIC_IP )
|
||||
RET_FQDN=$?
|
||||
if [ $RET_FQDN -eq 0 ] ; then
|
||||
PUB_FQDN_HOST=$( host $PUBLIC_IP | awk '{print $5}' | sed -e 's/\.$//g' )
|
||||
fi
|
||||
}
|
||||
|
||||
function modify_hosts_file() {
|
||||
echo "-- modify_hosts_file" >> $LOG_FILE
|
||||
# Set the hosts file with the new data
|
||||
grep -v $HOST $HOSTS_FILE > $HOSTS_FILE.tmp
|
||||
if [ "${FQDN_HOST}" == "${HOST}" ] ; then
|
||||
FQDN_HOST=${HOST}.localhost
|
||||
fi
|
||||
echo "${PUBLIC_IP} ${FQDN_HOST} ${PUB_FQDN_HOST} ${HOST}" >> $HOSTS_FILE.tmp
|
||||
mv $HOSTS_FILE.tmp $HOSTS_FILE
|
||||
chmod 644 $HOSTS_FILE
|
||||
chown root:root $HOSTS_FILE
|
||||
}
|
||||
|
||||
function smartgears_config_parameters_check() {
|
||||
echo "-- smartgears_config_parameters_check" >> $LOG_FILE
|
||||
if [ -z "${INFRA_NAME}" ] ; then
|
||||
echo "The infrastructure name is void" >> $LOG_FILE
|
||||
RETVAL=1
|
||||
fi
|
||||
if [ -z "${SCOPE}" ] ; then
|
||||
echo "The scope is void" >> $LOG_FILE
|
||||
RETVAL=1
|
||||
fi
|
||||
if [ -z "${COUNTRY}" ] ; then
|
||||
echo "The country code is void, setting a default" >> $LOG_FILE
|
||||
export COUNTRY="IT"
|
||||
elif [ ${#COUNTRY} -ne 2 ] ; then
|
||||
echo "The country code is wrong. It must be two characters long" >> $LOG_FILE
|
||||
RETVAL=1
|
||||
fi
|
||||
if [ $RETVAL -eq 1 ] ; then
|
||||
echo "Exiting because of errors. The SmartExecutor will not start" >> $LOG_FILE
|
||||
exit 1
|
||||
fi
|
||||
}
|
||||
|
||||
function populate_head_containerxml() {
|
||||
echo "-- populate_head_containerxml" >> $LOG_FILE
|
||||
# We use the public FQDN if there's one. Otherwise we use the public IP
|
||||
if [ ! -z ${PUB_FQDN_HOST} ] ; then
|
||||
sed -i -e "s#@SMARTGEARS_HOSTNAME@#${PUB_FQDN_HOST}#g" $SM_CONF_F
|
||||
else
|
||||
sed -i -e "s#@SMARTGEARS_HOSTNAME@#${PUBLIC_IP}#g" $SM_CONF_F
|
||||
fi
|
||||
sed -i -e "s#@SMARTGEARS_INFRASTRUCTURE_NAME@#${INFRA_NAME}#g" $SM_CONF_F
|
||||
sed -i -e "s#@SMARTGEARS_VO_NAME@#${SCOPE}#g" $SM_CONF_F
|
||||
sed -i -e "s#@SMARTGEARS_COUNTRY@#${COUNTRY}#g" $SM_CONF_F
|
||||
sed -i -e "s#@SMARTGEARS_LOCATION@#${LOCATION}#g" $SM_CONF_F
|
||||
fi
|
||||
sed -i -e "s#@SMARTGEARS_INFRASTRUCTURE_NAME@#${INFRA_NAME}#g" $SM_CONF_F
|
||||
sed -i -e "s#@SMARTGEARS_VO_NAME@#${SCOPE}#g" $SM_CONF_F
|
||||
sed -i -e "s#@SMARTGEARS_COUNTRY@#${COUNTRY}#g" $SM_CONF_F
|
||||
sed -i -e "s#@SMARTGEARS_LOCATION@#${LOCATION}#g" $SM_CONF_F
|
||||
}
|
||||
|
||||
{% endraw %}
|
||||
|
||||
# Get and install the gcube security keys
|
||||
if [ -x $GET_KEYS_SCRIPT ] ; then
|
||||
echo "Getting the infrastructure keys" >> $LOG_FILE
|
||||
$GET_KEYS_SCRIPT ${INFRA_NAME} >> $LOG_FILE
|
||||
rm -f $GET_KEYS_SCRIPT
|
||||
echo "Done" >> $LOG_FILE
|
||||
else
|
||||
echo "Not getting the infrastructure keys, the script is not available." >> $LOG_FILE
|
||||
fi
|
||||
function set_scopes_list() {
|
||||
echo "-- set_scopes_list" >> $LOG_FILE
|
||||
if [ -z "${SMARTGEARS_SCOPES}" ] ; then
|
||||
SMARTGEARS_SCOPES=""
|
||||
echo "No scopes were defined" >> $LOG_FILE
|
||||
else
|
||||
echo "The scopes list is $SMARTGEARS_SCOPES" >> $LOG_FILE
|
||||
fi
|
||||
echo "SCOPES_LIST='${SMARTGEARS_SCOPES}'" > $SM_CONF_SCOPES_F
|
||||
}
|
||||
|
||||
/etc/init.d/${SVC} stop
|
||||
function get_smartgears_scope_tokens() {
|
||||
# The SMARTGEARS_TOKEN variable need to be set outside the contextualization script
|
||||
echo "-- get_smartgears_scope_tokens" >> $LOG_FILE
|
||||
if [ -z "${SMARTGEARS_TOKEN}" ] ; then
|
||||
echo "No infrastructure token was passed, aborting" >> $LOG_FILE
|
||||
echo "" > $SM_CONF_TOKENS_F
|
||||
else
|
||||
/usr/local/bin/get-scopes $( echo ${SMARTGEARS_TOKEN}) >> $LOG_FILE
|
||||
fi
|
||||
}
|
||||
|
||||
function merge_container_xml() {
|
||||
echo "-- merge_container_xml: compose the file" >> $LOG_FILE
|
||||
cat $SM_CONF_F $SM_CONF_TOKENS_F $SM_CONF_TAIL_F > $SM_CONF_DEST_F
|
||||
chown gcube:gcube $SM_CONF_DEST_F
|
||||
chmod 640 $SM_CONF_DEST_F
|
||||
}
|
||||
|
||||
function get_gcube_keys() {
|
||||
echo "-- get_gcube_keys" >> $LOG_FILE
|
||||
# Get and install the gcube security keys
|
||||
if [ -x $GET_KEYS_SCRIPT ] ; then
|
||||
echo "Getting the infrastructure keys" >> $LOG_FILE
|
||||
$GET_KEYS_SCRIPT ${INFRA_NAME} >> $LOG_FILE
|
||||
rm -f $GET_KEYS_SCRIPT
|
||||
echo "Done" >> $LOG_FILE
|
||||
else
|
||||
echo "Not getting the infrastructure keys, the script is not available." >> $LOG_FILE
|
||||
fi
|
||||
}
|
||||
|
||||
function set_java_heap() {
|
||||
echo "-- set_java_heap" >> $LOG_FILE
|
||||
if [ $JAVA_MAX_HEAP -lt 1024 ] ; then
|
||||
JAVA_MAX_HEAP=1024
|
||||
fi
|
||||
grep -v ^JAVA_HEAP $TOMCAT_DEFAULT > $TOMCAT_DEFAULT.tmp
|
||||
echo 'JAVA_HEAP="-Xms${JAVA_MAX_HEAP}m -Xmx${JAVA_MAX_HEAP}m"' >> $TOMCAT_DEFAULT.tmp
|
||||
mv $TOMCAT_DEFAULT.tmp $TOMCAT_DEFAULT
|
||||
}
|
||||
|
||||
|
||||
##############################
|
||||
#
|
||||
# Main
|
||||
#
|
||||
|
||||
/etc/init.d/${SVC} stop >> $LOG_FILE 2>&1
|
||||
rm -fr ${SM_STATE_DIR}/*
|
||||
rm -f ${SM_DIR}/ghn.log
|
||||
sleep 20
|
||||
/usr/sbin/update-rc.d ${SVC} enable
|
||||
/etc/init.d/${SVC} start
|
||||
|
||||
setup_hostname
|
||||
find_public_ip
|
||||
modify_hosts_file
|
||||
smartgears_config_parameters_check
|
||||
set_scopes_list
|
||||
populate_head_containerxml
|
||||
get_smartgears_scope_tokens
|
||||
merge_container_xml
|
||||
get_gcube_keys
|
||||
set_java_heap
|
||||
|
||||
/usr/sbin/update-rc.d ${SVC} enable >> $LOG_FILE 2>&1
|
||||
/etc/init.d/${SVC} start >> $LOG_FILE 2>&1
|
||||
|
||||
exit 0
|
||||
|
||||
|
||||
|
||||
|
|
Loading…
Reference in New Issue