From 8fd21d67a89e0ccd94dd26a22a1a56b09b05c374 Mon Sep 17 00:00:00 2001 From: Davanum Srinivas Date: Wed, 19 Jul 2017 16:25:33 -0400 Subject: [PATCH] Don't fail fast if LoadBalancer section is missing We should allow scenarios where cinder can be used even if the operator does not want to use the openstack load balancer. So let's warn in the beginning if subnet-id is missing but fail only if they try to use the load balancer --- pkg/cloudprovider/providers/openstack/openstack.go | 3 ++- .../providers/openstack/openstack_loadbalancer.go | 12 ++++++++++++ .../providers/openstack/openstack_test.go | 2 +- 3 files changed, 15 insertions(+), 2 deletions(-) diff --git a/pkg/cloudprovider/providers/openstack/openstack.go b/pkg/cloudprovider/providers/openstack/openstack.go index 7f9ebc78049..7e3e85161ef 100644 --- a/pkg/cloudprovider/providers/openstack/openstack.go +++ b/pkg/cloudprovider/providers/openstack/openstack.go @@ -222,7 +222,8 @@ func checkOpenStackOpts(openstackOpts *OpenStack) error { // subnet-id is required if len(lbOpts.SubnetId) == 0 { - return fmt.Errorf("subnet-id not set in cloud provider config") + glog.Warningf("subnet-id not set in cloud provider config. " + + "OpenStack Load balancer will not work.") } // if need to create health monitor for Neutron LB, diff --git a/pkg/cloudprovider/providers/openstack/openstack_loadbalancer.go b/pkg/cloudprovider/providers/openstack/openstack_loadbalancer.go index d1d2f583aa2..722063bfe16 100644 --- a/pkg/cloudprovider/providers/openstack/openstack_loadbalancer.go +++ b/pkg/cloudprovider/providers/openstack/openstack_loadbalancer.go @@ -589,6 +589,10 @@ func nodeAddressForLB(node *v1.Node) (string, error) { func (lbaas *LbaasV2) EnsureLoadBalancer(clusterName string, apiService *v1.Service, nodes []*v1.Node) (*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, nodes, apiService.Annotations) + if len(lbaas.opts.SubnetId) == 0 { + return nil, fmt.Errorf("subnet-id not set in cloud provider config") + } + ports := apiService.Spec.Ports if len(ports) == 0 { return nil, fmt.Errorf("no ports provided to openstack load balancer") @@ -950,6 +954,10 @@ func (lbaas *LbaasV2) UpdateLoadBalancer(clusterName string, service *v1.Service loadBalancerName := cloudprovider.GetLoadBalancerName(service) glog.V(4).Infof("UpdateLoadBalancer(%v, %v, %v)", clusterName, loadBalancerName, nodes) + if len(lbaas.opts.SubnetId) == 0 { + return fmt.Errorf("subnet-id not set in cloud provider config") + } + ports := service.Spec.Ports if len(ports) == 0 { return fmt.Errorf("no ports provided to openstack load balancer") @@ -1225,6 +1233,10 @@ func (lb *LbaasV1) GetLoadBalancer(clusterName string, service *v1.Service) (*v1 func (lb *LbaasV1) EnsureLoadBalancer(clusterName string, apiService *v1.Service, nodes []*v1.Node) (*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, nodes, apiService.Annotations) + if len(lb.opts.SubnetId) == 0 { + return nil, fmt.Errorf("subnet-id not set in cloud provider config") + } + ports := apiService.Spec.Ports if len(ports) > 1 { return nil, fmt.Errorf("multiple ports are not supported in openstack v1 load balancers") diff --git a/pkg/cloudprovider/providers/openstack/openstack_test.go b/pkg/cloudprovider/providers/openstack/openstack_test.go index 1471cb262e9..d0422c172f7 100644 --- a/pkg/cloudprovider/providers/openstack/openstack_test.go +++ b/pkg/cloudprovider/providers/openstack/openstack_test.go @@ -188,7 +188,7 @@ func TestCheckOpenStackOpts(t *testing.T) { NodeSecurityGroupID: "b41d28c2-d02f-4e1e-8ffb-23b8e4f5c144", }, }, - expectedError: fmt.Errorf("subnet-id not set in cloud provider config"), + expectedError: nil, }, { name: "test3",