Przejdź do głównej zawartości

Przewodnik zaawansowany

Funkcje pomocnicze do weryfikacji montowania/odmontowywania

Do użytku produkcyjnego rozważ implementację funkcji pomocniczych, które będą czekać na zakończenie operacji:

import time
import cgc.sdk.volume as volume

def wait_for_volume_mount(volume_name, compute_name, timeout=60):
"""Wait for volume to show as mounted"""
print(f"Waiting for volume '{volume_name}' to be mounted...")
start_time = time.time()

while time.time() - start_time < timeout:
response = volume.volume_list()
if response['code'] == 200:
for vol in response['details']['volume_list']:
if vol['name'] == volume_name:
for mount in vol.get('mounted_to', []):
if compute_name in mount:
print("✓ Volume mount confirmed!")
return True
time.sleep(3)

print("⚠ Mount verification timed out")
return False

def wait_for_volume_unmount(volume_name, timeout=30):
"""Wait for volume to show as unmounted"""
print(f"Waiting for volume '{volume_name}' to be unmounted...")
start_time = time.time()

while time.time() - start_time < timeout:
response = volume.volume_list()
if response['code'] == 200:
for vol in response['details']['volume_list']:
if vol['name'] == volume_name:
if not vol.get('mounted_to', []):
print("✓ Volume unmount confirmed!")
return True
time.sleep(2)

print("⚠ Unmount verification timed out")
return False

# Usage example
response = volume.volume_mount("my-volume", "my-compute")
if response['code'] == 200:
if wait_for_volume_mount("my-volume", "my-compute"):
print("Volume is ready for use!")

Monitorowanie statusu wolumenów

Wolumin może być odpowiednio podłączony albo jeszcze nie gotowy do użycia.

def monitor_volumes():
"""Monitor status of all volumes"""
try:
response = volume.volume_list()
if response['code'] != 200:
print("Failed to list volumes")
return

volumes = response['details']['volume_list']
for vol in volumes:
name = vol['name']
status = vol['status']
size = vol['size'].replace('Gi', '') # Remove 'Gi' suffix
storage_type = vol['disks_type']
mounted_to = vol['mounted_to']

status_symbol = "✓" if status.lower() == "bound" else "○"
mount_info = f", Mounted: {len(mounted_to)} resources" if mounted_to else ", Not mounted"
print(f"{status_symbol} {name}: {status} ({size}GB, {storage_type}{mount_info})")

except Exception as e:
print(f"Error monitoring volumes: {e}")

Typowe problemy

Tworzenie woluminu kończy się niepowodzeniem

# Check available storage classes
classes = volume.get_available_storage_classes()
print("Available storage classes:", classes)

# Use default storage class
default = volume.get_default_storage_class()
volume.volume_create("my-volume", 10, default)

Wolumin nie staje się gotowy

# Check volume status manually
response = volume.volume_list()
for vol in response['details']['volumes']:
if vol['name'] == 'my-volume':
print(f"Volume status: {vol['status']}")
print(f"Volume details: {vol}")

Błędy montowania

# Ensure volume is ready before mounting
if volume.volume_ready("my-volume"):
volume.volume_mount("my-volume", "my-compute")
else:
print("Volume not ready for mounting")

Wymuś operacje w razie potrzeby

# Force delete stuck volume
volume.volume_delete("stuck-volume", force=True)

# Force unmount stuck volume
volume.volume_umount("stuck-volume", force=True)