in internal/resources/fetching/fetchers/azure/assets_fetcher.go [86:125]
func (f *AzureAssetsFetcher) Fetch(ctx context.Context, cycleMetadata cycle.Metadata) error {
f.log.Info("Starting AzureAssetsFetcher.Fetch")
var errAgg error
// This might be relevant if we'd like to fetch assets in parallel in order to evaluate a rule that uses multiple resources
var assets []inventory.AzureAsset
for _, assetGroup := range AzureAssetGroups {
// Fetching all types even if non-existent in asset group for simplicity
r, err := f.provider.ListAllAssetTypesByName(ctx, assetGroup, slices.Collect(maps.Keys(AzureAssetTypeToTypePair)))
if err != nil {
f.log.Errorf("AzureAssetsFetcher.Fetch failed to fetch asset group %s: %s", assetGroup, err.Error())
errAgg = errors.Join(errAgg, err)
continue
}
assets = append(assets, r...)
}
subscriptions, err := f.provider.GetSubscriptions(ctx, cycleMetadata)
if err != nil {
f.log.Errorf("Error fetching subscription information: %v", err)
}
for _, e := range f.enrichers {
if err := e.Enrich(ctx, cycleMetadata, assets); err != nil {
errAgg = errors.Join(errAgg, fmt.Errorf("error while enriching assets: %w", err))
}
}
for _, asset := range assets {
select {
case <-ctx.Done():
err := ctx.Err()
f.log.Infof("AzureAssetsFetcher.Fetch context err: %s", err.Error())
errAgg = errors.Join(errAgg, err)
return errAgg
case f.resourceCh <- resourceFromAsset(asset, cycleMetadata, subscriptions):
}
}
return errAgg
}