---
- name: Check Grafana has install
yum:
list: "{{ grafana_version.split('-')[0] }}"
register: install_check
- name: Install Grafana
yum:
name: "{{ grafana_package_url }}"
state: present
disable_gpg_check: true
when: install_check.results | length() != 1
- name: Create Dependence Directory
file:
path: "{{ item }}"
state: directory
owner: grafana
group: grafana
mode: 0755
with_items:
- "{{ grafana_home }}"
- "{{ grafana_home }}/data"
- "{{ grafana_home }}/logs"
- "{{ grafana_home }}/plugins"
- name: Template Grafana Conf
template:
src: grafana.ini.j2
dest: /etc/grafana/grafana.ini
owner: grafana
group: grafana
mode: 0755
notify:
- restart grafana
- meta: flush_handlers
- name: Create grafana API Key
uri:
url: "http://{{ ansible_host }}:{{ grafana_http_port }}/api/auth/keys"
user: "{{ grafana_admin_user }}"
password: "{{ grafana_admin_password }}"
force_basic_auth: yes
method: POST
body_format: json
body: "{\"role\": \"Admin\", \"name\": \"{{ randomStr }}\", \"secondsToLive\": 60}"
register: api_user
- name: Check Prometheus DataSource is exists
uri:
url: "http://{{ ansible_host }}:{{ grafana_http_port }}/api/datasources/{{ datasource_name}}"
force_basic_auth: yes
validate_certs: no
method: GET
headers:
Authorization: "Bearer {{ api_user['json']['key'] }}"
ignore_errors: True
register: check_datasource_res
when:
- api_user['json'] | length != 0
- name: Create Prometheus DataSource
uri:
url: "http://{{ ansible_host }}:{{ grafana_http_port }}/api/datasources"
force_basic_auth: yes
validate_certs: no
method: POST
body_format: json
body: "{{ datasource_body | to_json }}"
headers:
Authorization: "Bearer {{ api_user['json']['key'] }}"
ignore_errors: True
when:
- check_datasource_res['status'] != 200
- api_user['json'] | length != 0
- name: Template Prometheus Dashboard
copy:
src: dashboard_template.json
dest: "{{ dashboard_template }}"
mode: 0755
ignore_errors: True
register: copy_dashboard_template_res
- name: Check {{ dashboard_template }} exists
wait_for:
path: "{{ dashboard_template }}"
- name: Change template dashboard name
replace:
path: "{{ dashboard_template }}"
regexp: "change_dashboard_name"
replace: "{{ dashboard_name }}"
backup: yes
owner: root
mode: 0755
group: root
- name: Change template datasource name
replace:
path: "{{ dashboard_template }}"
regexp: "change_datasource_name"
replace: "{{ datasource_name }}"
owner: root
group: root
mode: 0755
backup: yes
- name: Create Prometheus Dashboard
uri:
url: "http://{{ ansible_host }}:{{ grafana_http_port }}/api/dashboards/db"
force_basic_auth: yes
validate_certs: no
method: POST
body: "{{ lookup('file', item) }}"
body_format: json
headers:
Authorization: "Bearer {{ api_user['json']['key'] }}"
ignore_errors: True
with_items:
- "{{ dashboard_template }}"