GCE changes for the new provisioning model
This commit is contained in:
@@ -101,6 +101,16 @@ type Config struct {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type DiskType string
|
||||||
|
|
||||||
|
const (
|
||||||
|
DiskTypeSSD = "pd-ssd"
|
||||||
|
DiskTypeStandard = "pd-standard"
|
||||||
|
|
||||||
|
diskTypeDefault = DiskTypeStandard
|
||||||
|
diskTypeUriTemplate = "https://www.googleapis.com/compute/v1/projects/%s/zones/%s/diskTypes/%s"
|
||||||
|
)
|
||||||
|
|
||||||
// Disks is interface for manipulation with GCE PDs.
|
// Disks is interface for manipulation with GCE PDs.
|
||||||
type Disks interface {
|
type Disks interface {
|
||||||
// AttachDisk attaches given disk to given instance. Current instance
|
// AttachDisk attaches given disk to given instance. Current instance
|
||||||
@@ -116,7 +126,7 @@ type Disks interface {
|
|||||||
|
|
||||||
// CreateDisk creates a new PD with given properties. Tags are serialized
|
// CreateDisk creates a new PD with given properties. Tags are serialized
|
||||||
// as JSON into Description field.
|
// as JSON into Description field.
|
||||||
CreateDisk(name string, zone string, sizeGb int64, tags map[string]string) error
|
CreateDisk(name string, diskType string, zone string, sizeGb int64, tags map[string]string) error
|
||||||
|
|
||||||
// DeleteDisk deletes PD.
|
// DeleteDisk deletes PD.
|
||||||
DeleteDisk(diskToDelete string) error
|
DeleteDisk(diskToDelete string) error
|
||||||
@@ -2258,18 +2268,29 @@ func (gce *GCECloud) encodeDiskTags(tags map[string]string) (string, error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// CreateDisk creates a new Persistent Disk, with the specified name & size, in
|
// CreateDisk creates a new Persistent Disk, with the specified name & size, in
|
||||||
// the specified zone. It stores specified tags endoced in JSON in Description
|
// the specified zone. It stores specified tags encoded in JSON in Description
|
||||||
// field.
|
// field.
|
||||||
func (gce *GCECloud) CreateDisk(name string, zone string, sizeGb int64, tags map[string]string) error {
|
func (gce *GCECloud) CreateDisk(name string, diskType string, zone string, sizeGb int64, tags map[string]string) error {
|
||||||
tagsStr, err := gce.encodeDiskTags(tags)
|
tagsStr, err := gce.encodeDiskTags(tags)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
switch diskType {
|
||||||
|
case DiskTypeSSD, DiskTypeStandard:
|
||||||
|
// noop
|
||||||
|
case "":
|
||||||
|
diskType = diskTypeDefault
|
||||||
|
default:
|
||||||
|
return fmt.Errorf("invalid GCE disk type %q", diskType)
|
||||||
|
}
|
||||||
|
diskTypeUri := fmt.Sprintf(diskTypeUriTemplate, gce.projectID, zone, diskType)
|
||||||
|
|
||||||
diskToCreate := &compute.Disk{
|
diskToCreate := &compute.Disk{
|
||||||
Name: name,
|
Name: name,
|
||||||
SizeGb: sizeGb,
|
SizeGb: sizeGb,
|
||||||
Description: tagsStr,
|
Description: tagsStr,
|
||||||
|
Type: diskTypeUri,
|
||||||
}
|
}
|
||||||
|
|
||||||
createOp, err := gce.service.Disks.Insert(gce.projectID, zone, diskToCreate).Do()
|
createOp, err := gce.service.Disks.Insert(gce.projectID, zone, diskToCreate).Do()
|
||||||
|
@@ -351,7 +351,7 @@ func (testcase *testcase) DiskIsAttached(diskName, instanceID string) (bool, err
|
|||||||
return expected.isAttached, expected.ret
|
return expected.isAttached, expected.ret
|
||||||
}
|
}
|
||||||
|
|
||||||
func (testcase *testcase) CreateDisk(name string, zone string, sizeGb int64, tags map[string]string) error {
|
func (testcase *testcase) CreateDisk(name string, diskType string, zone string, sizeGb int64, tags map[string]string) error {
|
||||||
return errors.New("Not implemented")
|
return errors.New("Not implemented")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -79,17 +79,38 @@ func (gceutil *GCEDiskUtil) CreateVolume(c *gcePersistentDiskProvisioner) (strin
|
|||||||
// GCE works with gigabytes, convert to GiB with rounding up
|
// GCE works with gigabytes, convert to GiB with rounding up
|
||||||
requestGB := volume.RoundUpSize(requestBytes, 1024*1024*1024)
|
requestGB := volume.RoundUpSize(requestBytes, 1024*1024*1024)
|
||||||
|
|
||||||
// The disk will be created in the zone in which this code is currently running
|
// Apply Parameters (case-insensitive). We leave validation of
|
||||||
// TODO: We should support auto-provisioning volumes in multiple/specified zones
|
// the values to the cloud provider.
|
||||||
zones, err := cloud.GetAllZones()
|
diskType := ""
|
||||||
if err != nil {
|
zone := ""
|
||||||
glog.V(2).Infof("error getting zone information from GCE: %v", err)
|
for k, v := range c.options.Parameters {
|
||||||
return "", 0, nil, err
|
switch strings.ToLower(k) {
|
||||||
|
case "type":
|
||||||
|
diskType = v
|
||||||
|
case "zone":
|
||||||
|
zone = v
|
||||||
|
default:
|
||||||
|
return "", 0, nil, fmt.Errorf("invalid option %q for volume plugin %s", k, c.plugin.GetPluginName())
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
zone := volume.ChooseZoneForVolume(zones, c.options.PVCName)
|
// TODO: implement c.options.ProvisionerSelector parsing
|
||||||
|
if c.options.Selector != nil {
|
||||||
|
return "", 0, nil, fmt.Errorf("claim.Spec.Selector is not supported for dynamic provisioning on GCE")
|
||||||
|
}
|
||||||
|
|
||||||
err = cloud.CreateDisk(name, zone, int64(requestGB), *c.options.CloudTags)
|
if zone == "" {
|
||||||
|
// No zone specified, choose one randomly in the same region as the
|
||||||
|
// node is running.
|
||||||
|
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, diskType, zone, int64(requestGB), *c.options.CloudTags)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
glog.V(2).Infof("Error creating GCE PD volume: %v", err)
|
glog.V(2).Infof("Error creating GCE PD volume: %v", err)
|
||||||
return "", 0, nil, err
|
return "", 0, nil, err
|
||||||
|
@@ -469,7 +469,7 @@ func createPD() (string, error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
tags := map[string]string{}
|
tags := map[string]string{}
|
||||||
err = gceCloud.CreateDisk(pdName, framework.TestContext.CloudConfig.Zone, 10 /* sizeGb */, tags)
|
err = gceCloud.CreateDisk(pdName, gcecloud.DiskTypeSSD, framework.TestContext.CloudConfig.Zone, 10 /* sizeGb */, tags)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return "", err
|
return "", err
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user