in providers/aws/ecs.go [33:142]
func (g *EcsGenerator) InitResources() error {
config, e := g.generateConfig()
if e != nil {
return e
}
svc := ecs.NewFromConfig(config)
p := ecs.NewListClustersPaginator(svc, &ecs.ListClustersInput{})
for p.HasMorePages() {
page, e := p.NextPage(context.TODO())
if e != nil {
return e
}
for _, clusterArn := range page.ClusterArns {
arnParts := strings.Split(clusterArn, "/")
clusterName := arnParts[len(arnParts)-1]
g.Resources = append(g.Resources, terraformutils.NewSimpleResource(
clusterArn,
clusterName,
"aws_ecs_cluster",
"aws",
ecsAllowEmptyValues,
))
servicePage := ecs.NewListServicesPaginator(svc, &ecs.ListServicesInput{
Cluster: &clusterArn,
})
for servicePage.HasMorePages() {
serviceNextPage, err := servicePage.NextPage(context.TODO())
if err != nil {
fmt.Println(err.Error())
continue
}
for _, serviceArn := range serviceNextPage.ServiceArns {
arnParts := strings.Split(serviceArn, "/")
serviceName := arnParts[len(arnParts)-1]
serResp, err := svc.DescribeServices(context.TODO(), &ecs.DescribeServicesInput{
Services: []string{
serviceName,
},
Cluster: &clusterArn,
})
if err != nil {
fmt.Println(err.Error())
continue
}
serviceDetails := serResp.Services[0]
g.Resources = append(g.Resources, terraformutils.NewResource(
serviceArn,
clusterName+"_"+serviceName,
"aws_ecs_service",
"aws",
map[string]string{
"task_definition": StringValue(serviceDetails.TaskDefinition),
"cluster": clusterName,
"name": serviceName,
"id": serviceArn,
},
ecsAllowEmptyValues,
map[string]interface{}{},
))
}
}
}
}
taskDefinitionsMap := map[string]terraformutils.Resource{}
taskDefinitionsPage := ecs.NewListTaskDefinitionsPaginator(svc, &ecs.ListTaskDefinitionsInput{})
for taskDefinitionsPage.HasMorePages() {
taskDefinitionsNextPage, e := taskDefinitionsPage.NextPage(context.TODO())
if e != nil {
fmt.Println(e.Error())
continue
}
for _, taskDefinitionArn := range taskDefinitionsNextPage.TaskDefinitionArns {
arnParts := strings.Split(taskDefinitionArn, ":")
definitionWithFamily := arnParts[len(arnParts)-2]
revision, _ := strconv.Atoi(arnParts[len(arnParts)-1])
// fetch only latest revision of task definitions
if val, ok := taskDefinitionsMap[definitionWithFamily]; !ok || val.AdditionalFields["revision"].(int) < revision {
taskDefinitionsMap[definitionWithFamily] = terraformutils.NewResource(
taskDefinitionArn,
definitionWithFamily,
"aws_ecs_task_definition",
"aws",
map[string]string{
"task_definition": taskDefinitionArn,
"container_definitions": "{}",
"family": "test-task",
"arn": taskDefinitionArn,
},
[]string{},
map[string]interface{}{
"revision": revision,
},
)
}
}
}
for _, v := range taskDefinitionsMap {
delete(v.AdditionalFields, "revision")
g.Resources = append(g.Resources, v)
}
return nil
}