Skip to content

Commit 0c00e42

Browse files
Doninelli DavideDoninelli Davide
authored andcommitted
fix regex and test error
1 parent 6f30219 commit 0c00e42

File tree

2 files changed

+87
-69
lines changed

2 files changed

+87
-69
lines changed

lib/puppet/provider/cs_clone/pcs.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ def change_clone_id(type, primitive, id, cib)
2828
return unless doc.root.attributes['id'] != id
2929

3030
doc.root.attributes['id'] = id
31-
cmd = [command(:cibadmin), '--replace', '--xpath', xpath, '--xml-text', doc.to_s.chop]
31+
cmd = [command(:cibadmin), '--replace', '--xpath', xpath, '--xml-text', doc.to_s]
3232
self.class.run_command_in_cib(cmd, cib)
3333
end
3434

spec/classes/corosync_spec.rb

Lines changed: 86 additions & 68 deletions
Original file line numberDiff line numberDiff line change
@@ -17,12 +17,6 @@
1717
)
1818
end
1919

20-
it 'validates the corosync configuration' do
21-
is_expected.to contain_file('/etc/corosync/corosync.conf').with_validate_cmd(
22-
'/usr/bin/env COROSYNC_MAIN_CONFIG_FILE=% /usr/sbin/corosync -t'
23-
)
24-
end
25-
2620
context 'validates the corosncy configuration when config_validate_cmd is set' do
2721
let(:params) do
2822
super().merge(
@@ -65,16 +59,16 @@
6559

6660
it 'configures votequorum' do
6761
is_expected.to contain_file('/etc/corosync/corosync.conf').with_content(
68-
%r{nodelist}
62+
%r{nodelist\s*\{}
6963
)
7064
is_expected.to contain_file('/etc/corosync/corosync.conf').with_content(
71-
%r{ring0_addr: node1\.test\.org\n\s*nodeid: 1}
65+
%r{^\s*ring0_addr:\s*node1\.test\.org\s*(?:\r\n|\n)\s*nodeid:\s*1\s*$}
7266
)
7367
is_expected.to contain_file('/etc/corosync/corosync.conf').with_content(
74-
%r{ring0_addr: node2\.test\.org\n\s*nodeid: 2}
68+
%r{^\s*ring0_addr:\s*node2\.test\.org\s*(?:\r\n|\n)\s*nodeid:\s*2\s*$}
7569
)
7670
is_expected.to contain_file('/etc/corosync/corosync.conf').with_content(
77-
%r{two_node: 1\n}
71+
%r{^\s*two_node:\s*1}
7872
)
7973
end
8074

@@ -83,13 +77,13 @@
8377

8478
it 'supports persistent node IDs' do
8579
is_expected.to contain_file('/etc/corosync/corosync.conf').with_content(
86-
%r{nodelist}
80+
%r{nodelist\s*\{}
8781
)
8882
is_expected.to contain_file('/etc/corosync/corosync.conf').with_content(
89-
%r{ring0_addr: node1\.test\.org\n\s*nodeid: 3}
83+
%r{^\s*ring0_addr:\s*node1\.test\.org\s*(?:\r\n|\n)\s*nodeid:\s*3}
9084
)
9185
is_expected.to contain_file('/etc/corosync/corosync.conf').with_content(
92-
%r{ring0_addr: node2\.test\.org\n\s*nodeid: 11}
86+
%r{^\s*ring0_addr:\s*node2\.test\.org\s*(?:\r\n|\n)\s*nodeid:\s*11}
9387
)
9488
end
9589
end
@@ -104,13 +98,13 @@
10498

10599
it 'supports persistent node names' do
106100
is_expected.to contain_file('/etc/corosync/corosync.conf').with_content(
107-
%r{nodelist}
101+
%r{nodelist\s*\{}
108102
)
109103
is_expected.to contain_file('/etc/corosync/corosync.conf').with_content(
110-
%r{ring0_addr: 192\.168\.0\.1\n\s*nodeid: 1\n\s*name: node1\.test\.org}
104+
%r{^\s*ring0_addr:\s*192\.168\.0\.1(?:\r\n|\n)\s*nodeid:\s*1(?:\r\n|\n)\s*name:\s*node1\.test\.org}
111105
)
112106
is_expected.to contain_file('/etc/corosync/corosync.conf').with_content(
113-
%r{ring0_addr: 192\.168\.0\.2\n\s*nodeid: 2\n\s*name: node2\.test\.org}
107+
%r{^\s*ring0_addr:\s*192\.168\.0\.2(?:\r\n|\n)\s*nodeid:\s*2(?:\r\n|\n)\s*name:\s*node2\.test\.org}
114108
)
115109
end
116110
end
@@ -126,7 +120,7 @@
126120

127121
it 'does not configure two_nodes option' do
128122
is_expected.not_to contain_file('/etc/corosync/corosync.conf').with_content(
129-
%r{two_node: 1\n}
123+
%r{^\s*two_node:\s*1}
130124
)
131125
end
132126
end
@@ -140,7 +134,7 @@
140134

141135
it 'configures two_node' do
142136
is_expected.to contain_file('/etc/corosync/corosync.conf').with_content(
143-
%r{two_node: 1\n}
137+
%r{^\s*two_node:\s*1}
144138
)
145139
end
146140
end
@@ -155,16 +149,16 @@
155149

156150
it 'configures nodelist' do
157151
is_expected.to contain_file('/etc/corosync/corosync.conf').with_content(
158-
%r{nodelist}
152+
%r{nodelist\s*\{}
159153
)
160154
is_expected.to contain_file('/etc/corosync/corosync.conf').with_content(
161-
%r{ring0_addr: node1\.test\.org\n\s*nodeid: 1}
155+
%r{^\s*ring0_addr:\s*node1\.test\.org(?:\r\n|\n)\s*nodeid:\s*1}
162156
)
163157
is_expected.to contain_file('/etc/corosync/corosync.conf').with_content(
164-
%r{ring0_addr: node2\.test\.org\n\s*nodeid: 2}
158+
%r{^\s*ring0_addr:\s*node2\.test\.org(?:\r\n|\n)\s*nodeid:\s*2}
165159
)
166160
is_expected.to contain_file('/etc/corosync/corosync.conf').with_content(
167-
%r{two_node: 1\n}
161+
%r{^\s*two_node:\s*1}
168162
)
169163
end
170164
end
@@ -184,14 +178,14 @@
184178
(1..4).each do |node_id|
185179
it "configures rings for host #{node_id} correctly" do
186180
is_expected.to contain_file('/etc/corosync/corosync.conf').with_content(
187-
%r{ring0_addr: 172.31.10.#{node_id}\n\s*ring1_addr: 172.31.11.#{node_id}\n\s*ring2_addr: 172.31.12.#{node_id}\n\s*nodeid: #{node_id}}
181+
%r{ring0_addr: 172.31.10.#{node_id}(?:\r\n|\n)\s*ring1_addr: 172.31.11.#{node_id}(?:\r\n|\n)\s*ring2_addr: 172.31.12.#{node_id}(?:\r\n|\n)\s*nodeid: #{node_id}}
188182
)
189183
end
190184
end
191185

192186
it 'does not configure two_nodes option' do
193187
is_expected.not_to contain_file('/etc/corosync/corosync.conf').with_content(
194-
%r{two_node: 1\n}
188+
%r{^\s*two_node:\s*1}
195189
)
196190
end
197191
end
@@ -209,14 +203,14 @@
209203
(1..2).each do |node_id|
210204
it "configures rings for host #{node_id} correctly" do
211205
is_expected.to contain_file('/etc/corosync/corosync.conf').with_content(
212-
%r{ring0_addr: 172.31.10.#{node_id}\n\s*ring1_addr: 172.31.11.#{node_id}\n\s*ring2_addr: 172.31.12.#{node_id}\n\s*nodeid: #{node_id}}
206+
%r{ring0_addr: 172.31.10.#{node_id}(?:\r\n|\n)\s*ring1_addr: 172.31.11.#{node_id}(?:\r\n|\n)\s*ring2_addr: 172.31.12.#{node_id}(?:\r\n|\n)\s*nodeid: #{node_id}}
213207
)
214208
end
215209
end
216210

217211
it 'configures two_node' do
218212
is_expected.to contain_file('/etc/corosync/corosync.conf').with_content(
219-
%r{two_node: 1\n}
213+
%r{^\s*two_node:\s*1}
220214
)
221215
end
222216
end
@@ -240,43 +234,45 @@
240234

241235
it 'configures votequorum' do
242236
is_expected.to contain_file('/etc/corosync/corosync.conf').with_content(
243-
%r{nodelist}
237+
%r{nodelist\s*\{}
244238
)
245239
is_expected.to contain_file('/etc/corosync/corosync.conf').with_content(
246-
%r{ring0_addr: node1\.test\.org\n\s*nodeid: 1}
240+
%r{^\s*ring0_addr: node1\.test\.org(?:\r\n|\n)\s*nodeid:\s*1}
247241
)
248242
is_expected.to contain_file('/etc/corosync/corosync.conf').with_content(
249-
%r{ring0_addr: node2\.test\.org\n\s*nodeid: 2}
243+
%r{^\s*ring0_addr: node2\.test\.org(?:\r\n|\n)\s*nodeid:\s*2}
250244
)
251245
is_expected.to contain_file('/etc/corosync/corosync.conf').with_content(
252-
%r{two_node: 1\n}
246+
%r{^\s*two_node:\s*1}
253247
)
254248
end
255249

256250
it 'supports persistent node IDs' do
257251
params[:quorum_members_ids] = [3, 11]
258252
is_expected.to contain_file('/etc/corosync/corosync.conf').with_content(
259-
%r{nodelist}
253+
%r{nodelist\s*\{} # Match the presence of the word 'nodelist'
260254
)
255+
261256
is_expected.to contain_file('/etc/corosync/corosync.conf').with_content(
262-
%r{ring0_addr: node1\.test\.org\n\s*nodeid: 3}
257+
%r{^\s*ring0_addr:\s*node1\.test\.org(?:\r\n|\n)\s*nodeid:\s*3} # Match 'node1.test.org' with 'nodeid 3'
263258
)
259+
264260
is_expected.to contain_file('/etc/corosync/corosync.conf').with_content(
265-
%r{ring0_addr: node2\.test\.org\n\s*nodeid: 11}
261+
%r{^\s*ring0_addr:\s*node2\.test\.org(?:\r\n|(?:\r\n|\n))\s*nodeid:\s*11} # Match 'node2.test.org' with 'nodeid 11'
266262
)
267263
end
268264

269265
it 'supports persistent node names' do
270266
params[:quorum_members] = ['192.168.0.1', '192.168.0.2']
271267
params[:quorum_members_names] = ['node1.test.org', 'node2.test.org']
272268
is_expected.to contain_file('/etc/corosync/corosync.conf').with_content(
273-
%r{nodelist}
269+
%r{nodelist\s*\{}
274270
)
275271
is_expected.to contain_file('/etc/corosync/corosync.conf').with_content(
276-
%r{ring0_addr: 192\.168\.0\.1\n\s*nodeid: 1\n\s*name: node1\.test\.org}
272+
%r{^\s*ring0_addr: 192\.168\.0\.1(?:\r\n|\n)\s*nodeid:\s*1(?:\r\n|\n)\s*name:\s*node1\.test\.org}
277273
)
278274
is_expected.to contain_file('/etc/corosync/corosync.conf').with_content(
279-
%r{ring0_addr: 192\.168\.0\.2\n\s*nodeid: 2\n\s*name: node2\.test\.org}
275+
%r{^\s*ring0_addr: 192\.168\.0\.2(?:\r\n|\n)\s*nodeid:\s*2(?:\r\n|\n)\s*name:\s*node2\.test\.org}
280276
)
281277
end
282278
end
@@ -337,7 +333,7 @@
337333

338334
it 'configures cluster_name' do
339335
is_expected.to contain_file('/etc/corosync/corosync.conf').with_content(
340-
%r{cluster_name:\s*hacell$}
336+
%r{^\s*cluster_name:\s*hacell}
341337
)
342338
end
343339
end
@@ -542,7 +538,7 @@
542538

543539
it 'is set in corosync.conf' do
544540
is_expected.to contain_file('/etc/corosync/corosync.conf').with_content(
545-
%r{#{optional_parameter}:\s*#{possible_value}\n}
541+
%r{#{optional_parameter.to_s}:\s*#{Regexp.escape(possible_value.to_s)}\s*\n}
546542
)
547543
end
548544
end
@@ -601,7 +597,7 @@
601597

602598
it 'does not contain nodelist' do
603599
is_expected.not_to contain_file('/etc/corosync/corosync.conf').with_content(
604-
%r{nodelist}
600+
%r{nodelist\s*\{}
605601
)
606602
end
607603
end
@@ -616,7 +612,7 @@
616612

617613
it 'does not contain nodelist' do
618614
is_expected.not_to contain_file('/etc/corosync/corosync.conf').with_content(
619-
%r{nodelist}
615+
%r{nodelist\s*\{}
620616
)
621617
end
622618
end
@@ -730,6 +726,27 @@
730726

731727
it_configures 'corosync'
732728

729+
# Check the correct validation command is used for each OS
730+
it 'validates the corosync configuration' do
731+
case os_facts[:os]['family']
732+
when 'RedHat'
733+
case os_facts[:os]['release']['major'].to_i
734+
when 0..7
735+
is_expected.to contain_file('/etc/corosync/corosync.conf').with_validate_cmd(
736+
'/usr/bin/env COROSYNC_MAIN_CONFIG_FILE=% /usr/sbin/corosync -t'
737+
)
738+
else
739+
is_expected.to contain_file('/etc/corosync/corosync.conf').with_validate_cmd(
740+
'/usr/sbin/corosync -c % -t'
741+
)
742+
end
743+
else
744+
is_expected.to contain_file('/etc/corosync/corosync.conf').with_validate_cmd(
745+
'/usr/bin/env COROSYNC_MAIN_CONFIG_FILE=% /usr/sbin/corosync -t'
746+
)
747+
end
748+
end
749+
733750
# Check default package installations per platform
734751
case os_facts[:os]['family']
735752
when 'RedHat'
@@ -942,9 +959,7 @@
942959

943960
it 'does not contain the quorum device config in corosync.conf' do
944961
is_expected.to contain_file('/etc/corosync/corosync.conf').with_content(
945-
%r!quorum {
946-
provider: corosync_votequorum
947-
}$!m
962+
%r{quorum\s*\{\s*provider:\s*corosync_votequorum\s*\}\s*$}
948963
)
949964
end
950965

@@ -963,18 +978,20 @@
963978

964979
it 'contains the quorum configuration' do
965980
is_expected.to contain_file('/etc/corosync/corosync.conf').with_content(
966-
%r!quorum {
967-
provider: corosync_votequorum
968-
device {
969-
model: net
970-
votes: 1
971-
972-
net {
973-
algorithm: ffsplit
974-
host: quorum1[.]test[.]org
975-
}
976-
}
977-
}!m
981+
%r{
982+
quorum\s*\{ # Match 'quorum {' with optional spaces
983+
\s*provider:\s*corosync_votequorum # Match 'provider: corosync_votequorum'
984+
\s*device\s*\{ # Match 'device {' with optional spaces
985+
\s*model:\s*net # Match 'model: net'
986+
\s*votes:\s*1 # Match 'votes: 1'
987+
\s* # Match optional empty line
988+
\s*net\s*\{ # Match 'net {' with optional spaces
989+
\s*algorithm:\s*ffsplit # Match 'algorithm: ffsplit'
990+
\s*host:\s*quorum1\.test\.org # Match 'host: quorum1.test.org'
991+
\s*\} # Match closing '}' for 'net'
992+
\s*\} # Match closing '}' for 'device'
993+
\s*\} # Match closing '}' for 'quorum'
994+
}x # 'x' modifier allows free-spacing and comments
978995
)
979996
end
980997

@@ -1050,18 +1067,19 @@
10501067

10511068
it 'contains the quorum configuration' do
10521069
is_expected.to contain_file('/etc/corosync/corosync.conf').with_content(
1053-
%r!quorum {
1054-
provider: corosync_votequorum
1055-
device {
1056-
model: net
1057-
votes: 1
1058-
1059-
net {
1060-
algorithm: ffsplit
1061-
host: quorum1[.]test[.]org
1062-
}
1063-
}
1064-
}!m
1070+
%r{
1071+
quorum\s*\{ # Match 'quorum {' with optional spaces
1072+
\s*provider:\s*corosync_votequorum # Match 'provider: corosync_votequorum'
1073+
\s*device\s*\{ # Match 'device {' with optional spaces
1074+
\s*model:\s*net # Match 'model: net'
1075+
\s*votes:\s*1 # Match 'votes: 1'
1076+
\s*net\s*\{ # Match 'net {' with optional spaces
1077+
\s*algorithm:\s*ffsplit # Match 'algorithm: ffsplit'
1078+
\s*host:\s*quorum1\.test\.org # Match 'host: quorum1.test.org'
1079+
\s*\} # Match closing '}' for 'net'
1080+
\s*\} # Match closing '}' for 'device'
1081+
\s*\} # Match closing '}' for 'quorum'
1082+
}x # 'x' modifier allows free-spacing and comments
10651083
)
10661084
end
10671085
end
@@ -1079,7 +1097,7 @@
10791097

10801098
it 'does not configure two node' do
10811099
is_expected.not_to contain_file('/etc/corosync/corosync.conf').with_content(
1082-
%r{two_node: 1\n}
1100+
%r{^\s*two_node:\s*1}
10831101
)
10841102
end
10851103
# else - to implement

0 commit comments

Comments
 (0)