dependencies: pkg/cloudprovider

This commit is contained in:
Chao Xu
2016-11-18 12:58:42 -08:00
parent 96cd71d8f6
commit c962c2602a
22 changed files with 256 additions and 254 deletions

View File

@@ -21,7 +21,7 @@ import (
"fmt" "fmt"
"strings" "strings"
"k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/api/v1"
"k8s.io/kubernetes/pkg/types" "k8s.io/kubernetes/pkg/types"
) )
@@ -53,7 +53,7 @@ type Clusters interface {
// TODO(#6812): Use a shorter name that's less likely to be longer than cloud // TODO(#6812): Use a shorter name that's less likely to be longer than cloud
// providers' name length limits. // providers' name length limits.
func GetLoadBalancerName(service *api.Service) string { func GetLoadBalancerName(service *v1.Service) string {
//GCE requires that the name of a load balancer starts with a lower case letter. //GCE requires that the name of a load balancer starts with a lower case letter.
ret := "a" + string(service.UID) ret := "a" + string(service.UID)
ret = strings.Replace(ret, "-", "", -1) ret = strings.Replace(ret, "-", "", -1)
@@ -81,26 +81,26 @@ type LoadBalancer interface {
// TODO: Break this up into different interfaces (LB, etc) when we have more than one type of service // TODO: Break this up into different interfaces (LB, etc) when we have more than one type of service
// 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 *v1.Service parameter as read-only and not modify it.
// Parameter 'clusterName' is the name of the cluster as presented to kube-controller-manager // Parameter 'clusterName' is the name of the cluster as presented to kube-controller-manager
GetLoadBalancer(clusterName string, service *api.Service) (status *api.LoadBalancerStatus, exists bool, err error) GetLoadBalancer(clusterName string, service *v1.Service) (status *v1.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 *v1.Service parameter as read-only and not modify it.
// Parameter 'clusterName' is the name of the cluster as presented to kube-controller-manager // Parameter 'clusterName' is the name of the cluster as presented to kube-controller-manager
EnsureLoadBalancer(clusterName string, service *api.Service, nodeNames []string) (*api.LoadBalancerStatus, error) EnsureLoadBalancer(clusterName string, service *v1.Service, nodeNames []string) (*v1.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 *v1.Service parameter as read-only and not modify it.
// Parameter 'clusterName' is the name of the cluster as presented to kube-controller-manager // Parameter 'clusterName' is the name of the cluster as presented to kube-controller-manager
UpdateLoadBalancer(clusterName string, service *api.Service, nodeNames []string) error UpdateLoadBalancer(clusterName string, service *v1.Service, nodeNames []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.
// This construction is useful because many cloud providers' load balancers // This construction is useful because many cloud providers' load balancers
// 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 *v1.Service parameter as read-only and not modify it.
// Parameter 'clusterName' is the name of the cluster as presented to kube-controller-manager // Parameter 'clusterName' is the name of the cluster as presented to kube-controller-manager
EnsureLoadBalancerDeleted(clusterName string, service *api.Service) error EnsureLoadBalancerDeleted(clusterName string, service *v1.Service) error
} }
// Instances is an abstract, pluggable interface for sets of instances. // Instances is an abstract, pluggable interface for sets of instances.
@@ -109,7 +109,7 @@ type Instances interface {
// TODO(roberthbailey): This currently is only used in such a way that it // TODO(roberthbailey): This currently is only used in such a way that it
// returns the address of the calling instance. We should do a rename to // returns the address of the calling instance. We should do a rename to
// make this clearer. // make this clearer.
NodeAddresses(name types.NodeName) ([]api.NodeAddress, error) NodeAddresses(name types.NodeName) ([]v1.NodeAddress, error)
// ExternalID returns the cloud provider ID of the node with the specified NodeName. // ExternalID returns the cloud provider ID of the node with the specified NodeName.
// Note that if the instance does not exist or is no longer running, we must return ("", cloudprovider.InstanceNotFound) // Note that if the instance does not exist or is no longer running, we must return ("", cloudprovider.InstanceNotFound)
ExternalID(nodeName types.NodeName) (string, error) ExternalID(nodeName types.NodeName) (string, error)

View File

@@ -41,9 +41,9 @@ import (
"github.com/aws/aws-sdk-go/service/elb" "github.com/aws/aws-sdk-go/service/elb"
"github.com/golang/glog" "github.com/golang/glog"
"k8s.io/kubernetes/pkg/api"
"k8s.io/kubernetes/pkg/api/service"
"k8s.io/kubernetes/pkg/api/unversioned" "k8s.io/kubernetes/pkg/api/unversioned"
"k8s.io/kubernetes/pkg/api/v1"
"k8s.io/kubernetes/pkg/api/v1/service"
"k8s.io/kubernetes/pkg/cloudprovider" "k8s.io/kubernetes/pkg/cloudprovider"
aws_credentials "k8s.io/kubernetes/pkg/credentialprovider/aws" aws_credentials "k8s.io/kubernetes/pkg/credentialprovider/aws"
"k8s.io/kubernetes/pkg/types" "k8s.io/kubernetes/pkg/types"
@@ -878,17 +878,17 @@ func (c *Cloud) Routes() (cloudprovider.Routes, bool) {
} }
// NodeAddresses is an implementation of Instances.NodeAddresses. // NodeAddresses is an implementation of Instances.NodeAddresses.
func (c *Cloud) NodeAddresses(name types.NodeName) ([]api.NodeAddress, error) { func (c *Cloud) NodeAddresses(name types.NodeName) ([]v1.NodeAddress, error) {
if c.selfAWSInstance.nodeName == name || len(name) == 0 { if c.selfAWSInstance.nodeName == name || len(name) == 0 {
addresses := []api.NodeAddress{} addresses := []v1.NodeAddress{}
internalIP, err := c.metadata.GetMetadata("local-ipv4") internalIP, err := c.metadata.GetMetadata("local-ipv4")
if err != nil { if err != nil {
return nil, err return nil, err
} }
addresses = append(addresses, api.NodeAddress{Type: api.NodeInternalIP, Address: internalIP}) addresses = append(addresses, v1.NodeAddress{Type: v1.NodeInternalIP, Address: internalIP})
// Legacy compatibility: the private ip was the legacy host ip // Legacy compatibility: the private ip was the legacy host ip
addresses = append(addresses, api.NodeAddress{Type: api.NodeLegacyHostIP, Address: internalIP}) addresses = append(addresses, v1.NodeAddress{Type: v1.NodeLegacyHostIP, Address: internalIP})
externalIP, err := c.metadata.GetMetadata("public-ipv4") externalIP, err := c.metadata.GetMetadata("public-ipv4")
if err != nil { if err != nil {
@@ -896,7 +896,7 @@ func (c *Cloud) NodeAddresses(name types.NodeName) ([]api.NodeAddress, error) {
// but the AWS client masks all failures with the same error description. // but the AWS client masks all failures with the same error description.
glog.V(2).Info("Could not determine public IP from AWS metadata.") glog.V(2).Info("Could not determine public IP from AWS metadata.")
} else { } else {
addresses = append(addresses, api.NodeAddress{Type: api.NodeExternalIP, Address: externalIP}) addresses = append(addresses, v1.NodeAddress{Type: v1.NodeExternalIP, Address: externalIP})
} }
return addresses, nil return addresses, nil
@@ -906,7 +906,7 @@ func (c *Cloud) NodeAddresses(name types.NodeName) ([]api.NodeAddress, error) {
return nil, fmt.Errorf("getInstanceByNodeName failed for %q with %v", name, err) return nil, fmt.Errorf("getInstanceByNodeName failed for %q with %v", name, err)
} }
addresses := []api.NodeAddress{} addresses := []v1.NodeAddress{}
if !isNilOrEmpty(instance.PrivateIpAddress) { if !isNilOrEmpty(instance.PrivateIpAddress) {
ipAddress := *instance.PrivateIpAddress ipAddress := *instance.PrivateIpAddress
@@ -914,10 +914,10 @@ func (c *Cloud) NodeAddresses(name types.NodeName) ([]api.NodeAddress, error) {
if ip == nil { if ip == nil {
return nil, fmt.Errorf("EC2 instance had invalid private address: %s (%s)", orEmpty(instance.InstanceId), ipAddress) return nil, fmt.Errorf("EC2 instance had invalid private address: %s (%s)", orEmpty(instance.InstanceId), ipAddress)
} }
addresses = append(addresses, api.NodeAddress{Type: api.NodeInternalIP, Address: ip.String()}) addresses = append(addresses, v1.NodeAddress{Type: v1.NodeInternalIP, Address: ip.String()})
// Legacy compatibility: the private ip was the legacy host ip // Legacy compatibility: the private ip was the legacy host ip
addresses = append(addresses, api.NodeAddress{Type: api.NodeLegacyHostIP, Address: ip.String()}) addresses = append(addresses, v1.NodeAddress{Type: v1.NodeLegacyHostIP, Address: ip.String()})
} }
// TODO: Other IP addresses (multiple ips)? // TODO: Other IP addresses (multiple ips)?
@@ -927,7 +927,7 @@ func (c *Cloud) NodeAddresses(name types.NodeName) ([]api.NodeAddress, error) {
if ip == nil { if ip == nil {
return nil, fmt.Errorf("EC2 instance had invalid public address: %s (%s)", orEmpty(instance.InstanceId), ipAddress) return nil, fmt.Errorf("EC2 instance had invalid public address: %s (%s)", orEmpty(instance.InstanceId), ipAddress)
} }
addresses = append(addresses, api.NodeAddress{Type: api.NodeExternalIP, Address: ip.String()}) addresses = append(addresses, v1.NodeAddress{Type: v1.NodeExternalIP, Address: ip.String()})
} }
return addresses, nil return addresses, nil
@@ -1042,7 +1042,7 @@ func (c *Cloud) getAllZones() (sets.String, error) {
// We don't currently cache this; it is currently used only in volume // We don't currently cache this; it is currently used only in volume
// creation which is expected to be a comparatively rare occurrence. // creation which is expected to be a comparatively rare occurrence.
// TODO: Caching / expose api.Nodes to the cloud provider? // TODO: Caching / expose v1.Nodes to the cloud provider?
// TODO: We could also query for subnets, I think // TODO: We could also query for subnets, I think
filters := []*ec2.Filter{newEc2Filter("instance-state-name", "running")} filters := []*ec2.Filter{newEc2Filter("instance-state-name", "running")}
@@ -2464,7 +2464,7 @@ func getPortSets(annotation string) (ports *portSets) {
// buildListener creates a new listener from the given port, adding an SSL certificate // buildListener creates a new listener from the given port, adding an SSL certificate
// if indicated by the appropriate annotations. // if indicated by the appropriate annotations.
func buildListener(port api.ServicePort, annotations map[string]string, sslPorts *portSets) (*elb.Listener, error) { func buildListener(port v1.ServicePort, annotations map[string]string, sslPorts *portSets) (*elb.Listener, error) {
loadBalancerPort := int64(port.Port) loadBalancerPort := int64(port.Port)
portName := strings.ToLower(port.Name) portName := strings.ToLower(port.Name)
instancePort := int64(port.NodePort) instancePort := int64(port.NodePort)
@@ -2499,12 +2499,12 @@ func buildListener(port api.ServicePort, annotations map[string]string, sslPorts
} }
// EnsureLoadBalancer implements LoadBalancer.EnsureLoadBalancer // EnsureLoadBalancer implements LoadBalancer.EnsureLoadBalancer
func (c *Cloud) EnsureLoadBalancer(clusterName string, apiService *api.Service, hosts []string) (*api.LoadBalancerStatus, error) { func (c *Cloud) EnsureLoadBalancer(clusterName string, apiService *v1.Service, hosts []string) (*v1.LoadBalancerStatus, error) {
annotations := apiService.Annotations annotations := apiService.Annotations
glog.V(2).Infof("EnsureLoadBalancer(%v, %v, %v, %v, %v, %v, %v, %v)", glog.V(2).Infof("EnsureLoadBalancer(%v, %v, %v, %v, %v, %v, %v, %v)",
clusterName, 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 != v1.ServiceAffinityNone {
// ELB supports sticky sessions, but only when configured for HTTP/HTTPS // ELB supports sticky sessions, but only when configured for HTTP/HTTPS
return nil, fmt.Errorf("unsupported load balancer affinity: %v", apiService.Spec.SessionAffinity) return nil, fmt.Errorf("unsupported load balancer affinity: %v", apiService.Spec.SessionAffinity)
} }
@@ -2517,7 +2517,7 @@ func (c *Cloud) EnsureLoadBalancer(clusterName string, apiService *api.Service,
listeners := []*elb.Listener{} listeners := []*elb.Listener{}
portList := getPortSets(annotations[ServiceAnnotationLoadBalancerSSLPorts]) portList := getPortSets(annotations[ServiceAnnotationLoadBalancerSSLPorts])
for _, port := range apiService.Spec.Ports { for _, port := range apiService.Spec.Ports {
if port.Protocol != api.ProtocolTCP { if port.Protocol != v1.ProtocolTCP {
return nil, fmt.Errorf("Only TCP LoadBalancer is supported for AWS ELB") return nil, fmt.Errorf("Only TCP LoadBalancer is supported for AWS ELB")
} }
if port.NodePort == 0 { if port.NodePort == 0 {
@@ -2773,7 +2773,7 @@ func (c *Cloud) EnsureLoadBalancer(clusterName string, apiService *api.Service,
} }
// GetLoadBalancer is an implementation of LoadBalancer.GetLoadBalancer // GetLoadBalancer is an implementation of LoadBalancer.GetLoadBalancer
func (c *Cloud) GetLoadBalancer(clusterName string, service *api.Service) (*api.LoadBalancerStatus, bool, error) { func (c *Cloud) GetLoadBalancer(clusterName string, service *v1.Service) (*v1.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 {
@@ -2788,13 +2788,13 @@ func (c *Cloud) GetLoadBalancer(clusterName string, service *api.Service) (*api.
return status, true, nil return status, true, nil
} }
func toStatus(lb *elb.LoadBalancerDescription) *api.LoadBalancerStatus { func toStatus(lb *elb.LoadBalancerDescription) *v1.LoadBalancerStatus {
status := &api.LoadBalancerStatus{} status := &v1.LoadBalancerStatus{}
if !isNilOrEmpty(lb.DNSName) { if !isNilOrEmpty(lb.DNSName) {
var ingress api.LoadBalancerIngress var ingress v1.LoadBalancerIngress
ingress.Hostname = orEmpty(lb.DNSName) ingress.Hostname = orEmpty(lb.DNSName)
status.Ingress = []api.LoadBalancerIngress{ingress} status.Ingress = []v1.LoadBalancerIngress{ingress}
} }
return status return status
@@ -2989,7 +2989,7 @@ func (c *Cloud) updateInstanceSecurityGroupsForLoadBalancer(lb *elb.LoadBalancer
} }
// EnsureLoadBalancerDeleted implements LoadBalancer.EnsureLoadBalancerDeleted. // EnsureLoadBalancerDeleted implements LoadBalancer.EnsureLoadBalancerDeleted.
func (c *Cloud) EnsureLoadBalancerDeleted(clusterName string, service *api.Service) error { func (c *Cloud) EnsureLoadBalancerDeleted(clusterName string, service *v1.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 {
@@ -3085,7 +3085,7 @@ func (c *Cloud) EnsureLoadBalancerDeleted(clusterName string, service *api.Servi
} }
// UpdateLoadBalancer implements LoadBalancer.UpdateLoadBalancer // UpdateLoadBalancer implements LoadBalancer.UpdateLoadBalancer
func (c *Cloud) UpdateLoadBalancer(clusterName string, service *api.Service, hosts []string) error { func (c *Cloud) UpdateLoadBalancer(clusterName string, service *v1.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 {

View File

@@ -28,8 +28,8 @@ import (
"github.com/aws/aws-sdk-go/service/autoscaling" "github.com/aws/aws-sdk-go/service/autoscaling"
"github.com/golang/glog" "github.com/golang/glog"
"k8s.io/kubernetes/pkg/api"
"k8s.io/kubernetes/pkg/api/unversioned" "k8s.io/kubernetes/pkg/api/unversioned"
"k8s.io/kubernetes/pkg/api/v1"
"k8s.io/kubernetes/pkg/util/sets" "k8s.io/kubernetes/pkg/util/sets"
"github.com/stretchr/testify/assert" "github.com/stretchr/testify/assert"
@@ -624,7 +624,7 @@ func TestList(t *testing.T) {
} }
} }
func testHasNodeAddress(t *testing.T, addrs []api.NodeAddress, addressType api.NodeAddressType, address string) { func testHasNodeAddress(t *testing.T, addrs []v1.NodeAddress, addressType v1.NodeAddressType, address string) {
for _, addr := range addrs { for _, addr := range addrs {
if addr.Type == addressType && addr.Address == address { if addr.Type == addressType && addr.Address == address {
return return
@@ -697,9 +697,9 @@ func TestNodeAddresses(t *testing.T) {
if len(addrs3) != 3 { if len(addrs3) != 3 {
t.Errorf("Should return exactly 3 NodeAddresses") t.Errorf("Should return exactly 3 NodeAddresses")
} }
testHasNodeAddress(t, addrs3, api.NodeInternalIP, "192.168.0.1") testHasNodeAddress(t, addrs3, v1.NodeInternalIP, "192.168.0.1")
testHasNodeAddress(t, addrs3, api.NodeLegacyHostIP, "192.168.0.1") testHasNodeAddress(t, addrs3, v1.NodeLegacyHostIP, "192.168.0.1")
testHasNodeAddress(t, addrs3, api.NodeExternalIP, "1.2.3.4") testHasNodeAddress(t, addrs3, v1.NodeExternalIP, "1.2.3.4")
// Fetch from metadata // Fetch from metadata
aws4, fakeServices := mockInstancesResp(&instance0, []*ec2.Instance{&instance0}) aws4, fakeServices := mockInstancesResp(&instance0, []*ec2.Instance{&instance0})
@@ -710,8 +710,8 @@ func TestNodeAddresses(t *testing.T) {
if err4 != nil { if err4 != nil {
t.Errorf("unexpected error: %v", err4) t.Errorf("unexpected error: %v", err4)
} }
testHasNodeAddress(t, addrs4, api.NodeInternalIP, "192.168.0.2") testHasNodeAddress(t, addrs4, v1.NodeInternalIP, "192.168.0.2")
testHasNodeAddress(t, addrs4, api.NodeExternalIP, "2.3.4.5") testHasNodeAddress(t, addrs4, v1.NodeExternalIP, "2.3.4.5")
} }
func TestGetRegion(t *testing.T) { func TestGetRegion(t *testing.T) {
@@ -1192,7 +1192,7 @@ func TestDescribeLoadBalancerOnDelete(t *testing.T) {
c, _ := newAWSCloud(strings.NewReader("[global]"), awsServices) c, _ := newAWSCloud(strings.NewReader("[global]"), awsServices)
awsServices.elb.expectDescribeLoadBalancers("aid") awsServices.elb.expectDescribeLoadBalancers("aid")
c.EnsureLoadBalancerDeleted(TestClusterName, &api.Service{ObjectMeta: api.ObjectMeta{Name: "myservice", UID: "id"}}) c.EnsureLoadBalancerDeleted(TestClusterName, &v1.Service{ObjectMeta: v1.ObjectMeta{Name: "myservice", UID: "id"}})
} }
func TestDescribeLoadBalancerOnUpdate(t *testing.T) { func TestDescribeLoadBalancerOnUpdate(t *testing.T) {
@@ -1200,7 +1200,7 @@ func TestDescribeLoadBalancerOnUpdate(t *testing.T) {
c, _ := newAWSCloud(strings.NewReader("[global]"), awsServices) c, _ := newAWSCloud(strings.NewReader("[global]"), awsServices)
awsServices.elb.expectDescribeLoadBalancers("aid") awsServices.elb.expectDescribeLoadBalancers("aid")
c.UpdateLoadBalancer(TestClusterName, &api.Service{ObjectMeta: api.ObjectMeta{Name: "myservice", UID: "id"}}, []string{}) c.UpdateLoadBalancer(TestClusterName, &v1.Service{ObjectMeta: v1.ObjectMeta{Name: "myservice", UID: "id"}}, []string{})
} }
func TestDescribeLoadBalancerOnGet(t *testing.T) { func TestDescribeLoadBalancerOnGet(t *testing.T) {
@@ -1208,7 +1208,7 @@ func TestDescribeLoadBalancerOnGet(t *testing.T) {
c, _ := newAWSCloud(strings.NewReader("[global]"), awsServices) c, _ := newAWSCloud(strings.NewReader("[global]"), awsServices)
awsServices.elb.expectDescribeLoadBalancers("aid") awsServices.elb.expectDescribeLoadBalancers("aid")
c.GetLoadBalancer(TestClusterName, &api.Service{ObjectMeta: api.ObjectMeta{Name: "myservice", UID: "id"}}) c.GetLoadBalancer(TestClusterName, &v1.Service{ObjectMeta: v1.ObjectMeta{Name: "myservice", UID: "id"}})
} }
func TestDescribeLoadBalancerOnEnsure(t *testing.T) { func TestDescribeLoadBalancerOnEnsure(t *testing.T) {
@@ -1216,7 +1216,7 @@ func TestDescribeLoadBalancerOnEnsure(t *testing.T) {
c, _ := newAWSCloud(strings.NewReader("[global]"), awsServices) c, _ := newAWSCloud(strings.NewReader("[global]"), awsServices)
awsServices.elb.expectDescribeLoadBalancers("aid") awsServices.elb.expectDescribeLoadBalancers("aid")
c.EnsureLoadBalancer(TestClusterName, &api.Service{ObjectMeta: api.ObjectMeta{Name: "myservice", UID: "id"}}, []string{}) c.EnsureLoadBalancer(TestClusterName, &v1.Service{ObjectMeta: v1.ObjectMeta{Name: "myservice", UID: "id"}}, []string{})
} }
func TestBuildListener(t *testing.T) { func TestBuildListener(t *testing.T) {
@@ -1317,11 +1317,11 @@ func TestBuildListener(t *testing.T) {
annotations[ServiceAnnotationLoadBalancerCertificate] = test.certAnnotation annotations[ServiceAnnotationLoadBalancerCertificate] = test.certAnnotation
} }
ports := getPortSets(test.sslPortAnnotation) ports := getPortSets(test.sslPortAnnotation)
l, err := buildListener(api.ServicePort{ l, err := buildListener(v1.ServicePort{
NodePort: int32(test.instancePort), NodePort: int32(test.instancePort),
Port: int32(test.lbPort), Port: int32(test.lbPort),
Name: test.portName, Name: test.portName,
Protocol: api.Protocol("tcp"), Protocol: v1.Protocol("tcp"),
}, annotations, ports) }, annotations, ports)
if test.expectError { if test.expectError {
if err == nil { if err == nil {

View File

@@ -18,9 +18,10 @@ package aws
import ( import (
"fmt" "fmt"
"github.com/aws/aws-sdk-go/aws"
"net/url" "net/url"
"strings" "strings"
"github.com/aws/aws-sdk-go/aws"
) )
// awsVolumeID represents the ID of the volume in the AWS API, e.g. vol-12345678a // awsVolumeID represents the ID of the volume in the AWS API, e.g. vol-12345678a

View File

@@ -20,7 +20,7 @@ import (
"fmt" "fmt"
"regexp" "regexp"
"k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/api/v1"
"k8s.io/kubernetes/pkg/cloudprovider" "k8s.io/kubernetes/pkg/cloudprovider"
"github.com/Azure/azure-sdk-for-go/arm/compute" "github.com/Azure/azure-sdk-for-go/arm/compute"
@@ -28,15 +28,15 @@ import (
) )
// NodeAddresses returns the addresses of the specified instance. // NodeAddresses returns the addresses of the specified instance.
func (az *Cloud) NodeAddresses(name types.NodeName) ([]api.NodeAddress, error) { func (az *Cloud) NodeAddresses(name types.NodeName) ([]v1.NodeAddress, error) {
ip, err := az.getIPForMachine(name) ip, err := az.getIPForMachine(name)
if err != nil { if err != nil {
return nil, err return nil, err
} }
return []api.NodeAddress{ return []v1.NodeAddress{
{Type: api.NodeInternalIP, Address: ip}, {Type: v1.NodeInternalIP, Address: ip},
{Type: api.NodeHostName, Address: string(name)}, {Type: v1.NodeHostName, Address: string(name)},
}, nil }, nil
} }

View File

@@ -21,8 +21,8 @@ import (
"strconv" "strconv"
"strings" "strings"
"k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/api/v1"
serviceapi "k8s.io/kubernetes/pkg/api/service" serviceapi "k8s.io/kubernetes/pkg/api/v1/service"
utilerrors "k8s.io/kubernetes/pkg/util/errors" utilerrors "k8s.io/kubernetes/pkg/util/errors"
"github.com/Azure/azure-sdk-for-go/arm/network" "github.com/Azure/azure-sdk-for-go/arm/network"
@@ -33,7 +33,7 @@ import (
// 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.
func (az *Cloud) GetLoadBalancer(clusterName string, service *api.Service) (status *api.LoadBalancerStatus, exists bool, err error) { func (az *Cloud) GetLoadBalancer(clusterName string, service *v1.Service) (status *v1.LoadBalancerStatus, exists bool, err error) {
lbName := getLoadBalancerName(clusterName) lbName := getLoadBalancerName(clusterName)
pipName := getPublicIPName(clusterName, service) pipName := getPublicIPName(clusterName, service)
serviceName := getServiceName(service) serviceName := getServiceName(service)
@@ -56,13 +56,13 @@ func (az *Cloud) GetLoadBalancer(clusterName string, service *api.Service) (stat
return nil, false, nil return nil, false, nil
} }
return &api.LoadBalancerStatus{ return &v1.LoadBalancerStatus{
Ingress: []api.LoadBalancerIngress{{IP: *pip.Properties.IPAddress}}, Ingress: []v1.LoadBalancerIngress{{IP: *pip.Properties.IPAddress}},
}, true, nil }, true, nil
} }
// 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
func (az *Cloud) EnsureLoadBalancer(clusterName string, service *api.Service, nodeNames []string) (*api.LoadBalancerStatus, error) { func (az *Cloud) EnsureLoadBalancer(clusterName string, service *v1.Service, nodeNames []string) (*v1.LoadBalancerStatus, error) {
lbName := getLoadBalancerName(clusterName) lbName := getLoadBalancerName(clusterName)
pipName := getPublicIPName(clusterName, service) pipName := getPublicIPName(clusterName, service)
serviceName := getServiceName(service) serviceName := getServiceName(service)
@@ -135,13 +135,13 @@ func (az *Cloud) EnsureLoadBalancer(clusterName string, service *api.Service, no
} }
glog.V(2).Infof("ensure(%s): FINISH - %s", serviceName, *pip.Properties.IPAddress) glog.V(2).Infof("ensure(%s): FINISH - %s", serviceName, *pip.Properties.IPAddress)
return &api.LoadBalancerStatus{ return &v1.LoadBalancerStatus{
Ingress: []api.LoadBalancerIngress{{IP: *pip.Properties.IPAddress}}, Ingress: []v1.LoadBalancerIngress{{IP: *pip.Properties.IPAddress}},
}, nil }, nil
} }
// UpdateLoadBalancer updates hosts under the specified load balancer. // UpdateLoadBalancer updates hosts under the specified load balancer.
func (az *Cloud) UpdateLoadBalancer(clusterName string, service *api.Service, nodeNames []string) error { func (az *Cloud) UpdateLoadBalancer(clusterName string, service *v1.Service, nodeNames []string) error {
_, err := az.EnsureLoadBalancer(clusterName, service, nodeNames) _, err := az.EnsureLoadBalancer(clusterName, service, nodeNames)
return err return err
} }
@@ -152,7 +152,7 @@ func (az *Cloud) UpdateLoadBalancer(clusterName string, service *api.Service, no
// This construction is useful because many cloud providers' load balancers // This construction is useful because many cloud providers' load balancers
// 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.
func (az *Cloud) EnsureLoadBalancerDeleted(clusterName string, service *api.Service) error { func (az *Cloud) EnsureLoadBalancerDeleted(clusterName string, service *v1.Service) error {
lbName := getLoadBalancerName(clusterName) lbName := getLoadBalancerName(clusterName)
pipName := getPublicIPName(clusterName, service) pipName := getPublicIPName(clusterName, service)
serviceName := getServiceName(service) serviceName := getServiceName(service)
@@ -160,7 +160,7 @@ func (az *Cloud) EnsureLoadBalancerDeleted(clusterName string, service *api.Serv
glog.V(2).Infof("delete(%s): START clusterName=%q lbName=%q", serviceName, clusterName, lbName) glog.V(2).Infof("delete(%s): START clusterName=%q lbName=%q", serviceName, clusterName, lbName)
// reconcile logic is capable of fully reconcile, so we can use this to delete // reconcile logic is capable of fully reconcile, so we can use this to delete
service.Spec.Ports = []api.ServicePort{} service.Spec.Ports = []v1.ServicePort{}
lb, existsLb, err := az.getAzureLoadBalancer(lbName) lb, existsLb, err := az.getAzureLoadBalancer(lbName)
if err != nil { if err != nil {
@@ -259,7 +259,7 @@ func (az *Cloud) ensurePublicIPDeleted(serviceName, pipName string) error {
// This ensures load balancer exists and the frontend ip config is setup. // This ensures load balancer exists and the frontend ip config is setup.
// This also reconciles the Service's Ports with the LoadBalancer config. // This also reconciles the Service's Ports with the LoadBalancer config.
// This entails adding rules/probes for expected Ports and removing stale rules/ports. // This entails adding rules/probes for expected Ports and removing stale rules/ports.
func (az *Cloud) reconcileLoadBalancer(lb network.LoadBalancer, pip *network.PublicIPAddress, clusterName string, service *api.Service, nodeNames []string) (network.LoadBalancer, bool, error) { func (az *Cloud) reconcileLoadBalancer(lb network.LoadBalancer, pip *network.PublicIPAddress, clusterName string, service *v1.Service, nodeNames []string) (network.LoadBalancer, bool, error) {
lbName := getLoadBalancerName(clusterName) lbName := getLoadBalancerName(clusterName)
serviceName := getServiceName(service) serviceName := getServiceName(service)
lbFrontendIPConfigName := getFrontendIPConfigName(service) lbFrontendIPConfigName := getFrontendIPConfigName(service)
@@ -471,7 +471,7 @@ func (az *Cloud) reconcileLoadBalancer(lb network.LoadBalancer, pip *network.Pub
// This reconciles the Network Security Group similar to how the LB is reconciled. // This reconciles the Network Security Group similar to how the LB is reconciled.
// This entails adding required, missing SecurityRules and removing stale rules. // This entails adding required, missing SecurityRules and removing stale rules.
func (az *Cloud) reconcileSecurityGroup(sg network.SecurityGroup, clusterName string, service *api.Service) (network.SecurityGroup, bool, error) { func (az *Cloud) reconcileSecurityGroup(sg network.SecurityGroup, clusterName string, service *v1.Service) (network.SecurityGroup, bool, error) {
serviceName := getServiceName(service) serviceName := getServiceName(service)
wantLb := len(service.Spec.Ports) > 0 wantLb := len(service.Spec.Ports) > 0

View File

@@ -21,8 +21,8 @@ import (
"strings" "strings"
"testing" "testing"
"k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/api/v1"
serviceapi "k8s.io/kubernetes/pkg/api/service" serviceapi "k8s.io/kubernetes/pkg/api/v1/service"
"k8s.io/kubernetes/pkg/types" "k8s.io/kubernetes/pkg/types"
"github.com/Azure/azure-sdk-for-go/arm/compute" "github.com/Azure/azure-sdk-for-go/arm/compute"
@@ -229,20 +229,20 @@ func getTestPublicIP() network.PublicIPAddress {
return pip return pip
} }
func getTestService(identifier string, requestedPorts ...int32) api.Service { func getTestService(identifier string, requestedPorts ...int32) v1.Service {
ports := []api.ServicePort{} ports := []v1.ServicePort{}
for _, port := range requestedPorts { for _, port := range requestedPorts {
ports = append(ports, api.ServicePort{ ports = append(ports, v1.ServicePort{
Name: fmt.Sprintf("port-%d", port), Name: fmt.Sprintf("port-%d", port),
Protocol: api.ProtocolTCP, Protocol: v1.ProtocolTCP,
Port: port, Port: port,
NodePort: getBackendPort(port), NodePort: getBackendPort(port),
}) })
} }
svc := api.Service{ svc := v1.Service{
Spec: api.ServiceSpec{ Spec: v1.ServiceSpec{
Type: api.ServiceTypeLoadBalancer, Type: v1.ServiceTypeLoadBalancer,
Ports: ports, Ports: ports,
}, },
} }
@@ -253,7 +253,7 @@ func getTestService(identifier string, requestedPorts ...int32) api.Service {
return svc return svc
} }
func getTestLoadBalancer(services ...api.Service) network.LoadBalancer { func getTestLoadBalancer(services ...v1.Service) network.LoadBalancer {
rules := []network.LoadBalancingRule{} rules := []network.LoadBalancingRule{}
probes := []network.Probe{} probes := []network.Probe{}
@@ -286,14 +286,14 @@ func getTestLoadBalancer(services ...api.Service) network.LoadBalancer {
return lb return lb
} }
func getServiceSourceRanges(service *api.Service) []string { func getServiceSourceRanges(service *v1.Service) []string {
if len(service.Spec.LoadBalancerSourceRanges) == 0 { if len(service.Spec.LoadBalancerSourceRanges) == 0 {
return []string{"Internet"} return []string{"Internet"}
} }
return service.Spec.LoadBalancerSourceRanges return service.Spec.LoadBalancerSourceRanges
} }
func getTestSecurityGroup(services ...api.Service) network.SecurityGroup { func getTestSecurityGroup(services ...v1.Service) network.SecurityGroup {
rules := []network.SecurityRule{} rules := []network.SecurityRule{}
for _, service := range services { for _, service := range services {
@@ -322,7 +322,7 @@ func getTestSecurityGroup(services ...api.Service) network.SecurityGroup {
return sg return sg
} }
func validateLoadBalancer(t *testing.T, loadBalancer network.LoadBalancer, services ...api.Service) { func validateLoadBalancer(t *testing.T, loadBalancer network.LoadBalancer, services ...v1.Service) {
expectedRuleCount := 0 expectedRuleCount := 0
for _, svc := range services { for _, svc := range services {
for _, wantedRule := range svc.Spec.Ports { for _, wantedRule := range svc.Spec.Ports {
@@ -381,7 +381,7 @@ func validateLoadBalancer(t *testing.T, loadBalancer network.LoadBalancer, servi
} }
} }
func validateSecurityGroup(t *testing.T, securityGroup network.SecurityGroup, services ...api.Service) { func validateSecurityGroup(t *testing.T, securityGroup network.SecurityGroup, services ...v1.Service) {
expectedRuleCount := 0 expectedRuleCount := 0
for _, svc := range services { for _, svc := range services {
for _, wantedRule := range svc.Spec.Ports { for _, wantedRule := range svc.Spec.Ports {
@@ -455,7 +455,7 @@ func TestSecurityRulePriorityFailsIfExhausted(t *testing.T) {
} }
func TestProtocolTranslationTCP(t *testing.T) { func TestProtocolTranslationTCP(t *testing.T) {
proto := api.ProtocolTCP proto := v1.ProtocolTCP
transportProto, securityGroupProto, probeProto, err := getProtocolsFromKubernetesProtocol(proto) transportProto, securityGroupProto, probeProto, err := getProtocolsFromKubernetesProtocol(proto)
if err != nil { if err != nil {
t.Error(err) t.Error(err)
@@ -473,7 +473,7 @@ func TestProtocolTranslationTCP(t *testing.T) {
} }
func TestProtocolTranslationUDP(t *testing.T) { func TestProtocolTranslationUDP(t *testing.T) {
proto := api.ProtocolUDP proto := v1.ProtocolUDP
_, _, _, err := getProtocolsFromKubernetesProtocol(proto) _, _, _, err := getProtocolsFromKubernetesProtocol(proto)
if err == nil { if err == nil {
t.Error("Expected an error. UDP is unsupported.") t.Error("Expected an error. UDP is unsupported.")

View File

@@ -20,7 +20,7 @@ import (
"fmt" "fmt"
"strings" "strings"
"k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/api/v1"
"k8s.io/kubernetes/pkg/cloudprovider" "k8s.io/kubernetes/pkg/cloudprovider"
"github.com/Azure/azure-sdk-for-go/arm/compute" "github.com/Azure/azure-sdk-for-go/arm/compute"
@@ -122,9 +122,9 @@ func getLastSegment(ID string) (string, error) {
// returns the equivalent LoadBalancerRule, SecurityRule and LoadBalancerProbe // returns the equivalent LoadBalancerRule, SecurityRule and LoadBalancerProbe
// protocol types for the given Kubernetes protocol type. // protocol types for the given Kubernetes protocol type.
func getProtocolsFromKubernetesProtocol(protocol api.Protocol) (network.TransportProtocol, network.SecurityRuleProtocol, network.ProbeProtocol, error) { func getProtocolsFromKubernetesProtocol(protocol v1.Protocol) (network.TransportProtocol, network.SecurityRuleProtocol, network.ProbeProtocol, error) {
switch protocol { switch protocol {
case api.ProtocolTCP: case v1.ProtocolTCP:
return network.TransportProtocolTCP, network.TCP, network.ProbeProtocolTCP, nil return network.TransportProtocolTCP, network.TCP, network.ProbeProtocolTCP, nil
default: default:
return "", "", "", fmt.Errorf("Only TCP is supported for Azure LoadBalancers") return "", "", "", fmt.Errorf("Only TCP is supported for Azure LoadBalancers")
@@ -168,31 +168,31 @@ func getBackendPoolName(clusterName string) string {
return clusterName return clusterName
} }
func getRuleName(service *api.Service, port api.ServicePort) string { func getRuleName(service *v1.Service, port v1.ServicePort) string {
return fmt.Sprintf("%s-%s-%d-%d", getRulePrefix(service), port.Protocol, port.Port, port.NodePort) return fmt.Sprintf("%s-%s-%d-%d", getRulePrefix(service), port.Protocol, port.Port, port.NodePort)
} }
// This returns a human-readable version of the Service used to tag some resources. // This returns a human-readable version of the Service used to tag some resources.
// This is only used for human-readable convenience, and not to filter. // This is only used for human-readable convenience, and not to filter.
func getServiceName(service *api.Service) string { func getServiceName(service *v1.Service) string {
return fmt.Sprintf("%s/%s", service.Namespace, service.Name) return fmt.Sprintf("%s/%s", service.Namespace, service.Name)
} }
// This returns a prefix for loadbalancer/security rules. // This returns a prefix for loadbalancer/security rules.
func getRulePrefix(service *api.Service) string { func getRulePrefix(service *v1.Service) string {
return cloudprovider.GetLoadBalancerName(service) return cloudprovider.GetLoadBalancerName(service)
} }
func serviceOwnsRule(service *api.Service, rule string) bool { func serviceOwnsRule(service *v1.Service, rule string) bool {
prefix := getRulePrefix(service) prefix := getRulePrefix(service)
return strings.HasPrefix(strings.ToUpper(rule), strings.ToUpper(prefix)) return strings.HasPrefix(strings.ToUpper(rule), strings.ToUpper(prefix))
} }
func getFrontendIPConfigName(service *api.Service) string { func getFrontendIPConfigName(service *v1.Service) string {
return cloudprovider.GetLoadBalancerName(service) return cloudprovider.GetLoadBalancerName(service)
} }
func getPublicIPName(clusterName string, service *api.Service) string { func getPublicIPName(clusterName string, service *v1.Service) string {
return fmt.Sprintf("%s-%s", clusterName, cloudprovider.GetLoadBalancerName(service)) return fmt.Sprintf("%s-%s", clusterName, cloudprovider.GetLoadBalancerName(service))
} }

View File

@@ -22,7 +22,7 @@ import (
"github.com/golang/glog" "github.com/golang/glog"
"github.com/xanzy/go-cloudstack/cloudstack" "github.com/xanzy/go-cloudstack/cloudstack"
"k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/api/v1"
"k8s.io/kubernetes/pkg/cloudprovider" "k8s.io/kubernetes/pkg/cloudprovider"
) )
@@ -40,7 +40,7 @@ type loadBalancer struct {
} }
// GetLoadBalancer returns whether the specified load balancer exists, and if so, what its status is. // GetLoadBalancer returns whether the specified load balancer exists, and if so, what its status is.
func (cs *CSCloud) GetLoadBalancer(clusterName string, service *api.Service) (*api.LoadBalancerStatus, bool, error) { func (cs *CSCloud) GetLoadBalancer(clusterName string, service *v1.Service) (*v1.LoadBalancerStatus, bool, error) {
glog.V(4).Infof("GetLoadBalancer(%v, %v, %v)", clusterName, service.Namespace, service.Name) glog.V(4).Infof("GetLoadBalancer(%v, %v, %v)", clusterName, service.Namespace, service.Name)
// Get the load balancer details and existing rules. // Get the load balancer details and existing rules.
@@ -56,14 +56,14 @@ func (cs *CSCloud) GetLoadBalancer(clusterName string, service *api.Service) (*a
glog.V(4).Infof("Found a load balancer associated with IP %v", lb.ipAddr) glog.V(4).Infof("Found a load balancer associated with IP %v", lb.ipAddr)
status := &api.LoadBalancerStatus{} status := &v1.LoadBalancerStatus{}
status.Ingress = append(status.Ingress, api.LoadBalancerIngress{IP: lb.ipAddr}) status.Ingress = append(status.Ingress, v1.LoadBalancerIngress{IP: lb.ipAddr})
return status, true, nil return status, true, nil
} }
// EnsureLoadBalancer creates a new load balancer, or updates the existing one. Returns the status of the balancer. // EnsureLoadBalancer creates a new load balancer, or updates the existing one. Returns the status of the balancer.
func (cs *CSCloud) EnsureLoadBalancer(clusterName string, service *api.Service, hosts []string) (status *api.LoadBalancerStatus, err error) { func (cs *CSCloud) EnsureLoadBalancer(clusterName string, service *v1.Service, hosts []string) (status *v1.LoadBalancerStatus, err error) {
glog.V(4).Infof("EnsureLoadBalancer(%v, %v, %v, %v, %v, %v)", clusterName, service.Namespace, service.Name, service.Spec.LoadBalancerIP, service.Spec.Ports, hosts) glog.V(4).Infof("EnsureLoadBalancer(%v, %v, %v, %v, %v, %v)", clusterName, service.Namespace, service.Name, service.Spec.LoadBalancerIP, service.Spec.Ports, hosts)
if len(service.Spec.Ports) == 0 { if len(service.Spec.Ports) == 0 {
@@ -78,9 +78,9 @@ func (cs *CSCloud) EnsureLoadBalancer(clusterName string, service *api.Service,
// Set the load balancer algorithm. // Set the load balancer algorithm.
switch service.Spec.SessionAffinity { switch service.Spec.SessionAffinity {
case api.ServiceAffinityNone: case v1.ServiceAffinityNone:
lb.algorithm = "roundrobin" lb.algorithm = "roundrobin"
case api.ServiceAffinityClientIP: case v1.ServiceAffinityClientIP:
lb.algorithm = "source" lb.algorithm = "source"
default: default:
return nil, fmt.Errorf("unsupported load balancer affinity: %v", service.Spec.SessionAffinity) return nil, fmt.Errorf("unsupported load balancer affinity: %v", service.Spec.SessionAffinity)
@@ -158,14 +158,14 @@ func (cs *CSCloud) EnsureLoadBalancer(clusterName string, service *api.Service,
} }
} }
status = &api.LoadBalancerStatus{} status = &v1.LoadBalancerStatus{}
status.Ingress = []api.LoadBalancerIngress{{IP: lb.ipAddr}} status.Ingress = []v1.LoadBalancerIngress{{IP: lb.ipAddr}}
return status, nil return status, nil
} }
// UpdateLoadBalancer updates hosts under the specified load balancer. // UpdateLoadBalancer updates hosts under the specified load balancer.
func (cs *CSCloud) UpdateLoadBalancer(clusterName string, service *api.Service, hosts []string) error { func (cs *CSCloud) UpdateLoadBalancer(clusterName string, service *v1.Service, hosts []string) error {
glog.V(4).Infof("UpdateLoadBalancer(%v, %v, %v, %v)", clusterName, service.Namespace, service.Name, hosts) glog.V(4).Infof("UpdateLoadBalancer(%v, %v, %v, %v)", clusterName, service.Namespace, service.Name, hosts)
// Get the load balancer details and existing rules. // Get the load balancer details and existing rules.
@@ -211,7 +211,7 @@ func (cs *CSCloud) UpdateLoadBalancer(clusterName string, service *api.Service,
// EnsureLoadBalancerDeleted deletes the specified load balancer if it exists, returning // EnsureLoadBalancerDeleted deletes the specified load balancer if it exists, returning
// nil if the load balancer specified either didn't exist or was successfully deleted. // nil if the load balancer specified either didn't exist or was successfully deleted.
func (cs *CSCloud) EnsureLoadBalancerDeleted(clusterName string, service *api.Service) error { func (cs *CSCloud) EnsureLoadBalancerDeleted(clusterName string, service *v1.Service) error {
glog.V(4).Infof("EnsureLoadBalancerDeleted(%v, %v, %v)", clusterName, service.Namespace, service.Name) glog.V(4).Infof("EnsureLoadBalancerDeleted(%v, %v, %v)", clusterName, service.Namespace, service.Name)
// Get the load balancer details and existing rules. // Get the load balancer details and existing rules.
@@ -238,7 +238,7 @@ func (cs *CSCloud) EnsureLoadBalancerDeleted(clusterName string, service *api.Se
} }
// getLoadBalancer retrieves the IP address and ID and all the existing rules it can find. // getLoadBalancer retrieves the IP address and ID and all the existing rules it can find.
func (cs *CSCloud) getLoadBalancer(service *api.Service) (*loadBalancer, error) { func (cs *CSCloud) getLoadBalancer(service *v1.Service) (*loadBalancer, error) {
lb := &loadBalancer{ lb := &loadBalancer{
CloudStackClient: cs.client, CloudStackClient: cs.client,
name: cloudprovider.GetLoadBalancerName(service), name: cloudprovider.GetLoadBalancerName(service),
@@ -403,7 +403,7 @@ func (lb *loadBalancer) releaseLoadBalancerIP() error {
// checkLoadBalancerRule checks if the rule already exists and if it does, if it can be updated. If // checkLoadBalancerRule checks if the rule already exists and if it does, if it can be updated. If
// it does exist but cannot be updated, it will delete the existing rule so it can be created again. // it does exist but cannot be updated, it will delete the existing rule so it can be created again.
func (lb *loadBalancer) checkLoadBalancerRule(lbRuleName string, port api.ServicePort) (bool, bool, error) { func (lb *loadBalancer) checkLoadBalancerRule(lbRuleName string, port v1.ServicePort) (bool, bool, error) {
lbRule, ok := lb.rules[lbRuleName] lbRule, ok := lb.rules[lbRuleName]
if !ok { if !ok {
return false, false, nil return false, false, nil
@@ -434,7 +434,7 @@ func (lb *loadBalancer) updateLoadBalancerRule(lbRuleName string) error {
} }
// createLoadBalancerRule creates a new load balancer rule and returns it's ID. // createLoadBalancerRule creates a new load balancer rule and returns it's ID.
func (lb *loadBalancer) createLoadBalancerRule(lbRuleName string, port api.ServicePort) (*cloudstack.LoadBalancerRule, error) { func (lb *loadBalancer) createLoadBalancerRule(lbRuleName string, port v1.ServicePort) (*cloudstack.LoadBalancerRule, error) {
p := lb.LoadBalancer.NewCreateLoadBalancerRuleParams( p := lb.LoadBalancer.NewCreateLoadBalancerRuleParams(
lb.algorithm, lb.algorithm,
lbRuleName, lbRuleName,
@@ -446,9 +446,9 @@ func (lb *loadBalancer) createLoadBalancerRule(lbRuleName string, port api.Servi
p.SetPublicipid(lb.ipAddrID) p.SetPublicipid(lb.ipAddrID)
switch port.Protocol { switch port.Protocol {
case api.ProtocolTCP: case v1.ProtocolTCP:
p.SetProtocol("TCP") p.SetProtocol("TCP")
case api.ProtocolUDP: case v1.ProtocolUDP:
p.SetProtocol("UDP") p.SetProtocol("UDP")
default: default:
return nil, fmt.Errorf("unsupported load balancer protocol: %v", port.Protocol) return nil, fmt.Errorf("unsupported load balancer protocol: %v", port.Protocol)

View File

@@ -22,7 +22,7 @@ import (
"strings" "strings"
"testing" "testing"
"k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/api/v1"
) )
const testClusterName = "testCluster" const testClusterName = "testCluster"
@@ -111,7 +111,7 @@ func TestLoadBalancer(t *testing.T) {
t.Fatalf("LoadBalancer() returned false") t.Fatalf("LoadBalancer() returned false")
} }
_, exists, err := lb.GetLoadBalancer(testClusterName, &api.Service{ObjectMeta: api.ObjectMeta{Name: "noexist"}}) _, exists, err := lb.GetLoadBalancer(testClusterName, &v1.Service{ObjectMeta: v1.ObjectMeta{Name: "noexist"}})
if err != nil { if err != nil {
t.Fatalf("GetLoadBalancer(\"noexist\") returned error: %s", err) t.Fatalf("GetLoadBalancer(\"noexist\") returned error: %s", err)
} }

View File

@@ -23,7 +23,7 @@ import (
"regexp" "regexp"
"sync" "sync"
"k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/api/v1"
"k8s.io/kubernetes/pkg/cloudprovider" "k8s.io/kubernetes/pkg/cloudprovider"
"k8s.io/kubernetes/pkg/types" "k8s.io/kubernetes/pkg/types"
) )
@@ -35,12 +35,12 @@ type FakeBalancer struct {
Name string Name string
Region string Region string
LoadBalancerIP string LoadBalancerIP string
Ports []api.ServicePort Ports []v1.ServicePort
Hosts []string Hosts []string
} }
type FakeUpdateBalancerCall struct { type FakeUpdateBalancerCall struct {
Service *api.Service Service *v1.Service
Hosts []string Hosts []string
} }
@@ -49,11 +49,11 @@ type FakeCloud struct {
Exists bool Exists bool
Err error Err error
Calls []string Calls []string
Addresses []api.NodeAddress Addresses []v1.NodeAddress
ExtID map[types.NodeName]string ExtID map[types.NodeName]string
InstanceTypes map[types.NodeName]string InstanceTypes map[types.NodeName]string
Machines []types.NodeName Machines []types.NodeName
NodeResources *api.NodeResources NodeResources *v1.NodeResources
ClusterList []string ClusterList []string
MasterName string MasterName string
ExternalIP net.IP ExternalIP net.IP
@@ -122,16 +122,16 @@ func (f *FakeCloud) Routes() (cloudprovider.Routes, bool) {
} }
// GetLoadBalancer is a stub implementation of LoadBalancer.GetLoadBalancer. // GetLoadBalancer is a stub implementation of LoadBalancer.GetLoadBalancer.
func (f *FakeCloud) GetLoadBalancer(clusterName string, service *api.Service) (*api.LoadBalancerStatus, bool, error) { func (f *FakeCloud) GetLoadBalancer(clusterName string, service *v1.Service) (*v1.LoadBalancerStatus, bool, error) {
status := &api.LoadBalancerStatus{} status := &v1.LoadBalancerStatus{}
status.Ingress = []api.LoadBalancerIngress{{IP: f.ExternalIP.String()}} status.Ingress = []v1.LoadBalancerIngress{{IP: f.ExternalIP.String()}}
return status, f.Exists, f.Err return status, f.Exists, f.Err
} }
// EnsureLoadBalancer is a test-spy implementation of LoadBalancer.EnsureLoadBalancer. // EnsureLoadBalancer is a test-spy implementation of LoadBalancer.EnsureLoadBalancer.
// It adds an entry "create" into the internal method call record. // It adds an entry "create" into the internal method call record.
func (f *FakeCloud) EnsureLoadBalancer(clusterName string, service *api.Service, hosts []string) (*api.LoadBalancerStatus, error) { func (f *FakeCloud) EnsureLoadBalancer(clusterName string, service *v1.Service, hosts []string) (*v1.LoadBalancerStatus, error) {
f.addCall("create") f.addCall("create")
if f.Balancers == nil { if f.Balancers == nil {
f.Balancers = make(map[string]FakeBalancer) f.Balancers = make(map[string]FakeBalancer)
@@ -148,15 +148,15 @@ func (f *FakeCloud) EnsureLoadBalancer(clusterName string, service *api.Service,
f.Balancers[name] = FakeBalancer{name, region, spec.LoadBalancerIP, spec.Ports, hosts} f.Balancers[name] = FakeBalancer{name, region, spec.LoadBalancerIP, spec.Ports, hosts}
status := &api.LoadBalancerStatus{} status := &v1.LoadBalancerStatus{}
status.Ingress = []api.LoadBalancerIngress{{IP: f.ExternalIP.String()}} status.Ingress = []v1.LoadBalancerIngress{{IP: f.ExternalIP.String()}}
return status, f.Err return status, f.Err
} }
// UpdateLoadBalancer is a test-spy implementation of LoadBalancer.UpdateLoadBalancer. // UpdateLoadBalancer is a test-spy implementation of LoadBalancer.UpdateLoadBalancer.
// It adds an entry "update" into the internal method call record. // It adds an entry "update" into the internal method call record.
func (f *FakeCloud) UpdateLoadBalancer(clusterName string, service *api.Service, hosts []string) error { func (f *FakeCloud) UpdateLoadBalancer(clusterName string, service *v1.Service, hosts []string) error {
f.addCall("update") f.addCall("update")
f.UpdateCalls = append(f.UpdateCalls, FakeUpdateBalancerCall{service, hosts}) f.UpdateCalls = append(f.UpdateCalls, FakeUpdateBalancerCall{service, hosts})
return f.Err return f.Err
@@ -164,7 +164,7 @@ func (f *FakeCloud) UpdateLoadBalancer(clusterName string, service *api.Service,
// EnsureLoadBalancerDeleted is a test-spy implementation of LoadBalancer.EnsureLoadBalancerDeleted. // EnsureLoadBalancerDeleted is a test-spy implementation of LoadBalancer.EnsureLoadBalancerDeleted.
// It adds an entry "delete" into the internal method call record. // It adds an entry "delete" into the internal method call record.
func (f *FakeCloud) EnsureLoadBalancerDeleted(clusterName string, service *api.Service) error { func (f *FakeCloud) EnsureLoadBalancerDeleted(clusterName string, service *v1.Service) error {
f.addCall("delete") f.addCall("delete")
return f.Err return f.Err
} }
@@ -180,7 +180,7 @@ func (f *FakeCloud) CurrentNodeName(hostname string) (types.NodeName, error) {
// NodeAddresses is a test-spy implementation of Instances.NodeAddresses. // NodeAddresses is a test-spy implementation of Instances.NodeAddresses.
// It adds an entry "node-addresses" into the internal method call record. // It adds an entry "node-addresses" into the internal method call record.
func (f *FakeCloud) NodeAddresses(instance types.NodeName) ([]api.NodeAddress, error) { func (f *FakeCloud) NodeAddresses(instance types.NodeName) ([]v1.NodeAddress, error) {
f.addCall("node-addresses") f.addCall("node-addresses")
return f.Addresses, f.Err return f.Addresses, f.Err
} }

View File

@@ -30,9 +30,9 @@ import (
"gopkg.in/gcfg.v1" "gopkg.in/gcfg.v1"
"k8s.io/kubernetes/pkg/api"
apiservice "k8s.io/kubernetes/pkg/api/service"
"k8s.io/kubernetes/pkg/api/unversioned" "k8s.io/kubernetes/pkg/api/unversioned"
"k8s.io/kubernetes/pkg/api/v1"
apiservice "k8s.io/kubernetes/pkg/api/v1/service"
"k8s.io/kubernetes/pkg/cloudprovider" "k8s.io/kubernetes/pkg/cloudprovider"
"k8s.io/kubernetes/pkg/types" "k8s.io/kubernetes/pkg/types"
utilerrors "k8s.io/kubernetes/pkg/util/errors" utilerrors "k8s.io/kubernetes/pkg/util/errors"
@@ -527,12 +527,12 @@ 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(clusterName string, service *api.Service) (*api.LoadBalancerStatus, bool, error) { func (gce *GCECloud) GetLoadBalancer(clusterName string, service *v1.Service) (*v1.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 {
status := &api.LoadBalancerStatus{} status := &v1.LoadBalancerStatus{}
status.Ingress = []api.LoadBalancerIngress{{IP: fwd.IPAddress}} status.Ingress = []v1.LoadBalancerIngress{{IP: fwd.IPAddress}}
return status, true, nil return status, true, nil
} }
@@ -554,7 +554,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(clusterName string, apiService *api.Service, hostNames []string) (*api.LoadBalancerStatus, error) { func (gce *GCECloud) EnsureLoadBalancer(clusterName string, apiService *v1.Service, hostNames []string) (*v1.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")
} }
@@ -832,8 +832,8 @@ func (gce *GCECloud) EnsureLoadBalancer(clusterName string, apiService *api.Serv
glog.Infof("EnsureLoadBalancer(%v(%v)): created forwarding rule, IP %s", loadBalancerName, serviceName, ipAddress) glog.Infof("EnsureLoadBalancer(%v(%v)): created forwarding rule, IP %s", loadBalancerName, serviceName, ipAddress)
} }
status := &api.LoadBalancerStatus{} status := &v1.LoadBalancerStatus{}
status.Ingress = []api.LoadBalancerIngress{{IP: ipAddress}} status.Ingress = []v1.LoadBalancerIngress{{IP: ipAddress}}
return status, nil return status, nil
} }
@@ -889,7 +889,7 @@ func (gce *GCECloud) ensureHttpHealthCheck(name, path string, port int32) (hc *c
// IP is being requested. // IP is being requested.
// Returns whether the forwarding rule exists, whether it needs to be updated, // Returns whether the forwarding rule exists, whether it needs to be updated,
// what its IP address is (if it exists), and any error we encountered. // what its IP address is (if it exists), and any error we encountered.
func (gce *GCECloud) forwardingRuleNeedsUpdate(name, region string, loadBalancerIP string, ports []api.ServicePort) (exists bool, needsUpdate bool, ipAddress string, err error) { func (gce *GCECloud) forwardingRuleNeedsUpdate(name, region string, loadBalancerIP string, ports []v1.ServicePort) (exists bool, needsUpdate bool, ipAddress string, err error) {
fwd, err := gce.service.ForwardingRules.Get(gce.projectID, region, name).Do() fwd, err := gce.service.ForwardingRules.Get(gce.projectID, region, name).Do()
if err != nil { if err != nil {
if isHTTPErrorCode(err, http.StatusNotFound) { if isHTTPErrorCode(err, http.StatusNotFound) {
@@ -926,13 +926,13 @@ func (gce *GCECloud) forwardingRuleNeedsUpdate(name, region string, loadBalancer
return true, false, fwd.IPAddress, nil return true, false, fwd.IPAddress, nil
} }
func loadBalancerPortRange(ports []api.ServicePort) (string, error) { func loadBalancerPortRange(ports []v1.ServicePort) (string, error) {
if len(ports) == 0 { if len(ports) == 0 {
return "", fmt.Errorf("no ports specified for GCE load balancer") return "", fmt.Errorf("no ports specified for GCE load balancer")
} }
// The service controller verified all the protocols match on the ports, just check and use the first one // The service controller verified all the protocols match on the ports, just check and use the first one
if ports[0].Protocol != api.ProtocolTCP && ports[0].Protocol != api.ProtocolUDP { if ports[0].Protocol != v1.ProtocolTCP && ports[0].Protocol != v1.ProtocolUDP {
return "", fmt.Errorf("Invalid protocol %s, only TCP and UDP are supported", string(ports[0].Protocol)) return "", fmt.Errorf("Invalid protocol %s, only TCP and UDP are supported", string(ports[0].Protocol))
} }
@@ -951,7 +951,7 @@ func loadBalancerPortRange(ports []api.ServicePort) (string, error) {
// Doesn't check whether the hosts have changed, since host updating is handled // Doesn't check whether the hosts have changed, since host updating is handled
// separately. // separately.
func (gce *GCECloud) targetPoolNeedsUpdate(name, region string, affinityType api.ServiceAffinity) (exists bool, needsUpdate bool, err error) { func (gce *GCECloud) targetPoolNeedsUpdate(name, region string, affinityType v1.ServiceAffinity) (exists bool, needsUpdate bool, err error) {
tp, err := gce.service.TargetPools.Get(gce.projectID, region, name).Do() tp, err := gce.service.TargetPools.Get(gce.projectID, region, name).Do()
if err != nil { if err != nil {
if isHTTPErrorCode(err, http.StatusNotFound) { if isHTTPErrorCode(err, http.StatusNotFound) {
@@ -977,11 +977,11 @@ func (gce *GCECloud) targetPoolNeedsUpdate(name, region string, affinityType api
} }
// translate from what K8s supports to what the cloud provider supports for session affinity. // translate from what K8s supports to what the cloud provider supports for session affinity.
func translateAffinityType(affinityType api.ServiceAffinity) string { func translateAffinityType(affinityType v1.ServiceAffinity) string {
switch affinityType { switch affinityType {
case api.ServiceAffinityClientIP: case v1.ServiceAffinityClientIP:
return gceAffinityTypeClientIP return gceAffinityTypeClientIP
case api.ServiceAffinityNone: case v1.ServiceAffinityNone:
return gceAffinityTypeNone return gceAffinityTypeNone
default: default:
glog.Errorf("Unexpected affinity type: %v", affinityType) glog.Errorf("Unexpected affinity type: %v", affinityType)
@@ -989,7 +989,7 @@ func translateAffinityType(affinityType api.ServiceAffinity) string {
} }
} }
func (gce *GCECloud) firewallNeedsUpdate(name, serviceName, region, ipAddress string, ports []api.ServicePort, sourceRanges netsets.IPNet) (exists bool, needsUpdate bool, err error) { func (gce *GCECloud) firewallNeedsUpdate(name, serviceName, region, ipAddress string, ports []v1.ServicePort, sourceRanges netsets.IPNet) (exists bool, needsUpdate bool, err error) {
fw, err := gce.service.Firewalls.Get(gce.projectID, makeFirewallName(name)).Do() fw, err := gce.service.Firewalls.Get(gce.projectID, makeFirewallName(name)).Do()
if err != nil { if err != nil {
if isHTTPErrorCode(err, http.StatusNotFound) { if isHTTPErrorCode(err, http.StatusNotFound) {
@@ -1050,7 +1050,7 @@ func slicesEqual(x, y []string) bool {
return true return true
} }
func (gce *GCECloud) createForwardingRule(name, serviceName, region, ipAddress string, ports []api.ServicePort) error { func (gce *GCECloud) createForwardingRule(name, serviceName, region, ipAddress string, ports []v1.ServicePort) error {
portRange, err := loadBalancerPortRange(ports) portRange, err := loadBalancerPortRange(ports)
if err != nil { if err != nil {
return err return err
@@ -1077,7 +1077,7 @@ func (gce *GCECloud) createForwardingRule(name, serviceName, region, ipAddress s
return nil return nil
} }
func (gce *GCECloud) createTargetPool(name, serviceName, region string, hosts []*gceInstance, affinityType api.ServiceAffinity, hc *compute.HttpHealthCheck) error { func (gce *GCECloud) createTargetPool(name, serviceName, region string, hosts []*gceInstance, affinityType v1.ServiceAffinity, hc *compute.HttpHealthCheck) error {
var instances []string var instances []string
for _, host := range hosts { for _, host := range hosts {
instances = append(instances, makeHostURL(gce.projectID, host.Zone, host.Name)) instances = append(instances, makeHostURL(gce.projectID, host.Zone, host.Name))
@@ -1114,7 +1114,7 @@ func (gce *GCECloud) createTargetPool(name, serviceName, region string, hosts []
return nil return nil
} }
func (gce *GCECloud) createFirewall(name, region, desc string, sourceRanges netsets.IPNet, ports []api.ServicePort, hosts []*gceInstance) error { func (gce *GCECloud) createFirewall(name, region, desc string, sourceRanges netsets.IPNet, ports []v1.ServicePort, hosts []*gceInstance) error {
firewall, err := gce.firewallObject(name, region, desc, sourceRanges, ports, hosts) firewall, err := gce.firewallObject(name, region, desc, sourceRanges, ports, hosts)
if err != nil { if err != nil {
return err return err
@@ -1132,7 +1132,7 @@ func (gce *GCECloud) createFirewall(name, region, desc string, sourceRanges nets
return nil return nil
} }
func (gce *GCECloud) updateFirewall(name, region, desc string, sourceRanges netsets.IPNet, ports []api.ServicePort, hosts []*gceInstance) error { func (gce *GCECloud) updateFirewall(name, region, desc string, sourceRanges netsets.IPNet, ports []v1.ServicePort, hosts []*gceInstance) error {
firewall, err := gce.firewallObject(name, region, desc, sourceRanges, ports, hosts) firewall, err := gce.firewallObject(name, region, desc, sourceRanges, ports, hosts)
if err != nil { if err != nil {
return err return err
@@ -1150,7 +1150,7 @@ func (gce *GCECloud) updateFirewall(name, region, desc string, sourceRanges nets
return nil return nil
} }
func (gce *GCECloud) firewallObject(name, region, desc string, sourceRanges netsets.IPNet, ports []api.ServicePort, hosts []*gceInstance) (*compute.Firewall, error) { func (gce *GCECloud) firewallObject(name, region, desc string, sourceRanges netsets.IPNet, ports []v1.ServicePort, hosts []*gceInstance) (*compute.Firewall, error) {
allowedPorts := make([]string, len(ports)) allowedPorts := make([]string, len(ports))
for ix := range ports { for ix := range ports {
allowedPorts[ix] = strconv.Itoa(int(ports[ix].Port)) allowedPorts[ix] = strconv.Itoa(int(ports[ix].Port))
@@ -1331,7 +1331,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(clusterName string, service *api.Service, hostNames []string) error { func (gce *GCECloud) UpdateLoadBalancer(clusterName string, service *v1.Service, hostNames []string) error {
hosts, err := gce.getInstancesByNames(hostNames) hosts, err := gce.getInstancesByNames(hostNames)
if err != nil { if err != nil {
return err return err
@@ -1402,7 +1402,7 @@ 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(clusterName string, service *api.Service) error { func (gce *GCECloud) EnsureLoadBalancerDeleted(clusterName string, service *v1.Service) error {
loadBalancerName := cloudprovider.GetLoadBalancerName(service) loadBalancerName := cloudprovider.GetLoadBalancerName(service)
glog.V(2).Infof("EnsureLoadBalancerDeleted(%v, %v, %v, %v, %v)", clusterName, 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)
@@ -1555,15 +1555,15 @@ func (gce *GCECloud) CreateFirewall(name, desc string, sourceRanges netsets.IPNe
return err return err
} }
// TODO: This completely breaks modularity in the cloudprovider but the methods // TODO: This completely breaks modularity in the cloudprovider but the methods
// shared with the TCPLoadBalancer take api.ServicePorts. // shared with the TCPLoadBalancer take v1.ServicePorts.
svcPorts := []api.ServicePort{} svcPorts := []v1.ServicePort{}
// TODO: Currently the only consumer of this method is the GCE L7 // TODO: Currently the only consumer of this method is the GCE L7
// loadbalancer controller, which never needs a protocol other than TCP. // loadbalancer controller, which never needs a protocol other than TCP.
// We should pipe through a mapping of port:protocol and default to TCP // We should pipe through a mapping of port:protocol and default to TCP
// if UDP ports are required. This means the method signature will change // if UDP ports are required. This means the method signature will change
// forcing downstream clients to refactor interfaces. // forcing downstream clients to refactor interfaces.
for _, p := range ports { for _, p := range ports {
svcPorts = append(svcPorts, api.ServicePort{Port: int32(p), Protocol: api.ProtocolTCP}) svcPorts = append(svcPorts, v1.ServicePort{Port: int32(p), Protocol: v1.ProtocolTCP})
} }
hosts, err := gce.getInstancesByNames(hostNames) hosts, err := gce.getInstancesByNames(hostNames)
if err != nil { if err != nil {
@@ -1589,15 +1589,15 @@ func (gce *GCECloud) UpdateFirewall(name, desc string, sourceRanges netsets.IPNe
return err return err
} }
// TODO: This completely breaks modularity in the cloudprovider but the methods // TODO: This completely breaks modularity in the cloudprovider but the methods
// shared with the TCPLoadBalancer take api.ServicePorts. // shared with the TCPLoadBalancer take v1.ServicePorts.
svcPorts := []api.ServicePort{} svcPorts := []v1.ServicePort{}
// TODO: Currently the only consumer of this method is the GCE L7 // TODO: Currently the only consumer of this method is the GCE L7
// loadbalancer controller, which never needs a protocol other than TCP. // loadbalancer controller, which never needs a protocol other than TCP.
// We should pipe through a mapping of port:protocol and default to TCP // We should pipe through a mapping of port:protocol and default to TCP
// if UDP ports are required. This means the method signature will change, // if UDP ports are required. This means the method signature will change,
// forcing downstream clients to refactor interfaces. // forcing downstream clients to refactor interfaces.
for _, p := range ports { for _, p := range ports {
svcPorts = append(svcPorts, api.ServicePort{Port: int32(p), Protocol: api.ProtocolTCP}) svcPorts = append(svcPorts, v1.ServicePort{Port: int32(p), Protocol: v1.ProtocolTCP})
} }
hosts, err := gce.getInstancesByNames(hostNames) hosts, err := gce.getInstancesByNames(hostNames)
if err != nil { if err != nil {
@@ -2171,7 +2171,7 @@ func (gce *GCECloud) AddSSHKeyToAllInstances(user string, keyData []byte) error
} }
// NodeAddresses is an implementation of Instances.NodeAddresses. // NodeAddresses is an implementation of Instances.NodeAddresses.
func (gce *GCECloud) NodeAddresses(_ types.NodeName) ([]api.NodeAddress, error) { func (gce *GCECloud) NodeAddresses(_ types.NodeName) ([]v1.NodeAddress, error) {
internalIP, err := metadata.Get("instance/network-interfaces/0/ip") internalIP, err := metadata.Get("instance/network-interfaces/0/ip")
if err != nil { if err != nil {
return nil, fmt.Errorf("couldn't get internal IP: %v", err) return nil, fmt.Errorf("couldn't get internal IP: %v", err)
@@ -2180,9 +2180,9 @@ func (gce *GCECloud) NodeAddresses(_ types.NodeName) ([]api.NodeAddress, error)
if err != nil { if err != nil {
return nil, fmt.Errorf("couldn't get external IP: %v", err) return nil, fmt.Errorf("couldn't get external IP: %v", err)
} }
return []api.NodeAddress{ return []v1.NodeAddress{
{Type: api.NodeInternalIP, Address: internalIP}, {Type: v1.NodeInternalIP, Address: internalIP},
{Type: api.NodeExternalIP, Address: externalIP}, {Type: v1.NodeExternalIP, Address: externalIP},
}, nil }, nil
} }

View File

@@ -31,8 +31,8 @@ import (
"github.com/mesos/mesos-go/detector" "github.com/mesos/mesos-go/detector"
mesos "github.com/mesos/mesos-go/mesosproto" mesos "github.com/mesos/mesos-go/mesosproto"
"golang.org/x/net/context" "golang.org/x/net/context"
"k8s.io/kubernetes/pkg/api"
"k8s.io/kubernetes/pkg/api/resource" "k8s.io/kubernetes/pkg/api/resource"
"k8s.io/kubernetes/pkg/api/v1"
utilnet "k8s.io/kubernetes/pkg/util/net" utilnet "k8s.io/kubernetes/pkg/util/net"
) )
@@ -52,7 +52,7 @@ type mesosClient struct {
type slaveNode struct { type slaveNode struct {
hostname string hostname string
kubeletRunning bool kubeletRunning bool
resources *api.NodeResources resources *v1.NodeResources
} }
type mesosState struct { type mesosState struct {
@@ -315,12 +315,12 @@ func parseMesosState(blob []byte) (*mesosState, error) {
continue continue
} }
node := &slaveNode{hostname: slave.Hostname} node := &slaveNode{hostname: slave.Hostname}
cap := api.ResourceList{} cap := v1.ResourceList{}
if slave.Resources != nil && len(slave.Resources) > 0 { if slave.Resources != nil && len(slave.Resources) > 0 {
// attempt to translate CPU (cores) and memory (MB) resources // attempt to translate CPU (cores) and memory (MB) resources
if cpu, found := slave.Resources["cpus"]; found { if cpu, found := slave.Resources["cpus"]; found {
if cpuNum, ok := cpu.(float64); ok { if cpuNum, ok := cpu.(float64); ok {
cap[api.ResourceCPU] = *resource.NewQuantity(int64(cpuNum), resource.DecimalSI) cap[v1.ResourceCPU] = *resource.NewQuantity(int64(cpuNum), resource.DecimalSI)
} else { } else {
log.Warningf("unexpected slave cpu resource type %T: %v", cpu, cpu) log.Warningf("unexpected slave cpu resource type %T: %v", cpu, cpu)
} }
@@ -329,7 +329,7 @@ func parseMesosState(blob []byte) (*mesosState, error) {
} }
if mem, found := slave.Resources["mem"]; found { if mem, found := slave.Resources["mem"]; found {
if memNum, ok := mem.(float64); ok { if memNum, ok := mem.(float64); ok {
cap[api.ResourceMemory] = *resource.NewQuantity(int64(memNum), resource.BinarySI) cap[v1.ResourceMemory] = *resource.NewQuantity(int64(memNum), resource.BinarySI)
} else { } else {
log.Warningf("unexpected slave mem resource type %T: %v", mem, mem) log.Warningf("unexpected slave mem resource type %T: %v", mem, mem)
} }
@@ -338,7 +338,7 @@ func parseMesosState(blob []byte) (*mesosState, error) {
} }
} }
if len(cap) > 0 { if len(cap) > 0 {
node.resources = &api.NodeResources{ node.resources = &v1.NodeResources{
Capacity: cap, Capacity: cap,
} }
log.V(4).Infof("node %q reporting capacity %v", node.hostname, cap) log.V(4).Infof("node %q reporting capacity %v", node.hostname, cap)

View File

@@ -28,7 +28,7 @@ import (
log "github.com/golang/glog" log "github.com/golang/glog"
"github.com/mesos/mesos-go/detector" "github.com/mesos/mesos-go/detector"
"k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/api/v1"
"k8s.io/kubernetes/pkg/cloudprovider" "k8s.io/kubernetes/pkg/cloudprovider"
"k8s.io/kubernetes/pkg/types" "k8s.io/kubernetes/pkg/types"
) )
@@ -284,15 +284,15 @@ func (c *MesosCloud) ListWithoutKubelet() ([]string, error) {
} }
// NodeAddresses returns the addresses of the instance with the specified nodeName. // NodeAddresses returns the addresses of the instance with the specified nodeName.
func (c *MesosCloud) NodeAddresses(nodeName types.NodeName) ([]api.NodeAddress, error) { func (c *MesosCloud) NodeAddresses(nodeName types.NodeName) ([]v1.NodeAddress, error) {
name := mapNodeNameToHostname(nodeName) name := mapNodeNameToHostname(nodeName)
ip, err := ipAddress(name) ip, err := ipAddress(name)
if err != nil { if err != nil {
return nil, err return nil, err
} }
return []api.NodeAddress{ return []v1.NodeAddress{
{Type: api.NodeLegacyHostIP, Address: ip.String()}, {Type: v1.NodeLegacyHostIP, Address: ip.String()},
{Type: api.NodeInternalIP, Address: ip.String()}, {Type: v1.NodeInternalIP, Address: ip.String()},
{Type: api.NodeExternalIP, Address: ip.String()}, {Type: v1.NodeExternalIP, Address: ip.String()},
}, nil }, nil
} }

View File

@@ -36,7 +36,7 @@ import (
"github.com/rackspace/gophercloud/pagination" "github.com/rackspace/gophercloud/pagination"
"github.com/golang/glog" "github.com/golang/glog"
"k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/api/v1"
"k8s.io/kubernetes/pkg/cloudprovider" "k8s.io/kubernetes/pkg/cloudprovider"
"k8s.io/kubernetes/pkg/types" "k8s.io/kubernetes/pkg/types"
) )
@@ -261,13 +261,13 @@ func getServerByName(client *gophercloud.ServiceClient, name types.NodeName) (*s
return &serverList[0], nil return &serverList[0], nil
} }
func getAddressesByName(client *gophercloud.ServiceClient, name types.NodeName) ([]api.NodeAddress, error) { func getAddressesByName(client *gophercloud.ServiceClient, name types.NodeName) ([]v1.NodeAddress, error) {
srv, err := getServerByName(client, name) srv, err := getServerByName(client, name)
if err != nil { if err != nil {
return nil, err return nil, err
} }
addrs := []api.NodeAddress{} addrs := []v1.NodeAddress{}
for network, netblob := range srv.Addresses { for network, netblob := range srv.Addresses {
list, ok := netblob.([]interface{}) list, ok := netblob.([]interface{})
@@ -276,7 +276,7 @@ func getAddressesByName(client *gophercloud.ServiceClient, name types.NodeName)
} }
for _, item := range list { for _, item := range list {
var addressType api.NodeAddressType var addressType v1.NodeAddressType
props, ok := item.(map[string]interface{}) props, ok := item.(map[string]interface{})
if !ok { if !ok {
@@ -285,9 +285,9 @@ func getAddressesByName(client *gophercloud.ServiceClient, name types.NodeName)
extIPType, ok := props["OS-EXT-IPS:type"] extIPType, ok := props["OS-EXT-IPS:type"]
if (ok && extIPType == "floating") || (!ok && network == "public") { if (ok && extIPType == "floating") || (!ok && network == "public") {
addressType = api.NodeExternalIP addressType = v1.NodeExternalIP
} else { } else {
addressType = api.NodeInternalIP addressType = v1.NodeInternalIP
} }
tmp, ok := props["addr"] tmp, ok := props["addr"]
@@ -299,8 +299,8 @@ func getAddressesByName(client *gophercloud.ServiceClient, name types.NodeName)
continue continue
} }
api.AddToNodeAddresses(&addrs, v1.AddToNodeAddresses(&addrs,
api.NodeAddress{ v1.NodeAddress{
Type: addressType, Type: addressType,
Address: addr, Address: addr,
}, },
@@ -310,18 +310,18 @@ func getAddressesByName(client *gophercloud.ServiceClient, name types.NodeName)
// AccessIPs are usually duplicates of "public" addresses. // AccessIPs are usually duplicates of "public" addresses.
if srv.AccessIPv4 != "" { if srv.AccessIPv4 != "" {
api.AddToNodeAddresses(&addrs, v1.AddToNodeAddresses(&addrs,
api.NodeAddress{ v1.NodeAddress{
Type: api.NodeExternalIP, Type: v1.NodeExternalIP,
Address: srv.AccessIPv4, Address: srv.AccessIPv4,
}, },
) )
} }
if srv.AccessIPv6 != "" { if srv.AccessIPv6 != "" {
api.AddToNodeAddresses(&addrs, v1.AddToNodeAddresses(&addrs,
api.NodeAddress{ v1.NodeAddress{
Type: api.NodeExternalIP, Type: v1.NodeExternalIP,
Address: srv.AccessIPv6, Address: srv.AccessIPv6,
}, },
) )
@@ -339,7 +339,7 @@ func getAddressByName(client *gophercloud.ServiceClient, name types.NodeName) (s
} }
for _, addr := range addrs { for _, addr := range addrs {
if addr.Type == api.NodeInternalIP { if addr.Type == v1.NodeInternalIP {
return addr.Address, nil return addr.Address, nil
} }
} }

View File

@@ -26,15 +26,15 @@ import (
"github.com/rackspace/gophercloud/openstack/compute/v2/servers" "github.com/rackspace/gophercloud/openstack/compute/v2/servers"
"github.com/rackspace/gophercloud/pagination" "github.com/rackspace/gophercloud/pagination"
"k8s.io/kubernetes/pkg/api"
"k8s.io/kubernetes/pkg/api/resource" "k8s.io/kubernetes/pkg/api/resource"
"k8s.io/kubernetes/pkg/api/v1"
"k8s.io/kubernetes/pkg/cloudprovider" "k8s.io/kubernetes/pkg/cloudprovider"
"k8s.io/kubernetes/pkg/types" "k8s.io/kubernetes/pkg/types"
) )
type Instances struct { type Instances struct {
compute *gophercloud.ServiceClient compute *gophercloud.ServiceClient
flavor_to_resource map[string]*api.NodeResources // keyed by flavor id flavor_to_resource map[string]*v1.NodeResources // keyed by flavor id
} }
// Instances returns an implementation of Instances for OpenStack. // Instances returns an implementation of Instances for OpenStack.
@@ -51,17 +51,17 @@ func (os *OpenStack) Instances() (cloudprovider.Instances, bool) {
pager := flavors.ListDetail(compute, nil) pager := flavors.ListDetail(compute, nil)
flavor_to_resource := make(map[string]*api.NodeResources) flavor_to_resource := make(map[string]*v1.NodeResources)
err = pager.EachPage(func(page pagination.Page) (bool, error) { err = pager.EachPage(func(page pagination.Page) (bool, error) {
flavorList, err := flavors.ExtractFlavors(page) flavorList, err := flavors.ExtractFlavors(page)
if err != nil { if err != nil {
return false, err return false, err
} }
for _, flavor := range flavorList { for _, flavor := range flavorList {
rsrc := api.NodeResources{ rsrc := v1.NodeResources{
Capacity: api.ResourceList{ Capacity: v1.ResourceList{
api.ResourceCPU: *resource.NewQuantity(int64(flavor.VCPUs), resource.DecimalSI), v1.ResourceCPU: *resource.NewQuantity(int64(flavor.VCPUs), resource.DecimalSI),
api.ResourceMemory: *resource.NewQuantity(int64(flavor.RAM)*MiB, resource.BinarySI), v1.ResourceMemory: *resource.NewQuantity(int64(flavor.RAM)*MiB, resource.BinarySI),
"openstack.org/disk": *resource.NewQuantity(int64(flavor.Disk)*GB, resource.DecimalSI), "openstack.org/disk": *resource.NewQuantity(int64(flavor.Disk)*GB, resource.DecimalSI),
"openstack.org/rxTxFactor": *resource.NewMilliQuantity(int64(flavor.RxTxFactor)*1000, resource.DecimalSI), "openstack.org/rxTxFactor": *resource.NewMilliQuantity(int64(flavor.RxTxFactor)*1000, resource.DecimalSI),
"openstack.org/swap": *resource.NewQuantity(int64(flavor.Swap)*MiB, resource.BinarySI), "openstack.org/swap": *resource.NewQuantity(int64(flavor.Swap)*MiB, resource.BinarySI),
@@ -126,7 +126,7 @@ func (i *Instances) AddSSHKeyToAllInstances(user string, keyData []byte) error {
return errors.New("unimplemented") return errors.New("unimplemented")
} }
func (i *Instances) NodeAddresses(name types.NodeName) ([]api.NodeAddress, error) { func (i *Instances) NodeAddresses(name types.NodeName) ([]v1.NodeAddress, error) {
glog.V(4).Infof("NodeAddresses(%v) called", name) glog.V(4).Infof("NodeAddresses(%v) called", name)
addrs, err := getAddressesByName(i.compute, name) addrs, err := getAddressesByName(i.compute, name)

View File

@@ -39,8 +39,8 @@ import (
neutron_ports "github.com/rackspace/gophercloud/openstack/networking/v2/ports" neutron_ports "github.com/rackspace/gophercloud/openstack/networking/v2/ports"
"github.com/rackspace/gophercloud/pagination" "github.com/rackspace/gophercloud/pagination"
"k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/api/v1"
"k8s.io/kubernetes/pkg/api/service" "k8s.io/kubernetes/pkg/api/v1/service"
"k8s.io/kubernetes/pkg/cloudprovider" "k8s.io/kubernetes/pkg/cloudprovider"
"k8s.io/kubernetes/pkg/types" "k8s.io/kubernetes/pkg/types"
) )
@@ -282,7 +282,7 @@ func getListenersByLoadBalancerID(client *gophercloud.ServiceClient, id string)
} }
// get listener for a port or nil if does not exist // get listener for a port or nil if does not exist
func getListenerForPort(existingListeners []listeners.Listener, port api.ServicePort) *listeners.Listener { func getListenerForPort(existingListeners []listeners.Listener, port v1.ServicePort) *listeners.Listener {
for _, l := range existingListeners { for _, l := range existingListeners {
if l.Protocol == string(port.Protocol) && l.ProtocolPort == int(port.Port) { if l.Protocol == string(port.Protocol) && l.ProtocolPort == int(port.Port) {
return &l return &l
@@ -418,7 +418,7 @@ func popMember(members []v2_pools.Member, addr string, port int) []v2_pools.Memb
return members return members
} }
func getSecurityGroupName(clusterName string, service *api.Service) string { func getSecurityGroupName(clusterName string, service *v1.Service) string {
return fmt.Sprintf("lb-sg-%s-%v", clusterName, service.Name) return fmt.Sprintf("lb-sg-%s-%v", clusterName, service.Name)
} }
@@ -521,7 +521,7 @@ func createNodeSecurityGroup(client *gophercloud.ServiceClient, nodeSecurityGrou
return nil return nil
} }
func (lbaas *LbaasV2) createLoadBalancer(service *api.Service, name string) (*loadbalancers.LoadBalancer, error) { func (lbaas *LbaasV2) createLoadBalancer(service *v1.Service, name string) (*loadbalancers.LoadBalancer, error) {
createOpts := loadbalancers.CreateOpts{ createOpts := loadbalancers.CreateOpts{
Name: name, Name: name,
Description: fmt.Sprintf("Kubernetes external service %s", name), Description: fmt.Sprintf("Kubernetes external service %s", name),
@@ -549,7 +549,7 @@ func stringInArray(x string, list []string) bool {
return false return false
} }
func (lbaas *LbaasV2) GetLoadBalancer(clusterName string, service *api.Service) (*api.LoadBalancerStatus, bool, error) { func (lbaas *LbaasV2) GetLoadBalancer(clusterName string, service *v1.Service) (*v1.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 {
@@ -559,8 +559,8 @@ func (lbaas *LbaasV2) GetLoadBalancer(clusterName string, service *api.Service)
return nil, false, err return nil, false, err
} }
status := &api.LoadBalancerStatus{} status := &v1.LoadBalancerStatus{}
status.Ingress = []api.LoadBalancerIngress{{IP: loadbalancer.VipAddress}} status.Ingress = []v1.LoadBalancerIngress{{IP: loadbalancer.VipAddress}}
return status, true, err return status, true, err
} }
@@ -570,7 +570,7 @@ func (lbaas *LbaasV2) GetLoadBalancer(clusterName string, service *api.Service)
// 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(clusterName string, apiService *api.Service, nodeNames []string) (*api.LoadBalancerStatus, error) { func (lbaas *LbaasV2) EnsureLoadBalancer(clusterName string, apiService *v1.Service, nodeNames []string) (*v1.LoadBalancerStatus, error) {
glog.V(4).Infof("EnsureLoadBalancer(%v, %v, %v, %v, %v, %v, %v)", clusterName, apiService.Namespace, apiService.Name, apiService.Spec.LoadBalancerIP, apiService.Spec.Ports, nodeNames, 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, nodeNames, apiService.Annotations)
ports := apiService.Spec.Ports ports := apiService.Spec.Ports
@@ -581,7 +581,7 @@ func (lbaas *LbaasV2) EnsureLoadBalancer(clusterName string, apiService *api.Ser
// Check for TCP protocol on each port // Check for TCP protocol on each port
// TODO: Convert all error messages to use an event recorder // TODO: Convert all error messages to use an event recorder
for _, port := range ports { for _, port := range ports {
if port.Protocol != api.ProtocolTCP { if port.Protocol != v1.ProtocolTCP {
return nil, fmt.Errorf("Only TCP LoadBalancer is supported for openstack load balancers") return nil, fmt.Errorf("Only TCP LoadBalancer is supported for openstack load balancers")
} }
} }
@@ -595,12 +595,12 @@ func (lbaas *LbaasV2) EnsureLoadBalancer(clusterName string, apiService *api.Ser
return nil, fmt.Errorf("Source range restrictions are not supported for openstack load balancers without managing security groups") return nil, fmt.Errorf("Source range restrictions are not supported for openstack load balancers without managing security groups")
} }
affinity := api.ServiceAffinityNone affinity := v1.ServiceAffinityNone
var persistence *v2_pools.SessionPersistence var persistence *v2_pools.SessionPersistence
switch affinity { switch affinity {
case api.ServiceAffinityNone: case v1.ServiceAffinityNone:
persistence = nil persistence = nil
case api.ServiceAffinityClientIP: case v1.ServiceAffinityClientIP:
persistence = &v2_pools.SessionPersistence{Type: "SOURCE_IP"} persistence = &v2_pools.SessionPersistence{Type: "SOURCE_IP"}
default: default:
return nil, fmt.Errorf("unsupported load balancer affinity: %v", affinity) return nil, fmt.Errorf("unsupported load balancer affinity: %v", affinity)
@@ -794,9 +794,9 @@ func (lbaas *LbaasV2) EnsureLoadBalancer(clusterName string, apiService *api.Ser
glog.V(2).Infof("Deleted obsolete listener: %s", listener.ID) glog.V(2).Infof("Deleted obsolete listener: %s", listener.ID)
} }
status := &api.LoadBalancerStatus{} status := &v1.LoadBalancerStatus{}
status.Ingress = []api.LoadBalancerIngress{{IP: loadbalancer.VipAddress}} status.Ingress = []v1.LoadBalancerIngress{{IP: loadbalancer.VipAddress}}
port, err := getPortByIP(lbaas.network, loadbalancer.VipAddress) port, err := getPortByIP(lbaas.network, loadbalancer.VipAddress)
if err != nil { if err != nil {
@@ -818,7 +818,7 @@ func (lbaas *LbaasV2) EnsureLoadBalancer(clusterName string, apiService *api.Ser
} }
} }
if floatIP != nil { if floatIP != nil {
status.Ingress = append(status.Ingress, api.LoadBalancerIngress{IP: floatIP.FloatingIP}) status.Ingress = append(status.Ingress, v1.LoadBalancerIngress{IP: floatIP.FloatingIP})
} }
if lbaas.opts.ManageSecurityGroups { if lbaas.opts.ManageSecurityGroups {
@@ -939,7 +939,7 @@ func (lbaas *LbaasV2) EnsureLoadBalancer(clusterName string, apiService *api.Ser
return status, nil return status, nil
} }
func (lbaas *LbaasV2) UpdateLoadBalancer(clusterName string, service *api.Service, nodeNames []string) error { func (lbaas *LbaasV2) UpdateLoadBalancer(clusterName string, service *v1.Service, nodeNames []string) error {
loadBalancerName := cloudprovider.GetLoadBalancerName(service) loadBalancerName := cloudprovider.GetLoadBalancerName(service)
glog.V(4).Infof("UpdateLoadBalancer(%v, %v, %v)", clusterName, loadBalancerName, nodeNames) glog.V(4).Infof("UpdateLoadBalancer(%v, %v, %v)", clusterName, loadBalancerName, nodeNames)
@@ -1086,7 +1086,7 @@ func (lbaas *LbaasV2) UpdateLoadBalancer(clusterName string, service *api.Servic
return nil return nil
} }
func (lbaas *LbaasV2) EnsureLoadBalancerDeleted(clusterName string, service *api.Service) error { func (lbaas *LbaasV2) EnsureLoadBalancerDeleted(clusterName string, service *v1.Service) error {
loadBalancerName := cloudprovider.GetLoadBalancerName(service) loadBalancerName := cloudprovider.GetLoadBalancerName(service)
glog.V(4).Infof("EnsureLoadBalancerDeleted(%v, %v)", clusterName, loadBalancerName) glog.V(4).Infof("EnsureLoadBalancerDeleted(%v, %v)", clusterName, loadBalancerName)
@@ -1256,7 +1256,7 @@ func (lbaas *LbaasV2) EnsureLoadBalancerDeleted(clusterName string, service *api
return nil return nil
} }
func (lb *LbaasV1) GetLoadBalancer(clusterName string, service *api.Service) (*api.LoadBalancerStatus, bool, error) { func (lb *LbaasV1) GetLoadBalancer(clusterName string, service *v1.Service) (*v1.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 {
@@ -1266,8 +1266,8 @@ func (lb *LbaasV1) GetLoadBalancer(clusterName string, service *api.Service) (*a
return nil, false, err return nil, false, err
} }
status := &api.LoadBalancerStatus{} status := &v1.LoadBalancerStatus{}
status.Ingress = []api.LoadBalancerIngress{{IP: vip.Address}} status.Ingress = []v1.LoadBalancerIngress{{IP: vip.Address}}
return status, true, err return status, true, err
} }
@@ -1277,7 +1277,7 @@ func (lb *LbaasV1) GetLoadBalancer(clusterName string, service *api.Service) (*a
// 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(clusterName string, apiService *api.Service, nodeNames []string) (*api.LoadBalancerStatus, error) { func (lb *LbaasV1) EnsureLoadBalancer(clusterName string, apiService *v1.Service, nodeNames []string) (*v1.LoadBalancerStatus, error) {
glog.V(4).Infof("EnsureLoadBalancer(%v, %v, %v, %v, %v, %v, %v)", clusterName, apiService.Namespace, apiService.Name, apiService.Spec.LoadBalancerIP, apiService.Spec.Ports, nodeNames, 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, nodeNames, apiService.Annotations)
ports := apiService.Spec.Ports ports := apiService.Spec.Ports
@@ -1289,16 +1289,16 @@ func (lb *LbaasV1) EnsureLoadBalancer(clusterName string, apiService *api.Servic
// The service controller verified all the protocols match on the ports, just check and use the first one // The service controller verified all the protocols match on the ports, just check and use the first one
// TODO: Convert all error messages to use an event recorder // TODO: Convert all error messages to use an event recorder
if ports[0].Protocol != api.ProtocolTCP { if ports[0].Protocol != v1.ProtocolTCP {
return nil, fmt.Errorf("Only TCP LoadBalancer is supported for openstack load balancers") return nil, fmt.Errorf("Only TCP LoadBalancer is supported for openstack load balancers")
} }
affinity := apiService.Spec.SessionAffinity affinity := apiService.Spec.SessionAffinity
var persistence *vips.SessionPersistence var persistence *vips.SessionPersistence
switch affinity { switch affinity {
case api.ServiceAffinityNone: case v1.ServiceAffinityNone:
persistence = nil persistence = nil
case api.ServiceAffinityClientIP: case v1.ServiceAffinityClientIP:
persistence = &vips.SessionPersistence{Type: "SOURCE_IP"} persistence = &vips.SessionPersistence{Type: "SOURCE_IP"}
default: default:
return nil, fmt.Errorf("unsupported load balancer affinity: %v", affinity) return nil, fmt.Errorf("unsupported load balancer affinity: %v", affinity)
@@ -1405,9 +1405,9 @@ func (lb *LbaasV1) EnsureLoadBalancer(clusterName string, apiService *api.Servic
return nil, err return nil, err
} }
status := &api.LoadBalancerStatus{} status := &v1.LoadBalancerStatus{}
status.Ingress = []api.LoadBalancerIngress{{IP: vip.Address}} status.Ingress = []v1.LoadBalancerIngress{{IP: vip.Address}}
if lb.opts.FloatingNetworkId != "" { if lb.opts.FloatingNetworkId != "" {
floatIPOpts := floatingips.CreateOpts{ floatIPOpts := floatingips.CreateOpts{
@@ -1419,14 +1419,14 @@ func (lb *LbaasV1) EnsureLoadBalancer(clusterName string, apiService *api.Servic
return nil, err return nil, err
} }
status.Ingress = append(status.Ingress, api.LoadBalancerIngress{IP: floatIP.FloatingIP}) status.Ingress = append(status.Ingress, v1.LoadBalancerIngress{IP: floatIP.FloatingIP})
} }
return status, nil return status, nil
} }
func (lb *LbaasV1) UpdateLoadBalancer(clusterName string, service *api.Service, nodeNames []string) error { func (lb *LbaasV1) UpdateLoadBalancer(clusterName string, service *v1.Service, nodeNames []string) error {
loadBalancerName := cloudprovider.GetLoadBalancerName(service) loadBalancerName := cloudprovider.GetLoadBalancerName(service)
glog.V(4).Infof("UpdateLoadBalancer(%v, %v, %v)", clusterName, loadBalancerName, nodeNames) glog.V(4).Infof("UpdateLoadBalancer(%v, %v, %v)", clusterName, loadBalancerName, nodeNames)
@@ -1488,7 +1488,7 @@ func (lb *LbaasV1) UpdateLoadBalancer(clusterName string, service *api.Service,
return nil return nil
} }
func (lb *LbaasV1) EnsureLoadBalancerDeleted(clusterName string, service *api.Service) error { func (lb *LbaasV1) EnsureLoadBalancerDeleted(clusterName string, service *v1.Service) error {
loadBalancerName := cloudprovider.GetLoadBalancerName(service) loadBalancerName := cloudprovider.GetLoadBalancerName(service)
glog.V(4).Infof("EnsureLoadBalancerDeleted(%v, %v)", clusterName, loadBalancerName) glog.V(4).Infof("EnsureLoadBalancerDeleted(%v, %v)", clusterName, loadBalancerName)

View File

@@ -25,7 +25,7 @@ import (
"k8s.io/kubernetes/pkg/util/rand" "k8s.io/kubernetes/pkg/util/rand"
"github.com/rackspace/gophercloud" "github.com/rackspace/gophercloud"
"k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/api/v1"
) )
const volumeAvailableStatus = "available" const volumeAvailableStatus = "available"
@@ -226,7 +226,7 @@ func TestLoadBalancer(t *testing.T) {
t.Fatalf("LoadBalancer() returned false - perhaps your stack doesn't support Neutron?") t.Fatalf("LoadBalancer() returned false - perhaps your stack doesn't support Neutron?")
} }
_, exists, err := lb.GetLoadBalancer(testClusterName, &api.Service{ObjectMeta: api.ObjectMeta{Name: "noexist"}}) _, exists, err := lb.GetLoadBalancer(testClusterName, &v1.Service{ObjectMeta: v1.ObjectMeta{Name: "noexist"}})
if err != nil { if err != nil {
t.Fatalf("GetLoadBalancer(\"noexist\") returned error: %s", err) t.Fatalf("GetLoadBalancer(\"noexist\") returned error: %s", err)
} }

View File

@@ -31,7 +31,7 @@ import (
"gopkg.in/gcfg.v1" "gopkg.in/gcfg.v1"
"k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/api/v1"
"k8s.io/kubernetes/pkg/cloudprovider" "k8s.io/kubernetes/pkg/cloudprovider"
"k8s.io/kubernetes/pkg/types" "k8s.io/kubernetes/pkg/types"
) )
@@ -151,7 +151,7 @@ func (v *OVirtCloud) Routes() (cloudprovider.Routes, bool) {
} }
// NodeAddresses returns the NodeAddresses of the instance with the specified nodeName. // NodeAddresses returns the NodeAddresses of the instance with the specified nodeName.
func (v *OVirtCloud) NodeAddresses(nodeName types.NodeName) ([]api.NodeAddress, error) { func (v *OVirtCloud) NodeAddresses(nodeName types.NodeName) ([]v1.NodeAddress, error) {
name := mapNodeNameToInstanceName(nodeName) name := mapNodeNameToInstanceName(nodeName)
instance, err := v.fetchInstance(name) instance, err := v.fetchInstance(name)
if err != nil { if err != nil {
@@ -173,10 +173,10 @@ func (v *OVirtCloud) NodeAddresses(nodeName types.NodeName) ([]api.NodeAddress,
address = resolved[0] address = resolved[0]
} }
return []api.NodeAddress{ return []v1.NodeAddress{
{Type: api.NodeLegacyHostIP, Address: address.String()}, {Type: v1.NodeLegacyHostIP, Address: address.String()},
{Type: api.NodeInternalIP, Address: address.String()}, {Type: v1.NodeInternalIP, Address: address.String()},
{Type: api.NodeExternalIP, Address: address.String()}, {Type: v1.NodeExternalIP, Address: address.String()},
}, nil }, nil
} }

View File

@@ -26,16 +26,17 @@ package photon
import ( import (
"errors" "errors"
"fmt" "fmt"
"github.com/golang/glog"
"github.com/vmware/photon-controller-go-sdk/photon"
"gopkg.in/gcfg.v1"
"io" "io"
"k8s.io/kubernetes/pkg/api"
"k8s.io/kubernetes/pkg/cloudprovider"
k8stypes "k8s.io/kubernetes/pkg/types"
"log" "log"
"os/exec" "os/exec"
"strings" "strings"
"github.com/golang/glog"
"github.com/vmware/photon-controller-go-sdk/photon"
"gopkg.in/gcfg.v1"
"k8s.io/kubernetes/pkg/api/v1"
"k8s.io/kubernetes/pkg/cloudprovider"
k8stypes "k8s.io/kubernetes/pkg/types"
) )
const ( const (
@@ -284,8 +285,8 @@ func (pc *PCCloud) List(filter string) ([]k8stypes.NodeName, error) {
} }
// NodeAddresses is an implementation of Instances.NodeAddresses. // NodeAddresses is an implementation of Instances.NodeAddresses.
func (pc *PCCloud) NodeAddresses(nodeName k8stypes.NodeName) ([]api.NodeAddress, error) { func (pc *PCCloud) NodeAddresses(nodeName k8stypes.NodeName) ([]v1.NodeAddress, error) {
addrs := []api.NodeAddress{} addrs := []v1.NodeAddress{}
name := string(nodeName) name := string(nodeName)
var vmID string var vmID string
@@ -326,10 +327,10 @@ func (pc *PCCloud) NodeAddresses(nodeName k8stypes.NodeName) ([]api.NodeAddress,
if val, ok := network["ipAddress"]; ok && val != nil { if val, ok := network["ipAddress"]; ok && val != nil {
ipAddr := val.(string) ipAddr := val.(string)
if ipAddr != "-" { if ipAddr != "-" {
api.AddToNodeAddresses(&addrs, v1.AddToNodeAddresses(&addrs,
api.NodeAddress{ v1.NodeAddress{
// TODO: figure out the type of the IP // TODO: figure out the type of the IP
Type: api.NodeInternalIP, Type: v1.NodeInternalIP,
Address: ipAddr, Address: ipAddr,
}, },
) )

View File

@@ -40,7 +40,7 @@ import (
"github.com/rackspace/gophercloud/rackspace/compute/v2/servers" "github.com/rackspace/gophercloud/rackspace/compute/v2/servers"
"github.com/rackspace/gophercloud/rackspace/compute/v2/volumeattach" "github.com/rackspace/gophercloud/rackspace/compute/v2/volumeattach"
"k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/api/v1"
"k8s.io/kubernetes/pkg/cloudprovider" "k8s.io/kubernetes/pkg/cloudprovider"
"k8s.io/kubernetes/pkg/types" "k8s.io/kubernetes/pkg/types"
) )
@@ -397,7 +397,7 @@ func getAddressByName(api *gophercloud.ServiceClient, name string) (string, erro
return getAddressByServer(srv) return getAddressByServer(srv)
} }
func (i *Instances) NodeAddresses(nodeName types.NodeName) ([]api.NodeAddress, error) { func (i *Instances) NodeAddresses(nodeName types.NodeName) ([]v1.NodeAddress, error) {
glog.V(2).Infof("NodeAddresses(%v) called", nodeName) glog.V(2).Infof("NodeAddresses(%v) called", nodeName)
serverName := mapNodeNameToServerName(nodeName) serverName := mapNodeNameToServerName(nodeName)
ip, err := probeNodeAddress(i.compute, serverName) ip, err := probeNodeAddress(i.compute, serverName)
@@ -409,10 +409,10 @@ func (i *Instances) NodeAddresses(nodeName types.NodeName) ([]api.NodeAddress, e
// net.ParseIP().String() is to maintain compatibility with the old code // net.ParseIP().String() is to maintain compatibility with the old code
parsedIP := net.ParseIP(ip).String() parsedIP := net.ParseIP(ip).String()
return []api.NodeAddress{ return []v1.NodeAddress{
{Type: api.NodeLegacyHostIP, Address: parsedIP}, {Type: v1.NodeLegacyHostIP, Address: parsedIP},
{Type: api.NodeInternalIP, Address: parsedIP}, {Type: v1.NodeInternalIP, Address: parsedIP},
{Type: api.NodeExternalIP, Address: parsedIP}, {Type: v1.NodeExternalIP, Address: parsedIP},
}, nil }, nil
} }

View File

@@ -42,7 +42,7 @@ import (
"github.com/vmware/govmomi/vim25/types" "github.com/vmware/govmomi/vim25/types"
"golang.org/x/net/context" "golang.org/x/net/context"
"k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/api/v1"
"k8s.io/kubernetes/pkg/cloudprovider" "k8s.io/kubernetes/pkg/cloudprovider"
k8stypes "k8s.io/kubernetes/pkg/types" k8stypes "k8s.io/kubernetes/pkg/types"
k8runtime "k8s.io/kubernetes/pkg/util/runtime" k8runtime "k8s.io/kubernetes/pkg/util/runtime"
@@ -492,8 +492,8 @@ func (i *Instances) List(filter string) ([]k8stypes.NodeName, error) {
} }
// NodeAddresses is an implementation of Instances.NodeAddresses. // NodeAddresses is an implementation of Instances.NodeAddresses.
func (i *Instances) NodeAddresses(nodeName k8stypes.NodeName) ([]api.NodeAddress, error) { func (i *Instances) NodeAddresses(nodeName k8stypes.NodeName) ([]v1.NodeAddress, error) {
addrs := []api.NodeAddress{} addrs := []v1.NodeAddress{}
// Create context // Create context
ctx, cancel := context.WithCancel(context.Background()) ctx, cancel := context.WithCancel(context.Background())
@@ -512,15 +512,15 @@ func (i *Instances) NodeAddresses(nodeName k8stypes.NodeName) ([]api.NodeAddress
// retrieve VM's ip(s) // retrieve VM's ip(s)
for _, v := range mvm.Guest.Net { for _, v := range mvm.Guest.Net {
var addressType api.NodeAddressType var addressType v1.NodeAddressType
if i.cfg.Network.PublicNetwork == v.Network { if i.cfg.Network.PublicNetwork == v.Network {
addressType = api.NodeExternalIP addressType = v1.NodeExternalIP
} else { } else {
addressType = api.NodeInternalIP addressType = v1.NodeInternalIP
} }
for _, ip := range v.IpAddress { for _, ip := range v.IpAddress {
api.AddToNodeAddresses(&addrs, v1.AddToNodeAddresses(&addrs,
api.NodeAddress{ v1.NodeAddress{
Type: addressType, Type: addressType,
Address: ip, Address: ip,
}, },