--- - name: Add Grafana APT key ansible.builtin.get_url: url: https://apt.grafana.com/gpg.key dest: /etc/apt/keyrings/grafana.asc mode: "0644" - name: Add Grafana APT repository ansible.builtin.apt_repository: repo: "deb [signed-by=/etc/apt/keyrings/grafana.asc] https://apt.grafana.com stable main" state: present filename: grafana - name: Install Grafana ansible.builtin.apt: name: grafana state: present update_cache: true notify: Restart grafana - name: Create Grafana provisioning directories ansible.builtin.file: path: "{{ item }}" state: directory owner: grafana group: grafana mode: "0755" loop: - /etc/grafana/provisioning/datasources - /etc/grafana/provisioning/dashboards - /var/lib/grafana/dashboards - name: Deploy Grafana datasources ansible.builtin.template: src: datasources.yml.j2 dest: /etc/grafana/provisioning/datasources/datasources.yml owner: grafana group: grafana mode: "0640" notify: Restart grafana - name: Deploy Grafana dashboard provisioning ansible.builtin.template: src: dashboards.yml.j2 dest: /etc/grafana/provisioning/dashboards/dashboards.yml owner: grafana group: grafana mode: "0640" notify: Restart grafana - name: Deploy default dashboards ansible.builtin.copy: src: "{{ item }}" dest: /var/lib/grafana/dashboards/ owner: grafana group: grafana mode: "0644" loop: "{{ lookup('fileglob', 'files/dashboards/*.json', wantlist=True) }}" notify: Restart grafana ignore_errors: true # OK if no dashboards yet - name: Configure Grafana ansible.builtin.lineinfile: path: /etc/grafana/grafana.ini regexp: "{{ item.regexp }}" line: "{{ item.line }}" state: present loop: - { regexp: '^;?http_port', line: 'http_port = 3000' } - { regexp: '^;?http_addr', line: 'http_addr = 0.0.0.0' } notify: Restart grafana - name: Enable and start Grafana ansible.builtin.systemd: name: grafana-server enabled: true state: started