--- # Prometheus metrics collection - name: Deploy port-forward service become: yes ansible.builtin.template: src: templates/port-forward@.service.j2 dest: /etc/systemd/system/port-forward-{{ item.cluster }}-{{ cloud_provider }}.service mode: '0644' loop: - { cluster: 'karpenter', port: 9093 } - { cluster: 'cas', port: 9094 } vars: kubeconfig_path: "{{ lookup('vars', 'KUBECONFIG_' ~ cloud_provider | upper ~ '_' ~ (item.cluster | upper)) }}" - name: Start port-forward services become: yes ansible.builtin.systemd: name: "port-forward-{{ item }}-{{ cloud_provider }}" state: started enabled: yes daemon_reload: true loop: - karpenter - cas - name: Wait for services to be ready ansible.builtin.wait_for: timeout: 30 - name: Fetch metrics from prometheus ansible.builtin.command: cmd: "curl -s 'http://127.0.0.1:{{ cluster_info.port }}/api/v1/query_range?query={{ prom_query.query | urlencode }}&start={{ start_time }}&end={{ end_time }}&step=30s'" register: query_response loop: "{{ prometheus_queries | product(cluster_list) | list }}" loop_control: loop_var: item label: "{{ item.1.cluster }} - {{ item.0.metricName }}" vars: prom_query: "{{ item.0 }}" cluster_info: "{{ item.1 }}" cluster_list: - { cluster: 'karpenter', port: 9093 } - { cluster: 'cas', port: 9094 } - name: Save metrics to files copy: content: "{{ item.stdout }}" dest: "{{ playbook_dir }}/experiment-data/{{ cloud_provider }}/{{ item.item.1.cluster }}/{{ item.item.0.metricName }}.json" loop: "{{ query_response.results }}" loop_control: label: "{{ item.item.1.cluster }} - {{ item.item.0.metricName }}" - name: Stop port-forward services become: yes ansible.builtin.systemd: name: "port-forward-{{ item }}-{{ cloud_provider }}" state: stopped enabled: no loop: - karpenter - cas