def addOsFamilyIfNotFound(self, session, osFamilyInfo): familyName = osFamilyInfo.getName() familyVers = osFamilyInfo.getVersion() familyArch = osFamilyInfo.getArch() dbOsFamily = self._getOsFamily(session, osFamilyInfo) if dbOsFamily: return dbOsFamily # The 'root' entry is an exception since it doesn't have a # parent. Just add it... if familyName == 'root': dbOsFamily = self.__addOsFamilyRoot(session) else: # ... otherwise, check for the parent of the specified # and it's parent should be 'root' osFamilyInfoParent = OsFamilyInfo(familyName, familyVers) dbOsFamilyParent = self._getOsFamily( session, osFamilyInfoParent) if not dbOsFamilyParent: # Check for the root entry osFamilyInfoRoot = OsFamilyInfo('root') dbOsFamilyRoot = self._getOsFamily( session, osFamilyInfoRoot) if not dbOsFamilyRoot: dbOsFamilyRoot = self.__addOsFamilyRoot(session) dbOsFamilyParent = OperatingSystemsFamilies( name=familyName, version=familyVers) session.add(dbOsFamilyParent) dbOsFamilyRoot.children.append(dbOsFamilyParent) dbOsFamily = OperatingSystemsFamilies( name=familyName, version=familyVers, arch=familyArch) session.add(dbOsFamily) dbOsFamilyParent.children.append(dbOsFamily) return dbOsFamily
def getKickstartFile(self, node, hardwareprofile, softwareprofile): """ Generate kickstart file for specified node Raises: OsNotSupported """ osFamilyName = softwareprofile.os.family.name try: osSupportModule = __import__('tortuga.os.%s.osSupport' % (osFamilyName), fromlist=['OSSupport']) except ImportError: raise OsNotSupported('Operating system family [%s] not supported' % (osFamilyName)) OSSupport = osSupportModule.OSSupport tmpOsFamilyInfo = OsFamilyInfo(softwareprofile.os.family.name, softwareprofile.os.family.version, softwareprofile.os.family.arch) return OSSupport(tmpOsFamilyInfo).getKickstartFileContents( node, hardwareprofile, softwareprofile)
def _writeKickstartFile(self, session: Session, node: Node, hardwareprofile: HardwareProfile, softwareprofile: SoftwareProfile) -> None: """ Generate kickstart file for specified node Raises: OsNotSupported """ osFamilyName = softwareprofile.os.family.name try: osSupportModule = __import__('tortuga.os.%s.osSupport' % (osFamilyName), fromlist=['OSSupport']) except ImportError: raise OsNotSupported('Operating system family [%s] not supported' % (osFamilyName)) OSSupport = osSupportModule.OSSupport tmpOsFamilyInfo = OsFamilyInfo(softwareprofile.os.family.name, softwareprofile.os.family.version, softwareprofile.os.family.arch) contents = OSSupport(tmpOsFamilyInfo).getKickstartFileContents( session, node, hardwareprofile, softwareprofile) with open(self.__get_kickstart_file_path(node), 'w') as fp: fp.write(contents)
def _process_component_os(osNode, component): bIsOsFamily = not osNode.hasAttribute('name') osName = osNode.getAttribute('name') \ if not bIsOsFamily else osNode.getAttribute('family') osVersion = osNode.getAttribute('version') \ if osNode.hasAttribute('version') else None osArch = osNode.getAttribute('arch') \ if osNode.hasAttribute('arch') else None osFamilyInfo = None osInfo = None if bIsOsFamily: osFamilyInfo = OsFamilyInfo(osName, osVersion, osArch) component.addOsFamilyInfo(osFamilyInfo) else: osInfo = OsInfo(osName, osVersion, osArch) component.addOsInfo(osInfo) for pNode in osNode.getElementsByTagName('package'): component.addPackage(PackageFile(pNode.getAttribute('path'))) return osInfo or osFamilyInfo
def __get_ossupport(self, softwareprofile): OSSupport = self.__get_ossupport_module(softwareprofile.os.family.name) tmpOsFamilyInfo = OsFamilyInfo(softwareprofile.os.family.name, softwareprofile.os.family.version, softwareprofile.os.family.arch) return OSSupport(tmpOsFamilyInfo)
def test_validateNode(self): osFamilyInfo = OsFamilyInfo('rhel', '7', 'x86_64') osSupport = OSSupport(osFamilyInfo) node = Node() with pytest.raises(NodeNotFound): osSupport._OSSupport__validate_node(node)
def test_getPXEReinstallSnippet(self): osFamilyInfo = OsFamilyInfo('rhel', '7', 'x86_64') osSupport = OSSupport(osFamilyInfo) with self.dbm.session() as session: node = NodesDbHandler().getNode(session, 'compute-01.private') ks_url = 'http://ksurl' result = osSupport.getPXEReinstallSnippet(ks_url, node) assert result and ks_url in result
def get_component(self): """ Gets a Component instance for this component. :return: a Component instance """ component = Component(name=self.name, version=self.version) for os_spec in self.os_list: component.addOsFamilyInfo( OsFamilyInfo(name=os_spec['family'], version=os_spec['version'], arch=os_spec['arch'])) return component
def _getOsFamily(self, session: Session, osFamilyInfo: OsFamilyInfo) -> OperatingSystemFamily: \ # pylint: disable=no-self-use if osFamilyInfo.getName() and osFamilyInfo.getVersion() and \ osFamilyInfo.getArch(): osFamilyFilter = and_( OperatingSystemFamily.name == osFamilyInfo.getName(), OperatingSystemFamily.version == osFamilyInfo.getVersion(), OperatingSystemFamily.arch == osFamilyInfo.getArch()) elif osFamilyInfo.getName() and osFamilyInfo.getVersion(): osFamilyFilter = and_( OperatingSystemFamily.name == osFamilyInfo.getName(), OperatingSystemFamily.version == osFamilyInfo.getVersion(), OperatingSystemFamily.arch == None # noqa ) else: osFamilyFilter = and_( OperatingSystemFamily.name == osFamilyInfo.getName(), OperatingSystemFamily.version == None, # noqa OperatingSystemFamily.arch == None # noqa ) try: return session.query(OperatingSystemFamily).filter( osFamilyFilter).one() except NoResultFound: pass return None