Skip to content

Conversation

@willtsai
Copy link
Contributor

@willtsai willtsai commented Jun 4, 2025

Add feature spec for compute extensibility to define requirements and user experience

Signed-off-by: Will Tsai <28876888+willtsai@users.noreply.github.com>
@willtsai willtsai requested review from a team as code owners June 4, 2025 05:27
willtsai added 3 commits June 3, 2025 22:28
Signed-off-by: Will Tsai <28876888+willtsai@users.noreply.github.com>
Signed-off-by: Will Tsai <28876888+willtsai@users.noreply.github.com>
Signed-off-by: Will Tsai <28876888+willtsai@users.noreply.github.com>
@willtsai willtsai marked this pull request as draft June 6, 2025 18:17
willtsai added 2 commits June 6, 2025 17:01
… 2.5 Pro assisted in VSCode)

Signed-off-by: Will Tsai <28876888+willtsai@users.noreply.github.com>
Signed-off-by: Will Tsai <28876888+willtsai@users.noreply.github.com>
@willtsai willtsai marked this pull request as ready for review June 10, 2025 18:09
Signed-off-by: Will Tsai <28876888+willtsai@users.noreply.github.com>
Signed-off-by: Will Tsai <28876888+willtsai@users.noreply.github.com>
Signed-off-by: Will Tsai <28876888+willtsai@users.noreply.github.com>
…actions

Signed-off-by: Will Tsai <28876888+willtsai@users.noreply.github.com>
Signed-off-by: Will Tsai <28876888+willtsai@users.noreply.github.com>
@willtsai
Copy link
Contributor Author

Should Radius.Core/environments and Radius.Core/applications actually be Radius.Config/environments and Radius.Config/applications to align with Radius.Config/recipePacks? And then have a requirement that everything in the Radius.Config/* namespace are not resource types that can be provisioned by Recipes, etc.

Signed-off-by: Will Tsai <28876888+willtsai@users.noreply.github.com>
Signed-off-by: Will <28876888+willtsai@users.noreply.github.com>
Signed-off-by: Will Tsai <28876888+willtsai@users.noreply.github.com>
Signed-off-by: Will Tsai <28876888+willtsai@users.noreply.github.com>
Signed-off-by: Will Tsai <28876888+willtsai@users.noreply.github.com>
@zachcasper
Copy link
Contributor

Should Radius.Core/environments and Radius.Core/applications actually be Radius.Config/environments and Radius.Config/applications to align with Radius.Config/recipePacks? And then have a requirement that everything in the Radius.Config/* namespace are not resource types that can be provisioned by Recipes, etc.

Interesting thought. I don't have strong opinions here. I lean towards keeping the set of namespaces as simple as possible—I see few benefits for breaking things down into separate namespaces. Thoughts on how to decide:

  • Start with the number of namespaces at an absolute minimum --> Say let's start with one
  • We should have a separate namespace for application resources (containers, secrets, volumes, databases, etc.) and for system resources (environments, recipe packs, terraform settings, etc.) --> So we now have two (Radius.Config and Radius.Compute)
  • We should consider how RBAC would work. Platform engineers would setup role definitions with actions (CRUDL) and scope (resource type namespaces) --> RBAC scope could be a namespace or a resource type, so this has no impact
  • Add any practicalities to make the system easier to understand --> We already agreed on Radius.Data and Radius.Security

So, I would say we would have:

  • Radius.Config/environments
  • Radius.Config/recipePacks
  • Radius.Config/terraformSettings (coming soon)
  • Radius.Compute/applications (for simplicity)
  • Radius.Compute/containers
  • ...

@willtsai
Copy link
Contributor Author

Should Radius.Core/environments and Radius.Core/applications actually be Radius.Config/environments and Radius.Config/applications to align with Radius.Config/recipePacks? And then have a requirement that everything in the Radius.Config/* namespace are not resource types that can be provisioned by Recipes, etc.

Interesting thought. I don't have strong opinions here. I lean towards keeping the set of namespaces as simple as possible—I see few benefits for breaking things down into separate namespaces. Thoughts on how to decide:

  • Start with the number of namespaces at an absolute minimum --> Say let's start with one
  • We should have a separate namespace for application resources (containers, secrets, volumes, databases, etc.) and for system resources (environments, recipe packs, terraform settings, etc.) --> So we now have two (Radius.Config and Radius.Compute)
  • We should consider how RBAC would work. Platform engineers would setup role definitions with actions (CRUDL) and scope (resource type namespaces) --> RBAC scope could be a namespace or a resource type, so this has no impact
  • Add any practicalities to make the system easier to understand --> We already agreed on Radius.Data and Radius.Security

So, I would say we would have:

  • Radius.Config/environments
  • Radius.Config/recipePacks
  • Radius.Config/terraformSettings (coming soon)
  • Radius.Compute/applications (for simplicity)
  • Radius.Compute/containers
  • ...

After discussion, we ended up with this. Everything that is a Radius construct gets named into Radius.Core/*

  • Radius.Core/environments (Radius construct)
  • Radius.Core/recipePacks (Radius construct)
  • Radius.Core/applications (Radius construct)
  • Radius.Config/terraformSettings (coming soon)
  • Radius.Compute/containers
  • ...

Signed-off-by: Will Tsai <28876888+willtsai@users.noreply.github.com>

#### Data model approach (PREFERRED)
Recipe packs are modeled as Radius resources, which means they are objects that get saved into the Radius datastore and thus would show up in the app graph data, etc. This approach establishes a new pattern that treats Recipe packs as core Radius resource objects while the Recipes encapsulated in the packs themselves are not. This also means that Recipe packs would be deployed at the Radius resource group level and referenced in each environment within the resource group vs. being deployed within each environment.

Copy link
Contributor

@nithyatsu nithyatsu Aug 27, 2025

Choose a reason for hiding this comment

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

It also helps reduce bloat on the environment resource. We have many other properties that environment supports as well, and it is a good idea to refactor some of the information out so that we dont eventually have to create large environment objects close to serialization limits.


### Feature 1: RRT Implementation of Core Application Model Types
<!-- One or two sentence summary -->
Re-implement existing core types (`Applications.Core/environments`, `Applications.Core/applications`, `Applications.Core/containers`, `Applications.Core/gateways`, `Applications.Core/secrets`, `Applications.Core/volumes`) as Radius Resource Types (RRT) with new, versioned resource type names (i.e. `Radius.Core/environments`, `Radius.Core/applications`, `Radius.Compute/containers`, `Radius.Compute/gateways`, `Radius.Security/secrets`, `Radius.Storage/volumes`). These RRTs will form the basis of the extensible application model. These new core types must support Connections and may be modified by platform engineers to allow for the configuration of platform-specific capabilities (e.g. confidential containers) in the resource types themselves.
Copy link
Member

Choose a reason for hiding this comment

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

If we implement Applications.Core/environments and Applications.Core/applications as RRTs, would customers be able to modify them and create recipes for them? How would we handle this in the CLI and API? Environments and Applications are primary concepts in the CLI, graph, and dashboard, and have expectations about behavior and validation. What would happen if someone registered a new version of those types?

I think there could be value in allowing customers to add on or extend the Environment and Application to track data that is important to them, but that seems out of scope for this feature spec. What do you think?

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Apologies, I will update this. We don't want to implement env and app resources as RRTs for now as these are Radius-specific constructs that don't make sense to be extensible (for now at least).

Copy link
Contributor Author

Choose a reason for hiding this comment

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

updated, please take another look @brooke-hamilton

lakshmimsft
lakshmimsft previously approved these changes Aug 28, 2025
@zachcasper
Copy link
Contributor

Can you move this feature spec into the features directory?

…ill be managed by container recipe

Signed-off-by: Will Tsai <28876888+willtsai@users.noreply.github.com>
…ill be managed by container recipe

Signed-off-by: Will Tsai <28876888+willtsai@users.noreply.github.com>
Signed-off-by: Will Tsai <28876888+willtsai@users.noreply.github.com>
@willtsai
Copy link
Contributor Author

willtsai commented Aug 29, 2025

Can you move this feature spec into the features directory?

@zachcasper Done.

Copy link
Member

@brooke-hamilton brooke-hamilton left a comment

Choose a reason for hiding this comment

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

🚢 🚀 🎉

@willtsai willtsai merged commit 886498d into radius-project:main Aug 29, 2025
2 checks passed
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.