chore: migrate pushgateway from flux
diff --git a/roles/prometheus_pushgateway/defaults/main.yml b/roles/prometheus_pushgateway/defaults/main.yml
new file mode 100644
index 0000000..6e09ae1
--- /dev/null
+++ b/roles/prometheus_pushgateway/defaults/main.yml
@@ -0,0 +1,20 @@
+# Copyright (c) 2023 VEXXHOST, Inc.
+#
+# Licensed under the Apache License, Version 2.0 (the "License"); you may
+# not use this file except in compliance with the License. You may obtain
+# a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+# License for the specific language governing permissions and limitations
+# under the License.
+
+pushgateway_helm_release_name: prometheus-pushgateway
+pushgateway_helm_chart_path: "{{ role_path }}/../../charts/prometheus-pushgateway/"
+pushgateway_helm_chart_ref: /usr/local/src/prometheus-pushgateway
+
+pushgateway_helm_release_namespace: monitoring
+pushgateway_helm_values: {}
diff --git a/roles/prometheus_pushgateway/meta/main.yml b/roles/prometheus_pushgateway/meta/main.yml
index e758cd3..4d1e042 100644
--- a/roles/prometheus_pushgateway/meta/main.yml
+++ b/roles/prometheus_pushgateway/meta/main.yml
@@ -25,4 +25,7 @@
 
 dependencies:
   - role: defaults
-  - role: atmosphere
+  - role: upload_helm_chart
+    vars:
+      upload_helm_chart_src: "{{ pushgateway_helm_chart_path }}"
+      upload_helm_chart_dest: "{{ pushgateway_helm_chart_ref }}"
diff --git a/roles/prometheus_pushgateway/tasks/main.yml b/roles/prometheus_pushgateway/tasks/main.yml
index 3553fcd..790de9d 100644
--- a/roles/prometheus_pushgateway/tasks/main.yml
+++ b/roles/prometheus_pushgateway/tasks/main.yml
@@ -12,36 +12,34 @@
 # License for the specific language governing permissions and limitations
 # under the License.
 
-- name: Deploy Helm chart
-  kubernetes.core.k8s:
-    state: present
-    definition:
-      - apiVersion: helm.toolkit.fluxcd.io/v2beta1
+- name: Uninstall the legacy HelmRelease
+  run_once: true
+  block:
+    - name: Suspend the existing HelmRelease
+      kubernetes.core.k8s:
+        state: patched
+        api_version: helm.toolkit.fluxcd.io/v2beta1
         kind: HelmRelease
-        metadata:
-          name: prometheus-pushgateway
-          namespace: monitoring
-        spec:
-          interval: 60s
-          chart:
-            spec:
-              chart: prometheus-pushgateway
-              version: 1.16.0
-              sourceRef:
-                kind: HelmRepository
-                name: prometheus-community
-          values:
-            image:
-              repository: "{{ atmosphere_images['prometheus_pushgateway'] | vexxhost.atmosphere.docker_image('name') }}"
-            nodeSelector:
-              openstack-control-plane: enabled
-            serviceMonitor:
-              enabled: true
-              namespace: monitoring
-              additionalLabels:
-                release: kube-prometheus-stack
-              relabelings:
-                - sourceLabels: ["__meta_kubernetes_pod_name"]
-                  targetLabel: "instance"
-                - regex: "^(container|endpoint|namespace|pod|service)$"
-                  action: "labeldrop"
+        name: "{{ pushgateway_helm_release_name }}"
+        namespace: "{{ pushgateway_helm_release_namespace }}"
+        definition:
+          spec:
+            suspend: true
+
+    - name: Remove the existing HelmRelease
+      kubernetes.core.k8s:
+        state: absent
+        api_version: helm.toolkit.fluxcd.io/v2beta1
+        kind: HelmRelease
+        name: "{{ pushgateway_helm_release_name }}"
+        namespace: "{{ pushgateway_helm_release_namespace }}"
+
+- name: Deploy Helm chart
+  run_once: true
+  kubernetes.core.helm:
+    name: "{{ pushgateway_helm_release_name }}"
+    chart_ref: "{{ pushgateway_helm_chart_ref }}"
+    release_namespace: "{{ pushgateway_helm_release_namespace }}"
+    create_namespace: true
+    kubeconfig: /etc/kubernetes/admin.conf
+    values: "{{ _pushgateway_helm_values | combine(pushgateway_helm_values, recursive=True) }}"
diff --git a/roles/prometheus_pushgateway/vars/main.yml b/roles/prometheus_pushgateway/vars/main.yml
new file mode 100644
index 0000000..7d46dc7
--- /dev/null
+++ b/roles/prometheus_pushgateway/vars/main.yml
@@ -0,0 +1,29 @@
+# Copyright (c) 2022 VEXXHOST, Inc.
+#
+# Licensed under the Apache License, Version 2.0 (the "License"); you may
+# not use this file except in compliance with the License. You may obtain
+# a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+# License for the specific language governing permissions and limitations
+# under the License.
+
+_pushgateway_helm_values:
+  image:
+    repository: "{{ atmosphere_images['prometheus_pushgateway'] | vexxhost.atmosphere.docker_image('name') }}"
+  nodeSelector:
+    openstack-control-plane: enabled
+  serviceMonitor:
+    enabled: true
+    namespace: monitoring
+    additionalLabels:
+      release: kube-prometheus-stack
+    relabelings:
+      - sourceLabels: ["__meta_kubernetes_pod_name"]
+        targetLabel: "instance"
+      - regex: "^(container|endpoint|namespace|pod|service)$"
+        action: "labeldrop"
\ No newline at end of file