feat(core): modifierDesiredEqualsCurrent + RunInstanceOperationUniversalByIdempotent + RunOperationByCodeIdempotent

This commit is contained in:
Repinoid
2026-09-22 21:13:56 +03:00
parent 17a803836a
commit 25e988886d
3 changed files with 105 additions and 0 deletions
+20
View File
@@ -139,6 +139,26 @@ func RunOperationByCodeWithTimeout(ctx context.Context, client *core.UniversalCl
return client.RunInstanceOperationUniversalByCode(ctxWithTimeout, instanceID, operation, params)
}
// RunOperationByCodeIdempotent — то же, что RunOperationByCodeWithTimeout, но
// с idempotency pre-check (desired==current → skip run). Для модификаторов
// с idempotency: check_before_run.
func RunOperationByCodeIdempotent(ctx context.Context, client *core.UniversalClient, instanceID string, operation string, params map[string]string, operationTimeout string) error {
if strings.TrimSpace(instanceID) == "" {
return fmt.Errorf("missing instance id for operation")
}
if client == nil {
return fmt.Errorf("missing client for operation")
}
unlock := client.LockInstance(instanceID)
defer unlock()
ctxWithTimeout, err := core.WithOperationTimeout(ctx, operationTimeout)
if err != nil {
return err
}
return client.RunInstanceOperationUniversalByIdempotent(ctxWithTimeout, instanceID, operation, params)
}
func adoptExistingInstanceOnCreate(ctx context.Context, client *core.UniversalClient, serviceID int, displayName string, resumeIfExists bool, params map[int]string, existing *core.InstanceStateResponse) (string, error) {
// Проверка: операция уже выполняется
if existing.OperationIsInProgress || existing.OperationIsPending {