Resource Configuration
Defines infrastructure resources (e.g., VMs) deployed by the platform. YAML files specify compute, storage, networking for provisioning via IaC tools. Values are provider-agnostic but may include provider-specific codes (OS versions, instance types). Used to create workspace variable definitions (e.g., Terraform TF-vars).
Schema
apiVersion: strata.huybrechts.xyz/v1
kind: resource
meta:
name: <resource_name> # Required: ^[a-z][a-z0-9_]*$
annotations:
description: <description>
labels:
version: <version>
environment: <environment> # production, staging, development
spec:
properties:
provider_type: <provider_type> # Required: kamatera, azure, aws, etc.
resource_type: <resource_type> # Required: virtualmachine, container, database, storage
unit_cost: <cost> # Optional: cost per unit time (USD/month)
configuration:
# Provider-agnostic params (may include provider-specific codes)
os_name: <string>
os_code: <string> # Provider-specific version code
cpu_type: <string> # Provider-specific identifier
cpu_cores: <integer>
ram_mb: <integer>
billing: <string> # hourly, monthly
virtualmachine: # If resource_type=virtualmachine
installpoint: <path> # Base installation path
firewall:
name: <firewall_name>
file: <firewall_file> # Relative path
disks: # Physical storage devices
- size: <integer> # GB
label: <string>
mount: <absolute_path>
volumes: # Logical mount points
- name: <string>
path: <absolute_path>
Resource Types
Type |
Description |
Use Cases |
|---|---|---|
|
Standard VM |
General compute, app hosting, cluster nodes |
|
Container instance |
Lightweight workloads, microservices |
|
Managed database |
SQL/NoSQL databases |
|
Storage volume/bucket |
File/object storage, backups |
Examples
Docker Swarm Manager:
meta:
name: vm_manager
labels:
version: 1.0.0
environment: production
spec:
properties:
provider_type: kamatera
resource_type: virtualmachine
unit_cost: 5.00
configuration:
os_name: "Ubuntu"
os_code: "24.04 64bit"
cpu_type: "A"
cpu_cores: 1
ram_mb: 1024
billing: "hourly"
virtualmachine:
installpoint: /opt/install/app
firewall:
name: fw_docker
file: config/firewalls/fw-vm-docker.yaml
disks:
- size: 20
label: vm-manager-os
mount: /mnt/data1
volumes:
- name: config
path: /mnt/data1/etc/app
- name: logs
path: /mnt/data1/var/logs/app
Azure VM:
meta:
name: vm_azure_web
spec:
properties:
provider_type: azure
resource_type: virtualmachine
unit_cost: 73.00
configuration:
sku: "Standard_B2s"
virtualmachine:
firewall:
name: fw_web
file: config/firewalls/fw-web.yaml
disks:
- size: 30
label: os-disk
mount: /
- size: 100
label: data-disk
mount: /data
Minimal:
meta:
name: vm_minimal
spec:
properties:
provider_type: local
resource_type: virtualmachine
configuration:
os_name: "Ubuntu"
os_code: "24.04 64bit"
Disks vs Volumes
Disks (physical storage devices):
OS disk + additional data disks
Each has size, label, mount point
Volumes (logical application directories):
Named directories for organized storage
Mapped to paths on attached disks
Used by applications/orchestration
Example: Disks = hardware allocation, Volumes = logical app directories
Workspace Integration
# workspace.yaml
spec:
topology:
- name: platform_swarm
components:
- name: manager
file: config/resources/vm-manager.yaml # Resource reference
type: manager
count: 1
Cost Tracking
unit_cost field enables cost estimation (no enforced currency, no automatic updates, manual tracking):
spec:
properties:
unit_cost: 5.00 # USD per month (recommended)
Usage: Calculate total costs, compare efficiency, budget planning, cost optimization
Best Practices
Naming: Descriptive with type prefix (
vm_manager,vm_worker)Separate by role: Distinct files for different node roles
Document costs: Always include
unit_costVersion control: Semantic versioning in labels
Environment labels: Tag by environment
Firewall references: Always specify for security
Disk planning: Separate OS and data disks
Volume organization: Consistent naming across resources
Provider codes: Verify OS codes/CPU types match provider docs
Right-sizing: Start minimal, scale based on monitoring
Common Patterns
High Availability: 3 managers (quorum), multiple workers Development: Minimal resources, hourly billing Storage-Optimized: 2+ CPU, 4GB+ RAM, multiple large data disks
Validation
Platform validates:
Valid names (lowercase, alphanumeric, underscores)
Required fields (name, provider_type, resource_type, configuration)
Positive values (CPU, RAM, disk sizes)
Valid mount points (absolute paths)
Firewall file references exist
Provider-specific requirements
Troubleshooting
Resource not found: Verify file path in topology, check file exists in config/resources/
Invalid config: Check positive integers (CPU/RAM), verify OS codes, ensure sufficient disk sizes, validate absolute mount paths
Provider mismatch: Ensure provider_type matches workspace provider, verify CPU/OS codes valid for provider
Cost tracking: Update unit_cost on pricing changes, use consistent currency (USD recommended)