Marketplace Apps — OpenStack Requirements
This page covers what an OpenStack provider admin must prepare before Marketplace Apps can deploy successfully. If you are using CloudStack, see CloudStack — Image & Startup Requirements.
Complete the platform-neutral CMP configuration in Configure Marketplace Apps in CMP before returning here for OpenStack-specific image requirements.
How CMP delivers the startup script on OpenStack
CMP uses Nova user-data to deliver the rendered startup script to the VM at first boot. Nova delivers the startup information to the VM through the OpenStack instance initialization mechanism, where it is processed by cloud-init (Linux) or cloudbase-init (Windows) inside the guest to execute the script.
Admin defines Startup Script on CMP image/template (with {{VAR}} placeholders)
↓
Customer fills environment variables at Create Instance
↓
CMP substitutes customer values into the script
↓
CMP passes user-data to Nova server creation request
↓
Nova delivers the startup information to the VM through the OpenStack instance initialization mechanism
↓
cloud-init / cloudbase-init processes user-data inside the guest
↓
Startup script executes — application is configured
For this to work, two conditions must be met:
- The Glance image has cloud-init (Linux) or cloudbase-init (Windows) installed and configured.
- The CMP image/template is set to Image Type = Market Place App and has a startup script configured.
1. Prepare the Glance image for Marketplace Apps
cloud-init is required (Linux)
The Glance image must have cloud-init installed and running at first boot. Cloud-init is responsible for reading and processing the user-data (including the CMP startup script) delivered by Nova.
Without cloud-init, the startup script is delivered to the VM but never executed — the application is not configured.
Required cloud-init capabilities:
| Capability | Why needed |
|---|---|
| Process user-data at first boot | Execute the CMP startup script |
Support #!/bin/bash shebang scripts | CMP uses shell scripts for Marketplace configuration |
| OpenStack instance initialization / metadata access | Retrieve user-data from OpenStack |
The VM boots and the infrastructure appears healthy in CMP, but the Marketplace startup script is never executed — no application configuration takes place inside the guest.
cloudbase-init for Windows images
Windows Marketplace images require cloudbase-init to process user-data. Without it, scripts are not executed at first boot.
Use official cloud images
Prefer distribution-provided cloud images — these come with cloud-init pre-installed and pre-configured:
- Ubuntu Cloud (
ubuntu-*.img) - Debian Cloud
- Rocky Linux / AlmaLinux / CentOS Stream cloud images
- RHEL cloud images
Do not use installer ISOs as Marketplace base images — they do not include cloud-init and are not designed for automated first-boot configuration.
Clean cloud-init state before capturing
If you build a Marketplace image by customizing an existing VM, clean the cloud-init state before creating the Glance snapshot. A dirty cloud-init state causes cloud-init to skip first-boot steps (including your startup script) when the customer's VM is provisioned.
Full image preparation requirements and checklist: Preparing CMP-compatible images (OpenStack).
2. Configure the CMP template as a Marketplace App
Path: Settings → Orchestrator → Templates → Add Template (or edit existing)
Set Cloud Provider = OpenStack
Select OpenStack as the Cloud Provider, choose the correct Cloud Provider Setup and Zone.
Set Image Type to Market Place App
Set Image Type to Market Place App, then select the Marketplace App and Version you created in CMP. This links the Glance image to the app.
See Link templates for the full workflow.
Set Password Method
For OpenStack Linux Marketplace images, use Using Startup Script as the password method (consistent with cloud-init based workflows).
See Configuring images in CMP (OpenStack) for full field descriptions.
Write the startup script with placeholders
The Start up Script field on the CMP template (same field as CloudStack) is used to define the Marketplace startup script. CMP lists Placeholder buttons for the Marketplace App's environment variables.
Use {{VAR_NAME}} syntax in the script. At deploy time, CMP substitutes the customer's entered values and passes the full script as Nova user-data.
Example — configure a database with customer-supplied credentials:
#!/bin/bash
mysql -u root -e "CREATE DATABASE {{db_name}};"
mysql -u root -e "CREATE USER '{{db_user}}'@'localhost' IDENTIFIED BY '{{db_password}}';"
mysql -u root -e "GRANT ALL PRIVILEGES ON {{db_name}}.* TO '{{db_user}}'@'localhost';"
Example — open a port configured by the customer:
#!/bin/bash
ufw allow {{port}}
If the Marketplace App has no environment variables, the startup script still runs — just with no customer-supplied substitutions. Document where credentials are written on the guest in the per-app email content.
3. Script size limits on OpenStack
OpenStack imposes user-data size limits at the deployment level. The exact limit depends on your Nova configuration and OpenStack distribution.
The CMP global setting max_startup_script_size_in_bytes controls the maximum size of a customer-entered startup script. This applies to OpenStack as well as CloudStack.
Unlike CloudStack (where CMP cross-checks against vm.userdata.max.length), the OpenStack deployment's Nova user-data limit is not a CMP-controlled setting. Keep your startup scripts reasonably sized and validate against your specific OpenStack environment.
See Startup script size for the CMP-level max_startup_script_size_in_bytes setting.
Checklist
| Item | Where to configure |
|---|---|
| Glance image has cloud-init installed and enabled | OpenStack / image |
| cloud-init state cleaned before image capture | OpenStack / image |
| OpenStack instance initialization / metadata service accessible from the VM | OpenStack networking |
| CMP image/template Image Type = Market Place App; app and version selected | Settings → Orchestrator → Templates |
| Password Method = Using Startup Script (Linux) | Settings → Orchestrator → Templates → User Config |
Startup script written with {{VAR}} placeholders matching environment variables | Settings → Orchestrator → Templates → Start up Script |
| Script size within CMP and OpenStack deployment limits | CMP Global Settings + OpenStack Nova configuration |