Commit 9b9a875e authored by Łukasz Nowak's avatar Łukasz Nowak Committed by Léo-Paul Géneau

software/kvm: Always provide default image

parent b47089fb
...@@ -55,7 +55,7 @@ md5sum = b7e87479a289f472b634a046b44b5257 ...@@ -55,7 +55,7 @@ md5sum = b7e87479a289f472b634a046b44b5257
[template-kvm-run] [template-kvm-run]
filename = template/template-kvm-run.in filename = template/template-kvm-run.in
md5sum = da4947e6d67849f14b7b1ece2b945f04 md5sum = 536c3b208fec9fa29ba6223432cd3509
[template-kvm-controller] [template-kvm-controller]
filename = template/kvm-controller-run.in filename = template/kvm-controller-run.in
......
...@@ -370,7 +370,6 @@ for nbd_ip, nbd_port in nbd_list: ...@@ -370,7 +370,6 @@ for nbd_ip, nbd_port in nbd_list:
'-drive', '-drive',
'file=nbd:[%s]:%s,media=cdrom' % (nbd_ip, nbd_port)]) 'file=nbd:[%s]:%s,media=cdrom' % (nbd_ip, nbd_port)])
else: else:
boot_image_url_list_used = False
if boot_image_url_list_json_config: if boot_image_url_list_json_config:
# Support boot-image-url-list # Support boot-image-url-list
with open(boot_image_url_list_json_config) as fh: with open(boot_image_url_list_json_config) as fh:
...@@ -379,16 +378,14 @@ else: ...@@ -379,16 +378,14 @@ else:
for image in sorted(image_config['image-list'], key=lambda k: k['link']): for image in sorted(image_config['image-list'], key=lambda k: k['link']):
link = os.path.join(image_config['destination-directory'], image['link']) link = os.path.join(image_config['destination-directory'], image['link'])
if os.path.exists(link) and os.path.islink(link): if os.path.exists(link) and os.path.islink(link):
boot_image_url_list_used = True
kvm_argument_list.extend([ kvm_argument_list.extend([
'-drive', '-drive',
'file=%s,media=cdrom' % (link,) 'file=%s,media=cdrom' % (link,)
]) ])
if not boot_image_url_list_used: # Always add by default the default image
# If no NBD is specified/available not downloadable image: use internal disk image kvm_argument_list.extend([
kvm_argument_list.extend([ '-drive', 'file=%s,media=cdrom' % default_cdrom_iso
'-drive', 'file=%s,media=cdrom' % default_cdrom_iso ])
])
print('Starting KVM: \n %s' % ' '.join(kvm_argument_list)) print('Starting KVM: \n %s' % ' '.join(kvm_argument_list))
......
...@@ -563,20 +563,29 @@ class TestBootImageUrlList(InstanceTestCase): ...@@ -563,20 +563,29 @@ class TestBootImageUrlList(InstanceTestCase):
self.assertTrue(os.path.islink(image2_link)) self.assertTrue(os.path.islink(image2_link))
self.assertEqual(os.readlink(image2_link), image2) self.assertEqual(os.readlink(image2_link), image2)
def getRunningImageList():
running_image_list = []
with self.slap.instance_supervisor_rpc as instance_supervisor:
kvm_pid = [q for q in instance_supervisor.getAllProcessInfo()
if 'kvm-' in q['name']][0]['pid']
kvm_process = psutil.Process(kvm_pid)
software_root = '/'.join([
self.slap.software_directory,
hashlib.md5(self.getSoftwareURL()).hexdigest()])
for entry in kvm_process.cmdline():
if entry.startswith('file') and 'media=cdrom' in entry:
# do cleanups
entry = entry.replace(software_root, '')
entry = entry.replace(self.computer_partition_root_path, '')
running_image_list.append(entry)
return running_image_list
# check that the image is NOT YET available in kvm # check that the image is NOT YET available in kvm
with self.slap.instance_supervisor_rpc as instance_supervisor: self.assertEqual(
kvm_pid = [q for q in instance_supervisor.getAllProcessInfo() ['file=/parts/debian-amd64-netinst.iso/debian-amd64-netinst.iso,'
if 'kvm-' in q['name']][0]['pid'] 'media=cdrom'],
kvm_process = psutil.Process(kvm_pid) getRunningImageList()
cmd_line = ''.join(kvm_process.cmdline()) )
self.assertNotIn(
'srv/boot-image-url-list-repository/image_001,media=cdrom',
cmd_line
)
self.assertNotIn(
'srv/boot-image-url-list-repository/image_002,media=cdrom',
cmd_line
)
# mimic the requirement: restart the instance by requesting it stopped and # mimic the requirement: restart the instance by requesting it stopped and
# then started started, like user have to do it # then started started, like user have to do it
...@@ -585,20 +594,16 @@ class TestBootImageUrlList(InstanceTestCase): ...@@ -585,20 +594,16 @@ class TestBootImageUrlList(InstanceTestCase):
self.rerequestInstance(partition_parameter_kw, state='started') self.rerequestInstance(partition_parameter_kw, state='started')
self.slap.waitForInstance(max_retry=1) self.slap.waitForInstance(max_retry=1)
# now the image is available in the kvm # now the image is available in the kvm, and its above default image
with self.slap.instance_supervisor_rpc as instance_supervisor: self.assertEqual(
kvm_pid = [q for q in instance_supervisor.getAllProcessInfo() [
if 'kvm-' in q['name']][0]['pid'] 'file=/srv/boot-image-url-list-repository/image_001,media=cdrom',
kvm_process = psutil.Process(kvm_pid) 'file=/srv/boot-image-url-list-repository/image_002,media=cdrom',
cmd_line = ''.join(kvm_process.cmdline()) 'file=/parts/debian-amd64-netinst.iso/debian-amd64-netinst.iso,'
self.assertIn( 'media=cdrom'
'srv/boot-image-url-list-repository/image_001,media=cdrom', ],
cmd_line getRunningImageList()
) )
self.assertIn(
'srv/boot-image-url-list-repository/image_002,media=cdrom',
cmd_line
)
# cleanup of images works, also asserts that configuration changes are # cleanup of images works, also asserts that configuration changes are
# reflected # reflected
...@@ -609,6 +614,20 @@ class TestBootImageUrlList(InstanceTestCase): ...@@ -609,6 +614,20 @@ class TestBootImageUrlList(InstanceTestCase):
[] []
) )
# mimic the requirement: restart the instance by requesting it stopped and
# then started started, like user have to do it
self.rerequestInstance(partition_parameter_kw, state='stopped')
self.slap.waitForInstance(max_retry=1)
self.rerequestInstance(partition_parameter_kw, state='started')
self.slap.waitForInstance(max_retry=1)
# again only default image is available in the running process
self.assertEqual(
['file=/parts/debian-amd64-netinst.iso/debian-amd64-netinst.iso,'
'media=cdrom'],
getRunningImageList()
)
def assertPromiseFails(self, promise): def assertPromiseFails(self, promise):
monitor_run_promise = os.path.join( monitor_run_promise = os.path.join(
self.computer_partition_root_path, 'software_release', 'bin', self.computer_partition_root_path, 'software_release', 'bin',
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment