Signed-off-by: Dwight Engen <dwight.en...@oracle.com>
---
 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 ea19cc3..9492c07 100644
--- a/src/lua-lxc/core.c
+++ b/src/lua-lxc/core.c
@@ -30,6 +30,7 @@
 #include <unistd.h>
 #include <libgen.h>
 #include <lxc/lxccontainer.h>
+#include <lxc/commands.h>
 
 #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 265e991..44e4bf1 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 f957ca4..f299b6a 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()
-- 
1.8.3.1


------------------------------------------------------------------------------
November Webinars for C, C++, Fortran Developers
Accelerate application performance with scalable programming models. Explore
techniques for threading, error checking, porting, and tuning. Get the most 
from the latest Intel processors and coprocessors. See abstracts and register
http://pubads.g.doubleclick.net/gampad/clk?id=60136231&iu=/4140/ostg.clktrk
_______________________________________________
Lxc-devel mailing list
Lxc-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/lxc-devel

Reply via email to