[lxc-devel] [PATCH] python: Re-introduce timeout in get_ips

Serge Hallyn serge.hallyn at ubuntu.com
Mon Jul 8 15:42:09 UTC 2013


Quoting Stéphane Graber (stgraber at ubuntu.com):
> It turns out that most API users want some kind of timeout option for
> get_ips, so instead of re-implementing it in every single client
> software, let's just have it as a python overlay upstream.
> 
> Signed-off-by: Stéphane Graber <stgraber at ubuntu.com>

Acked-by: Serge E. Hallyn <serge.hallyn at ubuntu.com>

> ---
>  src/lxc/lxc-start-ephemeral.in |  8 +-------
>  src/python-lxc/lxc/__init__.py | 26 ++++++++++++++++++++++++++
>  2 files changed, 27 insertions(+), 7 deletions(-)
> 
> diff --git a/src/lxc/lxc-start-ephemeral.in b/src/lxc/lxc-start-ephemeral.in
> index 94cbf38..904f5ac 100644
> --- a/src/lxc/lxc-start-ephemeral.in
> +++ b/src/lxc/lxc-start-ephemeral.in
> @@ -36,7 +36,6 @@ import os
>  import sys
>  import subprocess
>  import tempfile
> -import time
>  
>  _ = gettext.gettext
>  gettext.textdomain("lxc-start-ephemeral")
> @@ -260,12 +259,7 @@ if not args.command and not args.daemon:
>      sys.exit(0)
>  
>  # Try to get the IP addresses
> -ips = None
> -timeout = 5
> -while not ips and timeout != 0:
> -    ips = dest.get_ips()
> -    time.sleep(1)
> -    timeout -= 1
> +ips = dest.get_ips(timeout=5)
>  
>  # Deal with the case where we just print info about the container
>  if args.daemon:
> diff --git a/src/python-lxc/lxc/__init__.py b/src/python-lxc/lxc/__init__.py
> index 8f108f9..c15cfad 100644
> --- a/src/python-lxc/lxc/__init__.py
> +++ b/src/python-lxc/lxc/__init__.py
> @@ -26,6 +26,7 @@ import glob
>  import os
>  import subprocess
>  import stat
> +import time
>  import warnings
>  
>  warnings.warn("The python-lxc API isn't yet stable "
> @@ -353,6 +354,31 @@ class Container(_lxc.Container):
>          else:
>              return value
>  
> +    def get_ips(self, interface=None, family=None, scope=None, timeout=0):
> +        """
> +            Get a tuple of IPs for the container.
> +        """
> +
> +        kwargs = {}
> +        if interface:
> +            kwargs['interface'] = interface
> +        if family:
> +            kwargs['family'] = family
> +        if scope:
> +            kwargs['scope'] = scope
> +
> +        ips = None
> +
> +        while not ips:
> +            ips = _lxc.Container.get_ips(self, **kwargs)

I suppose -1 meaning 'infinite timeout' will just work ... :)

> +            if timeout == 0:
> +                break
> +
> +            timeout -= 1
> +            time.sleep(1)
> +
> +        return ips
> +
>      def set_config_item(self, key, value):
>          """
>              Set a config key to a provided value.
> -- 
> 1.8.3.2
> 
> 
> ------------------------------------------------------------------------------
> This SF.net email is sponsored by Windows:
> 
> Build for Windows Store.
> 
> http://p.sf.net/sfu/windows-dev2dev
> _______________________________________________
> 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