[lxc-devel] [PATCH] python: Update the python scripts for lxcpath

Stéphane Graber stgraber at ubuntu.com
Thu Feb 21 20:11:29 UTC 2013


This adds -P/--lxcpath to the various python scripts.

Signed-off-by: Stéphane Graber <stgraber at ubuntu.com>
---
 src/lxc/lxc-device                |  6 +++++-
 src/lxc/lxc-ls                    |  7 +++++--
 src/lxc/lxc-start-ephemeral.in    | 14 +++++++++++---
 src/python-lxc/lxc/__init__.py.in |  6 ++++--
 4 files changed, 25 insertions(+), 8 deletions(-)

diff --git a/src/lxc/lxc-device b/src/lxc/lxc-device
index db9399d..b194b05 100644
--- a/src/lxc/lxc-device
+++ b/src/lxc/lxc-device
@@ -47,6 +47,9 @@ parser.add_argument("-n", dest="container", metavar="CONTAINER",
                     help=_("Name of the container to add the device to"),
                     required=True)
 
+parser.add_argument("-P", "--lxcpath", dest="lxcpath", metavar="PATH",
+                    help=_("Use specified container path"), default=None)
+
 # Commands
 subparsers = parser.add_subparsers()
 subparser_add = subparsers.add_parser('add', help=_('Add a device'))
@@ -76,7 +79,8 @@ if not args.name:
     args.name = args.device
 
 ## Check that the container is ready
-container = lxc.Container(args.container)
+container = lxc.Container(args.container, args.lxcpath)
+
 if not container.running:
     parser.error("The container must be running.")
 
diff --git a/src/lxc/lxc-ls b/src/lxc/lxc-ls
index 98b7861..92a4e53 100644
--- a/src/lxc/lxc-ls
+++ b/src/lxc/lxc-ls
@@ -92,6 +92,9 @@ parser = argparse.ArgumentParser(description=_("LXC: List containers"),
 parser.add_argument("-1", dest="one", action="store_true",
                     help=_("list one container per line (default when piped)"))
 
+parser.add_argument("-P", "--lxcpath", dest="lxcpath", metavar="PATH",
+                    help=_("Use specified container path"), default=None)
+
 parser.add_argument("--active", action="store_true",
                     help=_("list only active containers "
                            "(same as --running --frozen)"))
@@ -138,7 +141,7 @@ if not os.geteuid() == 0 and (args.fancy or args.state):
 
 # List of containers, stored as dictionaries
 containers = []
-for container_name in lxc.list_containers():
+for container_name in lxc.list_containers(config_path=args.lxcpath):
     entry = {}
     entry['name'] = container_name
 
@@ -151,7 +154,7 @@ for container_name in lxc.list_containers():
         containers.append(entry)
         continue
 
-    container = lxc.Container(container_name)
+    container = lxc.Container(container_name, args.lxcpath)
 
     # Filter by status
     if args.state and container.state not in args.state:
diff --git a/src/lxc/lxc-start-ephemeral.in b/src/lxc/lxc-start-ephemeral.in
index e11919f..3e2a5d3 100644
--- a/src/lxc/lxc-start-ephemeral.in
+++ b/src/lxc/lxc-start-ephemeral.in
@@ -64,6 +64,9 @@ container when exiting (with ctrl-a-q).
 If no COMMAND is given and -d is used, the name and IP addresses of the
 container will be printed to the console."""))
 
+parser.add_argument("--lxcpath", "-P", dest="lxcpath", metavar="PATH",
+                    help=_("Use specified container path"), default=None)
+
 parser.add_argument("--orig", "-o", type=str, required=True,
                     help=_("name of the original container"))
 
@@ -104,16 +107,21 @@ if not os.geteuid() == 0:
                    % (sys.argv[0])))
 
 # Load the orig container
-orig = lxc.Container(args.orig)
+orig = lxc.Container(args.orig, args.lxcpath)
 if not orig.defined:
     parser.error(_("Source container '%s' doesn't exist." % args.orig))
 
 # Create the new container paths
-dest_path = tempfile.mkdtemp(prefix="%s-" % args.orig, dir="@LXCPATH@")
+if not args.lxcpath:
+    lxc_path = lxc.default_config_path
+else:
+    lxc_path = args.lxcpath
+
+dest_path = tempfile.mkdtemp(prefix="%s-" % args.orig, dir=lxc_path)
 os.mkdir(os.path.join(dest_path, "rootfs"))
 
 # Setup the new container's configuration
-dest = lxc.Container(os.path.basename(dest_path))
+dest = lxc.Container(os.path.basename(dest_path), args.lxcpath)
 dest.load_config(orig.config_file_name)
 dest.set_config_item("lxc.utsname", dest.name)
 dest.set_config_item("lxc.rootfs", os.path.join(dest_path, "rootfs"))
diff --git a/src/python-lxc/lxc/__init__.py.in b/src/python-lxc/lxc/__init__.py.in
index 151a505..e262c23 100644
--- a/src/python-lxc/lxc/__init__.py.in
+++ b/src/python-lxc/lxc/__init__.py.in
@@ -238,7 +238,8 @@ class Container(_lxc.Container):
         if not self.running:
             return False
 
-        attach = ["lxc-attach", "-n", self.name]
+        attach = ["lxc-attach", "-n", self.name,
+                  "-P", self.get_config_path()]
         if namespace != "ALL":
             attach += ["-s", namespace]
 
@@ -299,7 +300,8 @@ class Container(_lxc.Container):
         if not self.running:
             return False
 
-        if subprocess.call(["lxc-console", "-n", self.name, "-t", "%s" % tty],
+        if subprocess.call(["lxc-console", "-n", self.name, "-t", "%s" % tty,
+                            "-P", self.get_config_path()],
                            universal_newlines=True) != 0:
             return False
         return True
-- 
1.8.1.2





More information about the lxc-devel mailing list