Files
RoleForge/app/templates/base.xhtml
Sergey Antropoff 01d598eea5 - Админка: настройка pull-реестра (Hub / Harbor / Nexus) в БД, шифрование секретов;
обновлён /admin/config и API для os_registry.
- Molecule/раннер: env из конфигурации, ensure roleforge-os (ensure_roleforge_os.yml),
  os_registry_pull и доработки executors / runner / create.yml.
- /admin/os-images: выбор реестра, buildx (в т.ч. split amd64+arm64 + imagetools),
  опция --no-cache, стрим логов; domain.py: план команд build, ретраи push.
- UI: брендинг (app_name, app_tagline) из app_config через get_ui_branding_context;
  base.xhtml, role-create / role-view, core.js, pages-main, стили.
- Dockerfiles: требование Python ≥3.9 (assert), доработки alt9/astra/debian9/ubuntu20
  и др.; новые Dockerfile.arm64 для centos7/centos8.
- Конфиг: .env.example, config.py, pyproject.toml.
2026-05-06 07:52:29 +03:00

80 lines
3.3 KiB
HTML

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" class="page-loading" aria-busy="true" xml:lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>{% if brand_name is defined %}{{ brand_name }}{% else %}RoleForge{% endif %}</title>
<link
rel="stylesheet"
href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.2/css/all.min.css"
/>
<link rel="stylesheet" type="text/css" href="/static/css/styles.css" />
<script src="https://cdn.jsdelivr.net/npm/chart.js"></script>
</head>
<body>
<script type="text/javascript">
//<![CDATA[
(function () {
try {
var t = localStorage.getItem("dashboard-theme") || "dark";
document.documentElement.setAttribute("data-theme", t);
document.body.setAttribute("data-theme", t);
} catch (e) {}
})();
//]]>
</script>
<div
class="app-page-loader"
id="app-page-loader"
role="status"
aria-live="polite"
aria-label="Loading"
>
<div class="app-page-loader__spinner" aria-hidden="true"></div>
</div>
<button id="theme-toggle" class="theme-toggle theme-toggle-floating" type="button" aria-label="Toggle theme"></button>
<div
class="layout
{% if provisioning_sub is defined %}provmod--{{ provisioning_sub }}{% endif %}
{% if rbac_sub is defined %}rbmod--{{ rbac_sub }}{% endif %}
{% if access_sub is defined %}accmod--{{ access_sub }}{% endif %}
{% if ops_sub is defined %}opsmod--{{ ops_sub }}{% endif %}
{% if molecule_sub is defined %}molmod--{{ molecule_sub }}{% endif %}"
data-page="{{ page }}"
data-cluster-id="{% if cluster_id is defined %}{{ cluster_id }}{% endif %}"
data-team-id="{% if team_id is defined %}{{ team_id }}{% endif %}"
data-molecule-sub="{% if molecule_sub is defined %}{{ molecule_sub }}{% endif %}"
>
<aside class="sidebar">
<div class="sidebar-inner">
<div class="sidebar-header">
<div class="brand">
<span class="brand-mark">
<img class="brand-mark__img" src="/static/img/roleforge-mark.svg" alt="RoleForge logo" />
</span>
<div class="brand-text">
<span class="brand-name">{% if brand_name is defined %}{{ brand_name }}{% else %}RoleForge{% endif %}</span>
<span class="brand-tagline">{% if brand_tagline is defined %}{{ brand_tagline }}{% else %}Ansible Orchestrator{% endif %}</span>
</div>
</div>
</div>
<nav class="sidebar-nav">
{% include "includes/sidebar-nav.xhtml" %}
</nav>
{% include "includes/sidebar-user.xhtml" %}
</div>
</aside>
<main class="content">
{% block content %}{% endblock %}
</main>
</div>
<script src="/static/js/core.js" type="text/javascript"></script>
<script src="/static/js/pages-main.js" type="text/javascript"></script>
<script src="/static/js/pages-tasks.js" type="text/javascript"></script>
<script src="/static/js/pages-auth.js" type="text/javascript"></script>
<script src="/static/js/app.js" type="text/javascript"></script>
</body>
</html>