Skip to content

Commit

Permalink
✨ Add target platforms to application archetypes (#206)
Browse files Browse the repository at this point in the history
* ✨ Add target platforms to application archetypes

Resolves: #186

Signed-off-by: Scott J Dickerson <[email protected]>
  • Loading branch information
sjd78 authored Aug 30, 2024
1 parent 042efc0 commit ec7a493
Showing 1 changed file with 218 additions and 0 deletions.
218 changes: 218 additions & 0 deletions enhancements/archetype-target-platforms/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,218 @@
---
title: archetype-target-platforms
authors:
- "@sjd78"
reviewers:
- "@shawn-hurley"
- "@mansam"
- "@djzager"
- "@jortel"
- "@rromannissen"
- "@JustinXHale"
approvers:
- "@shawn-hurley"
- "@mansam"
- "@ibolton336"
- "@djzager"
- "@jortel"
- "@rromannissen"
creation-date: 2024-08-26
last-updated: 2024-08-26
status: provisional
see-also:
- "/enhancements/assessment-module/README.md"
replaces:
- "N/A"
superseded-by:
- "N/A"
---

# Add target platforms to application archetypes

## Release Signoff Checklist

- [ ] Enhancement is `implementable`
- [ ] Design details are appropriately documented from clear requirements
- [ ] Test plan is defined
- [ ] User-facing documentation is created

## Open Questions

N/A


## Summary

Application archetypes will be enhanced to be able to store groups of analysis
target labels together as a __target platform__. The __target platforms__ will only
exist on the archetype and are not intended to be first class entities.

Various tools that generate analysis tasks will be able to use the target platforms
from the application's archetype to inform what analysis target labels should be applied
without requiring a user to select them individually.

This enhancement only calls for adding CRUD functionality to the archetype edit screen
for target platforms as groupings of known analysis target labels.


## Motivation

Allowing a Migrator user to select specific migration target labels for analysis is not
useful at scale. At scale, for Konveyor to be useful, there needs to be a way for
Architect users to define a group of migration targets to be used together.

This will also allow the developer hub integration to present a bundle of analysis
target labels to a user, allowing a simplification of analysis configuration.


### Goals

- Allow an archetype to be configured with a set of target platforms that exist only
for that archetype.

- Allow multiple migration target labels to be collected together under an archetype's
target platform.


### Non-Goals

- Changes to the analysis wizard or to the task groups that setup an analysis task.

- Utilizing target platforms in the UI or HUB.


## Proposal

Full CRUD functionality for target platforms on archetypes will be available to Architect
users. Migrator users will be able to view configured target platforms.


### User Stories


#### Story 1

As an __architect__, I want to manage target platforms defined on an archetype.


#### Story 2

As an __architect__, I want to manage the migration target labels contained within an
archetype's target platform.


#### Story 3

As a __migrator__, I want to view an archetype's target platforms and what migration
targets are contained in each.


### Implementation Details/Notes/Constraints

Only definition of the target platforms on the archetype will be supported. Consideration
of target platforms on the wider system will not be considered.


#### HUB

- The archetype endpoint needs to be enhanced to record a set of target platforms
per archetype.

- Since the target platforms are simply attributes of an archetype, an explicit
`/targetplatform` endpoint is __not__ required.

- Using the existing `/targets` endpoint and entities does not provide enough
fine grained control. Specific versions of targets (e.g. OpenJDK, Version 21)
are to be selected and stored. This mirrors the current way an analysis is
started with individual labels and not the full target.

- Allowing editing of the target platforms via a PATCH request would help simplify
the CRUD functions on the UI and avoid potential collisions with archetype
changes that are not target platform related.

Potential partial structure on the archetype entity:
```json
{
"id": 45,
"name": "Archetype Sierra Delta",
"targetPlatforms": [
{
"name": "Kubernetes",
"labels": [
"konveyor.io/target=cloud-readiness",
"konveyor.io/target=openjdk21",
"konveyor.io/target=eap8"
]
},
{
"name": "Traditional Standalone",
"labels": [
"konveyor.io/target=openjdk21",
"konveyor.io/target=eap8"
]
}
]
}
```


#### UI

- The existing archetype table and edit modals will remain.

- An extra section on the edit modal will be added to support the target
platform functions. This section could work in a way similar to the "Set targets"
step of the analysis wizard. All of the targets in the system are displayed
and specific versions of the targets are what is actually selected.

- The archetype table could have a new column added to display a count of
target platforms defined.

- Since the target platforms are unique to each archetype, search filters looking
inside the target platforms (name, target, etc) would be more complex to add.

- The archetype details drawer can have a new tab added to display a summary of
the archetype's target platforms and what migration targets they contain.


### Security, Risks, and Mitigations

Authorization checks to limit the migration target functions available to the user
is based on user persona only.


## Design Details


### Test Plan

In general, the API and UI testing would be simple CRUD testing against an archetype's
details.

_Additional details pending._


### Upgrade / Downgrade Strategy

As this will be a new feature, the upgrade strategy will be handled with a combination
of sql migrations and new container images.

The downgrade will follow a similar approach, the database will need to be rolled back,
we will lose all target platform definitions.


## Implementation History

Major milestones in the life cycle of a proposal should be tracked in `Implementation
History`.


## Drawbacks

N/A


## Alternatives

Referring to "Target Platform" as a "Target Group" could be more generic and indicative
of how the configurations flow without relying on the extra semantics of "platform".

0 comments on commit ec7a493

Please sign in to comment.