When QEMU is not able to solve hostname for a remote CDROM path, we need to
convert the hostname to IP to avoid problems.
Add this logic to get_disk_xml() too.
Signed-off-by: Aline Manera <alinefm(a)linux.vnet.ibm.com>
---
src/kimchi/xmlutils/disk.py | 7 ++++++-
tests/test_model.py | 11 ++++++++++-
2 files changed, 16 insertions(+), 2 deletions(-)
diff --git a/src/kimchi/xmlutils/disk.py b/src/kimchi/xmlutils/disk.py
index f066dbe..adc45da 100644
--- a/src/kimchi/xmlutils/disk.py
+++ b/src/kimchi/xmlutils/disk.py
@@ -28,6 +28,7 @@ from lxml import objectify
from lxml.builder import E
from kimchi.exception import InvalidParameter, NotFoundError
+from kimchi.model.config import CapabilitiesModel
from kimchi.utils import check_url_path
BUS_TO_DEV_MAP = {'ide': 'hd', 'virtio': 'vd',
'scsi': 'sd'}
@@ -74,8 +75,12 @@ def get_disk_xml(params):
output = urlparse.urlparse(params['path'])
port = str(output.port or socket.getservbyname(output.scheme))
+ hostname = output.hostname
+ if not CapabilitiesModel().qemu_stream_dns:
+ hostname = socket.gethostbyname(hostname)
+
source = E.source(protocol=output.scheme, name=output.path)
- source.append(E.host(name=output.hostname, port=port))
+ source.append(E.host(name=hostname, port=port))
else:
"""
<source file='%(src)s' />
diff --git a/tests/test_model.py b/tests/test_model.py
index e407fe5..f094ed7 100644
--- a/tests/test_model.py
+++ b/tests/test_model.py
@@ -25,9 +25,11 @@ import psutil
import pwd
import re
import shutil
+import socket
import tempfile
import threading
import time
+import urlparse
import unittest
import uuid
@@ -433,7 +435,14 @@ class ModelTests(unittest.TestCase):
{'path': valid_remote_iso_path})
cdrom_info = inst.vmstorage_lookup(vm_name, cdrom_dev)
cur_cdrom_path = re.sub(":80/", '/',
cdrom_info['path'])
- self.assertEquals(valid_remote_iso_path, cur_cdrom_path)
+
+ # As Kimchi server is not running during this test case
+ # CapabilitiesModel.qemu_stream_dns will be always False
+ # so we need to convert the hostname to IP
+ output = urlparse.urlparse(valid_remote_iso_path)
+ hostname = socket.gethostbyname(output.hostname)
+ url = valid_remote_iso_path.replace(output.hostname, hostname)
+ self.assertEquals(url, cur_cdrom_path)
@unittest.skipUnless(utils.running_as_root(), 'Must be run as root')
def test_vm_storage_provisioning(self):
--
1.9.3