provisioning-outreach/presentations/rust-laspalmas-250926/_slideds.md

634 lines
15 KiB
Markdown
Raw Normal View History

---
theme: seriph
background: https://source.unsplash.com/1920x1080/?rust,technology
class: text-center
highlighter: prism
lineNumbers: true
info: |
## Cloud Native Provisioning
Nushell + KCL + Rust Ecosystem
Rust Meetup 2025
drawings:
enabled: true
persist: false
transition: slide-left
title: Cloud Native Provisioning - Rust Ecosystem
mdc: true
---
# Cloud Native Provisioning
## Nushell + KCL + Rust Ecosystem
Infrastructure as Code con tipos, AI, y herramientas Rust
<div class="pt-12">
<span @click="$slidev.nav.next" class="px-2 py-1 rounded cursor-pointer" hover="bg-white bg-opacity-10">
Press Space for next page <carbon:arrow-right class="inline"/>
</span>
</div>
<div class="abs-br m-6 flex gap-2">
<button @click="$slidev.nav.openInEditor()" title="Open in Editor" class="text-xl slidev-icon-btn opacity-50 !border-none !hover:text-white">
<carbon:edit />
</button>
<a href="https://github.com/JesusPerezLorenzo/provisioning" target="_blank" alt="GitHub"
class="text-xl slidev-icon-btn opacity-50 !border-none !hover:text-white">
<carbon-logo-github />
</a>
</div>
---
transition: fade-out
layout: default
---
# ¿Quién soy?
<div class="flex gap-8 items-center">
<div class="flex-1">
<h2>Jesús Pérez Lorenzo</h2>
<ul>
<li>🦀 Senior Rust Developer</li>
<li>☁️ Cloud Native Architect</li>
<li>🏗️ Infrastructure as Code enthusiast</li>
<li>🚀 Open Source contributor</li>
</ul>
</div>
<div class="flex-1">
<img src="/assets/profile.png" class="rounded-full w-48 h-48 mx-auto" alt="Profile"/>
</div>
</div>
---
layout: default
---
# El Problema
<div class="grid grid-cols-2 gap-8">
<div>
<h2>🔧 Herramientas Actuales</h2>
<ul>
<li><strong>Terraform</strong>: HCL sin tipos fuertes</li>
<li><strong>Ansible</strong>: YAML frágil</li>
<li><strong>CloudFormation</strong>: JSON/YAML verboso</li>
<li><strong>Pulumi</strong>: Mejor, pero limitado</li>
</ul>
</div>
<div>
<h2>🚨 Problemas Reales</h2>
<ul>
<li>Errores en runtime, no en compile time</li>
<li>Debugging complejo</li>
<li>Reutilización limitada</li>
<li>Sin integración con AI</li>
<li>Configuración como texto plano</li>
</ul>
</div>
</div>
<div class="mt-8 p-4 bg-red-100 rounded-lg">
💡 <strong>Necesitamos aplicar principios de Rust a infraestructura</strong>
</div>
---
layout: quote
---
# "Si Rust nos enseñó algo, es que los tipos nos salvan de errores costosos"
Apliquemos esto a infraestructura
---
layout: default
---
# Nuestra Filosofía
<div class="grid grid-cols-3 gap-6">
<div class="text-center">
<div class="text-6xl mb-4">🛡️</div>
<h3>Type Safety</h3>
<p>Errores capturados en compile time, no en production</p>
</div>
<div class="text-center">
<div class="text-6xl mb-4">🧩</div>
<h3>Composability</h3>
<p>Componentes reutilizables que se combinan naturalmente</p>
</div>
<div class="text-center">
<div class="text-6xl mb-4">🤖</div>
<h3>AI-First</h3>
<p>Lenguaje natural como interfaz principal</p>
</div>
</div>
<br>
<div class="text-center">
<h2>Infrastructure as Types</h2>
<p>No más YAML/JSON - Configuración con schemas y validación</p>
</div>
---
layout: default
---
# Stack Tecnológico
<div class="grid grid-cols-2 gap-8">
<div>
<h2>🐚 Nushell</h2>
<ul>
<li>Shell estructurado con tipos</li>
<li>Pipelines de datos, no texto</li>
<li>JSON/YAML nativo</li>
<li>Better error handling</li>
</ul>
<h2 class="mt-6">⚙️ KCL</h2>
<ul>
<li>Configuration Language con schemas</li>
<li>Validación en compile time</li>
<li>Composición y herencia</li>
<li>IDE support completo</li>
</ul>
</div>
<div>
<h2>🦀 Herramientas Rust</h2>
<ul>
<li><strong>youki</strong>: Container runtime OCI</li>
<li><strong>Cosmian KMS</strong>: Key management</li>
<li><strong>Polkadot/Substrate</strong>: Blockchain infra</li>
</ul>
<h2 class="mt-6">🤖 MCP Integration</h2>
<ul>
<li>Model Context Protocol</li>
<li>Claude Desktop integration</li>
<li>Natural language operations</li>
<li>AI-assisted troubleshooting</li>
</ul>
</div>
</div>
---
layout: default
---
# Arquitectura del Sistema
```rust
mermaid {theme: 'dark', scale: 0.8}
graph TB
User[👤 Usuario] --> AI[🤖 MCP Server]
User --> CLI[💻 Nushell CLI]
AI --> Core[🧠 Core System]
CLI --> Core
Core --> KCL[📋 KCL Schemas]
Core --> Providers[☁️ Providers]
Providers --> AWS[🌐 AWS]
Providers --> UpCloud[☁️ UpCloud]
Providers --> Local[🏠 Local]
Core --> TaskServs[⚙️ Task Services]
TaskServs --> K8s[🚢 Kubernetes]
TaskServs --> Youki[🦀 youki]
TaskServs --> KMS[🔐 Cosmian KMS]
Core --> Secrets[🔑 SOPS/Age]
style Core fill:#ff6b6b
style AI fill:#4ecdc4
style KCL fill:#45b7d1
style Youki fill:#f39c12
style KMS fill:#9b59b6
```
---
layout: center
class: text-center
---
# 🎬 Demo Time
Vamos a ver esto en acción
---
layout: default
---
# Demo 1: Provisioning Básico
```rust
nu {1|2-3|4-5|6-7}
# Crear nueva infraestructura
provisioning generate infra --new rust-meetup-demo
# Ver la configuración generada
provisioning show settings --infra rust-meetup-demo --out json
# Crear servidores (modo check primero)
provisioning server create --infra rust-meetup-demo --check
# Crear servidores reales
provisioning server create --infra rust-meetup-demo
```
<div class="mt-6 p-4 bg-blue-100 rounded-lg">
<strong>Ventaja</strong>: Tipos estructurados, mejor debugging, composición natural
</div>
---
layout: default
---
# Demo 2: MCP + AI Integration
<div class="grid grid-cols-2 gap-8">
<div>
<h3>Claude Desktop</h3>
<div class="bg-gray-100 p-4 rounded-lg text-sm">
<p><strong>Usuario:</strong> "Crea 3 servidores AWS con 4 CPU cada uno para un cluster Kubernetes de desarrollo"</p>
<br>
<p><strong>Claude:</strong> "Voy a crear esa infraestructura para ti..."</p>
<br>
<p class="text-green-600">✅ Servidores creados: k8s-master-01, k8s-worker-01, k8s-worker-02</p>
</div>
</div>
<div>
<h3>Comando ejecutado</h3>
```rust
nu
# Generado automáticamente por MCP
provisioning generate server \
--template aws-k8s-cluster \
--nodes 3 \
--cpu 4 \
--purpose development
provisioning server create \
--infra rust-meetup-demo \
--wait
```
</div>
</div>
<div class="mt-4 p-4 bg-green-100 rounded-lg">
🎯 <strong>Game Changer</strong>: Infraestructura desde lenguaje natural
</div>
---
layout: default
---
# Demo 3: Cosmian KMS vs SOPS
<div class="grid grid-cols-2 gap-6">
<div>
<h3>🔒 SOPS/Age (Traditional)</h3>
```rust
bash
# Setup manual
age-keygen -o key.txt
export SOPS_AGE_KEY_FILE=key.txt
# Encriptar archivo
sops -e -i secrets.yaml
# Editar (complejo)
sops secrets.yaml
```
</div>
<div>
<h3>🦀 Cosmian KMS (Rust-powered)</h3>
```rust
nu
# Configuración en KCL
secret_provider = {
provider = "kms"
kms_config = {
server_url = "https://kms.local"
auth_method = "certificate"
}
}
# Uso natural
provisioning sops config.yaml
provisioning taskserv update secrets --rotate
```
</div>
</div>
**Ventajas Cosmian KMS:**
- 🏢 Enterprise-ready con audit logs
- 🔄 Rotación automática de claves
- 🛡️ Zero-knowledge encryption
- ⚡ Performance nativa Rust
---
layout: default
---
# Demo 4: Cross-Compilation
```rust
bash {1|3-9|11-16|18-20}
#!/bin/bash
# Auto-detección de arquitectura
detect_arch() {
case $(uname -m) in
x86_64) echo "x86_64-unknown-linux-gnu" ;;
aarch64|arm64) echo "aarch64-unknown-linux-gnu" ;;
*) echo "unsupported" ;;
esac
}
# Build para múltiples targets
cross build --release --target x86_64-unknown-linux-gnu
cross build --release --target aarch64-unknown-linux-gnu
# Packaging inteligente
tar czf provisioning-x86_64.tar.gz target/x86_64-unknown-linux-gnu/release/
tar czf provisioning-aarch64.tar.gz target/aarch64-unknown-linux-gnu/release/
# Deploy automático según arquitectura del servidor
provisioning server deploy --auto-arch
```
**¿Por qué Cross-Compilation?**
- 💰 ARM instances 20% más baratas
- 🔌 Edge computing y IoT
- ⚡ Performance nativa vs containers
---
layout: default
---
# Comparativa Real
<div class="grid grid-cols-4 gap-4 text-sm">
<div class="font-bold">Característica</div>
<div class="font-bold">Nuestro Sistema</div>
<div class="font-bold">Terraform</div>
<div class="font-bold">Ansible</div>
<div>Type Safety</div>
<div class="text-green-600">✅ Full</div>
<div class="text-yellow-600">⚠️ Partial</div>
<div class="text-red-600">❌ No</div>
<div>AI Integration</div>
<div class="text-green-600">✅ Native MCP</div>
<div class="text-red-600">❌ No</div>
<div class="text-red-600">❌ No</div>
<div>Multi-arch</div>
<div class="text-green-600">✅ Built-in</div>
<div class="text-yellow-600">⚠️ Manual</div>
<div class="text-yellow-600">⚠️ Manual</div>
<div>Performance</div>
<div class="text-green-600">✅ Rust-optimized</div>
<div class="text-yellow-600">⚠️ Good</div>
<div class="text-yellow-600">⚠️ Python</div>
<div>Debug Experience</div>
<div class="text-green-600">✅ Excellent</div>
<div class="text-yellow-600">⚠️ OK</div>
<div class="text-red-600">❌ Poor</div>
<div>Learning Curve</div>
<div class="text-yellow-600">⚠️ Steep</div>
<div class="text-yellow-600">⚠️ Moderate</div>
<div class="text-green-600">✅ Easy</div>
</div>
<div class="mt-6 p-4 bg-blue-100 rounded-lg">
💡 <strong>Trade-off</strong>: Curva de aprendizaje más alta, pero mejor mantainability a largo plazo
</div>
---
layout: default
---
# Casos de Uso Reales
<div class="grid grid-cols-2 gap-8">
<div>
<h3>✅ Ideal Para:</h3>
<ul>
<li>🚀 <strong>Startups tech-forward</strong><br>Equipos que valoran innovación</li>
<li>🔬 <strong>Proyectos greenfield</strong><br>Sin legacy infrastructure</li>
<li>🌐 <strong>Multi-cloud desde día 1</strong><br>Evitar vendor lock-in</li>
<li>🤖 <strong>DevOps automatizado</strong><br>AI-assisted operations</li>
</ul>
</div>
<div>
<h3>⚠️ Considerar Antes:</h3>
<ul>
<li>🏢 <strong>Empresas tradicionales</strong><br>Resistencia al cambio</li>
<li>🔧 <strong>Legacy systems</strong><br>Migración compleja</li>
<li>👥 <strong>Equipos grandes</strong><br>Training overhead</li>
<li>📅 <strong>Deadlines ajustados</strong><br>Tiempo de adopción</li>
</ul>
</div>
</div>
---
layout: default
---
# Roadmap y Futuro
<div class="grid grid-cols-3 gap-6">
<div>
<h3>🎯 Corto Plazo (3-6 meses)</h3>
<ul>
<li>Más providers (GCP, Azure)</li>
<li>Task services adicionales</li>
<li>Improved MCP tools</li>
<li>Documentation & tutorials</li>
</ul>
</div>
<div>
<h3>🚀 Medio Plazo (6-12 meses)</h3>
<ul>
<li>Web UI para gestión</li>
<li>Terraform import/export</li>
<li>Enterprise features</li>
<li>CI/CD integrations</li>
</ul>
</div>
<div>
<h3>🌟 Largo Plazo (1+ años)</h3>
<ul>
<li>SaaS offering</li>
<li>Marketplace de components</li>
<li>Advanced AI features</li>
<li>Industry partnerships</li>
</ul>
</div>
</div>
---
layout: default
---
# ¿Tiene Sentido Este Enfoque?
<div class="grid grid-cols-2 gap-8">
<div class="bg-green-100 p-6 rounded-lg">
<h3 class="text-green-800">✅ Pros</h3>
<ul class="text-green-700">
<li><strong>Type Safety</strong>: Errores capturados temprano</li>
<li><strong>Better DX</strong>: Mejor debugging y IDE support</li>
<li><strong>AI Integration</strong>: Natural language ops</li>
<li><strong>Performance</strong>: Rust-optimized tools</li>
<li><strong>Composability</strong>: Reutilización real</li>
<li><strong>Future-proof</strong>: Multi-arch, cloud-agnostic</li>
</ul>
</div>
<div class="bg-red-100 p-6 rounded-lg">
<h3 class="text-red-800">⚠️ Contras</h3>
<ul class="text-red-700">
<li><strong>Learning Curve</strong>: Nushell + KCL nuevos</li>
<li><strong>Ecosystem</strong>: Más pequeño que Terraform</li>
<li><strong>Enterprise Adoption</strong>: Tiempo para madurar</li>
<li><strong>Team Training</strong>: Inversión inicial</li>
<li><strong>Breaking Changes</strong>: Pre-v1.0 instability</li>
</ul>
</div>
</div>
<div class="mt-6 text-center">
<h3>🎯 Respuesta: Depende de tu contexto</h3>
<p>Para equipos innovadores con tiempo para invertir: <strong>Absolutamente sí</strong></p>
</div>
---
layout: default
---
# Contribuir al Proyecto
<div class="grid grid-cols-2 gap-8">
<div>
<h3>🛠️ Áreas de Contribución</h3>
<ul>
<li><strong>Providers</strong>: GCP, Azure, más clouds</li>
<li><strong>Task Services</strong>: Databases, monitoring</li>
<li><strong>MCP Tools</strong>: Más AI capabilities</li>
<li><strong>Documentation</strong>: Tutorials, examples</li>
<li><strong>Testing</strong>: Multi-arch, edge cases</li>
</ul>
</div>
<div>
<h3>🏁 Getting Started</h3>
```rust
bash
# Clonar repo
git clone <repository-url>
cd provisioning
# Setup dev environment
./setup/dev-install.sh
# Ejecutar tests
nu test_config.nu
# Contribuir
# 1. Fork & branch
# 2. Implement & test
# 3. PR with good description
```
</div>
</div>
<div class="mt-6 text-center">
<p><strong>¡La comunidad Rust es perfecta para este tipo de herramientas!</strong></p>
</div>
---
layout: center
class: text-center
---
# 🙏 Gracias
## ¿Preguntas?
<div class="grid grid-cols-3 gap-8 mt-12">
<div>
<h3>🔗 Links</h3>
<ul class="text-sm">
<li>GitHub: <a href="#">/provisioning</a></li>
<li>Docs: <a href="#">/docs</a></li>
<li>Demo: <a href="#">/talks</a></li>
</ul>
</div>
<div>
<h3>📧 Contacto</h3>
<ul class="text-sm">
<li>Email: jesus@example.com</li>
<li>Twitter: @jesusperez</li>
<li>LinkedIn: /in/jesusperez</li>
</ul>
</div>
<div>
<h3>🤝 Comunidad</h3>
<ul class="text-sm">
<li>Discord: #provisioning</li>
<li>Issues: GitHub Issues</li>
<li>Discussions: GitHub Discussions</li>
</ul>
</div>
</div>
---
layout: end
---
# Bonus: Live Q&A
¿Qué te gustaría ver en el proyecto?
¿Algún caso de uso específico?
¿Dudas sobre implementación?
<div class="text-center mt-12">
<p class="text-2xl">🦀 ❤️ ☁️</p>
<p>Rust + Cloud = Mejor DevOps</p>
</div>