provisioning-code/resources/diagrams/provisioning-architecture.svg
Jesús Pérez b1c8e38a61 init repo
2026-07-09 20:36:57 +01:00

321 lines
No EOL
20 KiB
XML

<svg viewBox="0 0 1400 1000" xmlns="http://www.w3.org/2000/svg">
<!-- Definiciones -->
<defs>
<marker id="arrowblue" markerWidth="10" markerHeight="10" refX="9" refY="3" orient="auto" markerUnits="strokeWidth">
<path d="M0,0 L0,6 L9,3 z" fill="#4A90E2" />
</marker>
<marker id="arrowgreen" markerWidth="10" markerHeight="10" refX="9" refY="3" orient="auto" markerUnits="strokeWidth">
<path d="M0,0 L0,6 L9,3 z" fill="#50C878" />
</marker>
<marker id="arrowred" markerWidth="10" markerHeight="10" refX="9" refY="3" orient="auto" markerUnits="strokeWidth">
<path d="M0,0 L0,6 L9,3 z" fill="#E74C3C" />
</marker>
<marker id="arroworange" markerWidth="10" markerHeight="10" refX="9" refY="3" orient="auto" markerUnits="strokeWidth">
<path d="M0,0 L0,6 L9,3 z" fill="#FF8C42" />
</marker>
<!-- Filtros de sombra -->
<filter id="shadow" x="-20%" y="-20%" width="140%" height="140%">
<feGaussianBlur in="SourceAlpha" stdDeviation="3"/>
<feOffset dx="2" dy="2" result="offsetblur"/>
<feComponentTransfer>
<feFuncA type="linear" slope="0.3"/>
</feComponentTransfer>
<feMerge>
<feMergeNode/>
<feMergeNode in="SourceGraphic"/>
</feMerge>
</filter>
</defs>
<!-- Fondo -->
<rect width="1400" height="1000" fill="#F8F9FA"/>
<!-- Título -->
<text x="700" y="35" font-size="28" font-weight="bold" text-anchor="middle" fill="#2C3E50">
PROVISIONING SYSTEM ARCHITECTURE
</text>
<!-- CAPA 1: USER INPUT (Azul) -->
<g id="user-layer">
<rect x="50" y="70" width="1300" height="100" fill="#E3F2FD" stroke="#4A90E2" stroke-width="2" rx="8" filter="url(#shadow)"/>
<text x="70" y="95" font-size="14" font-weight="bold" fill="#1565C0">USER INPUT LAYER</text>
<!-- User -->
<rect x="100" y="110" width="120" height="45" fill="#4A90E2" stroke="#1565C0" stroke-width="2" rx="4"/>
<text x="160" y="137" font-size="12" font-weight="bold" text-anchor="middle" fill="white">User</text>
<!-- CLI -->
<rect x="260" y="110" width="120" height="45" fill="#4A90E2" stroke="#1565C0" stroke-width="2" rx="4"/>
<text x="320" y="137" font-size="12" font-weight="bold" text-anchor="middle" fill="white">CLI Entry Point</text>
<!-- User Config -->
<rect x="420" y="110" width="140" height="45" fill="#4A90E2" stroke="#1565C0" stroke-width="2" rx="4"/>
<text x="490" y="137" font-size="12" font-weight="bold" text-anchor="middle" fill="white">User Config/Env</text>
</g>
<!-- CAPA 2: CONFIGURATION LAYER (Verde) -->
<g id="config-layer">
<rect x="50" y="200" width="630" height="160" fill="#E8F5E9" stroke="#50C878" stroke-width="2" rx="8" filter="url(#shadow)"/>
<text x="70" y="225" font-size="14" font-weight="bold" fill="#2E7D32">CONFIGURATION LAYER</text>
<!-- Nickel Schemas -->
<rect x="100" y="245" width="150" height="50" fill="#50C878" stroke="#2E7D32" stroke-width="2" rx="4"/>
<text x="175" y="265" font-size="11" font-weight="bold" text-anchor="middle" fill="white">Nickel Schemas</text>
<text x="175" y="280" font-size="9" text-anchor="middle" fill="white">(Validation)</text>
<!-- Config Validator -->
<rect x="280" y="245" width="150" height="50" fill="#50C878" stroke="#2E7D32" stroke-width="2" rx="4"/>
<text x="355" y="265" font-size="11" font-weight="bold" text-anchor="middle" fill="white">Config Validator</text>
<text x="355" y="280" font-size="9" text-anchor="middle" fill="white">(Nickel Engine)</text>
<!-- TOML Generator -->
<rect x="460" y="245" width="150" height="50" fill="#50C878" stroke="#2E7D32" stroke-width="2" rx="4"/>
<text x="535" y="265" font-size="11" font-weight="bold" text-anchor="middle" fill="white">TOML Generator</text>
<text x="535" y="280" font-size="9" text-anchor="middle" fill="white">(Defaults)</text>
<!-- Validated Config -->
<rect x="100" y="310" width="510" height="35" fill="#A5D6A7" stroke="#2E7D32" stroke-width="2" rx="4"/>
<text x="355" y="332" font-size="11" font-weight="bold" text-anchor="middle" fill="#1B5E20">Validated Configuration</text>
</g>
<!-- CAPA 3: WORKSPACE RUNTIME (Naranja) -->
<g id="workspace-layer">
<rect x="720" y="200" width="630" height="160" fill="#FFF3E0" stroke="#FF8C42" stroke-width="2" rx="8" filter="url(#shadow)"/>
<text x="740" y="225" font-size="14" font-weight="bold" fill="#E65100">WORKSPACE RUNTIME</text>
<!-- Workspace Manager -->
<rect x="770" y="245" width="160" height="50" fill="#FF8C42" stroke="#E65100" stroke-width="2" rx="4"/>
<text x="850" y="265" font-size="11" font-weight="bold" text-anchor="middle" fill="white">Workspace Manager</text>
<text x="850" y="280" font-size="9" text-anchor="middle" fill="white">(Selection)</text>
<!-- Context Loader -->
<rect x="960" y="245" width="160" height="50" fill="#FF8C42" stroke="#E65100" stroke-width="2" rx="4"/>
<text x="1040" y="265" font-size="11" font-weight="bold" text-anchor="middle" fill="white">Context Loader</text>
<text x="1040" y="280" font-size="9" text-anchor="middle" fill="white">(Environment)</text>
<!-- Active Workspace -->
<rect x="1150" y="245" width="160" height="50" fill="#FF8C42" stroke="#E65100" stroke-width="2" rx="4"/>
<text x="1230" y="265" font-size="11" font-weight="bold" text-anchor="middle" fill="white">Active Workspace</text>
<text x="1230" y="280" font-size="9" text-anchor="middle" fill="white">(Operations)</text>
<!-- Workspace Context -->
<rect x="770" y="310" width="540" height="35" fill="#FFCC80" stroke="#E65100" stroke-width="2" rx="4"/>
<text x="1040" y="332" font-size="11" font-weight="bold" text-anchor="middle" fill="#BF360C">Current Workspace Context</text>
</g>
<!-- CAPA 4: CORE SYSTEM (Verde) -->
<g id="core-layer">
<rect x="50" y="390" width="630" height="180" fill="#E8F5E9" stroke="#50C878" stroke-width="2" rx="8" filter="url(#shadow)"/>
<text x="70" y="415" font-size="14" font-weight="bold" fill="#2E7D32">CORE SYSTEM</text>
<!-- CLI Components -->
<rect x="100" y="435" width="120" height="50" fill="#50C878" stroke="#2E7D32" stroke-width="2" rx="4"/>
<text x="160" y="455" font-size="11" font-weight="bold" text-anchor="middle" fill="white">CLI</text>
<text x="160" y="468" font-size="9" text-anchor="middle" fill="white">Commands</text>
<!-- Libraries -->
<rect x="240" y="435" width="120" height="50" fill="#50C878" stroke="#2E7D32" stroke-width="2" rx="4"/>
<text x="300" y="455" font-size="11" font-weight="bold" text-anchor="middle" fill="white">Libraries</text>
<text x="300" y="468" font-size="9" text-anchor="middle" fill="white">Core Utils</text>
<!-- Plugins -->
<rect x="380" y="435" width="120" height="50" fill="#50C878" stroke="#2E7D32" stroke-width="2" rx="4"/>
<text x="440" y="455" font-size="11" font-weight="bold" text-anchor="middle" fill="white">Plugins</text>
<text x="440" y="468" font-size="9" text-anchor="middle" fill="white">Extensibility</text>
<!-- Scripts -->
<rect x="520" y="435" width="120" height="50" fill="#50C878" stroke="#2E7D32" stroke-width="2" rx="4"/>
<text x="580" y="455" font-size="11" font-weight="bold" text-anchor="middle" fill="white">Scripts</text>
<text x="580" y="468" font-size="9" text-anchor="middle" fill="white">Automation</text>
<!-- Batch Workflow Engine -->
<rect x="100" y="505" width="540" height="50" fill="#66BB6A" stroke="#2E7D32" stroke-width="2" rx="4"/>
<text x="370" y="525" font-size="12" font-weight="bold" text-anchor="middle" fill="white">Batch Workflow Engine</text>
<text x="370" y="540" font-size="9" text-anchor="middle" fill="white">(Submit → Queue → Execute → Status)</text>
</g>
<!-- CAPA 5: PLATFORM LAYER (Verde) -->
<g id="platform-layer">
<rect x="720" y="390" width="630" height="180" fill="#E8F5E9" stroke="#50C878" stroke-width="2" rx="8" filter="url(#shadow)"/>
<text x="740" y="415" font-size="14" font-weight="bold" fill="#2E7D32">PLATFORM LAYER</text>
<!-- Orchestrator -->
<rect x="770" y="435" width="250" height="50" fill="#50C878" stroke="#2E7D32" stroke-width="2" rx="4"/>
<text x="895" y="455" font-size="12" font-weight="bold" text-anchor="middle" fill="white">Orchestrator</text>
<text x="895" y="470" font-size="9" text-anchor="middle" fill="white">(Workflow Coordination)</text>
<!-- Control Center -->
<rect x="1050" y="435" width="120" height="50" fill="#50C878" stroke="#2E7D32" stroke-width="2" rx="4"/>
<text x="1110" y="450" font-size="11" font-weight="bold" text-anchor="middle" fill="white">Control</text>
<text x="1110" y="463" font-size="11" font-weight="bold" text-anchor="middle" fill="white">Center</text>
<!-- MCP Server -->
<rect x="1190" y="435" width="120" height="50" fill="#50C878" stroke="#2E7D32" stroke-width="2" rx="4"/>
<text x="1250" y="450" font-size="11" font-weight="bold" text-anchor="middle" fill="white">MCP</text>
<text x="1250" y="463" font-size="11" font-weight="bold" text-anchor="middle" fill="white">Server</text>
<!-- Installer -->
<rect x="770" y="505" width="250" height="50" fill="#66BB6A" stroke="#2E7D32" stroke-width="2" rx="4"/>
<text x="895" y="525" font-size="11" font-weight="bold" text-anchor="middle" fill="white">Installer</text>
<text x="895" y="540" font-size="9" text-anchor="middle" fill="white">(System Bootstrap)</text>
<!-- Execution Engine -->
<rect x="1050" y="505" width="260" height="50" fill="#66BB6A" stroke="#2E7D32" stroke-width="2" rx="4"/>
<text x="1180" y="525" font-size="11" font-weight="bold" text-anchor="middle" fill="white">Execution Engine</text>
<text x="1180" y="540" font-size="9" text-anchor="middle" fill="white">(Task Runner)</text>
</g>
<!-- CAPA 6: EXTENSIONS LAYER (Rojo) -->
<g id="extensions-layer">
<rect x="50" y="600" width="1300" height="150" fill="#FFEBEE" stroke="#E74C3C" stroke-width="2" rx="8" filter="url(#shadow)"/>
<text x="70" y="625" font-size="14" font-weight="bold" fill="#C62828">EXTENSIONS LAYER</text>
<!-- Providers -->
<rect x="100" y="645" width="130" height="50" fill="#E74C3C" stroke="#C62828" stroke-width="2" rx="4"/>
<text x="165" y="665" font-size="11" font-weight="bold" text-anchor="middle" fill="white">Providers</text>
<text x="165" y="678" font-size="9" text-anchor="middle" fill="white">(AWS, Azure, GCP)</text>
<!-- Task Services -->
<rect x="250" y="645" width="130" height="50" fill="#E74C3C" stroke="#C62828" stroke-width="2" rx="4"/>
<text x="315" y="665" font-size="11" font-weight="bold" text-anchor="middle" fill="white">TaskServs</text>
<text x="315" y="678" font-size="9" text-anchor="middle" fill="white">(HPC, Batch)</text>
<!-- Clusters -->
<rect x="400" y="645" width="130" height="50" fill="#E74C3C" stroke="#C62828" stroke-width="2" rx="4"/>
<text x="465" y="665" font-size="11" font-weight="bold" text-anchor="middle" fill="white">Clusters</text>
<text x="465" y="678" font-size="9" text-anchor="middle" fill="white">(K8s, Docker)</text>
<!-- AWS Provider -->
<rect x="550" y="645" width="100" height="50" fill="#EF5350" stroke="#C62828" stroke-width="2" rx="4"/>
<text x="600" y="665" font-size="10" font-weight="bold" text-anchor="middle" fill="white">AWS</text>
<text x="600" y="678" font-size="8" text-anchor="middle" fill="white">Plugin</text>
<!-- Azure Provider -->
<rect x="670" y="645" width="100" height="50" fill="#EF5350" stroke="#C62828" stroke-width="2" rx="4"/>
<text x="720" y="665" font-size="10" font-weight="bold" text-anchor="middle" fill="white">Azure</text>
<text x="720" y="678" font-size="8" text-anchor="middle" fill="white">Plugin</text>
<!-- K8s Provider -->
<rect x="790" y="645" width="100" height="50" fill="#EF5350" stroke="#C62828" stroke-width="2" rx="4"/>
<text x="840" y="665" font-size="10" font-weight="bold" text-anchor="middle" fill="white">K8s</text>
<text x="840" y="678" font-size="8" text-anchor="middle" fill="white">Plugin</text>
<!-- GCP Provider -->
<rect x="910" y="645" width="100" height="50" fill="#EF5350" stroke="#C62828" stroke-width="2" rx="4"/>
<text x="960" y="665" font-size="10" font-weight="bold" text-anchor="middle" fill="white">GCP</text>
<text x="960" y="678" font-size="8" text-anchor="middle" fill="white">Plugin</text>
<!-- OnPrem -->
<rect x="1030" y="645" width="100" height="50" fill="#EF5350" stroke="#C62828" stroke-width="2" rx="4"/>
<text x="1080" y="665" font-size="10" font-weight="bold" text-anchor="middle" fill="white">OnPrem</text>
<text x="1080" y="678" font-size="8" text-anchor="middle" fill="white">Plugin</text>
<!-- Custom -->
<rect x="1150" y="645" width="100" height="50" fill="#EF5350" stroke="#C62828" stroke-width="2" rx="4"/>
<text x="1200" y="665" font-size="10" font-weight="bold" text-anchor="middle" fill="white">Custom</text>
<text x="1200" y="678" font-size="8" text-anchor="middle" fill="white">Plugins</text>
</g>
<!-- CAPA 7: INFRASTRUCTURE (Rojo) -->
<g id="infrastructure-layer">
<rect x="50" y="780" width="1300" height="100" fill="#FFEBEE" stroke="#E74C3C" stroke-width="2" rx="8" filter="url(#shadow)"/>
<text x="70" y="805" font-size="14" font-weight="bold" fill="#C62828">INFRASTRUCTURE DEPLOYMENT</text>
<!-- Cloud Services -->
<rect x="100" y="825" width="200" height="40" fill="#E74C3C" stroke="#C62828" stroke-width="2" rx="4"/>
<text x="200" y="849" font-size="11" font-weight="bold" text-anchor="middle" fill="white">Cloud Services (AWS/Azure/GCP)</text>
<!-- Kubernetes -->
<rect x="330" y="825" width="180" height="40" fill="#E74C3C" stroke="#C62828" stroke-width="2" rx="4"/>
<text x="420" y="849" font-size="11" font-weight="bold" text-anchor="middle" fill="white">Kubernetes Clusters</text>
<!-- HPC -->
<rect x="540" y="825" width="150" height="40" fill="#E74C3C" stroke="#C62828" stroke-width="2" rx="4"/>
<text x="615" y="849" font-size="11" font-weight="bold" text-anchor="middle" fill="white">HPC/Batch Systems</text>
<!-- On-Premises -->
<rect x="720" y="825" width="150" height="40" fill="#E74C3C" stroke="#C62828" stroke-width="2" rx="4"/>
<text x="795" y="849" font-size="11" font-weight="bold" text-anchor="middle" fill="white">On-Premises</text>
<!-- Monitoring -->
<rect x="900" y="825" width="180" height="40" fill="#EF5350" stroke="#C62828" stroke-width="2" rx="4"/>
<text x="990" y="849" font-size="11" font-weight="bold" text-anchor="middle" fill="white">Monitoring &amp; Logging</text>
<!-- Status Feedback -->
<rect x="1110" y="825" width="200" height="40" fill="#EF5350" stroke="#C62828" stroke-width="2" rx="4"/>
<text x="1210" y="849" font-size="11" font-weight="bold" text-anchor="middle" fill="white">Status &amp; Feedback Loop</text>
</g>
<!-- FLUJOS PRINCIPALES -->
<!-- Flujo 1: User Input → CLI → Core (Azul) -->
<path d="M 220 133 L 260 133" stroke="#4A90E2" stroke-width="3" fill="none" marker-end="url(#arrowblue)"/>
<path d="M 320 155 L 320 390" stroke="#4A90E2" stroke-width="3" fill="none" marker-end="url(#arrowblue)"/>
<circle cx="235" cy="120" r="15" fill="#4A90E2" stroke="white" stroke-width="2"/>
<text x="235" y="125" font-size="12" font-weight="bold" text-anchor="middle" fill="white">1</text>
<!-- Flujo 2: Config Resolution (Verde) -->
<path d="M 490 155 L 490 200" stroke="#50C878" stroke-width="3" fill="none" marker-end="url(#arrowgreen)"/>
<path d="M 250 270 L 280 270" stroke="#50C878" stroke-width="3" fill="none" marker-end="url(#arrowgreen)"/>
<path d="M 430 270 L 460 270" stroke="#50C878" stroke-width="3" fill="none" marker-end="url(#arrowgreen)"/>
<circle cx="505" cy="180" r="15" fill="#50C878" stroke="white" stroke-width="2"/>
<text x="505" y="185" font-size="12" font-weight="bold" text-anchor="middle" fill="white">2</text>
<!-- Flujo 3: Batch Workflow (Verde) -->
<path d="M 370 390 L 370 365 L 895 365 L 895 435" stroke="#50C878" stroke-width="3" fill="none" marker-end="url(#arrowgreen)"/>
<circle cx="620" cy="365" r="15" fill="#50C878" stroke="white" stroke-width="2"/>
<text x="620" y="370" font-size="12" font-weight="bold" text-anchor="middle" fill="white">3</text>
<!-- Flujo 4: Infrastructure Deployment (Rojo) -->
<path d="M 355 345 L 355 600" stroke="#E74C3C" stroke-width="3" fill="none" marker-end="url(#arrowred)"/>
<path d="M 465 695 L 465 780" stroke="#E74C3C" stroke-width="3" fill="none" marker-end="url(#arrowred)"/>
<circle cx="355" cy="475" r="15" fill="#E74C3C" stroke="white" stroke-width="2"/>
<text x="355" y="480" font-size="12" font-weight="bold" text-anchor="middle" fill="white">4</text>
<!-- Flujo 5: Workspace Switching (Naranja) -->
<path d="M 850 245 L 960 245" stroke="#FF8C42" stroke-width="3" fill="none" marker-end="url(#arroworange)"/>
<path d="M 1120 270 L 1150 270" stroke="#FF8C42" stroke-width="3" fill="none" marker-end="url(#arroworange)"/>
<path d="M 1040 345 L 1040 390" stroke="#FF8C42" stroke-width="3" fill="none" marker-end="url(#arroworange)"/>
<circle cx="905" cy="230" r="15" fill="#FF8C42" stroke="white" stroke-width="2"/>
<text x="905" y="235" font-size="12" font-weight="bold" text-anchor="middle" fill="white">5</text>
<!-- Feedback Loop -->
<path d="M 1210 825 L 1210 750 L 1330 750 L 1330 133 L 380 133" stroke="#E74C3C" stroke-width="2" stroke-dasharray="5,5" fill="none" marker-end="url(#arrowred)"/>
<!-- Orchestrator to Extensions -->
<path d="M 895 485 L 895 600" stroke="#50C878" stroke-width="3" fill="none" marker-end="url(#arrowgreen)"/>
<!-- Leyenda -->
<g id="legend">
<rect x="50" y="920" width="500" height="70" fill="white" stroke="#2C3E50" stroke-width="2" rx="4" filter="url(#shadow)"/>
<text x="65" y="940" font-size="12" font-weight="bold" fill="#2C3E50">LEYENDA DE FLUJOS:</text>
<line x1="70" y1="955" x2="120" y2="955" stroke="#4A90E2" stroke-width="3" marker-end="url(#arrowblue)"/>
<text x="130" y="960" font-size="10" fill="#2C3E50">User Input</text>
<line x1="230" y1="955" x2="280" y2="955" stroke="#50C878" stroke-width="3" marker-end="url(#arrowgreen)"/>
<text x="290" y="960" font-size="10" fill="#2C3E50">Processing</text>
<line x1="70" y1="975" x2="120" y2="975" stroke="#E74C3C" stroke-width="3" marker-end="url(#arrowred)"/>
<text x="130" y="980" font-size="10" fill="#2C3E50">Cloud/Providers</text>
<line x1="230" y1="975" x2="280" y2="975" stroke="#FF8C42" stroke-width="3" marker-end="url(#arroworange)"/>
<text x="290" y="980" font-size="10" fill="#2C3E50">Workspace</text>
<line x1="390" y1="965" x2="440" y2="965" stroke="#E74C3C" stroke-width="2" stroke-dasharray="5,5" marker-end="url(#arrowred)"/>
<text x="450" y="970" font-size="10" fill="#2C3E50">Feedback Loop</text>
</g>
<!-- Notas de Flujos -->
<g id="flow-notes">
<rect x="600" y="920" width="750" height="70" fill="white" stroke="#2C3E50" stroke-width="2" rx="4" filter="url(#shadow)"/>
<text x="615" y="940" font-size="12" font-weight="bold" fill="#2C3E50">FLUJOS NUMERADOS:</text>
<text x="615" y="957" font-size="9" fill="#2C3E50">❶ User Input → CLI → Core System</text>
<text x="615" y="972" font-size="9" fill="#2C3E50">❷ User Config → Nickel Validation → TOML Generation</text>
<text x="615" y="987" font-size="9" fill="#2C3E50">❸ Batch Submit → Orchestrator → Execution → Status</text>
<text x="975" y="957" font-size="9" fill="#2C3E50">❹ Config → Provider Extensions → Cloud/K8s</text>
<text x="975" y="972" font-size="9" fill="#2C3E50">❺ Workspace Selection → Context → Operations</text>
</g>
</svg>