Quoting Stéphane Graber (stgra...@ubuntu.com):
> Instead of having one function for each possible key in lxc.conf which
> doesn't really scale and requires an API update for every new key,
> switch to a generic lxc_get_global_config_item() function which takes a
> key name as argument.
> 
> Signed-off-by: Stéphane Graber <stgra...@ubuntu.com>

Acked-by: Serge E. Hallyn <serge.hal...@ubuntu.com>

> ---
>  src/lua-lxc/core.c             |  2 +-
>  src/lxc/arguments.c            |  2 +-
>  src/lxc/bdev.c                 | 12 ++++++------
>  src/lxc/cgroup.c               |  2 +-
>  src/lxc/commands.c             |  2 +-
>  src/lxc/conf.c                 |  2 +-
>  src/lxc/log.c                  |  2 +-
>  src/lxc/lxc_config.c           | 12 ++++++------
>  src/lxc/lxccontainer.c         | 25 +++++--------------------
>  src/lxc/lxccontainer.h         | 41 +++++------------------------------------
>  src/lxc/start.c                |  2 +-
>  src/lxc/utils.c                | 32 +-------------------------------
>  src/lxc/utils.h                | 12 ++----------
>  src/python-lxc/lxc.c           | 15 +++++++++++----
>  src/python-lxc/lxc/__init__.py |  2 +-
>  src/tests/snapshot.c           |  4 ++--
>  16 files changed, 46 insertions(+), 123 deletions(-)
> 
> diff --git a/src/lua-lxc/core.c b/src/lua-lxc/core.c
> index aa5831c..ae8ab01 100644
> --- a/src/lua-lxc/core.c
> +++ b/src/lua-lxc/core.c
> @@ -412,7 +412,7 @@ static int lxc_version_get(lua_State *L) {
>  }
>  
>  static int lxc_default_config_path_get(lua_State *L) {
> -    const char *lxcpath = lxc_get_default_config_path();
> +    const char *lxcpath = lxc_get_global_config_item("lxc.lxcpath");
>  
>      lua_pushstring(L, lxcpath);
>      return 1;
> diff --git a/src/lxc/arguments.c b/src/lxc/arguments.c
> index bdde2f7..aaf9634 100644
> --- a/src/lxc/arguments.c
> +++ b/src/lxc/arguments.c
> @@ -222,7 +222,7 @@ extern int lxc_arguments_parse(struct lxc_arguments *args,
>  
>       /* If no lxcpaths were given, use default */
>       if (!args->lxcpath_cnt) {
> -             ret = lxc_arguments_lxcpath_add(args, default_lxc_path());
> +             ret = lxc_arguments_lxcpath_add(args, 
> lxc_global_config_value("lxc.lxcpath"));
>               if (ret < 0)
>                       return ret;
>       }
> diff --git a/src/lxc/bdev.c b/src/lxc/bdev.c
> index 30b9574..a655756 100644
> --- a/src/lxc/bdev.c
> +++ b/src/lxc/bdev.c
> @@ -565,7 +565,7 @@ static int zfs_clone(const char *opath, const char 
> *npath, const char *oname,
>                       return -1;
>               *p = '\0';
>       } else
> -             zfsroot = default_zfs_root();
> +             zfsroot = lxc_global_config_value("lxc.zfsroot");
>  
>       ret = snprintf(option, MAXPATHLEN, "-omountpoint=%s/%s/rootfs",
>               lxcpath, nname);
> @@ -695,7 +695,7 @@ static int zfs_create(struct bdev *bdev, const char 
> *dest, const char *n,
>       pid_t pid;
>  
>       if (!specs || !specs->zfs.zfsroot)
> -             zfsroot = default_zfs_root();
> +             zfsroot = lxc_global_config_value("lxc.zfsroot");
>       else
>               zfsroot = specs->zfs.zfsroot;
>  
> @@ -982,7 +982,7 @@ static int lvm_clonepaths(struct bdev *orig, struct bdev 
> *new, const char *oldna
>                               orig->type);
>                       return -1;
>               }
> -             vg = default_lvm_vg();
> +             vg = lxc_global_config_value("lxc.lvm_vg");
>               len = strlen("/dev/") + strlen(vg) + strlen(cname) + 2;
>               if ((new->src = malloc(len)) == NULL)
>                       return -1;
> @@ -1032,7 +1032,7 @@ static int lvm_clonepaths(struct bdev *orig, struct 
> bdev *new, const char *oldna
>                       return -1;
>               }
>       } else {
> -             if (do_lvm_create(new->src, size, default_lvm_thin_pool()) < 0) 
> {
> +             if (do_lvm_create(new->src, size, 
> lxc_global_config_value("lxc.lvm_thin_pool")) < 0) {
>                       ERROR("Error creating new lvm blockdev");
>                       return -1;
>               }
> @@ -1071,11 +1071,11 @@ static int lvm_create(struct bdev *bdev, const char 
> *dest, const char *n,
>  
>       vg = specs->lvm.vg;
>       if (!vg)
> -             vg = default_lvm_vg();
> +             vg = lxc_global_config_value("lxc.lvm_vg");
>  
>       thinpool = specs->lvm.thinpool;
>       if (!thinpool)
> -             thinpool = default_lvm_thin_pool();
> +             thinpool = lxc_global_config_value("lxc.lvm_thin_pool");
>  
>       /* /dev/$vg/$lv */
>       if (specs->lvm.lv)
> diff --git a/src/lxc/cgroup.c b/src/lxc/cgroup.c
> index 946ab0e..b1196b4 100644
> --- a/src/lxc/cgroup.c
> +++ b/src/lxc/cgroup.c
> @@ -89,7 +89,7 @@ struct cgroup_meta_data *lxc_cgroup_load_meta()
>       int saved_errno;
>  
>       errno = 0;
> -     cgroup_use = default_cgroup_use();
> +     cgroup_use = lxc_global_config_value("lxc.cgroup.use");
>       if (!cgroup_use && errno != 0)
>               return NULL;
>       if (cgroup_use) {
> diff --git a/src/lxc/commands.c b/src/lxc/commands.c
> index 07e64b6..e993f2e 100644
> --- a/src/lxc/commands.c
> +++ b/src/lxc/commands.c
> @@ -80,7 +80,7 @@ static int fill_sock_name(char *path, int len, const char 
> *name,
>       int ret;
>  
>       if (!inpath) {
> -             lxcpath = default_lxc_path();
> +             lxcpath = lxc_global_config_value("lxc.lxcpath");
>               if (!lxcpath) {
>                       ERROR("Out of memory getting lxcpath");
>                       return -1;
> diff --git a/src/lxc/conf.c b/src/lxc/conf.c
> index a386d94..7e0eddd 100644
> --- a/src/lxc/conf.c
> +++ b/src/lxc/conf.c
> @@ -1921,7 +1921,7 @@ static int mount_entry_on_absolute_rootfs(const struct 
> mntent *mntent,
>               return -1;
>       }
>  
> -     lxcpath = default_lxc_path();
> +     lxcpath = lxc_global_config_value("lxc.lxcpath");
>       if (!lxcpath) {
>               ERROR("Out of memory");
>               return -1;
> diff --git a/src/lxc/log.c b/src/lxc/log.c
> index 86f7cd4..b09885c 100644
> --- a/src/lxc/log.c
> +++ b/src/lxc/log.c
> @@ -324,7 +324,7 @@ extern int lxc_log_init(const char *name, const char 
> *file,
>                       lxcpath = LOGPATH;
>  
>               /* try LOGPATH if lxcpath is the default */
> -             if (strcmp(lxcpath, default_lxc_path()) == 0)
> +             if (strcmp(lxcpath, lxc_global_config_value("lxc.lxcpath")) == 
> 0)
>                       ret = _lxc_log_set_file(name, NULL, 0);
>  
>               /* try in lxcpath */
> diff --git a/src/lxc/lxc_config.c b/src/lxc/lxc_config.c
> index dcb3a3b..c4797b5 100644
> --- a/src/lxc/lxc_config.c
> +++ b/src/lxc/lxc_config.c
> @@ -27,15 +27,15 @@
>  
>  struct lxc_config_items {
>       char *name;
> -     const char *(*fn)(void);
>  };
>  
>  static struct lxc_config_items items[] =
>  {
> -     { .name = "lxc.lxcpath", .fn = &lxc_get_default_config_path, },
> -     { .name = "lxc.lvm_vg", .fn = &lxc_get_default_lvm_vg, },
> -     { .name = "lxc.lvm_thin_pool", .fn = &lxc_get_default_lvm_thin_pool, },
> -     { .name = "lxc.zfsroot", .fn = &lxc_get_default_zfs_root, },
> +     { .name = "lxc.default_config", },
> +     { .name = "lxc.lxcpath", },
> +     { .name = "lxc.lvm_vg", },
> +     { .name = "lxc.lvm_thin_pool", },
> +     { .name = "lxc.zfsroot", },
>       { .name = NULL, },
>  };
>  
> @@ -65,7 +65,7 @@ int main(int argc, char *argv[])
>               list_config_items();
>       for (i = &items[0]; i->name; i++) {
>               if (strcmp(argv[1], i->name) == 0) {
> -                     printf("%s\n", i->fn());
> +                     printf("%s\n", lxc_get_global_config_item(i->name));
>                       exit(0);
>               }
>       }
> diff --git a/src/lxc/lxccontainer.c b/src/lxc/lxccontainer.c
> index f999cfc..faa0a9f 100644
> --- a/src/lxc/lxccontainer.c
> +++ b/src/lxc/lxccontainer.c
> @@ -2035,24 +2035,9 @@ static int lxcapi_get_cgroup_item(struct lxc_container 
> *c, const char *subsys, c
>       return ret;
>  }
>  
> -const char *lxc_get_default_config_path(void)
> +const char *lxc_get_global_config_item(const char *key)
>  {
> -     return default_lxc_path();
> -}
> -
> -const char *lxc_get_default_lvm_vg(void)
> -{
> -     return default_lvm_vg();
> -}
> -
> -const char *lxc_get_default_lvm_thin_pool(void)
> -{
> -     return default_lvm_thin_pool();
> -}
> -
> -const char *lxc_get_default_zfs_root(void)
> -{
> -     return default_zfs_root();
> +     return lxc_global_config_value(key);
>  }
>  
>  const char *lxc_get_version(void)
> @@ -3035,7 +3020,7 @@ struct lxc_container *lxc_container_new(const char 
> *name, const char *configpath
>       if (configpath)
>               c->config_path = strdup(configpath);
>       else
> -             c->config_path = strdup(default_lxc_path());
> +             c->config_path = strdup(lxc_global_config_value("lxc.lxcpath"));
>  
>       if (!c->config_path) {
>               fprintf(stderr, "Out of memory");
> @@ -3157,7 +3142,7 @@ int list_defined_containers(const char *lxcpath, char 
> ***names, struct lxc_conta
>       struct lxc_container *c;
>  
>       if (!lxcpath)
> -             lxcpath = default_lxc_path();
> +             lxcpath = lxc_global_config_value("lxc.lxcpath");
>  
>       dir = opendir(lxcpath);
>       if (!dir) {
> @@ -3247,7 +3232,7 @@ int list_active_containers(const char *lxcpath, char 
> ***nret,
>       struct lxc_container *c;
>  
>       if (!lxcpath)
> -             lxcpath = default_lxc_path();
> +             lxcpath = lxc_global_config_value("lxc.lxcpath");
>       lxcpath_len = strlen(lxcpath);
>  
>       if (cret)
> diff --git a/src/lxc/lxccontainer.h b/src/lxc/lxccontainer.h
> index a62411b..921e47d 100644
> --- a/src/lxc/lxccontainer.h
> +++ b/src/lxc/lxccontainer.h
> @@ -786,45 +786,14 @@ int lxc_container_put(struct lxc_container *c);
>   */
>  int lxc_get_wait_states(const char **states);
>  
> -/*!
> - * \brief Determine path to default configuration file.
> - *
> - * \return Static string representing full path to default configuration
> - *  file.
> - *
> - * \note Returned string must not be freed.
> - */
> -const char *lxc_get_default_config_path(void);
> -
> -/*!
> - * \brief Determine default LVM volume group.
> - *
> - * \return Static string representing default volume group,
> - *  or \c NULL on error.
> - *
> - * \note Returned string must not be freed.
> - */
> -const char *lxc_get_default_lvm_vg(void);
> -
> -/*!
> - * \brief Determine default LVM thin pool.
> - *
> - * \return Static string representing default lvm thin pool,
> - *  or \c NULL on error.
> - *
> - * \note Returned string must not be freed.
> - */
> -const char *lxc_get_default_lvm_thin_pool(void);
> -
> -/*!
> - * \brief Determine default ZFS root.
> +/*
> + * \brief Get the value for a global config key
>   *
> - * \return Static string representing default ZFS root,
> - *  or \c NULL on error.
> + * \param key The name of the config key
>   *
> - * \note Returned string must not be freed.
> + * \return String representing the current value for the key.
>   */
> -const char *lxc_get_default_zfs_root(void);
> +const char *lxc_get_global_config_item(const char *key);
>  
>  /*!
>   * \brief Determine version of LXC.
> diff --git a/src/lxc/start.c b/src/lxc/start.c
> index a5d6e56..ce88d5f 100644
> --- a/src/lxc/start.c
> +++ b/src/lxc/start.c
> @@ -767,7 +767,7 @@ static int lxc_spawn(struct lxc_handler *handler)
>        * default value is available
>        */
>       if (getuid() == 0)
> -             cgroup_pattern = default_cgroup_pattern();
> +             cgroup_pattern = lxc_global_config_value("lxc.cgroup.pattern");
>       if (!cgroup_pattern)
>               cgroup_pattern = "%n";
>  
> diff --git a/src/lxc/utils.c b/src/lxc/utils.c
> index ac89da1..f860421 100644
> --- a/src/lxc/utils.c
> +++ b/src/lxc/utils.c
> @@ -238,7 +238,7 @@ static char *copy_global_config_value(char *p)
>  #define DEFAULT_THIN_POOL "lxc"
>  #define DEFAULT_ZFSROOT "lxc"
>  
> -static const char *lxc_global_config_value(const char *option_name)
> +const char *lxc_global_config_value(const char *option_name)
>  {
>       static const char * const options[][2] = {
>               { "lxc.lvm_vg",          DEFAULT_VG      },
> @@ -371,36 +371,6 @@ out:
>       return values[i];
>  }
>  
> -const char *default_lvm_vg(void)
> -{
> -     return lxc_global_config_value("lxc.lvm_vg");
> -}
> -
> -const char *default_lvm_thin_pool(void)
> -{
> -     return lxc_global_config_value("lxc.lvm_thin_pool");
> -}
> -
> -const char *default_zfs_root(void)
> -{
> -     return lxc_global_config_value("lxc.zfsroot");
> -}
> -
> -const char *default_lxc_path(void)
> -{
> -     return lxc_global_config_value("lxc.lxcpath");
> -}
> -
> -const char *default_cgroup_use(void)
> -{
> -     return lxc_global_config_value("lxc.cgroup.use");
> -}
> -
> -const char *default_cgroup_pattern(void)
> -{
> -     return lxc_global_config_value("lxc.cgroup.pattern");
> -}
> -
>  const char *get_rundir()
>  {
>       const char *rundir;
> diff --git a/src/lxc/utils.h b/src/lxc/utils.h
> index 847a613..1121d74 100644
> --- a/src/lxc/utils.h
> +++ b/src/lxc/utils.h
> @@ -41,16 +41,8 @@ extern int mkdir_p(const char *dir, mode_t mode);
>  extern void remove_trailing_slashes(char *p);
>  extern const char *get_rundir(void);
>  
> -/*
> - * Return a buffer containing the default container path.
> - * Caller must NOT free this buffer, since it may be static.
> - */
> -extern const char *default_lxc_path(void);
> -extern const char *default_zfs_root(void);
> -extern const char *default_lvm_vg(void);
> -extern const char *default_lvm_thin_pool(void);
> -extern const char *default_cgroup_use(void);
> -extern const char *default_cgroup_pattern(void);
> +extern const char *lxc_global_config_value(const char *option_name);
> +
>  /* Define getline() if missing from the C library */
>  #ifndef HAVE_GETLINE
>  #ifdef HAVE_FGETLN
> diff --git a/src/python-lxc/lxc.c b/src/python-lxc/lxc.c
> index 5ee8dd0..4381ab8 100644
> --- a/src/python-lxc/lxc.c
> +++ b/src/python-lxc/lxc.c
> @@ -325,9 +325,16 @@ LXC_attach_run_shell(PyObject *self, PyObject *arg)
>  }
>  
>  static PyObject *
> -LXC_get_default_config_path(PyObject *self, PyObject *args)
> +LXC_get_global_config_item(PyObject *self, PyObject *args, PyObject *kwds)
>  {
> -    return PyUnicode_FromString(lxc_get_default_config_path());
> +    static char *kwlist[] = {"key", NULL};
> +    char* key = NULL;
> +
> +    if (! PyArg_ParseTupleAndKeywords(args, kwds, "s|", kwlist,
> +                                      &key))
> +        return NULL;
> +
> +    return PyUnicode_FromString(lxc_get_global_config_item(key));
>  }
>  
>  static PyObject *
> @@ -1670,8 +1677,8 @@ static PyMethodDef LXC_methods[] = {
>      {"attach_run_shell", (PyCFunction)LXC_attach_run_shell, METH_O,
>       "Starts up a shell when attaching, to use as the run parameter for "
>       "attach or attach_wait"},
> -    {"get_default_config_path", (PyCFunction)LXC_get_default_config_path,
> -     METH_NOARGS,
> +    {"get_global_config_item", (PyCFunction)LXC_get_global_config_item,
> +     METH_VARARGS|METH_KEYWORDS,
>       "Returns the current LXC config path"},
>      {"get_version", (PyCFunction)LXC_get_version, METH_NOARGS,
>       "Returns the current LXC library version"},
> diff --git a/src/python-lxc/lxc/__init__.py b/src/python-lxc/lxc/__init__.py
> index e389abb..0ca3e54 100644
> --- a/src/python-lxc/lxc/__init__.py
> +++ b/src/python-lxc/lxc/__init__.py
> @@ -32,7 +32,7 @@ import warnings
>  warnings.warn("The python-lxc API isn't yet stable "
>                "and may change at any point in the future.", Warning, 2)
>  
> -default_config_path = _lxc.get_default_config_path()
> +default_config_path = _lxc.get_global_config_item("lxc.lxcpath")
>  version = _lxc.get_version()
>  
>  
> diff --git a/src/tests/snapshot.c b/src/tests/snapshot.c
> index da7b409..fe06077 100644
> --- a/src/tests/snapshot.c
> +++ b/src/tests/snapshot.c
> @@ -38,7 +38,7 @@ static void try_to_remove(void)
>                       c->destroy(c);
>               lxc_container_put(c);
>       }
> -     snprintf(snappath, 1024, "%ssnaps/%s", lxc_get_default_config_path(), 
> MYNAME);
> +     snprintf(snappath, 1024, "%ssnaps/%s", 
> lxc_get_global_config_item("lxc.lxcpath"), MYNAME);
>       c = lxc_container_new("snap0", snappath);
>       if (c) {
>               if (c->is_defined(c))
> @@ -92,7 +92,7 @@ int main(int argc, char *argv[])
>       struct stat sb;
>       int ret;
>       char path[1024];
> -     snprintf(path, 1024, "%ssnaps/%s/snap0/rootfs", 
> lxc_get_default_config_path(), MYNAME);
> +     snprintf(path, 1024, "%ssnaps/%s/snap0/rootfs", 
> lxc_get_global_config_item("lxc.lxcpath"), MYNAME);
>       ret = stat(path, &sb);
>       if (ret != 0) {
>               fprintf(stderr, "%s: %d: snapshot was not actually created\n", 
> __FILE__, __LINE__);
> -- 
> 1.8.5.2
> 
> _______________________________________________
> lxc-devel mailing list
> lxc-devel@lists.linuxcontainers.org
> http://lists.linuxcontainers.org/listinfo/lxc-devel
_______________________________________________
lxc-devel mailing list
lxc-devel@lists.linuxcontainers.org
http://lists.linuxcontainers.org/listinfo/lxc-devel

Reply via email to