[virt-tools-list] [virt-manager PATCH 11/12] unattended: Deal with multiple install scripts
Fabiano Fidêncio
fidencio at redhat.com
Thu Jun 6 14:11:42 UTC 2019
Windows(es) may provide more than one installer script. Those scripts
are used to perform pre/post installation of drivers.
Signed-off-by: Fabiano Fidêncio <fidencio at redhat.com>
---
virtinst/installer.py | 16 ++++++++++------
virtinst/installertreemedia.py | 18 ++++++++++--------
virtinst/osdict.py | 5 ++---
virtinst/unattended.py | 30 ++++++++++++++++++------------
4 files changed, 40 insertions(+), 29 deletions(-)
diff --git a/virtinst/installer.py b/virtinst/installer.py
index 642d14b3..7816b45e 100644
--- a/virtinst/installer.py
+++ b/virtinst/installer.py
@@ -230,17 +230,21 @@ class Installer(object):
elif self._unattended_data:
osguess = OSDB.guess_os_by_iso(self.cdrom)
osmedia = OsMedia(osguess[1])
- script = unattended.prepare_install_script(
+ paths = []
+ scripts = unattended.prepare_install_script(
guest, self._unattended_data, self.cdrom, osmedia)
- path, _ = unattended.generate_install_script(script)
- logging.debug("Generated unattended script: %s", path)
- logging.debug("Generated script contents:\n%s",
- open(path).read())
+ for script in scripts:
+ path, _ = unattended.generate_install_script(script)
+ logging.debug("Generated unattended script: %s", path)
+ logging.debug("Generated script contents:\n%s",
+ open(path).read())
+ paths.append(path)
cdrom = perform_cdrom_injections()
self._add_unattended_cdrom_device(guest, cdrom)
- self._unattended_files.extend([path, cdrom])
+ self._unattended_files.extend(paths)
+ self._unattended_files.append(cdrom)
def _cleanup(self, guest):
if self._treemedia:
diff --git a/virtinst/installertreemedia.py b/virtinst/installertreemedia.py
index adfc0aca..12a79735 100644
--- a/virtinst/installertreemedia.py
+++ b/virtinst/installertreemedia.py
@@ -184,17 +184,19 @@ class InstallerTreeMedia(object):
if self._unattended_data:
location = self.location if self._media_type == MEDIA_URL else None
- script = unattended.prepare_install_script(
+ path = []
+ scripts = unattended.prepare_install_script(
guest, self._unattended_data, location, cache.os_media)
- path, cmdline = unattended.generate_install_script(script)
+ for script in scripts:
+ path, cmdline = unattended.generate_install_script(script)
- logging.debug("Generated unattended cmdline: %s", cmdline)
- logging.debug("Generated unattended script: %s", path)
- logging.debug("Generated script contents:\n%s",
- open(path).read())
+ logging.debug("Generated unattended cmdline: %s", cmdline)
+ logging.debug("Generated unattended script: %s", path)
+ logging.debug("Generated script contents:\n%s",
+ open(path).read())
- self.initrd_injections.append(path)
- self._tmpfiles.append(path)
+ self.initrd_injections.append(path)
+ self._tmpfiles.append(path)
k, i, a = self._prepare_kernel_url(guest, fetcher)
diff --git a/virtinst/osdict.py b/virtinst/osdict.py
index 31446380..db7f38ae 100644
--- a/virtinst/osdict.py
+++ b/virtinst/osdict.py
@@ -620,9 +620,8 @@ class _OsVariant(object):
# Some OSes (as Windows) have more than one installer script,
# depending on the OS version and profile chosen, to be used to
- # perform the unattended installation. Let's just deal with
- # multiple installer scripts when its actually needed, though.
- return installscripts[0]
+ # perform the unattended installation.
+ return installscripts
script_list = []
diff --git a/virtinst/unattended.py b/virtinst/unattended.py
index 573289c2..b772d538 100644
--- a/virtinst/unattended.py
+++ b/virtinst/unattended.py
@@ -246,22 +246,28 @@ def prepare_install_script(guest, unattended_data, url=None, os_media=None):
return "network" if os_media.requires_internet() else "media"
- rawscript = guest.osinfo.get_install_script(unattended_data.profile,
+ scripts = []
+
+ rawscripts = guest.osinfo.get_install_script(unattended_data.profile,
os_media)
- script = OSInstallScript(rawscript, guest.osinfo)
- # For all tree based installations we're going to perform initrd injection
- # and install the systems via network.
- injection_method = "cdrom" if guest.osinfo.is_windows() else "initrd"
- script.set_preferred_injection_method(injection_method)
+ for rawscript in rawscripts:
+ script = OSInstallScript(rawscript, guest.osinfo)
+
+ # For all tree based installations we're going to perform initrd
+ # injection and install the systems via network.
+ injection_method = "cdrom" if guest.osinfo.is_windows() else "initrd"
+ script.set_preferred_injection_method(injection_method)
+
+ installationsource = _get_installation_source(os_media)
+ script.set_installation_source(installationsource)
- installationsource = _get_installation_source(os_media)
- script.set_installation_source(installationsource)
+ config = _make_installconfig(script, guest.osinfo, unattended_data,
+ guest.os.arch, guest.name, url)
+ script.set_config(config)
+ scripts.append(script)
- config = _make_installconfig(script, guest.osinfo, unattended_data,
- guest.os.arch, guest.name, url)
- script.set_config(config)
- return script
+ return scripts
def generate_install_script(script):
--
2.21.0
More information about the virt-tools-list
mailing list