From 8585f20444203f9fb9970d1b176c38e0efd62ea8 Mon Sep 17 00:00:00 2001 From: Dwight Engen Date: Mon, 4 Nov 2013 17:35:07 -0500 Subject: [PATCH] lua: add cmd_get_config_item to API MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Dwight Engen Acked-by: Stéphane Graber --- src/lua-lxc/core.c | 25 +++++++++++++++++++++++++ src/lua-lxc/lxc.lua | 8 ++++++++ src/lua-lxc/test/apitest.lua | 7 +++++++ 3 files changed, 40 insertions(+) diff --git a/src/lua-lxc/core.c b/src/lua-lxc/core.c index ea19cc3550..9492c07fb9 100644 --- a/src/lua-lxc/core.c +++ b/src/lua-lxc/core.c @@ -30,6 +30,7 @@ #include #include #include +#include #if LUA_VERSION_NUM < 502 #define luaL_newlib(L,l) (lua_newtable(L), luaL_register(L,NULL,l)) @@ -417,6 +418,29 @@ static int lxc_default_config_path_get(lua_State *L) { return 1; } +static int cmd_get_config_item(lua_State *L) +{ + int arg_cnt = lua_gettop(L); + const char *name = luaL_checkstring(L, 1); + const char *key = luaL_checkstring(L, 2); + const char *lxcpath = NULL; + char *value; + + if (arg_cnt > 2) + lxcpath = luaL_checkstring(L, 3); + + value = lxc_cmd_get_config_item(name, key, lxcpath); + if (!value) + goto not_found; + + lua_pushstring(L, value); + return 1; + +not_found: + lua_pushnil(L); + return 1; +} + /* utility functions */ static int lxc_util_usleep(lua_State *L) { usleep((useconds_t)luaL_checkunsigned(L, 1)); @@ -432,6 +456,7 @@ static int lxc_util_dirname(lua_State *L) { static luaL_Reg lxc_lib_methods[] = { {"version_get", lxc_version_get}, {"default_config_path_get", lxc_default_config_path_get}, + {"cmd_get_config_item", cmd_get_config_item}, {"container_new", container_new}, {"usleep", lxc_util_usleep}, {"dirname", lxc_util_dirname}, diff --git a/src/lua-lxc/lxc.lua b/src/lua-lxc/lxc.lua index 265e991ad1..44e4bf11ed 100755 --- a/src/lua-lxc/lxc.lua +++ b/src/lua-lxc/lxc.lua @@ -385,6 +385,14 @@ function M.default_config_path_get() return core.default_config_path_get() end +function M.cmd_get_config_item(name, item, lxcpath) + if (lxcpath) then + return core.cmd_get_config_item(name, item, lxcpath) + else + return core.cmd_get_config_item(name, item) + end +end + lxc_path = core.default_config_path_get() return M diff --git a/src/lua-lxc/test/apitest.lua b/src/lua-lxc/test/apitest.lua index f957ca4a11..f299b6ac15 100755 --- a/src/lua-lxc/test/apitest.lua +++ b/src/lua-lxc/test/apitest.lua @@ -217,6 +217,12 @@ function test_container_cgroup() assert(container:set_cgroup_item("memory.limit_in_bytes", "-1")) end +function test_container_cmd() + log(0, "Test get config from running container...") + veth_pair = lxc.cmd_get_config_item(optarg["n"], "lxc.network.0.veth.pair") + log(0, " veth.pair:%s", veth_pair) +end + function test_config_items() log(0, "Test set/clear configuration items...") @@ -325,6 +331,7 @@ test_container_start() test_container_started() test_container_cgroup() +test_container_cmd() test_container_freeze() test_container_frozen()