Added GCP and Minikube output (#59)

* Added a config to create Minikube k8s, uses hostpath volumes
* Reworked templater to produce docker compose and minikube output
* Fix config templates
This commit is contained in:
cybermaggedon 2024-09-09 17:16:50 +01:00 committed by GitHub
parent f661791bbf
commit 0ae6feddb0
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
62 changed files with 37961 additions and 7077 deletions

View file

@ -1,6 +1,6 @@
local engine = import "docker-compose.jsonnet";
local decode = import "decode-config.jsonnet";
local engine = import "engine/docker-compose.jsonnet";
local decode = import "util/decode-config.jsonnet";
local components = import "components.jsonnet";
// Import config

View file

@ -1,6 +1,6 @@
local engine = import "k8s.jsonnet";
local decode = import "decode-config.jsonnet";
local engine = import "engine/gcp-k8s.jsonnet";
local decode = import "util/decode-config.jsonnet";
local components = import "components.jsonnet";
// Import config
@ -9,44 +9,8 @@ local config = import "config.json";
// Produce patterns from config
local patterns = decode(config);
local ns = {
apiVersion: "v1",
kind: "Namespace",
metadata: {
name: "trustgraph",
},
"spec": {
},
};
local sc = {
apiVersion: "storage.k8s.io/v1",
kind: "StorageClass",
metadata: {
name: "tg",
},
provisioner: "pd.csi.storage.gke.io",
parameters: {
type: "pd-balanced",
"csi.storage.k8s.io/fstype": "ext4",
},
reclaimPolicy: "Delete",
volumeBindingMode: "WaitForFirstConsumer",
};
//patterns["pulsar"].create(engine)
// Extract resources usnig the engine
local resources = std.flattenArrays([
p.create(engine) for p in std.objectValues(patterns)
]);
local resourceList = {
apiVersion: "v1",
kind: "List",
items: [ns, sc] + resources,
};
local resourceList = engine.package(patterns);
resourceList

View file

@ -0,0 +1,26 @@
local engine = import "engine/minikube-k8s.jsonnet";
local decode = import "util/decode-config.jsonnet";
local components = import "components.jsonnet";
// Import config
local config = import "config.json";
// Produce patterns from config
local patterns = decode(config);
local ns = {
apiVersion: "v1",
kind: "Namespace",
metadata: {
name: "trustgraph",
},
"spec": {
},
};
// Extract resources using the engine
local resourceList = engine.package(patterns);
resourceList

View file

@ -1,5 +1,13 @@
{
// Extract resources usnig the engine
package:: function(patterns)
std.foldl(
function(state, p) state + p.create(self),
std.objectValues(patterns),
{}
),
container:: function(name)
{

View file

@ -0,0 +1,44 @@
local k8s = import "k8s.jsonnet";
local ns = {
apiVersion: "v1",
kind: "Namespace",
metadata: {
name: "trustgraph",
},
"spec": {
},
};
local sc = {
apiVersion: "storage.k8s.io/v1",
kind: "StorageClass",
metadata: {
name: "tg",
},
provisioner: "pd.csi.storage.gke.io",
parameters: {
type: "pd-balanced",
"csi.storage.k8s.io/fstype": "ext4",
},
reclaimPolicy: "Delete",
volumeBindingMode: "WaitForFirstConsumer",
};
k8s + {
// Extract resources usnig the engine
package:: function(patterns)
local resources = [sc, ns] + std.flattenArrays([
p.create(self) for p in std.objectValues(patterns)
]);
local resourceList = {
apiVersion: "v1",
kind: "List",
items: [ns, sc] + resources,
};
resourceList
}

View file

@ -67,16 +67,16 @@
{
name: container.name,
image: container.image,
// FIXME: Make everything run as
// root. Needed to get filesystems
// to be accessible. There's a
// better way of doing this?
securityContext: {
// fsGroup: 1234
// runAsUser: 65534
// runAsGroup: 65534
// runAsNonRoot: true
runAsUser: 0,
runAsGroup: 0,
// runAsNonRoot: true,
// readOnlyRootFilesystem: true,
},
runAsUser: 0,
runAsGroup: 0,
},
resources: {
requests: container.reservations,
limits: container.limits
@ -197,28 +197,6 @@
with_size:: function(size) self + { size: size },
add:: function() [
/*
{
apiVersion: "v1",
kind: "PersistentVolume",
metadata: {
name: volume.name,
labels: {
type: "local",
}
},
spec: {
storageClassName: "tg",
volumeMode: "Filesystem",
capacity: {
storage: volume.size,
},
accessModes: [ "ReadWriteOnce" ],
persistentVolumeReclaimPolicy: "Delete",
}
},
*/
{
apiVersion: "v1",
kind: "PersistentVolumeClaim",
@ -234,7 +212,6 @@
storage: volume.size,
}
},
// volumeName: volume.name,
}
}
],

View file

@ -0,0 +1,115 @@
local k8s = import "k8s.jsonnet";
local ns = {
apiVersion: "v1",
kind: "Namespace",
metadata: {
name: "trustgraph",
},
"spec": {
},
};
k8s + {
// Extract resources usnig the engine
package:: function(patterns)
local resources = [ns] + std.flattenArrays([
p.create(self) for p in std.objectValues(patterns)
]);
local resourceList = {
apiVersion: "v1",
kind: "List",
items: resources,
};
resourceList,
volume:: function(name)
{
local volume = self,
name: name,
with_size:: function(size) self + { size: size },
add:: function() [
{
apiVersion: "v1",
kind: "PersistentVolume",
metadata: {
name: volume.name,
},
spec: {
accessModes: [ "ReadWriteOnce" ],
capacity: {
storage: volume.size,
},
persistentVolumeReclaimPolicy: "Delete",
hostPath: {
path: "/data/pv-" + volume.name,
},
}
},
{
apiVersion: "v1",
kind: "PersistentVolumeClaim",
metadata: {
name: volume.name,
namespace: "trustgraph",
},
spec: {
accessModes: [ "ReadWriteOnce" ],
resources: {
requests: {
storage: volume.size,
}
},
}
}
],
volRef:: function() {
name: volume.name,
persistentVolumeClaim: { claimName: volume.name },
}
},
service:: function(containers)
{
local service = self,
name: containers.name,
ports: [],
with_port::
function(src, dest, name)
self + {
ports: super.ports + [
{ src: src, dest: dest, name: name }
]
},
add:: function() [
{
apiVersion: "v1",
kind: "Service",
metadata: {
name: service.name,
namespace: "trustgraph",
},
spec: {
selector: {
app: service.name,
},
type: "LoadBalancer",
ports: [
{
port: port.src,
targetPort: port.dest,
name: port.name,
}
for port in service.ports
],
}
}
],
},
}

View file

@ -0,0 +1,21 @@
local engine = import "engine/docker-compose.jsonnet";
local components = import "components.jsonnet";
// Options
local options = std.split(std.extVar("options"), ",");
// Produce patterns from config
local patterns = std.foldl(
function(state, p) state + components[p],
options,
{}
);
// Extract resources usnig the engine
local resources = engine.package(patterns);
resources

View file

@ -1,6 +1,5 @@
local engine = import "docker-compose.jsonnet";
local decode = import "decode-config.jsonnet";
local engine = import "engine/docker-compose.jsonnet";
local components = import "components.jsonnet";
// Options
@ -14,11 +13,7 @@ local patterns = std.foldl(
);
// Extract resources usnig the engine
local resources = std.foldl(
function(state, p) state + p.create(engine),
std.objectValues(patterns),
{}
);
local resources = engine.package(patterns);
std.manifestYamlDoc(resources)

View file

@ -0,0 +1,19 @@
local engine = import "engine/minikube-k8s.jsonnet";
local components = import "components.jsonnet";
// Options
local options = std.split(std.extVar("options"), ",");
// Produce patterns from config
local patterns = std.foldl(
function(state, p) state + components[p],
options,
{}
);
// Extract resources usnig the engine
local resources = engine.package(patterns);
resources

View file

@ -1 +0,0 @@
"0.9.3"