Skip to content

Commit

Permalink
merge container environment
Browse files Browse the repository at this point in the history
  • Loading branch information
maruware committed Aug 17, 2020
1 parent 1f33fcf commit 5747ee2
Show file tree
Hide file tree
Showing 6 changed files with 89 additions and 4 deletions.
60 changes: 58 additions & 2 deletions ecsceed.go
Original file line number Diff line number Diff line change
Expand Up @@ -80,6 +80,36 @@ func (a *App) Name() string {
return "ecsceed"
}

func cloneEnvironment(o []*ecs.KeyValuePair) []*ecs.KeyValuePair {
dst := []*ecs.KeyValuePair{}
for _, e := range o {
v := ecs.KeyValuePair{
Name: aws.String(*e.Name),
Value: aws.String(*e.Value),
}
dst = append(dst, &v)
}
return dst
}

func mergeEnvironment(base []*ecs.KeyValuePair, ex []*ecs.KeyValuePair) []*ecs.KeyValuePair {
dst := base
for _, p := range ex {
dup := false
for _, bp := range base {
if *bp.Name == *p.Name {
dup = true
bp.Value = p.Value
break
}
}
if !dup {
dst = append(dst, p)
}
}
return dst
}

func (a *App) ResolveConfigStack(additionalParams Params) error {
params := Params{}
for _, c := range a.cs {
Expand All @@ -94,27 +124,53 @@ func (a *App) ResolveConfigStack(additionalParams Params) error {
nameToTd := map[string]ecs.TaskDefinition{}
for _, c := range a.cs {
for _, tdc := range c.TaskDefinitions {
var td ecs.TaskDefinition
var baseTd ecs.TaskDefinition

if len(tdc.BaseFile) > 0 {
path, err := filepath.Abs(filepath.Join(c.dir, tdc.BaseFile))
if err != nil {
return err
}
err = loadAndMatchTmpl(path, params, &td)
err = loadAndMatchTmpl(path, params, &baseTd)
if err != nil {
return err
}
}

var td ecs.TaskDefinition = baseTd
if len(tdc.File) > 0 {
path, err := filepath.Abs(filepath.Join(c.dir, tdc.File))
if err != nil {
return err
}

baseEnvironment := map[string][]*ecs.KeyValuePair{}
for _, bcd := range baseTd.ContainerDefinitions {
if len(bcd.Environment) == 0 {
continue
}

name := *bcd.Name
baseEnvironment[name] = cloneEnvironment(bcd.Environment)
}

err = loadAndMatchTmpl(path, params, &td)
if err != nil {
return err
}

for name, envs := range baseEnvironment {
// merge environment
if len(envs) == 0 {
continue
}
for _, cd := range td.ContainerDefinitions {
if *cd.Name == name {
cd.Environment = mergeEnvironment(envs, cd.Environment)
break
}
}
}
}

// overwrite overlay def
Expand Down
16 changes: 14 additions & 2 deletions ecsceed_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,19 @@ func TestNewApp(t *testing.T) {
assert.Equal(t, 2, app.ServicesNum(), "bad services num")

apiTd := app.GetTaskDefinition("API")
container := apiTd.ContainerDefinitions[0]

assert.Equal(t, "/bin/api", *apiTd.ContainerDefinitions[0].Command[0], "bad api command")
assert.Equal(t, "my-image:latest", *apiTd.ContainerDefinitions[0].Image, "bad api image")
assert.Equal(t, "/bin/api", *container.Command[0], "bad api command")
assert.Equal(t, "my-image:latest", *container.Image, "bad api image")

for _, env := range container.Environment {
switch *env.Name {
case "APP_NAME":
assert.Equal(t, "awesome-name", *env.Value, "bad APP_NAME")
case "SERVICE":
assert.Equal(t, "api", *env.Value, "bad SERVICE")
case "PORT":
assert.Equal(t, "8080", *env.Value, "bad PORT")
}
}
}
1 change: 1 addition & 0 deletions go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ go 1.14
require (
github.com/aws/aws-sdk-go v1.33.8
github.com/fatih/color v1.9.0
github.com/imdario/mergo v0.3.10 // indirect
github.com/mattn/go-isatty v0.0.12
github.com/mattn/go-shellwords v1.0.10
github.com/morikuni/aec v1.0.0
Expand Down
2 changes: 2 additions & 0 deletions go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,8 @@ github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSs
github.com/fatih/color v1.9.0 h1:8xPHl4/q1VyqGIPif1F+1V3Y3lSmrq01EabUW3CoW5s=
github.com/fatih/color v1.9.0/go.mod h1:eQcE1qtQxscV5RaZvpXrrb8Drkc3/DdQ+uUYCNjL+zU=
github.com/go-sql-driver/mysql v1.5.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg=
github.com/imdario/mergo v0.3.10 h1:6q5mVkdH/vYmqngx7kZQTjJ5HRsx+ImorDIEQ+beJgc=
github.com/imdario/mergo v0.3.10/go.mod h1:jmQim1M+e3UYxmgPu/WyfjB3N3VflVyUjjjwH0dnCYA=
github.com/jmespath/go-jmespath v0.3.0 h1:OS12ieG61fsCg5+qLJ+SsW9NicxNkg3b25OyT2yCeUc=
github.com/jmespath/go-jmespath v0.3.0/go.mod h1:9QtRXoHjLGCJ5IBSaohpXITPlowMeeYCZ7fLUTSywik=
github.com/mattn/go-colorable v0.1.4 h1:snbPLB8fVfU9iwbbo30TPtbLRzwWu6aJS6Xh4eaaviA=
Expand Down
10 changes: 10 additions & 0 deletions test_files/example1/base/api_td.json
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,16 @@
"command": [
"/bin/api"
],
"environment": [
{
"name": "PORT",
"value": "8080"
},
{
"name": "SERVICE",
"value": "api"
}
],
"memoryReservation": 1024,
"portMappings": [
{
Expand Down
4 changes: 4 additions & 0 deletions test_files/example1/base/common_td.json
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,10 @@
{
"name": "APP_NAME",
"value": "awesome-name"
},
{
"name": "SERVICE",
"value": "undefined"
}
],
"essential": true,
Expand Down

0 comments on commit 5747ee2

Please sign in to comment.