Skip to content

Commit 9c2757b

Browse files
authored
Merge pull request #1950 from sergenyalcin/fix-ecs-service
Fix ecs.Service resource's external name configuration and update loop issue
2 parents e74e922 + 0e071e9 commit 9c2757b

15 files changed

Lines changed: 56 additions & 421 deletions

apis/cluster/ecs/v1beta1/zz_generated.deepcopy.go

Lines changed: 0 additions & 15 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

apis/cluster/ecs/v1beta1/zz_generated.resolvers.go

Lines changed: 2 additions & 22 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

apis/cluster/ecs/v1beta1/zz_service_types.go

Lines changed: 2 additions & 12 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

apis/cluster/ecs/v1beta2/zz_generated.deepcopy.go

Lines changed: 0 additions & 15 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

apis/cluster/ecs/v1beta2/zz_generated.resolvers.go

Lines changed: 2 additions & 22 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

apis/cluster/ecs/v1beta2/zz_service_types.go

Lines changed: 2 additions & 12 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

apis/namespaced/ecs/v1beta1/zz_generated.deepcopy.go

Lines changed: 0 additions & 15 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

apis/namespaced/ecs/v1beta1/zz_generated.resolvers.go

Lines changed: 2 additions & 22 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

apis/namespaced/ecs/v1beta1/zz_service_types.go

Lines changed: 2 additions & 12 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

config/cluster/ecs/config.go

Lines changed: 21 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,9 @@
55
package ecs
66

77
import (
8-
"context"
9-
"path/filepath"
108
"strings"
119

10+
"github.com/hashicorp/terraform-plugin-sdk/v2/terraform"
1211
"github.com/pkg/errors"
1312

1413
"github.com/crossplane/upjet/v2/pkg/config"
@@ -44,27 +43,13 @@ func Configure(p *config.Provider) { //nolint:gocyclo
4443
})
4544

4645
p.AddResourceConfigurator("aws_ecs_service", func(r *config.Resource) {
47-
r.ExternalName.GetExternalNameFn = func(tfstate map[string]interface{}) (string, error) {
48-
// expected id format: arn:aws:ecs:us-east-2:123456789123:service/sample-cluster/sample-service
49-
w := strings.Split(tfstate["id"].(string), "/")
50-
if len(w) != 3 {
51-
return "", errors.New("terraform ID should be the ARN of the service")
52-
}
53-
return w[len(w)-1], nil
54-
}
55-
r.ExternalName.GetIDFn = func(_ context.Context, externalName string, parameters map[string]interface{}, _ map[string]interface{}) (string, error) {
56-
cl, ok := parameters["cluster"].(string)
57-
if !ok {
58-
return "", errors.New("cannot generate id without cluster paramater")
59-
}
60-
return filepath.Join(cl, externalName), nil
61-
}
6246
r.References = config.References{
6347
"cluster": config.Reference{
6448
TerraformName: "aws_ecs_cluster",
6549
},
6650
"task_definition": config.Reference{
6751
TerraformName: "aws_ecs_task_definition",
52+
Extractor: common.PathARNExtractor,
6853
},
6954
"iam_role": config.Reference{
7055
TerraformName: "aws_iam_role",
@@ -86,6 +71,25 @@ func Configure(p *config.Provider) { //nolint:gocyclo
8671
}
8772
r.MetaResource.ArgumentDocs["cluster"] = `Name of an ECS cluster.`
8873
r.UseAsync = true
74+
75+
r.TerraformCustomDiff = func(diff *terraform.InstanceDiff, state *terraform.InstanceState, config *terraform.ResourceConfig) (*terraform.InstanceDiff, error) {
76+
if diff == nil || diff.Empty() || diff.Destroy || diff.Attributes == nil {
77+
return diff, nil
78+
}
79+
td, ok := diff.Attributes["task_definition"]
80+
if !ok {
81+
return diff, nil
82+
}
83+
if td.Old == td.New {
84+
return diff, nil
85+
}
86+
// example td.New = arn:aws:ecs:us-west-1:<account_id>:task-definition/sampleservice:36
87+
tdParts := strings.Split(td.New, "/")
88+
if td.Old == tdParts[1] {
89+
delete(diff.Attributes, "task_definition")
90+
}
91+
return diff, nil
92+
}
8993
})
9094

9195
p.AddResourceConfigurator("aws_ecs_capacity_provider", func(r *config.Resource) {

0 commit comments

Comments
 (0)