Go SDK — Storage
Persistent storage uses StorageServiceClient. Block disks are
RWO volumes; file shares are RWX NFS exports mountable from multiple VMs
in the same project and datacenter.
Block disks
Create
storage := storagev1connect.NewStorageServiceClient(httpClient, base)
resp, err := storage.CreateDisk(ctx, connect.NewRequest(&storagev1.CreateDiskRequest{
Parent: "projects/my-app",
Disk: &storagev1.Disk{
DatacenterName: "datacenters/us-dal-1",
SizeGib: 100,
StorageClass: "nvme",
DisplayName: "data-1",
// NetworkName: defaults to project's default network in that DC
},
}))
diskName := resp.Msg.GetDisk().GetName() | Constraint | Value |
|---|---|
| Size | 1–1024 GiB |
| Storage class | nvme |
| Datacenter | Immutable after create |
States
PROVISIONING → AVAILABLE →
ATTACHED → AVAILABLE (detach) →
DELETING
List and delete
storage.ListDisks(ctx, connect.NewRequest(&storagev1.ListDisksRequest{
ProjectName: project, PageSize: 100,
}))
storage.DeleteDisk(ctx, connect.NewRequest(&storagev1.DeleteDiskRequest{Name: diskName})) Delete fails while ATTACHED — detach first.
Attach, detach, resize
VM must be RUNNING for hot attach/detach:
storage.AttachDisk(ctx, connect.NewRequest(&storagev1.AttachDiskRequest{
DiskName: diskName,
VmName: "projects/my-app/virtual-machines/web-1",
}))
storage.DetachDisk(ctx, connect.NewRequest(&storagev1.DetachDiskRequest{DiskName: diskName}))
storage.ResizeDisk(ctx, connect.NewRequest(&storagev1.ResizeDiskRequest{
DiskName: diskName, NewSizeGib: 200,
})) Resize is grow-only — no shrink.
File shares
resp, err := storage.CreateFileShare(ctx, connect.NewRequest(&storagev1.CreateFileShareRequest{
Parent: "projects/my-app",
DatacenterName: "datacenters/us-dal-1",
SizeGib: 500,
DisplayName: "shared-data",
}))
share := resp.Msg.GetFileShare()
// share.GetMountCommand() — NFSv4 mount line for VMs in same project + DC | Constraint | Value |
|---|---|
| Size | 1–10240 GiB |
| Storage class | cephfs-rwx |
| Mount | Same project + datacenter only |
storage.ListFileShares(ctx, connect.NewRequest(&storagev1.ListFileSharesRequest{Parent: project}))
storage.DeleteFileShare(ctx, connect.NewRequest(&storagev1.DeleteFileShareRequest{Name: shareName})) What's next
- Dashboard — Storage
- Go SDK — VMs — attach disks to running VMs
- CLI → storage