- Map precheck/install/configure/healthcheck/register stage events to
workbench step states instead of guess-based progression, and prefer
callback-enabled AWX templates so stage events actually flow
- Replay task events silently on workbench restore to rebuild step
states without duplicating logs; only reset seen events for new tasks
- Unify instance name generation with a random 6-char suffix (replacing
the hardcoded -billing-02) and cap the business-line segment so the
63-char DNS label limit never truncates the suffix
PR #128 looks up the root credential with account_host = 'localhost',
which never matches under the single root@% account model. Widen the
lookup to account_host IN ('%', 'localhost'), consistent with the
compatibility strategy in deploymentCredentialVars.
- Remove mysql_admin_password from CreateMySQLDeliveryPayload;
the delivery form submits a single root password only
- Wire the task's credential_available boolean into the Catalog
workbench: sync on create/poll/restore, and hide the one-time
credential entry once it has been claimed
- Preview mock credential account_host changed from localhost to %
- CreateTask now accepts only mysql_root_password; drop
mysql_admin_password and the paired root/admin validation,
keeping the >=16-char length and alphanumeric-only checks
- deploymentCredentialVars extracts mysql_root_password only,
remaining compatible with legacy root@localhost records
- Both delivery playbooks drop xinfra_admin provisioning and
the mysql_admin_password assertion, creating 'root'@'%'
as the remote admin account instead
Replace the separate delivery records tab with a per-service dropdown column in the ledger table that opens the existing detail dialog with one-time credential claim. Sync now refreshes ledger, container services and delivery records together; errors surface via message toast. components.d.ts regenerated (dropdown components in, tabs out).
- Persist workbench state (form, view, task progress) per user/service in sessionStorage; restore on reload re-fetches the task and resumes polling, never persisting the root password itself
- Gate the result tab behind resultReady so an unfinished task cannot show a stale result view
- Add random instance name generation and an async precheck that detects name conflicts against active tasks and delivered instances, mirroring the backend occupancy rules
- Guarantee all four character classes in generated root passwords
- Fetch credentials via the one-time reveal endpoint instead of caching plaintext passwords in localStorage; sanitize legacy history entries and clear the form password once the task is created
Wrap task creation in a transaction that locks the business line row (SELECT ... FOR UPDATE) so concurrent requests cannot both pass the availability check. A name is considered occupied by in-flight or retained tasks (pending through registering, finished, register_failed, canceling, rollback_pending/rolling_back/rollback_failed) and by active deployment results; it becomes reusable only after rollback or explicit cleanup releases it.
Management.vue gains a second tab listing MySQL delivery tasks from the backend (search, status filter, detail dialog, one-time credential reveal with copy/download). components.d.ts regenerated for the new Element Plus components.
Also add narrow-viewport (<=760px) style tweaks to AppHeader/AppMain/DefaultLayout; these are partial small-screen optimizations, not a full mobile adaptation.
Rebuild the MySQL standardized delivery form in Catalog.vue: sectioned layout (scope/resources/db config/advanced params), client-generated root password with regenerate/copy, storage slider, install/data path hints, inline field validation, delivery history and task polling.
Align CreateMySQLDeliveryPayload with the backend MySQLDeliveryInput contract (cpu_milli/memory_mi/storage_gi required, legacy fields optional, drop nonexistent param_template) and send mysql_root_password/mysql_admin_password as a pair so the credential shown to the user is the one actually deployed.