|
38 | 38 | from f5lbaasdriver.v2.bigip import plugin_rpc |
39 | 39 | # from neutron.api.v2 import attributes |
40 | 40 | from neutron_lib import constants as n_const |
41 | | -from time import time |
42 | 41 |
|
43 | 42 | LOG = logging.getLogger(__name__) |
44 | 43 |
|
@@ -754,56 +753,85 @@ def append_pools_monitors(context, loadbalancer, service): |
754 | 753 | @log_helpers.log_method_call |
755 | 754 | def create_bulk(self, context, members): |
756 | 755 | """Create members.""" |
757 | | - start_time = time() |
758 | 756 | subnets = [] |
759 | 757 | p_list = [] |
760 | 758 |
|
761 | | - LOG.info("inside create_bulk for members: %s" % members) |
| 759 | + LOG.info("create_bulk start for members: %s" % members) |
762 | 760 |
|
763 | 761 | if not members: |
764 | 762 | LOG.error("no members found in members. Just return.") |
765 | 763 | return |
766 | 764 |
|
| 765 | + driver = self.driver |
| 766 | + lb = members[0].pool.loadbalancer |
| 767 | + |
767 | 768 | for member in members: |
768 | 769 | 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 | + } |
776 | 774 |
|
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 |
779 | 778 | ) |
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) |
797 | 808 |
|
798 | 809 | api_dict = member.to_dict(pool=False) |
799 | 810 | subnets.append(member.subnet_id) |
800 | 811 |
|
801 | 812 | self._call_rpc(context, lb, member, api_dict, 'create_member', |
802 | 813 | multiple=True) |
803 | 814 |
|
| 815 | + LOG.info('p_list details: %s' % p_list) |
804 | 816 | 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"]) |
807 | 835 |
|
808 | 836 | LOG.info("create_bulk for members end.") |
809 | 837 |
|
|
0 commit comments