diff --git a/README.md b/README.md index a91dd99..ab486b4 100644 --- a/README.md +++ b/README.md @@ -19,7 +19,7 @@ grafana_prometheus_sources: You should also configure OAuth: ```yaml grafana_oauth_id: '123qwe123qwe123' -grafana_oauth_secret: 'qweasdqweasdqweasdqweasd +grafana_oauth_secret: 'qweasdqweasdqweasdqweasd' grafana_oauth_gh_org: 'evil-corp' grafana_oauth_gh_team_ids: [ 1234, 5678 ] ``` diff --git a/defaults/main.yml b/defaults/main.yml index e9e1d54..ebbc449 100644 --- a/defaults/main.yml +++ b/defaults/main.yml @@ -1,21 +1,27 @@ --- +grafana_service_name: 'grafana' +grafana_service_path: '/docker/{{ grafana_service_name }}' +grafana_compose_file: '{{ grafana_service_path }}/docker-compose.yml' +# Container +grafana_version: '7.3.4' +grafana_image: 'grafana/grafana:{{ grafana_version }}' +grafana_cont_name: '{{ grafana_service_name }}' +grafana_cont_vol: '{{ grafana_service_path }}/data' +grafana_cont_links: [] +grafana_cont_ext_links: [] +grafana_port: 9400 +# see: http://docs.grafana.org/installation/docker/#migration-from-a-previous-version-of-the-docker-container-to-5-1-or-later +grafana_cont_uid: 472 +# Permission adjust for dockremap. +grafana_host_uid: '{{ 100000 + grafana_cont_uid | int }}' + +# Public domain grafana_domain: ~ # Main configuration for sources grafana_prometheus_sources: [] # - { name: 'node-01', addr: '1.2.3.4', port: 8080, path: 'proxy/' } -grafana_version: '7.3.4' -grafana_image: 'grafana/grafana:{{ grafana_version }}' -grafana_cont_name: grafana -grafana_cont_vol: '/docker/grafana' -grafana_cont_links: [] -grafana_port: 9400 -# see: http://docs.grafana.org/installation/docker/#migration-from-a-previous-version-of-the-docker-container-to-5-1-or-later -grafana_cont_uid: 472 -# adjust for dockremap -grafana_host_uid: '{{ 100000 + grafana_cont_uid | int }}' - # Admin user grafana_username: ~ grafana_password: ~ @@ -45,9 +51,7 @@ grafana_snaphots_enabled: true grafana_plugins: - https://github.com/GoshPosh/grafana-meta-queries/archive/0.0.3.zip - - -# generic container settings -cont_state: started -cont_restart: false -cont_recreate: false +# Generic container options +compose_recreate: 'smart' +compose_state: 'present' +compose_restart: false diff --git a/handlers/main.yml b/handlers/main.yml deleted file mode 100644 index 214937f..0000000 --- a/handlers/main.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -- name: restart grafana - docker_container: - name: '{{ grafana_cont_name }}' - restart: true diff --git a/tasks/config.yml b/tasks/config.yml index 7a7636c..9d1ce26 100644 --- a/tasks/config.yml +++ b/tasks/config.yml @@ -1,4 +1,13 @@ --- +- name: Create grafana directories + file: + path: '{{ grafana_cont_vol }}' + state: directory + owner: 'dockremap' + group: 'docker' + mode: 0775 + recurse: true + - name: Create grafana directories file: path: '{{ item }}' @@ -8,18 +17,20 @@ mode: 0775 recurse: true with_items: - - '{{ grafana_cont_vol }}' + - '{{ grafana_cont_vol }}/etc' - '{{ grafana_cont_vol }}/etc/provisioning/datasources' + - '{{ grafana_cont_vol }}/lib' - '{{ grafana_cont_vol }}/lib/plugins' - '{{ grafana_cont_vol }}/lib/dashboards' -- name: Copy grafana config file +- name: Generate main config file template: src: 'grafana.ini.j2' dest: '{{ grafana_cont_vol }}/etc/grafana.ini' owner: '{{ grafana_host_uid }}' group: docker - register: cont_conf + mode: 0640 + register: grafana_config - name: Generate datasource config file template: @@ -27,9 +38,9 @@ dest: '{{ grafana_cont_vol }}/etc/provisioning/datasources/prometheus.yml' owner: '{{ grafana_host_uid }}' group: docker - notify: restart grafana + mode: 0640 -- name: Install plugins from zip archives +- name: Install plugins from ZIP archives unarchive: src: '{{ item }}' dest: '{{ grafana_cont_vol }}/lib/plugins' diff --git a/tasks/consul.yml b/tasks/consul.yml index b389344..e40f03e 100644 --- a/tasks/consul.yml +++ b/tasks/consul.yml @@ -2,13 +2,13 @@ - name: Create Consul service definition include_role: name=consul-service vars: - consul_config_name: 'grafana' + consul_config_name: '{{ grafana_service_name }}' consul_services: - - name: 'grafana' - tags: ['monitor', 'metrics-view'] + - name: '{{ grafana_service_name }}' + tags: ['monitor', 'grafana'] port: '{{ grafana_port }}' checks: - - id: grafana-health - name: Grafana current health - type: http + - id: '{{ grafana_service_name }}-health' + name: 'Grafana current health' + type: 'http' http: 'http://localhost:{{ grafana_port }}/api/health' diff --git a/tasks/container.yml b/tasks/container.yml index ff0d6e2..aa33259 100644 --- a/tasks/container.yml +++ b/tasks/container.yml @@ -1,16 +1,17 @@ --- -- name: Start grafana container - docker_container: - name: '{{ grafana_cont_name }}' - image: '{{ grafana_image }}' +- name: Create compose file + template: + src: 'docker-compose.yml.j2' + dest: '{{ grafana_compose_file }}' + owner: 'dockremap' + group: 'docker' + mode: 0640 + +- name: Create containers + docker_compose: + project_src: '{{ grafana_service_path }}' pull: true - restart_policy: always - state: '{{ cont_state }}' - recreate: '{{ cont_recreate }}' - restart: '{{ cont_conf.changed | default(cont_restart) }}' - ports: - - '127.0.0.1:{{ grafana_port }}:3000' - links: '{{ grafana_cont_links }}' - volumes: - - '{{ grafana_cont_vol }}/lib:/var/lib/grafana' - - '{{ grafana_cont_vol }}/etc:/etc/grafana' + build: false + state: '{{ compose_state }}' + restarted: '{{ compose_restart }}' + recreate: '{{ grafana_config.changed | ternary("always", compose_recreate) }}' diff --git a/templates/docker-compose.yml.j2 b/templates/docker-compose.yml.j2 new file mode 100644 index 0000000..fe461c7 --- /dev/null +++ b/templates/docker-compose.yml.j2 @@ -0,0 +1,18 @@ +--- +version: '3.7' +services: + app: + container_name: '{{ grafana_cont_name }}' + image: '{{ grafana_image }}' + restart: always + ports: + - '127.0.0.1:{{ grafana_port }}:{{ grafana_port }}' + volumes: + - '{{ grafana_cont_vol }}/lib:/var/lib/grafana' + - '{{ grafana_cont_vol }}/etc:/etc/grafana' +{% if grafana_cont_ext_links|length > 0 %} + external_links: {{ grafana_cont_ext_links | to_yaml }} +{% endif %} +{% if grafana_cont_links|length > 0 %} + links: {{ grafana_cont_links | to_yaml }} +{% endif %} diff --git a/templates/grafana.ini.j2 b/templates/grafana.ini.j2 index 2bef943..2c71929 100644 --- a/templates/grafana.ini.j2 +++ b/templates/grafana.ini.j2 @@ -1,4 +1,5 @@ [server] +http_port = {{ grafana_port }} domain = {{ grafana_domain | mandatory }}/ root_url = https://{{ grafana_domain | mandatory }}/ diff --git a/templates/prometheus.yml.j2 b/templates/prometheus.yml.j2 index 5d7d1e7..91dc664 100644 --- a/templates/prometheus.yml.j2 +++ b/templates/prometheus.yml.j2 @@ -1,10 +1,5 @@ apiVersion: 1 -deleteDatasources: -{% for service in grafana_prometheus_sources %} - - id: {{ loop.index }} -{% endfor %} - datasources: {% for service in grafana_prometheus_sources %} - name: {{ service.name }}