From 00619b903926c27183f4aa741a464d051db3bc6e Mon Sep 17 00:00:00 2001 From: Dave Workman Date: Thu, 28 Dec 2017 14:04:35 -0500 Subject: [PATCH 1/3] Workaround for fargate support. --- scanner.go | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/scanner.go b/scanner.go index 2294fd9..8aa9647 100644 --- a/scanner.go +++ b/scanner.go @@ -106,16 +106,18 @@ func (s *scanner) extractContainer(t *ecs.Task, cd *ecs.ContainerDefinition) (*c 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]) } @@ -127,7 +129,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 } From 3cb8c0c95c19b8c4d27b14c185fd24e99810625b Mon Sep 17 00:00:00 2001 From: Dave Workman Date: Thu, 28 Dec 2017 14:21:50 -0500 Subject: [PATCH 2/3] ignore error from describeContainerInstance if we don't have any container instance ARNs (fargate) --- scanner.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scanner.go b/scanner.go index 8aa9647..e0fa0b5 100644 --- a/scanner.go +++ b/scanner.go @@ -47,7 +47,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 { From e7cb6de7a99d6e43e974b7cbfad8cd3751ad0126 Mon Sep 17 00:00:00 2001 From: Chris Aitken Date: Mon, 4 Nov 2019 15:21:32 -0500 Subject: [PATCH 3/3] Added fix to help the nginx servers stop crashing in Fargate. --- Makefile | 10 +++++----- scanner.go | 12 ++++++++++++ 2 files changed, 17 insertions(+), 5 deletions(-) diff --git a/Makefile b/Makefile index a7ba7df..d5901e4 100644 --- a/Makefile +++ b/Makefile @@ -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 \ diff --git a/scanner.go b/scanner.go index e0fa0b5..91b5901 100644 --- a/scanner.go +++ b/scanner.go @@ -2,6 +2,7 @@ package main import ( "errors" + "fmt" "strconv" "strings" @@ -103,6 +104,7 @@ 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") } @@ -157,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 +}