Skip to content

Add bare metal fulfillment enhancement proposal - #7

Merged
tzumainn merged 18 commits into
osac-project:mainfrom
tzumainn:bare-metal-fulfillment
Nov 24, 2025
Merged

tzumainn merged 18 commits into
osac-project:mainfrom
tzumainn:bare-metal-fulfillment

Conversation

@tzumainn

Copy link
Copy Markdown
Contributor

No description provided.

@tzumainn
tzumainn requested review from larsks and mhrivnak September 15, 2025 15:26
@larsks
larsks requested a review from okrieg September 15, 2025 19:51

@okrieg okrieg left a comment •

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Few tweaks;

One larger question, I discussed what we are doing with Rashid Khan, and Sean Cohen, and they wanted us to engage with them to see if they could enhance ESI to address challenges. So, not clear that we want to replace ESI after all, which is what this enhancement request keeps saying.

@mhrivnak @tzumainn @larsks should we create a seperate enhancement request to fix ESI that we can expose to them?

From the original design document:
ESI is primarily just a particular configuration of OpenStack services, and there are a number of reasons why we may eventually replace it:

  • ESI is hard to deploy and configure. Red Hat’s OpenStack installers as of RHOS 17.1 have been difficult to configure and maintain, and ESI has added additional capabilities that complicate the deployment.
  • Network management is provided by Neutron, leading to challenges when managing bare metal network interfaces (since we need to make API calls to two separate services and reconcile the information retrieved from both).
  • Due to a variety of design decisions, OpenStack services are noticeably slow for this use, leading to a frustrating user experience.

In addition, I think we want to say that since ESI was designed for single VM at a time; it doesn't support parallel configuration; e.g., we would want to go to a switch and change all the required ports in one shot for switches that support.

Comment thread enhancements/bare-metal-fulfillment/README.md Outdated
Comment thread enhancements/bare-metal-fulfillment/README.md Outdated
Comment thread enhancements/bare-metal-fulfillment/README.md Outdated
Comment thread enhancements/bare-metal-fulfillment/README.md Outdated
Comment thread enhancements/bare-metal-fulfillment/README.md Outdated
Comment thread enhancements/bare-metal-fulfillment/README.md
macaddrs:
- C0:FF:EE:5D:57:7C
- C0:FF:EE:96:AD:CA
# This configuration will only match interfaces with the `25gb` tag

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Please don't use word tag here, confusing for people thinking about vlan tags

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.

Changed to property

Comment thread enhancements/bare-metal-fulfillment/README.md Outdated
Comment thread enhancements/bare-metal-fulfillment/README.md
Comment thread enhancements/bare-metal-fulfillment/README.md
Comment thread enhancements/bare-metal-fulfillment/README.md Outdated

## Summary

Bare metal fulfillment refers to the process through which a tenant acquires bare metal hosts and configures their networking.

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

not sure if we want to integrate higher level use cases:

  • Some tenants will want to deploy alternative clusters, e.g., SLURM
  • We want to support broad use by Red Hat that involves developers installing their own cluster software, own OSes...

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.

Added these use cases as examples of what this proposal is aiming to enable.

@tzumainn
tzumainn force-pushed the bare-metal-fulfillment branch 3 times, most recently from 532a326 to 9ddfde2 Compare September 15, 2025 21:45
@tzumainn

Copy link
Copy Markdown
Contributor Author

Thanks for the feedback! I've updated the document to address the comments (with one question where I didn't quite get what you were saying).

So, not clear that we want to replace ESI after all, which is what this enhancement request keeps saying.

I don't know that we actually keep saying this at all; perhaps the language can be softened, but most of the discussion around replacement is in the context of saying that we want to design bare metal fulfillment to allow easy replacement of the bare metal management implementation. Perhaps it would make sense to make that even more explicit?

@mhrivnak @tzumainn @larsks should we create a seperate enhancement request to fix ESI that we can expose to them?

I think it's worth having a discussion around this, but a formal request may be a little premature.

* As a tenant, I want to be able to view inventory details for my hosts.
* As a tenant, I want to be able to connect to the serial console of my hosts.
* As a tenant, I want to be able to perform basic power control (power on/power off/reset) of my hosts.
* As a tenant, I want to be able to attach hosts to existing networks.

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Maybe too implementation specific, but the user also probably wants to customize the L1 part of the connection, specifically whether to aggregate ports and apply the vlans on the port channel, or on the individual ports.

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.

The intent is to create a separate networking service that can be used for both bare metal and VMs; I think this requirement would fall there.

@tzumainn
tzumainn force-pushed the bare-metal-fulfillment branch from 9ddfde2 to 50c86f6 Compare October 1, 2025 04:15
* support for bare metal configuration during O-SAC cluster fulfillment

In this context, a “tenant” is a person with admin rights to the requested bare metal resources; at the MOC, this person would be
a ColdFront PI or manager.

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

My understanding is that this would also include members of the specific project, even if they're not PIs or Managers. In the same way that today all members of an ESI project can manage the bare metal resources within the project.

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.

Good point - updated to specify that the "tenant" is an organization which is represented by a ColdFront PI/manager.

* As a provider, I want to be able to define the available bare metal resource classes.
* As a provider, I want to mark hosts as available for bare metal fulfillment.
* As a tenant, I want to be able to see available bare metal resource classes.
* As a tenant, I want to be able to select hosts for a bare metal cluster by resource class.

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

So a tenant would be requesting a host from a resource class and the fulfillment service would select one for the user? In other words, the user doesn't select a specific host? Will the fulfillment service take into account any characteristics, such as rack locality, etc?

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.

Yep - tenants would not specify specific hosts. After discussion with Danni and Lars, I've added the "filter" concept to the document; essentially, tenants can specify filters (such as a specific rack) that constrains host selection.

* As a tenant, I want to be able to connect to the serial console of my hosts.
* As a tenant, I want to be able to perform basic power control (power on/power off/reset) of my hosts.
* As a tenant, I want to be able to attach hosts to existing networks.
* As a tenant, I want to be able to modify the network connectivity of my hosts by attaching or detaching networks.

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

How is this different from the bullet point immediately above?

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.

It's not super different I guess! The first is intended to be "network configuration on creation" while the second is "update network configuration".

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Maybe rephrase them as such?

  • As a tenant, I want to be able to specify network attachments for a host when I first acquire it.
  • As a tenant, I want to be able to update the network attachments of a host that I have already acquired.

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.

Makes sense! Updated

property: 25gb
primary: storage-network

If a tenant wishes to change the number of hosts or network configuration of their HostPool, they can simply update the HostPool.

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Are certain parameters, such as resourceClass immutable once a HostPool has been created? Or would O-SAC in such a situation release nodes and acquire nodes of the appropriate class.

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.

If a tenant updates their HostPool to remove one resource class and add another, O-SAC would do what you say and release nodes of the first resource class while acquiring nodes of the second.


## Open Questions [optional]

* Do we have consensus that network configuration can only be performed on a HostPool, and not on an individual Host?

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

I think it's a good decision to have network configuration only applicable at the entire HostPool level.

  • It matches the interface and API described above where operations are performed on HostPool. Eg. If you reduce the number of Hosts in a HostPool whose Hosts have been manually applied networking, which one do you release?
  • It forces all hosts in a HostPool to have the same configuration, and more importantly trains users to work at the HostPool/Fleet/Herd/etc level, applying consistent policy and networking.

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.

Makes sense! That seems to be the overwhelming consensus, so I've removed this bullet point.

#### Host Pool Reduction

1. The tenant uses the Fulfillment CLI to decrease the number of requested hosts specified in a HostPool.
2. The O-SAC solution fulfills the request by removing the requested hosts from the HostPool.

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

How does it choose which one to remove?

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.

I've added an example in the HostPool section below, and mentioned that the HostPool filters can include the idea of excluding specific nodes.

@tzumainn
tzumainn force-pushed the bare-metal-fulfillment branch from 1e93ffd to a2c392d Compare October 2, 2025 20:12
@tzumainn

tzumainn commented Oct 2, 2025

Copy link
Copy Markdown
Contributor Author

@knikolla thanks for your comments! I think I've addressed them all; the bulk are answered by adding the idea of allowing host filtering ("hosts in rack X", "not host named Y"). The filtering concept is sprinkled throughout the document at the appropriate places, with examples given in the HostPool specification section.

@adriengentil adriengentil 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.

few questions/nits, looks good overall!

Comment thread enhancements/bare-metal-fulfillment/README.md Outdated
numberOfHosts: 1
filters:
- rack: R2
exclude: HostX

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.

what about several nodes being removed? does exclude takes a list? Does this transient information stays in the API until the user removes it?

An idea from hypershift: they allow to annotate the nodes that will be cleanup first when the nodepool is down-scaled. Maybe we can implement something similar by adding a tag on the hosts? That would be cleaner to me as the information about the exclusion goes away with the host and doesn't stay within the HostPool.

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.

yep, exclude would take a list! I kinda like having the list associated with the hostpool, because it prevents O-SAC from simply trying to put the same host back into the hostpool

@adriengentil adriengentil Oct 3, 2025 •

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.

oh good point! I think it should be mentioned.

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.

fair - added some text!

Comment thread enhancements/bare-metal-fulfillment/README.md Outdated
Comment thread enhancements/bare-metal-fulfillment/README.md Outdated
Comment thread enhancements/bare-metal-fulfillment/README.md Outdated
Comment thread enhancements/bare-metal-fulfillment/README.md
Comment thread enhancements/bare-metal-fulfillment/README.md
Comment thread enhancements/bare-metal-fulfillment/README.md
Comment thread enhancements/bare-metal-fulfillment/README.md Outdated
Comment thread enhancements/bare-metal-fulfillment/README.md Outdated
@tzumainn
tzumainn force-pushed the bare-metal-fulfillment branch from 59b4e18 to ea43c9c Compare October 3, 2025 17:31
@tzumainn

tzumainn commented Oct 3, 2025

Copy link
Copy Markdown
Contributor Author

@adriengentil thanks for the review! I've answered your questions and made changes based on your feedback; let me know if there's anything I missed!

@tzumainn
tzumainn force-pushed the bare-metal-fulfillment branch from ea43c9c to 3a13ca2 Compare October 3, 2025 17:38
Comment thread enhancements/bare-metal-fulfillment/README.md
Comment thread enhancements/bare-metal-fulfillment/README.md Outdated
Comment thread enhancements/bare-metal-fulfillment/README.md Outdated
Comment thread enhancements/bare-metal-fulfillment/README.md
Comment thread enhancements/bare-metal-fulfillment/README.md Outdated
Comment thread enhancements/bare-metal-fulfillment/README.md
Comment thread enhancements/bare-metal-fulfillment/README.md Outdated
- primary: network1
- primary: network2
vlans:
- network3

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

This is mis-indented. I think there are some tabs-vs-spaces issues happening in this document; you should detab it.

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.

Whoops - I think I've fixed the issues.


## Open Questions [optional]

* Can we remove network attachment by MAC address?

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Should we remove this?

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.

Let me change remove to manage; it's something that was specifically mentioned before, so I think mentioning it at the very least makes sense.

## Open Questions [optional]

* Can we remove network attachment by MAC address?

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

What about attaching the same network to multiple interfaces? Supported? Not supported?

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.

Added as a question. My gut is yes (since we do that at the MOC already); implementation-wise, I'd imagine that we can count requested network attachments against the current network state.

@tzumainn
tzumainn force-pushed the bare-metal-fulfillment branch from d0fde0f to 22a04dd Compare October 7, 2025 17:07
@tzumainn

tzumainn commented Oct 7, 2025

Copy link
Copy Markdown
Contributor Author

@larsks I've addressed your comments (changes in some places, responses in others). Let me know what you think!

Comment on lines +177 to +178
hostSelectors:
- rack: R2

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

We probably want to support standard Kubernetes matchLabel/matchExpression syntax in these selectors. Maybe something like this:

Suggested change
hostSelectors:
- rack: R2
hostSelectors:
matchLabels:
row: R2
matchExpressions:
- op: NotIn
key: cabinet
values: ["C2"]

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.

makes sense! updated (and added text before the example)

Comment on lines +203 to +206
hostSelectors:
- rack: R2
exclude:
- HostX

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Per my earlier comment:

Suggested change
hostSelectors:
- rack: R2
exclude:
- HostX
hostSelectors:
matchLabels:
row: R2
matchExpressions:
- op: NotIn
key: nodeName
values: ["HostX"]

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.

updated as well!

@tzumainn

Copy link
Copy Markdown
Contributor Author

@mhrivnak thanks for the review! I've updated the proposal to address most of your comments, and left questions/comments on a few.

@tzumainn
tzumainn force-pushed the bare-metal-fulfillment branch from de1cba6 to 65988fc Compare October 13, 2025 14:40
Comment thread enhancements/bare-metal-fulfillment/README.md Outdated
Comment thread enhancements/bare-metal-fulfillment/README.md Outdated
@tzumainn
tzumainn force-pushed the bare-metal-fulfillment branch from 26e64c6 to 2838d4d Compare October 13, 2025 18:11
@tzumainn

Copy link
Copy Markdown
Contributor Author

@mhrivnak The latest commit adds text expanding details regarding the workflow from the fulfillment CLI to the fulfillment service to the O-SAC operator, with limited examples appearing in the API section. I used the VM proposal as a baseline; there isn't a full API specification, but I feel like there's enough to make the distinction between what the tenant requests, and what CRs are ultimately created. Let me know what you think!

@mhrivnak mhrivnak left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

As long as we're ok with some of the network parts of the API changing when we have a more complete set of networking capabilities, LGTM.

@tzumainn

Copy link
Copy Markdown
Contributor Author

Thanks all for the comments!

@tzumainn
tzumainn merged commit b288422 into osac-project:main Nov 24, 2025
1 check passed
ElayAharoni added a commit to ElayAharoni/enhancement-proposals that referenced this pull request Jun 29, 2026
- Resolve AdminNetworksPage topology view wording contradiction (issue osac-project#3)
- Specify IPv4/IPv6 CIDRs explicitly in FR-6 (issue osac-project#4)
- Pick side drawer pattern for subnet detail display in FR-12 (issue osac-project#5)
- Add Priority field to SecurityGroup rule specification in FR-18 (issue osac-project#6)
- Standardize PublicIP action terminology to 'Release' in FR-28 (issue osac-project#7)
- Document multi-NIC same-VN constraint rationale in FR-34 (issue osac-project#8)
- Align wizard empty-state flow with inline overlay pattern in FR-38 (issue osac-project#9)
- Define Retry action API contract in FR-42 (issue osac-project#10)
- Clarify Subnet endpoints are create/delete only in FR-45 (issue osac-project#11)
- Remove redundant NFR-9 (issue osac-project#12)
- Update Open Question 8.2 wording to match Non-Goals

Assisted-by: Claude Code <noreply@anthropic.com>
Signed-off-by: Elay Aharoni <elayaha@gmail.com>
masayag added a commit to masayag/enhancement-proposals that referenced this pull request Jul 28, 2026
… metering APIs

Replace ambiguous "alongside existing metering data" with explicit
"accessible through the same metering query APIs as existing VMaaS/CaaS
meters" to clarify the AC means API availability, not response co-location.

Assisted-by: Claude Code <noreply@anthropic.com>
Co-Authored-By: Moti Asayag <masayag@redhat.com>
Co-Authored-By: Claude <noreply@anthropic.com>
Signed-off-by: Moti Asayag <masayag@redhat.com>
empovit pushed a commit to empovit/osac-enhancement-proposals that referenced this pull request Aug 2, 2026
… metering APIs

Replace ambiguous "alongside existing metering data" with explicit
"accessible through the same metering query APIs as existing VMaaS/CaaS
meters" to clarify the AC means API availability, not response co-location.

Assisted-by: Claude Code <noreply@anthropic.com>
Co-Authored-By: Moti Asayag <masayag@redhat.com>
Co-Authored-By: Claude <noreply@anthropic.com>
Signed-off-by: Moti Asayag <masayag@redhat.com>
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.

9 participants