> For the complete documentation index, see [llms.txt](https://docs.verge.io/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.verge.io/learn-the-platform/es/modulo-7-multiinquilinato/03-tenant-recipes.md).

# Recetas de inquilino

## ¿Qué son las recetas de inquilino?

Las recetas de inquilino transforman un inquilino configurado manualmente en un **plantilla de implementación reutilizable de un clic**. Una sola receta de inquilino puede automatizar la creación de un Centro de Datos Virtual completo, incluidas la configuración del inquilino, la configuración de red, las reglas del firewall, las máquinas virtuales incluidas, credenciales aleatorizadas, registro DNS/DHCP y notificaciones por correo electrónico, todo a partir del envío de un único formulario.

```mermaid
flowchart LR
    BASE["Inquilino base<br/>(apagado)"] --> RECIPE["Receta de inquilino<br/>+ preguntas"]
    RECIPE --> I1["Instancia de inquilino A"]
    RECIPE --> I2["Instancia de inquilino B"]
    RECIPE --> I3["Instancia de inquilino C"]

    style BASE fill:#fff3e0,stroke:#e65100
    style RECIPE fill:#e8f5e9,stroke:#2e7d32
    style I1 fill:#e3f2fd,stroke:#1565c0
    style I2 fill:#e3f2fd,stroke:#1565c0
    style I3 fill:#e3f2fd,stroke:#1565c0
```

Donde el Asistente del Inquilino (tratado en la página anterior) lo guía a través de una configuración manual única, las recetas **codifican** esa configuración para que pueda repetirse cientos de veces con personalizaciones por instancia.

### ¿Por qué usar recetas de inquilino?

### Implementación rápida

Reduce el aprovisionamiento de inquilinos de horas de configuración manual a minutos de implementación automatizada.

### Consistencia y cumplimiento

Cada instancia de inquilino sigue la misma línea base de imagen dorada: red, reglas de firewall, VM y políticas son idénticas.

### Menos errores humanos

La automatización elimina las configuraciones incorrectas que se cuelan durante la configuración manual repetitiva.

### Habilitación de autoservicio

Combinadas con la API, las recetas impulsan portales orientados al cliente donde los usuarios finales aprovisionan sus propios VDC.

## Preparación del inquilino base

Toda receta de inquilino comienza con un **inquilino base** que sirve como plantilla. Este inquilino debe ser:

1. **Apagado** — el sistema de recetas captura el estado del inquilino, por lo que no debe estar en ejecución
2. **Dedicado al uso de recetas** — no use un inquilino de producción como base. Si desea basar una receta en un inquilino existente, clónelo primero y elimine los datos específicos del cliente (contraseñas, nombres de usuario, archivos del cliente)
3. **Totalmente configurado** — incluya todas las redes, VM, reglas del firewall, configuraciones DHCP/DNS y cualquier otra configuración que deba aparecer en cada instancia

Piense en el inquilino base como una **imagen dorada** para un centro de datos completo, no solo para una sola VM.

## Creación de una receta de inquilino

### Proceso paso a paso

1. Construya y configure el inquilino base con todas las configuraciones, redes y VM deseadas
2. Apague el inquilino base
3. Vaya a **Repositorios > Recetas de inquilino** en la interfaz de VergeOS
4. Haga clic en **Nuevo** en el menú de la izquierda
5. Configure los campos de la receta (vea abajo)
6. Haga clic en **Enviar** para guardar — el panel de la receta se abre para personalizar las preguntas

### Campos de la receta

| Campo                          | Descripción                                                     | Notas                                                                                                                                                                                                        |
| ------------------------------ | --------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| **Nombre**                     | Nombre descriptivo para la receta                               | Ayuda a los usuarios a encontrar la receta correcta cuando hay varias disponibles                                                                                                                            |
| **Descripción**                | Documentación opcional para la receta                           | Buen lugar para pautas de uso, propósito previsto y notas de cumplimiento                                                                                                                                    |
| **Icono**                      | Icono opcional de Font Awesome                                  | Identificador visual para distinguir tipos de receta (por ejemplo, `fa-cloud`, `fa-database`)                                                                                                                |
| **Catálogo**                   | El catálogo en el que almacenar la receta                       | Debe ser un catálogo en un repositorio local — las recetas no se pueden crear directamente en repositorios remotos/Marketplace. Vea [Intercambio de recetas](#recipe-exchange-sharing-between-systems) abajo |
| **Inquilino**                  | El inquilino base que se usará como plantilla                   | Debe estar apagado                                                                                                                                                                                           |
| **Versión**                    | Número de versión de incremento automático                      | Comienza en `1.0.0`, incrementa a `1.0.0-1`, `1.0.0-2`, etc. Puede establecerse manualmente en `2.0.0` para cambios importantes                                                                              |
| **Conservar certificados SSL** | Copiar los certificados SSL del inquilino base a las instancias | Habilitar cuando el inquilino base tenga certificados preinstalados                                                                                                                                          |
| **Dependencias de versión**    | Requisitos de funciones de VergeOS                              | Evita que los sistemas remotos usen una receta que no pueden admitir                                                                                                                                         |

## Preguntas de la receta

Las preguntas son el corazón de una receta de inquilino. Capturan la entrada por instancia del operador (o de la base de datos de VergeOS) e inyectan esos valores en el nuevo inquilino durante la creación.

Cuando crea una receta de inquilino, VergeOS **genera automáticamente preguntas del sistema** organizadas en secciones. Muchas preguntas del sistema están deshabilitadas de forma predeterminada y deben habilitarse explícitamente si es necesario. Las preguntas del sistema no se pueden eliminar: solo habilitar o deshabilitar.

### Campos de pregunta

Cada pregunta — del sistema o personalizada — se configura con estos campos:

| Campo                             | Propósito                                                                                                                       |
| --------------------------------- | ------------------------------------------------------------------------------------------------------------------------------- |
| **Sección**                       | Agrupa las preguntas en el formulario de entrada (algunas se crean automáticamente, se pueden agregar secciones personalizadas) |
| **Nombre**                        | Nombre de variable al que se hace referencia en scripts — solo alfanumérico, sin espacios ni caracteres especiales              |
| **Tipo**                          | Cómo se recopilan los datos — campo de entrada del usuario, búsqueda en base de datos, valor oculto, etc.                       |
| **Orden**                         | Orden de visualización dentro de la sección                                                                                     |
| **Mostrar**                       | Etiqueta mostrada en el formulario de entrada del usuario                                                                       |
| **Valor predeterminado**          | Respuesta prellenada (opcional)                                                                                                 |
| **Validación mediante regex**     | Expresión regular para validación de entrada (opcional)                                                                         |
| **Texto de marcador de posición** | Texto de sugerencia en gris que muestra el formato de entrada esperado (opcional)                                               |
| **Texto de ayuda emergente**      | Ventana emergente al pasar el cursor con texto de ayuda (opcional)                                                              |
| **Texto de nota**                 | Texto de ayuda mostrado directamente debajo del campo de entrada (opcional)                                                     |
| **Al cambiar**                    | JavaScript para mostrar/ocultar otras preguntas según el valor de este campo (opcional)                                         |

### Referencia de preguntas del sistema

Las siguientes tablas documentan las preguntas del sistema integradas generadas para cada receta de inquilino.

#### Sección del inquilino

Identidad principal del inquilino, credenciales de administrador y configuración SSL:

| Nombre de variable          | Etiqueta de visualización        | Tipo              | Predeterminado   | Habilitado de forma predeterminada |
| --------------------------- | -------------------------------- | ----------------- | ---------------- | ---------------------------------- |
| `YB_URL`                    | URL                              | Cadena            | —                | Sí                                 |
| `YB_DESCRIPTION`            | Descripción                      | Área de texto     | —                | Sí                                 |
| `YB_USER_NAME`              | Usuario administrador            | Cadena            | `admin`          | Sí                                 |
| `YB_USER_PASSWORD`          | Contraseña                       | Contraseña        | —                | Sí                                 |
| `YB_USER_EMAIL`             | Correo electrónico               | Cadena            | —                | No                                 |
| `YB_USER_CHANGE_PASSWORD`   | Requerir cambio de contraseña    | Booleano          | `false`          | No                                 |
| `YB_EXPOSE_CLOUD_SNAPSHOTS` | Exponer instantáneas del sistema | Booleano          | `true`           | No                                 |
| `YB_HELP_URL`               | URL de ayuda                     | Cadena            | `predeterminado` | No                                 |
| `YB_THEME_ACCESS`           | Acceso a temas                   | Lista             | `host_only`      | Sí                                 |
| `YB_SPECIFIED_THEME`        | Tema                             | Selección de fila | —                | Sí                                 |
| `YB_CLUSTER`                | Clúster                          | Clúster           | —                | No                                 |
| `YB_CERT_TYPE`              | Tipo de certificado SSL          | Oculto            | `manual`         | No                                 |
| `YB_CERT_DOMAIN`            | Dominio del certificado SSL      | Cadena            | —                | No                                 |
| `YB_CERT_PUBLIC`            | Certificado SSL público          | Área de texto     | —                | No                                 |
| `YB_CERT_PRIVATE`           | Certificado SSL privado          | Área de texto     | —                | No                                 |
| `YB_CERT_CHAIN`             | Cadena de certificado SSL        | Área de texto     | —                | No                                 |

#### Sección de nodos

Recursos de cómputo asignados a los nodos virtuales del inquilino:

| Nombre de variable           | Etiqueta de visualización                   | Tipo    | Predeterminado | Habilitado de forma predeterminada |
| ---------------------------- | ------------------------------------------- | ------- | -------------- | ---------------------------------- |
| `YB_NODE_1_CPU_CORES`        | Núcleos del nodo 1                          | Número  | `8`            | Sí                                 |
| `YB_NODE_1_RAM`              | RAM del nodo 1                              | RAM     | `16384`        | Sí                                 |
| `YB_NODE_1_INSTANCES`        | Instancias del nodo 1                       | Número  | `1`            | No                                 |
| `YB_NODE_1_CLUSTER`          | Clúster del nodo 1                          | Clúster | —              | No                                 |
| `YB_NODE_1_CLUSTER_FAILOVER` | Clúster de conmutación por error del nodo 1 | Clúster | —              | No                                 |

#### Sección de red

Direcciones de red para la interfaz de usuario del inquilino y la conectividad externa:

| Nombre de variable | Etiqueta de visualización              | Tipo                 | Predeterminado | Habilitado de forma predeterminada |
| ------------------ | -------------------------------------- | -------------------- | -------------- | ---------------------------------- |
| `YB_NET_1_IP`      | Dirección IP de la interfaz de usuario | Dirección IP virtual | —              | Sí                                 |
| `YB_NET_2_IP`      | Dirección IP                           | Dirección IP virtual | —              | Sí                                 |

{% hint style="success" %}
Estas son las preguntas predeterminadas del sistema a partir de VergeOS 26.1. Puede agregar preguntas personalizadas además de estas para capturar información adicional como fechas de vencimiento, nombres de host personalizados u otros valores específicos del inquilino.
{% endhint %}

## Preguntas personalizadas

Más allá de las preguntas del sistema, puede agregar **preguntas personalizadas** para capturar cualquier entrada adicional que requiera su implementación. Las preguntas personalizadas admiten los mismos tipos de campo que las preguntas del sistema, además de varios tipos de interacción con la base de datos (leer/escribir en cualquier objeto de VergeOS).

### Tipos comunes de preguntas

| Tipo                     | Propósito                                 | Ejemplo de uso                            |
| ------------------------ | ----------------------------------------- | ----------------------------------------- |
| **Cadena**               | Entrada de texto de una sola línea        | Nombre del cliente, nombre del host       |
| **Área de texto**        | Entrada de texto de varias líneas         | Notas, fragmentos de configuración        |
| **Contraseña**           | Entrada enmascarada con confirmación      | Contraseñas de cuentas de servicio        |
| **Número**               | Entrada numérica                          | Números de puerto, cantidad de instancias |
| **Booleano**             | Casilla de verificación (verdadero/falso) | Habilitar/deshabilitar funciones          |
| **Lista**                | Selección desplegable                     | Elegir entre opciones predefinidas        |
| **Oculto**               | No se muestra en el formulario            | Valores codificados para scripts          |
| **Red**                  | Selector de red                           | Elegir red de destino                     |
| **Dirección IP virtual** | Selector de dirección IP                  | Asignar IP específicas                    |
| **RAM**                  | Entrada de memoria (en MB)                | Asignación adicional de recursos          |
| **Clúster**              | Selector de clúster                       | Clúster de destino para la colocación     |

### Tipos de interacción con la base de datos

Estos tipos avanzados de preguntas permiten a las recetas **leer y escribir en la base de datos de VergeOS** durante la creación del inquilino, lo que permite flujos de trabajo de automatización como:

| Tipo                           | Propósito                                              | Ejemplo de uso                                               |
| ------------------------------ | ------------------------------------------------------ | ------------------------------------------------------------ |
| **Crear en la base de datos**  | Crear un nuevo registro en la base de datos de VergeOS | Registrar una reserva DHCP, crear una entrada DNS            |
| **Editar en la base de datos** | Modificar un registro existente en la base de datos    | Actualizar una configuración de red, cambiar un ajuste       |
| **Buscar en la base de datos** | Buscar valores en la base de datos                     | Recuperar la siguiente IP disponible, encontrar un ID de red |

Cada pregunta de base de datos incluye un **Contexto de la base de datos** campo que determina si la operación se dirige a **la base de datos del sistema principal** o a la **base de datos del inquilino recién creado**. Esta distinción es crítica:

* **Contexto principal:** Registrar la IP del inquilino en el DNS del host, crear una reserva DHCP en la red del host
* **Contexto del inquilino:** Configurar ajustes dentro del propio nuevo inquilino

{% hint style="info" %}
Las preguntas de interacción con la base de datos hacen referencia a las tablas API de VergeOS. Consulte la [Descripción de las tablas API](https://docs.verge.io/knowledge-base/api-tables-description) y [Guía de la API](https://docs.verge.io/knowledge-base/verge-api-guide) para los nombres de tabla, nombres de campo y sintaxis de filtro.
{% endhint %}

## Modificación y republicación de recetas

Cuando modifica una receta (cambia preguntas, actualiza el inquilino base, ajusta valores predeterminados), los cambios **no están disponibles de inmediato** para los usuarios. Debe **republicar** la receta:

1. Haga sus cambios en el panel de la receta (edite preguntas, actualice secciones, etc.)
2. Aparece un banner en la parte superior: *"La receta debe republicarse para que los cambios surtan efecto"*
3. Haga clic en **Republicar** (desde el enlace del banner o el menú izquierdo)
4. El número de versión se incrementa automáticamente (por ejemplo, `1.0.0-1` → `1.0.0-2`)

Cuando se republica una receta, **los sistemas remotos y los inquilinos con acceso** reciben una notificación de que hay una actualización disponible. Deben descargar explícitamente la actualización para usar la nueva versión.

### Instancias de receta

Una **instancia** es un inquilino que fue creado a partir de una receta y sigue asociado a ella. Puede ver todas las instancias desde el panel de la receta haciendo clic en **Instancias** en el menú izquierdo.

Reglas clave para las instancias:

* Una receta **no puede eliminarse** mientras tenga instancias asociadas
* Las instancias pueden ser **desvinculadas** de su receta para convertirse en inquilinos independientes
* Los inquilinos desvinculados pierden su asociación con la receta pero conservan toda la configuración

## Intercambio de recetas: compartición entre sistemas

Las recetas se organizan en **repositorios** y **catálogos**, formando una estructura jerárquica:

```mermaid
graph TD
    R["Repositorio"] --> C1["Catálogo A<br/>(Inquilinos Windows)"]
    R --> C2["Catálogo B<br/>(Inquilinos Linux)"]
    R --> C3["Catálogo C<br/>(Servicios de almacenamiento)"]
    C1 --> TR1["Receta de inquilino 1"]
    C1 --> TR2["Receta de inquilino 2"]
    C2 --> TR3["Receta de inquilino 3"]
    C3 --> TR4["Receta de inquilino 4"]

    style R fill:#e8eaf6,stroke:#283593
    style C1 fill:#e3f2fd,stroke:#1565c0
    style C2 fill:#e3f2fd,stroke:#1565c0
    style C3 fill:#e3f2fd,stroke:#1565c0
```

### Tipos de repositorio

* **Repositorios locales:** Catálogos y recetas creados y mantenidos en el sistema local. Cada sistema VergeOS viene con un repositorio "Local" vacío listo para usar.
* **Repositorios remotos:** Conéctese a catálogos alojados en un sistema VergeOS separado. Esto elimina la necesidad de mantener las mismas recetas en múltiples ubicaciones.
* **Marketplace:** Un repositorio remoto proporcionado por VergeOS e instalado previamente en sistemas a nivel de host, que contiene recetas de VM listas para usar. Los catálogos del Marketplace tienen como predeterminado `scope=global`, lo que los pone a disposición de todos los inquilinos.

### Ámbitos de publicación de catálogos

| Alcance       | Disponibilidad                                                                                |
| ------------- | --------------------------------------------------------------------------------------------- |
| **Privado**   | Solo el sistema local de VergeOS                                                              |
| **Ninguna**   | Deshabilitado — no disponible en ningún lugar                                                 |
| **Inquilino** | El sistema local y sus inquilinos directos                                                    |
| **Global**    | El sistema local, los inquilinos y los sistemas externos de VergeOS (con credenciales de API) |

### Compartir con inquilinos

1. Establezca el ámbito de publicación del catálogo en **Inquilino** o **Global**
2. En la interfaz del usuario del inquilino, navegue a la **proveedor de servicios** repositorio
3. Haga clic en **Actualizar** para descubrir los catálogos disponibles
4. Descargue las recetas deseadas — el estado muestra *En línea* cuando está listo

### Compartir con sistemas remotos

1. Crea un **usuario de tipo API** en el sistema que comparte, con permisos de Lista/Leer en el catálogo de destino
2. En el sistema receptor, crea un **Repositorio remoto** apuntando a la URL del sistema que comparte
3. Autentíquese con las credenciales del usuario de la API
4. Actualice el repositorio para descubrir y descargar los catálogos y recetas disponibles

Cuando se actualizan las recetas en el origen, tanto los inquilinos como los sistemas remotos ven una notificación de que hay una actualización disponible para descargar.

## Ejemplo real: oferta de almacenamiento compatible con S3 para CSP

Para ilustrar el poder de las recetas de inquilino, considere este escenario de la [Arquitectura de referencia de CSP de VergeOS](https://docs.verge.io/reference-architecture/csp/):

**CloudHoster**, un proveedor de nube de tamaño mediano, quiere ofrecer a sus clientes un servicio de almacenamiento compatible con S3 llamado "Cloud Storage". En lugar de configurar manualmente el entorno de cada cliente, crean una receta de inquilino que automatiza toda la implementación:

### Qué crea la receta

1. **Inquilino** — Un nuevo VDC con recursos de cómputo y almacenamiento adecuados
2. **Red interna** — Red aislada para la VM de la aplicación de almacenamiento
3. **Reglas de firewall** — Configurada para permitir tráfico de la API S3 mientras bloquea todo lo demás
4. **VM de almacenamiento** — La VM que aloja la aplicación de almacenamiento compatible con S3, preconfigurada
5. **Aprovisionamiento de almacenamiento** — Nivel de almacenamiento vSAN dedicado asignado al inquilino
6. **Registro DNS/DHCP** — Registro automático en la red del host

### Preguntas de la receta para este caso de uso

La receta solicita al operador (o al portal de autoservicio del cliente):

* **Nombre del cliente y URL** (Sección de inquilino)
* **Credenciales de administrador** (generadas automáticamente o manuales)
* **Capacidad de almacenamiento** (pregunta personalizada — cuánto almacenamiento S3 aprovisionar)
* **IP externa** (Sección de red — para el punto de conexión de la API S3)
* **Recursos del nodo** (Sección de nodos — CPU/RAM para la VM de almacenamiento)

Con un solo envío de formulario, CloudHoster implementa un entorno de almacenamiento completo, aislado y compatible con S3 para su cliente — en minutos en lugar de horas.

### Escalando la oferta

CloudHoster implementa esta receta en cuatro de sus sitios compartiendo el catálogo mediante un repositorio remoto. Cuando actualizan la receta (por ejemplo, para actualizar la VM de la aplicación de almacenamiento), todos los sitios reciben una notificación y pueden obtener la actualización.

## Prácticas recomendadas

### Diseño de la receta

* **Empiece simple** — primero cree un tenant base mínimo, agregue complejidad de forma incremental
* **Use nombres de variables descriptivos** — `STORAGE_CAPACITY_GB` es mejor que `T1` para el mantenimiento de scripts
* **Documente sus recetas** — use el campo Descripción y el Texto de nota en las preguntas para orientar a los operadores
* **Pruebe con simulación** — valide las preguntas y las salidas antes de publicarlas en catálogos de producción

### Mantenimiento del tenant base

* **Tenants base dedicados** — nunca use el tenant base de una receta para cargas de trabajo de producción
* **Control de versiones** — establezca manualmente los números de versión principales (por ejemplo, `2.0.0`) al realizar cambios significativos en el tenant base
* **Elimine los datos sensibles** — asegúrese de que no existan en la base contraseñas, datos o configuraciones específicos de clientes

### Organización

* **Nombres de catálogo significativos** — agrupe las recetas por propósito (por ejemplo, "VDC estándar", "Cómputo con GPU", "Servicios de almacenamiento")
* **Use iconos** — los iconos de Font Awesome ayudan a los operadores a identificar rápidamente los tipos de receta en la interfaz de usuario
* **Establezca el alcance adecuadamente** — use Privado para las recetas solo internas, Tenant para las orientadas al cliente, Global para la distribución multisede

{% hint style="info" %}
**¿Vienes de VMware o Nutanix?**

Una receta de tenant de VergeOS aprovisiona un VDC aislado completo en una sola operación — interfaz de administración, usuarios, pila de red, reglas de firewall, almacenamiento y DNS/DHCP — no solo máquinas virtuales o aplicaciones. Para conocer el alcance y las capacidades de cualquier herramienta de automatización de VMware o Nutanix con la que pueda estar comparando, consulte la documentación actual de ese proveedor.
{% endhint %}


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://docs.verge.io/learn-the-platform/es/modulo-7-multiinquilinato/03-tenant-recipes.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
