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);
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);
{"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},
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}
};
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)
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
return containers
end
-lxc_path = core.path_get()
+lxc_path = core.default_config_path_get()
cgroup_path = cgroup_path_get()
--
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 = {}
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"])
test_container_create()
test_container_stopped()
test_container_in_cfglist(true)
+test_container_config_path()
test_config_items()
test_config_keys()