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> --- 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(); -- 1.7.12.3 ------------------------------------------------------------------------------ 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