in app/prism/Recommendations.scala [15:40]
def amiUpgrade(ami: AMI, allAmis: Set[AMI]): Option[AMI] = {
val candidateAmis = allAmis.view
.filter(_.ownerId == ami.ownerId)
.filter(newerThan(ami))
.filter(_.region == ami.region)
.filter(_.virtualizationType == ami.virtualizationType)
.filter(_.architecture == ami.architecture)
.filter(_.rootDeviceType == ami.rootDeviceType)
.filter(_.hypervisor == ami.hypervisor)
.filter(_.creationDate.nonEmpty)
val upgrades = {
// filter on additional ami-creator specific properties where appropriate
if (isUbuntu(ami)) candidateAmis.filter(isUbuntuUpgrade(ami))
else if (isMachineImages(ami))
candidateAmis.filter(isMachineImagesUpgrade(ami))
else if (isAmigo(ami)) candidateAmis.filter(isAmigoUpgrade(ami))
// with Amazon Linux, it is enough to have matched the above conditions
else if (isAmazon(ami)) candidateAmis
// unknown ami type, cannot recommend upgrades
else Set.empty
}
upgrades.toList
.sortBy(_.creationDate.get.getMillis)
.lastOption
}