hybrid_platforms_conductor 32.17.0 → 33.0.2

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.
Files changed (283) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +36 -0
  3. data/README.md +6 -3
  4. data/bin/check-node +0 -1
  5. data/bin/deploy +0 -1
  6. data/bin/get_impacted_nodes +0 -1
  7. data/bin/last_deploys +12 -8
  8. data/bin/nodes_to_deploy +6 -6
  9. data/bin/setup +6 -6
  10. data/bin/topograph +1 -1
  11. data/docs/config_dsl.md +45 -1
  12. data/docs/executables.md +6 -7
  13. data/docs/executables/check-node.md +3 -3
  14. data/docs/executables/deploy.md +3 -3
  15. data/docs/executables/dump_nodes_json.md +3 -3
  16. data/docs/executables/test.md +3 -3
  17. data/docs/executables/topograph.md +3 -3
  18. data/docs/gen/mermaid/README.md-0.png +0 -0
  19. data/docs/gen/mermaid/docs/executables/check-node.md-0.png +0 -0
  20. data/docs/gen/mermaid/docs/executables/deploy.md-0.png +0 -0
  21. data/docs/gen/mermaid/docs/executables/free_ips.md-0.png +0 -0
  22. data/docs/gen/mermaid/docs/executables/get_impacted_nodes.md-0.png +0 -0
  23. data/docs/gen/mermaid/docs/executables/last_deploys.md-0.png +0 -0
  24. data/docs/gen/mermaid/docs/executables/nodes_to_deploy.md-0.png +0 -0
  25. data/docs/gen/mermaid/docs/executables/report.md-0.png +0 -0
  26. data/docs/gen/mermaid/docs/executables/run.md-0.png +0 -0
  27. data/docs/gen/mermaid/docs/executables/ssh_config.md-0.png +0 -0
  28. data/docs/gen/mermaid/docs/executables/test.md-0.png +0 -0
  29. data/docs/plugins.md +46 -0
  30. data/docs/plugins/connector/ssh.md +1 -1
  31. data/docs/plugins/log/remote_fs.md +26 -0
  32. data/docs/plugins/secrets_reader/cli.md +31 -0
  33. data/docs/plugins/secrets_reader/thycotic.md +46 -0
  34. data/docs/plugins/test/check_deploy_and_idempotence.md +1 -1
  35. data/docs/plugins/test/connection.md +1 -0
  36. data/docs/plugins/test/deploy_removes_root_access.md +1 -1
  37. data/docs/plugins/test/file_system.md +1 -0
  38. data/docs/plugins/test/hostname.md +1 -0
  39. data/docs/plugins/test/ip.md +1 -0
  40. data/docs/plugins/test/local_users.md +1 -0
  41. data/docs/plugins/test/mounts.md +1 -0
  42. data/docs/plugins/test/orphan_files.md +1 -0
  43. data/docs/plugins/test/ports.md +1 -0
  44. data/docs/plugins/test/spectre.md +1 -0
  45. data/docs/plugins/test/vulnerabilities.md +1 -0
  46. data/lib/hybrid_platforms_conductor/action.rb +4 -4
  47. data/lib/hybrid_platforms_conductor/actions_executor.rb +45 -43
  48. data/lib/hybrid_platforms_conductor/bitbucket.rb +5 -4
  49. data/lib/hybrid_platforms_conductor/cmd_runner.rb +13 -12
  50. data/lib/hybrid_platforms_conductor/cmdb.rb +2 -2
  51. data/lib/hybrid_platforms_conductor/common_config_dsl/bitbucket.rb +2 -1
  52. data/lib/hybrid_platforms_conductor/common_config_dsl/confluence.rb +2 -1
  53. data/lib/hybrid_platforms_conductor/common_config_dsl/file_system_tests.rb +5 -4
  54. data/lib/hybrid_platforms_conductor/common_config_dsl/github.rb +4 -3
  55. data/lib/hybrid_platforms_conductor/common_config_dsl/idempotence_tests.rb +2 -2
  56. data/lib/hybrid_platforms_conductor/config.rb +8 -4
  57. data/lib/hybrid_platforms_conductor/confluence.rb +1 -1
  58. data/lib/hybrid_platforms_conductor/connector.rb +5 -2
  59. data/lib/hybrid_platforms_conductor/core_extensions/cleanroom/fix_kwargs.rb +116 -0
  60. data/lib/hybrid_platforms_conductor/core_extensions/symbol/zero.rb +24 -0
  61. data/lib/hybrid_platforms_conductor/credentials.rb +39 -36
  62. data/lib/hybrid_platforms_conductor/current_dir_monitor.rb +4 -1
  63. data/lib/hybrid_platforms_conductor/deployer.rb +275 -224
  64. data/lib/hybrid_platforms_conductor/executable.rb +20 -15
  65. data/lib/hybrid_platforms_conductor/hpc_plugins/cmdb/config.rb +10 -7
  66. data/lib/hybrid_platforms_conductor/hpc_plugins/cmdb/host_ip.rb +1 -1
  67. data/lib/hybrid_platforms_conductor/hpc_plugins/cmdb/host_keys.rb +2 -2
  68. data/lib/hybrid_platforms_conductor/hpc_plugins/cmdb/platform_handlers.rb +4 -4
  69. data/lib/hybrid_platforms_conductor/hpc_plugins/connector/local.rb +2 -0
  70. data/lib/hybrid_platforms_conductor/hpc_plugins/connector/ssh.rb +45 -49
  71. data/lib/hybrid_platforms_conductor/hpc_plugins/log/my_log_plugin.rb.sample +100 -0
  72. data/lib/hybrid_platforms_conductor/hpc_plugins/log/remote_fs.rb +180 -0
  73. data/lib/hybrid_platforms_conductor/hpc_plugins/platform_handler/serverless_chef.rb +68 -66
  74. data/lib/hybrid_platforms_conductor/hpc_plugins/platform_handler/serverless_chef/dsl_parser.rb +13 -0
  75. data/lib/hybrid_platforms_conductor/hpc_plugins/platform_handler/serverless_chef/recipes_tree_builder.rb +39 -38
  76. data/lib/hybrid_platforms_conductor/hpc_plugins/platform_handler/yaml_inventory.rb +5 -4
  77. data/lib/hybrid_platforms_conductor/hpc_plugins/provisioner/docker.rb +43 -45
  78. data/lib/hybrid_platforms_conductor/hpc_plugins/provisioner/podman.rb +18 -20
  79. data/lib/hybrid_platforms_conductor/hpc_plugins/provisioner/proxmox.rb +118 -117
  80. data/lib/hybrid_platforms_conductor/hpc_plugins/provisioner/proxmox/proxmox_waiter.rb +39 -43
  81. data/lib/hybrid_platforms_conductor/hpc_plugins/provisioner/proxmox/reserve_proxmox_container +9 -13
  82. data/lib/hybrid_platforms_conductor/hpc_plugins/report/confluence.rb +2 -2
  83. data/lib/hybrid_platforms_conductor/hpc_plugins/report/mediawiki.rb +28 -21
  84. data/lib/hybrid_platforms_conductor/hpc_plugins/report/stdout.rb +26 -22
  85. data/lib/hybrid_platforms_conductor/hpc_plugins/secrets_reader/cli.rb +77 -0
  86. data/lib/hybrid_platforms_conductor/hpc_plugins/secrets_reader/my_secrets_reader_plugin.rb.sample +46 -0
  87. data/lib/hybrid_platforms_conductor/hpc_plugins/secrets_reader/thycotic.rb +90 -0
  88. data/lib/hybrid_platforms_conductor/hpc_plugins/test/bitbucket_conf.rb +3 -3
  89. data/lib/hybrid_platforms_conductor/hpc_plugins/test/check_deploy_and_idempotence.rb +4 -2
  90. data/lib/hybrid_platforms_conductor/hpc_plugins/test/connection.rb +3 -1
  91. data/lib/hybrid_platforms_conductor/hpc_plugins/test/deploy_freshness.rb +7 -21
  92. data/lib/hybrid_platforms_conductor/hpc_plugins/test/deploy_removes_root_access.rb +21 -19
  93. data/lib/hybrid_platforms_conductor/hpc_plugins/test/divergence.rb +2 -2
  94. data/lib/hybrid_platforms_conductor/hpc_plugins/test/executables.rb +2 -2
  95. data/lib/hybrid_platforms_conductor/hpc_plugins/test/file_system.rb +21 -22
  96. data/lib/hybrid_platforms_conductor/hpc_plugins/test/file_system_hdfs.rb +19 -21
  97. data/lib/hybrid_platforms_conductor/hpc_plugins/test/github_ci.rb +2 -3
  98. data/lib/hybrid_platforms_conductor/hpc_plugins/test/hostname.rb +3 -1
  99. data/lib/hybrid_platforms_conductor/hpc_plugins/test/idempotence.rb +2 -2
  100. data/lib/hybrid_platforms_conductor/hpc_plugins/test/ip.rb +4 -2
  101. data/lib/hybrid_platforms_conductor/hpc_plugins/test/jenkins_ci_conf.rb +21 -22
  102. data/lib/hybrid_platforms_conductor/hpc_plugins/test/jenkins_ci_masters_ok.rb +10 -12
  103. data/lib/hybrid_platforms_conductor/hpc_plugins/test/linear_strategy.rb +9 -9
  104. data/lib/hybrid_platforms_conductor/hpc_plugins/test/local_users.rb +5 -3
  105. data/lib/hybrid_platforms_conductor/hpc_plugins/test/mounts.rb +5 -3
  106. data/lib/hybrid_platforms_conductor/hpc_plugins/test/orphan_files.rb +13 -10
  107. data/lib/hybrid_platforms_conductor/hpc_plugins/test/ports.rb +5 -3
  108. data/lib/hybrid_platforms_conductor/hpc_plugins/test/private_ips.rb +5 -5
  109. data/lib/hybrid_platforms_conductor/hpc_plugins/test/public_ips.rb +5 -5
  110. data/lib/hybrid_platforms_conductor/hpc_plugins/test/spectre.rb +7 -7
  111. data/lib/hybrid_platforms_conductor/hpc_plugins/test/veids.rb +3 -3
  112. data/lib/hybrid_platforms_conductor/hpc_plugins/test/vulnerabilities.rb +27 -25
  113. data/lib/hybrid_platforms_conductor/hpc_plugins/test_report/confluence.rb +2 -2
  114. data/lib/hybrid_platforms_conductor/hpc_plugins/test_report/stdout.rb +8 -6
  115. data/lib/hybrid_platforms_conductor/io_router.rb +14 -13
  116. data/lib/hybrid_platforms_conductor/json_dumper.rb +2 -2
  117. data/lib/hybrid_platforms_conductor/log.rb +31 -0
  118. data/lib/hybrid_platforms_conductor/logger_helpers.rb +19 -16
  119. data/lib/hybrid_platforms_conductor/nodes_handler.rb +89 -71
  120. data/lib/hybrid_platforms_conductor/parallel_threads.rb +7 -11
  121. data/lib/hybrid_platforms_conductor/platform_handler.rb +7 -7
  122. data/lib/hybrid_platforms_conductor/platforms_handler.rb +5 -3
  123. data/lib/hybrid_platforms_conductor/plugin.rb +2 -2
  124. data/lib/hybrid_platforms_conductor/plugins.rb +14 -8
  125. data/lib/hybrid_platforms_conductor/provisioner.rb +4 -4
  126. data/lib/hybrid_platforms_conductor/report.rb +2 -2
  127. data/lib/hybrid_platforms_conductor/reports_handler.rb +3 -2
  128. data/lib/hybrid_platforms_conductor/secrets_reader.rb +31 -0
  129. data/lib/hybrid_platforms_conductor/services_handler.rb +32 -29
  130. data/lib/hybrid_platforms_conductor/test_only_remote_node.rb +18 -0
  131. data/lib/hybrid_platforms_conductor/test_report.rb +15 -18
  132. data/lib/hybrid_platforms_conductor/tests_runner.rb +116 -118
  133. data/lib/hybrid_platforms_conductor/thycotic.rb +28 -19
  134. data/lib/hybrid_platforms_conductor/topographer.rb +200 -190
  135. data/lib/hybrid_platforms_conductor/topographer/plugins/graphviz.rb +8 -8
  136. data/lib/hybrid_platforms_conductor/topographer/plugins/json.rb +4 -4
  137. data/lib/hybrid_platforms_conductor/version.rb +1 -1
  138. data/spec/hybrid_platforms_conductor_test.rb +33 -12
  139. data/spec/hybrid_platforms_conductor_test/api/actions_executor/actions/bash_spec.rb +18 -11
  140. data/spec/hybrid_platforms_conductor_test/api/actions_executor/actions/interactive_spec.rb +2 -2
  141. data/spec/hybrid_platforms_conductor_test/api/actions_executor/actions/remote_bash_spec.rb +32 -21
  142. data/spec/hybrid_platforms_conductor_test/api/actions_executor/actions/ruby_spec.rb +75 -49
  143. data/spec/hybrid_platforms_conductor_test/api/actions_executor/actions/scp_spec.rb +27 -15
  144. data/spec/hybrid_platforms_conductor_test/api/actions_executor/actions_spec.rb +90 -59
  145. data/spec/hybrid_platforms_conductor_test/api/actions_executor/connection_spec.rb +46 -44
  146. data/spec/hybrid_platforms_conductor_test/api/actions_executor/connectors/local/connectable_nodes_spec.rb +12 -8
  147. data/spec/hybrid_platforms_conductor_test/api/actions_executor/connectors/local/remote_actions_spec.rb +4 -7
  148. data/spec/hybrid_platforms_conductor_test/api/actions_executor/connectors/ssh/cli_options_spec.rb +21 -22
  149. data/spec/hybrid_platforms_conductor_test/api/actions_executor/connectors/ssh/config_dsl_spec.rb +23 -24
  150. data/spec/hybrid_platforms_conductor_test/api/actions_executor/connectors/ssh/connectable_nodes_spec.rb +10 -6
  151. data/spec/hybrid_platforms_conductor_test/api/actions_executor/connectors/ssh/connections_spec.rb +106 -75
  152. data/spec/hybrid_platforms_conductor_test/api/actions_executor/connectors/ssh/global_helpers_spec.rb +145 -126
  153. data/spec/hybrid_platforms_conductor_test/api/actions_executor/connectors/ssh/node_helpers_spec.rb +3 -3
  154. data/spec/hybrid_platforms_conductor_test/api/actions_executor/connectors/ssh/remote_actions_spec.rb +29 -25
  155. data/spec/hybrid_platforms_conductor_test/api/actions_executor/logging_spec.rb +167 -142
  156. data/spec/hybrid_platforms_conductor_test/api/actions_executor/parallel_spec.rb +272 -244
  157. data/spec/hybrid_platforms_conductor_test/api/actions_executor/timeout_spec.rb +16 -16
  158. data/spec/hybrid_platforms_conductor_test/api/cmd_runner_spec.rb +36 -36
  159. data/spec/hybrid_platforms_conductor_test/api/config_spec.rb +24 -22
  160. data/spec/hybrid_platforms_conductor_test/api/deployer/check_spec.rb +4 -2
  161. data/spec/hybrid_platforms_conductor_test/api/deployer/config_dsl_spec.rb +43 -5
  162. data/spec/hybrid_platforms_conductor_test/api/deployer/deploy_spec.rb +199 -216
  163. data/spec/hybrid_platforms_conductor_test/api/deployer/log_plugins/remote_fs_spec.rb +223 -0
  164. data/spec/hybrid_platforms_conductor_test/api/deployer/parse_deploy_output_spec.rb +55 -59
  165. data/spec/hybrid_platforms_conductor_test/api/deployer/provisioner_spec.rb +36 -62
  166. data/spec/hybrid_platforms_conductor_test/api/deployer/provisioners/podman_spec.rb +17 -17
  167. data/spec/hybrid_platforms_conductor_test/api/deployer/provisioners/proxmox/config_dsl_spec.rb +4 -4
  168. data/spec/hybrid_platforms_conductor_test/api/deployer/provisioners/proxmox/create_spec.rb +44 -51
  169. data/spec/hybrid_platforms_conductor_test/api/deployer/provisioners/proxmox/destroy_spec.rb +3 -3
  170. data/spec/hybrid_platforms_conductor_test/api/deployer/provisioners/proxmox/ip_spec.rb +12 -16
  171. data/spec/hybrid_platforms_conductor_test/api/deployer/provisioners/proxmox/reserve_proxmox_container/destroy_vm_spec.rb +31 -19
  172. data/spec/hybrid_platforms_conductor_test/api/deployer/provisioners/proxmox/reserve_proxmox_container/expired_containers_spec.rb +324 -266
  173. data/spec/hybrid_platforms_conductor_test/api/deployer/provisioners/proxmox/reserve_proxmox_container/ips_assignment_spec.rb +89 -61
  174. data/spec/hybrid_platforms_conductor_test/api/deployer/provisioners/proxmox/reserve_proxmox_container/other_lxc_containers_resources_spec.rb +117 -93
  175. data/spec/hybrid_platforms_conductor_test/api/deployer/provisioners/proxmox/reserve_proxmox_container/pve_node_resources_spec.rb +71 -54
  176. data/spec/hybrid_platforms_conductor_test/api/deployer/provisioners/proxmox/reserve_proxmox_container/retries_spec.rb +10 -8
  177. data/spec/hybrid_platforms_conductor_test/api/deployer/provisioners/proxmox/reserve_proxmox_container/vm_ids_assignment_spec.rb +80 -60
  178. data/spec/hybrid_platforms_conductor_test/api/deployer/provisioners/proxmox/start_spec.rb +1 -1
  179. data/spec/hybrid_platforms_conductor_test/api/deployer/provisioners/proxmox/state_spec.rb +1 -1
  180. data/spec/hybrid_platforms_conductor_test/api/deployer/provisioners/proxmox/stop_spec.rb +1 -1
  181. data/spec/hybrid_platforms_conductor_test/api/deployer/secrets_reader_plugins/cli_spec.rb +64 -0
  182. data/spec/hybrid_platforms_conductor_test/api/deployer/secrets_reader_plugins/thycotic_spec.rb +268 -0
  183. data/spec/hybrid_platforms_conductor_test/api/nodes_handler/cmdbs/config_spec.rb +8 -10
  184. data/spec/hybrid_platforms_conductor_test/api/nodes_handler/cmdbs/host_ip_spec.rb +33 -24
  185. data/spec/hybrid_platforms_conductor_test/api/nodes_handler/cmdbs/host_keys_spec.rb +64 -51
  186. data/spec/hybrid_platforms_conductor_test/api/nodes_handler/cmdbs/platform_handlers_spec.rb +3 -3
  187. data/spec/hybrid_platforms_conductor_test/api/nodes_handler/cmdbs_plugins_api_spec.rb +50 -51
  188. data/spec/hybrid_platforms_conductor_test/api/nodes_handler/common_spec.rb +91 -81
  189. data/spec/hybrid_platforms_conductor_test/api/nodes_handler/config_dsl_spec.rb +14 -16
  190. data/spec/hybrid_platforms_conductor_test/api/nodes_handler/git_diff_impacts_spec.rb +51 -75
  191. data/spec/hybrid_platforms_conductor_test/api/nodes_handler/nodes_selectors_spec.rb +35 -26
  192. data/spec/hybrid_platforms_conductor_test/api/nodes_handler/platform_handlers_plugins_api_spec.rb +24 -16
  193. data/spec/hybrid_platforms_conductor_test/api/nodes_handler/several_platforms_spec.rb +29 -19
  194. data/spec/hybrid_platforms_conductor_test/api/platform_handler_spec.rb +4 -4
  195. data/spec/hybrid_platforms_conductor_test/api/platform_handlers/serverless_chef/config_dsl_spec.rb +2 -2
  196. data/spec/hybrid_platforms_conductor_test/api/platform_handlers/serverless_chef/deploy_output_parsing_spec.rb +6 -6
  197. data/spec/hybrid_platforms_conductor_test/api/platform_handlers/serverless_chef/diff_impacts_spec.rb +57 -99
  198. data/spec/hybrid_platforms_conductor_test/api/platform_handlers/serverless_chef/inventory_spec.rb +4 -4
  199. data/spec/hybrid_platforms_conductor_test/api/platform_handlers/serverless_chef/packaging_spec.rb +32 -35
  200. data/spec/hybrid_platforms_conductor_test/api/platform_handlers/serverless_chef/services_deployment_spec.rb +10 -10
  201. data/spec/hybrid_platforms_conductor_test/api/platforms_handler_spec.rb +38 -27
  202. data/spec/hybrid_platforms_conductor_test/api/plugins_spec.rb +46 -52
  203. data/spec/hybrid_platforms_conductor_test/api/reports_handler_spec.rb +2 -2
  204. data/spec/hybrid_platforms_conductor_test/api/services_handler/actions_to_deploy_spec.rb +90 -58
  205. data/spec/hybrid_platforms_conductor_test/api/services_handler/deploy_allowed_spec.rb +38 -34
  206. data/spec/hybrid_platforms_conductor_test/api/services_handler/log_info_spec.rb +11 -9
  207. data/spec/hybrid_platforms_conductor_test/api/services_handler/package_spec.rb +193 -171
  208. data/spec/hybrid_platforms_conductor_test/api/services_handler/parse_deploy_output_spec.rb +66 -54
  209. data/spec/hybrid_platforms_conductor_test/api/services_handler/prepare_for_deploy_spec.rb +147 -133
  210. data/spec/hybrid_platforms_conductor_test/api/tests_runner/common_spec.rb +69 -49
  211. data/spec/hybrid_platforms_conductor_test/api/tests_runner/global_spec.rb +5 -4
  212. data/spec/hybrid_platforms_conductor_test/api/tests_runner/node_check_spec.rb +8 -5
  213. data/spec/hybrid_platforms_conductor_test/api/tests_runner/node_spec.rb +8 -5
  214. data/spec/hybrid_platforms_conductor_test/api/tests_runner/node_ssh_spec.rb +30 -27
  215. data/spec/hybrid_platforms_conductor_test/api/tests_runner/platform_spec.rb +12 -9
  216. data/spec/hybrid_platforms_conductor_test/api/tests_runner/reports_spec.rb +48 -47
  217. data/spec/hybrid_platforms_conductor_test/api/tests_runner/test_plugins/bitbucket_conf_spec.rb +5 -5
  218. data/spec/hybrid_platforms_conductor_test/api/tests_runner/test_plugins/github_ci_spec.rb +5 -5
  219. data/spec/hybrid_platforms_conductor_test/api/tests_runner/test_reports_plugins/confluence_spec.rb +5 -5
  220. data/spec/hybrid_platforms_conductor_test/cmdb_plugins/test_cmdb.rb +9 -9
  221. data/spec/hybrid_platforms_conductor_test/cmdb_plugins/{test_cmdb2.rb → test_cmdb_2.rb} +6 -6
  222. data/spec/hybrid_platforms_conductor_test/cmdb_plugins/test_cmdb_others.rb +3 -3
  223. data/spec/hybrid_platforms_conductor_test/cmdb_plugins/{test_cmdb_others2.rb → test_cmdb_others_2.rb} +2 -2
  224. data/spec/hybrid_platforms_conductor_test/docs_spec.rb +1 -1
  225. data/spec/hybrid_platforms_conductor_test/executables/{check-node_spec.rb → check_node_spec.rb} +4 -6
  226. data/spec/hybrid_platforms_conductor_test/executables/deploy_spec.rb +4 -6
  227. data/spec/hybrid_platforms_conductor_test/executables/get_impacted_nodes_spec.rb +76 -77
  228. data/spec/hybrid_platforms_conductor_test/executables/last_deploys_spec.rb +159 -113
  229. data/spec/hybrid_platforms_conductor_test/executables/nodes_to_deploy_spec.rb +299 -160
  230. data/spec/hybrid_platforms_conductor_test/executables/options/actions_executor_spec.rb +4 -6
  231. data/spec/hybrid_platforms_conductor_test/executables/options/cmd_runner_spec.rb +3 -5
  232. data/spec/hybrid_platforms_conductor_test/executables/options/common_spec.rb +8 -8
  233. data/spec/hybrid_platforms_conductor_test/executables/options/deployer_spec.rb +12 -196
  234. data/spec/hybrid_platforms_conductor_test/executables/options/nodes_handler_spec.rb +9 -10
  235. data/spec/hybrid_platforms_conductor_test/executables/options/nodes_selectors_spec.rb +9 -10
  236. data/spec/hybrid_platforms_conductor_test/executables/options/reports_handler_spec.rb +1 -1
  237. data/spec/hybrid_platforms_conductor_test/executables/options/tests_runner_spec.rb +22 -22
  238. data/spec/hybrid_platforms_conductor_test/executables/report_spec.rb +22 -16
  239. data/spec/hybrid_platforms_conductor_test/executables/run_spec.rb +32 -32
  240. data/spec/hybrid_platforms_conductor_test/executables/ssh_config_spec.rb +7 -9
  241. data/spec/hybrid_platforms_conductor_test/executables/test_spec.rb +3 -5
  242. data/spec/hybrid_platforms_conductor_test/helpers/actions_executor_helpers.rb +2 -2
  243. data/spec/hybrid_platforms_conductor_test/helpers/cmd_runner_helpers.rb +4 -3
  244. data/spec/hybrid_platforms_conductor_test/helpers/cmdb_helpers.rb +2 -2
  245. data/spec/hybrid_platforms_conductor_test/helpers/config_helpers.rb +1 -1
  246. data/spec/hybrid_platforms_conductor_test/helpers/connector_ssh_helpers.rb +12 -13
  247. data/spec/hybrid_platforms_conductor_test/helpers/deployer_helpers.rb +245 -56
  248. data/spec/hybrid_platforms_conductor_test/helpers/executables_helpers.rb +11 -11
  249. data/spec/hybrid_platforms_conductor_test/helpers/nodes_handler_helpers.rb +1 -1
  250. data/spec/hybrid_platforms_conductor_test/helpers/platforms_handler_helpers.rb +39 -28
  251. data/spec/hybrid_platforms_conductor_test/helpers/plugins_helpers.rb +1 -1
  252. data/spec/hybrid_platforms_conductor_test/helpers/provisioner_proxmox_helpers.rb +86 -111
  253. data/spec/hybrid_platforms_conductor_test/helpers/reports_handler_helpers.rb +1 -1
  254. data/spec/hybrid_platforms_conductor_test/helpers/serverless_chef_helpers.rb +3 -3
  255. data/spec/hybrid_platforms_conductor_test/helpers/services_handler_helpers.rb +1 -1
  256. data/spec/hybrid_platforms_conductor_test/helpers/tests_runner_helpers.rb +1 -1
  257. 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
  258. 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
  259. 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
  260. 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
  261. data/spec/hybrid_platforms_conductor_test/platform_handler_plugins/test.rb +1 -1
  262. data/spec/hybrid_platforms_conductor_test/platform_handler_plugins/{test2.rb → test_2.rb} +0 -0
  263. data/spec/hybrid_platforms_conductor_test/rubocop_spec.rb +31 -0
  264. data/spec/hybrid_platforms_conductor_test/serverless_chef_repositories/1_node/nodes/node.json +3 -3
  265. data/spec/hybrid_platforms_conductor_test/serverless_chef_repositories/data_bags/nodes/node.json +3 -3
  266. data/spec/hybrid_platforms_conductor_test/serverless_chef_repositories/recipes/cookbooks/test_cookbook_2/libraries/default.rb +1 -0
  267. data/spec/hybrid_platforms_conductor_test/serverless_chef_repositories/several_cookbooks/other_cookbooks/test_cookbook_2/libraries/default.rb +1 -0
  268. data/spec/hybrid_platforms_conductor_test/shared_examples/deployer.rb +952 -0
  269. data/spec/hybrid_platforms_conductor_test/test_connector.rb +3 -3
  270. data/spec/hybrid_platforms_conductor_test/test_log_no_read_plugin.rb +84 -0
  271. data/spec/hybrid_platforms_conductor_test/test_log_plugin.rb +105 -0
  272. data/spec/hybrid_platforms_conductor_test/test_plugins/global.rb +1 -0
  273. data/spec/hybrid_platforms_conductor_test/test_plugins/node.rb +1 -0
  274. data/spec/hybrid_platforms_conductor_test/test_plugins/node_check.rb +1 -0
  275. data/spec/hybrid_platforms_conductor_test/test_plugins/platform.rb +1 -0
  276. data/spec/hybrid_platforms_conductor_test/test_plugins/several_checks.rb +2 -2
  277. data/spec/hybrid_platforms_conductor_test/test_secrets_reader_plugin.rb +45 -0
  278. data/spec/hybrid_platforms_conductor_test/tests_report_plugin.rb +5 -6
  279. data/spec/spec_helper.rb +17 -18
  280. data/tools/check_md +16 -20
  281. data/tools/generate_mermaid +1 -1
  282. metadata +195 -144
  283. data/spec/hybrid_platforms_conductor_test/helpers/deployer_test_helpers.rb +0 -916
@@ -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,32 @@
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
+ {
20
+ 'node1' => {
21
+ test_action: {
22
+ code: proc do |stdout, stderr|
23
+ stdout << 'action_stdout'
24
+ stderr << 'action_stderr'
25
+ end
26
+ }
27
+ }
28
+ }
29
+ )
26
30
  ).to eq('node1' => [0, 'action_stdout', 'action_stderr'])
27
31
  end
28
32
  end
@@ -30,13 +34,19 @@ describe HybridPlatformsConductor::ActionsExecutor do
30
34
  it 'captures stdout and stderr from action correctly even when the action is failing' do
31
35
  with_test_platform_for_logging do
32
36
  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
- } })
37
+ test_actions_executor.execute_actions(
38
+ {
39
+ 'node1' => {
40
+ test_action: {
41
+ code: proc do |stdout, stderr|
42
+ stdout << "action_stdout\n"
43
+ stderr << "action_stderr\n"
44
+ raise 'Failing action'
45
+ end
46
+ }
47
+ }
48
+ }
49
+ )
40
50
  ).to eq('node1' => [:failed_action, "action_stdout\n", "action_stderr\nFailing action\n"])
41
51
  end
42
52
  end
@@ -65,7 +75,7 @@ describe HybridPlatformsConductor::ActionsExecutor do
65
75
  it 'captures stdout and stderr from action correctly when using run_cmd' do
66
76
  with_test_platform_for_logging do
67
77
  expect(
68
- test_actions_executor.execute_actions('node1' => { test_action: { run_cmd: 'echo action_stdout && >&2 echo action_stderr' } })
78
+ test_actions_executor.execute_actions({ 'node1' => { test_action: { run_cmd: 'echo action_stdout && >&2 echo action_stderr' } } })
69
79
  ).to eq('node1' => [0, "action_stdout\n", "action_stderr\n"])
70
80
  end
71
81
  end
@@ -73,35 +83,41 @@ describe HybridPlatformsConductor::ActionsExecutor do
73
83
  it 'captures stdout and stderr from action correctly when using run_cmd but with a failing command' do
74
84
  with_test_platform_for_logging do
75
85
  expect(
76
- 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
- ])
86
+ test_actions_executor.execute_actions({ 'node1' => { test_action: { run_cmd: 'echo action_stdout && >&2 echo action_stderr && exit 1' } } })
87
+ ).to eq(
88
+ 'node1' => [
89
+ :failed_command,
90
+ "action_stdout\n",
91
+ "action_stderr\nCommand 'echo action_stdout && >&2 echo action_stderr && exit 1' returned error code 1 (expected 0).\n"
92
+ ]
93
+ )
82
94
  end
83
95
  end
84
96
 
85
97
  it 'captures stdout and stderr sequentially from several actions' do
86
98
  with_test_platform_for_logging do
87
99
  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
- ])
100
+ test_actions_executor.execute_actions(
101
+ {
102
+ 'node1' => [
103
+ { test_action: {
104
+ code: proc do |stdout, stderr|
105
+ stdout << 'action1_stdout '
106
+ stderr << 'action1_stderr '
107
+ end
108
+ } },
109
+ { test_action: {
110
+ run_cmd: 'echo action2_stdout && >&2 echo action2_stderr'
111
+ } },
112
+ { test_action: {
113
+ code: proc do |stdout, stderr|
114
+ stdout << 'action3_stdout'
115
+ stderr << 'action3_stderr'
116
+ end
117
+ } }
118
+ ]
119
+ }
120
+ )
105
121
  ).to eq('node1' => [0, "action1_stdout action2_stdout\naction3_stdout", "action1_stderr action2_stderr\naction3_stderr"])
106
122
  end
107
123
  end
@@ -110,24 +126,26 @@ describe HybridPlatformsConductor::ActionsExecutor do
110
126
  with_test_platform_for_logging do
111
127
  expect(
112
128
  test_actions_executor.execute_actions(
113
- 'node1' => { test_action: {
114
- code: proc do |stdout, stderr|
115
- stdout << 'action1_stdout'
116
- stderr << 'action1_stderr'
117
- end
118
- } },
119
- 'node2' => { test_action: {
120
- code: proc do |stdout, stderr|
121
- stdout << 'action2_stdout'
122
- stderr << 'action2_stderr'
123
- end
124
- } },
125
- 'node3' => { test_action: {
126
- code: proc do |stdout, stderr|
127
- stdout << 'action3_stdout'
128
- stderr << 'action3_stderr'
129
- end
130
- } }
129
+ {
130
+ 'node1' => { test_action: {
131
+ code: proc do |stdout, stderr|
132
+ stdout << 'action1_stdout'
133
+ stderr << 'action1_stderr'
134
+ end
135
+ } },
136
+ 'node2' => { test_action: {
137
+ code: proc do |stdout, stderr|
138
+ stdout << 'action2_stdout'
139
+ stderr << 'action2_stderr'
140
+ end
141
+ } },
142
+ 'node3' => { test_action: {
143
+ code: proc do |stdout, stderr|
144
+ stdout << 'action3_stdout'
145
+ stderr << 'action3_stderr'
146
+ end
147
+ } }
148
+ }
131
149
  )
132
150
  ).to eq(
133
151
  'node1' => [0, 'action1_stdout', 'action1_stderr'],
@@ -141,40 +159,42 @@ describe HybridPlatformsConductor::ActionsExecutor do
141
159
  with_test_platform_for_logging do
142
160
  expect(
143
161
  test_actions_executor.execute_actions(
144
- 'node1' => { test_action: {
145
- code: proc do |stdout, stderr|
146
- stdout << 'action1_stdout '
147
- stderr << 'action1_stderr '
148
- end
149
- } },
150
- %w[node1 node2] => [
151
- { test_action: {
152
- code: proc do |stdout, stderr|
153
- stdout << 'action2_stdout '
154
- stderr << 'action2_stderr '
155
- end
156
- } },
157
- { test_action: {
158
- code: proc do |stdout, stderr|
159
- stdout << 'action3_stdout '
160
- stderr << 'action3_stderr '
161
- end
162
- } }
163
- ],
164
- %w[node2 node3] => [
165
- { test_action: {
162
+ {
163
+ 'node1' => { test_action: {
166
164
  code: proc do |stdout, stderr|
167
- stdout << 'action4_stdout '
168
- stderr << 'action4_stderr '
165
+ stdout << 'action1_stdout '
166
+ stderr << 'action1_stderr '
169
167
  end
170
168
  } },
171
- { test_action: {
172
- code: proc do |stdout, stderr|
173
- stdout << 'action5_stdout '
174
- stderr << 'action5_stderr '
175
- end
176
- } }
177
- ]
169
+ %w[node1 node2] => [
170
+ { test_action: {
171
+ code: proc do |stdout, stderr|
172
+ stdout << 'action2_stdout '
173
+ stderr << 'action2_stderr '
174
+ end
175
+ } },
176
+ { test_action: {
177
+ code: proc do |stdout, stderr|
178
+ stdout << 'action3_stdout '
179
+ stderr << 'action3_stderr '
180
+ end
181
+ } }
182
+ ],
183
+ %w[node2 node3] => [
184
+ { test_action: {
185
+ code: proc do |stdout, stderr|
186
+ stdout << 'action4_stdout '
187
+ stderr << 'action4_stderr '
188
+ end
189
+ } },
190
+ { test_action: {
191
+ code: proc do |stdout, stderr|
192
+ stdout << 'action5_stdout '
193
+ stderr << 'action5_stderr '
194
+ end
195
+ } }
196
+ ]
197
+ }
178
198
  )
179
199
  ).to eq(
180
200
  'node1' => [0, 'action1_stdout action2_stdout action3_stdout ', 'action1_stderr action2_stderr action3_stderr '],
@@ -187,56 +207,61 @@ describe HybridPlatformsConductor::ActionsExecutor do
187
207
  it 'executes several actions on several nodes and returns the corresponding stdout and stderr correctly in files' do
188
208
  with_repository('logs') do |logs_repository|
189
209
  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(
210
+ expect(
211
+ test_actions_executor.execute_actions(
212
+ {
213
+ 'node1' => [
214
+ { test_action: { code: proc do |stdout, stderr|
215
+ stdout << 'node1_action1_stdout '
216
+ stderr << 'node1_action1_stderr '
217
+ sleep 1
218
+ end } },
219
+ { test_action: { code: proc do |stdout, stderr|
220
+ stdout << 'node1_action2_stdout '
221
+ stderr << 'node1_action2_stderr '
222
+ sleep 1
223
+ end } },
224
+ { test_action: { code: proc do |stdout, stderr|
225
+ stdout << 'node1_action3_stdout'
226
+ stderr << 'node1_action3_stderr'
227
+ end } }
228
+ ],
229
+ 'node2' => [
230
+ { test_action: { code: proc do |stdout, stderr|
231
+ stdout << 'node2_action1_stdout '
232
+ stderr << 'node2_action1_stderr '
233
+ sleep 1
234
+ end } },
235
+ { test_action: { code: proc do |stdout, stderr|
236
+ stdout << 'node2_action2_stdout '
237
+ stderr << 'node2_action2_stderr '
238
+ sleep 1
239
+ end } },
240
+ { test_action: { code: proc do |stdout, stderr|
241
+ stdout << 'node2_action3_stdout'
242
+ stderr << 'node2_action3_stderr'
243
+ end } }
244
+ ],
245
+ 'node3' => [
246
+ { test_action: { code: proc do |stdout, stderr|
247
+ stdout << 'node3_action1_stdout '
248
+ stderr << 'node3_action1_stderr '
249
+ sleep 1
250
+ end } },
251
+ { test_action: { code: proc do |stdout, stderr|
252
+ stdout << 'node3_action2_stdout '
253
+ stderr << 'node3_action2_stderr '
254
+ sleep 1
255
+ end } },
256
+ { test_action: { code: proc do |stdout, stderr|
257
+ stdout << 'node3_action3_stdout'
258
+ stderr << 'node3_action3_stderr'
259
+ end } }
260
+ ]
261
+ },
262
+ log_to_dir: logs_repository
263
+ )
264
+ ).to eq(
240
265
  'node1' => [0, 'node1_action1_stdout node1_action2_stdout node1_action3_stdout', 'node1_action1_stderr node1_action2_stderr node1_action3_stderr'],
241
266
  'node2' => [0, 'node2_action1_stdout node2_action2_stdout node2_action3_stdout', 'node2_action1_stderr node2_action2_stderr node2_action3_stderr'],
242
267
  'node3' => [0, 'node3_action1_stdout node3_action2_stdout node3_action3_stdout', 'node3_action1_stderr node3_action2_stderr node3_action3_stderr']