Skip to content

upcoming: [M3-10597] – Add VPC IPv6 support in Linode Create flow - #12885

Merged
dwiley-akamai merged 10 commits into
linode:vpc-ipv6-remainingfrom
dwiley-akamai:M3-10597-vpc-ipv6-linode-create-flow
Sep 23, 2025
Merged

upcoming: [M3-10597] – Add VPC IPv6 support in Linode Create flow#12885
dwiley-akamai merged 10 commits into
linode:vpc-ipv6-remainingfrom
dwiley-akamai:M3-10597-vpc-ipv6-linode-create-flow

Conversation

@dwiley-akamai

@dwiley-akamai dwiley-akamai commented Sep 16, 2025

Copy link
Copy Markdown
Contributor

Description 📝

Add VPC IPv6 support in the Linode Create flow. This encompasses three sub-flows:

  • Linode Interfaces enabled flag OFF (legacy configs used)
  • Linode Interfaces enabled flag ON
    • Config profile/legacy interfaces selected --> legacy configs used
    • Linode Interfaces selected --> Linode Interfaces used

Changes 🔄

  • Copy updates
    • Assign a public IPv4 address for this Linode --> Allow public IPv4 access (1:1 NAT)
    • Auto-assign a VPC IPv4 address for this Linode in the VPC --> Auto-assign VPC IPv4 address
  • Refactor getLegacyInterfaceFromLinodeInterface() to account for whether Dual Stack is enabled or not
  • Auto-assign VPC IPv6 address checkbox & VPC IPv6 input field added
  • Allow public IPv6 access checkbox added
  • Add IPv6 Range button added

Scope 🚢

Upon production release, changes in this PR will be visible to:

  • All customers (minor UX reorganization in VPC sub-section)
  • Some customers (the more substantive changes that are feature flagged)
  • No customers / Not applicable

Target release date 🗓️

9/23/25

Preview 📷

Interfaces flag OFF Interfaces flag ON (legacy configs selected) Interfaces flag ON (Linode Interfaces selected)
Before Screenshot 2025-09-22 at 11 31 18 AM Screenshot 2025-09-22 at 11 36 04 AM Screenshot 2025-09-22 at 11 37 44 AM
After Screenshot 2025-09-22 at 11 31 48 AM Screenshot 2025-09-22 at 11 36 42 AM Screenshot 2025-09-22 at 11 43 49 AM

How to test 🧪

Prerequisites

Ensure the vpc-ipv6 tag is on your account and the VPC IPv6 feature flag is enabled in our Dev Tool. You can point to DevCloud or prod (in which case you should use the Oslo region).

Verification steps

Note

In addition to the conditions outlined below, IPv6 fields should only show if the selected VPC/subnet are Dual Stack.

Linode Interfaces --> enabled flag off...

  • VPC IPv6 flag off
    • Nothing referencing VPC IPv6 is visible nor included in the payload
  • VPC IPv6 flag on
    • Auto-assign VPC IPv6 address checkbox
    • checked: interfaces[0].ipv6.slaac[0].range in payload should be "auto"
    • unchecked: interfaces[0].ipv6.slaac[0].range in payload should be set to what you input into the VPC IPv6 field
    • Allow public IPv6 access checkbox
      • checked: interfaces[0].ipv6.is_public should be true
      • unchecked: interfaces[0].ipv6.is_public should be false
    • Assign IPv6 Range
      • interfaces[0].ipv6.ranges array should consist of { range: '...' } objects consisting of what you input into the IPv6 Range fields (empty array if you included none)

Linodes Interfaces --> enabled flag on...

  • VPC IPv6 flag off
    • Nothing referencing VPC IPv6 is visible nor included in the payload
  • VPC IPv6 flag on
    • Configuration Profile Interfaces (Legacy) selected
    • See the steps for the previous Linode Interfaces --> enabled flag off... --> VPC IPv6 flag on section above
    • Linode Interfaces selected
      • interfaces[0].vpc.ipv6.is_public, interfaces[0].vpc.ipv6.ranges, and interfaces[0].vpc.ipv6.slaac[0].range should have values matching what you'd expect per the previous section
Author Checklists

As an Author, to speed up the review process, I considered 🤔

👀 Doing a self review
❔ Our contribution guidelines
🤏 Splitting feature into small PRs
➕ Adding a changeset
🧪 Providing/improving test coverage
🔐 Removing all sensitive information from the code and PR description
🚩 Using a feature flag to protect the release
👣 Providing comprehensive reproduction steps
📑 Providing or updating our documentation
🕛 Scheduling a pair reviewing session
📱 Providing mobile support
♿ Providing accessibility support


  • I have read and considered all applicable items listed above.

As an Author, before moving this PR from Draft to Open, I confirmed ✅

  • All tests and CI checks are passing
  • TypeScript compilation succeeded without errors
  • Code passes all linting rules

@dwiley-akamai
dwiley-akamai changed the base branch from develop to vpc-ipv6-remaining September 18, 2025 19:07
@dwiley-akamai
dwiley-akamai force-pushed the M3-10597-vpc-ipv6-linode-create-flow branch from 2fa85f2 to fbda2de Compare September 18, 2025 20:43
…elected (when user explicitly chooses them while the Linode Interfaces flag is on, or when Linode Interfaces flag is off and flow uses legacy interfaces)
@dwiley-akamai
dwiley-akamai marked this pull request as ready for review September 22, 2025 17:20
@dwiley-akamai
dwiley-akamai requested review from a team as code owners September 22, 2025 17:20
@dwiley-akamai
dwiley-akamai requested review from cpathipa, hana-akamai, jdamore-linode and mjac0bs and removed request for a team September 22, 2025 17:20

@hana-akamai hana-akamai left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Can we include the VPC IPv6 helper text in the Linode Create flow? (similar to Add Network Interface / Assign Linode to Subnet flows)
image

errors.linodeInterfaces?.[index]?.vpc?.ipv6?.slaac?.[0]
?.range?.message
}
helperText={generateVPCIPv6InputHelperText(

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

The helper text doesn't seem to be updating when switching selected subnets

Screen.Recording.2025-09-22.at.4.13.01.PM.mov

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Nice catch, I've made a note of it -- the UI for that field and helper text will be changing with a forthcoming PR in the next few days, so we can bundle a fix with that (if the helper text is retained in the updated design)

@linode-gh-bot

Copy link
Copy Markdown

Cloud Manager UI test results

🎉 813 passing tests on test run #11 ↗︎

❌ Failing✅ Passing↪️ Skipped🕐 Duration
0 Failing813 Passing11 Skipped37m 29s

@hana-akamai hana-akamai left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Functionality LGTM!

One thing I noticed is that when the feature flag is off, creating a Linode with a dual-stack VPC still results in an IPv6 address assigned even though the IPv6 options are hidden from the UI and not present in the payload. Not sure if this is expected behavior.

@github-project-automation github-project-automation Bot moved this from Review to Approved in Cloud Manager Sep 22, 2025
@dwiley-akamai

Copy link
Copy Markdown
Contributor Author

Functionality LGTM!

One thing I noticed is that when the feature flag is off, creating a Linode with a dual-stack VPC still results in an IPv6 address assigned even though the IPv6 options are hidden from the UI and not present in the payload. Not sure if this is expected behavior.

I believe the back-end logic will still auto-assign one if the user has the Dual Stack account capability

@mjac0bs mjac0bs left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Thanks for the clear explanation of the various flows.

Things looked good overall when toggling various flags, single vs. dual stack VPCs, and settings. I noticed one discrepancy between the testing instructions and the API payloads:

Linode Interfaces --> enabled flag off...

VPC IPv6 flag on
Allow public IPv6 access checkbox
checked: interfaces[0].ipv6.is_public should be true ✅

Image

unchecked: interfaces[0].ipv6.is_public should be false ❓ <-- The interfaces[0].ipv6.is_public field appears to just not show up in the payload at all when it is false. Just wanted to confirm whether that was intentional.

Image

@dwiley-akamai

Copy link
Copy Markdown
Contributor Author

unchecked: interfaces[0].ipv6.is_public should be false ❓ <-- The interfaces[0].ipv6.is_public field appears to just not show up in the payload at all when it is false. Just wanted to confirm whether that was intentional.

Good find 🔍 Not intentional, but the API's default value for that field is false -- I verified a linode created through this sub-flow with an unchecked public IPv6 checkbox ends up with a VPC interface where is_public is false

@dwiley-akamai
dwiley-akamai merged commit c406455 into linode:vpc-ipv6-remaining Sep 23, 2025
35 checks passed
@github-project-automation github-project-automation Bot moved this from Approved to Merged in Cloud Manager Sep 23, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

Archived in project

Development

Successfully merging this pull request may close these issues.

5 participants