[lxc-devel] [PATCH] lxc-ls: Rewrite nesting code to use the attach API

Stéphane Graber stgraber at ubuntu.com
Thu Oct 24 18:45:34 UTC 2013


Signed-off-by: Stéphane Graber <stgraber at ubuntu.com>
---
 src/lxc/lxc-ls | 32 +++++++++++++++++++-------------
 1 file changed, 19 insertions(+), 13 deletions(-)

diff --git a/src/lxc/lxc-ls b/src/lxc/lxc-ls
index cc0a1e7..9d45400 100644
--- a/src/lxc/lxc-ls
+++ b/src/lxc/lxc-ls
@@ -35,7 +35,7 @@ import json
 import lxc
 import os
 import re
-import subprocess
+import tempfile
 import sys
 
 _ = gettext.gettext
@@ -89,17 +89,23 @@ def getTerminalSize():
 
 
 def getSubContainers(container, lxcpath):
-    attach = ['lxc-attach', '-P', lxcpath, '-R', '-s', 'NETWORK|PID',
-              '-n', container,
-              '--', sys.argv[0], "--nesting"]
-
     with open(os.devnull, "w") as fd:
-        newenv = dict(os.environ)
-        newenv['NESTED'] = "/proc/1/root/%s" % lxc.default_config_path
-        sp = subprocess.Popen(attach, stderr=fd, stdout=subprocess.PIPE,
-                              env=newenv, universal_newlines=True)
-        sp.wait()
-        out = sp.stdout.read()
+        fdnum, path = tempfile.mkstemp()
+        os.remove(path)
+
+        fd = os.fdopen(fdnum)
+
+        container.attach_wait(
+            lxc.attach_run_command, [sys.argv[0], "--nesting"],
+            attach_flags=(lxc.LXC_ATTACH_REMOUNT_PROC_SYS),
+            namespaces=(lxc.CLONE_NEWNET + lxc.CLONE_NEWPID),
+            extra_env_vars=["NESTED=/proc/1/root/%s" %
+                            lxc.default_config_path],
+            stdout=fd)
+
+        fd.seek(0)
+        out = fd.read()
+        fd.close()
         if out:
             return json.loads(out)
     return None
@@ -213,8 +219,8 @@ for container_name in lxc.list_containers(config_path=lxcpath):
     containers.append(entry)
 
     # Nested containers
-    if args.nesting:
-        sub = getSubContainers(container_name, args.lxcpath)
+    if args.nesting and container.state == "RUNNING":
+        sub = getSubContainers(container, args.lxcpath)
         if sub:
             for entry in sub:
                 if 'nesting_parent' not in entry:
-- 
1.8.3.2





More information about the lxc-devel mailing list