Skip to content

fix: delete_server() handles multi-homed VMs - #19

Draft
Koan-Bot wants to merge 1 commit into
atoomic:masterfrom
Koan-Bot:koan.atoomic/fix-delete-server-multi-port
Draft

fix: delete_server() handles multi-homed VMs#19
Koan-Bot wants to merge 1 commit into
atoomic:masterfrom
Koan-Bot:koan.atoomic/fix-delete-server-multi-port

Conversation

@Koan-Bot

@Koan-Bot Koan-Bot commented Apr 11, 2026

Copy link
Copy Markdown
Contributor

What

Fix delete_server() to properly clean up floating IPs on VMs with multiple network ports.

Why

The previous code called ports(device_id => $uid) in scalar context. The _list() method returns the element count (not a hashref) when multiple results match, causing a fatal "Can't use string as HASH ref" error on multi-homed VMs. Single-port VMs were unaffected.

How

Changed from scalar assignment to list context (my @ports_for_device = ...) and iterate over all ports, cleaning up each associated floating IP. The next unless ref $port guard handles the undef case from zero-match results.

Testing

  • Added multi-homed VM test case with 2 ports, each with its own floating IP
  • All 6 existing test files pass
  • Covers: no ports, single port, and multi-port scenarios

🤖 Generated with Claude Code


Quality Report

Changes: 2 files changed, 122 insertions(+), 6 deletions(-)

Code scan: clean

Tests: passed (OK)

Branch hygiene: clean

Generated by Kōan post-mission quality pipeline

The previous code assigned ports() result to a scalar, which returns the
element count when _list() finds multiple matches. This caused a crash
("Can't use string as HASH ref") when deleting VMs with more than one
network port. Now iterates over all ports in list context and cleans up
each associated floating IP.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant