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
6ad9dc65
Commit
6ad9dc65
authored
May 28, 2016
by
Cole Mickens
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
add clusterName to Loadbalancer methods
parent
e31b8de2
Show whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
46 additions
and
46 deletions
+46
-46
cloud.go
pkg/cloudprovider/cloud.go
+4
-4
aws.go
pkg/cloudprovider/providers/aws/aws.go
+6
-6
gce.go
pkg/cloudprovider/providers/gce/gce.go
+5
-5
openstack_loadbalancer.go
...oudprovider/providers/openstack/openstack_loadbalancer.go
+25
-25
servicecontroller.go
pkg/controller/service/servicecontroller.go
+6
-6
No files found.
pkg/cloudprovider/cloud.go
View file @
6ad9dc65
...
@@ -81,13 +81,13 @@ type LoadBalancer interface {
...
@@ -81,13 +81,13 @@ type LoadBalancer interface {
// GetLoadBalancer returns whether the specified load balancer exists, and
// GetLoadBalancer returns whether the specified load balancer exists, and
// if so, what its status is.
// if so, what its status is.
// Implementations must treat the *api.Service parameter as read-only and not modify it.
// Implementations must treat the *api.Service parameter as read-only and not modify it.
GetLoadBalancer
(
service
*
api
.
Service
)
(
status
*
api
.
LoadBalancerStatus
,
exists
bool
,
err
error
)
GetLoadBalancer
(
clusterName
string
,
service
*
api
.
Service
)
(
status
*
api
.
LoadBalancerStatus
,
exists
bool
,
err
error
)
// EnsureLoadBalancer creates a new load balancer 'name', or updates the existing one. Returns the status of the balancer
// EnsureLoadBalancer creates a new load balancer 'name', or updates the existing one. Returns the status of the balancer
// Implementations must treat the *api.Service parameter as read-only and not modify it.
// Implementations must treat the *api.Service parameter as read-only and not modify it.
EnsureLoadBalancer
(
service
*
api
.
Service
,
hosts
[]
string
)
(
*
api
.
LoadBalancerStatus
,
error
)
EnsureLoadBalancer
(
clusterName
string
,
service
*
api
.
Service
,
hosts
[]
string
)
(
*
api
.
LoadBalancerStatus
,
error
)
// UpdateLoadBalancer updates hosts under the specified load balancer.
// UpdateLoadBalancer updates hosts under the specified load balancer.
// Implementations must treat the *api.Service parameter as read-only and not modify it.
// Implementations must treat the *api.Service parameter as read-only and not modify it.
UpdateLoadBalancer
(
service
*
api
.
Service
,
hosts
[]
string
)
error
UpdateLoadBalancer
(
clusterName
string
,
service
*
api
.
Service
,
hosts
[]
string
)
error
// EnsureLoadBalancerDeleted deletes the specified load balancer if it
// EnsureLoadBalancerDeleted deletes the specified load balancer if it
// exists, returning nil if the load balancer specified either didn't exist or
// exists, returning nil if the load balancer specified either didn't exist or
// was successfully deleted.
// was successfully deleted.
...
@@ -95,7 +95,7 @@ type LoadBalancer interface {
...
@@ -95,7 +95,7 @@ type LoadBalancer interface {
// have multiple underlying components, meaning a Get could say that the LB
// have multiple underlying components, meaning a Get could say that the LB
// doesn't exist even if some part of it is still laying around.
// doesn't exist even if some part of it is still laying around.
// Implementations must treat the *api.Service parameter as read-only and not modify it.
// Implementations must treat the *api.Service parameter as read-only and not modify it.
EnsureLoadBalancerDeleted
(
service
*
api
.
Service
)
error
EnsureLoadBalancerDeleted
(
clusterName
string
,
service
*
api
.
Service
)
error
}
}
// Instances is an abstract, pluggable interface for sets of instances.
// Instances is an abstract, pluggable interface for sets of instances.
...
...
pkg/cloudprovider/providers/aws/aws.go
View file @
6ad9dc65
...
@@ -2297,10 +2297,10 @@ func buildListener(port api.ServicePort, annotations map[string]string, sslPorts
...
@@ -2297,10 +2297,10 @@ func buildListener(port api.ServicePort, annotations map[string]string, sslPorts
}
}
// EnsureLoadBalancer implements LoadBalancer.EnsureLoadBalancer
// EnsureLoadBalancer implements LoadBalancer.EnsureLoadBalancer
func
(
c
*
Cloud
)
EnsureLoadBalancer
(
apiService
*
api
.
Service
,
hosts
[]
string
)
(
*
api
.
LoadBalancerStatus
,
error
)
{
func
(
c
*
Cloud
)
EnsureLoadBalancer
(
clusterName
string
,
apiService
*
api
.
Service
,
hosts
[]
string
)
(
*
api
.
LoadBalancerStatus
,
error
)
{
annotations
:=
apiService
.
Annotations
annotations
:=
apiService
.
Annotations
glog
.
V
(
2
)
.
Infof
(
"EnsureLoadBalancer(%v, %v, %v, %v, %v, %v, %v)"
,
glog
.
V
(
2
)
.
Infof
(
"EnsureLoadBalancer(%v, %v, %v, %v, %v, %v, %v
, %v
)"
,
apiService
.
Namespace
,
apiService
.
Name
,
c
.
region
,
apiService
.
Spec
.
LoadBalancerIP
,
apiService
.
Spec
.
Ports
,
hosts
,
annotations
)
clusterName
,
apiService
.
Namespace
,
apiService
.
Name
,
c
.
region
,
apiService
.
Spec
.
LoadBalancerIP
,
apiService
.
Spec
.
Ports
,
hosts
,
annotations
)
if
apiService
.
Spec
.
SessionAffinity
!=
api
.
ServiceAffinityNone
{
if
apiService
.
Spec
.
SessionAffinity
!=
api
.
ServiceAffinityNone
{
// ELB supports sticky sessions, but only when configured for HTTP/HTTPS
// ELB supports sticky sessions, but only when configured for HTTP/HTTPS
...
@@ -2472,7 +2472,7 @@ func (c *Cloud) EnsureLoadBalancer(apiService *api.Service, hosts []string) (*ap
...
@@ -2472,7 +2472,7 @@ func (c *Cloud) EnsureLoadBalancer(apiService *api.Service, hosts []string) (*ap
}
}
// GetLoadBalancer is an implementation of LoadBalancer.GetLoadBalancer
// GetLoadBalancer is an implementation of LoadBalancer.GetLoadBalancer
func
(
c
*
Cloud
)
GetLoadBalancer
(
service
*
api
.
Service
)
(
*
api
.
LoadBalancerStatus
,
bool
,
error
)
{
func
(
c
*
Cloud
)
GetLoadBalancer
(
clusterName
string
,
service
*
api
.
Service
)
(
*
api
.
LoadBalancerStatus
,
bool
,
error
)
{
loadBalancerName
:=
cloudprovider
.
GetLoadBalancerName
(
service
)
loadBalancerName
:=
cloudprovider
.
GetLoadBalancerName
(
service
)
lb
,
err
:=
c
.
describeLoadBalancer
(
loadBalancerName
)
lb
,
err
:=
c
.
describeLoadBalancer
(
loadBalancerName
)
if
err
!=
nil
{
if
err
!=
nil
{
...
@@ -2688,7 +2688,7 @@ func (c *Cloud) updateInstanceSecurityGroupsForLoadBalancer(lb *elb.LoadBalancer
...
@@ -2688,7 +2688,7 @@ func (c *Cloud) updateInstanceSecurityGroupsForLoadBalancer(lb *elb.LoadBalancer
}
}
// EnsureLoadBalancerDeleted implements LoadBalancer.EnsureLoadBalancerDeleted.
// EnsureLoadBalancerDeleted implements LoadBalancer.EnsureLoadBalancerDeleted.
func
(
c
*
Cloud
)
EnsureLoadBalancerDeleted
(
service
*
api
.
Service
)
error
{
func
(
c
*
Cloud
)
EnsureLoadBalancerDeleted
(
clusterName
string
,
service
*
api
.
Service
)
error
{
loadBalancerName
:=
cloudprovider
.
GetLoadBalancerName
(
service
)
loadBalancerName
:=
cloudprovider
.
GetLoadBalancerName
(
service
)
lb
,
err
:=
c
.
describeLoadBalancer
(
loadBalancerName
)
lb
,
err
:=
c
.
describeLoadBalancer
(
loadBalancerName
)
if
err
!=
nil
{
if
err
!=
nil
{
...
@@ -2784,7 +2784,7 @@ func (c *Cloud) EnsureLoadBalancerDeleted(service *api.Service) error {
...
@@ -2784,7 +2784,7 @@ func (c *Cloud) EnsureLoadBalancerDeleted(service *api.Service) error {
}
}
// UpdateLoadBalancer implements LoadBalancer.UpdateLoadBalancer
// UpdateLoadBalancer implements LoadBalancer.UpdateLoadBalancer
func
(
c
*
Cloud
)
UpdateLoadBalancer
(
service
*
api
.
Service
,
hosts
[]
string
)
error
{
func
(
c
*
Cloud
)
UpdateLoadBalancer
(
clusterName
string
,
service
*
api
.
Service
,
hosts
[]
string
)
error
{
hostSet
:=
sets
.
NewString
(
hosts
...
)
hostSet
:=
sets
.
NewString
(
hosts
...
)
instances
,
err
:=
c
.
getInstancesByNodeNamesCached
(
hostSet
)
instances
,
err
:=
c
.
getInstancesByNodeNamesCached
(
hostSet
)
if
err
!=
nil
{
if
err
!=
nil
{
...
...
pkg/cloudprovider/providers/gce/gce.go
View file @
6ad9dc65
...
@@ -494,7 +494,7 @@ func (gce *GCECloud) waitForZoneOp(op *compute.Operation, zone string) error {
...
@@ -494,7 +494,7 @@ func (gce *GCECloud) waitForZoneOp(op *compute.Operation, zone string) error {
}
}
// GetLoadBalancer is an implementation of LoadBalancer.GetLoadBalancer
// GetLoadBalancer is an implementation of LoadBalancer.GetLoadBalancer
func
(
gce
*
GCECloud
)
GetLoadBalancer
(
service
*
api
.
Service
)
(
*
api
.
LoadBalancerStatus
,
bool
,
error
)
{
func
(
gce
*
GCECloud
)
GetLoadBalancer
(
clusterName
string
,
service
*
api
.
Service
)
(
*
api
.
LoadBalancerStatus
,
bool
,
error
)
{
loadBalancerName
:=
cloudprovider
.
GetLoadBalancerName
(
service
)
loadBalancerName
:=
cloudprovider
.
GetLoadBalancerName
(
service
)
fwd
,
err
:=
gce
.
service
.
ForwardingRules
.
Get
(
gce
.
projectID
,
gce
.
region
,
loadBalancerName
)
.
Do
()
fwd
,
err
:=
gce
.
service
.
ForwardingRules
.
Get
(
gce
.
projectID
,
gce
.
region
,
loadBalancerName
)
.
Do
()
if
err
==
nil
{
if
err
==
nil
{
...
@@ -521,7 +521,7 @@ func isHTTPErrorCode(err error, code int) bool {
...
@@ -521,7 +521,7 @@ func isHTTPErrorCode(err error, code int) bool {
// Due to an interesting series of design decisions, this handles both creating
// Due to an interesting series of design decisions, this handles both creating
// new load balancers and updating existing load balancers, recognizing when
// new load balancers and updating existing load balancers, recognizing when
// each is needed.
// each is needed.
func
(
gce
*
GCECloud
)
EnsureLoadBalancer
(
apiService
*
api
.
Service
,
hostNames
[]
string
)
(
*
api
.
LoadBalancerStatus
,
error
)
{
func
(
gce
*
GCECloud
)
EnsureLoadBalancer
(
clusterName
string
,
apiService
*
api
.
Service
,
hostNames
[]
string
)
(
*
api
.
LoadBalancerStatus
,
error
)
{
if
len
(
hostNames
)
==
0
{
if
len
(
hostNames
)
==
0
{
return
nil
,
fmt
.
Errorf
(
"Cannot EnsureLoadBalancer() with no hosts"
)
return
nil
,
fmt
.
Errorf
(
"Cannot EnsureLoadBalancer() with no hosts"
)
}
}
...
@@ -1193,7 +1193,7 @@ func (gce *GCECloud) ensureStaticIP(name, serviceName, region, existingIP string
...
@@ -1193,7 +1193,7 @@ func (gce *GCECloud) ensureStaticIP(name, serviceName, region, existingIP string
}
}
// UpdateLoadBalancer is an implementation of LoadBalancer.UpdateLoadBalancer.
// UpdateLoadBalancer is an implementation of LoadBalancer.UpdateLoadBalancer.
func
(
gce
*
GCECloud
)
UpdateLoadBalancer
(
service
*
api
.
Service
,
hostNames
[]
string
)
error
{
func
(
gce
*
GCECloud
)
UpdateLoadBalancer
(
clusterName
string
,
service
*
api
.
Service
,
hostNames
[]
string
)
error
{
hosts
,
err
:=
gce
.
getInstancesByNames
(
hostNames
)
hosts
,
err
:=
gce
.
getInstancesByNames
(
hostNames
)
if
err
!=
nil
{
if
err
!=
nil
{
return
err
return
err
...
@@ -1264,9 +1264,9 @@ func (gce *GCECloud) updateTargetPool(loadBalancerName string, existing sets.Str
...
@@ -1264,9 +1264,9 @@ func (gce *GCECloud) updateTargetPool(loadBalancerName string, existing sets.Str
}
}
// EnsureLoadBalancerDeleted is an implementation of LoadBalancer.EnsureLoadBalancerDeleted.
// EnsureLoadBalancerDeleted is an implementation of LoadBalancer.EnsureLoadBalancerDeleted.
func
(
gce
*
GCECloud
)
EnsureLoadBalancerDeleted
(
service
*
api
.
Service
)
error
{
func
(
gce
*
GCECloud
)
EnsureLoadBalancerDeleted
(
clusterName
string
,
service
*
api
.
Service
)
error
{
loadBalancerName
:=
cloudprovider
.
GetLoadBalancerName
(
service
)
loadBalancerName
:=
cloudprovider
.
GetLoadBalancerName
(
service
)
glog
.
V
(
2
)
.
Infof
(
"EnsureLoadBalancerDeleted(%v, %v, %v, %v
)"
,
service
.
Namespace
,
service
.
Name
,
loadBalancerName
,
glog
.
V
(
2
)
.
Infof
(
"EnsureLoadBalancerDeleted(%v, %v, %v, %v
, %v)"
,
clusterName
,
service
.
Namespace
,
service
.
Name
,
loadBalancerName
,
gce
.
region
)
gce
.
region
)
errs
:=
utilerrors
.
AggregateGoroutines
(
errs
:=
utilerrors
.
AggregateGoroutines
(
...
...
pkg/cloudprovider/providers/openstack/openstack_loadbalancer.go
View file @
6ad9dc65
...
@@ -260,7 +260,7 @@ func waitLoadbalancerDeleted(client *gophercloud.ServiceClient, loadbalancerID s
...
@@ -260,7 +260,7 @@ func waitLoadbalancerDeleted(client *gophercloud.ServiceClient, loadbalancerID s
}
}
}
}
func
(
lbaas
*
LbaasV2
)
GetLoadBalancer
(
service
*
api
.
Service
)
(
*
api
.
LoadBalancerStatus
,
bool
,
error
)
{
func
(
lbaas
*
LbaasV2
)
GetLoadBalancer
(
clusterName
string
,
service
*
api
.
Service
)
(
*
api
.
LoadBalancerStatus
,
bool
,
error
)
{
loadBalancerName
:=
cloudprovider
.
GetLoadBalancerName
(
service
)
loadBalancerName
:=
cloudprovider
.
GetLoadBalancerName
(
service
)
loadbalancer
,
err
:=
getLoadbalancerByName
(
lbaas
.
network
,
loadBalancerName
)
loadbalancer
,
err
:=
getLoadbalancerByName
(
lbaas
.
network
,
loadBalancerName
)
if
err
==
ErrNotFound
{
if
err
==
ErrNotFound
{
...
@@ -281,8 +281,8 @@ func (lbaas *LbaasV2) GetLoadBalancer(service *api.Service) (*api.LoadBalancerSt
...
@@ -281,8 +281,8 @@ func (lbaas *LbaasV2) GetLoadBalancer(service *api.Service) (*api.LoadBalancerSt
// a list of regions (from config) and query/create loadbalancers in
// a list of regions (from config) and query/create loadbalancers in
// each region.
// each region.
func
(
lbaas
*
LbaasV2
)
EnsureLoadBalancer
(
apiService
*
api
.
Service
,
hosts
[]
string
)
(
*
api
.
LoadBalancerStatus
,
error
)
{
func
(
lbaas
*
LbaasV2
)
EnsureLoadBalancer
(
clusterName
string
,
apiService
*
api
.
Service
,
hosts
[]
string
)
(
*
api
.
LoadBalancerStatus
,
error
)
{
glog
.
V
(
4
)
.
Infof
(
"EnsureLoadBalancer(%v, %v, %v, %v, %v, %v
)"
,
apiService
.
Namespace
,
apiService
.
Name
,
apiService
.
Spec
.
LoadBalancerIP
,
apiService
.
Spec
.
Ports
,
hosts
,
apiService
.
Annotations
)
glog
.
V
(
4
)
.
Infof
(
"EnsureLoadBalancer(%v, %v, %v, %v, %v, %v
, %v)"
,
clusterName
,
apiService
.
Namespace
,
apiService
.
Name
,
apiService
.
Spec
.
LoadBalancerIP
,
apiService
.
Spec
.
Ports
,
hosts
,
apiService
.
Annotations
)
ports
:=
apiService
.
Spec
.
Ports
ports
:=
apiService
.
Spec
.
Ports
if
len
(
ports
)
>
1
{
if
len
(
ports
)
>
1
{
...
@@ -318,7 +318,7 @@ func (lbaas *LbaasV2) EnsureLoadBalancer(apiService *api.Service, hosts []string
...
@@ -318,7 +318,7 @@ func (lbaas *LbaasV2) EnsureLoadBalancer(apiService *api.Service, hosts []string
}
}
glog
.
V
(
2
)
.
Infof
(
"Checking if openstack load balancer already exists: %s"
,
cloudprovider
.
GetLoadBalancerName
(
apiService
))
glog
.
V
(
2
)
.
Infof
(
"Checking if openstack load balancer already exists: %s"
,
cloudprovider
.
GetLoadBalancerName
(
apiService
))
_
,
exists
,
err
:=
lbaas
.
GetLoadBalancer
(
apiService
)
_
,
exists
,
err
:=
lbaas
.
GetLoadBalancer
(
clusterName
,
apiService
)
if
err
!=
nil
{
if
err
!=
nil
{
return
nil
,
fmt
.
Errorf
(
"error checking if openstack load balancer already exists: %v"
,
err
)
return
nil
,
fmt
.
Errorf
(
"error checking if openstack load balancer already exists: %v"
,
err
)
}
}
...
@@ -326,7 +326,7 @@ func (lbaas *LbaasV2) EnsureLoadBalancer(apiService *api.Service, hosts []string
...
@@ -326,7 +326,7 @@ func (lbaas *LbaasV2) EnsureLoadBalancer(apiService *api.Service, hosts []string
// TODO: Implement a more efficient update strategy for common changes than delete & create
// TODO: Implement a more efficient update strategy for common changes than delete & create
// In particular, if we implement hosts update, we can get rid of UpdateHosts
// In particular, if we implement hosts update, we can get rid of UpdateHosts
if
exists
{
if
exists
{
err
:=
lbaas
.
EnsureLoadBalancerDeleted
(
apiService
)
err
:=
lbaas
.
EnsureLoadBalancerDeleted
(
clusterName
,
apiService
)
if
err
!=
nil
{
if
err
!=
nil
{
return
nil
,
fmt
.
Errorf
(
"error deleting existing openstack load balancer: %v"
,
err
)
return
nil
,
fmt
.
Errorf
(
"error deleting existing openstack load balancer: %v"
,
err
)
}
}
...
@@ -352,7 +352,7 @@ func (lbaas *LbaasV2) EnsureLoadBalancer(apiService *api.Service, hosts []string
...
@@ -352,7 +352,7 @@ func (lbaas *LbaasV2) EnsureLoadBalancer(apiService *api.Service, hosts []string
loadbalancer
,
err
:=
loadbalancers
.
Create
(
lbaas
.
network
,
createOpts
)
.
Extract
()
loadbalancer
,
err
:=
loadbalancers
.
Create
(
lbaas
.
network
,
createOpts
)
.
Extract
()
if
err
!=
nil
{
if
err
!=
nil
{
// cleanup what was created so far
// cleanup what was created so far
_
=
lbaas
.
EnsureLoadBalancerDeleted
(
apiService
)
_
=
lbaas
.
EnsureLoadBalancerDeleted
(
clusterName
,
apiService
)
return
nil
,
err
return
nil
,
err
}
}
...
@@ -366,7 +366,7 @@ func (lbaas *LbaasV2) EnsureLoadBalancer(apiService *api.Service, hosts []string
...
@@ -366,7 +366,7 @@ func (lbaas *LbaasV2) EnsureLoadBalancer(apiService *api.Service, hosts []string
})
.
Extract
()
})
.
Extract
()
if
err
!=
nil
{
if
err
!=
nil
{
// cleanup what was created so far
// cleanup what was created so far
_
=
lbaas
.
EnsureLoadBalancerDeleted
(
apiService
)
_
=
lbaas
.
EnsureLoadBalancerDeleted
(
clusterName
,
apiService
)
return
nil
,
err
return
nil
,
err
}
}
...
@@ -381,7 +381,7 @@ func (lbaas *LbaasV2) EnsureLoadBalancer(apiService *api.Service, hosts []string
...
@@ -381,7 +381,7 @@ func (lbaas *LbaasV2) EnsureLoadBalancer(apiService *api.Service, hosts []string
})
.
Extract
()
})
.
Extract
()
if
err
!=
nil
{
if
err
!=
nil
{
// cleanup what was created so far
// cleanup what was created so far
_
=
lbaas
.
EnsureLoadBalancerDeleted
(
apiService
)
_
=
lbaas
.
EnsureLoadBalancerDeleted
(
clusterName
,
apiService
)
return
nil
,
err
return
nil
,
err
}
}
...
@@ -400,7 +400,7 @@ func (lbaas *LbaasV2) EnsureLoadBalancer(apiService *api.Service, hosts []string
...
@@ -400,7 +400,7 @@ func (lbaas *LbaasV2) EnsureLoadBalancer(apiService *api.Service, hosts []string
})
.
Extract
()
})
.
Extract
()
if
err
!=
nil
{
if
err
!=
nil
{
// cleanup what was created so far
// cleanup what was created so far
_
=
lbaas
.
EnsureLoadBalancerDeleted
(
apiService
)
_
=
lbaas
.
EnsureLoadBalancerDeleted
(
clusterName
,
apiService
)
return
nil
,
err
return
nil
,
err
}
}
}
}
...
@@ -417,7 +417,7 @@ func (lbaas *LbaasV2) EnsureLoadBalancer(apiService *api.Service, hosts []string
...
@@ -417,7 +417,7 @@ func (lbaas *LbaasV2) EnsureLoadBalancer(apiService *api.Service, hosts []string
})
.
Extract
()
})
.
Extract
()
if
err
!=
nil
{
if
err
!=
nil
{
// cleanup what was created so far
// cleanup what was created so far
_
=
lbaas
.
EnsureLoadBalancerDeleted
(
apiService
)
_
=
lbaas
.
EnsureLoadBalancerDeleted
(
clusterName
,
apiService
)
return
nil
,
err
return
nil
,
err
}
}
}
}
...
@@ -430,7 +430,7 @@ func (lbaas *LbaasV2) EnsureLoadBalancer(apiService *api.Service, hosts []string
...
@@ -430,7 +430,7 @@ func (lbaas *LbaasV2) EnsureLoadBalancer(apiService *api.Service, hosts []string
portID
,
err
:=
getPortIDByIP
(
lbaas
.
network
,
loadbalancer
.
VipAddress
)
portID
,
err
:=
getPortIDByIP
(
lbaas
.
network
,
loadbalancer
.
VipAddress
)
if
err
!=
nil
{
if
err
!=
nil
{
// cleanup what was created so far
// cleanup what was created so far
_
=
lbaas
.
EnsureLoadBalancerDeleted
(
apiService
)
_
=
lbaas
.
EnsureLoadBalancerDeleted
(
clusterName
,
apiService
)
return
nil
,
err
return
nil
,
err
}
}
...
@@ -441,7 +441,7 @@ func (lbaas *LbaasV2) EnsureLoadBalancer(apiService *api.Service, hosts []string
...
@@ -441,7 +441,7 @@ func (lbaas *LbaasV2) EnsureLoadBalancer(apiService *api.Service, hosts []string
floatIP
,
err
:=
floatingips
.
Create
(
lbaas
.
network
,
floatIPOpts
)
.
Extract
()
floatIP
,
err
:=
floatingips
.
Create
(
lbaas
.
network
,
floatIPOpts
)
.
Extract
()
if
err
!=
nil
{
if
err
!=
nil
{
// cleanup what was created so far
// cleanup what was created so far
_
=
lbaas
.
EnsureLoadBalancerDeleted
(
apiService
)
_
=
lbaas
.
EnsureLoadBalancerDeleted
(
clusterName
,
apiService
)
return
nil
,
err
return
nil
,
err
}
}
...
@@ -451,9 +451,9 @@ func (lbaas *LbaasV2) EnsureLoadBalancer(apiService *api.Service, hosts []string
...
@@ -451,9 +451,9 @@ func (lbaas *LbaasV2) EnsureLoadBalancer(apiService *api.Service, hosts []string
return
status
,
nil
return
status
,
nil
}
}
func
(
lbaas
*
LbaasV2
)
UpdateLoadBalancer
(
service
*
api
.
Service
,
hosts
[]
string
)
error
{
func
(
lbaas
*
LbaasV2
)
UpdateLoadBalancer
(
clusterName
string
,
service
*
api
.
Service
,
hosts
[]
string
)
error
{
loadBalancerName
:=
cloudprovider
.
GetLoadBalancerName
(
service
)
loadBalancerName
:=
cloudprovider
.
GetLoadBalancerName
(
service
)
glog
.
V
(
4
)
.
Infof
(
"UpdateLoadBalancer(%v, %v
)"
,
loadBalancerName
,
hosts
)
glog
.
V
(
4
)
.
Infof
(
"UpdateLoadBalancer(%v, %v
, %v)"
,
clusterName
,
loadBalancerName
,
hosts
)
ports
:=
service
.
Spec
.
Ports
ports
:=
service
.
Spec
.
Ports
if
len
(
ports
)
>
1
{
if
len
(
ports
)
>
1
{
...
@@ -538,9 +538,9 @@ func (lbaas *LbaasV2) UpdateLoadBalancer(service *api.Service, hosts []string) e
...
@@ -538,9 +538,9 @@ func (lbaas *LbaasV2) UpdateLoadBalancer(service *api.Service, hosts []string) e
return
nil
return
nil
}
}
func
(
lbaas
*
LbaasV2
)
EnsureLoadBalancerDeleted
(
service
*
api
.
Service
)
error
{
func
(
lbaas
*
LbaasV2
)
EnsureLoadBalancerDeleted
(
clusterName
string
,
service
*
api
.
Service
)
error
{
loadBalancerName
:=
cloudprovider
.
GetLoadBalancerName
(
service
)
loadBalancerName
:=
cloudprovider
.
GetLoadBalancerName
(
service
)
glog
.
V
(
4
)
.
Infof
(
"EnsureLoadBalancerDeleted(%v
)"
,
loadBalancerName
)
glog
.
V
(
4
)
.
Infof
(
"EnsureLoadBalancerDeleted(%v
, %v)"
,
clusterName
,
loadBalancerName
)
loadbalancer
,
err
:=
getLoadbalancerByName
(
lbaas
.
network
,
loadBalancerName
)
loadbalancer
,
err
:=
getLoadbalancerByName
(
lbaas
.
network
,
loadBalancerName
)
if
err
!=
nil
&&
err
!=
ErrNotFound
{
if
err
!=
nil
&&
err
!=
ErrNotFound
{
...
@@ -690,7 +690,7 @@ func (lbaas *LbaasV2) EnsureLoadBalancerDeleted(service *api.Service) error {
...
@@ -690,7 +690,7 @@ func (lbaas *LbaasV2) EnsureLoadBalancerDeleted(service *api.Service) error {
return
nil
return
nil
}
}
func
(
lb
*
LbaasV1
)
GetLoadBalancer
(
service
*
api
.
Service
)
(
*
api
.
LoadBalancerStatus
,
bool
,
error
)
{
func
(
lb
*
LbaasV1
)
GetLoadBalancer
(
clusterName
string
,
service
*
api
.
Service
)
(
*
api
.
LoadBalancerStatus
,
bool
,
error
)
{
loadBalancerName
:=
cloudprovider
.
GetLoadBalancerName
(
service
)
loadBalancerName
:=
cloudprovider
.
GetLoadBalancerName
(
service
)
vip
,
err
:=
getVipByName
(
lb
.
network
,
loadBalancerName
)
vip
,
err
:=
getVipByName
(
lb
.
network
,
loadBalancerName
)
if
err
==
ErrNotFound
{
if
err
==
ErrNotFound
{
...
@@ -711,8 +711,8 @@ func (lb *LbaasV1) GetLoadBalancer(service *api.Service) (*api.LoadBalancerStatu
...
@@ -711,8 +711,8 @@ func (lb *LbaasV1) GetLoadBalancer(service *api.Service) (*api.LoadBalancerStatu
// a list of regions (from config) and query/create loadbalancers in
// a list of regions (from config) and query/create loadbalancers in
// each region.
// each region.
func
(
lb
*
LbaasV1
)
EnsureLoadBalancer
(
apiService
*
api
.
Service
,
hosts
[]
string
)
(
*
api
.
LoadBalancerStatus
,
error
)
{
func
(
lb
*
LbaasV1
)
EnsureLoadBalancer
(
clusterName
string
,
apiService
*
api
.
Service
,
hosts
[]
string
)
(
*
api
.
LoadBalancerStatus
,
error
)
{
glog
.
V
(
4
)
.
Infof
(
"EnsureLoadBalancer(%v, %v, %v, %v, %v, %v
)"
,
apiService
.
Namespace
,
apiService
.
Name
,
apiService
.
Spec
.
LoadBalancerIP
,
apiService
.
Spec
.
Ports
,
hosts
,
apiService
.
Annotations
)
glog
.
V
(
4
)
.
Infof
(
"EnsureLoadBalancer(%v, %v, %v, %v, %v, %v
, %v)"
,
clusterName
,
apiService
.
Namespace
,
apiService
.
Name
,
apiService
.
Spec
.
LoadBalancerIP
,
apiService
.
Spec
.
Ports
,
hosts
,
apiService
.
Annotations
)
ports
:=
apiService
.
Spec
.
Ports
ports
:=
apiService
.
Spec
.
Ports
if
len
(
ports
)
>
1
{
if
len
(
ports
)
>
1
{
...
@@ -748,7 +748,7 @@ func (lb *LbaasV1) EnsureLoadBalancer(apiService *api.Service, hosts []string) (
...
@@ -748,7 +748,7 @@ func (lb *LbaasV1) EnsureLoadBalancer(apiService *api.Service, hosts []string) (
}
}
glog
.
V
(
2
)
.
Infof
(
"Checking if openstack load balancer already exists: %s"
,
cloudprovider
.
GetLoadBalancerName
(
apiService
))
glog
.
V
(
2
)
.
Infof
(
"Checking if openstack load balancer already exists: %s"
,
cloudprovider
.
GetLoadBalancerName
(
apiService
))
_
,
exists
,
err
:=
lb
.
GetLoadBalancer
(
apiService
)
_
,
exists
,
err
:=
lb
.
GetLoadBalancer
(
clusterName
,
apiService
)
if
err
!=
nil
{
if
err
!=
nil
{
return
nil
,
fmt
.
Errorf
(
"error checking if openstack load balancer already exists: %v"
,
err
)
return
nil
,
fmt
.
Errorf
(
"error checking if openstack load balancer already exists: %v"
,
err
)
}
}
...
@@ -756,7 +756,7 @@ func (lb *LbaasV1) EnsureLoadBalancer(apiService *api.Service, hosts []string) (
...
@@ -756,7 +756,7 @@ func (lb *LbaasV1) EnsureLoadBalancer(apiService *api.Service, hosts []string) (
// TODO: Implement a more efficient update strategy for common changes than delete & create
// TODO: Implement a more efficient update strategy for common changes than delete & create
// In particular, if we implement hosts update, we can get rid of UpdateHosts
// In particular, if we implement hosts update, we can get rid of UpdateHosts
if
exists
{
if
exists
{
err
:=
lb
.
EnsureLoadBalancerDeleted
(
apiService
)
err
:=
lb
.
EnsureLoadBalancerDeleted
(
clusterName
,
apiService
)
if
err
!=
nil
{
if
err
!=
nil
{
return
nil
,
fmt
.
Errorf
(
"error deleting existing openstack load balancer: %v"
,
err
)
return
nil
,
fmt
.
Errorf
(
"error deleting existing openstack load balancer: %v"
,
err
)
}
}
...
@@ -860,9 +860,9 @@ func (lb *LbaasV1) EnsureLoadBalancer(apiService *api.Service, hosts []string) (
...
@@ -860,9 +860,9 @@ func (lb *LbaasV1) EnsureLoadBalancer(apiService *api.Service, hosts []string) (
}
}
func
(
lb
*
LbaasV1
)
UpdateLoadBalancer
(
service
*
api
.
Service
,
hosts
[]
string
)
error
{
func
(
lb
*
LbaasV1
)
UpdateLoadBalancer
(
clusterName
string
,
service
*
api
.
Service
,
hosts
[]
string
)
error
{
loadBalancerName
:=
cloudprovider
.
GetLoadBalancerName
(
service
)
loadBalancerName
:=
cloudprovider
.
GetLoadBalancerName
(
service
)
glog
.
V
(
4
)
.
Infof
(
"UpdateLoadBalancer(%v, %v
)"
,
loadBalancerName
,
hosts
)
glog
.
V
(
4
)
.
Infof
(
"UpdateLoadBalancer(%v, %v
, %v)"
,
clusterName
,
loadBalancerName
,
hosts
)
vip
,
err
:=
getVipByName
(
lb
.
network
,
loadBalancerName
)
vip
,
err
:=
getVipByName
(
lb
.
network
,
loadBalancerName
)
if
err
!=
nil
{
if
err
!=
nil
{
...
@@ -922,9 +922,9 @@ func (lb *LbaasV1) UpdateLoadBalancer(service *api.Service, hosts []string) erro
...
@@ -922,9 +922,9 @@ func (lb *LbaasV1) UpdateLoadBalancer(service *api.Service, hosts []string) erro
return
nil
return
nil
}
}
func
(
lb
*
LbaasV1
)
EnsureLoadBalancerDeleted
(
service
*
api
.
Service
)
error
{
func
(
lb
*
LbaasV1
)
EnsureLoadBalancerDeleted
(
clusterName
string
,
service
*
api
.
Service
)
error
{
loadBalancerName
:=
cloudprovider
.
GetLoadBalancerName
(
service
)
loadBalancerName
:=
cloudprovider
.
GetLoadBalancerName
(
service
)
glog
.
V
(
4
)
.
Infof
(
"EnsureLoadBalancerDeleted(%v
)"
,
loadBalancerName
)
glog
.
V
(
4
)
.
Infof
(
"EnsureLoadBalancerDeleted(%v
, %v)"
,
clusterName
,
loadBalancerName
)
vip
,
err
:=
getVipByName
(
lb
.
network
,
loadBalancerName
)
vip
,
err
:=
getVipByName
(
lb
.
network
,
loadBalancerName
)
if
err
!=
nil
&&
err
!=
ErrNotFound
{
if
err
!=
nil
&&
err
!=
ErrNotFound
{
...
...
pkg/controller/service/servicecontroller.go
View file @
6ad9dc65
...
@@ -262,7 +262,7 @@ func (s *ServiceController) processDelta(delta *cache.Delta) (error, time.Durati
...
@@ -262,7 +262,7 @@ func (s *ServiceController) processDelta(delta *cache.Delta) (error, time.Durati
if
errors
.
IsNotFound
(
err
)
{
if
errors
.
IsNotFound
(
err
)
{
glog
.
V
(
2
)
.
Infof
(
"Service %v not found, ensuring load balancer is deleted"
,
namespacedName
)
glog
.
V
(
2
)
.
Infof
(
"Service %v not found, ensuring load balancer is deleted"
,
namespacedName
)
s
.
eventRecorder
.
Event
(
deltaService
,
api
.
EventTypeNormal
,
"DeletingLoadBalancer"
,
"Deleting load balancer"
)
s
.
eventRecorder
.
Event
(
deltaService
,
api
.
EventTypeNormal
,
"DeletingLoadBalancer"
,
"Deleting load balancer"
)
err
:=
s
.
balancer
.
EnsureLoadBalancerDeleted
(
deltaService
)
err
:=
s
.
balancer
.
EnsureLoadBalancerDeleted
(
s
.
clusterName
,
deltaService
)
if
err
!=
nil
{
if
err
!=
nil
{
message
:=
"Error deleting load balancer (will retry): "
+
err
.
Error
()
message
:=
"Error deleting load balancer (will retry): "
+
err
.
Error
()
s
.
eventRecorder
.
Event
(
deltaService
,
api
.
EventTypeWarning
,
"DeletingLoadBalancerFailed"
,
message
)
s
.
eventRecorder
.
Event
(
deltaService
,
api
.
EventTypeWarning
,
"DeletingLoadBalancerFailed"
,
message
)
...
@@ -338,7 +338,7 @@ func (s *ServiceController) createLoadBalancerIfNeeded(namespacedName types.Name
...
@@ -338,7 +338,7 @@ func (s *ServiceController) createLoadBalancerIfNeeded(namespacedName types.Name
// If we don't have any cached memory of the load balancer, we have to ask
// If we don't have any cached memory of the load balancer, we have to ask
// the cloud provider for what it knows about it.
// the cloud provider for what it knows about it.
// Technically EnsureLoadBalancerDeleted can cope, but we want to post meaningful events
// Technically EnsureLoadBalancerDeleted can cope, but we want to post meaningful events
_
,
exists
,
err
:=
s
.
balancer
.
GetLoadBalancer
(
service
)
_
,
exists
,
err
:=
s
.
balancer
.
GetLoadBalancer
(
s
.
clusterName
,
s
ervice
)
if
err
!=
nil
{
if
err
!=
nil
{
return
fmt
.
Errorf
(
"error getting LB for service %s: %v"
,
namespacedName
,
err
),
retryable
return
fmt
.
Errorf
(
"error getting LB for service %s: %v"
,
namespacedName
,
err
),
retryable
}
}
...
@@ -350,7 +350,7 @@ func (s *ServiceController) createLoadBalancerIfNeeded(namespacedName types.Name
...
@@ -350,7 +350,7 @@ func (s *ServiceController) createLoadBalancerIfNeeded(namespacedName types.Name
if
needDelete
{
if
needDelete
{
glog
.
Infof
(
"Deleting existing load balancer for service %s that no longer needs a load balancer."
,
namespacedName
)
glog
.
Infof
(
"Deleting existing load balancer for service %s that no longer needs a load balancer."
,
namespacedName
)
s
.
eventRecorder
.
Event
(
service
,
api
.
EventTypeNormal
,
"DeletingLoadBalancer"
,
"Deleting load balancer"
)
s
.
eventRecorder
.
Event
(
service
,
api
.
EventTypeNormal
,
"DeletingLoadBalancer"
,
"Deleting load balancer"
)
if
err
:=
s
.
balancer
.
EnsureLoadBalancerDeleted
(
service
);
err
!=
nil
{
if
err
:=
s
.
balancer
.
EnsureLoadBalancerDeleted
(
s
.
clusterName
,
s
ervice
);
err
!=
nil
{
return
err
,
retryable
return
err
,
retryable
}
}
s
.
eventRecorder
.
Event
(
service
,
api
.
EventTypeNormal
,
"DeletedLoadBalancer"
,
"Deleted load balancer"
)
s
.
eventRecorder
.
Event
(
service
,
api
.
EventTypeNormal
,
"DeletedLoadBalancer"
,
"Deleted load balancer"
)
...
@@ -412,7 +412,7 @@ func (s *ServiceController) createLoadBalancer(service *api.Service) error {
...
@@ -412,7 +412,7 @@ func (s *ServiceController) createLoadBalancer(service *api.Service) error {
// - Only one protocol supported per service
// - Only one protocol supported per service
// - Not all cloud providers support all protocols and the next step is expected to return
// - Not all cloud providers support all protocols and the next step is expected to return
// an error for unsupported protocols
// an error for unsupported protocols
status
,
err
:=
s
.
balancer
.
EnsureLoadBalancer
(
service
,
hostsFromNodeList
(
&
nodes
))
status
,
err
:=
s
.
balancer
.
EnsureLoadBalancer
(
s
.
clusterName
,
s
ervice
,
hostsFromNodeList
(
&
nodes
))
if
err
!=
nil
{
if
err
!=
nil
{
return
err
return
err
}
}
...
@@ -745,14 +745,14 @@ func (s *ServiceController) lockedUpdateLoadBalancerHosts(service *api.Service,
...
@@ -745,14 +745,14 @@ func (s *ServiceController) lockedUpdateLoadBalancerHosts(service *api.Service,
}
}
// This operation doesn't normally take very long (and happens pretty often), so we only record the final event
// This operation doesn't normally take very long (and happens pretty often), so we only record the final event
err
:=
s
.
balancer
.
UpdateLoadBalancer
(
service
,
hosts
)
err
:=
s
.
balancer
.
UpdateLoadBalancer
(
s
.
clusterName
,
s
ervice
,
hosts
)
if
err
==
nil
{
if
err
==
nil
{
s
.
eventRecorder
.
Event
(
service
,
api
.
EventTypeNormal
,
"UpdatedLoadBalancer"
,
"Updated load balancer with new hosts"
)
s
.
eventRecorder
.
Event
(
service
,
api
.
EventTypeNormal
,
"UpdatedLoadBalancer"
,
"Updated load balancer with new hosts"
)
return
nil
return
nil
}
}
// It's only an actual error if the load balancer still exists.
// It's only an actual error if the load balancer still exists.
if
_
,
exists
,
err
:=
s
.
balancer
.
GetLoadBalancer
(
service
);
err
!=
nil
{
if
_
,
exists
,
err
:=
s
.
balancer
.
GetLoadBalancer
(
s
.
clusterName
,
s
ervice
);
err
!=
nil
{
glog
.
Errorf
(
"External error while checking if load balancer %q exists: name, %v"
,
cloudprovider
.
GetLoadBalancerName
(
service
),
err
)
glog
.
Errorf
(
"External error while checking if load balancer %q exists: name, %v"
,
cloudprovider
.
GetLoadBalancerName
(
service
),
err
)
}
else
if
!
exists
{
}
else
if
!
exists
{
return
nil
return
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