Skip to content

Commit

Permalink
add start-hoost hook support
Browse files Browse the repository at this point in the history
  • Loading branch information
asac committed May 17, 2022
1 parent bbb1b97 commit 3b664dc
Show file tree
Hide file tree
Showing 5 changed files with 33 additions and 6 deletions.
6 changes: 6 additions & 0 deletions paths.c
Original file line number Diff line number Diff line change
Expand Up @@ -239,6 +239,7 @@ void pv_paths_volumes_plat_file(char *buf, size_t size, const char *plat, const
#define PV_LIB_MODULES_PATHF "%s/modules/%s"
#define PV_LIB_VOLMOUNT_PATHF "%s/pv/volmount/%s/%s"
#define PV_LIB_HOOK_PATHF "%s/pv/hooks_lxc-mount.d/%s"
#define PV_LIB_HOOK_START_HOST_PATHF "%s/pv/hooks_lxc-start-host.d/%s"
#define PV_LIB_HOOKS_EARLY_SPAWN "%s/pv/hooks_early.spawn/%s"

void pv_paths_lib_plugin(char *buf, size_t size, const char *name)
Expand All @@ -261,6 +262,11 @@ void pv_paths_lib_hook(char *buf, size_t size, const char *name)
SNPRINTF_WTRUNC(buf, size, PV_LIB_HOOK_PATHF, pv_config_get_system_libdir(), name);
}

void pv_paths_lib_hook_start_host(char *buf, size_t size, const char *name)
{
SNPRINTF_WTRUNC(buf, size, PV_LIB_HOOK_START_HOST_PATHF, pv_config_get_system_libdir(), name);
}

void pv_paths_lib_hooks_early_spawn(char *buf, size_t size, const char *name)
{
SNPRINTF_WTRUNC(buf, size, PV_LIB_HOOKS_EARLY_SPAWN, pv_config_get_system_libdir(), name);
Expand Down
1 change: 1 addition & 0 deletions paths.h
Original file line number Diff line number Diff line change
Expand Up @@ -100,6 +100,7 @@ void pv_paths_lib_plugin(char *buf, size_t size, const char *name);
void pv_paths_lib_modules(char *buf, size_t size, const char *release);
void pv_paths_lib_volmount(char *buf, size_t size, const char *type, const char *name);
void pv_paths_lib_hook(char *buf, size_t size, const char *name);
void pv_paths_lib_hook_start_host(char *buf, size_t size, const char *name);
void pv_paths_lib_hooks_early_spawn(char *buf, size_t size, const char *name);

void pv_paths_root_file(char *buf, size_t size, const char *path);
Expand Down
5 changes: 3 additions & 2 deletions platforms.c
Original file line number Diff line number Diff line change
Expand Up @@ -362,15 +362,16 @@ static int load_pv_plugin(struct pv_cont_ctrl *c)
else
pv_log(ERROR, "Couldn't locate symbol pv_set_pv_instance_fn");

void (*__pv_paths)(void*, void*, void*, void*, void*, void*, void*) = dlsym(lib, "pv_set_pv_paths_fn");
void (*__pv_paths)(void*, void*, void*, void*, void*, void*, void*, void*) = dlsym(lib, "pv_set_pv_paths_fn");
if (__pv_paths)
__pv_paths(pv_paths_pv_file,
pv_paths_pv_log,
pv_paths_pv_log_plat,
pv_paths_pv_log_file,
pv_paths_pv_usrmeta_key,
pv_paths_pv_usrmeta_plat_key,
pv_paths_lib_hook);
pv_paths_lib_hook,
pv_paths_lib_hook_start_host);
else
pv_log(ERROR, "Couldn't locate symbol pv_set_pv_paths_fn");

Expand Down
24 changes: 21 additions & 3 deletions plugins/pv_lxc.c
Original file line number Diff line number Diff line change
Expand Up @@ -62,6 +62,7 @@ void (*__pv_paths_pv_log_file)(char*, size_t, const char*, const char*, const ch
void (*__pv_paths_pv_usrmeta_key)(char*, size_t, const char*) = NULL;
void (*__pv_paths_pv_usrmeta_plat_key)(char*, size_t, const char*, const char*) = NULL;
void (*__pv_paths_lib_hook)(char*, size_t, const char*) = NULL;
void (*__pv_paths_lib_hook_start_host)(char*, size_t, const char*) = NULL;

void pv_set_new_log_fn(void *fn_pv_new_log)
{
Expand All @@ -79,7 +80,8 @@ void pv_set_pv_paths_fn(void *fn_pv_paths_pv_file,
void *fn_pv_paths_pv_log_file,
void *fn_pv_paths_pv_usrmeta_key,
void *fn_pv_paths_pv_usrmeta_plat_key,
void *fn_pv_paths_lib_hook)
void *fn_pv_paths_lib_hook,
void *fn_pv_paths_lib_hook_start_host)
{
__pv_paths_pv_file = fn_pv_paths_pv_file;
__pv_paths_pv_log = fn_pv_paths_pv_log;
Expand All @@ -88,6 +90,7 @@ void pv_set_pv_paths_fn(void *fn_pv_paths_pv_file,
__pv_paths_pv_usrmeta_key = fn_pv_paths_pv_usrmeta_key;
__pv_paths_pv_usrmeta_plat_key = fn_pv_paths_pv_usrmeta_plat_key;
__pv_paths_lib_hook = fn_pv_paths_lib_hook;
__pv_paths_lib_hook_start_host = fn_pv_paths_lib_hook_start_host;
}

static int pv_lxc_get_lxc_log_level()
Expand Down Expand Up @@ -331,7 +334,7 @@ static void pv_setup_lxc_container(struct lxc_container *c,
}

/*
* Enable mount hooks
* Enable lxc.hook.mount hooks
*/
DIR *d;
struct dirent *dir;
Expand All @@ -340,12 +343,27 @@ static void pv_setup_lxc_container(struct lxc_container *c,
if (!d)
return;

while ((dir = readdir(d)) != NULL) {
while (d && (dir = readdir(d)) != NULL) {
if (!strcmp(dir->d_name, ".") || !strcmp(dir->d_name, ".."))
continue;
__pv_paths_lib_hook(path, PATH_MAX, dir->d_name);
c->set_config_item(c, "lxc.hook.mount", path);
}

if (d)
closedir(d);

__pv_paths_lib_hook_start_host(path, PATH_MAX, "");
d = opendir(path);
if (!d)
return;

while ((dir = readdir(d)) != NULL) {
if (!strcmp(dir->d_name, ".") || !strcmp(dir->d_name, ".."))
continue;
__pv_paths_lib_hook_start_host(path, PATH_MAX, dir->d_name);
c->set_config_item(c, "lxc.hook.start-host", path);
}
closedir(d);
}

Expand Down
3 changes: 2 additions & 1 deletion plugins/pv_lxc.h
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,8 @@ void pv_set_pv_paths_fn(void *fn_pv_paths_pv_file,
void *fn_pv_paths_pv_log_file,
void *fn_pv_paths_pv_usrmeta_key,
void *fn_pv_paths_pv_usrmeta_plat_key,
void *fn_pv_paths_lib_hook);
void *fn_pv_paths_lib_hook,
void *fn_pv_paths_lib_hook_start_host);

void* pv_start_container(struct pv_platform *p, const char *rev, char *conf_file, void *data);
void* pv_stop_container(struct pv_platform *p, char *conf_file, void *data);
Expand Down

0 comments on commit 3b664dc

Please sign in to comment.