Esempio n. 1
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
Esempio n. 2
0
    def getEnabledComponentList(self, session: Session,
                                name: str) -> TortugaObjectList:
        """
        Get a list of enabled components from the db.

            Returns:
                node
            Throws:
                DbError
        """

        try:
            componentList = TortugaObjectList()

            for c in self._softwareProfilesDbHandler.getSoftwareProfile(
                    session, name).components:
                self.loadRelation(c, 'kit')

                componentList.append(Component.getFromDbDict(c.__dict__))

            return componentList
        except TortugaException:
            raise
        except Exception as ex:
            self._logger.exception(str(ex))
            raise
Esempio n. 3
0
    def getBestMatchComponent(self, session: Session, name, version, osInfo,
                              kitId):
        """
        Get component from the db.

            Returns:
                component
            Throws:
                ComponentNotFound
                DbError
        """

        try:
            dbComponent = self._componentsDbHandler.getBestMatchComponent(
                session, name, version, osInfo, kitId)

            self.loadRelations(
                dbComponent, {
                    'os': True,
                    'family': True,
                    'kit': True,
                    'os_components': True,
                    'osfamily_components': True,
                })

            return Component.getFromDbDict(dbComponent.__dict__)
        except TortugaException:
            raise
        except Exception as ex:
            self.getLogger().exception('%s' % ex)
            raise
Esempio n. 4
0
    def getComponent(self, session: Session, name: str, version: str,
                     osInfo: OsInfo,
                     optionDict: Optional[Union[dict, None]] = None) \
            -> Component:
        """
        Get component from the db.

            Returns:
                component
            Throws:
                ComponentNotFound
                DbError
        """
        try:
            dbComponent = self._componentsDbHandler.getComponentByOsInfo(
                session, name, version, osInfo)

            self.loadRelations(dbComponent, optionDict)

            return Component.getFromDbDict(dbComponent.__dict__)
        except TortugaException:
            raise
        except Exception as ex:
            self.getLogger().exception('%s' % ex)
            raise
Esempio n. 5
0
    def getEnabledComponentList(self, name):
        """
        Get a list of enabled components from the db.

            Returns:
                node
            Throws:
                DbError
        """

        session = DbManager().openSession()

        try:
            componentList = TortugaObjectList()

            for c in self._softwareProfilesDbHandler.getSoftwareProfile(
                    session, name).components:
                self.loadRelation(c, 'kit')

                componentList.append(Component.getFromDbDict(c.__dict__))

            return componentList
        except TortugaException as ex:
            raise
        except Exception as ex:
            self.getLogger().exception('%s' % ex)
            raise
        finally:
            DbManager().closeSession()
Esempio n. 6
0
    def getComponent(self, name, version, osInfo, optionDict=None):
        """
        Get component from the db.

            Returns:
                component
            Throws:
                ComponentNotFound
                DbError
        """

        session = DbManager().openSession()

        try:
            dbComponent = self._componentsDbHandler.getComponentByOsInfo(
                session, name, version, osInfo)

            self.loadRelations(dbComponent, optionDict or {})

            return Component.getFromDbDict(dbComponent.__dict__)
        except TortugaException as ex:
            raise
        except Exception as ex:
            self.getLogger().exception('%s' % ex)
            raise
        finally:
            DbManager().closeSession()
Esempio n. 7
0
    def _create_kit_db_entry(self, session: Session, kit) -> Kit:
        """
        Creates a database entry for a kit.

        :param kit:
        :return: a Kit instance (TortugaObject)

        """
        try:
            return self._kit_db_api.getKit(session, kit['name'], kit['ver'])
        except KitNotFound:
            pass

        # Add the database entries for the kit
        kitObj = Kit(name=kit['name'], version=kit['ver'], iteration='0')
        kitObj.setDescription(kit['sum'])
        kitObj.setIsOs(True)
        kitObj.setIsRemovable(True)

        kit_descr = format_kit_descriptor(kit['name'], kit['ver'], kit['arch'])

        newComp = Component(name=kit_descr, version=kit['ver'])

        newComp.setDescription('%s mock component' % (kit_descr))

        newComp.addOsInfo(
            osHelper.getOsInfo(kit['name'], kit['ver'], kit['arch']))

        kitObj.addComponent(newComp)

        # Kit does not previously exist, perform 'normal' add kit operation
        self._kit_db_api.addKit(session, kitObj)

        return kitObj
Esempio n. 8
0
    def getEnabledComponentList(self, name):
        """
        Get the list of components enabled for a given softwareprofile

            Returns:
               a list of enabled components
            Throws:
                TortugaException
        """

        url = 'v1/softwareProfiles/%s/components' % (
            urllib.parse.quote_plus(name))

        try:
            _, responseDict = self.sendSessionRequest(url)

            return Component.getListFromDict(responseDict)
        except TortugaException as ex:
            raise
        except Exception as ex:
            raise TortugaException(exception=ex)
Esempio n. 9
0
    def __retrieveAllKitData(self, dbKit, kit):
        """
        Retrieve full kit data from the db.
        """

        for dbComponent in dbKit.components:
            # Force loading of OS/OS familyinfo
            self.loadRelations(dbComponent, {
                'os_components': True,
                'osfamily_components': True,
            })

            # Convert into component object
            c = Component.getFromDbDict(dbComponent.__dict__)

            # Associate component with kit
            kit.addComponent(c)

        kit.setSources(self.getTortugaObjectList(KitSource, dbKit.sources))

        return kit
Esempio n. 10
0
def parse(kitXmlFile):
    """Parse kit information for a given os and return kit object."""

    logger = logging.getLogger('tortuga.kit.parse')
    logger.addHandler(logging.NullHandler())

    try:
        logger.debug('parse(): parsing [%s]' % (kitXmlFile))

        xmlDoc = minidom.parse(kitXmlFile)

        rootNode = xmlDoc.getElementsByTagName('kit')[0]

        kit = Kit(name=rootNode.getAttribute('name'),
                  version=rootNode.getAttribute('version'),
                  iteration=rootNode.getAttribute('iteration'))

        documentationNode = rootNode.getElementsByTagName('documentation')[0]

        kit.setDocumentation(documentationNode.getAttribute('path'))

        eulaNodes = rootNode.getElementsByTagName('eula')

        if len(eulaNodes):
            try:
                with open(os.path.join(os.path.dirname(kitXmlFile),
                                       eulaNodes[0].getAttribute('path')),
                          'r') as f:
                    textContents = f.read()

                kit.setEula(
                    Eula(eulaNodes[0].getAttribute('key'), textContents))
            except Exception:
                logger.exception('Exception raised parsing EULA from kit')

                logger.debug('Unable to load EULA file contents')

        kit.setIntegrationModulePath(
            rootNode.getElementsByTagName('integration-module')[0].
            getAttribute('path'))

        kit.setDescription(
            rootNode.getElementsByTagName('description')[0].firstChild.
            nodeValue)

        for cNode in xmlDoc.getElementsByTagName('component'):
            component = Component(name=cNode.getAttribute('name'),
                                  version=cNode.getAttribute('version'))

            logger.debug(
                'parse(): Found component [%s]' % (component.getName()))

            # Kit description
            nodeList = cNode.getElementsByTagName('description')
            if nodeList:
                component.setDescription(nodeList[0].firstChild.nodeValue)

            # process os elements
            for osNode in cNode.getElementsByTagName('os'):
                result = _process_component_os(osNode, component)

                logger.debug(
                    'parse(): Adding component [%s] for [%s]' % (
                        component, result))

            kit.addComponent(component)

        return kit
    except TortugaException:
        raise
    except Exception as ex:
        logger.exception('Exception raised while parsing [%s]' % (kitXmlFile))

        raise TortugaException(exception=ex)