Files
puppet-openstackid/files/functions
smarcet ca788b2a8b Fixed PIP version
fixed pip install to 20.3.4 bc latest one
(21.0.0) breaks python build

Change-Id: I0266509ad07d0d28c509b446f40cabc7ca7ab8ef
Signed-off-by: smarcet <smarcet@gmail.com>
2021-01-27 12:13:54 -03:00

294 lines
8.4 KiB
Plaintext

function print_help {
echo "Usage: `basename $0` command [options]"
echo ""
echo "Commands:"
echo " status [site] return status information about site configurations"
echo " init <site> initialize site structure"
echo " update <site> update to new version"
echo ""
}
function clear_redis_cache {
echo "running redis FLUSHDB ..."
echo "FLUSHDB" | redis-cli -h 127.0.0.1 -p $REDIS_PORT -a "$REDIS_PASSWORD"
echo "running redis FLUSHALL ..."
echo "FLUSHALL" | redis-cli -h 127.0.0.1 -p $REDIS_PORT -a "$REDIS_PASSWORD"
}
function clear_orm_cache {
echo "clearing doctrine metadata"
php artisan doctrine:clear:metadata:cache
echo "clearing doctrine query cache"
php artisan doctrine:clear:query:cache
echo "clearing doctrine result cache"
php artisan doctrine:clear:result:cache
echo "generating doctrine proxies"
php artisan doctrine:generate:proxies
}
function clear_laravel_cache {
php artisan route:clear
php artisan route:cache
php artisan config:cache
php artisan view:clear
php artisan view:cache
}
function check_laravel_storage_structure {
# check for new storage structure ( LV 5.x)
if [[ ! -d $SITE_ROOT/storage/framework ]]; then
mkdir -p $SITE_ROOT/storage/framework
mkdir -p $SITE_ROOT/storage/framework/cache
mkdir -p $SITE_ROOT/storage/framework/views
mkdir -p $SITE_ROOT/storage/framework/sessions
fi
if [[ ! -d $SITE_ROOT/storage/app ]]; then
mkdir -p $SITE_ROOT/storage/app
mkdir -p $SITE_ROOT/storage/app/public
fi
if [[ ! -d $SITE_ROOT/storage/logs ]]; then
mkdir -p $SITE_ROOT/storage/logs
fi
}
function set_laravel_storage_permissions {
chown -R $FILE_OWNER:$FILE_GROUP $SITE_ROOT/storage
chmod 02770 $SITE_ROOT/storage;
find $SITE_ROOT/storage/ -type d -exec chmod 0775 {} \;
find $SITE_ROOT/storage/ -type f -exec chmod 0664 {} \;
# set html purifier cache permission
chmod 0770 vendor/ezyang/htmlpurifier/library/HTMLPurifier/DefinitionCache/Serializer
}
function set_python_venv {
chmod 0775 $target_dir/app/Console/Commands/SpammerProcess
chown :www-data $target_dir/app/Console/Commands/SpammerProcess
cd $target_dir/app/Console/Commands/SpammerProcess
python3 -m venv env
source env/bin/activate
pip install "pip==20.3.4"
pip install --upgrade setuptools
pip install wheel
pip install -r requirements.txt
deactivate
cd $target_dir
}
function site_init {
if [ ! $1 ]; then
echo "ERROR: site parameter mandatory"
exit 1
fi
CONF_PATH="$CONF_DIR/conf.d/$1.conf"
if [ ! -f $CONF_PATH ]; then
echo "Site configuration not found: " $1
exit 1
fi
source $CONF_PATH
if [ -f "$SITE_ROOT/w/public/index.php" ]; then
echo "Cannot override an existing deployment: $SITE_ROOT/w"
exit 1
fi
# cleanup previous broken deployment
rm -rf $SITE_ROOT/slot0
# create directory structure
for dir in slot0 slot1; do
mkdir -p $SITE_ROOT/$dir
chown $FILE_OWNER:$FILE_GROUP $SITE_ROOT/$dir
done
target_dir="$SITE_ROOT/slot0"
# fetch catalog and write actual version
fetch_catalog
RELEASE_VERSION=`catalog_get_version`
echo $RELEASE_VERSION > $SITE_ROOT/slot0/release
# fetch and extract release tarball
umask 0027
if [[ $SOURCE_TARBALL == http* ]]; then
echo "Download from http!"
curl $SOURCE_TARBALL | tar -xzv -C $target_dir --strip-components 1 --no-same-permissions
else
echo "extract from local file system"
if [ ! -f $SOURCE_TARBALL ]; then
echo "Source tarball not found: $SOURCE_TARBALL"
exit 1
fi
tar -xzvf $SOURCE_TARBALL -C $target_dir --strip-components 1 --no-same-permissions
fi
chown -R $FILE_OWNER:$FILE_GROUP $target_dir
umask 0022
# link configuration files managed by puppet
ln -sf /etc/openstackid/.env $target_dir/.env
# convert app/storage into symlink and set permissions
mv $target_dir/storage $SITE_ROOT/
# link shared app/storage directory
rm -rf $target_dir/storage
ln -s $SITE_ROOT/storage $target_dir
check_laravel_storage_structure
# set artisan execution permissions
cd $target_dir && chmod 0770 artisan
clear_redis_cache
clear_orm_cache
clear_laravel_cache
echo "running db migrations";
php artisan doctrine:migrations:migrate --connection=model --force --env=$LARAVEL_ENV
if [[ $USE_DB_SEEDING -eq 1 ]]; then
php artisan db:seed --env=$LARAVEL_ENV --force
fi
sudo npm install
sudo npm run build
set_laravel_storage_permissions
set_python_venv
# activate site
rm -rf $SITE_ROOT/w
ln -s $SITE_ROOT/slot0 $SITE_ROOT/w
echo "Restarting laravel queue worker ..."
php artisan queue:restart
echo "supervisorctl reload"
supervisorctl reload
}
function site_status {
if [ ! $1 ]; then
echo "ERROR: site parameter mandatory"
exit 1
fi
CONF_PATH="$CONF_DIR/conf.d/$1.conf"
if [ ! -f $CONF_PATH ]; then
echo "Site configuration not found: $1"
exit 0
fi
source $CONF_PATH
if [ ! -f "$SITE_ROOT/w/public/index.php" ]; then
if [ -d "$SITE_ROOT/slot0" ]; then
echo "PENDING"
else
echo "N/A"
exit 1
fi
else
fetch_catalog
REMOTE_VERSION=`catalog_get_version`
RELEASE_VERSION=$(head -n 1 $SITE_ROOT/w/release)
if [ "$REMOTE_VERSION" == "$RELEASE_VERSION" ]; then
echo "INSTALLED [$RELEASE_VERSION]"
else
echo "UPDATE AVAILABLE [$RELEASE_VERSION-$REMOTE_VERSION]"
fi
fi
}
function fetch_catalog {
curl --silent $SOURCE_ROOT > $SITE_ROOT/releases.lst
grep -q "^<!DOCTYPE HTML PUBLIC" $SITE_ROOT/releases.lst
}
function catalog_get_version {
RAW_LINE=`cat $SITE_ROOT/releases.lst | grep "$RELEASE_NAME" | sed "s/<[^>]\+>//g" | sed -r "s/^$RELEASE_NAME//"`
RELEASE_DATE=`echo $RAW_LINE | awk '{ print $1 " " $2}'`
echo $RELEASE_DATE
}
function site_update {
if [ ! $1 ]; then
echo "ERROR: missing site parameter"
exit 1
fi
CONF_PATH="$CONF_DIR/conf.d/$1.conf"
if [ ! -f $CONF_PATH ]; then
echo "Site configuration not found: $1"
exit 0
fi
source $CONF_PATH
SITE_LINK=`readlink -f $SITE_ROOT/w`
ACTIVE_SLOT=`basename $SITE_LINK`
case $ACTIVE_SLOT in
slot0)
TARGET_SLOT='slot1'
;;
slot1)
TARGET_SLOT='slot0'
;;
*)
echo "Invalid active slot"
exit 1
esac
echo "Target slot: $TARGET_SLOT"
target_dir="$SITE_ROOT/$TARGET_SLOT"
rm -rf $target_dir
mkdir $target_dir
# fetch catalog and write actual version
fetch_catalog
RELEASE_VERSION=`catalog_get_version`
echo $RELEASE_VERSION > $target_dir/release
# fetch and extract release tarball
umask 0027
if [[ $SOURCE_TARBALL == http* ]]; then
echo "Download from http!"
curl $SOURCE_TARBALL | tar -xzv -C $target_dir --strip-components 1 --no-same-permissions
else
echo "extract from local file system"
if [ ! -f $SOURCE_TARBALL ]; then
echo "Source tarball not found: $SOURCE_TARBALL"
exit 1
fi
tar -xzvf $SOURCE_TARBALL -C $target_dir --strip-components 1 --no-same-permissions
fi
chown -R $FILE_OWNER:$FILE_GROUP $target_dir
umask 0022
# link configuration files managed by puppet
ln -sf /etc/openstackid/.env $target_dir/.env
# link shared app/storage directory
rm -rf $target_dir/storage
ln -s $SITE_ROOT/storage $target_dir
check_laravel_storage_structure
# set artisan exec permissions
cd $target_dir
chmod 0770 artisan
clear_redis_cache
clear_orm_cache
clear_laravel_cache
echo "running db migrations"
php artisan doctrine:migrations:migrate --connection=model --force --env=$LARAVEL_ENV
sudo npm install
sudo npm run build
set_laravel_storage_permissions
set_python_venv
# activate site
rm -rf $SITE_ROOT/w
ln -s $target_dir $SITE_ROOT/w
# to reset op cache
/usr/sbin/service $PHP_SERVICE_NAME restart
echo "Restarting laravel queue worker ..."
php artisan queue:restart
echo "supervisorctl reload"
supervisorctl reload
}