8ee8ec0832
The grafana role will now deploy and setup the grafana datasources using the API as expected. API users will also be created for admin, viewer, editor. The es config for grafana has been udpated to correct issues where the system expected a publically accessible lb to handle grafana traffic back to an es cluster. When the grafana role deploys the traefik lb will now be used within the grafana deployment to ensure grafana is able to deploy against an es cluster. Change-Id: Iae3a5c2ab1b98390110d37f33b074156d32bb684 Signed-off-by: Kevin Carter <kevin@cloudnull.com>
160 lines
5.3 KiB
YAML
160 lines
5.3 KiB
YAML
---
|
|
# 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: 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: python-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
|
|
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
|