示例#1
0
    def test_one_machine_scheduled_cp(self):
        mac = "00:00:00:00:00:00"
        with session_commit(sess_maker=self.sess_maker) 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 = MachineScheduleRepository(sess_maker=self.sess_maker)
        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))
    def test_one_machine_full_scheduled_with_strategy_disable(self):
        mac = "00:00:00:00:00:00"

        with session_commit(sess_maker=self.sess_maker) 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.UserInterfaceRepository(sess_maker=self.sess_maker)
        data = ui.get_machines_overview()
        self.assertCountEqual(expect, data)
示例#3
0
    def create_schedule(self, schedule_data: dict):
        schedule_data = self._lint_schedule_data(schedule_data)

        with session_commit(sess_maker=self.__sess_maker) as session:
            machine = session.query(Machine) \
                .join(MachineInterface) \
                .options(joinedload("schedules")) \
                .filter(MachineInterface.mac == schedule_data["selector"]["mac"]) \
                .first()

            if not machine:
                logger.error("machine mac %s not in db",
                             schedule_data["selector"]["mac"])
            else:
                machine_already_scheduled = [s.role for s in machine.schedules]
                for role in schedule_data["roles"]:
                    if role in machine_already_scheduled:
                        logger.info(
                            "machine mac %s already scheduled with role %s",
                            schedule_data["selector"]["mac"], role)
                        continue
                    session.add(Schedule(machine_id=machine.id, role=role))
                    logger.info("scheduling machine mac %s as role %s",
                                schedule_data["selector"]["mac"], role)