mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-07-23 19:56:01 +00:00
move shared test cluster vars into method + type
This commit is contained in:
parent
ac6ff68e20
commit
7fff54cfdd
@ -30,40 +30,33 @@ import (
|
||||
"k8s.io/kubernetes/pkg/cloudprovider/providers/gce/cloud"
|
||||
)
|
||||
|
||||
const serviceName = ""
|
||||
|
||||
func TestEnsureStaticIP(t *testing.T) {
|
||||
projectID := "test-project"
|
||||
region := "us-central1"
|
||||
zoneName := "us-central1-b"
|
||||
|
||||
gce, err := fakeGCECloud(projectID, region, zoneName)
|
||||
gce, err := fakeGCECloud(DefaultTestClusterValues())
|
||||
require.NoError(t, err)
|
||||
|
||||
ipName := "some-static-ip"
|
||||
serviceName := "some-service"
|
||||
|
||||
// First ensure call
|
||||
ip, existed, err := ensureStaticIP(gce, ipName, serviceName, region, "", cloud.NetworkTierDefault)
|
||||
ip, existed, err := ensureStaticIP(gce, ipName, serviceName, gce.region, "", cloud.NetworkTierDefault)
|
||||
if err != nil || existed {
|
||||
t.Fatalf(`ensureStaticIP(%v, %v, %v, %v, "") = %v, %v, %v; want valid ip, false, nil`, gce, ipName, serviceName, region, ip, existed, err)
|
||||
t.Fatalf(`ensureStaticIP(%v, %v, %v, %v, "") = %v, %v, %v; want valid ip, false, nil`, gce, ipName, serviceName, gce.region, ip, existed, err)
|
||||
}
|
||||
|
||||
// Second ensure call
|
||||
var ipPrime string
|
||||
ipPrime, existed, err = ensureStaticIP(gce, ipName, serviceName, region, ip, cloud.NetworkTierDefault)
|
||||
ipPrime, existed, err = ensureStaticIP(gce, ipName, serviceName, gce.region, ip, cloud.NetworkTierDefault)
|
||||
if err != nil || !existed || ip != ipPrime {
|
||||
t.Fatalf(`ensureStaticIP(%v, %v, %v, %v, %v) = %v, %v, %v; want %v, true, nil`, gce, ipName, serviceName, region, ip, ipPrime, existed, err, ip)
|
||||
t.Fatalf(`ensureStaticIP(%v, %v, %v, %v, %v) = %v, %v, %v; want %v, true, nil`, gce, ipName, serviceName, gce.region, ip, ipPrime, existed, err, ip)
|
||||
}
|
||||
}
|
||||
|
||||
func TestEnsureStaticIPWithTier(t *testing.T) {
|
||||
projectID := "test-project"
|
||||
region := "us-central1"
|
||||
zoneName := "us-central1-b"
|
||||
|
||||
s, err := fakeGCECloud(projectID, region, zoneName)
|
||||
s, err := fakeGCECloud(DefaultTestClusterValues())
|
||||
require.NoError(t, err)
|
||||
|
||||
serviceName := "some-service"
|
||||
|
||||
for desc, tc := range map[string]struct {
|
||||
name string
|
||||
netTier cloud.NetworkTier
|
||||
@ -81,13 +74,13 @@ func TestEnsureStaticIPWithTier(t *testing.T) {
|
||||
},
|
||||
} {
|
||||
t.Run(desc, func(t *testing.T) {
|
||||
ip, existed, err := ensureStaticIP(s, tc.name, serviceName, region, "", tc.netTier)
|
||||
ip, existed, err := ensureStaticIP(s, tc.name, serviceName, s.region, "", tc.netTier)
|
||||
assert.NoError(t, err)
|
||||
assert.False(t, existed)
|
||||
assert.NotEqual(t, ip, "")
|
||||
// Get the Address from the fake address service and verify that the tier
|
||||
// is set correctly.
|
||||
alphaAddr, err := s.GetAlphaRegionAddress(tc.name, region)
|
||||
alphaAddr, err := s.GetAlphaRegionAddress(tc.name, s.region)
|
||||
require.NoError(t, err)
|
||||
assert.Equal(t, tc.expected, alphaAddr.NetworkTier)
|
||||
})
|
||||
@ -96,7 +89,6 @@ func TestEnsureStaticIPWithTier(t *testing.T) {
|
||||
|
||||
func TestVerifyRequestedIP(t *testing.T) {
|
||||
lbRef := "test-lb"
|
||||
region := "us-central1"
|
||||
|
||||
for desc, tc := range map[string]struct {
|
||||
requestedIP string
|
||||
@ -137,13 +129,13 @@ func TestVerifyRequestedIP(t *testing.T) {
|
||||
},
|
||||
} {
|
||||
t.Run(desc, func(t *testing.T) {
|
||||
s, err := fakeGCECloud("test-project", region, "us-central1a")
|
||||
s, err := fakeGCECloud(DefaultTestClusterValues())
|
||||
require.NoError(t, err)
|
||||
|
||||
for _, addr := range tc.addrList {
|
||||
s.ReserveAlphaRegionAddress(addr, region)
|
||||
s.ReserveAlphaRegionAddress(addr, s.region)
|
||||
}
|
||||
isUserOwnedIP, err := verifyUserRequestedIP(s, region, tc.requestedIP, tc.fwdRuleIP, lbRef, tc.netTier)
|
||||
isUserOwnedIP, err := verifyUserRequestedIP(s, s.region, tc.requestedIP, tc.fwdRuleIP, lbRef, tc.netTier)
|
||||
assert.Equal(t, tc.expectErr, err != nil, fmt.Sprintf("err: %v", err))
|
||||
assert.Equal(t, tc.expectUserOwned, isUserOwnedIP)
|
||||
})
|
||||
@ -154,9 +146,8 @@ func TestCreateForwardingRuleWithTier(t *testing.T) {
|
||||
// Common variables among the tests.
|
||||
ports := []v1.ServicePort{{Name: "foo", Protocol: v1.ProtocolTCP, Port: int32(123)}}
|
||||
target := "test-target-pool"
|
||||
svcName := "foo-svc"
|
||||
projectID := "test-project"
|
||||
region := "us-central1"
|
||||
vals := DefaultTestClusterValues()
|
||||
serviceName := "foo-svc"
|
||||
|
||||
baseLinkUrl := "https://www.googleapis.com/compute/%v/projects/%v/regions/%v/forwardingRules/%v"
|
||||
|
||||
@ -174,7 +165,7 @@ func TestCreateForwardingRuleWithTier(t *testing.T) {
|
||||
PortRange: "123-123",
|
||||
Target: target,
|
||||
NetworkTier: "PREMIUM",
|
||||
SelfLink: fmt.Sprintf(baseLinkUrl, "v1", projectID, region, "lb-1"),
|
||||
SelfLink: fmt.Sprintf(baseLinkUrl, "v1", vals.ProjectID, vals.Region, "lb-1"),
|
||||
},
|
||||
},
|
||||
"Standard tier": {
|
||||
@ -187,21 +178,21 @@ func TestCreateForwardingRuleWithTier(t *testing.T) {
|
||||
PortRange: "123-123",
|
||||
Target: target,
|
||||
NetworkTier: "STANDARD",
|
||||
SelfLink: fmt.Sprintf(baseLinkUrl, "alpha", projectID, region, "lb-2"),
|
||||
SelfLink: fmt.Sprintf(baseLinkUrl, "alpha", vals.ProjectID, vals.Region, "lb-2"),
|
||||
},
|
||||
},
|
||||
} {
|
||||
t.Run(desc, func(t *testing.T) {
|
||||
s, err := fakeGCECloud(projectID, region, "us-central1a")
|
||||
s, err := fakeGCECloud(vals)
|
||||
require.NoError(t, err)
|
||||
|
||||
lbName := tc.expectedRule.Name
|
||||
ipAddr := tc.expectedRule.IPAddress
|
||||
|
||||
err = createForwardingRule(s, lbName, svcName, region, ipAddr, target, ports, tc.netTier)
|
||||
err = createForwardingRule(s, lbName, serviceName, s.region, ipAddr, target, ports, tc.netTier)
|
||||
assert.NoError(t, err)
|
||||
|
||||
alphaRule, err := s.GetAlphaRegionForwardingRule(lbName, region)
|
||||
alphaRule, err := s.GetAlphaRegionForwardingRule(lbName, s.region)
|
||||
assert.NoError(t, err)
|
||||
assert.Equal(t, tc.expectedRule, alphaRule)
|
||||
})
|
||||
@ -210,9 +201,8 @@ func TestCreateForwardingRuleWithTier(t *testing.T) {
|
||||
|
||||
func TestDeleteAddressWithWrongTier(t *testing.T) {
|
||||
lbRef := "test-lb"
|
||||
region := "us-central1"
|
||||
|
||||
s, err := fakeGCECloud("test-region", region, "us-central1a")
|
||||
s, err := fakeGCECloud(DefaultTestClusterValues())
|
||||
require.NoError(t, err)
|
||||
|
||||
// Enable the cloud.NetworkTiers feature
|
||||
@ -249,17 +239,17 @@ func TestDeleteAddressWithWrongTier(t *testing.T) {
|
||||
} {
|
||||
t.Run(desc, func(t *testing.T) {
|
||||
for _, addr := range tc.addrList {
|
||||
s.ReserveAlphaRegionAddress(addr, region)
|
||||
s.ReserveAlphaRegionAddress(addr, s.region)
|
||||
}
|
||||
|
||||
// Sanity check to ensure we inject the right address.
|
||||
_, err = s.GetRegionAddress(tc.addrName, region)
|
||||
_, err = s.GetRegionAddress(tc.addrName, s.region)
|
||||
require.NoError(t, err)
|
||||
|
||||
err = deleteAddressWithWrongTier(s, region, tc.addrName, lbRef, tc.netTier)
|
||||
err = deleteAddressWithWrongTier(s, s.region, tc.addrName, lbRef, tc.netTier)
|
||||
assert.NoError(t, err)
|
||||
// Check whether the address still exists.
|
||||
_, err = s.GetRegionAddress(tc.addrName, region)
|
||||
_, err = s.GetRegionAddress(tc.addrName, s.region)
|
||||
if tc.expectDelete {
|
||||
assert.True(t, isNotFound(err))
|
||||
} else {
|
||||
@ -285,27 +275,23 @@ func createExternalLoadBalancer(gce *GCECloud, nodeNames []string, clusterName,
|
||||
}
|
||||
|
||||
func TestEnsureExternalLoadBalancer(t *testing.T) {
|
||||
projectID := "test-project"
|
||||
region := "us-central1"
|
||||
zoneName := "us-central1-b"
|
||||
clusterName := "Test Cluster Name"
|
||||
clusterID := "test-cluster-id"
|
||||
vals := DefaultTestClusterValues()
|
||||
nodeName := "test-node-1"
|
||||
|
||||
gce, err := fakeGCECloud(projectID, region, zoneName)
|
||||
gce, err := fakeGCECloud(vals)
|
||||
require.NoError(t, err)
|
||||
|
||||
status, err := createExternalLoadBalancer(gce, []string{nodeName}, clusterName, clusterID, zoneName)
|
||||
status, err := createExternalLoadBalancer(gce, []string{nodeName}, vals.ClusterName, vals.ClusterID, vals.ZoneName)
|
||||
assert.NoError(t, err)
|
||||
assert.NotEmpty(t, status.Ingress)
|
||||
|
||||
lbName := cloudprovider.GetLoadBalancerName(fakeApiService)
|
||||
hcName := MakeNodesHealthCheckName(clusterID)
|
||||
hcName := MakeNodesHealthCheckName(vals.ClusterID)
|
||||
|
||||
// Check that Firewalls are created for the LoadBalancer and the HealthCheck
|
||||
fwNames := []string{
|
||||
MakeFirewallName(lbName),
|
||||
MakeHealthCheckFirewallName(clusterID, hcName, true),
|
||||
MakeHealthCheckFirewallName(vals.ClusterID, hcName, true),
|
||||
}
|
||||
|
||||
for _, fwName := range fwNames {
|
||||
@ -316,7 +302,7 @@ func TestEnsureExternalLoadBalancer(t *testing.T) {
|
||||
}
|
||||
|
||||
// Check that TargetPool is Created
|
||||
pool, err := gce.GetTargetPool(lbName, region)
|
||||
pool, err := gce.GetTargetPool(lbName, gce.region)
|
||||
require.NoError(t, err)
|
||||
assert.Equal(t, lbName, pool.Name)
|
||||
assert.NotEmpty(t, pool.HealthChecks)
|
||||
@ -328,7 +314,7 @@ func TestEnsureExternalLoadBalancer(t *testing.T) {
|
||||
assert.Equal(t, hcName, healthcheck.Name)
|
||||
|
||||
// Check that ForwardingRule is created
|
||||
fwdRule, err := gce.GetRegionForwardingRule(lbName, region)
|
||||
fwdRule, err := gce.GetRegionForwardingRule(lbName, gce.region)
|
||||
require.NoError(t, err)
|
||||
assert.Equal(t, lbName, fwdRule.Name)
|
||||
assert.Equal(t, "TCP", fwdRule.IPProtocol)
|
||||
@ -336,22 +322,17 @@ func TestEnsureExternalLoadBalancer(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestUpdateExternalLoadBalancer(t *testing.T) {
|
||||
projectID := "test-project"
|
||||
region := "us-central1"
|
||||
zoneName := "us-central1-b"
|
||||
clusterName := "Test Cluster Name"
|
||||
clusterID := "test-cluster-1"
|
||||
|
||||
vals := DefaultTestClusterValues()
|
||||
nodeName := "test-node-1"
|
||||
|
||||
gce, err := fakeGCECloud(projectID, region, zoneName)
|
||||
gce, err := fakeGCECloud((DefaultTestClusterValues()))
|
||||
require.NoError(t, err)
|
||||
|
||||
_, err = createExternalLoadBalancer(gce, []string{nodeName}, clusterName, clusterID, zoneName)
|
||||
_, err = createExternalLoadBalancer(gce, []string{nodeName}, vals.ClusterName, vals.ClusterID, vals.ZoneName)
|
||||
assert.NoError(t, err)
|
||||
|
||||
newNodeName := "test-node-2"
|
||||
newNodes, err := createAndInsertNodes(gce, []string{nodeName, newNodeName}, zoneName)
|
||||
newNodes, err := createAndInsertNodes(gce, []string{nodeName, newNodeName}, vals.ZoneName)
|
||||
assert.NoError(t, err)
|
||||
|
||||
// Add the new node, then check that it is properly added to the TargetPool
|
||||
@ -360,64 +341,59 @@ func TestUpdateExternalLoadBalancer(t *testing.T) {
|
||||
|
||||
lbName := cloudprovider.GetLoadBalancerName(fakeApiService)
|
||||
|
||||
pool, err := gce.GetTargetPool(lbName, region)
|
||||
pool, err := gce.GetTargetPool(lbName, gce.region)
|
||||
require.NoError(t, err)
|
||||
|
||||
// TODO: when testify is updated to v1.2.0+, use ElementsMatch instead
|
||||
assert.Contains(
|
||||
t,
|
||||
pool.Instances,
|
||||
fmt.Sprintf("/zones/%s/instances/%s", zoneName, nodeName),
|
||||
fmt.Sprintf("/zones/%s/instances/%s", vals.ZoneName, nodeName),
|
||||
)
|
||||
|
||||
assert.Contains(
|
||||
t,
|
||||
pool.Instances,
|
||||
fmt.Sprintf("/zones/%s/instances/%s", zoneName, newNodeName),
|
||||
fmt.Sprintf("/zones/%s/instances/%s", vals.ZoneName, newNodeName),
|
||||
)
|
||||
|
||||
newNodes, err = createAndInsertNodes(gce, []string{nodeName}, zoneName)
|
||||
newNodes, err = createAndInsertNodes(gce, []string{nodeName}, vals.ZoneName)
|
||||
assert.NoError(t, err)
|
||||
|
||||
// Remove the new node by calling updateExternalLoadBalancer with a list
|
||||
// only containing the old node, and test that the TargetPool no longer
|
||||
// contains the new node.
|
||||
err = gce.updateExternalLoadBalancer(clusterName, fakeApiService, newNodes)
|
||||
err = gce.updateExternalLoadBalancer(vals.ClusterName, fakeApiService, newNodes)
|
||||
assert.NoError(t, err)
|
||||
|
||||
pool, err = gce.GetTargetPool(lbName, region)
|
||||
pool, err = gce.GetTargetPool(lbName, gce.region)
|
||||
require.NoError(t, err)
|
||||
|
||||
assert.Equal(
|
||||
t,
|
||||
[]string{fmt.Sprintf("/zones/%s/instances/%s", zoneName, nodeName)},
|
||||
[]string{fmt.Sprintf("/zones/%s/instances/%s", vals.ZoneName, nodeName)},
|
||||
pool.Instances,
|
||||
)
|
||||
}
|
||||
|
||||
func TestEnsureExternalLoadBalancerDeleted(t *testing.T) {
|
||||
projectID := "test-project"
|
||||
region := "us-central1"
|
||||
zoneName := "us-central1-b"
|
||||
clusterName := "Test Cluster Name"
|
||||
clusterID := "test-cluster-id"
|
||||
|
||||
gce, err := fakeGCECloud(projectID, region, zoneName)
|
||||
vals := DefaultTestClusterValues()
|
||||
gce, err := fakeGCECloud(vals)
|
||||
require.NoError(t, err)
|
||||
|
||||
_, err = createExternalLoadBalancer(gce, []string{"test-node-1"}, clusterName, clusterID, zoneName)
|
||||
_, err = createExternalLoadBalancer(gce, []string{"test-node-1"}, vals.ClusterName, vals.ClusterID, vals.ZoneName)
|
||||
assert.NoError(t, err)
|
||||
|
||||
err = gce.ensureExternalLoadBalancerDeleted(clusterName, clusterID, fakeApiService)
|
||||
err = gce.ensureExternalLoadBalancerDeleted(vals.ClusterName, vals.ClusterID, fakeApiService)
|
||||
assert.NoError(t, err)
|
||||
|
||||
lbName := cloudprovider.GetLoadBalancerName(fakeApiService)
|
||||
hcName := MakeNodesHealthCheckName(clusterID)
|
||||
hcName := MakeNodesHealthCheckName(vals.ClusterID)
|
||||
|
||||
// Check that Firewalls are deleted for the LoadBalancer and the HealthCheck
|
||||
fwNames := []string{
|
||||
MakeFirewallName(lbName),
|
||||
MakeHealthCheckFirewallName(clusterID, hcName, true),
|
||||
MakeHealthCheckFirewallName(vals.ClusterID, hcName, true),
|
||||
}
|
||||
|
||||
for _, fwName := range fwNames {
|
||||
@ -427,7 +403,7 @@ func TestEnsureExternalLoadBalancerDeleted(t *testing.T) {
|
||||
}
|
||||
|
||||
// Check that TargetPool is deleted
|
||||
pool, err := gce.GetTargetPool(lbName, region)
|
||||
pool, err := gce.GetTargetPool(lbName, gce.region)
|
||||
require.Error(t, err)
|
||||
assert.Nil(t, pool)
|
||||
|
||||
@ -437,19 +413,14 @@ func TestEnsureExternalLoadBalancerDeleted(t *testing.T) {
|
||||
assert.Nil(t, healthcheck)
|
||||
|
||||
// Check forwarding rule is deleted
|
||||
fwdRule, err := gce.GetRegionForwardingRule(lbName, region)
|
||||
fwdRule, err := gce.GetRegionForwardingRule(lbName, gce.region)
|
||||
require.Error(t, err)
|
||||
assert.Nil(t, fwdRule)
|
||||
}
|
||||
|
||||
func TestLoadBalancerWrongTierResourceDeletion(t *testing.T) {
|
||||
projectID := "test-project"
|
||||
region := "us-central1"
|
||||
zoneName := "us-central1-b"
|
||||
clusterName := "Test Cluster Name"
|
||||
clusterID := "test-cluster-id"
|
||||
|
||||
gce, err := fakeGCECloud(projectID, region, zoneName)
|
||||
vals := DefaultTestClusterValues()
|
||||
gce, err := fakeGCECloud(vals)
|
||||
require.NoError(t, err)
|
||||
|
||||
// Enable the cloud.NetworkTiers feature
|
||||
@ -469,7 +440,7 @@ func TestLoadBalancerWrongTierResourceDeletion(t *testing.T) {
|
||||
gce,
|
||||
lbName,
|
||||
serviceName.String(),
|
||||
region,
|
||||
gce.region,
|
||||
"",
|
||||
gce.targetPoolURL(lbName),
|
||||
fakeApiService.Spec.Ports,
|
||||
@ -483,18 +454,18 @@ func TestLoadBalancerWrongTierResourceDeletion(t *testing.T) {
|
||||
NetworkTier: cloud.NetworkTierStandard.ToGCEValue(),
|
||||
}
|
||||
|
||||
err = gce.ReserveAlphaRegionAddress(addressObj, region)
|
||||
err = gce.ReserveAlphaRegionAddress(addressObj, gce.region)
|
||||
require.NoError(t, err)
|
||||
|
||||
_, err = createExternalLoadBalancer(gce, []string{"test-node-1"}, clusterName, clusterID, zoneName)
|
||||
_, err = createExternalLoadBalancer(gce, []string{"test-node-1"}, vals.ClusterName, vals.ClusterID, vals.ZoneName)
|
||||
require.NoError(t, err)
|
||||
|
||||
// Expect forwarding rule tier to not be Standard
|
||||
tier, err := gce.getNetworkTierFromForwardingRule(lbName, region)
|
||||
tier, err := gce.getNetworkTierFromForwardingRule(lbName, gce.region)
|
||||
assert.NoError(t, err)
|
||||
assert.Equal(t, cloud.NetworkTierDefault.ToGCEValue(), tier)
|
||||
|
||||
// Expect address to be deleted
|
||||
_, err = gce.GetRegionAddress(lbName, region)
|
||||
_, err = gce.GetRegionAddress(lbName, gce.region)
|
||||
assert.True(t, isNotFound(err))
|
||||
}
|
||||
|
@ -51,17 +51,17 @@ func TestEnsureInternalBackendServiceUpdates(t *testing.T) {
|
||||
vals := DefaultTestClusterValues()
|
||||
nodeNames := []string{"test-node-1"}
|
||||
|
||||
gce, err := fakeGCECloud(projectID, region, zoneName)
|
||||
gce, err := fakeGCECloud(vals)
|
||||
require.NoError(t, err)
|
||||
|
||||
lbName := cloudprovider.GetLoadBalancerName(fakeApiService)
|
||||
nodes, err := createAndInsertNodes(gce, nodeNames, zoneName)
|
||||
igName := makeInstanceGroupName(clusterID)
|
||||
nodes, err := createAndInsertNodes(gce, nodeNames, vals.ZoneName)
|
||||
igName := makeInstanceGroupName(vals.ClusterID)
|
||||
igLinks, err := gce.ensureInternalInstanceGroups(igName, nodes)
|
||||
require.NoError(t, err)
|
||||
|
||||
sharedBackend := shareBackendService(fakeApiService)
|
||||
bsName := makeBackendServiceName(lbName, clusterID, sharedBackend, cloud.SchemeInternal, "TCP", fakeApiService.Spec.SessionAffinity)
|
||||
bsName := makeBackendServiceName(lbName, vals.ClusterID, sharedBackend, cloud.SchemeInternal, "TCP", fakeApiService.Spec.SessionAffinity)
|
||||
err = gce.ensureInternalBackendService(bsName, "description", fakeApiService.Spec.SessionAffinity, cloud.SchemeInternal, "TCP", igLinks, "")
|
||||
require.NoError(t, err)
|
||||
|
||||
@ -75,23 +75,20 @@ func TestEnsureInternalBackendServiceUpdates(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestEnsureInternalBackendServiceGroups(t *testing.T) {
|
||||
projectID := "test-project"
|
||||
region := "us-central1"
|
||||
zoneName := "us-central1-b"
|
||||
clusterID := "test-cluster-id"
|
||||
vals := DefaultTestClusterValues()
|
||||
nodeNames := []string{"test-node-1"}
|
||||
|
||||
gce, err := fakeGCECloud(projectID, region, zoneName)
|
||||
gce, err := fakeGCECloud(vals)
|
||||
require.NoError(t, err)
|
||||
|
||||
lbName := cloudprovider.GetLoadBalancerName(fakeApiService)
|
||||
nodes, err := createAndInsertNodes(gce, nodeNames, zoneName)
|
||||
igName := makeInstanceGroupName(clusterID)
|
||||
nodes, err := createAndInsertNodes(gce, nodeNames, vals.ZoneName)
|
||||
igName := makeInstanceGroupName(vals.ClusterID)
|
||||
igLinks, err := gce.ensureInternalInstanceGroups(igName, nodes)
|
||||
require.NoError(t, err)
|
||||
|
||||
sharedBackend := shareBackendService(fakeApiService)
|
||||
bsName := makeBackendServiceName(lbName, clusterID, sharedBackend, cloud.SchemeInternal, "TCP", fakeApiService.Spec.SessionAffinity)
|
||||
bsName := makeBackendServiceName(lbName, vals.ClusterID, sharedBackend, cloud.SchemeInternal, "TCP", fakeApiService.Spec.SessionAffinity)
|
||||
err = gce.ensureInternalBackendService(bsName, "description", fakeApiService.Spec.SessionAffinity, cloud.SchemeInternal, "TCP", igLinks, "")
|
||||
require.NoError(t, err)
|
||||
|
||||
@ -104,39 +101,35 @@ func TestEnsureInternalBackendServiceGroups(t *testing.T) {
|
||||
assert.NoError(t, err)
|
||||
|
||||
// Check that the instances are updated
|
||||
newNodes, err := createAndInsertNodes(gce, newNodeNames, zoneName)
|
||||
newNodes, err := createAndInsertNodes(gce, newNodeNames, vals.ZoneName)
|
||||
newIgLinks, err := gce.ensureInternalInstanceGroups(igName, newNodes)
|
||||
backends := backendsFromGroupLinks(newIgLinks)
|
||||
assert.Equal(t, bs.Backends, backends)
|
||||
}
|
||||
|
||||
func TestEnsureInternalLoadBalancer(t *testing.T) {
|
||||
projectID := "test-project"
|
||||
region := "us-central1"
|
||||
zoneName := "us-central1-b"
|
||||
clusterName := "Test Cluster"
|
||||
clusterID := "test-cluster-id"
|
||||
vals := DefaultTestClusterValues()
|
||||
nodeName := "test-node-1"
|
||||
|
||||
gce, err := fakeGCECloud(projectID, region, zoneName)
|
||||
gce, err := fakeGCECloud(vals)
|
||||
require.NoError(t, err)
|
||||
|
||||
status, err := createInternalLoadBalancer(gce, nil, []string{nodeName}, clusterName, clusterID, zoneName)
|
||||
status, err := createInternalLoadBalancer(gce, nil, []string{nodeName}, vals.ClusterName, vals.ClusterID, vals.ZoneName)
|
||||
assert.NoError(t, err)
|
||||
assert.NotEmpty(t, status.Ingress)
|
||||
|
||||
lbName := cloudprovider.GetLoadBalancerName(fakeApiService)
|
||||
|
||||
// Check that Instance Group is created
|
||||
igName := makeInstanceGroupName(clusterID)
|
||||
ig, err := gce.GetInstanceGroup(igName, zoneName)
|
||||
igName := makeInstanceGroupName(vals.ClusterID)
|
||||
ig, err := gce.GetInstanceGroup(igName, vals.ZoneName)
|
||||
assert.NoError(t, err)
|
||||
assert.Equal(t, igName, ig.Name)
|
||||
|
||||
// Check that Firewalls are created for the LoadBalancer and the HealthCheck
|
||||
fwNames := []string{
|
||||
lbName,
|
||||
makeHealthCheckFirewallName(lbName, clusterID, true),
|
||||
makeHealthCheckFirewallName(lbName, vals.ClusterID, true),
|
||||
}
|
||||
|
||||
for _, fwName := range fwNames {
|
||||
@ -148,14 +141,14 @@ func TestEnsureInternalLoadBalancer(t *testing.T) {
|
||||
|
||||
// Check that HealthCheck is created
|
||||
sharedHealthCheck := !v1_service.RequestsOnlyLocalTraffic(fakeApiService)
|
||||
hcName := makeHealthCheckName(lbName, clusterID, sharedHealthCheck)
|
||||
hcName := makeHealthCheckName(lbName, vals.ClusterID, sharedHealthCheck)
|
||||
healthcheck, err := gce.GetHealthCheck(hcName)
|
||||
require.NoError(t, err)
|
||||
assert.Equal(t, hcName, healthcheck.Name)
|
||||
|
||||
// Check that BackendService exists
|
||||
sharedBackend := shareBackendService(fakeApiService)
|
||||
backendServiceName := makeBackendServiceName(lbName, clusterID, sharedBackend, cloud.SchemeInternal, "TCP", fakeApiService.Spec.SessionAffinity)
|
||||
backendServiceName := makeBackendServiceName(lbName, vals.ClusterID, sharedBackend, cloud.SchemeInternal, "TCP", fakeApiService.Spec.SessionAffinity)
|
||||
backendServiceLink := gce.getBackendServiceLink(backendServiceName)
|
||||
|
||||
bs, err := gce.GetRegionBackendService(backendServiceName, gce.region)
|
||||
@ -168,7 +161,7 @@ func TestEnsureInternalLoadBalancer(t *testing.T) {
|
||||
)
|
||||
|
||||
// Check that ForwardingRule is created
|
||||
fwdRule, err := gce.GetRegionForwardingRule(lbName, region)
|
||||
fwdRule, err := gce.GetRegionForwardingRule(lbName, gce.region)
|
||||
require.NoError(t, err)
|
||||
assert.Equal(t, lbName, fwdRule.Name)
|
||||
assert.Equal(t, "TCP", fwdRule.IPProtocol)
|
||||
@ -178,14 +171,10 @@ func TestEnsureInternalLoadBalancer(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestEnsureInternalLoadBalancerWithExistingResources(t *testing.T) {
|
||||
projectID := "test-project"
|
||||
region := "us-central1"
|
||||
zoneName := "us-central1-b"
|
||||
clusterName := "Test Cluster"
|
||||
clusterID := "test-cluster-id"
|
||||
vals := DefaultTestClusterValues()
|
||||
nodeNames := []string{"test-node-1"}
|
||||
|
||||
gce, err := fakeGCECloud(projectID, region, zoneName)
|
||||
gce, err := fakeGCECloud(vals)
|
||||
require.NoError(t, err)
|
||||
|
||||
// Create the expected resources necessary for an Internal Load Balancer
|
||||
@ -193,35 +182,30 @@ func TestEnsureInternalLoadBalancerWithExistingResources(t *testing.T) {
|
||||
lbName := cloudprovider.GetLoadBalancerName(fakeApiService)
|
||||
|
||||
sharedHealthCheck := !v1_service.RequestsOnlyLocalTraffic(fakeApiService)
|
||||
hcName := makeHealthCheckName(lbName, clusterID, sharedHealthCheck)
|
||||
hcName := makeHealthCheckName(lbName, vals.ClusterID, sharedHealthCheck)
|
||||
hcPath, hcPort := GetNodesHealthCheckPath(), GetNodesHealthCheckPort()
|
||||
existingHC := newInternalLBHealthCheck(hcName, nm, sharedHealthCheck, hcPath, hcPort)
|
||||
err = gce.CreateHealthCheck(existingHC)
|
||||
require.NoError(t, err)
|
||||
|
||||
nodes, err := createAndInsertNodes(gce, nodeNames, zoneName)
|
||||
igName := makeInstanceGroupName(clusterID)
|
||||
nodes, err := createAndInsertNodes(gce, nodeNames, vals.ZoneName)
|
||||
igName := makeInstanceGroupName(vals.ClusterID)
|
||||
igLinks, err := gce.ensureInternalInstanceGroups(igName, nodes)
|
||||
require.NoError(t, err)
|
||||
|
||||
sharedBackend := shareBackendService(fakeApiService)
|
||||
bsDescription := makeBackendServiceDescription(nm, sharedBackend)
|
||||
bsName := makeBackendServiceName(lbName, clusterID, sharedBackend, cloud.SchemeInternal, "TCP", fakeApiService.Spec.SessionAffinity)
|
||||
bsName := makeBackendServiceName(lbName, vals.ClusterID, sharedBackend, cloud.SchemeInternal, "TCP", fakeApiService.Spec.SessionAffinity)
|
||||
err = gce.ensureInternalBackendService(bsName, bsDescription, fakeApiService.Spec.SessionAffinity, cloud.SchemeInternal, "TCP", igLinks, existingHC.SelfLink)
|
||||
require.NoError(t, err)
|
||||
|
||||
_, err = createInternalLoadBalancer(gce, nil, nodeNames, clusterName, clusterID, zoneName)
|
||||
_, err = createInternalLoadBalancer(gce, nil, nodeNames, vals.ClusterName, vals.ClusterID, vals.ZoneName)
|
||||
assert.NoError(t, err)
|
||||
}
|
||||
|
||||
func TestEnsureInternalLoadBalancerClearPreviousResources(t *testing.T) {
|
||||
projectID := "test-project"
|
||||
region := "us-central1"
|
||||
zoneName := "us-central1-b"
|
||||
clusterName := "Test Cluster"
|
||||
clusterID := "test-cluster-id"
|
||||
|
||||
gce, err := fakeGCECloud(projectID, region, zoneName)
|
||||
vals := DefaultTestClusterValues()
|
||||
gce, err := fakeGCECloud(vals)
|
||||
require.NoError(t, err)
|
||||
|
||||
lbName := cloudprovider.GetLoadBalancerName(fakeApiService)
|
||||
@ -250,7 +234,7 @@ func TestEnsureInternalLoadBalancerClearPreviousResources(t *testing.T) {
|
||||
gce.CreateFirewall(existingFirewall)
|
||||
|
||||
sharedHealthCheck := !v1_service.RequestsOnlyLocalTraffic(fakeApiService)
|
||||
hcName := makeHealthCheckName(lbName, clusterID, sharedHealthCheck)
|
||||
hcName := makeHealthCheckName(lbName, vals.ClusterID, sharedHealthCheck)
|
||||
hcPath, hcPort := GetNodesHealthCheckPath(), GetNodesHealthCheckPort()
|
||||
nm := types.NamespacedName{Name: fakeApiService.Name, Namespace: fakeApiService.Namespace}
|
||||
|
||||
@ -261,7 +245,7 @@ func TestEnsureInternalLoadBalancerClearPreviousResources(t *testing.T) {
|
||||
|
||||
// Create a backend Service that's missing Description and Backends
|
||||
sharedBackend := shareBackendService(fakeApiService)
|
||||
backendServiceName := makeBackendServiceName(lbName, clusterID, sharedBackend, cloud.SchemeInternal, "TCP", fakeApiService.Spec.SessionAffinity)
|
||||
backendServiceName := makeBackendServiceName(lbName, vals.ClusterID, sharedBackend, cloud.SchemeInternal, "TCP", fakeApiService.Spec.SessionAffinity)
|
||||
existingBS := &compute.BackendService{
|
||||
Name: lbName,
|
||||
Protocol: "TCP",
|
||||
@ -273,7 +257,7 @@ func TestEnsureInternalLoadBalancerClearPreviousResources(t *testing.T) {
|
||||
gce.CreateRegionBackendService(existingBS, gce.region)
|
||||
existingFwdRule.BackendService = existingBS.Name
|
||||
|
||||
_, err = createInternalLoadBalancer(gce, existingFwdRule, []string{"test-node-1"}, clusterName, clusterID, zoneName)
|
||||
_, err = createInternalLoadBalancer(gce, existingFwdRule, []string{"test-node-1"}, vals.ClusterName, vals.ClusterID, vals.ZoneName)
|
||||
assert.NoError(t, err)
|
||||
|
||||
// Expect new resources with the correct attributes to be created
|
||||
@ -294,18 +278,13 @@ func TestEnsureInternalLoadBalancerClearPreviousResources(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestUpdateInternalLoadBalancerBackendServices(t *testing.T) {
|
||||
projectID := "test-project"
|
||||
region := "us-central1"
|
||||
zoneName := "us-central1-b"
|
||||
clusterName := "Test Cluster Name"
|
||||
clusterID := "test-cluster-id"
|
||||
|
||||
vals := DefaultTestClusterValues()
|
||||
nodeName := "test-node-1"
|
||||
|
||||
gce, err := fakeGCECloud(projectID, region, zoneName)
|
||||
gce, err := fakeGCECloud(vals)
|
||||
require.NoError(t, err)
|
||||
|
||||
_, err = createInternalLoadBalancer(gce, nil, []string{"test-node-1"}, clusterName, clusterID, zoneName)
|
||||
_, err = createInternalLoadBalancer(gce, nil, []string{"test-node-1"}, vals.ClusterName, vals.ClusterID, vals.ZoneName)
|
||||
assert.NoError(t, err)
|
||||
|
||||
// BackendService exists prior to updateInternalLoadBalancer call, but has
|
||||
@ -314,7 +293,7 @@ func TestUpdateInternalLoadBalancerBackendServices(t *testing.T) {
|
||||
// BackendService
|
||||
lbName := cloudprovider.GetLoadBalancerName(fakeApiService)
|
||||
sharedBackend := shareBackendService(fakeApiService)
|
||||
backendServiceName := makeBackendServiceName(lbName, clusterID, sharedBackend, cloud.SchemeInternal, "TCP", fakeApiService.Spec.SessionAffinity)
|
||||
backendServiceName := makeBackendServiceName(lbName, vals.ClusterID, sharedBackend, cloud.SchemeInternal, "TCP", fakeApiService.Spec.SessionAffinity)
|
||||
existingBS := &compute.BackendService{
|
||||
Name: backendServiceName,
|
||||
Protocol: "TCP",
|
||||
@ -324,10 +303,10 @@ func TestUpdateInternalLoadBalancerBackendServices(t *testing.T) {
|
||||
|
||||
gce.CreateRegionBackendService(existingBS, gce.region)
|
||||
|
||||
nodes, err := createAndInsertNodes(gce, []string{nodeName}, zoneName)
|
||||
nodes, err := createAndInsertNodes(gce, []string{nodeName}, vals.ZoneName)
|
||||
require.NoError(t, err)
|
||||
|
||||
err = gce.updateInternalLoadBalancer(clusterName, clusterID, fakeApiService, nodes)
|
||||
err = gce.updateInternalLoadBalancer(vals.ClusterName, vals.ClusterID, fakeApiService, nodes)
|
||||
assert.NoError(t, err)
|
||||
|
||||
bs, err := gce.GetRegionBackendService(backendServiceName, gce.region)
|
||||
@ -351,63 +330,53 @@ func TestUpdateInternalLoadBalancerBackendServices(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestUpdateInternalLoadBalancerNodes(t *testing.T) {
|
||||
projectID := "test-project"
|
||||
region := "us-central1"
|
||||
zoneName := "us-central1-b"
|
||||
clusterName := "Test Cluster Name"
|
||||
clusterID := "test-cluster-id"
|
||||
|
||||
gce, err := fakeGCECloud(projectID, region, zoneName)
|
||||
vals := DefaultTestClusterValues()
|
||||
gce, err := fakeGCECloud(vals)
|
||||
require.NoError(t, err)
|
||||
|
||||
_, err = createInternalLoadBalancer(gce, nil, []string{"test-node-1"}, clusterName, clusterID, zoneName)
|
||||
_, err = createInternalLoadBalancer(gce, nil, []string{"test-node-1"}, vals.ClusterName, vals.ClusterID, vals.ZoneName)
|
||||
assert.NoError(t, err)
|
||||
|
||||
// Remove the old Node and insert a new Node.
|
||||
newNodeName := "test-node-2"
|
||||
newNodes, err := createAndInsertNodes(gce, []string{newNodeName}, zoneName)
|
||||
newNodes, err := createAndInsertNodes(gce, []string{newNodeName}, vals.ZoneName)
|
||||
require.NoError(t, err)
|
||||
|
||||
err = gce.updateInternalLoadBalancer(clusterName, clusterID, fakeApiService, newNodes)
|
||||
err = gce.updateInternalLoadBalancer(vals.ClusterName, vals.ClusterID, fakeApiService, newNodes)
|
||||
assert.NoError(t, err)
|
||||
|
||||
// Expect node 1 to be deleted and node 2 to still exist
|
||||
igName := makeInstanceGroupName(clusterID)
|
||||
instances, err := gce.ListInstancesInInstanceGroup(igName, zoneName, "ALL")
|
||||
igName := makeInstanceGroupName(vals.ClusterID)
|
||||
instances, err := gce.ListInstancesInInstanceGroup(igName, vals.ZoneName, "ALL")
|
||||
require.NoError(t, err)
|
||||
|
||||
assert.Equal(t, 1, len(instances))
|
||||
assert.Contains(
|
||||
t,
|
||||
instances[0].Instance,
|
||||
fmt.Sprintf("projects/%s/zones/%s/instances/%s", projectID, zoneName, newNodeName),
|
||||
fmt.Sprintf("projects/%s/zones/%s/instances/%s", vals.ProjectID, vals.ZoneName, newNodeName),
|
||||
)
|
||||
}
|
||||
|
||||
func TestEnsureInternalLoadBalancerDeleted(t *testing.T) {
|
||||
projectID := "test-project"
|
||||
region := "us-central1"
|
||||
zoneName := "us-central1-b"
|
||||
clusterName := "Test Cluster Name"
|
||||
clusterID := "test-cluster-id"
|
||||
|
||||
gce, err := fakeGCECloud(projectID, region, zoneName)
|
||||
vals := DefaultTestClusterValues()
|
||||
gce, err := fakeGCECloud(vals)
|
||||
require.NoError(t, err)
|
||||
|
||||
_, err = createInternalLoadBalancer(gce, nil, []string{"test-node-1"}, clusterName, clusterID, zoneName)
|
||||
_, err = createInternalLoadBalancer(gce, nil, []string{"test-node-1"}, vals.ClusterName, vals.ClusterID, vals.ZoneName)
|
||||
assert.NoError(t, err)
|
||||
|
||||
err = gce.ensureInternalLoadBalancerDeleted(clusterName, clusterID, fakeApiService)
|
||||
err = gce.ensureInternalLoadBalancerDeleted(vals.ClusterName, vals.ClusterID, fakeApiService)
|
||||
assert.NoError(t, err)
|
||||
|
||||
lbName := cloudprovider.GetLoadBalancerName(fakeApiService)
|
||||
sharedHealthCheck := !v1_service.RequestsOnlyLocalTraffic(fakeApiService)
|
||||
hcName := makeHealthCheckName(lbName, clusterID, sharedHealthCheck)
|
||||
hcName := makeHealthCheckName(lbName, vals.ClusterID, sharedHealthCheck)
|
||||
|
||||
// Check that Firewalls are deleted for the LoadBalancer and the HealthCheck
|
||||
fwNames := []string{
|
||||
MakeFirewallName(lbName),
|
||||
MakeHealthCheckFirewallName(clusterID, hcName, true),
|
||||
MakeHealthCheckFirewallName(vals.ClusterID, hcName, true),
|
||||
}
|
||||
|
||||
for _, fwName := range fwNames {
|
||||
@ -417,8 +386,8 @@ func TestEnsureInternalLoadBalancerDeleted(t *testing.T) {
|
||||
}
|
||||
|
||||
// Check that Instance Group is deleted
|
||||
igName := makeInstanceGroupName(clusterID)
|
||||
ig, err := gce.GetInstanceGroup(igName, zoneName)
|
||||
igName := makeInstanceGroupName(vals.ClusterID)
|
||||
ig, err := gce.GetInstanceGroup(igName, vals.ZoneName)
|
||||
assert.Error(t, err)
|
||||
assert.Nil(t, ig)
|
||||
|
||||
@ -428,28 +397,23 @@ func TestEnsureInternalLoadBalancerDeleted(t *testing.T) {
|
||||
assert.Nil(t, healthcheck)
|
||||
|
||||
// Check forwarding rule is deleted
|
||||
fwdRule, err := gce.GetRegionForwardingRule(lbName, region)
|
||||
fwdRule, err := gce.GetRegionForwardingRule(lbName, gce.region)
|
||||
require.Error(t, err)
|
||||
assert.Nil(t, fwdRule)
|
||||
}
|
||||
|
||||
func TestEnsureInternalLoadBalancerDeletedTwiceDoesNotError(t *testing.T) {
|
||||
projectID := "test-project"
|
||||
region := "us-central1"
|
||||
zoneName := "us-central1-b"
|
||||
clusterName := "Test Cluster Name"
|
||||
clusterID := "test-cluster-id"
|
||||
|
||||
gce, err := fakeGCECloud(projectID, region, zoneName)
|
||||
vals := DefaultTestClusterValues()
|
||||
gce, err := fakeGCECloud(vals)
|
||||
require.NoError(t, err)
|
||||
|
||||
_, err = createInternalLoadBalancer(gce, nil, []string{"test-node-1"}, clusterName, clusterID, zoneName)
|
||||
_, err = createInternalLoadBalancer(gce, nil, []string{"test-node-1"}, vals.ClusterName, vals.ClusterID, vals.ZoneName)
|
||||
assert.NoError(t, err)
|
||||
|
||||
err = gce.ensureInternalLoadBalancerDeleted(clusterName, clusterID, fakeApiService)
|
||||
err = gce.ensureInternalLoadBalancerDeleted(vals.ClusterName, vals.ClusterID, fakeApiService)
|
||||
assert.NoError(t, err)
|
||||
|
||||
// Deleting the loadbalancer and resources again should not cause an error.
|
||||
err = gce.ensureInternalLoadBalancerDeleted(clusterName, clusterID, fakeApiService)
|
||||
err = gce.ensureInternalLoadBalancerDeleted(vals.ClusterName, vals.ClusterID, fakeApiService)
|
||||
assert.NoError(t, err)
|
||||
}
|
||||
|
@ -34,6 +34,24 @@ import (
|
||||
kubeletapis "k8s.io/kubernetes/pkg/kubelet/apis"
|
||||
)
|
||||
|
||||
type TestClusterValues struct {
|
||||
ProjectID string
|
||||
Region string
|
||||
ZoneName string
|
||||
ClusterID string
|
||||
ClusterName string
|
||||
}
|
||||
|
||||
func DefaultTestClusterValues() TestClusterValues {
|
||||
return TestClusterValues{
|
||||
ProjectID: "test-project",
|
||||
Region: "us-central1",
|
||||
ZoneName: "us-central1-b",
|
||||
ClusterID: "test-cluster-id",
|
||||
ClusterName: "Test Cluster Name",
|
||||
}
|
||||
}
|
||||
|
||||
var fakeApiService = &v1.Service{
|
||||
Spec: v1.ServiceSpec{
|
||||
SessionAffinity: v1.ServiceAffinityClientIP,
|
||||
@ -48,7 +66,7 @@ func (*fakeRoundTripper) RoundTrip(*http.Request) (*http.Response, error) {
|
||||
return nil, fmt.Errorf("err: test used fake http client")
|
||||
}
|
||||
|
||||
func fakeGCECloud(projectID, region, zoneName string) (*GCECloud, error) {
|
||||
func fakeGCECloud(vals TestClusterValues) (*GCECloud, error) {
|
||||
client := &http.Client{Transport: &fakeRoundTripper{}}
|
||||
|
||||
service, err := compute.New(client)
|
||||
@ -57,8 +75,8 @@ func fakeGCECloud(projectID, region, zoneName string) (*GCECloud, error) {
|
||||
}
|
||||
|
||||
// Used in disk unit tests
|
||||
fakeManager := newFakeManager(projectID, region)
|
||||
zonesWithNodes := createNodeZones([]string{zoneName})
|
||||
fakeManager := newFakeManager(vals.ProjectID, vals.Region)
|
||||
zonesWithNodes := createNodeZones([]string{vals.ZoneName})
|
||||
|
||||
alphaFeatureGate, err := NewAlphaFeatureGate([]string{})
|
||||
if err != nil {
|
||||
@ -66,12 +84,12 @@ func fakeGCECloud(projectID, region, zoneName string) (*GCECloud, error) {
|
||||
}
|
||||
|
||||
gce := &GCECloud{
|
||||
region: region,
|
||||
region: vals.Region,
|
||||
service: service,
|
||||
manager: fakeManager,
|
||||
managedZones: []string{zoneName},
|
||||
projectID: projectID,
|
||||
networkProjectID: projectID,
|
||||
managedZones: []string{vals.ZoneName},
|
||||
projectID: vals.ProjectID,
|
||||
networkProjectID: vals.ProjectID,
|
||||
AlphaFeatureGate: alphaFeatureGate,
|
||||
nodeZones: zonesWithNodes,
|
||||
nodeInformerSynced: func() bool { return true },
|
||||
@ -94,7 +112,7 @@ func fakeGCECloud(projectID, region, zoneName string) (*GCECloud, error) {
|
||||
|
||||
keyGA := meta.GlobalKey("key-ga")
|
||||
c.MockZones.Objects[*keyGA] = &cloud.MockZonesObj{
|
||||
Obj: &compute.Zone{Name: zoneName, Region: gce.getRegionLink(region)},
|
||||
Obj: &compute.Zone{Name: vals.ZoneName, Region: gce.getRegionLink(vals.Region)},
|
||||
}
|
||||
|
||||
gce.c = c
|
||||
|
Loading…
Reference in New Issue
Block a user