commit 85999a6d814e47130ac5d687a932736fde6bf557 Author: Kirill A. Korinskiy Date: Tue Aug 4 14:07:45 2009 +0400 Add a premount and postumount action scripts to vzctl diff --git a/include/fs.h b/include/fs.h index b030a75..2ce41d8 100644 --- a/include/fs.h +++ b/include/fs.h @@ -28,6 +28,8 @@ #define UMOUNT_PREFIX "umount" #define START_PREFIX "start" #define STOP_PREFIX "stop" +#define PRE_MOUNT_PREFIX "premount" +#define POST_UMOUNT_PREFIX "postumount" #define DESTR_PREFIX "destroyed" diff --git a/src/lib/fs.c b/src/lib/fs.c index 1514129..f2b448f 100644 --- a/src/lib/fs.c +++ b/src/lib/fs.c @@ -136,6 +136,21 @@ int vps_mount(vps_handler *h, envid_t veid, fs_param *fs, dq_param *dq, logger(-1, 0, "Container is already mounted"); return 0; } + /* Execute pre mount scripts */ + if (!(skip & SKIP_ACTION_SCRIPT)) { + snprintf(buf, sizeof(buf), "%svps.%s", VPS_CONF_DIR, + PRE_MOUNT_PREFIX); + for (i = 0; i < 2; i++) { + if (run_pre_script(veid, buf)) { + logger(-1, 0, "Error executing mount script %s", + buf); + fsumount(veid, fs->root); + return VZ_ACTIONSCRIPT_ERROR; + } + snprintf(buf, sizeof(buf), "%s%d.%s", VPS_CONF_DIR, + veid, PRE_MOUNT_PREFIX); + } + } if ((ret = fsmount(veid, fs, dq))) return ret; /* Execute per-CT & global mount scripts */ @@ -194,6 +209,19 @@ int vps_umount(vps_handler *h, envid_t veid, char *root, skipFlags skip) } if (!(ret = fsumount(veid, root))) logger(0, 0, "Container is unmounted"); + if (!(skip & SKIP_ACTION_SCRIPT)) { + snprintf(buf, sizeof(buf), "%s%d.%s", VPS_CONF_DIR, + veid, POST_UMOUNT_PREFIX); + for (i = 0; i < 2; i++) { + if (run_pre_script(veid, buf)) { + logger(-1, 0, "Error executing umount script %s", + buf); + return VZ_ACTIONSCRIPT_ERROR; + } + snprintf(buf, sizeof(buf), "%svps.%s", VPS_CONF_DIR, + POST_UMOUNT_PREFIX); + } + } return ret; }