def get_corosync_autoconfig():
    """
    Automatically detect the configuration for corosync.
    :return: dictionary containing 'result' or 'error'.
    """
    ring0 = get_ring0()

    if not ring0:
        return agent_error('Failed to detect ring0 interface')

    ring1_ipaddr, ring1_prefix = generate_ring1_network(ring0)

    try:
        ring1 = detect_ring1(ring0, ring1_ipaddr, ring1_prefix)
    except RingDetectionError as e:
        return agent_error(e.message)

    return agent_result({
        'interfaces': {
            ring0.name: {
                'dedicated': False,
                'ipaddr': ring0.ipv4_address,
                'prefix': ring0.ipv4_prefixlen
            },
            ring1.name: {
                'dedicated': True,
                'ipaddr': ring1.ipv4_address,
                'prefix': ring1.ipv4_prefixlen
            }
        },
        'mcast_port': ring1.mcastport
    })
def get_corosync_autoconfig():
    """
    Automatically detect the configuration for corosync.
    :return: dictionary containing 'result' or 'error'.
    """
    ring0 = get_ring0()

    if not ring0:
        return agent_error("Failed to detect ring0 interface")

    ring1_ipaddr, ring1_prefix = generate_ring1_network(ring0)

    try:
        ring1 = detect_ring1(ring0, ring1_ipaddr, ring1_prefix)
    except RingDetectionError as e:
        return agent_error(e.message)

    return agent_result({
        "interfaces": {
            ring0.name: {
                "dedicated": False,
                "ipaddr": ring0.ipv4_address,
                "prefix": ring0.ipv4_prefixlen,
            },
            ring1.name: {
                "dedicated": True,
                "ipaddr": ring1.ipv4_address,
                "prefix": ring1.ipv4_prefixlen,
            },
        },
        "mcast_port": ring1.mcastport,
    })
Beispiel #3
0
    def test_failed_has_link(self):
        self.link_patcher.stop()

        mock.patch(
            'chroma_agent.lib.corosync.CorosyncRingInterface.__getattr__',
            return_value=False).start()

        import errno

        def boom(*args):
            # EMULTIHOP is what gets raised with IB interfaces
            raise IOError(errno.EMULTIHOP)

        mock.patch('fcntl.ioctl', side_effect=boom).start()

        from chroma_agent.lib.corosync import get_ring0
        iface = get_ring0()

        # add shell commands to be expected
        self.add_commands(
            CommandCaptureCommand(
                ('/sbin/ip', 'link', 'set', 'dev', iface.name, 'up')),
            CommandCaptureCommand(
                ('/sbin/ip', 'link', 'set', 'dev', iface.name, 'down')))

        self.assertFalse(iface.has_link)

        self.assertRanAllCommandsInOrder()
    def test_link_state_unknown(self):
        with mock.patch("__builtin__.open",
                        mock.mock_open(read_data="unknown")):
            with mock.patch(
                    "chroma_agent.lib.corosync.CorosyncRingInterface.__getattr__",
                    return_value=False,
            ):
                with mock.patch("os.path.exists", return_value=True):
                    self.link_patcher.stop()

                    from chroma_agent.lib.corosync import get_ring0

                    iface = get_ring0()

                    # add shell commands to be expected
                    self.add_commands(
                        CommandCaptureCommand(("/sbin/ip", "link", "set",
                                               "dev", iface.name, "up")),
                        CommandCaptureCommand(("/sbin/ip", "link", "set",
                                               "dev", iface.name, "down")),
                    )

                    self.assertFalse(iface.has_link)

                    self.assertRanAllCommandsInOrder()