diff --git a/elk_metrics_6x/tests/testLayout.yml b/elk_metrics_6x/tests/testLayout.yml new file mode 100644 index 00000000..0839d3f4 --- /dev/null +++ b/elk_metrics_6x/tests/testLayout.yml @@ -0,0 +1,45 @@ +--- +- name: Test host layout + hosts: localhost + become: true + + 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 }}"