- name: install grafana apt: pkg: grafana - name: add www-data to grafana group user: name: www-data groups: grafana append: yes - name: ensure log file is owned by grafana and not root file: path: /var/log/grafana/grafana.log owner: grafana group: grafana - name: ensure data directory is owned by grafana and not root file: path: /var/lib/grafana owner: grafana group: grafana state: directory recurse: True - name: set admin password command: argv: - grafana-cli - admin - reset-admin-password - "{{ grafana.adminpw }}" - name: install grafana plugins grafana_plugin: name: "{{ item }}" loop: "{{ grafana.plugins.keys()|list }}" notify: restart grafana - name: update all grafana plugins tags: update command: grafana-cli plugins update-all notify: restart grafana - name: copy grafana config notify: restart grafana template: src: grafana.ini.j2 dest: /etc/grafana/grafana.ini owner: root group: grafana mode: 0640 - name: "ensure grafana is started" service: name: grafana-server enabled: true state: started - name: flush handlers so grafana is ready meta: flush_handlers - name: "Check if grafana is accessible." uri: url: http://127.0.0.1 method: GET status_code: 200 - name: convert tls paths to data (datasources) include_tasks: tls-path-to-data.yml vars: grafanakey: datasources loop: "{{ grafana.datasources|dict2items }}" - name: create data sources loop: "{{ grafana.datasources|dict2items }}" grafana_datasource: name: "{{ item.key }}" grafana_url: "http://127.0.0.1" grafana_user: "admin" grafana_password: "{{ grafana.adminpw }}" ds_type: "{{ item.value.ds_type }}" url: "{{ item.value.url }}" is_default: "{{ item.value.is_default }}" tls_ca_cert: "{{ item.value.tls_ca_cert|d(omit) }}" tls_client_cert: "{{ item.value.tls_client_cert|d(omit) }}" tls_client_key: "{{ item.value.tls_client_key|d(omit) }}" - name: import dashboards loop: "{{ grafana.dashboards|dict2items }}" grafana_dashboard: grafana_url: "http://127.0.0.1" grafana_user: "admin" grafana_password: "{{ grafana.adminpw }}" path: "{{ item.value.path }}"