Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 5 additions & 5 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -7,11 +7,11 @@ LDFLAGS = -X main.version=$(VERSION)

.PHONY: docker build clean deps

docker:
docker build -t ecs-gen-builder:latest -f Dockerfile.build .
docker run --rm -v $(CURDIR):$(WORKDIR) ecs-gen-builder
docker build -t ecs-gen:latest -f Dockerfile .
docker run --rm ecs-gen:latest ecs-gen --version
# docker:
# docker build -t ecs-gen-builder:latest -f Dockerfile.build .
# docker run --rm -v $(CURDIR):$(WORKDIR) ecs-gen-builder
# docker build -t ecs-gen:latest -f Dockerfile .
# docker run --rm ecs-gen:latest ecs-gen --version

build: deps
for GOOS in darwin linux; do \
Expand Down
26 changes: 20 additions & 6 deletions scanner.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package main

import (
"errors"
"fmt"
"strconv"
"strings"

Expand Down Expand Up @@ -47,7 +48,7 @@ func (s *scanner) makeIDAddressMap() (map[string]string, error) {
return nil, err
}
containerInstances, err := s.ecs.describeContainerInstances(s.cluster, arns)
if err != nil {
if len(arns) != 0 && err != nil {
return nil, err
}
for i := range containerInstances {
Expand Down Expand Up @@ -103,19 +104,22 @@ func (s *scanner) makeNameNetworkBindingsMap(containers []*ecs.Container) map[st
}

func (s *scanner) extractContainer(t *ecs.Task, cd *ecs.ContainerDefinition) (*container, error) {
defer rescue("extractContainer")
if strings.ToLower(*cd.Name) == *taskName {
return nil, errors.New("container is own container. skipping")
}
if len(s.nameNetworkBindingsMap[*cd.Name]) == 0 {
return nil, errors.New("container has no network bindings. skipping")
}
virtualHost, virtualPort, envVariables := extractVars(cd.Environment, s.hostVar)
if virtualHost == "" {
return nil, errors.New("[" + *cd.Name + "] " + s.hostVar + " environment variable not found. skipping")
}
port := ""
if len(s.nameNetworkBindingsMap[*cd.Name]) == 1 {
address := ""
if len(s.nameNetworkBindingsMap[*cd.Name]) == 0 {
port = strconv.FormatInt(80, 10)
address = string(*t.Containers[0].NetworkInterfaces[0].PrivateIpv4Address)
} else if len(s.nameNetworkBindingsMap[*cd.Name]) == 1 {
port = strconv.FormatInt(*s.nameNetworkBindingsMap[*cd.Name][0].HostPort, 10)
address = s.idAddressMap[*t.ContainerInstanceArn]
} else if virtualPort != "" {
port = extractHostPort(virtualPort, s.nameNetworkBindingsMap[*cd.Name])
}
Expand All @@ -127,7 +131,7 @@ func (s *scanner) extractContainer(t *ecs.Task, cd *ecs.ContainerDefinition) (*c
Host: virtualHost,
Port: port,
Env: envVariables,
Address: s.idAddressMap[*t.ContainerInstanceArn],
Address: address,
}, nil
}

Expand Down Expand Up @@ -155,3 +159,13 @@ func extractVars(env []*ecs.KeyValuePair, hostVar string) (string, string, map[s
}
return virtualHost, virtualPort, envVariables
}

func rescue(funcName string) {
errorString := ""
r := recover()
if r != nil {
errorString = fmt.Sprintf("We handled Panic [code %v] from function: %s", r, funcName)
errors.New(errorString)
}
return
}