hybrid_platforms_conductor 32.18.0 → 33.0.4

Sign up to get free protection for your applications and to get access to all the features.
Files changed (255) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +36 -0
  3. data/README.md +3 -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 +8 -7
  8. data/bin/nodes_to_deploy +2 -2
  9. data/bin/setup +6 -6
  10. data/bin/topograph +1 -1
  11. data/docs/config_dsl.md +23 -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/plugins.md +21 -0
  19. data/docs/plugins/secrets_reader/cli.md +31 -0
  20. data/docs/plugins/secrets_reader/thycotic.md +46 -0
  21. data/lib/hybrid_platforms_conductor/action.rb +4 -4
  22. data/lib/hybrid_platforms_conductor/actions_executor.rb +37 -42
  23. data/lib/hybrid_platforms_conductor/bitbucket.rb +5 -4
  24. data/lib/hybrid_platforms_conductor/cmd_runner.rb +26 -23
  25. data/lib/hybrid_platforms_conductor/cmdb.rb +2 -2
  26. data/lib/hybrid_platforms_conductor/common_config_dsl/bitbucket.rb +2 -1
  27. data/lib/hybrid_platforms_conductor/common_config_dsl/confluence.rb +2 -1
  28. data/lib/hybrid_platforms_conductor/common_config_dsl/file_system_tests.rb +5 -4
  29. data/lib/hybrid_platforms_conductor/common_config_dsl/github.rb +4 -3
  30. data/lib/hybrid_platforms_conductor/common_config_dsl/idempotence_tests.rb +2 -2
  31. data/lib/hybrid_platforms_conductor/config.rb +8 -4
  32. data/lib/hybrid_platforms_conductor/confluence.rb +1 -1
  33. data/lib/hybrid_platforms_conductor/connector.rb +5 -2
  34. data/lib/hybrid_platforms_conductor/core_extensions/cleanroom/fix_kwargs.rb +116 -0
  35. data/lib/hybrid_platforms_conductor/core_extensions/symbol/zero.rb +24 -0
  36. data/lib/hybrid_platforms_conductor/credentials.rb +39 -36
  37. data/lib/hybrid_platforms_conductor/current_dir_monitor.rb +4 -1
  38. data/lib/hybrid_platforms_conductor/deployer.rb +185 -127
  39. data/lib/hybrid_platforms_conductor/executable.rb +20 -15
  40. data/lib/hybrid_platforms_conductor/hpc_plugins/cmdb/config.rb +10 -7
  41. data/lib/hybrid_platforms_conductor/hpc_plugins/cmdb/host_ip.rb +1 -1
  42. data/lib/hybrid_platforms_conductor/hpc_plugins/cmdb/host_keys.rb +2 -2
  43. data/lib/hybrid_platforms_conductor/hpc_plugins/cmdb/platform_handlers.rb +4 -4
  44. data/lib/hybrid_platforms_conductor/hpc_plugins/connector/local.rb +5 -1
  45. data/lib/hybrid_platforms_conductor/hpc_plugins/connector/ssh.rb +45 -49
  46. data/lib/hybrid_platforms_conductor/hpc_plugins/log/remote_fs.rb +6 -5
  47. data/lib/hybrid_platforms_conductor/hpc_plugins/platform_handler/serverless_chef.rb +77 -79
  48. data/lib/hybrid_platforms_conductor/hpc_plugins/platform_handler/serverless_chef/dsl_parser.rb +13 -0
  49. data/lib/hybrid_platforms_conductor/hpc_plugins/platform_handler/serverless_chef/recipes_tree_builder.rb +39 -38
  50. data/lib/hybrid_platforms_conductor/hpc_plugins/platform_handler/yaml_inventory.rb +5 -4
  51. data/lib/hybrid_platforms_conductor/hpc_plugins/provisioner/docker.rb +43 -45
  52. data/lib/hybrid_platforms_conductor/hpc_plugins/provisioner/podman.rb +18 -20
  53. data/lib/hybrid_platforms_conductor/hpc_plugins/provisioner/proxmox.rb +119 -118
  54. data/lib/hybrid_platforms_conductor/hpc_plugins/provisioner/proxmox/proxmox_waiter.rb +39 -43
  55. data/lib/hybrid_platforms_conductor/hpc_plugins/provisioner/proxmox/reserve_proxmox_container +9 -13
  56. data/lib/hybrid_platforms_conductor/hpc_plugins/report/confluence.rb +2 -2
  57. data/lib/hybrid_platforms_conductor/hpc_plugins/report/mediawiki.rb +28 -21
  58. data/lib/hybrid_platforms_conductor/hpc_plugins/report/stdout.rb +26 -22
  59. data/lib/hybrid_platforms_conductor/hpc_plugins/secrets_reader/cli.rb +77 -0
  60. data/lib/hybrid_platforms_conductor/hpc_plugins/secrets_reader/my_secrets_reader_plugin.rb.sample +46 -0
  61. data/lib/hybrid_platforms_conductor/hpc_plugins/secrets_reader/thycotic.rb +90 -0
  62. data/lib/hybrid_platforms_conductor/hpc_plugins/test/bitbucket_conf.rb +3 -3
  63. data/lib/hybrid_platforms_conductor/hpc_plugins/test/check_deploy_and_idempotence.rb +4 -2
  64. data/lib/hybrid_platforms_conductor/hpc_plugins/test/deploy_freshness.rb +0 -1
  65. data/lib/hybrid_platforms_conductor/hpc_plugins/test/deploy_removes_root_access.rb +21 -19
  66. data/lib/hybrid_platforms_conductor/hpc_plugins/test/divergence.rb +2 -2
  67. data/lib/hybrid_platforms_conductor/hpc_plugins/test/executables.rb +2 -2
  68. data/lib/hybrid_platforms_conductor/hpc_plugins/test/file_system.rb +19 -21
  69. data/lib/hybrid_platforms_conductor/hpc_plugins/test/file_system_hdfs.rb +19 -21
  70. data/lib/hybrid_platforms_conductor/hpc_plugins/test/github_ci.rb +2 -3
  71. data/lib/hybrid_platforms_conductor/hpc_plugins/test/idempotence.rb +2 -2
  72. data/lib/hybrid_platforms_conductor/hpc_plugins/test/ip.rb +1 -1
  73. data/lib/hybrid_platforms_conductor/hpc_plugins/test/jenkins_ci_conf.rb +21 -22
  74. data/lib/hybrid_platforms_conductor/hpc_plugins/test/jenkins_ci_masters_ok.rb +10 -12
  75. data/lib/hybrid_platforms_conductor/hpc_plugins/test/linear_strategy.rb +9 -9
  76. data/lib/hybrid_platforms_conductor/hpc_plugins/test/local_users.rb +2 -2
  77. data/lib/hybrid_platforms_conductor/hpc_plugins/test/mounts.rb +2 -2
  78. data/lib/hybrid_platforms_conductor/hpc_plugins/test/orphan_files.rb +10 -9
  79. data/lib/hybrid_platforms_conductor/hpc_plugins/test/ports.rb +2 -2
  80. data/lib/hybrid_platforms_conductor/hpc_plugins/test/private_ips.rb +5 -5
  81. data/lib/hybrid_platforms_conductor/hpc_plugins/test/public_ips.rb +5 -5
  82. data/lib/hybrid_platforms_conductor/hpc_plugins/test/spectre.rb +4 -6
  83. data/lib/hybrid_platforms_conductor/hpc_plugins/test/veids.rb +3 -3
  84. data/lib/hybrid_platforms_conductor/hpc_plugins/test/vulnerabilities.rb +25 -24
  85. data/lib/hybrid_platforms_conductor/hpc_plugins/test_report/confluence.rb +2 -2
  86. data/lib/hybrid_platforms_conductor/hpc_plugins/test_report/stdout.rb +8 -6
  87. data/lib/hybrid_platforms_conductor/io_router.rb +14 -13
  88. data/lib/hybrid_platforms_conductor/json_dumper.rb +2 -2
  89. data/lib/hybrid_platforms_conductor/log.rb +2 -2
  90. data/lib/hybrid_platforms_conductor/logger_helpers.rb +19 -16
  91. data/lib/hybrid_platforms_conductor/nodes_handler.rb +89 -71
  92. data/lib/hybrid_platforms_conductor/parallel_threads.rb +7 -11
  93. data/lib/hybrid_platforms_conductor/platform_handler.rb +7 -7
  94. data/lib/hybrid_platforms_conductor/platforms_handler.rb +5 -3
  95. data/lib/hybrid_platforms_conductor/plugin.rb +2 -2
  96. data/lib/hybrid_platforms_conductor/plugins.rb +14 -8
  97. data/lib/hybrid_platforms_conductor/provisioner.rb +4 -4
  98. data/lib/hybrid_platforms_conductor/report.rb +2 -2
  99. data/lib/hybrid_platforms_conductor/reports_handler.rb +3 -2
  100. data/lib/hybrid_platforms_conductor/secrets_reader.rb +31 -0
  101. data/lib/hybrid_platforms_conductor/services_handler.rb +32 -29
  102. data/lib/hybrid_platforms_conductor/test_only_remote_node.rb +1 -1
  103. data/lib/hybrid_platforms_conductor/test_report.rb +15 -18
  104. data/lib/hybrid_platforms_conductor/tests_runner.rb +116 -118
  105. data/lib/hybrid_platforms_conductor/thycotic.rb +28 -19
  106. data/lib/hybrid_platforms_conductor/topographer.rb +200 -190
  107. data/lib/hybrid_platforms_conductor/topographer/plugins/graphviz.rb +8 -8
  108. data/lib/hybrid_platforms_conductor/topographer/plugins/json.rb +4 -4
  109. data/lib/hybrid_platforms_conductor/version.rb +1 -1
  110. data/spec/hybrid_platforms_conductor_test.rb +29 -6
  111. data/spec/hybrid_platforms_conductor_test/api/actions_executor/actions/bash_spec.rb +18 -11
  112. data/spec/hybrid_platforms_conductor_test/api/actions_executor/actions/interactive_spec.rb +2 -2
  113. data/spec/hybrid_platforms_conductor_test/api/actions_executor/actions/remote_bash_spec.rb +32 -21
  114. data/spec/hybrid_platforms_conductor_test/api/actions_executor/actions/ruby_spec.rb +75 -49
  115. data/spec/hybrid_platforms_conductor_test/api/actions_executor/actions/scp_spec.rb +27 -15
  116. data/spec/hybrid_platforms_conductor_test/api/actions_executor/actions_spec.rb +90 -59
  117. data/spec/hybrid_platforms_conductor_test/api/actions_executor/connection_spec.rb +46 -44
  118. data/spec/hybrid_platforms_conductor_test/api/actions_executor/connectors/local/connectable_nodes_spec.rb +12 -8
  119. data/spec/hybrid_platforms_conductor_test/api/actions_executor/connectors/local/remote_actions_spec.rb +4 -7
  120. data/spec/hybrid_platforms_conductor_test/api/actions_executor/connectors/ssh/cli_options_spec.rb +21 -22
  121. data/spec/hybrid_platforms_conductor_test/api/actions_executor/connectors/ssh/config_dsl_spec.rb +23 -24
  122. data/spec/hybrid_platforms_conductor_test/api/actions_executor/connectors/ssh/connectable_nodes_spec.rb +10 -6
  123. data/spec/hybrid_platforms_conductor_test/api/actions_executor/connectors/ssh/connections_spec.rb +106 -75
  124. data/spec/hybrid_platforms_conductor_test/api/actions_executor/connectors/ssh/global_helpers_spec.rb +145 -126
  125. data/spec/hybrid_platforms_conductor_test/api/actions_executor/connectors/ssh/node_helpers_spec.rb +3 -3
  126. data/spec/hybrid_platforms_conductor_test/api/actions_executor/connectors/ssh/remote_actions_spec.rb +29 -25
  127. data/spec/hybrid_platforms_conductor_test/api/actions_executor/logging_spec.rb +167 -142
  128. data/spec/hybrid_platforms_conductor_test/api/actions_executor/parallel_spec.rb +272 -244
  129. data/spec/hybrid_platforms_conductor_test/api/actions_executor/timeout_spec.rb +16 -16
  130. data/spec/hybrid_platforms_conductor_test/api/cmd_runner_spec.rb +42 -36
  131. data/spec/hybrid_platforms_conductor_test/api/config_spec.rb +24 -22
  132. data/spec/hybrid_platforms_conductor_test/api/deployer/check_spec.rb +4 -2
  133. data/spec/hybrid_platforms_conductor_test/api/deployer/config_dsl_spec.rb +24 -6
  134. data/spec/hybrid_platforms_conductor_test/api/deployer/deploy_spec.rb +34 -26
  135. data/spec/hybrid_platforms_conductor_test/api/deployer/log_plugins/remote_fs_spec.rb +21 -21
  136. data/spec/hybrid_platforms_conductor_test/api/deployer/parse_deploy_output_spec.rb +55 -59
  137. data/spec/hybrid_platforms_conductor_test/api/deployer/provisioner_spec.rb +36 -62
  138. data/spec/hybrid_platforms_conductor_test/api/deployer/provisioners/podman_spec.rb +17 -17
  139. data/spec/hybrid_platforms_conductor_test/api/deployer/provisioners/proxmox/config_dsl_spec.rb +4 -4
  140. data/spec/hybrid_platforms_conductor_test/api/deployer/provisioners/proxmox/create_spec.rb +44 -51
  141. data/spec/hybrid_platforms_conductor_test/api/deployer/provisioners/proxmox/destroy_spec.rb +3 -3
  142. data/spec/hybrid_platforms_conductor_test/api/deployer/provisioners/proxmox/ip_spec.rb +12 -16
  143. data/spec/hybrid_platforms_conductor_test/api/deployer/provisioners/proxmox/reserve_proxmox_container/destroy_vm_spec.rb +31 -19
  144. data/spec/hybrid_platforms_conductor_test/api/deployer/provisioners/proxmox/reserve_proxmox_container/expired_containers_spec.rb +324 -266
  145. data/spec/hybrid_platforms_conductor_test/api/deployer/provisioners/proxmox/reserve_proxmox_container/ips_assignment_spec.rb +89 -61
  146. data/spec/hybrid_platforms_conductor_test/api/deployer/provisioners/proxmox/reserve_proxmox_container/other_lxc_containers_resources_spec.rb +117 -93
  147. data/spec/hybrid_platforms_conductor_test/api/deployer/provisioners/proxmox/reserve_proxmox_container/pve_node_resources_spec.rb +71 -54
  148. data/spec/hybrid_platforms_conductor_test/api/deployer/provisioners/proxmox/reserve_proxmox_container/retries_spec.rb +10 -8
  149. data/spec/hybrid_platforms_conductor_test/api/deployer/provisioners/proxmox/reserve_proxmox_container/vm_ids_assignment_spec.rb +80 -60
  150. data/spec/hybrid_platforms_conductor_test/api/deployer/provisioners/proxmox/start_spec.rb +1 -1
  151. data/spec/hybrid_platforms_conductor_test/api/deployer/provisioners/proxmox/state_spec.rb +1 -1
  152. data/spec/hybrid_platforms_conductor_test/api/deployer/provisioners/proxmox/stop_spec.rb +1 -1
  153. data/spec/hybrid_platforms_conductor_test/api/deployer/secrets_reader_plugins/cli_spec.rb +64 -0
  154. data/spec/hybrid_platforms_conductor_test/api/deployer/secrets_reader_plugins/thycotic_spec.rb +268 -0
  155. data/spec/hybrid_platforms_conductor_test/api/nodes_handler/cmdbs/config_spec.rb +8 -10
  156. data/spec/hybrid_platforms_conductor_test/api/nodes_handler/cmdbs/host_ip_spec.rb +33 -24
  157. data/spec/hybrid_platforms_conductor_test/api/nodes_handler/cmdbs/host_keys_spec.rb +64 -51
  158. data/spec/hybrid_platforms_conductor_test/api/nodes_handler/cmdbs/platform_handlers_spec.rb +3 -3
  159. data/spec/hybrid_platforms_conductor_test/api/nodes_handler/cmdbs_plugins_api_spec.rb +50 -51
  160. data/spec/hybrid_platforms_conductor_test/api/nodes_handler/common_spec.rb +91 -81
  161. data/spec/hybrid_platforms_conductor_test/api/nodes_handler/config_dsl_spec.rb +14 -16
  162. data/spec/hybrid_platforms_conductor_test/api/nodes_handler/git_diff_impacts_spec.rb +51 -75
  163. data/spec/hybrid_platforms_conductor_test/api/nodes_handler/nodes_selectors_spec.rb +35 -26
  164. data/spec/hybrid_platforms_conductor_test/api/nodes_handler/platform_handlers_plugins_api_spec.rb +24 -16
  165. data/spec/hybrid_platforms_conductor_test/api/nodes_handler/several_platforms_spec.rb +29 -19
  166. data/spec/hybrid_platforms_conductor_test/api/platform_handler_spec.rb +4 -4
  167. data/spec/hybrid_platforms_conductor_test/api/platform_handlers/serverless_chef/config_dsl_spec.rb +2 -2
  168. data/spec/hybrid_platforms_conductor_test/api/platform_handlers/serverless_chef/deploy_output_parsing_spec.rb +6 -6
  169. data/spec/hybrid_platforms_conductor_test/api/platform_handlers/serverless_chef/diff_impacts_spec.rb +57 -99
  170. data/spec/hybrid_platforms_conductor_test/api/platform_handlers/serverless_chef/inventory_spec.rb +4 -4
  171. data/spec/hybrid_platforms_conductor_test/api/platform_handlers/serverless_chef/packaging_spec.rb +32 -35
  172. data/spec/hybrid_platforms_conductor_test/api/platform_handlers/serverless_chef/services_deployment_spec.rb +10 -10
  173. data/spec/hybrid_platforms_conductor_test/api/platforms_handler_spec.rb +38 -27
  174. data/spec/hybrid_platforms_conductor_test/api/plugins_spec.rb +46 -52
  175. data/spec/hybrid_platforms_conductor_test/api/reports_handler_spec.rb +2 -2
  176. data/spec/hybrid_platforms_conductor_test/api/services_handler/actions_to_deploy_spec.rb +90 -58
  177. data/spec/hybrid_platforms_conductor_test/api/services_handler/deploy_allowed_spec.rb +38 -34
  178. data/spec/hybrid_platforms_conductor_test/api/services_handler/log_info_spec.rb +11 -9
  179. data/spec/hybrid_platforms_conductor_test/api/services_handler/package_spec.rb +193 -171
  180. data/spec/hybrid_platforms_conductor_test/api/services_handler/parse_deploy_output_spec.rb +66 -54
  181. data/spec/hybrid_platforms_conductor_test/api/services_handler/prepare_for_deploy_spec.rb +147 -133
  182. data/spec/hybrid_platforms_conductor_test/api/tests_runner/common_spec.rb +69 -49
  183. data/spec/hybrid_platforms_conductor_test/api/tests_runner/global_spec.rb +4 -3
  184. data/spec/hybrid_platforms_conductor_test/api/tests_runner/node_check_spec.rb +8 -5
  185. data/spec/hybrid_platforms_conductor_test/api/tests_runner/node_spec.rb +8 -5
  186. data/spec/hybrid_platforms_conductor_test/api/tests_runner/node_ssh_spec.rb +30 -27
  187. data/spec/hybrid_platforms_conductor_test/api/tests_runner/platform_spec.rb +12 -9
  188. data/spec/hybrid_platforms_conductor_test/api/tests_runner/reports_spec.rb +48 -47
  189. data/spec/hybrid_platforms_conductor_test/api/tests_runner/test_plugins/bitbucket_conf_spec.rb +5 -5
  190. data/spec/hybrid_platforms_conductor_test/api/tests_runner/test_plugins/github_ci_spec.rb +5 -5
  191. data/spec/hybrid_platforms_conductor_test/api/tests_runner/test_reports_plugins/confluence_spec.rb +5 -5
  192. data/spec/hybrid_platforms_conductor_test/cmdb_plugins/test_cmdb.rb +9 -9
  193. data/spec/hybrid_platforms_conductor_test/cmdb_plugins/{test_cmdb2.rb → test_cmdb_2.rb} +6 -6
  194. data/spec/hybrid_platforms_conductor_test/cmdb_plugins/test_cmdb_others.rb +3 -3
  195. data/spec/hybrid_platforms_conductor_test/cmdb_plugins/{test_cmdb_others2.rb → test_cmdb_others_2.rb} +2 -2
  196. data/spec/hybrid_platforms_conductor_test/docs_spec.rb +1 -1
  197. data/spec/hybrid_platforms_conductor_test/executables/{check-node_spec.rb → check_node_spec.rb} +4 -6
  198. data/spec/hybrid_platforms_conductor_test/executables/deploy_spec.rb +4 -6
  199. data/spec/hybrid_platforms_conductor_test/executables/get_impacted_nodes_spec.rb +76 -77
  200. data/spec/hybrid_platforms_conductor_test/executables/last_deploys_spec.rb +13 -15
  201. data/spec/hybrid_platforms_conductor_test/executables/nodes_to_deploy_spec.rb +289 -307
  202. data/spec/hybrid_platforms_conductor_test/executables/options/actions_executor_spec.rb +4 -6
  203. data/spec/hybrid_platforms_conductor_test/executables/options/cmd_runner_spec.rb +3 -5
  204. data/spec/hybrid_platforms_conductor_test/executables/options/common_spec.rb +8 -9
  205. data/spec/hybrid_platforms_conductor_test/executables/options/deployer_spec.rb +12 -196
  206. data/spec/hybrid_platforms_conductor_test/executables/options/nodes_handler_spec.rb +9 -10
  207. data/spec/hybrid_platforms_conductor_test/executables/options/nodes_selectors_spec.rb +9 -10
  208. data/spec/hybrid_platforms_conductor_test/executables/options/reports_handler_spec.rb +1 -1
  209. data/spec/hybrid_platforms_conductor_test/executables/options/tests_runner_spec.rb +22 -22
  210. data/spec/hybrid_platforms_conductor_test/executables/report_spec.rb +22 -16
  211. data/spec/hybrid_platforms_conductor_test/executables/run_spec.rb +32 -32
  212. data/spec/hybrid_platforms_conductor_test/executables/ssh_config_spec.rb +7 -9
  213. data/spec/hybrid_platforms_conductor_test/executables/test_spec.rb +3 -5
  214. data/spec/hybrid_platforms_conductor_test/helpers/actions_executor_helpers.rb +2 -2
  215. data/spec/hybrid_platforms_conductor_test/helpers/cmd_runner_helpers.rb +4 -3
  216. data/spec/hybrid_platforms_conductor_test/helpers/cmdb_helpers.rb +2 -2
  217. data/spec/hybrid_platforms_conductor_test/helpers/config_helpers.rb +1 -1
  218. data/spec/hybrid_platforms_conductor_test/helpers/connector_ssh_helpers.rb +12 -13
  219. data/spec/hybrid_platforms_conductor_test/helpers/deployer_helpers.rb +216 -14
  220. data/spec/hybrid_platforms_conductor_test/helpers/executables_helpers.rb +11 -11
  221. data/spec/hybrid_platforms_conductor_test/helpers/nodes_handler_helpers.rb +1 -1
  222. data/spec/hybrid_platforms_conductor_test/helpers/platforms_handler_helpers.rb +39 -28
  223. data/spec/hybrid_platforms_conductor_test/helpers/plugins_helpers.rb +1 -1
  224. data/spec/hybrid_platforms_conductor_test/helpers/provisioner_proxmox_helpers.rb +86 -111
  225. data/spec/hybrid_platforms_conductor_test/helpers/reports_handler_helpers.rb +1 -1
  226. data/spec/hybrid_platforms_conductor_test/helpers/serverless_chef_helpers.rb +3 -3
  227. data/spec/hybrid_platforms_conductor_test/helpers/services_handler_helpers.rb +1 -1
  228. data/spec/hybrid_platforms_conductor_test/helpers/tests_runner_helpers.rb +1 -1
  229. 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
  230. 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
  231. 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
  232. 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
  233. data/spec/hybrid_platforms_conductor_test/platform_handler_plugins/test.rb +1 -1
  234. data/spec/hybrid_platforms_conductor_test/platform_handler_plugins/{test2.rb → test_2.rb} +0 -0
  235. data/spec/hybrid_platforms_conductor_test/rubocop_spec.rb +31 -0
  236. data/spec/hybrid_platforms_conductor_test/serverless_chef_repositories/1_node/nodes/node.json +3 -3
  237. data/spec/hybrid_platforms_conductor_test/serverless_chef_repositories/data_bags/nodes/node.json +3 -3
  238. data/spec/hybrid_platforms_conductor_test/serverless_chef_repositories/recipes/cookbooks/test_cookbook_2/libraries/default.rb +1 -0
  239. data/spec/hybrid_platforms_conductor_test/serverless_chef_repositories/several_cookbooks/other_cookbooks/test_cookbook_2/libraries/default.rb +1 -0
  240. data/spec/hybrid_platforms_conductor_test/shared_examples/deployer.rb +952 -0
  241. data/spec/hybrid_platforms_conductor_test/test_connector.rb +4 -3
  242. data/spec/hybrid_platforms_conductor_test/test_log_no_read_plugin.rb +3 -1
  243. data/spec/hybrid_platforms_conductor_test/test_log_plugin.rb +3 -1
  244. data/spec/hybrid_platforms_conductor_test/test_plugins/global.rb +1 -0
  245. data/spec/hybrid_platforms_conductor_test/test_plugins/node.rb +1 -0
  246. data/spec/hybrid_platforms_conductor_test/test_plugins/node_check.rb +1 -0
  247. data/spec/hybrid_platforms_conductor_test/test_plugins/platform.rb +1 -0
  248. data/spec/hybrid_platforms_conductor_test/test_plugins/several_checks.rb +2 -2
  249. data/spec/hybrid_platforms_conductor_test/test_secrets_reader_plugin.rb +45 -0
  250. data/spec/hybrid_platforms_conductor_test/tests_report_plugin.rb +5 -6
  251. data/spec/spec_helper.rb +17 -18
  252. data/tools/check_md +16 -20
  253. data/tools/generate_mermaid +1 -1
  254. metadata +186 -144
  255. data/spec/hybrid_platforms_conductor_test/helpers/deployer_test_helpers.rb +0 -916
@@ -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']