The Patrii Cloud provider allows you to manage resources on Patrii Cloud https://www.patrii.cloud, a Canadian sovereign cloud platform.
- Go 98.1%
- HCL 1.7%
- Makefile 0.2%
Security fixes: - Remove debug logging that dumped API responses to /tmp/patrii-debug.log - Sanitize auth error messages to never expose credentials - Add HTTPS enforcement with allow_insecure flag for development - Mark user_data as Sensitive to prevent state file leaks - Update examples to use env var credentials instead of hardcoded values New resources: - DNS zones and records - Load balancer (LB, listener, pool, member, monitor, L7 policy/rule) - Secrets (Barbican) - NFS shares and access rules - Ports, router static routes, app credentials - DNS and LB data sources Tests: - Comprehensive unit tests for client and provider packages |
||
|---|---|---|
| cmd/patrii-config | ||
| examples | ||
| internal | ||
| test | ||
| .gitignore | ||
| go.mod | ||
| go.sum | ||
| main.go | ||
| Makefile | ||
| README.md | ||
Terraform Provider for Patrii Cloud
The Patrii Cloud provider allows you to manage resources on Patrii Cloud, a Canadian sovereign cloud platform.
Features
- Compute: Create and manage VPS instances
- Block Storage: Create and attach volumes
- Object Storage: S3-compatible bucket management
- Networking: Virtual networks, routers, floating IPs, security groups
- SSH Keys: Keypair management
Requirements
Installation
From Terraform Registry (Coming Soon)
terraform {
required_providers {
patrii = {
source = "PatriiCloud/patrii"
version = "~> 1.0"
}
}
}
From Source
git clone https://github.com/PatriiCloud/terraform.git
cd terraform
go build -o terraform-provider-patrii
Quick Start
provider "patrii" {
auth_url = "https://api.patrii.cloud"
username = "your-email@example.com"
password = "your-password"
project_id = "your-project-id"
region = "COLOGIX-MTL-2"
}
# Create an instance
resource "patrii_instance" "web" {
name = "web-server"
flavor_id = "shared.balance.2c2g40d"
image_id = "ubuntu-24.04-lts"
key_name = "my-key"
}
Authentication
The provider supports multiple authentication methods:
Username/Password
provider "patrii" {
auth_url = "https://api.patrii.cloud"
username = "user@example.com"
password = "your-password"
project_id = "your-project-id"
}
Token
provider "patrii" {
auth_url = "https://api.patrii.cloud"
token = "your-keystone-token"
project_id = "your-project-id"
}
Environment Variables
export PATRII_AUTH_URL="https://api.patrii.cloud"
export PATRII_USERNAME="user@example.com"
export PATRII_PASSWORD="your-password"
export PATRII_PROJECT_ID="your-project-id"
export PATRII_REGION="COLOGIX-MTL-2"
Resources
Compute
| Resource | Description |
|---|---|
patrii_instance |
Compute instance (VPS) |
patrii_keypair |
SSH keypair |
patrii_instance_snapshot |
Create snapshot of an instance |
patrii_instance_backup |
Create backup of an instance with rotation |
patrii_server_security_group |
Attach security group to existing instance |
Networking
| Resource | Description |
|---|---|
patrii_network |
Virtual network |
patrii_subnet |
Network subnet |
patrii_router |
Virtual router with external gateway |
patrii_router_interface |
Router subnet attachment |
patrii_security_group |
Security group |
patrii_security_group_rule |
Security group rule (TCP/UDP/ICMP) |
patrii_floating_ip |
Floating IP address |
patrii_floating_ip_associate |
Associate floating IP with instance |
Block Storage
| Resource | Description |
|---|---|
patrii_volume |
Block storage volume |
patrii_volume_attachment |
Attach volume to instance |
patrii_volume_snapshot |
Create snapshot of a volume |
Object Storage (S3)
| Resource | Description |
|---|---|
patrii_s3_bucket |
S3-compatible bucket |
patrii_s3_credentials |
S3 access credentials |
Data Sources
| Data Source | Description |
|---|---|
patrii_flavors |
List available flavors |
patrii_images |
List available OS images |
patrii_network |
Get network by ID or name |
patrii_security_group |
Get security group by ID or name |
Examples
See the examples directory for complete examples.
Full Infrastructure Example
# Get Ubuntu image
data "patrii_images" "ubuntu" {
name_regex = "Ubuntu 24.04"
}
# Get balanced flavors
data "patrii_flavors" "balanced" {
category = "balanced"
}
# SSH Key
resource "patrii_keypair" "deploy" {
name = "deploy-key"
public_key = file("~/.ssh/id_rsa.pub")
}
# Network
resource "patrii_network" "main" {
name = "main-network"
cidr = "10.0.0.0/24"
enable_dhcp = true
}
# Security Group
resource "patrii_security_group" "web" {
name = "web-servers"
description = "HTTP/HTTPS access"
}
resource "patrii_security_group_rule" "http" {
security_group_id = patrii_security_group.web.id
direction = "ingress"
protocol = "tcp"
port_range_min = 80
port_range_max = 80
remote_ip_prefix = "0.0.0.0/0"
}
# Instance
resource "patrii_instance" "web" {
name = "web-server"
flavor_id = data.patrii_flavors.balanced.flavors[1].id
image_id = data.patrii_images.ubuntu.images[0].id
key_name = patrii_keypair.deploy.name
network {
uuid = patrii_network.main.id
}
security_groups = [patrii_security_group.web.id]
}
# Floating IP
resource "patrii_floating_ip" "web" {
description = "Web server IP"
}
resource "patrii_floating_ip_associate" "web" {
floating_ip_id = patrii_floating_ip.web.id
instance_id = patrii_instance.web.id
}
# Data Volume
resource "patrii_volume" "data" {
name = "web-data"
size = 100
}
resource "patrii_volume_attachment" "data" {
volume_id = patrii_volume.data.id
instance_id = patrii_instance.web.id
}
# S3 Bucket
resource "patrii_s3_bucket" "assets" {
name = "web-assets"
}
output "public_ip" {
value = patrii_floating_ip.web.floating_ip
}
Pricing
| Resource | Price |
|---|---|
| Balanced VPS #1 | $5.25/mo |
| Balanced VPS #2 | $13.99/mo |
| Balanced VPS #3 | $24.99/mo |
| Balanced VPS #4 | $34.99/mo |
| Floating IP | $3.00/mo |
| Object Storage | $0.05/GB/mo |
See Patrii Cloud Pricing for complete pricing information.
Contributing
Contributions are welcome! Please feel free to submit a Pull Request.
License
This provider is distributed under the Mozilla Public License v2.0. See LICENSE for details.
Support
- Documentation: https://docs.patrii.cloud
- Support: support@patrii.ca
- Issues: https://github.com/PatriiCloud/terraform/issues