--- # Copyright 2016, Rackspace US, Inc. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. - name: Deploy traefik binaries hosts: grafana_all become: yes vars: traefik_binary_version: "v1.7.7" traefik_binary_url: "https://github.com/containous/traefik/releases/download/{{ traefik_binary_version }}/traefik" traefik_staging_node: "localhost" pre_tasks: - name: Create traefik temp path file: path: "/tmp/traefik/{{ ansible_architecture }}" state: directory delegate_to: "{{ traefik_staging_node }}" become: false tasks: - name: Refresh local facts setup: - name: Built traefik installation block: - name: Find traefik binaries find: paths: "/tmp/traefik/{{ ansible_architecture }}/" recurse: no patterns: "*traefik*" register: files_to_copy delegate_to: "{{ traefik_staging_node }}" run_once: true become: false - name: Install built traefik copy: src: "{{ item.path }}" dest: "/usr/local/bin/{{ item.path | basename }}" mode: "0755" with_items: "{{ files_to_copy.files }}" when: - ((groups['traefik_build_nodes'] | default([])) | length) > 0 - name: Upstream traefik installation block: - name: Get traefik binary get_url: url: "{{ traefik_binary_url }}" dest: "/tmp/traefik/{{ ansible_architecture }}/{{ traefik_binary_url | basename }}" mode: '0755' delegate_to: "{{ traefik_staging_node }}" run_once: true become: false - name: Install binary traefik copy: src: "/tmp/traefik/{{ ansible_architecture }}/{{ traefik_binary_url | basename }}" dest: "/usr/local/bin/traefik" mode: "0755" when: - ((groups['traefik_build_nodes'] | default([])) | length) < 1 tags: - traefik-install - name: Deploy Grafana hosts: grafana_all become: true vars_files: - vars/variables.yml pre_tasks: - name: Galera database block block: - name: Check for db password fail: msg: >- The database root login user is undefined when: - galera_root_user is undefined - name: Check for db password fail: msg: >- The database root password is undefined when: - galera_root_password is undefined - name: Install PyMySQL package: name: python3-pymysql - name: Create DB for service mysql_db: login_user: "{{ galera_root_user }}" login_password: "{{ galera_root_password }}" login_host: "{{ galera_address | default('127.0.0.1') }}" name: "{{ grafana_db_name }}" state: "present" delegate_to: "{{ groups['galera_all'][0] }}" - name: Grant access to the DB for the service mysql_user: login_user: "{{ galera_root_user }}" login_password: "{{ galera_root_password }}" login_host: "{{ galera_address | default('127.0.0.1') }}" name: "{{ grafana_db_user }}" password: "{{ grafana_db_password }}" host: "{{ item }}" state: "present" priv: "{{ grafana_db_name }}.*:ALL" with_items: - "localhost" - "%" delegate_to: "{{ groups['galera_all'][0] }}" - name: Set grafana database fact set_fact: grafana_database: type: mysql host: "{{ galera_address }}:3306" name: "{{ grafana_db_name }}" user: "{{ grafana_db_user }}" password: "{{ grafana_db_password }}" when: - (groups['galera_all'] | default([])) | length > 0 - name: Ensure https repos function apt: pkg: "apt-transport-https" state: "latest" roles: - role: traefik_common environment: "{{ deployment_environment_variables | default({}) }}" traffic_dashboard_bind: "{{ hostvars[inventory_hostname]['ansible_' ~ (ansible_default_ipv4['interface'] | replace('-', '_') | string)]['ipv4']['address'] }}" traefik_dashboard_enabled: true traefik_destinations: elasticsearch: proto: "http" port: "19200" bind: "127.0.0.1" servers: |- {% set nodes = [] %} {% for target in groups['kibana'] %} {% set node = {} %} {% set _ = node.__setitem__('name', 'elasticsearch' ~ loop.index) %} {% set _ = node.__setitem__('address', hostvars[target]['ansible_host']) %} {% set _ = node.__setitem__('weight', (100 - loop.index)) %} {% set _ = node.__setitem__('port', "9200") %} {% set _ = nodes.append(node) %} {% endfor %} {{ nodes }} - role: grafana.grafana.grafana