From 1563f8eff33476a55443f52bd77d14be36286a29 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=C3=A9phane=20Graber?= Date: Thu, 24 Oct 2013 14:45:34 -0400 Subject: [PATCH] lxc-ls: Rewrite nesting code to use the attach API MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Stéphane Graber Acked-by: Serge E. Hallyn --- 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 cc0a1e758..9d4540018 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: