Skip to content

Commit 9feb6ee

Browse files
committed
WIP install: new variant to select ipv4 or ipv6 for the installer
This allows upgrading installer with network_config6 support with patches from https://github.com/xcp-ng/host-installer/commits/ipv6/ (assumes you have that in ~/src/xs/host-installer) * just using network_config=none to try beneficiating from default ipv6 autoconf bombs out because of lack of v6 config * network_config6=autoconf currently gets no DNS configuration, so only works if not using the network for installation AND numeric IP address for ARP_SERVER, so is left out for now FIXME: - this uses an unreleased installer patch
1 parent b43d961 commit 9feb6ee

File tree

2 files changed

+39
-22
lines changed

2 files changed

+39
-22
lines changed

tests/install/conftest.py

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -121,10 +121,12 @@ def system_disks_names(request):
121121
# in contexts where the same IP is reused by successively different MACs
122122
# (when cloning VMs from cache)
123123
@pytest.fixture(scope='function')
124-
def remastered_iso(installer_iso, answerfile):
124+
def remastered_iso(request, installer_iso, answerfile):
125125
iso_file = installer_iso['iso']
126126
unsigned = installer_iso['unsigned']
127127

128+
install_iface = request.getfixturevalue("install_iface")
129+
128130
assert "iso-remaster" in TOOLS
129131
iso_remaster = TOOLS["iso-remaster"]
130132
assert os.access(iso_remaster, os.X_OK)
@@ -161,6 +163,9 @@ def remastered_iso(installer_iso, answerfile):
161163
test ! -e "{answerfile_xml}" ||
162164
cp "{answerfile_xml}" "$INSTALLIMG/root/answerfile.xml"
163165
166+
HOSTINSTALLER=$HOME/src/xs/host-installer
167+
make -C "$HOSTINSTALLER" DESTDIR="$INSTALLIMG" XS_MPATH_CONF="$HOME/src/xapi/sm/multipath/multipath.conf"
168+
164169
mkdir -p "$INSTALLIMG/usr/local/sbin"
165170
cat > "$INSTALLIMG/usr/local/sbin/test-pingpxe.sh" << 'EOF'
166171
#! /bin/bash
@@ -187,8 +192,8 @@ def remastered_iso(installer_iso, answerfile):
187192
PINGARGS="-c1"
188193
fi
189194
190-
# detect lack of ipv4 in installed host
191-
if grep -q "^MODE='none'\\$" /etc/firstboot.d/data/management.conf; then
195+
# detect lack of ipv4 both in installer and in installed host
196+
if grep -q -w network_config=none /proc/cmdline || grep -q "^MODE='none'\\$" /etc/firstboot.d/data/management.conf; then
192197
PINGARGS+=" -6"
193198
fi
194199
@@ -252,6 +257,11 @@ def remastered_iso(installer_iso, answerfile):
252257
set -ex
253258
ISODIR="$1"
254259
SED_COMMANDS=(-e "s@/vmlinuz@/vmlinuz network_device=all sshpassword={passwd} atexit=shell@")
260+
case "{install_iface}" in
261+
ipv4dhcp) ;;
262+
ipv6dhcp) SED_COMMANDS+=(-e "s@/vmlinuz@/vmlinuz network_config=none network_config6=dhcp@") ;;
263+
*) echo >&2 "ERROR unhandled install_iface '{install_iface}'"; exit 1 ;;
264+
esac
255265
test ! -e "{answerfile_xml}" ||
256266
SED_COMMANDS+=(-e "s@/vmlinuz@/vmlinuz install answerfile=file:///root/answerfile.xml@")
257267
# assuming *gpgcheck only appear within unsigned ISO

tests/install/test.py

Lines changed: 26 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@ class TestNested:
4747
@pytest.mark.parametrize("local_sr", ("nosr", "ext", "lvm"))
4848
@pytest.mark.parametrize("package_source", ("iso", "net"))
4949
@pytest.mark.parametrize("system_disk_config", ("disk", "raid1"))
50+
@pytest.mark.parametrize("install_iface", ("ipv4dhcp", "ipv6dhcp"))
5051
@pytest.mark.parametrize("iso_version", (
5152
"83nightly", "830net",
5253
"830",
@@ -135,7 +136,7 @@ class TestNested:
135136
},
136137
))
137138
def test_install(self, vm_booted_with_installer, system_disks_names,
138-
firmware, iso_version, package_source, system_disk_config, local_sr, admin_iface):
139+
firmware, iso_version, install_iface, package_source, system_disk_config, local_sr, admin_iface):
139140
host_vm = vm_booted_with_installer
140141
installer.monitor_install(ip=host_vm.ip)
141142

@@ -145,6 +146,7 @@ def test_install(self, vm_booted_with_installer, system_disks_names,
145146
@pytest.mark.parametrize("package_source", ("iso", "net"))
146147
@pytest.mark.parametrize("system_disk_config", ("disk", "raid1"))
147148
@pytest.mark.parametrize("machine", ("host1", "host2"))
149+
@pytest.mark.parametrize("install_iface", ("ipv4dhcp", "ipv6dhcp"))
148150
@pytest.mark.parametrize("version", (
149151
"83nightly", "830net",
150152
"830",
@@ -157,12 +159,12 @@ def test_install(self, vm_booted_with_installer, system_disks_names,
157159
))
158160
@pytest.mark.parametrize("firmware", ("uefi", "bios"))
159161
@pytest.mark.continuation_of(
160-
lambda version, firmware, local_sr, admin_iface, package_source, system_disk_config: [dict(
162+
lambda version, firmware, install_iface, local_sr, admin_iface, package_source, system_disk_config: [dict(
161163
vm="vm1",
162-
image_test=(f"TestNested::test_install[{firmware}-{version}-{system_disk_config}"
164+
image_test=(f"TestNested::test_install[{firmware}-{version}-{install_iface}-{system_disk_config}"
163165
f"-{package_source}-{local_sr}-{admin_iface}]"))])
164166
def test_tune_firstboot(self, create_vms, helper_vm_with_plugged_disk,
165-
firmware, version, machine, local_sr, admin_iface, package_source, system_disk_config):
167+
firmware, version, install_iface, machine, local_sr, admin_iface, package_source, system_disk_config):
166168
helper_vm = helper_vm_with_plugged_disk
167169

168170
if system_disk_config == "disk":
@@ -374,6 +376,7 @@ def _test_firstboot(self, create_vms, mode, admin_iface, *, machine='DEFAULT', i
374376
@pytest.mark.parametrize("package_source", ("iso", "net"))
375377
@pytest.mark.parametrize("system_disk_config", ("disk", "raid1"))
376378
@pytest.mark.parametrize("machine", ("host1", "host2"))
379+
@pytest.mark.parametrize("install_iface", ("ipv4dhcp", "ipv6dhcp"))
377380
@pytest.mark.parametrize("version", (
378381
"83nightly", "830net",
379382
"830",
@@ -386,13 +389,13 @@ def _test_firstboot(self, create_vms, mode, admin_iface, *, machine='DEFAULT', i
386389
))
387390
@pytest.mark.parametrize("firmware", ("uefi", "bios"))
388391
@pytest.mark.continuation_of(
389-
lambda firmware, version, machine, local_sr, admin_iface, package_source, system_disk_config: [
392+
lambda firmware, version, install_iface, machine, local_sr, admin_iface, package_source, system_disk_config: [
390393
dict(vm="vm1",
391394
image_test=("TestNested::test_tune_firstboot"
392-
f"[None-{firmware}-{version}-{machine}-{system_disk_config}"
395+
f"[None-{firmware}-{version}-{install_iface}-{machine}-{system_disk_config}"
393396
f"-{package_source}-{local_sr}-{admin_iface}]"))])
394397
def test_boot_inst(self, create_vms,
395-
firmware, version, machine, package_source, system_disk_config, local_sr, admin_iface):
398+
firmware, version, install_iface, machine, package_source, system_disk_config, local_sr, admin_iface):
396399
self._test_firstboot(create_vms, version, admin_iface, machine=machine)
397400

398401
@pytest.mark.usefixtures("xcpng_chained")
@@ -401,6 +404,7 @@ def test_boot_inst(self, create_vms,
401404
@pytest.mark.parametrize("package_source", ("iso", "net"))
402405
@pytest.mark.parametrize("system_disk_config", ("disk", "raid1"))
403406
@pytest.mark.parametrize("machine", ("host1", "host2"))
407+
@pytest.mark.parametrize("install_iface", ("ipv4dhcp", "ipv6dhcp"))
404408
@pytest.mark.parametrize(("orig_version", "iso_version"), [
405409
("83nightly", "83nightly"),
406410
("830", "83nightly"),
@@ -416,9 +420,9 @@ def test_boot_inst(self, create_vms,
416420
])
417421
@pytest.mark.parametrize("firmware", ("uefi", "bios"))
418422
@pytest.mark.continuation_of(
419-
lambda firmware, orig_version, machine, system_disk_config, package_source, local_sr, admin_iface: [dict(
423+
lambda firmware, orig_version, install_iface, machine, system_disk_config, package_source, local_sr, admin_iface: [dict(
420424
vm="vm1",
421-
image_test=(f"TestNested::test_boot_inst[{firmware}-{orig_version}-{machine}-{system_disk_config}"
425+
image_test=(f"TestNested::test_boot_inst[{firmware}-{orig_version}-{install_iface}-{machine}-{system_disk_config}"
422426
f"-{package_source}-{local_sr}-{admin_iface}]"))])
423427
@pytest.mark.answerfile(
424428
lambda system_disks_names, package_source, system_disk_config, iso_version:
@@ -433,7 +437,7 @@ def test_boot_inst(self, create_vms,
433437
}[system_disk_config]},
434438
))
435439
def test_upgrade(self, vm_booted_with_installer, system_disks_names,
436-
firmware, orig_version, iso_version, machine, package_source,
440+
firmware, orig_version, iso_version, install_iface, machine, package_source,
437441
system_disk_config, local_sr, admin_iface):
438442
host_vm = vm_booted_with_installer
439443
installer.monitor_upgrade(ip=host_vm.ip)
@@ -444,6 +448,7 @@ def test_upgrade(self, vm_booted_with_installer, system_disks_names,
444448
@pytest.mark.parametrize("package_source", ("iso", "net"))
445449
@pytest.mark.parametrize("system_disk_config", ("disk", "raid1"))
446450
@pytest.mark.parametrize("machine", ("host1", "host2"))
451+
@pytest.mark.parametrize("install_iface", ("ipv4dhcp", "ipv6dhcp"))
447452
@pytest.mark.parametrize("mode", (
448453
"83nightly-83nightly",
449454
"830-83nightly",
@@ -459,19 +464,20 @@ def test_upgrade(self, vm_booted_with_installer, system_disks_names,
459464
))
460465
@pytest.mark.parametrize("firmware", ("uefi", "bios"))
461466
@pytest.mark.continuation_of(
462-
lambda firmware, mode, machine, system_disk_config, package_source, local_sr, admin_iface: [dict(
467+
lambda firmware, mode, install_iface, machine, system_disk_config, package_source, local_sr, admin_iface: [dict(
463468
vm="vm1",
464-
image_test=(f"TestNested::test_upgrade[{firmware}-{mode}-{machine}-{system_disk_config}"
469+
image_test=(f"TestNested::test_upgrade[{firmware}-{mode}-{install_iface}-{machine}-{system_disk_config}"
465470
f"-{package_source}-{local_sr}-{admin_iface}]"))])
466471
def test_boot_upg(self, create_vms,
467-
firmware, mode, machine, package_source, system_disk_config, local_sr, admin_iface):
472+
firmware, mode, install_iface, machine, package_source, system_disk_config, local_sr, admin_iface):
468473
self._test_firstboot(create_vms, mode, admin_iface, machine=machine)
469474

470475
@pytest.mark.usefixtures("xcpng_chained")
471476
@pytest.mark.parametrize("admin_iface", ("ipv4dhcp", "ipv4static", "ipv6static"))
472477
@pytest.mark.parametrize("local_sr", ("nosr", "ext", "lvm"))
473478
@pytest.mark.parametrize("package_source", ("iso", "net"))
474479
@pytest.mark.parametrize("system_disk_config", ("disk", "raid1"))
480+
@pytest.mark.parametrize("install_iface", ("ipv4dhcp", "ipv6dhcp"))
475481
@pytest.mark.parametrize(("orig_version", "iso_version"), [
476482
("83nightly-83nightly", "83nightly"),
477483
("830-83nightly", "83nightly"),
@@ -487,9 +493,9 @@ def test_boot_upg(self, create_vms,
487493
])
488494
@pytest.mark.parametrize("firmware", ("uefi", "bios"))
489495
@pytest.mark.continuation_of(
490-
lambda firmware, orig_version, local_sr, admin_iface, system_disk_config, package_source: [dict(
496+
lambda firmware, orig_version, install_iface, local_sr, admin_iface, system_disk_config, package_source: [dict(
491497
vm="vm1",
492-
image_test=(f"TestNested::test_boot_upg[{firmware}-{orig_version}-host1-{system_disk_config}"
498+
image_test=(f"TestNested::test_boot_upg[{firmware}-{orig_version}-{install_iface}-host1-{system_disk_config}"
493499
f"-{package_source}-{local_sr}-{admin_iface}]"))])
494500
@pytest.mark.answerfile(
495501
lambda system_disks_names, system_disk_config: AnswerFile("RESTORE").top_append(
@@ -499,7 +505,7 @@ def test_boot_upg(self, create_vms,
499505
}[system_disk_config]},
500506
))
501507
def test_restore(self, vm_booted_with_installer, system_disks_names,
502-
firmware, orig_version, iso_version, package_source,
508+
firmware, orig_version, iso_version, install_iface, package_source,
503509
system_disk_config, local_sr, admin_iface):
504510
host_vm = vm_booted_with_installer
505511
installer.monitor_restore(ip=host_vm.ip)
@@ -509,6 +515,7 @@ def test_restore(self, vm_booted_with_installer, system_disks_names,
509515
@pytest.mark.parametrize("local_sr", ("nosr", "ext", "lvm"))
510516
@pytest.mark.parametrize("package_source", ("iso", "net"))
511517
@pytest.mark.parametrize("system_disk_config", ("disk", "raid1"))
518+
@pytest.mark.parametrize("install_iface", ("ipv4dhcp", "ipv6dhcp"))
512519
@pytest.mark.parametrize("mode", (
513520
"83nightly-83nightly-83nightly",
514521
"830-83nightly-83nightly",
@@ -524,10 +531,10 @@ def test_restore(self, vm_booted_with_installer, system_disks_names,
524531
))
525532
@pytest.mark.parametrize("firmware", ("uefi", "bios"))
526533
@pytest.mark.continuation_of(
527-
lambda firmware, mode, system_disk_config, package_source, local_sr, admin_iface: [dict(
534+
lambda firmware, mode, install_iface, system_disk_config, package_source, local_sr, admin_iface: [dict(
528535
vm="vm1",
529-
image_test=(f"TestNested::test_restore[{firmware}-{mode}-{system_disk_config}"
536+
image_test=(f"TestNested::test_restore[{firmware}-{mode}-{install_iface}-{system_disk_config}"
530537
f"-{package_source}-{local_sr}-{admin_iface}]"))])
531538
def test_boot_rst(self, create_vms,
532-
firmware, mode, package_source, system_disk_config, local_sr, admin_iface):
539+
firmware, mode, install_iface, package_source, system_disk_config, local_sr, admin_iface):
533540
self._test_firstboot(create_vms, mode, admin_iface, is_restore=True)

0 commit comments

Comments
 (0)