beaker-puppet 2.1.0 → 3.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.github/workflows/release.yml +1 -1
- data/.github/workflows/test.yml +2 -2
- data/.github_changelog_generator +3 -0
- data/.rubocop_todo.yml +52 -7
- data/CHANGELOG.md +14 -3
- data/CODEOWNERS +1 -0
- data/README.md +4 -13
- data/acceptance/tests/stub_host.rb +1 -1
- data/beaker-puppet.gemspec +3 -3
- data/lib/beaker-puppet/helpers/puppet_helpers.rb +20 -95
- data/lib/beaker-puppet/install_utils/foss_utils.rb +10 -194
- data/lib/beaker-puppet/install_utils/puppet_utils.rb +0 -17
- data/lib/beaker-puppet/version.rb +1 -1
- data/release-prep.sh +11 -0
- data/setup/aio/010_Install_Puppet_Agent.rb +22 -8
- data/setup/common/040_ValidateSignCert.rb +4 -11
- data/setup/gem/010_GemInstall.rb +1 -1
- data/spec/beaker-puppet/helpers/puppet_helpers_spec.rb +1 -251
- data/spec/beaker-puppet/install_utils/foss_utils_spec.rb +34 -463
- data/spec/beaker-puppet/install_utils/puppet_utils_spec.rb +0 -23
- data/tasks/ci.rake +27 -19
- metadata +11 -6
@@ -638,7 +638,7 @@ describe ClassMixedWithDSLHelpers do
|
|
638
638
|
end
|
639
639
|
end
|
640
640
|
|
641
|
-
it 'signs certs with `puppetserver ca`
|
641
|
+
it 'signs certs with `puppetserver ca`' do
|
642
642
|
allow(subject).to receive(:sleep).and_return(true)
|
643
643
|
|
644
644
|
result.stdout = "+ \"#{agent}\""
|
@@ -647,34 +647,12 @@ describe ClassMixedWithDSLHelpers do
|
|
647
647
|
arg
|
648
648
|
end
|
649
649
|
|
650
|
-
version_result = double('version', stdout: '6.0.0')
|
651
|
-
expect(subject).to receive(:on).with(master, '--version').and_return(version_result)
|
652
|
-
expect(subject).to receive(:version_is_less).and_return(false)
|
653
650
|
expect(subject).to receive(:on).with(master, 'puppetserver ca sign --all', acceptable_exit_codes: [0, 24]).once
|
654
651
|
expect(subject).to receive(:on).with(master, 'puppetserver ca list --all').once.and_return(result)
|
655
652
|
|
656
653
|
subject.sign_certificate_for(agent)
|
657
654
|
end
|
658
655
|
|
659
|
-
it 'signs certs with `puppet cert` in Puppet 5' do
|
660
|
-
allow(subject).to receive(:sleep).and_return(true)
|
661
|
-
|
662
|
-
result.stdout = "+ \"#{agent}\""
|
663
|
-
|
664
|
-
allow(subject).to receive(:puppet) do |arg|
|
665
|
-
arg
|
666
|
-
end
|
667
|
-
|
668
|
-
version_result = double('version', stdout: '5.0.0')
|
669
|
-
expect(subject).to receive(:on).with(master, '--version').and_return(version_result)
|
670
|
-
expect(subject).to receive(:version_is_less).and_return(true)
|
671
|
-
expect(subject).to receive(:on).with(master, 'cert --sign --all --allow-dns-alt-names',
|
672
|
-
acceptable_exit_codes: [0, 24]).once
|
673
|
-
expect(subject).to receive(:on).with(master, 'cert --list --all').once.and_return(result)
|
674
|
-
|
675
|
-
subject.sign_certificate_for(agent)
|
676
|
-
end
|
677
|
-
|
678
656
|
it 'retries 11 times before quitting' do
|
679
657
|
allow(subject).to receive(:sleep).and_return(true)
|
680
658
|
|
@@ -685,8 +663,6 @@ describe ClassMixedWithDSLHelpers do
|
|
685
663
|
arg
|
686
664
|
end
|
687
665
|
|
688
|
-
version_result = double('version', stdout: '6.0.0')
|
689
|
-
expect(subject).to receive(:on).with(master, '--version').and_return(version_result)
|
690
666
|
expect(subject).to receive(:on).with(master, 'puppetserver ca sign --all',
|
691
667
|
acceptable_exit_codes: [0, 24]).exactly(11).times
|
692
668
|
expect(subject).to receive(:on).with(master,
|
@@ -706,8 +682,6 @@ describe ClassMixedWithDSLHelpers do
|
|
706
682
|
arg
|
707
683
|
end
|
708
684
|
expect(subject).to receive(:on).with(master, 'agent -t', acceptable_exit_codes: [0, 1, 2]).once
|
709
|
-
version_result = double('version', stdout: '6.0.0')
|
710
|
-
expect(subject).to receive(:on).with(master, '--version').and_return(version_result)
|
711
685
|
expect(subject).to receive(:on).with(master, 'puppetserver ca sign --certname master').once
|
712
686
|
expect(subject).to receive(:on).with(master, 'puppetserver ca sign --all',
|
713
687
|
acceptable_exit_codes: [0, 24]).once
|
@@ -760,7 +734,6 @@ describe ClassMixedWithDSLHelpers do
|
|
760
734
|
end
|
761
735
|
|
762
736
|
it 'raises the early_exception if backup_the_file fails' do
|
763
|
-
allow(host).to receive(:use_service_scripts?)
|
764
737
|
allow(subject).to receive(:restore_puppet_conf_from_backup)
|
765
738
|
expect(subject).to receive(:backup_the_file).and_raise(RuntimeError.new('puppet conf backup failed'))
|
766
739
|
expect do
|
@@ -772,7 +745,6 @@ describe ClassMixedWithDSLHelpers do
|
|
772
745
|
allow(subject).to receive(:backup_the_file).and_raise(Minitest::Assertion.new('assertion failed!'))
|
773
746
|
allow(host).to receive(:puppet).and_return({})
|
774
747
|
allow(subject).to receive(:restore_puppet_conf_from_backup)
|
775
|
-
allow(host).to receive(:use_service_scripts?)
|
776
748
|
expect(subject).to receive(:fail_test)
|
777
749
|
subject.with_puppet_running_on(host, {})
|
778
750
|
end
|
@@ -847,7 +819,6 @@ describe ClassMixedWithDSLHelpers do
|
|
847
819
|
allow(subject).to receive(:dump_puppet_log)
|
848
820
|
allow(subject).to receive(:restore_puppet_conf_from_backup)
|
849
821
|
allow(subject).to receive(:puppet_master_started)
|
850
|
-
allow(subject).to receive(:start_puppet_from_source_on!)
|
851
822
|
allow(subject).to receive(:lay_down_new_puppet_conf)
|
852
823
|
allow(subject).to receive(:logger).and_return(logger)
|
853
824
|
allow(logger).to receive(:error)
|
@@ -953,160 +924,6 @@ describe ClassMixedWithDSLHelpers do
|
|
953
924
|
end
|
954
925
|
end
|
955
926
|
|
956
|
-
context 'for foss packaged hosts using passenger' do
|
957
|
-
before(:each) do
|
958
|
-
host.uses_passenger!
|
959
|
-
end
|
960
|
-
it 'bounces puppet twice' do
|
961
|
-
allow(subject).to receive(:curl_with_retries)
|
962
|
-
subject.with_puppet_running_on(host, {})
|
963
|
-
expect(host).to execute_commands_matching(/apachectl graceful/).exactly(2).times
|
964
|
-
end
|
965
|
-
|
966
|
-
it 'gracefully restarts using apache2ctl' do
|
967
|
-
allow(host).to receive(:check_for_command).and_return(true)
|
968
|
-
allow(subject).to receive(:curl_with_retries)
|
969
|
-
subject.with_puppet_running_on(host, {})
|
970
|
-
expect(host).to execute_commands_matching(/apache2ctl graceful/).exactly(2).times
|
971
|
-
end
|
972
|
-
|
973
|
-
it 'gracefully restarts using apachectl' do
|
974
|
-
allow(host).to receive(:check_for_command).and_return(false)
|
975
|
-
allow(subject).to receive(:curl_with_retries)
|
976
|
-
subject.with_puppet_running_on(host, {})
|
977
|
-
expect(host).to execute_commands_matching(/apachectl graceful/).exactly(2).times
|
978
|
-
end
|
979
|
-
|
980
|
-
it 'yields to a block after bouncing service' do
|
981
|
-
execution = 0
|
982
|
-
allow(subject).to receive(:curl_with_retries)
|
983
|
-
expect do
|
984
|
-
subject.with_puppet_running_on(host, {}) do
|
985
|
-
expect(host).to execute_commands_matching(/apachectl graceful/).once
|
986
|
-
execution += 1
|
987
|
-
end
|
988
|
-
end.to change { execution }.by(1)
|
989
|
-
expect(host).to execute_commands_matching(/apachectl graceful/).exactly(2).times
|
990
|
-
end
|
991
|
-
|
992
|
-
context ':restart_when_done flag set false' do
|
993
|
-
it 'bounces puppet once' do
|
994
|
-
allow(subject).to receive(:curl_with_retries)
|
995
|
-
subject.with_puppet_running_on(host, { restart_when_done: false })
|
996
|
-
expect(host).to execute_commands_matching(/apachectl graceful/).once
|
997
|
-
end
|
998
|
-
|
999
|
-
it 'yields to a block after bouncing service' do
|
1000
|
-
execution = 0
|
1001
|
-
allow(subject).to receive(:curl_with_retries)
|
1002
|
-
expect do
|
1003
|
-
subject.with_puppet_running_on(host, { restart_when_done: false }) do
|
1004
|
-
expect(host).to execute_commands_matching(/apachectl graceful/).once
|
1005
|
-
execution += 1
|
1006
|
-
end
|
1007
|
-
end.to change { execution }.by(1)
|
1008
|
-
end
|
1009
|
-
end
|
1010
|
-
end
|
1011
|
-
|
1012
|
-
context 'for foss packaged hosts using webrick' do
|
1013
|
-
let(:use_service) { true }
|
1014
|
-
|
1015
|
-
it 'stops and starts master using service scripts twice' do
|
1016
|
-
allow(subject).to receive(:curl_with_retries)
|
1017
|
-
subject.with_puppet_running_on(host, {})
|
1018
|
-
expect(host).to execute_commands_matching(/puppet resource service #{host['puppetservice']}.*ensure=running/).exactly(2).times
|
1019
|
-
expect(host).to execute_commands_matching(/puppet resource service #{host['puppetservice']}.*ensure=stopped/).exactly(2).times
|
1020
|
-
end
|
1021
|
-
|
1022
|
-
it 'yields to a block in between bounce calls for the service' do
|
1023
|
-
execution = 0
|
1024
|
-
expect do
|
1025
|
-
subject.with_puppet_running_on(host, {}) do
|
1026
|
-
expect(host).to execute_commands_matching(/puppet resource service #{host['puppetservice']}.*ensure=running/).once
|
1027
|
-
expect(host).to execute_commands_matching(/puppet resource service #{host['puppetservice']}.*ensure=stopped/).once
|
1028
|
-
execution += 1
|
1029
|
-
end
|
1030
|
-
end.to change { execution }.by(1)
|
1031
|
-
expect(host).to execute_commands_matching(/puppet resource service #{host['puppetservice']}.*ensure=running/).exactly(2).times
|
1032
|
-
expect(host).to execute_commands_matching(/puppet resource service #{host['puppetservice']}.*ensure=stopped/).exactly(2).times
|
1033
|
-
end
|
1034
|
-
|
1035
|
-
context ':restart_when_done flag set false' do
|
1036
|
-
it 'stops (twice) and starts (once) master using service scripts' do
|
1037
|
-
allow(subject).to receive(:curl_with_retries)
|
1038
|
-
subject.with_puppet_running_on(host, { restart_when_done: false })
|
1039
|
-
expect(host).to execute_commands_matching(/puppet resource service #{host['puppetservice']}.*ensure=running/).once
|
1040
|
-
expect(host).to execute_commands_matching(/puppet resource service #{host['puppetservice']}.*ensure=stopped/).exactly(2).times
|
1041
|
-
end
|
1042
|
-
|
1043
|
-
it 'yields to a block after stopping and starting service' do
|
1044
|
-
execution = 0
|
1045
|
-
expect do
|
1046
|
-
subject.with_puppet_running_on(host, { restart_when_done: false }) do
|
1047
|
-
expect(host).to execute_commands_matching(/puppet resource service #{host['puppetservice']}.*ensure=running/).once
|
1048
|
-
expect(host).to execute_commands_matching(/puppet resource service #{host['puppetservice']}.*ensure=stopped/).once
|
1049
|
-
execution += 1
|
1050
|
-
end
|
1051
|
-
end.to change { execution }.by(1)
|
1052
|
-
end
|
1053
|
-
end
|
1054
|
-
end
|
1055
|
-
|
1056
|
-
context 'running from source' do
|
1057
|
-
it 'does not try to stop if not started' do
|
1058
|
-
expect(subject).to receive(:start_puppet_from_source_on!).and_return false
|
1059
|
-
expect(subject).to_not receive(:stop_puppet_from_source_on)
|
1060
|
-
|
1061
|
-
subject.with_puppet_running_on(host, {})
|
1062
|
-
end
|
1063
|
-
|
1064
|
-
context 'successfully' do
|
1065
|
-
before do
|
1066
|
-
expect(host).to receive(:port_open?).with(8140).and_return(true)
|
1067
|
-
end
|
1068
|
-
|
1069
|
-
it 'starts puppet from source' do
|
1070
|
-
subject.with_puppet_running_on(host, {})
|
1071
|
-
end
|
1072
|
-
|
1073
|
-
it 'stops puppet from source' do
|
1074
|
-
subject.with_puppet_running_on(host, {})
|
1075
|
-
expect(host).to execute_commands_matching(/^kill [^-]/).once
|
1076
|
-
expect(host).to execute_commands_matching(/^kill -0/).once
|
1077
|
-
end
|
1078
|
-
|
1079
|
-
it 'yields between starting and stopping' do
|
1080
|
-
execution = 0
|
1081
|
-
expect do
|
1082
|
-
subject.with_puppet_running_on(host, {}) do
|
1083
|
-
expect(host).to execute_commands_matching(/^puppet master/).once
|
1084
|
-
execution += 1
|
1085
|
-
end
|
1086
|
-
end.to change { execution }.by(1)
|
1087
|
-
expect(host).to execute_commands_matching(/^kill [^-]/).once
|
1088
|
-
expect(host).to execute_commands_matching(/^kill -0/).once
|
1089
|
-
end
|
1090
|
-
|
1091
|
-
it 'passes on commandline args' do
|
1092
|
-
subject.with_puppet_running_on(host, { __commandline_args__: '--with arg' })
|
1093
|
-
expect(host).to execute_commands_matching(/^puppet master --with arg/).once
|
1094
|
-
end
|
1095
|
-
|
1096
|
-
it 'is not affected by the :restart_when_done flag' do
|
1097
|
-
execution = 0
|
1098
|
-
expect do
|
1099
|
-
subject.with_puppet_running_on(host, { restart_when_done: true }) do
|
1100
|
-
expect(host).to execute_commands_matching(/^puppet master/).once
|
1101
|
-
execution += 1
|
1102
|
-
end
|
1103
|
-
end.to change { execution }.by(1)
|
1104
|
-
expect(host).to execute_commands_matching(/^kill [^-]/).once
|
1105
|
-
expect(host).to execute_commands_matching(/^kill -0/).once
|
1106
|
-
end
|
1107
|
-
end
|
1108
|
-
end
|
1109
|
-
|
1110
927
|
describe 'backup and restore of puppet.conf' do
|
1111
928
|
before :each do
|
1112
929
|
allow(subject).to receive(:puppet_config).with(host, 'confdir', anything).and_return('/root/mock')
|
@@ -1139,70 +956,6 @@ describe ClassMixedWithDSLHelpers do
|
|
1139
956
|
/ensure=running/)
|
1140
957
|
end
|
1141
958
|
end
|
1142
|
-
|
1143
|
-
context 'when a puppetservice is not used' do
|
1144
|
-
before do
|
1145
|
-
expect(host).to receive(:port_open?).with(8140).and_return(true)
|
1146
|
-
end
|
1147
|
-
|
1148
|
-
it 'backs up puppet.conf' do
|
1149
|
-
subject.with_puppet_running_on(host, {})
|
1150
|
-
expect(host).to execute_commands_matching(/cp #{original_location} #{backup_location}/).once
|
1151
|
-
expect(host).to execute_commands_matching(/cat #{new_location} > #{original_location}/).once
|
1152
|
-
end
|
1153
|
-
|
1154
|
-
it 'restores puppet.conf after restarting when a puppetservice is not used' do
|
1155
|
-
subject.with_puppet_running_on(host, {})
|
1156
|
-
expect(host).to execute_commands_matching_in_order(/kill [^-]/,
|
1157
|
-
/cat '#{backup_location}' > '#{original_location}'/m)
|
1158
|
-
end
|
1159
|
-
|
1160
|
-
it "doesn't restore a non-existent file" do
|
1161
|
-
allow(subject).to receive(:backup_the_file)
|
1162
|
-
subject.with_puppet_running_on(host, {})
|
1163
|
-
expect(host).to execute_commands_matching(/rm -f '#{original_location}'/)
|
1164
|
-
end
|
1165
|
-
end
|
1166
|
-
end
|
1167
|
-
|
1168
|
-
let(:logger) { double.as_null_object }
|
1169
|
-
describe 'handling failures' do
|
1170
|
-
before do
|
1171
|
-
allow(subject).to receive(:logger).and_return(logger)
|
1172
|
-
expect(subject).to receive(:stop_puppet_from_source_on).and_raise(RuntimeError.new('Also failed in teardown.'))
|
1173
|
-
expect(host).to receive(:port_open?).with(8140).and_return(true)
|
1174
|
-
end
|
1175
|
-
|
1176
|
-
it 'does not swallow an exception raised from within test block if ensure block also fails' do
|
1177
|
-
expect(subject.logger).to receive(:error).with(/Raised during attempt to teardown.*Also failed in teardown/)
|
1178
|
-
|
1179
|
-
expect do
|
1180
|
-
subject.with_puppet_running_on(host, {}) { raise 'Failed while yielding.' }
|
1181
|
-
end.to raise_error(RuntimeError, /failed.*because.*Failed while yielding./)
|
1182
|
-
end
|
1183
|
-
|
1184
|
-
it 'dumps the puppet logs if there is an error in the teardown' do
|
1185
|
-
expect(subject.logger).to receive(:notify).with(/Dumping master log/)
|
1186
|
-
|
1187
|
-
expect do
|
1188
|
-
subject.with_puppet_running_on(host, {})
|
1189
|
-
end.to raise_error(RuntimeError, /Also failed in teardown/)
|
1190
|
-
end
|
1191
|
-
|
1192
|
-
it 'does not mask the teardown error with an error from dumping the logs' do
|
1193
|
-
expect(subject.logger).to receive(:notify).with(/Dumping master log/).and_raise('Error from dumping logs')
|
1194
|
-
|
1195
|
-
expect do
|
1196
|
-
subject.with_puppet_running_on(host, {})
|
1197
|
-
end.to raise_error(RuntimeError, /Also failed in teardown/)
|
1198
|
-
end
|
1199
|
-
|
1200
|
-
it 'does not swallow a teardown exception if no earlier exception was raised' do
|
1201
|
-
expect(subject.logger).to_not receive(:error)
|
1202
|
-
expect do
|
1203
|
-
subject.with_puppet_running_on(host, {})
|
1204
|
-
end.to raise_error(RuntimeError, 'Also failed in teardown.')
|
1205
|
-
end
|
1206
959
|
end
|
1207
960
|
end
|
1208
961
|
end
|
@@ -1229,7 +982,6 @@ describe ClassMixedWithDSLHelpers do
|
|
1229
982
|
host = FakeHost.create
|
1230
983
|
allow(result).to receive(:exit_code).and_return(0)
|
1231
984
|
allow(host).to receive(:any_exec_result).and_return(result)
|
1232
|
-
allow(host).to receive(:graceful_restarts?).and_return(false)
|
1233
985
|
|
1234
986
|
expect(Beaker::Command).to receive(:new).with(
|
1235
987
|
/service not_real_service reload/,
|
@@ -1251,7 +1003,6 @@ describe ClassMixedWithDSLHelpers do
|
|
1251
1003
|
|
1252
1004
|
it 'uses the default port argument if none given' do
|
1253
1005
|
host = FakeHost.create
|
1254
|
-
expect(host).to receive(:graceful_restarts?).and_return(false)
|
1255
1006
|
allow(result).to receive(:exit_code).and_return(1)
|
1256
1007
|
expect(subject).to receive(:curl_with_retries).with(
|
1257
1008
|
anything, anything, /8140/, anything, anything
|
@@ -1261,7 +1012,6 @@ describe ClassMixedWithDSLHelpers do
|
|
1261
1012
|
|
1262
1013
|
it 'takes the port argument' do
|
1263
1014
|
host = FakeHost.create
|
1264
|
-
expect(host).to receive(:graceful_restarts?).and_return(false)
|
1265
1015
|
allow(result).to receive(:exit_code).and_return(1)
|
1266
1016
|
expect(subject).to receive(:curl_with_retries).with(
|
1267
1017
|
anything, anything, /8000/, anything, anything
|