Fix some issues in container docker APIs
Change-Id: Ie25d194cbce77df2c002ef20ca0d8fde1a460dfe
This commit is contained in:
parent
629cafab3e
commit
b0d5dfce6c
@ -17,11 +17,6 @@
|
||||
"container:unpause": "rule:admin_or_user",
|
||||
"container:logs": "rule:admin_or_user",
|
||||
"container:execute": "rule:admin_or_user",
|
||||
"container:start": "rule:admin_or_user",
|
||||
"container:start": "rule:admin_or_user",
|
||||
"container:start": "rule:admin_or_user",
|
||||
"container:start": "rule:admin_or_user",
|
||||
"container:start": "rule:admin_or_user",
|
||||
|
||||
"magnum-service:get_all": "rule:admin_api"
|
||||
}
|
||||
}
|
||||
|
@ -309,9 +309,8 @@ class ExecuteController(object):
|
||||
LOG.debug('Calling compute.container_exec with %s command %s'
|
||||
% (container.uuid, kw['command']))
|
||||
context = pecan.request.context
|
||||
pecan.request.rpcapi.container_exec(context, container,
|
||||
kw['command'])
|
||||
return Container.convert_with_links(container)
|
||||
return pecan.request.rpcapi.container_exec(context, container,
|
||||
kw['command'])
|
||||
|
||||
|
||||
class ContainersController(object):
|
||||
|
@ -14,6 +14,7 @@
|
||||
|
||||
from oslo_log import log as logging
|
||||
|
||||
from zun.common import exception
|
||||
from zun.common.i18n import _LE
|
||||
from zun.container import driver
|
||||
|
||||
@ -36,18 +37,21 @@ class Manager(object):
|
||||
return container
|
||||
except Exception as e:
|
||||
LOG.exception(_LE("Unexpected exception: %s,"), str(e))
|
||||
raise
|
||||
if not isinstance(e, exception.ZunException):
|
||||
e = exception.ZunException("Unexpected Error: %s" % str(e))
|
||||
raise e
|
||||
|
||||
def container_delete(self, context, container):
|
||||
LOG.debug('Deleting container...', context=context,
|
||||
container=container.uuid)
|
||||
try:
|
||||
self.driver.delete(container)
|
||||
container.destroy()
|
||||
return container
|
||||
except Exception as e:
|
||||
LOG.exception(_LE("Unexpected exception: %s,"), str(e))
|
||||
raise
|
||||
if not isinstance(e, exception.ZunException):
|
||||
e = exception.ZunException("Unexpected Error: %s" % str(e))
|
||||
raise e
|
||||
|
||||
def container_list(self, context):
|
||||
LOG.debug('Showing container...', context=context)
|
||||
@ -55,7 +59,9 @@ class Manager(object):
|
||||
return self.driver.list()
|
||||
except Exception as e:
|
||||
LOG.exception(_LE("Unexpected exception: %s,"), str(e))
|
||||
raise
|
||||
if not isinstance(e, exception.ZunException):
|
||||
e = exception.ZunException("Unexpected Error: %s" % str(e))
|
||||
raise e
|
||||
|
||||
def container_show(self, context, container):
|
||||
LOG.debug('Showing container...', context=context,
|
||||
@ -66,7 +72,9 @@ class Manager(object):
|
||||
return container
|
||||
except Exception as e:
|
||||
LOG.exception(_LE("Unexpected exception: %s,"), str(e))
|
||||
raise
|
||||
if not isinstance(e, exception.ZunException):
|
||||
e = exception.ZunException("Unexpected Error: %s" % str(e))
|
||||
raise e
|
||||
|
||||
def container_reboot(self, context, container):
|
||||
LOG.debug('Rebooting container...', context=context,
|
||||
@ -77,7 +85,9 @@ class Manager(object):
|
||||
return container
|
||||
except Exception as e:
|
||||
LOG.exception(_LE("Unexpected exception: %s,"), str(e))
|
||||
raise
|
||||
if not isinstance(e, exception.ZunException):
|
||||
e = exception.ZunException("Unexpected Error: %s" % str(e))
|
||||
raise e
|
||||
|
||||
def container_stop(self, context, container):
|
||||
LOG.debug('Stopping container...', context=context,
|
||||
@ -88,7 +98,9 @@ class Manager(object):
|
||||
return container
|
||||
except Exception as e:
|
||||
LOG.exception(_LE("Unexpected exception: %s,"), str(e))
|
||||
raise
|
||||
if not isinstance(e, exception.ZunException):
|
||||
e = exception.ZunException("Unexpected Error: %s" % str(e))
|
||||
raise e
|
||||
|
||||
def container_start(self, context, container):
|
||||
LOG.debug('Starting container...', context=context,
|
||||
@ -99,7 +111,9 @@ class Manager(object):
|
||||
return container
|
||||
except Exception as e:
|
||||
LOG.exception(_LE("Unexpected exception: %s,"), str(e))
|
||||
raise
|
||||
if not isinstance(e, exception.ZunException):
|
||||
e = exception.ZunException("Unexpected Error: %s" % str(e))
|
||||
raise e
|
||||
|
||||
def container_pause(self, context, container):
|
||||
LOG.debug('Pausing container...', context=context,
|
||||
@ -110,7 +124,9 @@ class Manager(object):
|
||||
return container
|
||||
except Exception as e:
|
||||
LOG.exception(_LE("Unexpected exception: %s,"), str(e))
|
||||
raise
|
||||
if not isinstance(e, exception.ZunException):
|
||||
e = exception.ZunException("Unexpected Error: %s" % str(e))
|
||||
raise e
|
||||
|
||||
def container_unpause(self, context, container):
|
||||
LOG.debug('Unpausing container...', context=context,
|
||||
@ -121,7 +137,9 @@ class Manager(object):
|
||||
return container
|
||||
except Exception as e:
|
||||
LOG.exception(_LE("Unexpected exception: %s,"), str(e))
|
||||
raise
|
||||
if not isinstance(e, exception.ZunException):
|
||||
e = exception.ZunException("Unexpected Error: %s" % str(e))
|
||||
raise e
|
||||
|
||||
def container_logs(self, context, container):
|
||||
LOG.debug('Showing container logs...', context=context,
|
||||
@ -130,7 +148,9 @@ class Manager(object):
|
||||
return self.driver.show_logs(container)
|
||||
except Exception as e:
|
||||
LOG.exception(_LE("Unexpected exception: %s,"), str(e))
|
||||
raise
|
||||
if not isinstance(e, exception.ZunException):
|
||||
e = exception.ZunException("Unexpected Error: %s" % str(e))
|
||||
raise e
|
||||
|
||||
def container_exec(self, context, container, command):
|
||||
# TODO(hongbin): support exec command interactively
|
||||
@ -140,4 +160,6 @@ class Manager(object):
|
||||
return self.driver.execute(container, command)
|
||||
except Exception as e:
|
||||
LOG.exception(_LE("Unexpected exception: %s,"), str(e))
|
||||
raise
|
||||
if not isinstance(e, exception.ZunException):
|
||||
e = exception.ZunException("Unexpected Error: %s" % str(e))
|
||||
raise e
|
||||
|
@ -17,6 +17,7 @@ import six
|
||||
from oslo_config import cfg
|
||||
from oslo_log import log as logging
|
||||
|
||||
from zun.common import exception
|
||||
from zun.container.docker import utils as docker_utils
|
||||
from zun.container import driver
|
||||
from zun.objects import fields
|
||||
@ -64,7 +65,8 @@ class DockerDriver(driver.ContainerDriver):
|
||||
|
||||
def delete(self, container):
|
||||
with docker_utils.docker_client() as docker:
|
||||
return docker.remove_container(container.container_id)
|
||||
if container.container_id:
|
||||
docker.remove_container(container.container_id)
|
||||
|
||||
def list(self):
|
||||
with docker_utils.docker_client() as docker:
|
||||
@ -72,61 +74,94 @@ class DockerDriver(driver.ContainerDriver):
|
||||
|
||||
def show(self, container):
|
||||
with docker_utils.docker_client() as docker:
|
||||
try:
|
||||
result = docker.inspect_container(container.uuid)
|
||||
status = result.get('State')
|
||||
if status:
|
||||
if status.get('Error') is True:
|
||||
container.status = fields.ContainerStatus.ERROR
|
||||
elif status.get('Paused'):
|
||||
container.status = fields.ContainerStatus.PAUSED
|
||||
elif status.get('Running'):
|
||||
container.status = fields.ContainerStatus.RUNNING
|
||||
else:
|
||||
container.status = fields.ContainerStatus.STOPPED
|
||||
if container.container_id is None:
|
||||
return container
|
||||
|
||||
result = None
|
||||
try:
|
||||
result = docker.inspect_container(container.container_id)
|
||||
except errors.APIError as api_error:
|
||||
if '404' in str(api_error):
|
||||
container.status = fields.ContainerStatus.ERROR
|
||||
return container
|
||||
raise
|
||||
|
||||
status = result.get('State')
|
||||
if status:
|
||||
if status.get('Error') is True:
|
||||
container.status = fields.ContainerStatus.ERROR
|
||||
elif status.get('Paused'):
|
||||
container.status = fields.ContainerStatus.PAUSED
|
||||
elif status.get('Running'):
|
||||
container.status = fields.ContainerStatus.RUNNING
|
||||
else:
|
||||
container.status = fields.ContainerStatus.STOPPED
|
||||
return container
|
||||
|
||||
def reboot(self, container):
|
||||
with docker_utils.docker_client() as docker:
|
||||
if container.container_id is None:
|
||||
msg = _("Cannot reboot a uncreated container.")
|
||||
raise exception.Invalid(message=msg)
|
||||
|
||||
docker.restart(container.container_id)
|
||||
container.status = fields.ContainerStatus.RUNNING
|
||||
return container
|
||||
|
||||
def stop(self, container):
|
||||
with docker_utils.docker_client() as docker:
|
||||
if container.container_id is None:
|
||||
msg = _("Cannot stop a uncreated container.")
|
||||
raise exception.Invalid(message=msg)
|
||||
|
||||
docker.stop(container.container_id)
|
||||
container.status = fields.ContainerStatus.STOPPED
|
||||
return container
|
||||
|
||||
def start(self, container):
|
||||
with docker_utils.docker_client() as docker:
|
||||
if container.container_id is None:
|
||||
msg = _("Cannot start a uncreated container.")
|
||||
raise exception.Invalid(message=msg)
|
||||
|
||||
docker.start(container.container_id)
|
||||
container.status = fields.ContainerStatus.RUNNING
|
||||
return container
|
||||
|
||||
def pause(self, container):
|
||||
with docker_utils.docker_client() as docker:
|
||||
if container.container_id is None:
|
||||
msg = _("Cannot pause a uncreated container.")
|
||||
raise exception.Invalid(message=msg)
|
||||
|
||||
docker.pause(container.container_id)
|
||||
container.status = fields.ContainerStatus.PAUSED
|
||||
return container
|
||||
|
||||
def unpause(self, container):
|
||||
with docker_utils.docker_client() as docker:
|
||||
if container.container_id is None:
|
||||
msg = _("Cannot unpause a uncreated container.")
|
||||
raise exception.Invalid(message=msg)
|
||||
|
||||
docker.unpause(container.container_id)
|
||||
container.status = fields.ContainerStatus.RUNNING
|
||||
return container
|
||||
|
||||
def show_logs(self, container):
|
||||
with docker_utils.docker_client() as docker:
|
||||
if container.container_id is None:
|
||||
msg = _("Cannot show logs of a uncreated container.")
|
||||
raise exception.Invalid(message=msg)
|
||||
|
||||
return docker.get_container_logs(container.container_id)
|
||||
|
||||
def execute(self, container, command):
|
||||
with docker_utils.docker_client() as docker:
|
||||
if container.container_id is None:
|
||||
msg = _("Cannot execute a command in a uncreated container.")
|
||||
raise exception.Invalid(message=msg)
|
||||
|
||||
if docker_utils.is_docker_library_version_atleast('1.2.0'):
|
||||
create_res = docker.exec_create(
|
||||
container.container_id, command, True, True, False)
|
||||
|
Loading…
Reference in New Issue
Block a user