{{/* vim: set filetype=mustache: */}} {{/* Expand the name of the chart. */}} {{- define "cost-analyzer.name" -}} {{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" -}} {{- end -}} {{- define "query-service.name" -}} {{- default "query-service" | trunc 63 | trimSuffix "-" -}} {{- end -}} {{/* Create a default fully qualified app name. We truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec). If release name contains chart name it will be used as a full name. */}} {{- define "cost-analyzer.fullname" -}} {{- if .Values.fullnameOverride -}} {{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" -}} {{- else -}} {{- $name := default .Chart.Name .Values.nameOverride -}} {{- if contains $name .Release.Name -}} {{- .Release.Name | trunc 63 | trimSuffix "-" -}} {{- else -}} {{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" -}} {{- end -}} {{- end -}} {{- end -}} {{- define "query-service.fullname" -}} {{- printf "%s-%s" .Release.Name "query-service" | trunc 63 | trimSuffix "-" -}} {{- end -}} {{/* Create the fully qualified name for Prometheus server service. */}} {{- define "cost-analyzer.prometheus.server.name" -}} {{- if .Values.prometheus -}} {{- if .Values.prometheus.server -}} {{- if .Values.prometheus.server.fullnameOverride -}} {{- .Values.prometheus.server.fullnameOverride | trunc 63 | trimSuffix "-" -}} {{- else -}} {{- printf "%s-prometheus-server" .Release.Name | trunc 63 | trimSuffix "-" -}} {{- end -}} {{- else -}} {{- printf "%s-prometheus-server" .Release.Name | trunc 63 | trimSuffix "-" -}} {{- end -}} {{- else -}} {{- printf "%s-prometheus-server" .Release.Name | trunc 63 | trimSuffix "-" -}} {{- end -}} {{- end -}} {{/* Create the fully qualified name for Prometheus alertmanager service. */}} {{- define "cost-analyzer.prometheus.alertmanager.name" -}} {{- if .Values.prometheus -}} {{- if .Values.prometheus.alertmanager -}} {{- if .Values.prometheus.alertmanager.fullnameOverride -}} {{- .Values.prometheus.alertmanager.fullnameOverride | trunc 63 | trimSuffix "-" -}} {{- else -}} {{- printf "%s-prometheus-alertmanager" .Release.Name | trunc 63 | trimSuffix "-" -}} {{- end -}} {{- else -}} {{- printf "%s-prometheus-alertmanager" .Release.Name | trunc 63 | trimSuffix "-" -}} {{- end -}} {{- else -}} {{- printf "%s-prometheus-alertmanager" .Release.Name | trunc 63 | trimSuffix "-" -}} {{- end -}} {{- end -}} {{- define "cost-analyzer.serviceName" -}} {{- printf "%s-%s" .Release.Name "cost-analyzer" | trunc 63 | trimSuffix "-" -}} {{- end -}} {{/* Network Costs name used to tie autodiscovery of metrics to daemon set pods */}} {{- define "cost-analyzer.networkCostsName" -}} {{- printf "%s-%s" .Release.Name "network-costs" -}} {{- end -}} {{- define "kubecost.clusterControllerName" -}} {{- printf "%s-%s" .Release.Name "cluster-controller" -}} {{- end -}} {{- define "kubecost.kubeMetricsName" -}} {{- if .Values.agent }} {{- printf "%s-%s" .Release.Name "agent" -}} {{- else if .Values.cloudAgent }} {{- printf "%s-%s" .Release.Name "cloud-agent" -}} {{- else }} {{- printf "%s-%s" .Release.Name "metrics" -}} {{- end }} {{- end -}} {{/* Create the chart labels. */}} {{- define "kubecost.chartLabels" -}} app.kubernetes.io/name: {{ include "cost-analyzer.name" . }} helm.sh/chart: {{ include "cost-analyzer.chart" . }} app.kubernetes.io/instance: {{ .Release.Name }} app.kubernetes.io/managed-by: {{ .Release.Service }} {{- end -}} {{- define "kubecost.queryService.chartLabels" -}} app.kubernetes.io/name: {{ include "query-service.name" . }} helm.sh/chart: {{ include "cost-analyzer.chart" . }} app.kubernetes.io/instance: {{ .Release.Name }} app.kubernetes.io/managed-by: {{ .Release.Service }} {{- end -}} {{/* Create chart name and version as used by the chart label. */}} {{- define "cost-analyzer.chart" -}} {{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" -}} {{- end -}} {{/* Create the name of the service account */}} {{- define "cost-analyzer.serviceAccountName" -}} {{- if .Values.serviceAccount.create -}} {{ default (include "cost-analyzer.fullname" .) .Values.serviceAccount.name }} {{- else -}} {{ default "default" .Values.serviceAccount.name }} {{- end -}} {{- end -}} {{- define "query-service.serviceAccountName" -}} {{- if .Values.serviceAccount.create -}} {{ default (include "query-service.fullname" .) .Values.serviceAccount.name }} {{- else -}} {{ default "default" .Values.serviceAccount.name }} {{- end -}} {{- end -}} {{/* Create the common labels. */}} {{- define "cost-analyzer.commonLabels" -}} app.kubernetes.io/name: {{ include "cost-analyzer.name" . }} helm.sh/chart: {{ include "cost-analyzer.chart" . }} app.kubernetes.io/instance: {{ .Release.Name }} app.kubernetes.io/managed-by: {{ .Release.Service }} app: cost-analyzer {{- end -}} {{- define "query-service.commonLabels" -}} {{ include "kubecost.queryService.chartLabels" . }} app: query-service {{- end -}} {{/* Create the selector labels. */}} {{- define "cost-analyzer.selectorLabels" -}} app.kubernetes.io/name: {{ include "cost-analyzer.name" . }} app.kubernetes.io/instance: {{ .Release.Name }} app: cost-analyzer {{- end -}} {{- define "query-service.selectorLabels" -}} app.kubernetes.io/name: {{ include "query-service.name" . }} app.kubernetes.io/instance: {{ .Release.Name }} app: query-service {{- end -}} {{/* Return the appropriate apiVersion for daemonset. */}} {{- define "cost-analyzer.daemonset.apiVersion" -}} {{- if semverCompare "<1.9-0" .Capabilities.KubeVersion.GitVersion -}} {{- print "extensions/v1beta1" -}} {{- else if semverCompare "^1.9-0" .Capabilities.KubeVersion.GitVersion -}} {{- print "apps/v1" -}} {{- end -}} {{- end -}} {{/* Return the appropriate apiVersion for priorityClass. */}} {{- define "cost-analyzer.priorityClass.apiVersion" -}} {{- if semverCompare "<1.14-0" .Capabilities.KubeVersion.GitVersion -}} {{- print "scheduling.k8s.io/v1beta1" -}} {{- else if semverCompare "^1.14-0" .Capabilities.KubeVersion.GitVersion -}} {{- print "scheduling.k8s.io/v1" -}} {{- end -}} {{- end -}} {{/* Return the appropriate apiVersion for networkpolicy. */}} {{- define "cost-analyzer.networkPolicy.apiVersion" -}} {{- if semverCompare ">=1.4-0, <1.7-0" .Capabilities.KubeVersion.GitVersion -}} {{- print "extensions/v1beta1" -}} {{- else if semverCompare "^1.7-0" .Capabilities.KubeVersion.GitVersion -}} {{- print "networking.k8s.io/v1" -}} {{- end -}} {{- end -}} {{/* Return the appropriate apiVersion for podsecuritypolicy. */}} {{- define "cost-analyzer.podSecurityPolicy.apiVersion" -}} {{- if semverCompare ">=1.3-0, <1.10-0" .Capabilities.KubeVersion.GitVersion -}} {{- print "extensions/v1beta1" -}} {{- else if semverCompare "^1.10-0" .Capabilities.KubeVersion.GitVersion -}} {{- print "policy/v1beta1" -}} {{- end -}} {{- end -}} {{/* Recursive filter which accepts a map containing an input map (.v) and an output map (.r). The template will traverse all values inside .v recursively writing non-map values to the output .r. If a nested map is discovered, we look for an 'enabled' key. If it doesn't exist, we continue traversing the map. If it does exist, we omit the inner map traversal iff enabled is false. This filter writes the enabled only version to the output .r */}} {{- define "cost-analyzer.filter" -}} {{- $v := .v }} {{- $r := .r }} {{- range $key, $value := .v }} {{- $tp := kindOf $value -}} {{- if eq $tp "map" -}} {{- $isEnabled := true -}} {{- if (hasKey $value "enabled") -}} {{- $isEnabled = $value.enabled -}} {{- end -}} {{- if $isEnabled -}} {{- $rr := "{}" | fromYaml }} {{- template "cost-analyzer.filter" (dict "v" $value "r" $rr) }} {{- $_ := set $r $key $rr -}} {{- end -}} {{- else -}} {{- $_ := set $r $key $value -}} {{- end -}} {{- end -}} {{- end -}} {{/* This template accepts a map and returns a base64 encoded json version of the map where all disabled leaf nodes are omitted. The implied use case is {{ template "cost-analyzer.filterEnabled" .Values }} */}} {{- define "cost-analyzer.filterEnabled" -}} {{- $result := "{}" | fromYaml }} {{- template "cost-analyzer.filter" (dict "v" . "r" $result) }} {{- $result | toJson | b64enc }} {{- end -}} {{/* This template runs the full check for leader/follower requirements in order to determine whether it should be configured. This template will return true if it's enabled and all requirements are met. */}} {{- define "cost-analyzer.leaderFollowerEnabled" }} {{- if .Values.kubecostDeployment }} {{- if .Values.kubecostDeployment.leaderFollower }} {{- if .Values.kubecostDeployment.leaderFollower.enabled }} {{- $replicas := .Values.kubecostDeployment.replicas | default 1 }} {{- if not .Values.kubecostModel.etlFileStoreEnabled }} {{- "" }} {{- else if (eq (quote .Values.kubecostModel.etlBucketConfigSecret) "") }} {{- "" }} {{- else if not (gt (int $replicas) 1) }} {{- ""}} {{- else }} {{- "true" }} {{- end }} {{- else }} {{- "" }} {{- end }} {{- else }} {{- "" }} {{- end }} {{- else }} {{- "" }} {{- end }} {{- end }}