parent
0ed180375e
commit
7f8e7f0c99
25 changed files with 261 additions and 530 deletions
1
.gitignore
vendored
1
.gitignore
vendored
|
|
@ -1 +1,2 @@
|
||||||
*.swp
|
*.swp
|
||||||
|
src/public
|
||||||
|
|
|
||||||
0
src/.hugo_build.lock
Normal file
0
src/.hugo_build.lock
Normal file
|
|
@ -1,53 +1,11 @@
|
||||||
<!doctype html>
|
---
|
||||||
<html lang="en">
|
title: "Enroll"
|
||||||
<head>
|
html_title: "Enroll - Reverse-engineering servers into Ansible"
|
||||||
<meta charset="utf-8">
|
description: "Enroll inspects Debian-like and RedHat-like Linux hosts and generates Ansible roles/playbooks from what it finds. Harvest → Manifest → Manage."
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
og_title: "Enroll - Reverse-engineering servers into Ansible"
|
||||||
<title>Enroll - Reverse-engineering servers into Ansible</title>
|
og_description: "Harvest a host's real configuration and turn it into Ansible roles/playbooks. Safe-by-default, with optional SOPS encryption."
|
||||||
<meta name="description" content="Enroll inspects Debian-like and RedHat-like Linux hosts and generates Ansible roles/playbooks from what it finds. Harvest → Manifest → Manage.">
|
og_type: "website"
|
||||||
|
---
|
||||||
<!-- Fonts -->
|
|
||||||
<link rel="preconnect" href="https://fonts.googleapis.com">
|
|
||||||
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
|
||||||
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700;800&family=JetBrains+Mono:wght@400;500;600&display=swap" rel="stylesheet">
|
|
||||||
|
|
||||||
<!-- Bootstrap -->
|
|
||||||
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/css/bootstrap.min.css" rel="stylesheet">
|
|
||||||
<link href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.11.3/font/bootstrap-icons.min.css" rel="stylesheet">
|
|
||||||
|
|
||||||
<link href="assets/css/site.css" rel="stylesheet">
|
|
||||||
|
|
||||||
<!-- OpenGraph -->
|
|
||||||
<meta property="og:title" content="Enroll - Reverse-engineering servers into Ansible">
|
|
||||||
<meta property="og:description" content="Harvest a host's real configuration and turn it into Ansible roles/playbooks. Safe-by-default, with optional SOPS encryption.">
|
|
||||||
<meta property="og:type" content="website">
|
|
||||||
</head>
|
|
||||||
<body>
|
|
||||||
|
|
||||||
<nav class="navbar navbar-expand-lg bg-white bg-opacity-75 sticky-top border-bottom" data-bs-theme="light">
|
|
||||||
<div class="container py-1">
|
|
||||||
<a class="navbar-brand fw-bold d-flex align-items-center gap-2" href="index.html">
|
|
||||||
<img class="brand-mark" src="assets/img/enroll.svg" alt="Enroll">
|
|
||||||
<span>Enroll</span>
|
|
||||||
</a>
|
|
||||||
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#nav" aria-controls="nav" aria-expanded="false" aria-label="Toggle navigation">
|
|
||||||
<span class="navbar-toggler-icon"></span>
|
|
||||||
</button>
|
|
||||||
<div class="collapse navbar-collapse" id="nav">
|
|
||||||
<ul class="navbar-nav ms-auto align-items-lg-center gap-lg-2">
|
|
||||||
<li class="nav-item"><a class="nav-link" href="docs.html">Docs</a></li>
|
|
||||||
<li class="nav-item"><a class="nav-link" href="examples.html">Examples</a></li>
|
|
||||||
<li class="nav-item"><a class="nav-link" href="security.html">Security Design</a></li>
|
|
||||||
<li class="nav-item ms-lg-2">
|
|
||||||
<a class="btn btn-sm btn-outline-dark" href="https://git.mig5.net/mig5/enroll" target="_blank" rel="noreferrer">
|
|
||||||
<i class="bi bi-git"></i> Repo
|
|
||||||
</a>
|
|
||||||
</li>
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</nav>
|
|
||||||
|
|
||||||
<header class="hero py-5">
|
<header class="hero py-5">
|
||||||
<div class="container py-4">
|
<div class="container py-4">
|
||||||
<div class="row align-items-center g-4">
|
<div class="row align-items-center g-4">
|
||||||
|
|
@ -279,7 +237,7 @@ enroll explain /path/to/harvest.sops \
|
||||||
--format json
|
--format json
|
||||||
</code></pre>
|
</code></pre>
|
||||||
</div>
|
</div>
|
||||||
<div class="smallprint mt-3">'explain' tells you why something was included, but also why something was <em>excluded</em>.</div>
|
<div class="smallprint mt-3">'explain' tells you why something was included, but also why something was <em>excluded</em>.</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
@ -395,54 +353,3 @@ sudo dnf install enroll</code></pre>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</section>
|
</section>
|
||||||
|
|
||||||
<footer class="py-5">
|
|
||||||
<div class="container">
|
|
||||||
<div class="row g-4">
|
|
||||||
<div class="col-lg-5">
|
|
||||||
<div class="d-flex align-items-center gap-2 mb-2">
|
|
||||||
<img class="brand-mark" src="assets/img/enroll.svg" alt="Enroll">
|
|
||||||
<div class="fw-bold">Enroll (a mig5 project)</div>
|
|
||||||
</div>
|
|
||||||
<div class="smallprint">Reverse-engineering servers into Ansible.</div>
|
|
||||||
</div>
|
|
||||||
<div class="col-lg-7">
|
|
||||||
<div class="row g-3">
|
|
||||||
<div class="col-6 col-md-3">
|
|
||||||
<div class="fw-semibold mb-2">Site</div>
|
|
||||||
<div class="d-flex flex-column gap-1">
|
|
||||||
<a href="docs.html" class="link-secondary text-decoration-none">Docs</a>
|
|
||||||
<a href="examples.html" class="link-secondary text-decoration-none">Examples</a>
|
|
||||||
<a href="security.html" class="link-secondary text-decoration-none">Security Design</a>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="col-6 col-md-3">
|
|
||||||
<div class="fw-semibold mb-2">Project</div>
|
|
||||||
<div class="d-flex flex-column gap-1">
|
|
||||||
<a href="https://git.mig5.net/mig5/enroll" target="_blank" rel="noreferrer" class="link-secondary text-decoration-none">Repo</a>
|
|
||||||
<a href="https://pypi.org/project/enroll/" target="_blank" rel="noreferrer" class="link-secondary text-decoration-none">PyPI</a>
|
|
||||||
<a href="https://git.mig5.net/mig5/enroll/releases" target="_blank" rel="noreferrer" class="link-secondary text-decoration-none">Releases</a>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="col-12 col-md-6">
|
|
||||||
<div class="fw-semibold mb-2">Contact</div>
|
|
||||||
<li><a class="link-secondary text-decoration-none" href="https://nr.mig5.net/forms/mig5/contact" target="_blank" rel="noreferrer">Form</a></li>
|
|
||||||
<li><span class="text-secondary">Fediverse:</span> <a class="link-secondary text-decoration-none" href="https://goto.mig5.net/@mig5" target="_blank" rel="noreferrer">@mig5</a></li>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<hr class="my-4">
|
|
||||||
<div class="d-flex flex-column flex-md-row justify-content-between gap-2 smallprint">
|
|
||||||
<div class="text-secondary">© <span id="year"></span> <a href="https://mig5.net" target="_blank" rel="noopener noreferrer">mig5 system administration</a></div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</footer>
|
|
||||||
|
|
||||||
<script>
|
|
||||||
document.getElementById('year').textContent = new Date().getFullYear();
|
|
||||||
</script>
|
|
||||||
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/js/bootstrap.bundle.min.js"></script>
|
|
||||||
<script src="assets/js/site.js"></script>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
||||||
|
|
@ -1,50 +1,8 @@
|
||||||
<!doctype html>
|
---
|
||||||
<html lang="en">
|
title: "Docs"
|
||||||
<head>
|
html_title: "Enroll Docs"
|
||||||
<meta charset="utf-8">
|
description: "How Enroll works: harvest, manifest, modes, and configuration."
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
---
|
||||||
<title>Enroll Docs</title>
|
|
||||||
<meta name="description" content="How Enroll works: harvest, manifest, modes, and configuration.">
|
|
||||||
|
|
||||||
<!-- Fonts -->
|
|
||||||
<link rel="preconnect" href="https://fonts.googleapis.com">
|
|
||||||
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
|
||||||
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700;800&family=JetBrains+Mono:wght@400;500;600&display=swap" rel="stylesheet">
|
|
||||||
|
|
||||||
<!-- Bootstrap -->
|
|
||||||
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/css/bootstrap.min.css" rel="stylesheet">
|
|
||||||
<link href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.11.3/font/bootstrap-icons.min.css" rel="stylesheet">
|
|
||||||
|
|
||||||
<link href="assets/css/site.css" rel="stylesheet">
|
|
||||||
|
|
||||||
</head>
|
|
||||||
<body>
|
|
||||||
|
|
||||||
<nav class="navbar navbar-expand-lg bg-white bg-opacity-75 sticky-top border-bottom" data-bs-theme="light">
|
|
||||||
<div class="container py-1">
|
|
||||||
<a class="navbar-brand fw-bold d-flex align-items-center gap-2" href="index.html">
|
|
||||||
<img class="brand-mark" src="assets/img/enroll.svg" alt="Enroll">
|
|
||||||
<span>Enroll</span>
|
|
||||||
</a>
|
|
||||||
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#nav" aria-controls="nav" aria-expanded="false" aria-label="Toggle navigation">
|
|
||||||
<span class="navbar-toggler-icon"></span>
|
|
||||||
</button>
|
|
||||||
<div class="collapse navbar-collapse" id="nav">
|
|
||||||
<ul class="navbar-nav ms-auto align-items-lg-center gap-lg-2">
|
|
||||||
<li class="nav-item"><a class="nav-link" href="docs.html">Docs</a></li>
|
|
||||||
<li class="nav-item"><a class="nav-link" href="examples.html">Examples</a></li>
|
|
||||||
<li class="nav-item"><a class="nav-link" href="security.html">Security Design</a></li>
|
|
||||||
<li class="nav-item ms-lg-2">
|
|
||||||
<a class="btn btn-sm btn-outline-dark" href="https://git.mig5.net/mig5/enroll" target="_blank" rel="noreferrer">
|
|
||||||
<i class="bi bi-git"></i> Repo
|
|
||||||
</a>
|
|
||||||
</li>
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</nav>
|
|
||||||
|
|
||||||
|
|
||||||
<header class="py-5 hero">
|
<header class="py-5 hero">
|
||||||
<div class="container py-3">
|
<div class="container py-3">
|
||||||
<div class="kicker mb-3"><i class="bi bi-book"></i> Documentation</div>
|
<div class="kicker mb-3"><i class="bi bi-book"></i> Documentation</div>
|
||||||
|
|
@ -567,50 +525,3 @@ sudo journalctl -u enroll-harvest-diff.service -n 200 --no-pager
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</main>
|
</main>
|
||||||
|
|
||||||
|
|
||||||
<footer class="py-5">
|
|
||||||
<div class="container">
|
|
||||||
<div class="row g-4 align-items-start">
|
|
||||||
<div class="col-lg-6">
|
|
||||||
<div class="d-flex align-items-center gap-2 mb-2">
|
|
||||||
<img class="brand-mark" src="assets/img/enroll.svg" alt="Enroll">
|
|
||||||
<div class="fw-bold">Enroll (a mig5 project)</div>
|
|
||||||
<span class="badge badge-soft rounded-pill">CLI</span>
|
|
||||||
<span class="badge badge-soft rounded-pill">Ansible</span>
|
|
||||||
</div>
|
|
||||||
<p class="smallprint mb-3">Reverse-engineering servers into Ansible.</p>
|
|
||||||
<div class="d-flex flex-wrap gap-2">
|
|
||||||
<a class="btn btn-sm btn-outline-dark" href="https://git.mig5.net/mig5/enroll" target="_blank" rel="noreferrer"><i class="bi bi-git"></i> Repo</a>
|
|
||||||
<a class="btn btn-sm btn-outline-dark" href="https://pypi.org/project/enroll/" target="_blank" rel="noreferrer"><i class="bi bi-box"></i> PyPI</a>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="col-lg-3">
|
|
||||||
<div class="fw-semibold mb-2">Site</div>
|
|
||||||
<ul class="list-unstyled small mb-0">
|
|
||||||
<li><a class="link-secondary text-decoration-none" href="docs.html">Docs</a></li>
|
|
||||||
<li><a class="link-secondary text-decoration-none" href="examples.html">Examples</a></li>
|
|
||||||
<li><a class="link-secondary text-decoration-none" href="security.html">Security Design</a></li>
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
<div class="col-lg-3">
|
|
||||||
<div class="fw-semibold mb-2">Contact</div>
|
|
||||||
<ul class="list-unstyled small mb-0">
|
|
||||||
<li><a class="link-secondary text-decoration-none" href="https://nr.mig5.net/forms/mig5/contact" target="_blank" rel="noreferrer">Form</a></li>
|
|
||||||
<li><span class="text-secondary">Fediverse:</span> <a class="link-secondary text-decoration-none" href="https://goto.mig5.net/@mig5" target="_blank" rel="noreferrer">@mig5</a></li>
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<hr class="my-4">
|
|
||||||
<div class="d-flex flex-column flex-md-row justify-content-between align-items-md-center gap-2 small">
|
|
||||||
<div class="text-secondary">© <span id="year"></span> <a href="https://mig5.net" target="_blank" rel="noopener noreferrer">mig5 system administration</a></div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</footer>
|
|
||||||
|
|
||||||
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/js/bootstrap.bundle.min.js"></script>
|
|
||||||
<script src="assets/js/site.js"></script>
|
|
||||||
<script>document.getElementById('year').textContent = new Date().getFullYear();</script>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
||||||
|
|
||||||
|
|
@ -1,50 +1,8 @@
|
||||||
<!doctype html>
|
---
|
||||||
<html lang="en">
|
title: "Examples"
|
||||||
<head>
|
html_title: "Enroll Examples"
|
||||||
<meta charset="utf-8">
|
description: "Copy/paste recipes for Enroll: one host, fleets, drift detection, and safe storage."
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
---
|
||||||
<title>Enroll Examples</title>
|
|
||||||
<meta name="description" content="Copy/paste recipes for Enroll: one host, fleets, drift detection, and safe storage.">
|
|
||||||
|
|
||||||
<!-- Fonts -->
|
|
||||||
<link rel="preconnect" href="https://fonts.googleapis.com">
|
|
||||||
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
|
||||||
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700;800&family=JetBrains+Mono:wght@400;500;600&display=swap" rel="stylesheet">
|
|
||||||
|
|
||||||
<!-- Bootstrap -->
|
|
||||||
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/css/bootstrap.min.css" rel="stylesheet">
|
|
||||||
<link href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.11.3/font/bootstrap-icons.min.css" rel="stylesheet">
|
|
||||||
|
|
||||||
<link href="assets/css/site.css" rel="stylesheet">
|
|
||||||
|
|
||||||
</head>
|
|
||||||
<body>
|
|
||||||
|
|
||||||
<nav class="navbar navbar-expand-lg bg-white bg-opacity-75 sticky-top border-bottom" data-bs-theme="light">
|
|
||||||
<div class="container py-1">
|
|
||||||
<a class="navbar-brand fw-bold d-flex align-items-center gap-2" href="index.html">
|
|
||||||
<img class="brand-mark" src="assets/img/enroll.svg" alt="Enroll">
|
|
||||||
<span>Enroll</span>
|
|
||||||
</a>
|
|
||||||
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#nav" aria-controls="nav" aria-expanded="false" aria-label="Toggle navigation">
|
|
||||||
<span class="navbar-toggler-icon"></span>
|
|
||||||
</button>
|
|
||||||
<div class="collapse navbar-collapse" id="nav">
|
|
||||||
<ul class="navbar-nav ms-auto align-items-lg-center gap-lg-2">
|
|
||||||
<li class="nav-item"><a class="nav-link" href="docs.html">Docs</a></li>
|
|
||||||
<li class="nav-item"><a class="nav-link" href="examples.html">Examples</a></li>
|
|
||||||
<li class="nav-item"><a class="nav-link" href="security.html">Security Design</a></li>
|
|
||||||
<li class="nav-item ms-lg-2">
|
|
||||||
<a class="btn btn-sm btn-outline-dark" href="https://git.mig5.net/mig5/enroll" target="_blank" rel="noreferrer">
|
|
||||||
<i class="bi bi-git"></i> Repo
|
|
||||||
</a>
|
|
||||||
</li>
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</nav>
|
|
||||||
|
|
||||||
|
|
||||||
<header class="py-5 hero">
|
<header class="py-5 hero">
|
||||||
<div class="container py-3">
|
<div class="container py-3">
|
||||||
<div class="kicker mb-3"><i class="bi bi-terminal"></i> Examples</div>
|
<div class="kicker mb-3"><i class="bi bi-terminal"></i> Examples</div>
|
||||||
|
|
@ -168,50 +126,3 @@
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</main>
|
</main>
|
||||||
|
|
||||||
|
|
||||||
<footer class="py-5">
|
|
||||||
<div class="container">
|
|
||||||
<div class="row g-4 align-items-start">
|
|
||||||
<div class="col-lg-6">
|
|
||||||
<div class="d-flex align-items-center gap-2 mb-2">
|
|
||||||
<img class="brand-mark" src="assets/img/enroll.svg" alt="Enroll">
|
|
||||||
<div class="fw-bold">Enroll (a mig5 project)</div>
|
|
||||||
<span class="badge badge-soft rounded-pill">CLI</span>
|
|
||||||
<span class="badge badge-soft rounded-pill">Ansible</span>
|
|
||||||
</div>
|
|
||||||
<p class="smallprint mb-3">Reverse-engineering servers into Ansible.</p>
|
|
||||||
<div class="d-flex flex-wrap gap-2">
|
|
||||||
<a class="btn btn-sm btn-outline-dark" href="https://git.mig5.net/mig5/enroll" target="_blank" rel="noreferrer"><i class="bi bi-git"></i> Repo</a>
|
|
||||||
<a class="btn btn-sm btn-outline-dark" href="https://pypi.org/project/enroll/" target="_blank" rel="noreferrer"><i class="bi bi-box"></i> PyPI</a>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="col-lg-3">
|
|
||||||
<div class="fw-semibold mb-2">Site</div>
|
|
||||||
<ul class="list-unstyled small mb-0">
|
|
||||||
<li><a class="link-secondary text-decoration-none" href="docs.html">Docs</a></li>
|
|
||||||
<li><a class="link-secondary text-decoration-none" href="examples.html">Examples</a></li>
|
|
||||||
<li><a class="link-secondary text-decoration-none" href="security.html">Security Design</a></li>
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
<div class="col-lg-3">
|
|
||||||
<div class="fw-semibold mb-2">Contact</div>
|
|
||||||
<ul class="list-unstyled small mb-0">
|
|
||||||
<li><a class="link-secondary text-decoration-none" href="https://nr.mig5.net/forms/mig5/contact" target="_blank" rel="noreferrer">Form</a></li>
|
|
||||||
<li><span class="text-secondary">Fediverse:</span> <a class="link-secondary text-decoration-none" href="https://goto.mig5.net/@mig5" target="_blank" rel="noreferrer">@mig5</a></li>
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<hr class="my-4">
|
|
||||||
<div class="d-flex flex-column flex-md-row justify-content-between align-items-md-center gap-2 small">
|
|
||||||
<div class="text-secondary">© <span id="year"></span> <a href="https://mig5.net" target="_blank" rel="noopener noreferrer">mig5 system administration</a></div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</footer>
|
|
||||||
|
|
||||||
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/js/bootstrap.bundle.min.js"></script>
|
|
||||||
<script src="assets/js/site.js"></script>
|
|
||||||
<script>document.getElementById('year').textContent = new Date().getFullYear();</script>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
||||||
|
|
||||||
46
src/content/schema.html
Normal file
46
src/content/schema.html
Normal file
|
|
@ -0,0 +1,46 @@
|
||||||
|
---
|
||||||
|
title: "Schema"
|
||||||
|
html_title: "Enroll State Schema"
|
||||||
|
description: "JSON Schema describing the Enroll harvest state.json format."
|
||||||
|
layout: "schema"
|
||||||
|
---
|
||||||
|
<header class="py-5 hero">
|
||||||
|
<div class="container py-3">
|
||||||
|
<div class="kicker mb-3"><i class="bi bi-braces"></i> Schema</div>
|
||||||
|
<h1 class="display-6 fw-bold mb-2">Harvest <code>state.json</code> schema</h1>
|
||||||
|
<p class="lead mb-0"><code>enroll harvest</code> generates a state file. This is its structure.</p>
|
||||||
|
</div>
|
||||||
|
</header>
|
||||||
|
|
||||||
|
<main class="py-5">
|
||||||
|
<div class="container">
|
||||||
|
<div class="row g-4">
|
||||||
|
<div class="col-lg-4">
|
||||||
|
<div class="callout p-4">
|
||||||
|
<div class="fw-semibold mb-2">Links</div>
|
||||||
|
<div class="d-grid gap-2">
|
||||||
|
<a class="btn btn-sm btn-outline-dark" href="schema/state.schema.json"><i class="bi bi-download"></i> Raw JSON Schema</a>
|
||||||
|
<a class="btn btn-sm btn-outline-dark" href="docs.html#schema"><i class="bi bi-book"></i> Docs section</a>
|
||||||
|
</div>
|
||||||
|
<hr class="my-3">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="col-lg-8">
|
||||||
|
<div class="feature-card p-4">
|
||||||
|
<div class="d-flex align-items-center justify-content-between flex-wrap gap-2">
|
||||||
|
<h2 class="h4 fw-bold mb-0">state.schema.json</h2>
|
||||||
|
<a class="btn btn-sm btn-outline-secondary" href="schema/state.schema.json" target="_blank" rel="noreferrer"><i class="bi bi-box-arrow-up-right"></i> Open raw</a>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="codeblock terminal mt-3">
|
||||||
|
<button class="btn btn-sm btn-outline-secondary copy-btn" data-copy-target="#schema-code"><i class="bi bi-clipboard"></i> Copy</button>
|
||||||
|
<pre class="mb-0"><code id="schema-code">Loading…</code></pre>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="small text-secondary mt-3">Tip: you can validate a harvest with <code>python -m jsonschema -i state.json schema/state.schema.json</code></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</main>
|
||||||
|
|
@ -1,50 +1,8 @@
|
||||||
<!doctype html>
|
---
|
||||||
<html lang="en">
|
title: "Security Design"
|
||||||
<head>
|
html_title: "Enroll Security"
|
||||||
<meta charset="utf-8">
|
description: "Security posture and safe workflows for Enroll outputs."
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
---
|
||||||
<title>Enroll Security</title>
|
|
||||||
<meta name="description" content="Security posture and safe workflows for Enroll outputs.">
|
|
||||||
|
|
||||||
<!-- Fonts -->
|
|
||||||
<link rel="preconnect" href="https://fonts.googleapis.com">
|
|
||||||
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
|
||||||
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700;800&family=JetBrains+Mono:wght@400;500;600&display=swap" rel="stylesheet">
|
|
||||||
|
|
||||||
<!-- Bootstrap -->
|
|
||||||
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/css/bootstrap.min.css" rel="stylesheet">
|
|
||||||
<link href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.11.3/font/bootstrap-icons.min.css" rel="stylesheet">
|
|
||||||
|
|
||||||
<link href="assets/css/site.css" rel="stylesheet">
|
|
||||||
|
|
||||||
</head>
|
|
||||||
<body>
|
|
||||||
|
|
||||||
<nav class="navbar navbar-expand-lg bg-white bg-opacity-75 sticky-top border-bottom" data-bs-theme="light">
|
|
||||||
<div class="container py-1">
|
|
||||||
<a class="navbar-brand fw-bold d-flex align-items-center gap-2" href="index.html">
|
|
||||||
<img class="brand-mark" src="assets/img/enroll.svg" alt="Enroll">
|
|
||||||
<span>Enroll</span>
|
|
||||||
</a>
|
|
||||||
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#nav" aria-controls="nav" aria-expanded="false" aria-label="Toggle navigation">
|
|
||||||
<span class="navbar-toggler-icon"></span>
|
|
||||||
</button>
|
|
||||||
<div class="collapse navbar-collapse" id="nav">
|
|
||||||
<ul class="navbar-nav ms-auto align-items-lg-center gap-lg-2">
|
|
||||||
<li class="nav-item"><a class="nav-link" href="docs.html">Docs</a></li>
|
|
||||||
<li class="nav-item"><a class="nav-link" href="examples.html">Examples</a></li>
|
|
||||||
<li class="nav-item"><a class="nav-link" href="security.html">Security Design</a></li>
|
|
||||||
<li class="nav-item ms-lg-2">
|
|
||||||
<a class="btn btn-sm btn-outline-dark" href="https://git.mig5.net/mig5/enroll" target="_blank" rel="noreferrer">
|
|
||||||
<i class="bi bi-git"></i> Repo
|
|
||||||
</a>
|
|
||||||
</li>
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</nav>
|
|
||||||
|
|
||||||
|
|
||||||
<header class="py-5 hero">
|
<header class="py-5 hero">
|
||||||
<div class="container py-3">
|
<div class="container py-3">
|
||||||
<div class="kicker mb-3"><i class="bi bi-shield-lock"></i> Security</div>
|
<div class="kicker mb-3"><i class="bi bi-shield-lock"></i> Security</div>
|
||||||
|
|
@ -150,50 +108,3 @@
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</main>
|
</main>
|
||||||
|
|
||||||
|
|
||||||
<footer class="py-5">
|
|
||||||
<div class="container">
|
|
||||||
<div class="row g-4 align-items-start">
|
|
||||||
<div class="col-lg-6">
|
|
||||||
<div class="d-flex align-items-center gap-2 mb-2">
|
|
||||||
<img class="brand-mark" src="assets/img/enroll.svg" alt="Enroll">
|
|
||||||
<div class="fw-bold">Enroll (a mig5 project)</div>
|
|
||||||
<span class="badge badge-soft rounded-pill">CLI</span>
|
|
||||||
<span class="badge badge-soft rounded-pill">Ansible</span>
|
|
||||||
</div>
|
|
||||||
<p class="smallprint mb-3">Reverse-engineering servers into Ansible.</p>
|
|
||||||
<div class="d-flex flex-wrap gap-2">
|
|
||||||
<a class="btn btn-sm btn-outline-dark" href="https://git.mig5.net/mig5/enroll" target="_blank" rel="noreferrer"><i class="bi bi-git"></i> Repo</a>
|
|
||||||
<a class="btn btn-sm btn-outline-dark" href="https://pypi.org/project/enroll/" target="_blank" rel="noreferrer"><i class="bi bi-box"></i> PyPI</a>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="col-lg-3">
|
|
||||||
<div class="fw-semibold mb-2">Site</div>
|
|
||||||
<ul class="list-unstyled small mb-0">
|
|
||||||
<li><a class="link-secondary text-decoration-none" href="docs.html">Docs</a></li>
|
|
||||||
<li><a class="link-secondary text-decoration-none" href="examples.html">Examples</a></li>
|
|
||||||
<li><a class="link-secondary text-decoration-none" href="security.html">Security Design</a></li>
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
<div class="col-lg-3">
|
|
||||||
<div class="fw-semibold mb-2">Contact</div>
|
|
||||||
<ul class="list-unstyled small mb-0">
|
|
||||||
<li><a class="link-secondary text-decoration-none" href="https://nr.mig5.net/forms/mig5/contact" target="_blank" rel="noreferrer">Form</a></li>
|
|
||||||
<li><span class="text-secondary">Fediverse:</span> <a class="link-secondary text-decoration-none" href="https://goto.mig5.net/@mig5" target="_blank" rel="noreferrer">@mig5</a></li>
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<hr class="my-4">
|
|
||||||
<div class="d-flex flex-column flex-md-row justify-content-between align-items-md-center gap-2 small">
|
|
||||||
<div class="text-secondary">© <span id="year"></span> <a href="https://mig5.net" target="_blank" rel="noopener noreferrer">mig5 system administration</a></div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</footer>
|
|
||||||
|
|
||||||
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/js/bootstrap.bundle.min.js"></script>
|
|
||||||
<script src="assets/js/site.js"></script>
|
|
||||||
<script>document.getElementById('year').textContent = new Date().getFullYear();</script>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
||||||
|
|
||||||
9
src/hugo.toml
Normal file
9
src/hugo.toml
Normal file
|
|
@ -0,0 +1,9 @@
|
||||||
|
baseURL = "https://enroll.sh/"
|
||||||
|
languageCode = "en-us"
|
||||||
|
title = "Enroll"
|
||||||
|
theme = "enroll-theme"
|
||||||
|
uglyURLs = true
|
||||||
|
disableKinds = ["taxonomy", "term", "RSS", "sitemap"]
|
||||||
|
|
||||||
|
[params]
|
||||||
|
description = "Enroll inspects Debian-like and RedHat-like Linux hosts and generates Ansible roles/playbooks from what it finds. Harvest → Manifest → Manage."
|
||||||
143
src/schema.html
143
src/schema.html
|
|
@ -1,143 +0,0 @@
|
||||||
<!doctype html>
|
|
||||||
<html lang="en">
|
|
||||||
<head>
|
|
||||||
<meta charset="utf-8">
|
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
|
||||||
<title>Enroll State Schema</title>
|
|
||||||
<meta name="description" content="JSON Schema describing the Enroll harvest state.json format.">
|
|
||||||
|
|
||||||
<!-- Fonts -->
|
|
||||||
<link rel="preconnect" href="https://fonts.googleapis.com">
|
|
||||||
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
|
||||||
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700;800&family=JetBrains+Mono:wght@400;500;600&display=swap" rel="stylesheet">
|
|
||||||
|
|
||||||
<!-- Bootstrap -->
|
|
||||||
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/css/bootstrap.min.css" rel="stylesheet">
|
|
||||||
<link href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.11.3/font/bootstrap-icons.min.css" rel="stylesheet">
|
|
||||||
|
|
||||||
<link href="assets/css/site.css" rel="stylesheet">
|
|
||||||
</head>
|
|
||||||
<body>
|
|
||||||
|
|
||||||
<nav class="navbar navbar-expand-lg bg-white bg-opacity-75 sticky-top border-bottom" data-bs-theme="light">
|
|
||||||
<div class="container py-1">
|
|
||||||
<a class="navbar-brand fw-bold d-flex align-items-center gap-2" href="index.html">
|
|
||||||
<img class="brand-mark" src="assets/img/enroll.svg" alt="Enroll">
|
|
||||||
<span>Enroll</span>
|
|
||||||
</a>
|
|
||||||
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#nav" aria-controls="nav" aria-expanded="false" aria-label="Toggle navigation">
|
|
||||||
<span class="navbar-toggler-icon"></span>
|
|
||||||
</button>
|
|
||||||
<div class="collapse navbar-collapse" id="nav">
|
|
||||||
<ul class="navbar-nav ms-auto align-items-lg-center gap-lg-2">
|
|
||||||
<li class="nav-item"><a class="nav-link" href="docs.html">Docs</a></li>
|
|
||||||
<li class="nav-item"><a class="nav-link" href="examples.html">Examples</a></li>
|
|
||||||
<li class="nav-item"><a class="nav-link" href="security.html">Security Design</a></li>
|
|
||||||
<li class="nav-item ms-lg-2">
|
|
||||||
<a class="btn btn-sm btn-outline-dark" href="https://git.mig5.net/mig5/enroll" target="_blank" rel="noreferrer">
|
|
||||||
<i class="bi bi-git"></i> Repo
|
|
||||||
</a>
|
|
||||||
</li>
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</nav>
|
|
||||||
|
|
||||||
<header class="py-5 hero">
|
|
||||||
<div class="container py-3">
|
|
||||||
<div class="kicker mb-3"><i class="bi bi-braces"></i> Schema</div>
|
|
||||||
<h1 class="display-6 fw-bold mb-2">Harvest <code>state.json</code> schema</h1>
|
|
||||||
<p class="lead mb-0"><code>enroll harvest</code> generates a state file. This is its structure.</p>
|
|
||||||
</div>
|
|
||||||
</header>
|
|
||||||
|
|
||||||
<main class="py-5">
|
|
||||||
<div class="container">
|
|
||||||
<div class="row g-4">
|
|
||||||
<div class="col-lg-4">
|
|
||||||
<div class="callout p-4">
|
|
||||||
<div class="fw-semibold mb-2">Links</div>
|
|
||||||
<div class="d-grid gap-2">
|
|
||||||
<a class="btn btn-sm btn-outline-dark" href="schema/state.schema.json"><i class="bi bi-download"></i> Raw JSON Schema</a>
|
|
||||||
<a class="btn btn-sm btn-outline-dark" href="docs.html#schema"><i class="bi bi-book"></i> Docs section</a>
|
|
||||||
</div>
|
|
||||||
<hr class="my-3">
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="col-lg-8">
|
|
||||||
<div class="feature-card p-4">
|
|
||||||
<div class="d-flex align-items-center justify-content-between flex-wrap gap-2">
|
|
||||||
<h2 class="h4 fw-bold mb-0">state.schema.json</h2>
|
|
||||||
<a class="btn btn-sm btn-outline-secondary" href="schema/state.schema.json" target="_blank" rel="noreferrer"><i class="bi bi-box-arrow-up-right"></i> Open raw</a>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="codeblock terminal mt-3">
|
|
||||||
<button class="btn btn-sm btn-outline-secondary copy-btn" data-copy-target="#schema-code"><i class="bi bi-clipboard"></i> Copy</button>
|
|
||||||
<pre class="mb-0"><code id="schema-code">Loading…</code></pre>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="small text-secondary mt-3">Tip: you can validate a harvest with <code>python -m jsonschema -i state.json schema/state.schema.json</code></div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</main>
|
|
||||||
|
|
||||||
<footer class="py-5">
|
|
||||||
<div class="container">
|
|
||||||
<div class="row g-4 align-items-start">
|
|
||||||
<div class="col-lg-6">
|
|
||||||
<div class="d-flex align-items-center gap-2 mb-2">
|
|
||||||
<img class="brand-mark" src="assets/img/enroll.svg" alt="Enroll">
|
|
||||||
<div class="fw-bold">Enroll (a mig5 project)</div>
|
|
||||||
<span class="badge badge-soft rounded-pill">CLI</span>
|
|
||||||
<span class="badge badge-soft rounded-pill">Ansible</span>
|
|
||||||
</div>
|
|
||||||
<p class="smallprint mb-3">Reverse-engineering servers into Ansible.</p>
|
|
||||||
<div class="d-flex flex-wrap gap-2">
|
|
||||||
<a class="btn btn-sm btn-outline-dark" href="https://git.mig5.net/mig5/enroll" target="_blank" rel="noreferrer"><i class="bi bi-git"></i> Repo</a>
|
|
||||||
<a class="btn btn-sm btn-outline-dark" href="https://pypi.org/project/enroll/" target="_blank" rel="noreferrer"><i class="bi bi-box"></i> PyPI</a>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="col-lg-3">
|
|
||||||
<div class="fw-semibold mb-2">Site</div>
|
|
||||||
<ul class="list-unstyled small mb-0">
|
|
||||||
<li><a class="link-secondary text-decoration-none" href="docs.html">Docs</a></li>
|
|
||||||
<li><a class="link-secondary text-decoration-none" href="examples.html">Examples</a></li>
|
|
||||||
<li><a class="link-secondary text-decoration-none" href="schema.html">Schema</a></li>
|
|
||||||
<li><a class="link-secondary text-decoration-none" href="security.html">Security Design</a></li>
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
<div class="col-lg-3">
|
|
||||||
<div class="fw-semibold mb-2">Contact</div>
|
|
||||||
<ul class="list-unstyled small mb-0">
|
|
||||||
<li><a class="link-secondary text-decoration-none" href="https://nr.mig5.net/forms/mig5/contact" target="_blank" rel="noreferrer">Form</a></li>
|
|
||||||
<li><span class="text-secondary">Fediverse:</span> <a class="link-secondary text-decoration-none" href="https://goto.mig5.net/@mig5" target="_blank" rel="noreferrer">@mig5</a></li>
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<hr class="my-4">
|
|
||||||
<div class="d-flex flex-column flex-md-row justify-content-between align-items-md-center gap-2 small">
|
|
||||||
<div class="text-secondary">© <span id="year"></span> <a href="https://mig5.net" target="_blank" rel="noopener noreferrer">mig5 system administration</a></div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</footer>
|
|
||||||
|
|
||||||
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/js/bootstrap.bundle.min.js"></script>
|
|
||||||
<script src="assets/js/site.js"></script>
|
|
||||||
<script>
|
|
||||||
document.getElementById('year').textContent = new Date().getFullYear();
|
|
||||||
(async () => {
|
|
||||||
const el = document.getElementById('schema-code');
|
|
||||||
try {
|
|
||||||
const res = await fetch('schema/state.schema.json', {cache: 'no-store'});
|
|
||||||
const obj = await res.json();
|
|
||||||
el.textContent = JSON.stringify(obj, null, 2);
|
|
||||||
} catch (e) {
|
|
||||||
el.textContent = 'Failed to load schema: ' + (e && e.message ? e.message : String(e));
|
|
||||||
}
|
|
||||||
})();
|
|
||||||
</script>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
||||||
|
Before Width: | Height: | Size: 4.3 KiB After Width: | Height: | Size: 4.3 KiB |
|
Before Width: | Height: | Size: 216 B After Width: | Height: | Size: 216 B |
|
Before Width: | Height: | Size: 4.2 KiB After Width: | Height: | Size: 4.2 KiB |
15
src/themes/enroll-theme/layouts/_default/baseof.html
Normal file
15
src/themes/enroll-theme/layouts/_default/baseof.html
Normal file
|
|
@ -0,0 +1,15 @@
|
||||||
|
<!doctype html>
|
||||||
|
<html lang="en">
|
||||||
|
<head>
|
||||||
|
{{ partial "head.html" . }}
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
{{ partial "nav.html" . }}
|
||||||
|
|
||||||
|
{{ block "main" . }}{{ end }}
|
||||||
|
|
||||||
|
{{ partial "footer.html" . }}
|
||||||
|
{{ partial "scripts.html" . }}
|
||||||
|
{{ block "page-scripts" . }}{{ end }}
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
20
src/themes/enroll-theme/layouts/_default/schema.html
Normal file
20
src/themes/enroll-theme/layouts/_default/schema.html
Normal file
|
|
@ -0,0 +1,20 @@
|
||||||
|
{{ define "main" }}
|
||||||
|
{{ .Content }}
|
||||||
|
{{ end }}
|
||||||
|
|
||||||
|
{{ define "page-scripts" }}
|
||||||
|
<script>
|
||||||
|
// Keep this page-specific behavior local to the schema page.
|
||||||
|
document.getElementById('year').textContent = new Date().getFullYear();
|
||||||
|
(async () => {
|
||||||
|
const el = document.getElementById('schema-code');
|
||||||
|
try {
|
||||||
|
const res = await fetch('{{ "schema/state.schema.json" | relURL }}', {cache: 'no-store'});
|
||||||
|
const obj = await res.json();
|
||||||
|
el.textContent = JSON.stringify(obj, null, 2);
|
||||||
|
} catch (e) {
|
||||||
|
el.textContent = 'Failed to load schema: ' + (e && e.message ? e.message : String(e));
|
||||||
|
}
|
||||||
|
})();
|
||||||
|
</script>
|
||||||
|
{{ end }}
|
||||||
3
src/themes/enroll-theme/layouts/_default/single.html
Normal file
3
src/themes/enroll-theme/layouts/_default/single.html
Normal file
|
|
@ -0,0 +1,3 @@
|
||||||
|
{{ define "main" }}
|
||||||
|
{{ .Content | safeHTML }}
|
||||||
|
{{ end }}
|
||||||
3
src/themes/enroll-theme/layouts/index.html
Normal file
3
src/themes/enroll-theme/layouts/index.html
Normal file
|
|
@ -0,0 +1,3 @@
|
||||||
|
{{ define "main" }}
|
||||||
|
{{ .Content | safeHTML }}
|
||||||
|
{{ end }}
|
||||||
63
src/themes/enroll-theme/layouts/partials/footer.html
Normal file
63
src/themes/enroll-theme/layouts/partials/footer.html
Normal file
|
|
@ -0,0 +1,63 @@
|
||||||
|
<footer class="py-5">
|
||||||
|
<div class="container">
|
||||||
|
<div class="row g-4 align-items-start">
|
||||||
|
<div class="col-lg-6">
|
||||||
|
<div class="d-flex align-items-center gap-2 mb-2">
|
||||||
|
<img class="brand-mark" src="assets/img/enroll.svg" alt="Enroll">
|
||||||
|
<div class="fw-bold">Enroll (a mig5 project)</div>
|
||||||
|
<span class="badge badge-soft rounded-pill">CLI</span>
|
||||||
|
<span class="badge badge-soft rounded-pill">Ansible</span>
|
||||||
|
</div>
|
||||||
|
<div class="text-secondary mb-3">Reverse-engineering servers into Ansible.</div>
|
||||||
|
|
||||||
|
<div class="d-flex flex-wrap gap-2">
|
||||||
|
<a class="btn btn-sm btn-outline-dark" href="https://git.mig5.net/mig5/enroll" target="_blank" rel="noreferrer">
|
||||||
|
<i class="bi bi-git"></i> Repo
|
||||||
|
</a>
|
||||||
|
<a class="btn btn-sm btn-outline-dark" href="https://pypi.org/project/enroll/" target="_blank" rel="noreferrer">
|
||||||
|
<i class="bi bi-box"></i> PyPI
|
||||||
|
</a>
|
||||||
|
<a class="btn btn-sm btn-outline-dark" href="https://git.mig5.net/mig5/enroll/releases" target="_blank" rel="noreferrer">
|
||||||
|
<i class="bi bi-tags"></i> Releases
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="col-lg-3">
|
||||||
|
<div class="fw-semibold mb-2">Site</div>
|
||||||
|
<ul class="list-unstyled small mb-0">
|
||||||
|
<li><a class="link-secondary text-decoration-none" href="docs.html">Docs</a></li>
|
||||||
|
<li><a class="link-secondary text-decoration-none" href="examples.html">Examples</a></li>
|
||||||
|
<li><a class="link-secondary text-decoration-none" href="schema.html">Schema</a></li>
|
||||||
|
<li><a class="link-secondary text-decoration-none" href="security.html">Security Design</a></li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="col-lg-3">
|
||||||
|
<div class="fw-semibold mb-2">Contact</div>
|
||||||
|
<ul class="list-unstyled small mb-0">
|
||||||
|
<li>
|
||||||
|
<a class="link-secondary text-decoration-none" href="https://nr.mig5.net/forms/mig5/contact" target="_blank" rel="noreferrer">
|
||||||
|
<i class="bi bi-envelope"></i> Form
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
<li class="mt-1">
|
||||||
|
<span class="text-secondary">Fediverse:</span>
|
||||||
|
<a class="link-secondary text-decoration-none ms-1" href="https://goto.mig5.net/@mig5" target="_blank" rel="noreferrer">@mig5</a>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<hr class="my-4">
|
||||||
|
|
||||||
|
<div class="small text-secondary d-flex flex-wrap justify-content-between gap-2">
|
||||||
|
<div>© <span id="year"></span></div>
|
||||||
|
<div>
|
||||||
|
<a class="link-secondary text-decoration-none" href="https://mig5.net" target="_blank" rel="noreferrer">
|
||||||
|
mig5 system administration
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</footer>
|
||||||
24
src/themes/enroll-theme/layouts/partials/head.html
Normal file
24
src/themes/enroll-theme/layouts/partials/head.html
Normal file
|
|
@ -0,0 +1,24 @@
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||||
|
<title>{{ .Params.html_title }}</title>
|
||||||
|
<meta name="description" content="{{ .Params.description | default site.Params.description }}">
|
||||||
|
|
||||||
|
{{ with .Params.og_title }}
|
||||||
|
<meta property="og:title" content="{{ . }}">
|
||||||
|
{{ end }}
|
||||||
|
{{ with .Params.og_description }}
|
||||||
|
<meta property="og:description" content="{{ . }}">
|
||||||
|
{{ end }}
|
||||||
|
{{ with .Params.og_type }}
|
||||||
|
<meta property="og:type" content="{{ . }}">
|
||||||
|
{{ end }}
|
||||||
|
|
||||||
|
<!-- Fonts -->
|
||||||
|
<link rel="preconnect" href="https://fonts.googleapis.com">
|
||||||
|
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
||||||
|
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700;800&family=JetBrains+Mono:wght@400;500;600&display=swap" rel="stylesheet">
|
||||||
|
|
||||||
|
<!-- Bootstrap -->
|
||||||
|
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/css/bootstrap.min.css" rel="stylesheet">
|
||||||
|
<link href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.11.3/font/bootstrap-icons.min.css" rel="stylesheet">
|
||||||
|
<link href="assets/css/site.css" rel="stylesheet">
|
||||||
33
src/themes/enroll-theme/layouts/partials/nav.html
Normal file
33
src/themes/enroll-theme/layouts/partials/nav.html
Normal file
|
|
@ -0,0 +1,33 @@
|
||||||
|
<nav class="navbar navbar-expand-lg bg-white bg-opacity-75 sticky-top border-bottom" data-bs-theme="light">
|
||||||
|
<div class="container py-1">
|
||||||
|
<a class="navbar-brand fw-bold d-flex align-items-center gap-2" href="index.html">
|
||||||
|
<img class="brand-mark" src="assets/img/enroll.svg" alt="Enroll">
|
||||||
|
<span>Enroll</span>
|
||||||
|
</a>
|
||||||
|
|
||||||
|
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#nav"
|
||||||
|
aria-controls="nav" aria-expanded="false" aria-label="Toggle navigation">
|
||||||
|
<span class="navbar-toggler-icon"></span>
|
||||||
|
</button>
|
||||||
|
|
||||||
|
<div class="collapse navbar-collapse" id="nav">
|
||||||
|
<ul class="navbar-nav ms-auto align-items-lg-center gap-lg-2">
|
||||||
|
<li class="nav-item">
|
||||||
|
<a class="nav-link" href="docs.html">Docs</a>
|
||||||
|
</li>
|
||||||
|
<li class="nav-item">
|
||||||
|
<a class="nav-link" href="examples.html">Examples</a>
|
||||||
|
</li>
|
||||||
|
<li class="nav-item">
|
||||||
|
<a class="nav-link" href="security.html">Security Design</a>
|
||||||
|
</li>
|
||||||
|
|
||||||
|
<li class="nav-item ms-lg-2">
|
||||||
|
<a class="btn btn-sm btn-outline-dark" href="https://git.mig5.net/mig5/enroll" target="_blank" rel="noreferrer">
|
||||||
|
<i class="bi bi-git"></i> Repo
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</nav>
|
||||||
8
src/themes/enroll-theme/layouts/partials/scripts.html
Normal file
8
src/themes/enroll-theme/layouts/partials/scripts.html
Normal file
|
|
@ -0,0 +1,8 @@
|
||||||
|
<script>
|
||||||
|
(function () {
|
||||||
|
var el = document.getElementById('year');
|
||||||
|
if (el) el.textContent = new Date().getFullYear();
|
||||||
|
})();
|
||||||
|
</script>
|
||||||
|
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/js/bootstrap.bundle.min.js"></script>
|
||||||
|
<script src="assets/js/site.js"></script>
|
||||||
6
src/themes/enroll-theme/theme.toml
Normal file
6
src/themes/enroll-theme/theme.toml
Normal file
|
|
@ -0,0 +1,6 @@
|
||||||
|
name = "enroll-theme"
|
||||||
|
license = "MIT"
|
||||||
|
licenselink = ""
|
||||||
|
description = "Enroll theme extracted from native HTML"
|
||||||
|
homepage = "https://enroll.sh/"
|
||||||
|
min_version = "0.120.0"
|
||||||
|
|
@ -5,8 +5,11 @@ set -eou pipefail
|
||||||
SRC="src"
|
SRC="src"
|
||||||
DEST="/opt/www/enroll.sh"
|
DEST="/opt/www/enroll.sh"
|
||||||
|
|
||||||
cp -a ~/git/enroll/enroll/schema/state.schema.json src/schema/state.schema.json
|
DEBIAN_FRONTEND=noninteractive sudo apt-get install -y --no-install-recommends hugo
|
||||||
|
cp -a ~/git/enroll/enroll/schema/state.schema.json src/static/schema/state.schema.json
|
||||||
|
|
||||||
rsync -aHPvz ${SRC}/ root@lupin.mig5.net:${DEST}/
|
cd "${SRC}" && hugo
|
||||||
|
cd ../
|
||||||
|
rsync -aHPvz ${SRC}/public/ root@lupin.mig5.net:${DEST}/
|
||||||
|
|
||||||
ssh root@lupin.mig5.net "chown -R web:web ${DEST}"
|
ssh root@lupin.mig5.net "chown -R web:web ${DEST}"
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue