Skip to content
This repository was archived by the owner on Mar 22, 2018. It is now read-only.

Commit 7b4632e

Browse files
Merge branch 'master' into lb
2 parents e24e335 + 3cb72bd commit 7b4632e

11 files changed

Lines changed: 129 additions & 617 deletions

File tree

cluster/addons/storage-class/openstack/default.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
apiVersion: storage.k8s.io/v1beta1
1+
apiVersion: storage.k8s.io/v1
22
kind: StorageClass
33
metadata:
44
name: standard

pkg/cloudprovider/providers/openstack/BUILD

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -39,10 +39,6 @@ go_library(
3939
"//vendor/github.com/gophercloud/gophercloud/openstack/networking/v2/extensions:go_default_library",
4040
"//vendor/github.com/gophercloud/gophercloud/openstack/networking/v2/extensions/layer3/floatingips:go_default_library",
4141
"//vendor/github.com/gophercloud/gophercloud/openstack/networking/v2/extensions/layer3/routers:go_default_library",
42-
"//vendor/github.com/gophercloud/gophercloud/openstack/networking/v2/extensions/lbaas/members:go_default_library",
43-
"//vendor/github.com/gophercloud/gophercloud/openstack/networking/v2/extensions/lbaas/monitors:go_default_library",
44-
"//vendor/github.com/gophercloud/gophercloud/openstack/networking/v2/extensions/lbaas/pools:go_default_library",
45-
"//vendor/github.com/gophercloud/gophercloud/openstack/networking/v2/extensions/lbaas/vips:go_default_library",
4642
"//vendor/github.com/gophercloud/gophercloud/openstack/networking/v2/extensions/lbaas_v2/listeners:go_default_library",
4743
"//vendor/github.com/gophercloud/gophercloud/openstack/networking/v2/extensions/lbaas_v2/loadbalancers:go_default_library",
4844
"//vendor/github.com/gophercloud/gophercloud/openstack/networking/v2/extensions/lbaas_v2/monitors:go_default_library",

pkg/cloudprovider/providers/openstack/metadata.go

Lines changed: 7 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ const (
5252
configDriveID = "configDrive"
5353
)
5454

55-
var ErrBadMetadata = errors.New("Invalid OpenStack metadata, got empty uuid")
55+
var ErrBadMetadata = errors.New("invalid OpenStack metadata, got empty uuid")
5656

5757
// Assumes the "2012-08-10" meta_data.json format.
5858
// See http://docs.openstack.org/user-guide/cli_config_drive.html
@@ -89,8 +89,7 @@ func getMetadataFromConfigDrive() (*Metadata, error) {
8989
"-o", "device",
9090
).CombinedOutput()
9191
if err != nil {
92-
glog.V(2).Infof("Unable to run blkid: %v", err)
93-
return nil, err
92+
return nil, fmt.Errorf("unable to run blkid: %v", err)
9493
}
9594
dev = strings.TrimSpace(string(out))
9695
}
@@ -109,8 +108,7 @@ func getMetadataFromConfigDrive() (*Metadata, error) {
109108
err = mounter.Mount(dev, mntdir, "vfat", []string{"ro"})
110109
}
111110
if err != nil {
112-
glog.Errorf("Error mounting configdrive %s: %v", dev, err)
113-
return nil, err
111+
return nil, fmt.Errorf("error mounting configdrive %s: %v", dev, err)
114112
}
115113
defer mounter.Unmount(mntdir)
116114

@@ -119,27 +117,24 @@ func getMetadataFromConfigDrive() (*Metadata, error) {
119117
f, err := os.Open(
120118
filepath.Join(mntdir, configDrivePath))
121119
if err != nil {
122-
glog.Errorf("Error reading %s on config drive: %v", configDrivePath, err)
123-
return nil, err
120+
return nil, fmt.Errorf("error reading %s on config drive: %v", configDrivePath, err)
124121
}
125122
defer f.Close()
126123

127124
return parseMetadata(f)
128125
}
129126

130127
func getMetadataFromMetadataService() (*Metadata, error) {
131-
// Try to get JSON from metdata server.
128+
// Try to get JSON from metadata server.
132129
glog.V(4).Infof("Attempting to fetch metadata from %s", metadataUrl)
133130
resp, err := http.Get(metadataUrl)
134131
if err != nil {
135-
glog.V(3).Infof("Cannot read %s: %v", metadataUrl, err)
136-
return nil, err
132+
return nil, fmt.Errorf("error fetching %s: %v", metadataUrl, err)
137133
}
138134
defer resp.Body.Close()
139135

140136
if resp.StatusCode != http.StatusOK {
141-
err = fmt.Errorf("Unexpected status code when reading metadata from %s: %s", metadataUrl, resp.Status)
142-
glog.V(3).Infof("%v", err)
137+
err = fmt.Errorf("unexpected status code when reading metadata from %s: %s", metadataUrl, resp.Status)
143138
return nil, err
144139
}
145140

pkg/cloudprovider/providers/openstack/openstack.go

Lines changed: 17 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -53,9 +53,9 @@ const (
5353
defaultTimeOut = 60 * time.Second
5454
)
5555

56-
var ErrNotFound = errors.New("Failed to find object")
57-
var ErrMultipleResults = errors.New("Multiple results where only one expected")
58-
var ErrNoAddressFound = errors.New("No address found for host")
56+
var ErrNotFound = errors.New("failed to find object")
57+
var ErrMultipleResults = errors.New("multiple results where only one expected")
58+
var ErrNoAddressFound = errors.New("no address found for host")
5959

6060
// encoding.TextUnmarshaler interface for time.Duration
6161
type MyDuration struct {
@@ -78,10 +78,11 @@ type LoadBalancer struct {
7878
}
7979

8080
type LoadBalancerOpts struct {
81-
LBVersion string `gcfg:"lb-version"` // overrides autodetection. v1 or v2
81+
LBVersion string `gcfg:"lb-version"` // overrides autodetection. Only support v2.
8282
SubnetId string `gcfg:"subnet-id"` // overrides autodetection.
8383
FloatingNetworkId string `gcfg:"floating-network-id"` // If specified, will create floating ip for loadbalancer, or do not create floating ip.
8484
LBMethod string `gcfg:"lb-method"` // default to ROUND_ROBIN.
85+
LBProvider string `gcfg:"lb-provider"`
8586
CreateMonitor bool `gcfg:"create-monitor"`
8687
MonitorDelay MyDuration `gcfg:"monitor-delay"`
8788
MonitorTimeout MyDuration `gcfg:"monitor-timeout"`
@@ -179,8 +180,7 @@ func (cfg Config) toAuth3Options() tokens3.AuthOptions {
179180

180181
func readConfig(config io.Reader) (Config, error) {
181182
if config == nil {
182-
err := fmt.Errorf("no OpenStack cloud provider config file given")
183-
return Config{}, err
183+
return Config{}, fmt.Errorf("no OpenStack cloud provider config file given")
184184
}
185185

186186
var cfg Config
@@ -507,39 +507,17 @@ func (os *OpenStack) LoadBalancer() (cloudprovider.LoadBalancer, bool) {
507507
return nil, false
508508
}
509509

510+
// LBaaS v1 is deprecated in the OpenStack Liberty release.
511+
// Currently kubernetes OpenStack cloud provider just support LBaaS v2.
510512
lbVersion := os.lbOpts.LBVersion
511-
if lbVersion == "" {
512-
// No version specified, try newest supported by server
513-
netExts, err := networkExtensions(network)
514-
if err != nil {
515-
glog.Warningf("Failed to list neutron extensions: %v", err)
516-
return nil, false
517-
}
518-
519-
if netExts["lbaasv2"] {
520-
lbVersion = "v2"
521-
} else if netExts["lbaas"] {
522-
lbVersion = "v1"
523-
} else {
524-
glog.Warningf("Failed to find neutron LBaaS extension (v1 or v2)")
525-
return nil, false
526-
}
527-
glog.V(3).Infof("Using LBaaS extension %v", lbVersion)
513+
if lbVersion != "" && lbVersion != "v2" {
514+
glog.Warningf("Config error: currently only support LBaaS v2, unrecognised lb-version \"%v\"", lbVersion)
515+
return nil, false
528516
}
529517

530518
glog.V(1).Info("Claiming to support LoadBalancer")
531519

532-
if lbVersion == "v2" {
533-
return &LbaasV2{LoadBalancer{network, compute, os.lbOpts}}, true
534-
} else if lbVersion == "v1" {
535-
// Since LBaaS v1 is deprecated in the OpenStack Liberty release, so deprecate LBaaSV1 at V1.8, then remove LBaaSV1 after V1.9.
536-
// Reference OpenStack doc: https://docs.openstack.org/mitaka/networking-guide/config-lbaas.html
537-
glog.Warningf("The LBaaS v1 of OpenStack cloud provider has been deprecated, Please use LBaaS v2")
538-
return &LbaasV1{LoadBalancer{network, compute, os.lbOpts}}, true
539-
} else {
540-
glog.Warningf("Config error: unrecognised lb-version \"%v\"", lbVersion)
541-
return nil, false
542-
}
520+
return &LbaasV2{LoadBalancer{network, compute, os.lbOpts}}, true
543521
}
544522

545523
func isNotFound(err error) bool {
@@ -549,7 +527,6 @@ func isNotFound(err error) bool {
549527

550528
func (os *OpenStack) Zones() (cloudprovider.Zones, bool) {
551529
glog.V(1).Info("Claiming to support Zones")
552-
553530
return os, true
554531
}
555532

@@ -563,8 +540,7 @@ func (os *OpenStack) GetZone() (cloudprovider.Zone, error) {
563540
FailureDomain: md.AvailabilityZone,
564541
Region: os.region,
565542
}
566-
glog.V(1).Infof("Current zone is %v", zone)
567-
543+
glog.V(4).Infof("Current zone is %v", zone)
568544
return zone, nil
569545
}
570546

@@ -592,7 +568,6 @@ func (os *OpenStack) GetZoneByProviderID(providerID string) (cloudprovider.Zone,
592568
Region: os.region,
593569
}
594570
glog.V(4).Infof("The instance %s in zone %v", srv.Name, zone)
595-
596571
return zone, nil
597572
}
598573

@@ -618,7 +593,6 @@ func (os *OpenStack) GetZoneByNodeName(nodeName types.NodeName) (cloudprovider.Z
618593
Region: os.region,
619594
}
620595
glog.V(4).Infof("The instance %s in zone %v", srv.Name, zone)
621-
622596
return zone, nil
623597
}
624598

@@ -653,7 +627,6 @@ func (os *OpenStack) Routes() (cloudprovider.Routes, bool) {
653627
}
654628

655629
glog.V(1).Info("Claiming to support Routes")
656-
657630
return r, true
658631
}
659632

@@ -703,19 +676,18 @@ func (os *OpenStack) volumeService(forceVersion string) (volumeService, error) {
703676
}
704677
default:
705678
err_txt := fmt.Sprintf("Config error: unrecognised bs-version \"%v\"", os.bsOpts.BSVersion)
706-
glog.Warningf(err_txt)
707679
return nil, errors.New(err_txt)
708680
}
709681
}
710682

711683
func checkMetadataSearchOrder(order string) error {
712684
if order == "" {
713-
return errors.New("Invalid value in section [Metadata] with key `search-order`. Value cannot be empty")
685+
return errors.New("invalid value in section [Metadata] with key `search-order`. Value cannot be empty")
714686
}
715687

716688
elements := strings.Split(order, ",")
717689
if len(elements) > 2 {
718-
return errors.New("Invalid value in section [Metadata] with key `search-order`. Value cannot contain more than 2 elements")
690+
return errors.New("invalid value in section [Metadata] with key `search-order`. Value cannot contain more than 2 elements")
719691
}
720692

721693
for _, id := range elements {
@@ -724,9 +696,8 @@ func checkMetadataSearchOrder(order string) error {
724696
case configDriveID:
725697
case metadataID:
726698
default:
727-
errTxt := "Invalid element '%s' found in section [Metadata] with key `search-order`." +
728-
"Supported elements include '%s' and '%s'"
729-
return fmt.Errorf(errTxt, id, configDriveID, metadataID)
699+
return fmt.Errorf("invalid element %q found in section [Metadata] with key `search-order`."+
700+
"Supported elements include %q and %q", id, configDriveID, metadataID)
730701
}
731702
}
732703

pkg/cloudprovider/providers/openstack/openstack_client.go

Lines changed: 6 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -17,19 +17,18 @@ limitations under the License.
1717
package openstack
1818

1919
import (
20+
"fmt"
21+
2022
"github.com/gophercloud/gophercloud"
2123
"github.com/gophercloud/gophercloud/openstack"
22-
23-
"github.com/golang/glog"
2424
)
2525

2626
func (os *OpenStack) NewNetworkV2() (*gophercloud.ServiceClient, error) {
2727
network, err := openstack.NewNetworkV2(os.provider, gophercloud.EndpointOpts{
2828
Region: os.region,
2929
})
3030
if err != nil {
31-
glog.Warningf("Failed to find network v2 endpoint for region %s: %v", os.region, err)
32-
return nil, err
31+
return nil, fmt.Errorf("failed to find network v2 endpoint for region %s: %v", os.region, err)
3332
}
3433
return network, nil
3534
}
@@ -39,8 +38,7 @@ func (os *OpenStack) NewComputeV2() (*gophercloud.ServiceClient, error) {
3938
Region: os.region,
4039
})
4140
if err != nil {
42-
glog.Warningf("Failed to find compute v2 endpoint for region %s: %v", os.region, err)
43-
return nil, err
41+
return nil, fmt.Errorf("failed to find compute v2 endpoint for region %s: %v", os.region, err)
4442
}
4543
return compute, nil
4644
}
@@ -50,8 +48,7 @@ func (os *OpenStack) NewBlockStorageV1() (*gophercloud.ServiceClient, error) {
5048
Region: os.region,
5149
})
5250
if err != nil {
53-
glog.Errorf("Unable to initialize cinder v1 client for region %s: %v", os.region, err)
54-
return nil, err
51+
return nil, fmt.Errorf("unable to initialize cinder v1 client for region %s: %v", os.region, err)
5552
}
5653
return storage, nil
5754
}
@@ -61,8 +58,7 @@ func (os *OpenStack) NewBlockStorageV2() (*gophercloud.ServiceClient, error) {
6158
Region: os.region,
6259
})
6360
if err != nil {
64-
glog.Errorf("Unable to initialize cinder v2 client for region %s: %v", os.region, err)
65-
return nil, err
61+
return nil, fmt.Errorf("unable to initialize cinder v2 client for region %s: %v", os.region, err)
6662
}
6763
return storage, nil
6864
}

pkg/cloudprovider/providers/openstack/openstack_instances.go

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -116,7 +116,25 @@ func (i *Instances) ExternalID(name types.NodeName) (string, error) {
116116
// InstanceExistsByProviderID returns true if the instance with the given provider id still exists and is running.
117117
// If false is returned with no error, the instance will be immediately deleted by the cloud controller manager.
118118
func (i *Instances) InstanceExistsByProviderID(providerID string) (bool, error) {
119-
return false, cloudprovider.NotImplemented
119+
instanceID, err := instanceIDFromProviderID(providerID)
120+
if err != nil {
121+
return false, err
122+
}
123+
124+
server, err := servers.Get(i.compute, instanceID).Extract()
125+
if err != nil {
126+
if isNotFound(err) {
127+
return false, nil
128+
}
129+
return false, err
130+
}
131+
132+
if server.Status != "ACTIVE" {
133+
glog.Warningf("the instance %s is not active", instanceID)
134+
return false, nil
135+
}
136+
137+
return true, nil
120138
}
121139

122140
// InstanceID returns the kubelet's cloud provider ID.

0 commit comments

Comments
 (0)