Исправление синтаксической ошибки в molecule_executor.py и обновление k8s preset'ов

- Исправлена незакрытая скобка в _build_test_command (строка 745)
- Добавлена поддержка k8s preset'ов: выполнение create_k8s_cluster.py перед create.yml
- Обновлены образы в k8s preset'ах: заменен недоступный ghcr.io/ansible-community/molecule-ubuntu-systemd:jammy на inecs/ansible-lab:ubuntu22-latest
- Обновлены preset'ы в базе данных через SQL
- Обновлены файлы: k8s-single.yml, k8s-multi.yml, k8s-istio-full.yml
This commit is contained in:
Сергей Антропов
2026-02-16 00:31:09 +03:00
parent 1fbf9185a2
commit d4b0d6f848
26 changed files with 1913 additions and 646 deletions

View File

@@ -115,10 +115,7 @@
<i class="fas fa-edit"></i>
</a>
<button
hx-delete="/api/v1/presets/{{ preset.name }}?category={{ preset.category or 'main' }}"
hx-confirm="Удалить preset '{{ preset.name }}'?"
hx-target="closest tr"
hx-swap="outerHTML"
onclick="deletePreset('{{ preset.name }}', '{{ preset.category or 'main' }}', this)"
class="btn btn-outline-danger"
title="Удалить"
>
@@ -225,3 +222,95 @@
{% endif %}
</div>
{% endblock %}
{% block scripts %}
<script>
async function deletePreset(presetName, category, button) {
// Показываем модальное окно подтверждения
const confirmed = await showConfirmModal(
`Вы уверены, что хотите удалить preset '${presetName}'?`,
'Подтверждение удаления'
);
if (!confirmed) {
return;
}
// Отключаем кнопку во время запроса
button.disabled = true;
const originalHTML = button.innerHTML;
button.innerHTML = '<i class="fas fa-spinner fa-spin"></i>';
try {
const response = await fetch(`/api/v1/presets/${presetName}?category=${category}`, {
method: 'DELETE',
credentials: 'include',
headers: {
'Accept': 'application/json'
}
});
if (response.ok) {
const data = await response.json();
if (data.success) {
// Показываем модальное окно с успешным сообщением
if (window.showMessageModal) {
window.showMessageModal(
data.message || `Preset '${presetName}' успешно удален`,
'success',
'Успешно',
function() {
// После закрытия модального окна удаляем строку из таблицы
const row = button.closest('tr');
if (row) {
row.remove();
// Обновляем счетчик, если нужно
const totalSpan = document.querySelector('.text-muted.small strong');
if (totalSpan) {
const currentTotal = parseInt(totalSpan.textContent) || 0;
totalSpan.textContent = Math.max(0, currentTotal - 1);
}
}
}
);
} else {
// Если функция недоступна, просто удаляем строку
const row = button.closest('tr');
if (row) {
row.remove();
}
}
}
} else {
// Ошибка - показываем в модальном окне
try {
const errorData = await response.json();
const errorMessage = errorData.detail || errorData.message || 'Ошибка при удалении preset';
if (window.showMessageModal) {
window.showMessageModal(errorMessage, 'error');
} else {
alert(errorMessage);
}
} catch (e) {
if (window.showMessageModal) {
window.showMessageModal('Ошибка при удалении preset', 'error');
} else {
alert('Ошибка при удалении preset');
}
}
}
} catch (error) {
console.error('Ошибка при удалении preset:', error);
if (window.showMessageModal) {
window.showMessageModal('Ошибка при удалении preset', 'error');
} else {
alert('Ошибка при удалении preset');
}
} finally {
// Восстанавливаем кнопку
button.disabled = false;
button.innerHTML = originalHTML;
}
}
</script>
{% endblock %}