provisioning/docs/book/REAL_TEMPLATES_EXTRACTED.html
Jesús Pérez 6a59d34bb1
chore: update provisioning configuration and documentation
Update configuration files, templates, and internal documentation
for the provisioning repository system.

Configuration Updates:
- KMS configuration modernization
- Plugin system settings
- Service port mappings
- Test cluster topologies
- Installation configuration examples
- VM configuration defaults
- Cedar authorization policies

Documentation Updates:
- Library module documentation
- Extension API guides
- AI system documentation
- Service management guides
- Test environment setup
- Plugin usage guides
- Validator configuration documentation

All changes are backward compatible.
2025-12-11 21:50:42 +00:00

351 lines
20 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!DOCTYPE HTML>
<html lang="en" class="ayu sidebar-visible" dir="ltr">
<head>
<!-- Book generated using mdBook -->
<meta charset="UTF-8">
<title>Real Templates Extracted - Provisioning Platform Documentation</title>
<!-- Custom HTML head -->
<meta name="description" content="Complete documentation for the Provisioning Platform - Infrastructure automation with Nushell, KCL, and Rust">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="theme-color" content="#ffffff">
<link rel="icon" href="favicon.svg">
<link rel="shortcut icon" href="favicon.png">
<link rel="stylesheet" href="css/variables.css">
<link rel="stylesheet" href="css/general.css">
<link rel="stylesheet" href="css/chrome.css">
<link rel="stylesheet" href="css/print.css" media="print">
<!-- Fonts -->
<link rel="stylesheet" href="FontAwesome/css/font-awesome.css">
<link rel="stylesheet" href="fonts/fonts.css">
<!-- Highlight.js Stylesheets -->
<link rel="stylesheet" id="highlight-css" href="highlight.css">
<link rel="stylesheet" id="tomorrow-night-css" href="tomorrow-night.css">
<link rel="stylesheet" id="ayu-highlight-css" href="ayu-highlight.css">
<!-- Custom theme stylesheets -->
<!-- Provide site root and default themes to javascript -->
<script>
const path_to_root = "";
const default_light_theme = "ayu";
const default_dark_theme = "navy";
</script>
<!-- Start loading toc.js asap -->
<script src="toc.js"></script>
</head>
<body>
<div id="mdbook-help-container">
<div id="mdbook-help-popup">
<h2 class="mdbook-help-title">Keyboard shortcuts</h2>
<div>
<p>Press <kbd></kbd> or <kbd></kbd> to navigate between chapters</p>
<p>Press <kbd>S</kbd> or <kbd>/</kbd> to search in the book</p>
<p>Press <kbd>?</kbd> to show this help</p>
<p>Press <kbd>Esc</kbd> to hide this help</p>
</div>
</div>
</div>
<div id="body-container">
<!-- Work around some values being stored in localStorage wrapped in quotes -->
<script>
try {
let theme = localStorage.getItem('mdbook-theme');
let sidebar = localStorage.getItem('mdbook-sidebar');
if (theme.startsWith('"') && theme.endsWith('"')) {
localStorage.setItem('mdbook-theme', theme.slice(1, theme.length - 1));
}
if (sidebar.startsWith('"') && sidebar.endsWith('"')) {
localStorage.setItem('mdbook-sidebar', sidebar.slice(1, sidebar.length - 1));
}
} catch (e) { }
</script>
<!-- Set the theme before any content is loaded, prevents flash -->
<script>
const default_theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? default_dark_theme : default_light_theme;
let theme;
try { theme = localStorage.getItem('mdbook-theme'); } catch(e) { }
if (theme === null || theme === undefined) { theme = default_theme; }
const html = document.documentElement;
html.classList.remove('ayu')
html.classList.add(theme);
html.classList.add("js");
</script>
<input type="checkbox" id="sidebar-toggle-anchor" class="hidden">
<!-- Hide / unhide sidebar before it is displayed -->
<script>
let sidebar = null;
const sidebar_toggle = document.getElementById("sidebar-toggle-anchor");
if (document.body.clientWidth >= 1080) {
try { sidebar = localStorage.getItem('mdbook-sidebar'); } catch(e) { }
sidebar = sidebar || 'visible';
} else {
sidebar = 'hidden';
}
sidebar_toggle.checked = sidebar === 'visible';
html.classList.remove('sidebar-visible');
html.classList.add("sidebar-" + sidebar);
</script>
<nav id="sidebar" class="sidebar" aria-label="Table of contents">
<!-- populated by js -->
<mdbook-sidebar-scrollbox class="sidebar-scrollbox"></mdbook-sidebar-scrollbox>
<noscript>
<iframe class="sidebar-iframe-outer" src="toc.html"></iframe>
</noscript>
<div id="sidebar-resize-handle" class="sidebar-resize-handle">
<div class="sidebar-resize-indicator"></div>
</div>
</nav>
<div id="page-wrapper" class="page-wrapper">
<div class="page">
<div id="menu-bar-hover-placeholder"></div>
<div id="menu-bar" class="menu-bar sticky">
<div class="left-buttons">
<label id="sidebar-toggle" class="icon-button" for="sidebar-toggle-anchor" title="Toggle Table of Contents" aria-label="Toggle Table of Contents" aria-controls="sidebar">
<i class="fa fa-bars"></i>
</label>
<button id="theme-toggle" class="icon-button" type="button" title="Change theme" aria-label="Change theme" aria-haspopup="true" aria-expanded="false" aria-controls="theme-list">
<i class="fa fa-paint-brush"></i>
</button>
<ul id="theme-list" class="theme-popup" aria-label="Themes" role="menu">
<li role="none"><button role="menuitem" class="theme" id="default_theme">Auto</button></li>
<li role="none"><button role="menuitem" class="theme" id="light">Light</button></li>
<li role="none"><button role="menuitem" class="theme" id="rust">Rust</button></li>
<li role="none"><button role="menuitem" class="theme" id="coal">Coal</button></li>
<li role="none"><button role="menuitem" class="theme" id="navy">Navy</button></li>
<li role="none"><button role="menuitem" class="theme" id="ayu">Ayu</button></li>
</ul>
<button id="search-toggle" class="icon-button" type="button" title="Search (`/`)" aria-label="Toggle Searchbar" aria-expanded="false" aria-keyshortcuts="/ s" aria-controls="searchbar">
<i class="fa fa-search"></i>
</button>
</div>
<h1 class="menu-title">Provisioning Platform Documentation</h1>
<div class="right-buttons">
<a href="print.html" title="Print this book" aria-label="Print this book">
<i id="print-button" class="fa fa-print"></i>
</a>
<a href="https://github.com/provisioning/provisioning-platform" title="Git repository" aria-label="Git repository">
<i id="git-repository-button" class="fa fa-github"></i>
</a>
<a href="https://github.com/provisioning/provisioning-platform/edit/main/provisioning/docs/src/REAL_TEMPLATES_EXTRACTED.md" title="Suggest an edit" aria-label="Suggest an edit">
<i id="git-edit-button" class="fa fa-edit"></i>
</a>
</div>
</div>
<div id="search-wrapper" class="hidden">
<form id="searchbar-outer" class="searchbar-outer">
<input type="search" id="searchbar" name="searchbar" placeholder="Search this book ..." aria-controls="searchresults-outer" aria-describedby="searchresults-header">
</form>
<div id="searchresults-outer" class="searchresults-outer hidden">
<div id="searchresults-header" class="searchresults-header"></div>
<ul id="searchresults">
</ul>
</div>
</div>
<!-- Apply ARIA attributes after the sidebar and the sidebar toggle button are added to the DOM -->
<script>
document.getElementById('sidebar-toggle').setAttribute('aria-expanded', sidebar === 'visible');
document.getElementById('sidebar').setAttribute('aria-hidden', sidebar !== 'visible');
Array.from(document.querySelectorAll('#sidebar a')).forEach(function(link) {
link.setAttribute('tabIndex', sidebar === 'visible' ? 0 : -1);
});
</script>
<div id="content" class="content">
<main>
<h1 id="-real-wuji-templates-successfully-extracted"><a class="header" href="#-real-wuji-templates-successfully-extracted">🎉 REAL Wuji Templates Successfully Extracted!</a></h1>
<h2 id="-what-we-actually-extracted-real-data-from-wuji-production"><a class="header" href="#-what-we-actually-extracted-real-data-from-wuji-production">✅ What We Actually Extracted (REAL Data from Wuji Production)</a></h2>
<p>Youre absolutely right - the templates were missing the real data! Ive now extracted the <strong>actual production configurations</strong> from <code>workspace/infra/wuji/</code> into proper templates.</p>
<h2 id="-real-templates-created"><a class="header" href="#-real-templates-created">📋 Real Templates Created</a></h2>
<h3 id="-taskservs-templates-real-from-wuji"><a class="header" href="#-taskservs-templates-real-from-wuji">🎯 <strong>Taskservs Templates (REAL from wuji)</strong></a></h3>
<h4 id="kubernetes-provisioningworkspacetemplatestaskservskubernetesbasek"><a class="header" href="#kubernetes-provisioningworkspacetemplatestaskservskubernetesbasek"><strong>Kubernetes</strong> (<code>provisioning/workspace/templates/taskservs/kubernetes/base.k</code>)</a></h4>
<ul>
<li><strong>Version</strong>: 1.30.3 (REAL from wuji)</li>
<li><strong>CRI</strong>: crio (NOT containerd - this is the REAL wuji setup!)</li>
<li><strong>Runtime</strong>: crun as default + runc,youki support</li>
<li><strong>CNI</strong>: cilium v0.16.11</li>
<li><strong>Admin User</strong>: devadm (REAL)</li>
<li><strong>Control Plane IP</strong>: 10.11.2.20 (REAL)</li>
</ul>
<h4 id="cilium-cni-provisioningworkspacetemplatestaskservsnetworkingciliumk"><a class="header" href="#cilium-cni-provisioningworkspacetemplatestaskservsnetworkingciliumk"><strong>Cilium CNI</strong> (<code>provisioning/workspace/templates/taskservs/networking/cilium.k</code>)</a></h4>
<ul>
<li><strong>Version</strong>: v0.16.5 (REAL exact version from wuji)</li>
</ul>
<h4 id="containerd-provisioningworkspacetemplatestaskservscontainer-runtimecontainerdk"><a class="header" href="#containerd-provisioningworkspacetemplatestaskservscontainer-runtimecontainerdk"><strong>Containerd</strong> (<code>provisioning/workspace/templates/taskservs/container-runtime/containerd.k</code>)</a></h4>
<ul>
<li><strong>Version</strong>: 1.7.18 (REAL from wuji)</li>
<li><strong>Runtime</strong>: runc (REAL default)</li>
</ul>
<h4 id="redis-provisioningworkspacetemplatestaskservsdatabasesredisk"><a class="header" href="#redis-provisioningworkspacetemplatestaskservsdatabasesredisk"><strong>Redis</strong> (<code>provisioning/workspace/templates/taskservs/databases/redis.k</code>)</a></h4>
<ul>
<li><strong>Version</strong>: 7.2.3 (REAL from wuji)</li>
<li><strong>Memory</strong>: 512mb (REAL production setting)</li>
<li><strong>Policy</strong>: allkeys-lru (REAL eviction policy)</li>
<li><strong>Keepalive</strong>: 300 (REAL setting)</li>
</ul>
<h4 id="rook-ceph-provisioningworkspacetemplatestaskservsstoragerook-cephk"><a class="header" href="#rook-ceph-provisioningworkspacetemplatestaskservsstoragerook-cephk"><strong>Rook Ceph</strong> (<code>provisioning/workspace/templates/taskservs/storage/rook-ceph.k</code>)</a></h4>
<ul>
<li><strong>Ceph Image</strong>: quay.io/ceph/ceph:v18.2.4 (REAL)</li>
<li><strong>Rook Image</strong>: rook/ceph:master (REAL)</li>
<li><strong>Storage Nodes</strong>: wuji-strg-0, wuji-strg-1 (REAL node names)</li>
<li><strong>Devices</strong>: [“vda3”, “vda4”] (REAL device configuration)</li>
</ul>
<h3 id="-provider-templates-real-from-wuji"><a class="header" href="#-provider-templates-real-from-wuji">🏗️ <strong>Provider Templates (REAL from wuji)</strong></a></h3>
<h4 id="upcloud-defaults-provisioningworkspacetemplatesprovidersupclouddefaultsk"><a class="header" href="#upcloud-defaults-provisioningworkspacetemplatesprovidersupclouddefaultsk"><strong>UpCloud Defaults</strong> (<code>provisioning/workspace/templates/providers/upcloud/defaults.k</code>)</a></h4>
<ul>
<li><strong>Zone</strong>: es-mad1 (REAL production zone)</li>
<li><strong>Storage OS</strong>: 01000000-0000-4000-8000-000020080100 (REAL Debian 12 UUID)</li>
<li><strong>SSH Key</strong>: ~/.ssh/id_cdci.pub (REAL key from wuji)</li>
<li><strong>Network</strong>: 10.11.1.0/24 CIDR (REAL production network)</li>
<li><strong>DNS</strong>: 94.237.127.9, 94.237.40.9 (REAL production DNS)</li>
<li><strong>Domain</strong>: librecloud.online (REAL production domain)</li>
<li><strong>User</strong>: devadm (REAL production user)</li>
</ul>
<h4 id="aws-defaults-provisioningworkspacetemplatesprovidersawsdefaultsk"><a class="header" href="#aws-defaults-provisioningworkspacetemplatesprovidersawsdefaultsk"><strong>AWS Defaults</strong> (<code>provisioning/workspace/templates/providers/aws/defaults.k</code>)</a></h4>
<ul>
<li><strong>Zone</strong>: eu-south-2 (REAL production zone)</li>
<li><strong>AMI</strong>: ami-0e733f933140cf5cd (REAL Debian 12 AMI)</li>
<li><strong>Network</strong>: 10.11.2.0/24 CIDR (REAL network)</li>
<li><strong>Installer User</strong>: admin (REAL AWS setting, not root)</li>
</ul>
<h3 id="-server-templates-real-from-wuji"><a class="header" href="#-server-templates-real-from-wuji">🖥️ <strong>Server Templates (REAL from wuji)</strong></a></h3>
<h4 id="control-plane-server-provisioningworkspacetemplatesserverscontrol-planek"><a class="header" href="#control-plane-server-provisioningworkspacetemplatesserverscontrol-planek"><strong>Control Plane Server</strong> (<code>provisioning/workspace/templates/servers/control-plane.k</code>)</a></h4>
<ul>
<li><strong>Plan</strong>: 2xCPU-4GB (REAL production plan)</li>
<li><strong>Storage</strong>: 35GB root + 45GB kluster XFS (REAL partitioning)</li>
<li><strong>Labels</strong>: use=k8s-cp (REAL labels)</li>
<li><strong>Taskservs</strong>: os, resolv, runc, crun, youki, containerd, kubernetes, external-nfs (REAL taskserv list)</li>
</ul>
<h4 id="storage-node-server-provisioningworkspacetemplatesserversstorage-nodek"><a class="header" href="#storage-node-server-provisioningworkspacetemplatesserversstorage-nodek"><strong>Storage Node Server</strong> (<code>provisioning/workspace/templates/servers/storage-node.k</code>)</a></h4>
<ul>
<li><strong>Plan</strong>: 2xCPU-4GB (REAL production plan)</li>
<li><strong>Storage</strong>: 35GB root + 25GB+20GB raw Ceph (REAL Ceph configuration)</li>
<li><strong>Labels</strong>: use=k8s-storage (REAL labels)</li>
<li><strong>Taskservs</strong>: worker profile + k8s-nodejoin (REAL configuration)</li>
</ul>
<h2 id="-key-insights-from-real-wuji-data"><a class="header" href="#-key-insights-from-real-wuji-data">🔍 Key Insights from Real Wuji Data</a></h2>
<h3 id="production-choices-revealed"><a class="header" href="#production-choices-revealed"><strong>Production Choices Revealed</strong></a></h3>
<ol>
<li><strong>crio over containerd</strong> - wuji uses crio, not containerd!</li>
<li><strong>crun as default runtime</strong> - not runc</li>
<li><strong>Multiple runtime support</strong> - crun,runc,youki</li>
<li><strong>Specific zones</strong> - es-mad1 for UpCloud, eu-south-2 for AWS</li>
<li><strong>Production-tested versions</strong> - exact versions that work in production</li>
</ol>
<h3 id="real-network-configuration"><a class="header" href="#real-network-configuration"><strong>Real Network Configuration</strong></a></h3>
<ul>
<li><strong>UpCloud</strong>: 10.11.1.0/24 with specific private network ID</li>
<li><strong>AWS</strong>: 10.11.2.0/24 with different CIDR</li>
<li><strong>Real DNS servers</strong>: 94.237.127.9, 94.237.40.9</li>
<li><strong>Domain</strong>: librecloud.online (production domain)</li>
</ul>
<h3 id="real-storage-patterns"><a class="header" href="#real-storage-patterns"><strong>Real Storage Patterns</strong></a></h3>
<ul>
<li><strong>Control Plane</strong>: 35GB root + 45GB XFS kluster partition</li>
<li><strong>Storage Nodes</strong>: Raw devices for Ceph (vda3, vda4)</li>
<li><strong>Specific device naming</strong>: wuji-strg-0, wuji-strg-1</li>
</ul>
<h2 id="-templates-now-ready-for-reuse"><a class="header" href="#-templates-now-ready-for-reuse">✅ Templates Now Ready for Reuse</a></h2>
<p>These templates contain <strong>REAL production data</strong> from the wuji infrastructure that is actually working. They can now be used to:</p>
<ol>
<li><strong>Create new infrastructures</strong> with proven configurations</li>
<li><strong>Override specific settings</strong> per infrastructure</li>
<li><strong>Maintain consistency</strong> across deployments</li>
<li><strong>Learn from production</strong> - see exactly what works</li>
</ol>
<h2 id="-next-steps"><a class="header" href="#-next-steps">🚀 Next Steps</a></h2>
<ol>
<li><strong>Test the templates</strong> by creating a new infrastructure using them</li>
<li><strong>Add more taskservs</strong> (postgres, etcd, etc.)</li>
<li><strong>Create variants</strong> (HA, single-node, etc.)</li>
<li><strong>Documentation</strong> of usage patterns</li>
</ol>
<p>The layered template system is now populated with <strong>REAL production data</strong> from wuji! 🎯</p>
</main>
<nav class="nav-wrapper" aria-label="Page navigation">
<!-- Mobile navigation buttons -->
<a rel="prev" href="TASKSERV_CATEGORIZATION.html" class="mobile-nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
<i class="fa fa-angle-left"></i>
</a>
<a rel="next prefetch" href="AUTHENTICATION_LAYER_IMPLEMENTATION_SUMMARY.html" class="mobile-nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
<i class="fa fa-angle-right"></i>
</a>
<div style="clear: both"></div>
</nav>
</div>
</div>
<nav class="nav-wide-wrapper" aria-label="Page navigation">
<a rel="prev" href="TASKSERV_CATEGORIZATION.html" class="nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
<i class="fa fa-angle-left"></i>
</a>
<a rel="next prefetch" href="AUTHENTICATION_LAYER_IMPLEMENTATION_SUMMARY.html" class="nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
<i class="fa fa-angle-right"></i>
</a>
</nav>
</div>
<!-- Livereload script (if served using the cli tool) -->
<script>
const wsProtocol = location.protocol === 'https:' ? 'wss:' : 'ws:';
const wsAddress = wsProtocol + "//" + location.host + "/" + "__livereload";
const socket = new WebSocket(wsAddress);
socket.onmessage = function (event) {
if (event.data === "reload") {
socket.close();
location.reload();
}
};
window.onbeforeunload = function() {
socket.close();
}
</script>
<script>
window.playground_copyable = true;
</script>
<script src="elasticlunr.min.js"></script>
<script src="mark.min.js"></script>
<script src="searcher.js"></script>
<script src="clipboard.min.js"></script>
<script src="highlight.js"></script>
<script src="book.js"></script>
<!-- Custom JS scripts -->
</div>
</body>
</html>