Start with Marketplace
Use Marketplace recipes as a starting point. Clone them to a local catalog and customize rather than building from scratch — this saves time and ensures you inherit tested configurations.
Manually configuring every virtual machine from scratch is time-consuming and error-prone. VergeOS recipes solve this by providing customizable golden-image templates that standardize VM provisioning while still allowing per-instance customization. Combined with the built-in Marketplace catalog, recipes let you deploy production-ready VMs in minutes — from Ubuntu servers to Windows evaluation environments — with consistent configurations every time.
A recipe consists of three components:
Every VergeOS system ships with the Marketplace — a remote, VergeOS-provided repository of pre-built VM recipes ready for immediate use. The Marketplace is automatically available at install time and its catalogs are set to scope=global, making them accessible to all tenants as well.
The Marketplace includes recipes for a wide range of operating systems:
| Category | Available Recipes |
|---|---|
| Ubuntu | Server 18.04 (Bionic), 20.04 (Focal), 22.04 (Jammy), 24.04 (Noble) — LTS releases |
| RHEL-Compatible | Rocky Linux 8 & 9, AlmaLinux 8 & 9, CentOS 7, CentOS Stream 8 |
| Debian | Debian 10 (Buster), Debian 11 (Bullseye) |
| Fedora | Fedora 35, 36, 37, 38 |
| Amazon | Amazon Linux 2 LTS |
| Windows | Windows Server 2019 Evaluation, 2022 Evaluation, 2025 Evaluation |
Deploying a VM from a Marketplace recipe follows a guided question-and-answer workflow. Here is a typical walkthrough using an Ubuntu Server recipe:
| Variable | Display Name | Description |
|---|---|---|
YB_CPU_CORES | Cores | Number of virtual CPU cores |
YB_RAM | RAM | Memory allocation (MB) |
YB_HOSTNAME | Hostname | Guest OS hostname |
SELECT_CREATE_UEFI | Enable UEFI | UEFI boot mode (recommended) |
YB_DISABLE_CLOUDINIT | Disable Cloud-init after first boot | Options: true, false, or purge |
| Variable | Display Name | Description |
|---|---|---|
YB_IP_ADDR_TYPE | IP Address Type | dhcp or static |
YB_NIC_ETH0_EXTERNAL_GATEWAY | Network | Target network for primary NIC |
YB_NIC_ETH0_IP_ADDR | IP Address | Static IP (if static selected) |
YB_NIC_ETH0_CIDR | Subnet Mask CIDR | e.g., /24 |
YB_NIC_ETH0_GW | Default Gateway | Gateway IP address |
YB_NIC_ETH0_NS | Nameservers | Comma-separated DNS servers |
| Variable | Display Name | Description |
|---|---|---|
YB_DRIVE_OS_SIZE | OS Drive Size | Disk size in GB |
SELECT_OS_TIER | OS Drive Tier | Preferred vSAN storage tier |
| Variable | Display Name | Description |
|---|---|---|
YB_USER | User Name | Initial admin username |
YB_PASSWORD | Password | Initial admin password |
Recipe questions are the building blocks that make recipes customizable. Each question captures a value that is stored as a variable and can be referenced in cloud-init scripts, database operations, or VM configuration.
| Field | Purpose |
|---|---|
| Section | Groups related questions on the input form (e.g., “Instance Settings”, “Networking”) |
| Name | Variable name referenced in scripts (alphanumeric only, no spaces) |
| Type | How data is collected: String, Number, Password, Boolean, List, Hidden, RAM, Disk Size, Network, Cluster, Database Create/Edit/Find |
| Order ID | Display order within the section |
| Display | Label shown to the user on the input form |
| Default Value | Pre-populated answer |
| Regex Validation | Regular expression to validate input |
| Placeholder Text | Greyed hint text showing expected format |
| Tooltip Text | Popup help on hover |
| Note Text | Help text displayed below the input field |
| On Change | JavaScript to show/hide other questions dynamically |
When you create a recipe from a base VM, VergeOS automatically generates questions for each of the VM’s drives (e.g., YB_DRIVE_1_SIZE, YB_DRIVE_2_SERIAL, YB_DRIVE_3_NONPERSISTENT). Some auto-generated questions are disabled by default — enable them from the Questions list if needed.
Behind every Marketplace recipe, a set of Sdatabase-type questions perform automated operations during VM provisioning. These questions interact directly with the VergeOS database API to create resources, download images, and configure hardware — without requiring any manual intervention from the user.
| Variable | Operation |
|---|---|
CREATE_OS_DRIVE | Creates the OS virtual disk with the specified size and tier |
YB_DOWNLOAD_WINDOWS_ISO | Downloads the Windows ISO from a specified URL |
YB_DOWNLOAD_VIRTIO | Downloads the VirtIO driver ISO for Windows guests |
YB_CREATE_VIRTIO_CD_DL | Creates a virtual CD-ROM and attaches the VirtIO ISO |
GET_CLUSTER_CPU | Queries the cluster for available CPU model information |
CHANGE_CLUSTER_CPU | Sets the VM’s CPU type to match the cluster |
EDIT_MACHINE_TYPE | Adjusts the VM machine type (e.g., Q35) post-creation |
These operations use the same REST API that is available to administrators and automation tools. Recipe authors can add custom Sdatabase questions to automate any operation exposed by the VergeOS API — creating networks, registering DNS entries, setting firewall rules, and more.
VergeOS integrates with cloud-init, the industry-standard tool for customizing Linux VMs during first boot. Recipes leverage cloud-init to apply hostname, user accounts, network configuration, package installation, and custom scripts — all driven by the recipe question variables.
user_data — Scripts and configuration directives executed on first bootmeta_data.json — Instance metadata (hostname, UUID, availability zone)Recipe variables are injected into cloud-init files using the ${VARIABLE_NAME} syntax:
{ "availability_zone": "${YB_CLUSTER_NAME}", "name": "${YB_NAME}", "uuid": "${YB_UUID}", "hostname": "${YB_NAME}", "yb": {ALL_VARIABLES}}The {ALL_VARIABLES} token expands to include every question variable as a JSON object, making all recipe answers available to cloud-init scripts.
The user_data file supports multiple script formats, determined by the first line:
| Format | First Line | Use Case |
|---|---|---|
| Cloud-config (YAML) | #cloud-config | Declarative configuration (users, packages, files, runcmd) |
| Shell script | #!/bin/bash | Arbitrary shell commands |
| PowerShell | #ps1 | PowerShell scripts (primarily for Cloudbase-init on Windows) |
| Batch | rem cmd | Windows batch scripts (Cloudbase-init) |
#cloud-confighostname: ${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 - curlruncmd: - systemctl enable --now qemu-guest-agentLinux recipes can download pre-built cloud images directly from distribution mirrors. This is configured through hidden recipe questions:
OS_DL_URL (type: Hidden) — Downloads and caches the image locally (e.g., https://cloud-images.ubuntu.com/releases/noble/release/ubuntu-24.04-server-cloudimg-amd64-disk-kvm.img)OS_URL (type: Hidden) — Streams the image over the web without local cachingThese cloud images come pre-installed with cloud-init, so the recipe only needs to provide the user_data and meta_data.json files for customization.
For Windows VMs, VergeOS uses Cloudbase-init — the Windows equivalent of cloud-init. Cloudbase-init reads the same Config Drive v2 datasource and executes PowerShell or batch scripts during first boot.
Windows Marketplace recipes automate the entire provisioning chain:
When Marketplace recipes do not meet your needs, you can create custom recipes from any existing VM.
| Field | Description |
|---|---|
| Name | Descriptive name for the recipe |
| Description | Documentation and guidelines |
| Icon | Font Awesome icon for visual identification |
| Catalog | Organizational container for the recipe |
| Virtual Machine | The base template VM |
| Version | Starts at 1.0.0, auto-increments on changes (1.0.0-1, 1.0.0-2, etc.) |
| Use Asset for Question Names | Names drive/NIC questions by asset number instead of ordinal |
| Version Dependencies | VergeOS features required for the recipe to function |
user_data and meta_data.json templates referencing your question variables.When you change a recipe, it must be republished for the changes to take effect. The recipe dashboard displays a notification with a Republish link. After republishing, remote systems and tenants are notified that an update is available.
A VM created from a recipe is an instance of that recipe until it is deleted or detached. You can view all instances from the recipe dashboard. A recipe cannot be deleted while it has associated instances.
VergeOS supports sharing recipes between systems and tenants through a repository and catalog architecture.
| Scope | Visibility |
|---|---|
| Private | Only the local VergeOS cloud |
| None | Disabled — not available anywhere |
| Tenant | Local cloud and its direct tenants |
| Global | Local cloud, tenants, and remote systems (with credentials) |
Start with Marketplace
Use Marketplace recipes as a starting point. Clone them to a local catalog and customize rather than building from scratch — this saves time and ensures you inherit tested configurations.
Simulate Before Publishing
Always simulate a recipe before making it available to users. Verify that field validation works, conditional logic behaves correctly, and generated cloud-init files contain the expected values.
Version Your Recipes
Use meaningful version numbers and update them when making significant changes. Remote systems and tenants are notified of updates, so clear versioning helps track what has changed.
Clean Up Sensitive Data
Remove cloud-init files after first boot, especially if they contain
passwords or credentials. Consider using the YB_DISABLE_CLOUDINIT option
to purge cloud-init data after initial configuration.