From 7bd2d2c9139eb27cc3f8405c6da2b59396723f3c Mon Sep 17 00:00:00 2001 From: Irena Rindos Date: Tue, 12 Sep 2023 13:20:49 -0400 Subject: [PATCH] feat(worker): allow hcp cluster id to be sourced from env var (#3709) * feat(worker): allow hcp cluster id to be sourced from env var --- CHANGELOG.md | 2 ++ internal/cmd/commands/server/server.go | 8 ++++++-- internal/daemon/worker/controller_connection.go | 7 ++++++- internal/daemon/worker/status.go | 10 ++++++++-- 4 files changed, 22 insertions(+), 5 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 4e1532d3a7..b610657d02 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,6 +11,8 @@ Canonical reference for changes, improvements, and bugfixes for Boundary. ([PR](https://github.com/hashicorp/boundary/pull/3679)). * feat: add worker upstream connection status to ops health check ([PR](https://github.com/hashicorp/boundary/pull/3650)). +* feat: allow HCP cluster id to be sourced from file or env variable + ([PR](https://github.com/hashicorp/boundary/pull/3709)). ### Bug Fixes diff --git a/internal/cmd/commands/server/server.go b/internal/cmd/commands/server/server.go index 9e6557ddce..a675970961 100644 --- a/internal/cmd/commands/server/server.go +++ b/internal/cmd/commands/server/server.go @@ -363,11 +363,15 @@ func (c *Command) Run(args []string) int { c.UI.Error(fmt.Errorf("Initial upstreams and HCPB cluster ID are mutually exclusive fields").Error()) return base.CommandUserError } - clusterId := c.Config.HcpbClusterId + clusterId, err := parseutil.ParsePath(c.Config.HcpbClusterId) + if err != nil && !errors.Is(err, parseutil.ErrNotAUrl) { + c.UI.Error(fmt.Errorf("Failed to parse HCP Boundary cluster ID %q: %w", clusterId, err).Error()) + return base.CommandUserError + } if strings.HasPrefix(clusterId, "int-") { clusterId = strings.TrimPrefix(clusterId, "int-") } - _, err := uuid.ParseUUID(clusterId) + _, err = uuid.ParseUUID(clusterId) if err != nil { c.UI.Error(fmt.Errorf("Invalid HCP Boundary cluster ID %q: %w", clusterId, err).Error()) return base.CommandUserError diff --git a/internal/daemon/worker/controller_connection.go b/internal/daemon/worker/controller_connection.go index 37dcf2075b..a96402efd1 100644 --- a/internal/daemon/worker/controller_connection.go +++ b/internal/daemon/worker/controller_connection.go @@ -34,6 +34,7 @@ import ( "github.com/hashicorp/boundary/internal/util" "github.com/hashicorp/boundary/version" "github.com/hashicorp/go-secure-stdlib/base62" + "github.com/hashicorp/go-secure-stdlib/parseutil" "github.com/hashicorp/nodeenrollment" "github.com/hashicorp/nodeenrollment/multihop" "github.com/hashicorp/nodeenrollment/protocol" @@ -72,7 +73,11 @@ func (w *Worker) StartControllerConnections() error { if len(initialAddrs) == 0 { if w.conf.RawConfig.HcpbClusterId != "" && HandleHcpbClusterId != nil { - clusterAddress := HandleHcpbClusterId(w.conf.RawConfig.HcpbClusterId) + clusterId, err := parseutil.ParsePath(w.conf.RawConfig.HcpbClusterId) + if err != nil && !errors.Is(err, parseutil.ErrNotAUrl) { + return fmt.Errorf("failed to parse HCP Boundary cluster ID: %q: %w", clusterId, err) + } + clusterAddress := HandleHcpbClusterId(clusterId) initialAddrs = append(initialAddrs, clusterAddress) event.WriteSysEvent(w.baseContext, op, fmt.Sprintf("Setting HCP Boundary cluster address %s as upstream address", clusterAddress)) } else { diff --git a/internal/daemon/worker/status.go b/internal/daemon/worker/status.go index a4df96ebfd..88a9086996 100644 --- a/internal/daemon/worker/status.go +++ b/internal/daemon/worker/status.go @@ -17,6 +17,7 @@ import ( pbs "github.com/hashicorp/boundary/internal/gen/controller/servers/services" "github.com/hashicorp/boundary/internal/server" "github.com/hashicorp/boundary/version" + "github.com/hashicorp/go-secure-stdlib/parseutil" "github.com/hashicorp/go-secure-stdlib/strutil" "google.golang.org/grpc/connectivity" ) @@ -249,8 +250,13 @@ func (w *Worker) sendWorkerStatus(cancelCtx context.Context, sessionManager sess if len(w.conf.RawConfig.Worker.InitialUpstreams) > 0 { addrs = append(addrs, w.conf.RawConfig.Worker.InitialUpstreams...) } else if HandleHcpbClusterId != nil && len(w.conf.RawConfig.HcpbClusterId) > 0 { - clusterAddress := HandleHcpbClusterId(w.conf.RawConfig.HcpbClusterId) - addrs = append(addrs, clusterAddress) + clusterId, err := parseutil.ParsePath(w.conf.RawConfig.HcpbClusterId) + if err != nil && !errors.Is(err, parseutil.ErrNotAUrl) { + event.WriteError(cancelCtx, op, err, event.WithInfoMsg("failed to parse HCP Boundary cluster ID")) + } else { + clusterAddress := HandleHcpbClusterId(clusterId) + addrs = append(addrs, clusterAddress) + } } addrs = strutil.RemoveDuplicates(addrs, false)