From ed65595d9f175448c29ae1473f57491cb258e5f7 Mon Sep 17 00:00:00 2001 From: Robert Hamon Date: Tue, 21 Jun 2016 21:02:23 +0000 Subject: [PATCH] Allow multiple rings in nodelist and validate rrp_mode Closes #262 --- manifests/init.pp | 10 ++++++++++ templates/corosync.conf.erb | 6 ++++-- templates/corosync.conf.udpu.erb | 12 +++++++----- 3 files changed, 21 insertions(+), 7 deletions(-) diff --git a/manifests/init.pp b/manifests/init.pp index 4822f0c1..c37010ca 100644 --- a/manifests/init.pp +++ b/manifests/init.pp @@ -142,6 +142,8 @@ # [*quorum_members*] # Array of quorum member hostname. This is required if set_votequorum # is set to true. +# You can also have an array of arrays to have multiple rings. In that case, +# each subarray matches a member IP addresses. # Defaults to ['localhost'] # # [*quorum_members_ids*] @@ -318,6 +320,14 @@ fail('You must provide a value for multicast_address, unicast_address or cluster_name.') } + # $rrp_mode value of 'none' isn't allowed with multiple rings + if ( ( is_array($multicast_address) and size($multicast_address) > 1 ) + or ( is_array($unicast_addresses) and is_array($unicast_addresses[0]) and size($unicast_addresses[0]) > 1 ) + or ( is_array($quorum_members) and is_array($quorum_members[0]) and size($quorum_members[0]) > 1 ) ) + and $rrp_mode == 'none' { + fail('You must set rrp_mode to active or passive with multiple rings') + } + case $enable_secauth { true: { $enable_secauth_real = 'on' } false: { $enable_secauth_real = 'off' } diff --git a/templates/corosync.conf.erb b/templates/corosync.conf.erb index 2ed69373..fcfadb1d 100644 --- a/templates/corosync.conf.erb +++ b/templates/corosync.conf.erb @@ -88,9 +88,11 @@ quorum { <% unless @votequorum_expected_votes -%> nodelist { -<% [@quorum_members].flatten.each_index do |i| -%> +<% Array(@quorum_members).each_index do |i| -%> node { - ring0_addr: <%= [@quorum_members].flatten[i] %> +<% Array(Array(@quorum_members.map{|node| Array(node).flatten})[i]).each_with_index do |addr,ring| -%> + ring<%= ring %>_addr: <%= addr %> +<% end -%> <% if @quorum_members_ids.nil? -%> nodeid: <%= i+1 %> <% else -%> diff --git a/templates/corosync.conf.udpu.erb b/templates/corosync.conf.udpu.erb index 12644b03..e3becd76 100644 --- a/templates/corosync.conf.udpu.erb +++ b/templates/corosync.conf.udpu.erb @@ -20,11 +20,11 @@ totem { secauth: <%= @enable_secauth_real %> threads: <%= @threads %> transport: udpu -<% (0..Array(@unicast_addresses.first).length-1).each do |interface| -%> +<% Array(@unicast_addresses.first).each_index do |interface| -%> interface { -<% @unicast_addresses.each do |addr| -%> +<% Array(Array(@unicast_addresses.map{|x| Array(x).flatten}).transpose[interface]).each do |addr| -%> member { - memberaddr: <%= Array(addr)[interface] %> + memberaddr: <%= addr %> } <% end -%> ringnumber: <%= interface %> @@ -88,9 +88,11 @@ quorum { <% unless @votequorum_expected_votes -%> nodelist { -<% [@quorum_members].flatten.each_index do |i| -%> +<% Array(@quorum_members).each_index do |i| -%> node { - ring0_addr: <%= [@quorum_members].flatten[i] %> +<% Array(Array(@quorum_members.map{|node| Array(node).flatten})[i]).each_with_index do |addr,ring| -%> + ring<%= ring %>_addr: <%= addr %> +<% end -%> <% if @quorum_members_ids.nil? -%> nodeid: <%= i+1 %> <% else -%>