hybrid_platforms_conductor 33.0.0 → 33.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (242) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +6 -0
  3. data/bin/check-node +0 -1
  4. data/bin/deploy +0 -1
  5. data/bin/get_impacted_nodes +0 -1
  6. data/bin/last_deploys +8 -7
  7. data/bin/nodes_to_deploy +2 -2
  8. data/bin/setup +6 -6
  9. data/bin/topograph +1 -1
  10. data/lib/hybrid_platforms_conductor/action.rb +4 -4
  11. data/lib/hybrid_platforms_conductor/actions_executor.rb +37 -42
  12. data/lib/hybrid_platforms_conductor/bitbucket.rb +5 -4
  13. data/lib/hybrid_platforms_conductor/cmd_runner.rb +13 -12
  14. data/lib/hybrid_platforms_conductor/cmdb.rb +2 -2
  15. data/lib/hybrid_platforms_conductor/common_config_dsl/bitbucket.rb +2 -1
  16. data/lib/hybrid_platforms_conductor/common_config_dsl/confluence.rb +2 -1
  17. data/lib/hybrid_platforms_conductor/common_config_dsl/file_system_tests.rb +5 -4
  18. data/lib/hybrid_platforms_conductor/common_config_dsl/github.rb +4 -3
  19. data/lib/hybrid_platforms_conductor/common_config_dsl/idempotence_tests.rb +2 -2
  20. data/lib/hybrid_platforms_conductor/config.rb +7 -4
  21. data/lib/hybrid_platforms_conductor/confluence.rb +1 -1
  22. data/lib/hybrid_platforms_conductor/connector.rb +5 -2
  23. data/lib/hybrid_platforms_conductor/core_extensions/symbol/zero.rb +24 -0
  24. data/lib/hybrid_platforms_conductor/credentials.rb +39 -36
  25. data/lib/hybrid_platforms_conductor/current_dir_monitor.rb +4 -1
  26. data/lib/hybrid_platforms_conductor/deployer.rb +95 -96
  27. data/lib/hybrid_platforms_conductor/executable.rb +20 -15
  28. data/lib/hybrid_platforms_conductor/hpc_plugins/cmdb/config.rb +10 -7
  29. data/lib/hybrid_platforms_conductor/hpc_plugins/cmdb/host_ip.rb +1 -1
  30. data/lib/hybrid_platforms_conductor/hpc_plugins/cmdb/host_keys.rb +2 -2
  31. data/lib/hybrid_platforms_conductor/hpc_plugins/cmdb/platform_handlers.rb +4 -4
  32. data/lib/hybrid_platforms_conductor/hpc_plugins/connector/local.rb +2 -0
  33. data/lib/hybrid_platforms_conductor/hpc_plugins/connector/ssh.rb +45 -49
  34. data/lib/hybrid_platforms_conductor/hpc_plugins/log/remote_fs.rb +6 -5
  35. data/lib/hybrid_platforms_conductor/hpc_plugins/platform_handler/serverless_chef.rb +68 -66
  36. data/lib/hybrid_platforms_conductor/hpc_plugins/platform_handler/serverless_chef/dsl_parser.rb +13 -0
  37. data/lib/hybrid_platforms_conductor/hpc_plugins/platform_handler/serverless_chef/recipes_tree_builder.rb +39 -38
  38. data/lib/hybrid_platforms_conductor/hpc_plugins/platform_handler/yaml_inventory.rb +5 -4
  39. data/lib/hybrid_platforms_conductor/hpc_plugins/provisioner/docker.rb +43 -45
  40. data/lib/hybrid_platforms_conductor/hpc_plugins/provisioner/podman.rb +18 -20
  41. data/lib/hybrid_platforms_conductor/hpc_plugins/provisioner/proxmox.rb +118 -117
  42. data/lib/hybrid_platforms_conductor/hpc_plugins/provisioner/proxmox/proxmox_waiter.rb +39 -43
  43. data/lib/hybrid_platforms_conductor/hpc_plugins/provisioner/proxmox/reserve_proxmox_container +9 -13
  44. data/lib/hybrid_platforms_conductor/hpc_plugins/report/confluence.rb +2 -2
  45. data/lib/hybrid_platforms_conductor/hpc_plugins/report/mediawiki.rb +28 -21
  46. data/lib/hybrid_platforms_conductor/hpc_plugins/report/stdout.rb +26 -22
  47. data/lib/hybrid_platforms_conductor/hpc_plugins/secrets_reader/cli.rb +8 -6
  48. data/lib/hybrid_platforms_conductor/hpc_plugins/secrets_reader/thycotic.rb +7 -4
  49. data/lib/hybrid_platforms_conductor/hpc_plugins/test/bitbucket_conf.rb +3 -3
  50. data/lib/hybrid_platforms_conductor/hpc_plugins/test/check_deploy_and_idempotence.rb +4 -2
  51. data/lib/hybrid_platforms_conductor/hpc_plugins/test/deploy_freshness.rb +0 -1
  52. data/lib/hybrid_platforms_conductor/hpc_plugins/test/deploy_removes_root_access.rb +21 -19
  53. data/lib/hybrid_platforms_conductor/hpc_plugins/test/divergence.rb +2 -2
  54. data/lib/hybrid_platforms_conductor/hpc_plugins/test/executables.rb +2 -2
  55. data/lib/hybrid_platforms_conductor/hpc_plugins/test/file_system.rb +19 -21
  56. data/lib/hybrid_platforms_conductor/hpc_plugins/test/file_system_hdfs.rb +19 -21
  57. data/lib/hybrid_platforms_conductor/hpc_plugins/test/github_ci.rb +2 -3
  58. data/lib/hybrid_platforms_conductor/hpc_plugins/test/idempotence.rb +2 -2
  59. data/lib/hybrid_platforms_conductor/hpc_plugins/test/ip.rb +1 -1
  60. data/lib/hybrid_platforms_conductor/hpc_plugins/test/jenkins_ci_conf.rb +21 -22
  61. data/lib/hybrid_platforms_conductor/hpc_plugins/test/jenkins_ci_masters_ok.rb +10 -12
  62. data/lib/hybrid_platforms_conductor/hpc_plugins/test/linear_strategy.rb +9 -9
  63. data/lib/hybrid_platforms_conductor/hpc_plugins/test/local_users.rb +2 -2
  64. data/lib/hybrid_platforms_conductor/hpc_plugins/test/mounts.rb +2 -2
  65. data/lib/hybrid_platforms_conductor/hpc_plugins/test/orphan_files.rb +10 -9
  66. data/lib/hybrid_platforms_conductor/hpc_plugins/test/ports.rb +2 -2
  67. data/lib/hybrid_platforms_conductor/hpc_plugins/test/private_ips.rb +5 -5
  68. data/lib/hybrid_platforms_conductor/hpc_plugins/test/public_ips.rb +5 -5
  69. data/lib/hybrid_platforms_conductor/hpc_plugins/test/spectre.rb +4 -6
  70. data/lib/hybrid_platforms_conductor/hpc_plugins/test/veids.rb +3 -3
  71. data/lib/hybrid_platforms_conductor/hpc_plugins/test/vulnerabilities.rb +25 -24
  72. data/lib/hybrid_platforms_conductor/hpc_plugins/test_report/confluence.rb +2 -2
  73. data/lib/hybrid_platforms_conductor/hpc_plugins/test_report/stdout.rb +8 -6
  74. data/lib/hybrid_platforms_conductor/io_router.rb +14 -13
  75. data/lib/hybrid_platforms_conductor/json_dumper.rb +2 -2
  76. data/lib/hybrid_platforms_conductor/log.rb +2 -2
  77. data/lib/hybrid_platforms_conductor/logger_helpers.rb +19 -16
  78. data/lib/hybrid_platforms_conductor/nodes_handler.rb +89 -71
  79. data/lib/hybrid_platforms_conductor/parallel_threads.rb +7 -11
  80. data/lib/hybrid_platforms_conductor/platform_handler.rb +7 -7
  81. data/lib/hybrid_platforms_conductor/platforms_handler.rb +5 -3
  82. data/lib/hybrid_platforms_conductor/plugin.rb +2 -2
  83. data/lib/hybrid_platforms_conductor/plugins.rb +13 -8
  84. data/lib/hybrid_platforms_conductor/provisioner.rb +4 -4
  85. data/lib/hybrid_platforms_conductor/report.rb +2 -2
  86. data/lib/hybrid_platforms_conductor/reports_handler.rb +3 -2
  87. data/lib/hybrid_platforms_conductor/secrets_reader.rb +2 -2
  88. data/lib/hybrid_platforms_conductor/services_handler.rb +32 -29
  89. data/lib/hybrid_platforms_conductor/test_only_remote_node.rb +1 -1
  90. data/lib/hybrid_platforms_conductor/test_report.rb +15 -18
  91. data/lib/hybrid_platforms_conductor/tests_runner.rb +116 -118
  92. data/lib/hybrid_platforms_conductor/thycotic.rb +28 -19
  93. data/lib/hybrid_platforms_conductor/topographer.rb +200 -190
  94. data/lib/hybrid_platforms_conductor/topographer/plugins/graphviz.rb +8 -8
  95. data/lib/hybrid_platforms_conductor/topographer/plugins/json.rb +4 -4
  96. data/lib/hybrid_platforms_conductor/version.rb +1 -1
  97. data/spec/hybrid_platforms_conductor_test.rb +6 -6
  98. data/spec/hybrid_platforms_conductor_test/api/actions_executor/actions/bash_spec.rb +16 -11
  99. data/spec/hybrid_platforms_conductor_test/api/actions_executor/actions/interactive_spec.rb +1 -1
  100. data/spec/hybrid_platforms_conductor_test/api/actions_executor/actions/remote_bash_spec.rb +23 -18
  101. data/spec/hybrid_platforms_conductor_test/api/actions_executor/actions/ruby_spec.rb +67 -49
  102. data/spec/hybrid_platforms_conductor_test/api/actions_executor/actions/scp_spec.rb +20 -14
  103. data/spec/hybrid_platforms_conductor_test/api/actions_executor/actions_spec.rb +63 -50
  104. data/spec/hybrid_platforms_conductor_test/api/actions_executor/connection_spec.rb +35 -35
  105. data/spec/hybrid_platforms_conductor_test/api/actions_executor/connectors/local/connectable_nodes_spec.rb +12 -8
  106. data/spec/hybrid_platforms_conductor_test/api/actions_executor/connectors/local/remote_actions_spec.rb +4 -7
  107. data/spec/hybrid_platforms_conductor_test/api/actions_executor/connectors/ssh/cli_options_spec.rb +21 -22
  108. data/spec/hybrid_platforms_conductor_test/api/actions_executor/connectors/ssh/config_dsl_spec.rb +23 -24
  109. data/spec/hybrid_platforms_conductor_test/api/actions_executor/connectors/ssh/connectable_nodes_spec.rb +10 -6
  110. data/spec/hybrid_platforms_conductor_test/api/actions_executor/connectors/ssh/connections_spec.rb +73 -54
  111. data/spec/hybrid_platforms_conductor_test/api/actions_executor/connectors/ssh/global_helpers_spec.rb +145 -126
  112. data/spec/hybrid_platforms_conductor_test/api/actions_executor/connectors/ssh/node_helpers_spec.rb +3 -3
  113. data/spec/hybrid_platforms_conductor_test/api/actions_executor/connectors/ssh/remote_actions_spec.rb +29 -25
  114. data/spec/hybrid_platforms_conductor_test/api/actions_executor/logging_spec.rb +106 -91
  115. data/spec/hybrid_platforms_conductor_test/api/actions_executor/parallel_spec.rb +272 -244
  116. data/spec/hybrid_platforms_conductor_test/api/actions_executor/timeout_spec.rb +10 -12
  117. data/spec/hybrid_platforms_conductor_test/api/cmd_runner_spec.rb +36 -36
  118. data/spec/hybrid_platforms_conductor_test/api/config_spec.rb +24 -22
  119. data/spec/hybrid_platforms_conductor_test/api/deployer/check_spec.rb +4 -2
  120. data/spec/hybrid_platforms_conductor_test/api/deployer/config_dsl_spec.rb +7 -11
  121. data/spec/hybrid_platforms_conductor_test/api/deployer/deploy_spec.rb +34 -26
  122. data/spec/hybrid_platforms_conductor_test/api/deployer/log_plugins/remote_fs_spec.rb +21 -21
  123. data/spec/hybrid_platforms_conductor_test/api/deployer/parse_deploy_output_spec.rb +55 -59
  124. data/spec/hybrid_platforms_conductor_test/api/deployer/provisioner_spec.rb +36 -62
  125. data/spec/hybrid_platforms_conductor_test/api/deployer/provisioners/podman_spec.rb +17 -17
  126. data/spec/hybrid_platforms_conductor_test/api/deployer/provisioners/proxmox/config_dsl_spec.rb +4 -4
  127. data/spec/hybrid_platforms_conductor_test/api/deployer/provisioners/proxmox/create_spec.rb +44 -51
  128. data/spec/hybrid_platforms_conductor_test/api/deployer/provisioners/proxmox/destroy_spec.rb +3 -3
  129. data/spec/hybrid_platforms_conductor_test/api/deployer/provisioners/proxmox/ip_spec.rb +12 -16
  130. data/spec/hybrid_platforms_conductor_test/api/deployer/provisioners/proxmox/reserve_proxmox_container/destroy_vm_spec.rb +31 -19
  131. data/spec/hybrid_platforms_conductor_test/api/deployer/provisioners/proxmox/reserve_proxmox_container/expired_containers_spec.rb +324 -266
  132. data/spec/hybrid_platforms_conductor_test/api/deployer/provisioners/proxmox/reserve_proxmox_container/ips_assignment_spec.rb +89 -61
  133. data/spec/hybrid_platforms_conductor_test/api/deployer/provisioners/proxmox/reserve_proxmox_container/other_lxc_containers_resources_spec.rb +117 -93
  134. data/spec/hybrid_platforms_conductor_test/api/deployer/provisioners/proxmox/reserve_proxmox_container/pve_node_resources_spec.rb +71 -54
  135. data/spec/hybrid_platforms_conductor_test/api/deployer/provisioners/proxmox/reserve_proxmox_container/retries_spec.rb +10 -8
  136. data/spec/hybrid_platforms_conductor_test/api/deployer/provisioners/proxmox/reserve_proxmox_container/vm_ids_assignment_spec.rb +80 -60
  137. data/spec/hybrid_platforms_conductor_test/api/deployer/provisioners/proxmox/start_spec.rb +1 -1
  138. data/spec/hybrid_platforms_conductor_test/api/deployer/provisioners/proxmox/state_spec.rb +1 -1
  139. data/spec/hybrid_platforms_conductor_test/api/deployer/provisioners/proxmox/stop_spec.rb +1 -1
  140. data/spec/hybrid_platforms_conductor_test/api/deployer/secrets_reader_plugins/cli_spec.rb +21 -20
  141. data/spec/hybrid_platforms_conductor_test/api/deployer/secrets_reader_plugins/thycotic_spec.rb +70 -55
  142. data/spec/hybrid_platforms_conductor_test/api/nodes_handler/cmdbs/config_spec.rb +8 -10
  143. data/spec/hybrid_platforms_conductor_test/api/nodes_handler/cmdbs/host_ip_spec.rb +33 -24
  144. data/spec/hybrid_platforms_conductor_test/api/nodes_handler/cmdbs/host_keys_spec.rb +64 -51
  145. data/spec/hybrid_platforms_conductor_test/api/nodes_handler/cmdbs/platform_handlers_spec.rb +3 -3
  146. data/spec/hybrid_platforms_conductor_test/api/nodes_handler/cmdbs_plugins_api_spec.rb +50 -51
  147. data/spec/hybrid_platforms_conductor_test/api/nodes_handler/common_spec.rb +91 -81
  148. data/spec/hybrid_platforms_conductor_test/api/nodes_handler/config_dsl_spec.rb +14 -16
  149. data/spec/hybrid_platforms_conductor_test/api/nodes_handler/git_diff_impacts_spec.rb +51 -75
  150. data/spec/hybrid_platforms_conductor_test/api/nodes_handler/nodes_selectors_spec.rb +35 -26
  151. data/spec/hybrid_platforms_conductor_test/api/nodes_handler/platform_handlers_plugins_api_spec.rb +24 -16
  152. data/spec/hybrid_platforms_conductor_test/api/nodes_handler/several_platforms_spec.rb +29 -19
  153. data/spec/hybrid_platforms_conductor_test/api/platform_handler_spec.rb +4 -4
  154. data/spec/hybrid_platforms_conductor_test/api/platform_handlers/serverless_chef/config_dsl_spec.rb +2 -2
  155. data/spec/hybrid_platforms_conductor_test/api/platform_handlers/serverless_chef/deploy_output_parsing_spec.rb +6 -6
  156. data/spec/hybrid_platforms_conductor_test/api/platform_handlers/serverless_chef/diff_impacts_spec.rb +57 -99
  157. data/spec/hybrid_platforms_conductor_test/api/platform_handlers/serverless_chef/inventory_spec.rb +4 -4
  158. data/spec/hybrid_platforms_conductor_test/api/platform_handlers/serverless_chef/packaging_spec.rb +32 -35
  159. data/spec/hybrid_platforms_conductor_test/api/platform_handlers/serverless_chef/services_deployment_spec.rb +10 -10
  160. data/spec/hybrid_platforms_conductor_test/api/platforms_handler_spec.rb +38 -27
  161. data/spec/hybrid_platforms_conductor_test/api/plugins_spec.rb +46 -52
  162. data/spec/hybrid_platforms_conductor_test/api/reports_handler_spec.rb +2 -2
  163. data/spec/hybrid_platforms_conductor_test/api/services_handler/actions_to_deploy_spec.rb +90 -58
  164. data/spec/hybrid_platforms_conductor_test/api/services_handler/deploy_allowed_spec.rb +38 -34
  165. data/spec/hybrid_platforms_conductor_test/api/services_handler/log_info_spec.rb +11 -9
  166. data/spec/hybrid_platforms_conductor_test/api/services_handler/package_spec.rb +193 -171
  167. data/spec/hybrid_platforms_conductor_test/api/services_handler/parse_deploy_output_spec.rb +66 -54
  168. data/spec/hybrid_platforms_conductor_test/api/services_handler/prepare_for_deploy_spec.rb +147 -133
  169. data/spec/hybrid_platforms_conductor_test/api/tests_runner/common_spec.rb +69 -49
  170. data/spec/hybrid_platforms_conductor_test/api/tests_runner/global_spec.rb +4 -3
  171. data/spec/hybrid_platforms_conductor_test/api/tests_runner/node_check_spec.rb +8 -5
  172. data/spec/hybrid_platforms_conductor_test/api/tests_runner/node_spec.rb +8 -5
  173. data/spec/hybrid_platforms_conductor_test/api/tests_runner/node_ssh_spec.rb +30 -27
  174. data/spec/hybrid_platforms_conductor_test/api/tests_runner/platform_spec.rb +12 -9
  175. data/spec/hybrid_platforms_conductor_test/api/tests_runner/reports_spec.rb +48 -47
  176. data/spec/hybrid_platforms_conductor_test/api/tests_runner/test_plugins/bitbucket_conf_spec.rb +5 -5
  177. data/spec/hybrid_platforms_conductor_test/api/tests_runner/test_plugins/github_ci_spec.rb +5 -5
  178. data/spec/hybrid_platforms_conductor_test/api/tests_runner/test_reports_plugins/confluence_spec.rb +5 -5
  179. data/spec/hybrid_platforms_conductor_test/cmdb_plugins/test_cmdb.rb +9 -9
  180. data/spec/hybrid_platforms_conductor_test/cmdb_plugins/{test_cmdb2.rb → test_cmdb_2.rb} +6 -6
  181. data/spec/hybrid_platforms_conductor_test/cmdb_plugins/test_cmdb_others.rb +3 -3
  182. data/spec/hybrid_platforms_conductor_test/cmdb_plugins/{test_cmdb_others2.rb → test_cmdb_others_2.rb} +2 -2
  183. data/spec/hybrid_platforms_conductor_test/docs_spec.rb +1 -1
  184. data/spec/hybrid_platforms_conductor_test/executables/{check-node_spec.rb → check_node_spec.rb} +4 -6
  185. data/spec/hybrid_platforms_conductor_test/executables/deploy_spec.rb +4 -6
  186. data/spec/hybrid_platforms_conductor_test/executables/get_impacted_nodes_spec.rb +76 -77
  187. data/spec/hybrid_platforms_conductor_test/executables/last_deploys_spec.rb +13 -15
  188. data/spec/hybrid_platforms_conductor_test/executables/nodes_to_deploy_spec.rb +289 -307
  189. data/spec/hybrid_platforms_conductor_test/executables/options/actions_executor_spec.rb +4 -6
  190. data/spec/hybrid_platforms_conductor_test/executables/options/cmd_runner_spec.rb +3 -5
  191. data/spec/hybrid_platforms_conductor_test/executables/options/common_spec.rb +8 -9
  192. data/spec/hybrid_platforms_conductor_test/executables/options/deployer_spec.rb +12 -14
  193. data/spec/hybrid_platforms_conductor_test/executables/options/nodes_handler_spec.rb +9 -10
  194. data/spec/hybrid_platforms_conductor_test/executables/options/nodes_selectors_spec.rb +9 -10
  195. data/spec/hybrid_platforms_conductor_test/executables/options/reports_handler_spec.rb +1 -1
  196. data/spec/hybrid_platforms_conductor_test/executables/options/tests_runner_spec.rb +22 -22
  197. data/spec/hybrid_platforms_conductor_test/executables/report_spec.rb +22 -16
  198. data/spec/hybrid_platforms_conductor_test/executables/run_spec.rb +32 -32
  199. data/spec/hybrid_platforms_conductor_test/executables/ssh_config_spec.rb +7 -9
  200. data/spec/hybrid_platforms_conductor_test/executables/test_spec.rb +3 -5
  201. data/spec/hybrid_platforms_conductor_test/helpers/actions_executor_helpers.rb +2 -2
  202. data/spec/hybrid_platforms_conductor_test/helpers/cmd_runner_helpers.rb +4 -3
  203. data/spec/hybrid_platforms_conductor_test/helpers/cmdb_helpers.rb +2 -2
  204. data/spec/hybrid_platforms_conductor_test/helpers/config_helpers.rb +1 -1
  205. data/spec/hybrid_platforms_conductor_test/helpers/connector_ssh_helpers.rb +12 -13
  206. data/spec/hybrid_platforms_conductor_test/helpers/deployer_helpers.rb +216 -14
  207. data/spec/hybrid_platforms_conductor_test/helpers/executables_helpers.rb +11 -11
  208. data/spec/hybrid_platforms_conductor_test/helpers/nodes_handler_helpers.rb +1 -1
  209. data/spec/hybrid_platforms_conductor_test/helpers/platforms_handler_helpers.rb +39 -28
  210. data/spec/hybrid_platforms_conductor_test/helpers/plugins_helpers.rb +1 -1
  211. data/spec/hybrid_platforms_conductor_test/helpers/provisioner_proxmox_helpers.rb +86 -111
  212. data/spec/hybrid_platforms_conductor_test/helpers/reports_handler_helpers.rb +1 -1
  213. data/spec/hybrid_platforms_conductor_test/helpers/serverless_chef_helpers.rb +3 -3
  214. data/spec/hybrid_platforms_conductor_test/helpers/services_handler_helpers.rb +1 -1
  215. data/spec/hybrid_platforms_conductor_test/helpers/tests_runner_helpers.rb +1 -1
  216. data/spec/hybrid_platforms_conductor_test/mocked_lib/my_test_gem/hpc_plugins/test_plugin_type/{test_plugin_id1.rb → test_plugin_id_1.rb} +0 -0
  217. data/spec/hybrid_platforms_conductor_test/mocked_lib/my_test_gem/hpc_plugins/test_plugin_type/{test_plugin_id2.rb → test_plugin_id_2.rb} +0 -0
  218. data/spec/hybrid_platforms_conductor_test/mocked_lib/my_test_gem2/sub_dir/hpc_plugins/test_plugin_type/{test_plugin_id3.rb → test_plugin_id_3.rb} +0 -0
  219. data/spec/hybrid_platforms_conductor_test/mocked_lib/my_test_gem2/sub_dir/hpc_plugins/{test_plugin_type2/test_plugin_id4.rb → test_plugin_type_2/test_plugin_id_4.rb} +0 -0
  220. data/spec/hybrid_platforms_conductor_test/platform_handler_plugins/test.rb +1 -1
  221. data/spec/hybrid_platforms_conductor_test/platform_handler_plugins/{test2.rb → test_2.rb} +0 -0
  222. data/spec/hybrid_platforms_conductor_test/rubocop_spec.rb +31 -0
  223. data/spec/hybrid_platforms_conductor_test/serverless_chef_repositories/1_node/nodes/node.json +3 -3
  224. data/spec/hybrid_platforms_conductor_test/serverless_chef_repositories/data_bags/nodes/node.json +3 -3
  225. data/spec/hybrid_platforms_conductor_test/serverless_chef_repositories/recipes/cookbooks/test_cookbook_2/libraries/default.rb +1 -0
  226. data/spec/hybrid_platforms_conductor_test/serverless_chef_repositories/several_cookbooks/other_cookbooks/test_cookbook_2/libraries/default.rb +1 -0
  227. data/spec/hybrid_platforms_conductor_test/shared_examples/deployer.rb +952 -0
  228. data/spec/hybrid_platforms_conductor_test/test_connector.rb +3 -3
  229. data/spec/hybrid_platforms_conductor_test/test_log_no_read_plugin.rb +3 -1
  230. data/spec/hybrid_platforms_conductor_test/test_log_plugin.rb +3 -1
  231. data/spec/hybrid_platforms_conductor_test/test_plugins/global.rb +1 -0
  232. data/spec/hybrid_platforms_conductor_test/test_plugins/node.rb +1 -0
  233. data/spec/hybrid_platforms_conductor_test/test_plugins/node_check.rb +1 -0
  234. data/spec/hybrid_platforms_conductor_test/test_plugins/platform.rb +1 -0
  235. data/spec/hybrid_platforms_conductor_test/test_plugins/several_checks.rb +2 -2
  236. data/spec/hybrid_platforms_conductor_test/test_secrets_reader_plugin.rb +4 -4
  237. data/spec/hybrid_platforms_conductor_test/tests_report_plugin.rb +5 -6
  238. data/spec/spec_helper.rb +17 -18
  239. data/tools/check_md +16 -20
  240. data/tools/generate_mermaid +1 -1
  241. metadata +43 -13
  242. data/spec/hybrid_platforms_conductor_test/helpers/deployer_test_helpers.rb +0 -1152
@@ -1,8 +1,8 @@
1
1
  describe HybridPlatformsConductor::ActionsExecutor do
2
2
 
3
- context 'checking connector plugin ssh' do
3
+ context 'when checking connector plugin ssh' do
4
4
 
5
- context 'checking additional helpers on prepared nodes' do
5
+ context 'when checking additional helpers on prepared nodes' do
6
6
 
7
7
  it 'provides an SSH executable wrapping the node\'s SSH config' do
8
8
  with_test_platform_for_remote_testing do
@@ -21,7 +21,7 @@ describe HybridPlatformsConductor::ActionsExecutor do
21
21
  with_test_platform_for_remote_testing(password: 'PaSsWoRd') do
22
22
  expect(`#{test_connector.ssh_exec} -V 2>&1`).to eq `ssh -V 2>&1`
23
23
  expect(`#{test_connector.ssh_exec} -G hpc.node`.split("\n").find { |line| line =~ /^hostname .+$/ }).to eq 'hostname 192.168.42.42'
24
- expect(File.read(test_connector.ssh_exec)).to match /^sshpass -pPaSsWoRd ssh .+$/
24
+ expect(File.read(test_connector.ssh_exec)).to match(/^sshpass -pPaSsWoRd ssh .+$/)
25
25
  end
26
26
  end
27
27
 
@@ -1,12 +1,12 @@
1
1
  describe HybridPlatformsConductor::ActionsExecutor do
2
2
 
3
- context 'checking connector plugin ssh' do
3
+ context 'when checking connector plugin ssh' do
4
4
 
5
- context 'checking remote actions' do
5
+ context 'when checking remote actions' do
6
6
 
7
7
  it 'executes bash commands remotely' do
8
8
  with_test_platform_for_remote_testing(
9
- expected_cmds: [[/.+\/ssh hpc\.node \/bin\/bash <<'HPC_EOF'\nbash_cmd.bash\nHPC_EOF/, proc { [0, 'Bash commands executed on node', ''] }]],
9
+ expected_cmds: [[%r{.+/ssh hpc\.node /bin/bash <<'HPC_EOF'\nbash_cmd.bash\nHPC_EOF}, proc { [0, 'Bash commands executed on node', ''] }]],
10
10
  expected_stdout: 'Bash commands executed on node'
11
11
  ) do
12
12
  test_connector.remote_bash('bash_cmd.bash')
@@ -17,8 +17,8 @@ describe HybridPlatformsConductor::ActionsExecutor do
17
17
  with_test_platform_for_remote_testing(
18
18
  expected_cmds: [
19
19
  [
20
- /.+\/ssh hpc\.node \/bin\/bash <<'HPC_EOF'\nbash_cmd.bash\nHPC_EOF/,
21
- proc do |cmd, log_to_file: nil, log_to_stdout: true, log_stdout_to_io: nil, log_stderr_to_io: nil, expected_code: 0, timeout: nil, no_exception: false|
20
+ %r{.+/ssh hpc\.node /bin/bash <<'HPC_EOF'\nbash_cmd.bash\nHPC_EOF},
21
+ proc do |_cmd, log_to_file: nil, log_to_stdout: true, log_stdout_to_io: nil, log_stderr_to_io: nil, expected_code: 0, timeout: nil, no_exception: false|
22
22
  expect(timeout).to eq 5
23
23
  [0, '', '']
24
24
  end
@@ -33,7 +33,7 @@ describe HybridPlatformsConductor::ActionsExecutor do
33
33
  it 'executes interactive commands remotely' do
34
34
  with_test_platform_for_remote_testing do
35
35
  expect(test_connector).to receive(:system) do |cmd|
36
- expect(cmd).to match /^.+\/ssh hpc\.node$/
36
+ expect(cmd).to match(%r{^.+/ssh hpc\.node$})
37
37
  end
38
38
  test_connector.remote_interactive
39
39
  end
@@ -43,7 +43,7 @@ describe HybridPlatformsConductor::ActionsExecutor do
43
43
  with_test_platform_for_remote_testing(
44
44
  expected_cmds: [
45
45
  [
46
- /cd \/path\/to && tar\s+--create\s+--gzip\s+--file -\s+src.file \| \/.+\/ssh\s+hpc\.node\s+"tar\s+--extract\s+--gunzip\s+--file -\s+--directory \/remote_path\/to\/dst.dir\s+--owner root\s+"/,
46
+ %r{cd /path/to && tar\s+--create\s+--gzip\s+--file -\s+src.file \| /.+/ssh\s+hpc\.node\s+"tar\s+--extract\s+--gunzip\s+--file -\s+--directory /remote_path/to/dst.dir\s+--owner root\s+"},
47
47
  proc { [0, '', ''] }
48
48
  ]
49
49
  ]
@@ -56,8 +56,8 @@ describe HybridPlatformsConductor::ActionsExecutor do
56
56
  with_test_platform_for_remote_testing(
57
57
  expected_cmds: [
58
58
  [
59
- /cd \/path\/to && tar\s+--create\s+--gzip\s+--file -\s+src.file \| \/.+\/ssh\s+hpc\.node\s+"tar\s+--extract\s+--gunzip\s+--file -\s+--directory \/remote_path\/to\/dst.dir\s+--owner root\s+"/,
60
- proc do |cmd, log_to_file: nil, log_to_stdout: true, log_stdout_to_io: nil, log_stderr_to_io: nil, expected_code: 0, timeout: nil, no_exception: false|
59
+ %r{cd /path/to && tar\s+--create\s+--gzip\s+--file -\s+src.file \| /.+/ssh\s+hpc\.node\s+"tar\s+--extract\s+--gunzip\s+--file -\s+--directory /remote_path/to/dst.dir\s+--owner root\s+"},
60
+ proc do |_cmd, log_to_file: nil, log_to_stdout: true, log_stdout_to_io: nil, log_stderr_to_io: nil, expected_code: 0, timeout: nil, no_exception: false|
61
61
  expect(timeout).to eq 5
62
62
  [0, '', '']
63
63
  end
@@ -74,9 +74,9 @@ describe HybridPlatformsConductor::ActionsExecutor do
74
74
  with_test_platform_for_remote_testing(
75
75
  expected_cmds: [
76
76
  [
77
- /.+\/hpc_temp_cmds_.+\.sh$/,
77
+ %r{.+/hpc_temp_cmds_.+\.sh$},
78
78
  proc do |received_cmd|
79
- expect(File.read(received_cmd)).to match /.+\/ssh hpc\.node \/bin\/bash <<'HPC_EOF'\n#{Regexp.escape(cmd)}\nHPC_EOF/
79
+ expect(File.read(received_cmd)).to match(%r{.+/ssh hpc\.node /bin/bash <<'HPC_EOF'\n#{Regexp.escape(cmd)}\nHPC_EOF})
80
80
  [0, 'Bash commands executed on node', '']
81
81
  end
82
82
  ]
@@ -92,7 +92,7 @@ describe HybridPlatformsConductor::ActionsExecutor do
92
92
  with_test_platform_for_remote_testing(
93
93
  expected_cmds: [
94
94
  [
95
- /cd \/path\/to && tar\s+--create\s+--gzip\s+--file -\s+src.file \| \/.+\/ssh\s+hpc\.node\s+"sudo -u root tar\s+--extract\s+--gunzip\s+--file -\s+--directory \/remote_path\/to\/dst.dir\s+--owner root\s+"/,
95
+ %r{cd /path/to && tar\s+--create\s+--gzip\s+--file -\s+src.file \| /.+/ssh\s+hpc\.node\s+"sudo -u root tar\s+--extract\s+--gunzip\s+--file -\s+--directory /remote_path/to/dst.dir\s+--owner root\s+"},
96
96
  proc { [0, '', ''] }
97
97
  ]
98
98
  ]
@@ -105,11 +105,13 @@ describe HybridPlatformsConductor::ActionsExecutor do
105
105
  with_test_platform_for_remote_testing(
106
106
  expected_cmds: [
107
107
  [
108
- /cd \/path\/to && tar\s+--create\s+--gzip\s+--file -\s+src.file \| \/.+\/ssh\s+hpc\.node\s+"other_sudo --user root tar\s+--extract\s+--gunzip\s+--file -\s+--directory \/remote_path\/to\/dst.dir\s+--owner root\s+"/,
108
+ %r{cd /path/to && tar\s+--create\s+--gzip\s+--file -\s+src.file \| /.+/ssh\s+hpc\.node\s+"other_sudo --user root tar\s+--extract\s+--gunzip\s+--file -\s+--directory /remote_path/to/dst.dir\s+--owner root\s+"},
109
109
  proc { [0, '', ''] }
110
110
  ]
111
111
  ],
112
- additional_config: 'sudo_for { |user| "other_sudo --user #{user}" }'
112
+ additional_config: <<~'EO_CONFIG'
113
+ sudo_for { |user| "other_sudo --user #{user}" }
114
+ EO_CONFIG
113
115
  ) do
114
116
  test_connector.remote_copy('/path/to/src.file', '/remote_path/to/dst.dir', sudo: true)
115
117
  end
@@ -119,7 +121,7 @@ describe HybridPlatformsConductor::ActionsExecutor do
119
121
  with_test_platform_for_remote_testing(
120
122
  expected_cmds: [
121
123
  [
122
- /cd \/path\/to && tar\s+--create\s+--gzip\s+--file -\s+--owner remote_user\s+src.file \| \/.+\/ssh\s+hpc\.node\s+"tar\s+--extract\s+--gunzip\s+--file -\s+--directory \/remote_path\/to\/dst.dir\s+--owner root\s+"/,
124
+ %r{cd /path/to && tar\s+--create\s+--gzip\s+--file -\s+--owner remote_user\s+src.file \| /.+/ssh\s+hpc\.node\s+"tar\s+--extract\s+--gunzip\s+--file -\s+--directory /remote_path/to/dst.dir\s+--owner root\s+"},
123
125
  proc { [0, '', ''] }
124
126
  ]
125
127
  ]
@@ -132,7 +134,7 @@ describe HybridPlatformsConductor::ActionsExecutor do
132
134
  with_test_platform_for_remote_testing(
133
135
  expected_cmds: [
134
136
  [
135
- /cd \/path\/to && tar\s+--create\s+--gzip\s+--file -\s+--group remote_group\s+src.file \| \/.+\/ssh\s+hpc\.node\s+"tar\s+--extract\s+--gunzip\s+--file -\s+--directory \/remote_path\/to\/dst.dir\s+--owner root\s+"/,
137
+ %r{cd /path/to && tar\s+--create\s+--gzip\s+--file -\s+--group remote_group\s+src.file \| /.+/ssh\s+hpc\.node\s+"tar\s+--extract\s+--gunzip\s+--file -\s+--directory /remote_path/to/dst.dir\s+--owner root\s+"},
136
138
  proc { [0, '', ''] }
137
139
  ]
138
140
  ]
@@ -143,7 +145,7 @@ describe HybridPlatformsConductor::ActionsExecutor do
143
145
 
144
146
  it 'executes bash commands remotely without Session Exec capabilities' do
145
147
  with_test_platform_for_remote_testing(
146
- expected_cmds: [[/^\{ cat \| .+\/ssh hpc\.node -T; } <<'HPC_EOF'\nbash_cmd.bash\nHPC_EOF$/, proc { [0, 'Bash commands executed on node', ''] }]],
148
+ expected_cmds: [[%r{^\{ cat \| .+/ssh hpc\.node -T; \} <<'HPC_EOF'\nbash_cmd.bash\nHPC_EOF$}, proc { [0, 'Bash commands executed on node', ''] }]],
147
149
  expected_stdout: 'Bash commands executed on node',
148
150
  session_exec: false
149
151
  ) do
@@ -155,7 +157,7 @@ describe HybridPlatformsConductor::ActionsExecutor do
155
157
  with_test_platform_for_remote_testing(
156
158
  expected_cmds: [
157
159
  [
158
- /^scp -S .+\/ssh \/path\/to\/src.file hpc\.node:\/remote_path\/to\/dst.dir$/,
160
+ %r{^scp -S .+/ssh /path/to/src.file hpc\.node:/remote_path/to/dst.dir$},
159
161
  proc { [0, '', ''] }
160
162
  ]
161
163
  ],
@@ -168,12 +170,12 @@ describe HybridPlatformsConductor::ActionsExecutor do
168
170
  it 'copies files remotely without Session Exec capabilities and with sudo' do
169
171
  with_test_platform_for_remote_testing(
170
172
  expected_cmds: [
171
- [/^\{ cat \| .+\/ssh hpc\.node -T; } <<'HPC_EOF'\nmkdir -p hpc_tmp_scp\nHPC_EOF$/, proc { [0, '', ''] }],
173
+ [%r{^\{ cat \| .+/ssh hpc\.node -T; \} <<'HPC_EOF'\nmkdir -p hpc_tmp_scp\nHPC_EOF$}, proc { [0, '', ''] }],
172
174
  [
173
- /^scp -S .+\/ssh \/path\/to\/src.file hpc\.node:\.\/hpc_tmp_scp$/,
175
+ %r{^scp -S .+/ssh /path/to/src.file hpc\.node:\./hpc_tmp_scp$},
174
176
  proc { [0, '', ''] }
175
177
  ],
176
- [/^\{ cat \| .+\/ssh hpc\.node -T; } <<'HPC_EOF'\nsudo -u root mv \.\/hpc_tmp_scp\/src\.file \/remote_path\/to\/dst\.dir\nHPC_EOF$/, proc { [0, '', ''] }]
178
+ [%r{^\{ cat \| .+/ssh hpc\.node -T; \} <<'HPC_EOF'\nsudo -u root mv \./hpc_tmp_scp/src\.file /remote_path/to/dst\.dir\nHPC_EOF$}, proc { [0, '', ''] }]
177
179
  ],
178
180
  session_exec: false
179
181
  ) do
@@ -184,14 +186,16 @@ describe HybridPlatformsConductor::ActionsExecutor do
184
186
  it 'copies files remotely without Session Exec capabilities and with a different sudo' do
185
187
  with_test_platform_for_remote_testing(
186
188
  expected_cmds: [
187
- [/^\{ cat \| .+\/ssh hpc\.node -T; } <<'HPC_EOF'\nmkdir -p hpc_tmp_scp\nHPC_EOF$/, proc { [0, '', ''] }],
189
+ [%r{^\{ cat \| .+/ssh hpc\.node -T; \} <<'HPC_EOF'\nmkdir -p hpc_tmp_scp\nHPC_EOF$}, proc { [0, '', ''] }],
188
190
  [
189
- /^scp -S .+\/ssh \/path\/to\/src.file hpc\.node:\.\/hpc_tmp_scp$/,
191
+ %r{^scp -S .+/ssh /path/to/src.file hpc\.node:\./hpc_tmp_scp$},
190
192
  proc { [0, '', ''] }
191
193
  ],
192
- [/^\{ cat \| .+\/ssh hpc\.node -T; } <<'HPC_EOF'\nother_sudo --user root mv \.\/hpc_tmp_scp\/src\.file \/remote_path\/to\/dst\.dir\nHPC_EOF$/, proc { [0, '', ''] }]
194
+ [%r{^\{ cat \| .+/ssh hpc\.node -T; \} <<'HPC_EOF'\nother_sudo --user root mv \./hpc_tmp_scp/src\.file /remote_path/to/dst\.dir\nHPC_EOF$}, proc { [0, '', ''] }]
193
195
  ],
194
- additional_config: 'sudo_for { |user| "other_sudo --user #{user}" }',
196
+ additional_config: <<~'EO_CONFIG',
197
+ sudo_for { |user| "other_sudo --user #{user}" }
198
+ EO_CONFIG
195
199
  session_exec: false
196
200
  ) do
197
201
  test_connector.remote_copy('/path/to/src.file', '/remote_path/to/dst.dir', sudo: true)
@@ -1,28 +1,30 @@
1
1
  describe HybridPlatformsConductor::ActionsExecutor do
2
2
 
3
- context 'checking logging facilities' do
3
+ context 'when checking logging facilities' do
4
4
 
5
5
  # Instantiate a test platform, with the test action registered in Actions Executor.
6
6
  #
7
7
  # Parameters::
8
- # * Proc: Code called with the environment ready
8
+ # * *block* (Proc): Code called with the environment ready
9
9
  # * Parameters::
10
10
  # * *repository* (String): Path to the repository
11
- def with_test_platform_for_logging
12
- with_test_platform_for_executor(nodes: { 'node1' => {}, 'node2' => {}, 'node3' => {} }) do |repository|
13
- yield repository
14
- end
11
+ def with_test_platform_for_logging(&block)
12
+ with_test_platform_for_executor(nodes: { 'node1' => {}, 'node2' => {}, 'node3' => {} }, &block)
15
13
  end
16
14
 
17
15
  it 'captures stdout and stderr from action correctly' do
18
16
  with_test_platform_for_logging do
19
17
  expect(
20
- test_actions_executor.execute_actions('node1' => { test_action: {
21
- code: proc do |stdout, stderr|
22
- stdout << 'action_stdout'
23
- stderr << 'action_stderr'
24
- end
25
- } })
18
+ test_actions_executor.execute_actions(
19
+ 'node1' => {
20
+ test_action: {
21
+ code: proc do |stdout, stderr|
22
+ stdout << 'action_stdout'
23
+ stderr << 'action_stderr'
24
+ end
25
+ }
26
+ }
27
+ )
26
28
  ).to eq('node1' => [0, 'action_stdout', 'action_stderr'])
27
29
  end
28
30
  end
@@ -30,13 +32,17 @@ describe HybridPlatformsConductor::ActionsExecutor do
30
32
  it 'captures stdout and stderr from action correctly even when the action is failing' do
31
33
  with_test_platform_for_logging do
32
34
  expect(
33
- test_actions_executor.execute_actions('node1' => { test_action: {
34
- code: proc do |stdout, stderr|
35
- stdout << "action_stdout\n"
36
- stderr << "action_stderr\n"
37
- raise 'Failing action'
38
- end
39
- } })
35
+ test_actions_executor.execute_actions(
36
+ 'node1' => {
37
+ test_action: {
38
+ code: proc do |stdout, stderr|
39
+ stdout << "action_stdout\n"
40
+ stderr << "action_stderr\n"
41
+ raise 'Failing action'
42
+ end
43
+ }
44
+ }
45
+ )
40
46
  ).to eq('node1' => [:failed_action, "action_stdout\n", "action_stderr\nFailing action\n"])
41
47
  end
42
48
  end
@@ -74,34 +80,38 @@ describe HybridPlatformsConductor::ActionsExecutor do
74
80
  with_test_platform_for_logging do
75
81
  expect(
76
82
  test_actions_executor.execute_actions('node1' => { test_action: { run_cmd: 'echo action_stdout && >&2 echo action_stderr && exit 1' } })
77
- ).to eq('node1' => [
78
- :failed_command,
79
- "action_stdout\n",
80
- "action_stderr\nCommand 'echo action_stdout && >&2 echo action_stderr && exit 1' returned error code 1 (expected 0).\n"
81
- ])
83
+ ).to eq(
84
+ 'node1' => [
85
+ :failed_command,
86
+ "action_stdout\n",
87
+ "action_stderr\nCommand 'echo action_stdout && >&2 echo action_stderr && exit 1' returned error code 1 (expected 0).\n"
88
+ ]
89
+ )
82
90
  end
83
91
  end
84
92
 
85
93
  it 'captures stdout and stderr sequentially from several actions' do
86
94
  with_test_platform_for_logging do
87
95
  expect(
88
- test_actions_executor.execute_actions('node1' => [
89
- { test_action: {
90
- code: proc do |stdout, stderr|
91
- stdout << 'action1_stdout '
92
- stderr << 'action1_stderr '
93
- end
94
- } },
95
- { test_action: {
96
- run_cmd: 'echo action2_stdout && >&2 echo action2_stderr'
97
- } },
98
- { test_action: {
99
- code: proc do |stdout, stderr|
100
- stdout << 'action3_stdout'
101
- stderr << 'action3_stderr'
102
- end
103
- } }
104
- ])
96
+ test_actions_executor.execute_actions(
97
+ 'node1' => [
98
+ { test_action: {
99
+ code: proc do |stdout, stderr|
100
+ stdout << 'action1_stdout '
101
+ stderr << 'action1_stderr '
102
+ end
103
+ } },
104
+ { test_action: {
105
+ run_cmd: 'echo action2_stdout && >&2 echo action2_stderr'
106
+ } },
107
+ { test_action: {
108
+ code: proc do |stdout, stderr|
109
+ stdout << 'action3_stdout'
110
+ stderr << 'action3_stderr'
111
+ end
112
+ } }
113
+ ]
114
+ )
105
115
  ).to eq('node1' => [0, "action1_stdout action2_stdout\naction3_stdout", "action1_stderr action2_stderr\naction3_stderr"])
106
116
  end
107
117
  end
@@ -187,56 +197,61 @@ describe HybridPlatformsConductor::ActionsExecutor do
187
197
  it 'executes several actions on several nodes and returns the corresponding stdout and stderr correctly in files' do
188
198
  with_repository('logs') do |logs_repository|
189
199
  with_test_platform_for_logging do
190
- expect(test_actions_executor.execute_actions({
191
- 'node1' => [
192
- { test_action: { code: proc do |stdout, stderr|
193
- stdout << 'node1_action1_stdout '
194
- stderr << 'node1_action1_stderr '
195
- sleep 1
196
- end } },
197
- { test_action: { code: proc do |stdout, stderr|
198
- stdout << 'node1_action2_stdout '
199
- stderr << 'node1_action2_stderr '
200
- sleep 1
201
- end } },
202
- { test_action: { code: proc do |stdout, stderr|
203
- stdout << 'node1_action3_stdout'
204
- stderr << 'node1_action3_stderr'
205
- end } }
206
- ],
207
- 'node2' => [
208
- { test_action: { code: proc do |stdout, stderr|
209
- stdout << 'node2_action1_stdout '
210
- stderr << 'node2_action1_stderr '
211
- sleep 1
212
- end } },
213
- { test_action: { code: proc do |stdout, stderr|
214
- stdout << 'node2_action2_stdout '
215
- stderr << 'node2_action2_stderr '
216
- sleep 1
217
- end } },
218
- { test_action: { code: proc do |stdout, stderr|
219
- stdout << 'node2_action3_stdout'
220
- stderr << 'node2_action3_stderr'
221
- end } }
222
- ],
223
- 'node3' => [
224
- { test_action: { code: proc do |stdout, stderr|
225
- stdout << 'node3_action1_stdout '
226
- stderr << 'node3_action1_stderr '
227
- sleep 1
228
- end } },
229
- { test_action: { code: proc do |stdout, stderr|
230
- stdout << 'node3_action2_stdout '
231
- stderr << 'node3_action2_stderr '
232
- sleep 1
233
- end } },
234
- { test_action: { code: proc do |stdout, stderr|
235
- stdout << 'node3_action3_stdout'
236
- stderr << 'node3_action3_stderr'
237
- end } }
238
- ]
239
- }, log_to_dir: logs_repository)).to eq(
200
+ expect(
201
+ test_actions_executor.execute_actions(
202
+ {
203
+ 'node1' => [
204
+ { test_action: { code: proc do |stdout, stderr|
205
+ stdout << 'node1_action1_stdout '
206
+ stderr << 'node1_action1_stderr '
207
+ sleep 1
208
+ end } },
209
+ { test_action: { code: proc do |stdout, stderr|
210
+ stdout << 'node1_action2_stdout '
211
+ stderr << 'node1_action2_stderr '
212
+ sleep 1
213
+ end } },
214
+ { test_action: { code: proc do |stdout, stderr|
215
+ stdout << 'node1_action3_stdout'
216
+ stderr << 'node1_action3_stderr'
217
+ end } }
218
+ ],
219
+ 'node2' => [
220
+ { test_action: { code: proc do |stdout, stderr|
221
+ stdout << 'node2_action1_stdout '
222
+ stderr << 'node2_action1_stderr '
223
+ sleep 1
224
+ end } },
225
+ { test_action: { code: proc do |stdout, stderr|
226
+ stdout << 'node2_action2_stdout '
227
+ stderr << 'node2_action2_stderr '
228
+ sleep 1
229
+ end } },
230
+ { test_action: { code: proc do |stdout, stderr|
231
+ stdout << 'node2_action3_stdout'
232
+ stderr << 'node2_action3_stderr'
233
+ end } }
234
+ ],
235
+ 'node3' => [
236
+ { test_action: { code: proc do |stdout, stderr|
237
+ stdout << 'node3_action1_stdout '
238
+ stderr << 'node3_action1_stderr '
239
+ sleep 1
240
+ end } },
241
+ { test_action: { code: proc do |stdout, stderr|
242
+ stdout << 'node3_action2_stdout '
243
+ stderr << 'node3_action2_stderr '
244
+ sleep 1
245
+ end } },
246
+ { test_action: { code: proc do |stdout, stderr|
247
+ stdout << 'node3_action3_stdout'
248
+ stderr << 'node3_action3_stderr'
249
+ end } }
250
+ ]
251
+ },
252
+ log_to_dir: logs_repository
253
+ )
254
+ ).to eq(
240
255
  'node1' => [0, 'node1_action1_stdout node1_action2_stdout node1_action3_stdout', 'node1_action1_stderr node1_action2_stderr node1_action3_stderr'],
241
256
  'node2' => [0, 'node2_action1_stdout node2_action2_stdout node2_action3_stdout', 'node2_action1_stderr node2_action2_stderr node2_action3_stderr'],
242
257
  'node3' => [0, 'node3_action1_stdout node3_action2_stdout node3_action3_stdout', 'node3_action1_stderr node3_action2_stderr node3_action3_stderr']
@@ -1,39 +1,43 @@
1
1
  describe HybridPlatformsConductor::ActionsExecutor do
2
2
 
3
- context 'checking parallel runs' do
3
+ context 'when checking parallel runs' do
4
4
 
5
5
  # Get a test platform to test parallel runs
6
6
  #
7
7
  # Parameters::
8
- # * Proc: Code called with platform setup
9
- def with_test_platform_for_parallel_tests
10
- with_test_platform_for_executor(nodes: {
11
- 'node1' => {},
12
- 'node2' => {},
13
- 'node3' => {},
14
- 'node4' => {}
15
- }) do
16
- yield
17
- end
8
+ # * *block* (Proc): Code called with platform setup
9
+ def with_test_platform_for_parallel_tests(&block)
10
+ with_test_platform_for_executor(
11
+ nodes: {
12
+ 'node1' => {},
13
+ 'node2' => {},
14
+ 'node3' => {},
15
+ 'node4' => {}
16
+ },
17
+ &block
18
+ )
18
19
  end
19
20
 
20
21
  it 'executes a simple command on several nodes in parallel' do
21
22
  with_test_platform_for_parallel_tests do
22
23
  nodes_executed = []
23
- test_actions_executor.execute_actions({
24
- 'node1' => { test_action: { code: proc do
25
- sleep 2
26
- nodes_executed << 'node1'
27
- end } },
28
- 'node2' => { test_action: { code: proc do
29
- sleep 3
30
- nodes_executed << 'node2'
31
- end } },
32
- 'node3' => { test_action: { code: proc do
33
- sleep 1
34
- nodes_executed << 'node3'
35
- end } }
36
- }, concurrent: true)
24
+ test_actions_executor.execute_actions(
25
+ {
26
+ 'node1' => { test_action: { code: proc do
27
+ sleep 2
28
+ nodes_executed << 'node1'
29
+ end } },
30
+ 'node2' => { test_action: { code: proc do
31
+ sleep 3
32
+ nodes_executed << 'node2'
33
+ end } },
34
+ 'node3' => { test_action: { code: proc do
35
+ sleep 1
36
+ nodes_executed << 'node3'
37
+ end } }
38
+ },
39
+ concurrent: true
40
+ )
37
41
  expect(nodes_executed).to eq %w[node3 node1 node2]
38
42
  end
39
43
  end
@@ -46,76 +50,81 @@ describe HybridPlatformsConductor::ActionsExecutor do
46
50
  # * node2: 1---2-----3
47
51
  # * node3: ------1-2-----3
48
52
  # * Time : 0 1 2 3 4 5 6 7 8
49
- expect(test_actions_executor.execute_actions({
50
- 'node1' => [
51
- {
52
- test_action: { code: proc do |stdout, stderr|
53
- sleep 1
54
- stdout << 'node1_action1 '
55
- actions_executed << 'node1_action1'
56
- end }
57
- },
58
- {
59
- test_action: { code: proc do |stdout, stderr|
60
- sleep 5
61
- stdout << 'node1_action2 '
62
- actions_executed << 'node1_action2'
63
- end }
64
- },
65
- {
66
- test_action: { code: proc do |stdout, stderr|
67
- sleep 2
68
- stdout << 'node1_action3'
69
- actions_executed << 'node1_action3'
70
- end }
71
- }
72
- ],
73
- 'node2' => [
74
- {
75
- test_action: { code: proc do |stdout, stderr|
76
- stdout << 'node2_action1 '
77
- actions_executed << 'node2_action1'
78
- end }
79
- },
80
- {
81
- test_action: { code: proc do |stdout, stderr|
82
- sleep 2
83
- stdout << 'node2_action2 '
84
- actions_executed << 'node2_action2'
85
- end }
86
- },
87
- {
88
- test_action: { code: proc do |stdout, stderr|
89
- sleep 3
90
- stdout << 'node2_action3'
91
- actions_executed << 'node2_action3'
92
- end }
93
- }
94
- ],
95
- 'node3' => [
96
- {
97
- test_action: { code: proc do |stdout, stderr|
98
- sleep 3
99
- stdout << 'node3_action1 '
100
- actions_executed << 'node3_action1'
101
- end }
102
- },
53
+ expect(
54
+ test_actions_executor.execute_actions(
103
55
  {
104
- test_action: { code: proc do |stdout, stderr|
105
- sleep 1
106
- stdout << 'node3_action2 '
107
- actions_executed << 'node3_action2'
108
- end }
56
+ 'node1' => [
57
+ {
58
+ test_action: { code: proc do |stdout|
59
+ sleep 1
60
+ stdout << 'node1_action1 '
61
+ actions_executed << 'node1_action1'
62
+ end }
63
+ },
64
+ {
65
+ test_action: { code: proc do |stdout|
66
+ sleep 5
67
+ stdout << 'node1_action2 '
68
+ actions_executed << 'node1_action2'
69
+ end }
70
+ },
71
+ {
72
+ test_action: { code: proc do |stdout|
73
+ sleep 2
74
+ stdout << 'node1_action3'
75
+ actions_executed << 'node1_action3'
76
+ end }
77
+ }
78
+ ],
79
+ 'node2' => [
80
+ {
81
+ test_action: { code: proc do |stdout|
82
+ stdout << 'node2_action1 '
83
+ actions_executed << 'node2_action1'
84
+ end }
85
+ },
86
+ {
87
+ test_action: { code: proc do |stdout|
88
+ sleep 2
89
+ stdout << 'node2_action2 '
90
+ actions_executed << 'node2_action2'
91
+ end }
92
+ },
93
+ {
94
+ test_action: { code: proc do |stdout|
95
+ sleep 3
96
+ stdout << 'node2_action3'
97
+ actions_executed << 'node2_action3'
98
+ end }
99
+ }
100
+ ],
101
+ 'node3' => [
102
+ {
103
+ test_action: { code: proc do |stdout|
104
+ sleep 3
105
+ stdout << 'node3_action1 '
106
+ actions_executed << 'node3_action1'
107
+ end }
108
+ },
109
+ {
110
+ test_action: { code: proc do |stdout|
111
+ sleep 1
112
+ stdout << 'node3_action2 '
113
+ actions_executed << 'node3_action2'
114
+ end }
115
+ },
116
+ {
117
+ test_action: { code: proc do |stdout|
118
+ sleep 3
119
+ stdout << 'node3_action3'
120
+ actions_executed << 'node3_action3'
121
+ end }
122
+ }
123
+ ]
109
124
  },
110
- {
111
- test_action: { code: proc do |stdout, stderr|
112
- sleep 3
113
- stdout << 'node3_action3'
114
- actions_executed << 'node3_action3'
115
- end }
116
- }
117
- ]
118
- }, concurrent: true)).to eq(
125
+ concurrent: true
126
+ )
127
+ ).to eq(
119
128
  'node1' => [0, 'node1_action1 node1_action2 node1_action3', ''],
120
129
  'node2' => [0, 'node2_action1 node2_action2 node2_action3', ''],
121
130
  'node3' => [0, 'node3_action1 node3_action2 node3_action3', '']
@@ -136,82 +145,89 @@ describe HybridPlatformsConductor::ActionsExecutor do
136
145
 
137
146
  it 'executes several commands on several nodes with timeout on different actions depending on the node, in parallel' do
138
147
  with_test_platform_for_parallel_tests do
139
- expect(test_actions_executor.execute_actions(
140
- {
141
- 'node1' => [
142
- { bash: 'sleep 1 && echo Node11' },
143
- { bash: 'sleep 5 && echo Node12' }
144
- ],
145
- 'node2' => [
146
- { bash: 'echo Node21' },
147
- { bash: 'sleep 1 && echo Node22' }
148
- ],
149
- 'node3' => [
150
- { bash: 'sleep 1 && echo Node31' },
151
- { bash: 'sleep 1 && echo Node32' },
152
- { bash: 'sleep 5 && echo Node33' }
153
- ],
154
- 'node4' => [
155
- { bash: 'sleep 5 && echo Node41' }
156
- ]
157
- },
158
- timeout: 3,
159
- concurrent: true
160
- )).to eq(
161
- 'node1' => [:timeout, "Node11\n", ''],
162
- 'node2' => [0, "Node21\nNode22\n", ''],
163
- 'node3' => [:timeout, "Node31\nNode32\n", ''],
164
- 'node4' => [:timeout, '', '']
148
+ expect(
149
+ test_actions_executor.execute_actions(
150
+ {
151
+ 'node1' => [
152
+ { bash: 'sleep 1 && echo Node11' },
153
+ { bash: 'sleep 5 && echo Node12' }
154
+ ],
155
+ 'node2' => [
156
+ { bash: 'echo Node21' },
157
+ { bash: 'sleep 1 && echo Node22' }
158
+ ],
159
+ 'node3' => [
160
+ { bash: 'sleep 1 && echo Node31' },
161
+ { bash: 'sleep 1 && echo Node32' },
162
+ { bash: 'sleep 5 && echo Node33' }
163
+ ],
164
+ 'node4' => [
165
+ { bash: 'sleep 5 && echo Node41' }
166
+ ]
167
+ },
168
+ timeout: 3,
169
+ concurrent: true
170
+ )
171
+ ).to eq(
172
+ 'node1' => [:timeout, "Node11\n", ''],
173
+ 'node2' => [0, "Node21\nNode22\n", ''],
174
+ 'node3' => [:timeout, "Node31\nNode32\n", ''],
175
+ 'node4' => [:timeout, '', '']
165
176
  )
166
177
  end
167
178
  end
168
179
 
169
180
  it 'executes several actions on several nodes and returns the corresponding stdout and stderr correctly in parallel' do
170
181
  with_test_platform_for_parallel_tests do
171
- expect(test_actions_executor.execute_actions({
172
- 'node1' => [
173
- { test_action: { code: proc do |stdout, stderr|
174
- stdout << 'node1_action1_stdout '
175
- stderr << 'node1_action1_stderr '
176
- end } },
177
- { test_action: { code: proc do |stdout, stderr|
178
- stdout << 'node1_action2_stdout '
179
- stderr << 'node1_action2_stderr '
180
- end } },
181
- { test_action: { code: proc do |stdout, stderr|
182
- stdout << 'node1_action3_stdout'
183
- stderr << 'node1_action3_stderr'
184
- end } }
185
- ],
186
- 'node2' => [
187
- { test_action: { code: proc do |stdout, stderr|
188
- stdout << 'node2_action1_stdout '
189
- stderr << 'node2_action1_stderr '
190
- end } },
191
- { test_action: { code: proc do |stdout, stderr|
192
- stdout << 'node2_action2_stdout '
193
- stderr << 'node2_action2_stderr '
194
- end } },
195
- { test_action: { code: proc do |stdout, stderr|
196
- stdout << 'node2_action3_stdout'
197
- stderr << 'node2_action3_stderr'
198
- end } }
199
- ],
200
- 'node3' => [
201
- { test_action: { code: proc do |stdout, stderr|
202
- stdout << 'node3_action1_stdout '
203
- stderr << 'node3_action1_stderr '
204
- end } },
205
- { test_action: { code: proc do |stdout, stderr|
206
- stdout << 'node3_action2_stdout '
207
- stderr << 'node3_action2_stderr '
208
- end } },
209
- { test_action: { code: proc do |stdout, stderr|
210
- stdout << 'node3_action3_stdout'
211
- stderr << 'node3_action3_stderr'
212
- end } }
213
- ]
214
- }, concurrent: true)).to eq(
182
+ expect(
183
+ test_actions_executor.execute_actions(
184
+ {
185
+ 'node1' => [
186
+ { test_action: { code: proc do |stdout, stderr|
187
+ stdout << 'node1_action1_stdout '
188
+ stderr << 'node1_action1_stderr '
189
+ end } },
190
+ { test_action: { code: proc do |stdout, stderr|
191
+ stdout << 'node1_action2_stdout '
192
+ stderr << 'node1_action2_stderr '
193
+ end } },
194
+ { test_action: { code: proc do |stdout, stderr|
195
+ stdout << 'node1_action3_stdout'
196
+ stderr << 'node1_action3_stderr'
197
+ end } }
198
+ ],
199
+ 'node2' => [
200
+ { test_action: { code: proc do |stdout, stderr|
201
+ stdout << 'node2_action1_stdout '
202
+ stderr << 'node2_action1_stderr '
203
+ end } },
204
+ { test_action: { code: proc do |stdout, stderr|
205
+ stdout << 'node2_action2_stdout '
206
+ stderr << 'node2_action2_stderr '
207
+ end } },
208
+ { test_action: { code: proc do |stdout, stderr|
209
+ stdout << 'node2_action3_stdout'
210
+ stderr << 'node2_action3_stderr'
211
+ end } }
212
+ ],
213
+ 'node3' => [
214
+ { test_action: { code: proc do |stdout, stderr|
215
+ stdout << 'node3_action1_stdout '
216
+ stderr << 'node3_action1_stderr '
217
+ end } },
218
+ { test_action: { code: proc do |stdout, stderr|
219
+ stdout << 'node3_action2_stdout '
220
+ stderr << 'node3_action2_stderr '
221
+ end } },
222
+ { test_action: { code: proc do |stdout, stderr|
223
+ stdout << 'node3_action3_stdout'
224
+ stderr << 'node3_action3_stderr'
225
+ end } }
226
+ ]
227
+ },
228
+ concurrent: true
229
+ )
230
+ ).to eq(
215
231
  'node1' => [0, 'node1_action1_stdout node1_action2_stdout node1_action3_stdout', 'node1_action1_stderr node1_action2_stderr node1_action3_stderr'],
216
232
  'node2' => [0, 'node2_action1_stdout node2_action2_stdout node2_action3_stdout', 'node2_action1_stderr node2_action2_stderr node2_action3_stderr'],
217
233
  'node3' => [0, 'node3_action1_stdout node3_action2_stdout node3_action3_stdout', 'node3_action1_stderr node3_action2_stderr node3_action3_stderr']
@@ -222,65 +238,71 @@ describe HybridPlatformsConductor::ActionsExecutor do
222
238
  it 'executes several actions on several nodes and returns the corresponding stdout and stderr correctly in parallel and in files' do
223
239
  with_repository do |logs_repository|
224
240
  with_test_platform_for_parallel_tests do
225
- expect(test_actions_executor.execute_actions({
226
- 'node1' => [
227
- { test_action: { code: proc do |stdout, stderr|
228
- stdout << 'node1_action1_stdout '
229
- sleep 1
230
- stderr << 'node1_action1_stderr '
231
- sleep 1
232
- end } },
233
- { test_action: { code: proc do |stdout, stderr|
234
- stdout << 'node1_action2_stdout '
235
- sleep 1
236
- stderr << 'node1_action2_stderr '
237
- sleep 1
238
- end } },
239
- { test_action: { code: proc do |stdout, stderr|
240
- stdout << 'node1_action3_stdout'
241
- sleep 1
242
- stderr << 'node1_action3_stderr'
243
- end } }
244
- ],
245
- 'node2' => [
246
- { test_action: { code: proc do |stdout, stderr|
247
- stdout << 'node2_action1_stdout '
248
- sleep 1
249
- stderr << 'node2_action1_stderr '
250
- sleep 1
251
- end } },
252
- { test_action: { code: proc do |stdout, stderr|
253
- stdout << 'node2_action2_stdout '
254
- sleep 1
255
- stderr << 'node2_action2_stderr '
256
- sleep 1
257
- end } },
258
- { test_action: { code: proc do |stdout, stderr|
259
- stdout << 'node2_action3_stdout'
260
- sleep 1
261
- stderr << 'node2_action3_stderr'
262
- end } }
263
- ],
264
- 'node3' => [
265
- { test_action: { code: proc do |stdout, stderr|
266
- stdout << 'node3_action1_stdout '
267
- sleep 1
268
- stderr << 'node3_action1_stderr '
269
- sleep 1
270
- end } },
271
- { test_action: { code: proc do |stdout, stderr|
272
- stdout << 'node3_action2_stdout '
273
- sleep 1
274
- stderr << 'node3_action2_stderr '
275
- sleep 1
276
- end } },
277
- { test_action: { code: proc do |stdout, stderr|
278
- stdout << 'node3_action3_stdout'
279
- sleep 1
280
- stderr << 'node3_action3_stderr'
281
- end } }
282
- ]
283
- }, concurrent: true, log_to_dir: logs_repository)).to eq(
241
+ expect(
242
+ test_actions_executor.execute_actions(
243
+ {
244
+ 'node1' => [
245
+ { test_action: { code: proc do |stdout, stderr|
246
+ stdout << 'node1_action1_stdout '
247
+ sleep 1
248
+ stderr << 'node1_action1_stderr '
249
+ sleep 1
250
+ end } },
251
+ { test_action: { code: proc do |stdout, stderr|
252
+ stdout << 'node1_action2_stdout '
253
+ sleep 1
254
+ stderr << 'node1_action2_stderr '
255
+ sleep 1
256
+ end } },
257
+ { test_action: { code: proc do |stdout, stderr|
258
+ stdout << 'node1_action3_stdout'
259
+ sleep 1
260
+ stderr << 'node1_action3_stderr'
261
+ end } }
262
+ ],
263
+ 'node2' => [
264
+ { test_action: { code: proc do |stdout, stderr|
265
+ stdout << 'node2_action1_stdout '
266
+ sleep 1
267
+ stderr << 'node2_action1_stderr '
268
+ sleep 1
269
+ end } },
270
+ { test_action: { code: proc do |stdout, stderr|
271
+ stdout << 'node2_action2_stdout '
272
+ sleep 1
273
+ stderr << 'node2_action2_stderr '
274
+ sleep 1
275
+ end } },
276
+ { test_action: { code: proc do |stdout, stderr|
277
+ stdout << 'node2_action3_stdout'
278
+ sleep 1
279
+ stderr << 'node2_action3_stderr'
280
+ end } }
281
+ ],
282
+ 'node3' => [
283
+ { test_action: { code: proc do |stdout, stderr|
284
+ stdout << 'node3_action1_stdout '
285
+ sleep 1
286
+ stderr << 'node3_action1_stderr '
287
+ sleep 1
288
+ end } },
289
+ { test_action: { code: proc do |stdout, stderr|
290
+ stdout << 'node3_action2_stdout '
291
+ sleep 1
292
+ stderr << 'node3_action2_stderr '
293
+ sleep 1
294
+ end } },
295
+ { test_action: { code: proc do |stdout, stderr|
296
+ stdout << 'node3_action3_stdout'
297
+ sleep 1
298
+ stderr << 'node3_action3_stderr'
299
+ end } }
300
+ ]
301
+ },
302
+ concurrent: true,
303
+ log_to_dir: logs_repository
304
+ )
305
+ ).to eq(
284
306
  'node1' => [0, 'node1_action1_stdout node1_action2_stdout node1_action3_stdout', 'node1_action1_stderr node1_action2_stderr node1_action3_stderr'],
285
307
  'node2' => [0, 'node2_action1_stdout node2_action2_stdout node2_action3_stdout', 'node2_action1_stderr node2_action2_stderr node2_action3_stderr'],
286
308
  'node3' => [0, 'node3_action1_stdout node3_action2_stdout node3_action3_stdout', 'node3_action1_stderr node3_action2_stderr node3_action3_stderr']
@@ -297,28 +319,34 @@ describe HybridPlatformsConductor::ActionsExecutor do
297
319
 
298
320
  it 'executes the same actions on several nodes and returns the corresponding stdout and stderr correctly in parallel and in files' do
299
321
  with_repository do |logs_repository|
300
- with_test_platform(nodes: { 'node1' => {}, 'node2' => {}, 'node3' => {} }) do
301
- expect(test_actions_executor.execute_actions({
302
- %w[node1 node2 node3] => [
303
- { ruby: proc do |stdout, stderr, action|
304
- stdout << "#{action.node}_action1_stdout "
305
- sleep 1
306
- stderr << "#{action.node}_action1_stderr "
307
- sleep 1
308
- end },
309
- { ruby: proc do |stdout, stderr, action|
310
- stdout << "#{action.node}_action2_stdout "
311
- sleep 1
312
- stderr << "#{action.node}_action2_stderr "
313
- sleep 1
314
- end },
315
- { ruby: proc do |stdout, stderr, action|
316
- stdout << "#{action.node}_action3_stdout"
317
- sleep 1
318
- stderr << "#{action.node}_action3_stderr"
319
- end }
320
- ]
321
- }, concurrent: true, log_to_dir: logs_repository)).to eq(
322
+ with_test_platform({ nodes: { 'node1' => {}, 'node2' => {}, 'node3' => {} } }) do
323
+ expect(
324
+ test_actions_executor.execute_actions(
325
+ {
326
+ %w[node1 node2 node3] => [
327
+ { ruby: proc do |stdout, stderr, action|
328
+ stdout << "#{action.node}_action1_stdout "
329
+ sleep 1
330
+ stderr << "#{action.node}_action1_stderr "
331
+ sleep 1
332
+ end },
333
+ { ruby: proc do |stdout, stderr, action|
334
+ stdout << "#{action.node}_action2_stdout "
335
+ sleep 1
336
+ stderr << "#{action.node}_action2_stderr "
337
+ sleep 1
338
+ end },
339
+ { ruby: proc do |stdout, stderr, action|
340
+ stdout << "#{action.node}_action3_stdout"
341
+ sleep 1
342
+ stderr << "#{action.node}_action3_stderr"
343
+ end }
344
+ ]
345
+ },
346
+ concurrent: true,
347
+ log_to_dir: logs_repository
348
+ )
349
+ ).to eq(
322
350
  'node1' => [0, 'node1_action1_stdout node1_action2_stdout node1_action3_stdout', 'node1_action1_stderr node1_action2_stderr node1_action3_stderr'],
323
351
  'node2' => [0, 'node2_action1_stdout node2_action2_stdout node2_action3_stdout', 'node2_action1_stderr node2_action2_stderr node2_action3_stderr'],
324
352
  'node3' => [0, 'node3_action1_stdout node3_action2_stdout node3_action3_stdout', 'node3_action1_stderr node3_action2_stderr node3_action3_stderr']