Fix rebuild generation reconciliation (Refs #155)
This commit is contained in:
@@ -0,0 +1,26 @@
|
||||
import { json } from '@sveltejs/kit';
|
||||
import { reconcileCompletedRebuild } from '$lib/server/provisioning/rebuild-receipt.js';
|
||||
import { reconcileNativeProvisioningReceipt } from '$lib/server/provisioning/native.js';
|
||||
import { db } from '$lib/server/db/index.js';
|
||||
import { recordProgress } from '$lib/server/provisioning/progress.js';
|
||||
|
||||
export function POST({ params }: { params: { id: string } }) {
|
||||
try {
|
||||
const instance = db().transaction(() => {
|
||||
const instance = reconcileCompletedRebuild(params.id, true);
|
||||
reconcileNativeProvisioningReceipt(params.id);
|
||||
recordProgress(params.id, {
|
||||
blocker: null,
|
||||
checks: [],
|
||||
event: {
|
||||
kind: 'generation-recovery',
|
||||
message: `Replacement generation ${instance.generation} reconciled with fresh host inventory. Resume health verification or request a new lifecycle operation.`
|
||||
}
|
||||
});
|
||||
return instance;
|
||||
})();
|
||||
return json({ ok: true, generation: instance.generation });
|
||||
} catch (error) {
|
||||
return json({ error: (error as Error).message }, { status: 409 });
|
||||
}
|
||||
}
|
||||
@@ -324,6 +324,27 @@
|
||||
)}.
|
||||
</p>
|
||||
</div>{/if}
|
||||
{#if detail.generationRecovery}<div class="warnings">
|
||||
<h3>Replacement generation recovery</h3>
|
||||
<p>
|
||||
Controller generation {detail.generationRecovery.expectedGeneration};
|
||||
completed rebuild generation {detail.generationRecovery
|
||||
.replacementGeneration}; host generation {detail.generationRecovery
|
||||
.observedGeneration ?? 'unknown'}.
|
||||
</p>
|
||||
{#if detail.generationRecovery.reason}<p>
|
||||
{detail.generationRecovery.reason}
|
||||
</p>{/if}
|
||||
{#if writable}<Button
|
||||
disabled={!!view.busy || !detail.generationRecovery.available}
|
||||
loading={view.busy === 'reconcile-generation'}
|
||||
onclick={() =>
|
||||
controller.act(
|
||||
'reconcile-generation',
|
||||
'Replacement generation reconciled. Fresh health verification is required; cancelled operations remain cancelled.'
|
||||
)}>Reconcile replacement generation</Button
|
||||
>{/if}
|
||||
</div>{/if}
|
||||
{#if writable && (detail.canResumeVerification || detail.canResumeCleanup || detail.canResumeRebuild || detail.canRetryWithRebuild || detail.canCancel || detail.canCancelCreation || canOverride)}
|
||||
<div class="recovery-actions">
|
||||
{#if canOverride}<div>
|
||||
|
||||
Reference in New Issue
Block a user