Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

RSS: Collect and transfer IP pool information into Nexus #1958

Closed
Tracked by #824
smklein opened this issue Nov 17, 2022 · 0 comments · Fixed by #2358
Closed
Tracked by #824

RSS: Collect and transfer IP pool information into Nexus #1958

smklein opened this issue Nov 17, 2022 · 0 comments · Fixed by #2358

Comments

@smklein
Copy link
Collaborator

smklein commented Nov 17, 2022

No description provided.

@smklein smklein changed the title Collect and transfer IP pool information into Nexus RSS: Collect and transfer IP pool information into Nexus Nov 17, 2022
smklein added a commit that referenced this issue Feb 21, 2023
#2358)

# Summary

My long-term goal is to have Nexus be in charge of provisioning all
services.

For that to be possible, Nexus must be able to internalize all input
during the handoff from RSS. This PR extends the RSS -> Nexus handoff to
include:

- What "Nexus Services" are being launched?
- What are the ranges of IP addresses that may be used for internal
services?
- What external IP addresses, from that pool, are currently in-use for
Nexus services?

# Nexus Changes

## Database Records
 
- Adds a `nexus_service` record, which just includes the information
about the in-use external IP address.

## IP Address Allocation

- Adds an `explicit_ip` option, which lets callers perform an allocation
with an explicit request for a single IP address. You might ask the
question: "Why not just directly create a record with the IP address in
question, if you want to create it?" We could! But we'd need to recreate
all the logic which validates that the IP address exists within the
known-to-the-DB IP ranges within the pool.
- The ability for an operator to "request Nexus execute with a specific
IP address" is a feature we want anyway, so this isn't wasted work.
- The implementation and tests for this behavior are mostly within
`nexus/src/db/queries/external_ip.rs`

## Rack Initialization

- Populates IP pools and Service records as a part of the RSS handoff.
- Implementation and tests exist within
`nexus/src/db/datastore/rack.rs`.

## Populate

- Move the body of some of the "populate" functions into their correct
spot in the datastore, which makes it easier to...
- ... call all the populate functions -- rather than just a chunk of
them -- from `omicron_nexus::db::datastore::datastore_test`.
- As a consequence, update some tests which assumed the rack would be
"half-populated" -- it's either fully populated, or not populated at
all.

# Sled Agent changes

- Explicitly pass the "IP pool ranges for internal services" up to
Nexus.
- In the future, it'll be possible to pass a larger range of addresses
than just those used by running Nexus services.

Fixes: #1958
Unblocks: #732
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 a pull request may close this issue.

1 participant