322d014d04
Change-Id: Id1a49547fecb886263d80a7137dd4dfb1f6c8ea1
163 lines
5.4 KiB
YAML
163 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: 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
|