This repository was archived by the owner on Jul 31, 2023. It is now read-only.
forked from jckuester/awsls
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmain.go
96 lines (76 loc) · 3.07 KB
/
main.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
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
// +build codegen
package main
import (
"github.com/apex/log"
"github.com/apex/log/handlers/cli"
"github.com/jckuester/awsls/gen/aws"
"github.com/jckuester/awsls/gen/terraform"
"github.com/jckuester/awsls/gen/util"
)
const (
outputPath = "../resource"
terraformAwsProviderRepoPath = "/home/jan/git/github.com/terraform-provider-aws"
awsSdkGoRepoPath = "/home/jan/git/github.com/aws-sdk-go-v2"
)
func main() {
log.SetHandler(cli.Default)
log.SetLevel(log.DebugLevel)
resourceTypes, err := terraform.GenerateResourceTypeList(terraformAwsProviderRepoPath, outputPath)
if err != nil {
log.WithError(err).Fatal("failed to generate list of Terraform AWS resource types")
}
resourceFileNames, err := terraform.ResourceFileNames(terraformAwsProviderRepoPath, resourceTypes)
if err != nil {
log.WithError(err).Fatal("failed to generate map of resource type -> filename implementing resource")
}
resourceServices, err := terraform.GenerateResourceServiceMap(terraformAwsProviderRepoPath, outputPath,
resourceTypes, resourceFileNames)
if err != nil {
log.WithError(err).Fatal("failed to generate map of resource type -> AWS service")
}
resourceIDs, err := terraform.GenerateResourceIDMap(terraformAwsProviderRepoPath, outputPath, resourceFileNames)
if err != nil {
log.WithError(err).Fatal("failed to generate map of resource type -> resource ID")
}
resourceTypesWithTags, err := terraform.GenerateResourceTypesWithTagsList(resourceTypes, outputPath)
if err != nil {
log.WithError(err).Fatal("failed to generate list of resource type that support tags")
}
apis, err := aws.APIs(awsSdkGoRepoPath)
if err != nil {
log.WithError(err).Fatal("failed to load AWS APIs")
}
terraformServices := aws.ServicesCoveredByTerraform(resourceServices)
servicePkgNames := aws.ServicePkgNames(apis)
log.Infof("AWS services covered by Terraform: %d/%d",
len(terraformServices), len(servicePkgNames))
log.Debugf("AWS services not covered:")
diff := util.Difference(servicePkgNames, terraformServices)
for _, d := range diff {
log.Debugf("\t%s", d)
}
log.Warn("AWS services used by Terraform that are named differently in AWS API v2:")
diff = util.Difference(terraformServices, servicePkgNames)
for _, d := range diff {
log.Warnf("\t: %s", d)
}
err = aws.GenerateClient("../aws", servicePkgNames)
if err != nil {
log.WithError(err).Fatal("Failed to write AWS client")
}
listFunctionNames, genResourceInfos := aws.GenerateListFunctions("../aws",
resourceServices, resourceIDs, resourceTypesWithTags, apis)
log.Infof("Generated list functions: %d", len(listFunctionNames))
err = terraform.GenerateListResourcesByTypeFunction("../aws", listFunctionNames)
if err != nil {
log.WithError(err).Fatal("failed to generate list resource function by type")
}
err = aws.GenerateSupportedResourceTypeList(outputPath, listFunctionNames)
if err != nil {
log.WithError(err).Fatal("failed to generate list supported resource types")
}
err = aws.WriteReadme("..", genResourceInfos)
if err != nil {
log.WithError(err).Fatal("failed to generate README")
}
}