Stop hardcoding 'docker' and make it more generic

Rename:
- docker_cmd to cont_cmd
- docker_exec_args to cont_exec_args
- docker_run_args to cont_run_args
- adjust 'inspect' command logs

Change-Id: Icdced79fa74514afea9c9fcafd80bd07551c8f13
This commit is contained in:
Emilien Macchi 2018-09-10 09:26:32 -06:00
parent 6a6f99b724
commit b22598c761
7 changed files with 59 additions and 59 deletions

View File

@ -26,7 +26,7 @@ __version__ = pbr.version.VersionInfo('paunch').version_string()
LOG = logging.getLogger(__name__)
def apply(config_id, config, managed_by, labels=None, docker_cmd=None,
def apply(config_id, config, managed_by, labels=None, cont_cmd=None,
default_runtime='docker'):
"""Execute supplied container configuration.
@ -39,7 +39,7 @@ def apply(config_id, config, managed_by, labels=None, docker_cmd=None,
containers labelled with this will be modified.
:param dict labels: Optional keys/values of labels to apply to containers
created with this invocation.
:param str docker_cmd: Optional override to the docker command to run.
:param str cont_cmd: Optional override to the container command to run.
:param str default_runtime: Optional override to the default runtime used
for containers.
@ -49,7 +49,7 @@ def apply(config_id, config, managed_by, labels=None, docker_cmd=None,
:rtype: tuple
"""
if default_runtime == 'docker':
r = runner.DockerRunner(managed_by, docker_cmd=docker_cmd)
r = runner.DockerRunner(managed_by, cont_cmd=cont_cmd)
builder = compose1.ComposeV1Builder(
config_id=config_id,
config=config,
@ -57,7 +57,7 @@ def apply(config_id, config, managed_by, labels=None, docker_cmd=None,
labels=labels
)
elif default_runtime == 'podman':
r = runner.PodmanRunner(managed_by, docker_cmd=docker_cmd)
r = runner.PodmanRunner(managed_by, cont_cmd=cont_cmd)
builder = podman.PodmanBuilder(
config_id=config_id,
config=config,
@ -69,7 +69,7 @@ def apply(config_id, config, managed_by, labels=None, docker_cmd=None,
return builder.apply()
def cleanup(config_ids, managed_by, docker_cmd=None, default_runtime='docker'):
def cleanup(config_ids, managed_by, cont_cmd=None, default_runtime='docker'):
"""Delete containers no longer applied, rename others to preferred name.
:param list config_ids: List of config IDs still applied. All containers
@ -77,14 +77,14 @@ def cleanup(config_ids, managed_by, docker_cmd=None, default_runtime='docker'):
config ID is not specified in this list.
:param str managed_by: Name of the tool managing the containers. Only
containers labelled with this will be modified.
:param str docker_cmd: Optional override to the docker command to run.
:param str cont_cmd: Optional override to the container command to run.
:param str default_runtime: Optional override to the default runtime used
for containers.
"""
if default_runtime == 'docker':
r = runner.DockerRunner(managed_by, docker_cmd=docker_cmd)
r = runner.DockerRunner(managed_by, cont_cmd=cont_cmd)
elif default_runtime == 'podman':
r = runner.PodmanRunner(managed_by, docker_cmd=docker_cmd)
r = runner.PodmanRunner(managed_by, cont_cmd=cont_cmd)
LOG.warning("paunch cleanup is partially supported with podman")
else:
LOG.error("container runtime not supported: %s" % default_runtime)
@ -92,12 +92,12 @@ def cleanup(config_ids, managed_by, docker_cmd=None, default_runtime='docker'):
r.rename_containers()
def list(managed_by, docker_cmd=None, default_runtime='docker'):
def list(managed_by, cont_cmd=None, default_runtime='docker'):
"""List all containers associated with all config IDs.
:param str managed_by: Name of the tool managing the containers. Only
containers labelled with this will be modified.
:param str docker_cmd: Optional override to the docker command to run.
:param str cont_cmd: Optional override to the container command to run.
:param str default_runtime: Optional override to the default runtime used
for containers.
@ -106,16 +106,16 @@ def list(managed_by, docker_cmd=None, default_runtime='docker'):
:rtype: defaultdict(list)
"""
if default_runtime == 'docker':
r = runner.DockerRunner(managed_by, docker_cmd=docker_cmd)
r = runner.DockerRunner(managed_by, cont_cmd=cont_cmd)
elif default_runtime == 'podman':
r = runner.PodmanRunner(managed_by, docker_cmd=docker_cmd)
r = runner.PodmanRunner(managed_by, cont_cmd=cont_cmd)
else:
LOG.error("container runtime not supported: %s" % default_runtime)
return r.list_configs()
def debug(config_id, container_name, action, config, managed_by, labels=None,
docker_cmd=None, default_runtime='docker'):
cont_cmd=None, default_runtime='docker'):
"""Execute supplied container configuration.
:param str config_id: Unique config ID, should not be re-used until any
@ -130,7 +130,7 @@ def debug(config_id, container_name, action, config, managed_by, labels=None,
containers labeled with this will be modified.
:param dict labels: Optional keys/values of labels to apply to containers
created with this invocation.
:param str docker_cmd: Optional override to the docker command to run.
:param str cont_cmd: Optional override to the container command to run.
:param str default_runtime: Optional override to the default runtime used
for containers.
@ -140,7 +140,7 @@ def debug(config_id, container_name, action, config, managed_by, labels=None,
"""
if default_runtime == 'docker':
r = runner.DockerRunner(managed_by, docker_cmd=docker_cmd)
r = runner.DockerRunner(managed_by, cont_cmd=cont_cmd)
builder = compose1.ComposeV1Builder(
config_id=config_id,
config=config,
@ -148,7 +148,7 @@ def debug(config_id, container_name, action, config, managed_by, labels=None,
labels=labels
)
elif default_runtime == 'podman':
r = runner.PodmanRunner(managed_by, docker_cmd=docker_cmd)
r = runner.PodmanRunner(managed_by, cont_cmd=cont_cmd)
builder = podman.PodmanBuilder(
config_id=config_id,
config=config,
@ -159,7 +159,7 @@ def debug(config_id, container_name, action, config, managed_by, labels=None,
LOG.error("container runtime not supported: %s" % default_runtime)
if action == 'print-cmd':
cmd = [
r.docker_cmd,
r.cont_cmd,
'run',
'--name',
r.unique_container_name(container_name)
@ -168,7 +168,7 @@ def debug(config_id, container_name, action, config, managed_by, labels=None,
print(' '.join(cmd))
elif action == 'run':
cmd = [
r.docker_cmd,
r.cont_cmd,
'run',
'--name',
r.unique_container_name(container_name)
@ -184,13 +184,13 @@ def debug(config_id, container_name, action, config, managed_by, labels=None,
'"print-cmd", or "run"')
def delete(config_ids, managed_by, docker_cmd=None, default_runtime='docker'):
def delete(config_ids, managed_by, cont_cmd=None, default_runtime='docker'):
"""Delete containers with the specified config IDs.
:param list config_ids: List of config IDs to delete the containers for.
:param str managed_by: Name of the tool managing the containers. Only
containers labelled with this will be modified.
:param str docker_cmd: Optional override to the docker command to run.
:param str cont_cmd: Optional override to the container command to run.
:param str default_runtime: Optional override to the default runtime used
for containers.
"""
@ -198,9 +198,9 @@ def delete(config_ids, managed_by, docker_cmd=None, default_runtime='docker'):
LOG.warn('No config IDs specified')
if default_runtime == 'docker':
r = runner.DockerRunner(managed_by, docker_cmd=docker_cmd)
r = runner.DockerRunner(managed_by, cont_cmd=cont_cmd)
elif default_runtime == 'podman':
r = runner.PodmanRunner(managed_by, docker_cmd=docker_cmd)
r = runner.PodmanRunner(managed_by, cont_cmd=cont_cmd)
LOG.warning("paunch cleanup is partially supported with podman")
else:
LOG.error("container runtime not supported: %s" % default_runtime)

View File

@ -53,7 +53,7 @@ class BaseBuilder(object):
exit_codes = cconfig.get('exit_codes', [0])
container_name = self.runner.unique_container_name(container)
systemd_managed = (restart != 'none'
and self.runner.docker_cmd == 'podman'
and self.runner.cont_cmd == 'podman'
and action == 'run')
start_cmd = 'create' if systemd_managed else 'run'
@ -63,7 +63,7 @@ class BaseBuilder(object):
continue
cmd = [
self.runner.docker_cmd,
self.runner.cont_cmd,
start_cmd,
'--name',
container_name
@ -71,8 +71,8 @@ class BaseBuilder(object):
self.label_arguments(cmd, container)
self.container_run_args(cmd, container)
elif action == 'exec':
cmd = [self.runner.docker_cmd, 'exec']
self.docker_exec_args(cmd, container)
cmd = [self.runner.cont_cmd, 'exec']
self.cont_exec_args(cmd, container)
(cmd_stdout, cmd_stderr, returncode) = self.runner.execute(cmd)
if cmd_stdout:
@ -172,7 +172,7 @@ class BaseBuilder(object):
if v:
cmd.append('%s=%s' % (arg, v))
def docker_exec_args(self, cmd, container):
def cont_exec_args(self, cmd, container):
cconfig = self.config[container]
if 'privileged' in cconfig:
cmd.append('--privileged=%s' % str(cconfig['privileged']).lower())
@ -229,7 +229,7 @@ class BaseBuilder(object):
stop=tenacity.stop_after_attempt(4)
)
def _pull(self, image):
cmd = [self.runner.docker_cmd, 'pull', image]
cmd = [self.runner.cont_cmd, 'pull', image]
(stdout, stderr, rc) = self.runner.execute(cmd)
if rc != 0:
raise PullException(stdout, stderr, rc)

View File

@ -24,9 +24,9 @@ LOG = logging.getLogger(__name__)
class BaseRunner(object):
def __init__(self, managed_by, docker_cmd):
def __init__(self, managed_by, cont_cmd):
self.managed_by = managed_by
self.docker_cmd = docker_cmd
self.cont_cmd = cont_cmd
@staticmethod
def execute(cmd):
@ -48,7 +48,7 @@ class BaseRunner(object):
def current_config_ids(self):
# List all config_id labels for managed containers
cmd = [
self.docker_cmd, 'ps', '-a',
self.cont_cmd, 'ps', '-a',
'--filter', 'label=managed_by=%s' % self.managed_by,
'--format', '{{.Label "config_id"}}'
]
@ -59,7 +59,7 @@ class BaseRunner(object):
def containers_in_config(self, conf_id):
cmd = [
self.docker_cmd, 'ps', '-q', '-a',
self.cont_cmd, 'ps', '-q', '-a',
'--filter', 'label=managed_by=%s' % self.managed_by,
'--filter', 'label=config_id=%s' % conf_id
]
@ -70,7 +70,7 @@ class BaseRunner(object):
return [c for c in cmd_stdout.split()]
def inspect(self, name, format=None, type='container'):
cmd = [self.docker_cmd, 'inspect', '--type', type]
cmd = [self.cont_cmd, 'inspect', '--type', type]
if format:
cmd.append('--format')
cmd.append(format)
@ -84,7 +84,7 @@ class BaseRunner(object):
else:
return json.loads(cmd_stdout)[0]
except Exception as e:
LOG.error('Problem parsing docker inspect: %s' % e)
LOG.error('Problem parsing %s inspect: %s' % (e, self.cont_cmd))
def unique_container_name(self, container):
container_name = container
@ -96,7 +96,7 @@ class BaseRunner(object):
def discover_container_name(self, container, cid):
cmd = [
self.docker_cmd,
self.cont_cmd,
'ps',
'-a',
'--filter',
@ -133,7 +133,7 @@ class BaseRunner(object):
def container_names(self, conf_id=None):
# list every container name, and its container_name label
cmd = [
self.docker_cmd, 'ps', '-a',
self.cont_cmd, 'ps', '-a',
'--filter', 'label=managed_by=%s' % self.managed_by
]
if conf_id:
@ -155,9 +155,9 @@ class BaseRunner(object):
self.remove_container(container)
def remove_container(self, container):
if self.docker_cmd == 'podman':
if self.cont_cmd == 'podman':
systemd.service_delete(container)
cmd = [self.docker_cmd, 'rm', '-f', container]
cmd = [self.cont_cmd, 'rm', '-f', container]
cmd_stdout, cmd_stderr, returncode = self.execute(cmd)
if returncode != 0:
LOG.error('Error removing container: %s' % container)
@ -191,12 +191,12 @@ class BaseRunner(object):
class DockerRunner(BaseRunner):
def __init__(self, managed_by, docker_cmd=None):
docker_cmd = docker_cmd or 'docker'
super(DockerRunner, self).__init__(managed_by, docker_cmd)
def __init__(self, managed_by, cont_cmd=None):
cont_cmd = cont_cmd or 'docker'
super(DockerRunner, self).__init__(managed_by, cont_cmd)
def rename_container(self, container, name):
cmd = [self.docker_cmd, 'rename', container, name]
cmd = [self.cont_cmd, 'rename', container, name]
cmd_stdout, cmd_stderr, returncode = self.execute(cmd)
if returncode != 0:
LOG.error('Error renaming container: %s' % container)
@ -205,9 +205,9 @@ class DockerRunner(BaseRunner):
class PodmanRunner(BaseRunner):
def __init__(self, managed_by, docker_cmd=None):
docker_cmd = docker_cmd or 'podman'
super(PodmanRunner, self).__init__(managed_by, docker_cmd)
def __init__(self, managed_by, cont_cmd=None):
cont_cmd = cont_cmd or 'podman'
super(PodmanRunner, self).__init__(managed_by, cont_cmd)
def rename_container(self, container, name):
# TODO(emilien) podman doesn't support rename, we'll handle it

View File

@ -52,7 +52,7 @@ class TestBaseBuilder(base.TestCase):
}
}
r = runner.DockerRunner(managed_by='tester', docker_cmd='docker')
r = runner.DockerRunner(managed_by='tester', cont_cmd='docker')
exe = mock.Mock()
exe.side_effect = [
('exists', '', 0), # inspect for image centos:6
@ -200,7 +200,7 @@ class TestBaseBuilder(base.TestCase):
}
}
r = runner.DockerRunner(managed_by='tester', docker_cmd='docker')
r = runner.DockerRunner(managed_by='tester', cont_cmd='docker')
exe = mock.Mock()
exe.side_effect = [
# inspect for image centos:7
@ -343,7 +343,7 @@ three-12345678 three''', '', 0),
}
}
r = runner.DockerRunner(managed_by='tester', docker_cmd='docker')
r = runner.DockerRunner(managed_by='tester', cont_cmd='docker')
exe = mock.Mock()
exe.side_effect = [
('exists', '', 0), # inspect for image centos:6
@ -481,7 +481,7 @@ three-12345678 three''', '', 0),
)
@mock.patch('paunch.runner.DockerRunner', autospec=True)
def test_docker_exec_args(self, runner):
def test_cont_exec_args(self, runner):
r = runner.return_value
r.discover_container_name.return_value = 'one-12345678'
config = {
@ -495,7 +495,7 @@ three-12345678 three''', '', 0),
'foo', config, runner.return_value)
cmd = ['docker', 'exec']
self.builder.docker_exec_args(cmd, 'one')
self.builder.cont_exec_args(cmd, 'one')
self.assertEqual(
['docker', 'exec',
'--privileged=true', '--user=bar',

View File

@ -17,7 +17,7 @@ from paunch.tests import test_builder_base as tbb
class TestComposeV1Builder(tbb.TestBaseBuilder):
def test_docker_run_args(self):
def test_cont_run_args(self):
config = {
'one': {
'image': 'centos:7',

View File

@ -17,7 +17,7 @@ from paunch.tests import test_builder_base as base
class TestPodmanBuilder(base.TestBaseBuilder):
def test_docker_run_args(self):
def test_cont_run_args(self):
config = {
'one': {
'image': 'centos:7',

View File

@ -24,7 +24,7 @@ class TestPaunch(base.TestCase):
@mock.patch('paunch.runner.DockerRunner', autospec=True)
def test_apply(self, runner, builder):
paunch.apply('foo', {'bar': 'baz'}, 'tester')
runner.assert_called_once_with('tester', docker_cmd=None)
runner.assert_called_once_with('tester', cont_cmd=None)
builder.assert_called_once_with(
config_id='foo',
config={'bar': 'baz'},
@ -42,7 +42,7 @@ class TestPaunch(base.TestCase):
managed_by='tester',
labels={'bink': 'boop'})
runner.assert_called_once_with('tester', docker_cmd=None)
runner.assert_called_once_with('tester', cont_cmd=None)
builder.assert_called_once_with(
config_id='foo',
config={'bar': 'baz'},
@ -54,7 +54,7 @@ class TestPaunch(base.TestCase):
@mock.patch('paunch.runner.DockerRunner', autospec=True)
def test_cleanup(self, runner):
paunch.cleanup(['foo', 'bar'], 'tester')
runner.assert_called_once_with('tester', docker_cmd=None)
runner.assert_called_once_with('tester', cont_cmd=None)
runner.return_value.delete_missing_configs.assert_called_once_with(
['foo', 'bar'])
runner.return_value.rename_containers.assert_called_once_with()
@ -62,13 +62,13 @@ class TestPaunch(base.TestCase):
@mock.patch('paunch.runner.DockerRunner', autospec=True)
def test_list(self, runner):
paunch.list('tester')
runner.assert_called_once_with('tester', docker_cmd=None)
runner.assert_called_once_with('tester', cont_cmd=None)
runner.return_value.list_configs.assert_called_once_with()
@mock.patch('paunch.runner.DockerRunner', autospec=True)
def test_delete(self, runner):
paunch.delete(['foo', 'bar'], 'tester')
runner.assert_called_once_with('tester', docker_cmd=None)
runner.assert_called_once_with('tester', cont_cmd=None)
runner.return_value.remove_containers.assert_has_calls([
mock.call('foo'), mock.call('bar')
])
@ -77,11 +77,11 @@ class TestPaunch(base.TestCase):
@mock.patch('paunch.runner.DockerRunner')
def test_debug(self, runner, builder):
paunch.debug('foo', 'testcont', 'run', {'bar': 'baz'}, 'tester',
docker_cmd='docker')
cont_cmd='docker')
builder.assert_called_once_with(
config_id='foo',
config={'bar': 'baz'},
runner=runner.return_value,
labels=None
)
runner.assert_called_once_with('tester', docker_cmd='docker')
runner.assert_called_once_with('tester', cont_cmd='docker')