Skip to content

Commit

Permalink
ksushy: get back to old boot behaviour
Browse files Browse the repository at this point in the history
  • Loading branch information
karmab committed Feb 20, 2025
1 parent 70851d4 commit 4a7d127
Show file tree
Hide file tree
Showing 3 changed files with 29 additions and 27 deletions.
2 changes: 1 addition & 1 deletion kvirt/ksushy/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -200,7 +200,7 @@ def system_reset_action(client, name):
if reset_type in ['On', 'ForceRestart']:
try:
pprint(f"Starting vm {name}")
k.start_from_cd(name) if config.type == 'kvm' else k.start(name)
k.start(name)
except subprocess.CalledProcessError as e:
error(e)
response.status = 400
Expand Down
8 changes: 4 additions & 4 deletions kvirt/providers/hcloud/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -102,8 +102,8 @@ def create(self, name, virttype=None, profile='', flavor=None, plan='kvirt', cpu
placement_group = self.conn.placement_groups.get_by_name(placement_group_name)
if not placement_group:
response = self.conn.placement_groups.create(name=placement_group_name, type="spread",
labels={"kcli-managed": "placement-group",
"plan": labels["plan"]})
labels={"kcli-managed": "placement-group",
"plan": labels["plan"]})
if response.action:
response.action.wait_until_finished(300)

Expand Down Expand Up @@ -283,8 +283,8 @@ def info(self, name, vm=None, debug=False):
for alias_ip in private_net.alias_ips:
ips.append(alias_ip)

nets.append({'device': 'enp7s0', 'mac': private_net.mac_address, 'net': private_net.network.name, 'type': "private",
"ip": yamlinfo['private_ip']})
nets.append({'device': 'enp7s0', 'mac': private_net.mac_address, 'net': private_net.network.name,
'type': "private", "ip": yamlinfo['private_ip']})

if nets:
yamlinfo['nets'] = nets
Expand Down
46 changes: 24 additions & 22 deletions kvirt/providers/kvm/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -1437,6 +1437,30 @@ def start(self, name):
return {'result': 'failure', 'reason': e}
return {'result': 'success'}

def start_from_cd(self, name):
self.stop(name)
conn = self.conn
vm = conn.lookupByName(name)
xml = vm.XMLDesc(0)
root = ET.fromstring(xml)
newxml = ET.tostring(root).decode("utf-8")
newxml = newxml.replace('dev="hd"', 'dev="cdrom"')
for element in list(root.iter('disk')):
if element.get('device') == 'cdrom':
iso_file = element.find('source').get('file') if element.find('source') is not None else None
if iso_file is None or iso_file.endswith(f'{name}.ISO'):
warning(f"No iso found in VM {name}, starting normally")
return self.start(name)
boot = element.find('boot') or {}
cd_order = boot.get('order')
if cd_order is not None:
newxml = newxml.replace("<boot order='1'/>", "<boot order='XX'/>")
newxml = newxml.replace(f"<boot order='{cd_order}'/>", "<boot order='1'/>")
newxml = newxml.replace("<boot order='XX'/>", f"<boot order='{cd_order}'/>")
break
conn.createXML(newxml)
return {'result': 'success'}

def stop(self, name, soft=False):
conn = self.conn
status = {0: 'down', 1: 'up'}
Expand Down Expand Up @@ -2745,28 +2769,6 @@ def update_iso(self, name, iso):
conn.defineXML(newxml)
return {'result': 'success'}

def start_from_cd(self, name):
self.stop(name)
conn = self.conn
vm = conn.lookupByName(name)
xml = vm.XMLDesc(0)
root = ET.fromstring(xml)
newxml = ET.tostring(root).decode("utf-8")
newxml = newxml.replace('dev="hd"', 'dev="cdrom"')
for element in list(root.iter('disk')):
if element.get('device') == 'cdrom':
iso_file = element.find('source').get('file') if element.find('source') is not None else None
if iso_file is None or iso_file.endswith(f'{name}.ISO'):
self.start(name)
boot = element.find('boot') or {}
cd_order = boot.get('order')
if cd_order is not None:
newxml = newxml.replace("<boot order='1'/>", "<boot order='XX'/>")
newxml = newxml.replace(f"<boot order='{cd_order}'/>", "<boot order='1'/>")
newxml = newxml.replace("<boot order='XX'/>", f"<boot order='{cd_order}'/>")
break
conn.createXML(newxml)

def update_flavor(self, name, flavor):
pprint("Not implemented")
return {'result': 'success'}
Expand Down

0 comments on commit 4a7d127

Please sign in to comment.