Esempio n. 1
0
    def test_one_machine_with_only_interfaces(self):
        mac = "00:00:00:00:00:00"

        with self.smart.new_session() as session:
            uuid = "b7f5f93a-b029-475f-b3a4-479ba198cb8a"
            machine = Machine(uuid=uuid)
            session.add(machine)
            machine_id = session.query(Machine).filter(
                Machine.uuid == uuid).first().id
            session.add(
                MachineInterface(machine_id=machine_id,
                                 mac=mac,
                                 netmask=1,
                                 ipv4="10.10.10.10",
                                 cidrv4="127.0.0.1/8",
                                 as_boot=True,
                                 gateway="1.1.1.1",
                                 name="lol"))
            session.commit()

        expect = list()
        expect.append({
            'CIDR': '127.0.0.1/8',
            'LastReport': None,
            'UpdateStrategy': 'Disable',
            'LastChange': None,
            'MAC': '00:00:00:00:00:00',
            'UpToDate': None,
            'FQDN': None,
            'DiskProfile': 'inMemory',
            'LastState': None,
            'Roles': ''
        })
        ui = user_interface_repo.UserInterfaceRepository(self.smart)
        self.assertCountEqual(expect, ui.get_machines_overview())
Esempio n. 2
0
    def test_machine_exists_no_state(self):
        mac = "00:00:00:00:00:00"
        state = MachineStates.booting

        with self.smart.new_session() as session:
            uuid = "b7f5f93a-b029-475f-b3a4-479ba198cb8a"
            machine = Machine(uuid=uuid)
            session.add(machine)
            machine_id = session.query(Machine).filter(
                Machine.uuid == uuid).first().id
            session.add(
                MachineInterface(machine_id=machine_id,
                                 mac=mac,
                                 netmask=1,
                                 ipv4="10.10.10.10",
                                 cidrv4="127.0.0.1/8",
                                 as_boot=True,
                                 gateway="1.1.1.1",
                                 name="lol"))
            session.commit()

        msr = machine_state_repo.MachineStateRepository(self.smart)
        msr.update(mac, state)

        with self.smart.new_session() as session:
            res = session.query(MachineCurrentState).filter(
                MachineCurrentState.machine_mac == mac).first()
            self.assertEqual(mac, res.machine_mac)
            self.assertEqual(state, res.state_name)
            self.assertEqual(machine_id, res.machine_id)
Esempio n. 3
0
    def test_one_machine_full_scheduled_with_strategy_disable(self):
        mac = "00:00:00:00:00:00"

        with self.smart.new_session() as session:
            uuid = "b7f5f93a-b029-475f-b3a4-479ba198cb8a"
            machine = Machine(uuid=uuid)
            session.add(machine)
            machine_id = session.query(Machine).filter(
                Machine.uuid == uuid).first().id
            session.add(
                MachineInterface(machine_id=machine_id,
                                 mac=mac,
                                 netmask=1,
                                 ipv4="10.10.10.10",
                                 cidrv4="127.0.0.1/8",
                                 as_boot=True,
                                 gateway="1.1.1.1",
                                 name="lol"))
            session.add(
                MachineDisk(path="/dev/sda",
                            size=1024 * 1024 * 1024,
                            machine_id=machine_id))
            session.add(
                MachineCurrentState(machine_id=machine_id,
                                    machine_mac=mac,
                                    state_name=MachineStates.discovery))
            session.add(
                Schedule(machine_id=machine_id,
                         role=ScheduleRoles.kubernetes_control_plane))
            session.add(
                LifecycleRolling(machine_id=machine_id,
                                 strategy="kexec",
                                 enable=False))
            session.commit()

        expect = list()
        expect.append({
            'CIDR': '127.0.0.1/8',
            'LastReport': None,
            'UpdateStrategy': 'Disable',
            'LastChange': None,
            'MAC': '00:00:00:00:00:00',
            'UpToDate': None,
            'FQDN': None,
            'DiskProfile': 'S',
            'LastState': MachineStates.discovery,
            'Roles': ScheduleRoles.kubernetes_control_plane
        })
        ui = user_interface_repo.UserInterfaceRepository(self.smart)
        data = ui.get_machines_overview()
        self.assertCountEqual(expect, data)
    def test_one_machine_scheduled_cp(self):
        mac = "00:00:00:00:00:00"
        with self.smart.new_session() as session:
            uuid = "b7f5f93a-b029-475f-b3a4-479ba198cb8a"
            machine = Machine(uuid=uuid)
            session.add(machine)
            machine_id = session.query(Machine).filter(
                Machine.uuid == uuid).first().id
            session.add(
                MachineInterface(machine_id=machine_id,
                                 mac=mac,
                                 netmask=1,
                                 ipv4="10.10.10.10",
                                 cidrv4="127.0.0.1/8",
                                 as_boot=True,
                                 gateway="1.1.1.1",
                                 name="lol"))
            session.add(
                Schedule(machine_id=machine_id,
                         role=ScheduleRoles.etcd_member))
            session.add(
                Schedule(machine_id=machine_id,
                         role=ScheduleRoles.kubernetes_control_plane))
            session.commit()

        ms = ScheduleRepository(self.smart)
        ret = ms.get_available_machines()
        self.assertEqual(0, len(ret))

        ret = ms.get_roles_by_mac_selector(mac)
        self.assertEqual([
            ScheduleRoles.etcd_member, ScheduleRoles.kubernetes_control_plane
        ], ret)

        ret = ms.get_machines_by_roles(ScheduleRoles.etcd_member,
                                       ScheduleRoles.kubernetes_control_plane)
        self.assertEqual(1, len(ret))

        ret = ms.get_machines_by_roles(ScheduleRoles.kubernetes_node)
        self.assertEqual(0, len(ret))

        ret = ms.get_machines_by_roles(ScheduleRoles.etcd_member)
        self.assertEqual(1, len(ret))

        ret = ms.get_machines_by_roles(ScheduleRoles.kubernetes_control_plane)
        self.assertEqual(1, len(ret))
Esempio n. 5
0
    def _insert_network(session: Session, machine: Machine,
                        discovery_data: dict):
        machine_interfaces = dict()
        for i in discovery_data["interfaces"]:
            if i["mac"]:
                machine_interface = MachineInterface(
                    mac=i["mac"],
                    name=i["name"],
                    netmask=i["netmask"],
                    ipv4=i["ipv4"],
                    cidrv4=i["cidrv4"],
                    as_boot=i["mac"] == discovery_data["boot-info"]["mac"],
                    gateway=i["gateway"],
                    fqdn=tools.get_verified_dns_query(i),
                    machine_id=machine.id)
                # track machine interfaces to get them after during the LLDP section
                machine_interfaces[machine_interface.name] = machine_interface
                session.add(machine_interface)

        session.flush()

        if discovery_data["lldp"]["is_file"] and discovery_data["lldp"][
                "data"]["interfaces"]:
            for lldp_interface in discovery_data["lldp"]["data"]["interfaces"]:
                chassis = session.query(Chassis) \
                    .filter(Chassis.name == lldp_interface["chassis"]["name"] and
                            Chassis.name == lldp_interface["chassis"]["id"]) \
                    .first()
                if not chassis:
                    chassis = Chassis(
                        name=lldp_interface["chassis"]["name"],
                        mac=lldp_interface["chassis"]["id"],
                    )
                session.add(chassis)
                session.flush()
                machine_interface_id = machine_interfaces[
                    lldp_interface["name"]].id
                session.add(
                    ChassisPort(
                        # TODO on some vendor it's not a MAC but a string like Ethernet1/22
                        mac=lldp_interface["port"]["id"],
                        machine_interface=machine_interface_id,
                        chassis_id=chassis.id))
    def test_one_machine_to_schedule(self):
        mac = "00:00:00:00:00:00"
        with self.smart.new_session() as session:
            uuid = "b7f5f93a-b029-475f-b3a4-479ba198cb8a"
            machine = Machine(uuid=uuid)
            session.add(machine)
            machine_id = session.query(Machine).filter(
                Machine.uuid == uuid).first().id
            session.add(
                MachineInterface(machine_id=machine_id,
                                 mac=mac,
                                 netmask=1,
                                 ipv4="10.10.10.10",
                                 cidrv4="127.0.0.1/8",
                                 as_boot=True,
                                 gateway="1.1.1.1",
                                 name="lol"))

            session.commit()

        ms = ScheduleRepository(self.smart)
        data = {
            "roles": ["kubernetes-control-plane", "etcd-member"],
            "selector": {
                "mac": mac
            }
        }
        s = ms.get_all_schedules()
        self.assertEqual(0, len(s))

        ms.create_schedule(data)
        ms.create_schedule(data)
        s = ms.get_all_schedules()
        self.assertEqual(1, len(s))

        s = ms.get_machines_by_roles(
            *["kubernetes-control-plane", "etcd-member"])
        self.assertEqual(1, len(s))

        s = ms.get_machines_by_roles("kubernetes-control-plane")
        self.assertEqual(1, len(s))
    def test_one_machine(self):
        mac = "00:00:00:00:00:00"
        with self.smart.new_session() as session:
            uuid = "b7f5f93a-b029-475f-b3a4-479ba198cb8a"
            machine = Machine(uuid=uuid)
            session.add(machine)
            machine_id = session.query(Machine).filter(
                Machine.uuid == uuid).first().id
            session.add(
                MachineInterface(machine_id=machine_id,
                                 mac=mac,
                                 netmask=1,
                                 ipv4="10.10.10.10",
                                 cidrv4="127.0.0.1/8",
                                 as_boot=True,
                                 gateway="1.1.1.1",
                                 name="lol"))
            session.commit()

        ms = ScheduleRepository(self.smart)
        ret = ms.get_available_machines()
        self.assertEqual(1, len(ret))