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