Ejemplo n.º 1
0
 def _getBaseFileName(self, baseFileName, hostname,
         troveName, troveVersion, troveFlavor):
     baseFileName = self._sanitizeString(baseFileName)
     if baseFileName:
         return baseFileName
     troveVersion = helperfuncs.parseVersion(troveVersion)
     troveArch = helperfuncs.getArchFromFlavor(troveFlavor)
     baseFileName = "%(name)s-%(version)s-%(arch)s" % dict(
         # XXX One would assume hostname == troveName, but that's
         # how server.py had the code written
         name = hostname,
         version = troveVersion.trailingRevision().version,
         arch = troveArch)
     return baseFileName
Ejemplo n.º 2
0
    def computeSyntheticFields(self, sender, **kwargs):
        if self.trove_flavor is not None:
            self.architecture = helperfuncs.getArchFromFlavor(str(self.trove_flavor))

        if self.trove_version is not None:
            tv_obj = helperfuncs.parseVersion(self.trove_version)
            if tv_obj is not None:
                self.trailing_version = str(tv_obj.trailingRevision())

        if self.files is not None:
            self.num_image_files = len(self.files.all())
        else:
            self.num_image_files = 0;

        self.build_log = modellib.HrefFieldFromModel(self,
            viewName="BuildLog")

        if self._image_type is not None:
            self.image_type = ImageType.fromImageTypeId(self._image_type)
        self.jobs = modellib.HrefFieldFromModel(self, "ImageJobs")

        self._computeActions()
Ejemplo n.º 3
0
    def _getImages(self, fqdn, extraJoin='', extraWhere='',
                   extraArgs=None, getOne=False):
        hostname = fqdn.split('.')[0]
        cu = self.db.cursor()

        sql = '''
            SELECT
                p.hostname,
                pv.name AS version,
                b.buildId AS imageId,
                    b.buildType AS imageType, b.name, b.description,
                    b.troveName, b.troveVersion, b.troveFlavor,
                    b.troveLastChanged, b.timeCreated, b.timeUpdated,
                    b.status AS statusCode, b.statusMessage, b.buildCount,
                    b.stageName AS stage,
                cr_user.username AS creator, up_user.username AS updater

            FROM Builds b
                JOIN Projects p USING ( projectId )
                %(join)s
                LEFT JOIN ProductVersions pv ON (
                    b.productVersionId = pv.productVersionId )
                LEFT JOIN Users cr_user ON ( b.createdBy = cr_user.userId )
                LEFT JOIN Users up_user ON ( b.updatedBy = up_user.userId )

            WHERE hostname = ? AND troveVersion IS NOT NULL
            %(where)s
            '''
        sql %= dict(where=extraWhere, join=extraJoin)
        args = (hostname,)
        if extraArgs:
            args += tuple(extraArgs)
        cu.execute(sql, *args)
        if getOne:
            row = self.db._getOne(cu, errors.ImageNotFound, args)
            rows = [row]
        else:
            rows = cu

        images = []
        for row in rows:
            imageType = row['imageType']
            if row['troveFlavor'] is not None:
                row['troveFlavor'] = deps.ThawFlavor(row['troveFlavor'])
                row['architecture'] = helperfuncs.getArchFromFlavor(
                        row['troveFlavor'])
            else:
                row['architecture'] = None

            if row['troveVersion'] is not None:
                row['troveVersion'] = helperfuncs.parseVersion(row['troveVersion'])
                row['trailingVersion'] = str(row['troveVersion'].trailingRevision())
            else:
                row['trailingVersion'] = None

            row['imageType'] = buildtypes.imageTypeXmlTagNameMap.get(imageType, 'imageless')
            row['imageTypeName'] = buildtypes.typeNamesMarketing.get(imageType, 'Unknown')

            status = models.ImageStatus()
            status.hostname = row['hostname']
            status.imageId = row['imageId']
            status.set_status(code=row.pop('statusCode'),
                    message=row.pop('statusMessage'))

            image = models.Image(row)
            image.imageStatus = status
            images.append(image)

        imageIds = [ x.imageId for x in images ]
        imagesBaseFileNameMap = self.getImagesBaseFileName(hostname, imageIds)

        imagesFiles = self._getFilesForImages(hostname, imageIds)
        for image, imageFiles in zip(images, imagesFiles):
            image.files = imageFiles
            image.baseFileName = imagesBaseFileNameMap[image.imageId]

        if getOne:
            return images[0]
        return models.ImageList(images)