3a0b3d2cde
This change adds the scaffolding required to get multi-distro support running in the roles. The change breaks up our playbooks converting all of the tasks into various roles with internal dependencies. While this will improve execution time, the change is being done to reduce boiler plate and to allow us to build on the pattern used in OSA to provide multi-distro capabilities. A side effect of this change is a major improvement in idempotency. The playbooks should now be 100% idempotent. All of the templates have been left in the main playbook directory. This was done to help ease the transition. In a future PR the template structure will be moved into the roles where it needs to be. The main variable files has been left intact. This file will be carved up into role defaults in a future PR. Change-Id: I938a10564128ce4078fa12edcf614dcdbd684b25 Signed-off-by: Kevin Carter <kevin.carter@rackspace.com>
63 lines
2.2 KiB
YAML
63 lines
2.2 KiB
YAML
---
|
|
# 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.
|
|
|
|
- import_playbook: run-setup.yml
|
|
|
|
- name: Test host layout
|
|
hosts: localhost
|
|
become: true
|
|
|
|
environment:
|
|
ANSIBLE_LOG_PATH: "/tmp/elk-metrics-6x-logs/ansible-elk-test.log"
|
|
|
|
vars:
|
|
storage_node_count: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20]
|
|
expected_masters: [1, 1, 3, 3, 3, 3, 3, 5, 5, 5, 5, 7, 7, 7, 7, 9, 9, 9, 9, 11]
|
|
|
|
tasks:
|
|
|
|
# the elasticserch cluster elects one master from all those which are marked as master-eligible
|
|
# 1 node cluster can only have one master
|
|
# 2 node clusters have 1 master-eligable nodes to avoid split-brain
|
|
# 3 node clusters have 3 master-eligable nodes
|
|
# >3 node clusters have (nodes // 2) eligable masters rounded up to the next odd number
|
|
- name: Master node count fact
|
|
set_fact:
|
|
master_node_count: |-
|
|
{% set masters = 0 %}
|
|
{% if (item | int) < 3 %}
|
|
{% set masters = 1 %}
|
|
{% elif (item | int) == 3 %}
|
|
{% set masters = 3 %}
|
|
{% else %}
|
|
{% set masters = (item | int ) // 2 %}
|
|
{% if ((masters | int) % 2 == 0) %}
|
|
{% set masters = (masters | int) + 1 %}
|
|
{% endif %}
|
|
{% endif %}
|
|
{{ masters }}
|
|
with_items: "{{ storage_node_count }}"
|
|
register: computed_masters
|
|
|
|
- name: Gather results
|
|
set_fact:
|
|
masters: "{{ masters|default([]) + [ { 'nodes': item.item, 'masters': (item.ansible_facts.master_node_count|int) } ] }}"
|
|
with_items: "{{ computed_masters.results }}"
|
|
|
|
- name: Check results
|
|
assert:
|
|
that: item.0 == item.1.masters
|
|
with_together:
|
|
- "{{ expected_masters }}"
|
|
- "{{ masters }}"
|