Merge "RepoTag is null in manifest.json"

This commit is contained in:
Zuul 2018-03-05 02:13:55 +00:00 committed by Gerrit Code Review
commit de0cd125b4
4 changed files with 29 additions and 5 deletions

View File

@ -191,7 +191,10 @@ class DockerDriver(driver.ContainerDriver):
host_config['storage_opt'] = {'size': disk_size}
kwargs['host_config'] = docker.create_host_config(**host_config)
image_repo = image['repo'] + ":" + image['tag']
if image['tag']:
image_repo = image['repo'] + ":" + image['tag']
else:
image_repo = image['repo']
response = docker.create_container(image_repo, **kwargs)
container.container_id = response['Id']

View File

@ -82,9 +82,13 @@ class DockerHTTPClient(docker.APIClient):
fest = fil.extractfile('manifest.json')
data = fest.read()
data = jsonutils.loads(encodeutils.safe_decode(data))
repo_tag = data[0]['RepoTags'][0]
repo, tag = repo_tag.split(":")
image['repo'], image['tag'] = repo, tag
repo_tags = data[0]['RepoTags']
if repo_tags:
repo, tag = repo_tags[0].split(":")
image['repo'], image['tag'] = repo, tag
else:
image_uuid = data[0]['Config'].split('.')[0]
image['repo'], image['tag'] = image_uuid, ''
def exec_resize(self, exec_id, height=None, width=None):
# NOTE(hongbin): This is a temporary work-around for a docker issue

View File

@ -105,7 +105,7 @@ class TestDockerDriver(base.DriverTestCase):
self.mock_docker.inspect_container = mock.Mock(
return_value={'State': 'created',
'Config': {'Cmd': ['fake_command']}})
image = {'path': '', 'image': '', 'repo': '', 'tag': ''}
image = {'path': '', 'image': '', 'repo': 'test', 'tag': 'test'}
mock_container = self.mock_default_container
mock_container.status = 'Creating'
networks = [{'network': 'fake-network'}]

View File

@ -57,3 +57,20 @@ class TestDockerHTTPClient(base.DriverTestCase):
self.client.read_tar_image(fake_image)
self.assertEqual('cirros', fake_image['repo'])
self.assertEqual('latest', fake_image['tag'])
@mock.patch('tarfile.open')
def test_read_tar_image_no_repotag(self, mock_open):
fake_image = {'path': 'fake-path'}
mock_context_manager = mock.MagicMock()
mock_open.return_value = mock_context_manager
mock_file = mock.MagicMock()
mock_context_manager.__enter__.return_value = mock_file
mock_data = [{"Config": "fake_config",
"RepoTags": "",
"Layers": ["fake_layer", "fake_layer2"]}]
mock_file.extractfile.return_value.read.return_value = \
jsonutils.dumps(mock_data, separators=(',', ':'))
self.client.read_tar_image(fake_image)
self.assertEqual('fake_config', fake_image['repo'])
self.assertEqual('', fake_image['tag'])