// CreateVolume creates a vSphere volume. func (util *VsphereDiskUtil) CreateVolume(v *vsphereVolumeProvisioner) (vmDiskPath string, volumeSizeKB int, err error) { cloud, err := v.plugin.getCloudProvider() if err != nil { return "", 0, err } volSizeBytes := v.options.Capacity.Value() // vSphere works with kilobytes, convert to KiB with rounding up volSizeKB := int(volume.RoundUpSize(volSizeBytes, 1024)) name := volume.GenerateVolumeName(v.options.ClusterName, v.options.PVName, 255) vmDiskPath, err = cloud.CreateVolume(name, volSizeKB, v.options.CloudTags) if err != nil { glog.V(2).Infof("Error creating vsphere volume: %v", err) return "", 0, err } glog.V(2).Infof("Successfully created vsphere volume %s", name) return vmDiskPath, volSizeKB, nil }
func (util *CinderDiskUtil) CreateVolume(c *cinderVolumeProvisioner) (volumeID string, volumeSizeGB int, err error) { cloud, err := c.plugin.getCloudProvider() if err != nil { return "", 0, err } volSizeBytes := c.options.Capacity.Value() // Cinder works with gigabytes, convert to GiB with rounding up volSizeGB := int(volume.RoundUpSize(volSizeBytes, 1024*1024*1024)) name := volume.GenerateVolumeName(c.options.ClusterName, c.options.PVName, 255) // Cinder volume name can have up to 255 characters name, err = cloud.CreateVolume(name, volSizeGB, c.options.CloudTags) if err != nil { glog.V(2).Infof("Error creating cinder volume: %v", err) return "", 0, err } glog.V(2).Infof("Successfully created cinder volume %s", name) return name, volSizeGB, nil }
// CreateVolume creates an AWS EBS volume. // Returns: volumeID, volumeSizeGB, labels, error func (util *AWSDiskUtil) CreateVolume(c *awsElasticBlockStoreProvisioner) (string, int, map[string]string, error) { cloud, err := getCloudProvider(c.awsElasticBlockStore.plugin.host.GetCloudProvider()) if err != nil { return "", 0, nil, err } // AWS volumes don't have Name field, store the name in Name tag var tags map[string]string if c.options.CloudTags == nil { tags = make(map[string]string) } else { tags = *c.options.CloudTags } tags["Name"] = volume.GenerateVolumeName(c.options.ClusterName, c.options.PVName, 255) // AWS tags can have 255 characters requestBytes := c.options.Capacity.Value() // AWS works with gigabytes, convert to GiB with rounding up requestGB := int(volume.RoundUpSize(requestBytes, 1024*1024*1024)) volumeOptions := &aws.VolumeOptions{ CapacityGB: requestGB, Tags: tags, PVCName: c.options.PVCName, } name, err := cloud.CreateDisk(volumeOptions) if err != nil { glog.V(2).Infof("Error creating EBS Disk volume: %v", err) return "", 0, nil, err } glog.V(2).Infof("Successfully created EBS Disk volume %s", name) labels, err := cloud.GetVolumeLabels(name) if err != nil { // We don't really want to leak the volume here... glog.Errorf("error building labels for new EBS volume %q: %v", name, err) } return name, int(requestGB), labels, nil }
// CreateVolume creates a GCE PD. // Returns: volumeID, volumeSizeGB, labels, error func (gceutil *GCEDiskUtil) CreateVolume(c *gcePersistentDiskProvisioner) (string, int, map[string]string, error) { cloud, err := getCloudProvider(c.gcePersistentDisk.plugin.host.GetCloudProvider()) if err != nil { return "", 0, nil, err } name := volume.GenerateVolumeName(c.options.ClusterName, c.options.PVName, 63) // GCE PD name can have up to 63 characters requestBytes := c.options.Capacity.Value() // GCE works with gigabytes, convert to GiB with rounding up requestGB := volume.RoundUpSize(requestBytes, 1024*1024*1024) // The disk will be created in the zone in which this code is currently running // TODO: We should support auto-provisioning volumes in multiple/specified zones zones, err := cloud.GetAllZones() if err != nil { glog.V(2).Infof("error getting zone information from GCE: %v", err) return "", 0, nil, err } zone := volume.ChooseZoneForVolume(zones, c.options.PVCName) err = cloud.CreateDisk(name, zone, int64(requestGB), *c.options.CloudTags) if err != nil { glog.V(2).Infof("Error creating GCE PD volume: %v", err) return "", 0, nil, err } glog.V(2).Infof("Successfully created GCE PD volume %s", name) labels, err := cloud.GetAutoLabelsForPD(name, zone) if err != nil { // We don't really want to leak the volume here... glog.Errorf("error getting labels for volume %q: %v", name, err) } return name, int(requestGB), labels, nil }