Repository: sapcc/helm-charts
Pull request #8599: [Compute-Monitoring] - Chart for vrops-custom-importer
Author: login: christophrichtersap
Created: 2025-04-29T09:06:26Z | Merged: 2025-05-07T07:50:55Z

- vrops-custom-importer is running as job on defined interval
- values.yaml provides structure of values, values are defined on internal location


Diff:
diff --git a/system/vrops-custom-importer/Chart.lock b/system/vrops-custom-importer/Chart.lock
new file mode 100644
index 00000000000..5a149cfe7e2
--- /dev/null
+++ b/system/vrops-custom-importer/Chart.lock
@@ -0,0 +1,6 @@
+dependencies:
+- name: owner-info
+  repository: oci://keppel.eu-de-1.cloud.sap/ccloud-helm
+  version: 0.2.0
+digest: sha256:9948b42a49d86cee17b76e5d46a5677e70bf3feb9ff2a9c34691a6f82ee751db
+generated: "2025-04-29T08:55:24.48297+02:00"
diff --git a/system/vrops-custom-importer/Chart.yaml b/system/vrops-custom-importer/Chart.yaml
new file mode 100644
index 00000000000..71ebf38102c
--- /dev/null
+++ b/system/vrops-custom-importer/Chart.yaml
@@ -0,0 +1,8 @@
+apiVersion: v2
+name: vrops-custom-importer
+version: 0.0.1
+description: Pod to import custom vrops metrics for monitoring purpose
+dependencies:
+  - name: owner-info
+    repository: oci://keppel.eu-de-1.cloud.sap/ccloud-helm
+    version: 0.2.0
diff --git a/system/vrops-custom-importer/README.md b/system/vrops-custom-importer/README.md
new file mode 100644
index 00000000000..66b7a925320
--- /dev/null
+++ b/system/vrops-custom-importer/README.md
@@ -0,0 +1,10 @@
+vrops-custom-importer
+--------------
+
+Installs the [vrops-custom-importer](https://github.tools.sap/cia/vrops-custom-importer) operator which import custom VMWare metrics to vROps.
+
+The executable iterates through all VCenters in the region and collects custom metrics from VMs, Cluster and ESXI. The information about VMs, ESXI and VCenters are fetched from VCenters using the vSphere API. The custom metrics are then imported to vROps using the vROps API.
+
+## Configuration
+
+See [values](./values.yaml).
diff --git a/system/vrops-custom-importer/ci/test-values.yaml b/system/vrops-custom-importer/ci/test-values.yaml
new file mode 100644
index 00000000000..df889bef1b9
--- /dev/null
+++ b/system/vrops-custom-importer/ci/test-values.yaml
@@ -0,0 +1,10 @@
+global:
+  region: testregion
+image:
+  repository: mytest
+vropsCustomImporter:
+  vcUsername: test123
+  vcPassword: totallysecure
+  vropsUsername: test123
+  vropsPassword: totallysecure
+  authSource: local
\ No newline at end of file
diff --git a/system/vrops-custom-importer/templates/job.yaml b/system/vrops-custom-importer/templates/job.yaml
new file mode 100644
index 00000000000..2e0132f655c
--- /dev/null
+++ b/system/vrops-custom-importer/templates/job.yaml
@@ -0,0 +1,50 @@
+---
+apiVersion: batch/v1
+kind: CronJob
+metadata:
+  name: cron-vrops-custom-importer
+  namespace: {{ .Values.namespace }}
+  annotations:
+    "helm.sh/hook": pre-install,pre-upgrade,pre-rollback
+    "helm.sh/hook-delete-policy": before-hook-creation
+    "helm.sh/hook-weight": "3"
+spec:
+  schedule: {{ default "*/5 * * * *" .Values.schedule | quote }}
+  concurrencyPolicy: Forbid
+  jobTemplate:
+    spec:
+      template:
+        metadata:
+          name: {{ .Values.name }}
+          namespace: {{ .Values.namespace }}
+          labels:
+            app: {{ .Values.name }}
+        spec:
+          containers:
+          - name: {{ .Values.name}}
+            image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}"
+            imagePullPolicy: {{ .Values.image.pullPolicy }}
+            env:
+              - name: REGION
+                value: {{ .Values.global.region }}
+              - name: VC_USER
+                value: {{ .Values.vropsCustomImporter.vcUsername }}
+              - name: VC_PASSWORD
+                valueFrom:
+                  secretKeyRef:
+                    name: {{ .Values.name }}
+                    key: vc_password
+              - name: VROPS_USERNAME
+                value: {{ .Values.vropsCustomImporter.vropsUsername }}
+              - name: VROPS_PASSWORD
+                valueFrom:
+                  secretKeyRef:
+                    name: {{ .Values.name }}
+                    key: vrops_password
+              - name: AUTH_SOURCE
+                value: {{ .Values.vropsCustomImporter.authSource }}
+              - name: DEBUG
+                value: "{{ .Values.vropsCustomImporter.debug }}"
+              - name: INSECURE
+                value: "{{ .Values.vropsCustomImporter.insecure }}"
+          restartPolicy: Never
\ No newline at end of file
diff --git a/system/vrops-custom-importer/templates/secrets.yaml b/system/vrops-custom-importer/templates/secrets.yaml
new file mode 100644
index 00000000000..32b1a4178ec
--- /dev/null
+++ b/system/vrops-custom-importer/templates/secrets.yaml
@@ -0,0 +1,10 @@
+apiVersion: v1
+kind: Secret
+metadata:
+  name: {{ .Values.name }}
+  namespace: {{ .Values.namespace }}
+  labels:
+    app: {{ .Values.name }}
+data:
+  vrops_password: {{ required ".Values.vropsCustomImporter.vropsPassword variable is missing" $.Values.vropsCustomImporter.vropsPassword | b64enc | quote }}
+  vc_password: {{ required ".Values.vropsCustomImporter.vcPassword variable is missing" $.Values.vropsCustomImporter.vcPassword | b64enc | quote }}
\ No newline at end of file
diff --git a/system/vrops-custom-importer/values.yaml b/system/vrops-custom-importer/values.yaml
new file mode 100644
index 00000000000..0c5f2941a66
--- /dev/null
+++ b/system/vrops-custom-importer/values.yaml
@@ -0,0 +1,21 @@
+owner-info:
+  support-group: compute
+  maintainers:
+    - Christoph Richter
+    - Marcel Gaedigk
+  helm-chart-url: https://github.com/sapcc/helm-charts/tree/master/system/vrops-custom-importer
+name: vrops-custom-importer
+namespace: vmware-monitoring
+schedule:
+image:
+  repository:
+  tag: "20250429191532"
+  pullPolicy: Always
+vropsCustomImporter:
+  vcUsername:
+  vcPassword:
+  vropsUsername:
+  vropsPassword:
+  authSource:
+  debug: false
+  insecure: false
\ No newline at end of file


Reviews:
user: login: viennaa
body: Thanks for adding this PR. I've added comments to adhere to best practises.

How are you going to deploy this chart? Is this something wich is running globally along every vrops instance? If so, is it going to be integrated in `vmware-monitoring`?

How often is the cronjob needed to run to have the metrics in vrops permanently?

I suppose you would need a new user here, afaik the current vrops-exporter user is read only.
state: CHANGES_REQUESTED
author_association: CONTRIBUTOR
submitted_at: 2025-04-29T09:36:04Z
user: login: viennaa
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-04-29T09:39:32Z
user: login: christophrichtersap
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-04-29T11:54:29Z
user: login: viennaa
body: We're almost there :) 
state: CHANGES_REQUESTED
author_association: CONTRIBUTOR
submitted_at: 2025-05-06T15:25:38Z
user: login: viennaa
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-05-07T07:26:19Z
user: login: viennaa
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-05-07T07:29:02Z
user: login: christophrichtersap
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-05-07T07:33:29Z
user: login: viennaa
body: Here we go 👍 
state: APPROVED
author_association: CONTRIBUTOR
submitted_at: 2025-05-07T07:47:57Z
user: login: christophrichtersap
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-05-07T07:48:15Z
user: login: christophrichtersap
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-05-07T07:48:41Z

Review comments:
diff_hunk: @@ -0,0 +1,22 @@
+owner-info:
+  support-group: compute
+  maintainers:
+    - Christoph Richter
+  helm-chart-url: https://github.com/sapcc/helm-charts/tree/master/system/vrops-custom-importer
+namespace: FROM-EXTERNAL
+schedule: FROM-EXTERNAL
+image:
+  registry: FROM-EXTERNAL
+  name: FROM-EXTERNAL
+vrops:
+  cluster: FROM-EXTERNAL
+  username: FROM-EXTERNAL
+  password: FROM-EXTERNAL
+vc:
+  cluster: FROM-EXTERNAL
+  username: FROM-EXTERNAL
+  password: FROM-EXTERNAL
+authSource: FROM-EXTERNAL
+debug: FROM-EXTERNAL
+insecure: FROM-EXTERNAL
+region: FROM-EXTERNAL
path: system/vrops-custom-importer/values.yaml
user: login: viennaa
body: all `FROM-EXTERNAL` should be empty. Add a ci folder and specify some values to get it through linting.
created_at: 2025-04-29T09:23:20Z
author_association: CONTRIBUTOR
diff_hunk: @@ -0,0 +1,22 @@
+owner-info:
+  support-group: compute
+  maintainers:
+    - Christoph Richter
+  helm-chart-url: https://github.com/sapcc/helm-charts/tree/master/system/vrops-custom-importer
+namespace: FROM-EXTERNAL
+schedule: FROM-EXTERNAL
path: system/vrops-custom-importer/values.yaml
user: login: viennaa
body: i would give a default here
created_at: 2025-04-29T09:23:36Z
author_association: CONTRIBUTOR
diff_hunk: @@ -0,0 +1,22 @@
+owner-info:
+  support-group: compute
+  maintainers:
+    - Christoph Richter
+  helm-chart-url: https://github.com/sapcc/helm-charts/tree/master/system/vrops-custom-importer
+namespace: FROM-EXTERNAL
+schedule: FROM-EXTERNAL
+image:
+  registry: FROM-EXTERNAL
+  name: FROM-EXTERNAL
+vrops:
+  cluster: FROM-EXTERNAL
+  username: FROM-EXTERNAL
+  password: FROM-EXTERNAL
+vc:
+  cluster: FROM-EXTERNAL
+  username: FROM-EXTERNAL
+  password: FROM-EXTERNAL
+authSource: FROM-EXTERNAL
+debug: FROM-EXTERNAL
path: system/vrops-custom-importer/values.yaml
user: login: viennaa
body: set a non verbose default
created_at: 2025-04-29T09:24:07Z
author_association: CONTRIBUTOR
diff_hunk: @@ -0,0 +1,22 @@
+owner-info:
+  support-group: compute
+  maintainers:
+    - Christoph Richter
+  helm-chart-url: https://github.com/sapcc/helm-charts/tree/master/system/vrops-custom-importer
+namespace: FROM-EXTERNAL
+schedule: FROM-EXTERNAL
+image:
+  registry: FROM-EXTERNAL
+  name: FROM-EXTERNAL
+vrops:
+  cluster: FROM-EXTERNAL
+  username: FROM-EXTERNAL
+  password: FROM-EXTERNAL
+vc:
+  cluster: FROM-EXTERNAL
+  username: FROM-EXTERNAL
+  password: FROM-EXTERNAL
+authSource: FROM-EXTERNAL
+debug: FROM-EXTERNAL
+insecure: FROM-EXTERNAL
path: system/vrops-custom-importer/values.yaml
user: login: viennaa
body: default: no :D 
created_at: 2025-04-29T09:24:21Z
author_association: CONTRIBUTOR
diff_hunk: @@ -0,0 +1,45 @@
+---
+apiVersion: batch/v1
+kind: CronJob
+metadata:
+  name: cron-vrops-custom-importer
+  namespace: {{ .Values.namespace }}
+  annotations:
+    "helm.sh/hook": pre-install,pre-upgrade,pre-rollback
+    "helm.sh/hook-delete-policy": before-hook-creation
+    "helm.sh/hook-weight": "3"
+spec:
+  schedule: "{{ .Values.schedule }}"
+  concurrencyPolicy: Forbid
+  jobTemplate:
+    spec:
+      template:
+        metadata:
+          labels:
+            app: vrops-custom-importer
+        spec:
+          containers:
+          - name: {{ .Values.image.name}}
+            image: {{ .Values.image.registry}}
+            env:
+              - name: REGION
+                value: {{ .Values.region }}
+              - name: VC
+                value: {{ .Values.vc.cluster }}
+              - name: VC_USER
+                value: {{ .Values.vc.username }}
+              - name: VC_PASSWORD
+                value: {{ .Values.vc.password }}
path: system/vrops-custom-importer/templates/job.yaml
user: login: viennaa
body: passwords need to go in a secret, same applies for `VROPS_PASSWORD`
created_at: 2025-04-29T09:25:05Z
author_association: CONTRIBUTOR
diff_hunk: @@ -0,0 +1,8 @@
+apiVersion: v2
+name: vrops-custom-importer
+version: 1.0.0
path: system/vrops-custom-importer/Chart.yaml
user: login: viennaa
body: ```suggestion
version: 0.0.1
```
created_at: 2025-04-29T09:25:15Z
author_association: CONTRIBUTOR
diff_hunk: @@ -0,0 +1,45 @@
+---
+apiVersion: batch/v1
+kind: CronJob
+metadata:
+  name: cron-vrops-custom-importer
+  namespace: {{ .Values.namespace }}
+  annotations:
+    "helm.sh/hook": pre-install,pre-upgrade,pre-rollback
+    "helm.sh/hook-delete-policy": before-hook-creation
+    "helm.sh/hook-weight": "3"
+spec:
+  schedule: "{{ .Values.schedule }}"
+  concurrencyPolicy: Forbid
+  jobTemplate:
+    spec:
+      template:
+        metadata:
+          labels:
+            app: vrops-custom-importer
+        spec:
+          containers:
+          - name: {{ .Values.image.name}}
+            image: {{ .Values.image.registry}}
+            env:
+              - name: REGION
+                value: {{ .Values.region }}
path: system/vrops-custom-importer/templates/job.yaml
user: login: viennaa
body: ```suggestion
                value: {{ .Values.global.region }}
```

This is a default and can be mapped. Make sure you add it to values.yaml too, just to make it clear that this is referred to know which files to map in the pipeline.
created_at: 2025-04-29T09:27:31Z
author_association: CONTRIBUTOR
diff_hunk: @@ -0,0 +1,45 @@
+---
+apiVersion: batch/v1
+kind: CronJob
+metadata:
+  name: cron-vrops-custom-importer
+  namespace: {{ .Values.namespace }}
+  annotations:
+    "helm.sh/hook": pre-install,pre-upgrade,pre-rollback
+    "helm.sh/hook-delete-policy": before-hook-creation
+    "helm.sh/hook-weight": "3"
+spec:
+  schedule: "{{ .Values.schedule }}"
+  concurrencyPolicy: Forbid
+  jobTemplate:
+    spec:
+      template:
+        metadata:
+          labels:
+            app: vrops-custom-importer
+        spec:
+          containers:
+          - name: {{ .Values.image.name}}
+            image: {{ .Values.image.registry}}
+            env:
+              - name: REGION
+                value: {{ .Values.region }}
+              - name: VC
+                value: {{ .Values.vc.cluster }}
+              - name: VC_USER
+                value: {{ .Values.vc.username }}
+              - name: VC_PASSWORD
+                value: {{ .Values.vc.password }}
+              - name: VROPS
+                value: {{ .Values.vrops.cluster }}
+              - name: VROPS_USERNAME
+                value: {{ .Values.vrops.username }}
+              - name: VROPS_PASSWORD
+                value: {{ .Values.vrops.password }}
path: system/vrops-custom-importer/templates/job.yaml
user: login: viennaa
body: can these values be retrieved from somewhere? `vmware-monitoring` has

```yaml
global:
  targets:
```

I'd try to avoid readding here.
created_at: 2025-04-29T09:31:31Z
author_association: CONTRIBUTOR
diff_hunk: @@ -0,0 +1,45 @@
+---
+apiVersion: batch/v1
+kind: CronJob
+metadata:
+  name: cron-vrops-custom-importer
+  namespace: {{ .Values.namespace }}
+  annotations:
+    "helm.sh/hook": pre-install,pre-upgrade,pre-rollback
+    "helm.sh/hook-delete-policy": before-hook-creation
+    "helm.sh/hook-weight": "3"
+spec:
+  schedule: "{{ .Values.schedule }}"
+  concurrencyPolicy: Forbid
+  jobTemplate:
+    spec:
+      template:
+        metadata:
+          labels:
+            app: vrops-custom-importer
+        spec:
+          containers:
+          - name: {{ .Values.image.name}}
+            image: {{ .Values.image.registry}}
+            env:
+              - name: REGION
+                value: {{ .Values.region }}
+              - name: VC
+                value: {{ .Values.vc.cluster }}
path: system/vrops-custom-importer/templates/job.yaml
user: login: viennaa
body: also check, if these values are maintained somewhere already.
created_at: 2025-04-29T09:32:03Z
author_association: CONTRIBUTOR
diff_hunk: @@ -0,0 +1,8 @@
+vrops-custom-importer
+--------------
+
+Installs the [vrops-custom-importer](https://github.tools.sap/cia/vrops-custom-importer) operator which import custom VMWare metrics to vrops.
+
+## Configuration
+
+See [values](./values.yaml).
path: system/vrops-custom-importer/README.md
user: login: viennaa
body: A little bit more explanation would be good, like creds for vcenter and vrops are needed. Maybe a picture, what is pushing and fetching from where to where.
created_at: 2025-04-29T09:33:07Z
author_association: CONTRIBUTOR
diff_hunk: @@ -0,0 +1,8 @@
+vrops-custom-importer
+--------------
+
+Installs the [vrops-custom-importer](https://github.tools.sap/cia/vrops-custom-importer) operator which import custom VMWare metrics to vrops.
+
+## Configuration
+
+See [values](./values.yaml).
path: system/vrops-custom-importer/README.md
user: login: viennaa
body: ok probably this could go into the source repository. but still some more explanation would be cool, what are the crucial things to specify.
created_at: 2025-04-29T09:39:32Z
author_association: CONTRIBUTOR
diff_hunk: @@ -0,0 +1,45 @@
+---
+apiVersion: batch/v1
+kind: CronJob
+metadata:
+  name: cron-vrops-custom-importer
+  namespace: {{ .Values.namespace }}
+  annotations:
+    "helm.sh/hook": pre-install,pre-upgrade,pre-rollback
+    "helm.sh/hook-delete-policy": before-hook-creation
+    "helm.sh/hook-weight": "3"
+spec:
+  schedule: "{{ .Values.schedule }}"
+  concurrencyPolicy: Forbid
+  jobTemplate:
+    spec:
+      template:
+        metadata:
+          labels:
+            app: vrops-custom-importer
+        spec:
+          containers:
+          - name: {{ .Values.image.name}}
+            image: {{ .Values.image.registry}}
+            env:
+              - name: REGION
+                value: {{ .Values.region }}
+              - name: VC
+                value: {{ .Values.vc.cluster }}
+              - name: VC_USER
+                value: {{ .Values.vc.username }}
+              - name: VC_PASSWORD
+                value: {{ .Values.vc.password }}
+              - name: VROPS
+                value: {{ .Values.vrops.cluster }}
+              - name: VROPS_USERNAME
+                value: {{ .Values.vrops.username }}
+              - name: VROPS_PASSWORD
+                value: {{ .Values.vrops.password }}
path: system/vrops-custom-importer/templates/job.yaml
user: login: christophrichtersap
body: Cluster has been removed, as it not required in script.
created_at: 2025-04-29T11:54:29Z
author_association: CONTRIBUTOR
diff_hunk: @@ -0,0 +1,50 @@
+---
+apiVersion: batch/v1
+kind: CronJob
+metadata:
+  name: cron-vrops-custom-importer
+  namespace: {{ .Values.namespace }}
+  annotations:
+    "helm.sh/hook": pre-install,pre-upgrade,pre-rollback
+    "helm.sh/hook-delete-policy": before-hook-creation
+    "helm.sh/hook-weight": "3"
+spec:
+  schedule: "{{ .Values.schedule }}"
path: system/vrops-custom-importer/templates/job.yaml
user: login: viennaa
body: as this seems to be a default in the values, go with this default here and only set the value if something else is specified

```suggestion
  schedule: "{{ default "*/5 * * * *" .Values.schedule }}"
```

leave `.Values.schedule` empty and give it a comment, that it defaults to this.

created_at: 2025-05-06T15:21:59Z
author_association: CONTRIBUTOR
diff_hunk: @@ -0,0 +1,20 @@
+owner-info:
+  support-group: compute
+  maintainers:
+    - Christoph Richter
+  helm-chart-url: https://github.com/sapcc/helm-charts/tree/master/system/vrops-custom-importer
+name: vrops-custom-importer
+namespace: vrops-custom-importer
path: system/vrops-custom-importer/values.yaml
user: login: viennaa
body: a dedicated namespace for a single exporter?

how about `vmware-monitoring`?
created_at: 2025-05-06T15:22:49Z
author_association: CONTRIBUTOR
diff_hunk: @@ -0,0 +1,20 @@
+owner-info:
+  support-group: compute
+  maintainers:
+    - Christoph Richter
+  helm-chart-url: https://github.com/sapcc/helm-charts/tree/master/system/vrops-custom-importer
+name: vrops-custom-importer
+namespace: vrops-custom-importer
+schedule: "*/5 * * * *"
+image:
+  repository:
+  tag: latest
path: system/vrops-custom-importer/values.yaml
user: login: viennaa
body: For better backward compatibility I'd use a specific version which can be bumped. Otherwise it might change at pod kick time.
created_at: 2025-05-06T15:23:59Z
author_association: CONTRIBUTOR
diff_hunk: @@ -0,0 +1,20 @@
+owner-info:
+  support-group: compute
+  maintainers:
+    - Christoph Richter
path: system/vrops-custom-importer/values.yaml
user: login: viennaa
body: Another colleague as a stand-in would be nice.
created_at: 2025-05-07T07:26:19Z
author_association: CONTRIBUTOR
diff_hunk: @@ -0,0 +1,20 @@
+owner-info:
+  support-group: compute
+  maintainers:
+    - Christoph Richter
+  helm-chart-url: https://github.com/sapcc/helm-charts/tree/master/system/vrops-custom-importer
+name: vrops-custom-importer
+namespace: vmware-monitoring
+schedule:
+image:
+  repository:
+  tag:
path: system/vrops-custom-importer/values.yaml
user: login: viennaa
body: unless you are planning to go with different versions across the globe, go with the latest available specific version here (albeit not `latest`). if this goes up, you bump the tag and chart version and have a nice helm history.


created_at: 2025-05-07T07:28:56Z
author_association: CONTRIBUTOR
diff_hunk: @@ -0,0 +1,20 @@
+owner-info:
+  support-group: compute
+  maintainers:
+    - Christoph Richter
path: system/vrops-custom-importer/values.yaml
user: login: christophrichtersap
body: - Tommy Sauer :D 
created_at: 2025-05-07T07:33:29Z
author_association: CONTRIBUTOR
diff_hunk: @@ -0,0 +1,20 @@
+owner-info:
+  support-group: compute
+  maintainers:
+    - Christoph Richter
path: system/vrops-custom-importer/values.yaml
user: login: christophrichtersap
body: Added second maintainer
created_at: 2025-05-07T07:48:15Z
author_association: CONTRIBUTOR
diff_hunk: @@ -0,0 +1,20 @@
+owner-info:
+  support-group: compute
+  maintainers:
+    - Christoph Richter
+  helm-chart-url: https://github.com/sapcc/helm-charts/tree/master/system/vrops-custom-importer
+name: vrops-custom-importer
+namespace: vmware-monitoring
+schedule:
+image:
+  repository:
+  tag:
path: system/vrops-custom-importer/values.yaml
user: login: christophrichtersap
body: Added initial registry tag as default intial value
created_at: 2025-05-07T07:48:41Z
author_association: CONTRIBUTOR

PR comments:
user: login: richardtief
created_at: 2025-04-29T09:12:55Z
body: Could you please give more context and elaborate why this is needed?

author_association: MEMBER
user: login: christophrichtersap
created_at: 2025-04-29T09:24:08Z
body: The implemented  kubernetes job is used to import custom metrics into VMware vRealize Operations (vROps). 
vROps is limited on some metrics we still need to cover.
In the current `vrops-custom-importer` we cover e.g following metrics:

| Name                          | Value Example               | Type   | Description                     |
|-------------------------------|-----------------------------|--------|---------------------------------|
| Custom\|License\|Key          | xxxx-xxxx-xxxx-xxxx-xxxx    | string | Host license key                |
| Custom\|License\|Used         | 10                          | int    | Number of licenses used         |
| Custom\|License\|Limit        | 4000                        | int    | Total license limit             |

These metrics are necessary to avoid VMWare License violation and keep track on licenses within our bedrock project.

In case the metrics are already existing within vROps they are fetched by vrops-exporter as modified in #8597

author_association: CONTRIBUTOR
user: login: christophrichtersap
created_at: 2025-04-29T10:31:25Z
body: > Thanks for adding this PR. I've added comments to adhere to best practises.
> 
> How are you going to deploy this chart? Is this something wich is running globally along every vrops instance? If so, is it going to be integrated in `vmware-monitoring`?
> 
> How often is the cronjob needed to run to have the metrics in vrops permanently?
> 
> I suppose you would need a new user here, afaik the current vrops-exporter user is read only.

Thanks for the review — I’ll proceed with your recommended adjustments.

The chart will be deployed via Helm on `qa-de-1` and `eu-de-1` using the Concourse pipeline. The script doesn’t run inside the vROps instances; instead, it connects externally and pushes data to their endpoints. Each script execution handles multiple vROps instances within a region.

Thomas mentioned that running the script once should be sufficient to get the metrics permanently. However, I’d recommend executing it at least once a day to track license changes and usage over time.

We already have a technical user in place that Thomas and Michael have used in the past.


author_association: CONTRIBUTOR
user: login: sapcc-bot
created_at: 2025-05-07T03:36:47Z
body: Failed to validate the helm chart. [Details](https://ci1.eu-de-2.cloud.sap/builds/4123168307). [Readme](https://github.com/sapcc/helm-charts/blob/master/ci/README.md).
author_association: CONTRIBUTOR
user: login: christophrichtersap
created_at: 2025-05-07T03:37:36Z
body: Hi,

i just updated your proposals except the one for `tag: latest`, I left this empty to enforce the external values provider to hand in accurate tag as initial there is none existing yet.

CI pipeline is already in place and tested successfully for QA environment.
author_association: CONTRIBUTOR
user: login: christophrichtersap
created_at: 2025-05-07T03:40:51Z
body: > Failed to validate the helm chart. [Details](https://ci1.eu-de-2.cloud.sap/builds/4123168307). [Readme](https://github.com/sapcc/helm-charts/blob/master/ci/README.md).

Fixed the issue needs to be `{{ default "*/5 * * * *" .Values.schedule }}`
author_association: CONTRIBUTOR
user: login: sapcc-bot
created_at: 2025-05-07T03:41:23Z
body: Failed to validate the helm chart. [Details](https://ci1.eu-de-2.cloud.sap/builds/4123179290). [Readme](https://github.com/sapcc/helm-charts/blob/master/ci/README.md).
author_association: CONTRIBUTOR
user: login: sapcc-bot
created_at: 2025-05-07T03:46:19Z
body: Failed to validate the helm chart. [Details](https://ci1.eu-de-2.cloud.sap/builds/4123190642). [Readme](https://github.com/sapcc/helm-charts/blob/master/ci/README.md).
author_association: CONTRIBUTOR
user: login: sapcc-bot
created_at: 2025-05-07T03:48:32Z
body: Failed to validate the helm chart. [Details](https://ci1.eu-de-2.cloud.sap/builds/4123196128). [Readme](https://github.com/sapcc/helm-charts/blob/master/ci/README.md).
author_association: CONTRIBUTOR
user: login: sapcc-bot
created_at: 2025-05-07T03:52:16Z
body: Failed to validate the helm chart. [Details](https://ci1.eu-de-2.cloud.sap/builds/4123204672). [Readme](https://github.com/sapcc/helm-charts/blob/master/ci/README.md).
author_association: CONTRIBUTOR