Skip to content

Commit

Permalink
Merge branch 'main' into feature/task-system
Browse files Browse the repository at this point in the history
  • Loading branch information
bomoko committed May 19, 2022
2 parents 6525e30 + 01485b3 commit 1e8725a
Show file tree
Hide file tree
Showing 14 changed files with 253 additions and 123 deletions.
12 changes: 6 additions & 6 deletions cmd/config_fastly_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ func TestGenerateFastlyConfig(t *testing.T) {
{
name: "test1 check LAGOON_FASTLY_SERVICE_ID no secret",
args: args{
projectVars: `[{"name":"LAGOON_FASTLY_SERVICE_ID","value":"service-id:true","scope":"global"}]`,
projectVars: `[{"name":"LAGOON_SYSTEM_ROUTER_PATTERN","value":"${service}-${project}-${environment}.example.com","scope":"internal_system"},{"name":"LAGOON_FASTLY_SERVICE_ID","value":"service-id:true","scope":"global"}]`,
envVars: `[]`,
cacheNoCache: "",
serviceID: "",
Expand All @@ -41,7 +41,7 @@ func TestGenerateFastlyConfig(t *testing.T) {
{
name: "test2 check LAGOON_FASTLY_SERVICE_IDS no secret",
args: args{
projectVars: `[{"name":"LAGOON_FASTLY_SERVICE_IDS","value":"example.com:service-id:true","scope":"global"}]`,
projectVars: `[{"name":"LAGOON_SYSTEM_ROUTER_PATTERN","value":"${service}-${project}-${environment}.example.com","scope":"internal_system"},{"name":"LAGOON_FASTLY_SERVICE_IDS","value":"example.com:service-id:true","scope":"global"}]`,
envVars: `[]`,
cacheNoCache: "",
serviceID: "",
Expand All @@ -57,7 +57,7 @@ func TestGenerateFastlyConfig(t *testing.T) {
{
name: "test3 check LAGOON_FASTLY_SERVICE_ID with secret",
args: args{
projectVars: `[{"name":"LAGOON_FASTLY_SERVICE_ID","value":"service-id:true:secret","scope":"global"}]`,
projectVars: `[{"name":"LAGOON_SYSTEM_ROUTER_PATTERN","value":"${service}-${project}-${environment}.example.com","scope":"internal_system"},{"name":"LAGOON_FASTLY_SERVICE_ID","value":"service-id:true:secret","scope":"global"}]`,
envVars: `[]`,
cacheNoCache: "",
serviceID: "",
Expand All @@ -73,7 +73,7 @@ func TestGenerateFastlyConfig(t *testing.T) {
{
name: "test4 check LAGOON_FASTLY_SERVICE_IDS with secret",
args: args{
projectVars: `[{"name":"LAGOON_FASTLY_SERVICE_IDS","value":"example.com:service-id:true:secret","scope":"global"}]`,
projectVars: `[{"name":"LAGOON_SYSTEM_ROUTER_PATTERN","value":"${service}-${project}-${environment}.example.com","scope":"internal_system"},{"name":"LAGOON_FASTLY_SERVICE_IDS","value":"example.com:service-id:true:secret","scope":"global"}]`,
envVars: `[]`,
cacheNoCache: "",
serviceID: "",
Expand All @@ -89,7 +89,7 @@ func TestGenerateFastlyConfig(t *testing.T) {
{
name: "test5 check no LAGOON_FASTLY_SERVICE_ID with service id found from ROUTE_FASTLY_SERVICE_ID",
args: args{
projectVars: `[]`,
projectVars: `[{"name":"LAGOON_SYSTEM_ROUTER_PATTERN","value":"${service}-${project}-${environment}.example.com","scope":"internal_system"}]`,
envVars: `[]`,
cacheNoCache: "",
serviceID: "dedicated-service-id",
Expand All @@ -104,7 +104,7 @@ func TestGenerateFastlyConfig(t *testing.T) {
{
name: "test6 check LAGOON_FASTLY_SERVICE_ID with service id found from ROUTE_FASTLY_SERVICE_ID (should use one from LAGOON_FASTLY_SERVICE_ID)",
args: args{
projectVars: `[{"name":"LAGOON_FASTLY_SERVICE_ID","value":"service-id:true","scope":"global"}]`,
projectVars: `[{"name":"LAGOON_SYSTEM_ROUTER_PATTERN","value":"${service}-${project}-${environment}.example.com","scope":"internal_system"},{"name":"LAGOON_FASTLY_SERVICE_ID","value":"service-id:true","scope":"global"}]`,
envVars: `[]`,
cacheNoCache: "",
serviceID: "dedicated-service-id",
Expand Down
6 changes: 3 additions & 3 deletions cmd/helpers_ingress.go
Original file line number Diff line number Diff line change
Expand Up @@ -70,14 +70,14 @@ func generateAndMerge(
envVars []lagoon.EnvironmentVariable,
lagoonYAML lagoon.YAML,
lagoonValues lagoon.BuildValues,
) (*lagoon.RoutesV2, error) {
) (lagoon.RoutesV2, error) {
n := &lagoon.RoutesV2{} // placeholder for generated routes

// otherwise it just uses the default environment name
for _, routeMap := range lagoonYAML.Environments[lagoonValues.Branch].Routes {
lagoon.GenerateRoutesV2(n, routeMap, envVars, fastlyAPISecretPrefix, false)
}
// merge routes from the API on top of the routes from the `.lagoon.yml`
merged := lagoon.MergeRoutesV2(*n, api, envVars, fastlyAPISecretPrefix)
return &merged, nil
mainRoutes := lagoon.MergeRoutesV2(*n, api, envVars, fastlyAPISecretPrefix)
return mainRoutes, nil
}
72 changes: 69 additions & 3 deletions cmd/helpers_values.go
Original file line number Diff line number Diff line change
Expand Up @@ -13,12 +13,22 @@ import (
"sigs.k8s.io/yaml"
)

var lagoonYml, environmentName, projectName, activeEnvironment, standbyEnvironment, environmentType string
var buildType, lagoonVersion, branch, prTitle, prNumber, prHeadBranch, prBaseBranch string
var projectVariables, environmentVariables, monitoringStatusPageID, monitoringContact string
var templateValues, savedTemplates, fastlyCacheNoCahce, fastlyServiceID, fastlyAPISecretPrefix string
var monitoringEnabled bool

// collectBuildValues is used to collect variables and values that are used within a build
func collectBuildValues(debug bool, activeEnv, standbyEnv *bool,
lagoonEnvVars *[]lagoon.EnvironmentVariable,
lagoonValues *lagoon.BuildValues,
lYAML *lagoon.YAML,
autogenRoutes *lagoon.RoutesV2,
mainRoutes *lagoon.RoutesV2,
activeStandbyRoutes *lagoon.RoutesV2,
) error {
var err error
// environment variables will override what is provided by flags
// the following variables have been identified as used by custom-ingress objects
// these are available within a lagoon build as standard
Expand All @@ -28,6 +38,7 @@ func collectBuildValues(debug bool, activeEnv, standbyEnv *bool,
environmentName = helpers.GetEnv("ENVIRONMENT", environmentName, debug)
branch = helpers.GetEnv("BRANCH", branch, debug)
prNumber = helpers.GetEnv("PR_NUMBER", prNumber, debug)
prTitle = helpers.GetEnv("PR_NUMBER", prTitle, debug)
prHeadBranch = helpers.GetEnv("PR_HEAD_BRANCH", prHeadBranch, debug)
prBaseBranch = helpers.GetEnv("PR_BASE_BRANCH", prBaseBranch, debug)
environmentType = helpers.GetEnv("ENVIRONMENT_TYPE", environmentType, debug)
Expand All @@ -51,7 +62,7 @@ func collectBuildValues(debug bool, activeEnv, standbyEnv *bool,

lCompose := lagoon.Compose{}
// unmarshal the docker-compose.yml file
if err := lagoon.UnmarshaDockerComposeYAML(lYAML.DockerComposeYAML, &lCompose); err != nil {
if err = lagoon.UnmarshaDockerComposeYAML(lYAML.DockerComposeYAML, &lCompose); err != nil {
return err
}

Expand All @@ -60,11 +71,14 @@ func collectBuildValues(debug bool, activeEnv, standbyEnv *bool,
lagoonValues.EnvironmentType = environmentType
lagoonValues.BuildType = buildType
lagoonValues.LagoonVersion = lagoonVersion
lagoonValues.ActiveEnvironment = activeEnvironment
lagoonValues.StandbyEnvironment = standbyEnvironment
switch buildType {
case "branch", "promote":
lagoonValues.Branch = branch
case "pullrequest":
lagoonValues.PRNumber = prNumber
lagoonValues.PRTitle = prTitle
lagoonValues.PRHeadBranch = prHeadBranch
lagoonValues.PRBaseBranch = prBaseBranch
}
Expand Down Expand Up @@ -106,11 +120,11 @@ func collectBuildValues(debug bool, activeEnv, standbyEnv *bool,
envVars := []lagoon.EnvironmentVariable{}
json.Unmarshal([]byte(projectVariables), &projectVars)
json.Unmarshal([]byte(environmentVariables), &envVars)
*lagoonEnvVars = lagoon.MergeVariables(projectVars, envVars)
mergedVariables := lagoon.MergeVariables(projectVars, envVars)

// create the services map
lagoonValues.Services = make(map[string]lagoon.ServiceValues)
lagoonServiceTypes, _ := lagoon.GetLagoonVariable("LAGOON_SERVICE_TYPES", []string{"build"}, *lagoonEnvVars)
lagoonServiceTypes, _ := lagoon.GetLagoonVariable("LAGOON_SERVICE_TYPES", []string{"build"}, mergedVariables)
// convert docker-compose services to servicevalues
for csName, csValues := range lCompose.Services {
cService, err := composeToServiceValues(lYAML, lagoonValues, lagoonServiceTypes, csName, csValues)
Expand All @@ -119,6 +133,29 @@ func collectBuildValues(debug bool, activeEnv, standbyEnv *bool,
}
lagoonValues.Services[csName] = cService
}

// create all the routes for this environment and store the primary and secondary routes into values
// populate the autogenRoutes, mainRoutes and activeStandbyRoutes here and load them
lagoonValues.Route, lagoonValues.Routes, lagoonValues.AutogeneratedRoutes, err = generateRoutes(
mergedVariables,
*lagoonValues,
*lYAML,
autogenRoutes,
mainRoutes,
activeStandbyRoutes,
*activeEnv,
*standbyEnv,
debug,
)
if err != nil {
return err
}

// collect a bunch of the default LAGOON_X based build variables that are injected into `lagoon-env` and make them available
configVars := collectBuildVariables(*lagoonValues)
// add the calculated build runtime variables into the existing variable slice
// this will later be used to add `runtime|global` scope into the `lagoon-env` configmap
*lagoonEnvVars = lagoon.MergeVariables(mergedVariables, configVars)
return nil
}

Expand Down Expand Up @@ -187,6 +224,35 @@ func composeToServiceValues(lYAML *lagoon.YAML, lagoonValues *lagoon.BuildValues
return lagoon.ServiceValues{}, fmt.Errorf("Service %s has no `lagoon.type` label in the docker-compose.yml file", csName)
}

func collectBuildVariables(lagoonValues lagoon.BuildValues) []lagoon.EnvironmentVariable {
vars := []lagoon.EnvironmentVariable{}
vars = append(vars, lagoon.EnvironmentVariable{Name: "LAGOON_PROJECT", Value: lagoonValues.Project, Scope: "runtime"})
vars = append(vars, lagoon.EnvironmentVariable{Name: "LAGOON_ENVIRONMENT", Value: lagoonValues.Project, Scope: "runtime"})
vars = append(vars, lagoon.EnvironmentVariable{Name: "LAGOON_ENVIRONMENT_TYPE", Value: lagoonValues.Project, Scope: "runtime"})
vars = append(vars, lagoon.EnvironmentVariable{Name: "LAGOON_GIT_SHA", Value: lagoonValues.Project, Scope: "runtime"})
vars = append(vars, lagoon.EnvironmentVariable{Name: "LAGOON_KUBERNETES", Value: lagoonValues.Project, Scope: "runtime"})
vars = append(vars, lagoon.EnvironmentVariable{Name: "LAGOON_GIT_SAFE_BRANCH", Value: lagoonValues.Project, Scope: "runtime"}) //deprecated???
if lagoonValues.BuildType == "branch" {
vars = append(vars, lagoon.EnvironmentVariable{Name: "LAGOON_GIT_BRANCH", Value: lagoonValues.Branch, Scope: "runtime"})
}
if lagoonValues.BuildType == "pullrequest" {
vars = append(vars, lagoon.EnvironmentVariable{Name: "LAGOON_PR_HEAD_BRANCH", Value: lagoonValues.PRHeadBranch, Scope: "runtime"})
vars = append(vars, lagoon.EnvironmentVariable{Name: "LAGOON_PR_BASE_BRANCH", Value: lagoonValues.PRBaseBranch, Scope: "runtime"})
vars = append(vars, lagoon.EnvironmentVariable{Name: "LAGOON_PR_TITLE", Value: lagoonValues.PRTitle, Scope: "runtime"})
vars = append(vars, lagoon.EnvironmentVariable{Name: "LAGOON_PR_NUMBER", Value: lagoonValues.PRNumber, Scope: "runtime"})
}
if lagoonValues.ActiveEnvironment != "" {
vars = append(vars, lagoon.EnvironmentVariable{Name: "LAGOON_ACTIVE_ENVIRONMENT", Value: lagoonValues.ActiveEnvironment, Scope: "runtime"})
}
if lagoonValues.StandbyEnvironment != "" {
vars = append(vars, lagoon.EnvironmentVariable{Name: "LAGOON_STANDBY_ENVIRONMENT", Value: lagoonValues.StandbyEnvironment, Scope: "runtime"})
}
vars = append(vars, lagoon.EnvironmentVariable{Name: "LAGOON_ROUTE", Value: lagoonValues.Route, Scope: "runtime"})
vars = append(vars, lagoon.EnvironmentVariable{Name: "LAGOON_ROUTES", Value: strings.Join(lagoonValues.Routes, ","), Scope: "runtime"})
vars = append(vars, lagoon.EnvironmentVariable{Name: "LAGOON_AUTOGENERATED_ROUTES", Value: strings.Join(lagoonValues.AutogeneratedRoutes, ","), Scope: "runtime"})
return vars
}

func unsetEnvVars(localVars []struct {
name string
value string
Expand Down
5 changes: 4 additions & 1 deletion cmd/identify_feature.go
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,10 @@ func IdentifyFeatureFlag(name string, debug bool) (string, error) {
lagoonEnvVars := []lagoon.EnvironmentVariable{}
lagoonValues := lagoon.BuildValues{}
lYAML := lagoon.YAML{}
err := collectBuildValues(debug, &activeEnv, &standbyEnv, &lagoonEnvVars, &lagoonValues, &lYAML)
autogenRoutes := &lagoon.RoutesV2{}
mainRoutes := &lagoon.RoutesV2{}
activeStanbyRoutes := &lagoon.RoutesV2{}
err := collectBuildValues(debug, &activeEnv, &standbyEnv, &lagoonEnvVars, &lagoonValues, &lYAML, autogenRoutes, mainRoutes, activeStanbyRoutes)
if err != nil {
return "", err
}
Expand Down
12 changes: 6 additions & 6 deletions cmd/identify_feature_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@ func TestIdentifyFeatureFlag(t *testing.T) {
buildType: "branch",
lagoonVersion: "v2.7.x",
branch: "main",
projectVars: `[{"name":"LAGOON_FEATURE_FLAG_ROOTLESS_WORKLOAD","value":"enabled","scope":"build"}]`,
projectVars: `[{"name":"LAGOON_SYSTEM_ROUTER_PATTERN","value":"${service}-${project}-${environment}.example.com","scope":"internal_system"},{"name":"LAGOON_FEATURE_FLAG_ROOTLESS_WORKLOAD","value":"enabled","scope":"build"}]`,
envVars: `[]`,
secretPrefix: "fastly-api-",
lagoonYAML: "test-resources/template-ingress/single-lagoon.yml",
Expand All @@ -72,7 +72,7 @@ func TestIdentifyFeatureFlag(t *testing.T) {
buildType: "branch",
lagoonVersion: "v2.7.x",
branch: "main",
projectVars: `[]`,
projectVars: `[{"name":"LAGOON_SYSTEM_ROUTER_PATTERN","value":"${service}-${project}-${environment}.example.com","scope":"internal_system"}]`,
envVars: `[{"name":"LAGOON_FEATURE_FLAG_ROOTLESS_WORKLOAD","value":"enabled","scope":"build"}]`,
secretPrefix: "fastly-api-",
lagoonYAML: "test-resources/template-ingress/single-lagoon.yml",
Expand All @@ -92,7 +92,7 @@ func TestIdentifyFeatureFlag(t *testing.T) {
buildType: "branch",
lagoonVersion: "v2.7.x",
branch: "main",
projectVars: `[]`,
projectVars: `[{"name":"LAGOON_SYSTEM_ROUTER_PATTERN","value":"${service}-${project}-${environment}.example.com","scope":"internal_system"}]`,
envVars: `[]`,
secretPrefix: "fastly-api-",
lagoonYAML: "test-resources/template-ingress/single-lagoon.yml",
Expand Down Expand Up @@ -121,7 +121,7 @@ func TestIdentifyFeatureFlag(t *testing.T) {
buildType: "branch",
lagoonVersion: "v2.7.x",
branch: "main",
projectVars: `[]`,
projectVars: `[{"name":"LAGOON_SYSTEM_ROUTER_PATTERN","value":"${service}-${project}-${environment}.example.com","scope":"internal_system"}]`,
envVars: `[]`,
secretPrefix: "fastly-api-",
lagoonYAML: "test-resources/template-ingress/single-lagoon.yml",
Expand Down Expand Up @@ -154,7 +154,7 @@ func TestIdentifyFeatureFlag(t *testing.T) {
buildType: "branch",
lagoonVersion: "v2.7.x",
branch: "main",
projectVars: `[{"name":"LAGOON_FEATURE_FLAG_ROOTLESS_WORKLOAD","value":"enabled","scope":"build"}]`,
projectVars: `[{"name":"LAGOON_SYSTEM_ROUTER_PATTERN","value":"${service}-${project}-${environment}.example.com","scope":"internal_system"},{"name":"LAGOON_FEATURE_FLAG_ROOTLESS_WORKLOAD","value":"enabled","scope":"build"}]`,
envVars: `[]`,
secretPrefix: "fastly-api-",
lagoonYAML: "test-resources/template-ingress/single-lagoon.yml",
Expand Down Expand Up @@ -187,7 +187,7 @@ func TestIdentifyFeatureFlag(t *testing.T) {
buildType: "branch",
lagoonVersion: "v2.7.x",
branch: "main",
projectVars: `[{"name":"LAGOON_FEATURE_FLAG_ROOTLESS_WORKLOAD","value":"enabled","scope":"build"}]`,
projectVars: `[{"name":"LAGOON_SYSTEM_ROUTER_PATTERN","value":"${service}-${project}-${environment}.example.com","scope":"internal_system"},{"name":"LAGOON_FEATURE_FLAG_ROOTLESS_WORKLOAD","value":"enabled","scope":"build"}]`,
envVars: `[]`,
secretPrefix: "fastly-api-",
lagoonYAML: "test-resources/template-ingress/single-lagoon.yml",
Expand Down
Loading

0 comments on commit 1e8725a

Please sign in to comment.