/
autogen_users_fetch.go
73 lines (58 loc) · 2.05 KB
/
autogen_users_fetch.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
//AUTOGENERATED CODE DO NOT EDIT
// This file is automatically generated from /internal/codegen/templates/aws_fetching_file.tmpl
package iam
import (
"context"
"fmt"
"github.com/aws/aws-sdk-go-v2/service/iam"
"github.com/google/uuid"
"github.com/jinzhu/copier"
"github.com/sheacloud/cloud-inventory/pkg/aws"
"github.com/sheacloud/cloud-inventory/pkg/meta"
)
func FetchUsers(ctx context.Context, params *aws.AwsFetchInput) ([]*User, *aws.AwsFetchOutputMetadata) {
fetchingErrors := []error{}
var fetchedResources int
var failedResources int
inventoryResults := &meta.InventoryResults{
Cloud: "aws",
Service: "iam",
Resource: "users",
AccountId: params.AccountId,
Region: params.Region,
ReportTime: params.ReportTime,
}
resources := []*User{}
awsClient := params.RegionalClients[params.Region]
client := awsClient.IAM()
paginator := iam.NewListUsersPaginator(client, &iam.ListUsersInput{})
for paginator.HasMorePages() {
output, err := paginator.NextPage(ctx)
if err != nil {
fetchingErrors = append(fetchingErrors, fmt.Errorf("error calling ListUsers in %s/%s: %w", params.AccountId, params.Region, err))
break
}
for _, object := range output.Users {
model := new(User)
copier.CopyWithOption(&model, &object, aws.CopyOption)
model.Tags = ConvertTags(object.Tags)
model.AccountId = params.AccountId
model.Region = params.Region
model.ReportTime = params.ReportTime
model.InventoryUUID = uuid.New().String()
if err = PostProcessUser(ctx, params, model); err != nil {
fetchingErrors = append(fetchingErrors, fmt.Errorf("error post-processing User %s %s/%s: %w", model.UserId, params.AccountId, params.Region, err))
failedResources++
}
resources = append(resources, model)
fetchedResources++
}
}
inventoryResults.FetchedResources = fetchedResources
inventoryResults.FailedResources = failedResources
inventoryResults.HadErrors = len(fetchingErrors) > 0
return resources, &aws.AwsFetchOutputMetadata{
FetchingErrors: fetchingErrors,
InventoryResults: inventoryResults,
}
}