Skip to content

Commit 7ce2b7f

Browse files
redbaronMaxim Ivanov
authored andcommitted
Customizable basename for created resources
With this change it is possible to install multiple Grafanas into same namespace without clashing
1 parent 138c136 commit 7ce2b7f

File tree

1 file changed

+17
-20
lines changed

1 file changed

+17
-20
lines changed

grafana/grafana.libsonnet

Lines changed: 17 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ local configMapList = k.core.v1.configMapList;
1414
},
1515

1616
grafana+:: {
17+
name: 'grafana',
1718
dashboards: {},
1819
datasources: [{
1920
name: 'prometheus',
@@ -39,28 +40,27 @@ local configMapList = k.core.v1.configMapList;
3940
local secret = k.core.v1.secret;
4041
local grafanaConfig = { 'grafana.ini': std.base64(std.manifestIni($._config.grafana.config)) } +
4142
if $._config.grafana.ldap != null then { 'ldap.toml': std.base64($._config.grafana.ldap) } else {};
42-
secret.new('grafana-config', grafanaConfig) +
43+
secret.new($._config.grafana.name + '-config', grafanaConfig) +
4344
secret.mixin.metadata.withNamespace($._config.namespace),
4445
dashboardDefinitions:
4546
local configMap = k.core.v1.configMap;
4647
configMapList.new(
4748
[
48-
local dashboardName = 'grafana-dashboard-' + std.strReplace(name, '.json', '');
49+
local dashboardName = $._config.grafana.name + '-dashboard-' + std.strReplace(name, '.json', '');
4950
configMap.new(dashboardName, { [name]: std.manifestJsonEx($._config.grafana.dashboards[name], ' ') }) +
5051
configMap.mixin.metadata.withNamespace($._config.namespace)
51-
5252
for name in std.objectFields($._config.grafana.dashboards)
5353
]
5454
),
5555
dashboardSources:
5656
local configMap = k.core.v1.configMap;
5757
local dashboardSources = import 'configs/dashboard-sources/dashboards.libsonnet';
5858

59-
configMap.new('grafana-dashboards', { 'dashboards.yaml': std.manifestJsonEx(dashboardSources, ' ') }) +
59+
configMap.new($._config.grafana.name + '-dashboards', { 'dashboards.yaml': std.manifestJsonEx(dashboardSources, ' ') }) +
6060
configMap.mixin.metadata.withNamespace($._config.namespace),
6161
dashboardDatasources:
6262
local secret = k.core.v1.secret;
63-
secret.new('grafana-datasources', { 'datasources.yaml': std.base64(std.manifestJsonEx({
63+
secret.new($._config.grafana.name + '-datasources', { 'datasources.yaml': std.base64(std.manifestJsonEx({
6464
apiVersion: 1,
6565
datasources: $._config.grafana.datasources,
6666
}, ' ')) }) +
@@ -71,12 +71,12 @@ local configMapList = k.core.v1.configMapList;
7171

7272
local grafanaServiceNodePort = servicePort.newNamed('http', 3000, 'http');
7373

74-
service.new('grafana', $.grafana.deployment.spec.selector.matchLabels, grafanaServiceNodePort) +
74+
service.new($._config.grafana.name, $.grafana.deployment.spec.selector.matchLabels, grafanaServiceNodePort) +
7575
service.mixin.metadata.withLabels({ app: 'grafana' }) +
7676
service.mixin.metadata.withNamespace($._config.namespace),
7777
serviceAccount:
7878
local serviceAccount = k.core.v1.serviceAccount;
79-
serviceAccount.new('grafana') +
79+
serviceAccount.new($._config.grafana.name) +
8080
serviceAccount.mixin.metadata.withNamespace($._config.namespace),
8181
deployment:
8282
local deployment = k.apps.v1beta2.deployment;
@@ -92,22 +92,19 @@ local configMapList = k.core.v1.configMapList;
9292
local podLabels = { app: 'grafana' };
9393

9494
local configVolumeName = 'grafana-config';
95-
local configSecretName = 'grafana-config';
96-
local configVolume = volume.withName(configVolumeName) + volume.mixin.secret.withSecretName(configSecretName);
95+
local configVolume = volume.withName(configVolumeName) + volume.mixin.secret.withSecretName(self.config.metadata.name);
9796
local configVolumeMount = containerVolumeMount.new(configVolumeName, '/etc/grafana');
9897

9998
local storageVolumeName = 'grafana-storage';
10099
local storageVolume = volume.fromEmptyDir(storageVolumeName);
101100
local storageVolumeMount = containerVolumeMount.new(storageVolumeName, '/var/lib/grafana');
102101

103102
local datasourcesVolumeName = 'grafana-datasources';
104-
local datasourcesSecretName = 'grafana-datasources';
105-
local datasourcesVolume = volume.withName(datasourcesVolumeName) + volume.mixin.secret.withSecretName(datasourcesSecretName);
103+
local datasourcesVolume = volume.withName(datasourcesVolumeName) + volume.mixin.secret.withSecretName(self.dashboardDatasources.metadata.name);
106104
local datasourcesVolumeMount = containerVolumeMount.new(datasourcesVolumeName, '/etc/grafana/provisioning/datasources');
107105

108106
local dashboardsVolumeName = 'grafana-dashboards';
109-
local dashboardsConfigMapName = 'grafana-dashboards';
110-
local dashboardsVolume = volume.withName(dashboardsVolumeName) + volume.mixin.configMap.withName(dashboardsConfigMapName);
107+
local dashboardsVolume = volume.withName(dashboardsVolumeName) + volume.mixin.configMap.withName(self.dashboardSources.metadata.name);
111108
local dashboardsVolumeMount = containerVolumeMount.new(dashboardsVolumeName, '/etc/grafana/provisioning/dashboards');
112109

113110
local volumeMounts =
@@ -117,9 +114,9 @@ local configMapList = k.core.v1.configMapList;
117114
] +
118115
(if std.length(self.dashboardDefinitions.items) > 0 then [dashboardsVolumeMount] else []) +
119116
[
120-
local dashboardName = std.strReplace(name, '.json', '');
121-
containerVolumeMount.new('grafana-dashboard-' + dashboardName, '/grafana-dashboard-definitions/0/' + dashboardName)
122-
for name in std.objectFields($._config.grafana.dashboards)
117+
local dashboardName = cfgMap.metadata.name;
118+
containerVolumeMount.new(dashboardName, '/grafana-dashboard-definitions/0/' + dashboardName)
119+
for cfgMap in self.dashboardDefinitions.items
123120
] +
124121
if std.length($._config.grafana.config) > 0 then [configVolumeMount] else [];
125122

@@ -130,10 +127,10 @@ local configMapList = k.core.v1.configMapList;
130127
] +
131128
(if std.length(self.dashboardDefinitions.items) > 0 then [dashboardsVolume] else []) +
132129
[
133-
local dashboardName = 'grafana-dashboard-' + std.strReplace(name, '.json', '');
130+
local dashboardName = cfgMap.metadata.name;
134131
volume.withName(dashboardName) +
135132
volume.mixin.configMap.withName(dashboardName)
136-
for name in std.objectFields($._config.grafana.dashboards)
133+
for cfgMap in self.dashboardDefinitions.items
137134
] +
138135
if std.length($._config.grafana.config) > 0 then [configVolume] else [];
139136

@@ -147,14 +144,14 @@ local configMapList = k.core.v1.configMapList;
147144
container.mixin.resources.withRequests($._config.grafana.container.requests) +
148145
container.mixin.resources.withLimits($._config.grafana.container.limits);
149146

150-
deployment.new('grafana', 1, c, podLabels) +
147+
deployment.new($._config.grafana.name, 1, c, podLabels) +
151148
deployment.mixin.metadata.withNamespace($._config.namespace) +
152149
deployment.mixin.metadata.withLabels(podLabels) +
153150
deployment.mixin.spec.selector.withMatchLabels(podLabels) +
154151
deployment.mixin.spec.template.spec.withNodeSelector({ 'beta.kubernetes.io/os': 'linux' }) +
155152
deployment.mixin.spec.template.spec.withVolumes(volumes) +
156153
deployment.mixin.spec.template.spec.securityContext.withRunAsNonRoot(true) +
157154
deployment.mixin.spec.template.spec.securityContext.withRunAsUser(65534) +
158-
deployment.mixin.spec.template.spec.withServiceAccountName('grafana'),
155+
deployment.mixin.spec.template.spec.withServiceAccountName(self.serviceAccount.metadata.name),
159156
},
160157
}

0 commit comments

Comments
 (0)