<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Building Infrastructure on Deevnet Infrastructure Platform</title><link>https://deevnet.github.io/deevnet-docs/docs/runbook/building-recovery/</link><description>Recent content in Building Infrastructure on Deevnet Infrastructure Platform</description><generator>Hugo</generator><language>en-us</language><atom:link href="https://deevnet.github.io/deevnet-docs/docs/runbook/building-recovery/index.xml" rel="self" type="application/rss+xml"/><item><title>Stage Artifacts</title><link>https://deevnet.github.io/deevnet-docs/docs/runbook/building-recovery/online-preparation/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deevnet.github.io/deevnet-docs/docs/runbook/building-recovery/online-preparation/</guid><description>&lt;h1 id="stage-artifacts">
 Stage Artifacts
 &lt;a class="anchor" href="#stage-artifacts">#&lt;/a>
&lt;/h1>
&lt;p>The builder node (with internet access) stages artifacts to the artifact server before any recovery is needed.&lt;/p>
&lt;hr>
&lt;h2 id="what-gets-staged">
 What Gets Staged
 &lt;a class="anchor" href="#what-gets-staged">#&lt;/a>
&lt;/h2>
&lt;table>
 &lt;thead>
 &lt;tr>
 &lt;th>Artifact&lt;/th>
 &lt;th>Source&lt;/th>
 &lt;th>Role/Task&lt;/th>
 &lt;/tr>
 &lt;/thead>
 &lt;tbody>
 &lt;tr>
 &lt;td>Fedora install tree&lt;/td>
 &lt;td>rsync from Fedora mirrors&lt;/td>
 &lt;td>&lt;code>artifacts&lt;/code> role&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Fedora Server ISO&lt;/td>
 &lt;td>download.fedoraproject.org&lt;/td>
 &lt;td>&lt;code>artifacts&lt;/code> role&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Proxmox VE ISO&lt;/td>
 &lt;td>enterprise.proxmox.com&lt;/td>
 &lt;td>&lt;code>artifacts&lt;/code> role&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>SSH public keys&lt;/td>
 &lt;td>Generated locally&lt;/td>
 &lt;td>&lt;code>artifacts&lt;/code> role&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Container images&lt;/td>
 &lt;td>docker.io, etc.&lt;/td>
 &lt;td>&lt;code>artifacts&lt;/code> role&lt;/td>
 &lt;/tr>
 &lt;/tbody>
&lt;/table>
&lt;hr>
&lt;h2 id="commands">
 Commands
 &lt;a class="anchor" href="#commands">#&lt;/a>
&lt;/h2>
&lt;p>From builder node with internet:&lt;/p></description></item><item><title>Seed Inventory</title><link>https://deevnet.github.io/deevnet-docs/docs/runbook/building-recovery/inventory-setup/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deevnet.github.io/deevnet-docs/docs/runbook/building-recovery/inventory-setup/</guid><description>&lt;h1 id="seed-inventory">
 Seed Inventory
 &lt;a class="anchor" href="#seed-inventory">#&lt;/a>
&lt;/h1>
&lt;p>Before any host can be PXE booted, its definition must exist in the Ansible inventory. MAC addresses, IP assignments, DNS records, and DHCP reservations are all driven from host_vars.&lt;/p>
&lt;p>&lt;strong>Repository:&lt;/strong> &lt;code>ansible-inventory-deevnet&lt;/code>&lt;/p>
&lt;hr>
&lt;h2 id="when-this-is-required">
 When This Is Required
 &lt;a class="anchor" href="#when-this-is-required">#&lt;/a>
&lt;/h2>
&lt;table>
 &lt;thead>
 &lt;tr>
 &lt;th>Scenario&lt;/th>
 &lt;th>Action&lt;/th>
 &lt;/tr>
 &lt;/thead>
 &lt;tbody>
 &lt;tr>
 &lt;td>Capacity expansion&lt;/td>
 &lt;td>Add host to &lt;code>hosts.yml&lt;/code>, create new &lt;code>host_vars/&amp;lt;hostname&amp;gt;.yml&lt;/code>&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Hardware replacement&lt;/td>
 &lt;td>Update MAC address in existing &lt;code>host_vars/&amp;lt;hostname&amp;gt;.yml&lt;/code>&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Greenfield build&lt;/td>
 &lt;td>All hosts need both steps&lt;/td>
 &lt;/tr>
 &lt;/tbody>
&lt;/table>
&lt;hr>
&lt;h2 id="inventory-structure">
 Inventory Structure
 &lt;a class="anchor" href="#inventory-structure">#&lt;/a>
&lt;/h2>
&lt;pre tabindex="0">&lt;code>ansible-inventory-deevnet/
└── dvntm/
 ├── hosts.yml # Main inventory (hosts and group memberships)
 ├── group_vars/ # Variables by group
 └── host_vars/ # Per-host variables (MAC, IP, DNS, DHCP)
 ├── hv01.yml
 ├── hv02.yml
 └── ...
&lt;/code>&lt;/pre>&lt;hr>
&lt;h2 id="adding-a-new-host-expansion">
 Adding a New Host (Expansion)
 &lt;a class="anchor" href="#adding-a-new-host-expansion">#&lt;/a>
&lt;/h2>
&lt;h3 id="1-add-to-hostsyml">
 1. Add to hosts.yml
 &lt;a class="anchor" href="#1-add-to-hostsyml">#&lt;/a>
&lt;/h3>
&lt;p>Add the hostname to appropriate groups:&lt;/p></description></item><item><title>Vault Operations</title><link>https://deevnet.github.io/deevnet-docs/docs/runbook/building-recovery/vault-operations/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deevnet.github.io/deevnet-docs/docs/runbook/building-recovery/vault-operations/</guid><description>&lt;h1 id="vault-operations">
 Vault Operations
 &lt;a class="anchor" href="#vault-operations">#&lt;/a>
&lt;/h1>
&lt;p>Ansible Vault protects sensitive variables (passwords, API keys, certificates) stored in the inventory. Each environment has its own set of &lt;code>vault.yml&lt;/code> files that must be encrypted at rest and decrypted only while editing.&lt;/p>
&lt;p>&lt;strong>Repository:&lt;/strong> &lt;code>ansible-inventory-deevnet&lt;/code>&lt;/p>
&lt;hr>
&lt;h2 id="setup">
 Setup
 &lt;a class="anchor" href="#setup">#&lt;/a>
&lt;/h2>
&lt;p>After cloning the inventory repository, run the one-time hook setup:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>cd ansible-inventory-deevnet
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>make install-hooks
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>This runs &lt;code>git config core.hooksPath hooks&lt;/code>, pointing Git at the version-controlled &lt;code>hooks/&lt;/code> directory. The hooks stay in sync with the repo automatically — no copying required. This must be run once per clone.&lt;/p></description></item><item><title>Configure PXE</title><link>https://deevnet.github.io/deevnet-docs/docs/runbook/building-recovery/build-sequence/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deevnet.github.io/deevnet-docs/docs/runbook/building-recovery/build-sequence/</guid><description>&lt;h1 id="configure-pxe">
 Configure PXE
 &lt;a class="anchor" href="#configure-pxe">#&lt;/a>
&lt;/h1>
&lt;p>Configure PXE boot authority before provisioning hosts.&lt;/p>
&lt;hr>
&lt;h2 id="greenfield-build-no-core-router">
 Greenfield Build (No Core Router)
 &lt;a class="anchor" href="#greenfield-build-no-core-router">#&lt;/a>
&lt;/h2>
&lt;p>For initial site build or full recovery, the bootstrap node provides DNS/DHCP/TFTP for the management subnet.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>cd ~/dvnt/ansible-collection-deevnet.builder
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>make bootstrap-auth
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>This:&lt;/p>
&lt;ul>
&lt;li>Discovers the WAN interface from inventory (&lt;code>bootstrap_wan_interface_key&lt;/code>)&lt;/li>
&lt;li>Enables IP forwarding and masquerading on the WAN interface&lt;/li>
&lt;li>Activates dnsmasq for DHCP/DNS/TFTP on the downstream (management) interface&lt;/li>
&lt;li>Populates DNS host records and DHCP static reservations from inventory&lt;/li>
&lt;li>Swaps the management interface IP from the reserved address to the gateway address&lt;/li>
&lt;/ul>
&lt;p>The IP swap is the last step — it drops the SSH connection. All configuration completes first while connectivity is stable. Reconnect at the gateway IP to verify.&lt;/p></description></item><item><title>Build Network</title><link>https://deevnet.github.io/deevnet-docs/docs/runbook/building-recovery/build-network/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deevnet.github.io/deevnet-docs/docs/runbook/building-recovery/build-network/</guid><description>&lt;h1 id="build-network">
 Build Network
 &lt;a class="anchor" href="#build-network">#&lt;/a>
&lt;/h1>
&lt;p>Configure network infrastructure: Core Router, VLANs, firewall, DHCP, and wireless access points.&lt;/p>
&lt;p>&lt;strong>Collection:&lt;/strong> &lt;code>deevnet.net&lt;/code>&lt;/p>
&lt;hr>
&lt;h2 id="components">
 Components
 &lt;a class="anchor" href="#components">#&lt;/a>
&lt;/h2>
&lt;table>
 &lt;thead>
 &lt;tr>
 &lt;th>Component&lt;/th>
 &lt;th>Role&lt;/th>
 &lt;/tr>
 &lt;/thead>
 &lt;tbody>
 &lt;tr>
 &lt;td>Core Router&lt;/td>
 &lt;td>Firewall, DHCP, DNS, routing&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Switch/VLANs&lt;/td>
 &lt;td>Network segmentation&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Wireless AP&lt;/td>
 &lt;td>SSIDs, guest networks&lt;/td>
 &lt;/tr>
 &lt;/tbody>
&lt;/table>
&lt;hr>
&lt;h2 id="prerequisites">
 Prerequisites
 &lt;a class="anchor" href="#prerequisites">#&lt;/a>
&lt;/h2>
&lt;p>Before the automated build-network procedures begin, the following manual steps must be completed:&lt;/p>
&lt;table>
 &lt;thead>
 &lt;tr>
 &lt;th>Prerequisite&lt;/th>
 &lt;th>Method&lt;/th>
 &lt;th>Notes&lt;/th>
 &lt;/tr>
 &lt;/thead>
 &lt;tbody>
 &lt;tr>
 &lt;td>Core Router&lt;/td>
 &lt;td>Fresh OPNsense install from USB&lt;/td>
 &lt;td>Manual installer; no PXE support&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Access Switch&lt;/td>
 &lt;td>Factory reset to default state&lt;/td>
 &lt;td>Clears any prior VLAN/port config&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Wireless AP&lt;/td>
 &lt;td>Factory reset to default state&lt;/td>
 &lt;td>Clears any prior SSID/network config&lt;/td>
 &lt;/tr>
 &lt;/tbody>
&lt;/table>
&lt;p>Additionally:&lt;/p></description></item><item><title>Build Management Plane</title><link>https://deevnet.github.io/deevnet-docs/docs/runbook/building-recovery/build-management-plane/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deevnet.github.io/deevnet-docs/docs/runbook/building-recovery/build-management-plane/</guid><description>&lt;h1 id="build-management-plane">
 Build Management Plane
 &lt;a class="anchor" href="#build-management-plane">#&lt;/a>
&lt;/h1>
&lt;p>PXE boot and install Proxmox VE hypervisors from local artifacts.&lt;/p>
&lt;hr>
&lt;h2 id="prerequisites">
 Prerequisites
 &lt;a class="anchor" href="#prerequisites">#&lt;/a>
&lt;/h2>
&lt;ul>
&lt;li>MAC addresses seeded in inventory&lt;/li>
&lt;li>Network infrastructure running (or bootstrap-authoritative mode enabled)&lt;/li>
&lt;li>Proxmox VE ISO staged on artifact server&lt;/li>
&lt;li>DHCP reservations configured for target hosts&lt;/li>
&lt;/ul>
&lt;hr>
&lt;h2 id="procedure">
 Procedure
 &lt;a class="anchor" href="#procedure">#&lt;/a>
&lt;/h2>
&lt;p>&lt;em>TBD&lt;/em>&lt;/p></description></item><item><title>Verify Site</title><link>https://deevnet.github.io/deevnet-docs/docs/runbook/building-recovery/build-verification/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deevnet.github.io/deevnet-docs/docs/runbook/building-recovery/build-verification/</guid><description>&lt;h1 id="verify-site">
 Verify Site
 &lt;a class="anchor" href="#verify-site">#&lt;/a>
&lt;/h1>
&lt;p>Validation after site build is complete.&lt;/p>
&lt;hr>
&lt;h2 id="overview">
 Overview
 &lt;a class="anchor" href="#overview">#&lt;/a>
&lt;/h2>
&lt;p>Each build phase includes automated verification via Ansible. This page covers final validation once all components are operational.&lt;/p>
&lt;hr>
&lt;h2 id="network-verification">
 Network Verification
 &lt;a class="anchor" href="#network-verification">#&lt;/a>
&lt;/h2>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e"># Core Router reachable&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>ping gateway.dvntm.deevnet.net
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e"># DNS resolution working&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>dig +short hv01.dvntm.deevnet.net
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>dig +short @192.168.10.1 hv01.dvntm.deevnet.net
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e"># DHCP serving leases&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e"># (check Core Router UI or API)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e"># VLAN connectivity&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e"># (ping across segments as appropriate)&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;hr>
&lt;h2 id="management-plane-verification">
 Management Plane Verification
 &lt;a class="anchor" href="#management-plane-verification">#&lt;/a>
&lt;/h2>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e"># Hypervisors reachable&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>ping hv01.dvntm.deevnet.net
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>ping hv02.dvntm.deevnet.net
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e"># Proxmox API accessible&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>curl -k https://hv01.dvntm.deevnet.net:8006/api2/json/version
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e"># SSH access working&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>ssh hv01.dvntm.deevnet.net hostname
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;hr>
&lt;h2 id="pxe-infrastructure-verification">
 PXE Infrastructure Verification
 &lt;a class="anchor" href="#pxe-infrastructure-verification">#&lt;/a>
&lt;/h2>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e"># TFTP service running&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>systemctl status tftp.socket
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e"># PXE configs present&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>ls /srv/tftp/pxelinux.cfg/
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e"># Artifact server accessible&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>curl -I http://artifacts.dvntm.deevnet.net/fedora/43/mirror/
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;hr>
&lt;h2 id="automated-verification">
 Automated Verification
 &lt;a class="anchor" href="#automated-verification">#&lt;/a>
&lt;/h2>
&lt;p>&lt;em>TBD - Ansible playbook for full substrate health check&lt;/em>&lt;/p></description></item><item><title>Build Tenants</title><link>https://deevnet.github.io/deevnet-docs/docs/runbook/building-recovery/build-tenants/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deevnet.github.io/deevnet-docs/docs/runbook/building-recovery/build-tenants/</guid><description>&lt;h1 id="build-tenants">
 Build Tenants
 &lt;a class="anchor" href="#build-tenants">#&lt;/a>
&lt;/h1>
&lt;p>Provision tenant VMs and deploy application workloads.&lt;/p>
&lt;hr>
&lt;h2 id="prerequisites">
 Prerequisites
 &lt;a class="anchor" href="#prerequisites">#&lt;/a>
&lt;/h2>
&lt;ul>
&lt;li>Proxmox hypervisor(s) running&lt;/li>
&lt;li>VM templates available&lt;/li>
&lt;li>Application configuration in source control&lt;/li>
&lt;/ul>
&lt;hr>
&lt;h2 id="procedure">
 Procedure
 &lt;a class="anchor" href="#procedure">#&lt;/a>
&lt;/h2>
&lt;p>&lt;em>TBD&lt;/em>&lt;/p></description></item><item><title>Verify Tenants</title><link>https://deevnet.github.io/deevnet-docs/docs/runbook/building-recovery/verify-tenants/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deevnet.github.io/deevnet-docs/docs/runbook/building-recovery/verify-tenants/</guid><description>&lt;h1 id="verify-tenants">
 Verify Tenants
 &lt;a class="anchor" href="#verify-tenants">#&lt;/a>
&lt;/h1>
&lt;p>Validation after tenant workloads are provisioned.&lt;/p>
&lt;hr>
&lt;h2 id="prerequisites">
 Prerequisites
 &lt;a class="anchor" href="#prerequisites">#&lt;/a>
&lt;/h2>
&lt;ul>
&lt;li>Tenant VMs deployed via &lt;a href="../build-tenants/">Build Tenants&lt;/a>&lt;/li>
&lt;li>Application services started&lt;/li>
&lt;/ul>
&lt;hr>
&lt;h2 id="application-verification">
 Application Verification
 &lt;a class="anchor" href="#application-verification">#&lt;/a>
&lt;/h2>
&lt;p>&lt;em>TBD - Application-specific health checks&lt;/em>&lt;/p>
&lt;hr>
&lt;h2 id="backup-verification">
 Backup Verification
 &lt;a class="anchor" href="#backup-verification">#&lt;/a>
&lt;/h2>
&lt;p>&lt;em>TBD - Verify tenant backup jobs configured and running&lt;/em>&lt;/p></description></item></channel></rss>