docs: add homelab-inventory — the machine-derived fleet inventory layer

New doc for the weekly self-deriving inventory pipeline: a three-tier
Ansible collection (hardware off the hypervisors/firewall, VMs/LXCs from
the Proxmox APIs, listening sockets off every guest) writing three linked
NocoDB tables, read live behind a Dashy page.

Covers the design decisions worth defending: ss -tlnp over systemctl for
"what does this host serve", merge-only-by-omission on Tier 1 to protect
the one hand-entered field a lying SMBIOS can't provide, API-only Tier 2
because the two Proxmox nodes aren't clustered, stdlib-only push scripts,
and the deliberate KB-vs-machine-layer separation.

Pipeline diagram + four screenshots (Dashy page, all three NocoDB tables).
Provenance comment wired to the ansible roles/playbooks, the rocky Caddy/
dashy config, and KB note O0d4fqw0mr05. Indexed in README under Systems.
This commit is contained in:
automation-bot committed 2026-09-07 08:22:29 +03:00
1 parent bcfcb0d1d5
commit e5b6e8a77d
7 files changed
+125

No files matched your search

+4
View File
@@ -0,0 +1,4 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- Do not edit this file with editors other than draw.io -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg xmlns="http://www.w3.org/2000/svg" style="background: transparent; background-color: transparent; color-scheme: light dark;" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="1251px" height="486px" viewBox="0 0 1251 486" content="&lt;mxfile host=&quot;embed.diagrams.net&quot; scale=&quot;1&quot; border=&quot;0&quot;&gt;&#xA; &lt;diagram name=&quot;homelab-inventory-pipeline&quot; id=&quot;hip1&quot;&gt;&#xA; &lt;mxGraphModel dx=&quot;874&quot; dy=&quot;519&quot; grid=&quot;1&quot; gridSize=&quot;10&quot; guides=&quot;1&quot; tooltips=&quot;1&quot; connect=&quot;1&quot; arrows=&quot;1&quot; fold=&quot;1&quot; page=&quot;1&quot; pageScale=&quot;1&quot; pageWidth=&quot;1320&quot; pageHeight=&quot;560&quot; math=&quot;0&quot; shadow=&quot;0&quot;&gt;&#xA; &lt;root&gt;&#xA; &lt;mxCell id=&quot;0&quot; /&gt;&#xA; &lt;mxCell id=&quot;1&quot; parent=&quot;0&quot; /&gt;&#xA; &lt;mxCell id=&quot;title&quot; parent=&quot;1&quot; style=&quot;text;html=1;align=left;verticalAlign=middle;fontSize=15;fontStyle=1;fontColor=#333333;&quot; value=&quot;Homelab Inventory Pipeline&quot; vertex=&quot;1&quot;&gt;&#xA; &lt;mxGeometry height=&quot;26&quot; width=&quot;360&quot; x=&quot;40&quot; y=&quot;20&quot; as=&quot;geometry&quot; /&gt;&#xA; &lt;/mxCell&gt;&#xA; &lt;mxCell id=&quot;kestra&quot; parent=&quot;1&quot; style=&quot;rounded=1;whiteSpace=wrap;html=1;fillColor=#fff2cc;strokeColor=#d6b656;fontSize=11;fontColor=#333333;&quot; value=&quot;Kestra&amp;#xa;homelab-inventory-sync&amp;#xa;weekly · Thu 12:00&quot; vertex=&quot;1&quot;&gt;&#xA; &lt;mxGeometry height=&quot;64&quot; width=&quot;200&quot; x=&quot;60&quot; y=&quot;60&quot; as=&quot;geometry&quot; /&gt;&#xA; &lt;/mxCell&gt;&#xA; &lt;mxCell id=&quot;t1&quot; parent=&quot;1&quot; style=&quot;rounded=1;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;fontSize=11;fontColor=#333333;&quot; value=&quot;Tier 1 · Hardware&amp;lt;br&amp;gt;node1 / node2 + pfSense&quot; vertex=&quot;1&quot;&gt;&#xA; &lt;mxGeometry height=&quot;56&quot; width=&quot;200&quot; x=&quot;60&quot; y=&quot;190&quot; as=&quot;geometry&quot; /&gt;&#xA; &lt;/mxCell&gt;&#xA; &lt;mxCell id=&quot;t2&quot; parent=&quot;1&quot; style=&quot;rounded=1;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;fontSize=11;fontColor=#333333;&quot; value=&quot;Tier 2 · VMs / LXCs&amp;#xa;Proxmox API — no SSH&quot; vertex=&quot;1&quot;&gt;&#xA; &lt;mxGeometry height=&quot;56&quot; width=&quot;200&quot; x=&quot;60&quot; y=&quot;286&quot; as=&quot;geometry&quot; /&gt;&#xA; &lt;/mxCell&gt;&#xA; &lt;mxCell id=&quot;t3&quot; parent=&quot;1&quot; style=&quot;rounded=1;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;fontSize=11;fontColor=#333333;&quot; value=&quot;Tier 3 · Services&amp;#xa;ss -tlnp + docker ps&quot; vertex=&quot;1&quot;&gt;&#xA; &lt;mxGeometry height=&quot;56&quot; width=&quot;200&quot; x=&quot;60&quot; y=&quot;382&quot; as=&quot;geometry&quot; /&gt;&#xA; &lt;/mxCell&gt;&#xA; &lt;mxCell id=&quot;gate&quot; parent=&quot;1&quot; style=&quot;rounded=1;whiteSpace=wrap;html=1;fillColor=#f8cecc;strokeColor=#b85450;fontSize=10;fontColor=#333333;dashed=1;&quot; value=&quot;pfSense Manufacturer / Model — entered by hand.&amp;#xa;Tier 1 never sends these keys, so the weekly&amp;#xa;push cannot overwrite them.&quot; vertex=&quot;1&quot;&gt;&#xA; &lt;mxGeometry height=&quot;66&quot; width=&quot;360&quot; x=&quot;420&quot; y=&quot;50&quot; as=&quot;geometry&quot; /&gt;&#xA; &lt;/mxCell&gt;&#xA; &lt;mxCell id=&quot;noco&quot; parent=&quot;1&quot; style=&quot;rounded=1;whiteSpace=wrap;html=1;fillColor=#F5F5F5;strokeColor=#666666;fontSize=11;fontStyle=1;fontColor=#333333;verticalAlign=top;spacingTop=6;&quot; value=&quot;NocoDB — 3 linked tables&quot; vertex=&quot;1&quot;&gt;&#xA; &lt;mxGeometry height=&quot;300&quot; width=&quot;290&quot; x=&quot;420&quot; y=&quot;150&quot; as=&quot;geometry&quot; /&gt;&#xA; &lt;/mxCell&gt;&#xA; &lt;mxCell id=&quot;hw&quot; parent=&quot;1&quot; style=&quot;rounded=1;whiteSpace=wrap;html=1;fillColor=#d5e8d4;strokeColor=#82b366;fontSize=11;fontColor=#333333;&quot; value=&quot;Hardware Inventory&quot; vertex=&quot;1&quot;&gt;&#xA; &lt;mxGeometry height=&quot;48&quot; width=&quot;230&quot; x=&quot;450&quot; y=&quot;190&quot; as=&quot;geometry&quot; /&gt;&#xA; &lt;/mxCell&gt;&#xA; &lt;mxCell id=&quot;vm&quot; parent=&quot;1&quot; style=&quot;rounded=1;whiteSpace=wrap;html=1;fillColor=#d5e8d4;strokeColor=#82b366;fontSize=11;fontColor=#333333;&quot; value=&quot;VM / LXC Inventory&quot; vertex=&quot;1&quot;&gt;&#xA; &lt;mxGeometry height=&quot;48&quot; width=&quot;230&quot; x=&quot;450&quot; y=&quot;286&quot; as=&quot;geometry&quot; /&gt;&#xA; &lt;/mxCell&gt;&#xA; &lt;mxCell id=&quot;svc&quot; parent=&quot;1&Line truncated

After

Width:  |  Height:  |  Size: 369 KiB