Last active
March 8, 2024 18:13
-
-
Save x95castle1/f5d89ac3e6a2f29a2f450128c8e27f37 to your computer and use it in GitHub Desktop.
Statefulset Workload Type for TAP
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#@ load("@ytt:data", "data") | |
--- | |
apiVersion: carto.run/v1alpha1 | |
kind: ClusterConfigTemplate | |
metadata: | |
name: statefulset-template | |
annotations: | |
doc: | | |
This template consumes an input named config which contains a | |
PodTemplateSpec and returns a ConfigMap which contains a | |
"delivery.yml" which contains a manifests for a Kubernetes | |
Deployment which will run the templated pod, and a "service.yml" | |
Kubernetes Service to expose the pods on the network. | |
This template creates a deployment that allows you to control | |
the replicas! | |
spec: | |
configPath: .data | |
params: | |
- name: replicas | |
default: 1 | |
- name: ports | |
default: | |
- containerPort: 8080 | |
port: 8080 | |
name: http | |
healthRule: | |
alwaysHealthy: {} | |
#@ label_exclusions = "[\"" + "\", \"".join(["kapp.k14s.io/app", "kapp.k14s.io/association"]) + "\"]" | |
#@yaml/text-templated-strings | |
ytt: | | |
#@ load("@ytt:data", "data") | |
#@ load("@ytt:yaml", "yaml") | |
#@ load("@ytt:struct", "struct") | |
#@ load("@ytt:assert", "assert") | |
#@ load("@ytt:overlay", "overlay") | |
#@ def merge_labels(fixed_values): | |
#@ labels = {} | |
#@ if hasattr(data.values.workload.metadata, "labels"): | |
#@ exclusions = (@= label_exclusions @) | |
#@ for k,v in dict(data.values.workload.metadata.labels).items(): | |
#@ if k not in exclusions: | |
#@ labels[k] = v | |
#@ end | |
#@ end | |
#@ end | |
#@ labels.update(fixed_values) | |
#@ return labels | |
#@ end | |
#@ def intOrString(v): | |
#@ return v if type(v) == "int" else int(v.strip()) if v.strip().isdigit() else v | |
#@ end | |
#@ def merge_ports(ports_spec, containers): | |
#@ ports = {} | |
#@ for c in containers: | |
#@ for p in getattr(c, "ports", []): | |
#@ ports[p.containerPort] = {"targetPort": p.containerPort, "port": p.containerPort, "name": getattr(p, "name", str(p.containerPort))} | |
#@ end | |
#@ end | |
#@ for p in ports_spec: | |
#@ targetPort = getattr(p, "containerPort", p.port) | |
#@ type(targetPort) in ("string", "int") or fail("containerPort must be a string or int") | |
#@ targetPort = intOrString(targetPort) | |
#@ | |
#@ port = p.port | |
#@ type(port) in ("string", "int") or fail("port must be a string or int") | |
#@ port = int(port) | |
#@ ports[p.port] = {"targetPort": targetPort, "port": port, "name": getattr(p, "name", str(p.port))} | |
#@ end | |
#@ return ports.values() | |
#@ end | |
#@ def param(key): | |
#@ if not key in data.values.params: | |
#@ return None | |
#@ end | |
#@ return data.values.params[key] | |
#@ end | |
#@ def overlayvolumes(): | |
#@overlay/match by=overlay.subset({"kind":"StatefulSet"}), expects="0+" | |
--- | |
spec: | |
template: | |
#@overlay/match missing_ok=True | |
volumeClaimTemplates: #@ param("volumeclaimtemplate") | |
spec: | |
#@overlay/match missing_ok=True | |
volumemounts: #@ param("volumemounts") | |
#@ end | |
#@ def delivery(): | |
--- | |
apiVersion: apps/v1 | |
kind: StatefulSet | |
metadata: | |
name: #@ data.values.workload.metadata.name | |
annotations: | |
kapp.k14s.io/update-strategy: "fallback-on-replace" | |
ootb.apps.tanzu.vmware.com/servicebinding-workload: "true" | |
kapp.k14s.io/change-rule: "upsert after upserting servicebinding.io/ServiceBindings" | |
labels: #@ merge_labels({ "app.kubernetes.io/component": "run", "carto.run/workload-name": data.values.workload.metadata.name }) | |
spec: | |
serviceName: #@ data.values.workload.metadata.name | |
replicas: #@ data.values.params.replicas | |
selector: | |
matchLabels: #@ data.values.config.metadata.labels | |
template: #@ data.values.config | |
--- | |
apiVersion: v1 | |
kind: Service | |
metadata: | |
name: #@ data.values.workload.metadata.name | |
labels: #@ merge_labels({ "app.kubernetes.io/component": "run", "carto.run/workload-name": data.values.workload.metadata.name }) | |
spec: | |
selector: #@ data.values.config.metadata.labels | |
ports: | |
#@ hasattr(data.values.params, "ports") and len(data.values.params.ports) or assert.fail("one or more ports param must be provided.") | |
#@ declared_ports = [] | |
#@ if "ports" in data.values.params: | |
#@ declared_ports = data.values.params.ports | |
#@ else: | |
#@ declared_ports = struct.encode([{ "containerPort": 8080, "port": 8080, "name": "http"}]) | |
#@ end | |
#@ for p in merge_ports(declared_ports, data.values.config.spec.containers): | |
- #@ p | |
#@ end | |
--- | |
apiVersion: networking.k8s.io/v1 | |
kind: Ingress | |
metadata: | |
name: #@ data.values.workload.metadata.name | |
annotations: | |
projectcontour.io/tls-cert-namespace: kube-system | |
ingress.kubernetes.io/force-ssl-redirect: "true" | |
kubernetes.io/ingress.class: contour | |
kapp.k14s.io/change-rule: "upsert after upserting Services" | |
labels: #@ merge_labels({ "app.kubernetes.io/component": "run", "carto.run/workload-name": data.values.workload.metadata.name }) | |
spec: | |
tls: | |
- secretName: wildcard-cert | |
hosts: | |
- #@ data.values.workload.metadata.name | |
rules: | |
- host: #@ data.values.workload.metadata.name | |
http: | |
paths: | |
- pathType: Prefix | |
path: / | |
backend: | |
service: | |
name: #@ data.values.workload.metadata.name | |
port: | |
number: 8080 | |
#@ end | |
--- | |
apiVersion: v1 | |
kind: ConfigMap | |
metadata: | |
name: #@ data.values.workload.metadata.name + "-server" | |
labels: #@ merge_labels({ "app.kubernetes.io/component": "config" }) | |
data: | |
delivery.yml: #@ yaml.encode(overlay.apply(delivery(),overlayvolumes())) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
apiVersion: carto.run/v1alpha1 | |
kind: Workload | |
metadata: | |
name: ss-friday-java-web-app | |
labels: | |
apps.tanzu.vmware.com/workload-type: statefulset | |
apps.tanzu.vmware.com/auto-configure-actuators: "true" | |
app.kubernetes.io/part-of: ss-friday-java-web-app | |
spec: | |
build: | |
env: | |
- name: BP_JVM_VERSION | |
value: "11" | |
params: | |
- name: annotations | |
value: | |
autoscaling.knative.dev/minScale: "1" | |
- name: replicas | |
value: 3 | |
- name: volumeclaimtemplate | |
value: | |
- metadata: | |
name: www | |
spec: | |
accessModes: | |
- ReadWriteOnce | |
resources: | |
requests: | |
storage: 8Gi | |
storageClassName: default | |
- name: volumemounts | |
value: | |
- name: www | |
mountPath: /usr/share/nginx/html | |
source: | |
git: | |
url: https://github.com/x95castle1/friday-java-web-app | |
ref: | |
branch: main |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment