Skip to content

fcvm-metal-arm: switch to the second public address and release the first - #675

Merged
ejc3 merged 5 commits into
mainfrom
fcvm-arm-switch-ip
Oct 26, 2026
Merged

ejc3 merged 5 commits into
mainfrom
fcvm-arm-switch-ip

Conversation

@ejc3

@ejc3 ejc3 commented Oct 25, 2026 •

Copy link
Copy Markdown
Owner

The switch-over from #666. Draft until the owner has moved their own SSH configs to the new address (the firecracker_dev_public_ip_next output today); the owner marks it ready, or tells the fcvm session to.

Changes

  • aws_eip.firecracker_dev_next moves from the ENI's secondary private address to the primary one (allow_reassociation = true), so inbound and outbound traffic both use it.
  • aws_eip.firecracker_dev and its association are removed: that address is released.
  • Everything that named the box's address now names only the new one: dev-hop-key.tf, ohio.tf, runner-vpc.tf, and via local.firecracker_dev_public_ips fcvm-dns-test.tf and gpu-box.tf. A released address is admitted nowhere, so whoever AWS hands it to next gets no access.
  • firecracker_dev_public_ip and firecracker_dev_ssh_command name the new address; firecracker_dev_public_ip_next is gone.
  • The resource keeps its _next name: renaming it in the apply that releases the old address would allocate a new address. A later moved block can rename it.
  • The secondary private address and its State Manager association stay for now (nothing public maps to them); a follow-up removes them with the host's netplan entry.

During the apply

Connections through the old address drop: SSH sessions to it, and this box's outbound connections, which leave from the primary private address and switch public address in the swap. Remote Control and agent sessions reconnect on their own. The fleet's sessions on this box do not depend on the old address.

Outside Terraform (check before marking ready)

  • Any Cloudflare Access policy or WAF rule that names the old address.
  • The jumpbox's own SSH config entries for this box.
  • The owner's Mac SSH config.

Tests

scripts/test-fcvm-arm-address.py: the old address is neither defined nor referenced, and the new one is on the primary private address (fails on main). Also terraform validate (1.10.3), terraform fmt -check, and the DNS test, runner boundary, Ohio, gpu box, secondary address and credential boundary tests.

Scripts no longer default to the old address (ec42b95)

claw-master-login.sh, claw-master-mac-setup.sh, mac-ssh-connector-setup.sh and windows-pc-setup.sh defaulted the host to a literal via ${FCVM_HOST:-...}. After the release a run without FCVM_HOST would connect to a stranger.

  • Each of the four takes the host from FCVM_HOST, else the hostname ssh -G fcvm-arm reports (ignored when it equals the alias), else exits 2 naming both. claw-master-login.sh --server keeps its private address.
  • windows-pc-bootstrap.sh print runs on the box itself, so it requires FCVM_HOST and exits 2 when unset.
  • test-mac-ssh-client.py fixtures use 203.0.113.10 (RFC 5737). AGENTS.md points at terraform output firecracker_dev_public_ip instead of the address and its allocation id.
  • scripts/test-fcvm-arm-address.py (HostComesFromTheOperator): runs all five scripts with stub ssh/aws and no FCVM_HOST; each must exit 2 with a message naming FCVM_HOST (and fcvm-arm, except the bootstrap) and reach neither aws nor ssh. Also checks the alias hostname is used, FCVM_HOST wins over it, and no host line holds a public IPv4 literal. It failed 3 of 6 against the previous scripts.

Tests run: test-fcvm-arm-address, test-mac-ssh-client, test-windows-pc-setup, test-agents-md pass. test-claw-master-server has 2 failures in the nextjs-dev/metal-box zshenv routing tests, which fail the same way on the parent commit.

…irst

- firecracker-dev.tf: aws_eip.firecracker_dev_next moves from the ENI's
  secondary private address to the primary one (allow_reassociation), so
  inbound and outbound traffic both use it; aws_eip.firecracker_dev and its
  association are removed, which releases that address. The _next name is
  kept: renaming it in the same apply would allocate a new address.
  firecracker_dev_public_ip and the SSH command output name the new address;
  the _next output is gone.
- dev-hop-key.tf, ohio.tf, runner-vpc.tf, and through
  local.firecracker_dev_public_ips fcvm-dns-test.tf and gpu-box.tf: the box's
  address is the new one only, so the released address is admitted nowhere.
- scripts/test-fcvm-arm-address.py: the old address is neither defined nor
  referenced, and the new one is on the primary private address; it fails on
  main, where aws_eip.firecracker_dev exists.

The secondary private address and its State Manager association stay for
now (nothing public maps to them); a follow-up removes them with the host's
netplan entry.

Tested: terraform validate (1.10.3), terraform fmt -check; the address,
DNS test, runner boundary, Ohio, gpu box, secondary address and credential
boundary tests
@coderabbitai

coderabbitai Bot commented Oct 25, 2026 •

Copy link
Copy Markdown

Warning

Review limit reached

You've used all free OSS reviews for now. Wait for the free limit to reset to keep reviewing this public repository.

Next included review available in 45 minutes.

Check out review usage here.

View limit details

Limit details: You’ve used the included review currently available.

Learn how review limits work.

Review configuration:

Run configuration
  • Source mode: Auto
  • Repository: Unavailable
  • Branch: Unavailable
  • File: No configuration file from this repository applied
  • Commit: Unavailable
  • Layers: defaults
  • Review profile: CHILL
  • Plan: Advanced
  • Run ID: 03349074-66eb-4c1b-8124-7a75ea02aabe
Commits

Reviewing files that changed from the base of the PR and between fd977d3 and 4274240.

Files selected for processing: 16
  • .github/workflows/lambda-tests.yml
  • AGENTS.md
  • README.md
  • dev-hop-key.tf
  • firecracker-dev.tf
  • ohio.tf
  • runner-vpc.tf
  • scripts/claw-master-login.sh
  • scripts/claw-master-mac-setup.sh
  • scripts/mac-ssh-connector-setup.sh
  • scripts/test-fcvm-arm-address.py
  • scripts/test-mac-ssh-client.py
  • scripts/test-ohio-runner-prep.py
  • scripts/test-runner-iam-boundary.py
  • scripts/windows-pc-bootstrap.sh
  • scripts/windows-pc-setup.sh
  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

…ssh alias, not a literal

claw-master-login.sh, claw-master-mac-setup.sh, mac-ssh-connector-setup.sh and
windows-pc-setup.sh defaulted the host to a literal address via ${FCVM_HOST:-...}.
Once that address is released, a run without FCVM_HOST would connect to whoever
AWS hands it to next.

- Each of those four gets a small fcvm_host function: FCVM_HOST, else the hostname
  `ssh -G fcvm-arm` reports (ignored when it equals the alias, which is what ssh
  prints for a name with no entry), else exit 2 with a message naming both. It runs
  after argument validation; claw-master-login.sh --server keeps its private
  address and does not need it.
- windows-pc-bootstrap.sh runs on the box itself, where no alias names the box, so
  `print` requires FCVM_HOST and exits 2 with a message when it is unset.
- test-mac-ssh-client.py: fixture host is now 203.0.113.10 (RFC 5737), and the
  connector script tests pass FCVM_HOST.
- AGENTS.md: the ARM entry points at `terraform output firecracker_dev_public_ip`
  instead of the address and its allocation id; the manual-swap comment no longer
  names the ARM allocation id.
- test-fcvm-arm-address.py: HostComesFromTheOperator runs all five scripts with stub
  ssh/aws and no FCVM_HOST: each exits 2 naming FCVM_HOST (and fcvm-arm, except the
  bootstrap), reaches neither aws nor ssh; the alias hostname is used, FCVM_HOST
  wins over it; no host line holds a public IPv4 literal. Run against the previous
  scripts it failed 3 of 6.
@ejc3
ejc3 marked this pull request as ready for review October 25, 2026 15:47
@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Oct 25, 2026 •

Copy link
Copy Markdown

Codex Review Summary

This comment shows the latest Codex review activity on this pull request.

Review Status Commit Review trigger
📝 Code Review ✅ Completed 2026-10-26T02:51:51.499242Z 4274240 Manual request
🔒 Security Review ✅ Completed 2026-10-26T02:54:27.319446Z 4274240 Manual request
ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review" or "@codex security review".

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

@ejc3

ejc3 commented Oct 25, 2026

Copy link
Copy Markdown
Owner Author

Held for the owner: this releases fcvm-metal-arm's Elastic IP (irreversible) and drops every connection through it; the description gates it on the owner moving their SSH configs first, and that confirmation has to come from the owner in a jumpbox session, not from GitHub. Also lambda-tests fails: scripts/test-fcvm-arm-address.py needs unittest.main(buffer=True) (QuietTests).

@ejc3

ejc3 commented Oct 26, 2026

Copy link
Copy Markdown
Owner Author

Pushed the CI buffering fix, wired the address regression into the existing credential-free test job, and corrected the operator docs. Focused tests passed on ARM; the full PR patch atop current main also passes the 90-test coordinator/client suite. External SSH/allowlist migration is being verified before the address cutover.

@ejc3

ejc3 commented Oct 26, 2026

Copy link
Copy Markdown
Owner Author

@codex review

@ejc3

ejc3 commented Oct 26, 2026

Copy link
Copy Markdown
Owner Author

@codex security review

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: bef0b0cd6a

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread dev-hop-key.tf
@chatgpt-codex-connector

Copy link
Copy Markdown

🛡️ Codex Security Review

Security review completed. No security issues were found in this pull request.

Reviewed commit: bef0b0cd6a

View security finding report

Only the user who started this review can view the report in Codex.

ℹ️ About Codex security reviews in GitHub

This is an experimental Codex feature. Security reviews are triggered when:

  • You comment "@codex security review"
  • A regular code review gets triggered (for example, "@codex review" or when a PR is opened), and you’re opted in so security review runs alongside code review

Once complete, Codex will leave suggestions, or a comment if no findings are found.

@ejc3

ejc3 commented Oct 26, 2026

Copy link
Copy Markdown
Owner Author

@coderabbitai review

@ejc3

ejc3 commented Oct 26, 2026

Copy link
Copy Markdown
Owner Author

@greptileai review

@coderabbitai

coderabbitai Bot commented Oct 26, 2026 •

Copy link
Copy Markdown
⚠️ Action not completed

Review rate limited.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

@ejc3

ejc3 commented Oct 26, 2026

Copy link
Copy Markdown
Owner Author

@codex review

@ejc3

ejc3 commented Oct 26, 2026

Copy link
Copy Markdown
Owner Author

@codex security review

@ejc3

ejc3 commented Oct 26, 2026

Copy link
Copy Markdown
Owner Author

@coderabbitai review

@ejc3

ejc3 commented Oct 26, 2026

Copy link
Copy Markdown
Owner Author

@greptileai review

@coderabbitai

coderabbitai Bot commented Oct 26, 2026 •

Copy link
Copy Markdown
⚠️ Action not completed

Review rate limited.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

@chatgpt-codex-connector

Copy link
Copy Markdown

Codex Review: Didn't find any major issues. Delightful!

Reviewed commit: 4274240872

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

@chatgpt-codex-connector

Copy link
Copy Markdown

🛡️ Codex Security Review

Security review completed. No security issues were found in this pull request.

Reviewed commit: 4274240872

View security finding report

Only the user who started this review can view the report in Codex.

ℹ️ About Codex security reviews in GitHub

This is an experimental Codex feature. Security reviews are triggered when:

  • You comment "@codex security review"
  • A regular code review gets triggered (for example, "@codex review" or when a PR is opened), and you’re opted in so security review runs alongside code review

Once complete, Codex will leave suggestions, or a comment if no findings are found.

@ejc3
ejc3 merged commit b269a99 into main Oct 26, 2026
3 checks passed
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