provisioning/docs/book/quickstart/04-verification.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

508 lines
24 KiB
HTML
Raw Permalink 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>Verification - 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/quickstart/04-verification.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="verification"><a class="header" href="#verification">Verification</a></h1>
<p>This guide helps you verify that your Provisioning Platform deployment is working correctly.</p>
<h2 id="overview"><a class="header" href="#overview">Overview</a></h2>
<p>After completing your first deployment, verify:</p>
<ol>
<li>System configuration</li>
<li>Server accessibility</li>
<li>Task service health</li>
<li>Platform services (if installed)</li>
</ol>
<h2 id="step-1-verify-configuration"><a class="header" href="#step-1-verify-configuration">Step 1: Verify Configuration</a></h2>
<p>Check that all configuration is valid:</p>
<pre><code class="language-bash"># Validate all configuration
provisioning validate config
# Expected output:
# ✓ Configuration valid
# ✓ No errors found
# ✓ All required fields present
</code></pre>
<pre><code class="language-bash"># Check environment variables
provisioning env
# View complete configuration
provisioning allenv
</code></pre>
<h2 id="step-2-verify-servers"><a class="header" href="#step-2-verify-servers">Step 2: Verify Servers</a></h2>
<p>Check that servers are accessible and healthy:</p>
<pre><code class="language-bash"># List all servers
provisioning server list
# Expected output:
# ┌───────────────┬──────────┬───────┬────────┬──────────────┬──────────┐
# │ Hostname │ Provider │ Cores │ Memory │ IP Address │ Status │
# ├───────────────┼──────────┼───────┼────────┼──────────────┼──────────┤
# │ dev-server-01 │ local │ 2 │ 4096 │ 192.168.1.100│ running │
# └───────────────┴──────────┴───────┴────────┴──────────────┴──────────┘
</code></pre>
<pre><code class="language-bash"># Check server details
provisioning server info dev-server-01
# Test SSH connectivity
provisioning server ssh dev-server-01 -- echo "SSH working"
</code></pre>
<h2 id="step-3-verify-task-services"><a class="header" href="#step-3-verify-task-services">Step 3: Verify Task Services</a></h2>
<p>Check installed task services:</p>
<pre><code class="language-bash"># List task services
provisioning taskserv list
# Expected output:
# ┌────────────┬─────────┬────────────────┬──────────┐
# │ Name │ Version │ Server │ Status │
# ├────────────┼─────────┼────────────────┼──────────┤
# │ containerd │ 1.7.0 │ dev-server-01 │ running │
# │ etcd │ 3.5.0 │ dev-server-01 │ running │
# │ kubernetes │ 1.28.0 │ dev-server-01 │ running │
# └────────────┴─────────┴────────────────┴──────────┘
</code></pre>
<pre><code class="language-bash"># Check specific task service
provisioning taskserv status kubernetes
# View task service logs
provisioning taskserv logs kubernetes --tail 50
</code></pre>
<h2 id="step-4-verify-kubernetes-if-installed"><a class="header" href="#step-4-verify-kubernetes-if-installed">Step 4: Verify Kubernetes (If Installed)</a></h2>
<p>If you installed Kubernetes, verify its working:</p>
<pre><code class="language-bash"># Check Kubernetes nodes
provisioning server ssh dev-server-01 -- kubectl get nodes
# Expected output:
# NAME STATUS ROLES AGE VERSION
# dev-server-01 Ready control-plane 10m v1.28.0
</code></pre>
<pre><code class="language-bash"># Check Kubernetes pods
provisioning server ssh dev-server-01 -- kubectl get pods -A
# All pods should be Running or Completed
</code></pre>
<h2 id="step-5-verify-platform-services-optional"><a class="header" href="#step-5-verify-platform-services-optional">Step 5: Verify Platform Services (Optional)</a></h2>
<p>If you installed platform services:</p>
<h3 id="orchestrator"><a class="header" href="#orchestrator">Orchestrator</a></h3>
<pre><code class="language-bash"># Check orchestrator health
curl http://localhost:8080/health
# Expected:
# {"status":"healthy","version":"0.1.0"}
</code></pre>
<pre><code class="language-bash"># List tasks
curl http://localhost:8080/tasks
</code></pre>
<h3 id="control-center"><a class="header" href="#control-center">Control Center</a></h3>
<pre><code class="language-bash"># Check control center health
curl http://localhost:9090/health
# Test policy evaluation
curl -X POST http://localhost:9090/policies/evaluate \
-H "Content-Type: application/json" \
-d '{"principal":{"id":"test"},"action":{"id":"read"},"resource":{"id":"test"}}'
</code></pre>
<h3 id="kms-service"><a class="header" href="#kms-service">KMS Service</a></h3>
<pre><code class="language-bash"># Check KMS health
curl http://localhost:8082/api/v1/kms/health
# Test encryption
echo "test" | provisioning kms encrypt
</code></pre>
<h2 id="step-6-run-health-checks"><a class="header" href="#step-6-run-health-checks">Step 6: Run Health Checks</a></h2>
<p>Run comprehensive health checks:</p>
<pre><code class="language-bash"># Check all components
provisioning health check
# Expected output:
# ✓ Configuration: OK
# ✓ Servers: 1/1 healthy
# ✓ Task Services: 3/3 running
# ✓ Platform Services: 3/3 healthy
# ✓ Network Connectivity: OK
# ✓ Encryption Keys: OK
</code></pre>
<h2 id="step-7-verify-workflows"><a class="header" href="#step-7-verify-workflows">Step 7: Verify Workflows</a></h2>
<p>If you used workflows:</p>
<pre><code class="language-bash"># List all workflows
provisioning workflow list
# Check specific workflow
provisioning workflow status &lt;workflow-id&gt;
# View workflow stats
provisioning workflow stats
</code></pre>
<h2 id="common-verification-checks"><a class="header" href="#common-verification-checks">Common Verification Checks</a></h2>
<h3 id="dns-resolution-if-coredns-installed"><a class="header" href="#dns-resolution-if-coredns-installed">DNS Resolution (If CoreDNS Installed)</a></h3>
<pre><code class="language-bash"># Test DNS resolution
dig @localhost test.provisioning.local
# Check CoreDNS status
provisioning server ssh dev-server-01 -- systemctl status coredns
</code></pre>
<h3 id="network-connectivity"><a class="header" href="#network-connectivity">Network Connectivity</a></h3>
<pre><code class="language-bash"># Test server-to-server connectivity
provisioning server ssh dev-server-01 -- ping -c 3 dev-server-02
# Check firewall rules
provisioning server ssh dev-server-01 -- sudo iptables -L
</code></pre>
<h3 id="storage-and-resources"><a class="header" href="#storage-and-resources">Storage and Resources</a></h3>
<pre><code class="language-bash"># Check disk usage
provisioning server ssh dev-server-01 -- df -h
# Check memory usage
provisioning server ssh dev-server-01 -- free -h
# Check CPU usage
provisioning server ssh dev-server-01 -- top -bn1 | head -20
</code></pre>
<h2 id="troubleshooting-failed-verifications"><a class="header" href="#troubleshooting-failed-verifications">Troubleshooting Failed Verifications</a></h2>
<h3 id="configuration-validation-failed"><a class="header" href="#configuration-validation-failed">Configuration Validation Failed</a></h3>
<pre><code class="language-bash"># View detailed error
provisioning validate config --verbose
# Check specific infrastructure
provisioning validate config --infra my-infra
</code></pre>
<h3 id="server-unreachable"><a class="header" href="#server-unreachable">Server Unreachable</a></h3>
<pre><code class="language-bash"># Check server logs
provisioning server logs dev-server-01
# Try debug mode
provisioning --debug server ssh dev-server-01
</code></pre>
<h3 id="task-service-not-running"><a class="header" href="#task-service-not-running">Task Service Not Running</a></h3>
<pre><code class="language-bash"># Check service logs
provisioning taskserv logs kubernetes
# Restart service
provisioning taskserv restart kubernetes --infra my-infra
</code></pre>
<h3 id="platform-service-down"><a class="header" href="#platform-service-down">Platform Service Down</a></h3>
<pre><code class="language-bash"># Check service status
provisioning platform status orchestrator
# View service logs
provisioning platform logs orchestrator --tail 100
# Restart service
provisioning platform restart orchestrator
</code></pre>
<h2 id="performance-verification"><a class="header" href="#performance-verification">Performance Verification</a></h2>
<h3 id="response-time-tests"><a class="header" href="#response-time-tests">Response Time Tests</a></h3>
<pre><code class="language-bash"># Measure server response time
time provisioning server info dev-server-01
# Measure task service response time
time provisioning taskserv list
# Measure workflow submission time
time provisioning workflow submit test-workflow.k
</code></pre>
<h3 id="resource-usage"><a class="header" href="#resource-usage">Resource Usage</a></h3>
<pre><code class="language-bash"># Check platform resource usage
docker stats # If using Docker
# Check system resources
provisioning system resources
</code></pre>
<h2 id="security-verification"><a class="header" href="#security-verification">Security Verification</a></h2>
<h3 id="encryption"><a class="header" href="#encryption">Encryption</a></h3>
<pre><code class="language-bash"># Verify encryption keys
ls -la ~/.config/provisioning/age/
# Test encryption/decryption
echo "test" | provisioning kms encrypt | provisioning kms decrypt
</code></pre>
<h3 id="authentication-if-enabled"><a class="header" href="#authentication-if-enabled">Authentication (If Enabled)</a></h3>
<pre><code class="language-bash"># Test login
provisioning login --username admin
# Verify token
provisioning whoami
# Test MFA (if enabled)
provisioning mfa verify &lt;code&gt;
</code></pre>
<h2 id="verification-checklist"><a class="header" href="#verification-checklist">Verification Checklist</a></h2>
<p>Use this checklist to ensure everything is working:</p>
<ul>
<li><input disabled="" type="checkbox"/>
Configuration validation passes</li>
<li><input disabled="" type="checkbox"/>
All servers are accessible via SSH</li>
<li><input disabled="" type="checkbox"/>
All servers show “running” status</li>
<li><input disabled="" type="checkbox"/>
All task services show “running” status</li>
<li><input disabled="" type="checkbox"/>
Kubernetes nodes are “Ready” (if installed)</li>
<li><input disabled="" type="checkbox"/>
Kubernetes pods are “Running” (if installed)</li>
<li><input disabled="" type="checkbox"/>
Platform services respond to health checks</li>
<li><input disabled="" type="checkbox"/>
Encryption/decryption works</li>
<li><input disabled="" type="checkbox"/>
Workflows can be submitted and complete</li>
<li><input disabled="" type="checkbox"/>
No errors in logs</li>
<li><input disabled="" type="checkbox"/>
Resource usage is within expected limits</li>
</ul>
<h2 id="next-steps"><a class="header" href="#next-steps">Next Steps</a></h2>
<p>Once verification is complete:</p>
<ul>
<li><strong><a href="../user/README.html">User Guide</a></strong> - Learn advanced features</li>
<li><strong><a href="../guides/quickstart-cheatsheet.html">Quick Reference</a></strong> - Command shortcuts</li>
<li><strong><a href="../user/infrastructure-management.html">Infrastructure Management</a></strong> - Day-to-day operations</li>
<li><strong><a href="../user/troubleshooting-guide.html">Troubleshooting</a></strong> - Common issues and solutions</li>
</ul>
<h2 id="additional-resources"><a class="header" href="#additional-resources">Additional Resources</a></h2>
<ul>
<li><a href="../guides/from-scratch.html">Complete From-Scratch Guide</a></li>
<li><a href="../user/SERVICE_MANAGEMENT_GUIDE.html">Service Management Guide</a></li>
<li><a href="../user/test-environment-guide.html">Test Environment Guide</a></li>
</ul>
<hr />
<p><strong>Congratulations!</strong> Youve successfully deployed and verified your first Provisioning Platform infrastructure!</p>
</main>
<nav class="nav-wrapper" aria-label="Page navigation">
<!-- Mobile navigation buttons -->
<a rel="prev" href="../quickstart/03-first-deployment.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="../user/index.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="../quickstart/03-first-deployment.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="../user/index.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>