diff options
-rw-r--r-- | tests/cli-test-xml/compare/virt-install-kvm-rhel6.xml | 1 | ||||
-rw-r--r-- | tests/cli-test-xml/compare/virt-install-kvm-rhel7.xml | 9 | ||||
-rw-r--r-- | tests/clitest.py | 5 | ||||
-rwxr-xr-x | tests/test_inject.py | 3 | ||||
-rwxr-xr-x | virt-install | 27 | ||||
-rw-r--r-- | virtinst/cli.py | 7 | ||||
-rw-r--r-- | virtinst/installer.py | 15 |
7 files changed, 47 insertions, 20 deletions
diff --git a/tests/cli-test-xml/compare/virt-install-kvm-rhel6.xml b/tests/cli-test-xml/compare/virt-install-kvm-rhel6.xml index 45c94ce1..6c5b01d9 100644 --- a/tests/cli-test-xml/compare/virt-install-kvm-rhel6.xml +++ b/tests/cli-test-xml/compare/virt-install-kvm-rhel6.xml @@ -13,6 +13,7 @@ <type arch="x86_64" machine="pc">hvm</type> <kernel>/TESTSUITE_KERNEL_PATH</kernel> <initrd>/TESTSUITE_INITRD_PATH</initrd> + <cmdline>foo bar</cmdline> </os> <features> <acpi/> diff --git a/tests/cli-test-xml/compare/virt-install-kvm-rhel7.xml b/tests/cli-test-xml/compare/virt-install-kvm-rhel7.xml index 7586bb52..fe5fb51e 100644 --- a/tests/cli-test-xml/compare/virt-install-kvm-rhel7.xml +++ b/tests/cli-test-xml/compare/virt-install-kvm-rhel7.xml @@ -6,13 +6,14 @@ <libosinfo:os id="http://redhat.com/rhel/7.0"/> </libosinfo:libosinfo> </metadata> - <memory>65536</memory> - <currentMemory>65536</currentMemory> + <memory>1572864</memory> + <currentMemory>1572864</currentMemory> <vcpu>2</vcpu> <os> <type arch="x86_64" machine="pc">hvm</type> - <boot dev="network"/> - <boot dev="hd"/> + <kernel>/TESTSUITE_KERNEL_PATH</kernel> + <initrd>/TESTSUITE_INITRD_PATH</initrd> + <cmdline>test overwrite</cmdline> </os> <features> <acpi/> diff --git a/tests/clitest.py b/tests/clitest.py index 774c0577..1148c96f 100644 --- a/tests/clitest.py +++ b/tests/clitest.py @@ -909,8 +909,8 @@ c.add_compare("--disk none --location %(ISO-NO-OS)s,kernel=frib.img,initrd=/frob c.add_compare("--disk %(EXISTIMG1)s --location %(ISOTREE)s --nonetworks", "location-iso", prerun_check=missing_isoinfo) # Using --location iso mounting c.add_compare("--disk %(EXISTIMG1)s --cdrom %(ISOLABEL)s", "cdrom-centos-label") # Using --cdrom with centos CD label, should use virtio etc. c.add_compare("--disk %(EXISTIMG1)s --install bootdev=network --os-variant rhel5.4", "kvm-rhel5") # RHEL5 defaults -c.add_compare("--disk %(EXISTIMG1)s --install kernel=./foo,initrd=./bar --os-variant rhel6.4", "kvm-rhel6") # RHEL6 defaults -c.add_compare("--disk %(EXISTIMG1)s --pxe --os-variant rhel7.0", "kvm-rhel7", prerun_check=has_old_osinfo) # RHEL7 defaults +c.add_compare("--disk %(EXISTIMG1)s --install kernel=./foo,initrd=./bar,kernel_args='foo bar' --os-variant rhel6.4", "kvm-rhel6") # RHEL6 defaults +c.add_compare("--disk %(EXISTIMG1)s --location https://example.com --install kernel_args='test overwrite',kernel_args_overwrite=yes --os-variant rhel7.0", "kvm-rhel7", prerun_check=has_old_osinfo) # RHEL7 defaults c.add_compare("--connect " + utils.URIs.kvm_nodomcaps + " --disk %(EXISTIMG1)s --pxe --os-variant rhel7.0", "kvm-cpu-default-fallback", prerun_check=has_old_osinfo) # No domcaps, so mode=host-model isn't safe, so we fallback to host-model-only c.add_compare("--connect " + utils.URIs.kvm_nodomcaps + " --cpu host-copy --disk none --pxe", "kvm-hostcopy-fallback") # No domcaps so need to use capabilities for CPU host-copy c.add_compare("--disk %(EXISTIMG1)s --pxe --os-variant centos7.0", "kvm-centos7", prerun_check=has_old_osinfo) # Centos 7 defaults @@ -1304,6 +1304,7 @@ _add_argcomplete_cmd("virt-install --disk path=fooo,", "driver.cache") # will l _add_argcomplete_cmd("virt-install --disk source.seclab", "source.seclabel.relabel") # completer should strip out regexes from results _add_argcomplete_cmd("virt-install --check d", "disk_size") _add_argcomplete_cmd("virt-install --location k", "kernel") +_add_argcomplete_cmd("virt-install --install i", "initrd") _add_argcomplete_cmd("virt-install --os-variant nam", "name") _add_argcomplete_cmd("virt-install --test-stub", None, nogrep="--test-stub-command") diff --git a/tests/test_inject.py b/tests/test_inject.py index 9c2a1316..f4c164ec 100755 --- a/tests/test_inject.py +++ b/tests/test_inject.py @@ -82,7 +82,8 @@ def _test_distro(distro): cmd = ("./virt-install --connect qemu:///system " "--name __virtinst__test__initrd__ --ram 2048 " "--transient --destroy-on-exit --disk none " - "--location %s --initrd-inject %s --extra-args %s" % + "--location %s --initrd-inject %s " + "--install kernel_args=%s,kernel_args_overwrite=yes" % (distro.url, distro.filename, append)) print("\n\n" + cmd) os.system(cmd) diff --git a/virt-install b/virt-install index 80307590..5813d3a9 100755 --- a/virt-install +++ b/virt-install @@ -424,6 +424,7 @@ def build_installer(options, guest): installdata = None install_kernel = None install_initrd = None + install_kernel_args = None has_installer = True @@ -451,6 +452,18 @@ def build_installer(options, guest): "Generated default libosinfo '--location %s'", location) options.location = location + extra_args = options.extra_args + if installdata: + install_bootdev = installdata.bootdev + install_kernel = installdata.kernel + install_initrd = installdata.initrd + install_kernel_args = installdata.kernel_args + if installdata.kernel_args: + if installdata.kernel_args_overwrite: + install_kernel_args = installdata.kernel_args + else: + extra_args = [installdata.kernel_args] + if options.location: (location, location_kernel, @@ -459,14 +472,11 @@ def build_installer(options, guest): cdrom = options.cdrom elif options.pxe: install_bootdev = "network" - elif installdata: - install_bootdev = installdata.bootdev - install_kernel = installdata.kernel - install_initrd = installdata.initrd elif (guest.os.is_container() or options.import_install or options.xmlonly or - options.boot): + options.boot or + installdata): pass else: has_installer = False @@ -482,7 +492,8 @@ def build_installer(options, guest): location_initrd=location_initrd, install_bootdev=install_bootdev, install_kernel=install_kernel, - install_initrd=install_initrd) + install_initrd=install_initrd, + install_kernel_args=install_kernel_args) if cdrom and options.livecd: installer.livecd = True if options.unattended: @@ -491,8 +502,8 @@ def build_installer(options, guest): installer.set_unattended_data(unattended_data) else: - if options.extra_args: - installer.extra_args = options.extra_args + if extra_args: + installer.extra_args = extra_args if options.initrd_inject: installer.set_initrd_injections(options.initrd_inject) if options.autostart: diff --git a/virtinst/cli.py b/virtinst/cli.py index 8566ea89..e04fff0c 100644 --- a/virtinst/cli.py +++ b/virtinst/cli.py @@ -463,7 +463,7 @@ def get_meter(): def _get_completer_parsers(): return VIRT_PARSERS + [ParserCheck, ParserLocation, ParserOSVariant, - ParserUnattended] + ParserUnattended, ParserInstall] def _virtparser_completer(prefix, **kwargs): @@ -1570,6 +1570,9 @@ class ParserInstall(VirtCLIParser): cls.add_arg("bootdev", "bootdev", can_comma=True) cls.add_arg("kernel", "kernel", can_comma=True) cls.add_arg("initrd", "initrd", can_comma=True) + cls.add_arg("kernel_args", "kernel_args", can_comma=True) + cls.add_arg("kernel_args_overwrite", "kernel_args_overwrite", + is_onoff=True) class InstallData: @@ -1577,6 +1580,8 @@ class InstallData: self.bootdev = None self.kernel = None self.initrd = None + self.kernel_args = None + self.kernel_args_overwrite = None def parse_install(optstr): diff --git a/virtinst/installer.py b/virtinst/installer.py index c6220c0f..2f5087fd 100644 --- a/virtinst/installer.py +++ b/virtinst/installer.py @@ -34,11 +34,14 @@ class Installer(object): path to indicate where the kernel is stored in location :param location_initrd: location_kernel, but pointing to an initrd :param install_kernel: Kernel to install off of - :param install initrd: Initrd to install off of + :param install_initrd: Initrd to install off of + :param install_kernel_args: Kernel args <cmdline> to use. This overwrites + whatever the installer might request, unlink extra_args which will + append arguments. """ def __init__(self, conn, cdrom=None, location=None, install_bootdev=None, location_kernel=None, location_initrd=None, - install_kernel=None, install_initrd=None): + install_kernel=None, install_initrd=None, install_kernel_args=None): self.conn = conn self.livecd = False @@ -50,6 +53,7 @@ class Installer(object): self._install_bootdev = install_bootdev self._install_kernel = None self._install_initrd = None + self._install_kernel_args = install_kernel_args self._install_cdrom_device_added = False self._unattended_install_cdrom_device = None self._tmpfiles = [] @@ -173,7 +177,10 @@ class Installer(object): if self._install_initrd: guest.os.initrd = (self.conn.in_testsuite() and "/TESTSUITE_INITRD_PATH" or self._install_initrd) - if self.extra_args: + + if self._install_kernel_args: + guest.os.kernel_args = self._install_kernel_args + elif self.extra_args: guest.os.kernel_args = " ".join(self.extra_args) bootdev = self._install_bootdev @@ -245,7 +252,7 @@ class Installer(object): unattended_script) self._install_kernel = k self._install_initrd = i - if a and "VIRTINST_INITRD_TEST" not in os.environ: + if a: self.extra_args.append(a) elif unattended_script: |