upcoming: [UIE-9487] VPC UI not displaying DBaaS resources#13504
Conversation
5eb6f67 to
80d3e4c
Compare
| borderTop: `1px solid ${theme.tokens.component.Table.Row.Border}`, | ||
| }} | ||
| /> | ||
| </> |
There was a problem hiding this comment.
Added pagination since the databases table will be using the database list GET request which is paginated. The other tables (Linodes and Nodebalancers) loop through the IDs from the subnets response and make their instance calls, so they don't have to be paginated.
There was a problem hiding this comment.
This is using the default page size options (25, 50, 75, 100) and is set to default to 25 as that's the minimum size for the Get database list request.
| const theme = useTheme(); | ||
|
|
||
| const [pageSize, setPageSize] = React.useState(25); | ||
| const [page, setPage] = React.useState(1); |
There was a problem hiding this comment.
I chose to store the page and pageSize property in state instead of using the usePaginationV2 hook that's used in the DatabaseLanding since there can be many of these and it might not make sense to store this information in preferences as the VPCs and Subnets can also be deleted.
Does this approach make sense for this unique case?
| const numResources = isNodebalancerVPCEnabled | ||
| ? getUniqueResourcesFromSubnets( | ||
| vpc.subnets, | ||
| flags.vpcDbaasResources ?? false |
There was a problem hiding this comment.
For the new vpcDbaasResources feature flag, in addition to hiding the databases table, the resource count fix is also behind this flag. I assumed we want the table to appear along with the updated count, so I've chosen to keep both changes behind the new feature flag for this reason.
| id: 5, | ||
| label: 'database-instance-5', | ||
| }); | ||
| const ids = Array.from({ length: 5 }, (_, i) => i + 1); // Update length to change the number of databases |
There was a problem hiding this comment.
Added this to make it a bit easier to control the length of the mock data. You can see something similar in the */v4beta/vpcs/:vpcId/subnets listener below that was also updated in this pull request.
| databasesFilter, | ||
| isDefaultEnabled // TODO (UIE-8634): Determine if check if still necessary | ||
| isDefaultEnabled, // TODO (UIE-8634): Determine if check if still necessary | ||
| 20000 |
There was a problem hiding this comment.
For more info, refer to my previous comment on the databases query.
| } | ||
|
|
||
| return [primaryIPv4, ...failoverIPv4s].join(', '); | ||
| }; |
There was a problem hiding this comment.
This logic uses the members property to get the content for the IPv4 field that can be seen in the wireframes.
packages/manager/src/features/VPCs/VPCDetail/SubnetDatabaseRow.tsx
Outdated
Show resolved
Hide resolved
packages/manager/src/features/VPCs/VPCDetail/SubnetDatabaseRow.tsx
Outdated
Show resolved
Hide resolved
| const theme = useTheme(); | ||
|
|
||
| const [pageSize, setPageSize] = React.useState(25); | ||
| const [page, setPage] = React.useState(1); |
packages/manager/src/features/VPCs/VPCDetail/SubnetDatabasesTable.tsx
Outdated
Show resolved
Hide resolved
packages/manager/src/features/VPCs/VPCDetail/SubnetDatabasesTable.tsx
Outdated
Show resolved
Hide resolved
packages/manager/src/features/VPCs/VPCDetail/SubnetDatabasesTable.tsx
Outdated
Show resolved
Hide resolved
packages/manager/src/features/VPCs/VPCDetail/SubnetDatabasesTable.tsx
Outdated
Show resolved
Hide resolved
80d3e4c to
b308124
Compare
2c35b3b to
f1f379c
Compare
packages/manager/src/features/VPCs/VPCDetail/SubnetDatabasesTable.tsx
Outdated
Show resolved
Hide resolved
packages/manager/src/features/VPCs/VPCDetail/SubnetDatabasesTable.tsx
Outdated
Show resolved
Hide resolved
… table in the VPC UI
… and table feature
532a8d1 to
367fdec
Compare
| const dbWithPrimary = { | ||
| ...mockDatabase, | ||
| members: { '2.2.2.2': 'primary' }, | ||
| } as DatabaseInstance; |
There was a problem hiding this comment.
Do we need the as DatabaseInstance castings?
There was a problem hiding this comment.
I ran into some issues with the type when trying to modify the members property, so I cast it to work around these, but let me see if there's a way to accomplish this without casting.
There was a problem hiding this comment.
@hana-akamai I've removing the casting in favor of specifying the type for the mock database variables when needed.
| @@ -0,0 +1,5 @@ | |||
| --- | |||
| '@linode/manager': Fixed | |||
There was a problem hiding this comment.
I would say this is more Upcoming Features than a bug fix
There was a problem hiding this comment.
Alright! I'll update this changeset and the pull request title to Upcoming Features.
There was a problem hiding this comment.
@hana-akamai I've updated the change set included with this pull request and updated the pull request title and description!
dwiley-akamai
left a comment
There was a problem hiding this comment.
Verification steps ✅
Code review ✅
| export const SubnetDatabasesTableRowHead = ( | ||
| <TableRow> | ||
| <TableCell sx={{ width: '20%' }}>Database Cluster</TableCell> | ||
| <TableCell>IPv4 Address(s)</TableCell> |
There was a problem hiding this comment.
| <TableCell>IPv4 Address(s)</TableCell> | |
| <TableCell>IPv4 Address(es)</TableCell> |
There was a problem hiding this comment.
Thanks for catching this @dwiley-akamai! I've pushed up a change to fix the header text for this.
| await userEvent.click(expandTableButton); | ||
|
|
||
| await findByText('Database Cluster'); | ||
| await findByText('IPv4 Address(s)'); |
There was a problem hiding this comment.
| await findByText('IPv4 Address(s)'); | |
| await findByText('IPv4 Address(es)'); |
There was a problem hiding this comment.
In addition to the related text change, I've included this update to fix the test checking the header text.
Cloud Manager UI test results🔺 14 failing tests on test run #12 ↗︎
Details
TroubleshootingUse this command to re-run the failing tests: pnpm cy:run -s "cypress/e2e/core/images/images-empty-landing-page.spec.ts,cypress/e2e/core/objectStorage/object-storage.e2e.spec.ts,cypress/e2e/core/images/create-image.spec.ts,cypress/e2e/core/images/smoke-create-image.spec.ts,cypress/e2e/core/images/create-linode-from-image.spec.ts,cypress/e2e/core/linodes/rebuild-linode.spec.ts,cypress/e2e/core/account/restricted-user-details-pages.spec.ts,cypress/e2e/core/images/images-non-empty-landing-page.spec.ts" |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||

Description 📝
This pull request updates the VPC UI to display DBaaS resources and update existing resource counts to include databases
This issue consists of the following:
Changes 🔄
List any change(s) relevant to the reviewer.
vpcDbaasResourcesfeature flagScope 🚢
Upon production release, changes in this PR will be visible to:
Target release date 🗓️
4/29/2026
Preview 📷
Note: The screenshots below are using mock data, so the data shown may not be accurate. The resource counts behavior will need to be checked using the verification steps that follow.
Databases Resource Tables Not displaying under expanded Subnet in VPC Details View
Resource Count Locations in VPC: UI

VPC Landing Table
VPC Detail Summary and Subnets Table

*Note: The count in the summary is inaccurate due to mock data. Use the verification steps to test this behavior.
How to test 🧪
Prerequisites
(How to setup test environment)
VPC DBaaS ResourcesReproduction steps
Test the VPC workflow
stagingenvironment, access the VPC tab, select theCreate VPCand create a new VPC and Subnet in a region. Preferably one that doesn't currently have one. For example,US, Chicago, IL. Keep track of the region for this new VPC/Subnet.Networkingtab and keep it opensubnetscall (*/vpcs/{vpcID}/subnets) and inspect the response to see that thedatabasesproperty is currently an empty arraySummaryand Subnets table below show a resource count of 0, which is accuratelinodestable is displayed in an empty state.Create a new database and assign the VPC/Subnet you created and retest the steps above
Create Database ClusterTest the VPC workflowsteps above.subnetscall returns the databases property with a single database in the array, but the resource counts on all pages are still 0.databasestable is shown.Verification steps
(How to verify changes)
Testing the Resource Counts
Testing the database resources table under the expanded Subnet using mock data
*/v4beta/vpcs/:vpcId/subnetslistener.subnetscall (*/vpcs/{vpcID}/subnets) and inspect the response to see thatdatabasesproperty has 5 items listed.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
As an Author, before moving this PR from Draft to Open, I confirmed ✅