mirror of
https://git.proxmox.com/git/mirror_lxc
synced 2025-08-08 10:21:55 +00:00
lxc-ls: Rewrite nesting code to use the attach API
Signed-off-by: Stéphane Graber <stgraber@ubuntu.com> Acked-by: Serge E. Hallyn <serge.hallyn@ubuntu.com>
This commit is contained in:
parent
cbef6c52be
commit
1563f8eff3
@ -35,7 +35,7 @@ import json
|
|||||||
import lxc
|
import lxc
|
||||||
import os
|
import os
|
||||||
import re
|
import re
|
||||||
import subprocess
|
import tempfile
|
||||||
import sys
|
import sys
|
||||||
|
|
||||||
_ = gettext.gettext
|
_ = gettext.gettext
|
||||||
@ -89,17 +89,23 @@ def getTerminalSize():
|
|||||||
|
|
||||||
|
|
||||||
def getSubContainers(container, lxcpath):
|
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:
|
with open(os.devnull, "w") as fd:
|
||||||
newenv = dict(os.environ)
|
fdnum, path = tempfile.mkstemp()
|
||||||
newenv['NESTED'] = "/proc/1/root/%s" % lxc.default_config_path
|
os.remove(path)
|
||||||
sp = subprocess.Popen(attach, stderr=fd, stdout=subprocess.PIPE,
|
|
||||||
env=newenv, universal_newlines=True)
|
fd = os.fdopen(fdnum)
|
||||||
sp.wait()
|
|
||||||
out = sp.stdout.read()
|
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:
|
if out:
|
||||||
return json.loads(out)
|
return json.loads(out)
|
||||||
return None
|
return None
|
||||||
@ -213,8 +219,8 @@ for container_name in lxc.list_containers(config_path=lxcpath):
|
|||||||
containers.append(entry)
|
containers.append(entry)
|
||||||
|
|
||||||
# Nested containers
|
# Nested containers
|
||||||
if args.nesting:
|
if args.nesting and container.state == "RUNNING":
|
||||||
sub = getSubContainers(container_name, args.lxcpath)
|
sub = getSubContainers(container, args.lxcpath)
|
||||||
if sub:
|
if sub:
|
||||||
for entry in sub:
|
for entry in sub:
|
||||||
if 'nesting_parent' not in entry:
|
if 'nesting_parent' not in entry:
|
||||||
|
Loading…
Reference in New Issue
Block a user