diff --git a/dev/managedservicesplatform/internal/stack/cloudrun/cloudrun.go b/dev/managedservicesplatform/internal/stack/cloudrun/cloudrun.go index 11eb8f4af06..04502166543 100644 --- a/dev/managedservicesplatform/internal/stack/cloudrun/cloudrun.go +++ b/dev/managedservicesplatform/internal/stack/cloudrun/cloudrun.go @@ -129,11 +129,16 @@ func NewStack(stacks *stack.Set, vars Variables) (crossStackOutput *CrossStackOu // convention across MSP services. cloudRunBuilder.AddEnv("DIAGNOSTICS_SECRET", diagnosticsSecret.HexValue) + // Add the domain as an environment variable. + dnsName := pointers.DerefZero(vars.Environment.EnvironmentServiceSpec).Domain.GetDNSName() + if dnsName != "" { + cloudRunBuilder.AddEnv("EXTERNAL_DNS_NAME", dnsName) + } + // Add user-configured env vars if err := addContainerEnvVars(cloudRunBuilder, vars.Environment.Env, vars.Environment.SecretEnv, envVariablesData{ - ProjectID: vars.ProjectID, - ServiceDnsName: pointers.DerefZero(vars.Environment.EnvironmentServiceSpec). - Domain.GetDNSName(), + ProjectID: vars.ProjectID, + ServiceDnsName: dnsName, }); err != nil { return nil, errors.Wrap(err, "add user env vars") } diff --git a/lib/managedservicesplatform/service/config.go b/lib/managedservicesplatform/service/config.go index a95b5f77a70..d95626f3f08 100644 --- a/lib/managedservicesplatform/service/config.go +++ b/lib/managedservicesplatform/service/config.go @@ -9,14 +9,18 @@ import ( "github.com/sourcegraph/sourcegraph/lib/errors" ) +// Contract loads standardized MSP-provisioned configuration. type Contract struct { // Port is the port the service must listen on. Port int + // ExternalDNSName is the DNS name the service uses, if one is configured. + ExternalDNSName *string } func newContract(env *Env) Contract { return Contract{ - Port: env.GetInt("PORT", "", "service port"), + Port: env.GetInt("PORT", "", "service port"), + ExternalDNSName: env.GetOptional("EXTERNAL_DNS_NAME", "external DNS name provisioned for the service"), } } @@ -86,8 +90,12 @@ func (e *Env) Get(name, defaultValue, description string) string { } // GetOptional returns the value with the given name. -func (e *Env) GetOptional(name, description string) string { - return e.get(name, "", description) +func (e *Env) GetOptional(name, description string) *string { + v, ok := e.env[name] + if !ok { + return nil + } + return &v } // GetInt returns the value with the given name interpreted as an integer. If no