Skip to content

Operator subnet pools UI#3146

Open
david-crespo wants to merge 3 commits intomainfrom
subnet-pool-ui
Open

Operator subnet pools UI#3146
david-crespo wants to merge 3 commits intomainfrom
subnet-pool-ui

Conversation

@david-crespo
Copy link
Copy Markdown
Collaborator

@david-crespo david-crespo commented Mar 20, 2026

Closes #3120

WIP, still need to go through it all. But being able to follow the model of IP pools meant the robot could slam through this.

image image

@vercel
Copy link
Copy Markdown

vercel bot commented Mar 20, 2026

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
console Ready Ready Preview Mar 31, 2026 10:58pm

Request Review

@david-crespo david-crespo mentioned this pull request Mar 20, 2026
Base automatically changed from external-subnets-ui to main March 20, 2026 23:41
david-crespo added a commit that referenced this pull request Mar 20, 2026
Closes #3030 
Closes #3031 

Operator subnet pools UI is in #3146.

<img width="1341" height="875" alt="image"
src="https://github.com/user-attachments/assets/4bd0ed83-53f2-4476-99a2-78a28726c9e2"
/>


<img width="906" height="648" alt="image"
src="https://github.com/user-attachments/assets/6b6cf51f-fc57-4e20-94ab-9cfea2f9d91b"
/>

<img width="506" height="615" alt="image"
src="https://github.com/user-attachments/assets/8a5bf4e7-536b-4f69-b35b-6c90a78696e4"
/>
david-crespo added a commit that referenced this pull request Mar 24, 2026
Saw this while doing #3146, didn't want to add to that diff.

if (pool.name === updatedPool.name) {
queryClient.invalidateEndpoint('systemSubnetPoolView')
}
Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

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

Trying to remember why we don’t just always invalidate here.

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.

Claude with the assist:

// Only invalidate if we're staying on the same page. If the name
// _has_ changed, invalidating ipPoolView causes an error page to flash
// while the loader for the target page is running because the current
// page's pool gets cleared out while we're still on the page. If we're
// navigating to a different page, its query will fetch anew regardless.


return { values: Object.keys(errors).length > 0 ? {} : values, errors }
}
}
Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

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

This is sort of annoying but it’s the nicest way to validate fields against each other. It’s also extremely testable, as the tests show.

One thing I need to check: I’m pretty sure using a resolver overrides all validation that comes on the fields, like required and stuff like that. If that’s true, we have to make sure the resolver covers everything.

Copy link
Copy Markdown
Collaborator Author

@david-crespo david-crespo Mar 31, 2026

Choose a reason for hiding this comment

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

Confirmed and commented in e463d2b

@david-crespo david-crespo marked this pull request as ready for review March 31, 2026 18:04
Copy link
Copy Markdown
Contributor

@charliepark charliepark left a comment

Choose a reason for hiding this comment

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

Looks good

body: 'Create an IP pool to see it here',
buttonText: 'New IP pool',
buttonTo: pb.ipPoolsNew(),
}
Copy link
Copy Markdown
Collaborator Author

@david-crespo david-crespo Mar 31, 2026

Choose a reason for hiding this comment

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

I think this was actually a Claude or Codex discovery — we were using an empty state on the silo IP pools list page that made it sound like you didn't have any IP pools when really there were just none linked to this silo. So here we actually distinguish between the two by looking at whether there are any pools at all. This requires fetching the list of all pools when the page loads, but that's no big deal.

Are you sure you want to make <HL>{pool.name}</HL> the default{' '}
{versionLabel} subnet pool for this silo?
</p>
)
Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

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

The truth of this warning relies on this API PR oxidecomputer/omicron#10206 I have in progress that makes subnet pool update demote the current default when setting a new one.

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.

Subnet pools UI

2 participants