[bitnami/kong] Add tests and VIB publishing (#13134)

* [bitnami/kong] Add tests and VIB publishing

Signed-off-by: Jose Antonio Carmona <jcarmona@vmware.com>

* Apply suggestion

Signed-off-by: Jose Antonio Carmona <jcarmona@vmware.com>

Signed-off-by: Jose Antonio Carmona <jcarmona@vmware.com>
This commit is contained in:
Jose Antonio Carmona
2022-10-28 17:06:00 +02:00
committed by GitHub
parent 3b7d8cd25d
commit 3eeb792657
11 changed files with 210 additions and 2 deletions
+1
View File
@@ -34,6 +34,7 @@ on: # rebuild any PRs and main branch changes
- 'bitnami/kafka/**'
- 'bitnami/keycloak/**'
- 'bitnami/kibana/**'
- 'bitnami/kong/**'
- 'bitnami/logstash/**'
- 'bitnami/magento/**'
- 'bitnami/mariadb-galera/**'
+10
View File
@@ -0,0 +1,10 @@
{
"baseUrl": "http://localhost",
"env": {
"apikey": "ComplicatedPassword123!4",
"ingressHost": "www.example.com",
"ingressPath": "/nginx",
"externalIp": "{{ TARGET_IP }}",
"adminHttpPort": "443"
}
}
@@ -0,0 +1,5 @@
{
"newRoute": {
"path": "/chestnut"
}
}
@@ -0,0 +1,7 @@
{
"newService": {
"name": "cypress-service",
"upstreamURL": "https://bitnami.com",
"upstreamContent": "Loved by Developers"
}
}
@@ -0,0 +1,73 @@
/// <reference types="cypress" />
import { random } from '../support/utils';
it('allows accessing a restricted service (CRD) when API key is presented', () => {
const ROUTE_PATH = Cypress.env('ingressPath');
cy.request({
method: 'GET',
url: ROUTE_PATH,
headers: { Host: Cypress.env('ingressHost') },
failOnStatusCode: false,
}).then((response) => {
// No API Key presented
expect(response.status).to.eq(401);
});
cy.request({
method: 'GET',
url: ROUTE_PATH,
headers: {
apikey: Cypress.env('apikey'),
Host: Cypress.env('ingressHost'),
},
}).then((response) => {
expect(response.status).to.eq(200);
expect(response.body).to.contain('Welcome to nginx');
});
});
it('allows adding a new service and route through admin API', () => {
// As adminAPI is exposed in another port, we need to use the external IP to access it
const BASE_URL = `http://${Cypress.env('externalIp')}:${Cypress.env(
'adminHttpPort'
)}`;
cy.fixture('services').then((services) => {
cy.request({
method: 'POST',
url: `${BASE_URL}/services`,
body: {
name: `${services.newService.name}-${random}`,
url: services.newService.upstreamURL,
},
}).then((response) => {
expect(response.status).to.eq(201);
});
cy.fixture('routes').then((routes) => {
cy.request({
method: 'POST',
url: `${BASE_URL}/services/${services.newService.name}-${random}/routes`,
body: {
paths: [
`${routes.newRoute.path}${random}`
],
},
}).then((response) => {
expect(response.status).to.eq(201);
});
// Changes takes some seconds to apply
cy.wait(7000);
cy.request({
method: 'GET',
url: `${routes.newRoute.path}${random}`,
}).then((response) => {
expect(response.status).to.eq(200);
expect(response.body).to.contain(services.newService.upstreamContent);
});
});
});
});
@@ -0,0 +1,3 @@
/// <reference types="cypress" />
export let random = (Math.random() + 1).toString(36).substring(7);
+33
View File
@@ -0,0 +1,33 @@
http:
https://kong:{{ .Vars.service.ports.proxyHttps }}:
# The proxy does respond but the route is not registered
status: 404
allow-insecure: true
https://kong:{{ .Vars.service.ports.adminHttps }}:
status: 200
allow-insecure: true
file:
/opt/bitnami/kong/conf/kong.conf:
exists: true
filetype: file
mode: '0644'
owner: root
contains:
- /pg_user.*{{ .Vars.postgresql.auth.username }}/
- /pg_database.*{{ .Vars.postgresql.auth.database }}/
- /pg_password.*{{ .Vars.postgresql.auth.password }}/
/opt/bitnami/kong/server/nginx-kong.conf:
exists: true
filetype: file
mode: '0644'
contains:
- /listen.*{{ .Vars.kong.containerPorts.proxyHttp }}/
- /listen.*{{ .Vars.kong.containerPorts.adminHttp }}/
- /listen.*{{ .Vars.kong.containerPorts.proxyHttps }}.*ssl/
- /listen.*{{ .Vars.kong.containerPorts.adminHttps }}.*ssl/
command:
check-user-info:
exec: id
exit-status: 0
stdout:
- uid={{ .Vars.containerSecurityContext.runAsUser }}
+17
View File
@@ -0,0 +1,17 @@
containerSecurityContext:
runAsUser: 1002
kong:
containerPorts:
proxyHttp: 8000
proxyHttps: 8443
adminHttp: 8001
adminHttps: 8444
service:
ports:
proxyHttps: 8443
adminHttps: 8444
postgresql:
auth:
username: kong
password: ""
database: kong
+1
View File
@@ -0,0 +1 @@
verification-mode=SERIAL
+30 -1
View File
@@ -22,7 +22,7 @@
"url": "{SHA_ARCHIVE}",
"path": "/bitnami/kong"
},
"runtime_parameters": "InBvZEFmZmluaXR5UHJlc2V0IjogImhhcmQiCiJwb2RBbnRpQWZmaW5pdHlQcmVzZXQiOiAiIgoicG9zdGdyZXNxbCI6CiAgInBvc3RncmVzcWxQYXNzd29yZCI6ICI3ZE14TGZjcXhOIgoicmVwbGljYUNvdW50IjogMQoic2VydmljZSI6CiAgInByb3h5SHR0cFBvcnQiOiA4MAogICJ0eXBlIjogIkxvYWRCYWxhbmNlciI=",
"runtime_parameters": "cmVwbGljYUNvdW50OiAxCmRhdGFiYXNlOiBwb3N0Z3Jlc3FsCmNvbnRhaW5lclNlY3VyaXR5Q29udGV4dDoKICBlbmFibGVkOiB0cnVlCiAgcnVuQXNVc2VyOiAxMDAyCmtvbmc6CiAgY29udGFpbmVyUG9ydHM6IAogICAgcHJveHlIdHRwOiA4MDAwCiAgICBwcm94eUh0dHBzOiA4NDQzCiAgICBhZG1pbkh0dHA6IDgwMDEKICAgIGFkbWluSHR0cHM6IDg0NDQKc2VydmljZToKICB0eXBlOiBMb2FkQmFsYW5jZXIKICBleHBvc2VBZG1pbjogdHJ1ZQogIGRpc2FibGVIdHRwUG9ydDogZmFsc2UKICBwb3J0czoKICAgIHByb3h5SHR0cDogODAKICAgIHByb3h5SHR0cHM6IDg0NDMKICAgIGFkbWluSHR0cDogNDQzCiAgICBhZG1pbkh0dHBzOiA4NDQ0CmluZ3Jlc3NDb250cm9sbGVyOgogIGVuYWJsZWQ6IHRydWUKICBpbmdyZXNzQ2xhc3M6IGtvbmcKcG9zdGdyZXNxbDoKICBlbmFibGVkOiB0cnVlCiAgYXV0aDoKICAgIHVzZXJuYW1lOiBrb25nCiAgICBwYXNzd29yZDogIiIKICAgIGRhdGFiYXNlOiBrb25nCmV4dHJhRGVwbG95OgotIGFwaVZlcnNpb246IGFwcHMvdjEKICBraW5kOiBEZXBsb3ltZW50CiAgbWV0YWRhdGE6CiAgICBuYW1lOiBuZ2lueC12aWItdGVzdHMKICBzcGVjOgogICAgcmVwbGljYXM6IDEKICAgIHNlbGVjdG9yOgogICAgICBtYXRjaExhYmVsczoKICAgICAgICBhcHA6IG5naW54CiAgICB0ZW1wbGF0ZToKICAgICAgbWV0YWRhdGE6CiAgICAgICAgbGFiZWxzOgogICAgICAgICAgYXBwOiBuZ2lueAogICAgICBzcGVjOgogICAgICAgIGNvbnRhaW5lcnM6CiAgICAgICAgLSBuYW1lOiBuZ2lueAogICAgICAgICAgaW1hZ2U6IGJpdG5hbWkvbmdpbngKICAgICAgICAgIHBvcnRzOgogICAgICAgICAgLSBjb250YWluZXJQb3J0OiA4MDgwCi0gYXBpVmVyc2lvbjogdjEKICBraW5kOiBTZXJ2aWNlCiAgbWV0YWRhdGE6CiAgICBuYW1lOiBuZ2lueC12aWItdGVzdHMKICAgIGxhYmVsczoKICAgICAgYXBwOiBuZ2lueAogIHNwZWM6CiAgICBzZWxlY3RvcjoKICAgICAgYXBwOiBuZ2lueAogICAgcG9ydHM6CiAgICAtIHBvcnQ6IDgwODAKICAgICAgbmFtZTogaHR0cAogICAgICB0YXJnZXRQb3J0OiA4MDgwCi0gYXBpVmVyc2lvbjogdjEKICBraW5kOiBTZWNyZXQKICBtZXRhZGF0YToKICAgIG5hbWU6IGFwaWtleS12aWItdGVzdHMKICBkYXRhOgogICAga29uZ0NyZWRUeXBlOiBhMlY1TFdGMWRHZz0KICAgIGtleTogUTI5dGNHeHBZMkYwWldSUVlYTnpkMjl5WkRFeU15RTAKLSBhcGlWZXJzaW9uOiBjb25maWd1cmF0aW9uLmtvbmdocS5jb20vdjEKICBraW5kOiBLb25nQ29uc3VtZXIKICBtZXRhZGF0YToKICAgIG5hbWU6IHZpYi10ZXN0cwogICAgYW5ub3RhdGlvbnM6CiAgICAgIGt1YmVybmV0ZXMuaW8vaW5ncmVzcy5jbGFzczoga29uZwogIHVzZXJuYW1lOiAidmliLXRlc3RzIgogIGNyZWRlbnRpYWxzOgogIC0gYXBpa2V5LXZpYi10ZXN0cwotIGFwaVZlcnNpb246IGNvbmZpZ3VyYXRpb24ua29uZ2hxLmNvbS92MQogIGtpbmQ6IEtvbmdQbHVnaW4KICBtZXRhZGF0YToKICAgIG5hbWU6IGF1dGgtdmliLXRlc3RzCiAgcGx1Z2luOiBrZXktYXV0aAotIGFwaVZlcnNpb246IG5ldHdvcmtpbmcuazhzLmlvL3YxCiAga2luZDogSW5ncmVzcwogIG1ldGFkYXRhOgogICAgbmFtZTogdmliLXRlc3RzCiAgICBhbm5vdGF0aW9uczoKICAgICAga29uZ2hxLmNvbS9zdHJpcC1wYXRoOiAidHJ1ZSIKICAgICAga29uZ2hxLmNvbS9wbHVnaW5zOiBhdXRoLXZpYi10ZXN0cwogIHNwZWM6CiAgICBpbmdyZXNzQ2xhc3NOYW1lOiBrb25nCiAgICBydWxlczoKICAgIC0gaG9zdDogd3d3LmV4YW1wbGUuY29tCiAgICAgIGh0dHA6CiAgICAgICAgcGF0aHM6CiAgICAgICAgLSBwYXRoOiAvbmdpbngKICAgICAgICAgIHBhdGhUeXBlOiBJbXBsZW1lbnRhdGlvblNwZWNpZmljCiAgICAgICAgICBiYWNrZW5kOgogICAgICAgICAgICBzZXJ2aWNlOgogICAgICAgICAgICAgIG5hbWU6IG5naW54LXZpYi10ZXN0cwogICAgICAgICAgICAgIHBvcnQ6CiAgICAgICAgICAgICAgICBudW1iZXI6IDgwODA=",
"target_platform": {
"target_platform_id": "{VIB_ENV_ALTERNATIVE_TARGET_PLATFORM}",
"size": {
@@ -36,6 +36,35 @@
"params": {
"endpoint": "lb-kong-http-proxy"
}
},
{
"action_id": "goss",
"params": {
"resources": {
"path": "/.vib/kong/goss"
},
"remote": {
"workload": "deploy-kong"
},
"vars_file": "vars.yaml"
}
},
{
"action_id": "cypress",
"params": {
"resources": {
"path": "/.vib/kong/cypress"
},
"endpoint": "lb-kong-http-proxy",
"app_protocol": "HTTP",
"env": {
"apikey": "ComplicatedPassword123!4",
"ingressHost": "www.example.com",
"ingressPath": "/nginx",
"externalIp": "{{ TARGET_IP }}",
"adminHttpPort": "443"
}
}
}
]
},
+30 -1
View File
@@ -22,7 +22,7 @@
"url": "{SHA_ARCHIVE}",
"path": "/bitnami/kong"
},
"runtime_parameters": "InBvZEFmZmluaXR5UHJlc2V0IjogImhhcmQiCiJwb2RBbnRpQWZmaW5pdHlQcmVzZXQiOiAiIgoicG9zdGdyZXNxbCI6CiAgInBvc3RncmVzcWxQYXNzd29yZCI6ICI3ZE14TGZjcXhOIgoicmVwbGljYUNvdW50IjogMQoic2VydmljZSI6CiAgInByb3h5SHR0cFBvcnQiOiA4MAogICJ0eXBlIjogIkxvYWRCYWxhbmNlciI=",
"runtime_parameters": "cmVwbGljYUNvdW50OiAxCmRhdGFiYXNlOiBwb3N0Z3Jlc3FsCmNvbnRhaW5lclNlY3VyaXR5Q29udGV4dDoKICBlbmFibGVkOiB0cnVlCiAgcnVuQXNVc2VyOiAxMDAyCmtvbmc6CiAgY29udGFpbmVyUG9ydHM6IAogICAgcHJveHlIdHRwOiA4MDAwCiAgICBwcm94eUh0dHBzOiA4NDQzCiAgICBhZG1pbkh0dHA6IDgwMDEKICAgIGFkbWluSHR0cHM6IDg0NDQKc2VydmljZToKICB0eXBlOiBMb2FkQmFsYW5jZXIKICBleHBvc2VBZG1pbjogdHJ1ZQogIGRpc2FibGVIdHRwUG9ydDogZmFsc2UKICBwb3J0czoKICAgIHByb3h5SHR0cDogODAKICAgIHByb3h5SHR0cHM6IDg0NDMKICAgIGFkbWluSHR0cDogNDQzCiAgICBhZG1pbkh0dHBzOiA4NDQ0CmluZ3Jlc3NDb250cm9sbGVyOgogIGVuYWJsZWQ6IHRydWUKICBpbmdyZXNzQ2xhc3M6IGtvbmcKcG9zdGdyZXNxbDoKICBlbmFibGVkOiB0cnVlCiAgYXV0aDoKICAgIHVzZXJuYW1lOiBrb25nCiAgICBwYXNzd29yZDogIiIKICAgIGRhdGFiYXNlOiBrb25nCmV4dHJhRGVwbG95OgotIGFwaVZlcnNpb246IGFwcHMvdjEKICBraW5kOiBEZXBsb3ltZW50CiAgbWV0YWRhdGE6CiAgICBuYW1lOiBuZ2lueC12aWItdGVzdHMKICBzcGVjOgogICAgcmVwbGljYXM6IDEKICAgIHNlbGVjdG9yOgogICAgICBtYXRjaExhYmVsczoKICAgICAgICBhcHA6IG5naW54CiAgICB0ZW1wbGF0ZToKICAgICAgbWV0YWRhdGE6CiAgICAgICAgbGFiZWxzOgogICAgICAgICAgYXBwOiBuZ2lueAogICAgICBzcGVjOgogICAgICAgIGNvbnRhaW5lcnM6CiAgICAgICAgLSBuYW1lOiBuZ2lueAogICAgICAgICAgaW1hZ2U6IGJpdG5hbWkvbmdpbngKICAgICAgICAgIHBvcnRzOgogICAgICAgICAgLSBjb250YWluZXJQb3J0OiA4MDgwCi0gYXBpVmVyc2lvbjogdjEKICBraW5kOiBTZXJ2aWNlCiAgbWV0YWRhdGE6CiAgICBuYW1lOiBuZ2lueC12aWItdGVzdHMKICAgIGxhYmVsczoKICAgICAgYXBwOiBuZ2lueAogIHNwZWM6CiAgICBzZWxlY3RvcjoKICAgICAgYXBwOiBuZ2lueAogICAgcG9ydHM6CiAgICAtIHBvcnQ6IDgwODAKICAgICAgbmFtZTogaHR0cAogICAgICB0YXJnZXRQb3J0OiA4MDgwCi0gYXBpVmVyc2lvbjogdjEKICBraW5kOiBTZWNyZXQKICBtZXRhZGF0YToKICAgIG5hbWU6IGFwaWtleS12aWItdGVzdHMKICBkYXRhOgogICAga29uZ0NyZWRUeXBlOiBhMlY1TFdGMWRHZz0KICAgIGtleTogUTI5dGNHeHBZMkYwWldSUVlYTnpkMjl5WkRFeU15RTAKLSBhcGlWZXJzaW9uOiBjb25maWd1cmF0aW9uLmtvbmdocS5jb20vdjEKICBraW5kOiBLb25nQ29uc3VtZXIKICBtZXRhZGF0YToKICAgIG5hbWU6IHZpYi10ZXN0cwogICAgYW5ub3RhdGlvbnM6CiAgICAgIGt1YmVybmV0ZXMuaW8vaW5ncmVzcy5jbGFzczoga29uZwogIHVzZXJuYW1lOiAidmliLXRlc3RzIgogIGNyZWRlbnRpYWxzOgogIC0gYXBpa2V5LXZpYi10ZXN0cwotIGFwaVZlcnNpb246IGNvbmZpZ3VyYXRpb24ua29uZ2hxLmNvbS92MQogIGtpbmQ6IEtvbmdQbHVnaW4KICBtZXRhZGF0YToKICAgIG5hbWU6IGF1dGgtdmliLXRlc3RzCiAgcGx1Z2luOiBrZXktYXV0aAotIGFwaVZlcnNpb246IG5ldHdvcmtpbmcuazhzLmlvL3YxCiAga2luZDogSW5ncmVzcwogIG1ldGFkYXRhOgogICAgbmFtZTogdmliLXRlc3RzCiAgICBhbm5vdGF0aW9uczoKICAgICAga29uZ2hxLmNvbS9zdHJpcC1wYXRoOiAidHJ1ZSIKICAgICAga29uZ2hxLmNvbS9wbHVnaW5zOiBhdXRoLXZpYi10ZXN0cwogIHNwZWM6CiAgICBpbmdyZXNzQ2xhc3NOYW1lOiBrb25nCiAgICBydWxlczoKICAgIC0gaG9zdDogd3d3LmV4YW1wbGUuY29tCiAgICAgIGh0dHA6CiAgICAgICAgcGF0aHM6CiAgICAgICAgLSBwYXRoOiAvbmdpbngKICAgICAgICAgIHBhdGhUeXBlOiBJbXBsZW1lbnRhdGlvblNwZWNpZmljCiAgICAgICAgICBiYWNrZW5kOgogICAgICAgICAgICBzZXJ2aWNlOgogICAgICAgICAgICAgIG5hbWU6IG5naW54LXZpYi10ZXN0cwogICAgICAgICAgICAgIHBvcnQ6CiAgICAgICAgICAgICAgICBudW1iZXI6IDgwODA=",
"target_platform": {
"target_platform_id": "{VIB_ENV_ALTERNATIVE_TARGET_PLATFORM}",
"size": {
@@ -36,6 +36,35 @@
"params": {
"endpoint": "lb-kong-http-proxy"
}
},
{
"action_id": "goss",
"params": {
"resources": {
"path": "/.vib/kong/goss"
},
"remote": {
"workload": "deploy-kong"
},
"vars_file": "vars.yaml"
}
},
{
"action_id": "cypress",
"params": {
"resources": {
"path": "/.vib/kong/cypress"
},
"endpoint": "lb-kong-http-proxy",
"app_protocol": "HTTP",
"env": {
"apikey": "ComplicatedPassword123!4",
"ingressHost": "www.example.com",
"ingressPath": "/nginx",
"externalIp": "{{ TARGET_IP }}",
"adminHttpPort": "443"
}
}
}
]
}