hybrid_platforms_conductor 32.17.0 → 33.0.2

Sign up to get free protection for your applications and to get access to all the features.
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
@@ -4,7 +4,7 @@ describe 'Documentation' do
4
4
  check_stdout = `bundle exec tools/check_md README.md #{Dir.glob('docs/**/*.md').join(' ')}`.split("\n")
5
5
  summary_idx = check_stdout.index { |line| line =~ /^\d+ errors:$/ }
6
6
  expect(summary_idx).not_to eq(nil), "Could not parse check output: #{check_stdout.join("\n")}"
7
- expect(check_stdout[summary_idx]).to eq('0 errors:'), "Invalid links found: #{check_stdout[summary_idx..-1].join("\n")}"
7
+ expect(check_stdout[summary_idx]).to eq('0 errors:'), "Invalid links found: #{check_stdout[summary_idx..].join("\n")}"
8
8
  end
9
9
 
10
10
  end
@@ -3,13 +3,11 @@ describe 'check-node executable' do
3
3
  # Setup a platform for check-node tests
4
4
  #
5
5
  # Parameters::
6
- # * Proc: Code called when the platform is setup
6
+ # * *block* (Proc): Code called when the platform is setup
7
7
  # * Parameters::
8
8
  # * *repository* (String): Platform's repository
9
- def with_test_platform_for_check_node
10
- with_test_platform({ nodes: { 'node' => {} } }) do |repository|
11
- yield repository
12
- end
9
+ def with_test_platform_for_check_node(&block)
10
+ with_test_platform({ nodes: { 'node' => {} } }, &block)
13
11
  end
14
12
 
15
13
  it 'checks a given node' do
@@ -21,7 +19,7 @@ describe 'check-node executable' do
21
19
  end
22
20
  exit_code, stdout, stderr = run 'check-node', '--node', 'node'
23
21
  expect(exit_code).to eq 0
24
- expect(stdout).to match /Check ok/
22
+ expect(stdout).to match(/Check ok/)
25
23
  expect(stderr).to eq ''
26
24
  end
27
25
  end
@@ -3,13 +3,11 @@ describe 'deploy executable' do
3
3
  # Setup a platform for deploy tests
4
4
  #
5
5
  # Parameters::
6
- # * Proc: Code called when the platform is setup
6
+ # * *block* (Proc): Code called when the platform is setup
7
7
  # * Parameters::
8
8
  # * *repository* (String): Platform's repository
9
- def with_test_platform_for_deploy
10
- with_test_platform({ nodes: { 'node' => {} } }) do |repository|
11
- yield repository
12
- end
9
+ def with_test_platform_for_deploy(&block)
10
+ with_test_platform({ nodes: { 'node' => {} } }, &block)
13
11
  end
14
12
 
15
13
  it 'deploys a given node' do
@@ -21,7 +19,7 @@ describe 'deploy executable' do
21
19
  end
22
20
  exit_code, stdout, stderr = run 'deploy', '--node', 'node'
23
21
  expect(exit_code).to eq 0
24
- expect(stdout).to match /Deploy ok/
22
+ expect(stdout).to match(/Deploy ok/)
25
23
  expect(stderr).to eq ''
26
24
  end
27
25
  end
@@ -3,20 +3,19 @@ describe 'get_impacted_nodes executable' do
3
3
  # Setup a platform for get_impacted_nodes tests
4
4
  #
5
5
  # Parameters::
6
- # * Proc: Code called when the platform is setup
6
+ # * *block* (Proc): Code called when the platform is setup
7
7
  # * Parameters::
8
8
  # * *repository* (String): Platform's repository
9
- def with_test_platform_for_get_impacted_nodes
9
+ def with_test_platform_for_get_impacted_nodes(&block)
10
10
  with_test_platform(
11
11
  {
12
12
  nodes: {
13
13
  'node1' => { services: %w[service1] },
14
14
  'node2' => { services: %w[service2] }
15
15
  }
16
- }
17
- ) do |repository|
18
- yield repository
19
- end
16
+ },
17
+ &block
18
+ )
20
19
  end
21
20
 
22
21
  it 'returns nodes impacted by a git diff' do
@@ -26,22 +25,22 @@ describe 'get_impacted_nodes executable' do
26
25
  from_commit: 'master',
27
26
  to_commit: nil,
28
27
  smallest_set: false
29
- ) { [%w[node1 node2], %w[node1], %w[service2], false] }
28
+ ).and_return [%w[node1 node2], %w[node1], %w[service2], false]
30
29
  exit_code, stdout, stderr = run 'get_impacted_nodes', '--platform', 'platform'
31
30
  expect(exit_code).to eq 0
32
- expect(stdout).to eq <<~EOS
33
-
34
- * 1 impacted services:
35
- service2
36
-
37
- * 1 impacted nodes (directly):
38
- node1
39
-
40
- * 2 impacted nodes (total):
41
- node1
42
- node2
43
-
44
- EOS
31
+ expect(stdout).to eq <<~EO_STDOUT
32
+
33
+ * 1 impacted services:
34
+ service2
35
+
36
+ * 1 impacted nodes (directly):
37
+ node1
38
+
39
+ * 2 impacted nodes (total):
40
+ node1
41
+ node2
42
+
43
+ EO_STDOUT
45
44
  expect(stderr).to eq ''
46
45
  end
47
46
  end
@@ -53,23 +52,23 @@ describe 'get_impacted_nodes executable' do
53
52
  from_commit: 'master',
54
53
  to_commit: nil,
55
54
  smallest_set: false
56
- ) { [%w[node1 node2], %w[node1], %w[service2], true] }
55
+ ).and_return [%w[node1 node2], %w[node1], %w[service2], true]
57
56
  exit_code, stdout, stderr = run 'get_impacted_nodes', '--platform', 'platform'
58
57
  expect(exit_code).to eq 0
59
- expect(stdout).to eq <<~EOS
60
- * Potentially all nodes of this platform are impacted.
61
-
62
- * 1 impacted services:
63
- service2
64
-
65
- * 1 impacted nodes (directly):
66
- node1
67
-
68
- * 2 impacted nodes (total):
69
- node1
70
- node2
71
-
72
- EOS
58
+ expect(stdout).to eq <<~EO_STDOUT
59
+ * Potentially all nodes of this platform are impacted.
60
+
61
+ * 1 impacted services:
62
+ service2
63
+
64
+ * 1 impacted nodes (directly):
65
+ node1
66
+
67
+ * 2 impacted nodes (total):
68
+ node1
69
+ node2
70
+
71
+ EO_STDOUT
73
72
  expect(stderr).to eq ''
74
73
  end
75
74
  end
@@ -81,22 +80,22 @@ describe 'get_impacted_nodes executable' do
81
80
  from_commit: 'from_commit',
82
81
  to_commit: nil,
83
82
  smallest_set: false
84
- ) { [%w[node1 node2], %w[node1], %w[service2], false] }
83
+ ).and_return [%w[node1 node2], %w[node1], %w[service2], false]
85
84
  exit_code, stdout, stderr = run 'get_impacted_nodes', '--platform', 'platform', '--from-commit', 'from_commit'
86
85
  expect(exit_code).to eq 0
87
- expect(stdout).to eq <<~EOS
88
-
89
- * 1 impacted services:
90
- service2
91
-
92
- * 1 impacted nodes (directly):
93
- node1
94
-
95
- * 2 impacted nodes (total):
96
- node1
97
- node2
98
-
99
- EOS
86
+ expect(stdout).to eq <<~EO_STDOUT
87
+
88
+ * 1 impacted services:
89
+ service2
90
+
91
+ * 1 impacted nodes (directly):
92
+ node1
93
+
94
+ * 2 impacted nodes (total):
95
+ node1
96
+ node2
97
+
98
+ EO_STDOUT
100
99
  expect(stderr).to eq ''
101
100
  end
102
101
  end
@@ -108,22 +107,22 @@ describe 'get_impacted_nodes executable' do
108
107
  from_commit: 'master',
109
108
  to_commit: 'to_commit',
110
109
  smallest_set: false
111
- ) { [%w[node1 node2], %w[node1], %w[service2], false] }
110
+ ).and_return [%w[node1 node2], %w[node1], %w[service2], false]
112
111
  exit_code, stdout, stderr = run 'get_impacted_nodes', '--platform', 'platform', '--to-commit', 'to_commit'
113
112
  expect(exit_code).to eq 0
114
- expect(stdout).to eq <<~EOS
115
-
116
- * 1 impacted services:
117
- service2
118
-
119
- * 1 impacted nodes (directly):
120
- node1
121
-
122
- * 2 impacted nodes (total):
123
- node1
124
- node2
125
-
126
- EOS
113
+ expect(stdout).to eq <<~EO_STDOUT
114
+
115
+ * 1 impacted services:
116
+ service2
117
+
118
+ * 1 impacted nodes (directly):
119
+ node1
120
+
121
+ * 2 impacted nodes (total):
122
+ node1
123
+ node2
124
+
125
+ EO_STDOUT
127
126
  expect(stderr).to eq ''
128
127
  end
129
128
  end
@@ -135,22 +134,22 @@ describe 'get_impacted_nodes executable' do
135
134
  from_commit: 'master',
136
135
  to_commit: nil,
137
136
  smallest_set: true
138
- ) { [%w[node1 node2], %w[node1], %w[service2], false] }
137
+ ).and_return [%w[node1 node2], %w[node1], %w[service2], false]
139
138
  exit_code, stdout, stderr = run 'get_impacted_nodes', '--platform', 'platform', '--smallest-test-sample'
140
139
  expect(exit_code).to eq 0
141
- expect(stdout).to eq <<~EOS
142
-
143
- * 1 impacted services:
144
- service2
145
-
146
- * 1 impacted nodes (directly):
147
- node1
148
-
149
- * 2 impacted nodes (total smallest set):
150
- node1
151
- node2
152
-
153
- EOS
140
+ expect(stdout).to eq <<~EO_STDOUT
141
+
142
+ * 1 impacted services:
143
+ service2
144
+
145
+ * 1 impacted nodes (directly):
146
+ node1
147
+
148
+ * 2 impacted nodes (total smallest set):
149
+ node1
150
+ node2
151
+
152
+ EO_STDOUT
154
153
  expect(stderr).to eq ''
155
154
  end
156
155
  end
@@ -3,169 +3,215 @@ describe 'last_deploys executable' do
3
3
  # Setup a platform for last_deploys tests
4
4
  #
5
5
  # Parameters::
6
- # * Proc: Code called when the platform is setup
6
+ # * *block* (Proc): Code called when the platform is setup
7
7
  # * Parameters::
8
8
  # * *repository* (String): Platform's repository
9
- def with_test_platform_for_last_deploys
10
- with_test_platform({ nodes: { 'node1' => {}, 'node2' => {} } }) do |repository|
11
- yield repository
12
- end
9
+ def with_test_platform_for_last_deploys(&block)
10
+ with_test_platform({ nodes: { 'node1' => {}, 'node2' => {} } }, &block)
13
11
  end
14
12
 
15
13
  it 'checks all nodes by default' do
16
14
  with_test_platform_for_last_deploys do
17
- expect_actions_executor_runs([proc do |actions, timeout: nil, concurrent: false, log_to_dir: 'run_logs', log_to_stdout: true|
18
- expect(actions).to eq(
19
- 'node1' => { remote_bash: "cd /var/log/deployments && ls -t | head -1 | xargs sed '/===== STDOUT =====/q'" },
20
- 'node2' => { remote_bash: "cd /var/log/deployments && ls -t | head -1 | xargs sed '/===== STDOUT =====/q'" }
21
- )
15
+ expect(test_deployer).to receive(:deployment_info_from).with(%w[node1 node2]) do
22
16
  {
23
- 'node1' => [0, <<~EOS, ''],
24
- date: 2019-08-21 10:12:15
25
- user: admin_user1
26
- services: service1
27
- EOS
28
- 'node2' => [0, <<~EOS, '']
29
- date: 2019-08-22 10:12:15
30
- user: admin_user2
31
- services: service1, service2
32
- EOS
17
+ 'node1' => {
18
+ services: %w[service1],
19
+ deployment_info: {
20
+ repo_name_0: 'platform',
21
+ commit_id_0: 'abcdef1',
22
+ exit_status: 0,
23
+ date: Time.parse('2019-08-21 10:12:15 UTC'),
24
+ user: 'admin_user1'
25
+ },
26
+ exit_status: 0,
27
+ stdout: '',
28
+ stderr: ''
29
+ },
30
+ 'node2' => {
31
+ services: %w[service1 service2],
32
+ deployment_info: {
33
+ repo_name_0: 'platform',
34
+ commit_id_0: 'abcdef2',
35
+ exit_status: 0,
36
+ date: Time.parse('2019-08-22 10:12:15 UTC'),
37
+ user: 'admin_user2'
38
+ },
39
+ exit_status: 0,
40
+ stdout: '',
41
+ stderr: ''
42
+ }
33
43
  }
34
- end])
44
+ end
35
45
  exit_code, stdout, stderr = run 'last_deploys'
36
46
  expect(exit_code).to eq 0
37
- expect(stdout).to eq(<<~EOS)
38
- +-------+---------------------+-------------+--------------------+-------+
39
- | Node | Date | Admin | Services | Error |
40
- +-------+---------------------+-------------+--------------------+-------+
41
- | node1 | 2019-08-21 10:12:15 | admin_user1 | service1 | |
42
- | node2 | 2019-08-22 10:12:15 | admin_user2 | service1, service2 | |
43
- +-------+---------------------+-------------+--------------------+-------+
44
- EOS
47
+ expect(stdout).to eq <<~EO_STDOUT
48
+ +-------+-------------------------+-------------+--------------------+-------+
49
+ | Node | Date | Admin | Services | Error |
50
+ +-------+-------------------------+-------------+--------------------+-------+
51
+ | node1 | 2019-08-21 10:12:15 UTC | admin_user1 | service1 | |
52
+ | node2 | 2019-08-22 10:12:15 UTC | admin_user2 | service1, service2 | |
53
+ +-------+-------------------------+-------------+--------------------+-------+
54
+ EO_STDOUT
45
55
  expect(stderr).to eq ''
46
56
  end
47
57
  end
48
58
 
49
59
  it 'sorts results by user' do
50
60
  with_test_platform_for_last_deploys do
51
- expect_actions_executor_runs([proc do |actions, timeout: nil, concurrent: false, log_to_dir: 'run_logs', log_to_stdout: true|
52
- expect(actions).to eq(
53
- 'node1' => { remote_bash: "cd /var/log/deployments && ls -t | head -1 | xargs sed '/===== STDOUT =====/q'" },
54
- 'node2' => { remote_bash: "cd /var/log/deployments && ls -t | head -1 | xargs sed '/===== STDOUT =====/q'" }
55
- )
61
+ expect(test_deployer).to receive(:deployment_info_from).with(%w[node1 node2]) do
56
62
  {
57
- 'node1' => [0, <<~EOS, ''],
58
- date: 2019-08-21 10:12:15
59
- user: admin_user2
60
- services: service1
61
- EOS
62
- 'node2' => [0, <<~EOS, '']
63
- date: 2019-08-22 10:12:15
64
- user: admin_user1
65
- services: service1, service2
66
- EOS
63
+ 'node1' => {
64
+ services: %w[service1],
65
+ deployment_info: {
66
+ repo_name_0: 'platform',
67
+ commit_id_0: 'abcdef1',
68
+ exit_status: 0,
69
+ date: Time.parse('2019-08-21 10:12:15 UTC'),
70
+ user: 'admin_user2'
71
+ },
72
+ exit_status: 0,
73
+ stdout: '',
74
+ stderr: ''
75
+ },
76
+ 'node2' => {
77
+ services: %w[service1 service2],
78
+ deployment_info: {
79
+ repo_name_0: 'platform',
80
+ commit_id_0: 'abcdef2',
81
+ exit_status: 0,
82
+ date: Time.parse('2019-08-22 10:12:15 UTC'),
83
+ user: 'admin_user1'
84
+ },
85
+ exit_status: 0,
86
+ stdout: '',
87
+ stderr: ''
88
+ }
67
89
  }
68
- end])
90
+ end
69
91
  exit_code, stdout, stderr = run 'last_deploys', '--sort-by', 'user'
70
92
  expect(exit_code).to eq 0
71
- expect(stdout).to eq(<<~EOS)
72
- +-------+---------------------+-------------+--------------------+-------+
73
- | Node | Date | Admin | Services | Error |
74
- +-------+---------------------+-------------+--------------------+-------+
75
- | node2 | 2019-08-22 10:12:15 | admin_user1 | service1, service2 | |
76
- | node1 | 2019-08-21 10:12:15 | admin_user2 | service1 | |
77
- +-------+---------------------+-------------+--------------------+-------+
78
- EOS
93
+ expect(stdout).to eq <<~EO_STDOUT
94
+ +-------+-------------------------+-------------+--------------------+-------+
95
+ | Node | Date | Admin | Services | Error |
96
+ +-------+-------------------------+-------------+--------------------+-------+
97
+ | node2 | 2019-08-22 10:12:15 UTC | admin_user1 | service1, service2 | |
98
+ | node1 | 2019-08-21 10:12:15 UTC | admin_user2 | service1 | |
99
+ +-------+-------------------------+-------------+--------------------+-------+
100
+ EO_STDOUT
79
101
  expect(stderr).to eq ''
80
102
  end
81
103
  end
82
104
 
83
105
  it 'sorts results by user descending' do
84
106
  with_test_platform_for_last_deploys do
85
- expect_actions_executor_runs([proc do |actions, timeout: nil, concurrent: false, log_to_dir: 'run_logs', log_to_stdout: true|
86
- expect(actions).to eq(
87
- 'node1' => { remote_bash: "cd /var/log/deployments && ls -t | head -1 | xargs sed '/===== STDOUT =====/q'" },
88
- 'node2' => { remote_bash: "cd /var/log/deployments && ls -t | head -1 | xargs sed '/===== STDOUT =====/q'" }
89
- )
107
+ expect(test_deployer).to receive(:deployment_info_from).with(%w[node1 node2]) do
90
108
  {
91
- 'node1' => [0, <<~EOS, ''],
92
- date: 2019-08-21 10:12:15
93
- user: admin_user2
94
- services: service1
95
- EOS
96
- 'node2' => [0, <<~EOS, '']
97
- date: 2019-08-22 10:12:15
98
- user: admin_user1
99
- services: service1, service2
100
- EOS
109
+ 'node1' => {
110
+ services: %w[service1],
111
+ deployment_info: {
112
+ repo_name_0: 'platform',
113
+ commit_id_0: 'abcdef1',
114
+ exit_status: 0,
115
+ date: Time.parse('2019-08-21 10:12:15 UTC'),
116
+ user: 'admin_user2'
117
+ },
118
+ exit_status: 0,
119
+ stdout: '',
120
+ stderr: ''
121
+ },
122
+ 'node2' => {
123
+ services: %w[service1 service2],
124
+ deployment_info: {
125
+ repo_name_0: 'platform',
126
+ commit_id_0: 'abcdef2',
127
+ exit_status: 0,
128
+ date: Time.parse('2019-08-22 10:12:15 UTC'),
129
+ user: 'admin_user1'
130
+ },
131
+ exit_status: 0,
132
+ stdout: '',
133
+ stderr: ''
134
+ }
101
135
  }
102
- end])
136
+ end
103
137
  exit_code, stdout, stderr = run 'last_deploys', '--sort-by', 'user_desc'
104
138
  expect(exit_code).to eq 0
105
- expect(stdout).to eq(<<~EOS)
106
- +-------+---------------------+-------------+--------------------+-------+
107
- | Node | Date | Admin | Services | Error |
108
- +-------+---------------------+-------------+--------------------+-------+
109
- | node1 | 2019-08-21 10:12:15 | admin_user2 | service1 | |
110
- | node2 | 2019-08-22 10:12:15 | admin_user1 | service1, service2 | |
111
- +-------+---------------------+-------------+--------------------+-------+
112
- EOS
139
+ expect(stdout).to eq <<~EO_STDOUT
140
+ +-------+-------------------------+-------------+--------------------+-------+
141
+ | Node | Date | Admin | Services | Error |
142
+ +-------+-------------------------+-------------+--------------------+-------+
143
+ | node1 | 2019-08-21 10:12:15 UTC | admin_user2 | service1 | |
144
+ | node2 | 2019-08-22 10:12:15 UTC | admin_user1 | service1, service2 | |
145
+ +-------+-------------------------+-------------+--------------------+-------+
146
+ EO_STDOUT
113
147
  expect(stderr).to eq ''
114
148
  end
115
149
  end
116
150
 
117
151
  it 'displays only the selected nodes' do
118
152
  with_test_platform_for_last_deploys do
119
- expect_actions_executor_runs([proc do |actions, timeout: nil, concurrent: false, log_to_dir: 'run_logs', log_to_stdout: true|
120
- expect(actions).to eq('node1' => { remote_bash: "cd /var/log/deployments && ls -t | head -1 | xargs sed '/===== STDOUT =====/q'" })
153
+ expect(test_deployer).to receive(:deployment_info_from).with(%w[node1]) do
121
154
  {
122
- 'node1' => [0, <<~EOS, ''],
123
- date: 2019-08-21 10:12:15
124
- user: admin_user1
125
- services: service1
126
- EOS
155
+ 'node1' => {
156
+ services: %w[service1],
157
+ deployment_info: {
158
+ repo_name_0: 'platform',
159
+ commit_id_0: 'abcdef1',
160
+ exit_status: 0,
161
+ date: Time.parse('2019-08-21 10:12:15 UTC'),
162
+ user: 'admin_user1'
163
+ },
164
+ exit_status: 0,
165
+ stdout: '',
166
+ stderr: ''
167
+ }
127
168
  }
128
- end])
169
+ end
129
170
  exit_code, stdout, stderr = run 'last_deploys', '--node', 'node1'
130
171
  expect(exit_code).to eq 0
131
- expect(stdout).to eq(<<~EOS)
132
- +-------+---------------------+-------------+----------+-------+
133
- | Node | Date | Admin | Services | Error |
134
- +-------+---------------------+-------------+----------+-------+
135
- | node1 | 2019-08-21 10:12:15 | admin_user1 | service1 | |
136
- +-------+---------------------+-------------+----------+-------+
137
- EOS
172
+ expect(stdout).to eq <<~EO_STDOUT
173
+ +-------+-------------------------+-------------+----------+-------+
174
+ | Node | Date | Admin | Services | Error |
175
+ +-------+-------------------------+-------------+----------+-------+
176
+ | node1 | 2019-08-21 10:12:15 UTC | admin_user1 | service1 | |
177
+ +-------+-------------------------+-------------+----------+-------+
178
+ EO_STDOUT
138
179
  expect(stderr).to eq ''
139
180
  end
140
181
  end
141
182
 
142
183
  it 'displays errors when we can\'t get info from some nodes' do
143
184
  with_test_platform_for_last_deploys do
144
- expect_actions_executor_runs([proc do |actions, timeout: nil, concurrent: false, log_to_dir: 'run_logs', log_to_stdout: true|
145
- expect(actions).to eq(
146
- 'node1' => { remote_bash: "cd /var/log/deployments && ls -t | head -1 | xargs sed '/===== STDOUT =====/q'" },
147
- 'node2' => { remote_bash: "cd /var/log/deployments && ls -t | head -1 | xargs sed '/===== STDOUT =====/q'" }
148
- )
185
+ expect(test_deployer).to receive(:deployment_info_from).with(%w[node1 node2]) do
149
186
  {
150
- 'node1' => [:connection_error, 'Error on stdout', 'Error on stderr'],
151
- 'node2' => [0, <<~EOS, '']
152
- date: 2019-08-22 10:12:15
153
- user: admin_user1
154
- services: service1, service2
155
- EOS
187
+ 'node1' => {
188
+ error: 'Error while getting logs'
189
+ },
190
+ 'node2' => {
191
+ services: %w[service1 service2],
192
+ deployment_info: {
193
+ repo_name_0: 'platform',
194
+ commit_id_0: 'abcdef2',
195
+ exit_status: 0,
196
+ date: Time.parse('2019-08-22 10:12:15 UTC'),
197
+ user: 'admin_user2'
198
+ },
199
+ exit_status: 0,
200
+ stdout: '',
201
+ stderr: ''
202
+ }
156
203
  }
157
- end])
204
+ end
158
205
  exit_code, stdout, stderr = run 'last_deploys', '--sort-by', 'user_desc'
159
206
  expect(exit_code).to eq 0
160
- expect(stdout).to eq(<<~EOS)
161
- +-------+---------------------+-------------+--------------------+-------------------------+
162
- | Node | Date | Admin | Services | Error |
163
- +-------+---------------------+-------------+--------------------+-------------------------+
164
- | node2 | 2019-08-22 10:12:15 | admin_user1 | service1, service2 | |
165
- | node1 | | | | Error: connection_error |
166
- | | | | | Error on stderr |
167
- +-------+---------------------+-------------+--------------------+-------------------------+
168
- EOS
207
+ expect(stdout).to eq <<~EO_STDOUT
208
+ +-------+-------------------------+-------------+--------------------+--------------------------+
209
+ | Node | Date | Admin | Services | Error |
210
+ +-------+-------------------------+-------------+--------------------+--------------------------+
211
+ | node2 | 2019-08-22 10:12:15 UTC | admin_user2 | service1, service2 | |
212
+ | node1 | | | | Error while getting logs |
213
+ +-------+-------------------------+-------------+--------------------+--------------------------+
214
+ EO_STDOUT
169
215
  expect(stderr).to eq ''
170
216
  end
171
217
  end