summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--tests/cli-test-xml/compare/virt-install-kvm-rhel6.xml1
-rw-r--r--tests/cli-test-xml/compare/virt-install-kvm-rhel7.xml9
-rw-r--r--tests/clitest.py5
-rwxr-xr-xtests/test_inject.py3
-rwxr-xr-xvirt-install27
-rw-r--r--virtinst/cli.py7
-rw-r--r--virtinst/installer.py15
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: