Ejemplo n.º 1
0
    def _get_amphorae_network_config(self, context, loadbalancer_dict,
                                     loadbalancer_o_obj):
        loadbalancer_n_obj = n_data_models.LoadBalancer.from_dict(
            copy.deepcopy(loadbalancer_dict))

        amphorae_network_config = {}

        for amp in loadbalancer_o_obj.amphorae:
            if amp.status != constants.DELETED:
                # Get vip_subnet
                vip_subnet = None
                for subnet_dict in context['service_info']['subnets']:
                    if subnet_dict['id'] == loadbalancer_n_obj.vip_subnet_id:
                        vip_subnet = n_data_models.Subnet.from_dict(
                            copy.deepcopy(subnet_dict))
                        break
                if vip_subnet is None:
                    raise exceptions.IncompleteData(
                        "VIP subnet information is not found")

                sc_metadata = ast.literal_eval(
                    loadbalancer_dict['description'])
                vrrp_port = n_data_models.Port(
                    mac_address=sc_metadata['provider_interface_mac'])
                if vrrp_port is None:
                    raise exceptions.IncompleteData(
                        "VRRP port information is not found")

                amphorae_network_config[amp.id] = \
                    network_data_models.AmphoraNetworkConfig(
                        amphora=amp,
                        vip_subnet=vip_subnet,
                        vrrp_port=vrrp_port)

        return amphorae_network_config
 def setUp(self):
     super(TestNoopAmphoraLoadBalancerDriver, self).setUp()
     self.driver = driver.NoopAmphoraLoadBalancerDriver()
     self.listener = data_models.Listener()
     self.listener.id = uuidutils.generate_uuid()
     self.listener.protocol_port = 80
     self.vip = data_models.Vip()
     self.vip.ip_address = "10.0.0.1"
     self.amphora = data_models.Amphora()
     self.amphora.id = self.FAKE_UUID_1
     self.load_balancer = data_models.LoadBalancer(
         id=FAKE_UUID_1,
         amphorae=[self.amphora],
         vip=self.vip,
         listeners=[self.listener])
     self.listener.load_balancer = self.load_balancer
     self.network = network_models.Network(id=self.FAKE_UUID_1)
     self.port = network_models.Port(id=uuidutils.generate_uuid())
     self.amphorae_net_configs = {
         self.amphora.id:
         network_models.AmphoraNetworkConfig(
             amphora=self.amphora,
             vip_subnet=network_models.Subnet(id=self.FAKE_UUID_1))
     }
     self.pem_file = 'test_pem_file'
     self.agent_config = 'test agent config'
     self.timeout_dict = {
         constants.REQ_CONN_TIMEOUT: 1,
         constants.REQ_READ_TIMEOUT: 2,
         constants.CONN_MAX_RETRIES: 3,
         constants.CONN_RETRY_INTERVAL: 4
     }
Ejemplo n.º 3
0
    def get_network_configs(self, loadbalancer):
        vip_subnet = self.get_subnet(loadbalancer.vip.subnet_id)
        vip_port = self.get_port(loadbalancer.vip.port_id)
        amp_configs = {}
        for amp in loadbalancer.amphorae:
            if amp.status != constants.DELETED:
                LOG.debug("Retrieving network details for amphora %s", amp.id)
                vrrp_port = self.get_port(amp.vrrp_port_id)
                vrrp_subnet = self.get_subnet(
                    vrrp_port.get_subnet_id(amp.vrrp_ip))
                vrrp_port.network = self.get_network(vrrp_port.network_id)
                ha_port = self.get_port(amp.ha_port_id)
                ha_subnet = self.get_subnet(
                    ha_port.get_subnet_id(amp.ha_ip))

                amp_configs[amp.id] = n_data_models.AmphoraNetworkConfig(
                    amphora=amp,
                    vip_subnet=vip_subnet,
                    vip_port=vip_port,
                    vrrp_subnet=vrrp_subnet,
                    vrrp_port=vrrp_port,
                    ha_subnet=ha_subnet,
                    ha_port=ha_port
                )
        return amp_configs
Ejemplo n.º 4
0
 def _get_amp_net_configs(self, amp, amp_configs, vip_subnet, vip_port):
     vrrp_port = self.get_port(amp.vrrp_port_id)
     ha_port = self.get_port(amp.ha_port_id)
     amp_configs[amp.id] = network_models.AmphoraNetworkConfig(
         amphora=amp,
         vrrp_subnet=self.get_subnet(vrrp_port.get_subnet_id(amp.vrrp_ip)),
         vrrp_port=vrrp_port,
         ha_subnet=self.get_subnet(ha_port.get_subnet_id(amp.ha_ip)),
         ha_port=ha_port)
Ejemplo n.º 5
0
 def test_post_vip_plug(self, exec_command):
     amps = [data_models.Amphora(id=MOCK_AMP_ID, compute_id=MOCK_COMPUTE_ID,
                                 lb_network_ip=MOCK_IP_ADDRESS)]
     vip = data_models.Vip(ip_address=MOCK_IP_ADDRESS)
     lb = data_models.LoadBalancer(amphorae=amps, vip=vip)
     vip_subnet = network_models.Subnet(id=MOCK_SUBNET_ID,
                                        gateway_ip=MOCK_IP_ADDRESS,
                                        cidr=MOCK_CIDR)
     vip_port = network_models.Port(id=MOCK_PORT_ID,
                                    device_id=MOCK_COMPUTE_ID)
     amphorae_net_config = {amps[0].id: network_models.AmphoraNetworkConfig(
         amphora=amps[0],
         vip_subnet=vip_subnet,
         vip_port=vip_port,
         vrrp_port=self.port
     )}
     iface = 'eth1'
     exec_command.return_value = ('{0}: '.format(iface), '')
     self.driver.post_vip_plug(lb, amphorae_net_config)
     grep_call = mock.call(
         ssh_driver.CMD_GREP_LINK_BY_MAC.format(mac_address='123'))
     dhclient_call = mock.call(ssh_driver.CMD_DHCLIENT.format(iface),
                               run_as_root=True)
     add_ip_call = mock.call(ssh_driver.CMD_ADD_IP_ADDR.format(
         MOCK_IP_ADDRESS, iface), run_as_root=True)
     show_ip_call = mock.call(ssh_driver.CMD_SHOW_IP_ADDR.format(iface))
     create_vip_table_call = mock.call(
         ssh_driver.CMD_CREATE_VIP_ROUTE_TABLE.format(
             ssh_driver.VIP_ROUTE_TABLE),
         run_as_root=True
     )
     add_route_call = mock.call(
         ssh_driver.CMD_ADD_ROUTE_TO_TABLE.format(
             MOCK_CIDR, iface, ssh_driver.VIP_ROUTE_TABLE),
         run_as_root=True
     )
     add_default_route_call = mock.call(
         ssh_driver.CMD_ADD_DEFAULT_ROUTE_TO_TABLE.format(
             MOCK_IP_ADDRESS, iface, ssh_driver.VIP_ROUTE_TABLE),
         run_as_root=True
     )
     add_rule_from_call = mock.call(
         ssh_driver.CMD_ADD_RULE_FROM_NET_TO_TABLE.format(
             MOCK_CIDR, ssh_driver.VIP_ROUTE_TABLE),
         run_as_root=True
     )
     add_rule_to_call = mock.call(
         ssh_driver.CMD_ADD_RULE_TO_NET_TO_TABLE.format(
             MOCK_CIDR, ssh_driver.VIP_ROUTE_TABLE),
         run_as_root=True
     )
     exec_command.assert_has_calls([grep_call, dhclient_call, add_ip_call,
                                    show_ip_call, create_vip_table_call,
                                    add_route_call, add_default_route_call,
                                    add_rule_from_call, add_rule_to_call])
     self.assertEqual(9, exec_command.call_count)
Ejemplo n.º 6
0
 def test_post_vip_plug_no_down_links(self, exec_command):
     amps = [data_models.Amphora(id=MOCK_AMP_ID, compute_id=MOCK_COMPUTE_ID,
                                 lb_network_ip=MOCK_IP_ADDRESS)]
     vip = data_models.Vip(ip_address=MOCK_IP_ADDRESS)
     lb = data_models.LoadBalancer(amphorae=amps, vip=vip)
     amphorae_net_config = {amps[0].id: network_models.AmphoraNetworkConfig(
         amphora=amps[0],
         vrrp_port=self.port
     )}
     exec_command.return_value = ('', '')
     self.driver.post_vip_plug(lb, amphorae_net_config)
     exec_command.assert_called_once_with(
         ssh_driver.CMD_GREP_LINK_BY_MAC.format(mac_address='123'))
Ejemplo n.º 7
0
    def get_network_configs(self, loadbalancer):
        vip_subnet = self.get_subnet(loadbalancer.vip.subnet_id)
        vip_port = self.get_port(loadbalancer.vip.port_id)
        amp_configs = {}
        for amp in loadbalancer.amphorae:
            if amp.status != constants.DELETED:
                LOG.debug("Retrieving network details for amphora %s", amp.id)
                auxiliary_port_id = (amp.frontend_port_id if
                                     loadbalancer.topology ==
                                     constants.TOPOLOGY_ACTIVE_ACTIVE else
                                     amp.vrrp_port_id)
                auxiliary_ip = (amp.frontend_ip if
                                loadbalancer.topology ==
                                constants.TOPOLOGY_ACTIVE_ACTIVE else
                                amp.vrrp_ip)
                auxiliary_port = self.get_port(auxiliary_port_id)
                auxiliary_subnet = self.get_subnet(
                    auxiliary_port.get_subnet_id(auxiliary_ip))
                auxiliary_port.network = self.get_network(
                    auxiliary_port.network_id)
                ha_port = self.get_port(amp.ha_port_id)
                ha_subnet = self.get_subnet(
                    ha_port.get_subnet_id(amp.ha_ip))

                if loadbalancer.topology == constants.TOPOLOGY_ACTIVE_ACTIVE:
                    vrrp_subnet = None
                    vrrp_port = None
                    frontend_subnet = auxiliary_subnet
                    frontend_port = auxiliary_port
                else:
                    vrrp_subnet = auxiliary_subnet
                    vrrp_port = auxiliary_port
                    frontend_subnet = None
                    frontend_port = None

                amp_configs[amp.id] = n_data_models.AmphoraNetworkConfig(
                    amphora=amp,
                    vip_subnet=vip_subnet,
                    vip_port=vip_port,
                    vrrp_subnet=vrrp_subnet,
                    vrrp_port=vrrp_port,
                    frontend_subnet=frontend_subnet,
                    frontend_port=frontend_port,
                    ha_subnet=ha_subnet,
                    ha_port=ha_port
                )
        return amp_configs
Ejemplo n.º 8
0
    def _get_amp_net_configs(self, amp, amp_configs, vip_subnet, vip_port):
        if amp.status != constants.DELETED:
            LOG.debug("Retrieving network details for amphora %s", amp.id)
            vrrp_port = self.get_port(amp.vrrp_port_id)
            vrrp_subnet = self.get_subnet(vrrp_port.get_subnet_id(amp.vrrp_ip))
            vrrp_port.network = self.get_network(vrrp_port.network_id)
            ha_port = self.get_port(amp.ha_port_id)
            ha_subnet = self.get_subnet(ha_port.get_subnet_id(amp.ha_ip))

            amp_configs[amp.id] = n_data_models.AmphoraNetworkConfig(
                amphora=amp,
                vip_subnet=vip_subnet,
                vip_port=vip_port,
                vrrp_subnet=vrrp_subnet,
                vrrp_port=vrrp_port,
                ha_subnet=ha_subnet,
                ha_port=ha_port)
Ejemplo n.º 9
0
    def get_network_configs(self, loadbalancer):
        LOG.debug("Network %s no-op, get_network_configs loadbalancer id %s ",
                  self.__class__.__name__, loadbalancer.id)
        self.networkconfigconfig[(loadbalancer.id)] = (loadbalancer,
                                                       'get_network_configs')

        amp_configs = {}
        for amp in loadbalancer.amphorae:
            vrrp_port = self.get_port(amp.vrrp_port_id)
            ha_port = self.get_port(amp.ha_port_id)
            amp_configs[amp.id] = network_models.AmphoraNetworkConfig(
                amphora=amp,
                vip_subnet=self.get_subnet(loadbalancer.vip.subnet_id),
                vip_port=self.get_port(loadbalancer.vip.port_id),
                vrrp_subnet=self.get_subnet(
                    vrrp_port.get_subnet_id(amp.vrrp_ip)),
                vrrp_port=vrrp_port,
                ha_subnet=self.get_subnet(ha_port.get_subnet_id(amp.ha_ip)),
                ha_port=ha_port)
        return amp_configs
 def setUp(self):
     super(TestNoopAmphoraLoadBalancerDriver, self).setUp()
     self.driver = driver.NoopAmphoraLoadBalancerDriver()
     self.listener = data_models.Listener()
     self.listener.protocol_port = 80
     self.vip = data_models.Vip()
     self.vip.ip_address = "10.0.0.1"
     self.amphora = data_models.Amphora()
     self.amphora.id = self.FAKE_UUID_1
     self.load_balancer = data_models.LoadBalancer(
         id=FAKE_UUID_1,
         amphorae=[self.amphora],
         vip=self.vip,
         listeners=[self.listener])
     self.network = network_models.Network(id=self.FAKE_UUID_1)
     self.port = network_models.Port(id=uuidutils.generate_uuid())
     self.amphorae_net_configs = {
         self.amphora.id:
         network_models.AmphoraNetworkConfig(
             amphora=self.amphora,
             vip_subnet=network_models.Subnet(id=self.FAKE_UUID_1))
     }