hybrid_platforms_conductor 32.17.0 → 33.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (283) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +36 -0
  3. data/README.md +6 -3
  4. data/bin/check-node +0 -1
  5. data/bin/deploy +0 -1
  6. data/bin/get_impacted_nodes +0 -1
  7. data/bin/last_deploys +12 -8
  8. data/bin/nodes_to_deploy +6 -6
  9. data/bin/setup +6 -6
  10. data/bin/topograph +1 -1
  11. data/docs/config_dsl.md +45 -1
  12. data/docs/executables.md +6 -7
  13. data/docs/executables/check-node.md +3 -3
  14. data/docs/executables/deploy.md +3 -3
  15. data/docs/executables/dump_nodes_json.md +3 -3
  16. data/docs/executables/test.md +3 -3
  17. data/docs/executables/topograph.md +3 -3
  18. data/docs/gen/mermaid/README.md-0.png +0 -0
  19. data/docs/gen/mermaid/docs/executables/check-node.md-0.png +0 -0
  20. data/docs/gen/mermaid/docs/executables/deploy.md-0.png +0 -0
  21. data/docs/gen/mermaid/docs/executables/free_ips.md-0.png +0 -0
  22. data/docs/gen/mermaid/docs/executables/get_impacted_nodes.md-0.png +0 -0
  23. data/docs/gen/mermaid/docs/executables/last_deploys.md-0.png +0 -0
  24. data/docs/gen/mermaid/docs/executables/nodes_to_deploy.md-0.png +0 -0
  25. data/docs/gen/mermaid/docs/executables/report.md-0.png +0 -0
  26. data/docs/gen/mermaid/docs/executables/run.md-0.png +0 -0
  27. data/docs/gen/mermaid/docs/executables/ssh_config.md-0.png +0 -0
  28. data/docs/gen/mermaid/docs/executables/test.md-0.png +0 -0
  29. data/docs/plugins.md +46 -0
  30. data/docs/plugins/connector/ssh.md +1 -1
  31. data/docs/plugins/log/remote_fs.md +26 -0
  32. data/docs/plugins/secrets_reader/cli.md +31 -0
  33. data/docs/plugins/secrets_reader/thycotic.md +46 -0
  34. data/docs/plugins/test/check_deploy_and_idempotence.md +1 -1
  35. data/docs/plugins/test/connection.md +1 -0
  36. data/docs/plugins/test/deploy_removes_root_access.md +1 -1
  37. data/docs/plugins/test/file_system.md +1 -0
  38. data/docs/plugins/test/hostname.md +1 -0
  39. data/docs/plugins/test/ip.md +1 -0
  40. data/docs/plugins/test/local_users.md +1 -0
  41. data/docs/plugins/test/mounts.md +1 -0
  42. data/docs/plugins/test/orphan_files.md +1 -0
  43. data/docs/plugins/test/ports.md +1 -0
  44. data/docs/plugins/test/spectre.md +1 -0
  45. data/docs/plugins/test/vulnerabilities.md +1 -0
  46. data/lib/hybrid_platforms_conductor/action.rb +4 -4
  47. data/lib/hybrid_platforms_conductor/actions_executor.rb +45 -43
  48. data/lib/hybrid_platforms_conductor/bitbucket.rb +5 -4
  49. data/lib/hybrid_platforms_conductor/cmd_runner.rb +13 -12
  50. data/lib/hybrid_platforms_conductor/cmdb.rb +2 -2
  51. data/lib/hybrid_platforms_conductor/common_config_dsl/bitbucket.rb +2 -1
  52. data/lib/hybrid_platforms_conductor/common_config_dsl/confluence.rb +2 -1
  53. data/lib/hybrid_platforms_conductor/common_config_dsl/file_system_tests.rb +5 -4
  54. data/lib/hybrid_platforms_conductor/common_config_dsl/github.rb +4 -3
  55. data/lib/hybrid_platforms_conductor/common_config_dsl/idempotence_tests.rb +2 -2
  56. data/lib/hybrid_platforms_conductor/config.rb +8 -4
  57. data/lib/hybrid_platforms_conductor/confluence.rb +1 -1
  58. data/lib/hybrid_platforms_conductor/connector.rb +5 -2
  59. data/lib/hybrid_platforms_conductor/core_extensions/cleanroom/fix_kwargs.rb +116 -0
  60. data/lib/hybrid_platforms_conductor/core_extensions/symbol/zero.rb +24 -0
  61. data/lib/hybrid_platforms_conductor/credentials.rb +39 -36
  62. data/lib/hybrid_platforms_conductor/current_dir_monitor.rb +4 -1
  63. data/lib/hybrid_platforms_conductor/deployer.rb +275 -224
  64. data/lib/hybrid_platforms_conductor/executable.rb +20 -15
  65. data/lib/hybrid_platforms_conductor/hpc_plugins/cmdb/config.rb +10 -7
  66. data/lib/hybrid_platforms_conductor/hpc_plugins/cmdb/host_ip.rb +1 -1
  67. data/lib/hybrid_platforms_conductor/hpc_plugins/cmdb/host_keys.rb +2 -2
  68. data/lib/hybrid_platforms_conductor/hpc_plugins/cmdb/platform_handlers.rb +4 -4
  69. data/lib/hybrid_platforms_conductor/hpc_plugins/connector/local.rb +2 -0
  70. data/lib/hybrid_platforms_conductor/hpc_plugins/connector/ssh.rb +45 -49
  71. data/lib/hybrid_platforms_conductor/hpc_plugins/log/my_log_plugin.rb.sample +100 -0
  72. data/lib/hybrid_platforms_conductor/hpc_plugins/log/remote_fs.rb +180 -0
  73. data/lib/hybrid_platforms_conductor/hpc_plugins/platform_handler/serverless_chef.rb +68 -66
  74. data/lib/hybrid_platforms_conductor/hpc_plugins/platform_handler/serverless_chef/dsl_parser.rb +13 -0
  75. data/lib/hybrid_platforms_conductor/hpc_plugins/platform_handler/serverless_chef/recipes_tree_builder.rb +39 -38
  76. data/lib/hybrid_platforms_conductor/hpc_plugins/platform_handler/yaml_inventory.rb +5 -4
  77. data/lib/hybrid_platforms_conductor/hpc_plugins/provisioner/docker.rb +43 -45
  78. data/lib/hybrid_platforms_conductor/hpc_plugins/provisioner/podman.rb +18 -20
  79. data/lib/hybrid_platforms_conductor/hpc_plugins/provisioner/proxmox.rb +118 -117
  80. data/lib/hybrid_platforms_conductor/hpc_plugins/provisioner/proxmox/proxmox_waiter.rb +39 -43
  81. data/lib/hybrid_platforms_conductor/hpc_plugins/provisioner/proxmox/reserve_proxmox_container +9 -13
  82. data/lib/hybrid_platforms_conductor/hpc_plugins/report/confluence.rb +2 -2
  83. data/lib/hybrid_platforms_conductor/hpc_plugins/report/mediawiki.rb +28 -21
  84. data/lib/hybrid_platforms_conductor/hpc_plugins/report/stdout.rb +26 -22
  85. data/lib/hybrid_platforms_conductor/hpc_plugins/secrets_reader/cli.rb +77 -0
  86. data/lib/hybrid_platforms_conductor/hpc_plugins/secrets_reader/my_secrets_reader_plugin.rb.sample +46 -0
  87. data/lib/hybrid_platforms_conductor/hpc_plugins/secrets_reader/thycotic.rb +90 -0
  88. data/lib/hybrid_platforms_conductor/hpc_plugins/test/bitbucket_conf.rb +3 -3
  89. data/lib/hybrid_platforms_conductor/hpc_plugins/test/check_deploy_and_idempotence.rb +4 -2
  90. data/lib/hybrid_platforms_conductor/hpc_plugins/test/connection.rb +3 -1
  91. data/lib/hybrid_platforms_conductor/hpc_plugins/test/deploy_freshness.rb +7 -21
  92. data/lib/hybrid_platforms_conductor/hpc_plugins/test/deploy_removes_root_access.rb +21 -19
  93. data/lib/hybrid_platforms_conductor/hpc_plugins/test/divergence.rb +2 -2
  94. data/lib/hybrid_platforms_conductor/hpc_plugins/test/executables.rb +2 -2
  95. data/lib/hybrid_platforms_conductor/hpc_plugins/test/file_system.rb +21 -22
  96. data/lib/hybrid_platforms_conductor/hpc_plugins/test/file_system_hdfs.rb +19 -21
  97. data/lib/hybrid_platforms_conductor/hpc_plugins/test/github_ci.rb +2 -3
  98. data/lib/hybrid_platforms_conductor/hpc_plugins/test/hostname.rb +3 -1
  99. data/lib/hybrid_platforms_conductor/hpc_plugins/test/idempotence.rb +2 -2
  100. data/lib/hybrid_platforms_conductor/hpc_plugins/test/ip.rb +4 -2
  101. data/lib/hybrid_platforms_conductor/hpc_plugins/test/jenkins_ci_conf.rb +21 -22
  102. data/lib/hybrid_platforms_conductor/hpc_plugins/test/jenkins_ci_masters_ok.rb +10 -12
  103. data/lib/hybrid_platforms_conductor/hpc_plugins/test/linear_strategy.rb +9 -9
  104. data/lib/hybrid_platforms_conductor/hpc_plugins/test/local_users.rb +5 -3
  105. data/lib/hybrid_platforms_conductor/hpc_plugins/test/mounts.rb +5 -3
  106. data/lib/hybrid_platforms_conductor/hpc_plugins/test/orphan_files.rb +13 -10
  107. data/lib/hybrid_platforms_conductor/hpc_plugins/test/ports.rb +5 -3
  108. data/lib/hybrid_platforms_conductor/hpc_plugins/test/private_ips.rb +5 -5
  109. data/lib/hybrid_platforms_conductor/hpc_plugins/test/public_ips.rb +5 -5
  110. data/lib/hybrid_platforms_conductor/hpc_plugins/test/spectre.rb +7 -7
  111. data/lib/hybrid_platforms_conductor/hpc_plugins/test/veids.rb +3 -3
  112. data/lib/hybrid_platforms_conductor/hpc_plugins/test/vulnerabilities.rb +27 -25
  113. data/lib/hybrid_platforms_conductor/hpc_plugins/test_report/confluence.rb +2 -2
  114. data/lib/hybrid_platforms_conductor/hpc_plugins/test_report/stdout.rb +8 -6
  115. data/lib/hybrid_platforms_conductor/io_router.rb +14 -13
  116. data/lib/hybrid_platforms_conductor/json_dumper.rb +2 -2
  117. data/lib/hybrid_platforms_conductor/log.rb +31 -0
  118. data/lib/hybrid_platforms_conductor/logger_helpers.rb +19 -16
  119. data/lib/hybrid_platforms_conductor/nodes_handler.rb +89 -71
  120. data/lib/hybrid_platforms_conductor/parallel_threads.rb +7 -11
  121. data/lib/hybrid_platforms_conductor/platform_handler.rb +7 -7
  122. data/lib/hybrid_platforms_conductor/platforms_handler.rb +5 -3
  123. data/lib/hybrid_platforms_conductor/plugin.rb +2 -2
  124. data/lib/hybrid_platforms_conductor/plugins.rb +14 -8
  125. data/lib/hybrid_platforms_conductor/provisioner.rb +4 -4
  126. data/lib/hybrid_platforms_conductor/report.rb +2 -2
  127. data/lib/hybrid_platforms_conductor/reports_handler.rb +3 -2
  128. data/lib/hybrid_platforms_conductor/secrets_reader.rb +31 -0
  129. data/lib/hybrid_platforms_conductor/services_handler.rb +32 -29
  130. data/lib/hybrid_platforms_conductor/test_only_remote_node.rb +18 -0
  131. data/lib/hybrid_platforms_conductor/test_report.rb +15 -18
  132. data/lib/hybrid_platforms_conductor/tests_runner.rb +116 -118
  133. data/lib/hybrid_platforms_conductor/thycotic.rb +28 -19
  134. data/lib/hybrid_platforms_conductor/topographer.rb +200 -190
  135. data/lib/hybrid_platforms_conductor/topographer/plugins/graphviz.rb +8 -8
  136. data/lib/hybrid_platforms_conductor/topographer/plugins/json.rb +4 -4
  137. data/lib/hybrid_platforms_conductor/version.rb +1 -1
  138. data/spec/hybrid_platforms_conductor_test.rb +33 -12
  139. data/spec/hybrid_platforms_conductor_test/api/actions_executor/actions/bash_spec.rb +18 -11
  140. data/spec/hybrid_platforms_conductor_test/api/actions_executor/actions/interactive_spec.rb +2 -2
  141. data/spec/hybrid_platforms_conductor_test/api/actions_executor/actions/remote_bash_spec.rb +32 -21
  142. data/spec/hybrid_platforms_conductor_test/api/actions_executor/actions/ruby_spec.rb +75 -49
  143. data/spec/hybrid_platforms_conductor_test/api/actions_executor/actions/scp_spec.rb +27 -15
  144. data/spec/hybrid_platforms_conductor_test/api/actions_executor/actions_spec.rb +90 -59
  145. data/spec/hybrid_platforms_conductor_test/api/actions_executor/connection_spec.rb +46 -44
  146. data/spec/hybrid_platforms_conductor_test/api/actions_executor/connectors/local/connectable_nodes_spec.rb +12 -8
  147. data/spec/hybrid_platforms_conductor_test/api/actions_executor/connectors/local/remote_actions_spec.rb +4 -7
  148. data/spec/hybrid_platforms_conductor_test/api/actions_executor/connectors/ssh/cli_options_spec.rb +21 -22
  149. data/spec/hybrid_platforms_conductor_test/api/actions_executor/connectors/ssh/config_dsl_spec.rb +23 -24
  150. data/spec/hybrid_platforms_conductor_test/api/actions_executor/connectors/ssh/connectable_nodes_spec.rb +10 -6
  151. data/spec/hybrid_platforms_conductor_test/api/actions_executor/connectors/ssh/connections_spec.rb +106 -75
  152. data/spec/hybrid_platforms_conductor_test/api/actions_executor/connectors/ssh/global_helpers_spec.rb +145 -126
  153. data/spec/hybrid_platforms_conductor_test/api/actions_executor/connectors/ssh/node_helpers_spec.rb +3 -3
  154. data/spec/hybrid_platforms_conductor_test/api/actions_executor/connectors/ssh/remote_actions_spec.rb +29 -25
  155. data/spec/hybrid_platforms_conductor_test/api/actions_executor/logging_spec.rb +167 -142
  156. data/spec/hybrid_platforms_conductor_test/api/actions_executor/parallel_spec.rb +272 -244
  157. data/spec/hybrid_platforms_conductor_test/api/actions_executor/timeout_spec.rb +16 -16
  158. data/spec/hybrid_platforms_conductor_test/api/cmd_runner_spec.rb +36 -36
  159. data/spec/hybrid_platforms_conductor_test/api/config_spec.rb +24 -22
  160. data/spec/hybrid_platforms_conductor_test/api/deployer/check_spec.rb +4 -2
  161. data/spec/hybrid_platforms_conductor_test/api/deployer/config_dsl_spec.rb +43 -5
  162. data/spec/hybrid_platforms_conductor_test/api/deployer/deploy_spec.rb +199 -216
  163. data/spec/hybrid_platforms_conductor_test/api/deployer/log_plugins/remote_fs_spec.rb +223 -0
  164. data/spec/hybrid_platforms_conductor_test/api/deployer/parse_deploy_output_spec.rb +55 -59
  165. data/spec/hybrid_platforms_conductor_test/api/deployer/provisioner_spec.rb +36 -62
  166. data/spec/hybrid_platforms_conductor_test/api/deployer/provisioners/podman_spec.rb +17 -17
  167. data/spec/hybrid_platforms_conductor_test/api/deployer/provisioners/proxmox/config_dsl_spec.rb +4 -4
  168. data/spec/hybrid_platforms_conductor_test/api/deployer/provisioners/proxmox/create_spec.rb +44 -51
  169. data/spec/hybrid_platforms_conductor_test/api/deployer/provisioners/proxmox/destroy_spec.rb +3 -3
  170. data/spec/hybrid_platforms_conductor_test/api/deployer/provisioners/proxmox/ip_spec.rb +12 -16
  171. data/spec/hybrid_platforms_conductor_test/api/deployer/provisioners/proxmox/reserve_proxmox_container/destroy_vm_spec.rb +31 -19
  172. data/spec/hybrid_platforms_conductor_test/api/deployer/provisioners/proxmox/reserve_proxmox_container/expired_containers_spec.rb +324 -266
  173. data/spec/hybrid_platforms_conductor_test/api/deployer/provisioners/proxmox/reserve_proxmox_container/ips_assignment_spec.rb +89 -61
  174. data/spec/hybrid_platforms_conductor_test/api/deployer/provisioners/proxmox/reserve_proxmox_container/other_lxc_containers_resources_spec.rb +117 -93
  175. data/spec/hybrid_platforms_conductor_test/api/deployer/provisioners/proxmox/reserve_proxmox_container/pve_node_resources_spec.rb +71 -54
  176. data/spec/hybrid_platforms_conductor_test/api/deployer/provisioners/proxmox/reserve_proxmox_container/retries_spec.rb +10 -8
  177. data/spec/hybrid_platforms_conductor_test/api/deployer/provisioners/proxmox/reserve_proxmox_container/vm_ids_assignment_spec.rb +80 -60
  178. data/spec/hybrid_platforms_conductor_test/api/deployer/provisioners/proxmox/start_spec.rb +1 -1
  179. data/spec/hybrid_platforms_conductor_test/api/deployer/provisioners/proxmox/state_spec.rb +1 -1
  180. data/spec/hybrid_platforms_conductor_test/api/deployer/provisioners/proxmox/stop_spec.rb +1 -1
  181. data/spec/hybrid_platforms_conductor_test/api/deployer/secrets_reader_plugins/cli_spec.rb +64 -0
  182. data/spec/hybrid_platforms_conductor_test/api/deployer/secrets_reader_plugins/thycotic_spec.rb +268 -0
  183. data/spec/hybrid_platforms_conductor_test/api/nodes_handler/cmdbs/config_spec.rb +8 -10
  184. data/spec/hybrid_platforms_conductor_test/api/nodes_handler/cmdbs/host_ip_spec.rb +33 -24
  185. data/spec/hybrid_platforms_conductor_test/api/nodes_handler/cmdbs/host_keys_spec.rb +64 -51
  186. data/spec/hybrid_platforms_conductor_test/api/nodes_handler/cmdbs/platform_handlers_spec.rb +3 -3
  187. data/spec/hybrid_platforms_conductor_test/api/nodes_handler/cmdbs_plugins_api_spec.rb +50 -51
  188. data/spec/hybrid_platforms_conductor_test/api/nodes_handler/common_spec.rb +91 -81
  189. data/spec/hybrid_platforms_conductor_test/api/nodes_handler/config_dsl_spec.rb +14 -16
  190. data/spec/hybrid_platforms_conductor_test/api/nodes_handler/git_diff_impacts_spec.rb +51 -75
  191. data/spec/hybrid_platforms_conductor_test/api/nodes_handler/nodes_selectors_spec.rb +35 -26
  192. data/spec/hybrid_platforms_conductor_test/api/nodes_handler/platform_handlers_plugins_api_spec.rb +24 -16
  193. data/spec/hybrid_platforms_conductor_test/api/nodes_handler/several_platforms_spec.rb +29 -19
  194. data/spec/hybrid_platforms_conductor_test/api/platform_handler_spec.rb +4 -4
  195. data/spec/hybrid_platforms_conductor_test/api/platform_handlers/serverless_chef/config_dsl_spec.rb +2 -2
  196. data/spec/hybrid_platforms_conductor_test/api/platform_handlers/serverless_chef/deploy_output_parsing_spec.rb +6 -6
  197. data/spec/hybrid_platforms_conductor_test/api/platform_handlers/serverless_chef/diff_impacts_spec.rb +57 -99
  198. data/spec/hybrid_platforms_conductor_test/api/platform_handlers/serverless_chef/inventory_spec.rb +4 -4
  199. data/spec/hybrid_platforms_conductor_test/api/platform_handlers/serverless_chef/packaging_spec.rb +32 -35
  200. data/spec/hybrid_platforms_conductor_test/api/platform_handlers/serverless_chef/services_deployment_spec.rb +10 -10
  201. data/spec/hybrid_platforms_conductor_test/api/platforms_handler_spec.rb +38 -27
  202. data/spec/hybrid_platforms_conductor_test/api/plugins_spec.rb +46 -52
  203. data/spec/hybrid_platforms_conductor_test/api/reports_handler_spec.rb +2 -2
  204. data/spec/hybrid_platforms_conductor_test/api/services_handler/actions_to_deploy_spec.rb +90 -58
  205. data/spec/hybrid_platforms_conductor_test/api/services_handler/deploy_allowed_spec.rb +38 -34
  206. data/spec/hybrid_platforms_conductor_test/api/services_handler/log_info_spec.rb +11 -9
  207. data/spec/hybrid_platforms_conductor_test/api/services_handler/package_spec.rb +193 -171
  208. data/spec/hybrid_platforms_conductor_test/api/services_handler/parse_deploy_output_spec.rb +66 -54
  209. data/spec/hybrid_platforms_conductor_test/api/services_handler/prepare_for_deploy_spec.rb +147 -133
  210. data/spec/hybrid_platforms_conductor_test/api/tests_runner/common_spec.rb +69 -49
  211. data/spec/hybrid_platforms_conductor_test/api/tests_runner/global_spec.rb +5 -4
  212. data/spec/hybrid_platforms_conductor_test/api/tests_runner/node_check_spec.rb +8 -5
  213. data/spec/hybrid_platforms_conductor_test/api/tests_runner/node_spec.rb +8 -5
  214. data/spec/hybrid_platforms_conductor_test/api/tests_runner/node_ssh_spec.rb +30 -27
  215. data/spec/hybrid_platforms_conductor_test/api/tests_runner/platform_spec.rb +12 -9
  216. data/spec/hybrid_platforms_conductor_test/api/tests_runner/reports_spec.rb +48 -47
  217. data/spec/hybrid_platforms_conductor_test/api/tests_runner/test_plugins/bitbucket_conf_spec.rb +5 -5
  218. data/spec/hybrid_platforms_conductor_test/api/tests_runner/test_plugins/github_ci_spec.rb +5 -5
  219. data/spec/hybrid_platforms_conductor_test/api/tests_runner/test_reports_plugins/confluence_spec.rb +5 -5
  220. data/spec/hybrid_platforms_conductor_test/cmdb_plugins/test_cmdb.rb +9 -9
  221. data/spec/hybrid_platforms_conductor_test/cmdb_plugins/{test_cmdb2.rb → test_cmdb_2.rb} +6 -6
  222. data/spec/hybrid_platforms_conductor_test/cmdb_plugins/test_cmdb_others.rb +3 -3
  223. data/spec/hybrid_platforms_conductor_test/cmdb_plugins/{test_cmdb_others2.rb → test_cmdb_others_2.rb} +2 -2
  224. data/spec/hybrid_platforms_conductor_test/docs_spec.rb +1 -1
  225. data/spec/hybrid_platforms_conductor_test/executables/{check-node_spec.rb → check_node_spec.rb} +4 -6
  226. data/spec/hybrid_platforms_conductor_test/executables/deploy_spec.rb +4 -6
  227. data/spec/hybrid_platforms_conductor_test/executables/get_impacted_nodes_spec.rb +76 -77
  228. data/spec/hybrid_platforms_conductor_test/executables/last_deploys_spec.rb +159 -113
  229. data/spec/hybrid_platforms_conductor_test/executables/nodes_to_deploy_spec.rb +299 -160
  230. data/spec/hybrid_platforms_conductor_test/executables/options/actions_executor_spec.rb +4 -6
  231. data/spec/hybrid_platforms_conductor_test/executables/options/cmd_runner_spec.rb +3 -5
  232. data/spec/hybrid_platforms_conductor_test/executables/options/common_spec.rb +8 -8
  233. data/spec/hybrid_platforms_conductor_test/executables/options/deployer_spec.rb +12 -196
  234. data/spec/hybrid_platforms_conductor_test/executables/options/nodes_handler_spec.rb +9 -10
  235. data/spec/hybrid_platforms_conductor_test/executables/options/nodes_selectors_spec.rb +9 -10
  236. data/spec/hybrid_platforms_conductor_test/executables/options/reports_handler_spec.rb +1 -1
  237. data/spec/hybrid_platforms_conductor_test/executables/options/tests_runner_spec.rb +22 -22
  238. data/spec/hybrid_platforms_conductor_test/executables/report_spec.rb +22 -16
  239. data/spec/hybrid_platforms_conductor_test/executables/run_spec.rb +32 -32
  240. data/spec/hybrid_platforms_conductor_test/executables/ssh_config_spec.rb +7 -9
  241. data/spec/hybrid_platforms_conductor_test/executables/test_spec.rb +3 -5
  242. data/spec/hybrid_platforms_conductor_test/helpers/actions_executor_helpers.rb +2 -2
  243. data/spec/hybrid_platforms_conductor_test/helpers/cmd_runner_helpers.rb +4 -3
  244. data/spec/hybrid_platforms_conductor_test/helpers/cmdb_helpers.rb +2 -2
  245. data/spec/hybrid_platforms_conductor_test/helpers/config_helpers.rb +1 -1
  246. data/spec/hybrid_platforms_conductor_test/helpers/connector_ssh_helpers.rb +12 -13
  247. data/spec/hybrid_platforms_conductor_test/helpers/deployer_helpers.rb +245 -56
  248. data/spec/hybrid_platforms_conductor_test/helpers/executables_helpers.rb +11 -11
  249. data/spec/hybrid_platforms_conductor_test/helpers/nodes_handler_helpers.rb +1 -1
  250. data/spec/hybrid_platforms_conductor_test/helpers/platforms_handler_helpers.rb +39 -28
  251. data/spec/hybrid_platforms_conductor_test/helpers/plugins_helpers.rb +1 -1
  252. data/spec/hybrid_platforms_conductor_test/helpers/provisioner_proxmox_helpers.rb +86 -111
  253. data/spec/hybrid_platforms_conductor_test/helpers/reports_handler_helpers.rb +1 -1
  254. data/spec/hybrid_platforms_conductor_test/helpers/serverless_chef_helpers.rb +3 -3
  255. data/spec/hybrid_platforms_conductor_test/helpers/services_handler_helpers.rb +1 -1
  256. data/spec/hybrid_platforms_conductor_test/helpers/tests_runner_helpers.rb +1 -1
  257. data/spec/hybrid_platforms_conductor_test/mocked_lib/my_test_gem/hpc_plugins/test_plugin_type/{test_plugin_id1.rb → test_plugin_id_1.rb} +0 -0
  258. data/spec/hybrid_platforms_conductor_test/mocked_lib/my_test_gem/hpc_plugins/test_plugin_type/{test_plugin_id2.rb → test_plugin_id_2.rb} +0 -0
  259. data/spec/hybrid_platforms_conductor_test/mocked_lib/my_test_gem2/sub_dir/hpc_plugins/test_plugin_type/{test_plugin_id3.rb → test_plugin_id_3.rb} +0 -0
  260. data/spec/hybrid_platforms_conductor_test/mocked_lib/my_test_gem2/sub_dir/hpc_plugins/{test_plugin_type2/test_plugin_id4.rb → test_plugin_type_2/test_plugin_id_4.rb} +0 -0
  261. data/spec/hybrid_platforms_conductor_test/platform_handler_plugins/test.rb +1 -1
  262. data/spec/hybrid_platforms_conductor_test/platform_handler_plugins/{test2.rb → test_2.rb} +0 -0
  263. data/spec/hybrid_platforms_conductor_test/rubocop_spec.rb +31 -0
  264. data/spec/hybrid_platforms_conductor_test/serverless_chef_repositories/1_node/nodes/node.json +3 -3
  265. data/spec/hybrid_platforms_conductor_test/serverless_chef_repositories/data_bags/nodes/node.json +3 -3
  266. data/spec/hybrid_platforms_conductor_test/serverless_chef_repositories/recipes/cookbooks/test_cookbook_2/libraries/default.rb +1 -0
  267. data/spec/hybrid_platforms_conductor_test/serverless_chef_repositories/several_cookbooks/other_cookbooks/test_cookbook_2/libraries/default.rb +1 -0
  268. data/spec/hybrid_platforms_conductor_test/shared_examples/deployer.rb +952 -0
  269. data/spec/hybrid_platforms_conductor_test/test_connector.rb +3 -3
  270. data/spec/hybrid_platforms_conductor_test/test_log_no_read_plugin.rb +84 -0
  271. data/spec/hybrid_platforms_conductor_test/test_log_plugin.rb +105 -0
  272. data/spec/hybrid_platforms_conductor_test/test_plugins/global.rb +1 -0
  273. data/spec/hybrid_platforms_conductor_test/test_plugins/node.rb +1 -0
  274. data/spec/hybrid_platforms_conductor_test/test_plugins/node_check.rb +1 -0
  275. data/spec/hybrid_platforms_conductor_test/test_plugins/platform.rb +1 -0
  276. data/spec/hybrid_platforms_conductor_test/test_plugins/several_checks.rb +2 -2
  277. data/spec/hybrid_platforms_conductor_test/test_secrets_reader_plugin.rb +45 -0
  278. data/spec/hybrid_platforms_conductor_test/tests_report_plugin.rb +5 -6
  279. data/spec/spec_helper.rb +17 -18
  280. data/tools/check_md +16 -20
  281. data/tools/generate_mermaid +1 -1
  282. metadata +195 -144
  283. data/spec/hybrid_platforms_conductor_test/helpers/deployer_test_helpers.rb +0 -916
@@ -1,3 +1,5 @@
1
+ require 'hybrid_platforms_conductor/test_only_remote_node'
2
+
1
3
  module HybridPlatformsConductor
2
4
 
3
5
  module HpcPlugins
@@ -5,7 +7,7 @@ module HybridPlatformsConductor
5
7
  module Test
6
8
 
7
9
  # Test that the hostname is correct
8
- class Hostname < HybridPlatformsConductor::Test
10
+ class Hostname < TestOnlyRemoteNode
9
11
 
10
12
  # Check my_test_plugin.rb.sample documentation for signature details.
11
13
  def test_on_node
@@ -13,7 +13,7 @@ module HybridPlatformsConductor
13
13
  # Don't forget to add the testadmin private key in your SSH agent if you run this test locally.
14
14
  class Idempotence < TestByService
15
15
 
16
- self.extend_config_dsl_with CommonConfigDsl::IdempotenceTests, :init_idempotence_tests
16
+ extend_config_dsl_with CommonConfigDsl::IdempotenceTests, :init_idempotence_tests
17
17
 
18
18
  # Check my_test_plugin.rb.sample documentation for signature details.
19
19
  def test_for_node
@@ -21,7 +21,7 @@ module HybridPlatformsConductor
21
21
  # First deploy as root
22
22
  deployer.nbr_retries_on_error = 3
23
23
  exit_status, _stdout, _stderr = deployer.deploy_on(@node)[@node]
24
- if exit_status == 0
24
+ if exit_status.zero?
25
25
  # As it's possible sshd has to be restarted because of a change in its conf, restart the container.
26
26
  # Otherwise you'll get the following error upon reconnection:
27
27
  # System is booting up. See pam_nologin(8)
@@ -1,3 +1,5 @@
1
+ require 'hybrid_platforms_conductor/test_only_remote_node'
2
+
1
3
  module HybridPlatformsConductor
2
4
 
3
5
  module HpcPlugins
@@ -5,7 +7,7 @@ module HybridPlatformsConductor
5
7
  module Test
6
8
 
7
9
  # Test that the private IP address is correct
8
- class Ip < HybridPlatformsConductor::Test
10
+ class Ip < TestOnlyRemoteNode
9
11
 
10
12
  # Check my_test_plugin.rb.sample documentation for signature details.
11
13
  def test_on_node
@@ -17,7 +19,7 @@ module HybridPlatformsConductor
17
19
  else
18
20
  private_ips = @nodes_handler.get_private_ips_of @node
19
21
  if private_ips
20
- host_ips = stdout.first.split(' ').select { |ip| ip =~ /^172\.16\.\d+\.\d+$/ }.sort
22
+ host_ips = stdout.first.split.select { |ip| ip =~ /^172\.16\.\d+\.\d+$/ }.sort
21
23
  ref_ips = private_ips.sort
22
24
  assert_equal(
23
25
  host_ips,
@@ -1,3 +1,4 @@
1
+ require 'open-uri'
1
2
  require 'nokogiri'
2
3
  require 'hybrid_platforms_conductor/credentials'
3
4
  require 'hybrid_platforms_conductor/common_config_dsl/bitbucket'
@@ -11,7 +12,7 @@ module HybridPlatformsConductor
11
12
  # Check that all repositories have a correct Jenkins CI configuration.
12
13
  class JenkinsCiConf < HybridPlatformsConductor::Test
13
14
 
14
- self.extend_config_dsl_with CommonConfigDsl::Bitbucket, :init_bitbucket
15
+ extend_config_dsl_with CommonConfigDsl::Bitbucket, :init_bitbucket
15
16
 
16
17
  # Check my_test_plugin.rb.sample documentation for signature details.
17
18
  def test
@@ -21,27 +22,25 @@ module HybridPlatformsConductor
21
22
  else
22
23
  Credentials.with_credentials_for(:jenkins_ci, @logger, @logger_stderr, url: repo_info[:jenkins_ci_url]) do |jenkins_user, jenkins_password|
23
24
  # Get its config
24
- begin
25
- doc = Nokogiri::XML(open("#{repo_info[:jenkins_ci_url]}/config.xml", http_basic_authentication: [jenkins_user, jenkins_password]).read)
26
- # Check that this job builds the correct Bitbucket repository
27
- assert_equal(
28
- doc.xpath('/org.jenkinsci.plugins.workflow.multibranch.WorkflowMultiBranchProject/sources/data/jenkins.branch.BranchSource/source/serverUrl').text,
29
- bitbucket.bitbucket_url,
30
- "Job #{repo_info[:jenkins_ci_url]} does not build repository from Bitbucket"
31
- )
32
- assert_equal(
33
- doc.xpath('/org.jenkinsci.plugins.workflow.multibranch.WorkflowMultiBranchProject/sources/data/jenkins.branch.BranchSource/source/repoOwner').text.downcase,
34
- repo_info[:project].downcase,
35
- "Job #{repo_info[:jenkins_ci_url]} does not build repository from project #{repo_info[:project]}"
36
- )
37
- assert_equal(
38
- doc.xpath('/org.jenkinsci.plugins.workflow.multibranch.WorkflowMultiBranchProject/sources/data/jenkins.branch.BranchSource/source/repository').text,
39
- repo_info[:name],
40
- "Job #{repo_info[:jenkins_ci_url]} does not build repository named #{repo_info[:name]}"
41
- )
42
- rescue
43
- error "Error while checking Jenkins CI job for #{repo_info[:project]}/#{repo_info[:name]} from URL #{repo_info[:jenkins_ci_url]}: #{$!}"
44
- end
25
+ doc = Nokogiri::XML(URI.parse("#{repo_info[:jenkins_ci_url]}/config.xml").open(http_basic_authentication: [jenkins_user, jenkins_password]).read)
26
+ # Check that this job builds the correct Bitbucket repository
27
+ assert_equal(
28
+ doc.xpath('/org.jenkinsci.plugins.workflow.multibranch.WorkflowMultiBranchProject/sources/data/jenkins.branch.BranchSource/source/serverUrl').text,
29
+ bitbucket.bitbucket_url,
30
+ "Job #{repo_info[:jenkins_ci_url]} does not build repository from Bitbucket"
31
+ )
32
+ assert_equal(
33
+ doc.xpath('/org.jenkinsci.plugins.workflow.multibranch.WorkflowMultiBranchProject/sources/data/jenkins.branch.BranchSource/source/repoOwner').text.downcase,
34
+ repo_info[:project].downcase,
35
+ "Job #{repo_info[:jenkins_ci_url]} does not build repository from project #{repo_info[:project]}"
36
+ )
37
+ assert_equal(
38
+ doc.xpath('/org.jenkinsci.plugins.workflow.multibranch.WorkflowMultiBranchProject/sources/data/jenkins.branch.BranchSource/source/repository').text,
39
+ repo_info[:name],
40
+ "Job #{repo_info[:jenkins_ci_url]} does not build repository named #{repo_info[:name]}"
41
+ )
42
+ rescue
43
+ error "Error while checking Jenkins CI job for #{repo_info[:project]}/#{repo_info[:name]} from URL #{repo_info[:jenkins_ci_url]}: #{$ERROR_INFO}"
45
44
  end
46
45
  end
47
46
  end
@@ -11,7 +11,7 @@ module HybridPlatformsConductor
11
11
  # Check that all repositories have a successful master branch on a Jenkins CI
12
12
  class JenkinsCiMastersOk < HybridPlatformsConductor::Test
13
13
 
14
- self.extend_config_dsl_with CommonConfigDsl::Bitbucket, :init_bitbucket
14
+ extend_config_dsl_with CommonConfigDsl::Bitbucket, :init_bitbucket
15
15
 
16
16
  SUCCESS_STATUSES = [
17
17
  # Add nil as the status of a currently running job (which is always the case for hybrid-platforms) is null
@@ -29,17 +29,15 @@ module HybridPlatformsConductor
29
29
  else
30
30
  master_info_url = "#{repo_info[:jenkins_ci_url]}/job/master/api/json"
31
31
  Credentials.with_credentials_for(:jenkins_ci, @logger, @logger_stderr, url: master_info_url) do |jenkins_user, jenkins_password|
32
- begin
33
- # Get the master branch info from the API
34
- master_info = JSON.parse(open(master_info_url, http_basic_authentication: [jenkins_user, jenkins_password]).read)
35
- # Get the last build's URL
36
- last_build_info_url = "#{master_info['lastBuild']['url']}/api/json"
37
- last_build_info = JSON.parse(open(last_build_info_url, http_basic_authentication: [jenkins_user, jenkins_password]).read)
38
- log_debug "Build info for #{master_info_url}:\n#{JSON.pretty_generate(last_build_info)}"
39
- error "Last build for job #{repo_info[:project]}/#{repo_info[:name]} is in status #{last_build_info['result']}: #{master_info['lastBuild']['url']}" unless SUCCESS_STATUSES.include?(last_build_info['result'])
40
- rescue
41
- error "Error while checking Jenkins CI job for #{repo_info[:project]}/#{repo_info[:name]} from URL #{master_info_url}: #{$!}"
42
- end
32
+ # Get the master branch info from the API
33
+ master_info = JSON.parse(URI.parse(master_info_url).open(http_basic_authentication: [jenkins_user, jenkins_password]).read)
34
+ # Get the last build's URL
35
+ last_build_info_url = "#{master_info['lastBuild']['url']}/api/json"
36
+ last_build_info = JSON.parse(URI.parse(last_build_info_url).open(http_basic_authentication: [jenkins_user, jenkins_password]).read)
37
+ log_debug "Build info for #{master_info_url}:\n#{JSON.pretty_generate(last_build_info)}"
38
+ error "Last build for job #{repo_info[:project]}/#{repo_info[:name]} is in status #{last_build_info['result']}: #{master_info['lastBuild']['url']}" unless SUCCESS_STATUSES.include?(last_build_info['result'])
39
+ rescue
40
+ error "Error while checking Jenkins CI job for #{repo_info[:project]}/#{repo_info[:name]} from URL #{master_info_url}: #{$ERROR_INFO}"
43
41
  end
44
42
  end
45
43
  end
@@ -17,7 +17,7 @@ module HybridPlatformsConductor
17
17
  log_to_stdout: log_debug?
18
18
  )
19
19
  stdout.split("\n").each do |merge_commit_id|
20
- _exit_status, stdout, _stderr = @cmd_runner.run_cmd(<<~EOS, log_to_stdout: log_debug?, no_exception: true, expected_code: [0, 1])
20
+ _exit_status, stdout, _stderr = @cmd_runner.run_cmd(<<~EO_BASH, log_to_stdout: log_debug?, no_exception: true, expected_code: [0, 1])
21
21
  cd #{@platform.repository_path} && \
22
22
  git --no-pager log \
23
23
  $(git merge-base \
@@ -27,14 +27,14 @@ module HybridPlatformsConductor
27
27
  --pretty=format:\"%H\" \
28
28
  --graph \
29
29
  | grep '|'
30
- EOS
31
- if !stdout.empty?
32
- _exit_status, stdout, _stderr = @cmd_runner.run_cmd(
33
- "cd #{@platform.repository_path} && git --no-pager log #{merge_commit_id} --pretty=format:%aI",
34
- log_to_stdout: log_debug?
35
- )
36
- error "Git history is not linear because of Merge commit #{merge_commit_id}" if Time.now - Time.parse(stdout.strip) < LOOKING_PERIOD
37
- end
30
+ EO_BASH
31
+ next if stdout.empty?
32
+
33
+ _exit_status, stdout, _stderr = @cmd_runner.run_cmd(
34
+ "cd #{@platform.repository_path} && git --no-pager log #{merge_commit_id} --pretty=format:%aI",
35
+ log_to_stdout: log_debug?
36
+ )
37
+ error "Git history is not linear because of Merge commit #{merge_commit_id}" if Time.now - Time.parse(stdout.strip) < LOOKING_PERIOD
38
38
  end
39
39
  end
40
40
 
@@ -1,3 +1,5 @@
1
+ require 'hybrid_platforms_conductor/test_only_remote_node'
2
+
1
3
  module HybridPlatformsConductor
2
4
 
3
5
  module HpcPlugins
@@ -5,7 +7,7 @@ module HybridPlatformsConductor
5
7
  module Test
6
8
 
7
9
  # Test that the node's local users
8
- class LocalUsers < HybridPlatformsConductor::Test
10
+ class LocalUsers < TestOnlyRemoteNode
9
11
 
10
12
  # Config DSL extension for this test plugin
11
13
  module ConfigDslExtension
@@ -22,7 +24,7 @@ module HybridPlatformsConductor
22
24
  # Array< Hash<Symbol, Object> >
23
25
  attr_reader :users_that_should_be_present
24
26
 
25
- # Initialize the DSL
27
+ # Initialize the DSL
26
28
  def init_local_users_test
27
29
  @users_that_should_be_absent = []
28
30
  @users_that_should_be_present = []
@@ -52,7 +54,7 @@ module HybridPlatformsConductor
52
54
 
53
55
  end
54
56
 
55
- self.extend_config_dsl_with ConfigDslExtension, :init_local_users_test
57
+ extend_config_dsl_with ConfigDslExtension, :init_local_users_test
56
58
 
57
59
  # Check my_test_plugin.rb.sample documentation for signature details.
58
60
  def test_on_node
@@ -1,3 +1,5 @@
1
+ require 'hybrid_platforms_conductor/test_only_remote_node'
2
+
1
3
  module HybridPlatformsConductor
2
4
 
3
5
  module HpcPlugins
@@ -5,7 +7,7 @@ module HybridPlatformsConductor
5
7
  module Test
6
8
 
7
9
  # Various tests on mounts
8
- class Mounts < HybridPlatformsConductor::Test
10
+ class Mounts < TestOnlyRemoteNode
9
11
 
10
12
  # Config DSL extension for this test plugin
11
13
  module ConfigDslExtension
@@ -22,7 +24,7 @@ module HybridPlatformsConductor
22
24
  # Array< Hash<Symbol, Object> >
23
25
  attr_reader :mount_rules_that_should_be_present
24
26
 
25
- # Initialize the DSL
27
+ # Initialize the DSL
26
28
  def init_mounts_test
27
29
  @mount_rules_that_should_be_absent = []
28
30
  @mount_rules_that_should_be_present = []
@@ -56,7 +58,7 @@ module HybridPlatformsConductor
56
58
 
57
59
  end
58
60
 
59
- self.extend_config_dsl_with ConfigDslExtension, :init_mounts_test
61
+ extend_config_dsl_with ConfigDslExtension, :init_mounts_test
60
62
 
61
63
  # Check my_test_plugin.rb.sample documentation for signature details.
62
64
  def test_on_node
@@ -1,3 +1,5 @@
1
+ require 'hybrid_platforms_conductor/test_only_remote_node'
2
+
1
3
  module HybridPlatformsConductor
2
4
 
3
5
  module HpcPlugins
@@ -5,7 +7,7 @@ module HybridPlatformsConductor
5
7
  module Test
6
8
 
7
9
  # Test that the node has no orphan files
8
- class OrphanFiles < HybridPlatformsConductor::Test
10
+ class OrphanFiles < TestOnlyRemoteNode
9
11
 
10
12
  # Config DSL extension for this test plugin
11
13
  module ConfigDslExtension
@@ -16,7 +18,7 @@ module HybridPlatformsConductor
16
18
  # Array< Hash<Symbol, Object> >
17
19
  attr_reader :ignored_orphan_files_paths
18
20
 
19
- # Initialize the DSL
21
+ # Initialize the DSL
20
22
  def init_orphan_files_test
21
23
  # List of paths to ignore info. Each info has the following properties:
22
24
  # * *nodes_selectors_stack* (Array<Object>): Stack of nodes selectors impacted by this rule
@@ -32,13 +34,13 @@ module HybridPlatformsConductor
32
34
  def ignore_orphan_files_from(paths_to_ignore)
33
35
  @ignored_orphan_files_paths << {
34
36
  ignored_paths: paths_to_ignore.is_a?(Array) ? paths_to_ignore : [paths_to_ignore],
35
- nodes_selectors_stack: current_nodes_selectors_stack,
37
+ nodes_selectors_stack: current_nodes_selectors_stack
36
38
  }
37
39
  end
38
40
 
39
41
  end
40
42
 
41
- self.extend_config_dsl_with ConfigDslExtension, :init_orphan_files_test
43
+ extend_config_dsl_with ConfigDslExtension, :init_orphan_files_test
42
44
 
43
45
  # List of directories to always ignore
44
46
  DIRECTORIES_TO_ALWAYS_IGNORE = [
@@ -51,12 +53,13 @@ module HybridPlatformsConductor
51
53
  def test_on_node
52
54
  {
53
55
  # TODO: Access the user correctly when the user notion will be moved out of the ssh connector
54
- "#{@deployer.instance_variable_get(:@actions_executor).connector(:ssh).ssh_user == 'root' ? '' : "#{@nodes_handler.sudo_on(@node)} "}/usr/bin/find / \\( #{@nodes_handler.
55
- select_confs_for_node(@node, @config.ignored_orphan_files_paths).
56
- inject(DIRECTORIES_TO_ALWAYS_IGNORE) { |merged_paths, paths_to_ignore_info| merged_paths + paths_to_ignore_info[:ignored_paths] }.
57
- uniq.
58
- map { |dir| "-path #{dir}" }.
59
- join(' -o ')
56
+ "#{@deployer.instance_variable_get(:@actions_executor).connector(:ssh).ssh_user == 'root' ? '' : "#{@nodes_handler.sudo_on(@node)} "}/usr/bin/find / \\( #{
57
+ @nodes_handler.
58
+ select_confs_for_node(@node, @config.ignored_orphan_files_paths).
59
+ inject(DIRECTORIES_TO_ALWAYS_IGNORE) { |merged_paths, paths_to_ignore_info| merged_paths + paths_to_ignore_info[:ignored_paths] }.
60
+ uniq.
61
+ map { |dir| "-path #{dir}" }.
62
+ join(' -o ')
60
63
  } \\) -prune -o -nogroup -nouser -print" => {
61
64
  validator: proc do |stdout|
62
65
  assert_equal stdout, [], "#{stdout.size} orphan files found.", stdout.join("\n")
@@ -1,3 +1,5 @@
1
+ require 'hybrid_platforms_conductor/test_only_remote_node'
2
+
1
3
  module HybridPlatformsConductor
2
4
 
3
5
  module HpcPlugins
@@ -5,7 +7,7 @@ module HybridPlatformsConductor
5
7
  module Test
6
8
 
7
9
  # Various tests on ports
8
- class Ports < HybridPlatformsConductor::Test
10
+ class Ports < TestOnlyRemoteNode
9
11
 
10
12
  # Config DSL extension for this test plugin
11
13
  module ConfigDslExtension
@@ -19,7 +21,7 @@ module HybridPlatformsConductor
19
21
  # Array< Hash<Symbol, Object> >
20
22
  attr_reader :ports_rules
21
23
 
22
- # Initialize the DSL
24
+ # Initialize the DSL
23
25
  def init_ports_test
24
26
  @ports_rules = []
25
27
  end
@@ -50,7 +52,7 @@ module HybridPlatformsConductor
50
52
 
51
53
  end
52
54
 
53
- self.extend_config_dsl_with ConfigDslExtension, :init_ports_test
55
+ extend_config_dsl_with ConfigDslExtension, :init_ports_test
54
56
 
55
57
  # Check my_test_plugin.rb.sample documentation for signature details.
56
58
  def test_for_node
@@ -11,15 +11,15 @@ module HybridPlatformsConductor
11
11
  def test
12
12
  # Get a map of private IPs per node
13
13
  @nodes_handler.prefetch_metadata_of @nodes_handler.known_nodes, :private_ips
14
- private_ips = Hash[@nodes_handler.
14
+ private_ips = @nodes_handler.
15
15
  known_nodes.
16
- map { |node| [node, @nodes_handler.get_private_ips_of(node) || []] }
17
- ]
16
+ map { |node| [node, @nodes_handler.get_private_ips_of(node) || []] }.
17
+ to_h
18
18
 
19
19
  # Check there are no duplicates
20
20
  nodes_per_private_ip = {}
21
- private_ips.each do |node, private_ips|
22
- private_ips.each do |private_ip|
21
+ private_ips.each do |node, node_private_ips|
22
+ node_private_ips.each do |private_ip|
23
23
  nodes_per_private_ip[private_ip] = [] unless nodes_per_private_ip.key?(private_ip)
24
24
  nodes_per_private_ip[private_ip] << node
25
25
  end
@@ -11,15 +11,15 @@ module HybridPlatformsConductor
11
11
  def test
12
12
  # Get a map of public IPs per node
13
13
  @nodes_handler.prefetch_metadata_of @nodes_handler.known_nodes, :public_ips
14
- public_ips = Hash[@nodes_handler.
14
+ public_ips = @nodes_handler.
15
15
  known_nodes.
16
- map { |node| [node, @nodes_handler.get_public_ips_of(node) || []] }
17
- ]
16
+ map { |node| [node, @nodes_handler.get_public_ips_of(node) || []] }.
17
+ to_h
18
18
 
19
19
  # Check there are no duplicates
20
20
  nodes_per_public_ip = {}
21
- public_ips.each do |node, public_ips|
22
- public_ips.each do |public_ip|
21
+ public_ips.each do |node, node_public_ips|
22
+ node_public_ips.each do |public_ip|
23
23
  nodes_per_public_ip[public_ip] = [] unless nodes_per_public_ip.key?(public_ip)
24
24
  nodes_per_public_ip[public_ip] << node
25
25
  end
@@ -1,3 +1,5 @@
1
+ require 'hybrid_platforms_conductor/test_only_remote_node'
2
+
1
3
  module HybridPlatformsConductor
2
4
 
3
5
  module HpcPlugins
@@ -5,7 +7,7 @@ module HybridPlatformsConductor
5
7
  module Test
6
8
 
7
9
  # Test that the vulnerabilities Spectre and Meltdown are patched
8
- class Spectre < HybridPlatformsConductor::Test
10
+ class Spectre < TestOnlyRemoteNode
9
11
 
10
12
  VULNERABILITIES_TO_CHECK = {
11
13
  'CVE-2017-5753' => 'Spectre Variant 1',
@@ -15,11 +17,11 @@ module HybridPlatformsConductor
15
17
 
16
18
  # Check my_test_plugin.rb.sample documentation for signature details.
17
19
  def test_on_node
18
- spectre_cmd = <<~EOS
20
+ spectre_cmd = <<~EO_BASH
19
21
  #{@deployer.instance_variable_get(:@actions_executor).connector(:ssh).ssh_user == 'root' ? '' : "#{@nodes_handler.sudo_on(@node)} "}/bin/bash <<'EOAction'
20
22
  #{File.read("#{__dir__}/spectre-meltdown-checker.sh")}
21
23
  EOAction
22
- EOS
24
+ EO_BASH
23
25
  {
24
26
  spectre_cmd => {
25
27
  validator: proc do |stdout|
@@ -29,13 +31,11 @@ module HybridPlatformsConductor
29
31
  if status_idx.nil?
30
32
  error "Unable to find vulnerability section #{id}"
31
33
  else
32
- while !stdout[status_idx].nil? && !(stdout[status_idx] =~ /STATUS:[^A-Z]+([A-Z ]+)/)
33
- status_idx += 1
34
- end
34
+ status_idx += 1 while !stdout[status_idx].nil? && stdout[status_idx] !~ /STATUS:[^A-Z]+([A-Z ]+)/
35
35
  if stdout[status_idx].nil?
36
36
  error "Unable to find vulnerability status for #{id}"
37
37
  else
38
- status = $1.strip
38
+ status = Regexp.last_match(1).strip
39
39
  error "Status for #{name}: #{status}" if status != 'NOT VULNERABLE'
40
40
  end
41
41
  end
@@ -11,10 +11,10 @@ module HybridPlatformsConductor
11
11
  def test
12
12
  # Get a map of VEIDs per node
13
13
  @nodes_handler.prefetch_metadata_of @nodes_handler.known_nodes, :veid
14
- veids = Hash[@nodes_handler.
14
+ veids = @nodes_handler.
15
15
  known_nodes.
16
- map { |node| [node, @nodes_handler.get_veid_of(node) ? @nodes_handler.get_veid_of(node).to_i : nil] }
17
- ]
16
+ map { |node| [node, @nodes_handler.get_veid_of(node) ? @nodes_handler.get_veid_of(node).to_i : nil] }.
17
+ to_h
18
18
 
19
19
  # Check there are no duplicates
20
20
  veids.group_by { |_node, veid| veid }.each do |veid, nodes|