diff --git a/faces-chart/templates/_backend.yaml b/faces-chart/templates/_backend.yaml new file mode 100644 index 0000000..12995d3 --- /dev/null +++ b/faces-chart/templates/_backend.yaml @@ -0,0 +1,113 @@ +# The backend-* partials are used to grab things with defaults taken first by +# looking in .Values.backend, and then (for image and imagePullPolicy) from +# .Values.defaultImage and .Values.defaultImagePullPolicy if needed. This +# makes sense in that the backend workloads are similar (though honestly, +# backend-image is making less sense now that color has its own image). +# +# params: .root for the root, .which for the name of the workload +{{- define "partials.backend-image" -}} + {{- $source := index .root.Values .which -}} + {{- include "partials.select-image" + (dict "root" .root + "source" $source + "default" .root.Values.backend) -}} +{{- end -}} + +# params: .root for the root, .which for the name of the workload +{{- define "partials.backend-imagePullPolicy" -}} + {{- $source := index .root.Values .which -}} + {{- include "partials.select-key" + (dict "root" .root "source" $source "key" "imagePullPolicy" "default" .root.Values.backend) -}} +{{- end -}} + +# params: .root for the root, .which for the name of the workload +{{- define "partials.backend-delayBuckets" -}} + {{- $source := index .root.Values .which -}} + {{- include "partials.select-env" + (dict "root" .root + "source" $source + "key" "delayBuckets" + "name" "DELAY_BUCKETS" + "default" .root.Values.backend) -}} +{{- end -}} + +# params: .root for the root, .which for the name of the workload +{{- define "partials.backend-errorFraction" -}} + {{- $source := index .root.Values .which -}} + {{- include "partials.select-env" + (dict "root" .root + "source" $source + "key" "errorFraction" + "name" "ERROR_FRACTION" + "default" .root.Values.backend) -}} +{{- end -}} + +# partials.backend does all the heavy lifting for a backend workload +# params: .root for the root, .name for the name of the workload, +# .workload for what kind of workload -- so e.g. you might see "color2" +# for .name, but .workload would still be "color" in that case. +{{- define "partials.backend" -}} +{{- $info := index .root.Values .name -}} +{{- if $info -}} +{{- if $info.enabled }} +--- +apiVersion: v1 +kind: Service +metadata: + name: {{ .name | quote }} + namespace: {{ .root.Release.Namespace }} + labels: + service: {{ .name | quote }} +spec: + type: ClusterIP + selector: + service: {{ .name | quote }} + ports: + - port: 80 + targetPort: http +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + name: {{ .name | quote }} + namespace: {{ .root.Release.Namespace }} + labels: + service: {{ .name | quote }} +spec: + replicas: 1 + selector: + matchLabels: + service: {{ .name | quote }} + template: + metadata: + labels: + service: {{ .name | quote }} + spec: + containers: + - name: {{ .name | quote }} + image: {{ include "partials.backend-image" (dict "root" .root "which" .name) }} + imagePullPolicy: {{ include "partials.backend-imagePullPolicy" (dict "root" .root "which" .name) }} + ports: + - name: http + containerPort: 8000 + env: + - name: FACES_SERVICE + value: {{ .workload | quote }} + - name: USER_HEADER_NAME + value: {{ .root.Values.authHeader | quote }} + {{- if index $info .workload }} + - name: {{ .workload | upper | quote }} + value: {{ index $info .workload }} + {{- end -}} + {{- include "partials.backend-delayBuckets" (dict "root" .root "which" .name) }} + {{- include "partials.backend-errorFraction" (dict "root" .root "which" .name) }} + resources: + requests: + cpu: 100m + memory: 64Mi + limits: + cpu: 250m + memory: 128Mi +{{- end -}} +{{- end -}} +{{- end -}} diff --git a/faces-chart/templates/_frontend.yaml b/faces-chart/templates/_frontend.yaml new file mode 100644 index 0000000..da5d9e7 --- /dev/null +++ b/faces-chart/templates/_frontend.yaml @@ -0,0 +1,107 @@ +# The frontend-* partials are used to grab things with no defaults except for +# .Values.defaultImage and .Values.defaultImagePullPolicy for image and +# imagePullPolicy respectively. This is because the frontend workloads (face, +# faces-gui, and the poor-man's ingress if configured) don't really have much +# in common. +# +# params: .root for the root, .which for the name of the workload +{{- define "partials.frontend-image" -}} + {{- $source := index .root.Values .which -}} + {{- include "partials.select-image" + (dict "root" .root + "source" $source) -}} +{{- end -}} + +# params: .root for the root, .which for the name of the workload +{{- define "partials.frontend-imagePullPolicy" -}} + {{- $source := index .root.Values .which -}} + {{- include "partials.select-key" + (dict "root" .root + "source" $source + "key" "imagePullPolicy") -}} +{{- end -}} + +# params: .root for the root, .which for the name of the workload +{{- define "partials.frontend-delayBuckets" -}} + {{- $source := index .root.Values .which -}} + {{- include "partials.select-env" + (dict "root" .root + "source" $source + "key" "delayBuckets" + "name" "DELAY_BUCKETS") -}} +{{- end -}} + +# params: .root for the root, .which for the name of the workload +{{- define "partials.frontend-errorFraction" -}} + {{- $source := index .root.Values .which -}} + {{- include "partials.select-env" + (dict "root" .root + "source" $source + "key" "errorFraction" + "name" "ERROR_FRACTION") -}} +{{- end -}} + +# We use all the above to provide nicer helpers for each of the workloads. +# Given that the frontend workloads are all different enough that it's not +# worth having the equivalent of partials-backend, we need to include a lot +# more partials in the frontend workload templates, so we provide these to +# make them easier to read. +{{- define "partials.gui-image" -}} + {{- include "partials.frontend-image" + (dict "root" . + "which" "gui") -}} +{{- end -}} + +{{- define "partials.gui-imagePullPolicy" -}} + {{- include "partials.frontend-imagePullPolicy" + (dict "root" . + "which" "gui") -}} +{{- end -}} + +{{- define "partials.face-image" -}} + {{- include "partials.frontend-image" + (dict "root" . + "which" "face") -}} +{{- end -}} + +{{- define "partials.face-imagePullPolicy" -}} + {{- include "partials.frontend-imagePullPolicy" + (dict "root" . + "which" "face") -}} +{{- end -}} + +{{- define "partials.face-delayBuckets" -}} + {{- include "partials.frontend-delayBuckets" + (dict "root" . + "which" "face") -}} +{{- end -}} + +{{- define "partials.face-errorFraction" -}} + {{- include "partials.frontend-errorFraction" + (dict "root" . + "which" "face") -}} +{{- end -}} + +{{- define "partials.ingress-image" -}} + {{- include "partials.frontend-image" + (dict "root" . + "which" "ingress") -}} +{{- end -}} + +{{- define "partials.ingress-imagePullPolicy" -}} + {{- include "partials.frontend-imagePullPolicy" + (dict "root" . + "which" "ingress") -}} +{{- end -}} + +{{- define "partials.ingress-delayBuckets" -}} + {{- include "partials.frontend-delayBuckets" + (dict "root" . + "which" "ingress") -}} +{{- end -}} + +{{- define "partials.ingress-errorFraction" -}} + {{- include "partials.frontend-errorFraction" + (dict "root" . + "which" "ingress") -}} +{{- end -}} diff --git a/faces-chart/templates/_helpers.tpl b/faces-chart/templates/_helpers.tpl index 5cb18f9..d1d240a 100644 --- a/faces-chart/templates/_helpers.tpl +++ b/faces-chart/templates/_helpers.tpl @@ -1,15 +1,29 @@ -{{- define "partials.default-image" -}} - {{- if .root.Values.defaultImage -}} - {{- .root.Values.defaultImage -}} +# partials.select-image builds a Docker image name, with optional defaulting. +# +# params: .root for the root, .source for the source dict, .default (optional) +# for the default dict +{{- define "partials.select-image" -}} + {{- if .source.image -}} + {{- .source.image -}} + {{- else if .source.imageName -}} + {{- .source.imageName -}}:{{- include "partials.image-tag" . -}} + {{- else if .default -}} + {{- include "partials.select-image" + (dict "root" .root + "source" .default) -}} {{- else -}} - {{- .root.Values.defaultRegistry -}}/{{- .root.Values.defaultImageName -}}:{{- .root.Values.defaultImageTag -}} + {{- include "partials.default-image" . -}} {{- end -}} {{- end -}} +# partials.image-tag finds an appropriate Docker tag, with optional defaulting. +# +# params: .root for the root, .source for the source dict, .default (optional) +# for the default dict {{- define "partials.image-tag" -}} {{- if .source.imageTag -}} {{- .source.imageTag -}} - {{- else if (and .default .default.imageTag) }} + {{- else if (and .default .default.imageTag) -}} {{- .default.imageTag -}} {{- else if .root.Values.defaultImageTag -}} {{- .root.Values.defaultImageTag -}} @@ -18,148 +32,44 @@ {{- end -}} {{- end -}} -{{- define "partials.select-image" -}} - {{- if .source.image -}} - {{- .source.image -}} - {{- else if .source.imageName -}} - {{- .source.imageName -}}:{{- include "partials.image-tag" . -}} - {{- else if .default -}} - {{- include "partials.select-image" (dict "source" .default "root" .root) -}} +# partials.default-image finds the default Docker image name. +# +# params: .root for the root +{{- define "partials.default-image" -}} + {{- if .root.Values.defaultImage -}} + {{- .root.Values.defaultImage -}} {{- else -}} - {{- include "partials.default-image" . -}} + {{- .root.Values.defaultRegistry -}}/{{- .root.Values.defaultImageName -}}:{{- .root.Values.defaultImageTag -}} {{- end -}} {{- end -}} -{{- define "partials.select-imagePullPolicy" -}} - {{- if .source.imagePullPolicy -}} - {{- .source.imagePullPolicy -}} +# partials.select-key finds a value in a dict, with optional defaulting. +# +# params: .root for the root, .source for the source dict, .key for the key, +# .default (optional) for the default dict +{{- define "partials.select-key" -}} + {{- $primary := index .source .key -}} + {{- if $primary -}} + {{- $primary -}} {{- else if .default -}} - {{- include "partials.select-imagePullPolicy" (dict "source" .default "root" .root) -}} + {{- include "partials.select-key" + (dict "root" .root "source" .default "key" .key) -}} {{- else -}} - {{ .root.Values.defaultImagePullPolicy -}} - {{- end -}} -{{- end -}} - -{{- define "partials.select-delayBuckets" -}} - {{ $buckets := "" }} - {{- if .source.delayBuckets -}} - {{- $buckets = .source.delayBuckets -}} - {{- else if (and .default .default.delayBuckets) -}} - {{- $buckets = .default.delayBuckets -}} - {{- end -}} - {{- if $buckets }} - - name: DELAY_BUCKETS - value: {{ $buckets | quote }} - {{- end -}} -{{- end -}} - -{{- define "partials.select-errorFraction" -}} - {{ $fraction := "" }} - {{ $srcFraction := .source.errorFraction }} - {{- if or ($srcFraction) (eq $srcFraction 0) -}} - {{- $fraction = $srcFraction -}} - {{- else if (and .default .default.errorFraction) -}} - {{- $fraction = .default.errorFraction -}} + {{- $capitalizedKey := camelcase .key -}} + {{- $defaultKey := printf "default%s" $capitalizedKey -}} + {{- index .root.Values $defaultKey -}} {{- end -}} - {{- if $fraction }} - - name: ERROR_FRACTION - value: {{ $fraction | quote }} - {{- end -}} -{{- end -}} - -# Use all the above to provide nicer helpers for each of the workloads... -{{- define "partials.gui-image" -}} - {{- include "partials.select-image" (dict "source" .Values.gui "root" .) -}} -{{- end -}} - -{{- define "partials.gui-imagePullPolicy" -}} - {{- include "partials.select-imagePullPolicy" (dict "source" .Values.gui "root" .) -}} -{{- end -}} - -{{- define "partials.face-image" -}} - {{- include "partials.select-image" (dict "source" .Values.face "root" .) -}} -{{- end -}} - -{{- define "partials.face-imagePullPolicy" -}} - {{- include "partials.select-imagePullPolicy" (dict "source" .Values.face "root" .) -}} -{{- end -}} - -{{- define "partials.face-delayBuckets" -}} - {{- include "partials.select-delayBuckets" (dict "source" .Values.face) -}} -{{- end -}} - -{{- define "partials.face-errorFraction" -}} - {{- include "partials.select-errorFraction" (dict "source" .Values.face) -}} -{{- end -}} - -{{- define "partials.ingress-image" -}} - {{- include "partials.select-image" (dict "source" .Values.ingress "root" .) -}} -{{- end -}} - -{{- define "partials.ingress-imagePullPolicy" -}} - {{- include "partials.select-imagePullPolicy" (dict "source" .Values.ingress "root" .) -}} -{{- end -}} - -{{- define "partials.color-image" -}} - {{- include "partials.select-image" (dict "source" .Values.color "default" .Values.backend "root" .) -}} -{{- end -}} - -{{- define "partials.color-imagePullPolicy" -}} - {{- include "partials.select-imagePullPolicy" (dict "source" .Values.color "default" .Values.backend "root" .) -}} -{{- end -}} - -{{- define "partials.color-delayBuckets" -}} - {{- include "partials.select-delayBuckets" (dict "source" .Values.color "default" .Values.backend) -}} -{{- end -}} - -{{- define "partials.color-errorFraction" -}} - {{- include "partials.select-errorFraction" (dict "source" .Values.color "default" .Values.backend) -}} -{{- end -}} - -{{- define "partials.color2-image" -}} - {{- include "partials.select-image" (dict "source" .Values.color2 "default" .Values.backend "root" .) -}} -{{- end -}} - -{{- define "partials.color2-imagePullPolicy" -}} - {{- include "partials.select-imagePullPolicy" (dict "source" .Values.color2 "default" .Values.backend "root" .) -}} -{{- end -}} - -{{- define "partials.color2-delayBuckets" -}} - {{- include "partials.select-delayBuckets" (dict "source" .Values.color2 "default" .Values.backend) -}} -{{- end -}} - -{{- define "partials.color2-errorFraction" -}} - {{- include "partials.select-errorFraction" (dict "source" .Values.color2 "default" .Values.backend) -}} -{{- end -}} - -{{- define "partials.smiley-image" -}} - {{- include "partials.select-image" (dict "source" .Values.smiley "default" .Values.backend "root" .) -}} -{{- end -}} - -{{- define "partials.smiley-imagePullPolicy" -}} - {{- include "partials.select-imagePullPolicy" (dict "source" .Values.smiley "default" .Values.backend "root" .) -}} -{{- end -}} - -{{- define "partials.smiley-delayBuckets" -}} - {{- include "partials.select-delayBuckets" (dict "source" .Values.smiley "default" .Values.backend) -}} -{{- end -}} - -{{- define "partials.smiley-errorFraction" -}} - {{- include "partials.select-errorFraction" (dict "source" .Values.smiley "default" .Values.backend) -}} -{{- end -}} - -{{- define "partials.smiley2-image" -}} - {{- include "partials.select-image" (dict "source" .Values.smiley2 "default" .Values.backend "root" .) -}} -{{- end -}} - -{{- define "partials.smiley2-imagePullPolicy" -}} - {{- include "partials.select-imagePullPolicy" (dict "source" .Values.smiley2 "default" .Values.backend "root" .) -}} -{{- end -}} - -{{- define "partials.smiley2-delayBuckets" -}} - {{- include "partials.select-delayBuckets" (dict "source" .Values.smiley2 "default" .Values.backend) -}} {{- end -}} -{{- define "partials.smiley2-errorFraction" -}} - {{- include "partials.select-errorFraction" (dict "source" .Values.smiley2 "default" .Values.backend) -}} +# partials.select-env finds a value in a dict, with optional defaulting, and +# if present, formats it as an environment variable. +# +# params: .root for the root, .source for the source dict, .key for the key, +# .name for the env name, .default (optional) for the default dict +{{- define "partials.select-env" -}} + {{- $value := include "partials.select-key" . -}} + {{- if $value }} + - name: {{ .name }} + value: {{ $value | quote }} + {{ end -}} {{- end -}} diff --git a/faces-chart/templates/color.yaml b/faces-chart/templates/color.yaml index 7f5c74e..d3031d7 100644 --- a/faces-chart/templates/color.yaml +++ b/faces-chart/templates/color.yaml @@ -1,58 +1,12 @@ ---- -apiVersion: v1 -kind: Service -metadata: - name: color - namespace: {{ .Release.Namespace }} - labels: - service: color -spec: - type: ClusterIP - selector: - service: color - ports: - - port: 80 - targetPort: http ---- -apiVersion: apps/v1 -kind: Deployment -metadata: - name: color - namespace: {{ .Release.Namespace }} - labels: - service: color -spec: - replicas: 1 - selector: - matchLabels: - service: color - template: - metadata: - labels: - service: color - spec: - containers: - - name: color - image: {{ include "partials.color-image" . }} - imagePullPolicy: {{ include "partials.color-imagePullPolicy" . }} - ports: - - name: http - containerPort: 8000 - env: - - name: FACES_SERVICE - value: "color" - - name: USER_HEADER_NAME - value: {{ .Values.authHeader | quote }} - {{- if .Values.color.color }} - - name: COLOR - value: {{ .Values.color.color }} - {{- end -}} - {{- include "partials.color-errorFraction" . }} - {{- include "partials.color-delayBuckets" . }} - resources: - requests: - cpu: 100m - memory: 64Mi - limits: - cpu: 250m - memory: 128Mi +{{- include "partials.backend" + (dict "name" "color" + "workload" "color" + "root" .) }} +{{- include "partials.backend" + (dict "name" "color2" + "workload" "color" + "root" .) }} +{{- include "partials.backend" + (dict "name" "color3" + "workload" "color" + "root" .) }} diff --git a/faces-chart/templates/color2.yaml b/faces-chart/templates/color2.yaml deleted file mode 100644 index b723cf9..0000000 --- a/faces-chart/templates/color2.yaml +++ /dev/null @@ -1,60 +0,0 @@ -{{- if .Values.color2.enabled -}} ---- -apiVersion: v1 -kind: Service -metadata: - name: color2 - namespace: {{ .Release.Namespace }} - labels: - service: color2 -spec: - type: ClusterIP - selector: - service: color2 - ports: - - port: 80 - targetPort: http ---- -apiVersion: apps/v1 -kind: Deployment -metadata: - name: color2 - namespace: {{ .Release.Namespace }} - labels: - service: color2 -spec: - replicas: 1 - selector: - matchLabels: - service: color2 - template: - metadata: - labels: - service: color2 - spec: - containers: - - name: color2 - image: {{ include "partials.color2-image" . }} - imagePullPolicy: {{ include "partials.color2-imagePullPolicy" . }} - ports: - - name: http - containerPort: 8000 - env: - - name: FACES_SERVICE - value: "color" - - name: USER_HEADER_NAME - value: {{ .Values.authHeader | quote }} - {{- if .Values.color2.color }} - - name: COLOR - value: {{ .Values.color2.color }} - {{- end -}} - {{- include "partials.color2-errorFraction" . }} - {{- include "partials.color2-delayBuckets" . }} - resources: - requests: - cpu: 100m - memory: 64Mi - limits: - cpu: 250m - memory: 128Mi -{{- end -}} diff --git a/faces-chart/templates/smiley.yaml b/faces-chart/templates/smiley.yaml index e72e8a1..cf70d29 100644 --- a/faces-chart/templates/smiley.yaml +++ b/faces-chart/templates/smiley.yaml @@ -1,58 +1,12 @@ ---- -apiVersion: v1 -kind: Service -metadata: - name: smiley - namespace: {{ .Release.Namespace }} - labels: - service: smiley -spec: - type: ClusterIP - selector: - service: smiley - ports: - - port: 80 - targetPort: http ---- -apiVersion: apps/v1 -kind: Deployment -metadata: - name: smiley - namespace: {{ .Release.Namespace }} - labels: - service: smiley -spec: - replicas: 1 - selector: - matchLabels: - service: smiley - template: - metadata: - labels: - service: smiley - spec: - containers: - - name: smiley - image: {{ include "partials.smiley-image" . }} - imagePullPolicy: {{ include "partials.smiley-imagePullPolicy" . }} - ports: - - name: http - containerPort: 8000 - env: - - name: FACES_SERVICE - value: "smiley" - - name: USER_HEADER_NAME - value: {{ .Values.authHeader | quote }} - {{- if .Values.smiley.smiley }} - - name: SMILEY - value: {{ .Values.smiley.smiley }} - {{- end -}} - {{- include "partials.smiley-errorFraction" . }} - {{- include "partials.smiley-delayBuckets" . }} - resources: - requests: - cpu: 100m - memory: 64Mi - limits: - cpu: 250m - memory: 128Mi +{{- include "partials.backend" + (dict "name" "smiley" + "workload" "smiley" + "root" .) }} +{{- include "partials.backend" + (dict "name" "smiley2" + "workload" "smiley" + "root" .) }} +{{- include "partials.backend" + (dict "name" "smiley3" + "workload" "smiley" + "root" .) }} diff --git a/faces-chart/templates/smiley2.yaml b/faces-chart/templates/smiley2.yaml deleted file mode 100644 index fa6d7f1..0000000 --- a/faces-chart/templates/smiley2.yaml +++ /dev/null @@ -1,60 +0,0 @@ -{{- if .Values.smiley2.enabled -}} ---- -apiVersion: v1 -kind: Service -metadata: - name: smiley2 - namespace: {{ .Release.Namespace }} - labels: - service: smiley2 -spec: - type: ClusterIP - selector: - service: smiley2 - ports: - - port: 80 - targetPort: http ---- -apiVersion: apps/v1 -kind: Deployment -metadata: - name: smiley2 - namespace: {{ .Release.Namespace }} - labels: - service: smiley2 -spec: - replicas: 1 - selector: - matchLabels: - service: smiley2 - template: - metadata: - labels: - service: smiley2 - spec: - containers: - - name: smiley2 - image: {{ include "partials.smiley2-image" . }} - imagePullPolicy: {{ include "partials.smiley2-imagePullPolicy" . }} - ports: - - name: http - containerPort: 8000 - env: - - name: FACES_SERVICE - value: "smiley" - - name: USER_HEADER_NAME - value: {{ .Values.authHeader | quote }} - {{- if .Values.smiley2.smiley }} - - name: SMILEY - value: {{ .Values.smiley2.smiley }} - {{- end -}} - {{- include "partials.smiley2-errorFraction" . }} - {{- include "partials.smiley2-delayBuckets" . }} - resources: - requests: - cpu: 100m - memory: 64Mi - limits: - cpu: 250m - memory: 128Mi -{{ end }} diff --git a/faces-chart/values.yaml b/faces-chart/values.yaml index 91f4d62..8ca5b8d 100644 --- a/faces-chart/values.yaml +++ b/faces-chart/values.yaml @@ -44,7 +44,8 @@ backend: delayBuckets: "0,5,10,15,20,50,200,500,1500" smiley: - smiley: "" # Override if desired + enabled: True # If set to True, enables the second smiley workload + smiley: "" # Override if desired # image: "" # If set, overrides the imageName/imageTag pair # imageName: "" # If not set, uses backend.imageName # imageTag: "" # If not set, uses backend.imageTag @@ -53,8 +54,18 @@ smiley: # delayBuckets: "" # If not set, uses backend.delayBuckets smiley2: - enabled: False # If set to True, enables the second smiley workload - smiley: "HeartEyes" # Override if desired + enabled: False # If set to True, enables the second smiley workload + smiley: "HeartEyes" # Override if desired + # image: "" # If set, overrides the imageName/imageTag pair + # imageName: "" # If not set, uses backend.imageName + # imageTag: "" # If not set, uses backend.imageTag + # imagePullPolicy: "" # If not set, uses backend.imagePullPolicy + # errorFraction: "" # If not set, uses backend.errorFraction + # delayBuckets: "" # If not set, uses backend.delayBuckets + +smiley3: + enabled: False # If set to True, enables the second smiley workload + smiley: "RollingEyes" # Override if desired # image: "" # If set, overrides the imageName/imageTag pair # imageName: "" # If not set, uses backend.imageName # imageTag: "" # If not set, uses backend.imageTag @@ -63,7 +74,8 @@ smiley2: # delayBuckets: "" # If not set, uses backend.delayBuckets color: - color: "" # Override if desired, defaults to colorblind-friendly light blue from the Tol palette + enabled: True # If set to True, enables the second smiley workload + color: "" # Override if desired, defaults to colorblind-friendly light blue from the Tol palette # image: "" # If set, overrides the imageName/imageTag pair imageName: ghcr.io/buoyantio/faces-color # imageTag: "" # If not set, uses backend.imageTag @@ -72,8 +84,18 @@ color: # delayBuckets: "" # If not set, uses backend.delayBuckets color2: - enabled: False # If set to True, enables the second color workload - color: "green" # Override if desired, defaults to colorblind-friendly green from the Tol palette + enabled: False # If set to True, enables the second color workload + color: "green" # Override if desired, defaults to colorblind-friendly green from the Tol palette + # image: "" # If set, overrides the imageName/imageTag pair + imageName: ghcr.io/buoyantio/faces-color + # imageTag: "" # If not set, uses backend.imageTag + # imagePullPolicy: "" # If not set, uses backend.imagePullPolicy + # errorFraction: "" # If not set, uses backend.errorFraction + # delayBuckets: "" # If not set, uses backend.delayBuckets + +color3: + enabled: False # If set to True, enables the second color workload + color: "darkblue" # Override if desired, defaults to colorblind-friendly green from the Tol palette # image: "" # If set, overrides the imageName/imageTag pair imageName: ghcr.io/buoyantio/faces-color # imageTag: "" # If not set, uses backend.imageTag