func()

in internal/flavors/benchmark/aws_org.go [68:113]


func (a *AWSOrg) initialize(ctx context.Context, log *clog.Logger, cfg *config.Config, ch chan fetching.ResourceInfo) (registry.Registry, dataprovider.CommonDataProvider, dataprovider.IdProvider, error) {
	if err := a.checkDependencies(); err != nil {
		return nil, nil, nil, err
	}

	var (
		awsConfig   *awssdk.Config
		awsIdentity *cloud.Identity
		err         error
	)

	awsConfig, awsIdentity, err = a.getIdentity(ctx, cfg)
	if err != nil && cfg.CloudConfig.Aws.Cred.DefaultRegion == "" {
		log.Warn("failed to initialize identity; retrying to check AWS Gov Cloud regions")
		cfg.CloudConfig.Aws.Cred.DefaultRegion = awslib.DefaultGovRegion
		awsConfig, awsIdentity, err = a.getIdentity(ctx, cfg)
	}

	if err != nil {
		return nil, nil, nil, fmt.Errorf("failed to get AWS Identity: %w", err)
	}
	log.Info("successfully retrieved AWS Identity")

	a.IAMProvider = iam.NewIAMProvider(ctx, log, *awsConfig, nil)

	cache := make(map[string]registry.FetchersMap)
	reg := registry.NewRegistry(log, registry.WithUpdater(
		func() (registry.FetchersMap, error) {
			accounts, err := a.getAwsAccounts(ctx, log, *awsConfig, awsIdentity)
			if err != nil {
				return nil, fmt.Errorf("failed to get AWS accounts: %w", err)
			}

			fm := preset.NewCisAwsOrganizationFetchers(ctx, log, ch, accounts, cache)
			m := make(registry.FetchersMap)
			for accountId, fetchersMap := range fm {
				for key, fetcher := range fetchersMap {
					m[fmt.Sprintf("%s-%s", accountId, key)] = fetcher
				}
			}

			return m, nil
		}))

	return reg, cloud.NewDataProvider(cloud.WithAccount(*awsIdentity)), nil, nil
}