Пример #1
0
    def test_yields_nothing(self):
        node1 = self.make_node()
        node1_address = factory.make_StaticIPAddress(
            interface=factory.make_Interface(node=node1))
        node2 = self.make_node()
        node2_address = factory.make_StaticIPAddress(  # noqa
            interface=factory.make_Interface(node=node2),
            subnet=node1_address.subnet)

        self.assertThat(get_peers_for(node1), IsEmptySet)
        self.assertThat(get_peers_for(node2), IsEmptySet)
Пример #2
0
    def test_yields_peer_addresses(self):
        node1 = self.make_node()
        node1_address = factory.make_StaticIPAddress(
            interface=factory.make_Interface(node=node1))
        node2 = self.make_node()
        node2_address = factory.make_StaticIPAddress(
            interface=factory.make_Interface(node=node2),
            subnet=node1_address.subnet)

        self.assertThat(get_peers_for(node1),
                        IsSetOfServers({node2_address.ip}))
        self.assertThat(get_peers_for(node2),
                        IsSetOfServers({node1_address.ip}))
Пример #3
0
    def test_prefers_closest_addresses(self):
        subnet4 = factory.make_Subnet(version=4)
        subnet6 = factory.make_Subnet(version=6)
        # Separate subnets but sharing the VLAN, hence routable.
        subnet4v1 = factory.make_Subnet(version=4, vlan=subnet4.vlan)
        subnet6v1 = factory.make_Subnet(version=6, vlan=subnet6.vlan)
        subnet4v2 = factory.make_Subnet(version=4, vlan=subnet4.vlan)
        subnet6v2 = factory.make_Subnet(version=6, vlan=subnet6.vlan)

        # Create a node with an address in the first two subnets and the first
        # two same-VLAN subnets.
        node1 = self.make_node()
        populate_node_with_addresses(
            node1, {subnet4, subnet6, subnet4v1, subnet6v1}
        )
        # Create a node with an address in the first two subnets and the
        # second two same-VLAN subnets.
        node2 = self.make_node()
        populate_node_with_addresses(
            node2, {subnet4, subnet6, subnet4v2, subnet6v2}
        )

        # The NTP server addresses chosen will be those that are "closest" to
        # the node, and same-subnet wins in this over same-VLAN. No additional
        # preference is made between IPv4 or IPv6, hence we allow for either.
        preferred_subnets = subnet4, subnet6
        preferred_networks = IPSet(
            subnet.get_ipnetwork() for subnet in preferred_subnets
        )

        for node in (node1, node2):
            peers = get_peers_for(node)
            self.assertThat(peers, Not(HasLength(0)))
            self.assertThat(preferred_networks, ContainsAll(peers))
Пример #4
0
    def _getConfiguration(self):
        """Return NTP server configuration.

        The configuration object returned is comparable with previous and
        subsequently obtained configuration objects, allowing this service to
        determine whether a change needs to be applied to the NTP server.
        """
        try:
            this_region = RegionController.objects.get_running_controller()
        except RegionController.DoesNotExist:
            # Treat this as a transient error.
            references = ntp.get_servers_for(None)
            peers = ntp.get_peers_for(None)
        else:
            references = ntp.get_servers_for(this_region)
            peers = ntp.get_peers_for(this_region)

        return _Configuration(references, peers)
Пример #5
0
def get_time_configuration(system_id):
    """Get settings to use for configuring NTP for the given node.

    :param system_id: system_id of node.
    :return: See `GetTimeConfiguration`.
    """
    try:
        node = Node.objects.get(system_id=system_id)
    except Node.DoesNotExist:
        raise NoSuchNode.from_system_id(system_id)
    else:
        return {
            "servers": ntp.get_servers_for(node),
            "peers": ntp.get_peers_for(node),
        }
Пример #6
0
 def test_yields_nothing(self):
     self.assertThat(get_peers_for(None), IsEmptySet)