Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 11 additions & 1 deletion etc/neutron/services/f5/f5-openstack-agent.ini
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,8 @@
#
[DEFAULT]
# Show debugging output in log (sets DEBUG log level output).
debug = True
debug = False

# The LBaaS agent will resync its state with Neutron to recover from any
# transient notification or rpc errors. The interval is number of
# seconds between attempts.
Expand Down Expand Up @@ -433,6 +434,15 @@ f5_snat_mode = True
# f5_global_routed_mode = True.
#
f5_snat_addresses_per_subnet = 1

# Currently this provider_name use to distinguish different
# snat pool addresses for different listeners which
# are in different providers and within the same subnet.
# (Note)
# This value must be configured with different values among
# different neutron lbaasv2 providers.
provider_name = 'f5networks'

#
# This setting will cause all networks to be
# defined under the common partition on the
Expand Down
5 changes: 5 additions & 0 deletions f5_openstack_agent/lbaasv2/drivers/bigip/agent_manager.py
Original file line number Diff line number Diff line change
Expand Up @@ -83,6 +83,11 @@
default=1,
help=('Interface and VLAN for the VTEP overlay network')
),
cfg.StrOpt(
'provider_name',
default='f5networks',
help=('provider_name for snat pool addresses')
),
cfg.StrOpt(
'agent_id',
default=None,
Expand Down
12 changes: 12 additions & 0 deletions f5_openstack_agent/lbaasv2/drivers/bigip/icontrol_driver.py
Original file line number Diff line number Diff line change
Expand Up @@ -1609,6 +1609,10 @@ def delete_member(self, member, service):
def create_health_monitor(self, health_monitor, service):
"""Create pool health monitor."""
LOG.debug("Creating health monitor")
monitors = service.get("healthmonitors", list())
for mn in monitors:
if mn.get("name") == "diameter":
mn["type"] = "DIAMETER"
return self._common_service_handler(service)

@serialized('update_health_monitor')
Expand All @@ -1617,13 +1621,21 @@ def update_health_monitor(self, old_health_monitor,
health_monitor, service):
"""Update pool health monitor."""
LOG.debug("Updating health monitor")
monitors = service.get("healthmonitors", list())
for mn in monitors:
if mn.get("name") == "diameter":
mn["type"] = "DIAMETER"
return self._common_service_handler(service)

@serialized('delete_health_monitor')
@is_operational
def delete_health_monitor(self, health_monitor, service):
"""Delete pool health monitor."""
LOG.debug("Deleting health monitor")
monitors = service.get("healthmonitors", list())
for mn in monitors:
if mn.get("name") == "diameter":
mn["type"] = "DIAMETER"
return self._common_service_handler(service)

@is_operational
Expand Down
33 changes: 32 additions & 1 deletion f5_openstack_agent/lbaasv2/drivers/bigip/lbaas_builder.py
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,9 @@ def init_esd(self, esd):
def is_esd(self, esd):
return self.esd.is_esd(esd)

def is_bwc(self, desc):
return desc.startswith("vip_bwc_policy:")

def assure_service(self, service, traffic_group, all_subnet_hints):
"""Assure that a service is configured on the BIGIP."""
start_time = time()
Expand Down Expand Up @@ -441,6 +444,33 @@ def _assure_l7policies_created(self, service):
for l7policy in l7policies:
LOG.debug("L7 debug: assuring policy: %s", l7policy)
name = l7policy.get('name', None)

desc = l7policy.get('description', None)
position = l7policy.get('position', 1)
if self.is_bwc(desc) and 'listeners' in service:
# Parse bwc policy name from L7 policy description
bwc = desc[15:]
for listener in service['listeners']:
if listener['id'] == l7policy['listener_id']:
policy_state = l7policy.get('provisioning_status')
bwc_position = listener.get('bwcPosition', None)
if policy_state == "PENDING_CREATE" or \
policy_state == "ACTIVE":
# Only bwc l7 policy with the highest priority
# can take effect. Skip rest of bwc l7 policies
# of the same listener
if not bwc_position or bwc_position > position:
LOG.debug('Add bwc policy %s to listener %s',
bwc, listener['id'])
listener['bwcPosition'] = position
listener['bwcPolicy'] = "/Common/" + bwc
if policy_state == "PENDING_DELETE" and \
'bwcPolicy' not in listener:
LOG.debug('Remove bwc policy %s from listener %s',
bwc, listener['id'])
listener['bwcPolicy'] = None
continue

if not self.esd.is_esd(name):
listener_id = l7policy.get('listener_id', None)
if not listener_id or listener_id in listener_policy_map:
Expand Down Expand Up @@ -488,7 +518,8 @@ def _assure_l7policies_deleted(self, service):
l7policies = service['l7policies']
for l7policy in l7policies:
name = l7policy.get('name', None)
if not self.esd.is_esd(name):
desc = l7policy.get('description', None)
if not self.esd.is_esd(name) and not self.is_bwc(desc):
listener_id = l7policy.get('listener_id', None)
if not listener_id or listener_id in listener_policy_map:
continue
Expand Down
9 changes: 6 additions & 3 deletions f5_openstack_agent/lbaasv2/drivers/bigip/network_service.py
Original file line number Diff line number Diff line change
Expand Up @@ -595,7 +595,9 @@ def _assure_subnet_snats(self, assure_bigips, service, subnetinfo):
subnet['id'])
if len(assure_bigips):
snat_addrs = self.bigip_snat_manager.get_snat_addrs(
subnetinfo, tenant_id, snats_per_subnet, lb_id)
subnetinfo, tenant_id, snats_per_subnet, lb_id,
self.conf.provider_name
)

if len(snat_addrs) != snats_per_subnet:
raise f5_ex.SNATCreationException(
Expand All @@ -604,7 +606,8 @@ def _assure_subnet_snats(self, assure_bigips, service, subnetinfo):
(snats_per_subnet, len(snat_addrs)))
for assure_bigip in assure_bigips:
self.bigip_snat_manager.assure_bigip_snats(
assure_bigip, subnetinfo, snat_addrs, tenant_id)
assure_bigip, subnetinfo, snat_addrs,
tenant_id, self.conf.provider_name)

def _allocate_gw_addr(self, subnetinfo):
# Create a name for the port and for the IP Forwarding
Expand Down Expand Up @@ -748,7 +751,7 @@ def _assure_delete_nets_shared(self, bigip, service, subnet_hints):
deleted_names.add(gw_name)
my_deleted_names, my_in_use_subnets = \
self.bigip_snat_manager.delete_bigip_snats(
bigip, subnetinfo, tenant_id)
bigip, subnetinfo, tenant_id, self.conf.provider_name)
deleted_names = deleted_names.union(my_deleted_names)
for in_use_subnetid in my_in_use_subnets:
subnet_hints['check_for_delete_subnets'].pop(
Expand Down
4 changes: 4 additions & 0 deletions f5_openstack_agent/lbaasv2/drivers/bigip/pool_service.py
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,8 @@ def __init__(self, service_adapter):
resource_helper.ResourceType.udp_monitor)
self.sip_mon_helper = resource_helper.BigIPResourceHelper(
resource_helper.ResourceType.sip_monitor)
self.diameter_mon_helper = resource_helper.BigIPResourceHelper(
resource_helper.ResourceType.diameter_monitor)
self.ping_mon_helper = resource_helper.BigIPResourceHelper(
resource_helper.ResourceType.ping_monitor)
self.pool_helper = resource_helper.BigIPResourceHelper(
Expand Down Expand Up @@ -252,6 +254,8 @@ def _get_monitor_helper(self, service):
hm = self.udp_mon_helper
elif monitor_type == "SIP":
hm = self.sip_mon_helper
elif monitor_type == "DIAMETER":
hm = self.diameter_mon_helper
else:
hm = self.http_mon_helper
return hm
Expand Down
3 changes: 3 additions & 0 deletions f5_openstack_agent/lbaasv2/drivers/bigip/resource_helper.py
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,7 @@ class ResourceType(Enum):
oneconnect = 37
udp_monitor = 38
sip_monitor = 39
diameter_monitor = 40


class BigIPResourceHelper(object):
Expand Down Expand Up @@ -211,6 +212,8 @@ def _resource(self, bigip):
lambda bigip: bigip.tm.ltm.monitor.udps.udp,
ResourceType.sip_monitor:
lambda bigip: bigip.tm.ltm.monitor.sips.sip,
ResourceType.diameter_monitor:
lambda bigip: bigip.tm.ltm.monitor.diameters.diameter,
ResourceType.ping_monitor:
lambda bigip: bigip.tm.ltm.monitor.gateway_icmps.gateway_icmp,
ResourceType.node: lambda bigip: bigip.tm.ltm.nodes.node,
Expand Down
9 changes: 7 additions & 2 deletions f5_openstack_agent/lbaasv2/drivers/bigip/selfips.py
Original file line number Diff line number Diff line change
Expand Up @@ -71,8 +71,13 @@ def _create_bigip_selfip(self, bigip, model):
err.message))
raise f5_ex.SelfIPCreationException("selfip")
else:
LOG.exception("selfip creation error: %s(%s)" %
(err.message, err.response.status_code))
# here may post 400
LOG.error("selfip creation error message: %s" %
err.message)
LOG.error("selfip creation error status: %s" %
err.reponse.status_code)
LOG.error("selfip creation error text: %s" %
err.response.text)
raise
except Exception as err:
LOG.error("Failed to create selfip")
Expand Down
Loading