Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
23 commits
Select commit Hold shift + click to select a range
f08e3d8
Clear affinity before deleting stale conductor
Afonne-CID Apr 1, 2026
eda12b9
Merge "Clear affinity before deleting stale conductor"
Apr 4, 2026
e05d5e6
merge upstream/master into main
Apr 6, 2026
85f7d42
UPSTREAM: <carry>: add OWNERS and test dockerfile back again
elfosardo May 5, 2023
9ada92a
UPSTREAM: <carry>: Do not upgrade test image
elfosardo May 24, 2023
aac04ce
DPU modeling - parent_node DB/Model/API
juliakreger Apr 11, 2023
9c0c954
follow-up on DPU change api-ref
juliakreger May 24, 2023
55d1e6b
UPSTREAM: <carry>: update base image for OCP 4.15
elfosardo Oct 18, 2023
b78e825
UPSTREAM: <carry>: add ci-operator config
elfosardo Dec 12, 2023
5a78f3b
UPSTREAM: <carry>: install distro pbr
elfosardo Dec 13, 2023
d2b009a
Revert "UPSTREAM: <carry>: install distro pbr"
elfosardo Dec 14, 2023
a7e46f2
UPSTREAM: <carry>: fix ci operator config
elfosardo Dec 14, 2023
bfc6373
UPSTREAM: <carry>: update base image for OCP 4.16
elfosardo Mar 18, 2024
7389968
UPSTREAM: <carry>: pin upper-constraints
elfosardo May 5, 2025
5c5c336
UPSTREAM: <carry>: update base image for tests
elfosardo May 9, 2025
f4b6a8d
UPSTREAM: <carry>: Run tests using Python 3.12
elfosardo May 9, 2025
fe751f1
UPSTREAM: <carry>: unpin upper-constraints
elfosardo Jul 11, 2025
a1080a7
UPSTREAM: <carry>: Run tests using Python 3.12
elfosardo May 9, 2025
96ea924
Fix the ability to escape service fail
juliakreger Aug 8, 2025
c02b086
Fix servicing abort to respect abortable flag
jacob-anders Aug 13, 2025
1de2f39
UPSTREAM: <carry>: update base image for tests
iurygregory Sep 8, 2025
9b40ea2
UPSTREAM: <carry>: Update test base image for 4.22
elfosardo Jan 20, 2026
9418b54
UPSTREAM: <carry>: Update username user by Jacob.
jacob-anders Jan 22, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
20 changes: 15 additions & 5 deletions ironic/db/sqlalchemy/api.py
Original file line number Diff line number Diff line change
Expand Up @@ -1481,13 +1481,23 @@ def delete_conductor(self, hostname):
# orphaned power state requests after deletion.
self.clear_node_target_power_state(hostname)

conductor_id_subquery = (
session.query(models.Conductor.id).where(
models.Conductor.hostname == hostname
).scalar_subquery()
)

# Clear conductor_affinity FK references.
session.execute(
sa.update(models.Node).where(
models.Node.conductor_affinity == conductor_id_subquery
).values(conductor_affinity=None)
)

# Delete conductor hardware interfaces
query = sa.delete(models.ConductorHardwareInterfaces).where(
models.ConductorHardwareInterfaces.conductor_id == (
session.query(models.Conductor.id).where(
models.Conductor.hostname == hostname
).scalar_subquery()
)
models.ConductorHardwareInterfaces.conductor_id
== conductor_id_subquery
)
session.execute(query)

Expand Down
18 changes: 18 additions & 0 deletions ironic/tests/unit/db/test_conductor.py
Original file line number Diff line number Diff line change
Expand Up @@ -555,3 +555,21 @@ def test_delete_conductor_clears_hardware_interfaces(self):
interfaces = self.dbapi.list_conductor_hardware_interfaces(
conductor['id'])
self.assertEqual([], interfaces)

def test_delete_conductor_clears_conductor_affinity(self):
conductor = self.dbapi.register_conductor(
{'hostname': 'test-conductor',
'drivers': ['fake'],
'conductor_group': 'test-group'})

node = self.dbapi.create_node({
'uuid': 'test-node-uuid',
'driver': 'fake',
'conductor_affinity': conductor['id']
})

self.assertEqual(conductor['id'], node.conductor_affinity)
self.dbapi.delete_conductor('test-conductor')

node = self.dbapi.get_node_by_uuid('test-node-uuid')
self.assertIsNone(node.conductor_affinity)