Add prometheus ansible role

This commit is contained in:
ionutboangiu
2024-07-30 17:02:02 +03:00
committed by Dan Christian Bogos
parent 59b61f2354
commit 398aa2a2a6
4 changed files with 127 additions and 0 deletions

View File

@@ -0,0 +1,13 @@
---
prometheus_version: 2.53.1
prometheus_user: prometheus
prometheus_install_dir: /opt/prometheus
prometheus_config_dir: /etc/prometheus
prometheus_data_dir: /var/lib/prometheus
prometheus_web_listen_address: 0.0.0.0:9090
prometheus_service_enabled: false
prometheus_service_state: stopped
prometheus_config_file: '{{ prometheus_install_dir }}/prometheus.yml' # supports either the path to a file or a j2 template

View File

@@ -0,0 +1,8 @@
---
- name: Restart prometheus
become: true
ansible.builtin.systemd_service:
name: prometheus
state: restarted
daemon_reload: true
when: prometheus_service_state == 'started'

View File

@@ -0,0 +1,89 @@
---
- name: Create prometheus user
become: true
ansible.builtin.user:
name: '{{ prometheus_user }}'
state: present
system: true
createhome: no
- name: Check current Prometheus version
ansible.builtin.command: "{{ prometheus_install_dir }}/prometheus --version"
register: prometheus_current_version
ignore_errors: true
changed_when: false
- name: Remove existing Prometheus installation if version differs
become: true
ansible.builtin.file:
path: "{{ prometheus_install_dir }}"
state: absent
when: prometheus_current_version.rc == 0 and prometheus_version not in prometheus_current_version.stdout
- name: Create prometheus data and config directories
become: true
ansible.builtin.file:
path: '{{ item }}'
state: directory
owner: '{{ prometheus_user }}'
group: '{{ prometheus_user }}'
mode: '0755'
loop:
- '{{ prometheus_config_dir }}'
- '{{ prometheus_data_dir }}'
- '{{ prometheus_install_dir }}'
- name: Download and extract prometheus
become: true
ansible.builtin.unarchive:
src: 'https://github.com/prometheus/prometheus/releases/download/v{{ prometheus_version }}/prometheus-{{ prometheus_version }}.linux-amd64.tar.gz'
dest: '{{ prometheus_install_dir }}'
remote_src: true
owner: '{{ prometheus_user }}'
group: '{{ prometheus_user }}'
extra_opts: [--strip-components=1]
notify: Restart prometheus
when: prometheus_current_version.rc != 0 or prometheus_version not in prometheus_current_version.stdout
- name: Handle prometheus configuration file
block:
- name: Copy prometheus configuration file if a direct path
become: true
ansible.builtin.copy:
src: '{{ prometheus_config_file }}'
dest: '{{ prometheus_config_dir }}/prometheus.yml'
owner: '{{ prometheus_user }}'
group: '{{ prometheus_user }}'
mode: '0644'
remote_src: true
notify: Restart prometheus
when: prometheus_config_file is defined and '/' in prometheus_config_file
- name: Render prometheus configuration template
become: true
ansible.builtin.template:
src: '{{ prometheus_config_file }}'
dest: '{{ prometheus_config_dir }}/prometheus.yml'
owner: '{{ prometheus_user }}'
group: '{{ prometheus_user }}'
mode: '0644'
notify: Restart prometheus
when: prometheus_config_file is defined and '/' not in prometheus_config_file
when: prometheus_config_file is defined and prometheus_config_file != ''
- name: Create prometheus systemd service file
become: true
ansible.builtin.template:
src: prometheus.service.j2
dest: /etc/systemd/system/prometheus.service
mode: '0644'
notify: Restart prometheus
- name: Ensure prometheus service is in desired state
become: true
ansible.builtin.systemd_service:
name: prometheus
state: '{{ prometheus_service_state }}'
enabled: '{{ prometheus_service_enabled }}'
when: prometheus_service_state == 'stopped' or prometheus_service_enabled == false

View File

@@ -0,0 +1,17 @@
[Unit]
Description=Prometheus
Wants=network-online.target
After=network-online.target
[Service]
User={{ prometheus_user }}
Group={{ prometheus_user }}
Type=simple
ExecStart={{ prometheus_install_dir }}/prometheus \
--config.file={{ prometheus_config_dir }}/prometheus.yml \
--storage.tsdb.path={{ prometheus_data_dir }} \
--web.listen-address={{ prometheus_web_listen_address }}
Restart=always
[Install]
WantedBy=multi-user.target