Saltar al contenido principal
client := rest.NewClient(os.Getenv("SQUARECLOUD_API_KEY"))
defer client.Close()

api := rest.New(client)
Los snapshots existen en tres ámbitos: por aplicación, por base de datos y a nivel de cuenta.

El struct Snapshot

Los métodos de listado devuelven []squarecloud.Snapshot:
CampoTipoDescripción
NamestringNombre del objeto de snapshot
SizeintTamaño en bytes
ModifiedstringFecha de última modificación
KeystringQuery string firmado que se usa para construir la URL de descarga

Snapshots de aplicaciones

Listado

snapshots, err := api.GetApplicationSnapshots("abc123def456abc123def456")
if err != nil {
	panic(err)
}

for _, snap := range snapshots {
	fmt.Println(snap.Name, snap.Size, snap.Modified)
}

Creación

api.CreateApplicationSnapshot(appID) dispara un snapshot nuevo y devuelve un squarecloud.SnapshotCreated con la URL de descarga firmada.
created, err := api.CreateApplicationSnapshot("abc123def456abc123def456")
if err != nil {
	panic(err)
}

fmt.Println(created.URL) // URL de descarga firmada
fmt.Println(created.Key)

Restauración

api.RestoreApplicationSnapshot(appID, snapshotID, versionID) revierte la aplicación a una versión anterior de snapshot.
err := api.RestoreApplicationSnapshot(
	"abc123def456abc123def456",
	"00000000-0000-4000-8000-000000000000",
	"abc123def4567890",
)
if err != nil {
	panic(err)
}

Snapshots de bases de datos

El ámbito de bases de datos refleja el de aplicaciones:
snapshots, err := api.GetDatabaseSnapshots("abc123def456abc123def456")
if err != nil {
	panic(err)
}

created, err := api.CreateDatabaseSnapshot("abc123def456abc123def456")
if err != nil {
	panic(err)
}
fmt.Println(created.URL)

err = api.RestoreDatabaseSnapshot(
	"abc123def456abc123def456",
	"00000000-0000-4000-8000-000000000000_mongo",
	"v1",
)
if err != nil {
	panic(err)
}

Listado de snapshots a nivel de cuenta

api.UserSnapshots(scope) devuelve todos los snapshots que posees en todas tus aplicaciones o bases de datos. El ámbito es una de las constantes squarecloud.SnapshotScope*:
appSnapshots, err := api.UserSnapshots(squarecloud.SnapshotScopeApplications)
if err != nil {
	panic(err)
}

dbSnapshots, err := api.UserSnapshots(squarecloud.SnapshotScopeDatabases)
if err != nil {
	panic(err)
}
El listado de snapshots a nivel de cuenta requiere un plan de pago activo. Cada plan también tiene una cuota diaria de snapshots — una vez agotada, la creación falla con el código DAILY_SNAPSHOTS_LIMIT_REACHED, distinto del error genérico de rate limit KEEP_CALM.