This repository has been archived by the owner on Jul 28, 2021. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 8
/
aws.go
75 lines (65 loc) · 2.02 KB
/
aws.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
74
75
package configger
import (
"context"
"github.com/aws/aws-sdk-go-v2/config"
"github.com/aws/aws-sdk-go-v2/credentials"
awscs "github.com/aws/aws-sdk-go-v2/service/configservice"
"github.com/aws/aws-sdk-go-v2/service/configservice/types"
"github.com/cloud-fitter/cloud-fitter/gen/idl/pbstatistic"
"github.com/cloud-fitter/cloud-fitter/gen/idl/pbtenant"
"github.com/cloud-fitter/cloud-fitter/internal/tenanter"
"github.com/pkg/errors"
)
type AwsCfg struct {
cli *awscs.Client
regionId pbtenant.AwsRegionId
regionName string
tenanter.Tenanter
}
func newAwsCfgClient(region tenanter.Region, tenant tenanter.Tenanter) (Configger, error) {
var client *awscs.Client
var err error
switch t := tenant.(type) {
case *tenanter.AccessKeyTenant:
cfg, err := config.LoadDefaultConfig(context.TODO(),
config.WithCredentialsProvider(credentials.NewStaticCredentialsProvider(t.GetId(), t.GetSecret(), "")),
config.WithRegion(region.GetName()),
)
if err != nil {
return nil, errors.Wrap(err, "LoadDefaultConfig aws ecs client error")
}
client = awscs.NewFromConfig(cfg)
default:
}
if err != nil {
return nil, errors.Wrap(err, "init aws cfg client error")
}
return &AwsCfg{
cli: client,
regionId: pbtenant.AwsRegionId(region.GetId()),
regionName: region.GetName(),
Tenanter: tenant,
}, nil
}
func (cfg *AwsCfg) Statistic(ctx context.Context) (*pbstatistic.StatisticInfo, error) {
req := new(awscs.GetDiscoveredResourceCountsInput)
req.ResourceTypes = []string{}
resp, err := cfg.cli.GetDiscoveredResourceCounts(ctx, req)
if err != nil {
return nil, errors.Wrap(err, "Aws Statistic error")
}
result := &pbstatistic.StatisticInfo{
Provider: pbtenant.CloudProvider_aws,
AccountName: cfg.AccountName(),
Product: pbtenant.CloudProduct_product_ecs,
RegionId: int32(cfg.regionId),
RegionName: cfg.regionName,
Count: 0,
}
for _, v := range resp.ResourceCounts {
if v.ResourceType == types.ResourceTypeInstance {
result.Count += int32(v.Count)
}
}
return result, nil
}