Skip to content

Commit

Permalink
Provision step should store even guests not fully provisioned
Browse files Browse the repository at this point in the history
This should free `finish` to clean up guests even partially provisioned,
for example in the case of tmt termination while provision is still
running.
  • Loading branch information
happz committed Feb 10, 2025
1 parent 10b87ae commit 939fead
Show file tree
Hide file tree
Showing 8 changed files with 15 additions and 72 deletions.
34 changes: 15 additions & 19 deletions tmt/steps/provision/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -1196,6 +1196,9 @@ def show(self, show_multihost_name: bool = True) -> None:
if self.is_dry_run:
return

if not self.is_ready:
return

for key, key_formatted, value_formatted in self.facts.format():
if key in GUEST_FACTS_INFO_FIELDS:
self.info(key_formatted, value_formatted, color='green')
Expand Down Expand Up @@ -2525,15 +2528,14 @@ def wake(self, data: Optional[GuestData] = None) -> None:
guest.wake()
self._guest = guest

# TODO: getter. Like in Java. Do we need it?
@property
def guest(self) -> Optional[Guest]:
"""
Return provisioned guest
Each ProvisionPlugin has to implement this method.
Should return a provisioned Guest() instance.
Return the provisioned guest.
"""

raise NotImplementedError
return self._guest

def essential_requires(self) -> list['tmt.base.Dependency']:
"""
Expand Down Expand Up @@ -2649,7 +2651,7 @@ def go(self) -> Iterator['ProvisionTask']:
yield ProvisionTask(
logger=new_logger,
result=None,
guest=None,
guest=phase.guest,
exc=None,
requested_exit=exc,
phases=[]
Expand All @@ -2659,7 +2661,7 @@ def go(self) -> Iterator['ProvisionTask']:
yield ProvisionTask(
logger=new_logger,
result=None,
guest=None,
guest=phase.guest,
exc=exc,
requested_exit=None,
phases=[]
Expand All @@ -2669,7 +2671,7 @@ def go(self) -> Iterator['ProvisionTask']:
yield ProvisionTask(
logger=new_logger,
result=None,
guest=phase.guest(),
guest=phase.guest,
exc=None,
requested_exit=None,
phases=[],
Expand Down Expand Up @@ -2780,9 +2782,8 @@ def wake(self) -> None:
# If guest data loaded, perform a complete wake up
plugin.wake(data=self._guest_data.get(plugin.name))

guest = plugin.guest()
if guest:
self._guests.append(guest)
if plugin.guest:
self._guests.append(plugin.guest)

# Nothing more to do if already done and not asked to run again
if self.status() == 'done' and not self.should_run_again:
Expand Down Expand Up @@ -2853,15 +2854,10 @@ def _run_provision_phases(

failed_tasks.append(outcome)

continue

guest = outcome.guest

if guest:
guest.show()
if outcome.guest:
outcome.guest.show()

if guest.is_ready or self.is_dry_run:
self._guests.append(guest)
self._guests.append(outcome.guest)

return all_tasks, failed_tasks

Expand Down
7 changes: 0 additions & 7 deletions tmt/steps/provision/artemis.py
Original file line number Diff line number Diff line change
Expand Up @@ -734,10 +734,3 @@ def go(self, *, logger: Optional[tmt.log.Logger] = None) -> None:
parent=self.step)
self._guest.start()
self._guest.setup()

def guest(self) -> Optional[GuestArtemis]:
"""
Return the provisioned guest
"""

return self._guest
3 changes: 0 additions & 3 deletions tmt/steps/provision/bootc.py
Original file line number Diff line number Diff line change
Expand Up @@ -396,6 +396,3 @@ def go(self, *, logger: Optional[tmt.log.Logger] = None) -> None:
rootless=self._rootless)
self._guest.start()
self._guest.setup()

def guest(self) -> Optional[tmt.steps.provision.Guest]:
return self._guest
7 changes: 0 additions & 7 deletions tmt/steps/provision/connect.py
Original file line number Diff line number Diff line change
Expand Up @@ -236,10 +236,3 @@ def go(self, *, logger: Optional[tmt.log.Logger] = None) -> None:
name=self.name,
parent=self.step)
self._guest.setup()

def guest(self) -> Optional[tmt.GuestSsh]:
"""
Return the provisioned guest
"""

return self._guest
7 changes: 0 additions & 7 deletions tmt/steps/provision/local.py
Original file line number Diff line number Diff line change
Expand Up @@ -224,10 +224,3 @@ def go(self, *, logger: Optional[tmt.log.Logger] = None) -> None:

self._guest = GuestLocal(logger=self._logger, data=data, name=self.name, parent=self.step)
self._guest.setup()

def guest(self) -> Optional[GuestLocal]:
"""
Return the provisioned guest
"""

return self._guest
15 changes: 0 additions & 15 deletions tmt/steps/provision/mrack.py
Original file line number Diff line number Diff line change
Expand Up @@ -1340,14 +1340,6 @@ def start(self) -> None:
self.verbose('primary address', self.primary_address, 'green')
self.verbose('topology address', self.topology_address, 'green')

def stop(self) -> None:
"""
Stop the guest
"""

# do nothing
return

def remove(self) -> None:
"""
Remove the guest
Expand Down Expand Up @@ -1467,10 +1459,3 @@ def go(self, *, logger: Optional[tmt.log.Logger] = None) -> None:
)
self._guest.start()
self._guest.setup()

def guest(self) -> Optional[GuestBeaker]:
"""
Return the provisioned guest
"""

return self._guest
7 changes: 0 additions & 7 deletions tmt/steps/provision/podman.py
Original file line number Diff line number Diff line change
Expand Up @@ -538,10 +538,3 @@ def go(self, *, logger: Optional[tmt.log.Logger] = None) -> None:
self._guest.facts.capabilities[GuestCapability.SYSLOG_ACTION_READ_ALL] = False
# ... while this seems to be forbidden completely.
self._guest.facts.capabilities[GuestCapability.SYSLOG_ACTION_READ_CLEAR] = False

def guest(self) -> Optional[GuestContainer]:
"""
Return the provisioned guest
"""

return self._guest
7 changes: 0 additions & 7 deletions tmt/steps/provision/testcloud.py
Original file line number Diff line number Diff line change
Expand Up @@ -1253,13 +1253,6 @@ def go(self, *, logger: Optional[tmt.log.Logger] = None) -> None:
self._guest.start()
self._guest.setup()

def guest(self) -> Optional[tmt.Guest]:
"""
Return the provisioned guest
"""

return self._guest

def _print_local_images(self) -> None:
"""
Print images which are already cached
Expand Down

0 comments on commit 939fead

Please sign in to comment.