Skip to content

upcoming: [M3-9981] – Add support for VPC IPv6 in the Assign/Unassign Linodes drawers - #12778

Merged
dwiley-akamai merged 34 commits into
linode:developfrom
dwiley-akamai:M3-9981-vpc-ipv6-assign-unassign-linodes-drawer
Sep 9, 2025
Merged

upcoming: [M3-9981] – Add support for VPC IPv6 in the Assign/Unassign Linodes drawers#12778
dwiley-akamai merged 34 commits into
linode:developfrom
dwiley-akamai:M3-9981-vpc-ipv6-assign-unassign-linodes-drawer

Conversation

@dwiley-akamai

@dwiley-akamai dwiley-akamai commented Aug 27, 2025

Copy link
Copy Markdown
Contributor

Description 📝

Update the Assign Linodes & Unassign Linodes drawers to support VPC IPv6 and display the relevant information

Changes 🔄

  • Separate Auto-assign checkboxes for VPC IPv4 and VPC IPv6
  • "VPC IPv6" input field added w/ helper text
  • Public access section
    • "Allow public IPv4 access (1:1 NAT)" checkbox
      • Tooltip: "Allow IPv4 access to the internet using 1:1 NAT on the VPC interface."
    • "Allow public IPv6 access" checkbox
      • Tooltip: "To enable IPv6 internet access, assign a globally routed IPv6 prefix to the subnet and enable the interface's Public setting."
  • Additional IP ranges section name; description moved into tooltip
  • "Add IPv6 Range" functionality added
  • "Linodes recently assigned to Subnet" / "Linodes to be unassigned from Subnet" tables include "VPC IPv6" and "VPC IPv6 Ranges" columns
  • Downloadable CSVs include relevant VPC IPv6 data
  • New generateVPCIPv6InputHelperText function added with test coverage

Scope 🚢

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

  • All customers (no VPC IPv6 functionality is being made generally visible, only minor renamings/reorderings in the Assign Linodes drawer)
  • Some customers (e.g. in Beta or Limited Availability)
  • No customers / Not applicable

Target release date 🗓️

9/23/25

Preview 📷

Before After
Screenshot 2025-09-02 at 2 03 19 PM Screenshot 2025-09-09 at 11 48 54 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

  • With the feature flag on...
    • Auto-assign checkboxes for VPC IPv4 and VPC IPv6
      • VPC IPv4 Auto-assign checkbox tooltip should be: "Automatically assign an IPv4 address as a private IP address for this Linode in the VPC."
      • VPC IPv6 Auto-assign checkbox tooltip should be: "Automatically assign an IPv6 address as a private IP address for this Linode in the VPC. A /52 IPv6 network prefix is allocated for the VPC."
    • "VPC IPv6" field (expose by unchecking auto-assign) functionality & error handling should work as expected
    • IP ranges section title is now "Assign additional IP ranges"
      • the description has been moved into a tooltip and says: "If you need more IPs, you can add IPv4 and IPv6 address ranges to let your VPC connect to services running on this Linode. Learn more."
    • "Add IPv6 Range" section present with functionality and error handling working as expected
    • "Linodes recently assigned to Subnet" & "Linodes to be Unassigned from Subnet" tables have "VPC IPv6" and "VPC IPv6 Ranges" columns
    • Downloadable CSVs contain the expected VPC IPv6 data
  • With the feature flag off...
    • IPv6-related copy and fields should not be present
    • VPC IPv4 Auto-assign should be present
    • Public access section with 1:1 NAT checkbox should be present

With the feature flag off, not having the "VPC Dual Stack" account capability, or using a VPC/subnet that only has VPC IPv4, you should never see the ipv6 object in the assignment payload.

  • Payload contents when assigning should be as follows depending on your selections:
    • VPC IPv4 Auto-assign checked
      • vpc.ipv4.addresses[0].address === "auto"
    • VPC IPv4 Auto-assign unchecked
      • vpc.ipv4.addresses[0].address === whatever VPC IPv4 you input
    • VPC IPv6 Auto-assign checked
      • vpc.ipv6.slaac[0].range === "auto"
    • VPC IPv6 Auto-assign unchecked
      • vpc.ipv6.slaac[0].range === whatever VPC IPv6 you input
    • IPv4 Public Access checked
      • nat_1_1_address: "auto" (if linode you're assigning uses Linode Interfaces) or nat_1_1: "any" (legacy interfaces)
    • IPv4 Public Access unchecked
      • nat_1_1_address: null (Linode Interfaces) or nat_1_1: '' (legacy interfaces)
    • IPv6 Public Access checked
      • vpc.ipv6.is_public: true
    • IPv6 Public Access unchecked
      • vpc.ipv6.is_public: false
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

DevDW added 18 commits May 30, 2025 18:00
…drawer; add VPC IPv6 input and IPv6 range support; update recently assigned/unassigned table and downloadable CSVs to have new IPv6 columns
…drawer; add VPC IPv6 input and IPv6 range support; update recently assigned/unassigned table and downloadable CSVs to have new IPv6 columns
message: 'Must be a /64 IPv6 network CIDR',
test: (value) => validateIPv6PrefixLengthIs64(value),
}),
address: string().required(),

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.

Per the API spec, this is a read-only field, so I removed it from the schema.


export interface IPv6SLAAC {
address: string;
address?: string;

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.

read-only field only present in data returned from the API

@dwiley-akamai
dwiley-akamai requested review from bill-akamai, cliu-akamai, cpathipa and hana-akamai and removed request for a team September 2, 2025 18:41

@bill-akamai bill-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.

Looks good @dwiley-akamai - just noticed this tooltip has extra left-margin that the others don't have

Otherwise, it preformed as I expected.

@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 tighten the spacing up a bit for the Assign additional IP ranges section?

Looks like there are some minor loading state issues for unassigning a linode:

  • No loading state while interface data is loading in the drawer leading to UI jumping after data loads
  • There is no loading state for the Assign/Unassign buttons in the drawer so after clicking, it doesn't seem like anything is happening for 1-2s
  • The SubnetLinodeRow briefly flickers with Error retrieving VPC IPv4/6 while unassigning
Screen.Recording.2025-09-03.at.2.05.15.PM.mov

Comment thread packages/manager/src/features/VPCs/VPCDetail/SubnetAssignLinodesDrawer.tsx Outdated
…just spacing in IP ranges section; make use of useVPCDualStack() hook; add loading state for Assign/Unassign buttons
@dwiley-akamai

dwiley-akamai commented Sep 4, 2025

Copy link
Copy Markdown
Contributor Author

Can we tighten the spacing up a bit for the Assign additional IP ranges section?

Looks like there are some minor loading state issues for unassigning a linode:

  • No loading state while interface data is loading in the drawer leading to UI jumping after data loads
  • There is no loading state for the Assign/Unassign buttons in the drawer so after clicking, it doesn't seem like anything is happening for 1-2s
  • The SubnetLinodeRow briefly flickers with Error retrieving VPC IPv4/6 while unassigning

@hana-akamai The most recent commit tightens up the spacing:

Screenshot 2025-09-04 at 10 47 06 AM

I also added loading states for the Assign/Unassign buttons when the form is being submitted.

The UI jump and brief flicker are existing issues from what I can see as I observed them in prod as well -- we can create a separate ticket to look into those

…e Auto-assign checkboxes for IPv4 and IPv6, validation: allow empty string value for nat_1_1 in ipv4ConfigInterface
…e Auto-assign checkboxes for IPv4 and IPv6, validation: allow empty string value for nat_1_1 in ipv4ConfigInterface, resolve conflicts
@dwiley-akamai
dwiley-akamai force-pushed the M3-9981-vpc-ipv6-assign-unassign-linodes-drawer branch from 3b3676f to 77b2b8d Compare September 6, 2025 01:01

@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. Confirmed auto-assign checkboxes, IPv6 functionality, tooltips, CSVs

Scope 🚢
Upon production release, changes in this PR will be visible to:
No customers / Not applicable

Nit: The Public access section with 1:1 NAT checkbox is something new that will be visible to customers with the VPC IPV6 feature flag off

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

Copy link
Copy Markdown
Contributor Author

Nit: The Public access section with 1:1 NAT checkbox is something new that will be visible to customers with the VPC IPV6 feature flag off

Thanks @hana-akamai, forgot to update the PR description. We did determine last week that visibility was fine without the feature flag on

@linode-gh-bot

Copy link
Copy Markdown

Cloud Manager UI test results

🎉 745 passing tests on test run #14 ↗︎

❌ Failing✅ Passing↪️ Skipped🕐 Duration
0 Failing745 Passing6 Skipped37m 18s

@dwiley-akamai
dwiley-akamai merged commit ff14235 into linode:develop Sep 9, 2025
35 checks passed
@github-project-automation github-project-automation Bot moved this from Approved to Merged in Cloud Manager Sep 9, 2025
@dwiley-akamai
dwiley-akamai deleted the M3-9981-vpc-ipv6-assign-unassign-linodes-drawer branch September 9, 2025 21:08
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