Merged
Conversation
Member
Author
|
The Claude Code session for this PR is here: https://codeassociates.github.io/conversations-with-claude/conversations/python-cli-tool/debug-fix-all-vultr-issues/index.html |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Fixes four open Vultr issues (#53, #55, #57, #61) which all stem from two Vultr-specific API behaviors that differ from DigitalOcean:
Vultr returns
0.0.0.0as the initial IP for pending instances (DO returns empty/null). Thecreatecommand treated"0.0.0.0"as a valid IP, skipping the wait-for-IP loop entirely. This caused DNS records to be created with0.0.0.0.Vultr rejects deletion of pending/locked instances with HTTP 500 (DO allows deleting in any state). Because the IP wait was skipped, the create command returned in ~2 seconds, and the test teardown tried to destroy the VM while it was still provisioning — silently failing every time.
Changes
machine/subcommands/create.py: Treat"0.0.0.0"the same asNonewhen checking the IP address, so the wait-for-IP loop runs correctly on Vultr.machine/providers/vultr.py: Retrydestroy_vmwith 5s backoff (up to 2 min) when Vultr returns transient 500 errors ("not currently active" or "currently locked").tests/test_e2e.py: Strengthentest_instance_has_ipto reject0.0.0.0. Add teardown diagnostics so future destroy failures are visible in test output.Test plan
test_dns_record_createdalways failed)ruff checkpassesCloses #53, closes #55, closes #57, closes #61
🤖 Generated with Claude Code