From 88872068e53e3e0e7fd7f034f58f3dcf44f614d7 Mon Sep 17 00:00:00 2001 From: Felix Moehler Date: Wed, 14 Feb 2024 14:04:38 +0100 Subject: [PATCH] use octavia endpoint instead of neutron for lb activites --- .../openstack/loadbalancer_configurator.rb | 14 +++++++------- .../lib/cloud/openstack/openstack.rb | 18 ++++++++++++++++++ 2 files changed, 25 insertions(+), 7 deletions(-) diff --git a/src/bosh_openstack_cpi/lib/cloud/openstack/loadbalancer_configurator.rb b/src/bosh_openstack_cpi/lib/cloud/openstack/loadbalancer_configurator.rb index 027255b6..6dec0fb4 100644 --- a/src/bosh_openstack_cpi/lib/cloud/openstack/loadbalancer_configurator.rb +++ b/src/bosh_openstack_cpi/lib/cloud/openstack/loadbalancer_configurator.rb @@ -33,10 +33,10 @@ def create_membership(pool_id, ip, port, subnet_id) begin @logger.debug("Creating load balancer pool membership with pool id '#{pool_id}', ip '#{ip}', and port '#{port}'.") membership_id = retry_on_conflict_pending_update(pool_id) { - @openstack.network.create_lbaas_pool_member(pool_id, ip, port, subnet_id:).body['member']['id'] + @openstack.loadbalancer.create_lbaas_pool_member(pool_id, ip, port, subnet_id:).body['member']['id'] } rescue Excon::Error::Conflict => e - lbaas_pool_members = @openstack.with_openstack(retryable: true) { @openstack.network.list_lbaas_pool_members(pool_id) } + lbaas_pool_members = @openstack.with_openstack(retryable: true) { @openstack.loadbalancer.list_lbaas_pool_members(pool_id) } membership_id = lbaas_pool_members .body.fetch('members', []) @@ -76,7 +76,7 @@ def remove_vm_from_pool(pool_id, membership_id) begin @logger.debug("Deleting load balancer pool membership with pool id '#{pool_id}' and membership id '#{membership_id}'.") retry_on_conflict_pending_update(pool_id) { - @openstack.network.delete_lbaas_pool_member(pool_id, membership_id) + @openstack.loadbalancer.delete_lbaas_pool_member(pool_id, membership_id) } rescue Fog::OpenStack::Network::NotFound @logger.debug("Skipping deletion of load balancer pool membership. Member with pool_id '#{pool_id}' and membership_id '#{membership_id}' does not exist.") @@ -121,7 +121,7 @@ def retry_on_conflict_pending_update(pool_id) def loadbalancer_id(pool_id) pool_response = @openstack.with_openstack(retryable: true) do begin - @openstack.network.get_lbaas_pool(pool_id) + @openstack.loadbalancer.get_lbaas_pool(pool_id) rescue Fog::OpenStack::Network::NotFound => e raise LoadBalancerResource::NotFound, "Load balancer ID could not be determined because pool with ID '#{pool_id}' was not found. Reason: #{e.message}" end @@ -143,7 +143,7 @@ def retrieve_loadbalancers_via_listener(listeners, pool_id) raise LoadBalancerResource::NotSupportedConfiguration, "More than one listener is associated with load balancer pool '#{pool_id}'. It is not possible to verify the status of the load balancer responsible for the pool membership." end - listener_response = @openstack.with_openstack(retryable: true) { @openstack.network.get_lbaas_listener(listeners[0]['id']) } + listener_response = @openstack.with_openstack(retryable: true) { @openstack.loadbalancer.get_lbaas_listener(listeners[0]['id']) } listener_response.body['listener']['loadbalancers'] end @@ -189,7 +189,7 @@ def initialize(name, port, pool_id, membership_id) def openstack_pool_id(pool_name) pools = @openstack.with_openstack(retryable: true) { - @openstack.network.list_lbaas_pools('name' => pool_name).body['pools'] + @openstack.loadbalancer.list_lbaas_pools('name' => pool_name).body['pools'] } if pools.empty? @@ -214,7 +214,7 @@ def reload def provisioning_status @openstack.with_openstack(retryable: true) do - @openstack.network.get_lbaas_loadbalancer(@id).body['loadbalancer']['provisioning_status'] + @openstack..get_lbaas_loadbalancer(@id).body['loadbalancer']['provisioning_status'] end end diff --git a/src/bosh_openstack_cpi/lib/cloud/openstack/openstack.rb b/src/bosh_openstack_cpi/lib/cloud/openstack/openstack.rb index 6734466c..1c675a53 100644 --- a/src/bosh_openstack_cpi/lib/cloud/openstack/openstack.rb +++ b/src/bosh_openstack_cpi/lib/cloud/openstack/openstack.rb @@ -166,6 +166,24 @@ def network @network end + def loadbalancer + unless @loadbalancer + begin + Bosh::Common.retryable(@retry_options) do |tries, error| + @logger.error("Failed #{tries} times, last failure due to: #{error.inspect}") unless error.nil? + params_lb = @params.merge(:openstack_service_type => 'load-balancer') + @loadbalancer = Fog::OpenStack::Network.new(params_lb) + end + rescue Excon::Error::Socket => e + cloud_error(socket_error_msg + e.message.to_s) + rescue Bosh::Common::RetryCountExceeded, Excon::Error::Client, Excon::Error::Server, Fog::Errors::NotFound => e + cloud_error("Unable to connect to the OpenStack loadbalancer Service API: #{e.message}. Check task debug log for details.") + end + end + + @loadbalancer + end + ## # Waits for a resource to be on a target state #