Implement Atlantic.Net cloud adapter#733
Conversation
Greptile SummaryReplaces the Atlantic.Net stub with a fully functional signed Cloud API adapter covering quote, provision, list, status, and destroy operations, backed by a focused unit test suite.
Confidence Score: 5/5Safe to merge — no billable API calls occur without explicit opt-in, credentials are validated before any request, and dry-run paths are correctly isolated. The core provisioning flow, signing logic, error handling, and plan selection are all correct and well-tested. The two flagged items are purely cosmetic: one is unreachable dead code in No files require special attention for merge. Important Files Changed
Sequence DiagramsequenceDiagram
participant Caller
participant Adapter as Atlantic Adapter
participant API as cloudapi.atlantic.net
Note over Caller,API: quote()
Caller->>Adapter: quote(ctx, spec, config)
Adapter->>API: POST describe-plan (HMAC-signed)
API-->>Adapter: plans[]
Adapter->>Adapter: pickPlan(plans, spec)
Adapter-->>Caller: "Quote { hourly, sku, ... }"
Note over Caller,API: provision() — dry-run
Caller->>Adapter: "provision(ctx{dryRun:true}, spec, config)"
Adapter-->>Caller: stubInstance (no API calls)
Note over Caller,API: provision() — live
Caller->>Adapter: "provision(ctx{dryRun:false}, spec, config)"
Adapter->>API: POST describe-plan (HMAC-signed)
API-->>Adapter: plans[]
Adapter->>Adapter: pickPlan + SSH key guard
alt spec.image not set
Adapter->>API: POST describe-image (HMAC-signed)
API-->>Adapter: images[]
Adapter->>Adapter: pickDefaultImage (newest Ubuntu)
end
Adapter->>API: POST run-instance (HMAC-signed)
API-->>Adapter: "{ instanceid, ip_address }"
Adapter-->>Caller: "Instance { id, status, publicIp, ... }"
Note over Caller,API: list() / status() / destroy()
Caller->>Adapter: list(ctx, config)
Adapter->>API: POST list-instances (HMAC-signed)
API-->>Adapter: instancesSet
Adapter-->>Caller: Instance[]
Reviews (5): Last reviewed commit: "Address Atlantic review feedback" | Re-trigger Greptile |
|
🤖 Auto-rebase: The branch was rebased successfully locally but could not be pushed to the fork. Please enable 'Allow edits from maintainers' in the PR settings, or rebase manually: |
21cee13 to
a3276de
Compare
|
🤖 Auto-rebase: The branch was rebased successfully locally but could not be pushed to the fork. Please enable 'Allow edits from maintainers' in the PR settings, or rebase manually: |
6 similar comments
|
🤖 Auto-rebase: The branch was rebased successfully locally but could not be pushed to the fork. Please enable 'Allow edits from maintainers' in the PR settings, or rebase manually: |
|
🤖 Auto-rebase: The branch was rebased successfully locally but could not be pushed to the fork. Please enable 'Allow edits from maintainers' in the PR settings, or rebase manually: |
|
🤖 Auto-rebase: The branch was rebased successfully locally but could not be pushed to the fork. Please enable 'Allow edits from maintainers' in the PR settings, or rebase manually: |
|
🤖 Auto-rebase: The branch was rebased successfully locally but could not be pushed to the fork. Please enable 'Allow edits from maintainers' in the PR settings, or rebase manually: |
|
🤖 Auto-rebase: The branch was rebased successfully locally but could not be pushed to the fork. Please enable 'Allow edits from maintainers' in the PR settings, or rebase manually: |
|
🤖 Auto-rebase: The branch was rebased successfully locally but could not be pushed to the fork. Please enable 'Allow edits from maintainers' in the PR settings, or rebase manually: |
Summary
Validation