Skip to content

Commit 3a7f84a

Browse files
committed
member bulk logic
1 parent fbc6b41 commit 3a7f84a

2 files changed

Lines changed: 70 additions & 31 deletions

File tree

f5lbaasdriver/v2/bigip/driver_v2.py

Lines changed: 59 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,6 @@
3838
from f5lbaasdriver.v2.bigip import plugin_rpc
3939
# from neutron.api.v2 import attributes
4040
from neutron_lib import constants as n_const
41-
from time import time
4241

4342
LOG = logging.getLogger(__name__)
4443

@@ -754,56 +753,85 @@ def append_pools_monitors(context, loadbalancer, service):
754753
@log_helpers.log_method_call
755754
def create_bulk(self, context, members):
756755
"""Create members."""
757-
start_time = time()
758756
subnets = []
759757
p_list = []
760758

761-
LOG.info("inside create_bulk for members: %s" % members)
759+
LOG.info("create_bulk start for members: %s" % members)
762760

763761
if not members:
764762
LOG.error("no members found in members. Just return.")
765763
return
766764

765+
driver = self.driver
766+
lb = members[0].pool.loadbalancer
767+
767768
for member in members:
768769
if member.subnet_id not in subnets:
769-
lb = member.pool.loadbalancer
770-
driver = self.driver
771-
subnet = driver.plugin.db._core_plugin.get_subnet(
772-
context, member.subnet_id
773-
)
774-
775-
LOG.info("time for subnet %.5f secs" % (time() - start_time))
770+
the_filter = {
771+
'device_owner': ['network:f5lbaasv2'],
772+
'fixed_ips': {'subnet_id': [member.subnet_id]}
773+
}
776774

777-
agent = self.driver.scheduler.schedule(
778-
self.driver.plugin, context, lb.id, self.driver.env
775+
LOG.debug('fetching ports details:')
776+
all_ports = driver.plugin.db._core_plugin.get_ports(
777+
context, the_filter
779778
)
780-
LOG.info("time for agent %.5f secs" % (time() - start_time))
781-
LOG.info(agent)
782-
783-
agent_host = agent['host']
784-
p = driver.plugin.db._core_plugin.create_port(context, {
785-
'port': {
786-
'tenant_id': subnet['tenant_id'],
787-
'network_id': subnet['network_id'],
788-
'mac_address': n_const.ATTR_NOT_SPECIFIED,
789-
'fixed_ips': n_const.ATTR_NOT_SPECIFIED,
790-
'device_id': member.id,
791-
'device_owner': 'network:f5lbaasv2',
792-
'admin_state_up': member.admin_state_up,
793-
'name': 'fake_pool_port_' + member.id,
794-
portbindings.HOST_ID: agent_host}})
795-
p_list.append(p)
796-
LOG.info('the port created here is: %s' % p)
779+
LOG.debug("all_ports details: %s" % all_ports)
780+
if len(all_ports) < 1:
781+
subnet = driver.plugin.db._core_plugin.get_subnet(
782+
context, member.subnet_id
783+
)
784+
785+
LOG.info("end getting subnet")
786+
787+
agent = self.driver.scheduler.schedule(
788+
self.driver.plugin, context, lb.id, self.driver.env
789+
)
790+
LOG.info("end scheduling agent")
791+
LOG.info(agent)
792+
793+
agent_host = agent['host']
794+
p = driver.plugin.db._core_plugin.create_port(context, {
795+
'port': {
796+
'tenant_id': subnet['tenant_id'],
797+
'network_id': subnet['network_id'],
798+
'mac_address': n_const.ATTR_NOT_SPECIFIED,
799+
'fixed_ips': n_const.ATTR_NOT_SPECIFIED,
800+
'device_id': member.id,
801+
'device_owner': 'network:f5lbaasv2',
802+
'admin_state_up': member.admin_state_up,
803+
portbindings.VNIC_TYPE: "baremetal",
804+
'name': 'fake_pool_port_' + member.id,
805+
portbindings.HOST_ID: agent_host}})
806+
p_list.append(p)
807+
LOG.info('the port created here is: %s' % p)
797808

798809
api_dict = member.to_dict(pool=False)
799810
subnets.append(member.subnet_id)
800811

801812
self._call_rpc(context, lb, member, api_dict, 'create_member',
802813
multiple=True)
803814

815+
LOG.info('p_list details: %s' % p_list)
804816
for port in p_list:
805-
LOG.info('p_list details: %s' % p_list)
806-
driver.plugin.db._core_plugin.delete_port(context, port["id"])
817+
port_subnet_id = port['fixed_ips'][0]['subnet_id']
818+
LOG.info(port_subnet_id)
819+
820+
filters = {
821+
'device_owner': ['network:f5lbaasv2'],
822+
'fixed_ips': {'subnet_id': [port_subnet_id]}
823+
}
824+
ports_from_subnet = driver.plugin.db._core_plugin.get_ports(
825+
context, filters
826+
)
827+
LOG.info("ports_from_subnet details: %s" % ports_from_subnet)
828+
829+
if len(ports_from_subnet) < 2:
830+
LOG.warn('Skip last port deletion process on purpose!')
831+
else:
832+
port_id_to_del = port.get('id')
833+
LOG.info('XXXXXX delete port: %s' % port_id_to_del)
834+
driver.plugin.db._core_plugin.delete_port(context, port["id"])
807835

808836
LOG.info("create_bulk for members end.")
809837

f5lbaasdriver/v2/bigip/service_builder.py

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -625,7 +625,11 @@ def get_db_members():
625625
for p1 in loadbalancer.pools:
626626
for p2 in pools:
627627
if p1.id == p2['id']:
628+
LOG.info('pool id here:')
629+
LOG.info(p1.id)
628630
members.extend([m for m in p1.members])
631+
LOG.info('members right here:')
632+
LOG.info(members)
629633
return members
630634
else:
631635
return self.plugin.db.get_pool_members(
@@ -634,7 +638,12 @@ def get_db_members():
634638
)
635639

636640
if pools:
641+
# TODO(niklaus): might have to modify if SY don't.
642+
# in that case seems we have to fetch them
643+
# using db.get_pool_members, which is not desired.
637644
members = get_db_members()
645+
LOG.info('these are the members:')
646+
LOG.info(members)
638647

639648
for member in members:
640649
# Get extended member attributes, network, and subnet.
@@ -665,6 +674,8 @@ def _pool_to_dict(self, pool):
665674
session_persistence=False)
666675

667676
pool_dict['members'] = [{'id': member.id} for member in pool.members]
677+
LOG.info('the members of pool_dict here is:')
678+
LOG.info(pool_dict['members'])
668679
pool_dict['l7_policies'] = [{'id': l7_policy.id}
669680
for l7_policy in pool.l7_policies]
670681
if pool.session_persistence:

0 commit comments

Comments
 (0)