Invoke user hooks after commands
It is a feature request.
I want to run script every time Tiki-Manager does something. I want to address the following use cases:
- Send xmpp message when backup, clone and cloneupgrade fails
- Encrypt the backup files
- Copy backup to somewhere else using other tools
The Git, Certbot and Zabbix have an interesting approach: they have a folder where the user can add scripts to be invoked after doing something. Certbot has the folders /etc/letsencrypt/renewal-hooks/{deploy,post,pre}
, where the user can set scripts to run before and after getting a certificate. A bare Git repository has the hooks
folder, where the user can set scripts to process commits being pushed. Zabbix has the folder /usr/lib/zabbix/{externalscripts,alertscripts}
, where the user can set scripts to run everytime zabbix wants to notify a problem.
How I imagine:
- Add the folder hooks to Tiki-Manager;
tiki-manager
├── hooks
└── ...
- Create a script
tiki-manager
├── hooks
│ └── post-instance-backup.sh
└── ...
#!/bin/bash
# ./tiki-manager/hooks/post-instance-backup.sh
# Tiki-Manager provides the instance ID and the created backup file path in the
# stdin, one information per line, equivalent as shown below
#
# {
# echo "5";
# echo "example.com";
# echo "5-example.com/archive/5-example.com_2021-04-29_00-06-56.tar.bz2";
# } | ./post-instance-backup.sh
#
# Tiki-Manager would also forward the environment variables, so variables like
# below would be available in this script.
# * ${CACHE_FOLDER}
# * ${CONFIG_FOLDER}
# * ${TEMP_FOLDER}
# * ${RSYNC_FOLDER}
# * ${MOUNT_FOLDER}
# * ${BACKUP_FOLDER}
# * ${ARCHIVE_FOLDER}
# * ${SCRIPTS_FOLDER}
# * ${TRIM_LOGS}
# * ${TRIM_DATA}
# * ${SSH_CONFIG}
# * ${TRIM_SRC_FOLDER}
S3_BACKUP_FOLDER=s3://example.com/tiki-manager/backup/
read instance_id;
read instance_name;
read backup_rel_path;
backup_abs_path="${BACKUP_FOLDER}/${backup_rel_path}"
backup_filename=$(basename "${backup_rel_path}")
aws s3 cp "${backup_abs_path}" "${S3_BACKUP_FOLDER}"
aws s3 ls s3://example.com/tiki-manager/backup/ | grep "${backup_filename}"
test "$?" = "0" || mail -s "[${HOST}] Error copying ${backup_filename} to S3" monitoring@example.com <<EOF
The file '${backup_abs_path}' was not copied to ${S3_BACKUP_FOLDER} because of
an error not identified.
EOF
Almost every command would have a pre/post script to be called
Tiki-Manager Command | pre command script | post command script |
---|---|---|
backups:delete | pre-backups-delete.sh | post-backups-delete.sh |
backups:setup | pre-backups-setup.sh | post-backups-setup.sh |
cache:clear | pre-cache-clear.sh | post-cache-clear.sh |
database:delete | pre-database-delete.sh | post-database-delete.sh |
database:view | pre-database-view.sh | post-database-view.sh |
instance:access | pre-instance-access.sh | post-instance-access.sh |
instance:backup | pre-instance-backup.sh | post-instance-backup.sh |
instance:blank | pre-instance-blank.sh | post-instance-blank.sh |
instance:check | pre-instance-check.sh | post-instance-check.sh |
instance:clone | pre-instance-clone.sh | post-instance-clone.sh |
instance:cloneandupgrade | pre-instance-cloneandupgrade.sh | post-instance-cloneandupgrade.sh |
instance:console | pre-instance-console.sh | post-instance-console.sh |
instance:copysshkey | pre-instance-copysshkey.sh | post-instance-copysshkey.sh |
instance:create | pre-instance-create.sh | post-instance-create.sh |
instance:delete | pre-instance-delete.sh | post-instance-delete.sh |
instance:detect | pre-instance-detect.sh | post-instance-detect.sh |
instance:edit | pre-instance-edit.sh | post-instance-edit.sh |
instance:fixpermissions | pre-instance-fixpermissions.sh | post-instance-fixpermissions.sh |
instance:import | pre-instance-import.sh | post-instance-import.sh |
instance:list | pre-instance-list.sh | post-instance-list.sh |
instance:maintenance | pre-instance-maintenance.sh | post-instance-maintenance.sh |
instance:profile | pre-instance-profile.sh | post-instance-profile.sh |
instance:restore | pre-instance-restore.sh | post-instance-restore.sh |
instance:stats | pre-instance-stats.sh | post-instance-stats.sh |
instance:update | pre-instance-update.sh | post-instance-update.sh |
instance:upgrade | pre-instance-upgrade.sh | post-instance-upgrade.sh |
instance:verify | pre-instance-verify.sh | post-instance-verify.sh |
instance:watch | pre-instance-watch.sh | post-instance-watch.sh |
logs:clear | pre-logs-clear.sh | post-logs-clear.sh |
manager:check | pre-manager-check.sh | post-manager-check.sh |
manager:info | pre-manager-info.sh | post-manager-info.sh |
manager:report | pre-manager-report.sh | post-manager-report.sh |
manager:reset | pre-manager-reset.sh | post-manager-reset.sh |
manager:setup | pre-manager-setup.sh | post-manager-setup.sh |
manager:update | pre-manager-update.sh | post-manager-update.sh |
setup:clone | pre-setup-clone.sh | post-setup-clone.sh |
tiki:versions | pre-tiki-versions.sh | post-tiki-versions.sh |
webmanager:block | pre-webmanager-block.sh | post-webmanager-block.sh |
webmanager:enable | pre-webmanager-enable.sh | post-webmanager-enable.sh |