[lxc-devel] [PATCH 3/3] python3: Update apitest

Serge Hallyn serge.hallyn at ubuntu.com
Thu Feb 13 19:12:28 UTC 2014


Quoting Stéphane Graber (stgraber at ubuntu.com):
> This update will make it work unprivileged as well as testing a few of
> the new functions.
> 
> Signed-off-by: Stéphane Graber <stgraber at ubuntu.com>

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

> ---
>  src/python-lxc/examples/api_test.py | 56 ++++++++++++++++++++++++++++---------
>  1 file changed, 43 insertions(+), 13 deletions(-)
> 
> diff --git a/src/python-lxc/examples/api_test.py b/src/python-lxc/examples/api_test.py
> index 1ac1e13..9f935d7 100755
> --- a/src/python-lxc/examples/api_test.py
> +++ b/src/python-lxc/examples/api_test.py
> @@ -25,15 +25,15 @@
>  
>  import lxc
>  import uuid
> +import os
> +import subprocess
>  import sys
>  import time
>  
> -# Some constants
> -LXC_TEMPLATE = "ubuntu"
> -
>  # Let's pick a random name, avoiding clashes
>  CONTAINER_NAME = str(uuid.uuid1())
>  CLONE_NAME = str(uuid.uuid1())
> +RENAME_NAME = str(uuid.uuid1())
>  
>  ## Instantiate the container instance
>  print("Getting instance for '%s'" % CONTAINER_NAME)
> @@ -48,9 +48,25 @@ assert(container.name == CONTAINER_NAME)
>  assert(not container.running)
>  assert(container.state == "STOPPED")
>  
> +# Try to get the host architecture for dpkg systems
> +arch = "i386"
> +try:
> +    with open(os.path.devnull, "w") as devnull:
> +        dpkg = subprocess.Popen(['dpkg', '--print-architecture'],
> +                                stderr=devnull, stdout=subprocess.PIPE,
> +                                universal_newlines=True)
> +
> +        if dpkg.wait() == 0:
> +            arch = dpkg.stdout.read().strip()
> +except:
> +    pass
> +
>  ## Create a rootfs
> -print("Creating rootfs using '%s'" % LXC_TEMPLATE)
> -container.create(LXC_TEMPLATE)
> +print("Creating rootfs using 'download', arch=%s" % arch)
> +container.create("download", 0,
> +                 {"dist": "ubuntu",
> +                  "release": "trusty",
> +                  "arch": arch})
>  
>  assert(container.defined)
>  assert(container.name == CONTAINER_NAME
> @@ -101,12 +117,23 @@ while not ips or count == 10:
>      ips = container.get_ips()
>      time.sleep(1)
>      count += 1
> -container.attach_wait(lxc.attach_run_command, ["ifconfig", "eth0"],
> -                      namespaces=(lxc.CLONE_NEWNET + lxc.CLONE_NEWUTS))
> +
> +if os.geteuid():
> +    container.attach_wait(lxc.attach_run_command, ["ifconfig", "eth0"],
> +                          namespaces=(lxc.CLONE_NEWUSER + lxc.CLONE_NEWNET
> +                                      + lxc.CLONE_NEWUTS))
> +else:
> +    container.attach_wait(lxc.attach_run_command, ["ifconfig", "eth0"],
> +                          namespaces=(lxc.CLONE_NEWNET + lxc.CLONE_NEWUTS))
>  
>  # A few basic checks of the current state
>  assert(len(ips) > 0)
>  
> +## Test running config
> +assert(container.name == CONTAINER_NAME
> +       == container.get_config_item("lxc.utsname")
> +       == container.get_running_config_item("lxc.utsname"))
> +
>  ## Testing cgroups a bit
>  print("Testing cgroup API")
>  max_mem = container.get_cgroup_item("memory.max_usage_in_bytes")
> @@ -155,12 +182,15 @@ assert(not container.running)
>  assert(container.state == "STOPPED")
>  
>  ## Cloning the container
> -print("Cloning the container")
> -clone = lxc.Container(CLONE_NAME)
> -clone.clone(container.name)
> -clone.start()
> -clone.stop()
> -clone.destroy()
> +print("Cloning the container as '%s'" % CLONE_NAME)
> +clone = container.clone(CLONE_NAME)
> +assert(clone is not False)
> +
> +print ("Renaming the clone to '%s'" % RENAME_NAME)
> +rename = clone.rename(RENAME_NAME)
> +rename.start()
> +rename.stop()
> +rename.destroy()
>  
>  ## Destroy the container
>  print("Destroying the container")
> -- 
> 1.9.rc1
> 
> _______________________________________________
> lxc-devel mailing list
> lxc-devel at lists.linuxcontainers.org
> http://lists.linuxcontainers.org/listinfo/lxc-devel


More information about the lxc-devel mailing list