pomerium/integration/manifests/lib/backends.libsonnet

105 lines
2.2 KiB
Jsonnet

local configMap = function(name, data) {
apiVersion: 'v1',
kind: 'ConfigMap',
metadata: {
namespace: 'default',
name: name,
labels: {
app: name,
},
},
data: data,
};
local service = function(name) {
apiVersion: 'v1',
kind: 'Service',
metadata: {
namespace: 'default',
name: name,
labels: { app: name },
},
spec: {
selector: { app: name },
ports: [{
name: 'http',
port: 80,
targetPort: 'http',
}],
},
};
local deployment = function(name) {
apiVersion: 'apps/v1',
kind: 'Deployment',
metadata: {
namespace: 'default',
name: name,
},
spec: {
replicas: 1,
selector: { matchLabels: { app: name } },
template: {
metadata: {
labels: { app: name },
},
spec: {
initContainers: [{
name: 'init',
image: 'node:14-stretch-slim',
imagePullPolicy: 'IfNotPresent',
args: ['bash', '-c', 'cp -rL /src/* /app/'],
volumeMounts: [{
name: 'src',
mountPath: '/src',
}, {
name: 'app',
mountPath: '/app',
}],
}],
containers: [{
name: name,
image: 'node:14-stretch-slim',
imagePullPolicy: 'IfNotPresent',
args: ['bash', '-c', 'cd /app && npm install && node index.js'],
ports: [{
name: 'http',
containerPort: 8080,
}],
volumeMounts: [{
name: 'app',
mountPath: '/app',
}],
}],
volumes: [{
name: 'src',
configMap: {
name: name,
},
}, {
name: 'app',
emptyDir: {},
}],
},
},
},
};
{
apiVersion: 'v1',
kind: 'List',
items: [
configMap('httpdetails', {
'index.js': importstr '../../backends/httpdetails/index.js',
}),
service('httpdetails'),
deployment('httpdetails'),
configMap('ws-echo', {
'package.json': importstr '../../backends/ws-echo/package.json',
'index.js': importstr '../../backends/ws-echo/index.js',
}),
service('ws-echo'),
deployment('ws-echo'),
],
}