diff --git a/pkg/cloudprovider/providers/openstack/openstack_test.go b/pkg/cloudprovider/providers/openstack/openstack_test.go index 40855e24a99..ada583d30e5 100644 --- a/pkg/cloudprovider/providers/openstack/openstack_test.go +++ b/pkg/cloudprovider/providers/openstack/openstack_test.go @@ -104,6 +104,7 @@ func TestReadConfig(t *testing.T) { auth-url = http://auth.url user-id = user tenant-name = demo + region = RegionOne [LoadBalancer] create-monitor = yes monitor-delay = 1m @@ -136,6 +137,10 @@ func TestReadConfig(t *testing.T) { t.Errorf("incorrect tenant name: %s", cfg.Global.TenantName) } + if cfg.Global.Region != "RegionOne" { + t.Errorf("incorrect region: %s", cfg.Global.Region) + } + if !cfg.LoadBalancer.CreateMonitor { t.Errorf("incorrect lb.createmonitor: %t", cfg.LoadBalancer.CreateMonitor) } @@ -554,7 +559,7 @@ func TestVolumes(t *testing.T) { tags := map[string]string{ "test": "value", } - vol, _, _, err := os.CreateVolume("kubernetes-test-volume-"+rand.String(10), 1, "", "", &tags) + vol, _, _, _, err := os.CreateVolume("kubernetes-test-volume-"+rand.String(10), 1, "", "", &tags) if err != nil { t.Fatalf("Cannot create a new Cinder volume: %v", err) } diff --git a/pkg/cloudprovider/providers/openstack/openstack_volumes.go b/pkg/cloudprovider/providers/openstack/openstack_volumes.go index f50a2311974..d8ea91c2085 100644 --- a/pkg/cloudprovider/providers/openstack/openstack_volumes.go +++ b/pkg/cloudprovider/providers/openstack/openstack_volumes.go @@ -443,10 +443,10 @@ func (os *OpenStack) getVolume(volumeID string) (Volume, error) { } // CreateVolume creates a volume of given size (in GiB) -func (os *OpenStack) CreateVolume(name string, size int, vtype, availability string, tags *map[string]string) (string, string, bool, error) { +func (os *OpenStack) CreateVolume(name string, size int, vtype, availability string, tags *map[string]string) (string, string, string, bool, error) { volumes, err := os.volumeService("") if err != nil { - return "", "", os.bsOpts.IgnoreVolumeAZ, fmt.Errorf("unable to initialize cinder client for region: %s, err: %v", os.region, err) + return "", "", "", os.bsOpts.IgnoreVolumeAZ, fmt.Errorf("unable to initialize cinder client for region: %s, err: %v", os.region, err) } opts := volumeCreateOpts{ @@ -462,11 +462,11 @@ func (os *OpenStack) CreateVolume(name string, size int, vtype, availability str volumeID, volumeAZ, err := volumes.createVolume(opts) if err != nil { - return "", "", os.bsOpts.IgnoreVolumeAZ, fmt.Errorf("failed to create a %d GB volume: %v", size, err) + return "", "", "", os.bsOpts.IgnoreVolumeAZ, fmt.Errorf("failed to create a %d GB volume: %v", size, err) } - glog.Infof("Created volume %v in Availability Zone: %v Ignore volume AZ: %v", volumeID, volumeAZ, os.bsOpts.IgnoreVolumeAZ) - return volumeID, volumeAZ, os.bsOpts.IgnoreVolumeAZ, nil + glog.Infof("Created volume %v in Availability Zone: %v Region: %v Ignore volume AZ: %v", volumeID, volumeAZ, os.region, os.bsOpts.IgnoreVolumeAZ) + return volumeID, volumeAZ, os.region, os.bsOpts.IgnoreVolumeAZ, nil } // GetDevicePathBySerialID returns the path of an attached block storage volume, specified by its id. diff --git a/pkg/volume/cinder/attacher_test.go b/pkg/volume/cinder/attacher_test.go index 6acb573a51b..eaec0a1dccd 100644 --- a/pkg/volume/cinder/attacher_test.go +++ b/pkg/volume/cinder/attacher_test.go @@ -615,8 +615,8 @@ func (testcase *testcase) DiskIsAttachedByName(nodeName types.NodeName, volumeID return expected.isAttached, expected.instanceID, expected.ret } -func (testcase *testcase) CreateVolume(name string, size int, vtype, availability string, tags *map[string]string) (string, string, bool, error) { - return "", "", false, errors.New("Not implemented") +func (testcase *testcase) CreateVolume(name string, size int, vtype, availability string, tags *map[string]string) (string, string, string, bool, error) { + return "", "", "", false, errors.New("Not implemented") } func (testcase *testcase) GetDevicePath(volumeID string) string { diff --git a/pkg/volume/cinder/cinder.go b/pkg/volume/cinder/cinder.go index b64e8c5be07..d799d4b3a6a 100644 --- a/pkg/volume/cinder/cinder.go +++ b/pkg/volume/cinder/cinder.go @@ -53,7 +53,7 @@ type BlockStorageProvider interface { AttachDisk(instanceID, volumeID string) (string, error) DetachDisk(instanceID, volumeID string) error DeleteVolume(volumeID string) error - CreateVolume(name string, size int, vtype, availability string, tags *map[string]string) (string, string, bool, error) + CreateVolume(name string, size int, vtype, availability string, tags *map[string]string) (string, string, string, bool, error) GetDevicePath(volumeID string) string InstanceID() (string, error) GetAttachmentDiskPath(instanceID, volumeID string) (string, error) diff --git a/pkg/volume/cinder/cinder_util.go b/pkg/volume/cinder/cinder_util.go index 8a5e25d8daf..d28a469e497 100644 --- a/pkg/volume/cinder/cinder_util.go +++ b/pkg/volume/cinder/cinder_util.go @@ -208,10 +208,10 @@ func (util *DiskUtil) CreateVolume(c *cinderVolumeProvisioner) (volumeID string, } } - volumeID, volumeAZ, IgnoreVolumeAZ, errr := cloud.CreateVolume(name, volSizeGB, vtype, availability, c.options.CloudTags) - if errr != nil { - glog.V(2).Infof("Error creating cinder volume: %v", errr) - return "", 0, nil, "", errr + volumeID, volumeAZ, volumeRegion, IgnoreVolumeAZ, err := cloud.CreateVolume(name, volSizeGB, vtype, availability, c.options.CloudTags) + if err != nil { + glog.V(2).Infof("Error creating cinder volume: %v", err) + return "", 0, nil, "", err } glog.V(2).Infof("Successfully created cinder volume %s", volumeID) @@ -219,6 +219,7 @@ func (util *DiskUtil) CreateVolume(c *cinderVolumeProvisioner) (volumeID string, volumeLabels = make(map[string]string) if IgnoreVolumeAZ == false { volumeLabels[kubeletapis.LabelZoneFailureDomain] = volumeAZ + volumeLabels[kubeletapis.LabelZoneRegion] = volumeRegion } return volumeID, volSizeGB, volumeLabels, fstype, nil }