feat(ops): Deploy Workshop from CSV — inline toggle panel#3150
feat(ops): Deploy Workshop from CSV — inline toggle panel#3150
Conversation
…mode Adds a new "Deploy Workshop from CSV" switch in the Ops Workshop Control page, styled identically to the existing "Multi-namespace mode" bar. When toggled on, an inline section expands below it with: - A hidden file input triggered by an "Upload CSV" button - Client-side CSV parsing (quoted fields, flexible column names) - A preview table showing workshop title, catalog item, CI namespace, seat count, workshop-UI flag, stop/destroy times, and per-row status - An optional namespace override field (defaults to current namespace) - A "Deploy All" button that sequentially creates Workshop + WorkshopProvision objects (or ResourceClaim when workshop UI is off) via direct Kubernetes API calls using apiFetch No new modal, no new top-level navigation, no existing card changes. Update Password functionality is not included (out of scope). Made-with: Cursor
Made-with: Cursor
|
How will you specify the parameters that the catalog item might require? |
|
wait. I am updating logic with updated CSV from labgator. give me some more time |
…rmat
- Parse Summit-style CSV: Lab Code, Room, Session Time, Deploy On (UTC),
Order URL, Users, Deploy Count, Mode, Cloud, Region, Instances
- Extract CI name and namespace automatically from Order URL path
(/catalog/{namespace}/order/{ci_name})
- Preview table now shows: Lab Code, Room, Session, Catalog Item,
CI Namespace, Users, Deploy #, Mode, Cloud, Deploy On (UTC), Status
- Rows without an Order URL are shown dimmed with a warning tooltip
and skipped during deploy
- Updated design screenshot uses real Red Hat Summit 2026 data
Made-with: Cursor
…d / Multi Asset Per Attendee: 1 instance per user (Users/Inst=1, Instances=deploy_count, Total Seats=deploy_count) Shared: 1 instance for all (Users/Inst=csv_users, Instances=1, Total Seats=csv_users) Multi Asset (Nx): N instances x users each (Total=users x deploy_count) Adds Total Seats column (bold green) and mode tooltips explaining the instance math. WorkshopProvision.spec.count = deploy_count in all cases. Made-with: Cursor
Per Attendee: deploy_count = total users (1 instance × 1 user each) Shared: N instances × X users, deploy_count = N, total = N × X Multi Asset: rows with same base Lab Code (LB1846-1,-2,-3) are grouped and deployed as ONE MultiWorkshop via createMultiWorkshop() API. On success the status cell shows a link to /admin/multiworkshops. Changes: - Import createMultiWorkshop from @app/api - CsvScheduleRow gains baseLabCode, isMultiAsset, isPerAttendee, isShared, totalSeats (pre-computed) - deployStandardRow() handles Per Attendee / Shared - deployMultiAssetGroup() groups rows and calls createMultiWorkshop() - handleDeployAll() separates standard vs multi-asset, processes groups - Table: Users/Inst, Instances, Total Seats columns use pre-computed values - Mode tooltip shows correct instance math per mode - Updated design screenshot using real Summit 2026 data Made-with: Cursor
|
@aleixhub @bbethell-1 @rhjcd Please review this first draft. |
This is great DJ and just what myself and Josh were planning for phase 2 we need all rhdp flow logic added in bit by bit - this is a good start; but need to ensure lots of rhdp flow is added.
We need to be super careful though - lets try and modulize it a bit - potentially even split into 3 sub sections which we can each work on? - therefore we can test things and not step on each others toes Styling should also be consistant |
|
Lets revisist stuff this week - @d-jana please find a time to meet to work further with myself and the team to dicuss the next stages and we need to go slow too |
|
Still now management is not confident on implementing this in the UI, so as of now closing this. |
Overview
Adds a "Deploy Workshop from CSV" mode to the Admin → Ops Workshop Control page, following the exact same visual pattern as the existing "Multi-namespace mode" toggle — no structural UI changes, no new navigation, no modal.
Design
User Flow
.csv)./catalog/{namespace}/order/{ci_name}).target_namespaceCSV column if present). A global Default Namespace field serves as fallback.Mode Semantics
Workshop+WorkshopProvisionper rowUsersDeploy Count(N)Workshop+WorkshopProvisionper rowUsersDeploy CountMultiWorkshop— rows sharing the same base Lab Code (e.g.LB1846-1,-2,-3) are grouped into oneMultiWorkshopwith each row as an assetAfter a Multi Asset group deploys, the status cell shows "✓ View MultiWorkshops →" linking to
/admin/multiworkshops.CSV Format
Designed to match the existing Red Hat Summit deploy handoff spreadsheet:
Lab CodeLB1088) — base code used to group Multi Asset rows (LB1846-1,-2,-3→LB1846)RoomSession Time10:30–12:00— displayed in tableDeploy On (UTC)YYYY-MM-DD HH:MMOrder URL/catalog/{ns}/order/{ci_name}UsersDeploy CountWorkshopProvision.spec.count— number of instances to provisionModePer Attendee,Shared,Multi Asset Workshop,Multi Asset Workshop (Nx)CloudCNV,AWS,Tenant Namespace— displayed onlyRegiontarget_namespaceExample (Summit 2026 format)
Files Changed
catalog/ui/src/app/Admin/Ops.tsxdeployStandardRow(),deployMultiAssetGroup()usingcreateMultiWorkshop(),handleDeployAll()with group logic, per-row namespace inputs, status linkscatalog/ui/src/app/Admin/ops.cssops-deploy-csv-bar--active, panel, table, and no-url row stylesdocs/ops-screenshots/deploy-from-csv-design.png