feat: Add grafana role.
This commit is contained in:
		
						commit
						23a5ea6703
					
				
							
								
								
									
										2
									
								
								.github/FUNDING.yml
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										2
									
								
								.github/FUNDING.yml
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @ -0,0 +1,2 @@ | ||||
| github: equinoxel | ||||
| patreon: laurivan | ||||
							
								
								
									
										7
									
								
								.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										7
									
								
								.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @ -0,0 +1,7 @@ | ||||
| *.retry | ||||
| */__pycache__ | ||||
| *.pyc | ||||
| .cache | ||||
| .venv | ||||
| .env.yml | ||||
| docker-compose.yml | ||||
							
								
								
									
										29
									
								
								.travis.yml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										29
									
								
								.travis.yml
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,29 @@ | ||||
| --- | ||||
| language: python | ||||
| python: "2.7" | ||||
| 
 | ||||
| # Use the new container infrastructure | ||||
| sudo: false | ||||
| 
 | ||||
| # Install ansible | ||||
| addons: | ||||
|   apt: | ||||
|     packages: | ||||
|     - python-pip | ||||
| 
 | ||||
| install: | ||||
|   # Install ansible | ||||
|   - pip install ansible | ||||
| 
 | ||||
|   # Check ansible version | ||||
|   - ansible --version | ||||
| 
 | ||||
|   # Create ansible.cfg with correct roles_path | ||||
|   - printf '[defaults]\nroles_path=../' >ansible.cfg | ||||
| 
 | ||||
| script: | ||||
|   # Basic role syntax check | ||||
|   - ansible-playbook tests/test.yml -i tests/inventory --syntax-check | ||||
| 
 | ||||
| notifications: | ||||
|   webhooks: https://galaxy.ansible.com/api/v1/notifications/ | ||||
							
								
								
									
										33
									
								
								.yamllint
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										33
									
								
								.yamllint
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,33 @@ | ||||
| --- | ||||
| # Based on ansible-lint config | ||||
| extends: default | ||||
| 
 | ||||
| rules: | ||||
|   braces: | ||||
|     max-spaces-inside: 1 | ||||
|     level: error | ||||
|   brackets: | ||||
|     max-spaces-inside: 1 | ||||
|     level: error | ||||
|   colons: | ||||
|     max-spaces-after: -1 | ||||
|     level: error | ||||
|   commas: | ||||
|     max-spaces-after: -1 | ||||
|     level: error | ||||
|   comments: disable | ||||
|   comments-indentation: disable | ||||
|   document-start: disable | ||||
|   empty-lines: | ||||
|     max: 3 | ||||
|     level: error | ||||
|   hyphens: | ||||
|     level: error | ||||
|   indentation: disable | ||||
|   key-duplicates: enable | ||||
|   line-length: disable | ||||
|   new-line-at-end-of-file: disable | ||||
|   new-lines: | ||||
|     type: unix | ||||
|   trailing-spaces: disable | ||||
|   truthy: disable | ||||
							
								
								
									
										0
									
								
								CHANGELOG.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										0
									
								
								CHANGELOG.md
									
									
									
									
									
										Normal file
									
								
							
							
								
								
									
										20
									
								
								LICENSE
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										20
									
								
								LICENSE
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,20 @@ | ||||
| The MIT License (MIT) | ||||
| 
 | ||||
| Copyright (c) 2022 Laur Ivan | ||||
| 
 | ||||
| Permission is hereby granted, free of charge, to any person obtaining a copy of | ||||
| this software and associated documentation files (the "Software"), to deal in | ||||
| the Software without restriction, including without limitation the rights to | ||||
| use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of | ||||
| the Software, and to permit persons to whom the Software is furnished to do so, | ||||
| subject to the following conditions: | ||||
| 
 | ||||
| The above copyright notice and this permission notice shall be included in all | ||||
| copies or substantial portions of the Software. | ||||
| 
 | ||||
| THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||||
| IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS | ||||
| FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR | ||||
| COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER | ||||
| IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN | ||||
| CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | ||||
							
								
								
									
										191
									
								
								README.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										191
									
								
								README.md
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,191 @@ | ||||
| # laurivan.grafana | ||||
| 
 | ||||
| This role installs Grafana via Docker. | ||||
| 
 | ||||
| ## Requirements | ||||
| 
 | ||||
| None | ||||
| 
 | ||||
| ## Role Variables | ||||
| 
 | ||||
| All variables are listed below (see also `defaults/main.yml`). | ||||
| 
 | ||||
| ### Grafana Core Variables | ||||
| 
 | ||||
| Grafana requires a couple of secrets for data encryption: | ||||
| 
 | ||||
| ```yml | ||||
| grafana_secret_key: 'changeme' | ||||
| grafana_utils_secret: 'changeme' | ||||
| ``` | ||||
| 
 | ||||
| You also need to specify the deployment type. Usually it's `production` | ||||
| 
 | ||||
| ```yml | ||||
| grafana_deployment: '' | ||||
| ``` | ||||
| 
 | ||||
| You also need to define how you access grafana: | ||||
| 
 | ||||
| - `grafana_port` is the port mapping in Docker. Grafana runs at port 3000, which is alos the default | ||||
| - `grafana_url` is the public URL where we see Grafana. If you use reverse proxy mapping, put the URL of the reverse proxy (in my case *[this one](https://wiki.home.laurivan.com)*). | ||||
| - `grafana_force_https` will run with HTTPS if true. you can define it as *false* If you're behind a proxy or you don't have a certificate. It defaults to `false`. | ||||
| - `grafana_enable_updates` will enable updates if true. Please read [the documentation](https://app.getgrafana.com/s/770a97da-13e5-401e-9f8a-37949c19f97e/) for what this implies (e.g. telemetry) | ||||
| - Define `grafana_cdn_url` if you have a CDN. Defaults to *empty* | ||||
| 
 | ||||
| **Note**: `grafana_url` will define the authentication redirect url for e.g. authentik | ||||
| 
 | ||||
| You can define which debug messages to be logged via `grafana_debug`. | ||||
| 
 | ||||
| ### Storage | ||||
| 
 | ||||
| Following values are defined for the docker-compose: | ||||
| 
 | ||||
| ```yml | ||||
| grafana_volume_base: "/mnt/grafana" | ||||
| grafana_setup_path: '{{ grafana_volume_base }}/config' | ||||
| grafana_volume_redis: "{{ grafana_volume_base }}/redis" | ||||
| grafana_volume_db: "{{ grafana_volume_base }}/db" | ||||
| grafana_volume_s3: "{{ grafana_volume_base }}/s3" | ||||
| ``` | ||||
| 
 | ||||
| Please note that `grafana_volume_db` and `grafana_volume_s3` are actually created only if local posstgres and fake_s3 containers are created by configuration below. | ||||
| 
 | ||||
| You can specify a logo too via `grafana_team_logo_url`. By default this is empty. | ||||
| 
 | ||||
| You can also change the default language via `grafana_language`. The role defaults the language to *en_US*. | ||||
| 
 | ||||
| ### Authentication | ||||
| 
 | ||||
| Grafana authentication can happen via: | ||||
| 
 | ||||
| - OIDC | ||||
| - Google authentication | ||||
| - Slack | ||||
| 
 | ||||
| You need to define at least one of them. | ||||
| 
 | ||||
| #### OIDC | ||||
| 
 | ||||
| OIDC parameters are | ||||
| 
 | ||||
| ```yml | ||||
| oidc_client_id: | ||||
| oidc_client_secret: | ||||
| oidc_auth_uri: | ||||
| oidc_token_uri: | ||||
| oidc_userinfo_uri: | ||||
| ``` | ||||
| 
 | ||||
| Your authentication app should provide you all the above. I use something along the lines: | ||||
| 
 | ||||
| ```yml | ||||
| oidc_client_id: "changeme" | ||||
| oidc_client_secret: "changeme" | ||||
| oidc_auth_uri: "https://sso.laurivan.com/application/o/authorize/" | ||||
| oidc_token_uri: "https://sso.laurivan.com/application/o/token/" | ||||
| oidc_userinfo_uri: "https://sso.laurivan.com/application/o/userinfo/" | ||||
| oidc_username_claim: "preferred_username" | ||||
| ``` | ||||
| 
 | ||||
| **Note**: you will probably need to provide the redirect URL to the authentication application. For Authentik, you can find it in the **Provider** for the specific application. | ||||
| 
 | ||||
| #### Google ID | ||||
| 
 | ||||
| You need to define: | ||||
| 
 | ||||
| ```yml | ||||
| grafana_google_client_id: | ||||
| grafana_google_client_secret: | ||||
| ``` | ||||
| 
 | ||||
| #### Slack | ||||
| 
 | ||||
| You need to define | ||||
| 
 | ||||
| ```yml | ||||
| grafana_slack_client_id: | ||||
| grafana_slack_client_secret: | ||||
| ``` | ||||
| 
 | ||||
| ### Database | ||||
| 
 | ||||
| You need to assign a database to Grafana. This role allows you to launch Postgres in a container via: | ||||
| 
 | ||||
| ```yml | ||||
| grafana_db_schema: "postgres" | ||||
| grafana_db_host: "postgres" | ||||
| grafana_db_port: "5432" | ||||
| grafana_db_user: "postgres" | ||||
| grafana_db_password: "changeme" | ||||
| grafana_db: "grafana" | ||||
| ``` | ||||
| 
 | ||||
| If the db_host is not "postgres", then we assume the db is external and not spin up the docker container. | ||||
| 
 | ||||
| By default, PostgreSQL is not secured. If you have a secure database instance, set the `grafana_db_ssl` variable to "enable". | ||||
| 
 | ||||
| ### S3 | ||||
| 
 | ||||
| We define the following variables: | ||||
| 
 | ||||
| ```yml | ||||
| grafana_fake_s3: true | ||||
| grafana_fake_s3_port: 4569 | ||||
| grafana_aws_access_key_id: | ||||
| grafana_aws_secret_access_key: | ||||
| grafana_aws_region: | ||||
| grafana_aws_s3_upload_bucket_url: "http://s3:4569" | ||||
| grafana_aws_s3_upload_bucket_name: grafana-bucket | ||||
| grafana_aws_s3_upload_max_size: "26214400" | ||||
| grafana_aws_s3_force_path_style: "true" | ||||
| grafana_aws_s3_acl: "private" | ||||
| ``` | ||||
| 
 | ||||
| You need S3 (or S3-like) storage for e.g. uploaded files. By default, the role spins up the fake S3 only if `fake_s3` variable is true. | ||||
| 
 | ||||
| I use [MinIO](https://min.io/) with something like: | ||||
| 
 | ||||
| ```yml | ||||
| grafana_fake_s3: "" | ||||
| grafana_aws_access_key_id: "change me" | ||||
| grafana_aws_secret_access_key: "change me" | ||||
| grafana_aws_region: "my-rack" | ||||
| grafana_aws_s3_upload_bucket_url: "http://minio,example.com:9000" | ||||
| grafana_aws_s3_upload_max_size: "26214400" | ||||
| grafana_aws_s3_force_path_style: "true" | ||||
| grafana_aws_s3_acl: "private" | ||||
| ``` | ||||
| 
 | ||||
| ### Email | ||||
| 
 | ||||
| Grafana can send notification emails if you set up the SMTP variables: | ||||
| 
 | ||||
| ```yml | ||||
| grafana_smtp_host: | ||||
| grafana_smtp_port: | ||||
| grafana_smtp_username: | ||||
| grafana_smtp_password: | ||||
| grafana_smtp_from_email: | ||||
| grafana_smtp_reply_email: | ||||
| ``` | ||||
| 
 | ||||
| ## Dependencies | ||||
| 
 | ||||
| You need a machine with docker and docker-compose installed. | ||||
| 
 | ||||
| ## Example Playbook | ||||
| 
 | ||||
| ```yml | ||||
| - hosts: servers | ||||
|   roles: | ||||
|       - 'laurivan.grafana' | ||||
| ``` | ||||
| 
 | ||||
| ## License | ||||
| 
 | ||||
| MIT | ||||
| 
 | ||||
| ## Author Information | ||||
| 
 | ||||
| This role was created in 2022 by [Laur Ivan](https://www.laurivan.com). | ||||
							
								
								
									
										21
									
								
								defaults/main.yml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										21
									
								
								defaults/main.yml
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,21 @@ | ||||
| --- | ||||
| # defaults file for grafana | ||||
| 
 | ||||
| influxdb: | ||||
|   username: influxdb | ||||
|   password: change_me | ||||
|   org: example.com | ||||
|   bucket: my_bucket | ||||
|   admin_token: change_me | ||||
| 
 | ||||
| grafana: | ||||
|   username: changeme | ||||
|   password: changeme | ||||
| 
 | ||||
| grafana_volume_base: "/mnt/grafana" | ||||
| grafana_setup_path: "{{ grafana_volume_base }}/config" | ||||
| grafana_volume_grafana: "{{ grafana_volume_base }}/grafana" | ||||
| grafana_volume_influxdb: "{{ grafana_volume_base }}/influxdb" | ||||
| 
 | ||||
| grafana_uid: | ||||
| grafana_gid: | ||||
							
								
								
									
										2
									
								
								handlers/main.yml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										2
									
								
								handlers/main.yml
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,2 @@ | ||||
| --- | ||||
| # handlers file for grafana | ||||
							
								
								
									
										34
									
								
								meta/main.yml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										34
									
								
								meta/main.yml
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,34 @@ | ||||
| galaxy_info: | ||||
|   author: Laur Ivan | ||||
|   namespace: laurivan | ||||
|   role_name: grafana | ||||
|   description: Grafana Docker | ||||
|   license: MIT | ||||
| 
 | ||||
|   min_ansible_version: "2.4" | ||||
|   min_ansible_container_version: "2.4" | ||||
| 
 | ||||
|   platforms: | ||||
|     - name: Debian | ||||
|       versions: | ||||
|         - buster | ||||
|         - bullseye | ||||
|     - name: Ubuntu | ||||
|       versions: | ||||
|         - bionic | ||||
|         - focal | ||||
|         - jammy | ||||
|     - name: Alpine | ||||
|       version: | ||||
|         - all | ||||
|     - name: ArchLinux | ||||
|       versions: | ||||
|         - all | ||||
| 
 | ||||
|   galaxy_tags:  | ||||
|     - grafana | ||||
|     - document | ||||
|     - wiki | ||||
|     - docker | ||||
| 
 | ||||
| dependencies: [] | ||||
							
								
								
									
										15
									
								
								molecule/default/INSTALL.rst
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										15
									
								
								molecule/default/INSTALL.rst
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,15 @@ | ||||
| *********************************** | ||||
| Delegated driver installation guide | ||||
| *********************************** | ||||
| 
 | ||||
| Requirements | ||||
| ============ | ||||
| 
 | ||||
| This driver is delegated to the developer.  Up to the developer to implement | ||||
| requirements. | ||||
| 
 | ||||
| Install | ||||
| ======= | ||||
| 
 | ||||
| This driver is delegated to the developer.  Up to the developer to implement | ||||
| requirements. | ||||
							
								
								
									
										23
									
								
								molecule/default/cleanup.yml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										23
									
								
								molecule/default/cleanup.yml
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,23 @@ | ||||
| --- | ||||
| - name: Clean up | ||||
|   hosts: all | ||||
|   gather_facts: true | ||||
|   tasks: | ||||
|     - name: Check if the docker-compose file exists. | ||||
|       ansible.builtin.stat: | ||||
|         path: "~/grafana/docker-compose.yml" | ||||
|       register: docker_compose_file | ||||
| 
 | ||||
|     - name: Remove docker-compose. | ||||
|       community.docker.docker_compose: | ||||
|         project_src: ~/grafana/ | ||||
|         build: false | ||||
|         state: absent | ||||
|       when: docker_compose_file.stat.exists | ||||
|       become: false | ||||
|        | ||||
|     - name: Remove the docker-compose file | ||||
|       ansible.builtin.file: | ||||
|         path: "~/grafana/docker-compose.yml" | ||||
|         state: absent | ||||
|       when: docker_compose_file.stat.exists | ||||
							
								
								
									
										11
									
								
								molecule/default/converge.yml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										11
									
								
								molecule/default/converge.yml
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,11 @@ | ||||
| --- | ||||
| - name: Converge | ||||
|   hosts: all | ||||
|   # gather_facts: false | ||||
|   pre_tasks: | ||||
|     - name: "Include necessary variables" | ||||
|       ansible.builtin.include_vars: | ||||
|         file: "../../.env.yml" | ||||
|        | ||||
|   roles: | ||||
|     - role: laurivan.grafana | ||||
							
								
								
									
										28
									
								
								molecule/default/destroy.yml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										28
									
								
								molecule/default/destroy.yml
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,28 @@ | ||||
| --- | ||||
| - name: Destroy | ||||
|   hosts: localhost | ||||
|   connection: local | ||||
|   gather_facts: false | ||||
|   no_log: "{{ molecule_no_log }}" | ||||
|   tasks: | ||||
|     # Developer must implement. | ||||
|     - name: Remove the docker image | ||||
|       community.docker.docker_container: | ||||
|         name: instance-grafana | ||||
|         state: absent | ||||
| 
 | ||||
|     # Mandatory configuration for Molecule to function. | ||||
| 
 | ||||
|     - name: Populate instance config | ||||
|       ansible.builtin.set_fact: | ||||
|         instance_conf: {} | ||||
| 
 | ||||
|     - name: Dump instance config | ||||
|       ansible.builtin.copy: | ||||
|         content: | | ||||
|           # Molecule managed | ||||
| 
 | ||||
|           {{ instance_conf | to_json | from_json | to_yaml }} | ||||
|         dest: "{{ molecule_instance_config }}" | ||||
|         mode: 0600 | ||||
|       when: server.changed | default(false) | bool | ||||
							
								
								
									
										30
									
								
								molecule/default/molecule.yml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										30
									
								
								molecule/default/molecule.yml
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,30 @@ | ||||
| --- | ||||
| role_name_check: 1 | ||||
| dependency: | ||||
|   name: galaxy | ||||
|   options: | ||||
|     ignore-certs: true | ||||
|     ignore-errors: true | ||||
|     role-file: molecule/requirements.yml | ||||
|     requirements-file: molecule/requirements.yml | ||||
| driver: | ||||
|   name: docker | ||||
| platforms: | ||||
|   - name: instance-grafana | ||||
|     image: "geerlingguy/docker-${MOLECULE_DISTRO:-centos8}-ansible:latest" | ||||
|     command: ${MOLECULE_DOCKER_COMMAND:-""} | ||||
|     volumes: | ||||
|       - /sys/fs/cgroup:/sys/fs/cgroup:ro | ||||
|       - /var/run/docker.sock:/tmp/docker_mounted.sock | ||||
|     privileged: true | ||||
|     pre_build_image: true | ||||
| provisioner: | ||||
|   name: ansible | ||||
|   playbooks: | ||||
|     converge: ${MOLECULE_PLAYBOOK:-converge.yml} | ||||
| verifier: | ||||
|   name: ansible | ||||
| lint: | | ||||
|   set -e | ||||
|   yamllint . | ||||
|   ansible-lint . | ||||
							
								
								
									
										35
									
								
								molecule/default/prepare.yml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										35
									
								
								molecule/default/prepare.yml
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,35 @@ | ||||
| --- | ||||
| - name: Setup the test machine | ||||
|   hosts: instance-grafana | ||||
|   tasks: | ||||
|     - name: Check if /var/run/docker.sock already exists | ||||
|       ansible.builtin.stat: | ||||
|         path: "/var/run/docker.sock" | ||||
|       register: docker_sock_stat | ||||
| 
 | ||||
|     - name: Create docker.sock | ||||
|       raw: touch /var/run/docker.sock | ||||
|       become: true | ||||
|       changed_when: false | ||||
|       when: not docker_sock_stat.stat.exists | ||||
| 
 | ||||
|     - name: Move docker.sock from tmp | ||||
|       raw: mount --move /tmp/docker_mounted.sock /var/run/docker.sock | ||||
|       become: true | ||||
|       changed_when: false | ||||
|       when: not docker_sock_stat.stat.exists | ||||
|        | ||||
|     - name: Update apt cache. | ||||
|       apt: update_cache=yes cache_valid_time=600 | ||||
|       when: ansible_os_family == 'Debian' | ||||
|     - name: Install python requests | ||||
|       pip: | ||||
|         name:  | ||||
|           - requests | ||||
|           - docker | ||||
|           - docker-compose | ||||
|     - name: Install docker | ||||
|       vars: | ||||
|         docker_service_manage: false | ||||
|       include_role: | ||||
|         name: geerlingguy.docker | ||||
							
								
								
									
										10
									
								
								molecule/default/verify.yml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										10
									
								
								molecule/default/verify.yml
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,10 @@ | ||||
| --- | ||||
| # This is an example playbook to execute Ansible tests. | ||||
| 
 | ||||
| - name: Verify | ||||
|   hosts: all | ||||
|   gather_facts: false | ||||
|   tasks: | ||||
|   - name: Example assertion | ||||
|     ansible.builtin.assert: | ||||
|       that: true | ||||
							
								
								
									
										4
									
								
								molecule/requirements.yml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										4
									
								
								molecule/requirements.yml
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,4 @@ | ||||
| --- | ||||
| roles: | ||||
|   - geerlingguy.docker | ||||
| collections: [] | ||||
							
								
								
									
										73
									
								
								tasks/main.yml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										73
									
								
								tasks/main.yml
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,73 @@ | ||||
| --- | ||||
| # tasks file for grafana | ||||
| - name: Set up main directory | ||||
|   ansible.builtin.file: | ||||
|     state: directory | ||||
|     path: "{{ item }}" | ||||
|     owner: "{{ ansible_effective_user_id }}" | ||||
|     group: "{{ ansible_effective_group_id }}" | ||||
|     mode: "0750" | ||||
|   with_items: | ||||
|     - "{{ grafana_setup_path | expanduser | realpath }}/grafana-provisioning/" | ||||
|     - "{{ grafana_setup_path | expanduser | realpath }}/grafana-provisioning/datasources/" | ||||
|   tags: | ||||
|     - configuration | ||||
|   become: true | ||||
| 
 | ||||
| - name: Set up influxdb mount point | ||||
|   ansible.builtin.file: | ||||
|     state: directory | ||||
|     path: "{{ item }}" | ||||
|     owner: "{% if grafana_uid %}{{ grafana_uid }}{% else %}{{ ansible_effective_user_id }}{% endif %}" | ||||
|     group: "{% if grafana_gid %}{{ grafana_gid }}{% else %}{{ ansible_effective_group_id }}{% endif %}" | ||||
|     mode: "0750" | ||||
|   with_items: | ||||
|     - "{{ grafana_volume_influxdb | expanduser | realpath }}" | ||||
|   tags: | ||||
|     - configuration | ||||
|   become: true | ||||
| 
 | ||||
| - name: Set up grafana mount point | ||||
|   ansible.builtin.file: | ||||
|     state: directory | ||||
|     path: "{{ item }}" | ||||
|     # owner: "{% if grafana_uid %}{{ grafana_uid }}{% else %}{{ ansible_effective_user_id }}{% endif %}" | ||||
|     # group: "{% if grafana_gid %}{{ grafana_gid }}{% else %}{{ ansible_effective_group_id }}{% endif %}" | ||||
|     owner: "472" | ||||
|     group: "0" | ||||
|     mode: "0777" | ||||
|   with_items: | ||||
|     - "{{ grafana_volume_grafana | expanduser | realpath }}" | ||||
|     - "{{ grafana_volume_grafana | expanduser | realpath }}/plugins" | ||||
|   tags: | ||||
|     - configuration | ||||
|   become: true | ||||
| 
 | ||||
| - name: Write configuration files | ||||
|   ansible.builtin.template: | ||||
|     src: "{{ item }}.j2" | ||||
|     dest: "{{ grafana_setup_path | expanduser | realpath }}/{{ item }}" | ||||
|     mode: '0640' | ||||
|   loop: | ||||
|     - "docker-compose.yml" | ||||
|     - "env.grafana.conf" | ||||
|     - "env.influxdb.conf" | ||||
|   tags: | ||||
|     - configuration | ||||
| 
 | ||||
| - name: Write datasource provisioning files | ||||
|   ansible.builtin.template: | ||||
|     src: "grafana-provisioning/datasources/{{ item }}.j2" | ||||
|     dest: "{{ grafana_setup_path | expanduser | realpath }}/grafana-provisioning/datasources/{{ item }}" | ||||
|     mode: '0640' | ||||
|   loop: | ||||
|     - "datasource.yml" | ||||
|   tags: | ||||
|     - configuration | ||||
| 
 | ||||
| 
 | ||||
| - name: Ensure all requested components are running. | ||||
|   community.docker.docker_compose: | ||||
|     project_src: "{{ grafana_setup_path | expanduser | realpath }}" | ||||
|     build: false | ||||
|   become: true | ||||
							
								
								
									
										33
									
								
								templates/docker-compose.yml.j2
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										33
									
								
								templates/docker-compose.yml.j2
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,33 @@ | ||||
| version: '3.9' | ||||
| services: | ||||
|   influxdb: | ||||
|     image: influxdb:latest | ||||
|     ports: | ||||
|       - '8086:8086' | ||||
|     volumes: | ||||
|       - "{{ grafana_volume_influxdb | expanduser | realpath }}:/var/lib/influxdb" | ||||
|     env_file: | ||||
|       - "{{ grafana_setup_path | expanduser | realpath }}/env.influxdb.conf" | ||||
|     networks: | ||||
|       - grafana | ||||
| 
 | ||||
|   grafana: | ||||
|     image: grafana/grafana-oss:latest | ||||
|     ports: | ||||
|       - '3001:3000' | ||||
|     volumes: | ||||
|       # - "{{ grafana_volume_grafana | expanduser | realpath }}:/var/lib/grafana" | ||||
|       - "{{ grafana_setup_path | expanduser | realpath }}/grafana-provisioning/:/etc/grafana/provisioning/" | ||||
|     depends_on: | ||||
|       - influxdb | ||||
|     env_file: | ||||
|       - "{{ grafana_setup_path | expanduser | realpath }}/env.grafana.conf" | ||||
|     networks: | ||||
|       - grafana | ||||
| 
 | ||||
| # Run as user: | ||||
| #     owner: "{% if grafana_uid %}{{ grafana_uid }}{% else %}{{ ansible_effective_user_id }}{% endif %}" | ||||
| #     group: "{% if grafana_gid %}{{ grafana_gid }}{% else %}{{ ansible_effective_group_id }}{% endif %}" | ||||
| 
 | ||||
| networks: | ||||
|   grafana: {} | ||||
							
								
								
									
										9
									
								
								templates/env.grafana.conf.j2
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										9
									
								
								templates/env.grafana.conf.j2
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,9 @@ | ||||
| GF_SECURITY_ADMIN_USER={{ grafana.username }} | ||||
| GF_SECURITY_ADMIN_PASSWORD={{ grafana.password }} | ||||
| 
 | ||||
| GF_LOG_MODE=console | ||||
| GF_LOG_LEVEL=debug | ||||
| 
 | ||||
| DOCKER_INFLUXDB_INIT_ORG={{ influxdb.org }} | ||||
| DOCKER_INFLUXDB_INIT_BUCKET={{ influxdb.bucket }} | ||||
| DOCKER_INFLUXDB_INIT_ADMIN_TOKEN={{ influxdb.admin_token }} | ||||
							
								
								
									
										6
									
								
								templates/env.influxdb.conf.j2
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								templates/env.influxdb.conf.j2
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,6 @@ | ||||
| DOCKER_INFLUXDB_INIT_MODE=setup | ||||
| DOCKER_INFLUXDB_INIT_USERNAME={{ influxdb.username }} | ||||
| DOCKER_INFLUXDB_INIT_PASSWORD={{ influxdb.password }} | ||||
| DOCKER_INFLUXDB_INIT_ORG={{ influxdb.org }} | ||||
| DOCKER_INFLUXDB_INIT_BUCKET={{ influxdb.bucket }} | ||||
| DOCKER_INFLUXDB_INIT_ADMIN_TOKEN={{ influxdb.admin_token }} | ||||
							
								
								
									
										15
									
								
								templates/grafana-provisioning/datasources/datasource.yml.j2
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										15
									
								
								templates/grafana-provisioning/datasources/datasource.yml.j2
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,15 @@ | ||||
|  lines (14 sloc) 345 Bytes | ||||
| apiVersion: 1 | ||||
| datasources: | ||||
|   - name: InfluxDB | ||||
|     version: 2 | ||||
|     type: influxdb | ||||
|     access: proxy | ||||
|     url: http://influxdb:8086 | ||||
|     jsonData: | ||||
|       defaultBucket: "{{ influxdb.bucket }}" | ||||
|       httpMode: POST | ||||
|       organization: "{{ influxdb.org }}" | ||||
|       version: Flux | ||||
|     secureJsonData: | ||||
|       token: "{{ influxdb.admin_token }}" | ||||
							
								
								
									
										2
									
								
								tests/inventory
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										2
									
								
								tests/inventory
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,2 @@ | ||||
| localhost | ||||
| 
 | ||||
							
								
								
									
										5
									
								
								tests/test.yml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										5
									
								
								tests/test.yml
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,5 @@ | ||||
| --- | ||||
| - hosts: localhost | ||||
|   remote_user: root | ||||
|   roles: | ||||
|     - grafana | ||||
							
								
								
									
										2
									
								
								vars/main.yml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										2
									
								
								vars/main.yml
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,2 @@ | ||||
| --- | ||||
| # vars file for grafana | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user