Exemple #1
0
    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
Exemple #2
0
    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)
Exemple #3
0
    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)
Exemple #4
0
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
Exemple #5
0
    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
Exemple #8
0
    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
Exemple #9
0
    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