Merge "Use admin client to retrieve container host"

This commit is contained in:
Zuul 2018-01-02 06:35:58 +00:00 committed by Gerrit Code Review
commit 5ee97781a1
2 changed files with 34 additions and 31 deletions

View File

@ -167,12 +167,12 @@ class ZunClient(rest_client.RestClient):
body=model.to_json(), **kwargs)
return self.deserialize(resp, body, container_model.ContainerEntity)
def get_container(self, container_id):
resp, body = self.get(self.container_uri(container_id))
def get_container(self, container_id, params=None):
resp, body = self.get(self.container_uri(container_id, params=params))
return self.deserialize(resp, body, container_model.ContainerEntity)
def list_containers(self, **kwargs):
resp, body = self.get(self.containers_uri(), **kwargs)
def list_containers(self, params=None, **kwargs):
resp, body = self.get(self.containers_uri(params=params), **kwargs)
return self.deserialize(resp, body,
container_model.ContainerCollection)

View File

@ -53,7 +53,8 @@ class TestContainer(base.BaseZunTest):
def tearDown(self):
hosts = []
_, model = self.container_client.list_containers()
_, model = self.os_admin.container_client.list_containers(
params={'all_tenants': True})
for c in model.containers:
if c['uuid'] in self.containers:
if c['host'] and c['host'] not in hosts:
@ -71,7 +72,7 @@ class TestContainer(base.BaseZunTest):
for host in hosts:
# NOTE(kiennt): Default docker remote url
# Remove networks in all hosts
docker_base_url = self._get_docker_url(host)
docker_base_url = self._get_docker_url(host=host)
networks = self.docker_client.list_networks(project_id,
docker_base_url)
for network in networks:
@ -104,11 +105,12 @@ class TestContainer(base.BaseZunTest):
@decorators.idempotent_id('cef53a56-22b7-4808-b01c-06b2b7126115')
def test_delete_container(self):
_, container = self._create_container()
docker_url = self._get_docker_url(container)
resp, _ = self.container_client.delete_container(container.uuid)
self.assertEqual(204, resp.status)
self.container_client.ensure_container_deleted(container.uuid)
container = self.docker_client.get_container(
container.uuid, self._get_docker_url(container.host))
container.uuid, docker_url)
self.assertIsNone(container)
@decorators.idempotent_id('ef69c9e7-0ce0-4e14-b7ec-c1dc581a3927')
@ -151,7 +153,7 @@ class TestContainer(base.BaseZunTest):
container = self.docker_client.get_container(
model.uuid,
self._get_docker_url(model.host))
self._get_docker_url(model))
env = container.get('Config').get('Env')
self.assertTrue('key1=env1', env)
self.assertTrue('key2=env2', env)
@ -163,7 +165,7 @@ class TestContainer(base.BaseZunTest):
container = self.docker_client.get_container(
model.uuid,
self._get_docker_url(model.host))
self._get_docker_url(model))
labels = container.get('Config').get('Labels')
self.assertTrue('key1=label1', labels)
self.assertTrue('key2=label2', labels)
@ -175,7 +177,7 @@ class TestContainer(base.BaseZunTest):
container = self.docker_client.get_container(
model.uuid,
self._get_docker_url(model.host))
self._get_docker_url(model))
policy = container.get('HostConfig').get('RestartPolicy')
self.assertEqual('on-failure', policy['Name'])
self.assertTrue(2, policy['MaximumRetryCount'])
@ -186,7 +188,7 @@ class TestContainer(base.BaseZunTest):
container = self.docker_client.get_container(
model.uuid,
self._get_docker_url(model.host))
self._get_docker_url(model))
tty = container.get('Config').get('Tty')
stdin_open = container.get('Config').get('OpenStdin')
self.assertIs(True, tty)
@ -270,14 +272,14 @@ class TestContainer(base.BaseZunTest):
self.container_client.ensure_container_in_desired_state(
model.uuid, 'Stopped')
self.assertEqual('Stopped',
self._get_container_state(model.uuid, model.host))
self._get_container_state(model))
resp, _ = self.container_client.start_container(model.uuid)
self.assertEqual(202, resp.status)
self.container_client.ensure_container_in_desired_state(
model.uuid, 'Running')
self.assertEqual('Running',
self._get_container_state(model.uuid, model.host))
self._get_container_state(model))
@decorators.idempotent_id('b5f39756-8898-4e0e-a48b-dda0a06b66b6')
def test_pause_unpause_container(self):
@ -288,14 +290,14 @@ class TestContainer(base.BaseZunTest):
self.container_client.ensure_container_in_desired_state(
model.uuid, 'Paused')
self.assertEqual('Paused',
self._get_container_state(model.uuid, model.host))
self._get_container_state(model))
resp, _ = self.container_client.unpause_container(model.uuid)
self.assertEqual(202, resp.status)
self.container_client.ensure_container_in_desired_state(
model.uuid, 'Running')
self.assertEqual('Running',
self._get_container_state(model.uuid, model.host))
self._get_container_state(model))
@decorators.idempotent_id('6179a588-3d48-4372-9599-f228411d1449')
def test_kill_container(self):
@ -306,12 +308,12 @@ class TestContainer(base.BaseZunTest):
self.container_client.ensure_container_in_desired_state(
model.uuid, 'Stopped')
self.assertEqual('Stopped',
self._get_container_state(model.uuid, model.host))
self._get_container_state(model))
@decorators.idempotent_id('c2e54321-0a70-4331-ba62-9dcaa75ac250')
def test_reboot_container(self):
_, model = self._run_container()
docker_base_url = self._get_docker_url(model.host)
docker_base_url = self._get_docker_url(model)
container = self.docker_client.get_container(model.uuid,
docker_base_url)
pid = container.get('State').get('Pid')
@ -321,7 +323,7 @@ class TestContainer(base.BaseZunTest):
self.docker_client.ensure_container_pid_changed(model.uuid, pid,
docker_base_url)
self.assertEqual('Running',
self._get_container_state(model.uuid, model.host))
self._get_container_state(model))
# assert pid is changed
container = self.docker_client.get_container(model.uuid,
docker_base_url)
@ -348,7 +350,7 @@ class TestContainer(base.BaseZunTest):
_, model = self._run_container(cpu=0.1, memory=100)
self.assertEqual('100M', model.memory)
self.assertEqual(0.1, model.cpu)
docker_base_url = self._get_docker_url(model.host)
docker_base_url = self._get_docker_url(model)
container = self.docker_client.get_container(model.uuid,
docker_base_url)
self._assert_resource_constraints(container, cpu=0.1, memory=100)
@ -442,8 +444,7 @@ class TestContainer(base.BaseZunTest):
resp, model = self.container_client.get_container(model.uuid)
self.assertEqual(200, resp.status)
self.assertEqual('Created', model.status)
self.assertEqual('Created', self._get_container_state(model.uuid,
model.host))
self.assertEqual('Created', self._get_container_state(model))
return resp, model
def _run_container(self, gen_model=None, **kwargs):
@ -459,17 +460,12 @@ class TestContainer(base.BaseZunTest):
# Assert the container is started
resp, model = self.container_client.get_container(model.uuid)
self.assertEqual('Running', model.status)
self.assertEqual('Running', self._get_container_state(model.uuid,
model.host))
self.assertIsNotNone(model.host)
self.assertEqual('Running', self._get_container_state(model))
return resp, model
def _get_container_state(self, container_id, docker_host=None):
if docker_host is not None:
container = self.docker_client.get_container(
container_id, self._get_docker_url(docker_host))
else:
container = self.docker_client.get_container(container_id)
def _get_container_state(self, model):
container = self.docker_client.get_container(
model.uuid, self._get_docker_url(model))
status = container.get('State')
if status.get('Error') is True:
return 'Error'
@ -504,7 +500,14 @@ class TestContainer(base.BaseZunTest):
return sg_names
def _get_docker_url(self, host='localhost', protocol='tcp', port='2375'):
def _get_docker_url(self, container=None, host='localhost'):
protocol = 'tcp'
port = '2375'
if container:
if not hasattr(container, 'host'):
_, container = self.os_admin.container_client.get_container(
container.uuid, params={'all_tenants': True})
host = container.host
# NOTE(kiennt): By default, devstack-plugin-container will
# set docker_api_url = {
# "unix://$DOCKER_ENGINE_SOCKET_FILE",