func (driver *Driver) CreateSnapshot(runAsync bool, snapshotName, volumeID, description string) ([]*storagedriver.Snapshot, error) { opts := snapshots.CreateOpts{ Name: snapshotName, VolumeID: volumeID, Description: description, Force: true, } resp, err := snapshots.Create(driver.ClientBlockStorage, opts).Extract() if err != nil { return nil, err } if !runAsync { log.Println("Waiting for snapshot to complete") err = snapshots.WaitForStatus(driver.ClientBlockStorage, resp.ID, "available", 120) if err != nil { return nil, err } } snapshot, err := driver.GetSnapshot("", resp.ID, "") if err != nil { return nil, err } // log.Println(fmt.Sprintf("Created Snapshot: %v", snapshot)) return snapshot, nil }
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") }
func (d *driver) CreateSnapshot( runAsync bool, snapshotName, volumeID, description string) ([]*core.Snapshot, error) { fields := eff(map[string]interface{}{ "runAsync": runAsync, "snapshotName": snapshotName, "volumeId": volumeID, "description": description, }) opts := snapshots.CreateOpts{ Name: snapshotName, VolumeID: volumeID, Description: description, Force: true, } resp, err := snapshots.Create(d.clientBlockStorage, opts).Extract() if err != nil { return nil, errors.WithFieldsE(fields, "error creating snapshot", err) } if !runAsync { log.Debug("waiting for snapshot creation to complete") err = snapshots.WaitForStatus(d.clientBlockStorage, resp.ID, "available", 120) if err != nil { return nil, errors.WithFieldsE(fields, "error waiting for snapshot creation to complete", err) } } snapshot, err := d.GetSnapshot("", resp.ID, "") if err != nil { return nil, err } log.WithFields(log.Fields{ "runAsync": runAsync, "snapshotName": snapshotName, "volumeId": volumeID, "description": description}).Debug("created snapshot") return snapshot, nil }