This repository has been archived on 2023-04-02. You can view files and clone it, but cannot push or open issues or pull requests.
gitops-tbrnt/monitoring/vendor/github.com/brancz/kubernetes-grafana/grafana/grafana.libsonnet

350 lines
12 KiB
Plaintext
Raw Normal View History

2020-02-11 21:21:17 +00:00
{
_config+:: {
namespace: 'default',
versions+:: {
2020-12-11 20:32:59 +00:00
grafana: '7.3.4',
2020-02-11 21:21:17 +00:00
},
imageRepos+:: {
2021-05-01 14:24:35 +00:00
grafana: 'docker.io/grafana/grafana',
2020-02-11 21:21:17 +00:00
},
prometheus+:: {
name: 'k8s',
serviceName: 'prometheus-' + $._config.prometheus.name,
},
grafana+:: {
2021-05-01 14:24:35 +00:00
labels: {
'app.kubernetes.io/name': 'grafana',
'app.kubernetes.io/version': $._config.versions.grafana,
'app.kubernetes.io/component': 'grafana',
},
2020-02-11 21:21:17 +00:00
dashboards: {},
rawDashboards: {},
2020-03-07 19:44:56 +00:00
folderDashboards: {},
2020-02-11 21:21:17 +00:00
datasources: [{
name: 'prometheus',
type: 'prometheus',
access: 'proxy',
orgId: 1,
url: 'http://' + $._config.prometheus.serviceName + '.' + $._config.namespace + '.svc:9090',
version: 1,
editable: false,
}],
2020-12-11 20:32:59 +00:00
// Forces pod restarts when dashboards are changed
dashboardsChecksum: false,
2020-02-11 21:21:17 +00:00
config: {},
ldap: null,
plugins: [],
2020-02-25 21:34:26 +00:00
env: [],
port: 3000,
2020-12-11 20:32:59 +00:00
resources: {
2020-02-11 21:21:17 +00:00
requests: { cpu: '100m', memory: '100Mi' },
limits: { cpu: '200m', memory: '200Mi' },
},
2020-02-25 21:34:26 +00:00
containers: [],
2020-02-11 21:21:17 +00:00
},
},
grafanaDashboards: {},
grafana+: {
[if std.length($._config.grafana.config) > 0 then 'config']:
2020-12-11 20:32:59 +00:00
{
apiVersion: 'v1',
kind: 'Secret',
metadata: {
name: 'grafana-config',
namespace: $._config.namespace,
2021-05-01 14:24:35 +00:00
labels: $._config.grafana.labels,
2020-12-11 20:32:59 +00:00
},
type: 'Opaque',
data: {
'grafana.ini': std.base64(std.encodeUTF8(std.manifestIni($._config.grafana.config))),
} +
if $._config.grafana.ldap != null then { 'ldap.toml': std.base64(std.encodeUTF8($._config.grafana.ldap)) } else {},
},
2020-02-11 21:21:17 +00:00
dashboardDefinitions:
[
2020-12-11 20:32:59 +00:00
{
local dashboardName = 'grafana-dashboard-' + std.strReplace(name, '.json', ''),
apiVersion: 'v1',
kind: 'ConfigMap',
metadata: {
name: dashboardName,
namespace: $._config.namespace,
2021-05-01 14:24:35 +00:00
labels: $._config.grafana.labels,
2020-12-11 20:32:59 +00:00
},
data: { [name]: std.manifestJsonEx($._config.grafana.dashboards[name], ' ') },
}
2020-02-11 21:21:17 +00:00
for name in std.objectFields($._config.grafana.dashboards)
2020-03-07 19:44:56 +00:00
] + [
2020-12-11 20:32:59 +00:00
{
local dashboardName = 'grafana-dashboard-' + std.strReplace(name, '.json', ''),
apiVersion: 'v1',
kind: 'ConfigMap',
metadata: {
name: dashboardName,
namespace: $._config.namespace,
2021-05-01 14:24:35 +00:00
labels: $._config.grafana.labels,
2020-12-11 20:32:59 +00:00
},
data: { [name]: std.manifestJsonEx($._config.grafana.folderDashboards[folder][name], ' ') },
}
2020-03-07 19:44:56 +00:00
for folder in std.objectFields($._config.grafana.folderDashboards)
for name in std.objectFields($._config.grafana.folderDashboards[folder])
2020-12-11 20:32:59 +00:00
] + (
if std.length($._config.grafana.rawDashboards) > 0 then
[
2020-02-11 21:21:17 +00:00
2020-12-11 20:32:59 +00:00
{
local dashboardName = 'grafana-dashboard-' + std.strReplace(name, '.json', ''),
apiVersion: 'v1',
kind: 'ConfigMap',
metadata: {
name: dashboardName,
namespace: $._config.namespace,
2021-05-01 14:24:35 +00:00
labels: $._config.grafana.labels,
2020-12-11 20:32:59 +00:00
},
data: { [name]: $._config.grafana.rawDashboards[name] },
}
for name in std.objectFields($._config.grafana.rawDashboards)
]
else
[]
),
2020-02-11 21:21:17 +00:00
dashboardSources:
2020-03-07 19:44:56 +00:00
local dashboardSources = {
apiVersion: 1,
2020-07-28 19:39:59 +00:00
providers:
(
if std.length($._config.grafana.dashboards) +
std.length($._config.grafana.rawDashboards) > 0 then [
{
name: '0',
orgId: 1,
folder: 'Default',
type: 'file',
options: {
path: '/grafana-dashboard-definitions/0',
},
},
] else []
) +
[
{
name: folder,
orgId: 1,
folder: folder,
type: 'file',
options: {
path: '/grafana-dashboard-definitions/' + folder,
},
}
for folder in std.objectFields($._config.grafana.folderDashboards)
],
2020-03-07 19:44:56 +00:00
};
2020-02-11 21:21:17 +00:00
2020-12-11 20:32:59 +00:00
{
kind: 'ConfigMap',
apiVersion: 'v1',
metadata: {
name: 'grafana-dashboards',
namespace: $._config.namespace,
2021-05-01 14:24:35 +00:00
labels: $._config.grafana.labels,
2020-12-11 20:32:59 +00:00
},
data: { 'dashboards.yaml': std.manifestJsonEx(dashboardSources, ' ') },
},
2020-02-11 21:21:17 +00:00
dashboardDatasources:
2020-12-11 20:32:59 +00:00
{
apiVersion: 'v1',
kind: 'Secret',
metadata: {
name: 'grafana-datasources',
namespace: $._config.namespace,
2021-05-01 14:24:35 +00:00
labels: $._config.grafana.labels,
2020-12-11 20:32:59 +00:00
},
type: 'Opaque',
data: { 'datasources.yaml': std.base64(std.encodeUTF8(std.manifestJsonEx({
apiVersion: 1,
datasources: $._config.grafana.datasources,
}, ' '))) },
},
2020-02-11 21:21:17 +00:00
service:
2020-12-11 20:32:59 +00:00
{
apiVersion: 'v1',
kind: 'Service',
metadata: {
name: 'grafana',
namespace: $._config.namespace,
2021-05-01 14:24:35 +00:00
labels: $._config.grafana.labels,
2020-12-11 20:32:59 +00:00
},
spec: {
selector: $.grafana.deployment.spec.selector.matchLabels,
ports: [
{ name: 'http', targetPort: 'http', port: 3000 },
],
},
},
2020-02-11 21:21:17 +00:00
serviceAccount:
2020-12-11 20:32:59 +00:00
{
apiVersion: 'v1',
kind: 'ServiceAccount',
metadata: {
name: 'grafana',
namespace: $._config.namespace,
},
},
2020-02-11 21:21:17 +00:00
deployment:
2020-02-25 21:34:26 +00:00
local targetPort = $._config.grafana.port;
2020-02-11 21:21:17 +00:00
local portName = 'http';
2021-05-01 14:24:35 +00:00
local podLabels = $._config.grafana.labels;
local podSelectorLabels = {
[labelName]: podLabels[labelName]
for labelName in std.objectFields(podLabels)
if !std.setMember(labelName, ['app.kubernetes.io/version'])
};
2020-02-11 21:21:17 +00:00
local configVolumeName = 'grafana-config';
local configSecretName = 'grafana-config';
2020-12-11 20:32:59 +00:00
local configVolume = { name: configVolumeName, secret: { secretName: configSecretName } };
local configVolumeMount = { name: configVolumeName, mountPath: '/etc/grafana', readOnly: false };
2020-02-11 21:21:17 +00:00
local storageVolumeName = 'grafana-storage';
2020-12-11 20:32:59 +00:00
local storageVolume = { name: storageVolumeName, emptyDir: {} };
local storageVolumeMount = { name: storageVolumeName, mountPath: '/var/lib/grafana', readOnly: false };
2020-02-11 21:21:17 +00:00
local datasourcesVolumeName = 'grafana-datasources';
local datasourcesSecretName = 'grafana-datasources';
2020-12-11 20:32:59 +00:00
local datasourcesVolume = { name: datasourcesVolumeName, secret: { secretName: datasourcesSecretName } };
local datasourcesVolumeMount = { name: datasourcesVolumeName, mountPath: '/etc/grafana/provisioning/datasources', readOnly: false };
2020-02-11 21:21:17 +00:00
local dashboardsVolumeName = 'grafana-dashboards';
local dashboardsConfigMapName = 'grafana-dashboards';
2020-12-11 20:32:59 +00:00
local dashboardsVolume = { name: dashboardsVolumeName, configMap: { name: dashboardsConfigMapName } };
local dashboardsVolumeMount = { name: dashboardsVolumeName, mountPath: '/etc/grafana/provisioning/dashboards', readOnly: false };
2020-02-11 21:21:17 +00:00
local volumeMounts =
[
storageVolumeMount,
datasourcesVolumeMount,
dashboardsVolumeMount,
] +
[
2020-12-11 20:32:59 +00:00
{
local dashboardName = std.strReplace(name, '.json', ''),
name: 'grafana-dashboard-' + dashboardName,
mountPath: '/grafana-dashboard-definitions/0/' + dashboardName,
readOnly: false,
}
2020-02-11 21:21:17 +00:00
for name in std.objectFields($._config.grafana.dashboards)
] +
2020-03-07 19:44:56 +00:00
[
2020-12-11 20:32:59 +00:00
{
local dashboardName = std.strReplace(name, '.json', ''),
name: 'grafana-dashboard-' + dashboardName,
mountPath: '/grafana-dashboard-definitions/' + folder + '/' + dashboardName,
readOnly: false,
}
2020-03-07 19:44:56 +00:00
for folder in std.objectFields($._config.grafana.folderDashboards)
for name in std.objectFields($._config.grafana.folderDashboards[folder])
] +
2020-02-11 21:21:17 +00:00
[
2020-12-11 20:32:59 +00:00
{
2020-02-11 21:21:17 +00:00
2020-12-11 20:32:59 +00:00
local dashboardName = std.strReplace(name, '.json', ''),
name: 'grafana-dashboard-' + dashboardName,
mountPath: '/grafana-dashboard-definitions/0/' + dashboardName,
readOnly: false,
}
for name in std.objectFields($._config.grafana.rawDashboards)
] + (
if std.length($._config.grafana.config) > 0 then [configVolumeMount] else []
);
2020-02-11 21:21:17 +00:00
local volumes =
[
storageVolume,
datasourcesVolume,
dashboardsVolume,
] +
[
2020-12-11 20:32:59 +00:00
{
local dashboardName = 'grafana-dashboard-' + std.strReplace(name, '.json', ''),
name: dashboardName,
configMap: { name: dashboardName },
}
2020-02-11 21:21:17 +00:00
for name in std.objectFields($._config.grafana.dashboards)
] +
2020-03-07 19:44:56 +00:00
[
2020-12-11 20:32:59 +00:00
{
local dashboardName = 'grafana-dashboard-' + std.strReplace(name, '.json', ''),
name: dashboardName,
configMap: { name: dashboardName },
}
2020-03-07 19:44:56 +00:00
for folder in std.objectFields($._config.grafana.folderDashboards)
for name in std.objectFields($._config.grafana.folderDashboards[folder])
] +
2020-02-11 21:21:17 +00:00
[
2020-12-11 20:32:59 +00:00
{
local dashboardName = 'grafana-dashboard-' + std.strReplace(name, '.json', ''),
name: dashboardName,
configMap: { name: dashboardName },
}
2020-02-11 21:21:17 +00:00
for name in std.objectFields($._config.grafana.rawDashboards)
] +
if std.length($._config.grafana.config) > 0 then [configVolume] else [];
2020-12-11 20:32:59 +00:00
local plugins = (
if std.length($._config.grafana.plugins) == 0 then
[]
else
[{ name: 'GF_INSTALL_PLUGINS', value: std.join(',', $._config.grafana.plugins) }]
);
local c = [{
name: 'grafana',
image: $._config.imageRepos.grafana + ':' + $._config.versions.grafana,
env: $._config.grafana.env + plugins,
volumeMounts: volumeMounts,
ports: [{ name: portName, containerPort: targetPort }],
readinessProbe: {
httpGet: { path: '/api/health', port: portName },
},
resources: $._config.grafana.resources,
}] + $._config.grafana.containers;
{
apiVersion: 'apps/v1',
kind: 'Deployment',
metadata: {
name: 'grafana',
namespace: $._config.namespace,
labels: podLabels,
},
spec: {
replicas: 1,
selector: {
2021-05-01 14:24:35 +00:00
matchLabels: podSelectorLabels,
2020-12-11 20:32:59 +00:00
},
template: {
metadata: {
labels: podLabels,
annotations: {
[if std.length($._config.grafana.config) > 0 then 'checksum/grafana-config']: std.md5(std.toString($.grafana.config)),
'checksum/grafana-datasources': std.md5(std.toString($.grafana.dashboardDatasources)),
[if $._config.grafana.dashboardsChecksum then 'checksum/grafana-dashboards']: std.md5(std.toString($.grafana.dashboardDefinitions)),
},
},
spec: {
containers: c,
volumes: volumes,
serviceAccountName: $.grafana.serviceAccount.metadata.name,
nodeSelector: { 'beta.kubernetes.io/os': 'linux' },
securityContext: { fsGroup: 65534, runAsNonRoot: true, runAsUser: 65534 },
},
},
},
},
2020-02-11 21:21:17 +00:00
},
}