diff --git a/cmd/template_autogen_ingress_test.go b/cmd/template_autogen_ingress_test.go index 2f1e646e..b1aec3ed 100644 --- a/cmd/template_autogen_ingress_test.go +++ b/cmd/template_autogen_ingress_test.go @@ -1,6 +1,7 @@ package cmd import ( + "encoding/base64" "fmt" "io/fs" "os" @@ -551,6 +552,44 @@ func TestAutogeneratedIngressGeneration(t *testing.T) { templatePath: "testdata/output", want: "internal/testdata/basic/autogen-templates/test29-autogenerated-pathroutes", }, + { + name: "autogenerated-routes-api-config-against-existing-reuslt", + args: testdata.GetSeedData( + testdata.TestData{ + ProjectName: "example-project", + EnvironmentName: "main", + Branch: "main", + LagoonYAML: "internal/testdata/node/lagoon.yml", + ProjectVariables: []lagoon.EnvironmentVariable{ + { + Name: "LAGOON_API_AUTOGENERATED_CONFIG", + Value: base64.URLEncoding.EncodeToString([]byte(`{"enabled":true,"allowPullRequests":true,"tlsAcme":true,"disableRequestVerification":false,"insecure":"Redirect","prefixes":[],"pathRoutes":[]}`)), + Scope: "internal_system", + }, + }, + }, true), + templatePath: "testoutput", + want: "internal/testdata/node/autogen-templates/ingress-1", + }, + { + name: "autogenerated-routes-api-config", + args: testdata.GetSeedData( + testdata.TestData{ + ProjectName: "example-project", + EnvironmentName: "main", + Branch: "main", + LagoonYAML: "internal/testdata/node/lagoon.yml", + ProjectVariables: []lagoon.EnvironmentVariable{ + { + Name: "LAGOON_API_AUTOGENERATED_CONFIG", + Value: base64.URLEncoding.EncodeToString([]byte(`{"enabled":true,"allowPullRequests":true,"tlsAcme":true,"disableRequestVerification":false,"prefixes":["ie","de","abc"],"pathRoutes":[{"toService":"node","fromService":"node","path":"/"}],"insecure":"Redirect"}`)), + Scope: "internal_system", + }, + }, + }, true), + templatePath: "testoutput", + want: "internal/testdata/node/autogen-templates/autogenerated-routes-api-config", + }, } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { diff --git a/cmd/template_ingress_test.go b/cmd/template_ingress_test.go index 7d9864cf..311b0f96 100644 --- a/cmd/template_ingress_test.go +++ b/cmd/template_ingress_test.go @@ -432,6 +432,78 @@ func TestTemplateRoutes(t *testing.T) { templatePath: "testoutput", want: "internal/testdata/node/ingress-templates/ingress-24", }, + { + name: "active-standby-api-routes", + args: testdata.GetSeedData( + testdata.TestData{ + ProjectName: "example-project", + EnvironmentName: "prod-left", + Branch: "prod-left", + LagoonYAML: "internal/testdata/node/lagoon.yml", + ProjectVariables: []lagoon.EnvironmentVariable{ + { + Name: "LAGOON_API_ROUTES", + Value: base64.URLEncoding.EncodeToString([]byte(`{"routes":[ + {"type":"ACTIVE", "domain":"active.example.com","service":"node","alternativeNames":[],"annotations":{},"pathRoutes":[],"tlsAcme":true,"insecure":"Redirect","hstsEnabled":false,"hstsIncludeSubdomains":false,"hstsPreload":false,"hstsMaxAge":3153600,"primary":false,"source":"API"}, + {"domain":"other.example.com","service":"node","alternativeNames":[],"annotations":{},"pathRoutes":[],"tlsAcme":true,"insecure":"Redirect","hstsEnabled":false,"hstsIncludeSubdomains":false,"hstsPreload":false,"hstsMaxAge":3153600,"primary":false,"source":"API"}, + {"domain":"test.example.com","service":"node","alternativeNames":[],"annotations":{},"pathRoutes":[],"tlsAcme":true,"insecure":"Redirect","hstsEnabled":false,"hstsIncludeSubdomains":false,"hstsPreload":false,"hstsMaxAge":3153600,"primary":true,"source":"API"} + ]}`)), + Scope: "internal_system", + }, + }, + }, true), + templatePath: "testoutput", + want: "internal/testdata/node/ingress-templates/active-standby-api-routes", + }, + { + name: "api-defined-routes-with-lagoon-yml", + args: testdata.GetSeedData( + testdata.TestData{ + ProjectName: "example-project", + EnvironmentName: "main", + Branch: "main", + LagoonYAML: "internal/testdata/node/lagoon.yml", + ProjectVariables: []lagoon.EnvironmentVariable{ + { + Name: "LAGOON_API_ROUTES", + Value: base64.URLEncoding.EncodeToString([]byte(`{"routes":[ + {"domain":"other.example.com","service":"node","alternativeNames":[],"annotations":{},"pathRoutes":[],"tlsAcme":true,"insecure":"Redirect","hstsEnabled":false,"hstsIncludeSubdomains":false,"hstsPreload":false,"hstsMaxAge":3153600,"primary":false,"source":"API"}, + {"domain":"test.example.com","service":"node","alternativeNames":[],"annotations":{},"pathRoutes":[],"tlsAcme":true,"insecure":"Redirect","hstsEnabled":false,"hstsIncludeSubdomains":false,"hstsPreload":false,"hstsMaxAge":3153600,"primary":true,"source":"API"} + ]}`)), + Scope: "internal_system", + }, + }, + }, true), + templatePath: "testoutput", + want: "internal/testdata/node/ingress-templates/api-defined-routes-with-lagoon-yml", + }, + { + name: "api-defined-routes-with-lagoon-yml-fastly", + args: testdata.GetSeedData( + testdata.TestData{ + ProjectName: "example-project", + EnvironmentName: "main", + Branch: "main", + LagoonYAML: "internal/testdata/node/lagoon.yml", + ProjectVariables: []lagoon.EnvironmentVariable{ + { + Name: "LAGOON_FASTLY_SERVICE_ID", + Value: "service-id:true", + Scope: "build", + }, + { + Name: "LAGOON_API_ROUTES", + Value: base64.URLEncoding.EncodeToString([]byte(`{"routes":[ + {"domain":"other.example.com","service":"node","alternativeNames":[],"annotations":{},"pathRoutes":[],"tlsAcme":true,"insecure":"Redirect","hstsEnabled":false,"hstsIncludeSubdomains":false,"hstsPreload":false,"hstsMaxAge":3153600,"primary":false,"source":"API"}, + {"domain":"test.example.com","service":"node","alternativeNames":[],"annotations":{},"pathRoutes":[],"tlsAcme":true,"insecure":"Redirect","hstsEnabled":false,"hstsIncludeSubdomains":false,"hstsPreload":false,"hstsMaxAge":3153600,"primary":true,"source":"API"} + ]}`)), + Scope: "internal_system", + }, + }, + }, true), + templatePath: "testoutput", + want: "internal/testdata/node/ingress-templates/api-defined-routes-with-lagoon-yml-fastly", + }, } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { diff --git a/internal/collector/testdata/json-result/result-1.json b/internal/collector/testdata/json-result/result-1.json index 80356a40..1c11c022 100644 --- a/internal/collector/testdata/json-result/result-1.json +++ b/internal/collector/testdata/json-result/result-1.json @@ -314,7 +314,8 @@ "lagoon.sh/project": "example-project", "lagoon.sh/service": "example.com", "lagoon.sh/service-type": "custom-ingress", - "lagoon.sh/template": "custom-ingress-0.1.0" + "lagoon.sh/template": "custom-ingress-0.1.0", + "route.lagoon.sh/source": "yaml" }, "annotations": { "fastly.amazee.io/service-id": "service-id", @@ -386,7 +387,8 @@ "lagoon.sh/project": "example-project", "lagoon.sh/service": "node", "lagoon.sh/service-type": "node", - "lagoon.sh/template": "autogenerated-ingress-0.1.0" + "lagoon.sh/template": "autogenerated-ingress-0.1.0", + "route.lagoon.sh/source": "autogenerated" }, "annotations": { "fastly.amazee.io/watch": "false", diff --git a/internal/collector/testdata/json-result/result-2.json b/internal/collector/testdata/json-result/result-2.json index fd4f4913..1a24be49 100644 --- a/internal/collector/testdata/json-result/result-2.json +++ b/internal/collector/testdata/json-result/result-2.json @@ -189,7 +189,8 @@ "lagoon.sh/project": "example-project", "lagoon.sh/service": "example.com", "lagoon.sh/service-type": "custom-ingress", - "lagoon.sh/template": "custom-ingress-0.1.0" + "lagoon.sh/template": "custom-ingress-0.1.0", + "route.lagoon.sh/source": "yaml" }, "annotations": { "fastly.amazee.io/service-id": "service-id", @@ -261,7 +262,8 @@ "lagoon.sh/project": "example-project", "lagoon.sh/service": "node", "lagoon.sh/service-type": "node", - "lagoon.sh/template": "autogenerated-ingress-0.1.0" + "lagoon.sh/template": "autogenerated-ingress-0.1.0", + "route.lagoon.sh/source": "autogenerated" }, "annotations": { "fastly.amazee.io/watch": "false", diff --git a/internal/collector/testdata/result/result-1/lagoon-ingress.yaml b/internal/collector/testdata/result/result-1/lagoon-ingress.yaml index e12e5443..0265aaa9 100644 --- a/internal/collector/testdata/result/result-1/lagoon-ingress.yaml +++ b/internal/collector/testdata/result/result-1/lagoon-ingress.yaml @@ -31,6 +31,7 @@ items: lagoon.sh/service: example.com lagoon.sh/service-type: custom-ingress lagoon.sh/template: custom-ingress-0.1.0 + route.lagoon.sh/source: yaml name: example.com namespace: example-project-main resourceVersion: "1" @@ -79,6 +80,7 @@ items: lagoon.sh/service: node lagoon.sh/service-type: node lagoon.sh/template: autogenerated-ingress-0.1.0 + route.lagoon.sh/source: autogenerated name: node namespace: example-project-main resourceVersion: "1" diff --git a/internal/collector/testdata/result/result-2/lagoon-ingress.yaml b/internal/collector/testdata/result/result-2/lagoon-ingress.yaml index e12e5443..0265aaa9 100644 --- a/internal/collector/testdata/result/result-2/lagoon-ingress.yaml +++ b/internal/collector/testdata/result/result-2/lagoon-ingress.yaml @@ -31,6 +31,7 @@ items: lagoon.sh/service: example.com lagoon.sh/service-type: custom-ingress lagoon.sh/template: custom-ingress-0.1.0 + route.lagoon.sh/source: yaml name: example.com namespace: example-project-main resourceVersion: "1" @@ -79,6 +80,7 @@ items: lagoon.sh/service: node lagoon.sh/service-type: node lagoon.sh/template: autogenerated-ingress-0.1.0 + route.lagoon.sh/source: autogenerated name: node namespace: example-project-main resourceVersion: "1" diff --git a/internal/collector/testdata/seed/seed-1/ingress-example.com.yaml b/internal/collector/testdata/seed/seed-1/ingress-example.com.yaml index bb27ab4d..973e232f 100644 --- a/internal/collector/testdata/seed/seed-1/ingress-example.com.yaml +++ b/internal/collector/testdata/seed/seed-1/ingress-example.com.yaml @@ -31,6 +31,7 @@ metadata: lagoon.sh/service: example.com lagoon.sh/service-type: custom-ingress lagoon.sh/template: custom-ingress-0.1.0 + route.lagoon.sh/source: yaml name: example.com spec: rules: diff --git a/internal/collector/testdata/seed/seed-1/ingress-node.yaml b/internal/collector/testdata/seed/seed-1/ingress-node.yaml index 577f24f9..3792c2ad 100644 --- a/internal/collector/testdata/seed/seed-1/ingress-node.yaml +++ b/internal/collector/testdata/seed/seed-1/ingress-node.yaml @@ -26,6 +26,7 @@ metadata: lagoon.sh/service: node lagoon.sh/service-type: node lagoon.sh/template: autogenerated-ingress-0.1.0 + route.lagoon.sh/source: autogenerated name: node spec: rules: diff --git a/internal/collector/testdata/seed/seed-2/ingress-example.com.yaml b/internal/collector/testdata/seed/seed-2/ingress-example.com.yaml index bb27ab4d..973e232f 100644 --- a/internal/collector/testdata/seed/seed-2/ingress-example.com.yaml +++ b/internal/collector/testdata/seed/seed-2/ingress-example.com.yaml @@ -31,6 +31,7 @@ metadata: lagoon.sh/service: example.com lagoon.sh/service-type: custom-ingress lagoon.sh/template: custom-ingress-0.1.0 + route.lagoon.sh/source: yaml name: example.com spec: rules: diff --git a/internal/collector/testdata/seed/seed-2/ingress-node.yaml b/internal/collector/testdata/seed/seed-2/ingress-node.yaml index 577f24f9..3792c2ad 100644 --- a/internal/collector/testdata/seed/seed-2/ingress-node.yaml +++ b/internal/collector/testdata/seed/seed-2/ingress-node.yaml @@ -26,6 +26,7 @@ metadata: lagoon.sh/service: node lagoon.sh/service-type: node lagoon.sh/template: autogenerated-ingress-0.1.0 + route.lagoon.sh/source: autogenerated name: node spec: rules: diff --git a/internal/generator/generator.go b/internal/generator/generator.go index f303dc35..d4b0cf11 100644 --- a/internal/generator/generator.go +++ b/internal/generator/generator.go @@ -1,6 +1,7 @@ package generator import ( + "encoding/base64" "encoding/json" "fmt" "net/url" @@ -283,6 +284,32 @@ func NewGenerator( buildValues.LagoonVersion = lagoonCoreVersion.Value } + lagoonAutogeneratedRouteConfig, _ := lagoon.GetLagoonVariable("LAGOON_API_AUTOGENERATED_CONFIG", []string{"internal_system"}, buildValues.EnvironmentVariables) + if lagoonAutogeneratedRouteConfig != nil { + autogenConfig := &lagoon.Autogenerate{} + rawJSONStr, _ := base64.StdEncoding.DecodeString(lagoonAutogeneratedRouteConfig.Value) + rawJSON := []byte(rawJSONStr) + err := json.Unmarshal(rawJSON, autogenConfig) + if err != nil { + return nil, fmt.Errorf("couldn't unmarshal autogenerated route config from Lagoon API, is it actually JSON that has been base64 encoded?: %v", err) + } + environment := lagoon.Environment{} + if buildValues.LagoonYAML.Environments == nil { + buildValues.LagoonYAML.Environments = make(lagoon.Environments) + } else { + environment = buildValues.LagoonYAML.Environments[buildValues.Branch] + } + // replace the project autogenerated routes config with one from the api + // this replaces the entire configuration that would be defined in the .lagoon.yml file + // thus, the .lagoon.yml is ignored for the `routes.autogenerate` stanza and anything that might be defined for specific environments + // any api defined autogenerated route configurations + buildValues.LagoonYAML.Routes.Autogenerate = *autogenConfig + // overwrite the environment with the project values, autogenerated route config + environment.AutogeneratePathRoutes = autogenConfig.PathRoutes + environment.AutogenerateRoutes = autogenConfig.Enabled + buildValues.LagoonYAML.Environments[buildValues.Branch] = environment + } + // handle generating the container registry login generation here, extract from the `.lagoon.yml` firstly if err := configureContainerRegistries(&buildValues); err != nil { return nil, err diff --git a/internal/generator/ingress.go b/internal/generator/ingress.go index 4a51883d..84a2cc03 100644 --- a/internal/generator/ingress.go +++ b/internal/generator/ingress.go @@ -35,8 +35,6 @@ func generateRoutes( autogen = append(autogen, fmt.Sprintf("%s%s", prefix, autogenRoutes.Routes[i].Domain)) if i == 0 { primary = fmt.Sprintf("%s%s", prefix, autogenRoutes.Routes[i].Domain) - // } else { - // remainders = append(remainders, fmt.Sprintf("%s%s", prefix, autogenRoutes.Routes[i].Domain)) } remainders = append(remainders, fmt.Sprintf("%s%s", prefix, autogenRoutes.Routes[i].Domain)) for a := 0; a < len(autogenRoutes.Routes[i].AlternativeNames); a++ { @@ -54,14 +52,20 @@ func generateRoutes( // get the first route from the list of routes, replace the previous one if necessary if len(mainRoutes.Routes) > 0 { - // if primary != "" { - // remainders = append(remainders, primary) - // } + apiPrimary := false + // first check of the routes for any api provided routes that may be marked as the `primary` route for i := 0; i < len(mainRoutes.Routes); i++ { - if i == 0 { + // if any of the routes have the `Primary` flag set to true in the API + // handle setting it as the primary route + if mainRoutes.Routes[i].Primary != nil && *mainRoutes.Routes[i].Primary { + apiPrimary = true + primary = fmt.Sprintf("%s%s", prefix, mainRoutes.Routes[i].Domain) + } + } + // then second run through to determine the primary if an api primary was not found + for i := 0; i < len(mainRoutes.Routes); i++ { + if i == 0 && !apiPrimary { primary = fmt.Sprintf("%s%s", prefix, mainRoutes.Routes[i].Domain) - // } else { - // remainders = append(remainders, fmt.Sprintf("%s%s", prefix, mainRoutes.Routes[i].Domain)) } remainders = append(remainders, fmt.Sprintf("%s%s", prefix, mainRoutes.Routes[i].Domain)) for a := 0; a < len(mainRoutes.Routes[i].AlternativeNames); a++ { @@ -81,17 +85,11 @@ func generateRoutes( } // get the first route from the list of routes, replace the previous one if necessary if len(activeStanbyRoutes.Routes) > 0 { - // if primary != "" { - // remainders = append(remainders, primary) - // } for i := 0; i < len(activeStanbyRoutes.Routes); i++ { if i == 0 { primary = fmt.Sprintf("%s%s", prefix, activeStanbyRoutes.Routes[i].Domain) - // } else { - // remainders = append(remainders, fmt.Sprintf("%s%s", prefix, activeStanbyRoutes.Routes[i].Domain)) } remainders = append(remainders, fmt.Sprintf("%s%s", prefix, activeStanbyRoutes.Routes[i].Domain)) - // remainders = append(remainders, fmt.Sprintf("%s%s", prefix, activeStanbyRoutes.Routes[i].Domain)) for a := 0; a < len(activeStanbyRoutes.Routes[i].AlternativeNames); a++ { remainders = append(remainders, fmt.Sprintf("%s%s", prefix, activeStanbyRoutes.Routes[i].AlternativeNames[a])) } @@ -224,6 +222,8 @@ func generateAutogenRoutes( AlternativeNames: alternativeNames, RequestVerification: helpers.BoolPtr(service.AutogeneratedRoutesRequestVerification), PathRoutes: pathRoutes, + // @TODO: eventually use machinery/schema instead of string + Source: "AUTOGENERATED", } autogenRoutes.Routes = append(autogenRoutes.Routes, autogenRoute) } @@ -319,10 +319,15 @@ func getRoutesFromAPIEnvVar( ) (*lagoon.RoutesV2, error) { apiRoutes := &lagoon.RoutesV2{} lagoonRoutesJSON, _ := lagoon.GetLagoonVariable("LAGOON_ROUTES_JSON", []string{"build", "global"}, envVars) + lagoonAPIRoutes, _ := lagoon.GetLagoonVariable("LAGOON_API_ROUTES", []string{"internal_system"}, envVars) + // if `LAGOON_ROUTES_JSON` is present, prefer it first to so not to break existing configurations if lagoonRoutesJSON != nil { if debug { fmt.Println("Collecting routes from environment variable LAGOON_ROUTES_JSON") } + if lagoonAPIRoutes != nil { + fmt.Println("Routes have also been defined in the API, these are ignored as LAGOON_ROUTES_JSON is configured. You should migrate all routes to the API.") + } // if the routesJSON is populated, then attempt to decode and unmarshal it rawJSONStr, _ := base64.StdEncoding.DecodeString(lagoonRoutesJSON.Value) rawJSON := []byte(rawJSONStr) @@ -330,6 +335,19 @@ func getRoutesFromAPIEnvVar( if err != nil { return nil, fmt.Errorf("couldn't unmarshal routes from Lagoon API, is it actually JSON that has been base64 encoded?: %v", err) } + } else { + if lagoonAPIRoutes != nil { + if debug { + fmt.Println("Collecting routes from environment variable LAGOON_API_ROUTES") + } + // if the routesJSON is populated, then attempt to decode and unmarshal it + rawJSONStr, _ := base64.StdEncoding.DecodeString(lagoonAPIRoutes.Value) + rawJSON := []byte(rawJSONStr) + err := json.Unmarshal(rawJSON, apiRoutes) + if err != nil { + return nil, fmt.Errorf("couldn't unmarshal routes from Lagoon API, is it actually JSON that has been base64 encoded?: %v", err) + } + } } return apiRoutes, nil } diff --git a/internal/generator/ingress_test.go b/internal/generator/ingress_test.go index c3d68b60..8287fd98 100644 --- a/internal/generator/ingress_test.go +++ b/internal/generator/ingress_test.go @@ -1,6 +1,7 @@ package generator import ( + "encoding/base64" "encoding/json" "reflect" "testing" @@ -170,6 +171,7 @@ func Test_generateAndMerge(t *testing.T) { AlternativeNames: []string{}, IngressName: "a.example.com", RequestVerification: helpers.BoolPtr(false), + Source: "API", }, { Domain: "b.example.com", @@ -203,6 +205,7 @@ func Test_generateAndMerge(t *testing.T) { AlternativeNames: []string{}, IngressName: "test1.example.com", RequestVerification: helpers.BoolPtr(false), + Source: "API", }, }, }, @@ -243,6 +246,7 @@ func Test_generateAndMerge(t *testing.T) { AlternativeNames: []string{}, IngressName: "test1.example.com", RequestVerification: helpers.BoolPtr(false), + Source: "API", }, { Domain: "a.example.com", @@ -254,6 +258,7 @@ func Test_generateAndMerge(t *testing.T) { AlternativeNames: []string{}, IngressName: "a.example.com", RequestVerification: helpers.BoolPtr(false), + Source: "API", }, }, }, @@ -320,6 +325,7 @@ func Test_generateAndMerge(t *testing.T) { AlternativeNames: []string{}, IngressName: "a.example.com", RequestVerification: helpers.BoolPtr(false), + Source: "API", }, { Domain: "b.example.com", @@ -356,6 +362,7 @@ func Test_generateAndMerge(t *testing.T) { AlternativeNames: []string{}, IngressName: "test1.example.com", RequestVerification: helpers.BoolPtr(false), + Source: "API", }, }, }, @@ -414,6 +421,7 @@ func Test_generateAndMerge(t *testing.T) { AlternativeNames: []string{}, IngressName: "a.example.com", RequestVerification: helpers.BoolPtr(false), + Source: "API", }, }, }, @@ -938,6 +946,7 @@ func Test_generateAutogenRoutes(t *testing.T) { }, IngressName: "nginx", RequestVerification: helpers.BoolPtr(false), + Source: "AUTOGENERATED", }, }, }, @@ -992,6 +1001,7 @@ func Test_generateAutogenRoutes(t *testing.T) { }, IngressName: "nginx", RequestVerification: helpers.BoolPtr(false), + Source: "AUTOGENERATED", }, }, }, @@ -1052,6 +1062,7 @@ func Test_generateAutogenRoutes(t *testing.T) { }, IngressName: "nginx", RequestVerification: helpers.BoolPtr(false), + Source: "AUTOGENERATED", }, }, }, @@ -1129,6 +1140,7 @@ func Test_generateAutogenRoutes(t *testing.T) { Path: "/api/v1", }, }, + Source: "AUTOGENERATED", }, { Domain: "node-example-com-main.example.com", @@ -1148,6 +1160,7 @@ func Test_generateAutogenRoutes(t *testing.T) { }, IngressName: "node", RequestVerification: helpers.BoolPtr(false), + Source: "AUTOGENERATED", }, }, }, @@ -1277,6 +1290,94 @@ func Test_generateRoutes(t *testing.T) { want1: []string{"https://nginx-example-com-main.example.com", "https://a.example.com", "https://b.example.com", "https://c.example.com"}, want2: []string{"https://nginx-example-com-main.example.com"}, }, + { + name: "test-api-defined-routes", + args: args{ + envVars: []lagoon.EnvironmentVariable{ + { + Name: "LAGOON_SYSTEM_ROUTER_PATTERN", + Value: "${service}-${project}-${environment}.example.com", + Scope: "internal_system", + }, + { + Name: "LAGOON_API_ROUTES", + Value: base64.URLEncoding.EncodeToString([]byte(`{"routes":[ + {"domain":"main.example.com","service":"nginx","alternativeNames":[],"annotations":{},"pathRoutes":[],"tlsAcme":true,"insecure":"Redirect","hstsEnabled":false,"hstsIncludeSubdomains":false,"hstsPreload":false,"hstsMaxAge":3153600,"primary":true,"source":"API"}, + {"domain":"other.example.com","service":"nginx","alternativeNames":[],"annotations":{},"pathRoutes":[],"tlsAcme":true,"insecure":"Redirect","hstsEnabled":false,"hstsIncludeSubdomains":false,"hstsPreload":false,"hstsMaxAge":3153600,"primary":false,"source":"API"}, + {"domain":"test.example.com","service":"nginx","alternativeNames":[],"annotations":{},"pathRoutes":[],"tlsAcme":true,"insecure":"Redirect","hstsEnabled":false,"hstsIncludeSubdomains":false,"hstsPreload":false,"hstsMaxAge":3153600,"primary":false,"source":"API"} + ]}`)), + Scope: "internal_system", + }, + }, + buildValues: BuildValues{ + Project: "example-com", + BuildType: "branch", + Environment: "main", + Branch: "main", + EnvironmentType: "development", + Namespace: "example-com-main", + Services: []ServiceValues{ + { + Name: "nginx", + Type: "nginx", + AutogeneratedRoutesEnabled: true, + AutogeneratedRoutesTLSAcme: true, + }, + }, + LagoonYAML: lagoon.YAML{}, + }, + autogenRoutes: &lagoon.RoutesV2{}, + mainRoutes: &lagoon.RoutesV2{}, + activeStanbyRoutes: &lagoon.RoutesV2{}, + }, + want: "https://main.example.com", + want1: []string{"https://nginx-example-com-main.example.com", "https://main.example.com", "https://other.example.com", "https://test.example.com"}, + want2: []string{"https://nginx-example-com-main.example.com"}, + }, + { + name: "test-api-defined-routes-with-activestandby", + args: args{ + envVars: []lagoon.EnvironmentVariable{ + { + Name: "LAGOON_SYSTEM_ROUTER_PATTERN", + Value: "${service}-${project}-${environment}.example.com", + Scope: "internal_system", + }, + { + Name: "LAGOON_API_ROUTES", + Value: base64.URLEncoding.EncodeToString([]byte(`{"routes":[ + {"type":"ACTIVE", "domain":"active.example.com","service":"nginx","alternativeNames":[],"annotations":{},"pathRoutes":[],"tlsAcme":true,"insecure":"Redirect","hstsEnabled":false,"hstsIncludeSubdomains":false,"hstsPreload":false,"hstsMaxAge":3153600,"primary":false,"source":"API"}, + {"domain":"other.example.com","service":"nginx","alternativeNames":[],"annotations":{},"pathRoutes":[],"tlsAcme":true,"insecure":"Redirect","hstsEnabled":false,"hstsIncludeSubdomains":false,"hstsPreload":false,"hstsMaxAge":3153600,"primary":false,"source":"API"}, + {"domain":"test.example.com","service":"nginx","alternativeNames":[],"annotations":{},"pathRoutes":[],"tlsAcme":true,"insecure":"Redirect","hstsEnabled":false,"hstsIncludeSubdomains":false,"hstsPreload":false,"hstsMaxAge":3153600,"primary":true,"source":"API"} + ]}`)), + Scope: "internal_system", + }, + }, + buildValues: BuildValues{ + Project: "example-com", + BuildType: "branch", + Environment: "main", + Branch: "main", + EnvironmentType: "development", + Namespace: "example-com-main", + Services: []ServiceValues{ + { + Name: "nginx", + Type: "nginx", + AutogeneratedRoutesEnabled: true, + AutogeneratedRoutesTLSAcme: true, + }, + }, + LagoonYAML: lagoon.YAML{}, + }, + autogenRoutes: &lagoon.RoutesV2{}, + mainRoutes: &lagoon.RoutesV2{}, + activeStanbyRoutes: &lagoon.RoutesV2{}, + }, + want: "https://test.example.com", + want1: []string{"https://nginx-example-com-main.example.com", "https://active.example.com", "https://other.example.com", "https://test.example.com"}, + want2: []string{"https://nginx-example-com-main.example.com"}, + }, } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { diff --git a/internal/lagoon/lagoon.go b/internal/lagoon/lagoon.go index 01c680c8..d6a5bfd7 100644 --- a/internal/lagoon/lagoon.go +++ b/internal/lagoon/lagoon.go @@ -107,11 +107,31 @@ type Autogenerate struct { Insecure string `json:"insecure"` Prefixes []string `json:"prefixes"` TLSAcme *bool `json:"tls-acme,omitempty"` - IngressClass string `json:"ingressClass"` + IngressClass string `json:"ingressClass,omitempty"` RequestVerification *bool `json:"disableRequestVerification,omitempty"` PathRoutes []AutogeneratePathRoute `json:"pathRoutes,omitempty"` } +// handle `tlsAcme` from the API and `tls-acme` from .lagoon.yml +// :ugh: legacy stuff +// maybe one day we can produce warnings/deprecation of certain fields but today is not that day +func (r *Autogenerate) UnmarshalJSON(data []byte) error { + type TempAutogenerate Autogenerate + tr := &struct { + TLSAcme_ *bool `json:"tlsAcme,omitempty"` + *TempAutogenerate + }{ + TempAutogenerate: (*TempAutogenerate)(r), + } + if err := json.Unmarshal(data, tr); err != nil { + return err + } + if tr.TLSAcme_ != nil { + r.TLSAcme = tr.TLSAcme_ + } + return nil +} + type AutogeneratePathRoute struct { PathRoute FromService string `json:"fromService"` diff --git a/internal/lagoon/routes.go b/internal/lagoon/routes.go index 60d6f6c3..cac64314 100644 --- a/internal/lagoon/routes.go +++ b/internal/lagoon/routes.go @@ -20,7 +20,7 @@ type RoutesV2 struct { type RouteV2 struct { Domain string `json:"domain"` LagoonService string `json:"service"` - ComposeService string `json:"composeService"` // the + ComposeService string `json:"composeService"` TLSAcme *bool `json:"tls-acme"` Migrate *bool `json:"migrate,omitempty"` Insecure *string `json:"insecure,omitempty"` @@ -40,6 +40,42 @@ type RouteV2 struct { WildcardApex *bool `json:"wildcardApex,omitempty"` RequestVerification *bool `json:"disableRequestVerification,omitempty"` PathRoutes []PathRoute `json:"pathRoutes,omitempty"` + Source string `json:"source,omitempty"` + Primary *bool `json:"primary,omitempty"` + Type RouteType `json:"type,omitempty"` +} + +// @TODO: Update machinery schema at some point +type RouteType string + +const ( + Standard RouteType = "STANDARD" + Active RouteType = "ACTIVE" + Standby RouteType = "STANDBY" +) + +// handle `tlsAcme`/`monitoringPath` from the API and `tls-acme`/`monitoring-path` from .lagoon.yml +// :ugh: legacy stuff +// maybe one day we can produce warnings/deprecation of certain fields but today is not that day +func (r *RouteV2) UnmarshalJSON(data []byte) error { + type TempRouteV2 RouteV2 + tr := &struct { + TLSAcme_ *bool `json:"tlsAcme,omitempty"` + MonitoringPath_ *string `json:"monitoringPath,omitempty"` + *TempRouteV2 + }{ + TempRouteV2: (*TempRouteV2)(r), + } + if err := json.Unmarshal(data, tr); err != nil { + return err + } + if tr.TLSAcme_ != nil { + r.TLSAcme = tr.TLSAcme_ + } + if tr.MonitoringPath_ != nil { + r.MonitoringPath = *tr.MonitoringPath_ + } + return nil } // Ingress represents a Lagoon route. @@ -351,6 +387,19 @@ func handleAPIRoute(defaultIngressClass string, apiRoute RouteV2) (RouteV2, erro routeAdd.IngressClass = defaultIngressClass } + // if the route comes through as an active or standby route from the api + // handle setting the migrate flag on the route + if apiRoute.Type == Active || apiRoute.Type == Standby { + routeAdd.Migrate = helpers.BoolPtr(true) + } + + // if an apiRoute source is not defined, set the route source to be api + // generally this shouldn't be unset unless it comes through in the older `LAGOON_ROUTES_JSON` variable + if apiRoute.Source != "API" { + // @TODO: Use schema at some point, for now hardcoded to the string + routeAdd.Source = "API" + } + // handle hsts here if apiRoute.HSTSEnabled != nil { routeAdd.HSTSEnabled = apiRoute.HSTSEnabled diff --git a/internal/lagoon/routes_test.go b/internal/lagoon/routes_test.go index de99b7e8..18202b88 100644 --- a/internal/lagoon/routes_test.go +++ b/internal/lagoon/routes_test.go @@ -584,6 +584,7 @@ func TestMergeRouteStructures(t *testing.T) { AlternativeNames: []string{}, IngressName: "www.example.com", RequestVerification: helpers.BoolPtr(false), + Source: "API", }, { Domain: "hsts.example.com", @@ -597,6 +598,7 @@ func TestMergeRouteStructures(t *testing.T) { AlternativeNames: []string{}, IngressName: "hsts.example.com", RequestVerification: helpers.BoolPtr(false), + Source: "API", }, { Domain: "another.example.com", @@ -608,6 +610,7 @@ func TestMergeRouteStructures(t *testing.T) { AlternativeNames: []string{}, IngressName: "another.example.com", RequestVerification: helpers.BoolPtr(false), + Source: "API", }, }, }, @@ -674,6 +677,7 @@ func TestMergeRouteStructures(t *testing.T) { WildcardApex: helpers.BoolPtr(true), IngressName: "wildcard-example.com", RequestVerification: helpers.BoolPtr(false), + Source: "API", }, { Domain: "a.example.com", @@ -687,6 +691,7 @@ func TestMergeRouteStructures(t *testing.T) { WildcardApex: helpers.BoolPtr(true), IngressName: "wildcard-a.example.com", RequestVerification: helpers.BoolPtr(false), + Source: "API", }, }, }, diff --git a/internal/templating/templates_ingress.go b/internal/templating/templates_ingress.go index 2a96df61..26d9a4c6 100644 --- a/internal/templating/templates_ingress.go +++ b/internal/templating/templates_ingress.go @@ -116,25 +116,37 @@ func GenerateIngressTemplate( if route.Fastly.ServiceID != "" { additionalAnnotations["fastly.amazee.io/service-id"] = route.Fastly.ServiceID } - if lValues.BuildType == "branch" { + + switch lValues.BuildType { + case "branch": additionalAnnotations["lagoon.sh/branch"] = lValues.Branch - } else if lValues.BuildType == "pullrequest" { + case "pullrequest": additionalAnnotations["lagoon.sh/prNumber"] = lValues.PRNumber additionalAnnotations["lagoon.sh/prHeadBranch"] = lValues.PRHeadBranch additionalAnnotations["lagoon.sh/prBaseBranch"] = lValues.PRBaseBranch - } - if *route.Insecure == "Allow" { + + switch *route.Insecure { + case "Allow": additionalAnnotations["nginx.ingress.kubernetes.io/ssl-redirect"] = "false" additionalAnnotations["ingress.kubernetes.io/ssl-redirect"] = "false" - } else if *route.Insecure == "Redirect" || *route.Insecure == "None" { + case "Redirect", "None": additionalAnnotations["nginx.ingress.kubernetes.io/ssl-redirect"] = "true" additionalAnnotations["ingress.kubernetes.io/ssl-redirect"] = "true" + } + if lValues.EnvironmentType == "development" || route.Autogenerated { additionalAnnotations["nginx.ingress.kubernetes.io/server-snippet"] = "add_header X-Robots-Tag \"noindex, nofollow\";\n" } + switch route.Source { + case "API", "AUTOGENERATED": + additionalLabels["route.lagoon.sh/source"] = strings.ToLower(route.Source) + default: + additionalLabels["route.lagoon.sh/source"] = "yaml" + } + // if idling request verification is in the `.lagoon.yml` and true, add the annotation. this supports production and development environment types // in the event that production environments support idling properly that option could be available to then // idle standby environments or production environments generally in opensource lagoon diff --git a/internal/templating/templates_ingress_test.go b/internal/templating/templates_ingress_test.go index 3a8fabeb..eabfbe13 100644 --- a/internal/templating/templates_ingress_test.go +++ b/internal/templating/templates_ingress_test.go @@ -43,6 +43,7 @@ func TestGenerateIngressTemplate(t *testing.T) { Watch: false, }, IngressName: "extra-long-name.a-really-long-name-that-should-truncate.www.example.com", + Source: "YAML", }, values: generator.BuildValues{ Project: "example-project", @@ -88,6 +89,7 @@ func TestGenerateIngressTemplate(t *testing.T) { Watch: false, }, IngressName: "extra-long-name.a-really-long-name-that-should-truncate.www.example.com", + Source: "YAML", }, values: generator.BuildValues{ Project: "example-project", @@ -133,6 +135,7 @@ func TestGenerateIngressTemplate(t *testing.T) { Watch: false, }, IngressName: "extra-long-name.a-really-long-name-that-should-truncate.www.example.com", + Source: "YAML", }, values: generator.BuildValues{ Project: "example-project", @@ -179,6 +182,7 @@ func TestGenerateIngressTemplate(t *testing.T) { }, IngressClass: "nginx", IngressName: "extra-long-name.a-really-long-name-that-should-truncate.www.example.com", + Source: "YAML", }, values: generator.BuildValues{ Project: "example-project", @@ -227,6 +231,7 @@ func TestGenerateIngressTemplate(t *testing.T) { HSTSEnabled: helpers.BoolPtr(true), HSTSMaxAge: 31536000, IngressName: "extra-long-name.a-really-long-name-that-should-truncate.www.example.com", + Source: "YAML", }, values: generator.BuildValues{ Project: "example-project", @@ -278,6 +283,7 @@ func TestGenerateIngressTemplate(t *testing.T) { HSTSIncludeSubdomains: helpers.BoolPtr(true), HSTSPreload: helpers.BoolPtr(true), IngressName: "extra-long-name.a-really-long-name-that-should-truncate.www.example.com", + Source: "YAML", }, values: generator.BuildValues{ Project: "example-project", @@ -325,6 +331,7 @@ func TestGenerateIngressTemplate(t *testing.T) { }, IngressClass: "nginx", IngressName: "extra-long-name.a-really-long-name-that-should-truncate.www.example.com", + Source: "YAML", }, values: generator.BuildValues{ Project: "example-project", @@ -373,6 +380,7 @@ func TestGenerateIngressTemplate(t *testing.T) { }, IngressClass: "nginx", IngressName: "extra-long-name.a-really-long-name-that-should-truncate.www.example.com", + Source: "YAML", }, values: generator.BuildValues{ Project: "example-project", @@ -411,6 +419,7 @@ func TestGenerateIngressTemplate(t *testing.T) { }, IngressClass: "nginx", IngressName: "hmm-this-is-a-really-long-branch-name-designed-to-test-a-specific-feature.www.example.com", + Source: "YAML", }, values: generator.BuildValues{ Project: "example-project", @@ -458,6 +467,7 @@ func TestGenerateIngressTemplate(t *testing.T) { Wildcard: helpers.BoolPtr(true), WildcardApex: helpers.BoolPtr(true), IngressName: "wildcard-www.example.com", + Source: "YAML", }, values: generator.BuildValues{ Project: "example-project", @@ -505,6 +515,7 @@ func TestGenerateIngressTemplate(t *testing.T) { Wildcard: helpers.BoolPtr(true), WildcardApex: helpers.BoolPtr(true), IngressName: "wildcard-this-truncate.extra-long-name.a-really-long-name-that-should-truncate.extra-long-name.a-really-long-name-that-should-truncate.extra-long-name.a-really-long-name-that-should-truncate.extra-long-name.a-really-long-name-that-should-truncate.www.e-f1945", + Source: "YAML", }, values: generator.BuildValues{ Project: "example-project", @@ -550,6 +561,7 @@ func TestGenerateIngressTemplate(t *testing.T) { }, IngressName: "extra-long-name.a-really-long-name-that-should-truncate.www.example.com", RequestVerification: helpers.BoolPtr(true), + Source: "YAML", }, values: generator.BuildValues{ Project: "example-project", @@ -612,6 +624,7 @@ func TestGenerateIngressTemplate(t *testing.T) { }, IngressName: "extra-long-name.a-really-long-name-that-should-truncate.www.example.com", RequestVerification: helpers.BoolPtr(true), + Source: "YAML", }, values: generator.BuildValues{ Project: "example-project", @@ -674,6 +687,7 @@ func TestGenerateIngressTemplate(t *testing.T) { }, RequestVerification: helpers.BoolPtr(true), IngressName: "extra-long-name.a-really-long-name-that-should-truncate.www.example.com", + Source: "YAML", }, values: generator.BuildValues{ Project: "example-project", @@ -722,6 +736,7 @@ func TestGenerateIngressTemplate(t *testing.T) { Wildcard: helpers.BoolPtr(true), WildcardApex: helpers.BoolPtr(false), IngressName: "wildcard-www.example.com", + Source: "YAML", }, values: generator.BuildValues{ Project: "example-project", diff --git a/internal/templating/test-resources/ingress/result-active-standby1.yaml b/internal/templating/test-resources/ingress/result-active-standby1.yaml index 5e648500..05b6fc5f 100644 --- a/internal/templating/test-resources/ingress/result-active-standby1.yaml +++ b/internal/templating/test-resources/ingress/result-active-standby1.yaml @@ -31,6 +31,7 @@ metadata: lagoon.sh/service: extra-long-name-f6c8a lagoon.sh/service-type: custom-ingress lagoon.sh/template: custom-ingress-0.1.0 + route.lagoon.sh/source: yaml name: extra-long-name.a-really-long-name-that-should-truncate.www.example.com spec: rules: diff --git a/internal/templating/test-resources/ingress/result-custom-ingress1.yaml b/internal/templating/test-resources/ingress/result-custom-ingress1.yaml index 8a78a257..dc19268c 100644 --- a/internal/templating/test-resources/ingress/result-custom-ingress1.yaml +++ b/internal/templating/test-resources/ingress/result-custom-ingress1.yaml @@ -31,6 +31,7 @@ metadata: lagoon.sh/service: extra-long-name-f6c8a lagoon.sh/service-type: custom-ingress lagoon.sh/template: custom-ingress-0.1.0 + route.lagoon.sh/source: yaml name: extra-long-name.a-really-long-name-that-should-truncate.www.example.com spec: rules: diff --git a/internal/templating/test-resources/ingress/result-custom-ingress2.yaml b/internal/templating/test-resources/ingress/result-custom-ingress2.yaml index ae9f2b86..2c3a1754 100644 --- a/internal/templating/test-resources/ingress/result-custom-ingress2.yaml +++ b/internal/templating/test-resources/ingress/result-custom-ingress2.yaml @@ -26,6 +26,7 @@ metadata: lagoon.sh/service: extra-long-name-f6c8a lagoon.sh/service-type: custom-ingress lagoon.sh/template: custom-ingress-0.1.0 + route.lagoon.sh/source: yaml name: extra-long-name.a-really-long-name-that-should-truncate.www.example.com spec: rules: diff --git a/internal/templating/test-resources/ingress/result-custom-ingress3.yaml b/internal/templating/test-resources/ingress/result-custom-ingress3.yaml index e0e15996..317a4697 100644 --- a/internal/templating/test-resources/ingress/result-custom-ingress3.yaml +++ b/internal/templating/test-resources/ingress/result-custom-ingress3.yaml @@ -27,6 +27,7 @@ metadata: lagoon.sh/service: extra-long-name-f6c8a lagoon.sh/service-type: custom-ingress lagoon.sh/template: custom-ingress-0.1.0 + route.lagoon.sh/source: yaml name: extra-long-name.a-really-long-name-that-should-truncate.www.example.com spec: ingressClassName: nginx diff --git a/internal/templating/test-resources/ingress/result-custom-ingress4.yaml b/internal/templating/test-resources/ingress/result-custom-ingress4.yaml index cec63b19..81ea3444 100644 --- a/internal/templating/test-resources/ingress/result-custom-ingress4.yaml +++ b/internal/templating/test-resources/ingress/result-custom-ingress4.yaml @@ -29,6 +29,7 @@ metadata: lagoon.sh/service: extra-long-name-f6c8a lagoon.sh/service-type: custom-ingress lagoon.sh/template: custom-ingress-0.1.0 + route.lagoon.sh/source: yaml name: extra-long-name.a-really-long-name-that-should-truncate.www.example.com spec: ingressClassName: nginx diff --git a/internal/templating/test-resources/ingress/result-custom-ingress5.yaml b/internal/templating/test-resources/ingress/result-custom-ingress5.yaml index df1b1712..5abcfbc6 100644 --- a/internal/templating/test-resources/ingress/result-custom-ingress5.yaml +++ b/internal/templating/test-resources/ingress/result-custom-ingress5.yaml @@ -30,6 +30,7 @@ metadata: lagoon.sh/service: extra-long-name-f6c8a lagoon.sh/service-type: custom-ingress lagoon.sh/template: custom-ingress-0.1.0 + route.lagoon.sh/source: yaml name: extra-long-name.a-really-long-name-that-should-truncate.www.example.com spec: ingressClassName: nginx diff --git a/internal/templating/test-resources/ingress/result-custom-ingress6.yaml b/internal/templating/test-resources/ingress/result-custom-ingress6.yaml index 581df712..e1fba411 100644 --- a/internal/templating/test-resources/ingress/result-custom-ingress6.yaml +++ b/internal/templating/test-resources/ingress/result-custom-ingress6.yaml @@ -27,6 +27,7 @@ metadata: lagoon.sh/service: hmm-this-is-a-really-long-branch-name-designed-to-tes-0eda7 lagoon.sh/service-type: custom-ingress lagoon.sh/template: custom-ingress-0.1.0 + route.lagoon.sh/source: yaml name: hmm-this-is-a-really-long-branch-name-designed-to-test-a-specific-feature.www.example.com spec: ingressClassName: nginx diff --git a/internal/templating/test-resources/ingress/result-custom-ingress7.yaml b/internal/templating/test-resources/ingress/result-custom-ingress7.yaml index eca1c38c..3a767d98 100644 --- a/internal/templating/test-resources/ingress/result-custom-ingress7.yaml +++ b/internal/templating/test-resources/ingress/result-custom-ingress7.yaml @@ -31,6 +31,7 @@ metadata: lagoon.sh/service: extra-long-name-f6c8a lagoon.sh/service-type: custom-ingress lagoon.sh/template: custom-ingress-0.1.0 + route.lagoon.sh/source: yaml name: extra-long-name.a-really-long-name-that-should-truncate.www.example.com spec: rules: diff --git a/internal/templating/test-resources/ingress/result-custom-ingress8.yaml b/internal/templating/test-resources/ingress/result-custom-ingress8.yaml index eca1c38c..3a767d98 100644 --- a/internal/templating/test-resources/ingress/result-custom-ingress8.yaml +++ b/internal/templating/test-resources/ingress/result-custom-ingress8.yaml @@ -31,6 +31,7 @@ metadata: lagoon.sh/service: extra-long-name-f6c8a lagoon.sh/service-type: custom-ingress lagoon.sh/template: custom-ingress-0.1.0 + route.lagoon.sh/source: yaml name: extra-long-name.a-really-long-name-that-should-truncate.www.example.com spec: rules: diff --git a/internal/templating/test-resources/ingress/result-custom-ingress9.yaml b/internal/templating/test-resources/ingress/result-custom-ingress9.yaml index 282840c1..edbe9322 100644 --- a/internal/templating/test-resources/ingress/result-custom-ingress9.yaml +++ b/internal/templating/test-resources/ingress/result-custom-ingress9.yaml @@ -26,6 +26,7 @@ metadata: lagoon.sh/service: extra-long-name-f6c8a lagoon.sh/service-type: custom-ingress lagoon.sh/template: custom-ingress-0.1.0 + route.lagoon.sh/source: yaml name: extra-long-name.a-really-long-name-that-should-truncate.www.example.com spec: rules: diff --git a/internal/templating/test-resources/ingress/result-wildcard-ingress1.yaml b/internal/templating/test-resources/ingress/result-wildcard-ingress1.yaml index 394bb865..bb10ce0c 100644 --- a/internal/templating/test-resources/ingress/result-wildcard-ingress1.yaml +++ b/internal/templating/test-resources/ingress/result-wildcard-ingress1.yaml @@ -27,6 +27,7 @@ metadata: lagoon.sh/service: wildcard-www.example.com lagoon.sh/service-type: custom-ingress lagoon.sh/template: custom-ingress-0.1.0 + route.lagoon.sh/source: yaml name: wildcard-www.example.com spec: ingressClassName: nginx diff --git a/internal/templating/test-resources/ingress/result-wildcard-ingress2.yaml b/internal/templating/test-resources/ingress/result-wildcard-ingress2.yaml index 0107fd46..5ed24d5b 100644 --- a/internal/templating/test-resources/ingress/result-wildcard-ingress2.yaml +++ b/internal/templating/test-resources/ingress/result-wildcard-ingress2.yaml @@ -27,6 +27,7 @@ metadata: lagoon.sh/service: wildcard-this-truncate-f1945 lagoon.sh/service-type: custom-ingress lagoon.sh/template: custom-ingress-0.1.0 + route.lagoon.sh/source: yaml name: wildcard-this-truncate.extra-long-name.a-really-long-name-that-should-truncate.extra-long-name.a-really-long-name-that-should-truncate.extra-long-name.a-really-long-name-that-should-truncate.extra-long-name.a-really-long-name-that-should-truncate.www.e-f1945 spec: ingressClassName: nginx diff --git a/internal/templating/test-resources/ingress/result-wildcard-ingress3.yaml b/internal/templating/test-resources/ingress/result-wildcard-ingress3.yaml index d5307fd0..12864a4a 100644 --- a/internal/templating/test-resources/ingress/result-wildcard-ingress3.yaml +++ b/internal/templating/test-resources/ingress/result-wildcard-ingress3.yaml @@ -27,6 +27,7 @@ metadata: lagoon.sh/service: wildcard-www.example.com lagoon.sh/service-type: custom-ingress lagoon.sh/template: custom-ingress-0.1.0 + route.lagoon.sh/source: yaml name: wildcard-www.example.com spec: ingressClassName: nginx diff --git a/internal/testdata/basic/autogen-templates/ingress-1/nginx.yaml b/internal/testdata/basic/autogen-templates/ingress-1/nginx.yaml index 321def9a..4231c3e2 100644 --- a/internal/testdata/basic/autogen-templates/ingress-1/nginx.yaml +++ b/internal/testdata/basic/autogen-templates/ingress-1/nginx.yaml @@ -26,6 +26,7 @@ metadata: lagoon.sh/service: nginx lagoon.sh/service-type: basic lagoon.sh/template: autogenerated-ingress-0.1.0 + route.lagoon.sh/source: autogenerated name: nginx spec: rules: diff --git a/internal/testdata/basic/autogen-templates/test29-autogenerated-pathroutes/nginx.yaml b/internal/testdata/basic/autogen-templates/test29-autogenerated-pathroutes/nginx.yaml index 8367f1d7..8de5d580 100644 --- a/internal/testdata/basic/autogen-templates/test29-autogenerated-pathroutes/nginx.yaml +++ b/internal/testdata/basic/autogen-templates/test29-autogenerated-pathroutes/nginx.yaml @@ -26,6 +26,7 @@ metadata: lagoon.sh/service: nginx lagoon.sh/service-type: basic lagoon.sh/template: autogenerated-ingress-0.1.0 + route.lagoon.sh/source: autogenerated name: nginx spec: rules: diff --git a/internal/testdata/basic/autogen-templates/test29-autogenerated-pathroutes/node.yaml b/internal/testdata/basic/autogen-templates/test29-autogenerated-pathroutes/node.yaml index fd605f6e..37cbf2be 100644 --- a/internal/testdata/basic/autogen-templates/test29-autogenerated-pathroutes/node.yaml +++ b/internal/testdata/basic/autogen-templates/test29-autogenerated-pathroutes/node.yaml @@ -26,6 +26,7 @@ metadata: lagoon.sh/service: node lagoon.sh/service-type: basic lagoon.sh/template: autogenerated-ingress-0.1.0 + route.lagoon.sh/source: autogenerated name: node spec: rules: diff --git a/internal/testdata/basic/ingress-templates/test25-pathroutes/a.example.com.yaml b/internal/testdata/basic/ingress-templates/test25-pathroutes/a.example.com.yaml index 85cc3c21..05637999 100644 --- a/internal/testdata/basic/ingress-templates/test25-pathroutes/a.example.com.yaml +++ b/internal/testdata/basic/ingress-templates/test25-pathroutes/a.example.com.yaml @@ -30,6 +30,7 @@ metadata: lagoon.sh/service: a.example.com lagoon.sh/service-type: custom-ingress lagoon.sh/template: custom-ingress-0.1.0 + route.lagoon.sh/source: yaml name: a.example.com spec: rules: diff --git a/internal/testdata/complex/autogen-templates/ingress-1/nginx.yaml b/internal/testdata/complex/autogen-templates/ingress-1/nginx.yaml index 53382f4b..9a9f26d4 100644 --- a/internal/testdata/complex/autogen-templates/ingress-1/nginx.yaml +++ b/internal/testdata/complex/autogen-templates/ingress-1/nginx.yaml @@ -25,6 +25,7 @@ metadata: lagoon.sh/service: nginx lagoon.sh/service-type: nginx-php-persistent lagoon.sh/template: autogenerated-ingress-0.1.0 + route.lagoon.sh/source: autogenerated name: nginx spec: rules: diff --git a/internal/testdata/complex/autogen-templates/ingress-2/nginx-php.yaml b/internal/testdata/complex/autogen-templates/ingress-2/nginx-php.yaml index 92b78554..b322d1db 100644 --- a/internal/testdata/complex/autogen-templates/ingress-2/nginx-php.yaml +++ b/internal/testdata/complex/autogen-templates/ingress-2/nginx-php.yaml @@ -25,6 +25,7 @@ metadata: lagoon.sh/service: nginx-php lagoon.sh/service-type: nginx-php-persistent lagoon.sh/template: autogenerated-ingress-0.1.0 + route.lagoon.sh/source: autogenerated name: nginx-php spec: rules: diff --git a/internal/testdata/complex/autogen-templates/ingress-3/nginx.yaml b/internal/testdata/complex/autogen-templates/ingress-3/nginx.yaml index 8b45801b..f0dfeeb1 100644 --- a/internal/testdata/complex/autogen-templates/ingress-3/nginx.yaml +++ b/internal/testdata/complex/autogen-templates/ingress-3/nginx.yaml @@ -25,6 +25,7 @@ metadata: lagoon.sh/service: nginx lagoon.sh/service-type: nginx-php-persistent lagoon.sh/template: autogenerated-ingress-0.1.0 + route.lagoon.sh/source: autogenerated name: nginx spec: rules: diff --git a/internal/testdata/complex/ingress-templates/ingress-1/content.example.com.yaml b/internal/testdata/complex/ingress-templates/ingress-1/content.example.com.yaml index 1f99db85..99e279bd 100644 --- a/internal/testdata/complex/ingress-templates/ingress-1/content.example.com.yaml +++ b/internal/testdata/complex/ingress-templates/ingress-1/content.example.com.yaml @@ -30,6 +30,7 @@ metadata: lagoon.sh/service: content.example.com lagoon.sh/service-type: custom-ingress lagoon.sh/template: custom-ingress-0.1.0 + route.lagoon.sh/source: yaml name: content.example.com spec: rules: diff --git a/internal/testdata/nginxphp/autogen-templates/ingress-1/nginx.yaml b/internal/testdata/nginxphp/autogen-templates/ingress-1/nginx.yaml index cdb23a55..98b7f546 100644 --- a/internal/testdata/nginxphp/autogen-templates/ingress-1/nginx.yaml +++ b/internal/testdata/nginxphp/autogen-templates/ingress-1/nginx.yaml @@ -25,6 +25,7 @@ metadata: lagoon.sh/service: nginx lagoon.sh/service-type: nginx-php-persistent lagoon.sh/template: autogenerated-ingress-0.1.0 + route.lagoon.sh/source: autogenerated name: nginx spec: rules: diff --git a/internal/testdata/nginxphp/autogen-templates/ingress-2/nginx.yaml b/internal/testdata/nginxphp/autogen-templates/ingress-2/nginx.yaml index cdb23a55..98b7f546 100644 --- a/internal/testdata/nginxphp/autogen-templates/ingress-2/nginx.yaml +++ b/internal/testdata/nginxphp/autogen-templates/ingress-2/nginx.yaml @@ -25,6 +25,7 @@ metadata: lagoon.sh/service: nginx lagoon.sh/service-type: nginx-php-persistent lagoon.sh/template: autogenerated-ingress-0.1.0 + route.lagoon.sh/source: autogenerated name: nginx spec: rules: diff --git a/internal/testdata/nginxphp/autogen-templates/ingress-3/nginx-php.yaml b/internal/testdata/nginxphp/autogen-templates/ingress-3/nginx-php.yaml index e4d0a282..808bb4d1 100644 --- a/internal/testdata/nginxphp/autogen-templates/ingress-3/nginx-php.yaml +++ b/internal/testdata/nginxphp/autogen-templates/ingress-3/nginx-php.yaml @@ -27,6 +27,7 @@ metadata: lagoon.sh/service: nginx-php lagoon.sh/service-type: nginx-php lagoon.sh/template: autogenerated-ingress-0.1.0 + route.lagoon.sh/source: autogenerated name: nginx-php spec: rules: diff --git a/internal/testdata/node/autogen-templates/autogenerated-routes-api-config/node.yaml b/internal/testdata/node/autogen-templates/autogenerated-routes-api-config/node.yaml new file mode 100644 index 00000000..6e6b5211 --- /dev/null +++ b/internal/testdata/node/autogen-templates/autogenerated-routes-api-config/node.yaml @@ -0,0 +1,88 @@ +--- +apiVersion: networking.k8s.io/v1 +kind: Ingress +metadata: + annotations: + fastly.amazee.io/watch: "false" + idling.amazee.io/disable-request-verification: "false" + ingress.kubernetes.io/ssl-redirect: "true" + kubernetes.io/tls-acme: "true" + lagoon.sh/branch: main + lagoon.sh/version: v2.7.x + monitor.stakater.com/enabled: "false" + nginx.ingress.kubernetes.io/server-snippet: | + add_header X-Robots-Tag "noindex, nofollow"; + nginx.ingress.kubernetes.io/ssl-redirect: "true" + creationTimestamp: null + labels: + app.kubernetes.io/instance: node + app.kubernetes.io/managed-by: build-deploy-tool + app.kubernetes.io/name: autogenerated-ingress + lagoon.sh/autogenerated: "true" + lagoon.sh/buildType: branch + lagoon.sh/environment: main + lagoon.sh/environmentType: production + lagoon.sh/project: example-project + lagoon.sh/service: node + lagoon.sh/service-type: node + lagoon.sh/template: autogenerated-ingress-0.1.0 + route.lagoon.sh/source: autogenerated + name: node +spec: + rules: + - host: node-example-project-main.example.com + http: + paths: + - backend: + service: + name: node + port: + name: http + path: / + pathType: Prefix + - backend: + service: + name: node + port: + name: http + path: / + pathType: Prefix + - host: ie.node-example-project-main.example.com + http: + paths: + - backend: + service: + name: node + port: + name: http + path: / + pathType: Prefix + - host: de.node-example-project-main.example.com + http: + paths: + - backend: + service: + name: node + port: + name: http + path: / + pathType: Prefix + - host: abc.node-example-project-main.example.com + http: + paths: + - backend: + service: + name: node + port: + name: http + path: / + pathType: Prefix + tls: + - hosts: + - node-example-project-main.example.com + - ie.node-example-project-main.example.com + - de.node-example-project-main.example.com + - abc.node-example-project-main.example.com + secretName: node-tls +status: + loadBalancer: {} diff --git a/internal/testdata/node/autogen-templates/ingress-1/node.yaml b/internal/testdata/node/autogen-templates/ingress-1/node.yaml index 577f24f9..3792c2ad 100644 --- a/internal/testdata/node/autogen-templates/ingress-1/node.yaml +++ b/internal/testdata/node/autogen-templates/ingress-1/node.yaml @@ -26,6 +26,7 @@ metadata: lagoon.sh/service: node lagoon.sh/service-type: node lagoon.sh/template: autogenerated-ingress-0.1.0 + route.lagoon.sh/source: autogenerated name: node spec: rules: diff --git a/internal/testdata/node/autogen-templates/ingress-10/node.yaml b/internal/testdata/node/autogen-templates/ingress-10/node.yaml index ddde3486..e740d982 100644 --- a/internal/testdata/node/autogen-templates/ingress-10/node.yaml +++ b/internal/testdata/node/autogen-templates/ingress-10/node.yaml @@ -25,6 +25,7 @@ metadata: lagoon.sh/service: node lagoon.sh/service-type: node lagoon.sh/template: autogenerated-ingress-0.1.0 + route.lagoon.sh/source: autogenerated name: node spec: rules: diff --git a/internal/testdata/node/autogen-templates/ingress-12/node.yaml b/internal/testdata/node/autogen-templates/ingress-12/node.yaml index 01a988a3..fa2bde5b 100644 --- a/internal/testdata/node/autogen-templates/ingress-12/node.yaml +++ b/internal/testdata/node/autogen-templates/ingress-12/node.yaml @@ -26,6 +26,7 @@ metadata: lagoon.sh/service: node lagoon.sh/service-type: node lagoon.sh/template: autogenerated-ingress-0.1.0 + route.lagoon.sh/source: autogenerated name: node spec: rules: diff --git a/internal/testdata/node/autogen-templates/ingress-13/node.yaml b/internal/testdata/node/autogen-templates/ingress-13/node.yaml index 01a988a3..fa2bde5b 100644 --- a/internal/testdata/node/autogen-templates/ingress-13/node.yaml +++ b/internal/testdata/node/autogen-templates/ingress-13/node.yaml @@ -26,6 +26,7 @@ metadata: lagoon.sh/service: node lagoon.sh/service-type: node lagoon.sh/template: autogenerated-ingress-0.1.0 + route.lagoon.sh/source: autogenerated name: node spec: rules: diff --git a/internal/testdata/node/autogen-templates/ingress-14/node.yaml b/internal/testdata/node/autogen-templates/ingress-14/node.yaml index 577f24f9..3792c2ad 100644 --- a/internal/testdata/node/autogen-templates/ingress-14/node.yaml +++ b/internal/testdata/node/autogen-templates/ingress-14/node.yaml @@ -26,6 +26,7 @@ metadata: lagoon.sh/service: node lagoon.sh/service-type: node lagoon.sh/template: autogenerated-ingress-0.1.0 + route.lagoon.sh/source: autogenerated name: node spec: rules: diff --git a/internal/testdata/node/autogen-templates/ingress-15/node.yaml b/internal/testdata/node/autogen-templates/ingress-15/node.yaml index 5bbec8a1..9b37ade9 100644 --- a/internal/testdata/node/autogen-templates/ingress-15/node.yaml +++ b/internal/testdata/node/autogen-templates/ingress-15/node.yaml @@ -26,6 +26,7 @@ metadata: lagoon.sh/service: node lagoon.sh/service-type: node lagoon.sh/template: autogenerated-ingress-0.1.0 + route.lagoon.sh/source: autogenerated name: node spec: rules: diff --git a/internal/testdata/node/autogen-templates/ingress-2/node.yaml b/internal/testdata/node/autogen-templates/ingress-2/node.yaml index b5cad9ba..6c937b7c 100644 --- a/internal/testdata/node/autogen-templates/ingress-2/node.yaml +++ b/internal/testdata/node/autogen-templates/ingress-2/node.yaml @@ -27,6 +27,7 @@ metadata: lagoon.sh/service: node lagoon.sh/service-type: node lagoon.sh/template: autogenerated-ingress-0.1.0 + route.lagoon.sh/source: autogenerated name: node spec: rules: diff --git a/internal/testdata/node/autogen-templates/ingress-3/node.yaml b/internal/testdata/node/autogen-templates/ingress-3/node.yaml index 9d48c2c7..0bf30eeb 100644 --- a/internal/testdata/node/autogen-templates/ingress-3/node.yaml +++ b/internal/testdata/node/autogen-templates/ingress-3/node.yaml @@ -26,6 +26,7 @@ metadata: lagoon.sh/service: node lagoon.sh/service-type: node lagoon.sh/template: autogenerated-ingress-0.1.0 + route.lagoon.sh/source: autogenerated name: node spec: rules: diff --git a/internal/testdata/node/autogen-templates/ingress-4/node.yaml b/internal/testdata/node/autogen-templates/ingress-4/node.yaml index 43af5057..004cd920 100644 --- a/internal/testdata/node/autogen-templates/ingress-4/node.yaml +++ b/internal/testdata/node/autogen-templates/ingress-4/node.yaml @@ -26,6 +26,7 @@ metadata: lagoon.sh/service: node lagoon.sh/service-type: node lagoon.sh/template: autogenerated-ingress-0.1.0 + route.lagoon.sh/source: autogenerated name: node spec: rules: diff --git a/internal/testdata/node/autogen-templates/ingress-5/node.yaml b/internal/testdata/node/autogen-templates/ingress-5/node.yaml index 577f24f9..3792c2ad 100644 --- a/internal/testdata/node/autogen-templates/ingress-5/node.yaml +++ b/internal/testdata/node/autogen-templates/ingress-5/node.yaml @@ -26,6 +26,7 @@ metadata: lagoon.sh/service: node lagoon.sh/service-type: node lagoon.sh/template: autogenerated-ingress-0.1.0 + route.lagoon.sh/source: autogenerated name: node spec: rules: diff --git a/internal/testdata/node/autogen-templates/ingress-6/node.yaml b/internal/testdata/node/autogen-templates/ingress-6/node.yaml index 5057b566..a7542da0 100644 --- a/internal/testdata/node/autogen-templates/ingress-6/node.yaml +++ b/internal/testdata/node/autogen-templates/ingress-6/node.yaml @@ -27,6 +27,7 @@ metadata: lagoon.sh/service: node lagoon.sh/service-type: node lagoon.sh/template: autogenerated-ingress-0.1.0 + route.lagoon.sh/source: autogenerated name: node spec: rules: diff --git a/internal/testdata/node/autogen-templates/ingress-7/node.yaml b/internal/testdata/node/autogen-templates/ingress-7/node.yaml index 5057b566..a7542da0 100644 --- a/internal/testdata/node/autogen-templates/ingress-7/node.yaml +++ b/internal/testdata/node/autogen-templates/ingress-7/node.yaml @@ -27,6 +27,7 @@ metadata: lagoon.sh/service: node lagoon.sh/service-type: node lagoon.sh/template: autogenerated-ingress-0.1.0 + route.lagoon.sh/source: autogenerated name: node spec: rules: diff --git a/internal/testdata/node/autogen-templates/ingress-9/node.yaml b/internal/testdata/node/autogen-templates/ingress-9/node.yaml index ef5b046c..dddff84c 100644 --- a/internal/testdata/node/autogen-templates/ingress-9/node.yaml +++ b/internal/testdata/node/autogen-templates/ingress-9/node.yaml @@ -25,6 +25,7 @@ metadata: lagoon.sh/service: node lagoon.sh/service-type: node lagoon.sh/template: autogenerated-ingress-0.1.0 + route.lagoon.sh/source: autogenerated name: node spec: rules: diff --git a/internal/testdata/node/autogen-templates/test-development-service-type-override/node.yaml b/internal/testdata/node/autogen-templates/test-development-service-type-override/node.yaml index 34cf6fe4..e15e387b 100644 --- a/internal/testdata/node/autogen-templates/test-development-service-type-override/node.yaml +++ b/internal/testdata/node/autogen-templates/test-development-service-type-override/node.yaml @@ -25,6 +25,7 @@ metadata: lagoon.sh/service: node lagoon.sh/service-type: basic lagoon.sh/template: autogenerated-ingress-0.1.0 + route.lagoon.sh/source: autogenerated name: node spec: rules: diff --git a/internal/testdata/node/ingress-templates/active-standby-api-routes/active.example.com.yaml b/internal/testdata/node/ingress-templates/active-standby-api-routes/active.example.com.yaml new file mode 100644 index 00000000..847ab439 --- /dev/null +++ b/internal/testdata/node/ingress-templates/active-standby-api-routes/active.example.com.yaml @@ -0,0 +1,47 @@ +--- +apiVersion: networking.k8s.io/v1 +kind: Ingress +metadata: + annotations: + fastly.amazee.io/watch: "false" + idling.amazee.io/disable-request-verification: "false" + ingress.kubernetes.io/ssl-redirect: "true" + kubernetes.io/tls-acme: "true" + lagoon.sh/branch: prod-left + lagoon.sh/version: v2.7.x + monitor.stakater.com/enabled: "false" + nginx.ingress.kubernetes.io/ssl-redirect: "true" + creationTimestamp: null + labels: + activestandby.lagoon.sh/migrate: "true" + app.kubernetes.io/instance: active.example.com + app.kubernetes.io/managed-by: build-deploy-tool + app.kubernetes.io/name: custom-ingress + lagoon.sh/autogenerated: "false" + lagoon.sh/buildType: branch + lagoon.sh/environment: prod-left + lagoon.sh/environmentType: production + lagoon.sh/project: example-project + lagoon.sh/service: active.example.com + lagoon.sh/service-type: custom-ingress + lagoon.sh/template: custom-ingress-0.1.0 + route.lagoon.sh/source: api + name: active.example.com +spec: + rules: + - host: active.example.com + http: + paths: + - backend: + service: + name: node + port: + name: http + path: / + pathType: Prefix + tls: + - hosts: + - active.example.com + secretName: active.example.com-tls +status: + loadBalancer: {} diff --git a/internal/testdata/node/ingress-templates/active-standby-api-routes/other.example.com.yaml b/internal/testdata/node/ingress-templates/active-standby-api-routes/other.example.com.yaml new file mode 100644 index 00000000..643d6e79 --- /dev/null +++ b/internal/testdata/node/ingress-templates/active-standby-api-routes/other.example.com.yaml @@ -0,0 +1,47 @@ +--- +apiVersion: networking.k8s.io/v1 +kind: Ingress +metadata: + annotations: + fastly.amazee.io/watch: "false" + idling.amazee.io/disable-request-verification: "false" + ingress.kubernetes.io/ssl-redirect: "true" + kubernetes.io/tls-acme: "true" + lagoon.sh/branch: prod-left + lagoon.sh/version: v2.7.x + monitor.stakater.com/enabled: "false" + nginx.ingress.kubernetes.io/ssl-redirect: "true" + creationTimestamp: null + labels: + activestandby.lagoon.sh/migrate: "false" + app.kubernetes.io/instance: other.example.com + app.kubernetes.io/managed-by: build-deploy-tool + app.kubernetes.io/name: custom-ingress + lagoon.sh/autogenerated: "false" + lagoon.sh/buildType: branch + lagoon.sh/environment: prod-left + lagoon.sh/environmentType: production + lagoon.sh/project: example-project + lagoon.sh/service: other.example.com + lagoon.sh/service-type: custom-ingress + lagoon.sh/template: custom-ingress-0.1.0 + route.lagoon.sh/source: api + name: other.example.com +spec: + rules: + - host: other.example.com + http: + paths: + - backend: + service: + name: node + port: + name: http + path: / + pathType: Prefix + tls: + - hosts: + - other.example.com + secretName: other.example.com-tls +status: + loadBalancer: {} diff --git a/internal/testdata/node/ingress-templates/active-standby-api-routes/test.example.com.yaml b/internal/testdata/node/ingress-templates/active-standby-api-routes/test.example.com.yaml new file mode 100644 index 00000000..bdc94921 --- /dev/null +++ b/internal/testdata/node/ingress-templates/active-standby-api-routes/test.example.com.yaml @@ -0,0 +1,51 @@ +--- +apiVersion: networking.k8s.io/v1 +kind: Ingress +metadata: + annotations: + fastly.amazee.io/watch: "false" + idling.amazee.io/disable-request-verification: "false" + ingress.kubernetes.io/ssl-redirect: "true" + kubernetes.io/tls-acme: "true" + lagoon.sh/branch: prod-left + lagoon.sh/version: v2.7.x + monitor.stakater.com/enabled: "true" + nginx.ingress.kubernetes.io/ssl-redirect: "true" + uptimerobot.monitor.stakater.com/alert-contacts: alertcontact + uptimerobot.monitor.stakater.com/interval: "60" + uptimerobot.monitor.stakater.com/status-pages: statuspageid + creationTimestamp: null + labels: + activestandby.lagoon.sh/migrate: "false" + app.kubernetes.io/instance: test.example.com + app.kubernetes.io/managed-by: build-deploy-tool + app.kubernetes.io/name: custom-ingress + lagoon.sh/autogenerated: "false" + lagoon.sh/buildType: branch + lagoon.sh/environment: prod-left + lagoon.sh/environmentType: production + lagoon.sh/primaryIngress: "true" + lagoon.sh/project: example-project + lagoon.sh/service: test.example.com + lagoon.sh/service-type: custom-ingress + lagoon.sh/template: custom-ingress-0.1.0 + route.lagoon.sh/source: api + name: test.example.com +spec: + rules: + - host: test.example.com + http: + paths: + - backend: + service: + name: node + port: + name: http + path: / + pathType: Prefix + tls: + - hosts: + - test.example.com + secretName: test.example.com-tls +status: + loadBalancer: {} diff --git a/internal/testdata/node/ingress-templates/api-defined-routes-with-lagoon-yml-fastly/example.com.yaml b/internal/testdata/node/ingress-templates/api-defined-routes-with-lagoon-yml-fastly/example.com.yaml new file mode 100644 index 00000000..bd244bf8 --- /dev/null +++ b/internal/testdata/node/ingress-templates/api-defined-routes-with-lagoon-yml-fastly/example.com.yaml @@ -0,0 +1,49 @@ +--- +apiVersion: networking.k8s.io/v1 +kind: Ingress +metadata: + annotations: + fastly.amazee.io/service-id: service-id + fastly.amazee.io/watch: "true" + idling.amazee.io/disable-request-verification: "false" + ingress.kubernetes.io/ssl-redirect: "true" + kubernetes.io/tls-acme: "true" + lagoon.sh/branch: main + lagoon.sh/version: v2.7.x + monitor.stakater.com/enabled: "false" + monitor.stakater.com/overridePath: / + nginx.ingress.kubernetes.io/ssl-redirect: "true" + creationTimestamp: null + labels: + activestandby.lagoon.sh/migrate: "false" + app.kubernetes.io/instance: example.com + app.kubernetes.io/managed-by: build-deploy-tool + app.kubernetes.io/name: custom-ingress + lagoon.sh/autogenerated: "false" + lagoon.sh/buildType: branch + lagoon.sh/environment: main + lagoon.sh/environmentType: production + lagoon.sh/project: example-project + lagoon.sh/service: example.com + lagoon.sh/service-type: custom-ingress + lagoon.sh/template: custom-ingress-0.1.0 + route.lagoon.sh/source: yaml + name: example.com +spec: + rules: + - host: example.com + http: + paths: + - backend: + service: + name: node + port: + name: http + path: / + pathType: Prefix + tls: + - hosts: + - example.com + secretName: example.com-tls +status: + loadBalancer: {} diff --git a/internal/testdata/node/ingress-templates/api-defined-routes-with-lagoon-yml-fastly/other.example.com.yaml b/internal/testdata/node/ingress-templates/api-defined-routes-with-lagoon-yml-fastly/other.example.com.yaml new file mode 100644 index 00000000..dec1adc7 --- /dev/null +++ b/internal/testdata/node/ingress-templates/api-defined-routes-with-lagoon-yml-fastly/other.example.com.yaml @@ -0,0 +1,48 @@ +--- +apiVersion: networking.k8s.io/v1 +kind: Ingress +metadata: + annotations: + fastly.amazee.io/service-id: service-id + fastly.amazee.io/watch: "true" + idling.amazee.io/disable-request-verification: "false" + ingress.kubernetes.io/ssl-redirect: "true" + kubernetes.io/tls-acme: "true" + lagoon.sh/branch: main + lagoon.sh/version: v2.7.x + monitor.stakater.com/enabled: "false" + nginx.ingress.kubernetes.io/ssl-redirect: "true" + creationTimestamp: null + labels: + activestandby.lagoon.sh/migrate: "false" + app.kubernetes.io/instance: other.example.com + app.kubernetes.io/managed-by: build-deploy-tool + app.kubernetes.io/name: custom-ingress + lagoon.sh/autogenerated: "false" + lagoon.sh/buildType: branch + lagoon.sh/environment: main + lagoon.sh/environmentType: production + lagoon.sh/project: example-project + lagoon.sh/service: other.example.com + lagoon.sh/service-type: custom-ingress + lagoon.sh/template: custom-ingress-0.1.0 + route.lagoon.sh/source: api + name: other.example.com +spec: + rules: + - host: other.example.com + http: + paths: + - backend: + service: + name: node + port: + name: http + path: / + pathType: Prefix + tls: + - hosts: + - other.example.com + secretName: other.example.com-tls +status: + loadBalancer: {} diff --git a/internal/testdata/node/ingress-templates/api-defined-routes-with-lagoon-yml-fastly/test.example.com.yaml b/internal/testdata/node/ingress-templates/api-defined-routes-with-lagoon-yml-fastly/test.example.com.yaml new file mode 100644 index 00000000..2a03cad7 --- /dev/null +++ b/internal/testdata/node/ingress-templates/api-defined-routes-with-lagoon-yml-fastly/test.example.com.yaml @@ -0,0 +1,52 @@ +--- +apiVersion: networking.k8s.io/v1 +kind: Ingress +metadata: + annotations: + fastly.amazee.io/service-id: service-id + fastly.amazee.io/watch: "true" + idling.amazee.io/disable-request-verification: "false" + ingress.kubernetes.io/ssl-redirect: "true" + kubernetes.io/tls-acme: "true" + lagoon.sh/branch: main + lagoon.sh/version: v2.7.x + monitor.stakater.com/enabled: "true" + nginx.ingress.kubernetes.io/ssl-redirect: "true" + uptimerobot.monitor.stakater.com/alert-contacts: alertcontact + uptimerobot.monitor.stakater.com/interval: "60" + uptimerobot.monitor.stakater.com/status-pages: statuspageid + creationTimestamp: null + labels: + activestandby.lagoon.sh/migrate: "false" + app.kubernetes.io/instance: test.example.com + app.kubernetes.io/managed-by: build-deploy-tool + app.kubernetes.io/name: custom-ingress + lagoon.sh/autogenerated: "false" + lagoon.sh/buildType: branch + lagoon.sh/environment: main + lagoon.sh/environmentType: production + lagoon.sh/primaryIngress: "true" + lagoon.sh/project: example-project + lagoon.sh/service: test.example.com + lagoon.sh/service-type: custom-ingress + lagoon.sh/template: custom-ingress-0.1.0 + route.lagoon.sh/source: api + name: test.example.com +spec: + rules: + - host: test.example.com + http: + paths: + - backend: + service: + name: node + port: + name: http + path: / + pathType: Prefix + tls: + - hosts: + - test.example.com + secretName: test.example.com-tls +status: + loadBalancer: {} diff --git a/internal/testdata/node/ingress-templates/api-defined-routes-with-lagoon-yml/example.com.yaml b/internal/testdata/node/ingress-templates/api-defined-routes-with-lagoon-yml/example.com.yaml new file mode 100644 index 00000000..1324e64a --- /dev/null +++ b/internal/testdata/node/ingress-templates/api-defined-routes-with-lagoon-yml/example.com.yaml @@ -0,0 +1,48 @@ +--- +apiVersion: networking.k8s.io/v1 +kind: Ingress +metadata: + annotations: + fastly.amazee.io/watch: "false" + idling.amazee.io/disable-request-verification: "false" + ingress.kubernetes.io/ssl-redirect: "true" + kubernetes.io/tls-acme: "true" + lagoon.sh/branch: main + lagoon.sh/version: v2.7.x + monitor.stakater.com/enabled: "false" + monitor.stakater.com/overridePath: / + nginx.ingress.kubernetes.io/ssl-redirect: "true" + creationTimestamp: null + labels: + activestandby.lagoon.sh/migrate: "false" + app.kubernetes.io/instance: example.com + app.kubernetes.io/managed-by: build-deploy-tool + app.kubernetes.io/name: custom-ingress + lagoon.sh/autogenerated: "false" + lagoon.sh/buildType: branch + lagoon.sh/environment: main + lagoon.sh/environmentType: production + lagoon.sh/project: example-project + lagoon.sh/service: example.com + lagoon.sh/service-type: custom-ingress + lagoon.sh/template: custom-ingress-0.1.0 + route.lagoon.sh/source: yaml + name: example.com +spec: + rules: + - host: example.com + http: + paths: + - backend: + service: + name: node + port: + name: http + path: / + pathType: Prefix + tls: + - hosts: + - example.com + secretName: example.com-tls +status: + loadBalancer: {} diff --git a/internal/testdata/node/ingress-templates/api-defined-routes-with-lagoon-yml/other.example.com.yaml b/internal/testdata/node/ingress-templates/api-defined-routes-with-lagoon-yml/other.example.com.yaml new file mode 100644 index 00000000..cec77beb --- /dev/null +++ b/internal/testdata/node/ingress-templates/api-defined-routes-with-lagoon-yml/other.example.com.yaml @@ -0,0 +1,47 @@ +--- +apiVersion: networking.k8s.io/v1 +kind: Ingress +metadata: + annotations: + fastly.amazee.io/watch: "false" + idling.amazee.io/disable-request-verification: "false" + ingress.kubernetes.io/ssl-redirect: "true" + kubernetes.io/tls-acme: "true" + lagoon.sh/branch: main + lagoon.sh/version: v2.7.x + monitor.stakater.com/enabled: "false" + nginx.ingress.kubernetes.io/ssl-redirect: "true" + creationTimestamp: null + labels: + activestandby.lagoon.sh/migrate: "false" + app.kubernetes.io/instance: other.example.com + app.kubernetes.io/managed-by: build-deploy-tool + app.kubernetes.io/name: custom-ingress + lagoon.sh/autogenerated: "false" + lagoon.sh/buildType: branch + lagoon.sh/environment: main + lagoon.sh/environmentType: production + lagoon.sh/project: example-project + lagoon.sh/service: other.example.com + lagoon.sh/service-type: custom-ingress + lagoon.sh/template: custom-ingress-0.1.0 + route.lagoon.sh/source: api + name: other.example.com +spec: + rules: + - host: other.example.com + http: + paths: + - backend: + service: + name: node + port: + name: http + path: / + pathType: Prefix + tls: + - hosts: + - other.example.com + secretName: other.example.com-tls +status: + loadBalancer: {} diff --git a/internal/testdata/node/ingress-templates/api-defined-routes-with-lagoon-yml/test.example.com.yaml b/internal/testdata/node/ingress-templates/api-defined-routes-with-lagoon-yml/test.example.com.yaml new file mode 100644 index 00000000..e1cc4aec --- /dev/null +++ b/internal/testdata/node/ingress-templates/api-defined-routes-with-lagoon-yml/test.example.com.yaml @@ -0,0 +1,51 @@ +--- +apiVersion: networking.k8s.io/v1 +kind: Ingress +metadata: + annotations: + fastly.amazee.io/watch: "false" + idling.amazee.io/disable-request-verification: "false" + ingress.kubernetes.io/ssl-redirect: "true" + kubernetes.io/tls-acme: "true" + lagoon.sh/branch: main + lagoon.sh/version: v2.7.x + monitor.stakater.com/enabled: "true" + nginx.ingress.kubernetes.io/ssl-redirect: "true" + uptimerobot.monitor.stakater.com/alert-contacts: alertcontact + uptimerobot.monitor.stakater.com/interval: "60" + uptimerobot.monitor.stakater.com/status-pages: statuspageid + creationTimestamp: null + labels: + activestandby.lagoon.sh/migrate: "false" + app.kubernetes.io/instance: test.example.com + app.kubernetes.io/managed-by: build-deploy-tool + app.kubernetes.io/name: custom-ingress + lagoon.sh/autogenerated: "false" + lagoon.sh/buildType: branch + lagoon.sh/environment: main + lagoon.sh/environmentType: production + lagoon.sh/primaryIngress: "true" + lagoon.sh/project: example-project + lagoon.sh/service: test.example.com + lagoon.sh/service-type: custom-ingress + lagoon.sh/template: custom-ingress-0.1.0 + route.lagoon.sh/source: api + name: test.example.com +spec: + rules: + - host: test.example.com + http: + paths: + - backend: + service: + name: node + port: + name: http + path: / + pathType: Prefix + tls: + - hosts: + - test.example.com + secretName: test.example.com-tls +status: + loadBalancer: {} diff --git a/internal/testdata/node/ingress-templates/ingress-10/main-sb.example.com.yaml b/internal/testdata/node/ingress-templates/ingress-10/main-sb.example.com.yaml index 15cf2ace..fb761f0e 100644 --- a/internal/testdata/node/ingress-templates/ingress-10/main-sb.example.com.yaml +++ b/internal/testdata/node/ingress-templates/ingress-10/main-sb.example.com.yaml @@ -26,6 +26,7 @@ metadata: lagoon.sh/service: main-sb.example.com lagoon.sh/service-type: custom-ingress lagoon.sh/template: custom-ingress-0.1.0 + route.lagoon.sh/source: yaml name: main-sb.example.com spec: rules: diff --git a/internal/testdata/node/ingress-templates/ingress-10/standby.example.com.yaml b/internal/testdata/node/ingress-templates/ingress-10/standby.example.com.yaml index 5476db88..85359c94 100644 --- a/internal/testdata/node/ingress-templates/ingress-10/standby.example.com.yaml +++ b/internal/testdata/node/ingress-templates/ingress-10/standby.example.com.yaml @@ -30,6 +30,7 @@ metadata: lagoon.sh/service: standby.example.com lagoon.sh/service-type: custom-ingress lagoon.sh/template: custom-ingress-0.1.0 + route.lagoon.sh/source: yaml name: standby.example.com spec: rules: diff --git a/internal/testdata/node/ingress-templates/ingress-11/test1.example.com.yaml b/internal/testdata/node/ingress-templates/ingress-11/test1.example.com.yaml index 0e73d69a..7f4d40c5 100644 --- a/internal/testdata/node/ingress-templates/ingress-11/test1.example.com.yaml +++ b/internal/testdata/node/ingress-templates/ingress-11/test1.example.com.yaml @@ -30,6 +30,7 @@ metadata: lagoon.sh/service: test1.example.com lagoon.sh/service-type: custom-ingress lagoon.sh/template: custom-ingress-0.1.0 + route.lagoon.sh/source: api name: test1.example.com spec: rules: diff --git a/internal/testdata/node/ingress-templates/ingress-12/example.com.yaml b/internal/testdata/node/ingress-templates/ingress-12/example.com.yaml index 1ff9f929..3ead4a6f 100644 --- a/internal/testdata/node/ingress-templates/ingress-12/example.com.yaml +++ b/internal/testdata/node/ingress-templates/ingress-12/example.com.yaml @@ -31,6 +31,7 @@ metadata: lagoon.sh/service: example.com lagoon.sh/service-type: custom-ingress lagoon.sh/template: custom-ingress-0.1.0 + route.lagoon.sh/source: yaml name: example.com spec: ingressClassName: nginx diff --git a/internal/testdata/node/ingress-templates/ingress-13/example.com.yaml b/internal/testdata/node/ingress-templates/ingress-13/example.com.yaml index 425fd85a..a81c3137 100644 --- a/internal/testdata/node/ingress-templates/ingress-13/example.com.yaml +++ b/internal/testdata/node/ingress-templates/ingress-13/example.com.yaml @@ -31,6 +31,7 @@ metadata: lagoon.sh/service: example.com lagoon.sh/service-type: custom-ingress lagoon.sh/template: custom-ingress-0.1.0 + route.lagoon.sh/source: yaml name: example.com spec: ingressClassName: custom-ingress diff --git a/internal/testdata/node/ingress-templates/ingress-14/example.com.yaml b/internal/testdata/node/ingress-templates/ingress-14/example.com.yaml index f354c535..7053be2d 100644 --- a/internal/testdata/node/ingress-templates/ingress-14/example.com.yaml +++ b/internal/testdata/node/ingress-templates/ingress-14/example.com.yaml @@ -31,6 +31,7 @@ metadata: lagoon.sh/service: example.com lagoon.sh/service-type: custom-ingress lagoon.sh/template: custom-ingress-0.1.0 + route.lagoon.sh/source: yaml name: example.com spec: ingressClassName: custom-ingress diff --git a/internal/testdata/node/ingress-templates/ingress-15/example.com.yaml b/internal/testdata/node/ingress-templates/ingress-15/example.com.yaml index f354c535..7053be2d 100644 --- a/internal/testdata/node/ingress-templates/ingress-15/example.com.yaml +++ b/internal/testdata/node/ingress-templates/ingress-15/example.com.yaml @@ -31,6 +31,7 @@ metadata: lagoon.sh/service: example.com lagoon.sh/service-type: custom-ingress lagoon.sh/template: custom-ingress-0.1.0 + route.lagoon.sh/source: yaml name: example.com spec: ingressClassName: custom-ingress diff --git a/internal/testdata/node/ingress-templates/ingress-16/example.com.yaml b/internal/testdata/node/ingress-templates/ingress-16/example.com.yaml index aaba206b..23048d37 100644 --- a/internal/testdata/node/ingress-templates/ingress-16/example.com.yaml +++ b/internal/testdata/node/ingress-templates/ingress-16/example.com.yaml @@ -33,6 +33,7 @@ metadata: lagoon.sh/service: example.com lagoon.sh/service-type: custom-ingress lagoon.sh/template: custom-ingress-0.1.0 + route.lagoon.sh/source: yaml name: example.com spec: rules: diff --git a/internal/testdata/node/ingress-templates/ingress-17/example.com.yaml b/internal/testdata/node/ingress-templates/ingress-17/example.com.yaml index c9df67cb..5e70a750 100644 --- a/internal/testdata/node/ingress-templates/ingress-17/example.com.yaml +++ b/internal/testdata/node/ingress-templates/ingress-17/example.com.yaml @@ -33,6 +33,7 @@ metadata: lagoon.sh/service: example.com lagoon.sh/service-type: custom-ingress lagoon.sh/template: custom-ingress-0.1.0 + route.lagoon.sh/source: yaml name: example.com spec: rules: diff --git a/internal/testdata/node/ingress-templates/ingress-18/example.com.yaml b/internal/testdata/node/ingress-templates/ingress-18/example.com.yaml index fd6447f5..16a114a8 100644 --- a/internal/testdata/node/ingress-templates/ingress-18/example.com.yaml +++ b/internal/testdata/node/ingress-templates/ingress-18/example.com.yaml @@ -30,6 +30,7 @@ metadata: lagoon.sh/service: example.com lagoon.sh/service-type: custom-ingress lagoon.sh/template: custom-ingress-0.1.0 + route.lagoon.sh/source: yaml name: example.com spec: rules: diff --git a/internal/testdata/node/ingress-templates/ingress-18/www.example.com.yaml b/internal/testdata/node/ingress-templates/ingress-18/www.example.com.yaml index 6d0d0070..8e2b0463 100644 --- a/internal/testdata/node/ingress-templates/ingress-18/www.example.com.yaml +++ b/internal/testdata/node/ingress-templates/ingress-18/www.example.com.yaml @@ -26,6 +26,7 @@ metadata: lagoon.sh/service: www.example.com lagoon.sh/service-type: custom-ingress lagoon.sh/template: custom-ingress-0.1.0 + route.lagoon.sh/source: yaml name: www.example.com spec: rules: diff --git a/internal/testdata/node/ingress-templates/ingress-19/performance.example.com.yaml b/internal/testdata/node/ingress-templates/ingress-19/performance.example.com.yaml index 281706f9..863a9b9e 100644 --- a/internal/testdata/node/ingress-templates/ingress-19/performance.example.com.yaml +++ b/internal/testdata/node/ingress-templates/ingress-19/performance.example.com.yaml @@ -27,6 +27,7 @@ metadata: lagoon.sh/service: performance.example.com lagoon.sh/service-type: custom-ingress lagoon.sh/template: custom-ingress-0.1.0 + route.lagoon.sh/source: yaml name: performance.example.com spec: rules: diff --git a/internal/testdata/node/ingress-templates/ingress-2/example.com.yaml b/internal/testdata/node/ingress-templates/ingress-2/example.com.yaml index bb27ab4d..973e232f 100644 --- a/internal/testdata/node/ingress-templates/ingress-2/example.com.yaml +++ b/internal/testdata/node/ingress-templates/ingress-2/example.com.yaml @@ -31,6 +31,7 @@ metadata: lagoon.sh/service: example.com lagoon.sh/service-type: custom-ingress lagoon.sh/template: custom-ingress-0.1.0 + route.lagoon.sh/source: yaml name: example.com spec: rules: diff --git a/internal/testdata/node/ingress-templates/ingress-20/performance.example.com.yaml b/internal/testdata/node/ingress-templates/ingress-20/performance.example.com.yaml index 281706f9..863a9b9e 100644 --- a/internal/testdata/node/ingress-templates/ingress-20/performance.example.com.yaml +++ b/internal/testdata/node/ingress-templates/ingress-20/performance.example.com.yaml @@ -27,6 +27,7 @@ metadata: lagoon.sh/service: performance.example.com lagoon.sh/service-type: custom-ingress lagoon.sh/template: custom-ingress-0.1.0 + route.lagoon.sh/source: yaml name: performance.example.com spec: rules: diff --git a/internal/testdata/node/ingress-templates/ingress-21/example.com.yaml b/internal/testdata/node/ingress-templates/ingress-21/example.com.yaml index ff39bafc..8862305f 100644 --- a/internal/testdata/node/ingress-templates/ingress-21/example.com.yaml +++ b/internal/testdata/node/ingress-templates/ingress-21/example.com.yaml @@ -30,6 +30,7 @@ metadata: lagoon.sh/service: example.com lagoon.sh/service-type: custom-ingress lagoon.sh/template: custom-ingress-0.1.0 + route.lagoon.sh/source: yaml name: example.com spec: rules: diff --git a/internal/testdata/node/ingress-templates/ingress-22/example.com.yaml b/internal/testdata/node/ingress-templates/ingress-22/example.com.yaml index 7516f2b6..948b78f0 100644 --- a/internal/testdata/node/ingress-templates/ingress-22/example.com.yaml +++ b/internal/testdata/node/ingress-templates/ingress-22/example.com.yaml @@ -26,6 +26,7 @@ metadata: lagoon.sh/service: wildcard-example.com lagoon.sh/service-type: custom-ingress lagoon.sh/template: custom-ingress-0.1.0 + route.lagoon.sh/source: yaml name: wildcard-example.com spec: rules: diff --git a/internal/testdata/node/ingress-templates/ingress-23/example.com.yaml b/internal/testdata/node/ingress-templates/ingress-23/example.com.yaml index 877827b8..7091f985 100644 --- a/internal/testdata/node/ingress-templates/ingress-23/example.com.yaml +++ b/internal/testdata/node/ingress-templates/ingress-23/example.com.yaml @@ -30,6 +30,7 @@ metadata: lagoon.sh/service: example.com lagoon.sh/service-type: custom-ingress lagoon.sh/template: custom-ingress-0.1.0 + route.lagoon.sh/source: yaml name: example.com spec: rules: diff --git a/internal/testdata/node/ingress-templates/ingress-24/test1.example.com.yaml b/internal/testdata/node/ingress-templates/ingress-24/test1.example.com.yaml index b2058dd7..4dc7d437 100644 --- a/internal/testdata/node/ingress-templates/ingress-24/test1.example.com.yaml +++ b/internal/testdata/node/ingress-templates/ingress-24/test1.example.com.yaml @@ -26,6 +26,7 @@ metadata: lagoon.sh/service: wildcard-test1.example.com lagoon.sh/service-type: custom-ingress lagoon.sh/template: custom-ingress-0.1.0 + route.lagoon.sh/source: api name: wildcard-test1.example.com spec: rules: diff --git a/internal/testdata/node/ingress-templates/ingress-3/example.com.yaml b/internal/testdata/node/ingress-templates/ingress-3/example.com.yaml index bb27ab4d..973e232f 100644 --- a/internal/testdata/node/ingress-templates/ingress-3/example.com.yaml +++ b/internal/testdata/node/ingress-templates/ingress-3/example.com.yaml @@ -31,6 +31,7 @@ metadata: lagoon.sh/service: example.com lagoon.sh/service-type: custom-ingress lagoon.sh/template: custom-ingress-0.1.0 + route.lagoon.sh/source: yaml name: example.com spec: rules: diff --git a/internal/testdata/node/ingress-templates/ingress-4/example.com.yaml b/internal/testdata/node/ingress-templates/ingress-4/example.com.yaml index cea108f6..6837a728 100644 --- a/internal/testdata/node/ingress-templates/ingress-4/example.com.yaml +++ b/internal/testdata/node/ingress-templates/ingress-4/example.com.yaml @@ -30,6 +30,7 @@ metadata: lagoon.sh/service: example.com lagoon.sh/service-type: custom-ingress lagoon.sh/template: custom-ingress-0.1.0 + route.lagoon.sh/source: yaml name: example.com spec: rules: diff --git a/internal/testdata/node/ingress-templates/ingress-5/multiproject1.com.yaml b/internal/testdata/node/ingress-templates/ingress-5/multiproject1.com.yaml index 0750b877..627efc34 100644 --- a/internal/testdata/node/ingress-templates/ingress-5/multiproject1.com.yaml +++ b/internal/testdata/node/ingress-templates/ingress-5/multiproject1.com.yaml @@ -30,6 +30,7 @@ metadata: lagoon.sh/service: multiproject1.com lagoon.sh/service-type: custom-ingress lagoon.sh/template: custom-ingress-0.1.0 + route.lagoon.sh/source: yaml name: multiproject1.com spec: rules: diff --git a/internal/testdata/node/ingress-templates/ingress-6/multiproject2.com.yaml b/internal/testdata/node/ingress-templates/ingress-6/multiproject2.com.yaml index b87f6034..19dee590 100644 --- a/internal/testdata/node/ingress-templates/ingress-6/multiproject2.com.yaml +++ b/internal/testdata/node/ingress-templates/ingress-6/multiproject2.com.yaml @@ -30,6 +30,7 @@ metadata: lagoon.sh/service: multiproject2.com lagoon.sh/service-type: custom-ingress lagoon.sh/template: custom-ingress-0.1.0 + route.lagoon.sh/source: yaml name: multiproject2.com spec: rules: diff --git a/internal/testdata/node/ingress-templates/ingress-7/example.com.yaml b/internal/testdata/node/ingress-templates/ingress-7/example.com.yaml index fd6447f5..16a114a8 100644 --- a/internal/testdata/node/ingress-templates/ingress-7/example.com.yaml +++ b/internal/testdata/node/ingress-templates/ingress-7/example.com.yaml @@ -30,6 +30,7 @@ metadata: lagoon.sh/service: example.com lagoon.sh/service-type: custom-ingress lagoon.sh/template: custom-ingress-0.1.0 + route.lagoon.sh/source: yaml name: example.com spec: rules: diff --git a/internal/testdata/node/ingress-templates/ingress-7/www.example.com.yaml b/internal/testdata/node/ingress-templates/ingress-7/www.example.com.yaml index 6d0d0070..8e2b0463 100644 --- a/internal/testdata/node/ingress-templates/ingress-7/www.example.com.yaml +++ b/internal/testdata/node/ingress-templates/ingress-7/www.example.com.yaml @@ -26,6 +26,7 @@ metadata: lagoon.sh/service: www.example.com lagoon.sh/service-type: custom-ingress lagoon.sh/template: custom-ingress-0.1.0 + route.lagoon.sh/source: yaml name: www.example.com spec: rules: diff --git a/internal/testdata/node/ingress-templates/ingress-8/customdomain-will-be-main-domain.com.yaml b/internal/testdata/node/ingress-templates/ingress-8/customdomain-will-be-main-domain.com.yaml index 077f40d7..20338c5d 100644 --- a/internal/testdata/node/ingress-templates/ingress-8/customdomain-will-be-main-domain.com.yaml +++ b/internal/testdata/node/ingress-templates/ingress-8/customdomain-will-be-main-domain.com.yaml @@ -30,6 +30,7 @@ metadata: lagoon.sh/service: customdomain-will-be-main-domain.com lagoon.sh/service-type: custom-ingress lagoon.sh/template: custom-ingress-0.1.0 + route.lagoon.sh/source: yaml name: customdomain-will-be-main-domain.com spec: rules: diff --git a/internal/testdata/node/ingress-templates/ingress-8/customdomain-will-be-not-be-main-domain.com.yaml b/internal/testdata/node/ingress-templates/ingress-8/customdomain-will-be-not-be-main-domain.com.yaml index 3beb1b2c..0d3d6014 100644 --- a/internal/testdata/node/ingress-templates/ingress-8/customdomain-will-be-not-be-main-domain.com.yaml +++ b/internal/testdata/node/ingress-templates/ingress-8/customdomain-will-be-not-be-main-domain.com.yaml @@ -26,6 +26,7 @@ metadata: lagoon.sh/service: customdomain-will-be-not-be-main-domain.com lagoon.sh/service-type: custom-ingress lagoon.sh/template: custom-ingress-0.1.0 + route.lagoon.sh/source: yaml name: customdomain-will-be-not-be-main-domain.com spec: rules: diff --git a/internal/testdata/node/ingress-templates/ingress-9/active.example.com.yaml b/internal/testdata/node/ingress-templates/ingress-9/active.example.com.yaml index c6ffbfcd..b32ffc7e 100644 --- a/internal/testdata/node/ingress-templates/ingress-9/active.example.com.yaml +++ b/internal/testdata/node/ingress-templates/ingress-9/active.example.com.yaml @@ -30,6 +30,7 @@ metadata: lagoon.sh/service: active.example.com lagoon.sh/service-type: custom-ingress lagoon.sh/template: custom-ingress-0.1.0 + route.lagoon.sh/source: yaml name: active.example.com spec: rules: diff --git a/internal/testdata/node/ingress-templates/ingress-9/main.example.com.yaml b/internal/testdata/node/ingress-templates/ingress-9/main.example.com.yaml index 6a92657c..e52a75eb 100644 --- a/internal/testdata/node/ingress-templates/ingress-9/main.example.com.yaml +++ b/internal/testdata/node/ingress-templates/ingress-9/main.example.com.yaml @@ -26,6 +26,7 @@ metadata: lagoon.sh/service: main.example.com lagoon.sh/service-type: custom-ingress lagoon.sh/template: custom-ingress-0.1.0 + route.lagoon.sh/source: yaml name: main.example.com spec: rules: diff --git a/legacy/build-deploy-docker-compose.sh b/legacy/build-deploy-docker-compose.sh index 0880467a..a8a52bc8 100755 --- a/legacy/build-deploy-docker-compose.sh +++ b/legacy/build-deploy-docker-compose.sh @@ -120,6 +120,27 @@ function buildEnvVarCheck() { echo "$2" } +# Checks for a internal_system scoped env var from Lagoon API. All env vars +# are consolidated into the environment, project env-vars are only checked for +# backwards compatibility. +function internalSystemEnvVarCheck() { + # check for argument + [ "$1" ] || return + + local flagVar + + flagVar="$1" + # check Lagoon environment variables + flagValue=$(jq -r '.[] | select(.scope == "internal_system") | select(.name == "'"$flagVar"'") | .value' <<< "$LAGOON_ENVIRONMENT_VARIABLES") + [ "$flagValue" ] && echo "$flagValue" && return + # check Lagoon project variables + flagValue=$(jq -r '.[] | select(.scope == "internal_system") | select(.name == "'"$flagVar"'") | .value' <<< "$LAGOON_PROJECT_VARIABLES") + [ "$flagValue" ] && echo "$flagValue" && return + + echo "$2" +} + + # Checks for a internal_container_registry scoped env var. These are set in # lagoon-remote. function internalContainerRegistryCheck() { @@ -1182,29 +1203,49 @@ CLEANUP_WARNINGS="false" if [ ${#DELETE_INGRESS[@]} -ne 0 ]; then CLEANUP_WARNINGS="true" ((++BUILD_WARNING_COUNT)) - echo ">> Lagoon detected routes that have been removed from the .lagoon.yml or Lagoon API" - echo "> If you need these routes, you should update your .lagoon.yml file and make sure the routes exist." - if [ "$(featureFlag CLEANUP_REMOVED_LAGOON_ROUTES)" != enabled ]; then - echo "> If you no longer need these routes, you can instruct Lagoon to remove it from the environment by setting the following variable" - echo "> 'LAGOON_FEATURE_FLAG_CLEANUP_REMOVED_LAGOON_ROUTES=enabled' as a GLOBAL scoped variable to this environment or project" - echo "> You should remove this variable after the deployment has been completed, otherwise future route removals will happen automatically" - else - echo "> 'LAGOON_FEATURE_FLAG_CLEANUP_REMOVED_LAGOON_ROUTES=enabled' is configured and the following routes will be removed." - echo "> You should remove this variable if you don't want routes to be removed automatically" - fi - echo "> Future releases of Lagoon may remove routes automatically, you should ensure that your routes are up always up to date if you see this warning" - for DI in ${DELETE_INGRESS[@]} - do - if [ "$(featureFlag CLEANUP_REMOVED_LAGOON_ROUTES)" = enabled ]; then + API_ROUTES_CLEANUP=$(internalSystemEnvVarCheck LAGOON_API_ROUTES_CLEANUP false) + if [ "$API_ROUTES_CLEANUP" == true ]; then + # to ensure consistency with the api, enforce route cleanup + # if it isn't in the api, and isn't in the .lagoon.yml file, then it shouldn't exist. + echo ">> Lagoon detected routes that have been removed from the .lagoon.yml or Lagoon API" + echo "> As this project has routes managed in the API, these routes have been cleaned up." + echo "> If you need these routes, you should add them to the API." + for DI in ${DELETE_INGRESS[@]} + do if kubectl -n ${NAMESPACE} get ingress ${DI} &> /dev/null; then echo ">> Removing ingress ${DI}" cleanupCertificates "${DI}" "false" kubectl -n ${NAMESPACE} delete ingress ${DI} fi + done + else + # no routes in the api we will just continue to warn + # since users may not have realised they removed a route from the .lagoon.yml + # usually this is because of a bad merge or something, and people generally aren't reading warnings anyway + echo ">> Lagoon detected routes that have been removed from the .lagoon.yml or Lagoon API" + echo "> If you need these routes, you should update your .lagoon.yml file and make sure the routes exist." + if [ "$(featureFlag CLEANUP_REMOVED_LAGOON_ROUTES)" != enabled ]; then + echo "> If you no longer need these routes, you can instruct Lagoon to remove it from the environment by setting the following variable" + echo "> 'LAGOON_FEATURE_FLAG_CLEANUP_REMOVED_LAGOON_ROUTES=enabled' as a GLOBAL scoped variable to this environment or project" + echo "> You should remove this variable after the deployment has been completed, otherwise future route removals will happen automatically" else - echo "> The route '${DI}' would be removed" + echo "> 'LAGOON_FEATURE_FLAG_CLEANUP_REMOVED_LAGOON_ROUTES=enabled' is configured and the following routes will be removed." + echo "> You should remove this variable if you don't want routes to be removed automatically" fi - done + echo "> Future releases of Lagoon may remove routes automatically, you should ensure that your routes are up always up to date if you see this warning" + for DI in ${DELETE_INGRESS[@]} + do + if [ "$(featureFlag CLEANUP_REMOVED_LAGOON_ROUTES)" = enabled ]; then + if kubectl -n ${NAMESPACE} get ingress ${DI} &> /dev/null; then + echo ">> Removing ingress ${DI}" + cleanupCertificates "${DI}" "false" + kubectl -n ${NAMESPACE} delete ingress ${DI} + fi + else + echo "> The route '${DI}' would be removed" + fi + done + fi else echo "No route cleanup required" fi