Small clean-ups

This commit is contained in:
Justin Santa Barbara
2015-04-02 11:56:11 -07:00
parent f2184e0860
commit 6c823dbdab
3 changed files with 24 additions and 17 deletions

View File

@@ -70,7 +70,8 @@ type VolumeOptions struct {
type Volumes interface { type Volumes interface {
// Attach the disk to the specified instance // Attach the disk to the specified instance
// instanceName can be empty to mean "the instance on which we are running" // instanceName can be empty to mean "the instance on which we are running"
AttachDisk(instanceName string, volumeName string, readOnly bool) error // Returns the device (e.g. /dev/xvdf) where we attached the volume
AttachDisk(instanceName string, volumeName string, readOnly bool) (string, error)
// Detach the disk from the specified instance // Detach the disk from the specified instance
// instanceName can be empty to mean "the instance on which we are running" // instanceName can be empty to mean "the instance on which we are running"
DetachDisk(instanceName string, volumeName string) error DetachDisk(instanceName string, volumeName string) error
@@ -819,10 +820,10 @@ func (aws *AWSCloud) getSelfAwsInstance() *awsInstance {
} }
// Implements Volumes.AttachDisk // Implements Volumes.AttachDisk
func (aws *AWSCloud) AttachDisk(instanceName string, diskName string, readOnly bool) error { func (aws *AWSCloud) AttachDisk(instanceName string, diskName string, readOnly bool) (string, error) {
disk, err := newAwsDisk(aws.ec2, diskName) disk, err := newAwsDisk(aws.ec2, diskName)
if err != nil { if err != nil {
return err return "", err
} }
var awsInstance *awsInstance var awsInstance *awsInstance
@@ -831,7 +832,7 @@ func (aws *AWSCloud) AttachDisk(instanceName string, diskName string, readOnly b
} else { } else {
instance, err := aws.getInstancesByDnsName(instanceName) instance, err := aws.getInstancesByDnsName(instanceName)
if err != nil { if err != nil {
return fmt.Errorf("Error finding instance: %v", err) return "", fmt.Errorf("Error finding instance: %v", err)
} }
awsInstance = newAwsInstance(aws.ec2, instance.InstanceId) awsInstance = newAwsInstance(aws.ec2, instance.InstanceId)
@@ -840,12 +841,12 @@ func (aws *AWSCloud) AttachDisk(instanceName string, diskName string, readOnly b
if readOnly { if readOnly {
// TODO: We could enforce this when we mount the volume (?) // TODO: We could enforce this when we mount the volume (?)
// TODO: We could also snapshot the volume and attach copies of it // TODO: We could also snapshot the volume and attach copies of it
return errors.New("AWS volumes cannot be mounted read-only") return "", errors.New("AWS volumes cannot be mounted read-only")
} }
mountDevice, alreadyAttached, err := awsInstance.assignMountDevice(disk.awsId) mountDevice, alreadyAttached, err := awsInstance.assignMountDevice(disk.awsId)
if err != nil { if err != nil {
return err return "", err
} }
attached := false attached := false
@@ -858,8 +859,8 @@ func (aws *AWSCloud) AttachDisk(instanceName string, diskName string, readOnly b
if !alreadyAttached { if !alreadyAttached {
attachResponse, err := aws.ec2.AttachVolume(disk.awsId, awsInstance.awsId, mountDevice) attachResponse, err := aws.ec2.AttachVolume(disk.awsId, awsInstance.awsId, mountDevice)
if err != nil { if err != nil {
// TODO: Check if concurrently attached? // TODO: Check if the volume was concurrently attached?
return fmt.Errorf("Error attaching EBS volume: %v", err) return "", fmt.Errorf("Error attaching EBS volume: %v", err)
} }
glog.V(2).Info("AttachVolume request returned %v", attachResponse) glog.V(2).Info("AttachVolume request returned %v", attachResponse)
@@ -867,13 +868,17 @@ func (aws *AWSCloud) AttachDisk(instanceName string, diskName string, readOnly b
err = disk.waitForAttachmentStatus("attached") err = disk.waitForAttachmentStatus("attached")
if err != nil { if err != nil {
return err return "", err
} }
attached = true attached = true
// TODO: Return device name (and note that it might look like /dev/xvdf, not /dev/sdf) hostDevice := mountDevice
return nil if strings.HasPrefix(hostDevice, "/dev/sd") {
// Inside the instance, the mountpoint /dev/sdf looks like /dev/xvdf
hostDevice = "/dev/xvd" + hostDevice[7:]
}
return hostDevice, nil
} }
// Implements Volumes.DetachDisk // Implements Volumes.DetachDisk

View File

@@ -231,7 +231,10 @@ func (pd *awsPersistentDisk) SetUpAt(dir string) error {
} }
func makeGlobalPDName(host volume.VolumeHost, devName string) string { func makeGlobalPDName(host volume.VolumeHost, devName string) string {
return path.Join(host.GetPluginDir(awsPersistentDiskPluginName), "mounts", devName) // Clean up the URI to be more fs-friendly
name := devName
name = strings.Replace(name, "://", "/", -1)
return path.Join(host.GetPluginDir(awsPersistentDiskPluginName), "mounts", name)
} }
func (pd *awsPersistentDisk) GetPath() string { func (pd *awsPersistentDisk) GetPath() string {

View File

@@ -20,7 +20,6 @@ import (
"errors" "errors"
"fmt" "fmt"
"os" "os"
"path"
"time" "time"
"github.com/GoogleCloudPlatform/kubernetes/pkg/util/exec" "github.com/GoogleCloudPlatform/kubernetes/pkg/util/exec"
@@ -41,12 +40,12 @@ func (util *AWSDiskUtil) AttachAndMountDisk(pd *awsPersistentDisk, globalPDPath
if pd.readOnly { if pd.readOnly {
flags = mount.FlagReadOnly flags = mount.FlagReadOnly
} }
if err := volumes.AttachDisk("", pd.pdName, pd.readOnly); err != nil { devicePath, err := volumes.AttachDisk("", pd.pdName, pd.readOnly)
if err != nil {
return err return err
} }
devicePath := path.Join("/dev/disk/by-id/", "aws-"+pd.pdName)
if pd.partition != "" { if pd.partition != "" {
devicePath = devicePath + "-part" + pd.partition devicePath = devicePath + pd.partition
} }
//TODO(jonesdl) There should probably be better method than busy-waiting here. //TODO(jonesdl) There should probably be better method than busy-waiting here.
numTries := 0 numTries := 0
@@ -60,7 +59,7 @@ func (util *AWSDiskUtil) AttachAndMountDisk(pd *awsPersistentDisk, globalPDPath
} }
numTries++ numTries++
if numTries == 10 { if numTries == 10 {
return errors.New("Could not attach disk: Timeout after 10s") return errors.New("Could not attach disk: Timeout after 10s (" + devicePath + ")")
} }
time.Sleep(time.Second) time.Sleep(time.Second)
} }