feat: Automate generation of kube manifests
This commit is contained in:
parent
f1b089eb8a
commit
5bdd4f2b52
5 changed files with 583 additions and 10550 deletions
69
infrastructure/kube.yml
Normal file
69
infrastructure/kube.yml
Normal file
|
@ -0,0 +1,69 @@
|
||||||
|
apiVersion: v1
|
||||||
|
kind: Namespace
|
||||||
|
metadata:
|
||||||
|
name: legendary
|
||||||
|
---
|
||||||
|
apiVersion: apps/v1
|
||||||
|
kind: Deployment
|
||||||
|
metadata:
|
||||||
|
name: legendary
|
||||||
|
namespace: legendary
|
||||||
|
spec:
|
||||||
|
replicas: 2
|
||||||
|
selector:
|
||||||
|
matchLabels:
|
||||||
|
app: legendary
|
||||||
|
template:
|
||||||
|
metadata:
|
||||||
|
labels:
|
||||||
|
app: legendary
|
||||||
|
spec:
|
||||||
|
containers:
|
||||||
|
- name: app
|
||||||
|
image: registry.gitlab.com/mythic-insight/legendary:1.0.12
|
||||||
|
ports:
|
||||||
|
- containerPort: 4000
|
||||||
|
env:
|
||||||
|
- name: DATABASE_URL
|
||||||
|
valueFrom:
|
||||||
|
secretKeyRef:
|
||||||
|
name: database
|
||||||
|
key: url
|
||||||
|
- name: SECRET_KEY_BASE
|
||||||
|
valueFrom:
|
||||||
|
secretKeyRef:
|
||||||
|
name: legendary
|
||||||
|
key: secret-key-base
|
||||||
|
---
|
||||||
|
apiVersion: v1
|
||||||
|
kind: Service
|
||||||
|
metadata:
|
||||||
|
name: legendary
|
||||||
|
namespace: legendary
|
||||||
|
spec:
|
||||||
|
selector:
|
||||||
|
app: legendary
|
||||||
|
ports:
|
||||||
|
- protocol: TCP
|
||||||
|
port: 80
|
||||||
|
targetPort: 4000
|
||||||
|
---
|
||||||
|
apiVersion: networking.k8s.io/v1
|
||||||
|
kind: Ingress
|
||||||
|
metadata:
|
||||||
|
name: legendary
|
||||||
|
namespace: legendary
|
||||||
|
annotations:
|
||||||
|
kubernetes.io/ingress.class: nginx
|
||||||
|
spec:
|
||||||
|
rules:
|
||||||
|
- host: legendary-demo.mythicinsight.com
|
||||||
|
http:
|
||||||
|
paths:
|
||||||
|
- backend:
|
||||||
|
service:
|
||||||
|
name: legendary
|
||||||
|
port:
|
||||||
|
number: 80
|
||||||
|
path: /
|
||||||
|
pathType: Prefix
|
69
infrastructure/kube.yml.dot
Normal file
69
infrastructure/kube.yml.dot
Normal file
|
@ -0,0 +1,69 @@
|
||||||
|
apiVersion: v1
|
||||||
|
kind: Namespace
|
||||||
|
metadata:
|
||||||
|
name: legendary
|
||||||
|
---
|
||||||
|
apiVersion: apps/v1
|
||||||
|
kind: Deployment
|
||||||
|
metadata:
|
||||||
|
name: legendary
|
||||||
|
namespace: legendary
|
||||||
|
spec:
|
||||||
|
replicas: 2
|
||||||
|
selector:
|
||||||
|
matchLabels:
|
||||||
|
app: legendary
|
||||||
|
template:
|
||||||
|
metadata:
|
||||||
|
labels:
|
||||||
|
app: legendary
|
||||||
|
spec:
|
||||||
|
containers:
|
||||||
|
- name: app
|
||||||
|
image: registry.gitlab.com/mythic-insight/legendary:{{=it.version}}
|
||||||
|
ports:
|
||||||
|
- containerPort: 4000
|
||||||
|
env:
|
||||||
|
- name: DATABASE_URL
|
||||||
|
valueFrom:
|
||||||
|
secretKeyRef:
|
||||||
|
name: database
|
||||||
|
key: url
|
||||||
|
- name: SECRET_KEY_BASE
|
||||||
|
valueFrom:
|
||||||
|
secretKeyRef:
|
||||||
|
name: legendary
|
||||||
|
key: secret-key-base
|
||||||
|
---
|
||||||
|
apiVersion: v1
|
||||||
|
kind: Service
|
||||||
|
metadata:
|
||||||
|
name: legendary
|
||||||
|
namespace: legendary
|
||||||
|
spec:
|
||||||
|
selector:
|
||||||
|
app: legendary
|
||||||
|
ports:
|
||||||
|
- protocol: TCP
|
||||||
|
port: 80
|
||||||
|
targetPort: 4000
|
||||||
|
---
|
||||||
|
apiVersion: networking.k8s.io/v1
|
||||||
|
kind: Ingress
|
||||||
|
metadata:
|
||||||
|
name: legendary
|
||||||
|
namespace: legendary
|
||||||
|
annotations:
|
||||||
|
kubernetes.io/ingress.class: nginx
|
||||||
|
spec:
|
||||||
|
rules:
|
||||||
|
- host: legendary-demo.mythicinsight.com
|
||||||
|
http:
|
||||||
|
paths:
|
||||||
|
- backend:
|
||||||
|
service:
|
||||||
|
name: legendary
|
||||||
|
port:
|
||||||
|
number: 80
|
||||||
|
path: /
|
||||||
|
pathType: Prefix
|
10960
package-lock.json
generated
10960
package-lock.json
generated
File diff suppressed because it is too large
Load diff
20
package.json
20
package.json
|
@ -1,6 +1,6 @@
|
||||||
{
|
{
|
||||||
"name": "@mythic-insight/legendary",
|
"name": "@mythic-insight/legendary",
|
||||||
"version": "0.0.0-development",
|
"version": "1.0.12",
|
||||||
"description": "The Legendary Phoenix Boilerplate.",
|
"description": "The Legendary Phoenix Boilerplate.",
|
||||||
"main": "index.js",
|
"main": "index.js",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
|
@ -18,7 +18,10 @@
|
||||||
"homepage": "https://gitlab.com/mythic-insight/legendary#readme",
|
"homepage": "https://gitlab.com/mythic-insight/legendary#readme",
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@semantic-release/commit-analyzer": "^6.1.0",
|
"@semantic-release/commit-analyzer": "^6.1.0",
|
||||||
|
"@semantic-release/exec": "^5.0.0",
|
||||||
"@semantic-release/git": "^7.0.8",
|
"@semantic-release/git": "^7.0.8",
|
||||||
|
"@semantic-release/npm": "^7.0.9",
|
||||||
|
"dot": "^1.1.3",
|
||||||
"semantic-release": "^15.14.0",
|
"semantic-release": "^15.14.0",
|
||||||
"semantic-release-docker": "^2.2.0"
|
"semantic-release-docker": "^2.2.0"
|
||||||
},
|
},
|
||||||
|
@ -28,7 +31,20 @@
|
||||||
[
|
[
|
||||||
"@semantic-release/git",
|
"@semantic-release/git",
|
||||||
{
|
{
|
||||||
"message": "chore(release): ${nextRelease.version}\n\n${nextRelease.notes}"
|
"message": "chore(release): ${nextRelease.version}\n\n${nextRelease.notes}",
|
||||||
|
"assets": [
|
||||||
|
"package.json",
|
||||||
|
"infrastructure/kube.yml"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"prepare": [
|
||||||
|
"@semantic-release/npm",
|
||||||
|
[
|
||||||
|
"@semantic-release/exec",
|
||||||
|
{
|
||||||
|
"prepareCmd": "scripts/generate-kube"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
],
|
],
|
||||||
|
|
15
script/generate-kube
Executable file
15
script/generate-kube
Executable file
|
@ -0,0 +1,15 @@
|
||||||
|
#!/usr/bin/env node
|
||||||
|
|
||||||
|
const fs = require("fs");
|
||||||
|
const doT = require("dot");
|
||||||
|
doT.templateSettings = {...doT.templateSettings, strip: false};
|
||||||
|
|
||||||
|
const dots = doT.process({path: "./infrastructure"});
|
||||||
|
|
||||||
|
var packageText = fs.readFileSync("package.json", {encoding: "utf8"});
|
||||||
|
var packageConfig = JSON.parse(packageText);
|
||||||
|
|
||||||
|
const {version} = packageConfig;
|
||||||
|
const manifestText = dots.kube({version: version});
|
||||||
|
|
||||||
|
fs.writeFileSync("infrastructure/kube.yml", manifestText);
|
Loading…
Reference in a new issue