Мастер: «Далее» на шаге ключа сразу после установки + надёжная сверка справочника
После успешной установки ключа на шаге «Ключ и сертификаты» не появлялась кнопка «Далее»: шаг считался выполненным только по асинхронной сверке справочника ИШ (nsdCertsCheck), а она сразу после установки отваливалась по таймауту — root-воркер был занят перезапуском ИШ и повторной активацией профиля. Ключ при этом уже подключён и подписывает. - refreshCertStore: повторяет сверку до 5 раз (воркер освобождается — проходит), вместо одной попытки с таймаутом. - Шаг 8 в мастере выполнен, если справочник собран ИЛИ мастер ключа прошёл до конца (ИШ подтвердил подпись) — «Далее» появляется сразу, не дожидаясь сверки. Добавлен потокобезопасный keyWizardState.installed(). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Q7eREaYwUt1i4fNLZcGnjn
This commit is contained in:
@@ -365,10 +365,20 @@ func registerIgateAdmin(mux *http.ServeMux, rc *RuntimeConfig) {
|
||||
func refreshCertStore(rc *RuntimeConfig) {
|
||||
go func() {
|
||||
time.Sleep(20 * time.Second) // ИШ перезапускается после изменений
|
||||
ctx, cancel := context.WithTimeout(context.Background(), 3*time.Minute)
|
||||
defer cancel()
|
||||
if _, err := nsdCertsCheck(ctx, rc); err != nil {
|
||||
log.Printf("nsdcerts: перечитать справочник: %v", err)
|
||||
// root-воркер обрабатывает запросы по одному и сразу после установки ключа
|
||||
// (перезапуск ИШ, повторная активация профиля) бывает занят — одной попытки
|
||||
// может не хватить, она отваливается по таймауту. Повторяем, пока сверка не
|
||||
// пройдёт: без свежего справочника шаг «Ключ и сертификаты» остаётся
|
||||
// невыполненным и в мастере нет кнопки «Далее», хотя ключ уже подписывает.
|
||||
for attempt := 1; attempt <= 5; attempt++ {
|
||||
ctx, cancel := context.WithTimeout(context.Background(), 2*time.Minute)
|
||||
_, err := nsdCertsCheck(ctx, rc)
|
||||
cancel()
|
||||
if err == nil {
|
||||
return
|
||||
}
|
||||
log.Printf("nsdcerts: перечитать справочник (попытка %d/5): %v", attempt, err)
|
||||
time.Sleep(30 * time.Second)
|
||||
}
|
||||
}()
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user