On Fri, Jan 16, 2015 at 07:22:17PM +0000, Serge Hallyn wrote: > If you have 'lxc.include = /some/dir' and /some/dir is a directory, then any > '*.conf" files under /some/dir will be read. > > Signed-off-by: Serge Hallyn <serge.hal...@ubuntu.com>
Some comments below. Also, I'm wondering, what happens when you save_config(), does the save config retain the lxc.include = /path/to/dir or is that expanded to individual includes for each dir? > --- > src/lxc/bdev.c | 9 --------- > src/lxc/confile.c | 55 > +++++++++++++++++++++++++++++++++++++++++++++++++++++++ > src/lxc/utils.c | 9 +++++++++ > src/lxc/utils.h | 1 + > 4 files changed, 65 insertions(+), 9 deletions(-) > > diff --git a/src/lxc/bdev.c b/src/lxc/bdev.c > index 5c6b00a..c0cc050 100644 > --- a/src/lxc/bdev.c > +++ b/src/lxc/bdev.c > @@ -357,15 +357,6 @@ struct bdev_type { > const struct bdev_ops *ops; > }; > > -static int is_dir(const char *path) > -{ > - struct stat statbuf; > - int ret = stat(path, &statbuf); > - if (ret == 0 && S_ISDIR(statbuf.st_mode)) > - return 1; > - return 0; > -} > - > static int dir_detect(const char *path) > { > if (strncmp(path, "dir:", 4) == 0) > diff --git a/src/lxc/confile.c b/src/lxc/confile.c > index 0366959..e73f97c 100644 > --- a/src/lxc/confile.c > +++ b/src/lxc/confile.c > @@ -37,6 +37,7 @@ > #include <netinet/in.h> > #include <net/if.h> > #include <time.h> > +#include <dirent.h> > > #include "parse.h" > #include "config.h" > @@ -1663,9 +1664,63 @@ int append_unexp_config_line(const char *line, struct > lxc_conf *conf) > return 0; > } > > +static int do_includedir(const char *dirp, struct lxc_conf *lxc_conf) > +{ > + struct dirent dirent, *direntp; > + DIR *dir; > + char path[MAXPATHLEN]; > + int ret = -1, len; > + > + dir = opendir(dirp); > + if (!dir) { > + SYSERROR("failed to open '%s'", dirp); > + return -1; > + } > + > + while (!readdir_r(dir, &dirent, &direntp)) { > + const char *fnam; > + if (!direntp) > + break; > + > + fnam = direntp->d_name; > +INFO("looking at %s", fnam); ^ Probably should go away? > + if (!strcmp(fnam, ".")) > + continue; > + > + if (!strcmp(fnam, "..")) > + continue; > + > + len = strlen(fnam); > + if (len < 6 || strncmp(fnam+len-5, ".conf", 5) != 0) > + continue; > + len = snprintf(path, MAXPATHLEN, "%s/%s", dirp, fnam); > + if (len < 0 || len >= MAXPATHLEN) { > + ERROR("lxc.include filename too long under '%s'", dirp); > + ret = -1; > + goto out; > + } > +INFO("reading %s", path); Too > + > + ret = lxc_config_read(path, lxc_conf, true); > + if (ret < 0) > + goto out; > + } > + ret = 0; > + > +out: > +INFO("returning %d", ret); Too > + if (closedir(dir)) > + WARN("lxc.include dir: failed to close directory"); > + > + return ret; > +} > + > static int config_includefile(const char *key, const char *value, > struct lxc_conf *lxc_conf) > { > + if (is_dir(value)) > + return do_includedir(value, lxc_conf); > + > return lxc_config_read(value, lxc_conf, true); > } > > diff --git a/src/lxc/utils.c b/src/lxc/utils.c > index 2037ef0..23b1b11 100644 > --- a/src/lxc/utils.c > +++ b/src/lxc/utils.c > @@ -1497,3 +1497,12 @@ int print_to_file(const char *file, const char > *content) > fclose(f); > return ret; > } > + > +int is_dir(const char *path) > +{ > + struct stat statbuf; > + int ret = stat(path, &statbuf); > + if (ret == 0 && S_ISDIR(statbuf.st_mode)) > + return 1; > + return 0; > +} > diff --git a/src/lxc/utils.h b/src/lxc/utils.h > index 5ffafca..ae2c851 100644 > --- a/src/lxc/utils.h > +++ b/src/lxc/utils.h > @@ -284,3 +284,4 @@ bool file_exists(const char *f); > char *choose_init(const char *rootfs); > int print_to_file(const char *file, const char *content); > bool switch_to_ns(pid_t pid, const char *ns); > +int is_dir(const char *path); > -- > 2.1.0 > > _______________________________________________ > lxc-devel mailing list > lxc-devel@lists.linuxcontainers.org > http://lists.linuxcontainers.org/listinfo/lxc-devel -- Stéphane Graber Ubuntu developer http://www.ubuntu.com
signature.asc
Description: Digital signature
_______________________________________________ lxc-devel mailing list lxc-devel@lists.linuxcontainers.org http://lists.linuxcontainers.org/listinfo/lxc-devel