@@ -43,6 +43,7 @@ def helper_vm_with_plugged_disk(running_vm, create_vms):
43
43
class TestNested :
44
44
@pytest .mark .parametrize ("local_sr" , ("nosr" , "ext" , "lvm" ))
45
45
@pytest .mark .parametrize ("package_source" , ("iso" , "net" ))
46
+ @pytest .mark .parametrize ("system_disk" , ("disk" , "raid1" ))
46
47
@pytest .mark .parametrize ("iso_version" , (
47
48
"83nightly" , "830net" ,
48
49
"830" ,
@@ -54,7 +55,7 @@ class TestNested:
54
55
))
55
56
@pytest .mark .parametrize ("firmware" , ("uefi" , "bios" ))
56
57
@pytest .mark .vm_definitions (
57
- lambda firmware : dict (
58
+ lambda firmware , system_disk : dict (
58
59
name = "vm1" ,
59
60
template = "Other install media" ,
60
61
params = (
@@ -74,31 +75,45 @@ class TestNested:
74
75
),
75
76
"bios" : (),
76
77
}[firmware ],
77
- vdis = [dict (name = "vm1 system disk" , size = "100GiB" , device = "xvda" , userdevice = "0" )],
78
+ vdis = ([dict (name = "vm1 system disk" , size = "100GiB" , device = "xvda" , userdevice = "0" )]
79
+ + ([dict (name = "vm1 system disk mirror" , size = "100GiB" , device = "xvdb" , userdevice = "1" )]
80
+ if system_disk == "raid1" else [])
81
+ ),
78
82
cd_vbd = dict (device = "xvdd" , userdevice = "3" ),
79
83
vifs = [dict (index = 0 , network_name = NETWORKS ["MGMT" ])],
80
84
))
81
85
@pytest .mark .answerfile (
82
- lambda install_disk , local_sr , package_source , iso_version : AnswerFile ("INSTALL" )
86
+ lambda firmware , install_disk , local_sr , package_source , system_disk , iso_version : AnswerFile ("INSTALL" )
83
87
.top_setattr ({} if local_sr == "nosr" else {"sr-type" : local_sr })
84
88
.top_append (
85
89
{"TAG" : "source" , "type" : "local" } if package_source == "iso"
86
90
else {"TAG" : "source" , "type" : "url" ,
87
91
"CONTENTS" : ISO_IMAGES [iso_version ]['net-url' ]} if package_source == "net"
88
92
else ValueError (f"package_source { package_source !r} " ),
93
+
94
+ # FIXME belongs to a generalization of install_disk fixture
95
+ {"TAG" : "raid" , "device" : "md127" ,
96
+ "CONTENTS" : (
97
+ {"TAG" : "disk" , "CONTENTS" : {"bios" : "sda" , "uefi" : "nvme0n1" }[firmware ]},
98
+ {"TAG" : "disk" , "CONTENTS" : {"bios" : "sdb" , "uefi" : "nvme0n2" }[firmware ]},
99
+ )} if system_disk == "raid1"
100
+ else None if system_disk == "disk"
101
+ else ValueError (f"system_disk { system_disk !r} " ),
102
+
89
103
{"TAG" : "admin-interface" , "name" : "eth0" , "proto" : "dhcp" },
90
104
{"TAG" : "primary-disk" ,
91
105
"guest-storage" : "no" if local_sr == "nosr" else "yes" ,
92
- "CONTENTS" : install_disk },
106
+ "CONTENTS" : "md127" if system_disk == "raid1" else install_disk },
93
107
))
94
108
def test_install (self , vm_booted_with_installer , install_disk ,
95
- firmware , iso_version , package_source , local_sr ):
109
+ firmware , iso_version , package_source , system_disk , local_sr ):
96
110
host_vm = vm_booted_with_installer
97
111
installer .monitor_install (ip = host_vm .ip )
98
112
99
113
@pytest .mark .usefixtures ("xcpng_chained" )
100
114
@pytest .mark .parametrize ("local_sr" , ("nosr" , "ext" , "lvm" ))
101
115
@pytest .mark .parametrize ("package_source" , ("iso" , "net" ))
116
+ @pytest .mark .parametrize ("system_disk" , ("disk" , "raid1" ))
102
117
@pytest .mark .parametrize ("machine" , ("host1" , "host2" ))
103
118
@pytest .mark .parametrize ("version" , (
104
119
"83nightly" , "830net" ,
@@ -112,15 +127,23 @@ def test_install(self, vm_booted_with_installer, install_disk,
112
127
))
113
128
@pytest .mark .parametrize ("firmware" , ("uefi" , "bios" ))
114
129
@pytest .mark .continuation_of (
115
- lambda version , firmware , local_sr , package_source : [dict (
130
+ lambda version , firmware , local_sr , package_source , system_disk : [dict (
116
131
vm = "vm1" ,
117
- image_test = f"TestNested::test_install[{ firmware } -{ version } -{ package_source } -{ local_sr } ]" )])
118
- @pytest .mark .small_vm
132
+ image_test = f"TestNested::test_install[{ firmware } -{ version } -{ system_disk } -{ package_source } -{ local_sr } ]" )])
119
133
def test_tune_firstboot (self , create_vms , helper_vm_with_plugged_disk ,
120
- firmware , version , machine , local_sr , package_source ):
134
+ firmware , version , machine , local_sr , package_source , system_disk ):
121
135
helper_vm = helper_vm_with_plugged_disk
122
136
123
- helper_vm .ssh (["mount /dev/xvdb1 /mnt" ])
137
+ if system_disk == "disk" :
138
+ helper_vm .ssh (["mount /dev/xvdb1 /mnt" ])
139
+ elif system_disk == "raid1" :
140
+ # FIXME helper VM has to be an Alpine, that should not be a random vm_ref
141
+ helper_vm .ssh (["apk add mdadm" ])
142
+ helper_vm .ssh (["mdadm -A /dev/md/127 -N localhost:127" ])
143
+ helper_vm .ssh (["mount /dev/md127p1 /mnt" ])
144
+ else :
145
+ raise ValueError (f"unhandled system_disk { system_disk !r} " )
146
+
124
147
try :
125
148
# hostname
126
149
logging .info ("Setting hostname to %r" , machine )
@@ -134,7 +157,7 @@ def test_tune_firstboot(self, create_vms, helper_vm_with_plugged_disk,
134
157
'/mnt/etc/xensource-inventory' ])
135
158
helper_vm .ssh (["grep UUID /mnt/etc/xensource-inventory" ])
136
159
finally :
137
- helper_vm .ssh (["umount /dev/xvdb1 " ])
160
+ helper_vm .ssh (["umount /mnt " ])
138
161
139
162
def _test_firstboot (self , create_vms , mode , * , machine = 'DEFAULT' , is_restore = False ):
140
163
host_vm = create_vms [0 ]
@@ -290,6 +313,7 @@ def _test_firstboot(self, create_vms, mode, *, machine='DEFAULT', is_restore=Fal
290
313
@pytest .mark .usefixtures ("xcpng_chained" )
291
314
@pytest .mark .parametrize ("local_sr" , ("nosr" , "ext" , "lvm" ))
292
315
@pytest .mark .parametrize ("package_source" , ("iso" , "net" ))
316
+ @pytest .mark .parametrize ("system_disk" , ("disk" , "raid1" ))
293
317
@pytest .mark .parametrize ("machine" , ("host1" , "host2" ))
294
318
@pytest .mark .parametrize ("version" , (
295
319
"83nightly" , "830net" ,
@@ -303,12 +327,12 @@ def _test_firstboot(self, create_vms, mode, *, machine='DEFAULT', is_restore=Fal
303
327
))
304
328
@pytest .mark .parametrize ("firmware" , ("uefi" , "bios" ))
305
329
@pytest .mark .continuation_of (
306
- lambda firmware , version , machine , local_sr , package_source : [
330
+ lambda firmware , version , machine , local_sr , package_source , system_disk : [
307
331
dict (vm = "vm1" ,
308
332
image_test = ("TestNested::test_tune_firstboot"
309
- f"[None-{ firmware } -{ version } -{ machine } -{ package_source } -{ local_sr } ]" ))])
333
+ f"[None-{ firmware } -{ version } -{ machine } -{ system_disk } - { package_source } -{ local_sr } ]" ))])
310
334
def test_boot_inst (self , create_vms ,
311
- firmware , version , machine , package_source , local_sr ):
335
+ firmware , version , machine , package_source , system_disk , local_sr ):
312
336
self ._test_firstboot (create_vms , version , machine = machine )
313
337
314
338
@pytest .mark .usefixtures ("xcpng_chained" )
0 commit comments