func (driver *Driver) getSnapshot(volumeID, snapshotID, snapshotName string) (allSnapshots []snapshots.Snapshot, err error) { if snapshotID != "" { snapshot, err := snapshots.Get(driver.ClientBlockStorage, snapshotID).Extract() if err != nil { return []snapshots.Snapshot{}, err } allSnapshots = append(allSnapshots, *snapshot) } else { opts := snapshots.ListOpts{ VolumeID: volumeID, Name: snapshotName, } allPages, err := snapshots.List(driver.ClientBlockStorage, opts).AllPages() if err != nil { return []snapshots.Snapshot{}, err } allSnapshots, err = snapshots.ExtractSnapshots(allPages) if err != nil { return []snapshots.Snapshot{}, fmt.Errorf("Failed to extract snapshots: %v", err) } } return allSnapshots, nil }
func (command *commandGet) Execute(resource *handler.Resource) { snapshotID := resource.Params.(*paramsGet).snapshotID snapshot, err := osSnapshots.Get(command.Ctx.ServiceClient, snapshotID).Extract() if err != nil { resource.Err = err return } resource.Result = snapshotSingle(snapshot) }
func TestSnapshots(t *testing.T) { client, err := newClient(t) th.AssertNoErr(t, err) v, err := volumes.Create(client, &volumes.CreateOpts{ Name: "gophercloud-test-volume", Size: 1, }).Extract() th.AssertNoErr(t, err) err = volumes.WaitForStatus(client, v.ID, "available", 120) th.AssertNoErr(t, err) t.Logf("Created volume: %v\n", v) ss, err := snapshots.Create(client, &snapshots.CreateOpts{ Name: "gophercloud-test-snapshot", VolumeID: v.ID, }).Extract() th.AssertNoErr(t, err) err = snapshots.WaitForStatus(client, ss.ID, "available", 120) th.AssertNoErr(t, err) t.Logf("Created snapshot: %+v\n", ss) err = snapshots.Delete(client, ss.ID).ExtractErr() th.AssertNoErr(t, err) err = gophercloud.WaitFor(120, func() (bool, error) { _, err := snapshots.Get(client, ss.ID).Extract() if err != nil { return true, nil } return false, nil }) th.AssertNoErr(t, err) t.Log("Deleted snapshot\n") err = volumes.Delete(client, v.ID).ExtractErr() th.AssertNoErr(t, err) err = gophercloud.WaitFor(120, func() (bool, error) { _, err := volumes.Get(client, v.ID).Extract() if err != nil { return true, nil } return false, nil }) th.AssertNoErr(t, err) t.Log("Deleted volume\n") }
// // SnapshotInspect inspects a single snapshot. func (d *driver) SnapshotInspect( ctx types.Context, snapshotID string, opts types.Store) (*types.Snapshot, error) { fields := eff(map[string]interface{}{ "snapshotId": snapshotID, }) snapshot, err := snapshots.Get(d.clientBlockStorage, snapshotID).Extract() if err != nil { return nil, goof.WithFieldsE(fields, "error getting snapshot", err) } return translateSnapshot(snapshot), nil }
func (d *driver) getSnapshot( volumeID, snapshotID, snapshotName string) (allSnapshots []snapshots.Snapshot, err error) { fields := eff(map[string]interface{}{ "volumeId": volumeID, "snapshotId": snapshotID, "snapshotName": snapshotName, }) if snapshotID != "" { snapshot, err := snapshots.Get(d.clientBlockStorage, snapshotID).Extract() if err != nil { return []snapshots.Snapshot{}, errors.WithFieldsE(fields, "error getting snapshot", err) } allSnapshots = append(allSnapshots, *snapshot) } else { opts := snapshots.ListOpts{ VolumeID: volumeID, Name: snapshotName, } allPages, err := snapshots.List(d.clientBlockStorage, opts).AllPages() if err != nil { return []snapshots.Snapshot{}, errors.WithFieldsE(fields, "error listing snapshot", err) } allSnapshots, err = snapshots.ExtractSnapshots(allPages) if err != nil { return []snapshots.Snapshot{}, errors.WithFieldsE(fields, "error extracting snapshot", err) } } return allSnapshots, nil }
// Get retrieves the Snapshot with the provided ID. To extract the Snapshot // object from the response, call the Extract method on the GetResult. func Get(client *gophercloud.ServiceClient, id string) GetResult { return GetResult{os.Get(client, id)} }