From 66274c067a9a5f59a4cea15fafd36fbe3cf1e998 Mon Sep 17 00:00:00 2001 From: guipguia Date: Fri, 16 Jan 2026 21:51:01 +0000 Subject: [PATCH] =?UTF-8?q?feat:=20=F0=9F=8E=B8=20support=20to=20ytd=20and?= =?UTF-8?q?=20monitoring?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- playbook.yml | 2 + roles/argocd/tasks/main.yml | 24 +++++ roles/cert_manager/tasks/main.yml | 32 ++++++ roles/monitoring_storage/tasks/main.yml | 127 ++++++++++++++++++++++++ roles/traefik_gateway/tasks/main.yml | 22 ++++ roles/ytd_storage/tasks/main.yml | 89 +++++++++++++++++ 6 files changed, 296 insertions(+) create mode 100644 roles/monitoring_storage/tasks/main.yml create mode 100644 roles/ytd_storage/tasks/main.yml diff --git a/playbook.yml b/playbook.yml index e3e3e01..0c07021 100644 --- a/playbook.yml +++ b/playbook.yml @@ -17,3 +17,5 @@ - traefik_gateway - cert_manager - gitea + - monitoring_storage + - ytd_storage diff --git a/roles/argocd/tasks/main.yml b/roles/argocd/tasks/main.yml index 3f6c10a..272c5cf 100644 --- a/roles/argocd/tasks/main.yml +++ b/roles/argocd/tasks/main.yml @@ -43,3 +43,27 @@ backendRefs: - name: argocd-server port: 80 + +- name: Bootstrap App of Apps + kubernetes.core.k8s: + definition: + apiVersion: argoproj.io/v1alpha1 + kind: Application + metadata: + name: apps + namespace: argocd + spec: + project: default + source: + repoURL: https://git.svc.pguia.com/guipguia/argocd.git + targetRevision: HEAD + path: apps + directory: + recurse: true + destination: + server: https://kubernetes.default.svc + namespace: argocd + syncPolicy: + automated: + prune: true + selfHeal: true diff --git a/roles/cert_manager/tasks/main.yml b/roles/cert_manager/tasks/main.yml index 4012de9..55b9f33 100644 --- a/roles/cert_manager/tasks/main.yml +++ b/roles/cert_manager/tasks/main.yml @@ -80,3 +80,35 @@ kind: ClusterIssuer dnsNames: - argocd.svc.pguia.com + +- name: Create Certificate for Grafana + kubernetes.core.k8s: + definition: + apiVersion: cert-manager.io/v1 + kind: Certificate + metadata: + name: grafana-svc-pguia-com-tls + namespace: traefik + spec: + secretName: grafana-svc-pguia-com-tls + issuerRef: + name: letsencrypt-prod + kind: ClusterIssuer + dnsNames: + - grafana.svc.pguia.com + +- name: Create Certificate for YTD + kubernetes.core.k8s: + definition: + apiVersion: cert-manager.io/v1 + kind: Certificate + metadata: + name: ytd-svc-pguia-com-tls + namespace: traefik + spec: + secretName: ytd-svc-pguia-com-tls + issuerRef: + name: letsencrypt-prod + kind: ClusterIssuer + dnsNames: + - ytd.svc.pguia.com diff --git a/roles/monitoring_storage/tasks/main.yml b/roles/monitoring_storage/tasks/main.yml new file mode 100644 index 0000000..aacc085 --- /dev/null +++ b/roles/monitoring_storage/tasks/main.yml @@ -0,0 +1,127 @@ +--- +# Create StorageClass for manual monitoring volumes +- name: Create Manual Monitoring StorageClass + kubernetes.core.k8s: + definition: + apiVersion: storage.k8s.io/v1 + kind: StorageClass + metadata: + name: manual-monitoring + provisioner: kubernetes.io/no-provisioner + volumeBindingMode: WaitForFirstConsumer + +# Create monitoring data directories +- name: Create Monitoring Data Directories + file: + path: "{{ item }}" + state: directory + mode: '0777' + owner: root + group: root + loop: + - /data/monitoring/prometheus + - /data/monitoring/grafana + - /data/monitoring/alertmanager + +# Create Prometheus PV +- name: Create Prometheus Persistent Volume + kubernetes.core.k8s: + definition: + apiVersion: v1 + kind: PersistentVolume + metadata: + name: prometheus-pv + spec: + capacity: + storage: 50Gi + accessModes: + - ReadWriteOnce + hostPath: + path: /data/monitoring/prometheus + storageClassName: manual-monitoring + +# Create Grafana PV +- name: Create Grafana Persistent Volume + kubernetes.core.k8s: + definition: + apiVersion: v1 + kind: PersistentVolume + metadata: + name: grafana-pv + spec: + capacity: + storage: 10Gi + accessModes: + - ReadWriteOnce + hostPath: + path: /data/monitoring/grafana + storageClassName: manual-monitoring + +# Create Alertmanager PV +- name: Create Alertmanager Persistent Volume + kubernetes.core.k8s: + definition: + apiVersion: v1 + kind: PersistentVolume + metadata: + name: alertmanager-pv + spec: + capacity: + storage: 10Gi + accessModes: + - ReadWriteOnce + hostPath: + path: /data/monitoring/alertmanager + storageClassName: manual-monitoring + +# Create monitoring namespace +- name: Create Monitoring Namespace + kubernetes.core.k8s: + definition: + apiVersion: v1 + kind: Namespace + metadata: + name: monitoring + +# Create Grafana PVC (needed before Helm chart runs) +- name: Create Grafana Persistent Volume Claim + kubernetes.core.k8s: + definition: + apiVersion: v1 + kind: PersistentVolumeClaim + metadata: + name: grafana-data + namespace: monitoring + spec: + accessModes: + - ReadWriteOnce + resources: + requests: + storage: 10Gi + storageClassName: manual-monitoring + volumeName: grafana-pv + +# Create HTTPRoute for Grafana +- name: Create Grafana HTTPRoute + kubernetes.core.k8s: + definition: + apiVersion: gateway.networking.k8s.io/v1 + kind: HTTPRoute + metadata: + name: grafana-route + namespace: monitoring + spec: + parentRefs: + - name: main-gateway + namespace: traefik + sectionName: grafana-https + hostnames: + - "grafana.svc.pguia.com" + rules: + - matches: + - path: + type: PathPrefix + value: / + backendRefs: + - name: monitoring-grafana + port: 80 diff --git a/roles/traefik_gateway/tasks/main.yml b/roles/traefik_gateway/tasks/main.yml index c6714b9..25188de 100644 --- a/roles/traefik_gateway/tasks/main.yml +++ b/roles/traefik_gateway/tasks/main.yml @@ -111,3 +111,25 @@ allowedRoutes: namespaces: from: All + - name: grafana-https + port: 443 + protocol: HTTPS + hostname: grafana.svc.pguia.com + tls: + mode: Terminate + certificateRefs: + - name: grafana-svc-pguia-com-tls + allowedRoutes: + namespaces: + from: All + - name: ytd-https + port: 443 + protocol: HTTPS + hostname: ytd.svc.pguia.com + tls: + mode: Terminate + certificateRefs: + - name: ytd-svc-pguia-com-tls + allowedRoutes: + namespaces: + from: All diff --git a/roles/ytd_storage/tasks/main.yml b/roles/ytd_storage/tasks/main.yml new file mode 100644 index 0000000..0c67559 --- /dev/null +++ b/roles/ytd_storage/tasks/main.yml @@ -0,0 +1,89 @@ +--- +# Create YTD data directory +- name: Create YTD Data Directory + file: + path: /data/ytd/downloads + state: directory + mode: '0777' + owner: root + group: root + +# Create YTD PV +- name: Create YTD Persistent Volume + kubernetes.core.k8s: + definition: + apiVersion: v1 + kind: PersistentVolume + metadata: + name: ytd-pv + spec: + capacity: + storage: 50Gi + accessModes: + - ReadWriteOnce + hostPath: + path: /data/ytd/downloads + storageClassName: manual-ytd + +# Create StorageClass for YTD +- name: Create YTD StorageClass + kubernetes.core.k8s: + definition: + apiVersion: storage.k8s.io/v1 + kind: StorageClass + metadata: + name: manual-ytd + provisioner: kubernetes.io/no-provisioner + volumeBindingMode: WaitForFirstConsumer + +# Create YTD namespace +- name: Create YTD Namespace + kubernetes.core.k8s: + definition: + apiVersion: v1 + kind: Namespace + metadata: + name: ytd + +# Create YTD PVC +- name: Create YTD Persistent Volume Claim + kubernetes.core.k8s: + definition: + apiVersion: v1 + kind: PersistentVolumeClaim + metadata: + name: ytd-data + namespace: ytd + spec: + accessModes: + - ReadWriteOnce + resources: + requests: + storage: 50Gi + storageClassName: manual-ytd + volumeName: ytd-pv + +# Create HTTPRoute for YTD +- name: Create YTD HTTPRoute + kubernetes.core.k8s: + definition: + apiVersion: gateway.networking.k8s.io/v1 + kind: HTTPRoute + metadata: + name: ytd-route + namespace: ytd + spec: + parentRefs: + - name: main-gateway + namespace: traefik + sectionName: ytd-https + hostnames: + - "ytd.svc.pguia.com" + rules: + - matches: + - path: + type: PathPrefix + value: / + backendRefs: + - name: ytd-api + port: 8080