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 }
// // VolumeSnapshot snapshots a volume. func (d *driver) VolumeSnapshot( ctx types.Context, volumeID, snapshotName string, opts types.Store) (*types.Snapshot, error) { fields := eff(map[string]interface{}{ "moduleName": ctx, "snapshotName": snapshotName, "volumeId": volumeID, }) createOpts := snapshots.CreateOpts{ Name: snapshotName, VolumeID: volumeID, Force: true, } resp, err := snapshots.Create(d.clientBlockStorage, createOpts).Extract() if err != nil { return nil, goof.WithFieldsE(fields, "error creating snapshot", err) } log.Debug("waiting for snapshot creation to complete") d.waitSnapshotStatus(ctx, resp.ID) return translateSnapshot(resp), nil }
func (command *commandCreate) Execute(resource *handler.Resource) { opts := resource.Params.(*paramsCreate).opts snapshot, err := osSnapshots.Create(command.Ctx.ServiceClient, opts).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") }
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 }
// Create will create a new Snapshot based on the values in CreateOpts. To // extract the Snapshot object from the response, call the Extract method on the // CreateResult. func Create(client *gophercloud.ServiceClient, opts CreateOptsBuilder) CreateResult { return CreateResult{os.Create(client, opts)} }