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)
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)