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' do
5
+ context 'when checking additional helpers' do
6
6
 
7
7
  # Return the connector to be tested
8
8
  #
@@ -35,44 +35,47 @@ describe HybridPlatformsConductor::ActionsExecutor do
35
35
  begin_marker = node.nil? ? /^Host \*$/ : /^# #{Regexp.escape(node)} - .+$/
36
36
  start_idx = ssh_config_lines.index { |line| line =~ begin_marker }
37
37
  return nil if start_idx.nil?
38
+
38
39
  end_markers = [
39
40
  /^\# \w+ - .+$/,
40
41
  /^\#+$/
41
42
  ]
42
- end_idx = ssh_config_lines[start_idx + 1..-1].index { |line| end_markers.any? { |end_marker| line =~ end_marker } }
43
+ end_idx = ssh_config_lines[start_idx + 1..].index { |line| end_markers.any? { |end_marker| line =~ end_marker } }
43
44
  end_idx = end_idx.nil? ? -1 : start_idx + end_idx
44
- ssh_config_lines[start_idx..end_idx].select do |line|
45
- stripped_line = line.strip
46
- !stripped_line.empty? && stripped_line[0] != '#'
47
- end.join("\n") + "\n"
45
+ "#{
46
+ ssh_config_lines[start_idx..end_idx].select do |line|
47
+ stripped_line = line.strip
48
+ !stripped_line.empty? && stripped_line[0] != '#'
49
+ end.join("\n")
50
+ }\n"
48
51
  end
49
52
 
50
53
  it 'generates a global configuration with user from hpc_ssh_user environment variable' do
51
- with_test_platform do
54
+ with_test_platform({}) do
52
55
  ENV['hpc_ssh_user'] = 'test_user'
53
- expect(ssh_config_for(nil)).to eq <<~EOS
56
+ expect(ssh_config_for(nil)).to eq <<~EO_SSH_CONFIG
54
57
  Host *
55
58
  User test_user
56
59
  ControlPath #{Dir.tmpdir}/hpc_ssh/hpc_ssh_mux_%h_%p_%r
57
60
  PubkeyAcceptedKeyTypes +ssh-dss
58
- EOS
61
+ EO_SSH_CONFIG
59
62
  end
60
63
  end
61
64
 
62
65
  it 'generates a global configuration with user from USER environment variable' do
63
- with_test_platform do
66
+ with_test_platform({}) do
64
67
  ENV['USER'] = 'test_user'
65
- expect(ssh_config_for(nil)).to eq <<~EOS
68
+ expect(ssh_config_for(nil)).to eq <<~EO_SSH_CONFIG
66
69
  Host *
67
70
  User test_user
68
71
  ControlPath #{Dir.tmpdir}/hpc_ssh/hpc_ssh_mux_%h_%p_%r
69
72
  PubkeyAcceptedKeyTypes +ssh-dss
70
- EOS
73
+ EO_SSH_CONFIG
71
74
  end
72
75
  end
73
76
 
74
77
  it 'generates a global configuration with user taken from whoami when no env variable is set' do
75
- with_test_platform do
78
+ with_test_platform({}) do
76
79
  original_user = ENV['USER']
77
80
  begin
78
81
  ENV.delete 'USER'
@@ -83,12 +86,12 @@ describe HybridPlatformsConductor::ActionsExecutor do
83
86
  ['whoami', proc { [0, 'test_whoami_user', ''] }]
84
87
  ]
85
88
  ) do
86
- expect(ssh_config_for(nil)).to eq <<~EOS
89
+ expect(ssh_config_for(nil)).to eq <<~EO_SSH_CONFIG
87
90
  Host *
88
91
  User test_whoami_user
89
92
  ControlPath #{Dir.tmpdir}/hpc_ssh/hpc_ssh_mux_%h_%p_%r
90
93
  PubkeyAcceptedKeyTypes +ssh-dss
91
- EOS
94
+ EO_SSH_CONFIG
92
95
  end
93
96
  ensure
94
97
  ENV['USER'] = original_user
@@ -97,309 +100,325 @@ describe HybridPlatformsConductor::ActionsExecutor do
97
100
  end
98
101
 
99
102
  it 'generates a global configuration with user from setting' do
100
- with_test_platform do
103
+ with_test_platform({}) do
101
104
  test_connector.ssh_user = 'test_user'
102
- expect(ssh_config_for(nil)).to eq <<~EOS
105
+ expect(ssh_config_for(nil)).to eq <<~EO_SSH_CONFIG
103
106
  Host *
104
107
  User test_user
105
108
  ControlPath #{Dir.tmpdir}/hpc_ssh/hpc_ssh_mux_%h_%p_%r
106
109
  PubkeyAcceptedKeyTypes +ssh-dss
107
- EOS
110
+ EO_SSH_CONFIG
108
111
  end
109
112
  end
110
113
 
111
114
  it 'generates a global configuration with known hosts file' do
112
- with_test_platform do
115
+ with_test_platform({}) do
113
116
  test_connector.ssh_user = 'test_user'
114
- expect(ssh_config_for(nil, known_hosts_file: '/path/to/known_hosts')).to eq <<~EOS
117
+ expect(ssh_config_for(nil, known_hosts_file: '/path/to/known_hosts')).to eq <<~EO_SSH_CONFIG
115
118
  Host *
116
119
  User test_user
117
120
  ControlPath #{Dir.tmpdir}/hpc_ssh/hpc_ssh_mux_%h_%p_%r
118
121
  PubkeyAcceptedKeyTypes +ssh-dss
119
122
  UserKnownHostsFile /path/to/known_hosts
120
- EOS
123
+ EO_SSH_CONFIG
121
124
  end
122
125
  end
123
126
 
124
127
  it 'generates a global configuration without strict host key checking' do
125
- with_test_platform do
128
+ with_test_platform({}) do
126
129
  test_connector.ssh_user = 'test_user'
127
130
  test_connector.ssh_strict_host_key_checking = false
128
- expect(ssh_config_for(nil)).to eq <<~EOS
131
+ expect(ssh_config_for(nil)).to eq <<~EO_SSH_CONFIG
129
132
  Host *
130
133
  User test_user
131
134
  ControlPath #{Dir.tmpdir}/hpc_ssh/hpc_ssh_mux_%h_%p_%r
132
135
  PubkeyAcceptedKeyTypes +ssh-dss
133
136
  StrictHostKeyChecking no
134
- EOS
137
+ EO_SSH_CONFIG
135
138
  end
136
139
  end
137
140
 
138
141
  it 'includes the gateway definition from environment' do
139
- with_test_platform({}, false, 'gateway :gateway1, \'Host my_gateway\'') do
140
- ENV['hpc_ssh_gateways_conf'] = 'gateway1'
141
- expect(test_connector.ssh_config).to match /^Host my_gateway$/
142
+ with_test_platform({}, additional_config: 'gateway :gateway_1, \'Host my_gateway\'') do
143
+ ENV['hpc_ssh_gateways_conf'] = 'gateway_1'
144
+ expect(test_connector.ssh_config).to match(/^Host my_gateway$/)
142
145
  end
143
146
  end
144
147
 
145
148
  it 'includes the gateway definition from setting' do
146
- with_test_platform({}, false, 'gateway :gateway1, \'Host my_gateway\'') do
147
- test_connector.ssh_gateways_conf = :gateway1
148
- expect(test_connector.ssh_config).to match /^Host my_gateway$/
149
+ with_test_platform({}, additional_config: 'gateway :gateway_1, \'Host my_gateway\'') do
150
+ test_connector.ssh_gateways_conf = :gateway_1
151
+ expect(test_connector.ssh_config).to match(/^Host my_gateway$/)
149
152
  end
150
153
  end
151
154
 
152
155
  it 'includes the gateway definition with a different ssh executable' do
153
- with_test_platform({}, false, 'gateway :gateway1, \'Host my_gateway_<%= @ssh_exec %>\'') do
154
- test_connector.ssh_gateways_conf = :gateway1
155
- expect(test_connector.ssh_config(ssh_exec: 'new_ssh')).to match /^Host my_gateway_new_ssh$/
156
+ with_test_platform({}, additional_config: 'gateway :gateway_1, \'Host my_gateway_<%= @ssh_exec %>\'') do
157
+ test_connector.ssh_gateways_conf = :gateway_1
158
+ expect(test_connector.ssh_config(ssh_exec: 'new_ssh')).to match(/^Host my_gateway_new_ssh$/)
156
159
  end
157
160
  end
158
161
 
159
162
  it 'does not include the gateway definition if it is not selected' do
160
- with_test_platform({}, false, 'gateway :gateway2, \'Host my_gateway\'') do
161
- test_connector.ssh_gateways_conf = :gateway1
162
- expect(test_connector.ssh_config).not_to match /^Host my_gateway$/
163
+ with_test_platform({}, additional_config: 'gateway :gateway_2, \'Host my_gateway\'') do
164
+ test_connector.ssh_gateways_conf = :gateway_1
165
+ expect(test_connector.ssh_config).not_to match(/^Host my_gateway$/)
163
166
  end
164
167
  end
165
168
 
166
169
  it 'generates a simple config for a node with host_ip' do
167
- with_test_platform(nodes: { 'node' => { meta: { host_ip: '192.168.42.42' } } }) do
168
- expect(ssh_config_for('node')).to eq <<~EOS
170
+ with_test_platform({ nodes: { 'node' => { meta: { host_ip: '192.168.42.42' } } } }) do
171
+ expect(ssh_config_for('node')).to eq <<~EO_SSH_CONFIG
169
172
  Host hpc.node
170
173
  Hostname 192.168.42.42
171
- EOS
174
+ EO_SSH_CONFIG
172
175
  end
173
176
  end
174
177
 
175
178
  it 'generates a simple config for several nodes' do
176
- with_test_platform(nodes: {
177
- 'node1' => { meta: { host_ip: '192.168.42.1' } },
178
- 'node2' => { meta: { host_ip: '192.168.42.2' } },
179
- 'node3' => { meta: { host_ip: '192.168.42.3' } }
180
- }) do
181
- expect(ssh_config_for('node1')).to eq <<~EOS
179
+ with_test_platform(
180
+ {
181
+ nodes: {
182
+ 'node1' => { meta: { host_ip: '192.168.42.1' } },
183
+ 'node2' => { meta: { host_ip: '192.168.42.2' } },
184
+ 'node3' => { meta: { host_ip: '192.168.42.3' } }
185
+ }
186
+ }
187
+ ) do
188
+ expect(ssh_config_for('node1')).to eq <<~EO_SSH_CONFIG
182
189
  Host hpc.node1
183
190
  Hostname 192.168.42.1
184
- EOS
185
- expect(ssh_config_for('node2')).to eq <<~EOS
191
+ EO_SSH_CONFIG
192
+ expect(ssh_config_for('node2')).to eq <<~EO_SSH_CONFIG
186
193
  Host hpc.node2
187
194
  Hostname 192.168.42.2
188
- EOS
189
- expect(ssh_config_for('node3')).to eq <<~EOS
195
+ EO_SSH_CONFIG
196
+ expect(ssh_config_for('node3')).to eq <<~EO_SSH_CONFIG
190
197
  Host hpc.node3
191
198
  Hostname 192.168.42.3
192
- EOS
199
+ EO_SSH_CONFIG
193
200
  end
194
201
  end
195
202
 
196
203
  it 'generates a simple config for several nodes even when some of them can\'t be connected' do
197
- with_test_platform(nodes: {
198
- 'node1' => { meta: { host_ip: '192.168.42.1' } },
199
- 'node2' => { meta: {} },
200
- 'node3' => { meta: { host_ip: '192.168.42.3' } }
201
- }) do
202
- expect(ssh_config_for('node1')).to eq <<~EOS
204
+ with_test_platform(
205
+ {
206
+ nodes: {
207
+ 'node1' => { meta: { host_ip: '192.168.42.1' } },
208
+ 'node2' => { meta: {} },
209
+ 'node3' => { meta: { host_ip: '192.168.42.3' } }
210
+ }
211
+ }
212
+ ) do
213
+ expect(ssh_config_for('node1')).to eq <<~EO_SSH_CONFIG
203
214
  Host hpc.node1
204
215
  Hostname 192.168.42.1
205
- EOS
216
+ EO_SSH_CONFIG
206
217
  expect(ssh_config_for('node2')).to eq "\n"
207
- expect(ssh_config_for('node3')).to eq <<~EOS
218
+ expect(ssh_config_for('node3')).to eq <<~EO_SSH_CONFIG
208
219
  Host hpc.node3
209
220
  Hostname 192.168.42.3
210
- EOS
221
+ EO_SSH_CONFIG
211
222
  end
212
223
  end
213
224
 
214
225
  it 'selects nodes when generating the config' do
215
- with_test_platform(nodes: {
216
- 'node1' => { meta: { host_ip: '192.168.42.1' } },
217
- 'node2' => { meta: { host_ip: '192.168.42.2' } },
218
- 'node3' => { meta: { host_ip: '192.168.42.3' } }
219
- }) do
220
- expect(ssh_config_for('node1', nodes: %w[node1 node3])).to eq <<~EOS
226
+ with_test_platform(
227
+ {
228
+ nodes: {
229
+ 'node1' => { meta: { host_ip: '192.168.42.1' } },
230
+ 'node2' => { meta: { host_ip: '192.168.42.2' } },
231
+ 'node3' => { meta: { host_ip: '192.168.42.3' } }
232
+ }
233
+ }
234
+ ) do
235
+ expect(ssh_config_for('node1', nodes: %w[node1 node3])).to eq <<~EO_SSH_CONFIG
221
236
  Host hpc.node1
222
237
  Hostname 192.168.42.1
223
- EOS
238
+ EO_SSH_CONFIG
224
239
  expect(ssh_config_for('node2', nodes: %w[node1 node3])).to eq nil
225
240
  end
226
241
  end
227
242
 
228
243
  it 'generates an alias if the node has a hostname' do
229
- with_test_platform(nodes: { 'node' => { meta: { host_ip: '192.168.42.42', hostname: 'my_hostname.my_domain' } } }) do
230
- expect(ssh_config_for('node')).to eq <<~EOS
244
+ with_test_platform({ nodes: { 'node' => { meta: { host_ip: '192.168.42.42', hostname: 'my_hostname.my_domain' } } } }) do
245
+ expect(ssh_config_for('node')).to eq <<~EO_SSH_CONFIG
231
246
  Host hpc.node my_hostname.my_domain
232
247
  Hostname 192.168.42.42
233
- EOS
248
+ EO_SSH_CONFIG
234
249
  end
235
250
  end
236
251
 
237
252
  it 'generates aliases if the node has private ips' do
238
- with_test_platform(nodes: { 'node' => { meta: { host_ip: '192.168.42.42', private_ips: ['192.168.42.1', '192.168.42.2'] } } }) do
239
- expect(ssh_config_for('node')).to eq <<~EOS
253
+ with_test_platform({ nodes: { 'node' => { meta: { host_ip: '192.168.42.42', private_ips: ['192.168.42.1', '192.168.42.2'] } } } }) do
254
+ expect(ssh_config_for('node')).to eq <<~EO_SSH_CONFIG
240
255
  Host hpc.node hpc.192.168.42.1 hpc.192.168.42.2
241
256
  Hostname 192.168.42.42
242
- EOS
257
+ EO_SSH_CONFIG
243
258
  end
244
259
  end
245
260
 
246
261
  it 'generates a simple config for a node with hostname' do
247
- with_test_platform(nodes: { 'node' => { meta: { hostname: 'my_hostname.my_domain' } } }) do
248
- expect(ssh_config_for('node')).to eq <<~EOS
262
+ with_test_platform({ nodes: { 'node' => { meta: { hostname: 'my_hostname.my_domain' } } } }) do
263
+ expect(ssh_config_for('node')).to eq <<~EO_SSH_CONFIG
249
264
  Host hpc.node my_hostname.my_domain
250
265
  Hostname my_hostname.my_domain
251
- EOS
266
+ EO_SSH_CONFIG
252
267
  end
253
268
  end
254
269
 
255
270
  it 'generates a simple config for a node with private_ips' do
256
- with_test_platform(nodes: { 'node' => { meta: { private_ips: ['192.168.42.1', '192.168.42.2'] } } }) do
257
- expect(ssh_config_for('node')).to eq <<~EOS
271
+ with_test_platform({ nodes: { 'node' => { meta: { private_ips: ['192.168.42.1', '192.168.42.2'] } } } }) do
272
+ expect(ssh_config_for('node')).to eq <<~EO_SSH_CONFIG
258
273
  Host hpc.node hpc.192.168.42.1 hpc.192.168.42.2
259
274
  Hostname 192.168.42.1
260
- EOS
275
+ EO_SSH_CONFIG
261
276
  end
262
277
  end
263
278
 
264
279
  it 'uses node forced gateway information' do
265
- with_test_platform(nodes: { 'node' => { meta: { host_ip: '192.168.42.42', gateway: 'test_gateway', gateway_user: 'test_gateway_user' } } }) do
266
- expect(ssh_config_for('node')).to eq <<~EOS
280
+ with_test_platform({ nodes: { 'node' => { meta: { host_ip: '192.168.42.42', gateway: 'test_gateway', gateway_user: 'test_gateway_user' } } } }) do
281
+ expect(ssh_config_for('node')).to eq <<~EO_SSH_CONFIG
267
282
  Host hpc.node
268
283
  Hostname 192.168.42.42
269
284
  ProxyCommand ssh -q -W %h:%p test_gateway_user@test_gateway
270
- EOS
285
+ EO_SSH_CONFIG
271
286
  end
272
287
  end
273
288
 
274
289
  it 'uses node default gateway information and user from environment' do
275
- with_test_platform(nodes: { 'node' => { meta: { host_ip: '192.168.42.42', gateway: 'test_gateway' } } }) do
290
+ with_test_platform({ nodes: { 'node' => { meta: { host_ip: '192.168.42.42', gateway: 'test_gateway' } } } }) do
276
291
  ENV['hpc_ssh_gateway_user'] = 'test_gateway_user'
277
- expect(ssh_config_for('node')).to eq <<~EOS
292
+ expect(ssh_config_for('node')).to eq <<~EO_SSH_CONFIG
278
293
  Host hpc.node
279
294
  Hostname 192.168.42.42
280
295
  ProxyCommand ssh -q -W %h:%p test_gateway_user@test_gateway
281
- EOS
296
+ EO_SSH_CONFIG
282
297
  end
283
298
  end
284
299
 
285
300
  it 'uses node default gateway information and user from setting' do
286
- with_test_platform(nodes: { 'node' => { meta: { host_ip: '192.168.42.42', gateway: 'test_gateway' } } }) do
301
+ with_test_platform({ nodes: { 'node' => { meta: { host_ip: '192.168.42.42', gateway: 'test_gateway' } } } }) do
287
302
  test_connector.ssh_gateway_user = 'test_gateway_user'
288
- expect(ssh_config_for('node')).to eq <<~EOS
303
+ expect(ssh_config_for('node')).to eq <<~EO_SSH_CONFIG
289
304
  Host hpc.node
290
305
  Hostname 192.168.42.42
291
306
  ProxyCommand ssh -q -W %h:%p test_gateway_user@test_gateway
292
- EOS
307
+ EO_SSH_CONFIG
293
308
  end
294
309
  end
295
310
 
296
311
  it 'uses node forced gateway information with a different ssh executable' do
297
- with_test_platform(nodes: { 'node' => { meta: { host_ip: '192.168.42.42', gateway: 'test_gateway', gateway_user: 'test_gateway_user' } } }) do
298
- expect(ssh_config_for('node', ssh_exec: 'new_ssh')).to eq <<~EOS
312
+ with_test_platform({ nodes: { 'node' => { meta: { host_ip: '192.168.42.42', gateway: 'test_gateway', gateway_user: 'test_gateway_user' } } } }) do
313
+ expect(ssh_config_for('node', ssh_exec: 'new_ssh')).to eq <<~EO_SSH_CONFIG
299
314
  Host hpc.node
300
315
  Hostname 192.168.42.42
301
316
  ProxyCommand new_ssh -q -W %h:%p test_gateway_user@test_gateway
302
- EOS
317
+ EO_SSH_CONFIG
303
318
  end
304
319
  end
305
320
 
306
321
  it 'uses node default gateway information with a different ssh executable' do
307
- with_test_platform(nodes: { 'node' => { meta: { host_ip: '192.168.42.42', gateway: 'test_gateway' } } }) do
322
+ with_test_platform({ nodes: { 'node' => { meta: { host_ip: '192.168.42.42', gateway: 'test_gateway' } } } }) do
308
323
  test_connector.ssh_gateway_user = 'test_gateway_user'
309
- expect(ssh_config_for('node', ssh_exec: 'new_ssh')).to eq <<~EOS
324
+ expect(ssh_config_for('node', ssh_exec: 'new_ssh')).to eq <<~EO_SSH_CONFIG
310
325
  Host hpc.node
311
326
  Hostname 192.168.42.42
312
327
  ProxyCommand new_ssh -q -W %h:%p test_gateway_user@test_gateway
313
- EOS
328
+ EO_SSH_CONFIG
314
329
  end
315
330
  end
316
331
 
317
332
  it 'uses node transformed SSH connection' do
318
333
  with_test_platform(
319
334
  { nodes: {
320
- 'node1' => { meta: { host_ip: '192.168.42.1', gateway: 'test_gateway1', gateway_user: 'test_gateway1_user' } },
321
- 'node2' => { meta: { host_ip: '192.168.42.2', gateway: 'test_gateway2', gateway_user: 'test_gateway2_user' } },
335
+ 'node1' => { meta: { host_ip: '192.168.42.1', gateway: 'test_gateway_1', gateway_user: 'test_gateway_1_user' } },
336
+ 'node2' => { meta: { host_ip: '192.168.42.2', gateway: 'test_gateway_2', gateway_user: 'test_gateway_2_user' } },
322
337
  'node3' => { meta: { host_ip: '192.168.42.3', gateway: 'test_gateway3', gateway_user: 'test_gateway3_user' } }
323
338
  } },
324
- false,
325
- '
339
+ additional_config: <<~'EO_CONFIG'
326
340
  for_nodes(%w[node1 node3]) do
327
341
  transform_ssh_connection do |node, connection, connection_user, gateway, gateway_user|
328
342
  ["#{connection}_#{node}_13", "#{connection_user}_#{node}_13", "#{gateway}_#{node}_13", "#{gateway_user}_#{node}_13"]
329
343
  end
330
344
  end
331
- for_nodes(\'node1\') do
345
+ for_nodes('node1') do
332
346
  transform_ssh_connection do |node, connection, connection_user, gateway, gateway_user|
333
347
  ["#{connection}_#{node}_1", "#{connection_user}_#{node}_1", "#{gateway}_#{node}_1", "#{gateway_user}_#{node}_1"]
334
348
  end
335
349
  end
336
- ') do
350
+ EO_CONFIG
351
+ ) do
337
352
  test_connector.ssh_user = 'test_user'
338
- expect(ssh_config_for('node1')).to eq <<~EOS
353
+ expect(ssh_config_for('node1')).to eq <<~EO_SSH_CONFIG
339
354
  Host hpc.node1
340
355
  Hostname 192.168.42.1_node1_13_node1_1
341
356
  User "test_user_node1_13_node1_1"
342
- ProxyCommand ssh -q -W %h:%p test_gateway1_user_node1_13_node1_1@test_gateway1_node1_13_node1_1
343
- EOS
344
- expect(ssh_config_for('node2')).to eq <<~EOS
357
+ ProxyCommand ssh -q -W %h:%p test_gateway_1_user_node1_13_node1_1@test_gateway_1_node1_13_node1_1
358
+ EO_SSH_CONFIG
359
+ expect(ssh_config_for('node2')).to eq <<~EO_SSH_CONFIG
345
360
  Host hpc.node2
346
361
  Hostname 192.168.42.2
347
- ProxyCommand ssh -q -W %h:%p test_gateway2_user@test_gateway2
348
- EOS
349
- expect(ssh_config_for('node3')).to eq <<~EOS
362
+ ProxyCommand ssh -q -W %h:%p test_gateway_2_user@test_gateway_2
363
+ EO_SSH_CONFIG
364
+ expect(ssh_config_for('node3')).to eq <<~EO_SSH_CONFIG
350
365
  Host hpc.node3
351
366
  Hostname 192.168.42.3_node3_13
352
367
  User "test_user_node3_13"
353
368
  ProxyCommand ssh -q -W %h:%p test_gateway3_user_node3_13@test_gateway3_node3_13
354
- EOS
369
+ EO_SSH_CONFIG
355
370
  end
356
371
  end
357
372
 
358
373
  it 'generates a config compatible for passwords authentication' do
359
- with_test_platform(nodes: { 'node' => { meta: { host_ip: '192.168.42.42' } } }) do
374
+ with_test_platform({ nodes: { 'node' => { meta: { host_ip: '192.168.42.42' } } } }) do
360
375
  test_connector.passwords['node'] = 'PaSsWoRd'
361
- expect(ssh_config_for('node')).to eq <<~EOS
376
+ expect(ssh_config_for('node')).to eq <<~EO_SSH_CONFIG
362
377
  Host hpc.node
363
378
  Hostname 192.168.42.42
364
379
  PreferredAuthentications password
365
380
  PubkeyAuthentication no
366
- EOS
381
+ EO_SSH_CONFIG
367
382
  end
368
383
  end
369
384
 
370
385
  it 'generates a config compatible for passwords authentication only for marked nodes' do
371
- with_test_platform(nodes: {
372
- 'node1' => { meta: { host_ip: '192.168.42.1' } },
373
- 'node2' => { meta: { host_ip: '192.168.42.2' } },
374
- 'node3' => { meta: { host_ip: '192.168.42.3' } },
375
- 'node4' => { meta: { host_ip: '192.168.42.4' } }
376
- }) do
386
+ with_test_platform(
387
+ {
388
+ nodes: {
389
+ 'node1' => { meta: { host_ip: '192.168.42.1' } },
390
+ 'node2' => { meta: { host_ip: '192.168.42.2' } },
391
+ 'node3' => { meta: { host_ip: '192.168.42.3' } },
392
+ 'node4' => { meta: { host_ip: '192.168.42.4' } }
393
+ }
394
+ }
395
+ ) do
377
396
  test_connector.passwords['node1'] = 'PaSsWoRd1'
378
397
  test_connector.passwords['node3'] = 'PaSsWoRd3'
379
- expect(ssh_config_for('node1')).to eq <<~EOS
398
+ expect(ssh_config_for('node1')).to eq <<~EO_SSH_CONFIG
380
399
  Host hpc.node1
381
400
  Hostname 192.168.42.1
382
401
  PreferredAuthentications password
383
402
  PubkeyAuthentication no
384
- EOS
385
- expect(ssh_config_for('node2')).to eq <<~EOS
403
+ EO_SSH_CONFIG
404
+ expect(ssh_config_for('node2')).to eq <<~EO_SSH_CONFIG
386
405
  Host hpc.node2
387
406
  Hostname 192.168.42.2
388
- EOS
389
- expect(ssh_config_for('node3')).to eq <<~EOS
407
+ EO_SSH_CONFIG
408
+ expect(ssh_config_for('node3')).to eq <<~EO_SSH_CONFIG
390
409
  Host hpc.node3
391
410
  Hostname 192.168.42.3
392
411
  PreferredAuthentications password
393
412
  PubkeyAuthentication no
394
- EOS
395
- expect(ssh_config_for('node4')).to eq <<~EOS
413
+ EO_SSH_CONFIG
414
+ expect(ssh_config_for('node4')).to eq <<~EO_SSH_CONFIG
396
415
  Host hpc.node4
397
416
  Hostname 192.168.42.4
398
- EOS
417
+ EO_SSH_CONFIG
399
418
  end
400
419
  end
401
420
 
402
- end
421
+ end
403
422
 
404
423
  end
405
424