def build_config(config): """ Determines the configuration of the metadata service. :type config: astara_router.models.Configuration :param config: :rtype: astara_router.models.Configuration """ network_data = {} for net in config.networks: if not net.is_tenant_network: continue ip_instance_map = {} for a in net.address_allocations: for ip in a.ip_addresses: ip_instance_map[ip] = a.device_id network_data[net.id] = { 'listen_port': internal_metadata_port(net.interface.ifname), 'ip_instance_map': ip_instance_map } return { 'tenant_id': config.tenant_id, 'orchestrator_metadata_address': config.metadata_address, 'orchestrator_metadata_port': config.metadata_port, 'networks': network_data, }
def _build_v4_nat(self, config): rules = [] for network in self.get_internal_networks(config): if network.interface.first_v4: # Forward metadata requests on the management interface rules.append(Rule( '-A PREROUTING -i %s -d %s -p tcp -m tcp ' '--dport %s -j DNAT --to-destination %s:%s' % ( network.interface.ifname, defaults.METADATA_DEST_ADDRESS, defaults.HTTP, network.interface.first_v4, defaults.internal_metadata_port( network.interface.ifname ) ), ip_version=4 )) # Add a masquerade catch-all for VMs without floating IPs ext_if = self.get_external_network(config).interface rules.append(Rule( '-A POSTROUTING -o %s -j MASQUERADE' % ( ext_if.ifname ), ip_version=4 )) return rules