Skip to content

Recipes & the Marketplace

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:

  1. Base VM — A generalized virtual machine that serves as the golden image (template)
  2. Questions — Input fields organized into sections that collect per-instance customization values (cores, RAM, hostname, network config, credentials)
  3. Automation — Behind-the-scenes database operations and cloud-init/Cloudbase-init scripts that configure the VM during first boot

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.

  1. Navigate to Machines > Virtual Machines from the left menu.
  2. Click New.
  3. In the Select Type panel on the left, choose Marketplace (or a specific catalog like “Operating Systems (Marketplace)” or “Applications (Marketplace)”).
  4. Select a recipe from the list and click Next to begin answering questions.

The Marketplace includes recipes for a wide range of operating systems:

CategoryAvailable Recipes
UbuntuServer 18.04 (Bionic), 20.04 (Focal), 22.04 (Jammy), 24.04 (Noble) — LTS releases
RHEL-CompatibleRocky Linux 8 & 9, AlmaLinux 8 & 9, CentOS 7, CentOS Stream 8
DebianDebian 10 (Buster), Debian 11 (Bullseye)
FedoraFedora 35, 36, 37, 38
AmazonAmazon Linux 2 LTS
WindowsWindows 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:

  1. Navigate to Machines > Virtual Machines > New.
  2. Select the recipe (e.g., “Ubuntu Server 24.04 (Noble Numbat)”) from the Marketplace catalog.
  3. Answer the questions presented in each section:
VariableDisplay NameDescription
YB_CPU_CORESCoresNumber of virtual CPU cores
YB_RAMRAMMemory allocation (MB)
YB_HOSTNAMEHostnameGuest OS hostname
SELECT_CREATE_UEFIEnable UEFIUEFI boot mode (recommended)
YB_DISABLE_CLOUDINITDisable Cloud-init after first bootOptions: true, false, or purge
VariableDisplay NameDescription
YB_IP_ADDR_TYPEIP Address Typedhcp or static
YB_NIC_ETH0_EXTERNAL_GATEWAYNetworkTarget network for primary NIC
YB_NIC_ETH0_IP_ADDRIP AddressStatic IP (if static selected)
YB_NIC_ETH0_CIDRSubnet Mask CIDRe.g., /24
YB_NIC_ETH0_GWDefault GatewayGateway IP address
YB_NIC_ETH0_NSNameserversComma-separated DNS servers
VariableDisplay NameDescription
YB_DRIVE_OS_SIZEOS Drive SizeDisk size in GB
SELECT_OS_TIEROS Drive TierPreferred vSAN storage tier
VariableDisplay NameDescription
YB_USERUser NameInitial admin username
YB_PASSWORDPasswordInitial admin password
  1. Click Submit to create the VM.
  2. The recipe automation runs — creating drives, downloading cloud images, configuring cloud-init files, and setting the machine type.
  3. Power on the VM. Cloud-init runs on first boot to apply your configuration (hostname, users, network, packages).

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.

FieldPurpose
SectionGroups related questions on the input form (e.g., “Instance Settings”, “Networking”)
NameVariable name referenced in scripts (alphanumeric only, no spaces)
TypeHow data is collected: String, Number, Password, Boolean, List, Hidden, RAM, Disk Size, Network, Cluster, Database Create/Edit/Find
Order IDDisplay order within the section
DisplayLabel shown to the user on the input form
Default ValuePre-populated answer
Regex ValidationRegular expression to validate input
Placeholder TextGreyed hint text showing expected format
Tooltip TextPopup help on hover
Note TextHelp text displayed below the input field
On ChangeJavaScript 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.

VariableOperation
CREATE_OS_DRIVECreates the OS virtual disk with the specified size and tier
YB_DOWNLOAD_WINDOWS_ISODownloads the Windows ISO from a specified URL
YB_DOWNLOAD_VIRTIODownloads the VirtIO driver ISO for Windows guests
YB_CREATE_VIRTIO_CD_DLCreates a virtual CD-ROM and attaches the VirtIO ISO
GET_CLUSTER_CPUQueries the cluster for available CPU model information
CHANGE_CLUSTER_CPUSets the VM’s CPU type to match the cluster
EDIT_MACHINE_TYPEAdjusts 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.

  1. The VM’s Cloud-init Datasource field is set to Config Drive v2.
  2. VergeOS creates a virtual drive containing two files:
    • user_data — Scripts and configuration directives executed on first boot
    • meta_data.json — Instance metadata (hostname, UUID, availability zone)
  3. Recipe question variables are substituted into these files using template syntax.
  4. On first boot, cloud-init reads the Config Drive and applies the configuration.

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:

FormatFirst LineUse Case
Cloud-config (YAML)#cloud-configDeclarative configuration (users, packages, files, runcmd)
Shell script#!/bin/bashArbitrary shell commands
PowerShell#ps1PowerShell scripts (primarily for Cloudbase-init on Windows)
Batchrem cmdWindows batch scripts (Cloudbase-init)
#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

Linux 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 caching

These 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.

  1. Install the Cloudbase-init client in the Windows template VM.
  2. Sysprep the VM using the Cloudbase-init unattend options.
  3. Set the VM’s Cloud-init Datasource to Config Drive v2.
  4. Create recipe questions for Windows-specific options (license key, RDP, VirtIO drivers).

Windows Marketplace recipes automate the entire provisioning chain:

  1. Download the Windows evaluation ISO via Sdatabase
  2. Download the VirtIO driver ISO
  3. Create virtual CD-ROM drives and attach both ISOs
  4. Configure the machine type and UEFI settings
  5. On first boot, Cloudbase-init applies hostname, admin credentials, RDP settings, and network configuration

When Marketplace recipes do not meet your needs, you can create custom recipes from any existing VM.

  1. Build a base VM — Install the OS, applications, and configuration you want as your golden image. Generalize the VM (remove machine-specific data, install cloud-init or Cloudbase-init).
  2. Create the recipe — Navigate to Virtual Machines > New VM Recipe.
    • If no local catalog exists, you will be prompted to create one first.
  3. Configure recipe fields:
FieldDescription
NameDescriptive name for the recipe
DescriptionDocumentation and guidelines
IconFont Awesome icon for visual identification
CatalogOrganizational container for the recipe
Virtual MachineThe base template VM
VersionStarts at 1.0.0, auto-increments on changes (1.0.0-1, 1.0.0-2, etc.)
Use Asset for Question NamesNames drive/NIC questions by asset number instead of ordinal
Version DependenciesVergeOS features required for the recipe to function
  1. Define questions — Add sections and questions to collect per-instance input. Configure validation, defaults, tooltips, and conditional show/hide logic.
  2. Configure cloud-init files — Write user_data and meta_data.json templates referencing your question variables.
  3. Simulate the recipe — Click Simulate Recipe from the recipe dashboard to test the input form, validate fields, and preview the generated answer files.
  4. Publish — The recipe becomes available in its catalog for creating new VMs.

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.

  1. Set the catalog’s Publishing Scope to Tenant (or Global for external access).
  2. In the tenant UI, navigate to the Service Provider repository and click Refresh.
  3. Double-click the catalog to browse recipes.
  4. Select recipes and click Download/Update to make them available locally.
  1. Create an API user on the sharing system with List and Read permissions on the catalog.
  2. On the receiving system, create a Remote Repository pointing to the sharing system’s URL with the API user credentials.
  3. Click Refresh to pull catalog listings. Download recipes for local use.
ScopeVisibility
PrivateOnly the local VergeOS cloud
NoneDisabled — not available anywhere
TenantLocal cloud and its direct tenants
GlobalLocal 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.