Exemplo n.º 1
0
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,
    }
Exemplo n.º 2
0
    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