hybrid_platforms_conductor 32.17.1 → 33.0.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (268) 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/log/remote_fs.md +26 -0
  31. data/docs/plugins/secrets_reader/cli.md +31 -0
  32. data/docs/plugins/secrets_reader/thycotic.md +46 -0
  33. data/lib/hybrid_platforms_conductor/action.rb +4 -4
  34. data/lib/hybrid_platforms_conductor/actions_executor.rb +45 -43
  35. data/lib/hybrid_platforms_conductor/bitbucket.rb +5 -4
  36. data/lib/hybrid_platforms_conductor/cmd_runner.rb +13 -12
  37. data/lib/hybrid_platforms_conductor/cmdb.rb +2 -2
  38. data/lib/hybrid_platforms_conductor/common_config_dsl/bitbucket.rb +2 -1
  39. data/lib/hybrid_platforms_conductor/common_config_dsl/confluence.rb +2 -1
  40. data/lib/hybrid_platforms_conductor/common_config_dsl/file_system_tests.rb +5 -4
  41. data/lib/hybrid_platforms_conductor/common_config_dsl/github.rb +4 -3
  42. data/lib/hybrid_platforms_conductor/common_config_dsl/idempotence_tests.rb +2 -2
  43. data/lib/hybrid_platforms_conductor/config.rb +8 -4
  44. data/lib/hybrid_platforms_conductor/confluence.rb +1 -1
  45. data/lib/hybrid_platforms_conductor/connector.rb +5 -2
  46. data/lib/hybrid_platforms_conductor/core_extensions/cleanroom/fix_kwargs.rb +116 -0
  47. data/lib/hybrid_platforms_conductor/core_extensions/symbol/zero.rb +24 -0
  48. data/lib/hybrid_platforms_conductor/credentials.rb +39 -36
  49. data/lib/hybrid_platforms_conductor/current_dir_monitor.rb +4 -1
  50. data/lib/hybrid_platforms_conductor/deployer.rb +275 -225
  51. data/lib/hybrid_platforms_conductor/executable.rb +20 -15
  52. data/lib/hybrid_platforms_conductor/hpc_plugins/cmdb/config.rb +10 -7
  53. data/lib/hybrid_platforms_conductor/hpc_plugins/cmdb/host_ip.rb +1 -1
  54. data/lib/hybrid_platforms_conductor/hpc_plugins/cmdb/host_keys.rb +2 -2
  55. data/lib/hybrid_platforms_conductor/hpc_plugins/cmdb/platform_handlers.rb +4 -4
  56. data/lib/hybrid_platforms_conductor/hpc_plugins/connector/local.rb +2 -0
  57. data/lib/hybrid_platforms_conductor/hpc_plugins/connector/ssh.rb +45 -49
  58. data/lib/hybrid_platforms_conductor/hpc_plugins/log/my_log_plugin.rb.sample +100 -0
  59. data/lib/hybrid_platforms_conductor/hpc_plugins/log/remote_fs.rb +180 -0
  60. data/lib/hybrid_platforms_conductor/hpc_plugins/platform_handler/serverless_chef.rb +68 -66
  61. data/lib/hybrid_platforms_conductor/hpc_plugins/platform_handler/serverless_chef/dsl_parser.rb +13 -0
  62. data/lib/hybrid_platforms_conductor/hpc_plugins/platform_handler/serverless_chef/recipes_tree_builder.rb +39 -38
  63. data/lib/hybrid_platforms_conductor/hpc_plugins/platform_handler/yaml_inventory.rb +5 -4
  64. data/lib/hybrid_platforms_conductor/hpc_plugins/provisioner/docker.rb +43 -45
  65. data/lib/hybrid_platforms_conductor/hpc_plugins/provisioner/podman.rb +18 -20
  66. data/lib/hybrid_platforms_conductor/hpc_plugins/provisioner/proxmox.rb +119 -118
  67. data/lib/hybrid_platforms_conductor/hpc_plugins/provisioner/proxmox/proxmox_waiter.rb +39 -43
  68. data/lib/hybrid_platforms_conductor/hpc_plugins/provisioner/proxmox/reserve_proxmox_container +9 -13
  69. data/lib/hybrid_platforms_conductor/hpc_plugins/report/confluence.rb +2 -2
  70. data/lib/hybrid_platforms_conductor/hpc_plugins/report/mediawiki.rb +28 -21
  71. data/lib/hybrid_platforms_conductor/hpc_plugins/report/stdout.rb +26 -22
  72. data/lib/hybrid_platforms_conductor/hpc_plugins/secrets_reader/cli.rb +77 -0
  73. data/lib/hybrid_platforms_conductor/hpc_plugins/secrets_reader/my_secrets_reader_plugin.rb.sample +46 -0
  74. data/lib/hybrid_platforms_conductor/hpc_plugins/secrets_reader/thycotic.rb +90 -0
  75. data/lib/hybrid_platforms_conductor/hpc_plugins/test/bitbucket_conf.rb +3 -3
  76. data/lib/hybrid_platforms_conductor/hpc_plugins/test/check_deploy_and_idempotence.rb +4 -2
  77. data/lib/hybrid_platforms_conductor/hpc_plugins/test/deploy_freshness.rb +7 -21
  78. data/lib/hybrid_platforms_conductor/hpc_plugins/test/deploy_removes_root_access.rb +21 -19
  79. data/lib/hybrid_platforms_conductor/hpc_plugins/test/divergence.rb +2 -2
  80. data/lib/hybrid_platforms_conductor/hpc_plugins/test/executables.rb +2 -2
  81. data/lib/hybrid_platforms_conductor/hpc_plugins/test/file_system.rb +19 -21
  82. data/lib/hybrid_platforms_conductor/hpc_plugins/test/file_system_hdfs.rb +19 -21
  83. data/lib/hybrid_platforms_conductor/hpc_plugins/test/github_ci.rb +2 -3
  84. data/lib/hybrid_platforms_conductor/hpc_plugins/test/idempotence.rb +2 -2
  85. data/lib/hybrid_platforms_conductor/hpc_plugins/test/ip.rb +1 -1
  86. data/lib/hybrid_platforms_conductor/hpc_plugins/test/jenkins_ci_conf.rb +21 -22
  87. data/lib/hybrid_platforms_conductor/hpc_plugins/test/jenkins_ci_masters_ok.rb +10 -12
  88. data/lib/hybrid_platforms_conductor/hpc_plugins/test/linear_strategy.rb +9 -9
  89. data/lib/hybrid_platforms_conductor/hpc_plugins/test/local_users.rb +2 -2
  90. data/lib/hybrid_platforms_conductor/hpc_plugins/test/mounts.rb +2 -2
  91. data/lib/hybrid_platforms_conductor/hpc_plugins/test/orphan_files.rb +10 -9
  92. data/lib/hybrid_platforms_conductor/hpc_plugins/test/ports.rb +2 -2
  93. data/lib/hybrid_platforms_conductor/hpc_plugins/test/private_ips.rb +5 -5
  94. data/lib/hybrid_platforms_conductor/hpc_plugins/test/public_ips.rb +5 -5
  95. data/lib/hybrid_platforms_conductor/hpc_plugins/test/spectre.rb +4 -6
  96. data/lib/hybrid_platforms_conductor/hpc_plugins/test/veids.rb +3 -3
  97. data/lib/hybrid_platforms_conductor/hpc_plugins/test/vulnerabilities.rb +25 -24
  98. data/lib/hybrid_platforms_conductor/hpc_plugins/test_report/confluence.rb +2 -2
  99. data/lib/hybrid_platforms_conductor/hpc_plugins/test_report/stdout.rb +8 -6
  100. data/lib/hybrid_platforms_conductor/io_router.rb +14 -13
  101. data/lib/hybrid_platforms_conductor/json_dumper.rb +2 -2
  102. data/lib/hybrid_platforms_conductor/log.rb +31 -0
  103. data/lib/hybrid_platforms_conductor/logger_helpers.rb +19 -16
  104. data/lib/hybrid_platforms_conductor/nodes_handler.rb +89 -71
  105. data/lib/hybrid_platforms_conductor/parallel_threads.rb +7 -11
  106. data/lib/hybrid_platforms_conductor/platform_handler.rb +7 -7
  107. data/lib/hybrid_platforms_conductor/platforms_handler.rb +5 -3
  108. data/lib/hybrid_platforms_conductor/plugin.rb +2 -2
  109. data/lib/hybrid_platforms_conductor/plugins.rb +14 -8
  110. data/lib/hybrid_platforms_conductor/provisioner.rb +4 -4
  111. data/lib/hybrid_platforms_conductor/report.rb +2 -2
  112. data/lib/hybrid_platforms_conductor/reports_handler.rb +3 -2
  113. data/lib/hybrid_platforms_conductor/secrets_reader.rb +31 -0
  114. data/lib/hybrid_platforms_conductor/services_handler.rb +32 -29
  115. data/lib/hybrid_platforms_conductor/test_only_remote_node.rb +1 -1
  116. data/lib/hybrid_platforms_conductor/test_report.rb +15 -18
  117. data/lib/hybrid_platforms_conductor/tests_runner.rb +116 -118
  118. data/lib/hybrid_platforms_conductor/thycotic.rb +28 -19
  119. data/lib/hybrid_platforms_conductor/topographer.rb +200 -190
  120. data/lib/hybrid_platforms_conductor/topographer/plugins/graphviz.rb +8 -8
  121. data/lib/hybrid_platforms_conductor/topographer/plugins/json.rb +4 -4
  122. data/lib/hybrid_platforms_conductor/version.rb +1 -1
  123. data/spec/hybrid_platforms_conductor_test.rb +51 -12
  124. data/spec/hybrid_platforms_conductor_test/api/actions_executor/actions/bash_spec.rb +18 -11
  125. data/spec/hybrid_platforms_conductor_test/api/actions_executor/actions/interactive_spec.rb +2 -2
  126. data/spec/hybrid_platforms_conductor_test/api/actions_executor/actions/remote_bash_spec.rb +32 -21
  127. data/spec/hybrid_platforms_conductor_test/api/actions_executor/actions/ruby_spec.rb +75 -49
  128. data/spec/hybrid_platforms_conductor_test/api/actions_executor/actions/scp_spec.rb +27 -15
  129. data/spec/hybrid_platforms_conductor_test/api/actions_executor/actions_spec.rb +90 -59
  130. data/spec/hybrid_platforms_conductor_test/api/actions_executor/connection_spec.rb +46 -44
  131. data/spec/hybrid_platforms_conductor_test/api/actions_executor/connectors/local/connectable_nodes_spec.rb +12 -8
  132. data/spec/hybrid_platforms_conductor_test/api/actions_executor/connectors/local/remote_actions_spec.rb +4 -7
  133. data/spec/hybrid_platforms_conductor_test/api/actions_executor/connectors/ssh/cli_options_spec.rb +21 -22
  134. data/spec/hybrid_platforms_conductor_test/api/actions_executor/connectors/ssh/config_dsl_spec.rb +23 -24
  135. data/spec/hybrid_platforms_conductor_test/api/actions_executor/connectors/ssh/connectable_nodes_spec.rb +10 -6
  136. data/spec/hybrid_platforms_conductor_test/api/actions_executor/connectors/ssh/connections_spec.rb +106 -75
  137. data/spec/hybrid_platforms_conductor_test/api/actions_executor/connectors/ssh/global_helpers_spec.rb +145 -126
  138. data/spec/hybrid_platforms_conductor_test/api/actions_executor/connectors/ssh/node_helpers_spec.rb +3 -3
  139. data/spec/hybrid_platforms_conductor_test/api/actions_executor/connectors/ssh/remote_actions_spec.rb +29 -25
  140. data/spec/hybrid_platforms_conductor_test/api/actions_executor/logging_spec.rb +167 -142
  141. data/spec/hybrid_platforms_conductor_test/api/actions_executor/parallel_spec.rb +272 -244
  142. data/spec/hybrid_platforms_conductor_test/api/actions_executor/timeout_spec.rb +16 -16
  143. data/spec/hybrid_platforms_conductor_test/api/cmd_runner_spec.rb +36 -36
  144. data/spec/hybrid_platforms_conductor_test/api/config_spec.rb +24 -22
  145. data/spec/hybrid_platforms_conductor_test/api/deployer/check_spec.rb +4 -2
  146. data/spec/hybrid_platforms_conductor_test/api/deployer/config_dsl_spec.rb +43 -5
  147. data/spec/hybrid_platforms_conductor_test/api/deployer/deploy_spec.rb +199 -216
  148. data/spec/hybrid_platforms_conductor_test/api/deployer/log_plugins/remote_fs_spec.rb +223 -0
  149. data/spec/hybrid_platforms_conductor_test/api/deployer/parse_deploy_output_spec.rb +55 -59
  150. data/spec/hybrid_platforms_conductor_test/api/deployer/provisioner_spec.rb +36 -62
  151. data/spec/hybrid_platforms_conductor_test/api/deployer/provisioners/podman_spec.rb +17 -17
  152. data/spec/hybrid_platforms_conductor_test/api/deployer/provisioners/proxmox/config_dsl_spec.rb +4 -4
  153. data/spec/hybrid_platforms_conductor_test/api/deployer/provisioners/proxmox/create_spec.rb +44 -51
  154. data/spec/hybrid_platforms_conductor_test/api/deployer/provisioners/proxmox/destroy_spec.rb +3 -3
  155. data/spec/hybrid_platforms_conductor_test/api/deployer/provisioners/proxmox/ip_spec.rb +12 -16
  156. data/spec/hybrid_platforms_conductor_test/api/deployer/provisioners/proxmox/reserve_proxmox_container/destroy_vm_spec.rb +31 -19
  157. data/spec/hybrid_platforms_conductor_test/api/deployer/provisioners/proxmox/reserve_proxmox_container/expired_containers_spec.rb +324 -266
  158. data/spec/hybrid_platforms_conductor_test/api/deployer/provisioners/proxmox/reserve_proxmox_container/ips_assignment_spec.rb +89 -61
  159. data/spec/hybrid_platforms_conductor_test/api/deployer/provisioners/proxmox/reserve_proxmox_container/other_lxc_containers_resources_spec.rb +117 -93
  160. data/spec/hybrid_platforms_conductor_test/api/deployer/provisioners/proxmox/reserve_proxmox_container/pve_node_resources_spec.rb +71 -54
  161. data/spec/hybrid_platforms_conductor_test/api/deployer/provisioners/proxmox/reserve_proxmox_container/retries_spec.rb +10 -8
  162. data/spec/hybrid_platforms_conductor_test/api/deployer/provisioners/proxmox/reserve_proxmox_container/vm_ids_assignment_spec.rb +80 -60
  163. data/spec/hybrid_platforms_conductor_test/api/deployer/provisioners/proxmox/start_spec.rb +1 -1
  164. data/spec/hybrid_platforms_conductor_test/api/deployer/provisioners/proxmox/state_spec.rb +1 -1
  165. data/spec/hybrid_platforms_conductor_test/api/deployer/provisioners/proxmox/stop_spec.rb +1 -1
  166. data/spec/hybrid_platforms_conductor_test/api/deployer/secrets_reader_plugins/cli_spec.rb +64 -0
  167. data/spec/hybrid_platforms_conductor_test/api/deployer/secrets_reader_plugins/thycotic_spec.rb +268 -0
  168. data/spec/hybrid_platforms_conductor_test/api/nodes_handler/cmdbs/config_spec.rb +8 -10
  169. data/spec/hybrid_platforms_conductor_test/api/nodes_handler/cmdbs/host_ip_spec.rb +33 -24
  170. data/spec/hybrid_platforms_conductor_test/api/nodes_handler/cmdbs/host_keys_spec.rb +64 -51
  171. data/spec/hybrid_platforms_conductor_test/api/nodes_handler/cmdbs/platform_handlers_spec.rb +3 -3
  172. data/spec/hybrid_platforms_conductor_test/api/nodes_handler/cmdbs_plugins_api_spec.rb +50 -51
  173. data/spec/hybrid_platforms_conductor_test/api/nodes_handler/common_spec.rb +91 -81
  174. data/spec/hybrid_platforms_conductor_test/api/nodes_handler/config_dsl_spec.rb +14 -16
  175. data/spec/hybrid_platforms_conductor_test/api/nodes_handler/git_diff_impacts_spec.rb +51 -75
  176. data/spec/hybrid_platforms_conductor_test/api/nodes_handler/nodes_selectors_spec.rb +35 -26
  177. data/spec/hybrid_platforms_conductor_test/api/nodes_handler/platform_handlers_plugins_api_spec.rb +24 -16
  178. data/spec/hybrid_platforms_conductor_test/api/nodes_handler/several_platforms_spec.rb +29 -19
  179. data/spec/hybrid_platforms_conductor_test/api/platform_handler_spec.rb +4 -4
  180. data/spec/hybrid_platforms_conductor_test/api/platform_handlers/serverless_chef/config_dsl_spec.rb +2 -2
  181. data/spec/hybrid_platforms_conductor_test/api/platform_handlers/serverless_chef/deploy_output_parsing_spec.rb +6 -6
  182. data/spec/hybrid_platforms_conductor_test/api/platform_handlers/serverless_chef/diff_impacts_spec.rb +57 -99
  183. data/spec/hybrid_platforms_conductor_test/api/platform_handlers/serverless_chef/inventory_spec.rb +4 -4
  184. data/spec/hybrid_platforms_conductor_test/api/platform_handlers/serverless_chef/packaging_spec.rb +32 -35
  185. data/spec/hybrid_platforms_conductor_test/api/platform_handlers/serverless_chef/services_deployment_spec.rb +10 -10
  186. data/spec/hybrid_platforms_conductor_test/api/platforms_handler_spec.rb +38 -27
  187. data/spec/hybrid_platforms_conductor_test/api/plugins_spec.rb +46 -52
  188. data/spec/hybrid_platforms_conductor_test/api/reports_handler_spec.rb +2 -2
  189. data/spec/hybrid_platforms_conductor_test/api/services_handler/actions_to_deploy_spec.rb +90 -58
  190. data/spec/hybrid_platforms_conductor_test/api/services_handler/deploy_allowed_spec.rb +38 -34
  191. data/spec/hybrid_platforms_conductor_test/api/services_handler/log_info_spec.rb +11 -9
  192. data/spec/hybrid_platforms_conductor_test/api/services_handler/package_spec.rb +193 -171
  193. data/spec/hybrid_platforms_conductor_test/api/services_handler/parse_deploy_output_spec.rb +66 -54
  194. data/spec/hybrid_platforms_conductor_test/api/services_handler/prepare_for_deploy_spec.rb +147 -133
  195. data/spec/hybrid_platforms_conductor_test/api/tests_runner/common_spec.rb +69 -49
  196. data/spec/hybrid_platforms_conductor_test/api/tests_runner/global_spec.rb +5 -4
  197. data/spec/hybrid_platforms_conductor_test/api/tests_runner/node_check_spec.rb +8 -5
  198. data/spec/hybrid_platforms_conductor_test/api/tests_runner/node_spec.rb +8 -5
  199. data/spec/hybrid_platforms_conductor_test/api/tests_runner/node_ssh_spec.rb +30 -27
  200. data/spec/hybrid_platforms_conductor_test/api/tests_runner/platform_spec.rb +12 -9
  201. data/spec/hybrid_platforms_conductor_test/api/tests_runner/reports_spec.rb +48 -47
  202. data/spec/hybrid_platforms_conductor_test/api/tests_runner/test_plugins/bitbucket_conf_spec.rb +5 -5
  203. data/spec/hybrid_platforms_conductor_test/api/tests_runner/test_plugins/github_ci_spec.rb +5 -5
  204. data/spec/hybrid_platforms_conductor_test/api/tests_runner/test_reports_plugins/confluence_spec.rb +5 -5
  205. data/spec/hybrid_platforms_conductor_test/cmdb_plugins/test_cmdb.rb +9 -9
  206. data/spec/hybrid_platforms_conductor_test/cmdb_plugins/{test_cmdb2.rb → test_cmdb_2.rb} +6 -6
  207. data/spec/hybrid_platforms_conductor_test/cmdb_plugins/test_cmdb_others.rb +3 -3
  208. data/spec/hybrid_platforms_conductor_test/cmdb_plugins/{test_cmdb_others2.rb → test_cmdb_others_2.rb} +2 -2
  209. data/spec/hybrid_platforms_conductor_test/docs_spec.rb +1 -1
  210. data/spec/hybrid_platforms_conductor_test/executables/{check-node_spec.rb → check_node_spec.rb} +4 -6
  211. data/spec/hybrid_platforms_conductor_test/executables/deploy_spec.rb +4 -6
  212. data/spec/hybrid_platforms_conductor_test/executables/get_impacted_nodes_spec.rb +76 -77
  213. data/spec/hybrid_platforms_conductor_test/executables/last_deploys_spec.rb +159 -113
  214. data/spec/hybrid_platforms_conductor_test/executables/nodes_to_deploy_spec.rb +299 -160
  215. data/spec/hybrid_platforms_conductor_test/executables/options/actions_executor_spec.rb +4 -6
  216. data/spec/hybrid_platforms_conductor_test/executables/options/cmd_runner_spec.rb +3 -5
  217. data/spec/hybrid_platforms_conductor_test/executables/options/common_spec.rb +8 -8
  218. data/spec/hybrid_platforms_conductor_test/executables/options/deployer_spec.rb +12 -196
  219. data/spec/hybrid_platforms_conductor_test/executables/options/nodes_handler_spec.rb +9 -10
  220. data/spec/hybrid_platforms_conductor_test/executables/options/nodes_selectors_spec.rb +9 -10
  221. data/spec/hybrid_platforms_conductor_test/executables/options/reports_handler_spec.rb +1 -1
  222. data/spec/hybrid_platforms_conductor_test/executables/options/tests_runner_spec.rb +22 -22
  223. data/spec/hybrid_platforms_conductor_test/executables/report_spec.rb +22 -16
  224. data/spec/hybrid_platforms_conductor_test/executables/run_spec.rb +32 -32
  225. data/spec/hybrid_platforms_conductor_test/executables/ssh_config_spec.rb +7 -9
  226. data/spec/hybrid_platforms_conductor_test/executables/test_spec.rb +3 -5
  227. data/spec/hybrid_platforms_conductor_test/helpers/actions_executor_helpers.rb +2 -2
  228. data/spec/hybrid_platforms_conductor_test/helpers/cmd_runner_helpers.rb +4 -3
  229. data/spec/hybrid_platforms_conductor_test/helpers/cmdb_helpers.rb +2 -2
  230. data/spec/hybrid_platforms_conductor_test/helpers/config_helpers.rb +1 -1
  231. data/spec/hybrid_platforms_conductor_test/helpers/connector_ssh_helpers.rb +12 -13
  232. data/spec/hybrid_platforms_conductor_test/helpers/deployer_helpers.rb +245 -56
  233. data/spec/hybrid_platforms_conductor_test/helpers/executables_helpers.rb +11 -11
  234. data/spec/hybrid_platforms_conductor_test/helpers/nodes_handler_helpers.rb +1 -1
  235. data/spec/hybrid_platforms_conductor_test/helpers/platforms_handler_helpers.rb +39 -28
  236. data/spec/hybrid_platforms_conductor_test/helpers/plugins_helpers.rb +1 -1
  237. data/spec/hybrid_platforms_conductor_test/helpers/provisioner_proxmox_helpers.rb +86 -111
  238. data/spec/hybrid_platforms_conductor_test/helpers/reports_handler_helpers.rb +1 -1
  239. data/spec/hybrid_platforms_conductor_test/helpers/serverless_chef_helpers.rb +3 -3
  240. data/spec/hybrid_platforms_conductor_test/helpers/services_handler_helpers.rb +1 -1
  241. data/spec/hybrid_platforms_conductor_test/helpers/tests_runner_helpers.rb +1 -1
  242. 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
  243. 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
  244. 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
  245. 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
  246. data/spec/hybrid_platforms_conductor_test/platform_handler_plugins/test.rb +1 -1
  247. data/spec/hybrid_platforms_conductor_test/platform_handler_plugins/{test2.rb → test_2.rb} +0 -0
  248. data/spec/hybrid_platforms_conductor_test/rubocop_spec.rb +31 -0
  249. data/spec/hybrid_platforms_conductor_test/serverless_chef_repositories/1_node/nodes/node.json +3 -3
  250. data/spec/hybrid_platforms_conductor_test/serverless_chef_repositories/data_bags/nodes/node.json +3 -3
  251. data/spec/hybrid_platforms_conductor_test/serverless_chef_repositories/recipes/cookbooks/test_cookbook_2/libraries/default.rb +1 -0
  252. data/spec/hybrid_platforms_conductor_test/serverless_chef_repositories/several_cookbooks/other_cookbooks/test_cookbook_2/libraries/default.rb +1 -0
  253. data/spec/hybrid_platforms_conductor_test/shared_examples/deployer.rb +952 -0
  254. data/spec/hybrid_platforms_conductor_test/test_connector.rb +4 -3
  255. data/spec/hybrid_platforms_conductor_test/test_log_no_read_plugin.rb +84 -0
  256. data/spec/hybrid_platforms_conductor_test/test_log_plugin.rb +105 -0
  257. data/spec/hybrid_platforms_conductor_test/test_plugins/global.rb +1 -0
  258. data/spec/hybrid_platforms_conductor_test/test_plugins/node.rb +1 -0
  259. data/spec/hybrid_platforms_conductor_test/test_plugins/node_check.rb +1 -0
  260. data/spec/hybrid_platforms_conductor_test/test_plugins/platform.rb +1 -0
  261. data/spec/hybrid_platforms_conductor_test/test_plugins/several_checks.rb +2 -2
  262. data/spec/hybrid_platforms_conductor_test/test_secrets_reader_plugin.rb +45 -0
  263. data/spec/hybrid_platforms_conductor_test/tests_report_plugin.rb +5 -6
  264. data/spec/spec_helper.rb +17 -18
  265. data/tools/check_md +16 -20
  266. data/tools/generate_mermaid +1 -1
  267. metadata +194 -144
  268. data/spec/hybrid_platforms_conductor_test/helpers/deployer_test_helpers.rb +0 -916
@@ -19,7 +19,7 @@ module HybridPlatformsConductor
19
19
  else
20
20
  private_ips = @nodes_handler.get_private_ips_of @node
21
21
  if private_ips
22
- 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
23
23
  ref_ips = private_ips.sort
24
24
  assert_equal(
25
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
 
@@ -24,7 +24,7 @@ module HybridPlatformsConductor
24
24
  # Array< Hash<Symbol, Object> >
25
25
  attr_reader :users_that_should_be_present
26
26
 
27
- # Initialize the DSL
27
+ # Initialize the DSL
28
28
  def init_local_users_test
29
29
  @users_that_should_be_absent = []
30
30
  @users_that_should_be_present = []
@@ -54,7 +54,7 @@ module HybridPlatformsConductor
54
54
 
55
55
  end
56
56
 
57
- self.extend_config_dsl_with ConfigDslExtension, :init_local_users_test
57
+ extend_config_dsl_with ConfigDslExtension, :init_local_users_test
58
58
 
59
59
  # Check my_test_plugin.rb.sample documentation for signature details.
60
60
  def test_on_node
@@ -24,7 +24,7 @@ module HybridPlatformsConductor
24
24
  # Array< Hash<Symbol, Object> >
25
25
  attr_reader :mount_rules_that_should_be_present
26
26
 
27
- # Initialize the DSL
27
+ # Initialize the DSL
28
28
  def init_mounts_test
29
29
  @mount_rules_that_should_be_absent = []
30
30
  @mount_rules_that_should_be_present = []
@@ -58,7 +58,7 @@ module HybridPlatformsConductor
58
58
 
59
59
  end
60
60
 
61
- self.extend_config_dsl_with ConfigDslExtension, :init_mounts_test
61
+ extend_config_dsl_with ConfigDslExtension, :init_mounts_test
62
62
 
63
63
  # Check my_test_plugin.rb.sample documentation for signature details.
64
64
  def test_on_node
@@ -18,7 +18,7 @@ module HybridPlatformsConductor
18
18
  # Array< Hash<Symbol, Object> >
19
19
  attr_reader :ignored_orphan_files_paths
20
20
 
21
- # Initialize the DSL
21
+ # Initialize the DSL
22
22
  def init_orphan_files_test
23
23
  # List of paths to ignore info. Each info has the following properties:
24
24
  # * *nodes_selectors_stack* (Array<Object>): Stack of nodes selectors impacted by this rule
@@ -34,13 +34,13 @@ module HybridPlatformsConductor
34
34
  def ignore_orphan_files_from(paths_to_ignore)
35
35
  @ignored_orphan_files_paths << {
36
36
  ignored_paths: paths_to_ignore.is_a?(Array) ? paths_to_ignore : [paths_to_ignore],
37
- nodes_selectors_stack: current_nodes_selectors_stack,
37
+ nodes_selectors_stack: current_nodes_selectors_stack
38
38
  }
39
39
  end
40
40
 
41
41
  end
42
42
 
43
- self.extend_config_dsl_with ConfigDslExtension, :init_orphan_files_test
43
+ extend_config_dsl_with ConfigDslExtension, :init_orphan_files_test
44
44
 
45
45
  # List of directories to always ignore
46
46
  DIRECTORIES_TO_ALWAYS_IGNORE = [
@@ -53,12 +53,13 @@ module HybridPlatformsConductor
53
53
  def test_on_node
54
54
  {
55
55
  # TODO: Access the user correctly when the user notion will be moved out of the ssh connector
56
- "#{@deployer.instance_variable_get(:@actions_executor).connector(:ssh).ssh_user == 'root' ? '' : "#{@nodes_handler.sudo_on(@node)} "}/usr/bin/find / \\( #{@nodes_handler.
57
- select_confs_for_node(@node, @config.ignored_orphan_files_paths).
58
- inject(DIRECTORIES_TO_ALWAYS_IGNORE) { |merged_paths, paths_to_ignore_info| merged_paths + paths_to_ignore_info[:ignored_paths] }.
59
- uniq.
60
- map { |dir| "-path #{dir}" }.
61
- 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 ')
62
63
  } \\) -prune -o -nogroup -nouser -print" => {
63
64
  validator: proc do |stdout|
64
65
  assert_equal stdout, [], "#{stdout.size} orphan files found.", stdout.join("\n")
@@ -21,7 +21,7 @@ module HybridPlatformsConductor
21
21
  # Array< Hash<Symbol, Object> >
22
22
  attr_reader :ports_rules
23
23
 
24
- # Initialize the DSL
24
+ # Initialize the DSL
25
25
  def init_ports_test
26
26
  @ports_rules = []
27
27
  end
@@ -52,7 +52,7 @@ module HybridPlatformsConductor
52
52
 
53
53
  end
54
54
 
55
- self.extend_config_dsl_with ConfigDslExtension, :init_ports_test
55
+ extend_config_dsl_with ConfigDslExtension, :init_ports_test
56
56
 
57
57
  # Check my_test_plugin.rb.sample documentation for signature details.
58
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
@@ -17,11 +17,11 @@ module HybridPlatformsConductor
17
17
 
18
18
  # Check my_test_plugin.rb.sample documentation for signature details.
19
19
  def test_on_node
20
- spectre_cmd = <<~EOS
20
+ spectre_cmd = <<~EO_BASH
21
21
  #{@deployer.instance_variable_get(:@actions_executor).connector(:ssh).ssh_user == 'root' ? '' : "#{@nodes_handler.sudo_on(@node)} "}/bin/bash <<'EOAction'
22
22
  #{File.read("#{__dir__}/spectre-meltdown-checker.sh")}
23
23
  EOAction
24
- EOS
24
+ EO_BASH
25
25
  {
26
26
  spectre_cmd => {
27
27
  validator: proc do |stdout|
@@ -31,13 +31,11 @@ module HybridPlatformsConductor
31
31
  if status_idx.nil?
32
32
  error "Unable to find vulnerability section #{id}"
33
33
  else
34
- while !stdout[status_idx].nil? && !(stdout[status_idx] =~ /STATUS:[^A-Z]+([A-Z ]+)/)
35
- status_idx += 1
36
- end
34
+ status_idx += 1 while !stdout[status_idx].nil? && stdout[status_idx] !~ /STATUS:[^A-Z]+([A-Z ]+)/
37
35
  if stdout[status_idx].nil?
38
36
  error "Unable to find vulnerability status for #{id}"
39
37
  else
40
- status = $1.strip
38
+ status = Regexp.last_match(1).strip
41
39
  error "Status for #{name}: #{status}" if status != 'NOT VULNERABLE'
42
40
  end
43
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|
@@ -48,8 +48,9 @@ module HybridPlatformsConductor
48
48
  # Follow the last link recursively until we find a .xml or compressed file
49
49
  current_url = artifactory_url
50
50
  loop do
51
- current_url = "#{current_url}#{current_url.end_with?('/') ? '' : '/'}#{Nokogiri::HTML.parse(URI.open(current_url)).css('a').last['href']}"
51
+ current_url = "#{current_url}#{current_url.end_with?('/') ? '' : '/'}#{Nokogiri::HTML.parse(URI.parse(current_url).open).css('a').last['href']}"
52
52
  break if current_url.end_with?('.xml') || KNOWN_COMPRESSIONS.keys.any? { |file_ext| current_url.end_with?(".#{file_ext}") }
53
+
53
54
  log_debug "Follow last link to #{current_url}"
54
55
  end
55
56
  current_url
@@ -57,7 +58,7 @@ module HybridPlatformsConductor
57
58
  )
58
59
  # TODO: Access the user correctly when the user notion will be moved out of the ssh connector
59
60
  sudo = @deployer.instance_variable_get(:@actions_executor).connector(:ssh).ssh_user == 'root' ? '' : "#{@nodes_handler.sudo_on(@node)} "
60
- Hash[urls.map do |url|
61
+ urls.map do |url|
61
62
  # 1. Get the OVAL file on the node to be tested (uncompress it if needed)
62
63
  # 2. Make sure oscap is installed
63
64
  # 3. Generate the report for this OVAL file using oscap
@@ -67,13 +68,13 @@ module HybridPlatformsConductor
67
68
  packages_to_install = []
68
69
  KNOWN_COMPRESSIONS.each do |file_ext, compress_info|
69
70
  file_ending = ".#{file_ext}"
70
- if local_oval_file.end_with?(file_ending)
71
- uncompress_cmds << compress_info[:cmd].call(local_oval_file)
72
- packages_to_install.concat(compress_info[:packages])
73
- local_oval_file = File.basename(local_oval_file, file_ending)
74
- end
71
+ next unless local_oval_file.end_with?(file_ending)
72
+
73
+ uncompress_cmds << compress_info[:cmd].call(local_oval_file)
74
+ packages_to_install.concat(compress_info[:packages])
75
+ local_oval_file = File.basename(local_oval_file, file_ending)
75
76
  end
76
- cmds = <<~EOS
77
+ cmds = <<~EO_BASH
77
78
  set -e
78
79
  #{
79
80
  case image
@@ -85,7 +86,7 @@ module HybridPlatformsConductor
85
86
  # On Debian 10 we have to compile it from sources, as the packaged official version has core dumps.
86
87
  # cf https://www.mail-archive.com/debian-bugs-dist@lists.debian.org/msg1688223.html
87
88
  # TODO: Remove this Debian 10 specificity when the official libopenscap8 will be corrected
88
- <<~EOS2
89
+ <<~EO_BASH2
89
90
  if [ ! -x "$(command -v oscap)" ] || [ "$(oscap --version | head -n 1 | awk '{print $6}')" != "1.3.4" ]; then
90
91
  rm -rf openscap
91
92
  git clone --recurse-submodules https://github.com/OpenSCAP/openscap.git
@@ -97,7 +98,7 @@ module HybridPlatformsConductor
97
98
  #{sudo}make install
98
99
  fi
99
100
  #{sudo}apt install -y wget #{packages_to_install.join(' ')}
100
- EOS2
101
+ EO_BASH2
101
102
  else
102
103
  raise "Non supported image: #{image}. Please adapt this test's code."
103
104
  end
@@ -111,7 +112,7 @@ module HybridPlatformsConductor
111
112
  echo "===== RESULTS ====="
112
113
  cat "#{local_oval_file}.results.xml"
113
114
  cd ..
114
- EOS
115
+ EO_BASH
115
116
  [
116
117
  cmds,
117
118
  {
@@ -120,21 +121,21 @@ module HybridPlatformsConductor
120
121
  if idx_results.nil?
121
122
  error 'No results given by the oscap run', stdout.join("\n")
122
123
  else
123
- results = Nokogiri::XML(stdout[idx_results + 1..-1].join("\n"))
124
+ results = Nokogiri::XML(stdout[idx_results + 1..].join("\n"))
124
125
  results.remove_namespaces!
125
126
  oval_definitions = results.css('oval_results oval_definitions definitions definition')
126
127
  results.css('results system definitions definition').each do |definition_xml|
127
- if definition_xml['result'] == 'true'
128
- # Just found an OVAL item to be patched.
129
- definition_id = definition_xml['definition_id']
130
- oval_definition = oval_definitions.find { |el| el['id'] == definition_id }
131
- # We don't forcefully want to report all missing patches. Only the most important ones.
132
- severity = oval_definition.css('metadata advisory severity').text
133
- severity = 'Unknown' if severity.empty?
134
- if !oval_info.key?('reported_severities') || oval_info['reported_severities'].include?(severity)
135
- # Only consider the first line of the description, as sometimes it's very long
136
- error "Non-patched #{severity} vulnerability found: #{oval_definition.css('metadata title').text} - #{oval_definition.css('metadata description').text.split("\n").first}"
137
- end
128
+ next unless definition_xml['result'] == 'true'
129
+
130
+ # Just found an OVAL item to be patched.
131
+ definition_id = definition_xml['definition_id']
132
+ oval_definition = oval_definitions.find { |el| el['id'] == definition_id }
133
+ # We don't forcefully want to report all missing patches. Only the most important ones.
134
+ severity = oval_definition.css('metadata advisory severity').text
135
+ severity = 'Unknown' if severity.empty?
136
+ if !oval_info.key?('reported_severities') || oval_info['reported_severities'].include?(severity)
137
+ # Only consider the first line of the description, as sometimes it's very long
138
+ error "Non-patched #{severity} vulnerability found: #{oval_definition.css('metadata title').text} - #{oval_definition.css('metadata description').text.split("\n").first}"
138
139
  end
139
140
  end
140
141
  end
@@ -143,7 +144,7 @@ module HybridPlatformsConductor
143
144
  timeout: 240
144
145
  }
145
146
  ]
146
- end]
147
+ end.to_h
147
148
  else
148
149
  error "No OVAL file defined for image #{image} at #{oval_file}"
149
150
  {}
@@ -12,7 +12,7 @@ module HybridPlatformsConductor
12
12
  # Report tests results on a generated Confluence page
13
13
  class Confluence < HybridPlatformsConductor::TestReport
14
14
 
15
- self.extend_config_dsl_with CommonConfigDsl::Confluence, :init_confluence
15
+ extend_config_dsl_with CommonConfigDsl::Confluence, :init_confluence
16
16
 
17
17
  # Maximum errors to be reported by item
18
18
  MAX_ERROR_ITEMS_DISPLAYED = 10
@@ -34,7 +34,7 @@ module HybridPlatformsConductor
34
34
  at('h1:contains("Evolution")').
35
35
  search('~ structured-macro:first-of-type').
36
36
  css('table td').
37
- map { |td_element| td_element.text }.
37
+ map(&:text).
38
38
  each_slice(2).
39
39
  to_a.
40
40
  map { |(time_str, value_str)| [Time.parse("#{time_str} UTC"), value_str.to_f] }