diff --git a/novadocker/tests/virt/docker/test_driver.py b/novadocker/tests/virt/docker/test_driver.py index 217284756b..5a78711d22 100644 --- a/novadocker/tests/virt/docker/test_driver.py +++ b/novadocker/tests/virt/docker/test_driver.py @@ -85,9 +85,9 @@ def _get_running_instance(self, obj=True): network_info = utils.get_test_network_info() network_info[0]['network']['subnets'][0]['meta']['dhcp_server'] = \ '1.1.1.1' - image_info = utils.get_test_image_info(None, instance_ref) - image_info['disk_format'] = 'raw' - image_info['container_format'] = 'docker' + image_info = utils.get_test_image_object(None, instance_ref) + image_info.disk_format = 'raw' + image_info.container_format = 'docker' self.connection.spawn(self.ctxt, instance_ref, image_info, [], 'herp', network_info=network_info) return instance_ref, network_info @@ -165,9 +165,9 @@ def test_create_container(self, image_info=None, instance_href=None, if instance_href is None: instance_href = utils.get_test_instance() if image_info is None: - image_info = utils.get_test_image_info(None, instance_href) - image_info['disk_format'] = 'raw' - image_info['container_format'] = 'docker' + image_info = utils.get_test_image_object(None, instance_href) + image_info.disk_format = 'raw' + image_info.container_format = 'docker' self.connection.spawn(self.context, instance_href, image_info, 'fake_files', 'fake_password', network_info=network_info) @@ -181,9 +181,9 @@ def test_create_container_empty_cmd(self, image_info=None, if instance_href is None: instance_href = utils.get_test_instance() if image_info is None: - image_info = utils.get_test_image_info(None, instance_href) - image_info['disk_format'] = 'raw' - image_info['container_format'] = 'docker' + image_info = utils.get_test_image_object(None, instance_href) + image_info.disk_format = 'raw' + image_info.container_format = 'docker' with mock.patch.object(self.mock_client, 'create_container') as mc: self.connection.spawn(self.context, instance_href, image_info, 'fake_files', 'fake_password', @@ -196,9 +196,9 @@ def test_create_container_inject_key(self, mock_inject_key): self.fixture.config(inject_key=True, group='docker') instance_href = utils.get_test_instance() instance_href.key_data = 'my_key' - image_info = utils.get_test_image_info(None, instance_href) - image_info['disk_format'] = 'raw' - image_info['container_format'] = 'docker' + image_info = utils.get_test_image_object(None, instance_href) + image_info.disk_format = 'raw' + image_info.container_format = 'docker' with mock.patch.object(self.mock_client, 'create_container'): with mock.patch.object(self.mock_client, 'start') as ms: self.connection.spawn(self.context, instance_href, image_info, @@ -217,10 +217,10 @@ def test_create_container_glance_cmd(self, image_info=None, if instance_href is None: instance_href = utils.get_test_instance() if image_info is None: - image_info = utils.get_test_image_info(None, instance_href) - image_info['disk_format'] = 'raw' - image_info['container_format'] = 'docker' - image_info['properties'] = {'os_command_line': 'uname'} + image_info = utils.get_test_image_object(None, instance_href) + image_info.disk_format = 'raw' + image_info.container_format = 'docker' + image_info.properties.os_command_line = 'uname' with mock.patch.object(self.mock_client, 'create_container') as mc: self.connection.spawn(self.context, instance_href, image_info, 'fake_files', 'fake_password', @@ -236,9 +236,9 @@ def test_create_container_vcpus_2(self, image_info=None): }) instance_href = utils.get_test_instance(flavor=flavor) if image_info is None: - image_info = utils.get_test_image_info(None, instance_href) - image_info['disk_format'] = 'raw' - image_info['container_format'] = 'docker' + image_info = utils.get_test_image_object(None, instance_href) + image_info.disk_format = 'raw' + image_info.container_format = 'docker' self.connection.spawn(self.context, instance_href, image_info, 'fake_files', 'fake_password') self._assert_cpu_shares(instance_href, vcpus=2) @@ -261,9 +261,9 @@ def test_create_container_net_setup_fails(self, mock_plug_vifs): def test_create_container_wrong_image(self): instance_href = utils.get_test_instance() - image_info = utils.get_test_image_info(None, instance_href) - image_info['disk_format'] = 'raw' - image_info['container_format'] = 'invalid_format' + image_info = utils.get_test_image_object(None, instance_href) + image_info.disk_format = 'raw' + image_info.container_format = 'invalid_format' self.assertRaises(exception.InstanceDeployFailure, self.test_create_container, image_info, instance_href) @@ -304,9 +304,9 @@ def test_cleanup_container_notfound(self, byuuid_mock, unplug_mock): def test_soft_delete_restore_container(self): instance_href = utils.get_test_instance() - image_info = utils.get_test_image_info(None, instance_href) - image_info['disk_format'] = 'raw' - image_info['container_format'] = 'docker' + image_info = utils.get_test_image_object(None, instance_href) + image_info.disk_format = 'raw' + image_info.container_format = 'docker' self.connection.spawn(self.context, instance_href, image_info, 'fake_files', 'fake_password') @@ -333,9 +333,9 @@ def test_get_memory_limit_from_sys_meta_in_db_instance(self): def test_list_instances(self): instance_href = utils.get_test_instance() - image_info = utils.get_test_image_info(None, instance_href) - image_info['disk_format'] = 'raw' - image_info['container_format'] = 'docker' + image_info = utils.get_test_image_object(None, instance_href) + image_info.disk_format = 'raw' + image_info.container_format = 'docker' self.connection.spawn(self.context, instance_href, image_info, 'fake_files', 'fake_password') @@ -350,9 +350,9 @@ def test_list_instances_none(self): def test_list_instances_no_inspect_race(self): """Assures containers that cannot be inspected are not listed.""" instance_href = utils.get_test_instance() - image_info = utils.get_test_image_info(None, instance_href) - image_info['disk_format'] = 'raw' - image_info['container_format'] = 'docker' + image_info = utils.get_test_image_object(None, instance_href) + image_info.disk_format = 'raw' + image_info.container_format = 'docker' self.connection.spawn(self.context, instance_href, image_info, 'fake_files', 'fake_password') @@ -423,14 +423,14 @@ def test_snapshot(self, byuuid_mock): def test_get_image_name(self): instance_ref = utils.get_test_instance() - image_info = utils.get_test_image_info(None, instance_ref) - image_info['container_format'] = 'docker' - image_info['name'] = 'MiXeDcAsE-image' + image_info = utils.get_test_image_object(None, instance_ref) + image_info.container_format = 'docker' + image_info.name = 'MiXeDcAsE-image' repo = self.connection._get_image_name(self.context, instance_ref, image_info) # image_name = repo.split("/")[1] - self.assertEqual(image_info['name'], repo) + self.assertEqual(image_info.name, repo) def test_get_host_uptime_returns_exec_result(self): result = '4294967296' @@ -449,9 +449,9 @@ def test_get_dns_entries(self): def test_pull_missing_image_with_shared_dir(self, mock_os): self.fixture.config(shared_directory='/fake_dir', group='docker') instance_ref = utils.get_test_instance() - image_info = utils.get_test_image_info(None, instance_ref) - image_info['name'] = 'fake_name' - image_info['id'] = 'fake_id' + image_info = utils.get_test_image_object(None, instance_ref) + image_info.name = 'fake_name' + image_info.id = 'fake_id' with mock.patch.object(self.mock_client, 'load_repository_file') as f: with mock.patch.object(self.mock_client, 'inspect_image') as i: i.return_value = 'fake_image' @@ -464,9 +464,9 @@ def test_pull_missing_image_with_shared_dir(self, mock_os): def test_find_container_by_uuid(self): instance_href = utils.get_test_instance() - image_info = utils.get_test_image_info(None, instance_href) - image_info['disk_format'] = 'raw' - image_info['container_format'] = 'docker' + image_info = utils.get_test_image_object(None, instance_href) + image_info.disk_format = 'raw' + image_info.container_format = 'docker' self.connection.spawn(self.context, instance_href, image_info, 'fake_files', 'fake_password') info = self.connection._find_container_by_uuid(instance_href['uuid']) diff --git a/novadocker/virt/docker/driver.py b/novadocker/virt/docker/driver.py index 908af3421d..1b531c4563 100644 --- a/novadocker/virt/docker/driver.py +++ b/novadocker/virt/docker/driver.py @@ -368,27 +368,27 @@ def _get_memory_limit_bytes(self, instance): 'instance_type_memory_mb', 0)) * units.Mi def _get_image_name(self, context, instance, image): - fmt = image['container_format'] + fmt = image.container_format if fmt != 'docker': msg = _('Image container format not supported ({0})') raise exception.InstanceDeployFailure(msg.format(fmt), instance_id=instance['name']) - return image['name'] + return image.name def _pull_missing_image(self, context, image_meta, instance): msg = 'Image name "%s" does not exist, fetching it...' - LOG.debug(msg, image_meta['name']) + LOG.debug(msg, image_meta.name) shared_directory = CONF.docker.shared_directory if (shared_directory and os.path.exists(os.path.join(shared_directory, - image_meta['id']))): + image_meta.id))): try: self.docker.load_repository_file( - self._encode_utf8(image_meta['name']), - os.path.join(shared_directory, image_meta['id'])) + self._encode_utf8(image_meta.name), + os.path.join(shared_directory, image_meta.id)) return self.docker.inspect_image( - self._encode_utf8(image_meta['name'])) + self._encode_utf8(image_meta.name)) except Exception as e: # If failed to load image from shared_directory, continue # to download the image from glance then load. @@ -404,10 +404,10 @@ def _pull_missing_image(self, context, image_meta, instance): try: out_path = os.path.join(tmpdir, uuid.uuid4().hex) - images.fetch(context, image_meta['id'], out_path, + images.fetch(context, image_meta.id, out_path, instance['user_id'], instance['project_id']) self.docker.load_repository_file( - self._encode_utf8(image_meta['name']), + self._encode_utf8(image_meta.name), out_path ) except Exception as e: @@ -415,9 +415,9 @@ def _pull_missing_image(self, context, image_meta, instance): e, instance=instance, exc_info=True) msg = _('Cannot load repository file: {0}') raise exception.NovaException(msg.format(e), - instance_id=image_meta['name']) + instance_id=image_meta.name) - return self.docker.inspect_image(self._encode_utf8(image_meta['name'])) + return self.docker.inspect_image(self._encode_utf8(image_meta.name)) def _extract_dns_entries(self, network_info): dns = [] @@ -479,9 +479,9 @@ def spawn(self, context, instance, image_meta, injected_files, if not image: image = self._pull_missing_image(context, image_meta, instance) # Glance command-line overrides any set in the Docker image - if (image_meta and - image_meta.get('properties', {}).get('os_command_line')): - args['command'] = image_meta['properties'].get('os_command_line') + if (image_meta is not None and + image_meta.properties.get("os_command_line") is not None): + args['command'] = image_meta.properties.get("os_command_line") if 'metadata' in instance: args['environment'] = nova_utils.instance_meta(instance)