Skip to content

Commit 3347a16

Browse files
committed
feat(compute,api): add node verifiers route and improve node cleanup
- Add node_verifiers route to boot_api and status_api - Refactor _pre_delete_machine_resource to clear all node resources - Reschedule target resources before agent deletion - Delete agents and resources by node reference instead of uuid Signed-off-by: Anton Kremenetsky <anton.kremenetsky@gmail.com>
1 parent 3149c87 commit 3347a16

5 files changed

Lines changed: 27 additions & 13 deletions

File tree

exordos_core/boot_api/api/routes.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,5 +47,6 @@ class ApiEndpointRoute(routes.Route):
4747

4848
nodes = routes.route(status_routes.NodesRoute)
4949
boots = routes.route(NetbootRoute)
50+
node_verifiers = routes.route(status_routes.NodeVerifiersRoute)
5051
agents = routes.route(UniversalAgentsRoute)
5152
kind = routes.route(status_routes.KindRoute)

exordos_core/compute/builders/pool.py

Lines changed: 20 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -400,22 +400,34 @@ def _actualize_machine_status(
400400

401401
def _pre_delete_machine_resource(self, resource: ua_models.TargetResource) -> None:
402402
"""The hook is performed before deleting machine resource."""
403-
# There is a chance the `guest_machine` actual resource won't
404-
# be deleted since the node will be dropped first and agent
405-
# won't have time to delete it. So to fix this we need to delete
406-
# the guest machine explicitly.
403+
# Clear all resources placed on the node
407404
resources = ua_models.Resource.objects.get_all(
408405
filters={
409-
"uuid": dm_filters.EQ(resource.uuid),
410-
"kind": dm_filters.EQ("guest_machine"),
406+
"node": dm_filters.EQ(resource.uuid),
411407
}
412408
)
409+
410+
# Clear all agents run on the node
413411
agents = ua_models.UniversalAgent.objects.get_all(
414412
filters={
415-
"uuid": dm_filters.EQ(resource.uuid),
413+
"node": dm_filters.EQ(resource.uuid),
416414
}
417415
)
418-
for obj in agents + resources:
416+
417+
# Rescheduler target resource
418+
if agents:
419+
target_resources = ua_models.TargetResource.objects.get_all(
420+
filters={
421+
"agent": dm_filters.In((a.uuid for a in agents)),
422+
}
423+
)
424+
425+
for target_resource in target_resources:
426+
target_resource.agent = None
427+
target_resource.save()
428+
429+
# Clear all resources and agents
430+
for obj in resources + agents:
419431
obj.delete()
420432

421433
# Volume

exordos_core/status_api/api/routes.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,4 +27,5 @@ class ApiEndpointRoute(routes.Route):
2727
__allow_methods__ = [routes.FILTER]
2828

2929
agents = routes.route(status_routes.UniversalAgentsRoute)
30+
node_verifiers = routes.route(status_routes.NodeVerifiersRoute)
3031
kind = routes.route(status_routes.KindRoute)

pyproject.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ dependencies = [
2929
"Jinja2>=3.1.5,<4.0.0", # BSD License (BSD-3-Clause)
3030
"izulu>=0.50.0,<1.0.0", # MIT License
3131
"gcl_iam>=1.2.1,<2.0.0", # Apache-2.0
32-
"gcl_sdk>=3.0.4,<4.0.0", # Apache-2.0
32+
"gcl_sdk>=3.0.5,<4.0.0", # Apache-2.0
3333
"gcl_certbot_plugin>=0.0.9,<1.0.0", # Apache-2.0
3434
"pyotp>=2.9.0,<3.0.0", # MIT License
3535
"pyyaml>=6.0.0,<7.0.0", # MIT

uv.lock

Lines changed: 4 additions & 4 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)