--- - name: check if prometheus apt component of spreadspace repo is enabled assert: msg: "please enable the 'prometheus' component of spreadspace repo using 'spreadspace_apt_repo_components'" that: - spreadspace_apt_repo_components is defined - "'prometheus' in spreadspace_apt_repo_components" - name: prepare storage volume for /var/lib/prometheus when: prometheus_server_storage is defined vars: storage_volume: "{{ prometheus_server_storage | combine({'dest': '/var/lib/prometheus'}) }}" include_role: name: "storage/{{ prometheus_server_storage.type }}/volume" - name: install apt packages apt: name: prom-server state: present - name: add user for server user: name: prometheus system: yes home: /var/lib/prometheus create_home: no - name: create data directory file: path: /var/lib/prometheus/metrics2 state: directory owner: prometheus group: prometheus - name: create TLS CA and certificates import_tasks: tls.yml - name: create configuration directories loop: - jobs - rules - targets file: path: "/etc/prometheus/{{ item }}" state: directory - name: create sub-directroy for all exporter types in jobs directory loop: "{{ prometheus_server_jobs_generic + prometheus_server_jobs_special }}" file: path: "/etc/prometheus/jobs/{{ item }}" state: directory - name: generate generic targets config loop: "{{ prometheus_zone_targets }}" loop_control: loop_var: target template: src: targets/generic.yml.j2 dest: "/etc/prometheus/targets/{{ target }}.yml" notify: reload prometheus - name: enable targets for generic jobs loop: "{{ hostvars | prometheus_generic_job_targets(prometheus_server_jobs_generic, prometheus_zone_targets) }}" loop_control: label: "{{ item.job }} -> {{ item.instance }}" file: src: "{{ item.enabled | ternary('/etc/prometheus/targets/' + item.instance + '.yml', omit) }}" path: "/etc/prometheus/jobs/{{ item.job }}/{{ item.instance }}.yml" state: "{{ item.enabled | ternary('link', 'absent') }}" notify: reload prometheus - name: enable targets for special jobs loop: "{{ hostvars | prometheus_special_job_targets(prometheus_server_jobs_special, prometheus_zone_targets) }}" loop_control: loop_var: target label: "{{ target.job }} -> {{ target.instance }}" template: src: "targets/{{ target.job }}.yml.j2" dest: "/etc/prometheus/jobs/{{ target.job }}/{{ target.instance }}.yml" notify: reload prometheus - name: generate rules files for all jobs loop: "{{ (prometheus_server_jobs_generic + prometheus_server_jobs_special) | union(['prometheus']) }}" template: src: rules.yml.j2 dest: "/etc/prometheus/rules/{{ item }}.yml" validate: "promtool check rules %s" notify: reload prometheus - name: generate configuration file template: src: prometheus.yml.j2 dest: /etc/prometheus/prometheus.yml validate: "promtool check config %s" notify: reload prometheus - name: generate systemd service unit template: src: prometheus.service.j2 dest: /etc/systemd/system/prometheus.service notify: restart prometheus - name: make sure prometheus is enabled and started systemd: name: prometheus.service daemon_reload: yes state: started enabled: yes