1006dab986
The inclusion of the grafana submodule contradicts the deployment process in the README, where it is explicitly cloned to /etc/ansible/roles. The empty folder for the submodule takes higher precendence than explicit clone, meaning that the grafana role is found, but contains no tasks. The submodule has been deleted to stop this. There are also failures when running behind a proxy in the traefik-common role, These are now avoided by running the role with deployment_environment_variables set. Change-Id: Icc34087e17906c763286b98591bade73fa7c022e
161 lines
5.4 KiB
YAML
161 lines
5.4 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
|
|
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
|