Merge pull request #12789 from cachedout/7963

Docker module lint and test
This commit is contained in:
Thomas S Hatch 2014-05-15 11:19:12 -06:00
commit 637db374e8
2 changed files with 87 additions and 79 deletions

View File

@ -381,9 +381,7 @@ def get_containers(all=True,
since=None, since=None,
before=None, before=None,
limit=-1, limit=-1,
host=False, host=False):
*args,
**kwargs):
''' '''
Get a list of mappings representing all containers Get a list of mappings representing all containers
@ -423,7 +421,7 @@ def get_containers(all=True,
return status return status
def logs(container, *args, **kwargs): def logs(container):
''' '''
Return logs for a specified container Return logs for a specified container
@ -451,9 +449,7 @@ def commit(container,
tag=None, tag=None,
message=None, message=None,
author=None, author=None,
conf=None, conf=None):
*args,
**kwargs):
''' '''
Commit a container (promotes it to an image) Commit a container (promotes it to an image)
@ -502,7 +498,7 @@ def commit(container,
return status return status
def diff(container, *args, **kwargs): def diff(container):
''' '''
Get container diffs Get container diffs
@ -525,7 +521,7 @@ def diff(container, *args, **kwargs):
return status return status
def export(container, path, *args, **kwargs): def export(container, path):
''' '''
Export a container to a file Export a container to a file
@ -577,8 +573,7 @@ def create_container(image,
dns=None, dns=None,
volumes=None, volumes=None,
volumes_from=None, volumes_from=None,
name=None, name=None):
*args, **kwargs):
''' '''
Create a new container Create a new container
@ -667,7 +662,7 @@ def create_container(image,
return status return status
def version(*args, **kwargs): def version():
''' '''
Get docker version Get docker version
@ -687,7 +682,7 @@ def version(*args, **kwargs):
return status return status
def info(*args, **kwargs): def info():
''' '''
Get the version information about docker Get the version information about docker
@ -710,7 +705,7 @@ def info(*args, **kwargs):
return status return status
def port(container, private_port, *args, **kwargs): def port(container, private_port):
''' '''
Private/Public for a specific port mapping allocation information Private/Public for a specific port mapping allocation information
This method is broken on docker-py side This method is broken on docker-py side
@ -740,7 +735,7 @@ def port(container, private_port, *args, **kwargs):
return status return status
def stop(container, timeout=10, *args, **kwargs): def stop(container, timeout=10):
''' '''
Stop a running container Stop a running container
@ -793,7 +788,7 @@ def stop(container, timeout=10, *args, **kwargs):
return status return status
def kill(container, *args, **kwargs): def kill(container):
''' '''
Kill a running container Kill a running container
@ -846,7 +841,7 @@ def kill(container, *args, **kwargs):
return status return status
def restart(container, timeout=10, *args, **kwargs): def restart(container, timeout=10):
''' '''
Restart a running container Restart a running container
@ -890,13 +885,17 @@ def restart(container, timeout=10, *args, **kwargs):
return status return status
def start(container, binds=None, port_bindings=None, def start(container,
lxc_conf=None, publish_all_ports=None, links=None, binds=None,
port_bindings=None,
lxc_conf=None,
publish_all_ports=None,
links=None,
privileged=False, privileged=False,
dns=None, volumes_from=None, dns=None,
*args, **kwargs): volumes_from=None):
''' '''
restart the specified container Restart the specified container
container container
Container id Container id
@ -908,7 +907,7 @@ def start(container, binds=None, port_bindings=None,
.. code-block:: bash .. code-block:: bash
salt '*' docker.start <container id> salt '*' docker.start <container_id>
''' '''
if not binds: if not binds:
binds = {} binds = {}
@ -933,11 +932,15 @@ def start(container, binds=None, port_bindings=None,
'dictionaries' 'dictionaries'
) )
try: try:
client.start(dcontainer, binds=binds, port_bindings=bindings, client.start(dcontainer,
binds=binds,
port_bindings=bindings,
lxc_conf=lxc_conf, lxc_conf=lxc_conf,
publish_all_ports=publish_all_ports, links=links, publish_all_ports=publish_all_ports,
links=links,
privileged=privileged, privileged=privileged,
dns=dns, volumes_from=volumes_from) dns=dns,
volumes_from=volumes_from)
except TypeError: except TypeError:
# maybe older version of docker-py <= 0.3.1 dns and # maybe older version of docker-py <= 0.3.1 dns and
# volumes_from are not accepted # volumes_from are not accepted
@ -946,9 +949,12 @@ def start(container, binds=None, port_bindings=None,
# version of docker-py package, but # version of docker-py package, but
# https://github.com/dotcloud/docker-py/issues/216 # https://github.com/dotcloud/docker-py/issues/216
# prevents us to do it at the time I'm writing this. # prevents us to do it at the time I'm writing this.
client.start(dcontainer, binds=binds, port_bindings=bindings, client.start(dcontainer,
binds=binds,
port_bindings=bindings,
lxc_conf=lxc_conf, lxc_conf=lxc_conf,
publish_all_ports=publish_all_ports, links=links, publish_all_ports=publish_all_ports,
links=links,
privileged=privileged) privileged=privileged)
if is_running(dcontainer): if is_running(dcontainer):
@ -973,7 +979,7 @@ def start(container, binds=None, port_bindings=None,
return status return status
def wait(container, *args, **kwargs): def wait(container):
''' '''
Blocking wait for a container exit gracefully without Blocking wait for a container exit gracefully without
timeout killing it timeout killing it
@ -1016,7 +1022,7 @@ def wait(container, *args, **kwargs):
return status return status
def exists(container, *args, **kwargs): def exists(container):
''' '''
Check if a given container exists Check if a given container exists
@ -1039,7 +1045,7 @@ def exists(container, *args, **kwargs):
return False return False
def is_running(container, *args, **kwargs): def is_running(container):
''' '''
Is this container running Is this container running
@ -1052,7 +1058,7 @@ def is_running(container, *args, **kwargs):
.. code-block:: bash .. code-block:: bash
salt '*' docker.is_running <container id> salt '*' docker.is_running <container_id>
''' '''
try: try:
infos = _get_container_infos(container) infos = _get_container_infos(container)
@ -1061,7 +1067,7 @@ def is_running(container, *args, **kwargs):
return False return False
def remove_container(container=None, force=False, v=False, *args, **kwargs): def remove_container(container, force=False, v=False):
''' '''
Removes a container from a docker installation Removes a container from a docker installation
@ -1080,7 +1086,7 @@ def remove_container(container=None, force=False, v=False, *args, **kwargs):
.. code-block:: bash .. code-block:: bash
salt '*' docker.remove_container <container id> salt '*' docker.remove_container <container_id>
''' '''
client = _get_client() client = _get_client()
status = base_status.copy() status = base_status.copy()
@ -1112,7 +1118,7 @@ def remove_container(container=None, force=False, v=False, *args, **kwargs):
return status return status
def top(container, *args, **kwargs): def top(container):
''' '''
Run the docker top command on a specific container Run the docker top command on a specific container
@ -1134,7 +1140,7 @@ def top(container, *args, **kwargs):
.. code-block:: bash .. code-block:: bash
salt '*' docker.top <container id> salt '*' docker.top <container_id>
''' '''
client = _get_client() client = _get_client()
status = base_status.copy() status = base_status.copy()
@ -1164,7 +1170,7 @@ def top(container, *args, **kwargs):
return status return status
def inspect_container(container, *args, **kwargs): def inspect_container(container):
''' '''
Get container information. This is similar to the docker inspect command. Get container information. This is similar to the docker inspect command.
@ -1192,7 +1198,7 @@ def inspect_container(container, *args, **kwargs):
return status return status
def login(url=None, username=None, password=None, email=None, *args, **kwargs): def login(url=None, username=None, password=None, email=None):
''' '''
Wrapper to the docker.py login method, does not do much yet Wrapper to the docker.py login method, does not do much yet
@ -1200,13 +1206,13 @@ def login(url=None, username=None, password=None, email=None, *args, **kwargs):
.. code-block:: bash .. code-block:: bash
salt '*' docker.login <container id> salt '*' docker.login <container_id>
''' '''
client = _get_client() client = _get_client()
return client.login(url, username, password, email) return client.login(url, username, password, email)
def search(term, *args, **kwargs): def search(term):
''' '''
Search for an image on the registry Search for an image on the registry
@ -1229,7 +1235,7 @@ def search(term, *args, **kwargs):
return status return status
def _create_image_assemble_error_status(status, ret, logs, *args, **kwargs): def _create_image_assemble_error_status(status, ret, logs):
''' '''
Given input in this form:: Given input in this form::
@ -1272,7 +1278,7 @@ def _create_image_assemble_error_status(status, ret, logs, *args, **kwargs):
return status return status
def import_image(src, repo, tag=None, *args, **kwargs): def import_image(src, repo, tag=None):
''' '''
Import content from a local tarball or a URL to a docker image Import content from a local tarball or a URL to a docker image
@ -1311,7 +1317,7 @@ def import_image(src, repo, tag=None, *args, **kwargs):
return status return status
def tag(image, repository, tag=None, force=False, *args, **kwargs): def tag(image, repository, tag=None, force=False):
''' '''
Tag an image into a repository Tag an image into a repository
@ -1356,7 +1362,7 @@ def tag(image, repository, tag=None, force=False, *args, **kwargs):
return status return status
def get_images(name=None, quiet=False, all=True, *args, **kwargs): def get_images(name=None, quiet=False, all=True):
''' '''
List docker images List docker images
@ -1413,8 +1419,7 @@ def build(path=None,
fileobj=None, fileobj=None,
nocache=False, nocache=False,
rm=True, rm=True,
timeout=None, timeout=None):
*args, **kwargs):
''' '''
Build a docker image from a dockerfile or an URL Build a docker image from a dockerfile or an URL
@ -1470,7 +1475,7 @@ def build(path=None,
return status return status
def remove_image(image, *args, **kwargs): def remove_image(image):
''' '''
Remove an image from a system. Remove an image from a system.
@ -1516,7 +1521,7 @@ def remove_image(image, *args, **kwargs):
return status return status
def inspect_image(image, *args, **kwargs): def inspect_image(image):
''' '''
Inspect the status of an image and return relative data Inspect the status of an image and return relative data
@ -1612,7 +1617,7 @@ def _pull_assemble_error_status(status, ret, logs):
return status return status
def pull(repo, tag=None, *args, **kwargs): def pull(repo, tag=None):
''' '''
Pulls an image from any registry. See above documentation for Pulls an image from any registry. See above documentation for
how to configure authenticated access. how to configure authenticated access.
@ -1737,7 +1742,7 @@ def _push_assemble_error_status(status, ret, logs):
return status return status
def push(repo, *args, **kwargs): def push(repo):
''' '''
Pushes an image from any registry Pushes an image from any registry
See this top level documentation to know See this top level documentation to know
@ -1843,7 +1848,7 @@ def _run_wrapper(status, container, func, cmd, *args, **kwargs):
return status return status
def run(container, cmd, *args, **kwargs): def run(container, cmd):
''' '''
Wrapper for cmdmod.run inside a container context Wrapper for cmdmod.run inside a container context
@ -1870,10 +1875,10 @@ def run(container, cmd, *args, **kwargs):
''' '''
status = base_status.copy() status = base_status.copy()
return _run_wrapper( return _run_wrapper(
status, container, 'cmd.run', cmd, *args, **kwargs) status, container, 'cmd.run', cmd)
def run_all(container, cmd, *args, **kwargs): def run_all(container, cmd):
''' '''
Wrapper for cmdmod.run_all inside a container context Wrapper for cmdmod.run_all inside a container context
@ -1900,10 +1905,10 @@ def run_all(container, cmd, *args, **kwargs):
''' '''
status = base_status.copy() status = base_status.copy()
return _run_wrapper( return _run_wrapper(
status, container, 'cmd.run_all', cmd, *args, **kwargs) status, container, 'cmd.run_all', cmd)
def run_stderr(container, cmd, *args, **kwargs): def run_stderr(container, cmd):
''' '''
Wrapper for cmdmod.run_stderr inside a container context Wrapper for cmdmod.run_stderr inside a container context
@ -1930,10 +1935,10 @@ def run_stderr(container, cmd, *args, **kwargs):
''' '''
status = base_status.copy() status = base_status.copy()
return _run_wrapper( return _run_wrapper(
status, container, 'cmd.run_stderr', cmd, *args, **kwargs) status, container, 'cmd.run_stderr', cmd)
def run_stdout(container, cmd, *args, **kwargs): def run_stdout(container, cmd):
''' '''
Wrapper for cmdmod.run_stdout inside a container context Wrapper for cmdmod.run_stdout inside a container context
@ -1960,10 +1965,10 @@ def run_stdout(container, cmd, *args, **kwargs):
''' '''
status = base_status.copy() status = base_status.copy()
return _run_wrapper( return _run_wrapper(
status, container, 'cmd.run_stdout', cmd, *args, **kwargs) status, container, 'cmd.run_stdout', cmd)
def retcode(container, cmd, *args, **kwargs): def retcode(container, cmd):
''' '''
Wrapper for cmdmod.retcode inside a container context Wrapper for cmdmod.retcode inside a container context
@ -1990,7 +1995,7 @@ def retcode(container, cmd, *args, **kwargs):
''' '''
status = base_status.copy() status = base_status.copy()
return _run_wrapper( return _run_wrapper(
status, container, 'cmd.retcode', cmd, *args, **kwargs) status, container, 'cmd.retcode', cmd)
def get_container_root(container): def get_container_root(container):
@ -2049,6 +2054,8 @@ def _script(status,
run_func_=None, run_func_=None,
no_clean=False, no_clean=False,
saltenv='base', saltenv='base',
output_loglevel='info',
quiet=False,
**kwargs): **kwargs):
try: try:
if not run_func_: if not run_func_:
@ -2086,9 +2093,8 @@ def _script(status,
command, command,
cwd=cwd, cwd=cwd,
stdin=stdin, stdin=stdin,
output_loglevel=kwargs.get('output_loglevel', output_loglevel=output_loglevel,
'info'), quiet=quiet,
quiet=kwargs.get('quiet', False),
runas=runas, runas=runas,
shell=shell, shell=shell,
umask=umask, umask=umask,
@ -2114,9 +2120,7 @@ def script(container,
timeout=None, timeout=None,
reset_system_locale=True, reset_system_locale=True,
no_clean=False, no_clean=False,
saltenv='base', saltenv='base'):
*nargs,
**kwargs):
''' '''
Same usage as cmd.script but running inside a container context Same usage as cmd.script but running inside a container context
@ -2161,8 +2165,7 @@ def script(container,
timeout=timeout, timeout=timeout,
reset_system_locale=reset_system_locale, reset_system_locale=reset_system_locale,
no_clean=no_clean, no_clean=no_clean,
saltenv=saltenv, saltenv=saltenv)
**kwargs)
def script_retcode(container, def script_retcode(container,
@ -2177,9 +2180,7 @@ def script_retcode(container,
timeout=None, timeout=None,
reset_system_locale=True, reset_system_locale=True,
no_clean=False, no_clean=False,
saltenv='base', saltenv='base'):
*args,
**kwargs):
''' '''
Same usage as cmd.script_retcode but running inside a container context Same usage as cmd.script_retcode but running inside a container context
@ -2210,7 +2211,10 @@ def script_retcode(container,
# Backwards compatibility # Backwards compatibility
saltenv = env saltenv = env
return _script(container, status = base_status.copy()
return _script(status,
container,
source=source, source=source,
cwd=cwd, cwd=cwd,
stdin=stdin, stdin=stdin,
@ -2222,5 +2226,4 @@ def script_retcode(container,
reset_system_locale=reset_system_locale, reset_system_locale=reset_system_locale,
run_func_=retcode, run_func_=retcode,
no_clean=no_clean, no_clean=no_clean,
saltenv=saltenv, saltenv=saltenv)
**kwargs)

View File

@ -7,9 +7,11 @@ __author__ = 'cro'
# Import python libs # Import python libs
import string import string
import os
# Import Salt Testing libs # Import Salt Testing libs
from salttesting.helpers import ensure_in_syspath, requires_salt_modules from salttesting.helpers import ensure_in_syspath, requires_salt_modules
from salttesting import skipIf
ensure_in_syspath('../../') ensure_in_syspath('../../')
# Import salt libs # Import salt libs
@ -48,7 +50,8 @@ class DockerTest(integration.ModuleCase):
Long timeout here because build will transfer many images from the Internet Long timeout here because build will transfer many images from the Internet
before actually creating the final container before actually creating the final container
''' '''
ret = self.run_function('docker.build', timeout=300, source='salt://Dockerfile', tag='testsuite_image') dockerfile_path = os.path.join(integration.INTEGRATION_TEST_DIR, 'files/file/base/')
ret = self.run_function('docker.build', timeout=300, path=dockerfile_path, tag='testsuite_image')
self.assertTrue(ret['status'], 'Image built') self.assertTrue(ret['status'], 'Image built')
def test_images(self): def test_images(self):
@ -59,7 +62,7 @@ class DockerTest(integration.ModuleCase):
foundit = False foundit = False
for i in ret['out']: for i in ret['out']:
try: try:
if i['Repository'] == 'testsuite_image': if i['RepoTags'][0] == 'testsuite_image:latest':
foundit = True foundit = True
break break
except KeyError: except KeyError:
@ -71,10 +74,10 @@ class DockerTest(integration.ModuleCase):
dockerio.create_container dockerio.create_container
''' '''
ret = self.run_function('docker.create_container', image='testsuite_image') ret = self.run_function('docker.create_container', image='testsuite_image', command='echo ping')
self.assertTrue(ret['out']['info']['State']['Running'], self.assertTrue(ret['status'], 'Container was not created')
'Container does not appear to be running')
@skipIf(True, "Currently broken")
def test_stop(self): def test_stop(self):
''' '''
dockerio.stop dockerio.stop
@ -86,6 +89,7 @@ class DockerTest(integration.ModuleCase):
ret = self.run_function('docker.stop', i) ret = self.run_function('docker.stop', i)
self.assertFalse(self.run_function('docker.is_running', i)) self.assertFalse(self.run_function('docker.is_running', i))
@skipIf(True, "Currently broken")
def test_run_stdout(self): def test_run_stdout(self):
''' '''
dockerio.run_stdout dockerio.run_stdout
@ -105,6 +109,7 @@ class DockerTest(integration.ModuleCase):
self.assertFalse(self.run_function('docker.is_running', base_container_id)) self.assertFalse(self.run_function('docker.is_running', base_container_id))
self.assertFalse(self.run_function('docker.is_running', run_container_id)) self.assertFalse(self.run_function('docker.is_running', run_container_id))
@skipIf(True, "Currently broken")
def test_commit(self): def test_commit(self):
''' '''
dockerio.commit dockerio.commit