On 02/11/2013 05:31 PM, Dwight Engen wrote: > Add [gs]et_config_path from API to Lua binding. Add additional optional > parameter to container_new(). Add tests for these new Lua API bindings. > Commit 2a59a681 changed the meaning of lxc_path_get() in the binding, > causing lua script breakage. Reinstate original behavior of > lxc_path_get() and rename it to lxc_default_config_path_get() to make > its intent clearer. > > Signed-off-by: Dwight Engen <dwight.en...@oracle.com>
Acked-by: Stéphane Graber <stgra...@ubuntu.com> And on that note, I'll now freeze staging for alpha3. I'll be running all the tests we have, do some more random testing, then send the pull request to Daniel. > --- > src/lua-lxc/core.c | 38 ++++++++++++++++++++++++++++++++------ > src/lua-lxc/lxc.lua | 18 +++++++++++++++--- > src/lua-lxc/test/apitest.lua | 26 +++++++++++++++++++++++++- > src/lxc/lxccontainer.c | 4 ++++ > src/lxc/lxccontainer.h | 1 + > 5 files changed, 77 insertions(+), 10 deletions(-) > > diff --git a/src/lua-lxc/core.c b/src/lua-lxc/core.c > index 9225158..c9eaef0 100644 > --- a/src/lua-lxc/core.c > +++ b/src/lua-lxc/core.c > @@ -43,9 +43,15 @@ > > static int container_new(lua_State *L) > { > + struct lxc_container *c; > const char *name = luaL_checkstring(L, 1); > - struct lxc_container *c = lxc_container_new(name, NULL); > + const char *configpath = NULL; > + int argc = lua_gettop(L); > + > + if (argc > 1) > + configpath = luaL_checkstring(L, 2); > > + c = lxc_container_new(name, configpath); > if (c) { > lua_boxpointer(L, c); > luaL_getmetatable(L, CONTAINER_TYPENAME); > @@ -238,6 +244,25 @@ static int container_save_config(lua_State *L) > return 1; > } > > +static int container_get_config_path(lua_State *L) > +{ > + struct lxc_container *c = lua_unboxpointer(L, 1, CONTAINER_TYPENAME); > + const char *config_path; > + > + config_path = c->get_config_path(c); > + lua_pushstring(L, config_path); > + return 1; > +} > + > +static int container_set_config_path(lua_State *L) > +{ > + struct lxc_container *c = lua_unboxpointer(L, 1, CONTAINER_TYPENAME); > + const char *config_path = luaL_checkstring(L, 2); > + > + lua_pushboolean(L, !!c->set_config_path(c, config_path)); > + return 1; > +} > + > static int container_clear_config_item(lua_State *L) > { > struct lxc_container *c = lua_unboxpointer(L, 1, CONTAINER_TYPENAME); > @@ -326,6 +351,8 @@ static luaL_Reg lxc_container_methods[] = > {"config_file_name", container_config_file_name}, > {"load_config", container_load_config}, > {"save_config", container_save_config}, > + {"get_config_path", container_get_config_path}, > + {"set_config_path", container_set_config_path}, > {"get_config_item", container_get_config_item}, > {"set_config_item", container_set_config_item}, > {"clear_config_item", container_clear_config_item}, > @@ -338,18 +365,17 @@ static int lxc_version_get(lua_State *L) { > return 1; > } > > -static int lxc_path_get(lua_State *L) { > - struct lxc_container *c = lua_unboxpointer(L, 1, CONTAINER_TYPENAME); > - const char *lxcpath; > +static int lxc_default_config_path_get(lua_State *L) { > + char *lxcpath = lxc_get_default_config_path(); > > - lxcpath = c->get_config_path(c); > lua_pushstring(L, lxcpath); > + free(lxcpath); > return 1; > } > > static luaL_Reg lxc_lib_methods[] = { > {"version_get", lxc_version_get}, > - {"path_get", lxc_path_get}, > + {"default_config_path_get", lxc_default_config_path_get}, > {"container_new", container_new}, > {NULL, NULL} > }; > diff --git a/src/lua-lxc/lxc.lua b/src/lua-lxc/lxc.lua > index c71de48..b6bc344 100755 > --- a/src/lua-lxc/lxc.lua > +++ b/src/lua-lxc/lxc.lua > @@ -107,13 +107,17 @@ container = {} > container_mt = {} > container_mt.__index = container > > -function container:new(lname) > +function container:new(lname, config) > local lcore > local lnetcfg = {} > local lstats = {} > > if lname then > - lcore = core.container_new(lname) > + if config then > + lcore = core.container_new(lname, config) > + else > + lcore = core.container_new(lname) > + end > end > > return setmetatable({ctname = lname, core = lcore, netcfg = lnetcfg, > stats = lstats}, container_mt) > @@ -176,6 +180,14 @@ function container:destroy() > return self.core:destroy() > end > > +function container:get_config_path() > + return self.core:get_config_path() > +end > + > +function container:set_config_path(path) > + return self.core:set_config_path(path) > +end > + > function container:append_config_item(key, value) > return self.core:set_config_item(key, value) > end > @@ -408,5 +420,5 @@ function containers_running(names_only) > return containers > end > > -lxc_path = core.path_get() > +lxc_path = core.default_config_path_get() > cgroup_path = cgroup_path_get() > diff --git a/src/lua-lxc/test/apitest.lua b/src/lua-lxc/test/apitest.lua > index 14d2a9d..1365f91 100755 > --- a/src/lua-lxc/test/apitest.lua > +++ b/src/lua-lxc/test/apitest.lua > @@ -22,9 +22,10 @@ > -- > > local lxc = require("lxc") > +local lfs = require("lfs") > local getopt = require("alt_getopt") > > -local LXC_PATH = lxc.path_get() > +local LXC_PATH = lxc.default_config_path_get() > > local container > local cfg_containers = {} > @@ -83,6 +84,28 @@ function test_container_new() > assert(container:config_file_name() == string.format("%s/%s/config", > LXC_PATH, optarg["n"])) > end > > +function test_container_config_path() > + local cfgcontainer > + local cfgpath = "/tmp/" .. optarg["n"] > + local cfgname = cfgpath .. "/config" > + > + log(0, "Test container config path...") > + > + -- create a config file in the new location from container's config > + assert(lfs.mkdir(cfgpath)) > + assert(container:save_config(cfgname)) > + cfgcontainer = lxc.container:new(optarg["n"], "/tmp") > + assert(cfgcontainer ~= nil) > + log(0, "cfgname:%s cfgpath:%s", cfgcontainer:config_file_name(), > cfgcontainer:get_config_path()) > + assert(cfgcontainer:config_file_name() == cfgname) > + assert(cfgcontainer:get_config_path() == "/tmp") > + assert(cfgcontainer:set_config_path(LXC_PATH)) > + assert(cfgcontainer:get_config_path() == LXC_PATH) > + > + assert(os.remove(cfgname)) > + assert(lfs.rmdir(cfgpath)) > +end > + > function test_container_create() > if (optarg["c"]) then > log(0, "%-20s %s", "Destroy existing container:", optarg["n"]) > @@ -280,6 +303,7 @@ test_container_new() > test_container_create() > test_container_stopped() > test_container_in_cfglist(true) > +test_container_config_path() > > test_config_items() > test_config_keys() > diff --git a/src/lxc/lxccontainer.c b/src/lxc/lxccontainer.c > index 733cbb6..caac11b 100644 > --- a/src/lxc/lxccontainer.c > +++ b/src/lxc/lxccontainer.c > @@ -987,6 +987,10 @@ out: > return ret; > } > > +char *lxc_get_default_config_path(void) > +{ > + return default_lxc_path(); > +} > > struct lxc_container *lxc_container_new(const char *name, const char > *configpath) > { > diff --git a/src/lxc/lxccontainer.h b/src/lxc/lxccontainer.h > index de802a8..46c46c5 100644 > --- a/src/lxc/lxccontainer.h > +++ b/src/lxc/lxccontainer.h > @@ -86,6 +86,7 @@ struct lxc_container *lxc_container_new(const char *name, > const char *configpath > int lxc_container_get(struct lxc_container *c); > int lxc_container_put(struct lxc_container *c); > int lxc_get_wait_states(const char **states); > +char *lxc_get_default_config_path(void); > > #if 0 > char ** lxc_get_valid_keys(); > -- Stéphane Graber Ubuntu developer http://www.ubuntu.com
signature.asc
Description: OpenPGP digital signature
------------------------------------------------------------------------------ Free Next-Gen Firewall Hardware Offer Buy your Sophos next-gen firewall before the end March 2013 and get the hardware for free! Learn more. http://p.sf.net/sfu/sophos-d2d-feb
_______________________________________________ Lxc-devel mailing list Lxc-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/lxc-devel