From 8c1358cc238ceb5bed8205e5a6e37d3ded8a5273 Mon Sep 17 00:00:00 2001 From: Matty Evans Date: Wed, 22 Jan 2025 16:45:44 +1000 Subject: [PATCH 1/2] feat(docker): exposes health check port via compose if set --- .goreleaser.yaml | 3 +- docker-compose.health.yml | 4 ++ ...se.ports.yml => docker-compose.metrics.yml | 0 go.mod | 2 + go.sum | 2 - install.bats | 9 ++-- install.sh | 11 +++-- internal/sidecar/docker.go | 41 +++++++++++++++---- internal/sidecar/docker_test.go | 6 ++- 9 files changed, 59 insertions(+), 19 deletions(-) create mode 100644 docker-compose.health.yml rename docker-compose.ports.yml => docker-compose.metrics.yml (100%) diff --git a/.goreleaser.yaml b/.goreleaser.yaml index 7e6d7c1..ab1b6bd 100644 --- a/.goreleaser.yaml +++ b/.goreleaser.yaml @@ -33,7 +33,8 @@ archives: - LICENSE* - install.sh - docker-compose.yml - - docker-compose.ports.yml + - docker-compose.metrics.yml + - docker-compose.health.yml - docker-compose.network.yml changelog: diff --git a/docker-compose.health.yml b/docker-compose.health.yml new file mode 100644 index 0000000..45abe7c --- /dev/null +++ b/docker-compose.health.yml @@ -0,0 +1,4 @@ +services: + sentry: + ports: + - "${CONTRIBUTOOR_HEALTH_ADDRESS:-127.0.0.1}:${CONTRIBUTOOR_HEALTH_PORT:-9191}:${CONTRIBUTOOR_HEALTH_PORT:-9191}" \ No newline at end of file diff --git a/docker-compose.ports.yml b/docker-compose.metrics.yml similarity index 100% rename from docker-compose.ports.yml rename to docker-compose.metrics.yml diff --git a/go.mod b/go.mod index 5690dc4..bb87f94 100644 --- a/go.mod +++ b/go.mod @@ -2,6 +2,8 @@ module github.com/ethpandaops/contributoor-installer go 1.23 +replace github.com/ethpandaops/contributoor => /Users/matty/go/src/github.com/ethpandaops/contributoor + require ( github.com/docker/go-connections v0.5.0 github.com/ethpandaops/contributoor v0.0.48 diff --git a/go.sum b/go.sum index 79ae5e4..e2046e2 100644 --- a/go.sum +++ b/go.sum @@ -43,8 +43,6 @@ github.com/docker/go-units v0.5.0 h1:69rxXcBk27SvSaaxTtLh/8llcHD8vYHT7WSdRZ/jvr4 github.com/docker/go-units v0.5.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk= github.com/envoyproxy/protoc-gen-validate v1.1.0 h1:tntQDh69XqOCOZsDz0lVJQez/2L6Uu2PdjCQwWCJ3bM= github.com/envoyproxy/protoc-gen-validate v1.1.0/go.mod h1:sXRDRVmzEbkM7CVcM06s9shE/m23dg3wzjl0UWqJ2q4= -github.com/ethpandaops/contributoor v0.0.48 h1:auUmPr/ZFhxg00sTbiCeEa38oRCnKHCNPbmwx3K6meU= -github.com/ethpandaops/contributoor v0.0.48/go.mod h1:Zjsbj+ThoEkzbrGeo7sHnQlB369Cbimc3MHnLtEH5m0= github.com/felixge/httpsnoop v1.0.4 h1:NFTV2Zj1bL4mc9sqWACXbQFVBBg2W3GPvqp8/ESS2Wg= github.com/felixge/httpsnoop v1.0.4/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= github.com/gdamore/encoding v1.0.0 h1:+7OoQ1Bc6eTm5niUzBa0Ctsh6JbMW6Ra+YNuAtDBdko= diff --git a/install.bats b/install.bats index a68c55f..bf6ef6f 100644 --- a/install.bats +++ b/install.bats @@ -396,7 +396,8 @@ EOF # Create compose files touch "$CONTRIBUTOOR_PATH/releases/installer-${CONTRIBUTOOR_VERSION}/docker-compose.yml" - touch "$CONTRIBUTOOR_PATH/releases/installer-${CONTRIBUTOOR_VERSION}/docker-compose.ports.yml" + touch "$CONTRIBUTOOR_PATH/releases/installer-${CONTRIBUTOOR_VERSION}/docker-compose.metrics.yml" + touch "$CONTRIBUTOOR_PATH/releases/installer-${CONTRIBUTOOR_VERSION}/docker-compose.health.yml" touch "$CONTRIBUTOOR_PATH/releases/installer-${CONTRIBUTOOR_VERSION}/docker-compose.network.yml" return 0 @@ -412,7 +413,8 @@ EOF # Also create compose files in the same directory if it's the binary symlink if [[ "$3" == *"/bin/contributoor" ]]; then cp "$CONTRIBUTOOR_PATH/releases/installer-${CONTRIBUTOOR_VERSION}/docker-compose.yml" "$(dirname "$3")/docker-compose.yml" - cp "$CONTRIBUTOOR_PATH/releases/installer-${CONTRIBUTOOR_VERSION}/docker-compose.ports.yml" "$(dirname "$3")/docker-compose.ports.yml" + cp "$CONTRIBUTOOR_PATH/releases/installer-${CONTRIBUTOOR_VERSION}/docker-compose.metrics.yml" "$(dirname "$3")/docker-compose.metrics.yml" + cp "$CONTRIBUTOOR_PATH/releases/installer-${CONTRIBUTOOR_VERSION}/docker-compose.health.yml" "$(dirname "$3")/docker-compose.health.yml" cp "$CONTRIBUTOOR_PATH/releases/installer-${CONTRIBUTOOR_VERSION}/docker-compose.network.yml" "$(dirname "$3")/docker-compose.network.yml" fi fi @@ -432,7 +434,8 @@ EOF [ -f "$CONTRIBUTOOR_PATH/bin/contributoor" ] [ -x "$CONTRIBUTOOR_PATH/bin/contributoor" ] [ -f "$CONTRIBUTOOR_PATH/releases/installer-${CONTRIBUTOOR_VERSION}/docker-compose.yml" ] - [ -f "$CONTRIBUTOOR_PATH/releases/installer-${CONTRIBUTOOR_VERSION}/docker-compose.ports.yml" ] + [ -f "$CONTRIBUTOOR_PATH/releases/installer-${CONTRIBUTOOR_VERSION}/docker-compose.metrics.yml" ] + [ -f "$CONTRIBUTOOR_PATH/releases/installer-${CONTRIBUTOOR_VERSION}/docker-compose.health.yml" ] [ -f "$CONTRIBUTOOR_PATH/releases/installer-${CONTRIBUTOOR_VERSION}/docker-compose.network.yml" ] } diff --git a/install.sh b/install.sh index a692f42..19dbce6 100755 --- a/install.sh +++ b/install.sh @@ -215,10 +215,15 @@ setup_installer() { chmod 755 "$release_dir" } || fail "docker-compose.yml not found after extraction" - [ -f "$release_dir/docker-compose.ports.yml" ] && { - chmod 644 "$release_dir/docker-compose.ports.yml" + [ -f "$release_dir/docker-compose.metrics.yml" ] && { + chmod 644 "$release_dir/docker-compose.metrics.yml" chmod 755 "$release_dir" - } || fail "docker-compose.ports.yml not found after extraction" + } || fail "docker-compose.metrics.yml not found after extraction" + + [ -f "$release_dir/docker-compose.health.yml" ] && { + chmod 644 "$release_dir/docker-compose.health.yml" + chmod 755 "$release_dir" + } || fail "docker-compose.health.yml not found after extraction" [ -f "$release_dir/docker-compose.network.yml" ] && { chmod 644 "$release_dir/docker-compose.network.yml" diff --git a/internal/sidecar/docker.go b/internal/sidecar/docker.go index 311e5fc..4680fd1 100644 --- a/internal/sidecar/docker.go +++ b/internal/sidecar/docker.go @@ -24,7 +24,8 @@ type DockerSidecar interface { type dockerSidecar struct { logger *logrus.Logger composePath string - composePortsPath string + composeMetricsPath string + composeHealthPath string composeNetworkPath string configPath string sidecarCfg ConfigManager @@ -35,7 +36,8 @@ type dockerSidecar struct { func NewDockerSidecar(logger *logrus.Logger, sidecarCfg ConfigManager, installerCfg *installer.Config) (DockerSidecar, error) { var ( composeFilename = "docker-compose.yml" - composePortsFilename = "docker-compose.ports.yml" + composeMetricsFilename = "docker-compose.metrics.yml" + composeHealthFilename = "docker-compose.health.yml" composeNetworkFilename = "docker-compose.network.yml" ) @@ -44,9 +46,14 @@ func NewDockerSidecar(logger *logrus.Logger, sidecarCfg ConfigManager, installer return nil, fmt.Errorf("failed to find %s: %w", composeFilename, err) } - composePortsPath, err := findComposeFile(composePortsFilename) + composeMetricsPath, err := findComposeFile(composeMetricsFilename) if err != nil { - return nil, fmt.Errorf("failed to find %s: %w", composePortsFilename, err) + return nil, fmt.Errorf("failed to find %s: %w", composeMetricsFilename, err) + } + + composeHealthPath, err := findComposeFile(composeHealthFilename) + if err != nil { + return nil, fmt.Errorf("failed to find %s: %w", composeHealthFilename, err) } composeNetworkPath, err := findComposeFile(composeNetworkFilename) @@ -58,8 +65,12 @@ func NewDockerSidecar(logger *logrus.Logger, sidecarCfg ConfigManager, installer return nil, fmt.Errorf("invalid %s file: %w", composeFilename, err) } - if err := validateComposePath(composePortsPath); err != nil { - return nil, fmt.Errorf("invalid %s file: %w", composePortsFilename, err) + if err := validateComposePath(composeMetricsPath); err != nil { + return nil, fmt.Errorf("invalid %s file: %w", composeMetricsPath, err) + } + + if err := validateComposePath(composeHealthPath); err != nil { + return nil, fmt.Errorf("invalid %s file: %w", composeHealthPath, err) } if err := validateComposePath(composeNetworkPath); err != nil { @@ -69,8 +80,9 @@ func NewDockerSidecar(logger *logrus.Logger, sidecarCfg ConfigManager, installer return &dockerSidecar{ logger: logger, composePath: filepath.Clean(composePath), - composePortsPath: filepath.Clean(composePortsPath), + composeMetricsPath: filepath.Clean(composeMetricsPath), composeNetworkPath: filepath.Clean(composeNetworkPath), + composeHealthPath: filepath.Clean(composeHealthPath), configPath: sidecarCfg.GetConfigPath(), sidecarCfg: sidecarCfg, installerCfg: installerCfg, @@ -258,6 +270,15 @@ func (s *dockerSidecar) GetComposeEnv() []string { ) } + // Handle health address (only added if set). + if healthHost, healthPort := cfg.GetHealthCheckHostPort(); healthHost != "" { + env = append( + env, + fmt.Sprintf("CONTRIBUTOOR_HEALTH_ADDRESS=%s", healthHost), + fmt.Sprintf("CONTRIBUTOOR_HEALTH_PORT=%s", healthPort), + ) + } + // Handle pprof address (only added if set). if pprofHost, pprofPort := cfg.GetPprofHostPort(); pprofHost != "" { env = append( @@ -296,7 +317,11 @@ func (s *dockerSidecar) getComposeArgs() []string { var additionalArgs []string if metricsHost, _ := s.sidecarCfg.Get().GetMetricsHostPort(); metricsHost != "" { - additionalArgs = append(additionalArgs, "-f", s.composePortsPath) + additionalArgs = append(additionalArgs, "-f", s.composeMetricsPath) + } + + if healthHost, _ := s.sidecarCfg.Get().GetHealthCheckHostPort(); healthHost != "" { + additionalArgs = append(additionalArgs, "-f", s.composeHealthPath) } if s.sidecarCfg.Get().RunMethod == config.RunMethod_RUN_METHOD_DOCKER && s.sidecarCfg.Get().DockerNetwork != "" { diff --git a/internal/sidecar/docker_test.go b/internal/sidecar/docker_test.go index a60fc5a..f8f5c1e 100644 --- a/internal/sidecar/docker_test.go +++ b/internal/sidecar/docker_test.go @@ -88,7 +88,8 @@ func TestDockerService_Integration(t *testing.T) { // Write out compose files first. require.NoError(t, os.WriteFile(filepath.Join(tmpDir, "docker-compose.yml"), []byte(composeFile), 0644)) - require.NoError(t, os.WriteFile(filepath.Join(tmpDir, "docker-compose.ports.yml"), []byte(composePortsFile), 0644)) + require.NoError(t, os.WriteFile(filepath.Join(tmpDir, "docker-compose.metrics.yml"), []byte(composePortsFile), 0644)) + require.NoError(t, os.WriteFile(filepath.Join(tmpDir, "docker-compose.health.yml"), []byte(composePortsFile), 0644)) require.NoError(t, os.WriteFile(filepath.Join(tmpDir, "docker-compose.network.yml"), []byte(composeNetworkFile), 0644)) // Change working directory to our test directory before creating DockerSidecar. @@ -306,7 +307,8 @@ func TestGetComposeEnv(t *testing.T) { // Write out compose files first require.NoError(t, os.WriteFile(filepath.Join(tt.config.ContributoorDirectory, "docker-compose.yml"), []byte(composeFile), 0644)) - require.NoError(t, os.WriteFile(filepath.Join(tt.config.ContributoorDirectory, "docker-compose.ports.yml"), []byte(composePortsFile), 0644)) + require.NoError(t, os.WriteFile(filepath.Join(tt.config.ContributoorDirectory, "docker-compose.metrics.yml"), []byte(composePortsFile), 0644)) + require.NoError(t, os.WriteFile(filepath.Join(tt.config.ContributoorDirectory, "docker-compose.health.yml"), []byte(composePortsFile), 0644)) require.NoError(t, os.WriteFile(filepath.Join(tt.config.ContributoorDirectory, "docker-compose.network.yml"), []byte(composeNetworkFile), 0644)) // Change working directory to test directory From 786a9220bd2e0e380fec7a315c35f17bbb325d7f Mon Sep 17 00:00:00 2001 From: Matty Evans Date: Wed, 22 Jan 2025 16:47:43 +1000 Subject: [PATCH 2/2] refactor: Remove unnecessary local path replacement in go.mod --- go.mod | 2 -- go.sum | 2 ++ 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/go.mod b/go.mod index bb87f94..5690dc4 100644 --- a/go.mod +++ b/go.mod @@ -2,8 +2,6 @@ module github.com/ethpandaops/contributoor-installer go 1.23 -replace github.com/ethpandaops/contributoor => /Users/matty/go/src/github.com/ethpandaops/contributoor - require ( github.com/docker/go-connections v0.5.0 github.com/ethpandaops/contributoor v0.0.48 diff --git a/go.sum b/go.sum index e2046e2..79ae5e4 100644 --- a/go.sum +++ b/go.sum @@ -43,6 +43,8 @@ github.com/docker/go-units v0.5.0 h1:69rxXcBk27SvSaaxTtLh/8llcHD8vYHT7WSdRZ/jvr4 github.com/docker/go-units v0.5.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk= github.com/envoyproxy/protoc-gen-validate v1.1.0 h1:tntQDh69XqOCOZsDz0lVJQez/2L6Uu2PdjCQwWCJ3bM= github.com/envoyproxy/protoc-gen-validate v1.1.0/go.mod h1:sXRDRVmzEbkM7CVcM06s9shE/m23dg3wzjl0UWqJ2q4= +github.com/ethpandaops/contributoor v0.0.48 h1:auUmPr/ZFhxg00sTbiCeEa38oRCnKHCNPbmwx3K6meU= +github.com/ethpandaops/contributoor v0.0.48/go.mod h1:Zjsbj+ThoEkzbrGeo7sHnQlB369Cbimc3MHnLtEH5m0= github.com/felixge/httpsnoop v1.0.4 h1:NFTV2Zj1bL4mc9sqWACXbQFVBBg2W3GPvqp8/ESS2Wg= github.com/felixge/httpsnoop v1.0.4/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= github.com/gdamore/encoding v1.0.0 h1:+7OoQ1Bc6eTm5niUzBa0Ctsh6JbMW6Ra+YNuAtDBdko=