Skip to content

Commit

Permalink
lxc-ls: Rewrite nesting code to use the attach API
Browse files Browse the repository at this point in the history
Signed-off-by: Stéphane Graber <stgraber@ubuntu.com>
Acked-by: Serge E. Hallyn <serge.hallyn@ubuntu.com>
  • Loading branch information
stgraber committed Oct 24, 2013
1 parent cbef6c5 commit 1563f8e
Showing 1 changed file with 19 additions and 13 deletions.
32 changes: 19 additions & 13 deletions src/lxc/lxc-ls
Expand Up @@ -35,7 +35,7 @@ import json
import lxc
import os
import re
import subprocess
import tempfile
import sys

_ = gettext.gettext
Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -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:
Expand Down

0 comments on commit 1563f8e

Please sign in to comment.