From: Stéphane Graber Date: Thu, 24 Oct 2013 18:45:34 +0000 (-0400) Subject: lxc-ls: Rewrite nesting code to use the attach API X-Git-Tag: lxc-1.0.0.alpha3~58 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=1563f8eff33476a55443f52bd77d14be36286a29;p=thirdparty%2Flxc.git lxc-ls: Rewrite nesting code to use the attach API Signed-off-by: Stéphane Graber Acked-by: Serge E. Hallyn --- 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: