diff --git a/catalog.json b/catalog.json
index d18a9b1247..f2eec552a9 100644
--- a/catalog.json
+++ b/catalog.json
@@ -182,7 +182,7 @@
"latest_version": "1.0.95",
"latest_app_version": "2023.6.1",
"latest_human_version": "2023.6.1_1.0.95",
- "last_update": "2023-06-08 12:26:56",
+ "last_update": "2023-06-12 11:52:57",
"name": "home-assistant",
"recommended": false,
"title": "Home Assistant",
@@ -531,7 +531,7 @@
"latest_version": "1.0.10",
"latest_app_version": "8.8.1",
"latest_human_version": "8.8.1_1.0.10",
- "last_update": "2023-06-10 20:58:16",
+ "last_update": "2023-06-12 11:52:57",
"name": "elastic-search",
"recommended": false,
"title": "Elastic Search",
@@ -611,7 +611,7 @@
"latest_version": "1.0.8",
"latest_app_version": "0.107.31",
"latest_human_version": "0.107.31_1.0.8",
- "last_update": "2023-06-08 12:26:56",
+ "last_update": "2023-06-12 11:52:57",
"name": "adguard-home",
"recommended": false,
"title": "AdGuard Home",
@@ -1126,6 +1126,47 @@
"icon_url": null,
"icon": "https://raw.githubusercontent.com/dani-garcia/vaultwarden/main/src/static/images/vaultwarden-icon.png"
},
+ "grafana": {
+ "app_readme": "
Grafana
\nGrafana is the open source analytics & monitoring solution for every database.
\n\nWhen application is installed, a container will be launched with root privileges.\nThis is required in order to apply the correct permissions to the Grafana directories.\nAfterward, the Grafana container will run as a non-root user (Default: 568).\nAll mounted storage(s) will be chowned only if the parent directory does not match the configured user.
\n
\nAdditional configuration can be made by adding additional environment variables\nHere is the available configuration documentation
\nUse the following syntax:\nGF_<SECTION-NAME>_<KEY-NAME>
\nExample:\nGF_SMTP_ENABLED
",
+ "categories": [
+ "productivity"
+ ],
+ "description": "Grafana is the open source analytics & monitoring solution for every database.",
+ "healthy": true,
+ "healthy_error": null,
+ "home": "https://grafana.com",
+ "location": "/__w/charts/charts/community/grafana",
+ "latest_version": "1.0.0",
+ "latest_app_version": "9.5.3",
+ "latest_human_version": "9.5.3_1.0.0",
+ "last_update": null,
+ "name": "grafana",
+ "recommended": false,
+ "title": "Grafana",
+ "maintainers": [
+ {
+ "name": "truenas",
+ "url": "https://www.truenas.com/",
+ "email": "dev@ixsystems.com"
+ }
+ ],
+ "tags": [
+ "analytics",
+ "monitoring",
+ "metrics",
+ "dashboards"
+ ],
+ "screenshots": [
+ "https://grafana.com/static/img/grafana/showcase_visualize.jpg",
+ "https://grafana.com/static/img/screenshots/Modal_dashboards.png"
+ ],
+ "sources": [
+ "https://hub.docker.com/r/grafana/grafana",
+ "https://github.com/truenas/charts/tree/master/community/grafana",
+ "https://github.com/grafana"
+ ],
+ "icon_url": "https://www.gravatar.com/avatar/31cea69afa424609b2d83621b4d47f1d?s=120&r=g&d=404"
+ },
"chia": {
"app_readme": "Chia
\nThis container runs as root user.
\nWhen a port is set to < 9000. Host Networking is enabled automatically.
\n\nAlso NodePort services turn to ClusterIP services, to avoid attempts to bind ports twice.
\n
\nKey file is stored in /plots/keyfile and is generated automatically, only if the file does not exist.\nIf you want to use your own keyfile, you can create a file called keyfile in the /plots directory and it will be used instead.
\n\nWhen set on harvester mode keys variable is set to none and no generation is performed.
\n
",
"categories": [
diff --git a/community/grafana/1.0.0/Chart.lock b/community/grafana/1.0.0/Chart.lock
new file mode 100644
index 0000000000..18b7609c37
--- /dev/null
+++ b/community/grafana/1.0.0/Chart.lock
@@ -0,0 +1,6 @@
+dependencies:
+- name: common
+ repository: file://../../../common
+ version: 1.0.8
+digest: sha256:254efaa1285f634b7a80b7baadeadbd20a680f7fee49d1d9d3c4618aa0d657ad
+generated: "2023-06-08T20:43:17.286126829+03:00"
diff --git a/community/grafana/1.0.0/Chart.yaml b/community/grafana/1.0.0/Chart.yaml
new file mode 100644
index 0000000000..57d6caf56f
--- /dev/null
+++ b/community/grafana/1.0.0/Chart.yaml
@@ -0,0 +1,28 @@
+name: grafana
+description: Grafana is the open source analytics & monitoring solution for every database.
+annotations:
+ title: Grafana
+type: application
+version: 1.0.0
+apiVersion: v2
+appVersion: '9.5.3'
+kubeVersion: '>=1.16.0-0'
+maintainers:
+ - name: truenas
+ url: https://www.truenas.com/
+ email: dev@ixsystems.com
+dependencies:
+ - name: common
+ repository: file://../../../common
+ version: 1.0.8
+home: https://grafana.com
+icon: https://www.gravatar.com/avatar/31cea69afa424609b2d83621b4d47f1d?s=120&r=g&d=404
+sources:
+ - https://hub.docker.com/r/grafana/grafana
+ - https://github.com/truenas/charts/tree/master/community/grafana
+ - https://github.com/grafana
+keywords:
+ - dashboard
+ - monitoring
+ - analytics
+ - metrics
diff --git a/community/grafana/1.0.0/README.md b/community/grafana/1.0.0/README.md
new file mode 100644
index 0000000000..78663222bd
--- /dev/null
+++ b/community/grafana/1.0.0/README.md
@@ -0,0 +1,17 @@
+# Grafana
+
+[Grafana](https://grafana.com/) is the open source analytics & monitoring solution for every database.
+
+> When application is installed, a container will be launched with **root** privileges.
+> This is required in order to apply the correct permissions to the `Grafana` directories.
+> Afterward, the `Grafana` container will run as a **non**-root user (Default: `568`).
+> All mounted storage(s) will be `chown`ed only if the parent directory does not match the configured user.
+
+Additional configuration can be made by adding additional environment variables
+Here is the available [configuration documentation](https://grafana.com/docs/grafana/latest/setup-grafana/configure-grafana/)
+
+Use the following syntax:
+`GF__`
+
+Example:
+`GF_SMTP_ENABLED`
diff --git a/community/grafana/1.0.0/app-readme.md b/community/grafana/1.0.0/app-readme.md
new file mode 100644
index 0000000000..78663222bd
--- /dev/null
+++ b/community/grafana/1.0.0/app-readme.md
@@ -0,0 +1,17 @@
+# Grafana
+
+[Grafana](https://grafana.com/) is the open source analytics & monitoring solution for every database.
+
+> When application is installed, a container will be launched with **root** privileges.
+> This is required in order to apply the correct permissions to the `Grafana` directories.
+> Afterward, the `Grafana` container will run as a **non**-root user (Default: `568`).
+> All mounted storage(s) will be `chown`ed only if the parent directory does not match the configured user.
+
+Additional configuration can be made by adding additional environment variables
+Here is the available [configuration documentation](https://grafana.com/docs/grafana/latest/setup-grafana/configure-grafana/)
+
+Use the following syntax:
+`GF__`
+
+Example:
+`GF_SMTP_ENABLED`
diff --git a/community/grafana/1.0.0/charts/common-1.0.8.tgz b/community/grafana/1.0.0/charts/common-1.0.8.tgz
new file mode 100644
index 0000000000..560796ace6
Binary files /dev/null and b/community/grafana/1.0.0/charts/common-1.0.8.tgz differ
diff --git a/community/grafana/1.0.0/ci/basic-plugin-values.yaml b/community/grafana/1.0.0/ci/basic-plugin-values.yaml
new file mode 100644
index 0000000000..41b2f9c940
--- /dev/null
+++ b/community/grafana/1.0.0/ci/basic-plugin-values.yaml
@@ -0,0 +1,16 @@
+grafanaStorage:
+ data:
+ type: hostPath
+ hostPath: /mnt/{{ .Release.Name }}/data
+ additionalStorages:
+ - type: hostPath
+ hostPath: /mnt/{{ .Release.Namespace }}/logs
+ mountPath: /logs
+
+grafanaConfig:
+ plugins:
+ - grafana-piechart-panel
+ - grafana-clock-panel 1.0.0
+ additionalEnvs:
+ - name: GF_PATHS_LOGS
+ value: /logs
diff --git a/community/grafana/1.0.0/ci/basic-values.yaml b/community/grafana/1.0.0/ci/basic-values.yaml
new file mode 100644
index 0000000000..858792030c
--- /dev/null
+++ b/community/grafana/1.0.0/ci/basic-values.yaml
@@ -0,0 +1,8 @@
+grafanaStorage:
+ data:
+ type: hostPath
+ hostPath: /mnt/{{ .Release.Name }}/data
+
+grafanaRunAs:
+ user: 1000
+ group: 1000
diff --git a/community/grafana/1.0.0/ci/https-plugins-values.yaml b/community/grafana/1.0.0/ci/https-plugins-values.yaml
new file mode 100644
index 0000000000..5dcb472790
--- /dev/null
+++ b/community/grafana/1.0.0/ci/https-plugins-values.yaml
@@ -0,0 +1,106 @@
+grafanaStorage:
+ data:
+ type: hostPath
+ hostPath: /mnt/{{ .Release.Name }}/data
+ additionalStorages:
+ - type: hostPath
+ hostPath: /mnt/{{ .Release.Namespace }}/logs
+ mountPath: /logs
+
+grafanaNetwork:
+ certificateID: 1
+ rootURL: https://grafana.example.com:30000
+
+grafanaConfig:
+ plugins:
+ - grafana-piechart-panel
+ - grafana-clock-panel 1.0.0
+ additionalEnvs:
+ - name: GF_PATHS_LOGS
+ value: /logs
+
+ixCertificates:
+ "1":
+ certificate: |
+ -----BEGIN CERTIFICATE-----
+ MIIEdjCCA16gAwIBAgIDYFMYMA0GCSqGSIb3DQEBCwUAMGwxDDAKBgNVBAMMA2Fz
+ ZDELMAkGA1UEBhMCVVMxDTALBgNVBAgMBGFzZGYxCzAJBgNVBAcMAmFmMQ0wCwYD
+ VQQKDARhc2RmMQwwCgYDVQQLDANhc2QxFjAUBgkqhkiG9w0BCQEWB2FAYS5jb20w
+ HhcNMjEwODMwMjMyMzU0WhcNMjMxMjAzMjMyMzU0WjBuMQswCQYDVQQDDAJhZDEL
+ MAkGA1UEBhMCVVMxDTALBgNVBAgMBGFzZGYxDTALBgNVBAcMBGFzZGYxDTALBgNV
+ BAoMBGFkc2YxDTALBgNVBAsMBGFzZGYxFjAUBgkqhkiG9w0BCQEWB2FAYS5jb20w
+ ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC7+1xOHRQyOnQTHFcrdasX
+ Zl0gzutVlA890a1wiQpdD5dOtCLo7+eqVYjqVKo9W8RUIArXWmBu/AbkH7oVFWC1
+ P973W1+ArF5sA70f7BZgqRKJTIisuIFIlRETgfnP2pfQmHRZtGaIJRZI4vQCdYgW
+ 2g0KOvvNcZJCVq1OrhKiNiY1bWCp66DGg0ic6OEkZFHTm745zUNQaf2dNgsxKU0H
+ PGjVLJI//yrRFAOSBUqgD4c50krnMF7fU/Fqh+UyOu8t6Y/HsySh3urB+Zie331t
+ AzV6QV39KKxRflNx/yuWrtIEslGTm+xHKoCYJEk/nZ3mX8Y5hG6wWAb7A/FuDVg3
+ AgMBAAGjggEdMIIBGTAnBgNVHREEIDAehwTAqAADhwTAqAAFhwTAqAC2hwTAqACB
+ hwTAqACSMB0GA1UdDgQWBBQ4G2ff4tgZl4vmo4xCfqmJhdqShzAMBgNVHRMBAf8E
+ AjAAMIGYBgNVHSMEgZAwgY2AFLlYf9L99nxJDcpCM/LT3V5hQ/a3oXCkbjBsMQww
+ CgYDVQQDDANhc2QxCzAJBgNVBAYTAlVTMQ0wCwYDVQQIDARhc2RmMQswCQYDVQQH
+ DAJhZjENMAsGA1UECgwEYXNkZjEMMAoGA1UECwwDYXNkMRYwFAYJKoZIhvcNAQkB
+ FgdhQGEuY29tggNgUxcwFgYDVR0lAQH/BAwwCgYIKwYBBQUHAwEwDgYDVR0PAQH/
+ BAQDAgWgMA0GCSqGSIb3DQEBCwUAA4IBAQA6FpOInEHB5iVk3FP67GybJ29vHZTD
+ KQHbQgmg8s4L7qIsA1HQ+DMCbdylpA11x+t/eL/n48BvGw2FNXpN6uykhLHJjbKR
+ h8yITa2KeD3LjLYhScwIigXmTVYSP3km6s8jRL6UKT9zttnIHyXVpBDya6Q4WTMx
+ fmfC6O7t1PjQ5ZyVtzizIUP8ah9n4TKdXU4A3QIM6WsJXpHb+vqp1WDWJ7mKFtgj
+ x5TKv3wcPnktx0zMPfLb5BTSE9rc9djcBG0eIAsPT4FgiatCUChe7VhuMnqskxEz
+ MymJLoq8+mzucRwFkOkR2EIt1x+Irl2mJVMeBow63rVZfUQBD8h++LqB
+ -----END CERTIFICATE-----
+ -----BEGIN CERTIFICATE-----
+ MIIEhDCCA2ygAwIBAgIDYFMXMA0GCSqGSIb3DQEBCwUAMGwxDDAKBgNVBAMMA2Fz
+ ZDELMAkGA1UEBhMCVVMxDTALBgNVBAgMBGFzZGYxCzAJBgNVBAcMAmFmMQ0wCwYD
+ VQQKDARhc2RmMQwwCgYDVQQLDANhc2QxFjAUBgkqhkiG9w0BCQEWB2FAYS5jb20w
+ HhcNMjEwODMwMjMyMDQ1WhcNMzEwODI4MjMyMDQ1WjBsMQwwCgYDVQQDDANhc2Qx
+ CzAJBgNVBAYTAlVTMQ0wCwYDVQQIDARhc2RmMQswCQYDVQQHDAJhZjENMAsGA1UE
+ CgwEYXNkZjEMMAoGA1UECwwDYXNkMRYwFAYJKoZIhvcNAQkBFgdhQGEuY29tMIIB
+ IjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAq//c0hEEr83CS1pMgsHX50jt
+ 2MqIbcf63UUNJTiYpUUvUQSFJFc7m/dr+RTZvu97eDCnD5K2qkHHvTPaPZwY+Djf
+ iy7N641Sz6u/y3Yo3xxs1Aermsfedh48vusJpjbkT2XS44VjbkrpKcWDNVpp3Evd
+ M7oJotXeUsZ+imiyVCfr4YhoY5gbGh/r+KN9Wf9YKoUyfLLZGwdZkhtX2zIbidsL
+ Thqi9YTaUHttGinjiBBum234u/CfvKXsfG3yP2gvBGnlvZnM9ktv+lVffYNqlf7H
+ VmB1bKKk84HtzuW5X76SGAgOG8eHX4x5ZLI1WQUuoQOVRl1I0UCjBtbz8XhwvQID
+ AQABo4IBLTCCASkwLQYDVR0RBCYwJIcEwKgABYcEwKgAA4cEwKgAkocEwKgAtYcE
+ wKgAgYcEwKgAtjAdBgNVHQ4EFgQUuVh/0v32fEkNykIz8tPdXmFD9rcwDwYDVR0T
+ AQH/BAUwAwEB/zCBmAYDVR0jBIGQMIGNgBS5WH/S/fZ8SQ3KQjPy091eYUP2t6Fw
+ pG4wbDEMMAoGA1UEAwwDYXNkMQswCQYDVQQGEwJVUzENMAsGA1UECAwEYXNkZjEL
+ MAkGA1UEBwwCYWYxDTALBgNVBAoMBGFzZGYxDDAKBgNVBAsMA2FzZDEWMBQGCSqG
+ SIb3DQEJARYHYUBhLmNvbYIDYFMXMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEF
+ BQcDAjAOBgNVHQ8BAf8EBAMCAQYwDQYJKoZIhvcNAQELBQADggEBAKEocOmVuWlr
+ zegtKYMe8NhHIkFY9oVn5ym6RHNOJpPH4QF8XYC3Z5+iC5yGh4P/jVe/4I4SF6Ql
+ PtofU0jNq5vzapt/y+m008eXqPQFmoUOvu+JavoRVcRx2LIP5AgBA1mF56CSREsX
+ TkuJAA9IUQ8EjnmAoAeKINuPaKxGDuU8BGCMqr/qd564MKNf9XYL+Fb2rlkA0O2d
+ 2No34DQLgqSmST/LAvPM7Cbp6knYgnKmGr1nETCXasg1cueHLnWWTvps2HiPp2D/
+ +Fq0uqcZLu4Mdo0CPs4e5sHRyldEnRSKh0DVLprq9zr/GMipmPLJUsT5Jed3sj0w
+ M7Y3vwxshpo=
+ -----END CERTIFICATE-----
+ privatekey: |
+ -----BEGIN PRIVATE KEY-----
+ MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQC7+1xOHRQyOnQT
+ HFcrdasXZl0gzutVlA890a1wiQpdD5dOtCLo7+eqVYjqVKo9W8RUIArXWmBu/Abk
+ H7oVFWC1P973W1+ArF5sA70f7BZgqRKJTIisuIFIlRETgfnP2pfQmHRZtGaIJRZI
+ 4vQCdYgW2g0KOvvNcZJCVq1OrhKiNiY1bWCp66DGg0ic6OEkZFHTm745zUNQaf2d
+ NgsxKU0HPGjVLJI//yrRFAOSBUqgD4c50krnMF7fU/Fqh+UyOu8t6Y/HsySh3urB
+ +Zie331tAzV6QV39KKxRflNx/yuWrtIEslGTm+xHKoCYJEk/nZ3mX8Y5hG6wWAb7
+ A/FuDVg3AgMBAAECggEAapt30rj9DitGTtxAt13pJMEhyYxvvD3WkvmJwguF/Bbu
+ eW0Ba1c668fMeRCA54FWi1sMqusPS4HUqqUvk+tmyAOsAF4qgD/A4MMSC7uJSVI5
+ N/JWhJWyhCY94/FPakiO1nbPbVw41bcqtzU2qvparpME2CtxSCbDiqm7aaag3Kqe
+ EF0fGSUdZ+TYl9JM05+eIyiX+UY19Fg0OjTHMn8nGpxcNTfDBdQ68TKvdo/dtIKL
+ PLKzJUNNdM8odC4CvQtfGMqaslwZwXkiOl5VJcW21ncj/Y0ngEMKeD/i65ZoqGdR
+ 0FKCQYEAGtM2FvJcZQ92Wsw7yj2bK2MSegVUyLK32QKBgQDe8syVCepPzRsfjfxA
+ 6TZlWcGuTZLhwIx97Ktw3VcQ1f4rLoEYlv0xC2VWBORpzIsJo4I/OLmgp8a+Ga8z
+ FkVRnq90dV3t4NP9uJlHgcODHnOardC2UUka4olBSCG6zmK4Jxi34lOxhGRkshOo
+ L4IBeOIB5g+ZrEEXkzfYJHESRQKBgQDX2YhFhGIrT8BAnC5BbXbhm8h6Bhjz8DYL
+ d+qhVJjef7L/aJxViU0hX9Ba2O8CLK3FZeREFE3hJPiJ4TZSlN4evxs5p+bbNDcA
+ 0mhRI/o3X4ac6IxdRebyYnCOB/Cu94/MzppcZcotlCekKNike7eorCcX4Qavm7Pu
+ MUuQ+ifmSwKBgEnchoqZzlbBzMqXb4rRuIO7SL9GU/MWp3TQg7vQmJerTZlgvsQ2
+ wYsOC3SECmhCq4117iCj2luvOdihCboTFsQDnn0mpQe6BIF6Ns3J38wAuqv0CcFd
+ DKsrge1uyD3rQilgSoAhKzkUc24o0PpXQurZ8YZPgbuXpbj5vPaOnCdBAoGACYc7
+ wb3XS4wos3FxhUfcwJbM4b4VKeeHqzfu7pI6cU/3ydiHVitKcVe2bdw3qMPqI9Wc
+ nvi6e17Tbdq4OCsEJx1OiVwFD9YdO3cOTc6lw/3+hjypvZBRYo+/4jUthbu96E+S
+ dtOzehGZMmDvN0uSzupSi3ZOgkAAUFpyuIKickMCgYAId0PCRjonO2thn/R0rZ7P
+ //L852uyzYhXKw5/fjFGhQ6LbaLgIRFaCZ0L2809u0HFnNvJjHv4AKP6j+vFQYYY
+ qQ+66XnfsA9G/bu4MDS9AX83iahD9IdLXQAy8I19prAbpVumKegPbMnNYNB/TYEc
+ 3G15AKCXo7jjOUtHY01DCQ==
+ -----END PRIVATE KEY-----
diff --git a/community/grafana/1.0.0/ci/https-values.yaml b/community/grafana/1.0.0/ci/https-values.yaml
new file mode 100644
index 0000000000..3d631978e9
--- /dev/null
+++ b/community/grafana/1.0.0/ci/https-values.yaml
@@ -0,0 +1,94 @@
+grafanaStorage:
+ data:
+ type: hostPath
+ hostPath: /mnt/{{ .Release.Name }}/data
+
+grafanaNetwork:
+ certificateID: 1
+ rootURL: https://grafana.example.com:30000
+
+ixCertificates:
+ "1":
+ certificate: |
+ -----BEGIN CERTIFICATE-----
+ MIIEdjCCA16gAwIBAgIDYFMYMA0GCSqGSIb3DQEBCwUAMGwxDDAKBgNVBAMMA2Fz
+ ZDELMAkGA1UEBhMCVVMxDTALBgNVBAgMBGFzZGYxCzAJBgNVBAcMAmFmMQ0wCwYD
+ VQQKDARhc2RmMQwwCgYDVQQLDANhc2QxFjAUBgkqhkiG9w0BCQEWB2FAYS5jb20w
+ HhcNMjEwODMwMjMyMzU0WhcNMjMxMjAzMjMyMzU0WjBuMQswCQYDVQQDDAJhZDEL
+ MAkGA1UEBhMCVVMxDTALBgNVBAgMBGFzZGYxDTALBgNVBAcMBGFzZGYxDTALBgNV
+ BAoMBGFkc2YxDTALBgNVBAsMBGFzZGYxFjAUBgkqhkiG9w0BCQEWB2FAYS5jb20w
+ ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC7+1xOHRQyOnQTHFcrdasX
+ Zl0gzutVlA890a1wiQpdD5dOtCLo7+eqVYjqVKo9W8RUIArXWmBu/AbkH7oVFWC1
+ P973W1+ArF5sA70f7BZgqRKJTIisuIFIlRETgfnP2pfQmHRZtGaIJRZI4vQCdYgW
+ 2g0KOvvNcZJCVq1OrhKiNiY1bWCp66DGg0ic6OEkZFHTm745zUNQaf2dNgsxKU0H
+ PGjVLJI//yrRFAOSBUqgD4c50krnMF7fU/Fqh+UyOu8t6Y/HsySh3urB+Zie331t
+ AzV6QV39KKxRflNx/yuWrtIEslGTm+xHKoCYJEk/nZ3mX8Y5hG6wWAb7A/FuDVg3
+ AgMBAAGjggEdMIIBGTAnBgNVHREEIDAehwTAqAADhwTAqAAFhwTAqAC2hwTAqACB
+ hwTAqACSMB0GA1UdDgQWBBQ4G2ff4tgZl4vmo4xCfqmJhdqShzAMBgNVHRMBAf8E
+ AjAAMIGYBgNVHSMEgZAwgY2AFLlYf9L99nxJDcpCM/LT3V5hQ/a3oXCkbjBsMQww
+ CgYDVQQDDANhc2QxCzAJBgNVBAYTAlVTMQ0wCwYDVQQIDARhc2RmMQswCQYDVQQH
+ DAJhZjENMAsGA1UECgwEYXNkZjEMMAoGA1UECwwDYXNkMRYwFAYJKoZIhvcNAQkB
+ FgdhQGEuY29tggNgUxcwFgYDVR0lAQH/BAwwCgYIKwYBBQUHAwEwDgYDVR0PAQH/
+ BAQDAgWgMA0GCSqGSIb3DQEBCwUAA4IBAQA6FpOInEHB5iVk3FP67GybJ29vHZTD
+ KQHbQgmg8s4L7qIsA1HQ+DMCbdylpA11x+t/eL/n48BvGw2FNXpN6uykhLHJjbKR
+ h8yITa2KeD3LjLYhScwIigXmTVYSP3km6s8jRL6UKT9zttnIHyXVpBDya6Q4WTMx
+ fmfC6O7t1PjQ5ZyVtzizIUP8ah9n4TKdXU4A3QIM6WsJXpHb+vqp1WDWJ7mKFtgj
+ x5TKv3wcPnktx0zMPfLb5BTSE9rc9djcBG0eIAsPT4FgiatCUChe7VhuMnqskxEz
+ MymJLoq8+mzucRwFkOkR2EIt1x+Irl2mJVMeBow63rVZfUQBD8h++LqB
+ -----END CERTIFICATE-----
+ -----BEGIN CERTIFICATE-----
+ MIIEhDCCA2ygAwIBAgIDYFMXMA0GCSqGSIb3DQEBCwUAMGwxDDAKBgNVBAMMA2Fz
+ ZDELMAkGA1UEBhMCVVMxDTALBgNVBAgMBGFzZGYxCzAJBgNVBAcMAmFmMQ0wCwYD
+ VQQKDARhc2RmMQwwCgYDVQQLDANhc2QxFjAUBgkqhkiG9w0BCQEWB2FAYS5jb20w
+ HhcNMjEwODMwMjMyMDQ1WhcNMzEwODI4MjMyMDQ1WjBsMQwwCgYDVQQDDANhc2Qx
+ CzAJBgNVBAYTAlVTMQ0wCwYDVQQIDARhc2RmMQswCQYDVQQHDAJhZjENMAsGA1UE
+ CgwEYXNkZjEMMAoGA1UECwwDYXNkMRYwFAYJKoZIhvcNAQkBFgdhQGEuY29tMIIB
+ IjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAq//c0hEEr83CS1pMgsHX50jt
+ 2MqIbcf63UUNJTiYpUUvUQSFJFc7m/dr+RTZvu97eDCnD5K2qkHHvTPaPZwY+Djf
+ iy7N641Sz6u/y3Yo3xxs1Aermsfedh48vusJpjbkT2XS44VjbkrpKcWDNVpp3Evd
+ M7oJotXeUsZ+imiyVCfr4YhoY5gbGh/r+KN9Wf9YKoUyfLLZGwdZkhtX2zIbidsL
+ Thqi9YTaUHttGinjiBBum234u/CfvKXsfG3yP2gvBGnlvZnM9ktv+lVffYNqlf7H
+ VmB1bKKk84HtzuW5X76SGAgOG8eHX4x5ZLI1WQUuoQOVRl1I0UCjBtbz8XhwvQID
+ AQABo4IBLTCCASkwLQYDVR0RBCYwJIcEwKgABYcEwKgAA4cEwKgAkocEwKgAtYcE
+ wKgAgYcEwKgAtjAdBgNVHQ4EFgQUuVh/0v32fEkNykIz8tPdXmFD9rcwDwYDVR0T
+ AQH/BAUwAwEB/zCBmAYDVR0jBIGQMIGNgBS5WH/S/fZ8SQ3KQjPy091eYUP2t6Fw
+ pG4wbDEMMAoGA1UEAwwDYXNkMQswCQYDVQQGEwJVUzENMAsGA1UECAwEYXNkZjEL
+ MAkGA1UEBwwCYWYxDTALBgNVBAoMBGFzZGYxDDAKBgNVBAsMA2FzZDEWMBQGCSqG
+ SIb3DQEJARYHYUBhLmNvbYIDYFMXMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEF
+ BQcDAjAOBgNVHQ8BAf8EBAMCAQYwDQYJKoZIhvcNAQELBQADggEBAKEocOmVuWlr
+ zegtKYMe8NhHIkFY9oVn5ym6RHNOJpPH4QF8XYC3Z5+iC5yGh4P/jVe/4I4SF6Ql
+ PtofU0jNq5vzapt/y+m008eXqPQFmoUOvu+JavoRVcRx2LIP5AgBA1mF56CSREsX
+ TkuJAA9IUQ8EjnmAoAeKINuPaKxGDuU8BGCMqr/qd564MKNf9XYL+Fb2rlkA0O2d
+ 2No34DQLgqSmST/LAvPM7Cbp6knYgnKmGr1nETCXasg1cueHLnWWTvps2HiPp2D/
+ +Fq0uqcZLu4Mdo0CPs4e5sHRyldEnRSKh0DVLprq9zr/GMipmPLJUsT5Jed3sj0w
+ M7Y3vwxshpo=
+ -----END CERTIFICATE-----
+ privatekey: |
+ -----BEGIN PRIVATE KEY-----
+ MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQC7+1xOHRQyOnQT
+ HFcrdasXZl0gzutVlA890a1wiQpdD5dOtCLo7+eqVYjqVKo9W8RUIArXWmBu/Abk
+ H7oVFWC1P973W1+ArF5sA70f7BZgqRKJTIisuIFIlRETgfnP2pfQmHRZtGaIJRZI
+ 4vQCdYgW2g0KOvvNcZJCVq1OrhKiNiY1bWCp66DGg0ic6OEkZFHTm745zUNQaf2d
+ NgsxKU0HPGjVLJI//yrRFAOSBUqgD4c50krnMF7fU/Fqh+UyOu8t6Y/HsySh3urB
+ +Zie331tAzV6QV39KKxRflNx/yuWrtIEslGTm+xHKoCYJEk/nZ3mX8Y5hG6wWAb7
+ A/FuDVg3AgMBAAECggEAapt30rj9DitGTtxAt13pJMEhyYxvvD3WkvmJwguF/Bbu
+ eW0Ba1c668fMeRCA54FWi1sMqusPS4HUqqUvk+tmyAOsAF4qgD/A4MMSC7uJSVI5
+ N/JWhJWyhCY94/FPakiO1nbPbVw41bcqtzU2qvparpME2CtxSCbDiqm7aaag3Kqe
+ EF0fGSUdZ+TYl9JM05+eIyiX+UY19Fg0OjTHMn8nGpxcNTfDBdQ68TKvdo/dtIKL
+ PLKzJUNNdM8odC4CvQtfGMqaslwZwXkiOl5VJcW21ncj/Y0ngEMKeD/i65ZoqGdR
+ 0FKCQYEAGtM2FvJcZQ92Wsw7yj2bK2MSegVUyLK32QKBgQDe8syVCepPzRsfjfxA
+ 6TZlWcGuTZLhwIx97Ktw3VcQ1f4rLoEYlv0xC2VWBORpzIsJo4I/OLmgp8a+Ga8z
+ FkVRnq90dV3t4NP9uJlHgcODHnOardC2UUka4olBSCG6zmK4Jxi34lOxhGRkshOo
+ L4IBeOIB5g+ZrEEXkzfYJHESRQKBgQDX2YhFhGIrT8BAnC5BbXbhm8h6Bhjz8DYL
+ d+qhVJjef7L/aJxViU0hX9Ba2O8CLK3FZeREFE3hJPiJ4TZSlN4evxs5p+bbNDcA
+ 0mhRI/o3X4ac6IxdRebyYnCOB/Cu94/MzppcZcotlCekKNike7eorCcX4Qavm7Pu
+ MUuQ+ifmSwKBgEnchoqZzlbBzMqXb4rRuIO7SL9GU/MWp3TQg7vQmJerTZlgvsQ2
+ wYsOC3SECmhCq4117iCj2luvOdihCboTFsQDnn0mpQe6BIF6Ns3J38wAuqv0CcFd
+ DKsrge1uyD3rQilgSoAhKzkUc24o0PpXQurZ8YZPgbuXpbj5vPaOnCdBAoGACYc7
+ wb3XS4wos3FxhUfcwJbM4b4VKeeHqzfu7pI6cU/3ydiHVitKcVe2bdw3qMPqI9Wc
+ nvi6e17Tbdq4OCsEJx1OiVwFD9YdO3cOTc6lw/3+hjypvZBRYo+/4jUthbu96E+S
+ dtOzehGZMmDvN0uSzupSi3ZOgkAAUFpyuIKickMCgYAId0PCRjonO2thn/R0rZ7P
+ //L852uyzYhXKw5/fjFGhQ6LbaLgIRFaCZ0L2809u0HFnNvJjHv4AKP6j+vFQYYY
+ qQ+66XnfsA9G/bu4MDS9AX83iahD9IdLXQAy8I19prAbpVumKegPbMnNYNB/TYEc
+ 3G15AKCXo7jjOUtHY01DCQ==
+ -----END PRIVATE KEY-----
diff --git a/community/grafana/1.0.0/ix_values.yaml b/community/grafana/1.0.0/ix_values.yaml
new file mode 100644
index 0000000000..23a8e3f776
--- /dev/null
+++ b/community/grafana/1.0.0/ix_values.yaml
@@ -0,0 +1,35 @@
+image:
+ repository: grafana/grafana
+ pullPolicy: IfNotPresent
+ tag: '9.5.3'
+
+resources:
+ limits:
+ cpu: 4000m
+ memory: 8Gi
+
+grafanaConfig:
+ plugins: []
+ additionalEnvs: []
+
+grafanaNetwork:
+ hostNetwork: false
+ webPort: 30037
+ certificateID: 0
+ rootURL: ""
+
+grafanaRunAs:
+ user: 568
+ group: 568
+
+grafanaStorage:
+ data:
+ type: ixVolume
+ datasetName: data
+ additionalStorages: []
+
+notes:
+ custom: |
+ Default credentials:
+ - Username: admin
+ - Password: admin
diff --git a/community/grafana/1.0.0/metadata.yaml b/community/grafana/1.0.0/metadata.yaml
new file mode 100644
index 0000000000..89326176e2
--- /dev/null
+++ b/community/grafana/1.0.0/metadata.yaml
@@ -0,0 +1,8 @@
+runAsContext:
+ - userName: grafana
+ groupName: grafana
+ gid: 568
+ uid: 568
+ description: Grafana can run as any non-root user.
+capabilities: []
+hostMounts: []
diff --git a/community/grafana/1.0.0/questions.yaml b/community/grafana/1.0.0/questions.yaml
new file mode 100644
index 0000000000..7bb353a53e
--- /dev/null
+++ b/community/grafana/1.0.0/questions.yaml
@@ -0,0 +1,254 @@
+groups:
+ - name: Grafana Configuration
+ description: Configure Grafana
+ - name: User and Group Configuration
+ description: Configure User and Group for Grafana
+ - name: Network Configuration
+ description: Configure Network for Grafana
+ - name: Storage Configuration
+ description: Configure Storage for Grafana
+ - name: Resources Configuration
+ description: Configure Resources for Grafana
+
+portals:
+ web_portal:
+ protocols:
+ - "$kubernetes-resource_configmap_portal_protocol"
+ host:
+ - "$kubernetes-resource_configmap_portal_host"
+ ports:
+ - "$kubernetes-resource_configmap_portal_port"
+ path: "$kubernetes-resource_configmap_portal_path"
+
+questions:
+ - variable: grafanaConfig
+ label: ""
+ group: Grafana Configuration
+ schema:
+ type: dict
+ attrs:
+ - variable: plugins
+ label: Grafana Plugins
+ description: Configure Grafana plugins to install.
+ schema:
+ type: list
+ default: []
+ items:
+ - variable: plugin
+ label: Plugin
+ description: |
+ The plugin name to install.
+ Example: grafana-piechart-panel
+ Example: grafana-clock-panel 1.0.0
+ schema:
+ type: string
+ required: true
+ - variable: additionalEnvs
+ label: Additional Environment Variables
+ description: Configure additional environment variables for Grafana.
+ schema:
+ type: list
+ default: []
+ items:
+ - variable: env
+ label: Environment Variable
+ schema:
+ type: dict
+ attrs:
+ - variable: name
+ label: Name
+ schema:
+ type: string
+ required: true
+ - variable: value
+ label: Value
+ schema:
+ type: string
+ required: true
+
+ - variable: grafanaRunAs
+ label: ""
+ group: User and Group Configuration
+ schema:
+ type: dict
+ attrs:
+ - variable: user
+ label: User ID
+ description: The user id that Grafana will run as.
+ schema:
+ type: int
+ min: 2
+ default: 568
+ required: true
+ - variable: group
+ label: Group ID
+ description: The group id that Grafana will run as.
+ schema:
+ type: int
+ min: 2
+ default: 568
+ required: true
+
+ - variable: grafanaNetwork
+ label: ""
+ group: Network Configuration
+ schema:
+ type: dict
+ attrs:
+ - variable: hostNetwork
+ label: Host Network
+ description: |
+ Bind to the host network. It's recommended to keep this disabled.
+ schema:
+ type: boolean
+ default: false
+ - variable: webPort
+ label: Web Port
+ description: The port for the Grafana Web UI.
+ schema:
+ type: int
+ default: 30037
+ min: 9000
+ max: 65535
+ required: true
+ - variable: certificateID
+ label: Certificate
+ description: |
+ The certificate to use for Grafana
+ schema:
+ type: int
+ "null": true
+ $ref:
+ - "definitions/certificate"
+ - variable: rootURL
+ label: Root URL
+ description: |
+ The root URL for Grafana
+ The URL you use to access Grafana
+ Example: https://grafana.example.com:30037
+ Example: https://192.168.1.100:30037
+ schema:
+ type: string
+ show_if: [["certificateID", "!=", null]]
+ default: ""
+
+ - variable: grafanaStorage
+ label: ""
+ group: Storage Configuration
+ schema:
+ type: dict
+ attrs:
+ - variable: data
+ label: Grafana Data Storage
+ description: The path to store Grafana Data.
+ schema:
+ type: dict
+ attrs:
+ - variable: type
+ label: Type
+ description: |
+ ixVolume: Is dataset created automatically by the system.
+ Host Path: Is a path that already exists on the system.
+ schema:
+ type: string
+ required: true
+ default: "ixVolume"
+ enum:
+ - value: "hostPath"
+ description: Host Path (Path that already exists on the system)
+ - value: "ixVolume"
+ description: ixVolume (Dataset created automatically by the system)
+ - variable: datasetName
+ label: Dataset Name
+ schema:
+ type: string
+ show_if: [["type", "=", "ixVolume"]]
+ required: true
+ hidden: true
+ immutable: true
+ default: "data"
+ $ref:
+ - "normalize/ixVolume"
+ - variable: hostPath
+ label: Host Path
+ schema:
+ type: hostpath
+ show_if: [["type", "=", "hostPath"]]
+ immutable: true
+ required: true
+ - variable: additionalStorages
+ label: Additional Storage
+ description: Additional storage for Grafana.
+ schema:
+ type: list
+ default: []
+ items:
+ - variable: storageEntry
+ label: Storage Entry
+ schema:
+ type: dict
+ attrs:
+ - variable: type
+ label: Type
+ description: |
+ ixVolume: Is dataset created automatically by the system.
+ Host Path: Is a path that already exists on the system.
+ schema:
+ type: string
+ required: true
+ default: "ixVolume"
+ enum:
+ - value: "hostPath"
+ description: Host Path (Path that already exists on the system)
+ - value: "ixVolume"
+ description: ixVolume (Dataset created automatically by the system)
+ - variable: mountPath
+ label: Mount Path
+ description: The path inside the container to mount the storage.
+ schema:
+ type: path
+ required: true
+ - variable: hostPath
+ label: Host Path
+ description: The host path to use for storage.
+ schema:
+ type: hostpath
+ show_if: [["type", "=", "hostPath"]]
+ required: true
+ - variable: datasetName
+ label: Dataset Name
+ description: The name of the dataset to use for storage.
+ schema:
+ type: string
+ show_if: [["type", "=", "ixVolume"]]
+ required: true
+ immutable: true
+ default: "storage_entry"
+ $ref:
+ - "normalize/ixVolume"
+
+ - variable: resources
+ group: Resources Configuration
+ label: ""
+ schema:
+ type: dict
+ attrs:
+ - variable: limits
+ label: Limits
+ schema:
+ type: dict
+ attrs:
+ - variable: cpu
+ label: CPU
+ description: CPU limit for Grafana.
+ schema:
+ type: string
+ default: "4000m"
+ required: true
+ - variable: memory
+ label: Memory
+ description: Memory limit for Grafana.
+ schema:
+ type: string
+ default: "8Gi"
+ required: true
diff --git a/community/grafana/1.0.0/templates/NOTES.txt b/community/grafana/1.0.0/templates/NOTES.txt
new file mode 100644
index 0000000000..ba4e01146c
--- /dev/null
+++ b/community/grafana/1.0.0/templates/NOTES.txt
@@ -0,0 +1 @@
+{{ include "ix.v1.common.lib.chart.notes" $ }}
diff --git a/community/grafana/1.0.0/templates/_configuration.tpl b/community/grafana/1.0.0/templates/_configuration.tpl
new file mode 100644
index 0000000000..c5fff9316e
--- /dev/null
+++ b/community/grafana/1.0.0/templates/_configuration.tpl
@@ -0,0 +1,20 @@
+{{- define "grafana.configuration" -}}
+configmap:
+ grafana-config:
+ enabled: true
+ data:
+ GF_SERVER_HTTP_PORT: {{ .Values.grafanaNetwork.webPort | quote }}
+ GF_PATHS_DATA: /var/lib/grafana
+ GF_PATHS_PLUGINS: /var/lib/grafana/plugins
+ {{- with .Values.grafanaConfig.plugins }}
+ GF_INSTALL_PLUGINS: {{ join "," . }}
+ {{- end -}}
+ {{- if .Values.grafanaNetwork.certificateID }}
+ GF_SERVER_PROTOCOL: https
+ GF_SERVER_CERT_FILE: /grafana/certs/tls.crt
+ GF_SERVER_CERT_KEY: /grafana/certs/tls.key
+ {{- with .Values.grafanaNetwork.rootURL }}
+ GF_SERVER_ROOT_URL: {{ . | quote }}
+ {{- end -}}
+ {{- end }}
+{{- end -}}
diff --git a/community/grafana/1.0.0/templates/_grafana.tpl b/community/grafana/1.0.0/templates/_grafana.tpl
new file mode 100644
index 0000000000..ca84dae1a9
--- /dev/null
+++ b/community/grafana/1.0.0/templates/_grafana.tpl
@@ -0,0 +1,124 @@
+{{- define "grafana.workload" -}}
+workload:
+ grafana:
+ enabled: true
+ primary: true
+ type: Deployment
+ podSpec:
+ hostNetwork: {{ .Values.grafanaNetwork.hostNetwork }}
+ containers:
+ grafana:
+ enabled: true
+ primary: true
+ imageSelector: image
+ securityContext:
+ runAsUser: {{ .Values.grafanaRunAs.user }}
+ runAsGroup: {{ .Values.grafanaRunAs.group }}
+ envFrom:
+ - configMapRef:
+ name: grafana-config
+ {{ with .Values.grafanaConfig.additionalEnvs }}
+ envList:
+ {{ range $env := . }}
+ - name: {{ $env.name }}
+ value: {{ $env.value }}
+ {{ end }}
+ {{ end }}
+ probes:
+ {{ $scheme := "http" }}
+ {{ if .Values.grafanaNetwork.certificateID }}
+ {{ $scheme = "https" }}
+ {{ end }}
+ liveness:
+ enabled: true
+ type: {{ $scheme }}
+ port: {{ .Values.grafanaNetwork.webPort }}
+ path: /api/health
+ readiness:
+ enabled: true
+ type: {{ $scheme }}
+ port: {{ .Values.grafanaNetwork.webPort }}
+ path: /api/health
+ startup:
+ enabled: true
+ type: {{ $scheme }}
+ port: {{ .Values.grafanaNetwork.webPort }}
+ path: /api/health
+ initContainers:
+ {{- include "ix.v1.common.app.permissions" (dict "containerName" "01-permissions"
+ "UID" .Values.grafanaRunAs.user
+ "GID" .Values.grafanaRunAs.group
+ "mode" "check"
+ "type" "init") | nindent 8 }}
+
+{{/* Service */}}
+service:
+ grafana:
+ enabled: true
+ primary: true
+ type: NodePort
+ targetSelector: grafana
+ ports:
+ webui:
+ enabled: true
+ primary: true
+ port: {{ .Values.grafanaNetwork.webPort }}
+ nodePort: {{ .Values.grafanaNetwork.webPort }}
+ targetSelector: grafana
+
+{{/* Persistence */}}
+persistence:
+ data:
+ enabled: true
+ type: {{ .Values.grafanaStorage.data.type }}
+ datasetName: {{ .Values.grafanaStorage.data.datasetName | default "" }}
+ hostPath: {{ .Values.grafanaStorage.data.hostPath | default "" }}
+ targetSelector:
+ grafana:
+ grafana:
+ mountPath: /var/lib/grafana
+ 01-permissions:
+ mountPath: /mnt/directories/data
+ tmp:
+ enabled: true
+ type: emptyDir
+ targetSelector:
+ grafana:
+ grafana:
+ mountPath: /tmp
+ {{- range $idx, $storage := .Values.grafanaStorage.additionalStorages }}
+ {{ printf "grafana-%v" (int $idx) }}:
+ enabled: true
+ type: {{ $storage.type }}
+ datasetName: {{ $storage.datasetName | default "" }}
+ hostPath: {{ $storage.hostPath | default "" }}
+ targetSelector:
+ grafana:
+ grafana:
+ mountPath: {{ $storage.mountPath }}
+ 01-permissions:
+ mountPath: /mnt/directories{{ $storage.mountPath }}
+ {{- end }}
+ {{- if .Values.grafanaNetwork.certificateID }}
+ cert:
+ enabled: true
+ type: secret
+ objectName: grafana-cert
+ defaultMode: "0600"
+ items:
+ - key: tls.key
+ path: tls.key
+ - key: tls.crt
+ path: tls.crt
+ targetSelector:
+ grafana:
+ grafana:
+ mountPath: /grafana/certs
+ readOnly: true
+
+scaleCertificate:
+ grafana-cert:
+ enabled: true
+ id: {{ .Values.grafanaNetwork.certificateID }}
+ {{- end -}}
+{{- end -}}
diff --git a/community/grafana/1.0.0/templates/_portal.tpl b/community/grafana/1.0.0/templates/_portal.tpl
new file mode 100644
index 0000000000..7aba7358dc
--- /dev/null
+++ b/community/grafana/1.0.0/templates/_portal.tpl
@@ -0,0 +1,22 @@
+{{- define "grafana.portal" -}}
+---
+apiVersion: v1
+kind: ConfigMap
+metadata:
+ name: portal
+data:
+ {{- $host := "$node_ip" -}}
+ {{- $protocol := "http" -}}
+ {{- if .Values.grafanaNetwork.certificateID -}}
+ {{- $protocol = "https" -}}
+ {{- if .Values.grafanaNetwork.rootURL -}}
+ {{- $host = .Values.grafanaNetwork.rootURL -}}
+ {{- $host = ($host | trimPrefix "https://" | trimPrefix "http://" | trimSuffix "/") -}}
+ {{- $host = (mustRegexReplaceAll "(.*):[0-9]+" $host "${1}") -}}
+ {{- end -}}
+ {{- end }}
+ path: "/"
+ port: {{ .Values.grafanaNetwork.webPort | quote }}
+ protocol: {{ $protocol }}
+ host: {{ $host }}
+{{- end -}}
diff --git a/community/grafana/1.0.0/templates/common.yaml b/community/grafana/1.0.0/templates/common.yaml
new file mode 100644
index 0000000000..706c3beaa3
--- /dev/null
+++ b/community/grafana/1.0.0/templates/common.yaml
@@ -0,0 +1,10 @@
+{{- include "ix.v1.common.loader.init" . -}}
+
+{{/* Merge the templates with Values */}}
+{{- $_ := mustMergeOverwrite .Values (include "grafana.configuration" $ | fromYaml) -}}
+{{- $_ := mustMergeOverwrite .Values (include "grafana.workload" $ | fromYaml) -}}
+
+{{/* Create the configmap for portal manually*/}}
+{{- include "grafana.portal" $ -}}
+
+{{- include "ix.v1.common.loader.apply" . -}}
diff --git a/community/grafana/item.yaml b/community/grafana/item.yaml
new file mode 100644
index 0000000000..d0a4a10a52
--- /dev/null
+++ b/community/grafana/item.yaml
@@ -0,0 +1,11 @@
+icon_url: https://www.gravatar.com/avatar/31cea69afa424609b2d83621b4d47f1d?s=120&r=g&d=404
+categories:
+ - productivity
+screenshots:
+ - https://grafana.com/static/img/grafana/showcase_visualize.jpg
+ - https://grafana.com/static/img/screenshots/Modal_dashboards.png
+tags:
+ - analytics
+ - monitoring
+ - metrics
+ - dashboards