The Windows unattended installation is quite similar to the Linux one with a few major differences: - It uses floppy injection instead of initrd injection - Yes, it does. Then we have to create a floppy, add the device and, when finishing the installation, remove the device; - There's no InstallerTreeMedia in the game making us end up duplicating some code in the Installer class as: - keeping track of files that have to be cleanup up; - actually cleaning up the files; - generating the install script Apart from that, some obvious differences in the scripts where already done in a previous commit, but those were basically: - Not using /dev/*da as a target disk, but use "C" instead; - Set the product-key - Explicitly set the injection method as "floppy" Signed-off-by: Fabiano Fidêncio <fidencio@xxxxxxxxxx> --- virt-install | 9 +++++---- virtinst/installer.py | 21 ++++++++++++++++++++- 2 files changed, 25 insertions(+), 5 deletions(-) diff --git a/virt-install b/virt-install index 57835849..40ea86eb 100755 --- a/virt-install +++ b/virt-install @@ -449,10 +449,11 @@ def build_installer(options, guest): if options.unattended: if options.os_variant.is_none or options.os_variant.is_auto: fail(_("--unattended requires an explicit --os-variant")) - if options.cdrom: - options.location = options.cdrom - options.cdrom = None - options.os_variant.install = "location" + if not guest.osinfo.is_windows(): + if options.cdrom: + options.location = options.cdrom + options.cdrom = None + options.os_variant.install = "location" if options.os_variant.install == "location": if not options.location: diff --git a/virtinst/installer.py b/virtinst/installer.py index 2ae20a84..c2ce3e5d 100644 --- a/virtinst/installer.py +++ b/virtinst/installer.py @@ -13,8 +13,10 @@ import libvirt from .devices import DeviceDisk from .domain import DomainOs -from .osdict import OSDB +from .osdict import OSDB, OsMedia from .installertreemedia import InstallerTreeMedia +from .floppyinject import perform_floppy_injections +from . import unattended from . import util @@ -207,10 +209,26 @@ class Installer(object): self._install_initrd = i if a and "VIRTINST_INITRD_TEST" not in os.environ: self.extra_args.append(a) + elif self._unattended_data: + osguess = OSDB.guess_os_by_iso(self.cdrom) + osmedia = OsMedia(osguess[1]) + script = 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()) + + floppy = perform_floppy_injections([path], util.get_cache_dir()) + self._add_install_floppy_device(guest, floppy) + + self._unattended_files.extend([path, floppy]) def _cleanup(self, guest): if self._treemedia: self._treemedia.cleanup(guest) + elif self._unattended_files: + self._cleanup_unattended_files() def _get_postinstall_bootdev(self, guest): if self.cdrom and self.livecd: @@ -353,6 +371,7 @@ class Installer(object): return ret finally: self._remove_install_cdrom_media(guest) + self._remove_install_floppy_device(guest) self._finish_get_install_xml(guest, data) def _build_xml(self, guest, meter): -- 2.20.1 _______________________________________________ virt-tools-list mailing list virt-tools-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/virt-tools-list