// CreateVolumeFromImage will create a volume from with a random name and size of // 1GB. An error will be returned if the volume was unable to be created. func CreateVolumeFromImage(t *testing.T, client *gophercloud.ServiceClient, choices *clients.AcceptanceTestChoices) (*volumes.Volume, error) { if testing.Short() { t.Skip("Skipping test that requires volume creation in short mode.") } volumeName := tools.RandomString("ACPTTEST", 16) t.Logf("Attempting to create volume: %s", volumeName) createOpts := volumes.CreateOpts{ Size: 1, Name: volumeName, ImageID: choices.ImageID, } volume, err := volumes.Create(client, createOpts).Extract() if err != nil { return volume, err } err = volumes.WaitForStatus(client, volume.ID, "available", 60) if err != nil { return volume, err } return volume, nil }
func resourceBlockStorageVolumeV2Create(d *schema.ResourceData, meta interface{}) error { config := meta.(*Config) blockStorageClient, err := config.blockStorageV2Client(GetRegion(d)) if err != nil { return fmt.Errorf("Error creating OpenStack block storage client: %s", err) } createOpts := &volumes.CreateOpts{ AvailabilityZone: d.Get("availability_zone").(string), ConsistencyGroupID: d.Get("consistency_group_id").(string), Description: d.Get("description").(string), ImageID: d.Get("image_id").(string), Metadata: resourceContainerMetadataV2(d), Name: d.Get("name").(string), Size: d.Get("size").(int), SnapshotID: d.Get("snapshot_id").(string), SourceReplica: d.Get("source_replica").(string), SourceVolID: d.Get("source_vol_id").(string), VolumeType: d.Get("volume_type").(string), } log.Printf("[DEBUG] Create Options: %#v", createOpts) v, err := volumes.Create(blockStorageClient, createOpts).Extract() if err != nil { return fmt.Errorf("Error creating OpenStack volume: %s", err) } log.Printf("[INFO] Volume ID: %s", v.ID) // Wait for the volume to become available. log.Printf( "[DEBUG] Waiting for volume (%s) to become available", v.ID) stateConf := &resource.StateChangeConf{ Pending: []string{"downloading", "creating"}, Target: []string{"available"}, Refresh: VolumeV2StateRefreshFunc(blockStorageClient, v.ID), Timeout: 10 * time.Minute, Delay: 10 * time.Second, MinTimeout: 3 * time.Second, } _, err = stateConf.WaitForState() if err != nil { return fmt.Errorf( "Error waiting for volume (%s) to become ready: %s", v.ID, err) } // Store the ID now d.SetId(v.ID) return resourceBlockStorageVolumeV2Read(d, meta) }
func TestCreate(t *testing.T) { th.SetupHTTP() defer th.TeardownHTTP() MockCreateResponse(t) options := &volumes.CreateOpts{Size: 75, Name: "vol-001"} n, err := volumes.Create(client.ServiceClient(), options).Extract() th.AssertNoErr(t, err) th.AssertEquals(t, n.Size, 75) th.AssertEquals(t, n.ID, "d32019d3-bc6e-4319-9c1d-6722fc136a22") }