Skip to content

Commit 4fcbde3

Browse files
committed
Make controller server independent of GCE metadata service
1 parent 5bac10a commit 4fcbde3

File tree

9 files changed

+58
-36
lines changed

9 files changed

+58
-36
lines changed

Makefile

+1-1
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ push-container: build-container
4040
gcloud docker -- push $(STAGINGIMAGE):$(STAGINGVERSION)
4141

4242
test-sanity: gce-pd-driver
43-
go test -timeout 30s sigs.k8s.io/gcp-compute-persistent-disk-csi-driver/pkg/test -run ^TestSanity$
43+
go test -v -timeout 30s sigs.k8s.io/gcp-compute-persistent-disk-csi-driver/test/sanity -run ^TestSanity$
4444

4545
test-k8s-integration:
4646
go build -o bin/k8s-integration-test ./test/k8s-integration

pkg/gce-cloud-provider/compute/fake-gce.go

+8
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,14 @@ func CreateFakeCloudProvider(project, zone string, cloudDisks []*CloudDisk) (*Fa
6767
return fcp, nil
6868
}
6969

70+
func (cloud *FakeCloudProvider) GetDefaultProject() string {
71+
return cloud.project
72+
}
73+
74+
func (cloud *FakeCloudProvider) GetDefaultZone() string {
75+
return cloud.zone
76+
}
77+
7078
func (cloud *FakeCloudProvider) RepairUnderspecifiedVolumeKey(ctx context.Context, volumeKey *meta.Key) (*meta.Key, error) {
7179
switch volumeKey.Type() {
7280
case meta.Zonal:

pkg/gce-cloud-provider/compute/gce-compute.go

+13
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,9 @@ const (
3838
)
3939

4040
type GCECompute interface {
41+
// Metadata information
42+
GetDefaultProject() string
43+
GetDefaultZone() string
4144
// Disk Methods
4245
GetDisk(ctx context.Context, volumeKey *meta.Key) (*CloudDisk, error)
4346
RepairUnderspecifiedVolumeKey(ctx context.Context, volumeKey *meta.Key) (*meta.Key, error)
@@ -63,6 +66,16 @@ type GCECompute interface {
6366
DeleteSnapshot(ctx context.Context, snapshotName string) error
6467
}
6568

69+
// GetDefaultProject returns the project that was used to instantiate this GCE client.
70+
func (cloud *CloudProvider) GetDefaultProject() string {
71+
return cloud.project
72+
}
73+
74+
// GetDefaultZone returns the zone that was used to instantiate this GCE client.
75+
func (cloud *CloudProvider) GetDefaultZone() string {
76+
return cloud.zone
77+
}
78+
6679
// ListDisks lists disks based on maxEntries and pageToken only in the project
6780
// and zone that the driver is running in.
6881
func (cloud *CloudProvider) ListDisks(ctx context.Context, maxEntries int64, pageToken string) ([]*computev1.Disk, string, error) {

pkg/gce-cloud-provider/compute/gce.go

+11-4
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,7 @@ type ConfigGlobal struct {
6666
TokenURL string `gcfg:"token-url"`
6767
TokenBody string `gcfg:"token-body"`
6868
ProjectId string `gcfg:"project-id"`
69+
Zone string `gcfg:"zone"`
6970
}
7071

7172
func CreateCloudProvider(ctx context.Context, vendorVersion string, configPath string) (*CloudProvider, error) {
@@ -103,7 +104,6 @@ func CreateCloudProvider(ctx context.Context, vendorVersion string, configPath s
103104
}
104105

105106
func generateTokenSource(ctx context.Context, configFile *ConfigFile) (oauth2.TokenSource, error) {
106-
107107
if configFile != nil && configFile.Global.TokenURL != "" && configFile.Global.TokenURL != "nil" {
108108
// configFile.Global.TokenURL is defined
109109
// Use AltTokenSource
@@ -184,9 +184,16 @@ func newOauthClient(ctx context.Context, tokenSource oauth2.TokenSource) (*http.
184184
func getProjectAndZone(config *ConfigFile) (string, string, error) {
185185
var err error
186186

187-
zone, err := metadata.Zone()
188-
if err != nil {
189-
return "", "", err
187+
var zone string
188+
if config == nil || config.Global.Zone == "" {
189+
zone, err = metadata.Zone()
190+
if err != nil {
191+
return "", "", err
192+
}
193+
klog.V(2).Infof("Using GCP zone from the Metadata server: %q", zone)
194+
} else {
195+
zone = config.Global.Zone
196+
klog.V(2).Infof("Using GCP zone from the local GCE cloud provider config file: %q", zone)
190197
}
191198

192199
var projectID string

pkg/gce-cloud-provider/metadata/fake.go

+2-3
Original file line numberDiff line numberDiff line change
@@ -21,9 +21,8 @@ type fakeServiceManager struct{}
2121
var _ MetadataService = &fakeServiceManager{}
2222

2323
const (
24-
FakeZone = "country-region-zone"
25-
FakeSecondZone = "country-region-zone2"
26-
FakeProject = "test-project"
24+
FakeZone = "country-region-zone"
25+
FakeProject = "test-project"
2726
)
2827

2928
var FakeMachineType = "n1-standard-1"

pkg/gce-pd-csi-driver/controller.go

+6-10
Original file line numberDiff line numberDiff line change
@@ -15,18 +15,16 @@ limitations under the License.
1515
package gceGCEDriver
1616

1717
import (
18+
"context"
1819
"fmt"
1920
"math/rand"
2021
"sort"
2122
"strings"
2223
"time"
2324

24-
"github.com/golang/protobuf/ptypes"
25-
26-
"context"
27-
2825
"github.com/GoogleCloudPlatform/k8s-cloud-provider/pkg/cloud/meta"
2926
csi "github.com/container-storage-interface/spec/lib/go/csi"
27+
"github.com/golang/protobuf/ptypes"
3028
compute "google.golang.org/api/compute/v1"
3129
"google.golang.org/grpc/codes"
3230
"google.golang.org/grpc/status"
@@ -35,13 +33,11 @@ import (
3533

3634
"sigs.k8s.io/gcp-compute-persistent-disk-csi-driver/pkg/common"
3735
gce "sigs.k8s.io/gcp-compute-persistent-disk-csi-driver/pkg/gce-cloud-provider/compute"
38-
metadataservice "sigs.k8s.io/gcp-compute-persistent-disk-csi-driver/pkg/gce-cloud-provider/metadata"
3936
)
4037

4138
type GCEControllerServer struct {
42-
Driver *GCEDriver
43-
CloudProvider gce.GCECompute
44-
MetadataService metadataservice.MetadataService
39+
Driver *GCEDriver
40+
CloudProvider gce.GCECompute
4541

4642
// A map storing all volumes with ongoing operations so that additional
4743
// operations for that same volume (as defined by Volume Key) return an
@@ -141,7 +137,7 @@ func (gceCS *GCEControllerServer) CreateVolume(ctx context.Context, req *csi.Cre
141137
return nil, status.Error(codes.InvalidArgument, fmt.Sprintf("CreateVolume replication type '%s' is not supported", replicationType))
142138
}
143139

144-
volumeID, err := common.KeyToVolumeID(volKey, gceCS.MetadataService.GetProject())
140+
volumeID, err := common.KeyToVolumeID(volKey, gceCS.CloudProvider.GetDefaultProject())
145141
if err != nil {
146142
return nil, status.Errorf(codes.Internal, "Failed to convert volume key to volume ID: %v", err)
147143
}
@@ -950,7 +946,7 @@ func pickZones(ctx context.Context, gceCS *GCEControllerServer, top *csi.Topolog
950946
return nil, fmt.Errorf("failed to pick zones from topology: %v", err)
951947
}
952948
} else {
953-
zones, err = getDefaultZonesInRegion(ctx, gceCS, []string{gceCS.MetadataService.GetZone()}, numZones)
949+
zones, err = getDefaultZonesInRegion(ctx, gceCS, []string{gceCS.CloudProvider.GetDefaultZone()}, numZones)
954950
if err != nil {
955951
return nil, fmt.Errorf("failed to get default %v zones in region: %v", numZones, err)
956952
}

pkg/gce-pd-csi-driver/controller_test.go

+11-11
Original file line numberDiff line numberDiff line change
@@ -35,15 +35,15 @@ import (
3535
csi "github.com/container-storage-interface/spec/lib/go/csi"
3636
"sigs.k8s.io/gcp-compute-persistent-disk-csi-driver/pkg/common"
3737
gce "sigs.k8s.io/gcp-compute-persistent-disk-csi-driver/pkg/gce-cloud-provider/compute"
38-
metadataservice "sigs.k8s.io/gcp-compute-persistent-disk-csi-driver/pkg/gce-cloud-provider/metadata"
3938
)
4039

4140
const (
42-
project = metadataservice.FakeProject
43-
zone = metadataservice.FakeZone
44-
node = "test-node"
45-
driver = "test-driver"
46-
name = "test-name"
41+
project = "test-project"
42+
zone = "country-region-zone"
43+
secondZone = "country-region-fakesecondzone"
44+
node = "test-node"
45+
driver = "test-driver"
46+
name = "test-name"
4747
)
4848

4949
var (
@@ -56,7 +56,7 @@ var (
5656
}
5757
stdTopology = []*csi.Topology{
5858
{
59-
Segments: map[string]string{common.TopologyKeyZone: metadataservice.FakeZone},
59+
Segments: map[string]string{common.TopologyKeyZone: zone},
6060
},
6161
}
6262
testVolumeID = fmt.Sprintf("projects/%s/zones/%s/disks/%s", project, zone, name)
@@ -435,7 +435,7 @@ func TestCreateVolumeArguments(t *testing.T) {
435435
},
436436
expVol: &csi.Volume{
437437
CapacityBytes: common.GbToBytes(20),
438-
VolumeId: fmt.Sprintf("projects/%s/zones/topology-zone/disks/%s", metadataservice.FakeProject, name),
438+
VolumeId: fmt.Sprintf("projects/%s/zones/topology-zone/disks/%s", project, name),
439439
VolumeContext: nil,
440440
AccessibleTopology: []*csi.Topology{
441441
{
@@ -478,7 +478,7 @@ func TestCreateVolumeArguments(t *testing.T) {
478478
},
479479
expVol: &csi.Volume{
480480
CapacityBytes: common.GbToBytes(20),
481-
VolumeId: fmt.Sprintf("projects/%s/zones/topology-zone2/disks/%s", metadataservice.FakeProject, name),
481+
VolumeId: fmt.Sprintf("projects/%s/zones/topology-zone2/disks/%s", project, name),
482482
VolumeContext: nil,
483483
AccessibleTopology: []*csi.Topology{
484484
{
@@ -594,10 +594,10 @@ func TestCreateVolumeArguments(t *testing.T) {
594594
VolumeContext: nil,
595595
AccessibleTopology: []*csi.Topology{
596596
{
597-
Segments: map[string]string{common.TopologyKeyZone: metadataservice.FakeZone},
597+
Segments: map[string]string{common.TopologyKeyZone: zone},
598598
},
599599
{
600-
Segments: map[string]string{common.TopologyKeyZone: "country-region-fakesecondzone"},
600+
Segments: map[string]string{common.TopologyKeyZone: secondZone},
601601
},
602602
},
603603
},

pkg/gce-pd-csi-driver/gce-pd-driver.go

+5-6
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,7 @@ func (gceDriver *GCEDriver) SetupGCEDriver(cloudProvider gce.GCECompute, mounter
8181
// Set up RPC Servers
8282
gceDriver.ids = NewIdentityServer(gceDriver)
8383
gceDriver.ns = NewNodeServer(gceDriver, mounter, deviceUtils, meta, statter)
84-
gceDriver.cs = NewControllerServer(gceDriver, cloudProvider, meta)
84+
gceDriver.cs = NewControllerServer(gceDriver, cloudProvider)
8585

8686
return nil
8787
}
@@ -147,12 +147,11 @@ func NewNodeServer(gceDriver *GCEDriver, mounter *mount.SafeFormatAndMount, devi
147147
}
148148
}
149149

150-
func NewControllerServer(gceDriver *GCEDriver, cloudProvider gce.GCECompute, meta metadataservice.MetadataService) *GCEControllerServer {
150+
func NewControllerServer(gceDriver *GCEDriver, cloudProvider gce.GCECompute) *GCEControllerServer {
151151
return &GCEControllerServer{
152-
Driver: gceDriver,
153-
CloudProvider: cloudProvider,
154-
MetadataService: meta,
155-
volumeLocks: common.NewVolumeLocks(),
152+
Driver: gceDriver,
153+
CloudProvider: cloudProvider,
154+
volumeLocks: common.NewVolumeLocks(),
156155
}
157156
}
158157

test/sanity/sanity_test.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ func TestSanity(t *testing.T) {
3636
// Set up variables
3737
driverName := "test-driver"
3838
project := "test-project"
39-
zone := "test-zone"
39+
zone := "country-region-zone"
4040
vendorVersion := "test-version"
4141
tmpDir := "/tmp/csi"
4242
endpoint := fmt.Sprintf("unix:%s/csi.sock", tmpDir)

0 commit comments

Comments
 (0)