OVH Cloud resource plugin for Formae. This plugin enables Formae to manage OVH Public Cloud resources using the OpenStack APIs via gophercloud.
This plugin supports 10 OVH Public Cloud resource types across 3 services:
| Type | Discoverable | Extractable | Comment |
|---|---|---|---|
| OVH::Compute::Instance | ✅ | ✅ | |
| OVH::Compute::SSHKey | ✅ | ✅ | |
| OVH::Compute::Volume | ✅ | ✅ | |
| OVH::Compute::VolumeAttachment | ✅ | ✅ | |
| OVH::Compute::VolumeSnapshot | ✅ | ✅ | |
| OVH::DNS::Record | ✅ | ✅ | |
| OVH::DNS::Redirection | ✅ | ✅ | |
| OVH::DNS::Zone | ✅ | ✅ | |
| OVH::Database::Database | ✅ | ✅ | |
| OVH::Database::Integration | ✅ | ✅ | |
| OVH::Database::IpRestriction | ✅ | ✅ | |
| OVH::Database::KafkaAcl | ✅ | ✅ | |
| OVH::Database::KafkaTopic | ✅ | ✅ | |
| OVH::Database::PostgresqlConnectionPool | ✅ | ✅ | |
| OVH::Database::Service | ✅ | ✅ | |
| OVH::Database::User | ✅ | ✅ | |
| OVH::Kube::Cluster | ✅ | ✅ | |
| OVH::Kube::IpRestriction | ✅ | ✅ | |
| OVH::Kube::NodePool | ✅ | ✅ | |
| OVH::Kube::Oidc | ✅ | ✅ | |
| OVH::Network::FloatingIP | ✅ | ✅ | |
| OVH::Network::Gateway | ✅ | ✅ | |
| OVH::Network::Network | ✅ | ✅ | |
| OVH::Network::Port | ✅ | ✅ | |
| OVH::Network::PrivateNetwork | ✅ | ✅ | |
| OVH::Network::PrivateSubnet | ✅ | ✅ | |
| OVH::Network::Router | ✅ | ✅ | |
| OVH::Network::SecurityGroup | ✅ | ✅ | |
| OVH::Network::SecurityGroupRule | ✅ | ✅ | |
| OVH::Network::Subnet | ✅ | ✅ | |
| OVH::Registry::IpRestriction | ✅ | ✅ | |
| OVH::Registry::Oidc | ✅ | ✅ | |
| OVH::Registry::Registry | ✅ | ✅ | |
| OVH::Registry::User | ✅ | ✅ | |
| OVH::Storage::Container | ✅ | ✅ | |
| OVH::Storage::S3Bucket | ✅ | ✅ |
See schema/pkl/ for the complete list of supported resource types.
Configure an OVH target in your Forma file:
import "@formae/formae.pkl"
import "@ovh/ovh.pkl"
target: formae.Target = new formae.Target {
label = "ovh-target"
config = new ovh.Config {
authURL = "https://auth.cloud.ovh.net/v3" // EU regions
// authURL = "https://auth.cloud.ovh.us/v3" // US regions
region = "GRA7" // See supported regions below
}
}Supported Regions:
BHS5- Beauharnois, CanadaDE1- Frankfurt, GermanyGRA7,GRA9- Gravelines, FranceSBG5- Strasbourg, FranceUK1- London, UKWAW1- Warsaw, PolandUS-EAST-VA-1- Virginia, USA
This plugin requires two sets of credentials:
- OVH Cloud API — for OVH-specific resources (DNS, Database, Kube, Registry)
- OpenStack API — for infrastructure resources (Compute, Network, Storage)
export OVH_ENDPOINT="ovh-eu" # Optional: ovh-eu (default), ovh-ca, ovh-us
export OVH_APPLICATION_KEY="your-app-key"
export OVH_APPLICATION_SECRET="your-app-secret"
export OVH_CONSUMER_KEY="your-consumer-key"
export OVH_CLOUD_PROJECT_ID="your-project-id"Getting OVH API Credentials:
-
Create an application at the
/createApp/URL for your region — note the Application Key and Secret -
Request a consumer key using the API (the
/createToken/web UI may not work for all account types):curl -X POST "https://eu.api.ovh.com/1.0/auth/credential" \ -H "X-Ovh-Application: YOUR_APP_KEY" \ -H "Content-Type: application/json" \ -d '{"accessRules":[{"method":"GET","path":"/*"},{"method":"POST","path":"/*"},{"method":"PUT","path":"/*"},{"method":"DELETE","path":"/*"}]}'
For US, replace the URL with
https://api.us.ovhcloud.com/1.0/auth/credential.This returns a
consumerKeyand avalidationUrl. -
Validate the consumer key by opening the
validationUrlin your browser and approving access. The consumer key will not work until validated. -
Find your Cloud Project ID in the OVH Control Panel under Public Cloud:
Note: Accounts are region-specific. EU credentials do not work on the US endpoint and vice versa. You must create the application and token on the same regional endpoint.
export OS_USERNAME="your-openstack-username"
export OS_PASSWORD="your-openstack-password"
export OS_PROJECT_ID="your-project-id"
export OS_USER_DOMAIN_NAME="Default" # Optional, defaults to "Default"Getting OpenStack Credentials:
- Go to the OVH Control Panel
- Navigate to Public Cloud > Project > Users & Roles
- Create a new user or use an existing one
- Download the OpenStack RC file or note the credentials
See the examples/ directory for usage examples.
# Evaluate an example
formae eval examples/lifeline/basic_infrastructure.pkl
# Apply resources
formae apply --mode reconcile --watch examples/lifeline/basic_infrastructure.pklThis plugin is licensed under the Functional Source License, Version 1.1, ALv2 Future License (FSL-1.1-ALv2).
Copyright 2025 Platform Engineering Labs Inc.