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
@@ -5,7 +5,7 @@ describe HybridPlatformsConductor::ReportsHandler do
5
5
  # Parameters::
6
6
  # * Proc: Code called when platform is setup
7
7
  def with_test_platform_for_reports_test
8
- with_test_platform(nodes: { 'node1' => {}, 'node2' => {}, 'node3' => {} }) do
8
+ with_test_platform({ nodes: { 'node1' => {}, 'node2' => {}, 'node3' => {} } }) do
9
9
  register_report_plugins(test_reports_handler, report: HybridPlatformsConductorTest::ReportPlugin)
10
10
  test_reports_handler.format = :report
11
11
  yield
@@ -37,7 +37,7 @@ describe HybridPlatformsConductor::ReportsHandler do
37
37
  it 'fails when delivering a simple report with an unknown locale' do
38
38
  with_test_platform_for_reports_test do
39
39
  test_reports_handler.locale = :de
40
- expect { test_reports_handler.produce_report_for([{ all: true }])}.to raise_error(RuntimeError, 'Unknown locale for format report: de')
40
+ expect { test_reports_handler.produce_report_for([{ all: true }]) }.to raise_error(RuntimeError, 'Unknown locale for format report: de')
41
41
  end
42
42
  end
43
43
 
@@ -1,6 +1,6 @@
1
1
  describe HybridPlatformsConductor::ServicesHandler do
2
2
 
3
- context 'checking actions to deploy services on a node' do
3
+ context 'when checking actions to deploy services on a node' do
4
4
 
5
5
  # Expect actions for a deployment to match a given list
6
6
  #
@@ -14,103 +14,135 @@ describe HybridPlatformsConductor::ServicesHandler do
14
14
  # * *platform* (String): Platform that should be used to deploy this service [default: 'platform']
15
15
  # * *check* (Boolean): Should the action be deployed in check mode? [default: false]
16
16
  def expect_deploy_actions(node, services, check, expected_deploys)
17
- actions = test_services_handler.actions_to_deploy_on(node, services, check)
18
- expect(actions.size).to eq expected_deploys.size * 3
19
- actions.each_slice(3).zip(expected_deploys) do |((marker_begin, action, marker_end), expected_deploy)|
20
- # Check that we log the begin marker before deploying the service
21
- expect(marker_begin.keys).to eq [:ruby]
22
- stdout_begin = StringIO.new
23
- stderr_begin = StringIO.new
24
- marker_begin[:ruby].call(stdout_begin, stderr_begin)
25
- expect(stdout_begin.string.strip).to eq "===== [ #{expected_deploy[:node]} / #{expected_deploy[:service]} ] - HPC Service #{expected_deploy[:check] ? 'Check' : 'Deploy' } ===== Begin"
26
- expect(stderr_begin.string.strip).to eq "===== [ #{expected_deploy[:node]} / #{expected_deploy[:service]} ] - HPC Service #{expected_deploy[:check] ? 'Check' : 'Deploy' } ===== Begin"
27
- # Check that the service is deployed according to our mocked PlatformHandler
28
- expect(action).to eq(bash: "echo \"#{expected_deploy[:check] ? 'Checking' : 'Deploying'} #{expected_deploy[:service]} (#{expected_deploy[:platform] || 'platform'}) on #{expected_deploy[:node]}\"")
29
- # Check that we log the end marker after deploying the service
30
- stdout_end = StringIO.new
31
- stderr_end = StringIO.new
32
- marker_end[:ruby].call(stdout_end, stderr_end)
33
- expect(stdout_end.string.strip).to eq "===== [ #{expected_deploy[:node]} / #{expected_deploy[:service]} ] - HPC Service #{expected_deploy[:check] ? 'Check' : 'Deploy' } ===== End"
34
- expect(stderr_end.string.strip).to eq "===== [ #{expected_deploy[:node]} / #{expected_deploy[:service]} ] - HPC Service #{expected_deploy[:check] ? 'Check' : 'Deploy' } ===== End"
35
- end
17
+ actions = test_services_handler.actions_to_deploy_on(node, services, check)
18
+ expect(actions.size).to eq expected_deploys.size * 3
19
+ actions.each_slice(3).zip(expected_deploys) do |((marker_begin, action, marker_end), expected_deploy)|
20
+ # Check that we log the begin marker before deploying the service
21
+ expect(marker_begin.keys).to eq [:ruby]
22
+ stdout_begin = StringIO.new
23
+ stderr_begin = StringIO.new
24
+ marker_begin[:ruby].call(stdout_begin, stderr_begin)
25
+ expect(stdout_begin.string.strip).to eq "===== [ #{expected_deploy[:node]} / #{expected_deploy[:service]} ] - HPC Service #{expected_deploy[:check] ? 'Check' : 'Deploy'} ===== Begin"
26
+ expect(stderr_begin.string.strip).to eq "===== [ #{expected_deploy[:node]} / #{expected_deploy[:service]} ] - HPC Service #{expected_deploy[:check] ? 'Check' : 'Deploy'} ===== Begin"
27
+ # Check that the service is deployed according to our mocked PlatformHandler
28
+ expect(action).to eq(bash: "echo \"#{expected_deploy[:check] ? 'Checking' : 'Deploying'} #{expected_deploy[:service]} (#{expected_deploy[:platform] || 'platform'}) on #{expected_deploy[:node]}\"")
29
+ # Check that we log the end marker after deploying the service
30
+ stdout_end = StringIO.new
31
+ stderr_end = StringIO.new
32
+ marker_end[:ruby].call(stdout_end, stderr_end)
33
+ expect(stdout_end.string.strip).to eq "===== [ #{expected_deploy[:node]} / #{expected_deploy[:service]} ] - HPC Service #{expected_deploy[:check] ? 'Check' : 'Deploy'} ===== End"
34
+ expect(stderr_end.string.strip).to eq "===== [ #{expected_deploy[:node]} / #{expected_deploy[:service]} ] - HPC Service #{expected_deploy[:check] ? 'Check' : 'Deploy'} ===== End"
35
+ end
36
36
  end
37
37
 
38
38
  it 'deploys a service' do
39
39
  with_test_platform(
40
- nodes: { 'node' => { services: %w[service1] } },
41
- deployable_services: %w[service1]
40
+ {
41
+ nodes: { 'node' => { services: %w[service1] } },
42
+ deployable_services: %w[service1]
43
+ }
42
44
  ) do
43
- expect_deploy_actions('node', %w[service1], false, [
44
- { node: 'node', service: 'service1' }
45
- ])
45
+ expect_deploy_actions(
46
+ 'node', %w[service1], false,
47
+ [
48
+ { node: 'node', service: 'service1' }
49
+ ]
50
+ )
46
51
  end
47
52
  end
48
53
 
49
54
  it 'deploys a service in why-run mode' do
50
55
  with_test_platform(
51
- nodes: { 'node' => { services: %w[service1] } },
52
- deployable_services: %w[service1]
56
+ {
57
+ nodes: { 'node' => { services: %w[service1] } },
58
+ deployable_services: %w[service1]
59
+ }
53
60
  ) do
54
- expect_deploy_actions('node', %w[service1], true, [
55
- { node: 'node', service: 'service1', check: true }
56
- ])
61
+ expect_deploy_actions(
62
+ 'node', %w[service1], true,
63
+ [
64
+ { node: 'node', service: 'service1', check: true }
65
+ ]
66
+ )
57
67
  end
58
68
  end
59
69
 
60
70
  it 'deploys several services' do
61
71
  with_test_platform(
62
- nodes: { 'node' => { services: %w[service1 service2] } },
63
- deployable_services: %w[service1 service2]
72
+ {
73
+ nodes: { 'node' => { services: %w[service1 service2] } },
74
+ deployable_services: %w[service1 service2]
75
+ }
64
76
  ) do
65
- expect_deploy_actions('node', %w[service1 service2], false, [
66
- { node: 'node', service: 'service1' },
67
- { node: 'node', service: 'service2' }
68
- ])
77
+ expect_deploy_actions(
78
+ 'node', %w[service1 service2], false,
79
+ [
80
+ { node: 'node', service: 'service1' },
81
+ { node: 'node', service: 'service2' }
82
+ ]
83
+ )
69
84
  end
70
85
  end
71
86
 
72
87
  it 'deploys several services from different platforms' do
73
88
  with_test_platforms(
74
- 'platform1' => { nodes: { 'node' => { services: %w[service1 service2] } }, deployable_services: %w[service1] },
75
- 'platform2' => { nodes: {}, deployable_services: %w[service2] }
89
+ {
90
+ 'platform1' => { nodes: { 'node' => { services: %w[service1 service2] } }, deployable_services: %w[service1] },
91
+ 'platform2' => { nodes: {}, deployable_services: %w[service2] }
92
+ }
76
93
  ) do
77
- expect_deploy_actions('node', %w[service1 service2], false, [
78
- { node: 'node', service: 'service1', platform: 'platform1' },
79
- { node: 'node', service: 'service2', platform: 'platform2' }
80
- ])
94
+ expect_deploy_actions(
95
+ 'node', %w[service1 service2], false,
96
+ [
97
+ { node: 'node', service: 'service1', platform: 'platform1' },
98
+ { node: 'node', service: 'service2', platform: 'platform2' }
99
+ ]
100
+ )
81
101
  end
82
102
  end
83
103
 
84
104
  it 'deploys several services from different platforms in the correct order' do
85
105
  with_test_platforms(
86
- 'platform1' => { nodes: { 'node' => { services: %w[service1 service2 service3 service4] } }, deployable_services: %w[service1] },
87
- 'platform2' => { nodes: {}, deployable_services: %w[service2 service3] },
88
- 'platform3' => { nodes: {}, deployable_services: %w[service4] }
106
+ {
107
+ 'platform1' => { nodes: { 'node' => { services: %w[service1 service2 service3 service4] } }, deployable_services: %w[service1] },
108
+ 'platform2' => { nodes: {}, deployable_services: %w[service2 service3] },
109
+ 'platform3' => { nodes: {}, deployable_services: %w[service4] }
110
+ }
89
111
  ) do
90
- expect_deploy_actions('node', %w[service3 service1 service4 service2], false, [
91
- { node: 'node', service: 'service3', platform: 'platform2' },
92
- { node: 'node', service: 'service1', platform: 'platform1' },
93
- { node: 'node', service: 'service4', platform: 'platform3' },
94
- { node: 'node', service: 'service2', platform: 'platform2' }
95
- ])
112
+ expect_deploy_actions(
113
+ 'node', %w[service3 service1 service4 service2], false,
114
+ [
115
+ { node: 'node', service: 'service3', platform: 'platform2' },
116
+ { node: 'node', service: 'service1', platform: 'platform1' },
117
+ { node: 'node', service: 'service4', platform: 'platform3' },
118
+ { node: 'node', service: 'service2', platform: 'platform2' }
119
+ ]
120
+ )
96
121
  end
97
122
  end
98
123
 
99
124
  it 'deploys only required services' do
100
125
  with_test_platform(
101
- nodes: { 'node' => { services: %w[service1 service2] } },
102
- deployable_services: %w[service1 service2]
126
+ {
127
+ nodes: { 'node' => { services: %w[service1 service2] } },
128
+ deployable_services: %w[service1 service2]
129
+ }
103
130
  ) do
104
- expect_deploy_actions('node', %w[service2], false, [
105
- { node: 'node', service: 'service2' }
106
- ])
131
+ expect_deploy_actions(
132
+ 'node', %w[service2], false,
133
+ [
134
+ { node: 'node', service: 'service2' }
135
+ ]
136
+ )
107
137
  end
108
138
  end
109
139
 
110
140
  it 'fails if a service can\'t be deployed' do
111
141
  with_test_platform(
112
- nodes: { 'node' => { services: %w[service1 service2] } },
113
- deployable_services: %w[service1]
142
+ {
143
+ nodes: { 'node' => { services: %w[service1 service2] } },
144
+ deployable_services: %w[service1]
145
+ }
114
146
  ) do
115
147
  expect { test_services_handler.actions_to_deploy_on('node', %w[service2], false) }.to raise_error 'No platform is able to deploy the service service2'
116
148
  end
@@ -1,23 +1,22 @@
1
1
  describe HybridPlatformsConductor::ServicesHandler do
2
2
 
3
- context 'checking deployment authorization' do
3
+ context 'when checking deployment authorization' do
4
4
 
5
5
  # Setup a test platform for our services testing
6
6
  #
7
7
  # Parameters::
8
- # * Proc: Code called when platform is setup
8
+ # * *block* (Proc): Code called when platform is setup
9
9
  # * Parameters::
10
10
  # * *repository* (String): Platform repository path
11
- def with_test_platform_for_services_test
11
+ def with_test_platform_for_services_test(&block)
12
12
  with_test_platform(
13
13
  {
14
14
  nodes: { 'node1' => { services: %w[service1] }, 'node2' => {}, 'node3' => {} },
15
15
  deployable_services: %w[service1]
16
16
  },
17
- true
18
- ) do |repository|
19
- yield repository
20
- end
17
+ as_git: true,
18
+ &block
19
+ )
21
20
  end
22
21
 
23
22
  # Create a commit on branch and check it out
@@ -35,23 +34,25 @@ describe HybridPlatformsConductor::ServicesHandler do
35
34
  it 'allows deployment in local environment' do
36
35
  with_test_platform_for_services_test do
37
36
  with_cmd_runner_mocked([]) do
38
- expect(test_services_handler.deploy_allowed?(services: { 'node1' => %w[service1] }, secrets: {}, local_environment: true)).to eq nil
37
+ expect(test_services_handler.deploy_allowed?(services: { 'node1' => %w[service1] }, local_environment: true)).to eq nil
39
38
  end
40
39
  end
41
40
  end
42
41
 
43
42
  it 'allows deployment if branch is on master' do
44
43
  with_test_platform_for_services_test do
45
- expect(test_services_handler.deploy_allowed?(services: { 'node1' => %w[service1] }, secrets: {}, local_environment: false)).to eq nil
44
+ expect(test_services_handler.deploy_allowed?(services: { 'node1' => %w[service1] }, local_environment: false)).to eq nil
46
45
  end
47
46
  end
48
47
 
49
48
  it 'allows deployment if it is not a git repository' do
50
49
  with_test_platform(
51
- nodes: { 'node1' => { services: %w[service1] }, 'node2' => {}, 'node3' => {} },
52
- deployable_services: %w[service1]
50
+ {
51
+ nodes: { 'node1' => { services: %w[service1] }, 'node2' => {}, 'node3' => {} },
52
+ deployable_services: %w[service1]
53
+ }
53
54
  ) do
54
- expect(test_services_handler.deploy_allowed?(services: { 'node1' => %w[service1] }, secrets: {}, local_environment: false)).to eq nil
55
+ expect(test_services_handler.deploy_allowed?(services: { 'node1' => %w[service1] }, local_environment: false)).to eq nil
55
56
  end
56
57
  end
57
58
 
@@ -61,7 +62,7 @@ describe HybridPlatformsConductor::ServicesHandler do
61
62
  git = Git.open(repository)
62
63
  git.add_remote('another_remote', remote_repo).fetch
63
64
  git.checkout('remotes/another_remote/master')
64
- expect(test_services_handler.deploy_allowed?(services: { 'node1' => %w[service1] }, secrets: {}, local_environment: false)).to eq nil
65
+ expect(test_services_handler.deploy_allowed?(services: { 'node1' => %w[service1] }, local_environment: false)).to eq nil
65
66
  end
66
67
  end
67
68
  end
@@ -69,14 +70,14 @@ describe HybridPlatformsConductor::ServicesHandler do
69
70
  it 'allows deployment if branch is on master even if not checked-out' do
70
71
  with_test_platform_for_services_test do |repository|
71
72
  Git.open(repository).branch('other_branch').checkout
72
- expect(test_services_handler.deploy_allowed?(services: { 'node1' => %w[service1] }, secrets: {}, local_environment: false)).to eq nil
73
+ expect(test_services_handler.deploy_allowed?(services: { 'node1' => %w[service1] }, local_environment: false)).to eq nil
73
74
  end
74
75
  end
75
76
 
76
77
  it 'refuses deployment if branch is not master' do
77
78
  with_test_platform_for_services_test do |repository|
78
79
  checkout_non_master_on(repository)
79
- expect(test_services_handler.deploy_allowed?(services: { 'node1' => %w[service1] }, secrets: {}, local_environment: false)).to eq "The following platforms have not checked out master: #{repository}. Only master should be deployed in production."
80
+ expect(test_services_handler.deploy_allowed?(services: { 'node1' => %w[service1] }, local_environment: false)).to eq "The following platforms have not checked out master: #{repository}. Only master should be deployed in production."
80
81
  end
81
82
  end
82
83
 
@@ -87,13 +88,14 @@ describe HybridPlatformsConductor::ServicesHandler do
87
88
  'platform2' => { nodes: { 'node2' => { services: %w[service2] } }, deployable_services: %w[service2] },
88
89
  'platform3' => { nodes: { 'node3' => { services: %w[service3] } }, deployable_services: %w[service3] }
89
90
  },
90
- true
91
- ) do |repositories|
92
- expect(test_services_handler.deploy_allowed?(
93
- services: { 'node1' => %w[service1], 'node2' => %w[service2], 'node3' => %w[service3] },
94
- secrets: {},
95
- local_environment: false
96
- )).to eq nil
91
+ as_git: true
92
+ ) do
93
+ expect(
94
+ test_services_handler.deploy_allowed?(
95
+ services: { 'node1' => %w[service1], 'node2' => %w[service2], 'node3' => %w[service3] },
96
+ local_environment: false
97
+ )
98
+ ).to eq nil
97
99
  end
98
100
  end
99
101
 
@@ -105,15 +107,16 @@ describe HybridPlatformsConductor::ServicesHandler do
105
107
  'platform3' => { nodes: { 'node3' => { services: %w[service3] } }, deployable_services: %w[service3] },
106
108
  'platform4' => { nodes: { 'node4' => { services: %w[service4] } }, deployable_services: %w[service4] }
107
109
  },
108
- true
110
+ as_git: true
109
111
  ) do |repositories|
110
112
  checkout_non_master_on(repositories['platform2'])
111
113
  checkout_non_master_on(repositories['platform4'])
112
- expect(test_services_handler.deploy_allowed?(
113
- services: { 'node1' => %w[service1], 'node2' => %w[service2], 'node3' => %w[service3], 'node4' => %w[service4] },
114
- secrets: {},
115
- local_environment: false
116
- )).to eq "The following platforms have not checked out master: #{repositories['platform2']}, #{repositories['platform4']}. Only master should be deployed in production."
114
+ expect(
115
+ test_services_handler.deploy_allowed?(
116
+ services: { 'node1' => %w[service1], 'node2' => %w[service2], 'node3' => %w[service3], 'node4' => %w[service4] },
117
+ local_environment: false
118
+ )
119
+ ).to eq "The following platforms have not checked out master: #{repositories['platform2']}, #{repositories['platform4']}. Only master should be deployed in production."
117
120
  end
118
121
  end
119
122
 
@@ -125,15 +128,16 @@ describe HybridPlatformsConductor::ServicesHandler do
125
128
  'platform3' => { nodes: { 'node3' => { services: %w[service3] } }, deployable_services: %w[service3] },
126
129
  'platform4' => { nodes: { 'node4' => { services: %w[service4] } }, deployable_services: %w[service4] }
127
130
  },
128
- true
131
+ as_git: true
129
132
  ) do |repositories|
130
133
  checkout_non_master_on(repositories['platform2'])
131
134
  checkout_non_master_on(repositories['platform4'])
132
- expect(test_services_handler.deploy_allowed?(
133
- services: { 'node1' => %w[service1 service3] },
134
- secrets: {},
135
- local_environment: false
136
- )).to eq nil
135
+ expect(
136
+ test_services_handler.deploy_allowed?(
137
+ services: { 'node1' => %w[service1 service3] },
138
+ local_environment: false
139
+ )
140
+ ).to eq nil
137
141
  end
138
142
  end
139
143
 
@@ -1,11 +1,13 @@
1
1
  describe HybridPlatformsConductor::ServicesHandler do
2
2
 
3
- context 'checking logs associated to a deployment' do
3
+ context 'when checking logs associated to a deployment' do
4
4
 
5
5
  it 'logs platforms info' do
6
6
  with_test_platform(
7
- nodes: { 'node' => { services: %w[service1] } },
8
- deployable_services: %w[service1]
7
+ {
8
+ nodes: { 'node' => { services: %w[service1] } },
9
+ deployable_services: %w[service1]
10
+ }
9
11
  ) do
10
12
  expect(test_services_handler.log_info_for('node', %w[service1])).to eq(
11
13
  repo_name_0: 'platform'
@@ -19,7 +21,7 @@ describe HybridPlatformsConductor::ServicesHandler do
19
21
  nodes: { 'node' => { services: %w[service1] } },
20
22
  deployable_services: %w[service1]
21
23
  },
22
- true
24
+ as_git: true
23
25
  ) do |repository|
24
26
  expect(test_services_handler.log_info_for('node', %w[service1])).to eq(
25
27
  commit_id_0: Git.open(repository).log.first.sha,
@@ -36,7 +38,7 @@ describe HybridPlatformsConductor::ServicesHandler do
36
38
  nodes: { 'node' => { services: %w[service1] } },
37
39
  deployable_services: %w[service1]
38
40
  },
39
- true
41
+ as_git: true
40
42
  ) do |repository|
41
43
  FileUtils.touch "#{repository}/new_file"
42
44
  expect(test_services_handler.log_info_for('node', %w[service1])).to eq(
@@ -53,9 +55,9 @@ describe HybridPlatformsConductor::ServicesHandler do
53
55
  {
54
56
  'platform1' => { nodes: { 'node' => { services: %w[service1 service2 service3] } }, deployable_services: %w[service1] },
55
57
  'platform2' => { nodes: {}, deployable_services: %w[service2] },
56
- 'platform3' => { nodes: {}, deployable_services: %w[service3] },
58
+ 'platform3' => { nodes: {}, deployable_services: %w[service3] }
57
59
  },
58
- true
60
+ as_git: true
59
61
  ) do |repositories|
60
62
  expect(test_services_handler.log_info_for('node', %w[service1 service2 service3])).to eq(
61
63
  commit_id_0: Git.open(repositories['platform1']).log.first.sha,
@@ -79,9 +81,9 @@ describe HybridPlatformsConductor::ServicesHandler do
79
81
  {
80
82
  'platform1' => { nodes: { 'node' => { services: %w[service1 service2 service3] } }, deployable_services: %w[service1] },
81
83
  'platform2' => { nodes: {}, deployable_services: %w[service2] },
82
- 'platform3' => { nodes: {}, deployable_services: %w[service3] },
84
+ 'platform3' => { nodes: {}, deployable_services: %w[service3] }
83
85
  },
84
- true
86
+ as_git: true
85
87
  ) do |repositories|
86
88
  expect(test_services_handler.log_info_for('node', %w[service1 service3])).to eq(
87
89
  commit_id_0: Git.open(repositories['platform1']).log.first.sha,
@@ -1,16 +1,18 @@
1
1
  describe HybridPlatformsConductor::ServicesHandler do
2
2
 
3
- context 'checking packaging' do
3
+ context 'when checking packaging' do
4
4
 
5
5
  it 'packages 1 platform' do
6
6
  with_test_platform(
7
- nodes: { 'node1' => { services: %w[service1] }, 'node2' => {}, 'node3' => {} },
8
- deployable_services: %w[service1],
9
- package: proc do |services:, secrets:, local_environment:|
10
- expect(services).to eq('node1' => %w[service1])
11
- expect(secrets).to eq({})
12
- expect(local_environment).to eq false
13
- end
7
+ {
8
+ nodes: { 'node1' => { services: %w[service1] }, 'node2' => {}, 'node3' => {} },
9
+ deployable_services: %w[service1],
10
+ package: proc do |services:, secrets:, local_environment:|
11
+ expect(services).to eq('node1' => %w[service1])
12
+ expect(secrets).to eq({})
13
+ expect(local_environment).to eq false
14
+ end
15
+ }
14
16
  ) do
15
17
  test_services_handler.package(
16
18
  services: { 'node1' => %w[service1] },
@@ -23,14 +25,16 @@ describe HybridPlatformsConductor::ServicesHandler do
23
25
  it 'packages 1 platform only once' do
24
26
  nbr_calls = 0
25
27
  with_test_platform(
26
- nodes: { 'node1' => { services: %w[service1] }, 'node2' => {}, 'node3' => {} },
27
- deployable_services: %w[service1],
28
- package: proc do |services:, secrets:, local_environment:|
29
- expect(services).to eq('node1' => %w[service1])
30
- expect(secrets).to eq({})
31
- expect(local_environment).to eq false
32
- nbr_calls += 1
33
- end
28
+ {
29
+ nodes: { 'node1' => { services: %w[service1] }, 'node2' => {}, 'node3' => {} },
30
+ deployable_services: %w[service1],
31
+ package: proc do |services:, secrets:, local_environment:|
32
+ expect(services).to eq('node1' => %w[service1])
33
+ expect(secrets).to eq({})
34
+ expect(local_environment).to eq false
35
+ nbr_calls += 1
36
+ end
37
+ }
34
38
  ) do
35
39
  3.times do
36
40
  test_services_handler.package(
@@ -46,21 +50,23 @@ describe HybridPlatformsConductor::ServicesHandler do
46
50
  it 'packages 1 platform only once even across different ServicesHandler instances' do
47
51
  nbr_calls = 0
48
52
  with_test_platform(
49
- nodes: { 'node1' => { services: %w[service1] }, 'node2' => {}, 'node3' => {} },
50
- deployable_services: %w[service1],
51
- package: proc do |services:, secrets:, local_environment:|
52
- expect(services).to eq('node1' => %w[service1])
53
- expect(secrets).to eq({})
54
- expect(local_environment).to eq false
55
- nbr_calls += 1
56
- end
53
+ {
54
+ nodes: { 'node1' => { services: %w[service1] }, 'node2' => {}, 'node3' => {} },
55
+ deployable_services: %w[service1],
56
+ package: proc do |services:, secrets:, local_environment:|
57
+ expect(services).to eq('node1' => %w[service1])
58
+ expect(secrets).to eq({})
59
+ expect(local_environment).to eq false
60
+ nbr_calls += 1
61
+ end
62
+ }
57
63
  ) do
58
64
  test_services_handler.package(
59
65
  services: { 'node1' => %w[service1] },
60
66
  secrets: {},
61
67
  local_environment: false
62
68
  )
63
- HybridPlatformsConductor::ServicesHandler.new(
69
+ described_class.new(
64
70
  logger: logger,
65
71
  logger_stderr: logger,
66
72
  config: test_config,
@@ -79,13 +85,15 @@ describe HybridPlatformsConductor::ServicesHandler do
79
85
 
80
86
  it 'packages 1 platform with secrets' do
81
87
  with_test_platform(
82
- nodes: { 'node1' => { services: %w[service1] }, 'node2' => {}, 'node3' => {} },
83
- deployable_services: %w[service1],
84
- package: proc do |services:, secrets:, local_environment:|
85
- expect(services).to eq('node1' => %w[service1])
86
- expect(secrets).to eq('my_secret' => 'value')
87
- expect(local_environment).to eq false
88
- end
88
+ {
89
+ nodes: { 'node1' => { services: %w[service1] }, 'node2' => {}, 'node3' => {} },
90
+ deployable_services: %w[service1],
91
+ package: proc do |services:, secrets:, local_environment:|
92
+ expect(services).to eq('node1' => %w[service1])
93
+ expect(secrets).to eq('my_secret' => 'value')
94
+ expect(local_environment).to eq false
95
+ end
96
+ }
89
97
  ) do
90
98
  test_services_handler.package(
91
99
  services: { 'node1' => %w[service1] },
@@ -97,13 +105,15 @@ describe HybridPlatformsConductor::ServicesHandler do
97
105
 
98
106
  it 'packages 1 platform for a local environment' do
99
107
  with_test_platform(
100
- nodes: { 'node1' => { services: %w[service1] }, 'node2' => {}, 'node3' => {} },
101
- deployable_services: %w[service1],
102
- package: proc do |services:, secrets:, local_environment:|
103
- expect(services).to eq('node1' => %w[service1])
104
- expect(secrets).to eq({})
105
- expect(local_environment).to eq true
106
- end
108
+ {
109
+ nodes: { 'node1' => { services: %w[service1] }, 'node2' => {}, 'node3' => {} },
110
+ deployable_services: %w[service1],
111
+ package: proc do |services:, secrets:, local_environment:|
112
+ expect(services).to eq('node1' => %w[service1])
113
+ expect(secrets).to eq({})
114
+ expect(local_environment).to eq true
115
+ end
116
+ }
107
117
  ) do
108
118
  test_services_handler.package(
109
119
  services: { 'node1' => %w[service1] },
@@ -120,35 +130,37 @@ describe HybridPlatformsConductor::ServicesHandler do
120
130
  'platform3' => 0
121
131
  }
122
132
  with_test_platforms(
123
- 'platform1' => {
124
- nodes: { 'node1' => { services: %w[service1] } },
125
- deployable_services: %w[service1],
126
- package: proc do |services:, secrets:, local_environment:|
127
- expect(services).to eq('node1' => %w[service1])
128
- expect(secrets).to eq({})
129
- expect(local_environment).to eq false
130
- nbr_calls['platform1'] += 1
131
- end
132
- },
133
- 'platform2' => {
134
- nodes: { 'node2' => { services: %w[service2] } },
135
- deployable_services: %w[service2],
136
- package: proc do |services:, secrets:, local_environment:|
137
- expect(services).to eq('node2' => %w[service2])
138
- expect(secrets).to eq({})
139
- expect(local_environment).to eq false
140
- nbr_calls['platform2'] += 1
141
- end
142
- },
143
- 'platform3' => {
144
- nodes: { 'node3' => { services: %w[service3] } },
145
- deployable_services: %w[service3],
146
- package: proc do |services:, secrets:, local_environment:|
147
- expect(services).to eq('node3' => %w[service3])
148
- expect(secrets).to eq({})
149
- expect(local_environment).to eq false
150
- nbr_calls['platform3'] += 1
151
- end
133
+ {
134
+ 'platform1' => {
135
+ nodes: { 'node1' => { services: %w[service1] } },
136
+ deployable_services: %w[service1],
137
+ package: proc do |services:, secrets:, local_environment:|
138
+ expect(services).to eq('node1' => %w[service1])
139
+ expect(secrets).to eq({})
140
+ expect(local_environment).to eq false
141
+ nbr_calls['platform1'] += 1
142
+ end
143
+ },
144
+ 'platform2' => {
145
+ nodes: { 'node2' => { services: %w[service2] } },
146
+ deployable_services: %w[service2],
147
+ package: proc do |services:, secrets:, local_environment:|
148
+ expect(services).to eq('node2' => %w[service2])
149
+ expect(secrets).to eq({})
150
+ expect(local_environment).to eq false
151
+ nbr_calls['platform2'] += 1
152
+ end
153
+ },
154
+ 'platform3' => {
155
+ nodes: { 'node3' => { services: %w[service3] } },
156
+ deployable_services: %w[service3],
157
+ package: proc do |services:, secrets:, local_environment:|
158
+ expect(services).to eq('node3' => %w[service3])
159
+ expect(secrets).to eq({})
160
+ expect(local_environment).to eq false
161
+ nbr_calls['platform3'] += 1
162
+ end
163
+ }
152
164
  }
153
165
  ) do
154
166
  test_services_handler.package(
@@ -171,35 +183,37 @@ describe HybridPlatformsConductor::ServicesHandler do
171
183
  'platform3' => 0
172
184
  }
173
185
  with_test_platforms(
174
- 'platform1' => {
175
- nodes: { 'node1' => { services: %w[service1] } },
176
- deployable_services: %w[service1],
177
- package: proc do |services:, secrets:, local_environment:|
178
- expect(services).to eq('node1' => %w[service1])
179
- expect(secrets).to eq({})
180
- expect(local_environment).to eq false
181
- nbr_calls['platform1'] += 1
182
- end
183
- },
184
- 'platform2' => {
185
- nodes: { 'node2' => { services: %w[service2] } },
186
- deployable_services: %w[service2],
187
- package: proc do |services:, secrets:, local_environment:|
188
- expect(services).to eq('node2' => %w[service2])
189
- expect(secrets).to eq({})
190
- expect(local_environment).to eq false
191
- nbr_calls['platform2'] += 1
192
- end
193
- },
194
- 'platform3' => {
195
- nodes: { 'node3' => { services: %w[service3] } },
196
- deployable_services: %w[service3],
197
- package: proc do |services:, secrets:, local_environment:|
198
- expect(services).to eq('node1' => %w[service3])
199
- expect(secrets).to eq({})
200
- expect(local_environment).to eq false
201
- nbr_calls['platform3'] += 1
202
- end
186
+ {
187
+ 'platform1' => {
188
+ nodes: { 'node1' => { services: %w[service1] } },
189
+ deployable_services: %w[service1],
190
+ package: proc do |services:, secrets:, local_environment:|
191
+ expect(services).to eq('node1' => %w[service1])
192
+ expect(secrets).to eq({})
193
+ expect(local_environment).to eq false
194
+ nbr_calls['platform1'] += 1
195
+ end
196
+ },
197
+ 'platform2' => {
198
+ nodes: { 'node2' => { services: %w[service2] } },
199
+ deployable_services: %w[service2],
200
+ package: proc do |services:, secrets:, local_environment:|
201
+ expect(services).to eq('node2' => %w[service2])
202
+ expect(secrets).to eq({})
203
+ expect(local_environment).to eq false
204
+ nbr_calls['platform2'] += 1
205
+ end
206
+ },
207
+ 'platform3' => {
208
+ nodes: { 'node3' => { services: %w[service3] } },
209
+ deployable_services: %w[service3],
210
+ package: proc do |services:, secrets:, local_environment:|
211
+ expect(services).to eq('node1' => %w[service3])
212
+ expect(secrets).to eq({})
213
+ expect(local_environment).to eq false
214
+ nbr_calls['platform3'] += 1
215
+ end
216
+ }
203
217
  }
204
218
  ) do
205
219
  test_services_handler.package(
@@ -222,35 +236,37 @@ describe HybridPlatformsConductor::ServicesHandler do
222
236
  'platform3' => 0
223
237
  }
224
238
  with_test_platforms(
225
- 'platform1' => {
226
- nodes: { 'node' => { services: %w[service1 service2 service3 service4 service5 service6] } },
227
- deployable_services: %w[service1 service2],
228
- package: proc do |services:, secrets:, local_environment:|
229
- expect(services).to eq('node' => %w[service1 service2])
230
- expect(secrets).to eq({})
231
- expect(local_environment).to eq false
232
- nbr_calls['platform1'] += 1
233
- end
234
- },
235
- 'platform2' => {
236
- nodes: {},
237
- deployable_services: %w[service3 service4],
238
- package: proc do |services:, secrets:, local_environment:|
239
- expect(services).to eq('node' => %w[service3])
240
- expect(secrets).to eq({})
241
- expect(local_environment).to eq false
242
- nbr_calls['platform2'] += 1
243
- end
244
- },
245
- 'platform3' => {
246
- nodes: {},
247
- deployable_services: %w[service5 service6],
248
- package: proc do |services:, secrets:, local_environment:|
249
- expect(services).to eq('node' => %w[service5 service6])
250
- expect(secrets).to eq({})
251
- expect(local_environment).to eq false
252
- nbr_calls['platform3'] += 1
253
- end
239
+ {
240
+ 'platform1' => {
241
+ nodes: { 'node' => { services: %w[service1 service2 service3 service4 service5 service6] } },
242
+ deployable_services: %w[service1 service2],
243
+ package: proc do |services:, secrets:, local_environment:|
244
+ expect(services).to eq('node' => %w[service1 service2])
245
+ expect(secrets).to eq({})
246
+ expect(local_environment).to eq false
247
+ nbr_calls['platform1'] += 1
248
+ end
249
+ },
250
+ 'platform2' => {
251
+ nodes: {},
252
+ deployable_services: %w[service3 service4],
253
+ package: proc do |services:, secrets:, local_environment:|
254
+ expect(services).to eq('node' => %w[service3])
255
+ expect(secrets).to eq({})
256
+ expect(local_environment).to eq false
257
+ nbr_calls['platform2'] += 1
258
+ end
259
+ },
260
+ 'platform3' => {
261
+ nodes: {},
262
+ deployable_services: %w[service5 service6],
263
+ package: proc do |services:, secrets:, local_environment:|
264
+ expect(services).to eq('node' => %w[service5 service6])
265
+ expect(secrets).to eq({})
266
+ expect(local_environment).to eq false
267
+ nbr_calls['platform3'] += 1
268
+ end
269
+ }
254
270
  }
255
271
  ) do
256
272
  test_services_handler.package(
@@ -273,35 +289,37 @@ describe HybridPlatformsConductor::ServicesHandler do
273
289
  'platform3' => 0
274
290
  }
275
291
  with_test_platforms(
276
- 'platform1' => {
277
- nodes: { 'node1' => { services: %w[service1] } },
278
- deployable_services: %w[service1],
279
- package: proc do |services:, secrets:, local_environment:|
280
- expect(services).to eq('node1' => %w[service1])
281
- expect(secrets).to eq({})
282
- expect(local_environment).to eq false
283
- nbr_calls['platform1'] += 1
284
- end
285
- },
286
- 'platform2' => {
287
- nodes: { 'node2' => { services: %w[service2] } },
288
- deployable_services: %w[service2],
289
- package: proc do |services:, secrets:, local_environment:|
290
- expect(services).to eq('node2' => %w[service2])
291
- expect(secrets).to eq({})
292
- expect(local_environment).to eq false
293
- nbr_calls['platform2'] += 1
294
- end
295
- },
296
- 'platform3' => {
297
- nodes: { 'node3' => { services: %w[service3] } },
298
- deployable_services: %w[service3],
299
- package: proc do |services:, secrets:, local_environment:|
300
- expect(services).to eq('node3' => %w[service3])
301
- expect(secrets).to eq({})
302
- expect(local_environment).to eq false
303
- nbr_calls['platform3'] += 1
304
- end
292
+ {
293
+ 'platform1' => {
294
+ nodes: { 'node1' => { services: %w[service1] } },
295
+ deployable_services: %w[service1],
296
+ package: proc do |services:, secrets:, local_environment:|
297
+ expect(services).to eq('node1' => %w[service1])
298
+ expect(secrets).to eq({})
299
+ expect(local_environment).to eq false
300
+ nbr_calls['platform1'] += 1
301
+ end
302
+ },
303
+ 'platform2' => {
304
+ nodes: { 'node2' => { services: %w[service2] } },
305
+ deployable_services: %w[service2],
306
+ package: proc do |services:, secrets:, local_environment:|
307
+ expect(services).to eq('node2' => %w[service2])
308
+ expect(secrets).to eq({})
309
+ expect(local_environment).to eq false
310
+ nbr_calls['platform2'] += 1
311
+ end
312
+ },
313
+ 'platform3' => {
314
+ nodes: { 'node3' => { services: %w[service3] } },
315
+ deployable_services: %w[service3],
316
+ package: proc do |services:, secrets:, local_environment:|
317
+ expect(services).to eq('node3' => %w[service3])
318
+ expect(secrets).to eq({})
319
+ expect(local_environment).to eq false
320
+ nbr_calls['platform3'] += 1
321
+ end
322
+ }
305
323
  }
306
324
  ) do
307
325
  test_services_handler.package(
@@ -331,14 +349,16 @@ describe HybridPlatformsConductor::ServicesHandler do
331
349
  nbr_calls = 0
332
350
  expected_secrets = {}
333
351
  with_test_platform(
334
- nodes: { 'node1' => { services: %w[service1] } },
335
- deployable_services: %w[service1],
336
- package: proc do |services:, secrets:, local_environment:|
337
- expect(services).to eq('node1' => %w[service1])
338
- expect(secrets).to eq(expected_secrets)
339
- expect(local_environment).to eq false
340
- nbr_calls += 1
341
- end
352
+ {
353
+ nodes: { 'node1' => { services: %w[service1] } },
354
+ deployable_services: %w[service1],
355
+ package: proc do |services:, secrets:, local_environment:|
356
+ expect(services).to eq('node1' => %w[service1])
357
+ expect(secrets).to eq(expected_secrets)
358
+ expect(local_environment).to eq false
359
+ nbr_calls += 1
360
+ end
361
+ }
342
362
  ) do
343
363
  test_services_handler.package(
344
364
  services: { 'node1' => %w[service1] },
@@ -359,14 +379,16 @@ describe HybridPlatformsConductor::ServicesHandler do
359
379
  nbr_calls = 0
360
380
  expected_local = false
361
381
  with_test_platform(
362
- nodes: { 'node1' => { services: %w[service1] } },
363
- deployable_services: %w[service1],
364
- package: proc do |services:, secrets:, local_environment:|
365
- expect(services).to eq('node1' => %w[service1])
366
- expect(secrets).to eq({})
367
- expect(local_environment).to eq expected_local
368
- nbr_calls += 1
369
- end
382
+ {
383
+ nodes: { 'node1' => { services: %w[service1] } },
384
+ deployable_services: %w[service1],
385
+ package: proc do |services:, secrets:, local_environment:|
386
+ expect(services).to eq('node1' => %w[service1])
387
+ expect(secrets).to eq({})
388
+ expect(local_environment).to eq expected_local
389
+ nbr_calls += 1
390
+ end
391
+ }
370
392
  ) do
371
393
  test_services_handler.package(
372
394
  services: { 'node1' => %w[service1] },