Repository: kubernetes-sigs/gcp-filestore-csi-driver
Pull request #374 (2022-09-07 23:13:18)

Cherry pick #370 #372 #373 into release-1.3
<!--  Thanks for sending a pull request!  Here are some tips for you:

1. If this is your first time, please read our contributor guidelines: https://git.k8s.io/community/contributors/guide#your-first-contribution and developer guide https://git.k8s.io/community/contributors/devel/development.md#development-guide
2. Follow the instructions for writing a release note: https://git.k8s.io/community/contributors/guide/release-notes.md
3. If the PR is unfinished, see how to mark it: https://git.k8s.io/community/contributors/guide/pull-requests.md#marking-unfinished-pull-requests
-->

**What type of PR is this?**
> Uncomment only one ` /kind <>` line, hit enter to put that in a new line, and remove leading whitespaces from that line:
>
> /kind api-change
> /kind bug
> /kind cleanup
> /kind design
> /kind documentation
> /kind failing-test
> /kind feature
> /kind flake

**What this PR does / why we need it**:
Cherry pick #370 #372 #373 into release-1.3

**Which issue(s) this PR fixes**:
<!--
*Automatically closes linked issue when PR is merged.
Usage: `Fixes #<issue number>`, or `Fixes (paste link of issue)`.
_If PR is about `failing-tests or flakes`, please post the related issues/tests in a comment and do not use `Fixes`_*
-->
Fixes #

**Special notes for your reviewer**:

**Does this PR introduce a user-facing change?**:
<!--
If no, just write "NONE" in the release-note block below.
If yes, a release note is required:
Enter your extended release note in the block below. If the PR requires additional action from users switching to the new release, include the string "action required".
-->
```release-note
NONE
```



Patch:
diff --git a/cmd/main.go b/cmd/main.go
index 79c497fd..38207381 100644
--- a/cmd/main.go
+++ b/cmd/main.go
@@ -43,6 +43,8 @@ var (
 	enableMultishare        = flag.Bool("enable-multishare", false, "if set to true, the driver will support multishare instance provisioning")
 	filestoreServiceEnpoint = flag.String("filestore-service-endpoint", "", "Endpoint for filestore service")
 	ecfsDescription         = flag.String("ecfs-description", "", "Filestore multishare instance descrption. ecfs-version=<version>,image-project-id=<projectid>")
+	isRegional              = flag.Bool("is-regional", false, "cluster is regional cluster")
+	gkeClusterName          = flag.String("gke-cluster-name", "", "Cluster Name of the current GKE cluster driver is running on, required for multishare")
 	// This is set at compile time
 	version = "unknown"
 )
@@ -66,6 +68,12 @@ func main() {
 			mm.EmitGKEComponentVersion()
 		}
 
+		if *enableMultishare {
+			if *gkeClusterName == "" {
+				klog.Fatalf("gke-cluster-name has to be set when multishare feature is enabled")
+			}
+		}
+
 		provider, err = cloud.NewCloud(ctx, version, *cloudConfigFilePath, *filestoreServiceEnpoint)
 	} else {
 		if *nodeID == "" {
@@ -95,6 +103,8 @@ func main() {
 		EnableMultishare: *enableMultishare,
 		Metrics:          mm,
 		EcfsDescription:  *ecfsDescription,
+		IsRegional:       *isRegional,
+		ClusterName:      *gkeClusterName,
 	}
 
 	gcfsDriver, err := driver.NewGCFSDriver(config)
diff --git a/pkg/cloud_provider/cloud.go b/pkg/cloud_provider/cloud.go
index ce22136c..2af342d3 100644
--- a/pkg/cloud_provider/cloud.go
+++ b/pkg/cloud_provider/cloud.go
@@ -24,7 +24,6 @@ import (
 	"time"
 
 	"cloud.google.com/go/compute/metadata"
-	gcpmeta "cloud.google.com/go/compute/metadata"
 	"golang.org/x/oauth2"
 	"golang.org/x/oauth2/google"
 	"google.golang.org/api/compute/v1"
@@ -161,7 +160,7 @@ func getProjectAndZone(config *ConfigFile) (string, string, error) {
 		// Project ID is not available from the local GCE cloud provider config file.
 		// This could happen if the driver is not running in the master VM.
 		// Defaulting to project ID from the Metadata server.
-		projectID, err = gcpmeta.ProjectID()
+		projectID, err = metadata.ProjectID()
 		if err != nil {
 			return "", "", err
 		}
diff --git a/pkg/cloud_provider/file/fake.go b/pkg/cloud_provider/file/fake.go
index 8c30ccaa..8cf82a86 100644
--- a/pkg/cloud_provider/file/fake.go
+++ b/pkg/cloud_provider/file/fake.go
@@ -35,6 +35,7 @@ const (
 	defaultRegion     = "us-central1"
 	defaultTier       = "BASIC_HDD"
 	defaultCapacityGb = 1024
+	defaultNetwork    = "default"
 )
 
 type fakeServiceManager struct {
@@ -125,6 +126,7 @@ func (manager *fakeServiceManager) ListInstances(ctx context.Context, obj *Servi
 			Tier:     defaultTier,
 			Network: Network{
 				ReservedIpRange: "192.168.92.32/29",
+				Name:            defaultNetwork,
 			},
 			State: "READY",
 		},
@@ -135,6 +137,7 @@ func (manager *fakeServiceManager) ListInstances(ctx context.Context, obj *Servi
 			Tier:     defaultTier,
 			Network: Network{
 				ReservedIpRange: "192.168.92.40/29",
+				Name:            defaultNetwork,
 			},
 			State: "READY",
 		},
diff --git a/pkg/csi_driver/controller.go b/pkg/csi_driver/controller.go
index f72e657d..9d9765a5 100644
--- a/pkg/csi_driver/controller.go
+++ b/pkg/csi_driver/controller.go
@@ -76,11 +76,13 @@ const (
 	// User provided labels
 	ParameterKeyLabels = "labels"
 
-	// Keys for tags to attach to the provisioned disk.
+	// Keys for tags to attach to the provisioned Filestore shares and instances.
 	tagKeyCreatedForClaimNamespace = "kubernetes_io_created-for_pvc_namespace"
 	tagKeyCreatedForClaimName      = "kubernetes_io_created-for_pvc_name"
 	tagKeyCreatedForVolumeName     = "kubernetes_io_created-for_pv_name"
 	tagKeyCreatedBy                = "storage_gke_io_created-by"
+	tagKeyClusterName              = "storage_gke_io_cluster_name"
+	tagKeyClusterLocation          = "storage_gke_io_cluster_location"
 )
 
 // controllerServer handles volume provisioning
@@ -98,13 +100,15 @@ type controllerServerConfig struct {
 	multiShareController *MultishareController
 	metricsManager       *metrics.MetricsManager
 	ecfsDescription      string
+	isRegional           bool
+	clusterName          string
 }
 
 func newControllerServer(config *controllerServerConfig) csi.ControllerServer {
 	cs := &controllerServer{config: config}
 	config.ipAllocator = util.NewIPAllocator(make(map[string]bool))
 	if config.enableMultishare {
-		config.multiShareController = NewMultishareController(config.driver, config.fileService, config.cloud, config.volumeLocks, config.ecfsDescription)
+		config.multiShareController = NewMultishareController(config)
 		config.multiShareController.opsManager.controllerServer = cs
 	}
 	return cs
@@ -281,18 +285,27 @@ func (s *controllerServer) getCloudInstancesReservedIPRanges(ctx context.Context
 	if err != nil {
 		return nil, status.Error(codes.Aborted, err.Error())
 	}
+	// Due to unreachable location some instances may not show up here.
+	// TODO: create a new function to take a list of locations
+	// and return error if unreachable contained the region of interest.
 	multiShareInstances, err := s.config.fileService.ListMultishareInstances(ctx, &file.ListFilter{Project: filer.Project, Location: "-"})
 	if err != nil {
 		return nil, status.Error(codes.Aborted, err.Error())
 	}
 
-	// Initialize an empty reserved list. It will be populated with all the reservedIPRanges obtained from the cloud instances
+	// Initialize an empty reserved list. It will be populated with all the
+	// reservedIPRanges obtained from the cloud instances in the same VPC network
+	// as the ServiceInstance.
 	cloudInstancesReservedIPRanges := make(map[string]bool)
 	for _, instance := range instances {
-		cloudInstancesReservedIPRanges[instance.Network.ReservedIpRange] = true
+		if strings.EqualFold(instance.Network.Name, filer.Network.Name) {
+			cloudInstancesReservedIPRanges[instance.Network.ReservedIpRange] = true
+		}
 	}
 	for _, instance := range multiShareInstances {
-		cloudInstancesReservedIPRanges[instance.Network.ReservedIpRange] = true
+		if strings.EqualFold(instance.Network.Name, filer.Network.Name) {
+			cloudInstancesReservedIPRanges[instance.Network.ReservedIpRange] = true
+		}
 	}
 	return cloudInstancesReservedIPRanges, nil
 }
diff --git a/pkg/csi_driver/gcfs_driver.go b/pkg/csi_driver/gcfs_driver.go
index 039d24c1..e3c3d298 100644
--- a/pkg/csi_driver/gcfs_driver.go
+++ b/pkg/csi_driver/gcfs_driver.go
@@ -42,6 +42,8 @@ type GCFSDriverConfig struct {
 	EnableMultishare bool
 	Metrics          *metrics.MetricsManager
 	EcfsDescription  string
+	IsRegional       bool
+	ClusterName      string
 }
 
 type GCFSDriver struct {
@@ -110,6 +112,8 @@ func NewGCFSDriver(config *GCFSDriverConfig) (*GCFSDriver, error) {
 			enableMultishare: config.EnableMultishare,
 			metricsManager:   config.Metrics,
 			ecfsDescription:  config.EcfsDescription,
+			isRegional:       config.IsRegional,
+			clusterName:      config.ClusterName,
 		})
 	}
 
diff --git a/pkg/csi_driver/multishare_controller.go b/pkg/csi_driver/multishare_controller.go
index 4a79aa10..b1894b21 100644
--- a/pkg/csi_driver/multishare_controller.go
+++ b/pkg/csi_driver/multishare_controller.go
@@ -48,16 +48,20 @@ type MultishareController struct {
 	opsManager      *MultishareOpsManager
 	volumeLocks     *util.VolumeLocks
 	ecfsDescription string
+	isRegional      bool
+	clustername     string
 }
 
-func NewMultishareController(driver *GCFSDriver, fileService file.Service, cloud *cloud.Cloud, volumeLock *util.VolumeLocks, ecfsDescription string) *MultishareController {
+func NewMultishareController(config *controllerServerConfig) *MultishareController {
 	return &MultishareController{
-		opsManager:      NewMultishareOpsManager(cloud),
-		driver:          driver,
-		fileService:     fileService,
-		cloud:           cloud,
-		volumeLocks:     volumeLock,
-		ecfsDescription: ecfsDescription,
+		opsManager:      NewMultishareOpsManager(config.cloud),
+		driver:          config.driver,
+		fileService:     config.fileService,
+		cloud:           config.cloud,
+		volumeLocks:     config.volumeLocks,
+		ecfsDescription: config.ecfsDescription,
+		isRegional:      config.isRegional,
+		clustername:     config.clusterName,
 	}
 }
 
@@ -394,7 +398,14 @@ func (m *MultishareController) generateNewMultishareInstance(instanceName string
 		return nil, status.Errorf(codes.InvalidArgument, fmt.Sprintf("tier %q not supported for multishare volumes", tier))
 	}
 
-	labels, err := extractInstanceLabels(req.GetParameters(), m.driver.config.Name)
+	location := m.cloud.Zone
+	if m.isRegional {
+		location, _ = util.GetRegionFromZone(location)
+		if err != nil {
+			return nil, status.Errorf(codes.Internal, "failed to get region for regional cluster: %v", err.Error())
+		}
+	}
+	labels, err := extractInstanceLabels(req.GetParameters(), m.driver.config.Name, m.clustername, location)
 	if err != nil {
 		return nil, status.Errorf(codes.InvalidArgument, err.Error())
 	}
@@ -453,7 +464,7 @@ func (m *MultishareController) pickRegion(top *csi.TopologyRequirement) (string,
 	return region, nil
 }
 
-func extractInstanceLabels(parameters map[string]string, driverName string) (map[string]string, error) {
+func extractInstanceLabels(parameters map[string]string, driverName, clusterName, location string) (map[string]string, error) {
 	instanceLabels := make(map[string]string)
 	userProvidedLabels := make(map[string]string)
 	for k, v := range parameters {
@@ -474,6 +485,8 @@ func extractInstanceLabels(parameters map[string]string, driverName string) (map
 	}
 
 	instanceLabels[tagKeyCreatedBy] = strings.ReplaceAll(driverName, ".", "_")
+	instanceLabels[tagKeyClusterName] = clusterName
+	instanceLabels[tagKeyClusterLocation] = location
 	finalInstanceLabels, err := mergeLabels(userProvidedLabels, instanceLabels)
 	if err != nil {
 		return nil, status.Error(codes.InvalidArgument, err.Error())
diff --git a/pkg/csi_driver/multishare_ops_manager.go b/pkg/csi_driver/multishare_ops_manager.go
index 8f922e59..546d46fe 100644
--- a/pkg/csi_driver/multishare_ops_manager.go
+++ b/pkg/csi_driver/multishare_ops_manager.go
@@ -99,7 +99,7 @@ func (m *MultishareOpsManager) setupEligibleInstanceAndStartWorkflow(ctx context
 	}
 
 	// No share or running share create op found. Proceed to eligible instance check.
-	eligible, numIneligible, err := m.runEligibleInstanceCheck(ctx, req, ops, instance)
+	eligible, numIneligible, err := m.runEligibleInstanceCheck(ctx, req, ops, instance, regions)
 	if err != nil {
 		return nil, nil, status.Error(codes.Aborted, err.Error())
 	}
@@ -149,6 +149,7 @@ func (m *MultishareOpsManager) setupEligibleInstanceAndStartWorkflow(ctx context
 			Name:     instance.Name,
 			Location: instance.Location,
 			Tier:     instance.Tier,
+			Network:  instance.Network,
 		}, reservedIPV4CIDR)
 
 		// Possible cases are 1) CreateInstanceAborted, 2)CreateInstance running in background
@@ -343,9 +344,9 @@ func (m *MultishareOpsManager) verifyNoRunningInstanceOrShareOpsForInstance(inst
 }
 
 // runEligibleInstanceCheck returns a list of ready and non-ready instances.
-func (m *MultishareOpsManager) runEligibleInstanceCheck(ctx context.Context, req *csi.CreateVolumeRequest, ops []*OpInfo, target *file.MultishareInstance) ([]*file.MultishareInstance, int, error) {
+func (m *MultishareOpsManager) runEligibleInstanceCheck(ctx context.Context, req *csi.CreateVolumeRequest, ops []*OpInfo, target *file.MultishareInstance, regions []string) ([]*file.MultishareInstance, int, error) {
 	klog.Infof("ListMultishareInstances call initiated for request %+v.", req)
-	instances, err := m.listMatchedInstances(ctx, req, target)
+	instances, err := m.listMatchedInstances(ctx, req, target, regions)
 	if err != nil {
 		return nil, 0, err
 	}
@@ -650,13 +651,18 @@ func containsOpWithInstanceTargetPrefix(instance *file.MultishareInstance, ops [
 	return nil, nil
 }
 
-// listMatchedInstances will list all instances in current project,
+// listMatchedInstances lists all instances under allowed regions in current project,
 // but only matched instances will be returned.
-func (m *MultishareOpsManager) listMatchedInstances(ctx context.Context, req *csi.CreateVolumeRequest, target *file.MultishareInstance) ([]*file.MultishareInstance, error) {
-	instances, err := m.cloud.File.ListMultishareInstances(ctx, &file.ListFilter{Project: m.cloud.Project, Location: "-"})
-	if err != nil {
-		return nil, err
+func (m *MultishareOpsManager) listMatchedInstances(ctx context.Context, req *csi.CreateVolumeRequest, target *file.MultishareInstance, regions []string) ([]*file.MultishareInstance, error) {
+	var instances []*file.MultishareInstance
+	for _, region := range regions {
+		regionalInstances, err := m.cloud.File.ListMultishareInstances(ctx, &file.ListFilter{Project: m.cloud.Project, Location: region})
+		if err != nil {
+			return nil, err
+		}
+		instances = append(instances, regionalInstances...)
 	}
+
 	var finalInstances []*file.MultishareInstance
 	for _, i := range instances {
 		matched, err := isMatchedInstance(i, target, req)
@@ -684,16 +690,19 @@ func (m *MultishareOpsManager) listMatchedInstances(ctx context.Context, req *cs
 // 6. Both source and target instance should be in the same VPC network.
 // 7, Both source and target instance should have the same connect mode.
 // 8. Both source and target instance should have the same KmsKeyName.
+// 9. Both source and target instance should have a label with key
+//    "gke_cluster_location", and the value should be the same.
+// 10. Both source and target instance should have a label with key
+//    "gke_cluster_name", and the value should be the same.
 func isMatchedInstance(source, target *file.MultishareInstance, req *csi.CreateVolumeRequest) (bool, error) {
-	if scPrefixSource, ok := source.Labels[util.ParamMultishareInstanceScLabelKey]; ok {
-		if _, ok := target.Labels[util.ParamMultishareInstanceScLabelKey]; !ok {
-			return false, fmt.Errorf("label %q missing in target instance %+v", util.ParamMultishareInstanceScLabelKey, target)
+	matchLabels := [3]string{util.ParamMultishareInstanceScLabelKey, tagKeyClusterLocation, tagKeyClusterName}
+	for _, labelKey := range matchLabels {
+		if _, ok := target.Labels[labelKey]; !ok {
+			return false, fmt.Errorf("label %q missing in target instance %+v", labelKey, target)
 		}
-		if scPrefixSource != target.Labels[util.ParamMultishareInstanceScLabelKey] {
+		if source.Labels[labelKey] != target.Labels[labelKey] {
 			return false, nil
 		}
-	} else {
-		return false, nil
 	}
 	params := req.GetParameters()
 	if instanceCIDR, ok := params[paramReservedIPV4CIDR]; ok {


Test patch:
diff --git a/pkg/csi_driver/controller_test.go b/pkg/csi_driver/controller_test.go
index afaaa085..708e8c30 100644
--- a/pkg/csi_driver/controller_test.go
+++ b/pkg/csi_driver/controller_test.go
@@ -907,3 +907,73 @@ func TestCreateSnapshot(t *testing.T) {
 		}
 	}
 }
+
+func TestGetCloudInstancesReservedIPRanges(t *testing.T) {
+	cases := []struct {
+		name                       string
+		initMultishareInstanceList []*file.MultishareInstance
+		instance                   *file.ServiceInstance
+		expectIPRange              map[string]bool
+		expectErr                  bool
+	}{
+		{
+			name: "existing instances in different vpc networks",
+			initMultishareInstanceList: []*file.MultishareInstance{
+				{
+					Name:     "test-instance",
+					Project:  testProject,
+					Location: "us-west1",
+					Labels: map[string]string{
+						util.ParamMultishareInstanceScLabelKey: testInstanceScPrefix,
+					},
+					Network: file.Network{
+						ReservedIpRange: "10.0.0.0/24",
+						ConnectMode:     directPeering,
+						Name:            testVPCNetwork,
+						Ip:              "10.0.0.2",
+					},
+					Tier: enterpriseTier,
+				},
+				{
+					Name:     "test-instance-1",
+					Project:  testProject,
+					Location: "us-west1",
+					Labels: map[string]string{
+						util.ParamMultishareInstanceScLabelKey: testInstanceScPrefix,
+					},
+					Network: file.Network{
+						ReservedIpRange: "10.1.1.0/24",
+						ConnectMode:     directPeering,
+						Name:            defaultNetwork,
+						Ip:              "10.1.1.2",
+					},
+					Tier: enterpriseTier,
+				},
+			},
+			instance: &file.ServiceInstance{
+				Project:  testProject,
+				Name:     testCSIVolume,
+				Location: testLocation,
+				Tier:     defaultTier,
+				Network: file.Network{
+					Name:        defaultNetwork,
+					ConnectMode: directPeering,
+				},
+			},
+			expectIPRange: map[string]bool{"192.168.92.32/29": true, "192.168.92.40/29": true, "10.1.1.0/24": true},
+		},
+	}
+	for _, test := range cases {
+		cs := initTestController(t).(*controllerServer)
+		for _, i := range test.initMultishareInstanceList {
+			cs.config.fileService.StartCreateMultishareInstanceOp(context.Background(), i)
+		}
+		ipRange, err := cs.getCloudInstancesReservedIPRanges(context.Background(), test.instance)
+		if !test.expectErr && err != nil {
+			t.Errorf("test %q failed: %v", test.name, err)
+		}
+		if !reflect.DeepEqual(test.expectIPRange, ipRange) {
+			t.Errorf("test %q failed; expected: %#v; got %#v", test.name, test.expectIPRange, ipRange)
+		}
+	}
+}
diff --git a/pkg/csi_driver/multishare_controller_test.go b/pkg/csi_driver/multishare_controller_test.go
index 956fdc1f..d6fb28b5 100644
--- a/pkg/csi_driver/multishare_controller_test.go
+++ b/pkg/csi_driver/multishare_controller_test.go
@@ -35,6 +35,7 @@ import (
 const (
 	testDriverName           = "test.filestore"
 	testDrivernameLabelValue = "test_filestore"
+	testClusterName          = "test-cluster"
 	testPVCName              = "testPVC"
 	testPVCNamespace         = "testNamespace"
 	testPVName               = "testPV"
@@ -53,7 +54,16 @@ func initTestMultishareController(t *testing.T) *MultishareController {
 	if err != nil {
 		t.Fatalf("Failed to get cloud provider: %v", err)
 	}
-	return NewMultishareController(initTestDriver(t), fileService, cloudProvider, util.NewVolumeLocks(), "")
+	config := &controllerServerConfig{
+		driver:          initTestDriver(t),
+		fileService:     fileService,
+		cloud:           cloudProvider,
+		volumeLocks:     util.NewVolumeLocks(),
+		ecfsDescription: "",
+		isRegional:      true,
+		clusterName:     testClusterName,
+	}
+	return NewMultishareController(config)
 }
 
 func TestPickRegion(t *testing.T) {
@@ -307,7 +317,9 @@ func TestExtractInstanceLabels(t *testing.T) {
 			name:   "empty params",
 			driver: testDriverName,
 			expectedLabel: map[string]string{
-				tagKeyCreatedBy: testDrivernameLabelValue,
+				tagKeyCreatedBy:       testDrivernameLabelValue,
+				tagKeyClusterName:     testClusterName,
+				tagKeyClusterLocation: testLocation,
 			},
 		},
 		{
@@ -322,12 +334,14 @@ func TestExtractInstanceLabels(t *testing.T) {
 				util.ParamMultishareInstanceScLabelKey: "testsc",
 				"a":                                    "b",
 				"c":                                    "d",
+				tagKeyClusterName:                      testClusterName,
+				tagKeyClusterLocation:                  testLocation,
 			},
 		},
 	}
 	for _, tc := range tests {
 		t.Run(tc.name, func(t *testing.T) {
-			label, err := extractInstanceLabels(tc.params, tc.driver)
+			label, err := extractInstanceLabels(tc.params, tc.driver, testClusterName, testLocation)
 			if tc.expectErr && err == nil {
 				t.Error("expected error, got none")
 			}
@@ -454,6 +468,8 @@ func TestGenerateNewMultishareInstance(t *testing.T) {
 					"a":                                    "b",
 					"c":                                    "d",
 					tagKeyCreatedBy:                        "test-driver",
+					tagKeyClusterLocation:                  testRegion,
+					tagKeyClusterName:                      testClusterName,
 					util.ParamMultishareInstanceScLabelKey: testInstanceScPrefix,
 				},
 			},
@@ -467,7 +483,7 @@ func TestGenerateNewMultishareInstance(t *testing.T) {
 				t.Error("expected error, got none")
 			}
 			if !tc.expectErr && err != nil {
-				t.Error("unexpected error")
+				t.Errorf("unexpected error: %q", err)
 			}
 			if !reflect.DeepEqual(filer, tc.expectedInstance) {
 				t.Errorf("got filer %+v, want %+v", filer, tc.expectedInstance)
@@ -759,6 +775,8 @@ func TestMultishareCreateVolume(t *testing.T) {
 					Project:  "test-project",
 					Labels: map[string]string{
 						util.ParamMultishareInstanceScLabelKey: testInstanceScPrefix,
+						tagKeyClusterLocation:                  testLocation,
+						tagKeyClusterName:                      "",
 					},
 					CapacityBytes: 1 * util.Tb,
 					Tier:          "enterprise",
@@ -775,6 +793,8 @@ func TestMultishareCreateVolume(t *testing.T) {
 					Project:  "test-project",
 					Labels: map[string]string{
 						util.ParamMultishareInstanceScLabelKey: testInstanceScPrefix,
+						tagKeyClusterLocation:                  testLocation,
+						tagKeyClusterName:                      "",
 					},
 					CapacityBytes: 1 * util.Tb,
 					Tier:          "enterprise",
@@ -832,6 +852,8 @@ func TestMultishareCreateVolume(t *testing.T) {
 					Project:  "test-project",
 					Labels: map[string]string{
 						util.ParamMultishareInstanceScLabelKey: testInstanceScPrefix,
+						tagKeyClusterLocation:                  testLocation,
+						tagKeyClusterName:                      "",
 					},
 					CapacityBytes: 1 * util.Tb,
 					Tier:          "Enterprise",
@@ -877,6 +899,8 @@ func TestMultishareCreateVolume(t *testing.T) {
 					Project:  "test-project",
 					Labels: map[string]string{
 						util.ParamMultishareInstanceScLabelKey: testInstanceScPrefix,
+						tagKeyClusterLocation:                  testLocation,
+						tagKeyClusterName:                      "",
 					},
 					CapacityBytes: 1 * util.Tb,
 					Tier:          "Enterprise",
@@ -960,7 +984,14 @@ func TestMultishareCreateVolume(t *testing.T) {
 			}
 			cloudProvider, _ := cloud.NewFakeCloud()
 			cloudProvider.File = s
-			mcs := NewMultishareController(initTestDriver(t), s, cloudProvider, util.NewVolumeLocks(), "")
+			config := &controllerServerConfig{
+				driver:          initTestDriver(t),
+				fileService:     s,
+				cloud:           cloudProvider,
+				volumeLocks:     util.NewVolumeLocks(),
+				ecfsDescription: "",
+			}
+			mcs := NewMultishareController(config)
 			resp, err := mcs.CreateVolume(context.Background(), tc.req)
 			if tc.errorExpected && err == nil {
 				t.Errorf("expected error not found")
@@ -1157,7 +1188,14 @@ func TestMultishareDeleteVolume(t *testing.T) {
 			}
 			cloudProvider, _ := cloud.NewFakeCloud()
 			cloudProvider.File = s
-			mcs := NewMultishareController(initTestDriver(t), s, cloudProvider, util.NewVolumeLocks(), "")
+			config := &controllerServerConfig{
+				driver:          initTestDriver(t),
+				fileService:     s,
+				cloud:           cloudProvider,
+				volumeLocks:     util.NewVolumeLocks(),
+				ecfsDescription: "",
+			}
+			mcs := NewMultishareController(config)
 			resp, err := mcs.DeleteVolume(context.Background(), tc.req)
 			if tc.errorExpected && err == nil {
 				t.Errorf("expected error not found")
@@ -1555,7 +1593,14 @@ func TestMultishareControllerExpandVolume(t *testing.T) {
 			}
 			cloudProvider, _ := cloud.NewFakeCloud()
 			cloudProvider.File = s
-			mcs := NewMultishareController(initTestDriver(t), s, cloudProvider, util.NewVolumeLocks(), "")
+			config := &controllerServerConfig{
+				driver:          initTestDriver(t),
+				fileService:     s,
+				cloud:           cloudProvider,
+				volumeLocks:     util.NewVolumeLocks(),
+				ecfsDescription: "",
+			}
+			mcs := NewMultishareController(config)
 			resp, err := mcs.ControllerExpandVolume(context.Background(), tc.req)
 			if tc.errorExpected && err == nil {
 				t.Errorf("expected error not found")
diff --git a/pkg/csi_driver/multishare_ops_manager_test.go b/pkg/csi_driver/multishare_ops_manager_test.go
index 550474c6..09c01e3a 100644
--- a/pkg/csi_driver/multishare_ops_manager_test.go
+++ b/pkg/csi_driver/multishare_ops_manager_test.go
@@ -30,13 +30,15 @@ import (
 )
 
 const (
-	testInstanceScPrefix = "testinstancescprefix"
+	testInstanceScPrefix = "test-prefix"
 	testInstanceName     = "testInstanceName"
 	testShareName        = "testShareName"
+	testVPCNetwork       = "testSharedNetwork"
 )
 
 var (
 	testInstanceHandle = fmt.Sprintf("%s/%s/%s", testProject, testRegion, testInstanceName)
+	testRegions        = []string{testRegion}
 )
 
 type Item struct {
@@ -471,15 +473,17 @@ func TestListMatchedInstances(t *testing.T) {
 			name: "empty init inistance list",
 			req: &csi.CreateVolumeRequest{
 				Parameters: map[string]string{
-					paramMultishareInstanceScLabel: "testprefix",
+					paramMultishareInstanceScLabel: testInstanceScPrefix,
 				},
 			},
 			target: &file.MultishareInstance{
 				Name:     "test-target-instance",
-				Project:  "test-project",
-				Location: "us-central1",
+				Project:  testProject,
+				Location: testRegion,
 				Labels: map[string]string{
-					util.ParamMultishareInstanceScLabelKey: "testprefix",
+					util.ParamMultishareInstanceScLabelKey: testInstanceScPrefix,
+					tagKeyClusterLocation:                  testLocation,
+					tagKeyClusterName:                      testClusterName,
 				},
 			},
 		},
@@ -487,34 +491,40 @@ func TestListMatchedInstances(t *testing.T) {
 			name: "non-empty init inistance list",
 			req: &csi.CreateVolumeRequest{
 				Parameters: map[string]string{
-					paramMultishareInstanceScLabel: "testprefix",
+					paramMultishareInstanceScLabel: testInstanceScPrefix,
 				},
 			},
 			target: &file.MultishareInstance{
 				Name:     "test-target-instance",
-				Project:  "test-project",
-				Location: "us-central1",
+				Project:  testProject,
+				Location: testRegion,
 				Labels: map[string]string{
-					util.ParamMultishareInstanceScLabelKey: "testprefix",
+					util.ParamMultishareInstanceScLabelKey: testInstanceScPrefix,
+					tagKeyClusterLocation:                  testLocation,
+					tagKeyClusterName:                      testClusterName,
 				},
 			},
 			initInstanceList: []*file.MultishareInstance{
 				{
 					Name:     "test-instance",
-					Project:  "test-project",
-					Location: "us-central1",
+					Project:  testProject,
+					Location: testRegion,
 					Labels: map[string]string{
-						util.ParamMultishareInstanceScLabelKey: "testprefix",
+						util.ParamMultishareInstanceScLabelKey: testInstanceScPrefix,
+						tagKeyClusterLocation:                  testLocation,
+						tagKeyClusterName:                      testClusterName,
 					},
 				},
 			},
 			expectedList: []*file.MultishareInstance{
 				{
 					Name:     "test-instance",
-					Project:  "test-project",
-					Location: "us-central1",
+					Project:  testProject,
+					Location: testRegion,
 					Labels: map[string]string{
-						util.ParamMultishareInstanceScLabelKey: "testprefix",
+						util.ParamMultishareInstanceScLabelKey: testInstanceScPrefix,
+						tagKeyClusterLocation:                  testLocation,
+						tagKeyClusterName:                      testClusterName,
 					},
 				},
 			},
@@ -523,42 +533,80 @@ func TestListMatchedInstances(t *testing.T) {
 			name: "non-empty init inistance list, 1 instance match",
 			req: &csi.CreateVolumeRequest{
 				Parameters: map[string]string{
-					paramMultishareInstanceScLabel: "testprefix-1",
+					paramMultishareInstanceScLabel: testInstanceScPrefix + "1",
 				},
 			},
 			target: &file.MultishareInstance{
 				Name:     "test-target-instance",
-				Project:  "test-project",
-				Location: "us-central1",
+				Project:  testProject,
+				Location: testRegion,
 				Labels: map[string]string{
-					util.ParamMultishareInstanceScLabelKey: "testprefix-1",
+					util.ParamMultishareInstanceScLabelKey: testInstanceScPrefix + "1",
+					tagKeyClusterLocation:                  testLocation,
+					tagKeyClusterName:                      testClusterName,
 				},
 			},
 			initInstanceList: []*file.MultishareInstance{
 				{
 					Name:     "test-instance-1",
-					Project:  "test-project",
-					Location: "us-central1",
+					Project:  testProject,
+					Location: testRegion,
 					Labels: map[string]string{
-						util.ParamMultishareInstanceScLabelKey: "testprefix-1",
+						util.ParamMultishareInstanceScLabelKey: testInstanceScPrefix + "1",
+						tagKeyClusterLocation:                  testLocation,
+						tagKeyClusterName:                      testClusterName,
 					},
 				},
 				{
 					Name:     "test-instance-2",
-					Project:  "test-project",
-					Location: "us-central1",
+					Project:  testProject,
+					Location: testRegion,
 					Labels: map[string]string{
-						util.ParamMultishareInstanceScLabelKey: "testprefix-2",
+						util.ParamMultishareInstanceScLabelKey: testInstanceScPrefix + "1",
+						tagKeyClusterLocation:                  testRegion,
+						tagKeyClusterName:                      testClusterName,
+					},
+				},
+				{
+					Name:     "test-instance-3",
+					Project:  testProject,
+					Location: testRegion,
+					Labels: map[string]string{
+						util.ParamMultishareInstanceScLabelKey: "testprefix-3",
+						tagKeyClusterLocation:                  testLocation,
+						tagKeyClusterName:                      testClusterName,
+					},
+				},
+				{
+					Name:     "test-instance-4",
+					Project:  testProject,
+					Location: testRegion,
+					Labels: map[string]string{
+						util.ParamMultishareInstanceScLabelKey: testInstanceScPrefix + "1",
+						tagKeyClusterLocation:                  testLocation,
+						tagKeyClusterName:                      testClusterName + "-new",
+					},
+				},
+				{
+					Name:     "test-instance-5",
+					Project:  testProject,
+					Location: testRegion,
+					Labels: map[string]string{
+						util.ParamMultishareInstanceScLabelKey: testInstanceScPrefix + "1",
+						tagKeyClusterLocation:                  testRegion,
+						tagKeyClusterName:                      testClusterName + "-new",
 					},
 				},
 			},
 			expectedList: []*file.MultishareInstance{
 				{
 					Name:     "test-instance-1",
-					Project:  "test-project",
-					Location: "us-central1",
+					Project:  testProject,
+					Location: testRegion,
 					Labels: map[string]string{
-						util.ParamMultishareInstanceScLabelKey: "testprefix-1",
+						util.ParamMultishareInstanceScLabelKey: testInstanceScPrefix + "1",
+						tagKeyClusterLocation:                  testLocation,
+						tagKeyClusterName:                      testClusterName,
 					},
 				},
 			},
@@ -567,58 +615,68 @@ func TestListMatchedInstances(t *testing.T) {
 			name: "non-empty init inistance list, 2 instances match",
 			req: &csi.CreateVolumeRequest{
 				Parameters: map[string]string{
-					paramMultishareInstanceScLabel: "testprefix",
+					paramMultishareInstanceScLabel: testInstanceScPrefix,
 				},
 			},
 			target: &file.MultishareInstance{
 				Name:     "test-target-instance",
-				Project:  "test-project",
-				Location: "us-central1",
+				Project:  testProject,
+				Location: testRegion,
 				Labels: map[string]string{
-					util.ParamMultishareInstanceScLabelKey: "testprefix",
+					util.ParamMultishareInstanceScLabelKey: testInstanceScPrefix,
+					tagKeyClusterLocation:                  testLocation,
+					tagKeyClusterName:                      testClusterName,
 				},
 			},
 			initInstanceList: []*file.MultishareInstance{
 				{
 					Name:     "test-instance-1",
-					Project:  "test-project",
-					Location: "us-central1",
+					Project:  testProject,
+					Location: testRegion,
 					Labels: map[string]string{
-						util.ParamMultishareInstanceScLabelKey: "testprefix",
+						util.ParamMultishareInstanceScLabelKey: testInstanceScPrefix,
+						tagKeyClusterLocation:                  testLocation,
+						tagKeyClusterName:                      testClusterName,
 					},
 				},
 				{
 					Name:     "test-instance-2",
-					Project:  "test-project",
-					Location: "us-central1",
+					Project:  testProject,
+					Location: testRegion,
 					Labels: map[string]string{
-						util.ParamMultishareInstanceScLabelKey: "testprefix",
+						util.ParamMultishareInstanceScLabelKey: testInstanceScPrefix,
+						tagKeyClusterLocation:                  testLocation,
+						tagKeyClusterName:                      testClusterName,
 					},
 				},
 				{
 					Name:     "test-instance-3",
-					Project:  "test-project",
-					Location: "us-central1",
+					Project:  testProject,
+					Location: testRegion,
 					Labels: map[string]string{
-						util.ParamMultishareInstanceScLabelKey: "testprefix-3",
+						util.ParamMultishareInstanceScLabelKey: testInstanceScPrefix + "3",
 					},
 				},
 			},
 			expectedList: []*file.MultishareInstance{
 				{
 					Name:     "test-instance-1",
-					Project:  "test-project",
-					Location: "us-central1",
+					Project:  testProject,
+					Location: testRegion,
 					Labels: map[string]string{
-						util.ParamMultishareInstanceScLabelKey: "testprefix",
+						util.ParamMultishareInstanceScLabelKey: testInstanceScPrefix,
+						tagKeyClusterLocation:                  testLocation,
+						tagKeyClusterName:                      testClusterName,
 					},
 				},
 				{
 					Name:     "test-instance-2",
-					Project:  "test-project",
-					Location: "us-central1",
+					Project:  testProject,
+					Location: testRegion,
 					Labels: map[string]string{
-						util.ParamMultishareInstanceScLabelKey: "testprefix",
+						util.ParamMultishareInstanceScLabelKey: testInstanceScPrefix,
+						tagKeyClusterLocation:                  testLocation,
+						tagKeyClusterName:                      testClusterName,
 					},
 				},
 			},
@@ -627,23 +685,28 @@ func TestListMatchedInstances(t *testing.T) {
 			name: "non-specified sc prefix in init instance list",
 			req: &csi.CreateVolumeRequest{
 				Parameters: map[string]string{
-					paramMultishareInstanceScLabel: "testprefix",
+					paramMultishareInstanceScLabel: testInstanceScPrefix,
 				},
 			},
 			target: &file.MultishareInstance{
 				Name:     "test-target-instance",
-				Project:  "test-project",
-				Location: "us-central1",
+				Project:  testProject,
+				Location: testRegion,
 				Labels: map[string]string{
-					util.ParamMultishareInstanceScLabelKey: "testprefix",
+					util.ParamMultishareInstanceScLabelKey: testInstanceScPrefix,
+					tagKeyClusterLocation:                  testLocation,
+					tagKeyClusterName:                      testClusterName,
 				},
 			},
 			initInstanceList: []*file.MultishareInstance{
 				{
 					Name:     "test-instance",
-					Project:  "test-project",
-					Location: "us-central1",
-					Labels:   map[string]string{},
+					Project:  testProject,
+					Location: testRegion,
+					Labels: map[string]string{
+						tagKeyClusterLocation: testLocation,
+						tagKeyClusterName:     testClusterName,
+					},
 				},
 			},
 		},
@@ -651,16 +714,18 @@ func TestListMatchedInstances(t *testing.T) {
 			name: "1 ip address within, 1 out of reserved-ipv4-cidr",
 			req: &csi.CreateVolumeRequest{
 				Parameters: map[string]string{
-					paramMultishareInstanceScLabel: "testprefix",
+					paramMultishareInstanceScLabel: testInstanceScPrefix,
 					paramReservedIPV4CIDR:          "10.0.0.0/24",
 				},
 			},
 			target: &file.MultishareInstance{
 				Name:     "test-target-instance",
-				Project:  "test-project",
-				Location: "us-central1",
+				Project:  testProject,
+				Location: testRegion,
 				Labels: map[string]string{
-					util.ParamMultishareInstanceScLabelKey: "testprefix",
+					util.ParamMultishareInstanceScLabelKey: testInstanceScPrefix,
+					tagKeyClusterLocation:                  testLocation,
+					tagKeyClusterName:                      testClusterName,
 				},
 				Network: file.Network{
 					ReservedIpRange: "10.0.0.0/24",
@@ -669,10 +734,12 @@ func TestListMatchedInstances(t *testing.T) {
 			initInstanceList: []*file.MultishareInstance{
 				{
 					Name:     "test-instance-0",
-					Project:  "test-project",
-					Location: "us-central1",
+					Project:  testProject,
+					Location: testRegion,
 					Labels: map[string]string{
-						util.ParamMultishareInstanceScLabelKey: "testprefix",
+						util.ParamMultishareInstanceScLabelKey: testInstanceScPrefix,
+						tagKeyClusterLocation:                  testLocation,
+						tagKeyClusterName:                      testClusterName,
 					},
 					Network: file.Network{
 						ReservedIpRange: "10.0.0.0/21",
@@ -681,10 +748,12 @@ func TestListMatchedInstances(t *testing.T) {
 				},
 				{
 					Name:     "test-instance-1",
-					Project:  "test-project",
-					Location: "us-central1",
+					Project:  testProject,
+					Location: testRegion,
 					Labels: map[string]string{
-						util.ParamMultishareInstanceScLabelKey: "testprefix",
+						util.ParamMultishareInstanceScLabelKey: testInstanceScPrefix,
+						tagKeyClusterLocation:                  testLocation,
+						tagKeyClusterName:                      testClusterName,
 					},
 					Network: file.Network{
 						ReservedIpRange: "11.0.0.0/24",
@@ -695,10 +764,12 @@ func TestListMatchedInstances(t *testing.T) {
 			expectedList: []*file.MultishareInstance{
 				{
 					Name:     "test-instance-0",
-					Project:  "test-project",
-					Location: "us-central1",
+					Project:  testProject,
+					Location: testRegion,
 					Labels: map[string]string{
-						util.ParamMultishareInstanceScLabelKey: "testprefix",
+						util.ParamMultishareInstanceScLabelKey: testInstanceScPrefix,
+						tagKeyClusterLocation:                  testLocation,
+						tagKeyClusterName:                      testClusterName,
 					},
 					Network: file.Network{
 						ReservedIpRange: "10.0.0.0/24",
@@ -711,88 +782,98 @@ func TestListMatchedInstances(t *testing.T) {
 			name: "location, tier, network, connect-mode and cmek alignment test",
 			req: &csi.CreateVolumeRequest{
 				Parameters: map[string]string{
-					paramMultishareInstanceScLabel: "testprefix",
+					paramMultishareInstanceScLabel: testInstanceScPrefix,
 					paramReservedIPV4CIDR:          "10.0.0.0/24",
-					paramTier:                      "enterprise",
-					paramNetwork:                   "shared-network",
+					paramTier:                      enterpriseTier,
+					paramNetwork:                   testVPCNetwork,
 					paramInstanceEncryptionKmsKey:  "projects/test-project/locations/us-central1/keyRings/test-cmek-key-ring/cryptoKeys/test-cmek-key",
 				},
 			},
 			target: &file.MultishareInstance{
 				Name:     "test-target-instance",
-				Project:  "test-project",
-				Location: "us-central1",
+				Project:  testProject,
+				Location: testRegion,
 				Labels: map[string]string{
-					util.ParamMultishareInstanceScLabelKey: "testprefix",
+					util.ParamMultishareInstanceScLabelKey: testInstanceScPrefix,
+					tagKeyClusterLocation:                  testLocation,
+					tagKeyClusterName:                      testClusterName,
 				},
 				Network: file.Network{
 					ReservedIpRange: "10.0.0.0/24",
 					ConnectMode:     directPeering,
-					Name:            "shared-network",
+					Name:            testVPCNetwork,
 				},
-				Tier:       "enterprise",
+				Tier:       enterpriseTier,
 				KmsKeyName: "projects/test-project/locations/us-central1/keyRings/test-cmek-key-ring/cryptoKeys/test-cmek-key",
 			},
 			initInstanceList: []*file.MultishareInstance{
 				{
 					Name:     "test-instance-0",
-					Project:  "test-project",
+					Project:  testProject,
 					Location: "us-west1",
 					Labels: map[string]string{
-						util.ParamMultishareInstanceScLabelKey: "testprefix",
+						util.ParamMultishareInstanceScLabelKey: testInstanceScPrefix,
+						tagKeyClusterLocation:                  testLocation,
+						tagKeyClusterName:                      testClusterName,
 					},
 					Network: file.Network{
 						ReservedIpRange: "10.0.0.0/24",
 						ConnectMode:     directPeering,
-						Name:            "shared-network",
+						Name:            testVPCNetwork,
 						Ip:              "10.0.0.2",
 					},
-					Tier:       "enterprise",
+					Tier:       enterpriseTier,
 					KmsKeyName: "projects/test-project/locations/us-central1/keyRings/test-cmek-key-ring/cryptoKeys/test-cmek-key",
 				},
 				{
 					Name:     "test-instance-1",
-					Project:  "test-project",
-					Location: "us-central1",
+					Project:  testProject,
+					Location: testRegion,
 					Labels: map[string]string{
-						util.ParamMultishareInstanceScLabelKey: "testprefix",
+						util.ParamMultishareInstanceScLabelKey: testInstanceScPrefix,
+						tagKeyClusterLocation:                  testLocation,
+						tagKeyClusterName:                      testClusterName,
 					},
 					Network: file.Network{
 						ReservedIpRange: "10.0.0.0/24",
 						ConnectMode:     directPeering,
-						Name:            "shared-network",
+						Name:            testVPCNetwork,
 						Ip:              "10.0.0.2",
 					},
-					Tier:       "standard",
+					Tier:       defaultTier,
 					KmsKeyName: "projects/test-project/locations/us-central1/keyRings/test-cmek-key-ring/cryptoKeys/test-cmek-key",
 				},
 				{
 					Name:     "test-instance-2",
-					Project:  "test-project",
-					Location: "us-central1",
+					Project:  testProject,
+					Location: testRegion,
 					Labels: map[string]string{
-						util.ParamMultishareInstanceScLabelKey: "testprefix",
+						util.ParamMultishareInstanceScLabelKey: testInstanceScPrefix,
+						tagKeyClusterLocation:                  testLocation,
+						tagKeyClusterName:                      testClusterName,
 					},
 					Network: file.Network{
 						ReservedIpRange: "10.0.0.0/24",
 						ConnectMode:     directPeering,
-						Name:            "default",
+						Name:            defaultNetwork,
 						Ip:              "10.0.0.2",
 					},
-					Tier:       "enterprise",
+					Tier:       enterpriseTier,
 					KmsKeyName: "projects/test-project/locations/us-central1/keyRings/test-cmek-key-ring/cryptoKeys/test-cmek-key",
 				},
 				{
 					Name:     "test-instance-3",
-					Project:  "test-project",
-					Location: "us-central1",
+					Project:  testProject,
+					Location: testRegion,
 					Labels: map[string]string{
-						util.ParamMultishareInstanceScLabelKey: "testprefix",
+						util.ParamMultishareInstanceScLabelKey: testInstanceScPrefix,
+						tagKeyClusterLocation:                  testLocation,
+						tagKeyClusterName:                      testClusterName,
 					},
 					Network: file.Network{
 						ReservedIpRange: "10.0.0.0/24",
 						ConnectMode:     directPeering,
-						Name:            "shared-network",
+						Name:            testVPCNetwork,
 						Ip:              "10.0.0.2",
 					},
 					Tier:       "enterprise",
@@ -800,51 +881,57 @@ func TestListMatchedInstances(t *testing.T) {
 				},
 				{
 					Name:     "test-instance-4",
-					Project:  "test-project",
-					Location: "us-central1",
+					Project:  testProject,
+					Location: testRegion,
 					Labels: map[string]string{
-						util.ParamMultishareInstanceScLabelKey: "testprefix",
+						util.ParamMultishareInstanceScLabelKey: testInstanceScPrefix,
+						tagKeyClusterLocation:                  testLocation,
+						tagKeyClusterName:                      testClusterName,
 					},
 					Network: file.Network{
 						ReservedIpRange: "10.0.0.0/24",
 						ConnectMode:     directPeering,
-						Name:            "shared-network",
+						Name:            testVPCNetwork,
 						Ip:              "10.0.0.2",
 					},
 					Tier: "enterprise",
 				},
 				{
 					Name:     "test-instance-5",
-					Project:  "test-project",
-					Location: "us-central1",
+					Project:  testProject,
+					Location: testRegion,
 					Labels: map[string]string{
-						util.ParamMultishareInstanceScLabelKey: "testprefix",
+						util.ParamMultishareInstanceScLabelKey: testInstanceScPrefix,
+						tagKeyClusterLocation:                  testLocation,
+						tagKeyClusterName:                      testClusterName,
 					},
 					Network: file.Network{
 						ReservedIpRange: "10.0.0.0/21",
 						ConnectMode:     directPeering,
-						Name:            "shared-network",
+						Name:            testVPCNetwork,
 						Ip:              "10.0.0.2",
 					},
-					Tier:       "enterprise",
+					Tier:       enterpriseTier,
 					KmsKeyName: "projects/test-project/locations/us-central1/keyRings/test-cmek-key-ring/cryptoKeys/test-cmek-key",
 				},
 			},
 			expectedList: []*file.MultishareInstance{
 				{
 					Name:     "test-instance-5",
-					Project:  "test-project",
-					Location: "us-central1",
+					Project:  testProject,
+					Location: testRegion,
 					Labels: map[string]string{
-						util.ParamMultishareInstanceScLabelKey: "testprefix",
+						util.ParamMultishareInstanceScLabelKey: testInstanceScPrefix,
+						tagKeyClusterLocation:                  testLocation,
+						tagKeyClusterName:                      testClusterName,
 					},
 					Network: file.Network{
 						ReservedIpRange: "10.0.0.0/21",
 						ConnectMode:     directPeering,
-						Name:            "shared-network",
+						Name:            testVPCNetwork,
 						Ip:              "10.0.0.2",
 					},
-					Tier:       "enterprise",
+					Tier:       enterpriseTier,
 					KmsKeyName: "projects/test-project/locations/us-central1/keyRings/test-cmek-key-ring/cryptoKeys/test-cmek-key",
 				},
 			},
@@ -853,25 +940,29 @@ func TestListMatchedInstances(t *testing.T) {
 			name: "invalid reserved-ipv4-cidr",
 			req: &csi.CreateVolumeRequest{
 				Parameters: map[string]string{
-					paramMultishareInstanceScLabel: "testprefix",
+					paramMultishareInstanceScLabel: testInstanceScPrefix,
 					paramReservedIPV4CIDR:          "test-ip-range",
 				},
 			},
 			target: &file.MultishareInstance{
 				Name:     "test-target-instance",
-				Project:  "test-project",
-				Location: "us-central1",
+				Project:  testProject,
+				Location: testRegion,
 				Labels: map[string]string{
-					util.ParamMultishareInstanceScLabelKey: "testprefix",
+					util.ParamMultishareInstanceScLabelKey: testInstanceScPrefix,
+					tagKeyClusterLocation:                  testLocation,
+					tagKeyClusterName:                      testClusterName,
 				},
 			},
 			initInstanceList: []*file.MultishareInstance{
 				{
 					Name:     "test-instance",
-					Project:  "test-project",
-					Location: "us-central1",
+					Project:  testProject,
+					Location: testRegion,
 					Labels: map[string]string{
-						util.ParamMultishareInstanceScLabelKey: "testprefix",
+						util.ParamMultishareInstanceScLabelKey: testInstanceScPrefix,
+						tagKeyClusterLocation:                  testLocation,
+						tagKeyClusterName:                      testClusterName,
 					},
 				},
 			},
@@ -890,7 +981,7 @@ func TestListMatchedInstances(t *testing.T) {
 			}
 
 			manager := NewMultishareOpsManager(cloudProvider)
-			filteredList, err := manager.listMatchedInstances(context.Background(), tc.req, tc.target)
+			filteredList, err := manager.listMatchedInstances(context.Background(), tc.req, tc.target, testRegions)
 			if tc.expectError && err == nil {
 				t.Errorf("expected error: %v", err)
 			}
@@ -899,7 +990,7 @@ func TestListMatchedInstances(t *testing.T) {
 			}
 			for _, fi := range filteredList {
 				if !found(tc.expectedList, fi) {
-					t.Errorf("Failed to find instance")
+					t.Errorf("Failed to find instance %+v", fi)
 				}
 			}
 		})
@@ -918,15 +1009,15 @@ func TestContainsOpWithInstanceTargetPrefix(t *testing.T) {
 			name: "empty ops list",
 			inputInstance: &file.MultishareInstance{
 				Name:     "test-instance",
-				Project:  "test-project",
-				Location: "us-central1",
+				Project:  testProject,
+				Location: testRegion,
 			},
 		},
 		{
 			name: "invalid instance, missing location",
 			inputInstance: &file.MultishareInstance{
 				Name:    "test-instance",
-				Project: "test-project",
+				Project: testProject,
 			},
 			errorExpected: true,
 		},
@@ -934,23 +1025,23 @@ func TestContainsOpWithInstanceTargetPrefix(t *testing.T) {
 			name: "invalid instance, missing project",
 			inputInstance: &file.MultishareInstance{
 				Name:     "test-instance",
-				Location: "us-central1",
+				Location: testRegion,
 			},
 			errorExpected: true,
 		},
 		{
 			name: "invalid instance, missing name",
 			inputInstance: &file.MultishareInstance{
-				Location: "us-central1",
-				Project:  "test-project",
+				Project:  testProject,
+				Location: testRegion,
 			},
 			errorExpected: true,
 		},
 		{
 			name: "valid instance, no running instance prefixed op",
 			inputInstance: &file.MultishareInstance{
-				Location: "us-central1",
-				Project:  "test-project",
+				Project:  testProject,
+				Location: testRegion,
 				Name:     "test-instance",
 			},
 			inputOps: []*OpInfo{
@@ -964,8 +1055,8 @@ func TestContainsOpWithInstanceTargetPrefix(t *testing.T) {
 		{
 			name: "valid instance, running instance op",
 			inputInstance: &file.MultishareInstance{
-				Location: "us-central1",
-				Project:  "test-project",
+				Project:  testProject,
+				Location: testRegion,
 				Name:     "test-instance",
 			},
 			inputOps: []*OpInfo{
@@ -980,8 +1071,8 @@ func TestContainsOpWithInstanceTargetPrefix(t *testing.T) {
 		{
 			name: "valid instance, running share op",
 			inputInstance: &file.MultishareInstance{
-				Location: "us-central1",
-				Project:  "test-project",
+				Project:  testProject,
+				Location: testRegion,
 				Name:     "test-instance",
 			},
 			inputOps: []*OpInfo{
@@ -1175,7 +1266,7 @@ func TestListMultishareResourceRunningOps(t *testing.T) {
 			if err != nil {
 				t.Fatalf("failed to fake service: %v", err)
 			}
-			cloudProvider, err := cloud.NewFakeCloud()
+			cloudProvider, _ := cloud.NewFakeCloud()
 			cloudProvider.File = s
 			manager := NewMultishareOpsManager(cloudProvider)
 			ops, err := manager.listMultishareResourceRunningOps(context.Background())
@@ -1208,15 +1299,15 @@ func TestVerifyNoRunningInstanceOps(t *testing.T) {
 			},
 			instance: &file.MultishareInstance{
 				Name:     "test-instance-2",
-				Project:  "test-project",
-				Location: "us-central1",
+				Project:  testProject,
+				Location: testRegion,
 			},
 		},
 		{
 			name: "invalid instance case1",
 			instance: &file.MultishareInstance{
-				Project:  "test-project",
-				Location: "us-central1",
+				Project:  testProject,
+				Location: testRegion,
 			},
 			errorExpected: true,
 		},
@@ -1224,7 +1315,7 @@ func TestVerifyNoRunningInstanceOps(t *testing.T) {
 			name: "invalid instance case2",
 			instance: &file.MultishareInstance{
 				Name:     "test-instance-2",
-				Location: "us-central1",
+				Location: testRegion,
 			},
 			errorExpected: true,
 		},
@@ -1232,7 +1323,7 @@ func TestVerifyNoRunningInstanceOps(t *testing.T) {
 			name: "invalid instance case3",
 			instance: &file.MultishareInstance{
 				Name:    "test-instance-2",
-				Project: "test-project",
+				Project: testProject,
 			},
 			errorExpected: true,
 		},
@@ -1240,8 +1331,8 @@ func TestVerifyNoRunningInstanceOps(t *testing.T) {
 			name: "error found running op",
 			instance: &file.MultishareInstance{
 				Name:     "test-instance-1",
-				Project:  "test-project",
-				Location: "us-central1",
+				Project:  testProject,
+				Location: testRegion,
 			},
 			ops: []*OpInfo{
 				{
@@ -1255,8 +1346,8 @@ func TestVerifyNoRunningInstanceOps(t *testing.T) {
 			name: "no running op match",
 			instance: &file.MultishareInstance{
 				Name:     "test-instance-1",
-				Project:  "test-project",
-				Location: "us-central1",
+				Project:  testProject,
+				Location: testRegion,
 			},
 			ops: []*OpInfo{
 				{
@@ -1272,7 +1363,7 @@ func TestVerifyNoRunningInstanceOps(t *testing.T) {
 			if err != nil {
 				t.Fatalf("failed to fake service: %v", err)
 			}
-			cloudProvider, err := cloud.NewFakeCloud()
+			cloudProvider, _ := cloud.NewFakeCloud()
 			cloudProvider.File = s
 			manager := NewMultishareOpsManager(cloudProvider)
 			err = manager.verifyNoRunningInstanceOps(tc.instance, tc.ops)
@@ -1307,15 +1398,15 @@ func TestVerifyNoRunningInstanceOrShareOpsForInstance(t *testing.T) {
 			},
 			instance: &file.MultishareInstance{
 				Name:     "test-instance-1",
-				Project:  "test-project",
-				Location: "us-central1",
+				Project:  testProject,
+				Location: testRegion,
 			},
 		},
 		{
 			name: "invalid instance case1",
 			instance: &file.MultishareInstance{
-				Project:  "test-project",
-				Location: "us-central1",
+				Project:  testProject,
+				Location: testRegion,
 			},
 			errorExpected: true,
 		},
@@ -1323,7 +1414,7 @@ func TestVerifyNoRunningInstanceOrShareOpsForInstance(t *testing.T) {
 			name: "invalid instance case2",
 			instance: &file.MultishareInstance{
 				Name:     "test-instance-2",
-				Location: "us-central1",
+				Location: testRegion,
 			},
 			errorExpected: true,
 		},
@@ -1331,7 +1422,7 @@ func TestVerifyNoRunningInstanceOrShareOpsForInstance(t *testing.T) {
 			name: "invalid instance case3",
 			instance: &file.MultishareInstance{
 				Name:    "test-instance-2",
-				Project: "test-project",
+				Project: testProject,
 			},
 			errorExpected: true,
 		},
@@ -1345,8 +1436,8 @@ func TestVerifyNoRunningInstanceOrShareOpsForInstance(t *testing.T) {
 			},
 			instance: &file.MultishareInstance{
 				Name:     "test-instance-1",
-				Project:  "test-project",
-				Location: "us-central1",
+				Project:  testProject,
+				Location: testRegion,
 			},
 			errorExpected: true,
 		},
@@ -1360,8 +1451,8 @@ func TestVerifyNoRunningInstanceOrShareOpsForInstance(t *testing.T) {
 			},
 			instance: &file.MultishareInstance{
 				Name:     "test-instance-1",
-				Project:  "test-project",
-				Location: "us-central1",
+				Project:  testProject,
+				Location: testRegion,
 			},
 			errorExpected: true,
 		},
@@ -1372,7 +1463,7 @@ func TestVerifyNoRunningInstanceOrShareOpsForInstance(t *testing.T) {
 			if err != nil {
 				t.Fatalf("failed to fake service: %v", err)
 			}
-			cloudProvider, err := cloud.NewFakeCloud()
+			cloudProvider, _ := cloud.NewFakeCloud()
 			cloudProvider.File = s
 			manager := NewMultishareOpsManager(cloudProvider)
 			err = manager.verifyNoRunningInstanceOrShareOpsForInstance(tc.instance, tc.ops)
@@ -1408,8 +1499,8 @@ func TestVerifyNoRunningShareOps(t *testing.T) {
 			share: &file.Share{
 				Parent: &file.MultishareInstance{
 					Name:     "test-instance-1",
-					Project:  "test-project",
-					Location: "us-central1",
+					Project:  testProject,
+					Location: testRegion,
 				},
 				Name: "share-1",
 			},
@@ -1419,7 +1510,7 @@ func TestVerifyNoRunningShareOps(t *testing.T) {
 			share: &file.Share{
 				Parent: &file.MultishareInstance{
 					Name:     "test-instance-1",
-					Location: "us-central1",
+					Location: testRegion,
 				},
 				Name: "share-1",
 			},
@@ -1430,7 +1521,7 @@ func TestVerifyNoRunningShareOps(t *testing.T) {
 			share: &file.Share{
 				Parent: &file.MultishareInstance{
 					Name:    "test-instance-1",
-					Project: "test-project",
+					Project: testProject,
 				},
 				Name: "share-1",
 			},
@@ -1440,8 +1531,8 @@ func TestVerifyNoRunningShareOps(t *testing.T) {
 			name: "invalid share case3",
 			share: &file.Share{
 				Parent: &file.MultishareInstance{
-					Project:  "test-project",
-					Location: "us-central1",
+					Project:  testProject,
+					Location: testRegion,
 				},
 				Name: "share-1",
 			},
@@ -1452,8 +1543,8 @@ func TestVerifyNoRunningShareOps(t *testing.T) {
 			share: &file.Share{
 				Parent: &file.MultishareInstance{
 					Name:     "test-instance-1",
-					Project:  "test-project",
-					Location: "us-central1",
+					Project:  testProject,
+					Location: testRegion,
 				},
 			},
 			errorExpected: true,
@@ -1469,8 +1560,8 @@ func TestVerifyNoRunningShareOps(t *testing.T) {
 			share: &file.Share{
 				Parent: &file.MultishareInstance{
 					Name:     "test-instance-1",
-					Project:  "test-project",
-					Location: "us-central1",
+					Project:  testProject,
+					Location: testRegion,
 				},
 				Name: "share-1",
 			},
@@ -1483,7 +1574,7 @@ func TestVerifyNoRunningShareOps(t *testing.T) {
 			if err != nil {
 				t.Fatalf("failed to fake service: %v", err)
 			}
-			cloudProvider, err := cloud.NewFakeCloud()
+			cloudProvider, _ := cloud.NewFakeCloud()
 			cloudProvider.File = s
 			manager := NewMultishareOpsManager(cloudProvider)
 			err = manager.verifyNoRunningShareOps(tc.share, tc.ops)
@@ -1523,33 +1614,39 @@ func TestRunEligibleInstanceCheck(t *testing.T) {
 			name: "all ready instances",
 			req: &csi.CreateVolumeRequest{
 				Parameters: map[string]string{
-					paramMultishareInstanceScLabel: "testprefix",
+					paramMultishareInstanceScLabel: testInstanceScPrefix,
 				},
 			},
 			target: &file.MultishareInstance{
 				Name:     "test-target-instance",
-				Project:  "test-project",
-				Location: "us-central1",
+				Project:  testProject,
+				Location: testRegion,
 				Labels: map[string]string{
-					util.ParamMultishareInstanceScLabelKey: "testprefix",
+					util.ParamMultishareInstanceScLabelKey: testInstanceScPrefix,
+					tagKeyClusterLocation:                  testLocation,
+					tagKeyClusterName:                      testClusterName,
 				},
 			},
 			initInstances: []*file.MultishareInstance{
 				{
 					Name:     "test-instance-1",
-					Location: "us-central1",
-					Project:  "test-project",
+					Project:  testProject,
+					Location: testRegion,
 					Labels: map[string]string{
-						util.ParamMultishareInstanceScLabelKey: "testprefix",
+						util.ParamMultishareInstanceScLabelKey: testInstanceScPrefix,
+						tagKeyClusterLocation:                  testLocation,
+						tagKeyClusterName:                      testClusterName,
 					},
 					State: "READY",
 				},
 				{
 					Name:     "test-instance-1",
-					Location: "us-central1",
-					Project:  "test-project",
+					Project:  testProject,
+					Location: testRegion,
 					Labels: map[string]string{
-						util.ParamMultishareInstanceScLabelKey: "testprefix",
+						util.ParamMultishareInstanceScLabelKey: testInstanceScPrefix,
+						tagKeyClusterLocation:                  testLocation,
+						tagKeyClusterName:                      testClusterName,
 					},
 					State: "READY",
 				},
@@ -1557,19 +1654,23 @@ func TestRunEligibleInstanceCheck(t *testing.T) {
 			expectedReadyInstance: []*file.MultishareInstance{
 				{
 					Name:     "test-instance-1",
-					Location: "us-central1",
-					Project:  "test-project",
+					Project:  testProject,
+					Location: testRegion,
 					Labels: map[string]string{
-						util.ParamMultishareInstanceScLabelKey: "testprefix",
+						util.ParamMultishareInstanceScLabelKey: testInstanceScPrefix,
+						tagKeyClusterLocation:                  testLocation,
+						tagKeyClusterName:                      testClusterName,
 					},
 					State: "READY",
 				},
 				{
 					Name:     "test-instance-2",
-					Location: "us-central1",
-					Project:  "test-project",
+					Project:  testProject,
+					Location: testRegion,
 					Labels: map[string]string{
-						util.ParamMultishareInstanceScLabelKey: "testprefix",
+						util.ParamMultishareInstanceScLabelKey: testInstanceScPrefix,
+						tagKeyClusterLocation:                  testLocation,
+						tagKeyClusterName:                      testClusterName,
 					},
 					State: "READY",
 				},
@@ -1579,24 +1680,28 @@ func TestRunEligibleInstanceCheck(t *testing.T) {
 			name: "non-ready instances (instance update)",
 			req: &csi.CreateVolumeRequest{
 				Parameters: map[string]string{
-					paramMultishareInstanceScLabel: "testprefix",
+					paramMultishareInstanceScLabel: testInstanceScPrefix,
 				},
 			},
 			target: &file.MultishareInstance{
 				Name:     "test-target-instance",
-				Project:  "test-project",
-				Location: "us-central1",
+				Project:  testProject,
+				Location: testRegion,
 				Labels: map[string]string{
-					util.ParamMultishareInstanceScLabelKey: "testprefix",
+					util.ParamMultishareInstanceScLabelKey: testInstanceScPrefix,
+					tagKeyClusterLocation:                  testLocation,
+					tagKeyClusterName:                      testClusterName,
 				},
 			},
 			initInstances: []*file.MultishareInstance{
 				{
 					Name:     "instance-1",
-					Location: "us-central1",
-					Project:  "test-project",
+					Project:  testProject,
+					Location: testRegion,
 					Labels: map[string]string{
-						util.ParamMultishareInstanceScLabelKey: "testprefix",
+						util.ParamMultishareInstanceScLabelKey: testInstanceScPrefix,
+						tagKeyClusterLocation:                  testLocation,
+						tagKeyClusterName:                      testClusterName,
 					},
 					State: "READY",
 				},
@@ -1614,24 +1719,28 @@ func TestRunEligibleInstanceCheck(t *testing.T) {
 			name: "non-ready instances (share create)",
 			req: &csi.CreateVolumeRequest{
 				Parameters: map[string]string{
-					paramMultishareInstanceScLabel: "testprefix",
+					paramMultishareInstanceScLabel: testInstanceScPrefix,
 				},
 			},
 			target: &file.MultishareInstance{
 				Name:     "test-target-instance",
-				Project:  "test-project",
-				Location: "us-central1",
+				Project:  testProject,
+				Location: testRegion,
 				Labels: map[string]string{
-					util.ParamMultishareInstanceScLabelKey: "testprefix",
+					util.ParamMultishareInstanceScLabelKey: testInstanceScPrefix,
+					tagKeyClusterLocation:                  testLocation,
+					tagKeyClusterName:                      testClusterName,
 				},
 			},
 			initInstances: []*file.MultishareInstance{
 				{
 					Name:     "instance-1",
-					Location: "us-central1",
-					Project:  "test-project",
+					Project:  testProject,
+					Location: testRegion,
 					Labels: map[string]string{
-						util.ParamMultishareInstanceScLabelKey: "testprefix",
+						util.ParamMultishareInstanceScLabelKey: testInstanceScPrefix,
+						tagKeyClusterLocation:                  testLocation,
+						tagKeyClusterName:                      testClusterName,
 					},
 					State: "READY",
 				},
@@ -1649,24 +1758,28 @@ func TestRunEligibleInstanceCheck(t *testing.T) {
 			name: "non-ready instances (share update)",
 			req: &csi.CreateVolumeRequest{
 				Parameters: map[string]string{
-					paramMultishareInstanceScLabel: "testprefix",
+					paramMultishareInstanceScLabel: testInstanceScPrefix,
 				},
 			},
 			target: &file.MultishareInstance{
 				Name:     "test-target-instance",
-				Project:  "test-project",
-				Location: "us-central1",
+				Project:  testProject,
+				Location: testRegion,
 				Labels: map[string]string{
-					util.ParamMultishareInstanceScLabelKey: "testprefix",
+					util.ParamMultishareInstanceScLabelKey: testInstanceScPrefix,
+					tagKeyClusterLocation:                  testLocation,
+					tagKeyClusterName:                      testClusterName,
 				},
 			},
 			initInstances: []*file.MultishareInstance{
 				{
 					Name:     "instance-1",
-					Location: "us-central1",
-					Project:  "test-project",
+					Project:  testProject,
+					Location: testRegion,
 					Labels: map[string]string{
-						util.ParamMultishareInstanceScLabelKey: "testprefix",
+						util.ParamMultishareInstanceScLabelKey: testInstanceScPrefix,
+						tagKeyClusterLocation:                  testLocation,
+						tagKeyClusterName:                      testClusterName,
 					},
 					State: "READY",
 				},
@@ -1684,24 +1797,28 @@ func TestRunEligibleInstanceCheck(t *testing.T) {
 			name: "non-ready instances (share delete)",
 			req: &csi.CreateVolumeRequest{
 				Parameters: map[string]string{
-					paramMultishareInstanceScLabel: "testprefix",
+					paramMultishareInstanceScLabel: testInstanceScPrefix,
 				},
 			},
 			target: &file.MultishareInstance{
 				Name:     "test-target-instance",
-				Project:  "test-project",
-				Location: "us-central1",
+				Project:  testProject,
+				Location: testRegion,
 				Labels: map[string]string{
-					util.ParamMultishareInstanceScLabelKey: "testprefix",
+					util.ParamMultishareInstanceScLabelKey: testInstanceScPrefix,
+					tagKeyClusterLocation:                  testLocation,
+					tagKeyClusterName:                      testClusterName,
 				},
 			},
 			initInstances: []*file.MultishareInstance{
 				{
 					Name:     "instance-1",
-					Location: "us-central1",
-					Project:  "test-project",
+					Project:  testProject,
+					Location: testRegion,
 					Labels: map[string]string{
-						util.ParamMultishareInstanceScLabelKey: "testprefix",
+						util.ParamMultishareInstanceScLabelKey: testInstanceScPrefix,
+						tagKeyClusterLocation:                  testLocation,
+						tagKeyClusterName:                      testClusterName,
 					},
 					State: "READY",
 				},
@@ -1719,24 +1836,28 @@ func TestRunEligibleInstanceCheck(t *testing.T) {
 			name: "non-ready instances 0, instance delete not counted as ready",
 			req: &csi.CreateVolumeRequest{
 				Parameters: map[string]string{
-					paramMultishareInstanceScLabel: "testprefix",
+					paramMultishareInstanceScLabel: testInstanceScPrefix,
 				},
 			},
 			target: &file.MultishareInstance{
 				Name:     "test-target-instance",
-				Project:  "test-project",
-				Location: "us-central1",
+				Project:  testProject,
+				Location: testRegion,
 				Labels: map[string]string{
-					util.ParamMultishareInstanceScLabelKey: "testprefix",
+					util.ParamMultishareInstanceScLabelKey: testInstanceScPrefix,
+					tagKeyClusterLocation:                  testLocation,
+					tagKeyClusterName:                      testClusterName,
 				},
 			},
 			initInstances: []*file.MultishareInstance{
 				{
 					Name:     "instance-1",
-					Location: "us-central1",
-					Project:  "test-project",
+					Project:  testProject,
+					Location: testRegion,
 					Labels: map[string]string{
-						util.ParamMultishareInstanceScLabelKey: "testprefix",
+						util.ParamMultishareInstanceScLabelKey: testInstanceScPrefix,
+						tagKeyClusterLocation:                  testLocation,
+						tagKeyClusterName:                      testClusterName,
 					},
 					State: "DELETING",
 				},
@@ -1753,33 +1874,39 @@ func TestRunEligibleInstanceCheck(t *testing.T) {
 			name: "non-ready instances (share delete), ready instance",
 			req: &csi.CreateVolumeRequest{
 				Parameters: map[string]string{
-					paramMultishareInstanceScLabel: "testprefix",
+					paramMultishareInstanceScLabel: testInstanceScPrefix,
 				},
 			},
 			target: &file.MultishareInstance{
 				Name:     "test-target-instance",
-				Project:  "test-project",
-				Location: "us-central1",
+				Project:  testProject,
+				Location: testRegion,
 				Labels: map[string]string{
-					util.ParamMultishareInstanceScLabelKey: "testprefix",
+					util.ParamMultishareInstanceScLabelKey: testInstanceScPrefix,
+					tagKeyClusterLocation:                  testLocation,
+					tagKeyClusterName:                      testClusterName,
 				},
 			},
 			initInstances: []*file.MultishareInstance{
 				{
 					Name:     "instance-1",
-					Location: "us-central1",
-					Project:  "test-project",
+					Project:  testProject,
+					Location: testRegion,
 					Labels: map[string]string{
-						util.ParamMultishareInstanceScLabelKey: "testprefix",
+						util.ParamMultishareInstanceScLabelKey: testInstanceScPrefix,
+						tagKeyClusterLocation:                  testLocation,
+						tagKeyClusterName:                      testClusterName,
 					},
 					State: "READY",
 				},
 				{
 					Name:     "instance-2",
-					Location: "us-central1",
-					Project:  "test-project",
+					Project:  testProject,
+					Location: testRegion,
 					Labels: map[string]string{
-						util.ParamMultishareInstanceScLabelKey: "testprefix",
+						util.ParamMultishareInstanceScLabelKey: testInstanceScPrefix,
+						tagKeyClusterLocation:                  testLocation,
+						tagKeyClusterName:                      testClusterName,
 					},
 					State: "READY",
 				},
@@ -1787,10 +1914,12 @@ func TestRunEligibleInstanceCheck(t *testing.T) {
 			expectedReadyInstance: []*file.MultishareInstance{
 				{
 					Name:     "instance-2",
-					Location: "us-central1",
-					Project:  "test-project",
+					Project:  testProject,
+					Location: testRegion,
 					Labels: map[string]string{
-						util.ParamMultishareInstanceScLabelKey: "testprefix",
+						util.ParamMultishareInstanceScLabelKey: testInstanceScPrefix,
+						tagKeyClusterLocation:                  testLocation,
+						tagKeyClusterName:                      testClusterName,
 					},
 					State: "READY",
 				},
@@ -1808,24 +1937,28 @@ func TestRunEligibleInstanceCheck(t *testing.T) {
 			name: "no ready instance, no non-ready instance, instance with 10 shares not eligible",
 			req: &csi.CreateVolumeRequest{
 				Parameters: map[string]string{
-					paramMultishareInstanceScLabel: "testprefix",
+					paramMultishareInstanceScLabel: testInstanceScPrefix,
 				},
 			},
 			target: &file.MultishareInstance{
 				Name:     "test-target-instance",
-				Project:  "test-project",
-				Location: "us-central1",
+				Project:  testProject,
+				Location: testRegion,
 				Labels: map[string]string{
-					util.ParamMultishareInstanceScLabelKey: "testprefix",
+					util.ParamMultishareInstanceScLabelKey: testInstanceScPrefix,
+					tagKeyClusterLocation:                  testLocation,
+					tagKeyClusterName:                      testClusterName,
 				},
 			},
 			initInstances: []*file.MultishareInstance{
 				{
 					Name:     "instance-1",
-					Location: "us-central1",
-					Project:  "test-project",
+					Project:  testProject,
+					Location: testRegion,
 					Labels: map[string]string{
-						util.ParamMultishareInstanceScLabelKey: "testprefix",
+						util.ParamMultishareInstanceScLabelKey: testInstanceScPrefix,
+						tagKeyClusterLocation:                  testLocation,
+						tagKeyClusterName:                      testClusterName,
 					},
 					State: "READY",
 				},
@@ -1835,10 +1968,12 @@ func TestRunEligibleInstanceCheck(t *testing.T) {
 					Name: "share-1",
 					Parent: &file.MultishareInstance{
 						Name:     "instance-1",
-						Project:  "test-project",
-						Location: "us-central1",
+						Project:  testProject,
+						Location: testRegion,
 						Labels: map[string]string{
-							util.ParamMultishareInstanceScLabelKey: "testprefix",
+							util.ParamMultishareInstanceScLabelKey: testInstanceScPrefix,
+							tagKeyClusterLocation:                  testLocation,
+							tagKeyClusterName:                      testClusterName,
 						},
 					},
 				},
@@ -1846,10 +1981,12 @@ func TestRunEligibleInstanceCheck(t *testing.T) {
 					Name: "share-2",
 					Parent: &file.MultishareInstance{
 						Name:     "instance-1",
-						Project:  "test-project",
-						Location: "us-central1",
+						Project:  testProject,
+						Location: testRegion,
 						Labels: map[string]string{
-							util.ParamMultishareInstanceScLabelKey: "testprefix",
+							util.ParamMultishareInstanceScLabelKey: testInstanceScPrefix,
+							tagKeyClusterLocation:                  testLocation,
+							tagKeyClusterName:                      testClusterName,
 						},
 					},
 				},
@@ -1857,10 +1994,12 @@ func TestRunEligibleInstanceCheck(t *testing.T) {
 					Name: "share-3",
 					Parent: &file.MultishareInstance{
 						Name:     "instance-1",
-						Project:  "test-project",
-						Location: "us-central1",
+						Project:  testProject,
+						Location: testRegion,
 						Labels: map[string]string{
-							util.ParamMultishareInstanceScLabelKey: "testprefix",
+							util.ParamMultishareInstanceScLabelKey: testInstanceScPrefix,
+							tagKeyClusterLocation:                  testLocation,
+							tagKeyClusterName:                      testClusterName,
 						},
 					},
 				},
@@ -1868,10 +2007,12 @@ func TestRunEligibleInstanceCheck(t *testing.T) {
 					Name: "share-4",
 					Parent: &file.MultishareInstance{
 						Name:     "instance-1",
-						Project:  "test-project",
-						Location: "us-central1",
+						Project:  testProject,
+						Location: testRegion,
 						Labels: map[string]string{
-							util.ParamMultishareInstanceScLabelKey: "testprefix",
+							util.ParamMultishareInstanceScLabelKey: testInstanceScPrefix,
+							tagKeyClusterLocation:                  testLocation,
+							tagKeyClusterName:                      testClusterName,
 						},
 					},
 				},
@@ -1879,10 +2020,12 @@ func TestRunEligibleInstanceCheck(t *testing.T) {
 					Name: "share-5",
 					Parent: &file.MultishareInstance{
 						Name:     "instance-1",
-						Project:  "test-project",
-						Location: "us-central1",
+						Project:  testProject,
+						Location: testRegion,
 						Labels: map[string]string{
-							util.ParamMultishareInstanceScLabelKey: "testprefix",
+							util.ParamMultishareInstanceScLabelKey: testInstanceScPrefix,
+							tagKeyClusterLocation:                  testLocation,
+							tagKeyClusterName:                      testClusterName,
 						},
 					},
 				},
@@ -1890,10 +2033,12 @@ func TestRunEligibleInstanceCheck(t *testing.T) {
 					Name: "share-6",
 					Parent: &file.MultishareInstance{
 						Name:     "instance-1",
-						Project:  "test-project",
-						Location: "us-central1",
+						Project:  testProject,
+						Location: testRegion,
 						Labels: map[string]string{
-							util.ParamMultishareInstanceScLabelKey: "testprefix",
+							util.ParamMultishareInstanceScLabelKey: testInstanceScPrefix,
+							tagKeyClusterLocation:                  testLocation,
+							tagKeyClusterName:                      testClusterName,
 						},
 					},
 				},
@@ -1901,10 +2046,12 @@ func TestRunEligibleInstanceCheck(t *testing.T) {
 					Name: "share-7",
 					Parent: &file.MultishareInstance{
 						Name:     "instance-1",
-						Project:  "test-project",
-						Location: "us-central1",
+						Project:  testProject,
+						Location: testRegion,
 						Labels: map[string]string{
-							util.ParamMultishareInstanceScLabelKey: "testprefix",
+							util.ParamMultishareInstanceScLabelKey: testInstanceScPrefix,
+							tagKeyClusterLocation:                  testLocation,
+							tagKeyClusterName:                      testClusterName,
 						},
 					},
 				},
@@ -1912,10 +2059,12 @@ func TestRunEligibleInstanceCheck(t *testing.T) {
 					Name: "share-8",
 					Parent: &file.MultishareInstance{
 						Name:     "instance-1",
-						Project:  "test-project",
-						Location: "us-central1",
+						Project:  testProject,
+						Location: testRegion,
 						Labels: map[string]string{
-							util.ParamMultishareInstanceScLabelKey: "testprefix",
+							util.ParamMultishareInstanceScLabelKey: testInstanceScPrefix,
+							tagKeyClusterLocation:                  testLocation,
+							tagKeyClusterName:                      testClusterName,
 						},
 					},
 				},
@@ -1923,10 +2072,12 @@ func TestRunEligibleInstanceCheck(t *testing.T) {
 					Name: "share-9",
 					Parent: &file.MultishareInstance{
 						Name:     "instance-1",
-						Project:  "test-project",
-						Location: "us-central1",
+						Project:  testProject,
+						Location: testRegion,
 						Labels: map[string]string{
-							util.ParamMultishareInstanceScLabelKey: "testprefix",
+							util.ParamMultishareInstanceScLabelKey: testInstanceScPrefix,
+							tagKeyClusterLocation:                  testLocation,
+							tagKeyClusterName:                      testClusterName,
 						},
 					},
 				},
@@ -1934,10 +2085,12 @@ func TestRunEligibleInstanceCheck(t *testing.T) {
 					Name: "share-10",
 					Parent: &file.MultishareInstance{
 						Name:     "instance-1",
-						Project:  "test-project",
-						Location: "us-central1",
+						Project:  testProject,
+						Location: testRegion,
 						Labels: map[string]string{
-							util.ParamMultishareInstanceScLabelKey: "testprefix",
+							util.ParamMultishareInstanceScLabelKey: testInstanceScPrefix,
+							tagKeyClusterLocation:                  testLocation,
+							tagKeyClusterName:                      testClusterName,
 						},
 					},
 				},
@@ -1947,69 +2100,83 @@ func TestRunEligibleInstanceCheck(t *testing.T) {
 			name: "ready instance, non-ready instances, other instance state not count",
 			req: &csi.CreateVolumeRequest{
 				Parameters: map[string]string{
-					paramMultishareInstanceScLabel: "testprefix",
+					paramMultishareInstanceScLabel: testInstanceScPrefix,
 				},
 			},
 			target: &file.MultishareInstance{
 				Name:     "test-target-instance",
-				Project:  "test-project",
-				Location: "us-central1",
+				Project:  testProject,
+				Location: testRegion,
 				Labels: map[string]string{
-					util.ParamMultishareInstanceScLabelKey: "testprefix",
+					util.ParamMultishareInstanceScLabelKey: testInstanceScPrefix,
+					tagKeyClusterLocation:                  testLocation,
+					tagKeyClusterName:                      testClusterName,
 				},
 			},
 			initInstances: []*file.MultishareInstance{
 				{
 					Name:     "instance-1",
-					Location: "us-central1",
-					Project:  "test-project",
+					Project:  testProject,
+					Location: testRegion,
 					Labels: map[string]string{
-						util.ParamMultishareInstanceScLabelKey: "testprefix",
+						util.ParamMultishareInstanceScLabelKey: testInstanceScPrefix,
+						tagKeyClusterLocation:                  testLocation,
+						tagKeyClusterName:                      testClusterName,
 					},
 					State: "CREATING",
 				},
 				{
 					Name:     "instance-2",
-					Location: "us-central1",
-					Project:  "test-project",
+					Project:  testProject,
+					Location: testRegion,
 					Labels: map[string]string{
-						util.ParamMultishareInstanceScLabelKey: "testprefix",
+						util.ParamMultishareInstanceScLabelKey: testInstanceScPrefix,
+						tagKeyClusterLocation:                  testLocation,
+						tagKeyClusterName:                      testClusterName,
 					},
 					State: "REPAIRING",
 				},
 				{
 					Name:     "instance-3",
-					Location: "us-central1",
-					Project:  "test-project",
+					Project:  testProject,
+					Location: testRegion,
 					Labels: map[string]string{
-						util.ParamMultishareInstanceScLabelKey: "testprefix",
+						util.ParamMultishareInstanceScLabelKey: testInstanceScPrefix,
+						tagKeyClusterLocation:                  testLocation,
+						tagKeyClusterName:                      testClusterName,
 					},
 					State: "READY",
 				},
 				{
 					Name:     "instance-4",
-					Location: "us-central1",
-					Project:  "test-project",
+					Project:  testProject,
+					Location: testRegion,
 					Labels: map[string]string{
-						util.ParamMultishareInstanceScLabelKey: "testprefix",
+						util.ParamMultishareInstanceScLabelKey: testInstanceScPrefix,
+						tagKeyClusterLocation:                  testLocation,
+						tagKeyClusterName:                      testClusterName,
 					},
 					State: "READY",
 				},
 				{
 					Name:     "instance-5",
-					Location: "us-central1",
-					Project:  "test-project",
+					Project:  testProject,
+					Location: testRegion,
 					Labels: map[string]string{
-						util.ParamMultishareInstanceScLabelKey: "testprefix",
+						util.ParamMultishareInstanceScLabelKey: testInstanceScPrefix,
+						tagKeyClusterLocation:                  testLocation,
+						tagKeyClusterName:                      testClusterName,
 					},
 					State: "ERROR",
 				},
 				{
 					Name:     "instance-6",
-					Location: "us-central1",
-					Project:  "test-project",
+					Project:  testProject,
+					Location: testRegion,
 					Labels: map[string]string{
-						util.ParamMultishareInstanceScLabelKey: "testprefix",
+						util.ParamMultishareInstanceScLabelKey: testInstanceScPrefix,
+						tagKeyClusterLocation:                  testLocation,
+						tagKeyClusterName:                      testClusterName,
 					},
 					State: "SUSPENDED",
 				},
@@ -2017,10 +2184,12 @@ func TestRunEligibleInstanceCheck(t *testing.T) {
 			expectedReadyInstance: []*file.MultishareInstance{
 				{
 					Name:     "instance-3",
-					Location: "us-central1",
-					Project:  "test-project",
+					Project:  testProject,
+					Location: testRegion,
 					Labels: map[string]string{
-						util.ParamMultishareInstanceScLabelKey: "testprefix",
+						util.ParamMultishareInstanceScLabelKey: testInstanceScPrefix,
+						tagKeyClusterLocation:                  testLocation,
+						tagKeyClusterName:                      testClusterName,
 					},
 					State: "READY",
 				},
@@ -2038,33 +2207,39 @@ func TestRunEligibleInstanceCheck(t *testing.T) {
 			name: "creating instance count as non-ready",
 			req: &csi.CreateVolumeRequest{
 				Parameters: map[string]string{
-					paramMultishareInstanceScLabel: "testprefix",
+					paramMultishareInstanceScLabel: testInstanceScPrefix,
 				},
 			},
 			target: &file.MultishareInstance{
 				Name:     "test-target-instance",
-				Project:  "test-project",
-				Location: "us-central1",
+				Project:  testProject,
+				Location: testRegion,
 				Labels: map[string]string{
-					util.ParamMultishareInstanceScLabelKey: "testprefix",
+					util.ParamMultishareInstanceScLabelKey: testInstanceScPrefix,
+					tagKeyClusterLocation:                  testLocation,
+					tagKeyClusterName:                      testClusterName,
 				},
 			},
 			initInstances: []*file.MultishareInstance{
 				{
 					Name:     "instance-1",
-					Location: "us-central1",
-					Project:  "test-project",
+					Project:  testProject,
+					Location: testRegion,
 					Labels: map[string]string{
-						util.ParamMultishareInstanceScLabelKey: "testprefix",
+						util.ParamMultishareInstanceScLabelKey: testInstanceScPrefix,
+						tagKeyClusterLocation:                  testLocation,
+						tagKeyClusterName:                      testClusterName,
 					},
 					State: "CREATING",
 				},
 				{
 					Name:     "instance-2",
-					Location: "us-central1",
-					Project:  "test-project",
+					Project:  testProject,
+					Location: testRegion,
 					Labels: map[string]string{
-						util.ParamMultishareInstanceScLabelKey: "testprefix",
+						util.ParamMultishareInstanceScLabelKey: testInstanceScPrefix,
+						tagKeyClusterLocation:                  testLocation,
+						tagKeyClusterName:                      testClusterName,
 					},
 					State: "ERROR",
 				},
@@ -2085,10 +2260,10 @@ func TestRunEligibleInstanceCheck(t *testing.T) {
 			if err != nil {
 				t.Fatalf("failed to fake service: %v", err)
 			}
-			cloudProvider, err := cloud.NewFakeCloud()
+			cloudProvider, _ := cloud.NewFakeCloud()
 			cloudProvider.File = s
 			manager := NewMultishareOpsManager(cloudProvider)
-			ready, nonReady, err := manager.runEligibleInstanceCheck(context.Background(), tc.req, tc.ops, tc.target)
+			ready, nonReady, err := manager.runEligibleInstanceCheck(context.Background(), tc.req, tc.ops, tc.target, testRegions)
 			if err != nil {
 				t.Errorf("unexpected error")
 			}