Native Pulumi provider for Clever Cloud infrastructure management.
This provider allows you to manage Clever Cloud resources using Pulumi infrastructure as code. It's a native provider built with the Pulumi Provider Framework, not a bridged Terraform provider.
- Docker - Deploy containerized applications
- Node.js - Deploy Node.js/Bun applications
- PHP - Deploy PHP applications
- Python - Deploy Python applications
- Ruby - Deploy Ruby applications
- Java - Deploy Java/JAR/WAR applications
- Go - Deploy Go applications
- Static - Deploy static websites
- PostgreSQL - Managed PostgreSQL databases
- MySQL - Managed MySQL databases
- MongoDB - Managed MongoDB databases
- Redis - Managed Redis instances
npm install @clevercloud/pulumipip install pulumi_cleverclouddotnet add package Pulumi.CleverCloudgo get github.com/clevercloud/pulumi-clevercloud/sdk/go/clevercloud<dependency>
<groupId>com.clever-cloud.pulumi</groupId>
<artifactId>clevercloud</artifactId>
</dependency>The provider requires Clever Cloud OAuth credentials. You can provide them via:
- Provider configuration:
import * as clevercloud from "@clevercloud/pulumi";
const provider = new clevercloud.Provider("clevercloud", {
token: "your-oauth-token",
secret: "your-oauth-secret",
organization: "orga_xxxxx", // optional
});- Environment variables:
export CLEVER_TOKEN="your-oauth-token"
export CLEVER_SECRET="your-oauth-secret"
export CLEVER_ORGANIZATION="orga_xxxxx" # optionalimport * as clevercloud from "@clevercloud/pulumi";
const app = new clevercloud.NodeJS("my-api", {
name: "My API",
minInstanceCount: 1,
maxInstanceCount: 2,
smallestFlavor: "S",
biggestFlavor: "M",
region: "par",
packageManager: "npm",
environment: {
NODE_ENV: "production",
},
});
export const deployUrl = app.deployUrl;import * as clevercloud from "@clevercloud/pulumi";
const dockerApp = new clevercloud.Docker("my-docker-app", {
name: "My Docker App",
minInstanceCount: 1,
maxInstanceCount: 1,
smallestFlavor: "XS",
biggestFlavor: "XS",
dockerfile: "Dockerfile",
containerPort: 8080,
});import * as clevercloud from "@clevercloud/pulumi";
const db = new clevercloud.PostgreSQL("my-db", {
name: "Production Database",
plan: "S",
region: "par",
version: "15",
});
export const dbHost = db.host;
export const dbPort = db.port;
export const dbName = db.database;import * as clevercloud from "@clevercloud/pulumi";
// Create PostgreSQL database
const db = new clevercloud.PostgreSQL("db", {
name: "App Database",
plan: "S",
region: "par",
});
// Create Redis cache
const cache = new clevercloud.Redis("cache", {
name: "App Cache",
plan: "S",
region: "par",
});
// Deploy Node.js API
const api = new clevercloud.NodeJS("api", {
name: "Backend API",
minInstanceCount: 2,
maxInstanceCount: 4,
smallestFlavor: "S",
biggestFlavor: "M",
region: "par",
environment: {
DATABASE_URL: pulumi.interpolate`postgresql://${db.user}:${db.password}@${db.host}:${db.port}/${db.database}`,
REDIS_URL: pulumi.interpolate`redis://:${cache.password}@${cache.host}:${cache.port}`,
NODE_ENV: "production",
},
redirectHttps: true,
});
export const apiUrl = api.deployUrl;All application resources share these common fields:
name- Application name (required)description- Application descriptionminInstanceCount- Minimum number of instances (required)maxInstanceCount- Maximum number of instances (required)smallestFlavor- Smallest instance size: XS, S, M, L, XL (required)biggestFlavor- Biggest instance size: XS, S, M, L, XL (required)buildFlavor- Dedicated build instance sizeregion- Deployment region (default: "par")stickySessions- Enable sticky sessionsredirectHttps- Force HTTPS redirectappFolder- Application folder in git repositoryenvironment- Environment variablesdependencies- List of linked application/addon IDs
- XS - 1 vCPU, 256MB RAM
- S - 1 vCPU, 1GB RAM
- M - 2 vCPU, 2GB RAM
- L - 4 vCPU, 4GB RAM
- XL - 6 vCPU, 8GB RAM
- XXL - 8 vCPU, 16GB RAM
- par - Paris, France (default)
- rbx - Roubaix, France
- mtl - Montreal, Canada
- sgp - Singapore
- syd - Sydney, Australia
Complete, runnable examples are available in the examples/ directory:
- Docker Application - Deploy a Docker container with auto-scaling, custom environment variables, and HTTP port configuration
- PostgreSQL Addon - Create a PostgreSQL database with specific version and plan
Each example includes:
- Complete Pulumi program
README.mdwith instructions- Configuration examples
- Expected outputs
make build_provider# Unit tests
make test_unit
# E2E tests (requires Clever Cloud credentials)
export CLEVER_TOKEN="your-token"
export CLEVER_SECRET="your-secret"
export CLEVER_ORGANIZATION="your-org-id"
./tests/e2e/docker_nodejs.sh
./tests/e2e/postgresql_python.shSee TESTING_STATUS.md for complete testing documentation.
make build_sdksThis generates SDKs for:
- Node.js/TypeScript →
sdk/nodejs/ - Python →
sdk/python/ - Go →
sdk/go/ - .NET →
sdk/dotnet/ - Java →
sdk/java/
make devThis is a native Pulumi provider built with:
- Pulumi Provider Framework - Modern provider SDK
- Clever Cloud SDK - Official Go client (
go.clever-cloud.dev/client) - Infer-based Resources - Automatic schema generation
- OAuth Authentication - Using official Clever Cloud consumer credentials
.
├── provider/
│ ├── cmd/pulumi-resource-clevercloud/ # Provider binary
│ ├── pkg/
│ │ ├── config/ # Provider configuration
│ │ ├── client/ # API client wrapper
│ │ ├── provider/ # Provider registration
│ │ └── resources/
│ │ ├── common/ # Shared fields
│ │ ├── applications/ # Application resources
│ │ └── addons/ # Addon resources
│ └── go.mod
├── sdk/ # Generated SDKs
│ ├── nodejs/
│ ├── python/
│ ├── dotnet/
│ ├── go/
│ └── java/
└── Makefile
Contributions are welcome! Please ensure:
- Field names match exactly the Clever Cloud API
- All resources implement full CRUD operations
- Tests cover Create → Refresh → Destroy lifecycle
- No invented fields - only what the API supports
Apache-2.0