Skip to main content

Resources advanced guide

Advanced compute resource creation with the CGC SDK: all resource_create parameters, checking resource status and readiness, and retry loops.

This part specifically focus on highlighting more scripting approach.

Complete resource creation parameters​

Below example shows available parameters, that are used for the resource creation:

response = resource.resource_create(
# Required parameters
name="advanced-app", # Unique identifier
image_name="myregistry/myapp:v1.0", # Docker image

# Resource specifications
entity="custom", # Entity type (default: "custom")
cpu=4, # CPU cores
memory=16, # Memory in GB
shm_size=2, # Shared memory in GB
gpu=1, # Number of GPUs
gpu_type="NVIDIA-RTX-A5000", # GPU model (canonical name)

# Storage
volumes=["data-vol"], # Volume names to mount
volume_full_path="/mnt/data", # Mount path for volumes (if defined, only 1 volume is allowed during resource creation)

# Configuration
startup_command="python app.py", # Override entrypoint
repository_secret="my-registry-secret", # For private registries

# Environment and configuration
cgc_data=["KEY1=value1"], # CGC-specific data
environment_data=["ENV=prod"], # Environment variables
arguments_data=["--verbose"], # Command arguments

# Networking
node_port_enabled=True # Enable NodePort service (not available on every CGC instance)
)

Checking resource status​

Check if resource is ready​

import cgc.sdk.resource as resource
import time

def wait_for_resource(name, max_wait=300):
"""Wait for a resource to be ready"""
waited = 0
while waited < max_wait:
if resource.resource_ready(name):
print(f"{name} is ready!")
return True
print(f"Waiting for {name}... ({waited}s)")
time.sleep(10)
waited += 10
return False

# Use it
if wait_for_resource("my-app"):
print("Application started successfully")
else:
print("Application failed to start in time")

Check specific resource types​

from cgc.sdk.resource import ResourceTypes

# Check if a database is ready
is_ready = resource.resource_ready(
"my-postgres",
resource_type=ResourceTypes.db
)

# Check if a job is ready
is_ready = resource.resource_ready(
"data-job",
resource_type=ResourceTypes.job
)

Advanced patterns​

Using loop functions​

The SDK provides helper functions for operations that need retries:

# Start a resource with automatic retries
resource.start_function_loop(
resource.resource_create,
infinite=False, # Try 5 times then stop
name="my-app",
image_name="nginx:latest",
cpu=1,
memory=2
)

# Stop a resource with retries
resource.stop_function_loop(
resource.resource_delete,
infinite=False,
name="my-app"
)