From 0e06c98eb305e9a5d8010bc3072aea66b4dc26ac Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1s=20Limpinho?= <53994778+TomasLimpinho@users.noreply.github.com> Date: Mon, 27 Apr 2026 17:37:03 +0100 Subject: [PATCH] lidarr ollama ui, soulseek --- playbook.yml | 1 + roles/cripto/files/ai-ollama-deployment.yaml | 98 +++++++++++++++++- roles/lidarr/files/lidarr-deployment.yaml | 79 ++++++++++++++ roles/lidarr/files/lidarr-nfs-csi.yaml | 23 ++++ roles/lidarr/files/lidarr-pvcs.yaml | 60 +++++++++++ roles/lidarr/files/lidarr-secret.yaml | 11 ++ roles/lidarr/files/lidarr-service.yaml | 12 +++ roles/lidarr/tasks/main.yml | 51 +++++++++ roles/lidarr/vars/main.yml | 4 + roles/metrics/tasks/main.yml | 40 ------- roles/soulseek/files/soulseek-deployment.yaml | 91 ++++++++++++++++ roles/soulseek/files/soulseek-nfs-csi.yaml | 24 +++++ roles/soulseek/files/soulseek-pvcs.yaml | 94 +++++++++++++++++ roles/soulseek/files/soulseek-service.yaml | 25 +++++ roles/soulseek/files/teste.txt | Bin 0 -> 44978 bytes roles/soulseek/files/testeq.txt | Bin 0 -> 33034 bytes roles/soulseek/tasks/main.yml | 37 +++++++ roles/soulseek/vars/main.yml | 4 + 18 files changed, 612 insertions(+), 42 deletions(-) create mode 100644 roles/lidarr/files/lidarr-deployment.yaml create mode 100644 roles/lidarr/files/lidarr-nfs-csi.yaml create mode 100644 roles/lidarr/files/lidarr-pvcs.yaml create mode 100644 roles/lidarr/files/lidarr-secret.yaml create mode 100644 roles/lidarr/files/lidarr-service.yaml create mode 100644 roles/lidarr/tasks/main.yml create mode 100644 roles/lidarr/vars/main.yml delete mode 100644 roles/metrics/tasks/main.yml create mode 100644 roles/soulseek/files/soulseek-deployment.yaml create mode 100644 roles/soulseek/files/soulseek-nfs-csi.yaml create mode 100644 roles/soulseek/files/soulseek-pvcs.yaml create mode 100644 roles/soulseek/files/soulseek-service.yaml create mode 100644 roles/soulseek/files/teste.txt create mode 100644 roles/soulseek/files/testeq.txt create mode 100644 roles/soulseek/tasks/main.yml create mode 100644 roles/soulseek/vars/main.yml diff --git a/playbook.yml b/playbook.yml index eaff6cb..5b36899 100644 --- a/playbook.yml +++ b/playbook.yml @@ -43,4 +43,5 @@ - mangareader - bookshelf - shelfarr + - lidarr - minecraft \ No newline at end of file diff --git a/roles/cripto/files/ai-ollama-deployment.yaml b/roles/cripto/files/ai-ollama-deployment.yaml index 9a3f0d3..867068d 100644 --- a/roles/cripto/files/ai-ollama-deployment.yaml +++ b/roles/cripto/files/ai-ollama-deployment.yaml @@ -9,6 +9,93 @@ spec: --- apiVersion: apps/v1 kind: Deployment +metadata: + name: ai-openwebui-deployment + namespace: fenix-ai +spec: + replicas: 1 + selector: + matchLabels: + app: ai-openwebui + template: + metadata: + labels: + app: ai-openwebui + spec: + containers: + - name: ai-openwebui + image: ghcr.io/open-webui/open-webui:cuda + ports: + - containerPort: 8080 + env: + - name: WEBUI_HOST + value: "0.0.0.0" + - name: OLLAMA_BASE_URL + value: "http://ollama-api-svc.fenix-ai.svc.cluster.local:11434" + volumeMounts: + - name: ai-openwebui-data + mountPath: /app/backend/data + volumes: + - name: ai-openwebui-data + persistentVolumeClaim: + claimName: ai-openwebui-data-pvc +--- +apiVersion: v1 +kind: PersistentVolume +metadata: + name: ai-openwebui-data-pv + namespace: fenix-ai +spec: + capacity: + storage: 40Gi + storageClassName: ai-openwebui-nfs-csi + accessModes: + - ReadWriteOnce + persistentVolumeReclaimPolicy: Retain + nfs: + server: 192.168.1.22 + path: /mnt/fenix-main-nas-pool-0/data/k8s-Volumes/k8s-cluster-iac-deployed/ai-openwebui +--- +apiVersion: v1 +kind: PersistentVolumeClaim +metadata: + name: ai-openwebui-data-pvc + namespace: fenix-ai +spec: + storageClassName: ai-openwebui-nfs-csi + accessModes: + - ReadWriteOnce + resources: + requests: + storage: 40Gi +--- +apiVersion: storage.k8s.io/v1 +kind: StorageClass +metadata: + name: ai-openwebui-nfs-csi + namespace: fenix-ai +provisioner: nfs.csi.k8s.io +parameters: + server: 192.168.1.22 + share: /mnt/fenix-main-nas-pool-0/data/k8s-Volumes/k8s-cluster-iac-deployed/ai-openwebui +allowVolumeExpansion: true +reclaimPolicy: Retain +--- +apiVersion: v1 +kind: Service +metadata: + name: ai-openwebui-svc + namespace: fenix-ai +spec: + selector: + app: ai-openwebui + ports: + - port: 8080 + targetPort: 8080 + type: ClusterIP # ou LoadBalancer se tiveres suporte +--- +apiVersion: apps/v1 +kind: Deployment metadata: name: ollama-deployment namespace: fenix-ai @@ -30,9 +117,16 @@ spec: resources: limits: nvidia.com/gpu: 1 # garante uso da tua RTX 4060 Ti + memory: 17Gi env: - name: OLLAMA_HOST value: "0.0.0.0" + - name: NVIDIA_VISIBLE_DEVICES + value: "all" + - name: NVIDIA_DRIVER_CAPABILITIES + value: "compute,utility" + - name: CUDA_VISIBLE_DEVICES + value: "0" volumeMounts: - name: ollama-data mountPath: /root/.ollama @@ -62,7 +156,7 @@ metadata: namespace: fenix-ai spec: capacity: - storage: 20Gi + storage: 40Gi storageClassName: ollama-ai-nfs-csi accessModes: - ReadWriteOnce @@ -82,7 +176,7 @@ spec: - ReadWriteOnce resources: requests: - storage: 20Gi + storage: 40Gi --- apiVersion: storage.k8s.io/v1 kind: StorageClass diff --git a/roles/lidarr/files/lidarr-deployment.yaml b/roles/lidarr/files/lidarr-deployment.yaml new file mode 100644 index 0000000..6717dee --- /dev/null +++ b/roles/lidarr/files/lidarr-deployment.yaml @@ -0,0 +1,79 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + name: lidarr + namespace: stack-arr +spec: + replicas: 1 + selector: + matchLabels: + app: lidarr + template: + metadata: + labels: + app: lidarr + spec: + imagePullSecrets: + - name: regcred + containers: + - name: lidarr + image: ghcr.io/hotio/lidarr:release-563b232 + securityContext: + capabilities: + add: + - NET_ADMIN + ports: + - containerPort: 8686 + name: webui + env: + - name: PUID + value: "1013" + - name: PGID + value: "1013" + - name: TZ + value: 'Etc/UTC' + - name: LIDARR__POSTGRES__HOST + value: 'stolon-proxy-service.postgresql.svc.cluster.local' + - name: LIDARR__POSTGRES__PORT + value: '5432' + - name: LIDARR__POSTGRES__USER + valueFrom: + secretKeyRef: + name: lidarr-secret + key: username + - name: LIDARR__POSTGRES__PASSWORD + valueFrom: + secretKeyRef: + name: lidarr-secret + key: password + - name: LIDARR__POSTGRES__MAINDB + valueFrom: + secretKeyRef: + name: lidarr-secret + key: maindb + - name: LIDARR__POSTGRES__LOGDB + valueFrom: + secretKeyRef: + name: lidarr-secret + key: logsdb + volumeMounts: + - name: config + mountPath: /config + - name: downloads + mountPath: /downloads + - name: music + mountPath: /data + volumes: + - name: config + persistentVolumeClaim: + claimName: lidarr-config-pvc + - name: downloads + persistentVolumeClaim: + claimName: qbittorrent-downloads-pvc + - name: music + persistentVolumeClaim: + claimName: lidarr-music-pvc + + + + diff --git a/roles/lidarr/files/lidarr-nfs-csi.yaml b/roles/lidarr/files/lidarr-nfs-csi.yaml new file mode 100644 index 0000000..763d55e --- /dev/null +++ b/roles/lidarr/files/lidarr-nfs-csi.yaml @@ -0,0 +1,23 @@ +apiVersion: storage.k8s.io/v1 +kind: StorageClass +metadata: + name: lidarr-nfs-csi + namespace: stack-arr +provisioner: nfs.csi.k8s.io +parameters: + server: 192.168.1.22 + share: /mnt/fenix-main-nas-pool-0/data/k8s-Volumes/k8s-cluster-iac-deployed/stack-arr/lidarr +allowVolumeExpansion: true +reclaimPolicy: Retain +--- +apiVersion: storage.k8s.io/v1 +kind: StorageClass +metadata: + name: lidarr-music-nfs-csi + namespace: stack-arr +provisioner: nfs.csi.k8s.io +parameters: + server: 192.168.1.22 + share: /mnt/fenix-main-nas-pool-0/data/Filmes_e_Series/Musicas +allowVolumeExpansion: true +reclaimPolicy: Retain \ No newline at end of file diff --git a/roles/lidarr/files/lidarr-pvcs.yaml b/roles/lidarr/files/lidarr-pvcs.yaml new file mode 100644 index 0000000..390a224 --- /dev/null +++ b/roles/lidarr/files/lidarr-pvcs.yaml @@ -0,0 +1,60 @@ +apiVersion: v1 +kind: PersistentVolume +metadata: + name: lidarr-config-pv + namespace: stack-arr +spec: + capacity: + storage: 2Gi + storageClassName: lidarr-nfs-csi + accessModes: + - ReadWriteOnce + persistentVolumeReclaimPolicy: Retain + nfs: + server: 192.168.1.22 + path: /mnt/fenix-main-nas-pool-0/data/k8s-Volumes/k8s-cluster-iac-deployed/stack-arr/lidarr/config +--- +apiVersion: v1 +kind: PersistentVolumeClaim +metadata: + name: lidarr-config-pvc + namespace: stack-arr +spec: + storageClassName: lidarr-nfs-csi + accessModes: + - ReadWriteOnce + volumeName: lidarr-config-pv + resources: + requests: + storage: 2Gi +--- +apiVersion: v1 +kind: PersistentVolume +metadata: + name: lidarr-music-pv + namespace: stack-arr +spec: + capacity: + storage: 50Gi + storageClassName: lidarr-music-nfs-csi + accessModes: + - ReadWriteOnce + persistentVolumeReclaimPolicy: Retain + nfs: + server: 192.168.1.22 + path: /mnt/fenix-main-nas-pool-0/data/Filmes_e_Series/Musicas +--- +apiVersion: v1 +kind: PersistentVolumeClaim +metadata: + name: lidarr-music-pvc + namespace: stack-arr +spec: + storageClassName: lidarr-music-nfs-csi + accessModes: + - ReadWriteOnce + volumeName: lidarr-music-pv + resources: + requests: + storage: 50Gi +--- \ No newline at end of file diff --git a/roles/lidarr/files/lidarr-secret.yaml b/roles/lidarr/files/lidarr-secret.yaml new file mode 100644 index 0000000..e80b339 --- /dev/null +++ b/roles/lidarr/files/lidarr-secret.yaml @@ -0,0 +1,11 @@ +apiVersion: v1 +kind: Secret +metadata: + name: lidarr-secret + namespace: stack-arr +type: Opaque +data: + username: dXNlcm5hbWU= + password: cGFzc3dvcmQ= + maindb: bWFpbmRiLXByb3dsYXJy + logsdb: bG9nZGItcHJvd2xhcnI= \ No newline at end of file diff --git a/roles/lidarr/files/lidarr-service.yaml b/roles/lidarr/files/lidarr-service.yaml new file mode 100644 index 0000000..c8a8ed6 --- /dev/null +++ b/roles/lidarr/files/lidarr-service.yaml @@ -0,0 +1,12 @@ +apiVersion: v1 +kind: Service +metadata: + name: lidarr-service + namespace: stack-arr +spec: + ports: + - port: 8686 + targetPort: 8686 + selector: + app: lidarr + type: ClusterIP \ No newline at end of file diff --git a/roles/lidarr/tasks/main.yml b/roles/lidarr/tasks/main.yml new file mode 100644 index 0000000..48aca71 --- /dev/null +++ b/roles/lidarr/tasks/main.yml @@ -0,0 +1,51 @@ +- name: Remover o diretório /tmp/stack-arr/lidarr/kubernetes-files + ansible.builtin.file: + path: /tmp/stack-arr/lidarr/kubernetes-files + state: absent + +- name: Criar diretório temporário no remoto + file: + path: /tmp/stack-arr/lidarr/kubernetes-files + state: directory + mode: '0755' + +- name: Copy file with owner and permissions + ansible.builtin.copy: + src: ../files + dest: /tmp/stack-arr/lidarr/kubernetes-files + owner: fenix + group: root + mode: '0644' + + +- name: Obter várias notas do Bitwarden + shell: | + echo "unlock" + BW_SESSION=$(bw unlock {{ bw_password }} --raw) + echo "get item" + bw get item "{{ item.id }}" --session $BW_SESSION | jq -r '.notes' > {{ item.dest }} + loop: + - { id: "iac.ansible.stackarr.lidarr.secret", dest: "/tmp/stack-arr/lidarr/kubernetes-files/files/lidarr-secret.yaml" } + args: + executable: /bin/bash + environment: + BW_PASSWORD: "{{ BW_PASSWORD }}" + + +- name: Listar conteúdo do diretório remoto + shell: ls -l /tmp/stack-arr/lidarr/kubernetes-files/files + register: resultado_ls + + +- name: Mostrar resultado do ls + debug: + var: resultado_ls.stdout_lines + + +- name: Aplicar o stolon + become: yes + become_user: fenix + shell: | + kubectl apply -f /tmp/stack-arr/lidarr/kubernetes-files/files/ + environment: + KUBECONFIG: /home/fenix/.kube/config \ No newline at end of file diff --git a/roles/lidarr/vars/main.yml b/roles/lidarr/vars/main.yml new file mode 100644 index 0000000..c8fe60b --- /dev/null +++ b/roles/lidarr/vars/main.yml @@ -0,0 +1,4 @@ +bw_password: "{{ lookup('env', 'BW_PASSWORD') }}" +VAULTWARDEN_LINK: "{{ lookup('env', 'VAULTWARDEN_LINK') }}" +BW_CLIENTID: "{{ lookup('env', 'BW_CLIENTID') }}" +BW_CLIENTSECRET : "{{ lookup('env', 'BW_CLIENTSECRET') }}" \ No newline at end of file diff --git a/roles/metrics/tasks/main.yml b/roles/metrics/tasks/main.yml deleted file mode 100644 index fe05a22..0000000 --- a/roles/metrics/tasks/main.yml +++ /dev/null @@ -1,40 +0,0 @@ - -- name: Remover o diretório /tmp/metrics/kubernetes-files - ansible.builtin.file: - path: /tmp/metrics/kubernetes-files - state: absent - -- name: Criar diretório temporário no remoto - file: - path: /tmp/metrics/kubernetes-files - state: directory - mode: '0755' - -#- name: Copy file with owner and permissions -# ansible.builtin.copy: -# src: ../files -# dest: /tmp/metrics/kubernetes-files -# owner: fenix -# group: root -# mode: '0644' - - -#- name: Listar conteúdo do diretório remoto -# shell: ls -l /tmp/metrics/kubernetes-files/files -# register: resultado_ls - - -#- name: Mostrar resultado do ls -# debug: -# var: resultado_ls.stdout_lines - - -- name: Aplicar o files - become: yes - become_user: fenix - shell: | - kubectl apply -f https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml - - kubectl patch deployment metrics-server -n kube-system --type='json' -p='[{"op": "add", "path": "/spec/template/spec/containers/0/args/-", "value": "--kubelet-insecure-tls"},{"op": "add", "path": "/spec/template/spec/containers/0/args/-", "value": "--kubelet-preferred-address-types=InternalIP"}]' - environment: - KUBECONFIG: /home/fenix/.kube/config \ No newline at end of file diff --git a/roles/soulseek/files/soulseek-deployment.yaml b/roles/soulseek/files/soulseek-deployment.yaml new file mode 100644 index 0000000..de4eb08 --- /dev/null +++ b/roles/soulseek/files/soulseek-deployment.yaml @@ -0,0 +1,91 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + name: soulseek + namespace: stack-arr +spec: + replicas: 1 + selector: + matchLabels: + app: soulseek + template: + metadata: + labels: + app: soulseek + spec: + imagePullSecrets: + - name: regcred + initContainers: + - name: init-tun + image: busybox + command: + - sh + - -c + - | + mkdir -p /dev/net + [ -c /dev/net/tun ] || mknod /dev/net/tun c 10 200 + chmod 0666 /dev/net/tun + securityContext: + privileged: true + containers: + - name: vpn + image: ghcr.io/wfg/openvpn-client + securityContext: + capabilities: + add: + - NET_ADMIN + env: + - name: VPN_CONFIG_FILE + value: "vpn.conf" + - name: KILL_SWITCH + value: "off" + volumeMounts: + - name: vpn-config + mountPath: /data/vpn + - name: tun-device # ← mount host tun device + mountPath: /dev/net/tun + - name: slskd + image: slskd/slskd + securityContext: + capabilities: + add: + - NET_ADMIN + ports: + - containerPort: 5030 + name: webui + - containerPort: 5031 + name: https + - containerPort: 50300 + name: communication + env: + - name: SLSKD_FLAGS_NO_SQLITE_POOLING + value: "true" + - name: TZ + value: 'Etc/UTC' + - name: UID + value: "1013" + - name: GID + value: "1013" + volumeMounts: + - name: app + mountPath: /app + - name: media + mountPath: /data + volumes: + - name: app + persistentVolumeClaim: + claimName: soulseek-app-pvc + - name: media + persistentVolumeClaim: + claimName: soulseek-media-pvc + - name: vpn-config + persistentVolumeClaim: + claimName: soulseek-vpn-config-pvc + - name: tun-device + hostPath: + path: /dev/net/tun + type: CharDevice + + + + diff --git a/roles/soulseek/files/soulseek-nfs-csi.yaml b/roles/soulseek/files/soulseek-nfs-csi.yaml new file mode 100644 index 0000000..ec739f8 --- /dev/null +++ b/roles/soulseek/files/soulseek-nfs-csi.yaml @@ -0,0 +1,24 @@ +apiVersion: storage.k8s.io/v1 +kind: StorageClass +metadata: + name: soulseek-nfs-csi + namespace: stack-arr +provisioner: nfs.csi.k8s.io +parameters: + mountOptions: "nolock,soft,intr" + server: 192.168.1.22 + share: /mnt/fenix-main-nas-pool-0/data/k8s-Volumes/k8s-cluster-iac-deployed/stack-arr/soulseek +allowVolumeExpansion: true +reclaimPolicy: Retain +--- +apiVersion: storage.k8s.io/v1 +kind: StorageClass +metadata: + name: soulseek-media-nfs-csi + namespace: stack-arr +provisioner: nfs.csi.k8s.io +parameters: + server: 192.168.1.22 + share: /mnt/fenix-main-nas-pool-0/data/Filmes_e_Series/Downloads +allowVolumeExpansion: true +reclaimPolicy: Retain diff --git a/roles/soulseek/files/soulseek-pvcs.yaml b/roles/soulseek/files/soulseek-pvcs.yaml new file mode 100644 index 0000000..7bd78c6 --- /dev/null +++ b/roles/soulseek/files/soulseek-pvcs.yaml @@ -0,0 +1,94 @@ +apiVersion: v1 +kind: PersistentVolume +metadata: + name: soulseek-app-pv + namespace: stack-arr +spec: + capacity: + storage: 6Gi + storageClassName: soulseek-nfs-csi + accessModes: + - ReadWriteOnce + persistentVolumeReclaimPolicy: Retain + mountOptions: + - nolock + - nfsvers=3 + nfs: + server: 192.168.1.22 + path: /mnt/fenix-main-nas-pool-0/data/k8s-Volumes/k8s-cluster-iac-deployed/stack-arr/soulseek/config +--- +apiVersion: v1 +kind: PersistentVolumeClaim +metadata: + name: soulseek-app-pvc + namespace: stack-arr +spec: + storageClassName: soulseek-nfs-csi + accessModes: + - ReadWriteOnce + volumeName: soulseek-app-pv + resources: + requests: + storage: 6Gi +--- +apiVersion: v1 +kind: PersistentVolume +metadata: + name: soulseek-media-pv + namespace: stack-arr +spec: + capacity: + storage: 500Gi + storageClassName: soulseek-media-nfs-csi + accessModes: + - ReadWriteOnce + persistentVolumeReclaimPolicy: Retain + nfs: + server: 192.168.1.22 + path: /mnt/fenix-main-nas-pool-0/data/Filmes_e_Series/Downloads +--- +apiVersion: v1 +kind: PersistentVolumeClaim +metadata: + name: soulseek-media-pvc + namespace: stack-arr +spec: + storageClassName: soulseek-media-nfs-csi + accessModes: + - ReadWriteOnce + volumeName: soulseek-media-pv + resources: + requests: + storage: 500Gi +--- + +apiVersion: v1 +kind: PersistentVolume +metadata: + name: soulseek-vpn-config-pv + namespace: stack-arr +spec: + capacity: + storage: 10Gi + storageClassName: soulseek-nfs-csi + accessModes: + - ReadWriteOnce + persistentVolumeReclaimPolicy: Retain + nfs: + server: 192.168.1.22 + path: /mnt/fenix-main-nas-pool-0/data/k8s-Volumes/k8s-cluster-iac-deployed/stack-arr/soulseek/vpn/config +--- +apiVersion: v1 +kind: PersistentVolumeClaim +metadata: + name: soulseek-vpn-config-pvc + namespace: stack-arr +spec: + storageClassName: soulseek-nfs-csi + accessModes: + - ReadWriteOnce + volumeName: soulseek-vpn-config-pv + resources: + requests: + storage: 10Gi +--- diff --git a/roles/soulseek/files/soulseek-service.yaml b/roles/soulseek/files/soulseek-service.yaml new file mode 100644 index 0000000..6ef5eb4 --- /dev/null +++ b/roles/soulseek/files/soulseek-service.yaml @@ -0,0 +1,25 @@ +apiVersion: v1 +kind: Service +metadata: + name: soulseek-service + namespace: stack-arr +spec: + ports: + - port: 5030 + targetPort: 5030 + selector: + app: soulseek + type: ClusterIP + +apiVersion: v1 +kind: Service +metadata: + name: soulseek-communication-service + namespace: stack-arr +spec: + ports: + - port: 50300 + targetPort: 50300 + selector: + app: soulseek + type: ClusterIP \ No newline at end of file diff --git a/roles/soulseek/files/teste.txt b/roles/soulseek/files/teste.txt new file mode 100644 index 0000000000000000000000000000000000000000..6b87330866752462c396702a584ea7d86d923792 GIT binary patch literal 44978 zcmeI5OK%+4mB%aF0QnBRF(4xrN%1KP$b*t)TZk+XqUB&L7y@6C81rR5M9avR$b5yY zW-+^2&1R5A5@hd1KEZ5eHG_dMn8jrNzk7IGx2tYf-+r>mG#c!#uC6-wyzjZ^oLl_c z|NX2O?&~MTkB1ELXGM3It>SgDUz``a#hKm@i&j@0y2I?9FP&kwicgEpVn_J3ii=`T zSiaHGcg0_e|1AEc_^0BJ`nFZPYrwk>yCoQBdL0+1#l2!yuh*B5&jo9y*e;HW1D*X^ z;~o@uiuoG!I?Uc_uHG>!n81A&WP2zo4@GOMcq@LMi26NIip=-L<1?K*)jRw=*Dw3w z*nXcc=EQ~N;P@Ulix=6nAy*3&FT`$;E@f*_Q5|*Kb?8e^W>A z>k5PXIN)?%e4{f<0Rr!H8sko}5=MM2ybc4tdx8n%Zv<(%c&WcdL4rR1{<-+aAN_an zzq(>WS3}4B;;ATqR6Hp@F4lGYSg)5leq1~+9t!{G`sIPne=40fY|iwFcI=A!V;z|$ zYz6MLiZ#J%iAVdoieEQ{*G@R|MjSiS@sV^Cexjvtl&iOObfBXPLEQ>Ghto0E-xvR? z-=FC0Zh+_G|3YWKEB;pemp(rfpMZ6)cb6N#_o~V0dTj5r8nF)fRN4>EFZ8*sF^=>) zy~G+m|E2gJjeTF(ye|aqV=(+W+<7RRuz?xft_a;#i=oeBmTd8&8pH1YC5Pdn;%I)`_kjiEeBO@4KaUbQulgJ37witAOK$emM!cWFCfV zPA>h7!`u`!u6rj4txGuAkK0i@B(A~I7;|68hx&y7oHsi?)(CqV!+e)h*wR_90(bXw zh9&bGn^nAoSZb~{xYDZev8{T-wkK_Ye#S8J_ zNK!Eid0l*|bIiN11pQpl@n(L7%iTD7FHnnZA#<+Z)=^7;=*V30fsU~?emD8I%2U;eKL1&-KHdme|s&e%o{$EuBNVE)E%+zpdDB{vA|ow9VQ=QJv6GI6b#|Ye$c3| zbc6<%JaPI*g~^`0gyYaYa-F+#(sQ^yeq5Lf?n=t{^qLKGcK!wNSibvRi!bpH3&GlX z&)2~!m!4__r2V-(0yA2DlzG8l*54hy_bZE!Dms=L2g^GXFU{*RBfZs_GtzU$zSH;E z8={YuiAfx|Xxc%DPfny?_X6baitmfxD>D4P`19p^>j$2o5itb2xsPR;dAE97#S3(un8yHI3yuYI6?$8NI+-P2uxw*`l_K$CQB#L{cD+q_FLroZYvo&+yLgpb`HX+|qYE#qx|uWA@`2(+5d^RfK1 zY0T$=Q{^~S$Uf`&T;;!GGpsA&H8x`&CiYw@UN>R#QQ)tyU~E>5c}`Rb<*e?AXrXsj zM+Z7npOf2HF+h9yg9N)_R@H_Ffl6j-DBaWe`{G)&e48jWo)fvo{`qdPs@U+Z@-OpU zpD{{uH39(^x!RCv0f0gpYNDgZ!15K`w)v#sC@HN2qc+4q_t)t4fN6IvQ8dkDo zvv-1BV=c@V?e^?Y9BN9(i8af=m@BEftK1<~_5%OuslX_Kqd!wQpBc+Fy6Sa7?^K6s4^SL~g#dl=7$?se2S7sgYg5|n_ z+CaPi>JMtwTf|yRV6wguN0mInFQW!kYb!7Z4`oj0t*9WQl$kM$Hx=W_^ zsOvcJZ%1QUZW*u73`bUiG0jusVO!GKMd33i9?yy6Rs5?oyF|(2kh3(nWlp-Yl$$)w z{lLlXf*FsM&C>t7kfz zR}v{04?`^J+2=GTxUY);Bgwx#gVH>96E7Z1Z>Vav&+uq4u{au&!rbp_9yf)%-`U%E zZXr3|rpm1cvH-Fh=wI&qo1(cl-`QyvOYx+?*(-%3)ix~5Vz2JfsYY5G!R9SOv)nv> zniZ6i>aV>b z$vj<+kz!a?jY)Mhq+p~ZuyN_*sJfwdr8JlsTo2>ft&DE@m3pzwhgNlk|1lSv@Gc?Y z9ZJ4pJ)P#h*f&&p+8*7du!!%jazyWLc2t$XsOx#JV9i9QSK0kU34>d9cP9`&dXG?L{> ziL-3HUTCgr2i+&#y#sMEadZ26HYFRI8L&Mfj&@nbT3^M(vVLfY<$1^omw82tW$GEI zY9|METD&Gb8}NzyUdx+VKCwNkoYr5s$~f(H-&pTsYw3*&>H%QqF&^4Q1)vl3s(z+& zlxQ9_V|UiAWBTt|Nt0MgQX7FQUT^D1bBUhdR(n>kDibWiH8if!L3IkRr|QO_(`xYTPN1b*@+GXctmltN%V!=w%aSUubzRbjMV5n#!m4<|Ts|x+trvqHOtaL(khk*4!|HFhL>n{^ zae2?A_41Dvi zB2lYZct2jQF6U5SyF_MXN2~{IWlWD8)>+oM%f2vVFwF61#kVbucPQV=IwZCzi<=y$ z7#mw(9Eexvy5o*~p0D|GtSg5v{o^%S?zlhnOl*of)*Vfa6%TLU7UTu3LmH2S{sD=V z5|L1=_-T()E%#l#5UjXoFg1%44SNQ|^EQ?b#G=XHl=M*D!Sb!%7DuZyI{%5TC2qDn z2=f_!Hol(hA!E_a#SCM4llrLE$5d(+u*lzFpX>_2Ld^y^7vo`FA@I$jr8t*G^^Dot zvz}NEmhR_$Rwz464BK7BEpU<83LDGs@Xpa@%a8a<)j4h%Ds+LF%4Xn`9`(Q@A?D?} z9>o5ec;;Jir_B3ph*ICTWd4R(fUYz0PR57+t*LWY3mQu7i?`;T+8XltM&F1Wsdn4l zt`n>mtd|viLhfG)L-zRKu}pu7x$syPCsXsx#eJnV(=_95ei1$z?jE7@9j?WDRJ>Ek zDROM9^s>tc31N>uI;){o`PTmF*bzpjVW#)GHMo1eFmIjXRk|F{Ugu#CD?L(URue~fwi^VC$Lm?-!y3nZlFvZZJ+!Rd%2>$OZ)WdQ zmFN$}{w=;r=j&KOmE+lbTUM9()nYJaXCPP)3Ep`xVA?)9*E2F%6>_k2%L0L}DY6dq z?6967Qm)^L54Ks-tDk-bDzj4iptE+)P^s%dBDt<&B-7%dX zDyHe4icT2jMFmR=*9j->v49hx3qKJvWsN%o+!)M(psITK0FM^55rZ@bRW4ks;e9N?S6m=SIJ;L z4;jm+x_cNh!y1Y7E%RzSf4awJ&aK$1l(7!0AMBSn#=8qxIeE7SJ)XzGwz^$eX5q^H z^0opdlJ)K<`htloeQj9HJKa)Lb0ELNb3A;Vi03Q&eJnykCicQJuE^$(q-Wm>@*5p5 z>5h3}PT%Oa`ei}a9O!RHaF+Cr$2b+ut2(=+t9bSZSupnIEGRPshxZjHtmxM_As!+U zWR4=H!h5j}nb94rmS%JftEXKZ;f08`@V~ZBfq!^5YFzQIbjy-1gb0h7;&$=#%d1lS zYKO}=Tl3*h%XOWvajomso{-YZYVPLh%JtR~vTQ`{^HVJec9gP^VR)2LXvu}7b}Uar z)b>uE=dC=0MF9JvVNUOF6nl)quK=CO;nc4X#a*Y_XPjEXQ}w8JO||5@X~}}tD_==+$MPVo zCw8x59h1tHs%>p=n1(Cx{O!#P6r~-HR-L}IFHIvcN-6a z1vL@x)utLy@5mi3x4c?d-&rxP&Xjr0`=$#EeO1|;{ZqPkdU+(h)1#GC-S*o&4Tuds>F~P7~D+qj%c57uUe+cvoYRY40@M z8}w9rU3pl&(=Lx@A3Xft>AZ0tiC*9PGRofR6gJ)gOn(#qmBTwR-i4WGa(btUy1tNR z#1g#vn1KIHK}6WkoApy8rTmU+qsDg5#Itdk_n7v%GUxQt=h|EM=vDN$_ScD< zYa8`_Sfw^y*FM+SPU1PXr0lx(xpt?l_deG=nD+Fv+-zzmnB&W)cEX_h%H^hIQ}a17 zIoZ^FoUbOEntpZzk@G@N`P6(mN10C@6pQZp)baBxm4jq=9=n0o73Z>_bF|NI=vN!+ zYs0$Fn$#?$X;Kaaqsc<%k6+KTS>(vGd~HRSdPYINPjDCqUbzupj&$nW$*W(1 zc%uEFS;&}s@w%sO7t<`{IG*4T%Oj4j>+%?G7BYX_abzJoVbh!~nv5)@;a-34Kr`-> znd##HU6bjGJwv(Dn`T6&84=r?oHswZHpPCe)TZm45oxCEI%h-imKL?(H3jyfYU2p0WjLC|PpisQwPr@^^|xWa4V4m}jb%?0o6$FWs`|d}q@LN!vjwPj zvK#p7cVxvDaq}e1b8N;fTlRYMB&)06zk9P~>-%?`B|KcKT@HN;%U8Zf;bu#=o7E0i zro_!F^2JxZ@8o97G|yTGd0LOnr&qs!=w{2Yn{5sv!DU57s}r!NG?rkTsj07J({;eP zG1dVGi|L!Go8&rR-uh{Db-=vw>y@ri*8xY3S8kp&ClgfXPA_%9xC%JK1U<&tfcSkR(pL;2EnfsHo=`P26 z&>x+<7s2$g-rdkFiAk+#)@!p@FBSVgMMx@tPlZY4>UW6Lb&UKT&&^)as}~((KSQ;K zG6}NbIkD{dTkVUQct$Pjozv?1w0ho4^*m)8r8ZsX>UlF|*SUJ$Oj&=`^X@Qvub!u1 zj<l>+TxlBRvv?xXf%o)JMqMij304k#Fv1t zz={PsR%{RpKaKD<&OPVc^S-Cb|M~a# z!e~F=3Ev(u#P5Z{Fni%y*a^pBGaTu6FZ2fDFc@ZczMKuS7w(29;i>TJg_E!?ET3!d z%kby$xA5!m%kX>swH`iiz`G8+Cm2WiybOn7DNO0}>=g2`U|kCvVL$BZ=w}*tH_U|D z8uU8M?lf2L7#B?7-j8#;Co1-4;wBzZRtV@QJ>CL4rQMzY0J9)<43(bj1T*4IMYb zJyE_AR>S*YP5XEB`9%A7!lQ6o_&?H_TRMJMGH=)%X^V7hiu#w@Gf7yF-06j7!Rm=e zJGzRqPlVUgc;vY_cBK7%$te6pO5rG1Z)k5?!VztQxZeEc8i z=$GL?;qThMD?S11Sie4RobM{h$a<>pQyQ@j`B2gi&rh`7&=~vr9G+qgpZ^s8sj+Vg zn`gnW{6+Y!jzGhSwp-dl|FNWOGhT6iJi+o%5RuYm?EVmb{8mphyek}#V=(+I-nl27 z(1B|@w;|l02-_cO>sPw&yFC3N{7jHO(3mCYx+R>CMIX}Y zS72?o;?+p_lKz5g$n8PAenWdbeUbC&@Q(K3CFf5f2YS-pX>njy8fsf?1J^wfHOTL? zC|_vLigYt~eP4GMItG^5lAUPlUkUCg`G7{Fr#l+asDe^70Iuvr>R)KD%oC@7T$pT2 z3LJ;>$aU^cOGe=K#p8mmFKCvR^qGn_d3YSQ#Az%BQnaHFGK%$oBFkyB@Jv$0r|lRw zYFf}dhFM_j%!WSLnnTSx`hnyPKPsLTU4A0T-;8u^L`u;b_sVtKjLkiG82EneYu4y3X8Ep*$wQwn2P3YJCx%ZMqOUydKJ4|7r5`E4(Q)w#K+5t!`{ zWf4}hqs$8ayuLH~9hQ>!Dl(R%2F*Jy_@fim$lC~TD&w=D? zDMJ1-d=-8n&;M2UbmvP+#=hv-j*@W@$8Lhv1anoq z!51>~z}*&Hv;V25aNG4H(WMmIrV-$jOFmq}18)irl$!=LbHZW!wuv)G(PtYqM0UvF zD{c2mymd&v%|X1cd&wotcf%dLN>9Av$dM=_F52k~cTM*n=zjA+2hl#F=WaQGZk`dY zINy+to@hgYb9_%J`KlssRb5Qsj$%GcUh@*WCJOdNEk1c)bV0=V6Y>OPrBtk6K9eez}o2Vqu~ zhFg(JaI(w<+fcRXRbDqyYCK1(Q~SIS78M&VD8HT^FpnwhDz0mSNi=j4={Ko(9Ow8* z@k~m2&NAlg$=QC)X>J3l9*bC%kYdyX&w0kI=jmy>yFFK$p?qETsctE-ZZ^kcJb0LL z-UpwoRybXn^(OkP{?t<*T8{9LDBxj5vG`}rSydK4l*Sw=C!i`pO_2H@I*crszbMJx<9yL_^d^{wUi~uaC?2BWJmhLU-n0?MOLVFt8&3aXO zyHQb$k(0xBl}A31OgBeRxjP@pQdxXQ#7_OzVn5!fMDxRZ)4~D6Z!|2j=78<3=Lfm_sM5WPvfGnK*dI6!{Cldg@Et@} z*i-T%iyO>RV_|!e*?z1d?n+wAc?x(`Y4#bVibKuP;M%H2^DH-6nwyc68v&0;WKOMV zBjQWFJWs%)i=)s z^72x}e?@a%uAnrJ-NcJKk{ed7${rpGCKgBHbC~;G&Ew`|%WHkj1v)F6!>{KJI2fE)Y99EmhPLn~IO{;Pc?PZPf zhN2?YBKYDV7f(NfEapRDdl0L($RW2I3kF*U;$q_F zaz2}z8}kh49uY@*E>o$m;$c-kbj#{IRE3MWqQx@x3RHEao^@KRCTsHWiThX&vwC8= zs+^Z!xXL)?b>CF(Q*G%+1?vG|=P@4AMRoNo=vDd5)hLlXXh!d>8^dC6k40?8ax?WH za>du%hLK#NC%9Fv3RdR?nRE#~)Li%q9aQJ=x)<}2WkD`h)4I#GRmgpPlIr-1>f`3= z@{(NTb``?=SqM1_)-)rw8oQx6vDN$T6xe-dN&Z>2SJvfHd1{NFWg@J^(8~k1bn~nU zdw2%aG@48`xz4vb^=0VT>tjLm5vpFTNyE0K)2VK=pVHfW?@L8FL>Q@cIqU8!UAfrA zWw?6nhf(Ie3+XJ~N^z}1sQaQKt7y~PQe8Rzf9-8)!v~94JvJ^ZYO&tpQL$~OPW|9; z^MFQEhe$g(%GQAxnk<%HIa`Y%zg>^M;z+uA-u@1!&?x?Y>2j(|LK@i@@hJSDx>1da zEQTGFCk-bP-uqXM=fEU?rU}Exve-*nZz{)Z!{L>a)j~F1V?4??yG%q=bRnEqR?FQ6 zaHP6Il6JiGN}aD)qaJw_aW&5Bo;2yTdS`dFrB9U=tq1zt(cYCeukJdA5=kBTxa!SX3q`bhp3hm6YdM%d~f7mMEaC1@T1X8*#TSB%)?qQLi zdmXE&Ik%if`j6-zp4as^^j(%8rqji7dPn<4FUP0@SOn?ktNqPsKV@CR>NwjP%G7DM z0k``fs&Lq*KRa}mYUNow8NFF!F|Hds1ZK$&~ zSUQkCiBjx6!&FH)$}Cj7_@Nk24c%8_w?FGvZ^vs_#gB9i8rfl1ZRNsxK`pOrBS~#2 zuxA0Lq)lW6mLH?7=xDLpP3MfQU!$pQ^{LJHQ{vltv<_4HC3nF3nO0f!8CgEBVT_6|!{aqx?zmO-dTfq6-Xm@GUi*vHLhF;pDj|PBB3~jN>V@xioYfyo zUhclj|Wv8o_CZ9P~<8FW!oEY=h}s@;@*=ZOT1p3NuX)v&ec z_0$j52=69Pyme6yG-t!S}^hR^oeCz^w% z`*HUSMW2abyQ$~}4I{!r$J+OKx6v}Il6b!A9Je|Z{KZ?DA3o?P2ObaMo!v$ha*$eZ z^!f{Nr>Oot5T*WfirE|d0KI2apNtQ~Ytz}iEl4O4FxHx1R@j)I*ZPb2ku`6-+hu~R z!8%%zC+7WyFzo4CESAYHkrx)rqGeV-+v2`h^P|nUn_YyDhP%h<{0-OACsn*($tiMd ztMt;v%nYHAJ~}zkqHOE%bUYPChtb#j>NU7~)v#T*<7;(oEPI`k1qS9vpGNKU=hu*V z=VBhiBHpk*2b*(r-{9r?BhEAP1-|}F9kC_0(eb3t%=q5vh-5lFR$HV-X{#p%huh*r zr_M)$nCf*tS4E4MlWA?=kMTIYqdYAzC9NoGg?M%M?I+@z$M-ztcvJV9_E>g1BU!P& zo$JD5R%fA_XDE60fexa%@XlMmYpq*Env+M3t;mv@%yyz?PQ0BwYUX4k$h_t{Q)AD| zPL`x0|JO7#P}N1!=5*gA&JA?|YcU zTzXe(CRcChQ0=BS{ZlKDW=BOdOvGSW1N8y-=N`S0uaJ*f9FFHBFY`RYDrDv>S(l~5 z8sBNTNxtH}q$`T?ELJV*;heSng~%2N)`dl6vmG%lkIwasOkI*y4EoK1z_Se0?dWt|0>jQ75bQO0Jv2SXhwQ{2M!5Get6vN!= zVbR%i7N+eYYL}+eLl)A++X(&={wkWuqsT@)PNPEH=G`9ECw#8P>e`FQU5g>t1&2%l zS)Gcq_?fnOY2(cTZEHi#l)bC!J8x9Dr>Yd|0&9vcSGBhse^+8%pZ8d>`oF5G_U(A2 z7k;8^AL-}^y7I$#{=R;x&)dChAIA4$+>Xa?$E)t^KC0F9Cp=Kxdox0WtE>S$(j6<> zTWy&IHB*K*k|o>Pg*`hrIInS-sZ}ZR1S$vUFFAns=TLR93JLkjQ;mmi4Z5mRr35m})357JprPUdx$YSs3N;`CkF9o}@}H5M#i(J^P)1#?1`WJmI6L&5S|b`R&UX;jkEH#$(mh6_Ahc3s$C4c|Y# zD#xiZT>i3336`{|hInPjI>znoFdvh2xtEJ|OJf+l_;Yr`t@j4aTCEX6ovg=d#|F6vTN#wjb~@H=SvK16h-8`J*{`l^2@LaYzZZF?`RZl#EkK#%ED3E=HkN!rSB)FJ&c0ao;@evo3%0 zQt>OjB+s?oQsjCfFEkFj!n3njmP@4W-;Xs0h_r6KQ|?5K8A5z576K=kO% zi%)Zxc4e$SXdF@PMS36Bl6l9%rS}=9_Zf$jTx^ECC@GmNTavHP7i%xJ)-!z7|6=>~ zy^@$xRqyS(r>K94=f^t%4;+NGE0=u5|53r}cGK8i~?|@6vbvr7OmR zJ@{ppKD`cf@B3QpsJirhKAQD>^j-Sx#$6G;{+!h~yYzF|c&|C#K>U{v?_2mhdY;MY z(x)<7wbaeHPiB{Xjt=h|sz0TCQT^Slj}sU2-*vilb`m>QXJrzo!K&Yo#B`%&wnj_Q z<>P%TSjFg$Na&Gs$z=FltGboET>>URE;uAs@A z4SO<}b+B%osn>Nq)TBPN=)Sw`<-}85_Hx?$-v;;axiqB_Kp{=vV-*9^~t#o(IZD7iI>&*e}Vv1bkEJI2=a?CtB%6X+eM3clDnQy|V* z(s#NRXVk*ZF&uHQCFG?&vGJ<@reSx%zyJvZC8%-0@d*&&H;? zDmn=jUB`VAYljx$@J6t<)hefE5^HZfCudQ6+b8y&8mqmf+SM#q7h7%b$EQL63(NT@ ABLDyZ literal 0 HcmV?d00001 diff --git a/roles/soulseek/tasks/main.yml b/roles/soulseek/tasks/main.yml new file mode 100644 index 0000000..9347d59 --- /dev/null +++ b/roles/soulseek/tasks/main.yml @@ -0,0 +1,37 @@ +- name: Remover o diretório /tmp/stack-arr/soulseek/kubernetes-files + ansible.builtin.file: + path: /tmp/stack-arr/soulseek/kubernetes-files + state: absent + +- name: Criar diretório temporário no remoto + file: + path: /tmp/stack-arr/soulseek/kubernetes-files + state: directory + mode: '0755' + +- name: Copy file with owner and permissions + ansible.builtin.copy: + src: ../files + dest: /tmp/stack-arr/soulseek/kubernetes-files + owner: fenix + group: root + mode: '0644' + + +- name: Listar conteúdo do diretório remoto + shell: ls -l /tmp/stack-arr/soulseek/kubernetes-files/files + register: resultado_ls + + +- name: Mostrar resultado do ls + debug: + var: resultado_ls.stdout_lines + + +- name: Aplicar o stolon + become: yes + become_user: fenix + shell: | + kubectl apply -f /tmp/stack-arr/soulseek/kubernetes-files/files/ + environment: + KUBECONFIG: /home/fenix/.kube/config \ No newline at end of file diff --git a/roles/soulseek/vars/main.yml b/roles/soulseek/vars/main.yml new file mode 100644 index 0000000..c8fe60b --- /dev/null +++ b/roles/soulseek/vars/main.yml @@ -0,0 +1,4 @@ +bw_password: "{{ lookup('env', 'BW_PASSWORD') }}" +VAULTWARDEN_LINK: "{{ lookup('env', 'VAULTWARDEN_LINK') }}" +BW_CLIENTID: "{{ lookup('env', 'BW_CLIENTID') }}" +BW_CLIENTSECRET : "{{ lookup('env', 'BW_CLIENTSECRET') }}" \ No newline at end of file