Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
K
k3s
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Registry
Registry
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Jacklull
k3s
Commits
0028385e
Commit
0028385e
authored
Aug 24, 2017
by
Nick Sardo
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Consume new config value for network project id
parent
b248f777
Expand all
Show whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
131 additions
and
57 deletions
+131
-57
gce.go
pkg/cloudprovider/providers/gce/gce.go
+90
-28
gce_firewall.go
pkg/cloudprovider/providers/gce/gce_firewall.go
+7
-7
gce_loadbalancer_external.go
pkg/cloudprovider/providers/gce/gce_loadbalancer_external.go
+2
-2
gce_op.go
pkg/cloudprovider/providers/gce/gce_op.go
+23
-11
gce_routes.go
pkg/cloudprovider/providers/gce/gce_routes.go
+7
-7
gce_test.go
pkg/cloudprovider/providers/gce/gce_test.go
+0
-0
e2e.go
test/e2e/e2e.go
+2
-2
No files found.
pkg/cloudprovider/providers/gce/gce.go
View file @
0028385e
...
@@ -144,12 +144,14 @@ type GCEServiceManager struct {
...
@@ -144,12 +144,14 @@ type GCEServiceManager struct {
gce
*
GCECloud
gce
*
GCECloud
}
}
// ConfigFile is the struct used to parse the /etc/gce.conf configuration file.
type
ConfigGlobal
struct
{
type
ConfigFile
struct
{
Global
struct
{
TokenURL
string
`gcfg:"token-url"`
TokenURL
string
`gcfg:"token-url"`
TokenBody
string
`gcfg:"token-body"`
TokenBody
string
`gcfg:"token-body"`
// ProjectID and NetworkProjectID can either be the numeric or string-based
// unique identifier that starts with [a-z].
ProjectID
string
`gcfg:"project-id"`
ProjectID
string
`gcfg:"project-id"`
// NetworkProjectID refers to the project which owns the network being used.
NetworkProjectID
string
`gcfg:"network-project-id"`
NetworkName
string
`gcfg:"network-name"`
NetworkName
string
`gcfg:"network-name"`
SubnetworkName
string
`gcfg:"subnetwork-name"`
SubnetworkName
string
`gcfg:"subnetwork-name"`
// SecondaryRangeName is the name of the secondary range to allocate IP
// SecondaryRangeName is the name of the secondary range to allocate IP
...
@@ -166,20 +168,27 @@ type ConfigFile struct {
...
@@ -166,20 +168,27 @@ type ConfigFile struct {
// located in (i.e. where the controller will be running). If this is
// located in (i.e. where the controller will be running). If this is
// blank, then the local zone will be discovered via the metadata server.
// blank, then the local zone will be discovered via the metadata server.
LocalZone
string
`gcfg:"local-zone"`
LocalZone
string
`gcfg:"local-zone"`
// AlphaFeatures is a list of API flags to be enabled. Defaults
to none.
// Possible values: List of api names separated by comma. Default
to none.
// Example API name format: "MyFeatureFlag"
// For example: MyFeatureFlag
AlphaFeatures
[]
string
`gcfg:"alpha-features"`
AlphaFeatures
[]
string
`gcfg:"alpha-features"`
}
}
// ConfigFile is the struct used to parse the /etc/gce.conf configuration file.
type
ConfigFile
struct
{
Global
ConfigGlobal
`gcfg:"global"`
}
}
// CloudConfig includes all the necessary configuration for creating GCECloud
// CloudConfig includes all the necessary configuration for creating GCECloud
type
CloudConfig
struct
{
type
CloudConfig
struct
{
ApiEndpoint
string
ApiEndpoint
string
ProjectID
string
ProjectID
string
NetworkProjectID
string
Region
string
Region
string
Zone
string
Zone
string
ManagedZones
[]
string
ManagedZones
[]
string
NetworkName
string
NetworkURL
string
NetworkURL
string
SubnetworkName
string
SubnetworkURL
string
SubnetworkURL
string
SecondaryRangeName
string
SecondaryRangeName
string
NodeTags
[]
string
NodeTags
[]
string
...
@@ -207,11 +216,6 @@ func (g *GCECloud) GetKMSService() *cloudkms.Service {
...
@@ -207,11 +216,6 @@ func (g *GCECloud) GetKMSService() *cloudkms.Service {
return
g
.
cloudkmsService
return
g
.
cloudkmsService
}
}
// Returns the ProjectID corresponding to the project this cloud is in.
func
(
g
*
GCECloud
)
GetProjectID
()
string
{
return
g
.
projectID
}
// newGCECloud creates a new instance of GCECloud.
// newGCECloud creates a new instance of GCECloud.
func
newGCECloud
(
config
io
.
Reader
)
(
gceCloud
*
GCECloud
,
err
error
)
{
func
newGCECloud
(
config
io
.
Reader
)
(
gceCloud
*
GCECloud
,
err
error
)
{
var
cloudConfig
*
CloudConfig
var
cloudConfig
*
CloudConfig
...
@@ -280,6 +284,7 @@ func generateCloudConfig(configFile *ConfigFile) (cloudConfig *CloudConfig, err
...
@@ -280,6 +284,7 @@ func generateCloudConfig(configFile *ConfigFile) (cloudConfig *CloudConfig, err
return
nil
,
err
return
nil
,
err
}
}
}
}
if
configFile
!=
nil
{
if
configFile
!=
nil
{
if
configFile
.
Global
.
ProjectID
!=
""
{
if
configFile
.
Global
.
ProjectID
!=
""
{
cloudConfig
.
ProjectID
=
configFile
.
Global
.
ProjectID
cloudConfig
.
ProjectID
=
configFile
.
Global
.
ProjectID
...
@@ -287,6 +292,9 @@ func generateCloudConfig(configFile *ConfigFile) (cloudConfig *CloudConfig, err
...
@@ -287,6 +292,9 @@ func generateCloudConfig(configFile *ConfigFile) (cloudConfig *CloudConfig, err
if
configFile
.
Global
.
LocalZone
!=
""
{
if
configFile
.
Global
.
LocalZone
!=
""
{
cloudConfig
.
Zone
=
configFile
.
Global
.
LocalZone
cloudConfig
.
Zone
=
configFile
.
Global
.
LocalZone
}
}
if
configFile
.
Global
.
NetworkProjectID
!=
""
{
cloudConfig
.
NetworkProjectID
=
configFile
.
Global
.
NetworkProjectID
}
}
}
// retrieve region
// retrieve region
...
@@ -301,27 +309,27 @@ func generateCloudConfig(configFile *ConfigFile) (cloudConfig *CloudConfig, err
...
@@ -301,27 +309,27 @@ func generateCloudConfig(configFile *ConfigFile) (cloudConfig *CloudConfig, err
cloudConfig
.
ManagedZones
=
nil
// Use all zones in region
cloudConfig
.
ManagedZones
=
nil
// Use all zones in region
}
}
//
generate networkURL
//
Determine if network parameter is URL or Name
if
configFile
!=
nil
&&
configFile
.
Global
.
NetworkName
!=
""
{
if
configFile
!=
nil
&&
configFile
.
Global
.
NetworkName
!=
""
{
if
strings
.
Contains
(
configFile
.
Global
.
NetworkName
,
"/"
)
{
if
strings
.
Contains
(
configFile
.
Global
.
NetworkName
,
"/"
)
{
cloudConfig
.
NetworkURL
=
configFile
.
Global
.
NetworkName
cloudConfig
.
NetworkURL
=
configFile
.
Global
.
NetworkName
}
else
{
}
else
{
cloudConfig
.
Network
URL
=
gceNetworkURL
(
cloudConfig
.
ApiEndpoint
,
cloudConfig
.
ProjectID
,
configFile
.
Global
.
NetworkName
)
cloudConfig
.
Network
Name
=
configFile
.
Global
.
NetworkName
}
}
}
else
{
}
else
{
networkName
,
err
:
=
getNetworkNameViaMetadata
()
cloudConfig
.
NetworkName
,
err
=
getNetworkNameViaMetadata
()
if
err
!=
nil
{
if
err
!=
nil
{
return
nil
,
err
return
nil
,
err
}
}
cloudConfig
.
NetworkURL
=
gceNetworkURL
(
""
,
cloudConfig
.
ProjectID
,
networkName
)
}
}
// generate subnetworkURL
// Determine if subnetwork parameter is URL or Name
// If cluster is on a GCP network of mode=custom, then `SubnetName` must be specified in config file.
if
configFile
!=
nil
&&
configFile
.
Global
.
SubnetworkName
!=
""
{
if
configFile
!=
nil
&&
configFile
.
Global
.
SubnetworkName
!=
""
{
if
strings
.
Contains
(
configFile
.
Global
.
SubnetworkName
,
"/"
)
{
if
strings
.
Contains
(
configFile
.
Global
.
SubnetworkName
,
"/"
)
{
cloudConfig
.
SubnetworkURL
=
configFile
.
Global
.
SubnetworkName
cloudConfig
.
SubnetworkURL
=
configFile
.
Global
.
SubnetworkName
}
else
{
}
else
{
cloudConfig
.
Subnetwork
URL
=
gceSubnetworkURL
(
cloudConfig
.
ApiEndpoint
,
cloudConfig
.
ProjectID
,
cloudConfig
.
Region
,
configFile
.
Global
.
SubnetworkName
)
cloudConfig
.
Subnetwork
Name
=
configFile
.
Global
.
SubnetworkName
}
}
}
}
...
@@ -332,11 +340,15 @@ func generateCloudConfig(configFile *ConfigFile) (cloudConfig *CloudConfig, err
...
@@ -332,11 +340,15 @@ func generateCloudConfig(configFile *ConfigFile) (cloudConfig *CloudConfig, err
return
cloudConfig
,
err
return
cloudConfig
,
err
}
}
// Creates a GCECloud object using the specified parameters.
// Create
GCECloud create
s a GCECloud object using the specified parameters.
// If no networkUrl is specified, loads networkName via rest call.
// If no networkUrl is specified, loads networkName via rest call.
// If no tokenSource is specified, uses oauth2.DefaultTokenSource.
// If no tokenSource is specified, uses oauth2.DefaultTokenSource.
// If managedZones is nil / empty all zones in the region will be managed.
// If managedZones is nil / empty all zones in the region will be managed.
func
CreateGCECloud
(
config
*
CloudConfig
)
(
*
GCECloud
,
error
)
{
func
CreateGCECloud
(
config
*
CloudConfig
)
(
*
GCECloud
,
error
)
{
// Use ProjectID for NetworkProjectID, if it wasn't explicitly set.
if
config
.
NetworkProjectID
==
""
{
config
.
NetworkProjectID
=
config
.
ProjectID
}
client
,
err
:=
newOauthClient
(
config
.
TokenSource
)
client
,
err
:=
newOauthClient
(
config
.
TokenSource
)
if
err
!=
nil
{
if
err
!=
nil
{
...
@@ -385,19 +397,49 @@ func CreateGCECloud(config *CloudConfig) (*GCECloud, error) {
...
@@ -385,19 +397,49 @@ func CreateGCECloud(config *CloudConfig) (*GCECloud, error) {
return
nil
,
err
return
nil
,
err
}
}
if
config
.
NetworkURL
==
""
{
// config.ProjectID may be the id or project number
networkName
,
err
:=
getNetworkNameViaAPICall
(
service
,
config
.
ProjectID
)
// In gce_routes.go, the generated networkURL is compared with a URL within a route
// therefore, we need to make sure the URL is constructed with the string ID.
projID
,
err
:=
getProjectID
(
service
,
config
.
ProjectID
)
if
err
!=
nil
{
if
err
!=
nil
{
return
nil
,
err
return
nil
,
fmt
.
Errorf
(
"failed to get project %v, err: %v"
,
config
.
ProjectID
,
err
)
}
// config.NetworkProjectID may be the id or project number. In order to compare project ID
// to network project ID to determine XPN status, we need to verify both are actual IDs.
netProjID
:=
projID
if
config
.
NetworkProjectID
!=
config
.
ProjectID
{
netProjID
,
err
=
getProjectID
(
service
,
config
.
NetworkProjectID
)
if
err
!=
nil
{
return
nil
,
fmt
.
Errorf
(
"failed to get network project %v, err: %v"
,
config
.
NetworkProjectID
,
err
)
}
}
config
.
NetworkURL
=
gceNetworkURL
(
config
.
ApiEndpoint
,
config
.
ProjectID
,
networkName
)
}
}
networkProjectID
,
err
:=
getProjectIDInURL
(
config
.
NetworkURL
)
onXPN
:=
projID
!=
netProjID
var
networkURL
string
var
subnetURL
string
if
config
.
NetworkName
==
""
&&
config
.
NetworkURL
==
""
{
// TODO: Stop using this call and return an error.
// This function returns the first network in a list of networks for a project. The project
// should be set via configuration instead of randomly taking the first.
networkName
,
err
:=
getNetworkNameViaAPICall
(
service
,
config
.
NetworkProjectID
)
if
err
!=
nil
{
if
err
!=
nil
{
return
nil
,
err
return
nil
,
err
}
}
onXPN
:=
networkProjectID
!=
config
.
ProjectID
networkURL
=
gceNetworkURL
(
config
.
ApiEndpoint
,
netProjID
,
networkName
)
}
else
if
config
.
NetworkURL
!=
""
{
networkURL
=
config
.
NetworkURL
}
else
{
networkURL
=
gceNetworkURL
(
config
.
ApiEndpoint
,
netProjID
,
config
.
NetworkName
)
}
if
config
.
SubnetworkURL
!=
""
{
subnetURL
=
config
.
SubnetworkURL
}
else
if
config
.
SubnetworkName
!=
""
{
subnetURL
=
gceSubnetworkURL
(
config
.
ApiEndpoint
,
netProjID
,
config
.
Region
,
config
.
SubnetworkName
)
}
if
len
(
config
.
ManagedZones
)
==
0
{
if
len
(
config
.
ManagedZones
)
==
0
{
config
.
ManagedZones
,
err
=
getZonesForRegion
(
service
,
config
.
ProjectID
,
config
.
Region
)
config
.
ManagedZones
,
err
=
getZonesForRegion
(
service
,
config
.
ProjectID
,
config
.
Region
)
...
@@ -417,14 +459,14 @@ func CreateGCECloud(config *CloudConfig) (*GCECloud, error) {
...
@@ -417,14 +459,14 @@ func CreateGCECloud(config *CloudConfig) (*GCECloud, error) {
serviceBeta
:
serviceBeta
,
serviceBeta
:
serviceBeta
,
containerService
:
containerService
,
containerService
:
containerService
,
cloudkmsService
:
cloudkmsService
,
cloudkmsService
:
cloudkmsService
,
projectID
:
config
.
Project
ID
,
projectID
:
proj
ID
,
networkProjectID
:
net
workProject
ID
,
networkProjectID
:
net
Proj
ID
,
onXPN
:
onXPN
,
onXPN
:
onXPN
,
region
:
config
.
Region
,
region
:
config
.
Region
,
localZone
:
config
.
Zone
,
localZone
:
config
.
Zone
,
managedZones
:
config
.
ManagedZones
,
managedZones
:
config
.
ManagedZones
,
networkURL
:
config
.
N
etworkURL
,
networkURL
:
n
etworkURL
,
subnetworkURL
:
config
.
Subnetwork
URL
,
subnetworkURL
:
subnet
URL
,
secondaryRangeName
:
config
.
SecondaryRangeName
,
secondaryRangeName
:
config
.
SecondaryRangeName
,
nodeTags
:
config
.
NodeTags
,
nodeTags
:
config
.
NodeTags
,
nodeInstancePrefix
:
config
.
NodeInstancePrefix
,
nodeInstancePrefix
:
config
.
NodeInstancePrefix
,
...
@@ -473,6 +515,16 @@ func (gce *GCECloud) ProviderName() string {
...
@@ -473,6 +515,16 @@ func (gce *GCECloud) ProviderName() string {
return
ProviderName
return
ProviderName
}
}
// ProjectID returns the ProjectID corresponding to the project this cloud is in.
func
(
g
*
GCECloud
)
ProjectID
()
string
{
return
g
.
projectID
}
// NetworkProjectID returns the ProjectID corresponding to the project this cluster's network is in.
func
(
g
*
GCECloud
)
NetworkProjectID
()
string
{
return
g
.
networkProjectID
}
// Region returns the region
// Region returns the region
func
(
gce
*
GCECloud
)
Region
()
string
{
func
(
gce
*
GCECloud
)
Region
()
string
{
return
gce
.
region
return
gce
.
region
...
@@ -569,6 +621,16 @@ func getNetworkNameViaAPICall(svc *compute.Service, projectID string) (string, e
...
@@ -569,6 +621,16 @@ func getNetworkNameViaAPICall(svc *compute.Service, projectID string) (string, e
return
networkList
.
Items
[
0
]
.
Name
,
nil
return
networkList
.
Items
[
0
]
.
Name
,
nil
}
}
// getProjectID returns the project's string ID given a project number or string
func
getProjectID
(
svc
*
compute
.
Service
,
projectNumberOrID
string
)
(
string
,
error
)
{
proj
,
err
:=
svc
.
Projects
.
Get
(
projectNumberOrID
)
.
Do
()
if
err
!=
nil
{
return
""
,
err
}
return
proj
.
Name
,
nil
}
func
getZonesForRegion
(
svc
*
compute
.
Service
,
projectID
,
region
string
)
([]
string
,
error
)
{
func
getZonesForRegion
(
svc
*
compute
.
Service
,
projectID
,
region
string
)
([]
string
,
error
)
{
// TODO: use PageToken to list all not just the first 500
// TODO: use PageToken to list all not just the first 500
listCall
:=
svc
.
Zones
.
List
(
projectID
)
listCall
:=
svc
.
Zones
.
List
(
projectID
)
...
...
pkg/cloudprovider/providers/gce/gce_firewall.go
View file @
0028385e
...
@@ -27,38 +27,38 @@ func newFirewallMetricContext(request string) *metricContext {
...
@@ -27,38 +27,38 @@ func newFirewallMetricContext(request string) *metricContext {
// GetFirewall returns the Firewall by name.
// GetFirewall returns the Firewall by name.
func
(
gce
*
GCECloud
)
GetFirewall
(
name
string
)
(
*
compute
.
Firewall
,
error
)
{
func
(
gce
*
GCECloud
)
GetFirewall
(
name
string
)
(
*
compute
.
Firewall
,
error
)
{
mc
:=
newFirewallMetricContext
(
"get"
)
mc
:=
newFirewallMetricContext
(
"get"
)
v
,
err
:=
gce
.
service
.
Firewalls
.
Get
(
gce
.
projectID
,
name
)
.
Do
()
v
,
err
:=
gce
.
service
.
Firewalls
.
Get
(
gce
.
NetworkProjectID
()
,
name
)
.
Do
()
return
v
,
mc
.
Observe
(
err
)
return
v
,
mc
.
Observe
(
err
)
}
}
// CreateFirewall creates the passed firewall
// CreateFirewall creates the passed firewall
func
(
gce
*
GCECloud
)
CreateFirewall
(
f
*
compute
.
Firewall
)
error
{
func
(
gce
*
GCECloud
)
CreateFirewall
(
f
*
compute
.
Firewall
)
error
{
mc
:=
newFirewallMetricContext
(
"create"
)
mc
:=
newFirewallMetricContext
(
"create"
)
op
,
err
:=
gce
.
service
.
Firewalls
.
Insert
(
gce
.
projectID
,
f
)
.
Do
()
op
,
err
:=
gce
.
service
.
Firewalls
.
Insert
(
gce
.
NetworkProjectID
()
,
f
)
.
Do
()
if
err
!=
nil
{
if
err
!=
nil
{
return
mc
.
Observe
(
err
)
return
mc
.
Observe
(
err
)
}
}
return
gce
.
waitForGlobalOp
(
op
,
mc
)
return
gce
.
waitForGlobalOp
InProject
(
op
,
gce
.
NetworkProjectID
()
,
mc
)
}
}
// DeleteFirewall deletes the given firewall rule.
// DeleteFirewall deletes the given firewall rule.
func
(
gce
*
GCECloud
)
DeleteFirewall
(
name
string
)
error
{
func
(
gce
*
GCECloud
)
DeleteFirewall
(
name
string
)
error
{
mc
:=
newFirewallMetricContext
(
"delete"
)
mc
:=
newFirewallMetricContext
(
"delete"
)
op
,
err
:=
gce
.
service
.
Firewalls
.
Delete
(
gce
.
projectID
,
name
)
.
Do
()
op
,
err
:=
gce
.
service
.
Firewalls
.
Delete
(
gce
.
NetworkProjectID
()
,
name
)
.
Do
()
if
err
!=
nil
{
if
err
!=
nil
{
return
mc
.
Observe
(
err
)
return
mc
.
Observe
(
err
)
}
}
return
gce
.
waitForGlobalOp
(
op
,
mc
)
return
gce
.
waitForGlobalOp
InProject
(
op
,
gce
.
NetworkProjectID
()
,
mc
)
}
}
// UpdateFirewall applies the given firewall as an update to an existing service.
// UpdateFirewall applies the given firewall as an update to an existing service.
func
(
gce
*
GCECloud
)
UpdateFirewall
(
f
*
compute
.
Firewall
)
error
{
func
(
gce
*
GCECloud
)
UpdateFirewall
(
f
*
compute
.
Firewall
)
error
{
mc
:=
newFirewallMetricContext
(
"update"
)
mc
:=
newFirewallMetricContext
(
"update"
)
op
,
err
:=
gce
.
service
.
Firewalls
.
Update
(
gce
.
projectID
,
f
.
Name
,
f
)
.
Do
()
op
,
err
:=
gce
.
service
.
Firewalls
.
Update
(
gce
.
NetworkProjectID
()
,
f
.
Name
,
f
)
.
Do
()
if
err
!=
nil
{
if
err
!=
nil
{
return
mc
.
Observe
(
err
)
return
mc
.
Observe
(
err
)
}
}
return
gce
.
waitForGlobalOp
(
op
,
mc
)
return
gce
.
waitForGlobalOp
InProject
(
op
,
gce
.
NetworkProjectID
()
,
mc
)
}
}
pkg/cloudprovider/providers/gce/gce_loadbalancer_external.go
View file @
0028385e
...
@@ -729,7 +729,7 @@ func (gce *GCECloud) firewallNeedsUpdate(name, serviceName, region, ipAddress st
...
@@ -729,7 +729,7 @@ func (gce *GCECloud) firewallNeedsUpdate(name, serviceName, region, ipAddress st
return
false
,
false
,
nil
return
false
,
false
,
nil
}
}
fw
,
err
:=
gce
.
service
.
Firewalls
.
Get
(
gce
.
projectID
,
makeFirewallName
(
name
))
.
Do
()
fw
,
err
:=
gce
.
service
.
Firewalls
.
Get
(
gce
.
NetworkProjectID
()
,
makeFirewallName
(
name
))
.
Do
()
if
err
!=
nil
{
if
err
!=
nil
{
if
isHTTPErrorCode
(
err
,
http
.
StatusNotFound
)
{
if
isHTTPErrorCode
(
err
,
http
.
StatusNotFound
)
{
return
false
,
true
,
nil
return
false
,
true
,
nil
...
@@ -776,7 +776,7 @@ func (gce *GCECloud) ensureHttpHealthCheckFirewall(serviceName, ipAddress, regio
...
@@ -776,7 +776,7 @@ func (gce *GCECloud) ensureHttpHealthCheckFirewall(serviceName, ipAddress, regio
ports
:=
[]
v1
.
ServicePort
{{
Protocol
:
"tcp"
,
Port
:
hcPort
}}
ports
:=
[]
v1
.
ServicePort
{{
Protocol
:
"tcp"
,
Port
:
hcPort
}}
fwName
:=
MakeHealthCheckFirewallName
(
clusterID
,
hcName
,
isNodesHealthCheck
)
fwName
:=
MakeHealthCheckFirewallName
(
clusterID
,
hcName
,
isNodesHealthCheck
)
fw
,
err
:=
gce
.
service
.
Firewalls
.
Get
(
gce
.
projectID
,
fwName
)
.
Do
()
fw
,
err
:=
gce
.
service
.
Firewalls
.
Get
(
gce
.
NetworkProjectID
()
,
fwName
)
.
Do
()
if
err
!=
nil
{
if
err
!=
nil
{
if
!
isHTTPErrorCode
(
err
,
http
.
StatusNotFound
)
{
if
!
isHTTPErrorCode
(
err
,
http
.
StatusNotFound
)
{
return
fmt
.
Errorf
(
"error getting firewall for health checks: %v"
,
err
)
return
fmt
.
Errorf
(
"error getting firewall for health checks: %v"
,
err
)
...
...
pkg/cloudprovider/providers/gce/gce_op.go
View file @
0028385e
...
@@ -93,62 +93,74 @@ func getErrorFromOp(op *computev1.Operation) error {
...
@@ -93,62 +93,74 @@ func getErrorFromOp(op *computev1.Operation) error {
}
}
func
(
gce
*
GCECloud
)
waitForGlobalOp
(
op
gceObject
,
mc
*
metricContext
)
error
{
func
(
gce
*
GCECloud
)
waitForGlobalOp
(
op
gceObject
,
mc
*
metricContext
)
error
{
return
gce
.
waitForGlobalOpInProject
(
op
,
gce
.
ProjectID
(),
mc
)
}
func
(
gce
*
GCECloud
)
waitForRegionOp
(
op
gceObject
,
region
string
,
mc
*
metricContext
)
error
{
return
gce
.
waitForRegionOpInProject
(
op
,
gce
.
ProjectID
(),
region
,
mc
)
}
func
(
gce
*
GCECloud
)
waitForZoneOp
(
op
gceObject
,
zone
string
,
mc
*
metricContext
)
error
{
return
gce
.
waitForZoneOpInProject
(
op
,
gce
.
ProjectID
(),
zone
,
mc
)
}
func
(
gce
*
GCECloud
)
waitForGlobalOpInProject
(
op
gceObject
,
projectID
string
,
mc
*
metricContext
)
error
{
switch
v
:=
op
.
(
type
)
{
switch
v
:=
op
.
(
type
)
{
case
*
computealpha
.
Operation
:
case
*
computealpha
.
Operation
:
return
gce
.
waitForOp
(
convertToV1Operation
(
op
),
func
(
operationName
string
)
(
*
computev1
.
Operation
,
error
)
{
return
gce
.
waitForOp
(
convertToV1Operation
(
op
),
func
(
operationName
string
)
(
*
computev1
.
Operation
,
error
)
{
op
,
err
:=
gce
.
serviceAlpha
.
GlobalOperations
.
Get
(
gce
.
projectID
,
operationName
)
.
Do
()
op
,
err
:=
gce
.
serviceAlpha
.
GlobalOperations
.
Get
(
projectID
,
operationName
)
.
Do
()
return
convertToV1Operation
(
op
),
err
return
convertToV1Operation
(
op
),
err
},
mc
)
},
mc
)
case
*
computebeta
.
Operation
:
case
*
computebeta
.
Operation
:
return
gce
.
waitForOp
(
convertToV1Operation
(
op
),
func
(
operationName
string
)
(
*
computev1
.
Operation
,
error
)
{
return
gce
.
waitForOp
(
convertToV1Operation
(
op
),
func
(
operationName
string
)
(
*
computev1
.
Operation
,
error
)
{
op
,
err
:=
gce
.
serviceBeta
.
GlobalOperations
.
Get
(
gce
.
projectID
,
operationName
)
.
Do
()
op
,
err
:=
gce
.
serviceBeta
.
GlobalOperations
.
Get
(
projectID
,
operationName
)
.
Do
()
return
convertToV1Operation
(
op
),
err
return
convertToV1Operation
(
op
),
err
},
mc
)
},
mc
)
case
*
computev1
.
Operation
:
case
*
computev1
.
Operation
:
return
gce
.
waitForOp
(
op
.
(
*
computev1
.
Operation
),
func
(
operationName
string
)
(
*
computev1
.
Operation
,
error
)
{
return
gce
.
waitForOp
(
op
.
(
*
computev1
.
Operation
),
func
(
operationName
string
)
(
*
computev1
.
Operation
,
error
)
{
return
gce
.
service
.
GlobalOperations
.
Get
(
gce
.
projectID
,
operationName
)
.
Do
()
return
gce
.
service
.
GlobalOperations
.
Get
(
projectID
,
operationName
)
.
Do
()
},
mc
)
},
mc
)
default
:
default
:
return
fmt
.
Errorf
(
"unexpected type: %T"
,
v
)
return
fmt
.
Errorf
(
"unexpected type: %T"
,
v
)
}
}
}
}
func
(
gce
*
GCECloud
)
waitForRegionOp
(
op
gceObject
,
region
string
,
mc
*
metricContext
)
error
{
func
(
gce
*
GCECloud
)
waitForRegionOp
InProject
(
op
gceObject
,
projectID
,
region
string
,
mc
*
metricContext
)
error
{
switch
v
:=
op
.
(
type
)
{
switch
v
:=
op
.
(
type
)
{
case
*
computealpha
.
Operation
:
case
*
computealpha
.
Operation
:
return
gce
.
waitForOp
(
convertToV1Operation
(
op
),
func
(
operationName
string
)
(
*
computev1
.
Operation
,
error
)
{
return
gce
.
waitForOp
(
convertToV1Operation
(
op
),
func
(
operationName
string
)
(
*
computev1
.
Operation
,
error
)
{
op
,
err
:=
gce
.
serviceAlpha
.
RegionOperations
.
Get
(
gce
.
projectID
,
region
,
operationName
)
.
Do
()
op
,
err
:=
gce
.
serviceAlpha
.
RegionOperations
.
Get
(
projectID
,
region
,
operationName
)
.
Do
()
return
convertToV1Operation
(
op
),
err
return
convertToV1Operation
(
op
),
err
},
mc
)
},
mc
)
case
*
computebeta
.
Operation
:
case
*
computebeta
.
Operation
:
return
gce
.
waitForOp
(
convertToV1Operation
(
op
),
func
(
operationName
string
)
(
*
computev1
.
Operation
,
error
)
{
return
gce
.
waitForOp
(
convertToV1Operation
(
op
),
func
(
operationName
string
)
(
*
computev1
.
Operation
,
error
)
{
op
,
err
:=
gce
.
serviceBeta
.
RegionOperations
.
Get
(
gce
.
projectID
,
region
,
operationName
)
.
Do
()
op
,
err
:=
gce
.
serviceBeta
.
RegionOperations
.
Get
(
projectID
,
region
,
operationName
)
.
Do
()
return
convertToV1Operation
(
op
),
err
return
convertToV1Operation
(
op
),
err
},
mc
)
},
mc
)
case
*
computev1
.
Operation
:
case
*
computev1
.
Operation
:
return
gce
.
waitForOp
(
op
.
(
*
computev1
.
Operation
),
func
(
operationName
string
)
(
*
computev1
.
Operation
,
error
)
{
return
gce
.
waitForOp
(
op
.
(
*
computev1
.
Operation
),
func
(
operationName
string
)
(
*
computev1
.
Operation
,
error
)
{
return
gce
.
service
.
RegionOperations
.
Get
(
gce
.
projectID
,
region
,
operationName
)
.
Do
()
return
gce
.
service
.
RegionOperations
.
Get
(
projectID
,
region
,
operationName
)
.
Do
()
},
mc
)
},
mc
)
default
:
default
:
return
fmt
.
Errorf
(
"unexpected type: %T"
,
v
)
return
fmt
.
Errorf
(
"unexpected type: %T"
,
v
)
}
}
}
}
func
(
gce
*
GCECloud
)
waitForZoneOp
(
op
gceObject
,
zone
string
,
mc
*
metricContext
)
error
{
func
(
gce
*
GCECloud
)
waitForZoneOp
InProject
(
op
gceObject
,
projectID
,
zone
string
,
mc
*
metricContext
)
error
{
switch
v
:=
op
.
(
type
)
{
switch
v
:=
op
.
(
type
)
{
case
*
computealpha
.
Operation
:
case
*
computealpha
.
Operation
:
return
gce
.
waitForOp
(
convertToV1Operation
(
op
),
func
(
operationName
string
)
(
*
computev1
.
Operation
,
error
)
{
return
gce
.
waitForOp
(
convertToV1Operation
(
op
),
func
(
operationName
string
)
(
*
computev1
.
Operation
,
error
)
{
op
,
err
:=
gce
.
serviceAlpha
.
ZoneOperations
.
Get
(
gce
.
projectID
,
zone
,
operationName
)
.
Do
()
op
,
err
:=
gce
.
serviceAlpha
.
ZoneOperations
.
Get
(
projectID
,
zone
,
operationName
)
.
Do
()
return
convertToV1Operation
(
op
),
err
return
convertToV1Operation
(
op
),
err
},
mc
)
},
mc
)
case
*
computebeta
.
Operation
:
case
*
computebeta
.
Operation
:
return
gce
.
waitForOp
(
convertToV1Operation
(
op
),
func
(
operationName
string
)
(
*
computev1
.
Operation
,
error
)
{
return
gce
.
waitForOp
(
convertToV1Operation
(
op
),
func
(
operationName
string
)
(
*
computev1
.
Operation
,
error
)
{
op
,
err
:=
gce
.
serviceBeta
.
ZoneOperations
.
Get
(
gce
.
projectID
,
zone
,
operationName
)
.
Do
()
op
,
err
:=
gce
.
serviceBeta
.
ZoneOperations
.
Get
(
projectID
,
zone
,
operationName
)
.
Do
()
return
convertToV1Operation
(
op
),
err
return
convertToV1Operation
(
op
),
err
},
mc
)
},
mc
)
case
*
computev1
.
Operation
:
case
*
computev1
.
Operation
:
return
gce
.
waitForOp
(
op
.
(
*
computev1
.
Operation
),
func
(
operationName
string
)
(
*
computev1
.
Operation
,
error
)
{
return
gce
.
waitForOp
(
op
.
(
*
computev1
.
Operation
),
func
(
operationName
string
)
(
*
computev1
.
Operation
,
error
)
{
return
gce
.
service
.
ZoneOperations
.
Get
(
gce
.
projectID
,
zone
,
operationName
)
.
Do
()
return
gce
.
service
.
ZoneOperations
.
Get
(
projectID
,
zone
,
operationName
)
.
Do
()
},
mc
)
},
mc
)
default
:
default
:
return
fmt
.
Errorf
(
"unexpected type: %T"
,
v
)
return
fmt
.
Errorf
(
"unexpected type: %T"
,
v
)
...
...
pkg/cloudprovider/providers/gce/gce_routes.go
View file @
0028385e
...
@@ -38,13 +38,13 @@ func (gce *GCECloud) ListRoutes(clusterName string) ([]*cloudprovider.Route, err
...
@@ -38,13 +38,13 @@ func (gce *GCECloud) ListRoutes(clusterName string) ([]*cloudprovider.Route, err
page
:=
0
page
:=
0
for
;
page
==
0
||
(
pageToken
!=
""
&&
page
<
maxPages
);
page
++
{
for
;
page
==
0
||
(
pageToken
!=
""
&&
page
<
maxPages
);
page
++
{
mc
:=
newRoutesMetricContext
(
"list_page"
)
mc
:=
newRoutesMetricContext
(
"list_page"
)
listCall
:=
gce
.
service
.
Routes
.
List
(
gce
.
projectID
)
listCall
:=
gce
.
service
.
Routes
.
List
(
gce
.
NetworkProjectID
()
)
prefix
:=
truncateClusterName
(
clusterName
)
prefix
:=
truncateClusterName
(
clusterName
)
// Filter for routes starting with clustername AND belonging to the
// Filter for routes starting with clustername AND belonging to the
// relevant gcp network AND having description = "k8s-node-route".
// relevant gcp network AND having description = "k8s-node-route".
filter
:=
"(name eq "
+
prefix
+
"-.*) "
filter
:=
"(name eq "
+
prefix
+
"-.*) "
filter
=
filter
+
"(network eq "
+
gce
.
networkURL
+
") "
filter
=
filter
+
"(network eq "
+
gce
.
NetworkURL
()
+
") "
filter
=
filter
+
"(description eq "
+
k8sNodeRouteTag
+
")"
filter
=
filter
+
"(description eq "
+
k8sNodeRouteTag
+
")"
listCall
=
listCall
.
Filter
(
filter
)
listCall
=
listCall
.
Filter
(
filter
)
if
pageToken
!=
""
{
if
pageToken
!=
""
{
...
@@ -80,11 +80,11 @@ func (gce *GCECloud) CreateRoute(clusterName string, nameHint string, route *clo
...
@@ -80,11 +80,11 @@ func (gce *GCECloud) CreateRoute(clusterName string, nameHint string, route *clo
}
}
mc
:=
newRoutesMetricContext
(
"create"
)
mc
:=
newRoutesMetricContext
(
"create"
)
insertOp
,
err
:=
gce
.
service
.
Routes
.
Insert
(
gce
.
projectID
,
&
compute
.
Route
{
insertOp
,
err
:=
gce
.
service
.
Routes
.
Insert
(
gce
.
NetworkProjectID
()
,
&
compute
.
Route
{
Name
:
routeName
,
Name
:
routeName
,
DestRange
:
route
.
DestinationCIDR
,
DestRange
:
route
.
DestinationCIDR
,
NextHopInstance
:
fmt
.
Sprintf
(
"zones/%s/instances/%s"
,
targetInstance
.
Zone
,
targetInstance
.
Name
),
NextHopInstance
:
fmt
.
Sprintf
(
"zones/%s/instances/%s"
,
targetInstance
.
Zone
,
targetInstance
.
Name
),
Network
:
gce
.
networkURL
,
Network
:
gce
.
NetworkURL
()
,
Priority
:
1000
,
Priority
:
1000
,
Description
:
k8sNodeRouteTag
,
Description
:
k8sNodeRouteTag
,
})
.
Do
()
})
.
Do
()
...
@@ -96,16 +96,16 @@ func (gce *GCECloud) CreateRoute(clusterName string, nameHint string, route *clo
...
@@ -96,16 +96,16 @@ func (gce *GCECloud) CreateRoute(clusterName string, nameHint string, route *clo
return
mc
.
Observe
(
err
)
return
mc
.
Observe
(
err
)
}
}
}
}
return
gce
.
waitForGlobalOp
(
insertOp
,
mc
)
return
gce
.
waitForGlobalOp
InProject
(
insertOp
,
gce
.
NetworkProjectID
()
,
mc
)
}
}
func
(
gce
*
GCECloud
)
DeleteRoute
(
clusterName
string
,
route
*
cloudprovider
.
Route
)
error
{
func
(
gce
*
GCECloud
)
DeleteRoute
(
clusterName
string
,
route
*
cloudprovider
.
Route
)
error
{
mc
:=
newRoutesMetricContext
(
"delete"
)
mc
:=
newRoutesMetricContext
(
"delete"
)
deleteOp
,
err
:=
gce
.
service
.
Routes
.
Delete
(
gce
.
projectID
,
route
.
Name
)
.
Do
()
deleteOp
,
err
:=
gce
.
service
.
Routes
.
Delete
(
gce
.
NetworkProjectID
()
,
route
.
Name
)
.
Do
()
if
err
!=
nil
{
if
err
!=
nil
{
return
mc
.
Observe
(
err
)
return
mc
.
Observe
(
err
)
}
}
return
gce
.
waitForGlobalOp
(
deleteOp
,
mc
)
return
gce
.
waitForGlobalOp
InProject
(
deleteOp
,
gce
.
NetworkProjectID
()
,
mc
)
}
}
func
truncateClusterName
(
clusterName
string
)
string
{
func
truncateClusterName
(
clusterName
string
)
string
{
...
...
pkg/cloudprovider/providers/gce/gce_test.go
View file @
0028385e
This diff is collapsed.
Click to expand it.
test/e2e/e2e.go
View file @
0028385e
...
@@ -84,8 +84,8 @@ func setupProviderConfig() error {
...
@@ -84,8 +84,8 @@ func setupProviderConfig() error {
Region
:
region
,
Region
:
region
,
Zone
:
zone
,
Zone
:
zone
,
ManagedZones
:
managedZones
,
ManagedZones
:
managedZones
,
Network
URL
:
""
,
Network
Name
:
""
,
// TODO: Change this to use framework.TestContext.CloudConfig.Network?
Subnetwork
URL
:
""
,
Subnetwork
Name
:
""
,
NodeTags
:
nil
,
NodeTags
:
nil
,
NodeInstancePrefix
:
""
,
NodeInstancePrefix
:
""
,
TokenSource
:
nil
,
TokenSource
:
nil
,
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment