From: Dwight Engen Date: Thu, 31 Oct 2013 20:38:22 +0000 (-0400) Subject: add [gs]et_cgroup_item to lua api X-Git-Tag: lxc-1.0.0.alpha3~31 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=80ee22284b4172f9ff1d55c62e4a0ef01a4be92e;p=thirdparty%2Flxc.git add [gs]et_cgroup_item to lua api fix up api test to run and add test for new [gs]et_cgroup_item Signed-off-by: Dwight Engen Signed-off-by: Serge Hallyn --- diff --git a/src/lua-lxc/core.c b/src/lua-lxc/core.c index 002e8bf66..ea19cc355 100644 --- a/src/lua-lxc/core.c +++ b/src/lua-lxc/core.c @@ -282,6 +282,29 @@ static int container_clear_config_item(lua_State *L) return 1; } +static int container_get_cgroup_item(lua_State *L) +{ + struct lxc_container *c = lua_unboxpointer(L, 1, CONTAINER_TYPENAME); + const char *key = luaL_checkstring(L, 2); + int len; + char *value; + + len = c->get_cgroup_item(c, key, NULL, 0); + if (len <= 0) + goto not_found; + + value = alloca(sizeof(char)*len + 1); + if (c->get_cgroup_item(c, key, value, len + 1) != len) + goto not_found; + + lua_pushstring(L, value); + return 1; + +not_found: + lua_pushnil(L); + return 1; +} + static int container_get_config_item(lua_State *L) { struct lxc_container *c = lua_unboxpointer(L, 1, CONTAINER_TYPENAME); @@ -305,6 +328,16 @@ not_found: return 1; } +static int container_set_cgroup_item(lua_State *L) +{ + struct lxc_container *c = lua_unboxpointer(L, 1, CONTAINER_TYPENAME); + const char *key = luaL_checkstring(L, 2); + const char *value = luaL_checkstring(L, 3); + + lua_pushboolean(L, !!c->set_cgroup_item(c, key, value)); + return 1; +} + static int container_set_config_item(lua_State *L) { struct lxc_container *c = lua_unboxpointer(L, 1, CONTAINER_TYPENAME); @@ -361,6 +394,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_cgroup_item", container_get_cgroup_item}, + {"set_cgroup_item", container_set_cgroup_item}, {"get_config_path", container_get_config_path}, {"set_config_path", container_set_config_path}, {"get_config_item", container_get_config_item}, diff --git a/src/lua-lxc/lxc.lua b/src/lua-lxc/lxc.lua index aa80a95c9..7c9580e01 100755 --- a/src/lua-lxc/lxc.lua +++ b/src/lua-lxc/lxc.lua @@ -189,6 +189,10 @@ function container:clear_config_item(key) return self.core:clear_config_item(key) end +function container:get_cgroup_item(key) + return self.core:get_cgroup_item(key) +end + function container:get_config_item(key) local value local vals = {} @@ -209,6 +213,10 @@ function container:get_config_item(key) return vals end +function container:set_cgroup_item(key, value) + return self.core:set_cgroup_item(key, value) +end + function container:set_config_item(key, value) return self.core:set_config_item(key, value) end @@ -410,6 +418,14 @@ function M.containers_running(names_only) return containers end +function M.version_get() + return core.version_get() +end + +function M.default_config_path_get() + return core.default_config_path_get() +end + 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 1365f9100..f957ca4a1 100755 --- a/src/lua-lxc/test/apitest.lua +++ b/src/lua-lxc/test/apitest.lua @@ -206,6 +206,17 @@ function test_container_in_cfglist(should_find) end end +function test_container_cgroup() + log(0, "Test get/set cgroup items...") + + max_mem = container:get_cgroup_item("memory.max_usage_in_bytes") + saved_limit = container:get_cgroup_item("memory.limit_in_bytes") + assert(saved_limit ~= max_mem) + assert(container:set_cgroup_item("memory.limit_in_bytes", max_mem)) + assert(container:get_cgroup_item("memory.limit_in_bytes") ~= saved_limit) + assert(container:set_cgroup_item("memory.limit_in_bytes", "-1")) +end + function test_config_items() log(0, "Test set/clear configuration items...") @@ -313,6 +324,8 @@ test_config_network(0) test_container_start() test_container_started() +test_container_cgroup() + test_container_freeze() test_container_frozen() test_container_unfreeze()