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 }
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
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)
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)
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'))
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
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)
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)) }