parent
0ed180375e
commit
7f8e7f0c99
25 changed files with 261 additions and 530 deletions
149
src/static/assets/css/site.css
Normal file
149
src/static/assets/css/site.css
Normal file
|
|
@ -0,0 +1,149 @@
|
|||
:root{
|
||||
--enroll-amber:#E8B35E;
|
||||
--enroll-amber-2:#F7D58A;
|
||||
--enroll-brown:#5A3415;
|
||||
--enroll-brown-2:#8A5A2D;
|
||||
--enroll-ink:#0f172a;
|
||||
|
||||
--bs-link-color: var(--enroll-brown);
|
||||
--bs-link-hover-color: var(--enroll-brown-2);
|
||||
--bs-link-color-rgb: 90, 52, 21; /* #5A3415 */
|
||||
--bs-link-hover-color-rgb: 138, 90, 45; /* #8A5A2D */
|
||||
|
||||
--bs-nav-pills-link-active-bg: var(--enroll-amber);
|
||||
--bs-nav-pills-link-active-color: var(--enroll-brown);
|
||||
}
|
||||
|
||||
html{scroll-behavior:smooth;}
|
||||
|
||||
body{
|
||||
font-family: Inter, system-ui, -apple-system, "Segoe UI", Roboto, Arial, sans-serif;
|
||||
color: var(--enroll-ink);
|
||||
}
|
||||
|
||||
.navbar{
|
||||
backdrop-filter: blur(10px);
|
||||
}
|
||||
|
||||
.navbar-toggler-icon{
|
||||
background-image: url("../img/hamburger.svg");
|
||||
}
|
||||
|
||||
.brand-mark{width:84px;height:84px;}
|
||||
|
||||
.hero{
|
||||
background:
|
||||
radial-gradient(1200px circle at 15% 10%, rgba(247,213,138,0.60), transparent 55%),
|
||||
radial-gradient(900px circle at 85% 20%, rgba(232,179,94,0.55), transparent 60%),
|
||||
linear-gradient(135deg, #fff7e8 0%, #ffffff 55%, #fffaf0 100%);
|
||||
}
|
||||
|
||||
.hero .lead{
|
||||
color: rgba(15,23,42,0.78);
|
||||
}
|
||||
|
||||
.hero-card{
|
||||
background: rgba(255,255,255,0.70);
|
||||
border: 1px solid rgba(15,23,42,0.08);
|
||||
box-shadow: 0 18px 48px rgba(15,23,42,0.10);
|
||||
border-radius: 1.25rem;
|
||||
}
|
||||
|
||||
.kicker{
|
||||
display: inline-flex;
|
||||
align-items: center;
|
||||
gap: .5rem;
|
||||
font-weight: 600;
|
||||
color: var(--enroll-brown);
|
||||
background: rgba(232,179,94,0.18);
|
||||
border: 1px solid rgba(232,179,94,0.35);
|
||||
padding: .35rem .65rem;
|
||||
border-radius: 999px;
|
||||
}
|
||||
|
||||
.section-title{
|
||||
letter-spacing: -0.02em;
|
||||
}
|
||||
|
||||
.icon-pill{
|
||||
width: 44px;
|
||||
height: 44px;
|
||||
border-radius: 14px;
|
||||
display: inline-flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
background: rgba(232,179,94,0.20);
|
||||
border: 1px solid rgba(232,179,94,0.35);
|
||||
color: var(--enroll-brown);
|
||||
}
|
||||
|
||||
.feature-card{
|
||||
border: 1px solid rgba(15,23,42,0.08);
|
||||
border-radius: 1.25rem;
|
||||
box-shadow: 0 12px 30px rgba(15,23,42,0.06);
|
||||
}
|
||||
|
||||
.terminal{
|
||||
background: #0b1220;
|
||||
color: #e5e7eb;
|
||||
border-radius: 1rem;
|
||||
padding: 1.25rem;
|
||||
border: 1px solid rgba(255,255,255,0.06);
|
||||
box-shadow: 0 18px 52px rgba(11,18,32,0.35);
|
||||
}
|
||||
|
||||
.terminal .prompt{ color: #93c5fd; }
|
||||
.terminal code{ color: #e5e7eb; }
|
||||
|
||||
.codeblock{
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.copy-btn{
|
||||
position: absolute;
|
||||
top: .75rem;
|
||||
right: .75rem;
|
||||
}
|
||||
|
||||
.badge-soft{
|
||||
background: rgba(15,23,42,0.06);
|
||||
border: 1px solid rgba(15,23,42,0.10);
|
||||
color: rgba(15,23,42,0.85);
|
||||
}
|
||||
|
||||
.callout{
|
||||
border: 1px solid rgba(15,23,42,0.10);
|
||||
border-radius: 1rem;
|
||||
background: rgba(255,255,255,0.78);
|
||||
}
|
||||
|
||||
footer{
|
||||
background: linear-gradient(180deg, #ffffff 0%, #fff7e8 100%);
|
||||
border-top: 1px solid rgba(15,23,42,0.06);
|
||||
}
|
||||
|
||||
.smallprint{ color: rgba(15,23,42,0.65); }
|
||||
|
||||
/* Make anchor scrolling nicer under sticky nav */
|
||||
.scroll-mt-nav{ scroll-margin-top: 90px; }
|
||||
|
||||
a{ text-decoration-color: rgba(232,179,94,0.55); }
|
||||
a:hover{ text-decoration-color: rgba(232,179,94,0.85); }
|
||||
|
||||
/* Quickstart pills */
|
||||
.nav-pills .nav-link{
|
||||
border: 1px solid rgba(232,179,94,0.35);
|
||||
color: var(--enroll-brown);
|
||||
background: rgba(232,179,94,0.12);
|
||||
border-radius: 999px;
|
||||
}
|
||||
.nav-pills .nav-link:hover{
|
||||
background: rgba(232,179,94,0.18);
|
||||
border-color: rgba(232,179,94,0.55);
|
||||
}
|
||||
.nav-pills .nav-link.active,
|
||||
.nav-pills .show > .nav-link{
|
||||
background: var(--enroll-amber);
|
||||
color: var(--enroll-brown);
|
||||
border-color: rgba(90,52,21,0.25);
|
||||
}
|
||||
107
src/static/assets/img/enroll.svg
Normal file
107
src/static/assets/img/enroll.svg
Normal file
|
|
@ -0,0 +1,107 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="720" height="720" viewBox="0 0 720 720" role="img" aria-label="enroll logo">
|
||||
<defs>
|
||||
<linearGradient id="bgGrad" x1="0" y1="0" x2="1" y2="1">
|
||||
<stop offset="0" stop-color="#F7D58A"/>
|
||||
<stop offset="1" stop-color="#E8B35E"/>
|
||||
</linearGradient>
|
||||
|
||||
<linearGradient id="crumbGrad" x1="0" y1="0" x2="0" y2="1">
|
||||
<stop offset="0" stop-color="#FFE7BD"/>
|
||||
<stop offset="1" stop-color="#E6A44A"/>
|
||||
</linearGradient>
|
||||
|
||||
<linearGradient id="shineGrad" x1="0" y1="0" x2="0" y2="1">
|
||||
<stop offset="0" stop-color="#FFF2D6" stop-opacity="0.85"/>
|
||||
<stop offset="1" stop-color="#FFF2D6" stop-opacity="0"/>
|
||||
</linearGradient>
|
||||
|
||||
<filter id="softShadow" x="-20%" y="-20%" width="140%" height="140%">
|
||||
<feGaussianBlur in="SourceAlpha" stdDeviation="6" result="blur"/>
|
||||
<feOffset dx="0" dy="10" result="off"/>
|
||||
<feColorMatrix in="off" type="matrix"
|
||||
values="0 0 0 0 0.15 0 0 0 0 0.08 0 0 0 0 0.02 0 0 0 0.35 0" result="shadow"/>
|
||||
<feMerge>
|
||||
<feMergeNode in="shadow"/>
|
||||
<feMergeNode in="SourceGraphic"/>
|
||||
</feMerge>
|
||||
</filter>
|
||||
|
||||
<style>
|
||||
.stroke { stroke:#5A3415; stroke-width:10; stroke-linecap:round; stroke-linejoin:round; }
|
||||
.thin { stroke:#5A3415; stroke-width:7; stroke-linecap:round; stroke-linejoin:round; }
|
||||
.text-dark { fill:#5A3415; font-family: ui-rounded, "Arial Rounded MT Bold", system-ui, -apple-system, "Segoe UI", Arial, sans-serif; font-weight: 800; }
|
||||
.text-light { fill:#8A5A2D; font-family: ui-rounded, "Arial Rounded MT Bold", system-ui, -apple-system, "Segoe UI", Arial, sans-serif; font-weight: 800; }
|
||||
.sesame { fill:#F8E6C8; opacity:0.92; }
|
||||
.crumb { fill:#E9B56B; opacity:0.30; }
|
||||
</style>
|
||||
</defs>
|
||||
|
||||
<!-- NOTE: background removed for transparency -->
|
||||
|
||||
<!-- Roll group -->
|
||||
<g filter="url(#softShadow)" transform="translate(-120,-70)">
|
||||
<path class="stroke" fill="url(#crumbGrad)"
|
||||
d="M220 450
|
||||
C220 320, 320 235, 480 235
|
||||
C640 235, 740 320, 740 450
|
||||
C740 565, 640 610, 480 610
|
||||
C320 610, 220 565, 220 450 Z"/>
|
||||
|
||||
<path d="M300 320
|
||||
C340 285, 410 265, 480 265
|
||||
C550 265, 620 285, 660 320
|
||||
C610 305, 545 298, 480 298
|
||||
C415 298, 350 305, 300 320 Z"
|
||||
fill="url(#shineGrad)"/>
|
||||
|
||||
<g class="thin" opacity="0.85" fill="none">
|
||||
<path d="M330 320 C350 285, 400 270, 430 315"/>
|
||||
<path d="M420 305 C450 268, 510 268, 540 305"/>
|
||||
<path d="M530 315 C560 270, 610 285, 630 320"/>
|
||||
</g>
|
||||
|
||||
<g>
|
||||
<ellipse class="sesame" cx="335" cy="368" rx="10" ry="6"/>
|
||||
<ellipse class="sesame" cx="625" cy="368" rx="10" ry="6"/>
|
||||
<ellipse class="sesame" cx="385" cy="345" rx="10" ry="6"/>
|
||||
<ellipse class="sesame" cx="575" cy="345" rx="10" ry="6"/>
|
||||
<ellipse class="sesame" cx="400" cy="330" rx="10" ry="6"/>
|
||||
<ellipse class="sesame" cx="560" cy="330" rx="10" ry="6"/>
|
||||
</g>
|
||||
|
||||
<g>
|
||||
<circle class="crumb" cx="310" cy="430" r="6"/>
|
||||
<circle class="crumb" cx="650" cy="430" r="6"/>
|
||||
<circle class="crumb" cx="350" cy="470" r="5"/>
|
||||
<circle class="crumb" cx="610" cy="470" r="5"/>
|
||||
<circle class="crumb" cx="420" cy="520" r="6"/>
|
||||
<circle class="crumb" cx="540" cy="520" r="6"/>
|
||||
</g>
|
||||
|
||||
<g>
|
||||
<circle cx="445" cy="365" r="12" fill="#5A3415"/>
|
||||
<circle cx="515" cy="365" r="12" fill="#5A3415"/>
|
||||
<path d="M445 405 C468 430, 492 430, 515 405"
|
||||
fill="none" stroke="#5A3415" stroke-width="12" stroke-linecap="round"/>
|
||||
</g>
|
||||
|
||||
<g transform="translate(330,470)">
|
||||
<rect x="0" y="0" width="300" height="92" rx="26" fill="#F7C879" class="thin"/>
|
||||
|
||||
<g class="thin" fill="none" opacity="0.95">
|
||||
<rect x="18" y="16" width="190" height="24" rx="11" fill="#FFE7BD"/>
|
||||
<rect x="18" y="50" width="190" height="24" rx="11" fill="#FFE7BD"/>
|
||||
<path d="M18 82 H232"/>
|
||||
</g>
|
||||
|
||||
<g>
|
||||
<circle cx="245" cy="28" r="6.5" fill="#5A3415"/>
|
||||
<circle cx="268" cy="28" r="6.5" fill="#5A3415"/>
|
||||
<circle cx="291" cy="28" r="6.5" fill="#5A3415"/>
|
||||
<rect x="238" y="52" width="56" height="22" rx="9" fill="#FFE7BD" stroke="#5A3415" stroke-width="7"/>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 4.3 KiB |
4
src/static/assets/img/hamburger.svg
Normal file
4
src/static/assets/img/hamburger.svg
Normal file
|
|
@ -0,0 +1,4 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 30 30">
|
||||
<path stroke="#5A3415" stroke-opacity="0.85" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"
|
||||
d="M4 7h22M4 15h22M4 23h22"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 216 B |
60
src/static/assets/js/site.js
Normal file
60
src/static/assets/js/site.js
Normal file
|
|
@ -0,0 +1,60 @@
|
|||
(function(){
|
||||
// Copy-to-clipboard for code blocks
|
||||
function setupCopyButtons(){
|
||||
document.querySelectorAll('[data-copy-target]').forEach(function(btn){
|
||||
btn.addEventListener('click', async function(){
|
||||
var sel = btn.getAttribute('data-copy-target');
|
||||
var el = document.querySelector(sel);
|
||||
if(!el) return;
|
||||
var text = el.innerText || el.textContent || '';
|
||||
try{
|
||||
await navigator.clipboard.writeText(text.trim());
|
||||
var old = btn.innerHTML;
|
||||
btn.innerHTML = 'Copied';
|
||||
btn.classList.add('btn-success');
|
||||
btn.classList.remove('btn-outline-secondary');
|
||||
setTimeout(function(){
|
||||
btn.innerHTML = old;
|
||||
btn.classList.remove('btn-success');
|
||||
btn.classList.add('btn-outline-secondary');
|
||||
}, 1200);
|
||||
}catch(e){
|
||||
// Fallback
|
||||
var ta = document.createElement('textarea');
|
||||
ta.value = text.trim();
|
||||
document.body.appendChild(ta);
|
||||
ta.select();
|
||||
try{ document.execCommand('copy'); }catch(_){}
|
||||
document.body.removeChild(ta);
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
// Asciinema embed helper:
|
||||
// Put <div class="asciicast" data-asciinema-id="12345"></div>
|
||||
// Or provide a self-hosted player by swapping the script URL.
|
||||
function setupAsciinema(){
|
||||
document.querySelectorAll('.asciicast[data-asciinema-id]').forEach(function(el){
|
||||
var id = el.getAttribute('data-asciinema-id');
|
||||
if(!id || id === 'REPLACE_ME'){
|
||||
el.innerHTML = '<div class="alert alert-warning mb-0">Add your asciinema id here: <code>data-asciinema-id</code>.</div>';
|
||||
return;
|
||||
}
|
||||
// Avoid injecting twice
|
||||
if(document.getElementById('asciinema-embed-'+id)) return;
|
||||
|
||||
var s = document.createElement('script');
|
||||
s.src = 'https://asciinema.org/a/' + encodeURIComponent(id) + '.js';
|
||||
s.id = 'asciinema-embed-'+id;
|
||||
s.async = true;
|
||||
// The script replaces a placeholder div with the player if it's directly after it.
|
||||
el.appendChild(s);
|
||||
});
|
||||
}
|
||||
|
||||
document.addEventListener('DOMContentLoaded', function(){
|
||||
setupCopyButtons();
|
||||
setupAsciinema();
|
||||
});
|
||||
})();
|
||||
BIN
src/static/favicon.ico
Normal file
BIN
src/static/favicon.ico
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 4.2 KiB |
712
src/static/schema/state.schema.json
Normal file
712
src/static/schema/state.schema.json
Normal file
|
|
@ -0,0 +1,712 @@
|
|||
{
|
||||
"$defs": {
|
||||
"AptConfigSnapshot": {
|
||||
"allOf": [
|
||||
{
|
||||
"$ref": "#/$defs/RoleCommon"
|
||||
},
|
||||
{
|
||||
"properties": {
|
||||
"role_name": {
|
||||
"const": "apt_config"
|
||||
}
|
||||
},
|
||||
"type": "object"
|
||||
}
|
||||
],
|
||||
"unevaluatedProperties": false
|
||||
},
|
||||
"DnfConfigSnapshot": {
|
||||
"allOf": [
|
||||
{
|
||||
"$ref": "#/$defs/RoleCommon"
|
||||
},
|
||||
{
|
||||
"properties": {
|
||||
"role_name": {
|
||||
"const": "dnf_config"
|
||||
}
|
||||
},
|
||||
"type": "object"
|
||||
}
|
||||
],
|
||||
"unevaluatedProperties": false
|
||||
},
|
||||
"EtcCustomSnapshot": {
|
||||
"allOf": [
|
||||
{
|
||||
"$ref": "#/$defs/RoleCommon"
|
||||
},
|
||||
{
|
||||
"properties": {
|
||||
"role_name": {
|
||||
"const": "etc_custom"
|
||||
}
|
||||
},
|
||||
"type": "object"
|
||||
}
|
||||
],
|
||||
"unevaluatedProperties": false
|
||||
},
|
||||
"ExcludedFile": {
|
||||
"additionalProperties": false,
|
||||
"properties": {
|
||||
"path": {
|
||||
"minLength": 1,
|
||||
"pattern": "^/.*",
|
||||
"type": "string"
|
||||
},
|
||||
"reason": {
|
||||
"enum": [
|
||||
"user_excluded",
|
||||
"unreadable",
|
||||
"backup_file",
|
||||
"log_file",
|
||||
"denied_path",
|
||||
"too_large",
|
||||
"not_regular_file",
|
||||
"not_symlink",
|
||||
"binary_like",
|
||||
"sensitive_content"
|
||||
],
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"path",
|
||||
"reason"
|
||||
],
|
||||
"type": "object"
|
||||
},
|
||||
"ExtraPathsSnapshot": {
|
||||
"allOf": [
|
||||
{
|
||||
"$ref": "#/$defs/RoleCommon"
|
||||
},
|
||||
{
|
||||
"properties": {
|
||||
"exclude_patterns": {
|
||||
"items": {
|
||||
"type": "string"
|
||||
},
|
||||
"type": "array"
|
||||
},
|
||||
"include_patterns": {
|
||||
"items": {
|
||||
"type": "string"
|
||||
},
|
||||
"type": "array"
|
||||
},
|
||||
"role_name": {
|
||||
"const": "extra_paths"
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"include_patterns",
|
||||
"exclude_patterns"
|
||||
],
|
||||
"type": "object"
|
||||
}
|
||||
],
|
||||
"unevaluatedProperties": false
|
||||
},
|
||||
"InstalledPackageInstance": {
|
||||
"additionalProperties": false,
|
||||
"properties": {
|
||||
"arch": {
|
||||
"minLength": 1,
|
||||
"type": "string"
|
||||
},
|
||||
"version": {
|
||||
"minLength": 1,
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"version",
|
||||
"arch"
|
||||
],
|
||||
"type": "object"
|
||||
},
|
||||
"ManagedDir": {
|
||||
"additionalProperties": false,
|
||||
"properties": {
|
||||
"group": {
|
||||
"minLength": 1,
|
||||
"type": "string"
|
||||
},
|
||||
"mode": {
|
||||
"pattern": "^[0-7]{4}$",
|
||||
"type": "string"
|
||||
},
|
||||
"owner": {
|
||||
"minLength": 1,
|
||||
"type": "string"
|
||||
},
|
||||
"path": {
|
||||
"minLength": 1,
|
||||
"pattern": "^/.*",
|
||||
"type": "string"
|
||||
},
|
||||
"reason": {
|
||||
"enum": [
|
||||
"parent_of_managed_file",
|
||||
"user_include_dir"
|
||||
],
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"path",
|
||||
"owner",
|
||||
"group",
|
||||
"mode",
|
||||
"reason"
|
||||
],
|
||||
"type": "object"
|
||||
},
|
||||
"ManagedFile": {
|
||||
"additionalProperties": false,
|
||||
"properties": {
|
||||
"group": {
|
||||
"minLength": 1,
|
||||
"type": "string"
|
||||
},
|
||||
"mode": {
|
||||
"pattern": "^[0-7]{4}$",
|
||||
"type": "string"
|
||||
},
|
||||
"owner": {
|
||||
"minLength": 1,
|
||||
"type": "string"
|
||||
},
|
||||
"path": {
|
||||
"minLength": 1,
|
||||
"pattern": "^/.*",
|
||||
"type": "string"
|
||||
},
|
||||
"reason": {
|
||||
"enum": [
|
||||
"apt_config",
|
||||
"apt_keyring",
|
||||
"apt_signed_by_keyring",
|
||||
"apt_source",
|
||||
"authorized_keys",
|
||||
"cron_snippet",
|
||||
"custom_specific_path",
|
||||
"custom_unowned",
|
||||
"dnf_config",
|
||||
"logrotate_snippet",
|
||||
"modified_conffile",
|
||||
"modified_packaged_file",
|
||||
"related_timer",
|
||||
"rpm_gpg_key",
|
||||
"ssh_public_key",
|
||||
"system_cron",
|
||||
"system_firewall",
|
||||
"system_logrotate",
|
||||
"system_modprobe",
|
||||
"system_mounts",
|
||||
"system_network",
|
||||
"system_rc",
|
||||
"system_security",
|
||||
"system_sysctl",
|
||||
"systemd_dropin",
|
||||
"systemd_envfile",
|
||||
"user_include",
|
||||
"user_profile",
|
||||
"user_shell_aliases",
|
||||
"user_shell_logout",
|
||||
"user_shell_rc",
|
||||
"usr_local_bin_script",
|
||||
"usr_local_etc_custom",
|
||||
"yum_conf",
|
||||
"yum_config",
|
||||
"yum_repo"
|
||||
],
|
||||
"type": "string"
|
||||
},
|
||||
"src_rel": {
|
||||
"minLength": 1,
|
||||
"pattern": "^[^/].*",
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"path",
|
||||
"src_rel",
|
||||
"owner",
|
||||
"group",
|
||||
"mode",
|
||||
"reason"
|
||||
],
|
||||
"type": "object"
|
||||
},
|
||||
"ManagedLink": {
|
||||
"additionalProperties": false,
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"path": {
|
||||
"type": "string",
|
||||
"minLength": 1,
|
||||
"pattern": "^/.*"
|
||||
},
|
||||
"target": {
|
||||
"type": "string",
|
||||
"minLength": 1
|
||||
},
|
||||
"reason": {
|
||||
"type": "string",
|
||||
"enum": [
|
||||
"enabled_symlink"
|
||||
]
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"path",
|
||||
"target",
|
||||
"reason"
|
||||
]
|
||||
},
|
||||
"ObservedVia": {
|
||||
"oneOf": [
|
||||
{
|
||||
"additionalProperties": false,
|
||||
"properties": {
|
||||
"kind": {
|
||||
"const": "user_installed"
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"kind"
|
||||
],
|
||||
"type": "object"
|
||||
},
|
||||
{
|
||||
"additionalProperties": false,
|
||||
"properties": {
|
||||
"kind": {
|
||||
"const": "systemd_unit"
|
||||
},
|
||||
"ref": {
|
||||
"minLength": 1,
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"kind",
|
||||
"ref"
|
||||
],
|
||||
"type": "object"
|
||||
},
|
||||
{
|
||||
"additionalProperties": false,
|
||||
"properties": {
|
||||
"kind": {
|
||||
"const": "package_role"
|
||||
},
|
||||
"ref": {
|
||||
"minLength": 1,
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"kind",
|
||||
"ref"
|
||||
],
|
||||
"type": "object"
|
||||
}
|
||||
]
|
||||
},
|
||||
"PackageInventoryEntry": {
|
||||
"additionalProperties": false,
|
||||
"properties": {
|
||||
"arches": {
|
||||
"items": {
|
||||
"minLength": 1,
|
||||
"type": "string"
|
||||
},
|
||||
"type": "array"
|
||||
},
|
||||
"installations": {
|
||||
"items": {
|
||||
"$ref": "#/$defs/InstalledPackageInstance"
|
||||
},
|
||||
"type": "array"
|
||||
},
|
||||
"observed_via": {
|
||||
"items": {
|
||||
"$ref": "#/$defs/ObservedVia"
|
||||
},
|
||||
"type": "array"
|
||||
},
|
||||
"roles": {
|
||||
"items": {
|
||||
"minLength": 1,
|
||||
"type": "string"
|
||||
},
|
||||
"type": "array"
|
||||
},
|
||||
"version": {
|
||||
"type": [
|
||||
"string",
|
||||
"null"
|
||||
]
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"version",
|
||||
"arches",
|
||||
"installations",
|
||||
"observed_via",
|
||||
"roles"
|
||||
],
|
||||
"type": "object"
|
||||
},
|
||||
"PackageSnapshot": {
|
||||
"allOf": [
|
||||
{
|
||||
"$ref": "#/$defs/RoleCommon"
|
||||
},
|
||||
{
|
||||
"properties": {
|
||||
"package": {
|
||||
"minLength": 1,
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"package"
|
||||
],
|
||||
"type": "object"
|
||||
}
|
||||
],
|
||||
"unevaluatedProperties": false
|
||||
},
|
||||
"RoleCommon": {
|
||||
"properties": {
|
||||
"excluded": {
|
||||
"items": {
|
||||
"$ref": "#/$defs/ExcludedFile"
|
||||
},
|
||||
"type": "array"
|
||||
},
|
||||
"managed_dirs": {
|
||||
"items": {
|
||||
"$ref": "#/$defs/ManagedDir"
|
||||
},
|
||||
"type": "array"
|
||||
},
|
||||
"managed_files": {
|
||||
"items": {
|
||||
"$ref": "#/$defs/ManagedFile"
|
||||
},
|
||||
"type": "array"
|
||||
},
|
||||
"managed_links": {
|
||||
"items": {
|
||||
"$ref": "#/$defs/ManagedLink"
|
||||
},
|
||||
"type": "array"
|
||||
},
|
||||
"notes": {
|
||||
"items": {
|
||||
"type": "string"
|
||||
},
|
||||
"type": "array"
|
||||
},
|
||||
"role_name": {
|
||||
"minLength": 1,
|
||||
"pattern": "^[A-Za-z0-9_]+$",
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"role_name",
|
||||
"managed_dirs",
|
||||
"managed_files",
|
||||
"excluded",
|
||||
"notes"
|
||||
],
|
||||
"type": "object"
|
||||
},
|
||||
"ServiceSnapshot": {
|
||||
"allOf": [
|
||||
{
|
||||
"$ref": "#/$defs/RoleCommon"
|
||||
},
|
||||
{
|
||||
"properties": {
|
||||
"active_state": {
|
||||
"type": [
|
||||
"string",
|
||||
"null"
|
||||
]
|
||||
},
|
||||
"condition_result": {
|
||||
"type": [
|
||||
"string",
|
||||
"null"
|
||||
]
|
||||
},
|
||||
"packages": {
|
||||
"items": {
|
||||
"minLength": 1,
|
||||
"type": "string"
|
||||
},
|
||||
"type": "array"
|
||||
},
|
||||
"role_name": {
|
||||
"minLength": 1,
|
||||
"pattern": "^[a-z_][a-z0-9_]*$",
|
||||
"type": "string"
|
||||
},
|
||||
"sub_state": {
|
||||
"type": [
|
||||
"string",
|
||||
"null"
|
||||
]
|
||||
},
|
||||
"unit": {
|
||||
"minLength": 1,
|
||||
"type": "string"
|
||||
},
|
||||
"unit_file_state": {
|
||||
"type": [
|
||||
"string",
|
||||
"null"
|
||||
]
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"unit",
|
||||
"packages",
|
||||
"active_state",
|
||||
"sub_state",
|
||||
"unit_file_state",
|
||||
"condition_result"
|
||||
],
|
||||
"type": "object"
|
||||
}
|
||||
],
|
||||
"unevaluatedProperties": false
|
||||
},
|
||||
"UserEntry": {
|
||||
"additionalProperties": false,
|
||||
"properties": {
|
||||
"gecos": {
|
||||
"type": "string"
|
||||
},
|
||||
"gid": {
|
||||
"minimum": 0,
|
||||
"type": "integer"
|
||||
},
|
||||
"home": {
|
||||
"type": "string"
|
||||
},
|
||||
"name": {
|
||||
"minLength": 1,
|
||||
"type": "string"
|
||||
},
|
||||
"primary_group": {
|
||||
"minLength": 1,
|
||||
"type": "string"
|
||||
},
|
||||
"shell": {
|
||||
"type": "string"
|
||||
},
|
||||
"supplementary_groups": {
|
||||
"items": {
|
||||
"minLength": 1,
|
||||
"type": "string"
|
||||
},
|
||||
"type": "array"
|
||||
},
|
||||
"uid": {
|
||||
"minimum": 0,
|
||||
"type": "integer"
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"name",
|
||||
"uid",
|
||||
"gid",
|
||||
"gecos",
|
||||
"home",
|
||||
"shell",
|
||||
"primary_group",
|
||||
"supplementary_groups"
|
||||
],
|
||||
"type": "object"
|
||||
},
|
||||
"UsersSnapshot": {
|
||||
"allOf": [
|
||||
{
|
||||
"$ref": "#/$defs/RoleCommon"
|
||||
},
|
||||
{
|
||||
"properties": {
|
||||
"role_name": {
|
||||
"const": "users"
|
||||
},
|
||||
"users": {
|
||||
"items": {
|
||||
"$ref": "#/$defs/UserEntry"
|
||||
},
|
||||
"type": "array"
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"users"
|
||||
],
|
||||
"type": "object"
|
||||
}
|
||||
],
|
||||
"unevaluatedProperties": false
|
||||
},
|
||||
"UsrLocalCustomSnapshot": {
|
||||
"allOf": [
|
||||
{
|
||||
"$ref": "#/$defs/RoleCommon"
|
||||
},
|
||||
{
|
||||
"properties": {
|
||||
"role_name": {
|
||||
"const": "usr_local_custom"
|
||||
}
|
||||
},
|
||||
"type": "object"
|
||||
}
|
||||
],
|
||||
"unevaluatedProperties": false
|
||||
}
|
||||
},
|
||||
"$id": "https://enroll.sh/schema/state.schema.json",
|
||||
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
||||
"additionalProperties": false,
|
||||
"properties": {
|
||||
"enroll": {
|
||||
"additionalProperties": false,
|
||||
"properties": {
|
||||
"harvest_time": {
|
||||
"minimum": 0,
|
||||
"type": "integer"
|
||||
},
|
||||
"version": {
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"version",
|
||||
"harvest_time"
|
||||
],
|
||||
"type": "object"
|
||||
},
|
||||
"host": {
|
||||
"additionalProperties": false,
|
||||
"properties": {
|
||||
"hostname": {
|
||||
"minLength": 1,
|
||||
"type": "string"
|
||||
},
|
||||
"os": {
|
||||
"enum": [
|
||||
"debian",
|
||||
"redhat",
|
||||
"unknown"
|
||||
],
|
||||
"type": "string"
|
||||
},
|
||||
"os_release": {
|
||||
"additionalProperties": {
|
||||
"type": "string"
|
||||
},
|
||||
"type": "object"
|
||||
},
|
||||
"pkg_backend": {
|
||||
"enum": [
|
||||
"dpkg",
|
||||
"rpm"
|
||||
],
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"hostname",
|
||||
"os",
|
||||
"pkg_backend",
|
||||
"os_release"
|
||||
],
|
||||
"type": "object"
|
||||
},
|
||||
"inventory": {
|
||||
"additionalProperties": false,
|
||||
"properties": {
|
||||
"packages": {
|
||||
"additionalProperties": {
|
||||
"$ref": "#/$defs/PackageInventoryEntry"
|
||||
},
|
||||
"type": "object"
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"packages"
|
||||
],
|
||||
"type": "object"
|
||||
},
|
||||
"roles": {
|
||||
"additionalProperties": false,
|
||||
"properties": {
|
||||
"apt_config": {
|
||||
"$ref": "#/$defs/AptConfigSnapshot"
|
||||
},
|
||||
"dnf_config": {
|
||||
"$ref": "#/$defs/DnfConfigSnapshot"
|
||||
},
|
||||
"etc_custom": {
|
||||
"$ref": "#/$defs/EtcCustomSnapshot"
|
||||
},
|
||||
"extra_paths": {
|
||||
"$ref": "#/$defs/ExtraPathsSnapshot"
|
||||
},
|
||||
"packages": {
|
||||
"items": {
|
||||
"$ref": "#/$defs/PackageSnapshot"
|
||||
},
|
||||
"type": "array"
|
||||
},
|
||||
"services": {
|
||||
"items": {
|
||||
"$ref": "#/$defs/ServiceSnapshot"
|
||||
},
|
||||
"type": "array"
|
||||
},
|
||||
"users": {
|
||||
"$ref": "#/$defs/UsersSnapshot"
|
||||
},
|
||||
"usr_local_custom": {
|
||||
"$ref": "#/$defs/UsrLocalCustomSnapshot"
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"users",
|
||||
"services",
|
||||
"packages",
|
||||
"apt_config",
|
||||
"dnf_config",
|
||||
"etc_custom",
|
||||
"usr_local_custom",
|
||||
"extra_paths"
|
||||
],
|
||||
"type": "object"
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"enroll",
|
||||
"host",
|
||||
"inventory",
|
||||
"roles"
|
||||
],
|
||||
"title": "Enroll harvest state.json schema (latest)",
|
||||
"type": "object"
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue