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

Serge Hallyn serge.hallyn at ubuntu.com
Thu Oct 24 20:19:02 UTC 2013


Quoting Stéphane Graber (stgraber at ubuntu.com):
> Signed-off-by: Stéphane Graber <stgraber at ubuntu.com>

Acked-by: Serge E. Hallyn <serge.hallyn 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
> 
> 
> ------------------------------------------------------------------------------
> October Webinars: Code for Performance
> Free Intel webinars can help you accelerate application performance.
> Explore tips for MPI, OpenMP, advanced profiling, and more. Get the most from 
> the latest Intel processors and coprocessors. See abstracts and register >
> http://pubads.g.doubleclick.net/gampad/clk?id=60135991&iu=/4140/ostg.clktrk
> _______________________________________________
> Lxc-devel mailing list
> Lxc-devel at lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/lxc-devel




More information about the lxc-devel mailing list