func listAccounts()

in internal/resources/providers/awslib/account_provider.go [49:84]


func listAccounts(ctx context.Context, log *clog.Logger, client organizationsAPI) ([]cloud.Identity, error) {
	organizationIdToName := make(map[string]string)

	input := organizations.ListAccountsInput{}
	var accounts []cloud.Identity
	for {
		o, err := client.ListAccounts(ctx, &input)
		if err != nil {
			return nil, err
		}

		for _, account := range o.Accounts {
			if account.Status != types.AccountStatusActive || account.Id == nil {
				continue
			}

			organization, err := getOUInfoForAccount(ctx, client, organizationIdToName, account.Id)
			if err != nil {
				log.Errorf("failed to get organizational unit info for account %s: %v", *account.Id, err)
			}
			accounts = append(accounts, cloud.Identity{
				Provider:         "aws",
				Account:          *account.Id,
				AccountAlias:     pointers.Deref(account.Name),
				OrganizationId:   organization.id,
				OrganizationName: organization.name,
			})
		}

		if o.NextToken == nil {
			break
		}
		input.NextToken = o.NextToken
	}
	return accounts, nil
}