Browse Source

Validate windows_virtio_iso_url OSMorphing parameter

Signed-off-by: Mihaela Balutoiu <mbalutoiu@cloudbasesolutions.com>
Mihaela Balutoiu 2 tuần trước cách đây
mục cha
commit
4ff04d0fed
2 tập tin đã thay đổi với 27 bổ sung5 xóa
  1. 12 5
      coriolis/osmorphing/windows.py
  2. 15 0
      coriolis/tests/osmorphing/test_windows.py

+ 12 - 5
coriolis/osmorphing/windows.py

@@ -71,6 +71,8 @@ CLOUDBASE_INIT_DEFAULT_METADATA_SVCS = [
 REQUIRED_DETECTED_WINDOWS_OS_FIELDS = [
     "version_number", "edition_id", "installation_type", "product_name"]
 
+VIRTIO_WIN_ISO_PATH = "c:\\virtio-win.iso"
+
 INTERFACES_PATH_FORMAT = (
     "HKLM:\\%s\\ControlSet001\\Services\\Tcpip\\Parameters\\Interfaces")
 
@@ -764,17 +766,22 @@ class BaseWindowsMorphingTools(base.BaseOSMorphingTools):
             "viogpudo",
         ]
 
+        virtio_iso_url = self._osmorphing_parameters.get(
+            "windows_virtio_iso_url")
+        if not virtio_iso_url:
+            raise exception.CoriolisException(
+                "VirtIO drivers ISO URL ('windows_virtio_iso_url') not set "
+                "in the OSMorphing parameters")
+
         self._event_manager.progress_update("Downloading virtio-win drivers")
 
-        virtio_iso_path = "c:\\virtio-win.iso"
-        virtio_iso_url = self._osmorphing_parameters["windows_virtio_iso_url"]
         utils.retry_on_error(sleep_seconds=5)(self._conn.download_file)(
-            virtio_iso_url, virtio_iso_path
+            virtio_iso_url, VIRTIO_WIN_ISO_PATH
         )
 
         self._event_manager.progress_update("Adding virtio-win drivers")
 
-        virtio_drive = self._mount_disk_image(virtio_iso_path)
+        virtio_drive = self._mount_disk_image(VIRTIO_WIN_ISO_PATH)
         try:
             virtio_dir = None
 
@@ -822,7 +829,7 @@ class BaseWindowsMorphingTools(base.BaseOSMorphingTools):
             finally:
                 self._revoke_permissions(file_repo_path, "*%s" % sid)
         finally:
-            self._dismount_disk_image(virtio_iso_path)
+            self._dismount_disk_image(VIRTIO_WIN_ISO_PATH)
 
     def get_packages(self):
         return [], []

+ 15 - 0
coriolis/tests/osmorphing/test_windows.py

@@ -1212,3 +1212,18 @@ class BaseWindowsMorphingToolsTestCase(test_base.CoriolisBaseTestCase):
         mock_mount_disk_image.assert_called_once_with(exp_iso_path)
         mock_dismount.assert_called_once_with(exp_iso_path)
         mock_add_dism_driver.assert_not_called()
+
+    @mock.patch.object(windows.BaseWindowsMorphingTools, "_mount_disk_image")
+    def test_add_virtio_drivers_missing_iso_url(
+            self, mock_mount_disk_image):
+        self.morphing_tools._version_number = version.LooseVersion(
+            "10.0.26500")
+        self.morphing_tools._edition_id = "ServerDatacenterEval"
+        self.morphing_tools._osmorphing_parameters = {}
+
+        self.assertRaises(
+            exception.CoriolisException,
+            self.morphing_tools._add_virtio_drivers)
+
+        self.morphing_tools._conn.download_file.assert_not_called()
+        mock_mount_disk_image.assert_not_called()