feat: добавлена пометка типа операции (Build/Push) в истории сборок Dockerfile

- Добавлена колонка 'Тип' во все таблицы истории сборок
- Для push операций отображается registry вместо платформ
- Сохранение пользователя при создании push лога
- Исправлена ошибка с logger в push_docker_image endpoint
- Улучшено отображение истории сборок с визуальными индикаторами
This commit is contained in:
Сергей Антропов
2026-02-15 22:59:02 +03:00
parent 23e1a6037b
commit 1fbf9185a2
232 changed files with 38075 additions and 5 deletions

View File

@@ -0,0 +1,234 @@
{% extends "base.html" %}
{% block title %}{{ role.name }} - DevOpsLab{% endblock %}
{% block page_title %}{{ role.name }}{% endblock %}
{% block header_actions %}
<div class="d-flex gap-2">
<a href="/roles/{{ role.name }}/test" class="btn btn-success btn-sm">
<i class="fas fa-vial me-2"></i>
Тестировать
</a>
<a href="/roles/{{ role.name }}/edit" class="btn btn-primary btn-sm">
<i class="fas fa-edit me-2"></i>
Редактировать
</a>
<a href="/roles" class="btn btn-secondary btn-sm">
<i class="fas fa-arrow-left me-2"></i>
Назад
</a>
</div>
{% endblock %}
{% block content %}
{% if role.description %}
<div class="alert alert-info mb-3">
<i class="fas fa-info-circle me-2"></i>
{{ role.description }}
</div>
{% endif %}
<!-- Вкладки -->
<div class="card">
<div class="card-header">
<ul class="nav nav-tabs card-header-tabs" role="tablist">
<li class="nav-item" role="presentation">
<button
class="nav-link active"
id="overview-tab"
data-bs-toggle="tab"
data-bs-target="#overview"
type="button"
role="tab"
>
<i class="fas fa-info-circle me-2"></i>
Обзор
</button>
</li>
<li class="nav-item" role="presentation">
<button
class="nav-link"
id="tasks-tab"
data-bs-toggle="tab"
data-bs-target="#tasks"
type="button"
role="tab"
>
<i class="fas fa-tasks me-2"></i>
Задачи
</button>
</li>
<li class="nav-item" role="presentation">
<button
class="nav-link"
id="defaults-tab"
data-bs-toggle="tab"
data-bs-target="#defaults"
type="button"
role="tab"
>
<i class="fas fa-sliders-h me-2"></i>
Переменные
</button>
</li>
<li class="nav-item" role="presentation">
<button
class="nav-link"
id="readme-tab"
data-bs-toggle="tab"
data-bs-target="#readme"
type="button"
role="tab"
>
<i class="fas fa-book me-2"></i>
Документация
</button>
</li>
</ul>
</div>
<!-- Содержимое вкладок -->
<div class="card-body">
<div class="tab-content" id="role-tabs-content">
<!-- Вкладка: Обзор -->
<div class="tab-pane fade show active" id="overview" role="tabpanel">
<h5 class="mb-4">Информация о роли</h5>
<div class="row g-4 mb-4">
<div class="col-12 col-md-6">
<h6 class="fw-semibold mb-3">Структура</h6>
<ul class="list-unstyled">
{% if role.has_tasks %}
<li class="mb-2">
<i class="fas fa-check-circle text-success me-2"></i>
tasks/main.yml
</li>
{% else %}
<li class="mb-2 text-muted">
<i class="fas fa-times-circle me-2"></i>
tasks/main.yml
</li>
{% endif %}
{% if role.has_defaults %}
<li class="mb-2">
<i class="fas fa-check-circle text-success me-2"></i>
defaults/main.yml
</li>
{% else %}
<li class="mb-2 text-muted">
<i class="fas fa-times-circle me-2"></i>
defaults/main.yml
</li>
{% endif %}
{% if role.has_handlers %}
<li class="mb-2">
<i class="fas fa-check-circle text-success me-2"></i>
handlers/main.yml
</li>
{% else %}
<li class="mb-2 text-muted">
<i class="fas fa-times-circle me-2"></i>
handlers/main.yml
</li>
{% endif %}
{% if role.has_meta %}
<li class="mb-2">
<i class="fas fa-check-circle text-success me-2"></i>
meta/main.yml
</li>
{% else %}
<li class="mb-2 text-muted">
<i class="fas fa-times-circle me-2"></i>
meta/main.yml
</li>
{% endif %}
</ul>
</div>
<div class="col-12 col-md-6">
<h6 class="fw-semibold mb-3">Метаданные</h6>
{% if role.author %}
<p class="mb-2">
<strong>Автор:</strong> {{ role.author }}
</p>
{% endif %}
{% if role.platforms %}
<p class="mb-2"><strong>Платформы:</strong></p>
<ul class="list-unstyled">
{% for platform in role.platforms %}
<li class="mb-1">
<i class="fas fa-server me-2 text-muted"></i>
{{ platform.name }}
{% if platform.versions %}
<span class="text-muted">({{ platform.versions|join(", ") }})</span>
{% endif %}
</li>
{% endfor %}
</ul>
{% endif %}
</div>
</div>
<div class="mt-4">
<h6 class="fw-semibold mb-3">Быстрые действия</h6>
<div class="d-flex gap-2 flex-wrap">
<a href="/roles/{{ role.name }}/test" class="btn btn-success">
<i class="fas fa-vial me-2"></i>
Запустить тест
</a>
<a href="/roles/{{ role.name }}/deploy" class="btn btn-primary">
<i class="fas fa-rocket me-2"></i>
Деплой
</a>
<a href="/roles/{{ role.name }}/export" class="btn btn-outline-primary">
<i class="fas fa-upload me-2"></i>
Экспорт
</a>
</div>
</div>
</div>
<!-- Вкладка: Задачи -->
<div class="tab-pane fade" id="tasks" role="tabpanel">
<h5 class="mb-4">Задачи (tasks/main.yml)</h5>
{% if tasks_content %}
<pre class="bg-dark text-light p-3 rounded"><code>{{ tasks_content }}</code></pre>
{% else %}
<div class="alert alert-warning">
<i class="fas fa-exclamation-triangle me-2"></i>
Файл tasks/main.yml не найден
</div>
{% endif %}
</div>
<!-- Вкладка: Переменные -->
<div class="tab-pane fade" id="defaults" role="tabpanel">
<h5 class="mb-4">Переменные (defaults/main.yml)</h5>
{% if defaults_content %}
<pre class="bg-dark text-light p-3 rounded"><code>{{ defaults_content }}</code></pre>
{% else %}
<div class="alert alert-warning">
<i class="fas fa-exclamation-triangle me-2"></i>
Файл defaults/main.yml не найден
</div>
{% endif %}
</div>
<!-- Вкладка: Документация -->
<div class="tab-pane fade" id="readme" role="tabpanel">
<h5 class="mb-4">Документация (README.md)</h5>
{% if readme_content %}
<div class="border rounded p-3 bg-light">
<pre class="mb-0" style="white-space: pre-wrap;">{{ readme_content }}</pre>
</div>
{% else %}
<div class="alert alert-warning">
<i class="fas fa-exclamation-triangle me-2"></i>
Файл README.md не найден
</div>
{% endif %}
</div>
</div>
</div>
</div>
{% endblock %}