> 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-6-maquinas-virtuales/02-recipes-marketplace.md).

# Recetas y Marketplace

## Resumen

Configurar manualmente cada máquina virtual desde cero requiere mucho tiempo y es propenso a errores. VergeOS **recetas** resuelve esto proporcionando plantillas de imagen dorada personalizables que estandarizan el aprovisionamiento de VMs y, al mismo tiempo, permiten la personalización por instancia. Combinado con el **catálogo de Marketplace**, las recetas te permiten desplegar VMs listas para producción en minutos -- desde servidores Ubuntu hasta entornos de evaluación de Windows -- con configuraciones coherentes en todo momento.

```mermaid
flowchart LR
    subgraph sources["Fuentes de recetas"]
        direction TB
        MP["Marketplace<br/>(proporcionado por VergeOS)"]
        LOCAL["Catálogo local<br/>(recetas personalizadas)"]
        REMOTE["Repositorio remoto<br/>(recetas compartidas)"]
    end

    subgraph deploy["Implementación"]
        direction TB
        Q["Responder preguntas<br/>(CPU, RAM, red, almacenamiento)"]
        AUTO["Automatización<br/>(Base de datos, Cloud-Init)"]
        VM["Instancia de VM en ejecución"]
    end

    sources --> Q --> AUTO --> VM
```

Una receta consta de tres componentes:

1. **VM base** -- Una máquina virtual generalizada que sirve como imagen dorada (plantilla)
2. **Preguntas** -- Campos de entrada organizados en secciones que recopilan valores de personalización por instancia (núcleos, RAM, nombre de host, configuración de red, credenciales)
3. **Automatización** -- Operaciones de base de datos en segundo plano y scripts cloud-init/Cloudbase-init que configuran la VM durante el primer arranque

## El catálogo de Marketplace

Cada sistema VergeOS incluye de serie el **Marketplace** -- un repositorio remoto, proporcionado por VergeOS, de recetas de VM preconstruidas listas para su uso inmediato. Marketplace está disponible automáticamente en el momento de la instalación y sus catálogos están configurados con `scope=global`, lo que también los hace accesibles a todos los inquilinos.

### Acceder al Marketplace

1. Vaya a **Máquinas** > **Máquinas virtuales** desde el menú de la izquierda.
2. Haga clic en **Nuevo**.
3. En el **Seleccionar tipo** panel de la izquierda, elige **Marketplace** (o un catálogo específico como "Sistemas operativos (Marketplace)" o "Aplicaciones (Marketplace)").
4. Selecciona una receta de la lista y haz clic en **Siguiente** para comenzar a responder preguntas.

### Recetas de sistemas operativos disponibles

El Marketplace incluye recetas para una amplia gama de sistemas operativos:

| Categoría               | Recetas disponibles                                                                 |
| ----------------------- | ----------------------------------------------------------------------------------- |
| **Ubuntu**              | Server 18.04 (Bionic), 20.04 (Focal), 22.04 (Jammy), 24.04 (Noble) -- versiones LTS |
| **Compatible con RHEL** | Rocky Linux 8 y 9, AlmaLinux 8 y 9, CentOS 7, CentOS Stream 8                       |
| **Debian**              | Debian 10 (Buster), 11 (Bullseye), 12 (Bookworm), 13 (Trixie)                       |
| **Fedora**              | Fedora 35, 36, 37, 38                                                               |
| **Amazon**              | Amazon Linux 2 LTS                                                                  |
| **Windows**             | Windows Server 2019 Evaluation, 2022 Evaluation, 2025 Evaluation                    |

{% hint style="success" %}
Las recetas Linux usan **cloud-init** con imágenes en la nube preconstruidas descargadas durante el aprovisionamiento. Las recetas de Windows usan **Cloudbase-init** con ISOs de evaluación y una instalación desatendida automatizada. Ambos enfoques producen una VM completamente configurada y arrancable sin instalación manual del sistema operativo.
{% endhint %}

## Uso de una receta de Marketplace

Desplegar una VM desde una receta de Marketplace sigue un flujo guiado de preguntas y respuestas. Aquí tienes un recorrido típico usando una receta de Ubuntu Server:

### Recorrido paso a paso

1. **Navega** a **Máquinas** > **Máquinas virtuales** > **Nuevo**.
2. **Selecciona** hasta la receta (por ejemplo, "Ubuntu Server 24.04 (Noble Numbat)") desde el catálogo de Marketplace.
3. **Responde las preguntas** presentadas en cada sección:

#### Configuración de la instancia de VM

| Variable               | Nombre para mostrar                                 | Descripción                                   |
| ---------------------- | --------------------------------------------------- | --------------------------------------------- |
| `YB_CPU_CORES`         | Núcleos                                             | Número de núcleos de CPU virtuales            |
| `YB_RAM`               | RAM                                                 | Asignación de memoria (MB)                    |
| `YB_HOSTNAME`          | Nombre de host                                      | Nombre de host del sistema operativo invitado |
| `SELECT_CREATE_UEFI`   | Habilitar UEFI                                      | Modo de arranque UEFI (recomendado)           |
| `YB_DISABLE_CLOUDINIT` | Deshabilitar Cloud-init después del primer arranque | Opciones: `true`, `false`, o `purge`          |

#### Configuración de red

| Variable                       | Nombre para mostrar             | Descripción                           |
| ------------------------------ | ------------------------------- | ------------------------------------- |
| `YB_IP_ADDR_TYPE`              | Tipo de dirección IP            | `dhcp` o `static`                     |
| `YB_NIC_ETH0_EXTERNAL_GATEWAY` | Red                             | Red de destino para la NIC principal  |
| `YB_NIC_ETH0_IP_ADDR`          | Dirección IP                    | IP estática (si se seleccionó static) |
| `YB_NIC_ETH0_CIDR`             | CIDR de máscara de subred       | p. ej., `/24`                         |
| `YB_NIC_ETH0_GW`               | Puerta de enlace predeterminada | Dirección IP de la puerta de enlace   |
| `YB_NIC_ETH0_NS`               | Servidores de nombres           | Servidores DNS separados por comas    |

#### Configuración de almacenamiento

| Variable           | Nombre para mostrar                       | Descripción                            |
| ------------------ | ----------------------------------------- | -------------------------------------- |
| `YB_DRIVE_OS_SIZE` | Tamaño de la unidad del sistema operativo | Tamaño del disco en GB                 |
| `SELECT_OS_TIER`   | Nivel de la unidad del sistema operativo  | Nivel de almacenamiento vSAN preferido |

#### Cuenta de usuario

| Variable      | Nombre para mostrar | Descripción                                 |
| ------------- | ------------------- | ------------------------------------------- |
| `YB_USER`     | Nombre de usuario   | Nombre de usuario del administrador inicial |
| `YB_PASSWORD` | Contraseña          | Contraseña del administrador inicial        |

4. **Haz clic en Enviar** para crear la VM.
5. La automatización de la receta se ejecuta -- creando unidades, descargando imágenes en la nube, configurando archivos cloud-init y estableciendo el tipo de máquina.
6. **Enciende** la VM. Cloud-init se ejecuta en el primer arranque para aplicar tu configuración (nombre de host, usuarios, red, paquetes).

## Preguntas y variables de la receta

Las preguntas de la receta son los bloques de construcción que hacen que las recetas sean personalizables. Cada pregunta captura un valor que se almacena como una variable y puede ser referenciado en scripts cloud-init, operaciones de base de datos o configuración de la VM.

### Campos de pregunta

| Campo                             | Propósito                                                                                                                                                                                                                                     |
| --------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Sección**                       | Agrupa preguntas relacionadas en el formulario de entrada (por ejemplo, "Configuración de la instancia", "Red")                                                                                                                               |
| **Nombre**                        | Nombre de variable referenciado en scripts (solo alfanumérico, sin espacios)                                                                                                                                                                  |
| **Tipo**                          | Cómo se recopilan los datos; los tipos comunes incluyen String, Number, Password, Boolean, List, Hidden, RAM, Disk Size, Network, Cluster, Database Create/Edit/Find, Hostname, Script, Textarea, Virtual IP, Timestamp, Row, Field y Seconds |
| **Orden**                         | Orden de visualización dentro de la sección                                                                                                                                                                                                   |
| **Mostrar**                       | Etiqueta mostrada al usuario en el formulario de entrada                                                                                                                                                                                      |
| **Valor predeterminado**          | Respuesta precargada                                                                                                                                                                                                                          |
| **Validación mediante regex**     | Expresión regular para validar la entrada                                                                                                                                                                                                     |
| **Texto de marcador de posición** | Texto de ayuda atenuado que muestra el formato esperado                                                                                                                                                                                       |
| **Texto de ayuda emergente**      | Ayuda emergente al pasar el cursor                                                                                                                                                                                                            |
| **Texto de nota**                 | Texto de ayuda mostrado debajo del campo de entrada                                                                                                                                                                                           |
| **Al cambiar**                    | JavaScript para mostrar/ocultar otras preguntas de forma dinámica                                                                                                                                                                             |

### Preguntas generadas automáticamente

Cuando creas una receta a partir de una VM base, VergeOS genera automáticamente preguntas para cada una de las unidades de la VM (por ejemplo, `YB_DRIVE_1_SIZE`, `YB_DRIVE_2_SERIAL`, `YB_DRIVE_3_NONPERSISTENT`). Algunas preguntas generadas automáticamente están deshabilitadas de forma predeterminada -- actívalas desde la lista de Preguntas si es necesario.

## Automatización de bases de datos

Detrás de cada receta de Marketplace, un conjunto de **preguntas de tipo Base de datos** (Database Create, Database Edit y Database Find) realiza operaciones automatizadas durante el aprovisionamiento de la VM. Estas preguntas interactúan directamente con la API de base de datos de VergeOS para crear recursos, descargar imágenes y configurar hardware -- sin requerir ninguna intervención manual del usuario.

### Operaciones de base de datos comunes

| Variable                  | Operación                                                                       |
| ------------------------- | ------------------------------------------------------------------------------- |
| `CREATE_OS_DRIVE`         | Crea el disco virtual del sistema operativo con el tamaño y nivel especificados |
| `YB_DOWNLOAD_WINDOWS_ISO` | Descarga la ISO de Windows desde una URL especificada                           |
| `YB_DOWNLOAD_VIRTIO`      | Descarga la ISO del controlador VirtIO para invitados Windows                   |
| `YB_CREATE_VIRTIO_CD_DL`  | Crea un CD-ROM virtual y adjunta la ISO de VirtIO                               |
| `GET_CLUSTER_CPU`         | Consulta el clúster para obtener información disponible sobre el modelo de CPU  |
| `CHANGE_CLUSTER_CPU`      | Establece el tipo de CPU de la VM para que coincida con el clúster              |
| `EDIT_MACHINE_TYPE`       | Ajusta el tipo de máquina de la VM (por ejemplo, Q35) después de la creación    |

Estas operaciones usan la misma API REST que está disponible para administradores y herramientas de automatización. Los autores de recetas pueden añadir preguntas de Base de datos personalizadas para automatizar cualquier operación expuesta por la API de VergeOS -- creando redes, registrando entradas DNS, estableciendo reglas de firewall y mucho más.

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

Una receta de VergeOS agrupa la plantilla, el formulario de personalización por instancia y la automatización de aprovisionamiento -- cloud-init/Cloudbase-init, creación de unidades, operaciones de API -- en un solo paquete autocontenido, por lo que no necesitas ensamblar por separado herramientas de plantillas, personalización, gestión de imágenes y orquestación para aprovisionar una VM.
{% endhint %}

## Integración con Cloud-Init (Linux)

VergeOS se integra con **cloud-init**, la herramienta estándar de la industria para personalizar VMs Linux durante el primer arranque. Las recetas aprovechan cloud-init para aplicar el nombre de host, las cuentas de usuario, la configuración de red, la instalación de paquetes y scripts personalizados -- todo impulsado por las variables de preguntas de la receta.

### Cómo funciona

1. El **campo Fuente de datos de Cloud-init** de la VM se establece en **Config Drive v2**.
2. VergeOS crea una unidad virtual que contiene dos archivos:
   * **`user_data`** -- Scripts e instrucciones de configuración ejecutados en el primer arranque
   * **`meta_data.json`** -- Metadatos de la instancia (nombre de host, UUID, zona de disponibilidad)
3. Las variables de las preguntas de la receta se sustituyen en estos archivos mediante sintaxis de plantilla.
4. En el primer arranque, cloud-init lee el Config Drive y aplica la configuración.

{% hint style="info" %}
La **campo Fuente de datos de Cloud-init** campo ofrece más de una opción. Las recetas de Marketplace usan **Config Drive v2** (la fuente de datos estándar de cloud-init), pero VergeOS también admite:

* **Ninguna** — Cloud-init deshabilitado para la VM.
* **NoCloud** — una fuente de datos estándar de cloud-init pensada para configurar una VM **sin conexión de red**.

Ambos **Config Drive v2** y **NoCloud** proporcionan los mismos `user_data` / `meta_data` archivos al invitado; elige **NoCloud** cuando el invitado no tiene red durante el primer arranque.
{% endhint %}

### Variables de plantilla

Las variables de la receta se inyectan en los archivos cloud-init usando la `${VARIABLE_NAME}` sintaxis:

```json
{
  "availability_zone": "${YB_CLUSTER_NAME}",
  "name": "${YB_NAME}",
  "uuid": "${YB_UUID}",
  "hostname": "${YB_NAME}",
  "yb": ${$ALL_VARIABLES}
}
```

La `${$ALL_VARIABLES}` se expande para incluir cada variable de pregunta como un objeto JSON, haciendo que todas las respuestas de la receta estén disponibles para los scripts cloud-init. El `${$...}` formulario no es un error tipográfico: el motor de sustitución busca la `${...}` sintaxis estándar, y `$ALL_VARIABLES` es un nombre de variable especial (con un `$`$ inicial literal) que el renderizador reconoce y reemplaza con el conjunto completo de variables.

### Formatos de datos de usuario

La `user_data` archivo admite múltiples formatos de script, determinados por la primera línea:

| Formato                 | Primera línea   | Caso de uso                                                           |
| ----------------------- | --------------- | --------------------------------------------------------------------- |
| **Cloud-config (YAML)** | `#cloud-config` | Configuración declarativa (usuarios, paquetes, archivos, runcmd)      |
| **Script de shell**     | `#!/bin/bash`   | Comandos de shell arbitrarios                                         |
| **PowerShell**          | `#ps1`          | Scripts de PowerShell (principalmente para Cloudbase-init en Windows) |
| **Batch**               | `rem cmd`       | Scripts por lotes de Windows (Cloudbase-init)                         |

El despachador de primera línea anterior es un comportamiento estándar de cloud-init/Cloudbase-init, no una convención específica de VergeOS -- VergeOS solo entrega el `user_data` archivo a través de Config Drive v2 y deja que el agente dentro del invitado lo interprete.

#### Ejemplo: Cloud-Config YAML

```yaml
#cloud-config
hostname: ${YB_HOSTNAME}
users:
  - name: ${YB_USER}
    sudo: ALL=(ALL) NOPASSWD:ALL
    shell: /bin/bash
    lock_passwd: false
    passwd: ${YB_PASSWORD_HASH}
packages:
  - qemu-guest-agent
  - curl
runcmd:
  - systemctl enable --now qemu-guest-agent
```

### Imágenes en la nube en línea

Las recetas Linux pueden descargar imágenes en la nube preconstruidas directamente desde los espejos de distribución. Esto se configura mediante preguntas ocultas de la receta:

* **`OS_DL_URL`** (tipo: Hidden) -- Descarga y almacena la imagen en caché localmente (por ejemplo, `https://cloud-images.ubuntu.com/releases/noble/release/ubuntu-24.04-server-cloudimg-amd64-disk-kvm.img`)
* **`OS_URL`** (tipo: Hidden) -- Transmite la imagen por la web sin almacenamiento en caché local

Estas imágenes en la nube vienen con cloud-init preinstalado, por lo que la receta solo necesita proporcionar los `user_data` y `meta_data.json` archivos para la personalización.

## Cloudbase-Init (Windows)

Para las VMs de Windows, VergeOS usa **Cloudbase-init** -- el equivalente de cloud-init en Windows. Cloudbase-init lee la misma fuente de datos Config Drive v2 y ejecuta scripts de PowerShell o por lotes durante el primer arranque.

### Proceso de configuración

1. Instala el [cliente Cloudbase-init](https://cloudbase.it/cloudbase-init/#download) en la VM plantilla de Windows.
2. Ejecuta Sysprep en la VM usando las opciones unattended de Cloudbase-init.
3. Establece el **campo Fuente de datos de Cloud-init** a **Config Drive v2**.
4. de la VM. Crea preguntas de receta para opciones específicas de Windows (clave de licencia, RDP, controladores VirtIO).

### Automatización de recetas de Windows

Las recetas de Marketplace para Windows automatizan toda la cadena de aprovisionamiento:

1. Descargar la ISO de evaluación de Windows mediante una pregunta de Base de datos
2. Descargar la ISO del controlador VirtIO
3. Crear unidades de CD-ROM virtuales y adjuntar ambas ISOs
4. Configurar el tipo de máquina y los ajustes de UEFI
5. En el primer arranque, Cloudbase-init aplica el nombre de host, las credenciales de administrador, la configuración de RDP y la configuración de red

{% hint style="warning" %}
Después de que cloud-init o Cloudbase-init hayan completado su trabajo, **elimina los archivos de cloud-init** de la VM -- especialmente si algún script contenía contraseñas u otra información sensible.
{% endhint %}

## Crear recetas personalizadas

Cuando las recetas de Marketplace no satisfacen tus necesidades, puedes crear recetas personalizadas a partir de cualquier VM existente.

### Flujo de trabajo

1. **Construye una VM base** -- Instala el sistema operativo, las aplicaciones y la configuración que quieras como tu imagen dorada. Generaliza la VM (elimina datos específicos de la máquina, instala cloud-init o Cloudbase-init).
2. **Crea la receta** -- Navega a **Máquinas virtuales** > **Nueva receta de VM**.
   * Si no existe un catálogo local, se te pedirá que crees uno primero.
3. **Configura los campos de la receta:**

| Campo                                             | Descripción                                                                               |
| ------------------------------------------------- | ----------------------------------------------------------------------------------------- |
| **Nombre**                                        | Nombre descriptivo para la receta                                                         |
| **Descripción**                                   | Documentación y directrices                                                               |
| **Icono**                                         | Icono de Font Awesome para identificación visual                                          |
| **Catálogo**                                      | Contenedor organizativo para la receta                                                    |
| **Máquina virtual**                               | La VM plantilla base                                                                      |
| **Versión**                                       | Comienza en 1.0.0, se incrementa automáticamente con los cambios (1.0.0-1, 1.0.0-2, etc.) |
| **Usar activo para los nombres de las preguntas** | Nombra las preguntas de unidad/NIC por número de activo en lugar de por orden             |
| **Dependencias de versión**                       | Funciones de VergeOS requeridas para que la receta funcione                               |

4. **Definir preguntas** -- Añade secciones y preguntas para recopilar la entrada por instancia. Configura validación, valores predeterminados, información sobre herramientas y lógica condicional de mostrar/ocultar.
5. **Configurar archivos cloud-init** -- Escribe `user_data` y `meta_data.json` plantillas que hagan referencia a las variables de tus preguntas.
6. **Simula la receta** -- Haz clic en **Simular receta** desde el panel de la receta para probar el formulario de entrada, validar los campos y previsualizar los archivos de respuesta generados.
7. **Publicar** -- La receta se vuelve disponible en su catálogo para crear nuevas VM.

### Modificación y republicación

Cuando cambias una receta, debe ser **republicada** para que los cambios surtan efecto. El panel de la receta muestra una notificación con un **Republicar** enlace. Después de republicarla, se notifica a los sistemas remotos y a los inquilinos que hay una actualización disponible.

### Instancias de receta

Una VM creada a partir de una receta es una **instancia** de esa receta hasta que se elimine o se desconecte. Puedes ver todas las instancias desde el panel de la receta. Una receta no se puede eliminar mientras tenga instancias asociadas.

{% hint style="info" %}
**Límites documentados**

Un sistema VergeOS admite hasta **1.000 recetas** y **50.000 instancias de receta** en total, con hasta **10.000 registros de receta por receta** (se depuran automáticamente al llegar a 100 y caducan después de 7 días). Estos límites están muy por encima del uso típico, pero conviene conocerlos si planeas un aprovisionamiento a gran escala impulsado por recetas.
{% endhint %}

## Intercambio de recetas

VergeOS admite compartir recetas entre sistemas y inquilinos mediante una arquitectura de repositorio y catálogo.

```mermaid
flowchart TD
    REPO["Repositorio"] --> CAT1["Catálogo 1<br/>(VM Linux)"]
    REPO --> CAT2["Catálogo 2<br/>(VM Windows)"]
    REPO --> CAT3["Catálogo 3<br/>(Aplicaciones)"]
    CAT1 --> R1["Receta Ubuntu"]
    CAT1 --> R2["Receta Rocky"]
    CAT2 --> R3["Receta Win 2022"]
    CAT3 --> R4["Receta de base de datos"]
    CAT3 --> R5["Receta de servidor web"]
```

### Compartir con inquilinos

1. Configura el **ámbito de publicación** a **Inquilino** (o **Global** para acceso externo).
2. En la interfaz de usuario del inquilino, navega hasta el **proveedor de servicios** repositorio y haz clic en **Actualizar**.
3. Haz doble clic en el catálogo para explorar las recetas.
4. Selecciona las recetas y haz clic en **Descargar/Actualizar** para ponerlas disponibles localmente.

### Compartir con sistemas remotos

1. Crea un **usuario de API** en el sistema compartido con permisos de Listar y Leer sobre el catálogo.
2. En el sistema receptor, crea un **Repositorio remoto** que apunte a la URL del sistema compartido con las credenciales del usuario de API.
3. Haga clic en **Actualizar** para obtener los listados del catálogo. Descarga las recetas para uso local.

### Ámbitos de publicación

| Ámbito        | Visibilidad                                                             |
| ------------- | ----------------------------------------------------------------------- |
| **Privado**   | Solo la nube local de VergeOS                                           |
| **Ninguna**   | Deshabilitado -- no disponible en ningún lugar                          |
| **Inquilino** | La nube local y sus inquilinos directos                                 |
| **Global**    | La nube local, los inquilinos y los sistemas remotos (con credenciales) |

## Prácticas recomendadas

### Comienza con Marketplace

Usa las recetas de Marketplace como punto de partida. Clónalas en un catálogo local y personalízalas en lugar de crear desde cero -- esto ahorra tiempo y garantiza que heredes configuraciones probadas.

### Simula antes de publicar

Simula siempre una receta antes de ponerla a disposición de los usuarios. Verifica que la validación de campos funcione, que la lógica condicional se comporte correctamente y que los archivos cloud-init generados contengan los valores esperados.

### Versiona tus recetas

Usa números de versión significativos y actualízalos al hacer cambios importantes. Los sistemas remotos y los inquilinos reciben notificaciones de las actualizaciones, así que una versionación clara ayuda a seguir qué ha cambiado.

### Limpia los datos sensibles

Elimina los archivos cloud-init después del primer arranque, especialmente si contienen contraseñas o credenciales. Considera usar la `YB_DISABLE_CLOUDINIT` opción para purgar los datos de cloud-init después de la configuración inicial.


---

# 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-6-maquinas-virtuales/02-recipes-marketplace.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.
