From ed52d4f240e9b588a3e917be69767fca0b3e632a Mon Sep 17 00:00:00 2001 From: Jamie <32368259+jamie-stinson@users.noreply.github.com> Date: Wed, 21 Feb 2024 16:20:16 +0000 Subject: [PATCH] feat(smartctl-exporter) add smartctl-exporter (#17522) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit **Description** Prometheus exporter for disks supporting S.M.A.R.T using smartctl binary to gather metrics. ⚒️ Fixes # **⚙️ Type of change** - [x] ⚙️ Feature/App addition - [ ] 🪛 Bugfix - [ ] ⚠️ Breaking change (fix or feature that would cause existing functionality to not work as expected) - [ ] 🔃 Refactor of current code **🧪 How Has This Been Tested?** Tested on local Kubernetes cluster. **📃 Notes:** **✔️ Checklist:** - [x] ⚖️ My code follows the style guidelines of this project - [x] 👀 I have performed a self-review of my own code - [ ] #️⃣ I have commented my code, particularly in hard-to-understand areas - [ ] 📄 I have made corresponding changes to the documentation - [ ] ⚠️ My changes generate no new warnings - [ ] 🧪 I have added tests to this description that prove my fix is effective or that my feature works - [ ] ⬆️ I increased versions for any altered app according to semantic versioning **➕ App addition** If this PR is an app addition please make sure you have done the following. - [x] 🖼️ I have added an icon in the Chart's root directory called `icon.png` --- _Please don't blindly check all the boxes. Read them and only check those that apply. Those checkboxes are there for the reviewer to see what is this all about and the status of this PR with a quick glance._ --- .../incubator/smartctl-exporter/.helmignore | 30 +++++ charts/incubator/smartctl-exporter/Chart.yaml | 38 ++++++ charts/incubator/smartctl-exporter/README.md | 28 ++++ charts/incubator/smartctl-exporter/icon.png | Bin 0 -> 17117 bytes .../smartctl-exporter/questions.yaml | 125 ++++++++++++++++++ .../smartctl-exporter/templates/NOTES.txt | 1 + .../smartctl-exporter/templates/common.yaml | 1 + .../incubator/smartctl-exporter/values.yaml | 67 ++++++++++ 8 files changed, 290 insertions(+) create mode 100644 charts/incubator/smartctl-exporter/.helmignore create mode 100644 charts/incubator/smartctl-exporter/Chart.yaml create mode 100644 charts/incubator/smartctl-exporter/README.md create mode 100644 charts/incubator/smartctl-exporter/icon.png create mode 100644 charts/incubator/smartctl-exporter/questions.yaml create mode 100644 charts/incubator/smartctl-exporter/templates/NOTES.txt create mode 100644 charts/incubator/smartctl-exporter/templates/common.yaml create mode 100644 charts/incubator/smartctl-exporter/values.yaml diff --git a/charts/incubator/smartctl-exporter/.helmignore b/charts/incubator/smartctl-exporter/.helmignore new file mode 100644 index 00000000000..77ca5567b26 --- /dev/null +++ b/charts/incubator/smartctl-exporter/.helmignore @@ -0,0 +1,30 @@ +# Patterns to ignore when building packages. +# This supports shell glob matching, relative path matching, and +# negation (prefixed with !). Only one pattern per line. +.DS_Store +# Common VCS dirs +.git/ +.gitignore +.bzr/ +.bzrignore +.hg/ +.hgignore +.svn/ +# Common backup files +*.swp +*.bak +*.tmp +*~ +# Various IDEs +.project +.idea/ +*.tmproj +.vscode/ +# OWNERS file for Kubernetes +OWNERS +# helm-docs templates +*.gotmpl +# docs folder +/docs +# icon +icon.png diff --git a/charts/incubator/smartctl-exporter/Chart.yaml b/charts/incubator/smartctl-exporter/Chart.yaml new file mode 100644 index 00000000000..f0e50d087c5 --- /dev/null +++ b/charts/incubator/smartctl-exporter/Chart.yaml @@ -0,0 +1,38 @@ +annotations: + max_scale_version: 23.10.2 + min_scale_version: 23.10.0 + truecharts.org/SCALE-support: "true" + truecharts.org/category: metrics + truecharts.org/max_helm_version: "3.13" + truecharts.org/min_helm_version: "3.12" + truecharts.org/train: incubator +apiVersion: v2 +appVersion: 0.11.0 +dependencies: + - name: common + version: 17.2.22 + repository: oci://tccr.io/truecharts + condition: "" + alias: "" + tags: [] + import-values: [] +deprecated: false +description: Prometheus exporter for SMART using smartctl binary to gather metrics. +home: https://truecharts.org/charts/incubator/smartctl-exporter +icon: https://truecharts.org/img/hotlink-ok/chart-icons/smartctl-exporter.png +keywords: + - prometheus + - smartctl-exporter + - monitoring +kubeVersion: ">=1.24.0-0" +maintainers: + - name: TrueCharts + email: info@truecharts.org + url: https://truecharts.org +name: smartctl-exporter +sources: + - https://github.com/truecharts/charts/tree/master/charts/incubator/smartctl-exporter + - https://github.com/prometheus-community/smartctl_exporter + - https://hub.docker.com/r/prometheuscommunity/smartctl-exporter +type: application +version: 0.0.1 diff --git a/charts/incubator/smartctl-exporter/README.md b/charts/incubator/smartctl-exporter/README.md new file mode 100644 index 00000000000..3b620f87d9a --- /dev/null +++ b/charts/incubator/smartctl-exporter/README.md @@ -0,0 +1,28 @@ +--- +title: README +--- + +## General Info + +TrueCharts can be installed as both _normal_ Helm Charts or as Apps on TrueNAS SCALE. +However only installations using the TrueNAS SCALE Apps system are supported. + +For more information about this App, please check the docs on the TrueCharts [website](https://truecharts.org/charts/dependency/node-exporter) + +**This chart is not maintained by the upstream project and any issues with the chart should be raised [here](https://github.com/truecharts/charts/issues/new/choose)** + +## Support + +- Please check our [quick-start guides for TrueNAS SCALE](https://truecharts.org/manual/SCALE/guides/scale-intro). +- See the [Website](https://truecharts.org) +- Check our [Discord](https://discord.gg/tVsPTHWTtr) +- Open a [issue](https://github.com/truecharts/charts/issues/new/choose) + +--- + +## Sponsor TrueCharts + +TrueCharts can only exist due to the incredible effort of our staff. +Please consider making a [donation](https://truecharts.org/sponsor) or contributing back to the project any way you can! + +_All Rights Reserved - The TrueCharts Project_ diff --git a/charts/incubator/smartctl-exporter/icon.png b/charts/incubator/smartctl-exporter/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..87d2c98fab5a64fb4aa2f777114a5c6938049e12 GIT binary patch literal 17117 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