in resources/services/table.go [56:135]
func FetchAmigoBakePackages(_ context.Context, meta schema.ClientMeta, _ *schema.Resource, res chan<- any) error {
cl := meta.(*client.Client)
s3Store := cl.S3Store
bakesTable := cl.BakesTable
recipesTable := cl.RecipesTable
baseImagesTable := cl.BaseImagesTable
allBakes := bakesTable.ListAll()
allRecipes := map[string]AmigoRecipe{}
for _, recipe := range recipesTable.ListAll() {
id := recipe["id"].(*types.AttributeValueMemberS).Value
baseName := recipe["baseImageId"].(*types.AttributeValueMemberS).Value
allRecipes[id] = AmigoRecipe{
RecipeId: id,
BaseName: baseName,
}
}
allBaseImages := map[string]AmigoBaseImage{}
for _, baseImgAttribs := range baseImagesTable.ListAll() {
baseImage := toAmigoBaseImage(baseImgAttribs)
allBaseImages[baseImage.BaseName] = baseImage
}
records := map[string]AmigoBakePackage{}
for _, bake := range allBakes {
recipeId := bake["recipeId"].(*types.AttributeValueMemberS).Value
bakeNumber, err := strconv.Atoi(bake["buildNumber"].(*types.AttributeValueMemberN).Value)
if err != nil {
log.Printf("Failed to convert buildNumber to int: %v", err)
continue
}
status := bake["status"].(*types.AttributeValueMemberS).Value
startedAt := bake["startedAt"].(*types.AttributeValueMemberS).Value
startedBy := bake["startedBy"].(*types.AttributeValueMemberS).Value
// Skip if bake doesn't have an AMI ID
var amiId string
if amiIdAttrib, ok := bake["amiId"]; ok {
amiId = amiIdAttrib.(*types.AttributeValueMemberS).Value
} else {
log.Printf("Skipping bake without AMI ID: recipeId: '%v', bakeId: '%v', status: '%v'\n", recipeId, bakeNumber, status)
continue
}
recipe := allRecipes[recipeId]
baseImage := allBaseImages[recipe.BaseName]
// Fetch corresponding package file from S3
packages, err := fetchBakePackages(recipeId, bakeNumber, s3Store)
if err != nil {
log.Fatalf("Error fetching bake packages for recipe '%s', bake '%d': %v", recipeId, bakeNumber, err)
}
// Create a record for each package
for _, pkg := range packages {
key := fmt.Sprintf("%s--%d--%s--%s", recipeId, bakeNumber, amiId, pkg.PackageName)
bakePackage := AmigoBakePackage{
BaseName: recipe.BaseName,
BaseAmiId: baseImage.BaseAmiId,
BaseEolDate: baseImage.BaseEolDate,
RecipeId: recipeId,
BakeNumber: bakeNumber,
SourceAmiId: amiId,
StartedBy: startedBy,
PackageName: pkg.PackageName,
PackageVersion: pkg.PackageVersion,
}
bakePackage.SetStartedAt(startedAt)
records[key] = bakePackage
}
}
for _, record := range records {
res <- record
}
return nil
}