обновлён /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.
80 lines
3.3 KiB
HTML
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>
|